From 52d757b25e5b71537b69e5949a696078371349f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sun, 29 Sep 2019 22:22:35 +0200 Subject: [PATCH 001/100] Basic compiler in Python with ANTLR --- .gitignore | 17 +- Makefile | 11 +- README.md | 22 +- math | Bin 134656 -> 0 bytes pyxell.sh | 1 + requirements.txt | 6 +- src/Checker.hs | 1018 ----------- src/CodeGen.hs | 561 ------ src/Compiler.hs | 1232 ------------- src/Libraries.hs | 243 --- src/Main.hs | 80 - src/Makefile | 13 +- src/Pyxell.cf | 203 --- src/Pyxell.g4 | 32 + src/Utils.hs | 414 ----- src/antlr/Pyxell.interp | 41 + src/antlr/Pyxell.tokens | 23 + src/antlr/PyxellLexer.interp | 59 + src/antlr/PyxellLexer.py | 88 + src/antlr/PyxellLexer.tokens | 23 + src/antlr/PyxellParser.py | 540 ++++++ src/antlr/PyxellVisitor.py | 58 + src/bnfc/AbsPyxell.hs | 360 ---- src/bnfc/DocPyxell.txt | 268 --- src/bnfc/ErrM.hs | 36 - src/bnfc/LayoutPyxell.hs | 340 ---- src/bnfc/LexPyxell.hs | 505 ------ src/bnfc/LexPyxell.x | 185 -- src/bnfc/Makefile | 12 - src/bnfc/ParPyxell.hs | 3129 ---------------------------------- src/bnfc/ParPyxell.y | 1045 ------------ src/bnfc/PrintPyxell.hs | 362 ---- src/bnfc/SkelPyxell.hs | 194 --- src/bnfc/TestPyxell.hs | 75 - src/compiler.py | 103 ++ src/errors.py | 5 + src/indentation.py | 49 + src/main.py | 45 + test.py | 5 +- test/good/basic/calc01.out | 1 + test/good/basic/calc01.px | 3 +- 41 files changed, 1091 insertions(+), 10316 deletions(-) delete mode 100644 math create mode 100644 pyxell.sh delete mode 100644 src/Checker.hs delete mode 100644 src/CodeGen.hs delete mode 100644 src/Compiler.hs delete mode 100644 src/Libraries.hs delete mode 100644 src/Main.hs delete mode 100644 src/Pyxell.cf create mode 100644 src/Pyxell.g4 delete mode 100644 src/Utils.hs create mode 100644 src/antlr/Pyxell.interp create mode 100644 src/antlr/Pyxell.tokens create mode 100644 src/antlr/PyxellLexer.interp create mode 100644 src/antlr/PyxellLexer.py create mode 100644 src/antlr/PyxellLexer.tokens create mode 100644 src/antlr/PyxellParser.py create mode 100644 src/antlr/PyxellVisitor.py delete mode 100644 src/bnfc/AbsPyxell.hs delete mode 100644 src/bnfc/DocPyxell.txt delete mode 100644 src/bnfc/ErrM.hs delete mode 100644 src/bnfc/LayoutPyxell.hs delete mode 100644 src/bnfc/LexPyxell.hs delete mode 100644 src/bnfc/LexPyxell.x delete mode 100644 src/bnfc/Makefile delete mode 100644 src/bnfc/ParPyxell.hs delete mode 100644 src/bnfc/ParPyxell.y delete mode 100644 src/bnfc/PrintPyxell.hs delete mode 100644 src/bnfc/SkelPyxell.hs delete mode 100644 src/bnfc/TestPyxell.hs create mode 100644 src/compiler.py create mode 100644 src/errors.py create mode 100644 src/indentation.py create mode 100644 src/main.py diff --git a/.gitignore b/.gitignore index add6a669..ab3c56bf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,24 +1,9 @@ -dist -cabal-dev pyxell *.exe *.o -*.hi -*.chi -*.chs.h -*.dyn_o -*.dyn_hi -.hpc -.hsenv -.cabal-sandbox/ -cabal.sandbox.config -*.prof -*.aux -*.hp -.stack-work/ +*.jar .idea/ *.iml -*.bak tmp.* _* *.bc diff --git a/Makefile b/Makefile index 6b7e8396..cf7cc513 100644 --- a/Makefile +++ b/Makefile @@ -1,12 +1,9 @@ -all: grammar bin libs +all: parser libs -grammar: - +$(MAKE) grammar -C src -bin: - +$(MAKE) bin -C src +parser: + +$(MAKE) parser -C src libs: - ./pyxell -l + ./pyxell.py -l clean: +$(MAKE) clean -C src - -rm -f pyxell pyxell.exe diff --git a/README.md b/README.md index ee134cd8..fabdb685 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Pyxell ### Clear and easy to use multi-paradigm compiled programming language with static typing. ### -*Note: due to limitations of BNFC and Haskell, the project will be rewritten to ANTLR and Python.* +*Note: Up to version 0.6.0 the project was developed in Haskell with BNFC. Now it is being rewritten to Python and ANTLR.* Motivation @@ -106,21 +106,9 @@ Requirements These are the software versions that I use. Pyxell may work with others versions, but it is not guaranteed. -* GHC 8.6.5 with `regex-compat` package -* Clang 6.0.0 with C++ standard library -* BNFC 2.8.2 with `176-source-position` branch (to recompile grammar) +* ANTLR 4.7.2 (to build the parser) * Python 3.7.4 with packages from `requirements.txt` installed (to run tests) -For BNFC to store source code position, install it from source: - -``` -git clone https://github.com/BNFC/bnfc.git -cd bnfc/source -git checkout 27079ebf057cce51e33afa619036cbaf6fb78398 -git cherry-pick 90e28a4cbecd8cfd4a154f2009d9c5dd4a2dbc78 -cabal install -``` - To compile and link a Pyxell program correctly, a C++ standard library is required for Clang. This shouldn't be a problem on Linux, but on Windows this may not work out of the box. In some cases Windows SDK installation may be required @@ -132,14 +120,14 @@ Usage ----- ``` -make bin libs -./pyxell code.px +make libs +./pyxell.sh code.px ``` If the program is correct, `code.ll` file and an executable should be created in the same folder. If not, errors will be displayed, pointing to the erroneous code location. -Run `make grammar` to run BNFC after changing the grammar (`src/Pyxell.cf`). +Run `make parser` to run ANTLR after changing the grammar (`src/Pyxell.g4`). Run `make libs` to recompile only runtime libraries (`lib/`). diff --git a/math b/math deleted file mode 100644 index 178bde10e92f4dd26d16a398dcc6507e38d4e914..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134656 zcmeFaeSB2awfH@g$&dgECm_KfBBKP21~fXT!33Q{X53QhATNZM04gB9fT%rjd;w7iP@U(y_L)f{+IydS zpXc-Z_2iS8v(J86d+oi~UVE*z*WOe8%|{$Ahr^N0CzWzI*7B4;pZfl*%m)y48vvk?_Ze8}R?|K$}>&`pB7xsMn7SFQCou1q7^!Ts7#`E3p z-F(aW`T4_&)1aTY`svw!JO9n1%%^GA8)HA>y=m5KV?R*Oy<_iC&$q_Dqw>8~^eoSd z)A=r*wRh}B_5Rw}PgVMxMep%+%zAySJil?pUbhZK2s=NmRK7|<{|mg zF%oqA?3mM0qC)AfvMk3tqXtFPWI3i%sqcW(ar&U>lYDDGQwrK>fqN^TW5? z6()6pv`!F`wx`>XDdcfD7M{QC=5K|+<#3F8oLFEwe#P@jo`e2;pm)BV%~3OsgaRra z#?$&rzQp-U?To68g5YTKee#ujzVnyea>w@;IaJ#n^noLnd_#B+`tyPHpx6ID_`m1@ zBl6Tx@9fw^}lufeRBce{r!tmN23lO4>FL`lGxN ziiL`ogvhbbh|MjoHF)(I@sJ%V3z?zfGQ*r(>{}m&|37xx^|3 zx?$!@h7!rD@GCb6`3!P-tjoO)$0O9cMAd7=-M8gtIr?$%T|wIA>Ufw)t69Fr6Gv^A=!92YsUW+pxs|-RNb$<}c&=|-N7!Ngh60=I z;7=vES;pGBnxM*8(x%=gN-gbh7_(CbxA$s5GrmS_L2<4T3l|q$N47G%!Ot>)4GFE` zGM>JRj`*6w^w(luns=M|vvRT=(PK`n;T$3wyCSnX++L!1q1lC#Yn;;h&#s2d3c!~( z4qMB5+i%^f2RBBXCqqf2%lxp zAG7RE9%Go}471z1fHnoZ2|ZquV4%XBxRlw^7j<9_>vWG_+^(JKb51$VV61ll5t5@+jkJ)2+6~eSpNq zuIFS}G=E!@dnfPK5XRqncc`>4l6_GkIodispk9W0yDTTHJo$bzZZ>Hg2UXSHU1u$LIDpxMZmg~K>*Pyje8^KGO!g=&+!>5F6W{|ZykAvu9WBlcJ!^u zzZqs>^9iS8osU$rHM;MLQmC>sW$f%Uysbtou#bvPf1PK$`*FUVPdjB~YG{`4hPHJKox@s2OH@A>h0K<<)!%eD7Eg2Uc|Vnk z+-)p!=Ot4qNV$u5Bc4}KKTU**$W3d9Q)=-vy(ls_RNAUNtB*F~bBYXC55Xa1tP92S zHW{(e#led0;UaTZUZ|pF*)VfPuB#^ybTj}qf(-V@Gl*by1Q+*we? zD|7}0(RO<@?YwmRDaV1n9>aA1`WV$cchRrjn(`Ak zvQg0%iNKZO)kO?sQL1oNP_PNeTS2PuR^FJ57fSdVI~=d}*zXnc9`I1Kz-Za$F}#Gm zfda$ZVypuV{s2Fb7wF2dFK?tmM&~Bcz`k5>` zI5p{g!wHSFLMW^a|4E$9M|U2h&C%R!>piL@kOe4~N^fGC`UxSZ7ZK9#C6h2Z@xlPrbc z7PlmU*Ajs#0S`>HaJT~9*eQvu?X0?uQjH*@BK5UDmRh3;R*l9c!ShT(%d|_dvM%gk zT`pwd;5k=%H&yu3Os6B-=QQH7Vw1&Z!~+MlN9hoMu_2ZIkqlCsFID(&1X(8Yp!VFj z;j&(WB^u_>ihJlQqke;QnGBpa0jq`oLOUa$7>o2u!_`t>u4eFo zb@mK4iXywCYa2jq#ENavwS5E}+G92wW&B}}GXAFl)#k;9>8vkbwEVmKBBw|1D$0(G zF%3_=e&6vs-i!8StM`QuPunJKy!aFzNfxjQqcIg` z#%;51qrTKGBifd0RJ^(DU7=LusBm$)5a~@qlV5@L=2iu37mqK)LelzgV5KIVDTFOB z3yjzu#YNX%r(a7?7I?cl-0ywnR7krMm<<5xqtHAJ{ zSaxw>_;%{eHV;8`NT3!UkoFAdC)TDz~q_pXYAx=lQWcoscg7BHsm&)Tb_tVGz zo{IK)Ru&rwC^lM#_C(9_(SFl?M#|~Xqn%EF%zX;MWDaq|2sC~e8C(B1hjvh_PdP>| zbSxWAu55CB_=VH4RwO5X#lic|@pfsy0yDq4S1=R21S@U*fuYN#Ko$j_r+~Kpz0u3> z>~JSOwR@<;y`B)1FDc`e&*l5{ly$aH_764B1w z4)?tTWQxb!cN5Z&w0Xj(L_0kl?r-x7fs?S1kWfN7RAt`5jEQb2&~LoyM#w?&nwzyO zp;>uVf2m3L_!Yg{v~q_GZn(JUI(@D_Prp_d;m&86z18NipxGHT`$FdX*7up?)#k0a z)#jx^^QQ9Z(oc^BvKQ;-N<(XW9V~=A%8b~3#pM-VE!qq*m|qyKl<7Z_9jZ8}J@6mo z;U!mIqCe*)df$lxht}{zJDBGTpGq0w6h6XBl;Mnf~rYD34HHI9E@#1}b`%ZPv}MK*jdR<&p;&c@&5g2auj7C&$OHbUx$M zV>1oEl%t*1t_^ys2Sh2AYG)#X>;u=*4AmE*I1*>jyuK`G-d-LwmlHmq-=yED-=Hsm zai}%g1v|6u$>mFDxYKgqDC>E8gqIv^IkCwPl$;%f*Ye2@Q0i2-$nIH9Laqoaw)i z_SB|ew68$>=TQvw;-GeC%VKR|B3R#7NA8tn+WJX;1jH;Y`T*}{D-yb)X!r1c80PVy z+19pL{bk^je>C}>%U;$-IzukRl$HV`y8mFPw51w?Z|ThmS4x5Y{O3BgbM*qFzD4RI z_)9)d2UA@<5`232>|4y&!N|+O=)To9knHd&+5{=!pcbiu0+CNi*TO?)Xe0g3gM!(c z6C94cd~!Sv$1a}l@cEQaHt#R<%;RbC^zba;vybpWJ`Tb?JWF^6&F!Ih{+0VusVcLf z{tjY8uFfF;W}BYczxWX&Hs?@m&auU@IiEMpNwvxQr?EMIXGxuNR3dmDj?FnCL2ZIx z=JK3RVsnm@{|nLzvRH>1SMM6+IT z!>8&uNLr>$x;{9mu)rce`3iy^Egtue#wK%ZZngN4fy_32$UEX_u;XfZ?(XVI? zPaLHE#FX4oVH7MIVpJHpD{|K5(`8%Ewdvew>{_;G|^*88fBP0)^L?AqM7-Rk>cH99S3f5 zDB`zazG;|;L=OKLbAh=nRoH#Glx;s*Dv&n8GM%sjD}itsbI$@)v@fMZpegj>Fr-mb z;9me5!Dy_Rf39RWmI}XR9iTuozlir#a(n;OSN&w>XQi{{SU zumXh4!qaGn5#5&3&DNl~!|-lL>ul~6-KS!g)^I&s2*oUnsi3tN8-}C0VuRMO2b|3a zlksOqo&<`~xHmk)sCY|j_yY;Ozv8Rf{L7Jp-L}XXJkX%6p|fvsh(R z-ao0liSR`s)BRD>=~(Zhc`S!0h^5<`H$k`bRnXfr`@u(5mnNqGXCoPtYY9A0fSy$f zy{*pg+!pj6pZ(zTDziv2qJtyK)QW7oP-NRdOO-vYBBgj>^Kib=OgnE^DDHLCD$UV#?#78(OdYR0scwsva z>vsxjpY+-Yfx72Y%s}0#UCCVOLi5XD75ynZ70ky3CeuV<*4r>25Sa5$g4y^bnCE;A z%zhgj9q=01UIQ5O7&y+7DwtJL#U%n8S(sKI6nsYtzUKlPeVu-IH96c46mG$EcQVWP z%G{CO)|n>p{4XFdsnz|VqBN;i=HEK_l*5V*)TfMU>kg+a3GV{ST%Q7oErlH7f4jB3UYSN3b2*#w@BIOZ9^dPIkRw zZgRJiJ-s5?3zYD}CDG}J&`TUz<7&EJS;-e`*X;0KKCOSd#Yb8COX!8pXTXgAS_$We2p`tolOnHu zqAfVUbJJq&{scug@ZKW%%OyX?dU=^r!HcndztPfraj3K_7(J%lUqa^1Hh}r>+dvlZ zzMz{=uK?n+h44l``}pkVeK#Mev`1UN56mB9z@@4eu(sHc3Z~Sn@JNPY}JHFZu7rqftP4^dj$hAjux$G2hsC|Pt8ooeE z)9702=oLn*P4EeDDk_-rGaEqu^C+>ryBpL~AwtE1Bsm31dUe5+vsG?EsW$%}m9y48 z!+uT~)}LnQrzuoCf6`?tzBd1|bp9;6h8@8BfOI;umH}8WX%qSu&pT9&)K)9qx*?iy zM)zff3#412mIQIFf%(@-UZTt zHa-G_=GC^Q5zgRCF+kLgzgZP65LDfrs8+ONEK$oQ0GlqFUwDE@f%ld2wS^^QRMFZ5 zDTlc1SbnP2I#qSR{@y#`nf?6(o!{AN-H3T!m3U-B%dz`gf@Vu-V*YkjZT_ElXb=B{ z?h94q|D2aqJ_6sDz}St)N;)^5C~%+6+s4DS`G4f8;A}imTlly{o|vCMhv$a35B;ax zF_1ccH$~kyF}F6nz5jRaD>H#9nZW2w-~?o%^1N*ae(!cFc$9jYJyum4E9qn+gA)_M z3bs>A4SKsb9+*Gnj}lHUc$d%1d|n}a z%AZty$6nY@hHfxeH|6OxDpMZJ1n$fP=4AqvDsbp`?{C~$yCM0_M+8zQaZ-~4(w)iq zt4tu42`shq9oV>c{wo^~&!18xSnXV}0|a(})%Fcbh9Oqj2LE8>~;qr_V~r0zRh^XuPQ@0vjyIxR{+^` zXA7`+VdEizxkZfXE&GRrVpCm)xzT9p8)BH*=&+$&EFLYGjE`ll9MUla(`L#@Z45@+ zYt_1?o*z3S|89#*SdaQwQdU8O4)o|)fH1^_pMm13rkPVy2KB33dt*)fO) z$j(WlVb}H=9kFe53wzac5YWjgH|nDt;#~ zD-JUR)<@?_o0YIQ-Y_4Q?AA{uF7^uvv)5?Eo|5bsI36J0*PKzZ`a7NG_uF4X@j11+ zxjSe+Af^50Ysg<20?ZE~9GmsEBpBPR>iCRQ$dw4ibVD~2=A81z9jo0Kc*0Xj@a~A| z<+|B+^l)8kncv)9cYNCYd3tlpRA*wJJ3A)}IJ(hPV5EYEgpvvAvRr>@!XMLXjFfK3 z{7^PNvwk7;F?A$6xRi%>eviHNjGPeH+HRdSA)|f-W{aru^HHp z+6;wN=xeYFnlr#En3`osDEUGLt3Yfkm&FfbJ33IsQCOo)h+*M zex!B8^q#h-T`vMFWZHkq6%Eg=6=Wp~qSLpdu|PnqW7d9=y;cuNUS-`8o85x=g$`p6EO^-n_RPi95(F&M|xOZ&_swe1LwQ2l^0 zzwYiLhqTuj{iT%oT;{IeYfpiBVvA>gs7yre`VVB+hiSX;O(v=rp4gb62xZy7V-s5@ z*qoar;u=I=W}&b7pka=(K36*?*LY;RrG&W`@E!@7*d0&_uVKHF%C9L1nOR0GE*Pk7 zmk{%>M!xX52p2E)^L5u^e=JhR=MjHX9L=){sj{2_LIjZ{~&v$8CFRKE;%Iwxglf$e%T8$YeVRH7+Ma%ILQH?5b_ z>BqGfhgy^ULYudQH3Q??n&H;y8EQ2;q`f%YDo|;6MY7?nV42f=3gly>>TJ$!0=c$k zSM#Q(QzX!XR)ewUWStdS7}%Hb80LJ2i&=9_H2FO15e;d@E7wL6k zuP%~pKcB-W-Rh5DIn?@N6)Jp;#b;)Lu&bfgF@!BC87)6c=9&y+#mpisYO$F`Nf*8z z(F#XoNaKg$tXQcaW+<+BhuS@7?XmYC()0?B1054vBD9J-$SCVE>gaHc0U_%<_}C`=xSBUM!t zy|=`neg8T#HP6<~YbM9_eU;x_S*ZQd(q3$dS{~MaZB6#M*kZAhB;whvro5N5SlO|v z$;0+ZiB@^gd8<68(bw3e8QYSj(M9Es-UkMX zOpR7DUD4 z)8wb;dQ*OFjjmI*e_; zV_^3an;UeM5vwX=9?K)>sPxb?B32 z%MppHL{W6*RgrU4BBmfo6v@@PegJZrg4{cS)ac!nj>v(^pw{pwGF67OhR5YOS8I?3 zs&YyA&dTqEZ>+o{d`V?Ee0Jr^@R-Vbo`!A@klLYF${uC!E;}qjRBx9Z7Ib=F;0rmU zsIL5u$OzhL#Pp)IbQePPTFBiI(<^&L#R87(OZLY3vhyz)$PbQ=0upJd!A+5i@N^eT~f;2(I;PorX#K1I-pD(SWk(p#`y@xr=>VBNhwY+2~94s&*yH?f#~nHq1Z z$zS{p0iP}4&zH~;RZ%;sQK7u=z?e`R^B5u5saNRd_xnl5QVQA=+YJeUp1!MS=IRO zRb#T$%{i6P_p`#D==*GtN8cYB9>omL4;R2PCNFyOV|MkELtuS4gN0&2qamSd&lYIU zwuXz^^|{XNRuZ?f!W+E!Fv!eiU(X<(iCXitY`dzpS@>d&Py|G8>gA1zyT=G{z4)yo zIBP}s9g8ONQA3iaM^3A|Tfa4&>rL>S8OehLWrnSlFC%_;t@{Q-#-bh(HLv=FCM$)T z5k1q0zLd*=(C;V|No2|gMU_JPaX-Pj5vyX!cu+DRb{LwU(Wo*|YVAc)>0&ZI^jeh% zOOmfoSriwF{NN6nJp%7vZFuiX+|W?`VWsJx7BU}J@$3=8dlp&LI<0AQpa&UR_mfV1FYYZDRZ`?=bGBjSvir!| zJ9#FQeQGAxp!ECHw!>@#`Ed#&|Lig!f~66Yh{?gqNh^zt^=HyG@=?4hm-YB)dzHRi zwhj?6>ncY&B1dD_Fk-T72-(#1>zU~_ZI2nOjP_>1F?yZh@zG;L!w5i7Nv$B3rV=QG ziFKvjtMPjw#D7&?PN#~G;c$DjXl`;?$Q~d1$*(F z0swLi$(Y%rHQUoXr%!Jx=%|uyF-KaJ2KB}+Ms}ODd(h&i*5yGueVPxmH-`i(jap9y z4!zm($M4CG9&@k0C0xX$2uU-qk*}HZH68cT$O1TwXirL1`;}BJGTAD=v%=q${nsn3 z^U&MVOL3}1mg3$LAz1Txvi&8s9KH0C;GA3=?Hv++S|I;kI`y~7pL$ctCm7n0^Ii|U z?@0!NPBWMGCFh?U8y;dTB3_ro%C98m7}`rDOw^v`d;HfWzeqy1wq|Kxn*UH4`%H~T z?jC9!eKXqSgPRNets2@KdQJ`2xaZVhjh4aEB*QQnEO(NPrq_&U z(iuKaeUIZiOZH)3i!>UG#L;I+vJi(K9wW48XO=7`;BLOUq-jL^Okdjjw`{NuZrjR? zsN&Elbvo2pRjwm^8c6G6fLd){Q|Z_Ih(ogt;nk-LuO1&go|%PZUzvqx2%j2`UGC3Q zP}V6HT-3u@IjuIVSIMGG>Td>8t@+q}V`?01Gn>8tu8(f9@}6`?R$1e(Mhjk)V0-R@ zH)LnHQ;++y&`4IC3X2SyiRjxH8L=$3ygel78r_o2VO@yeU08R|G)LsTOlG$1T9i3b za_%Q*p30d&o191V>CW(I>z%Xvhi~1aet}lGPGsb&w0W)uYs8K%X=?<0w(jn^P{kgt z;a_CD^%^k(nTk^W$?&E`*AjgRmNPUl3P%Q#$Dsn~8%n_YF*O~+zfJDpBi&T*P>k5yeJ>1$?KaFsU4g8ERl%b!wZ;f^ExTII~1?(pF z)Ebd1&g}6YB&t&A&kO3ye(SH!m- zSdQc+>qYNKUa-DV9wqCW<#Fcv26>#ezFr=utp8_u?JzjcjS9icF0YUUs|KZR{nUwF1FzU}t~xX45_971=wF<&RKL_Sv85Vt-$b z7dVJXA1`R!k#<%!V)?xR~)t-?g5F-n?t61zRKUF zn?1Id$=g?yZVK+~s`hq5>P_dw%Z`|abBx$& zY{umJF8Z+UinAh`ui-=AnzMY`qZ^G>NAl8OiW#>zoYS1s=@M~K3w110jbukH&^cnIG^Bfl0PL))uTjwE2VVRUQGk<(VY!2)|vcI8mcd89g; zbCQQ7x`pWK#v|dJVC)P*E||(LUN0DX6C4Lhb)*u_THUb);ZN(1ofVnd&>Eq_BP@^c ztDSYz&WgBcW^$-^2azI|(ea`Fz zO$b3E6`jknX>bMl8Ppg&dN5Scx%?wmG*`9u6qM4!*^XdE%Zj~0SC{G?Ys@Iw+F{yT zzecUbJxZ9@pmR;)_l}J~oo*__fMg!RPS+rcG8-bY%#N|TC-8F9m{^hZ_!+EkCwea? z)pBA*!wcoS9e6yg%_at)8}^W9TqU847wwceGyV>F&}g@>{PGB!fQMmPh7n_rI$rHl ziB;43q5UHkp#sE|X)6zFbjyrj3|>NUjw4nIvWmSa{CBN)3P812ZlKFmk{bA6V? z1*+TftAV%n5C_*V57X8ygk>rrlmSG1>R`{ZM5k>KvgnB|O!*O7sd38T6+tvyG0^du z&7@;;+@E%po%Za>Y3@lR2w9$OOmm+}I3jdB);f)84SGYZE=rL6zG1qL zZzZb&tm=&C_Yz^c2;_#@wbn?Dq98C)=0Cbznc<`ytx2QF;t1A4^@1`I*u3u?s=Q&}M!v zCzwtXQwvq#g17w?frvkWh?GYo?|rSvFqrg?3s6Ka&hjc4!%~HDV9=!D3Qoma$paZr z2za-cNNk>Qvd;l72X!n=kBFH{{JbB*;h>EO8v|7|y{4FZ>ZU)50)rv+FJx5Q_Cfc9 zqSBa7GZ!5$NN;|eaI(Xn&~ao{qK01D34!4$?Crr#;#-m%w8wDvP>zf2>{K&MPNHoc zMN&Lp;3f0KhLO+P4|ucwfJG7fTpVSNoPwe@Svo78@8)4O$e6|p&$XjYlc;}E!(Npu z*+;ayKikaF222zM?L5>nW<50&fN~b7{+Jx4QRfcDFTl^dD8kHDkQUBs%snVoky(P? zO$AiSU`=0VA9>AX&)<5XO%*u#Ye^Q^fRnyVZsO@_J7!@G=sPFODFBS`LmmimoUKu~{4)x;fUC9eLKoW8+y?2QWB>V&U^(So78s>KFrMCPk zhn^wtot;6xr@4m#HZscgu{L6bCpM`%OWLfBkdDCf?&v*D0T+1jdPgFa`d#V@&Mc4O z1Y&{#8unm*Y$uIOBnz#AQ~Q;!cR7r?b`0pIr@P{H^n)}i=KeGFqzc{k%O80`-?iC- zoO`V&Le8C{T*nlVmM2YjGpdPw z&V)(7qR{%`0IXZnuyP;FznNSJstQ4RM)VoZ+kA}=6+Qa&JjE}zS*Jp1W*-dg6Jow3 z()>eS8164C^Fqq5`D)q!N>73p2E6ZtF!z~72=ft90DJFLlJ4}K80lW{2{oBsb6W_j zyXbA^^_;{$8uE4+JGUC%w}Loy@9Yj$v}uiNBx~uLYU99YIlISPY**V zZa;XJ42+<#aSk5CisW=9W0o8A_65DW1DFwo!bP5_)Mlz-{;zc8z`Z_$HK{Cr3w&7coM@!!FNB-p$qI%gK9C^ zOB-cyGeWhuhay3`b!TUF#Vc(7RBQ+FxfX0B;WP zV4@6-zqAj)dNW9G4SEmS9WNF$8G(Pw?GF`z)`0w{L}ljg;NvIQ4Yso!Z)IxtvhU}> z-tc-bHXF0e2e6nb#=8o?zS%`;O@sGX@Es3)rv|=Lz_Zr!B118?%i&uH-r`_{FpGgPs&E9Bi&9m}o8=E4U|#g@hLEeG#18q#Z0osuI8oH4GqSNzQ$&0pd%h>)Rh!opSRV6wpA>6(;9vojEfRIe1@aM%Ccm9=OBF87Q9|*lR)wu>a$mv_ z_)4d>oc@+oG`$XG#t2FM*uIsOfU~U$ntwME!L?jmL7kIiAT9wR!l?WCi>QM8AiO(L zg$2|jXuX`ww|W3=JKZvO(iPb7<=9vk767rAVH%B$YZ`0)irmkMh=FBd1^Qyf*n(Y# z1Gs_aJgV5?Z$dS|9{`bxO%-RvA{az|3TpmVs*P*{(0l=O7J!m}P50NOpejfWTPN_X zyLdg~j;!HmaQHlRb4IGL&aEW69CgdimUC?z%KAcFdiA)GWo^eT!oE@CRyKC~<-?F1 zD&8Y)89`siXY9lK6*v85RYC2k-FC+{?qzk7zB>)V1qZ0C+d6)|>bukFyK^8V`c7E_ z(0@QfFx^h~{eVt5x%)OtZxu1YwP&4+$#=@)iY%OHls|ZDR*=oj$h#zI&kieXvE>4# zhT#)x8!*$XAbJ_wr^f=~R{dJ!Z0j6Vlj@tlBL}m;hnK5#F)TUeCt+aVv^*-z6m&NEb5&uxEJC@!&wYVB-*%^wtqW9!F?;q#W)?iQyShl6(ekOGY zpk&4HVrEII_AGvm`*LYa9`*T}%R+JXl3ygL!|aQ0%fj9{MGL^BQ4k52Muw&HP>0TD zI0?$hMd9bKIIcDRhC#+q5Wljga_GvTKJCT!Xrd=MF@EJQD#vEtf0sNZe&tI8?_Eh3 zM-M?_ByiR;+74X{bokA_>?W!d7)mO8=h>v zMh~WCz^8yia|O%fDSC4mU??njYk^&U^SE~hb?Qft`pwSxRXugb{)gD=>|amQD>{}> zjc&^gR2*71ERtQ(x*{9X+|Ypb)X`_0eisW`rcccdYUcV1{Pp~O$%kyz#m-x(mzRYL ztTP7?KZ0WDJJOLG8DF=m50Bl6TEpMeX~e+3w9j$xF5bRq8?j+JE`oFZ`%D{>lR+XY?9z|E`8Bz#00|W-kh!|qKIra)fqM@Y*bc&( zIbI-IQx`XQoQ>)gh#OAbY*Dv;tmP`iB3WQ3b|Qagv)<-abVeqhe0_&UJY?A%cE9(6 z(;>Hb1h5MNZWpgSUgn{=V}V+OirA_BE6O`(0q@Y|sjM`P z`zD60-svh1g;5i#PpW7$q%agNp^WWA+b!($urixCE zyb+X>Zydmr1B&W^90%tF19c8ip7^k`s}bE$)Yji#D34QK4}r(Z0s^ZD=-R&~^i(2Q z#CxM8oJJs=Nr)y~i*@bJ9u9%Nos^TD7N_Z^yn?ZU3Z}flbFuc`hs3|KSesiY@8o=! zcR7?erCOz5H|1URthI=Lo%r#$sP~dBi#Y{Kx%|JX_Y<^sdC%0v+6C^HiCFO+vXjLw zGKv_Qp5!BkMdgs70(G7pzeh^_R!UL6WMd}v0}Kd+L3%-wCmr|Y(tjtNI7*kuIY~N7 z9YvLV-9qR+V%!__CxW-kr?b@ovj5$D+E9Pb;Q6#+|FQo0wDH)<^C^@1|9C#ZG5+C% z8v73>l+W@1*?f}YcpPB)O~mchV0TIZpX)*qEF@Wrc+I&L97fJP#~*W5e6W z){U>{g(HCL#y6<|F{>r{@cc{f!fzOeAvdx!A{O(b}Qb>q$%f2pwGd1 z#7;hw{7@Fp!Ua4xyxseg{8J?2@PbVnkG;UFEB;DM>^=Kt$k^^EP=uxH(G|7e5Jd9zn(5F_Db^isC}Qar^{-Sh!uPu#0$E zqc5>{ZN%ZSR<2)VIq4K_woEp=Y%k0Z`!@oVSdZ9b|3!+Ljk$t*tkH&Szj4nTjRX(n zaowLMP{*AD;Z)%*6!dnPeW}9R1q9HIRADVaMD2pcR3uLuFIz?aT1Io2}{3 z(T4cXilw){a>583@8^Hb*yaY=SKvtuoPEdCasit1 zH4TZy4wEO>SpDfZ8BVh3C_^W=XWaj!Y&djtofHK^-opE-9*c|^M$A{M5v8zy;J(TV zuevPxN1H0KF)=?d0PzGZ*!!EULqGFd2y)~^eRbvYR*&KBpX1~gG zYPJKbwc)h>9RV>_*hwbneZ53Ob|pAtY$S?32RQTIJhAF*_p=dPF)Un~N(5a!(Z0#c zK8foeM*Bvt9I_V0#L-sY;s=y6KSz&^(6uWQZMx}i$rg66>{rU)6*ryhPE-9C;bJNG z6Ld!s%_318E4MC}g!p)qIO*SPBVOyl7_<_w=)QDl|Hh=W&(a3LxxOEcps(x%*2iN9 z>bW$N?y=Lw7CUIX2i={95GZ%ctofId?v~j%UfnJ8;%|kY{IBnp@c~7gCcfrwnMYP2 zV-CJs=9Hr{D7)zjxm)HpM`X9;q`PIFhW@RG4=I&3eYebi5+#1?ciXXp?v`l-g4o&Y zyJcQ^jA??!7iVa7w~S!cf47W{X6A00d!!&)zjC+CGrs}lFW)V5t;%cPE%QT?*ZZK2 ze{i>qbg8;q<~A~_yJZ#<_y>2(Nap|6xYutNfowlz(O7pnwR73YJA~o<`*~On*{6ZL z#)vOPN6T@0)_AUm=8u8=+DUj^K_tp>b+X+Rx~sAI0uFxh{4)it*-HhQT|og4wHR1G z6-A6%z7aATihl_f!Y9n{7yp=``KsKg1+&CiUbdcyRz@n}oP?XmLJ$+g_lxTYD@LFg z%Y5)lUL^LSE!OW?!OTve0$)l14WK2$f*R7rU>K>wDWA!x%Pt%~14{Z@Vz?4uN=o32WWdWED`#wbjRdy_ON6v);hE+wne7p_jDghG* z3;+OxSZ+gkXb_Z9K*{XoDL98l00(|8aNZycI%5P*;Hz-190X_mVYQ~q+)n$}%k?^c z008?N+;cosM9Jh3+_b$o)e10Ow2W#^ztL2HQT;x`|CT|9Sx| zSLw_W6jc?!lqy8buzm_`bzP3Y9?mHj?mJC`clCqEJ`Ecmyx%>DC!IuVpXFz0?SO>h zh41iKH(KgCU)n)6|F6>8hhUkZwdvIIe}~q(KKTc z=&Z~=L$;0Frd`hZUBJ5I0*V+Nu&EWG?W)U$Rv!{#@4sxQPO`{lLm7kg;I*wx`MM}a zOKa~mth~=5C^(?T;)?MdzsJ?&yT+mu2yAVH4KuHgiXvIbxu*Dm=i|gLHroGVryaA- zpuuuRGCSp$b1d$MGKFwAO%<*^DBY2NcP95A#68w@-zM+T;y!L;OFn2L@>>uQ(}pdN zq_{shu1W0KNP^)rrhRoqv6wL)?&3cR)zckqt ztti~m_thc{;Y!^Hc8%p~t8{$5h`fv3%Xoz1QJ(YYFi#aKI&%>E zg@e%_q0rAwvAfIO^mB%J9oukMgJO<&5_lAgwuNGtagE4$$hZPm*sOeE0)oX~30lz&3)Qjera`+s(OYn?z>y+)i-(p}?=#fSkN82W zT_AC;c!w}`1~|!6U8F3UZ2iOn?^rKWOWmphhZ*o_0emskMo@+x2Y3~hZ!^dMs&Sjm zxP`AYD@yO>q*4L6Ek_FSHm2^sNbKGJBCd}tDI&;PU2`3dioWo$gVEWe3)rejjx?(v z)GUV8eK5Lc^yl_sTqY|@KNIU;Q-rpMDPG^3#{z5J$`^y7u34F&01XEaC+52?kE+!g zf0YvD-&AHcS$v;y_HGv^h<=#;6XhHg8Ug^W`v~S*f8>JhgY}C>%LURDk6}QJxnfmJ zVp+w%&QJJSu3S({Zro@}6`u8>_>CV~?4K4c{A zVb`0}%C%5Af@$-mbkX$tU^3d((<3~vk>04A9~se#R5-x*7vU?83~`1pJ2E6!9q%0V+Hl|3?mg zM-xm0d|`*y%`UG~H)6I|mDiiwXww+`gw8SNI_{rKCG*y?VVFv~*RjWf?hyV!x(iY@ za3{eh0{d`hs<53{Ih{{q$7^dk@tH5-DxAm=p!<^NM~}H8=Mv0KPLv3vqpF0l6BhPc zk*_HF^avbgDzVp`$66)_AeX)qia^Cl!1$%5qnZO(*v6FD#gfvbYzW=x-M* zs>-vDAdgvZ0PW9CJ4>7_{l9=Pus$Kq#;5=8chXIHT-@Ci9%fww47h3qU%0&0pKu`I zEZf5hFrbmBx_!~&4NvmKO9ARcRze`RqoJ|{G;E=2E_cOe~INz?n$ON~V= z)9fJqaD6I8(*e93SE_jy_^)OxaDj#A!?4UIL|-sGeXLmYwT9Pa+L!|y5u16JlgNRB zrobpEp^z;RZ|Qkf%NMym_L!_Q;W>=`C|^^gK;5<2bi>H@z$i!ZRO>v>q$CbR^K1Wxf-2(@p z9ox^~>+}%she2i?E}OEoxkGEXgi6_W)EcG`@Nq;)6Y_N}j-AWa;910>!wXTCS?yx; zfhf!C@5<}_oRht0A(Ooziz#LsxqZ3Ydhl8qzE1eQTxrpn#HZ^?>Bq=&QwKbYFrQDkJ4K=LaP>yzfIJOR-xc>sK`if7Pr8Cs35Gt_74ga{H99(v}ul#$?a5-R-QFEhhd$R$g%j)qt ztl~1@$X?vak!Kw{SB-DuY=+d@$H7TFm2Eoeolcaj8SWRse=xq|+Z3LZiD}(V^V&Lq)08D^9T%Qh#O#eJbt} zIOv;?+6o|}QSS}U?QluO$q*9l zT?iDM9 z9ERS5+^<=&No)L6L188CtS)Wk((iqo2f$+>eEP;iA9rp1EIf4M=et@O6C3+hV#Q)o z2ia46Cm7Ejnar!32KRf0@^WZ`=#P7U&5Ll9?>92|HClrhc{45gu=iY~_SICI}}! zW005GC=AXYJ&I@t=?}5)dJR<Ihm9Kg?GQ)0LDXaDW-9V+m0dAmgr;Vt%vx|>bKtJ~+|vu3DV z@p+tYZxV-ic_kZ^Y?d^g(*zH2Xqj zoTTx(0$#Uu&mP4-k@_<2_0a~4HuDisg`a+eG4x9(T{W8c-i2F0!e=(&J(p{6S!xu?6J**-s@>^hb z;ZqsVnn!Hv86Lg6fD2Kq&1GbZ{lYG{SL_?z)?|qrPz`K)RrbhK;l4K!`SXuIjJayJ zSeV9JL*y685F(Hq(3d&w{ZHIi@m(|jRr1IsBGwc#kl4GvleXHn<+JHTGygA=LzRpa zAZohFhtT+|T}Twq%f%<3@}p)f1*6RTW^$6_fc(mtxh=_kq1&u6bOqU$lU>e1Tn%C( zPT=l^_TN9#Q46SP`vJF5h1PX_Cis`BuXL0B&Zl$rm< zLxQ#1)DWz%CLd^g@G4kWV2iabR|N&@m&r+vDXOAw!MfX8hyj@FFOXfNilO~yJ+1XL zWbi%{dg&X|*AD?D)7L*$R+j(>FX9UoYdC>*UUE*)>2aS^-stL8kY#xs;`?= zLBaYA8|#&-s&rrf2liRA=a60c`T)9--N*Db%B#9V2*1{N{v4WT-E6Vl<$g6zPp5z5 zq0lN;k`n7WVDgv)$=;0DDs4vRF!O&a`5Bo!>ki6C^B?0q1uaf7>uuUvf=I4 zn>UJSKz=lJ;NnS#-h{928QMR`s3pKlb#b(B z+6vcVS8LOd)HaMwI8X7@P|?KS@7}tY^JI5bom_?+7FV2a#IH(m3DT8ZoJ1dtij5N z01WDnS@h6-WyacVN3S{Xn}6Hjsh0D-M|+Ky;|K+@$Xyuecr?sP6M0l}c`%u?> zQ#hA{QR`Lh(H87>A8Nly@T*ToDYp)P!JVo8S3%uyZL>Uv((v5vIgTXm5SiW0jeaJ_ zBh(56v96S}%7|l$k1OQ33PzNA@``PhpvRIuA7O$EPu`Z?{B`zPSw3qxKC);x6d7n{ zx#oQBG41NMXkw`GWAu)d=Uch_f>K6feEm&WEtcOe!^c{97Yw&XN9#r9R(4(*UuON4 zpSP@gUSSVXe^LDyKG(Y=difOX(N@E?t8wrBTo=J@1gXS~y2>m^VF3ZdyfU{Aci`*%=9L^;vz&M5=tp+1g@FaP>H@$%1J89BYsE4I_h)tICkopTTu|>k%^e z9aY)U=Zov8GAlBg>!dKf#OFA5bxWl6(Z9j|xS?EG76wc{SUVn4Lg&rJ9=U@heAJCBn(&E z;*M-51_<6GTy8Oi>nD^?M)dw{$LeA%BKA1BGUGHGvfgQVLA~9@{pM}SoZzA>vklko z#v}LN#WjP@uN0BRVvFUZgp6RxAO_3LzB--GO?#Ig-K{Xhox6Qi7Pl%K;e2zdqptD- z?hr5*;ZQ%5VTEzMVy*ot>(Qci#rg&C?jJ&M%F?S0XP&g-Ob8Y-w@>%0!%L9t5|LOj zaDQpe-)r0UYna|l3yv%WO^e4td&=9>AKM^QE{c$v?e7G|2_anUR}vaQ<*pR2 z3_RLY^+kp;e5o>OQH%iA09Wuht#^<@lc+m36CrtkiEPVYXfu-xCvkp-lWdmV??E#i zqEVAven1i3CVofpGx7thAddW#dI0%HoaF*n;Gn6k!H%BD#_<`pxcm$qqrh4buTW&J zkXxXfj}hjVNQt_ktzk!aL@?DtrYXVHCcPa%@xqr-l9?Yv3h+ zd_HEwKnGDjw4=C0FR+W(hwWGT+5M;;WRkgmqJs0doMzrR+M0Q*$vh$Y2?k-6A6I6s z@(x_Uj~2EDU2UOQ;A1{V4UCyQPvvtdKYzaQCG0tR9XGN@j)-US_Mq8?J96}((;v@f zRozkTYP(9ZS*LDR%%x!ja>rMk$=0J|q~&R~mpHJWw9wv;P0MfG`&4AbQKd5`&2Ncv z($?!mBoc+0Oy)HC~K&yO_&0ELkmnSG$_X z46NqgWw^Sn@A%S_*yZT`SAb;DQ)ShhlABn~T{168?6!h9VkDPlvi%QQvG6Db@d)@I zH~%GmZECQ6nvIovJtFyVhX*6ft>SopG-zBo4(M1RAXODhBCISbB zQ5~nPa};2&xS~_kL4JF{`m94(mrCP@@n)aiQB^>0I0+}aV#7PCJo3f`v8Ss&Z8FAO zWDy{w$s_spMG4`3Wwc-PNX|D+O`CdNGiR_}Kh)kN-(5;pLE<#?)XyHJNz=i!WzIdrU!r!C|rAGPxo8Dqs63H$b>MX#vY z|4XI=uFyv8GHgWr;DQ*(R;k}H<3|tX)hzA^)SPz(W+PwIs&821Zj>Hk4+7;{Og2h( zu+U$*Sp)OUKKUKRaftSEZxKTvo3Q*)#GgXuEfyCk?d$EMlO(`=mbjp~OU{4CR@DSc zJD6e|E)TYR;R>>i9yioE@al@c8`{im2Irc@I5tTgQEq1&KrhF)KoZo8|o&l+Mw7UxR;UuEEw^<%}X_~?Vx=23X|ZV~!p^J;+~zLq%@EQQ@y_f(rh zLgq)o)W)jv$`T}l(jLNwYhFz?P5{uGdA*{y#;6Rv8K`CT>0x7Y_pDgc%{?i4tbG`chhOrrC-d7=Xps%=dU(5SkuypJ*r2q%Jp-OKV+_8 zM`Wwk_;ZPzc6o%u>$~DcwzZqykR}hY7H^Qs)CS%R?uPOhv8(9$D+`j}4V7MEtc5$s z-)f;IekFJ%Kg2j>iBc7XipVRN($?P63reSj2U49hc`B1Cick(}WLlSqEW1K> z#%65YiFi%eGy2WBa!5`b#Vf*otzjmU8z|qw-KMA|6#juN)beCubl!*qs%!YVX;bod zM5pz%5F*!q>H*6$TQlc(%~l057;->jc~>~47gUWZ?^)|r#W==!vXxG^8o%Lqhz}Ti zEI?w4G6ScatQk_;Bc)P?jK-KH^8Qq*Ftr#Bsf^>V?0Y?BF-OqSV<0?i(PJkf{aTzC6Xs3)3AC_@7DtaAj|^yW4(y8lCeauI42&N8 zN2H%R;I=rAAh(rF`s9MHlPMt8r8&Shfx=O@eqq->0Bz<9#HRoyU%o2y#uDMqP?q;W z+<8Dt#1|HTL>)@=IuLtEXc}#KQ_aEWA)2N`YzN9uEO87`Ow&O0v#iL0K>Sge%~jHz zC5}<>>SRO4jlcnG9Q3<{gzj=pDzL0{mP$D6{js#}2%`%M%#oHj5vQh&qh|M#2y`JG z^+!bMMQgZP8q3PU&}kwkKOy-pB1)Q!!PIL~{o*XxJgJ0x-JGvM6wod=mEH`6JlkcS z3omzU7Mg8lp?h;J7bdLp70h;V@^ZJ%MFDVi_7b^R=v{rBLr~jnr7+>sHwzm~?TCSR z<7`GkFgz5up?n9;EcI}hq;7I4YWycMSRhE@rp5iUQLq3o8-TtO_Ie_YydC_5{hUl%GVDOwV8-fI>g%Esrmyt|e>;=GrHTu`un@gw#U zf=VLJm_$F%inN&HDz~X&f)R#$tY>gLfa=tl^YZFKXOfZ?xDCq;l43oluX zbZEi<4S#TVyP&q9y-8s=f!t*$mxNakhzl>qO+!(E-EI`qCcG#h?ip@)H)b%4+>k_n zwjvskok$2K)}U--;=I*qw7evp@Utf=xp5CcHy$gxqG28!l|`U#N^hVnOSeaL)L((R zW6Zkqj2wrQ?=(RZeNMBKTB86NH|C3eH8Yr!Yt*lTP zpjCxOtdbw1WGRPvfGMmlKw)s^t|vzRa3IUu)w@v*uHT02b8al-=7s9P*xYZqQqf84viK0 z3dO7Jsxu>~JX~|u$`jh4Xz0uoF8sNg#*7%LLLJm6@%Zv3qip{h7K^gWs)(YtZ;}<^`Zj!n;4Y zUv~P1yNYV`QA6=DKl(nVY_GuvU=q&uz`Ju)+c$!#yj5q0ud4c1R(KRU2<(ZmSw45u zyi$LBVwSi5sBECM1HDUfeD<~8T;HW7KKqVznz`+Qe5=lippcf}bb35g{&nO9#*hZq zf1&z%LG%kpcu@3Jcc!X{a&XG>h&B2G-t!@tfNCI?o@S6le<-5}}8i?Oqpyu(~ z_~>$Nxo_a%npk!qenYkl=NAH0j~!OqIcuv*=*o{4F-p*tvS0--^*lmm&WdS!DGzk4 zc$mW>B8nvt6^8Fo0e2RowrsnnVL|qpk+V4AF$-*NAP!WMzd3AOT7BH9_Nvp+B(hv5 z3L!9A;YFcMs6yGFDFH-suEIO@M=k>d=egqbZ@QVe!@cJfcvt-nAog;*)EsB@$c2$h zDz};C^+%q33wUwWANf7X5OW9BANiX+KSZv`0tmlnkqr@hbRT@B;pe?(*{sFuOE}T_ z^fnNXS9_wla#y;(LEZJ`t(5At|4Pgm<&7S_&@5-7Rb3Ynuqq>v@e>r%)9k67nD@v5?c69&j>?$!0AiXR|>@&jb; ze!rIK(>t(zs0g1O0Ip$!@G|n6$e}=dcH9U#!X?hbn{2;@wx=X<9VUpUEh41{fSc z98ueqTfZ&FR<=3o#nSlT%$GnbDn0wKF}nOA_Yjt(=~T-->Ph&s0w>UD9vl&N;s9ei zXKss*m%bbi&J;4@$Ura!PS9LmnHcUzTEf&VnA8y zR1#mIoIfu6K9P~~u8g}GS(R~$WSm7t(o_=;W1N23Xsd*5Dcy$&AfCV&?)A^^KS``x;%VCP%qeR zeEC-)96p1u5F5QaDa2S%_w7c7#IYM`QgGDB-I32T?jX0z0PpOh$Y#8~FC(k$-8FcL zdz5|OyiE;`K^am{{6;iVx7S)DutOpI>og0b*! zPRW;Ds%VN6SO?A58XlE`7}JpcH7vz(RU@y+@VMgFWgEH-qQw{-5C0$-zd2jDRez*d zHs^WlKEZf(7K}-R>4&f&2n^a57}n-l{C#q5G=5|aXQ44V0nPWdrJ^n$HsQztBZ%Qd z3)j+uSp9STYx#*f*YhN>SbBA;eLdJ|8I~TaGsDt*|MfJ_2omiiTcHXuV`X9Fq_x+9 z4oJ^Y8dqL&1`|*4;->f@FP5jUr(_1K?%roHvcumD=?6pQNTpz|rqpPz(NeWk+sv=CIjxFQ(Q@EDT*wpXovLx*;^ZxEKTS(hgX5}u(!HPQr zx?}isnPolT8Z{+%0TfxYXwIVpBU%lKTIEiZ4~_=3E;Zx=yw(r=vrL*0>jIfVRjZRbjk5fEGw&1B!A=38bts7cMYRCI0)Xh= zjE#eklIy{pK!hjYKEX}DtcO=#=qkF)`mnnwOI9fbR_I^iG1-N^RvN2Y*?5-fdvxbt6lssqh`VFK<TlC!JLs35I%W;+#J;l0gR5BOa}(dey-^`E-gDQ)_f z8ve#h%(#{2+<%qkFDi{SuP3cv7v@@x>*vpL5B?bJUHe`9@8Zki-8r=KldI)wio^-- zhWZ4)rQ^^cUsV;Cumz$Es>)K_uy*!;3U!nfIUkIAM)}TgJ_4^nr?L1G|B(}!5Gf-N z4UriZM=V&60Hm1eDV@dWkrT-CF16Ac6S}gS*U^JZ z-G!yng9`&Q#9M0#JwUk9;~p#)LE@0Fh#o-8`ijcTvyD$Utx>I!;+byAn{xb`h&kJe@mevQFAMuwF_%~| zRm9|4F@vob;I;6?cU8&xR!o4HudJ9O&#Ss-5tD7@`oxNvP0V2{%?>MOJ~5wLG0iGQ zuVa{r+-pU?U`47EuDkF}EAnSnq$1DVg)LTOgG4Hq} zFvp4sSusV#9RH5$(3MuqWMV3BV$P5lRa^JkRLfjMhX(?QkKuu$`Qt#* z?{oO)tqA2hMO}c4%<_$Q{y=6fo{8T|J5EGC?Ey*@DLS(`HyVM7LD=FddPqW@CfQ$H~W5)IJs_PzJjT@yEx*m}5 zcq=?n!fpx2_34Bue6Ur(lh&J-E?nN;GP2TzL$UFu?s#3J_Jut{Ik3o#_v`5 zISIdKg|F<_|wEz#+V&uYRhSf3;}rR-WK~N zYrgj0q%r zAh)7bzG1vNTcDBg)fr!%@r~bEkvS_XJA{rDPNVhuc4`#r+OGIh^&Ka_Dw?+YtDvy1 z#Bpy`=90bQf&anOjhfgYjVV$#r5)nnV7{UB^(Jx*!^~7gHMxT54Mt#h#$1%9)Lt^@ z_LF)0dc8>4m9W1ld>`0&|D9CgPT=N-@TLR#^IO{6><;|5ir$)m|$60~qek4YCeKjqi}FPn0ojKj~AU zah1y2$GBXc(M60c+{5b`Tdc(;h0{1&eL-#?ZE-1~#$SNFGzL3KdXYTv8zD?3E8H|^ zQ!5RDaap8z9(c#DpGuojP0ez0S)_1YxWdBOapzAYF$k3O19g><^;Kwms786C@gybp z#Pw%U{`7SDeb^JbN^i}SZtcqouRg&j$bCK?zN}zR=yVVPVcrFvnRjbW@!6IBo|!4@ zy(ff5rllbi%|`{Hk_6Ki0a2Kj7Ko0tlL|lBuQW~r; z7E>zSxqk+vb*nHEhOqb}7b%vI5%@~EHYxt6$lWX5^@+hXYv>x8F>gRWQ|=~(sn}v(9*B*SVn_VLD#;XVBlh3XA7Co3TjC{_W886hP zS2oc+W88S@poO)xKfezTPh<_>SFs&}J8eN4-VUeGpN$%iVMLTrTQp5TfFrL+%1v! zIF(uLJ^3tPohW3;I7)0V5m1g}jly7(Li%J1aqo$Ie3CB*`1js>@Clgqt$@wkxdJI< zgf4;k^yVLguN}@&OH_E2=|yIx=iIZ0ZDc77)}Ks97i^k*~#Ug#u&@ zDd$L;=ab~{2;rYe=fAN>{uV1g^57kOJsC(jAEFy9Q=?S0|K*)2Kg_Hif#hg zMvvr&FN+@0!ntv;$ys7v4cGcw4poE;KR=qpg0-H}lzV?`MNRTf$bmW{jIkSpZ6(aM zNUm_=wg5>=qVBwiV|5_WjyJ#oxn}QCQylDVSjGx89e_Upx1yg>z&SQ8j^E4C(0r9E z&2#;i9#SoZ-ya|I&|RFy&m<6$0I)M=fdt?>jJcISAo}Z4X@|{^r|o>phx|ZD59aX- ziQ*hu+QfZAB)9Pd;|GcjhaTJOk%bzy}HuHP6 zR|KJy0t0mYTcxlv*^R#uh)&O?BTYpnxTm;SS}PZltn^S$`u-tth84>(ds)qs zj^$Z>UGxP|C3gtQZDu!1t!EnJq*)V-WaC;F(w*=9j&7y4ntfCRHEbjzwN3iCQT1`H z=zP{uSup0$l_Fj;Y*GZ?1Gw(O{H;g}7V{aD51T>pUEjYVAB_0wMu~7Y6@hF0(n35$Vbz(V> zbGt0bv`|apa4w>I<1gq|DBcw7`3$`UZNvm$e2B9b`y1ED2 z6~S2D+T}^Txgu%!?RU?NUpt>M<+A^3T zKNe^W=$5`UE@(aN{0rc%x$oqip_pf@5%x2bN(ytw64gv`nyL}0yv}-glrQ+RiW(r_3u+5jy5!46>I-5i zFg~_Q$VAw$Q0Nt`D$FIuXwr?M4i|{eT8}n}5T)7$vl$oX@f$KA^o6>lSq<6Bx*-6! z@`7gE8tx+kG6ln_sE~4 zt@aqY|GNM70IDAWYk_h$^8hIKBK?rTpKbxlbPt{R+hXNMXC&J46-u~+_gqyc4R@>PRjlBJKk!CAm?Tu1tFq>*J>YaQB=0TAj^K>td@ScZ=!7r5D?gxsad8LA zODBHz>LgyuSGOGw&De>%;~-+I#9qe)9cz;EV~F*JXv+(R)I<$0H--1Fi6&fFAD*c# zx7TRniT6fV6JdBIvc{*4=lZ-`IlX*_eo77WR<9Z_o*!0vv1-(ouP<*64{KcSjgL!t zwP1qF83<1j)>l=J;LkuEH7Y?LLpr%atQR*C)(Jc=THS)-V z!DGpo59tJi(UY8YUfaN+*_+@trMG&Ek0kqcn!dmyQ54f-9L>{P&@@hjQujB};OKH% zcBPUnKtXW7!Ual7u+bRa26}8YdNF0#6RC?%IZ0eAs_xKlZ~shi@(fPWEYPt6l^iOC zF0+7KV6#Zg*~tyDbvIVu~6`BRscf~J} z-Rxr3oMVh)kRZQP#hac1W!a4&?-tiCx-kWvb7ViQ=}C(Vbb|M);0Q*Kp5UM}uq%go z7c9fc?&2>w{noNlH_()iZlfve)u?2r8LU=|a$y-_rpMw2n@{97*)oA(flgM7QuMW4 zvPJ{Oan?D!g%=pcG($1U!H%hA3dGH_Md$X^&pvbs0?45txBioAU;m6w*)l z^<*%S>J|MM*6+uN);h4<*~vk!+HOqH9ZZFLutXBis*CZwTInc~tex7z)+ z7Dcl_M7X{s=Tqo$P8AdM0f%u)6lq!#I%CYCgd=>;65pj))$KjDn0HHMlD)5evA^B7 z_|CoDy4#9J9o#dCpf~V9MF@jpRWQyjZJFfNP2xl#wT%8A#yQY&KG6=UH3y-`!5g31 z@tTbHGD+SgQm^JNL2j>N|Hi4m+!K$q*m4vkUeKK+;p8HlB)mQ2RZKR0qSmi9JgrI; zKNi)k7UxJ5j9|f}iU<8d5!`c8mMr)0w7102jvEzeopU#h@z(t#FH#An!>;$5Ldnd= zyvC2Nvee8pPFj;HewV`8;V+9m(3&;piqyE=)Hp}beZ2Of^vT3yv=K zed8)7;b>i`VvK`iW^Ssuob2L%8ep{c=>5~A_fM5JNt^4})bYr0bVNHV0~aE5DUnTR z#l!)i`Ir8K)bOr!=l!8HU^J9^_!61{X9`+owO7Yh`EW0=P8rSdvXFwTi-fGDjsO_w zIz3!eCXkR58=o6;udTgT7-61(`|H}$CB2Zgjn0eoPL0o9XGdJuY-v=+8%nRH4$hr( z-p-6GuwTAYpuWOKr(|bB2%0MX8>XxbQ$OJrW{r2ao9DoT`+CmLWem>eTMTv|80Znz zXxUiy-Dc4$(mnL`Tv#h(v5dXW?TW`QxZ{*DcyW4W4CY?@-;F`(xBe$%phX{K_`Am8 z8`^SgxzSm`$~96H9iN-MvXJjJG0qIl+4wAzM}R@ODm^G0dJIY+Jt~2=V`^0FyBHUS z2z_e|K~FO@i)CmE`1Vgj(=zqn4Nc~JY{7@R^J&Fw8e}ZJJu^NxPv{z->3mTzf}-PU zKj(i7MjTVD@u{|B-?9%pa#%Sd6EK-+feFSS>%bXWR2Z&;@+Jn|Cu&D%%VDOrFhoc4 zA_c3g;VI(W!0>=zaRV8Dr1UUsFb)-SIOWX5A)%l{#H};2S~sZzyH|Ey~@K2j<}Bak@xR%^Ir5P?Lon+K*XoB63gV|uT| zcbn`YJ=N)4T(1?<_aQeE<>?aRSHA?|xopNNo)*qmH(ay7eBV9zM=Z)g23wFte*vW0X~qsrgY8(BC8j8?)Tu zxzRZBfo#O)Afq_lm=WFCvY)j!AP9lULdZ-PYM=}IWN?q`lsySgb?O?i1ECpv<&I#H z??08z*l}`o881kg^m!f6Gzs(bXH+%Gc_a$z|6reaobx0?#A^N1VB)wEB7!ds-;%I4 z3e=k#oi(pF*FSY`g~)i}kWZ^}$z^L^rZqk`+ZZ`U_I=)vG_)HJo-32AH7M?F-07xd zaIR4`HK$68A7m7aR`{K$wF*-&FzRPjY&Vf&+R(Q<vb61HINzN5Fexv$u{T`@?cbXY05wUV2q17TL;<9CUwGJ6XT&O(@G8ZMkeA z9Y$=l=t5R^;BGHc3DSt&_NH1fXDftae3#D_YT%H1*o8^FhsTi4_ z39lq_-^nFB1)tY^<>a_u!#_8lJ2`GP%Aw|CYGl|S->hr`-~vNs2SymCTvb7YEvK!( zMekJc7^~I#ZCr&^>C^sjTOGQf8S8oyWscZUWx?>z@~??NB}cso zN3{o_9-Z&{1ow*kD>pFXw&~UI4`Y*2NL<`8PZ$6DoY$l$CLNnTBAzZFj*_vRtu*=?ru_8RKgry)P zqOqe&G=}4qv24q$=b;|QaTl4`RIzpynOGPUjiOn@X5hP}my(N}0WEB7iOUcvj&GM} zY@LY44yokNklYuWSz2Z_R#-2VM2uz|ufHWnB4&$3g1$WrgHpBOzHN?wYDe(uJ21Z# zTZA%j#TE<88-lX}Gf+v^8pe=$m9*a1xIcV@?w>7@7ZT|{to={~F#o1xNJX5hZUF*k zDYDVn0g@6;XRT3W4#~azTtbdjxmQ7BNnP`wU?$R3A zc5Gd;#9urj1NN_EiF5v4YcXY$)Io(NI znS5{=FYd597MULCDPC;TQPDv*aR{zT{JL(j<4WR%9IMV1DdR0S$uI!LI#8?w#qm3f zGK=Q6W*Nk;5i}p~QU33Y?^BNXY&XrC=J(8o+k=ZhrL=okZU4p(@1Vwp(k2;k*4|`F z^@P;@6S7Qk??XftNQE>n62V)Aa0H)|^wI*t&sy;=V;`vWuP>}G z+>@sDsVFJE;Qd!nT=cMG-dQ@M27cNB{>+x+O!LirG`hzkmx_DTek)g9r+VcbY zm9Vp`^}RtI6XFAwHmKI{xwMpXn1JUm3Hz!p!GnN0?3janc%79uma5IvmW~jM;2E+42+6 zBoh-xULf^GjW-|8qJ4!pi>evML8v)dVv=q{2Uw?nPxb zBI5cZU_Z=%^H1q>v0_X3^_?L&1h7a-j2haMaT9SR9-wd&fh+|gWLx-y$|f9Y_#1b5 zaq5G8(UaoSr@$B~InI?4=StP};a7wDl-v+roz`Vlm_xN?`G|nB8rCbfDw@A7p!u4; zi;Gyg7;bx08!2wlyW-Si{#kYI%N7)Kzxz5H*L${lm)J&+3LiMpK0_9D2sk)Q!su*R#4wybh5rUdG%nwuwtw~WgdSstj79J0|19l?+Zx5 z81v&AqmVrHYb4q`O{maUlv$>JCAt&h(nh!5PfGGssfXlpFL&&ZrB#wMwILMyb*b1b zg(#qer(i!AaMX2&qw+Iv^dDJ~^Ykgo(#(f!#1Xq#%xdp~CAcYzt#$PoKv{G01%OH# zb$KRf>;f?+mh@doe@fEIZFs}z{Hk$V>}H2Ydwgx|;$$sZy{`jtK+JN@`PnX%1R4)wADH&7_{E(l7~198XGjD)RP z-yP!khPrXQ;759vca$SP($||>A4qY+OFBsZK++t@t)Sj=TnTLr&PeE?haBEfp(h-* zcJ6A-P{lDSWbi`_z8JdrCDqF=Du|Ci;nnXVi}q@QkJI@W&iB4NgipTmohG--?(&xJ z^2MGi6`MNQ006)671XHj&^K=1@8w@Rl7#Ia`SM%S1w>QXbBp8SkIQ{vzK0y!jeH~h zrSda>d^)_5&-{%aYKvcD7WHO-eB@{@A4<;yHDHbfj`h0_%*z?8-?YqumB0?6#bb|^ z&ZiBkgYj!l`1Gj{VQ3S=Zt$kki}c4-16gw;p$W+@d=1%Tw;MW_v$u!xo4ngUz%Ix> zr-bh=3OsH#&X>Q_bmCz~boPb#=sf7tS99YVdhv4y1{9hU2npH~)og*qRK%7^bfj23`y6Z>7#Os~5s#F`Ch1OzZhF+g z6|XLzyJgM}TJMkFoC+pBa^XCQ$qv~KZ}ihFEq3P#5Iil>H@MHJ9f-FrZAb(CVi*#s zL<~T3_nGrm>CT{G6WtO0^$WFgg_jE2Tp@P z*e{jjBjc+Bi`X)@9+1;cIiw^17?ox$G&c1j0VJ8Y%rU!0vaM*@Oj*>u`7f|ngXJoE!M3{kWI7dmNOcXi*w`65!TXb($ z{$_8>cn6C~-1o5G7o`JhGl8chaD-2_1Tr3mQi}q^5@;eaDpg86QiaC?q(UMJ5~)xC zr`$o@69L%4Vd$#h*n4M2u)-ZHgHpj^DES|j-MjN0|DcqASi)Q1vYDfr-+tJ5pFuVX z_;*0Ns5SOLL%g2$)kWJ+bnf&I`Y@3A!sQ#bH}=3{y+w%hiq4&bwspRnS{<8I$0gO; z;wa<7?FWrzU}zh<)3L@5 z;3Mnb0*0B+T~60K+3(kmeW(Hu>m(wmFsax(@Vc8-oR01n|IjTq++KSwq^T%zkLVj z)VqDJH@_`*Q)7eQy(8?@C)JsM!SD-`q#!yo-e6P4*paVj6F3aX(D)81^-%OTYOK7f zcfQ!GqR$EMyso8D#!R~0(#UyL&MUU$aH1HWtkaB-Pd}!L@RuL+g6~cmp-;S>Z~hNQ zC{8spLX9#urx~G%GD6q>k4ETCNri6Xza63%|JOsL19qn!r`X?RoRVUUaO^RFKK+1z6lh%E$~}|{POi~Ik6Uo!6R;Vpz$UwL zeIj`dcsS9Xo!{!!o5sdS<;S8y!AFyOx4=Rmu9ktop|`wKKOxhf_`(U{vnPO)HBM*7 z<>O#Sd_2S#UzFupvRQ3z+uLIegJt;$$ByzD6M>lY(5O?xA-eIh&|K6YV-s>WYY#UO ziK)HhH2yq+0Tad*3r%%WEvf%=PlvGo^*&8MS4WR!NkbwGEcLRr#S42=4YIUs?#Wo`B2ys#qav)G(`kiKVaNVvz=K9b zP>ANoW!kXBgctZLTA?eH$zfdcS28K8JINCOH5yD>!`B1^(>8o60X(wl*u<NK~UG=3+ zNkQuAkI4vOZ!|?)|0HdFTEI%~UrV=Xf-#% zlb_~c3g1WZBRz$Gjde|-@Ij73wE#OP)>EqL_SX`SZg2nJbUWz)XrTPl>%gyn5{myx zRse)ql6FZi{My)k=_v|mSH!K04IT~28}G^^l%(KjRcIg zp$xCqC`b0OLtl!2C8^@~fu~i54 zzkXFR;!nnt6>F55@D5z!*LUdy9u%6dL4AgleJf;tH)P)_U!m|-Eb}87a3tvBfFf2X zwA_3~i2iD+MQgySgG#riYkK^Yn)C)0Lp5w=z)$QE^`0(P4nsa2Tb{_@tisNrFja*D ztW8?um&{Z*BKo&LAT=A8UDFK&Q?3FCb}sG$f6?uAG6;0hKYAo&Beg5D%rfzn0^ zR5pRb|2Lo{E6AH!K^OeX71XbL1tq7cin`YFjl5=-(|Gx$f9mag-`n|-!cm*f$>1nY z4;-ZniqO}r6g1^?@72a91c{|u^~3*+p#(c&{|xnXDt_u1t?<)#sN#QwpO*Sg!A}oU zeHVTzfO-++om>x2P(#}!I7xWE%O%i_oVcjx6wE|S7h2jJd0z%~c=Um~+FCT1>U=Rp z*G1|OVVF;+YXJ|NSz>_q2LRJcs>)%AYJ-U0^Nw`zwJ`8OrabMd?q#c^^dzT z3)&zG!z+Bl5ob1-MiK?Jaa+4F&RcX_VVu8rVVwT7V5~ke)`f8J9w*|dZiMrF5ROWp z+(rCY0&|AcTX1fviRth#Q5ql*0} zgp);K!XTJ^64v=lVI6$L3;7fI7Zb1W&025w#3x5F@v|DbCVouRns|k5EIjjL#?Mzi z6P`xA_{u?DnC3nU(|8n?@s%4|!-FIgLZKVWe2b+Jz6Y2If2Rj_`ETLH+L>7bg2igj zJY^Y3@65sSNi@YKNAIj-H1=>3HWvuUc6}g5;;DQlWUXI+!;24!R6_SX-T)`6j#U_n zI|3}Q$JP4th*TEC-&QyY-rk>&AnRLO}-18 zyzu~%p4EPL+niotkHrP}aoOx+?lHl@C1P{Xy)LL-4_OK$bC1?2$d8LBOq|+fm?0PM zQOpoy&K!#o@_RaMPV4^OEB*b3^mlZmZ01$n-*@k}@?V<%{uB9rPWSg^>F@p0-xu@U zx{Dys;_kcyXOpQ>Od>Qa4vpfqevL4ZGIAxQLJCO8EgLRYo_O*w9$bVy)2WenpDuFp z=_1FSF7jfD%;?Ny^pVy5RUMe)z%sP7)-65Eth#O?!;Xa_WH3jI^sFDoE_1jo4{qmM zMj84D=0@BmLJ^0sDv|_i#Tur-NKlz2a(Hb8%xT6zR4!TX8KuZ>U6RG2E+tS{Tkje- zqbI0eJ0LWpm1}mbn`3pinAhK!%Z0lLZgF02*T=b1t+8=MT!}GAuEao)Jnen*(Uog+ z-JQ6ZtH2B5x4m(%I1!wC4w7b2;=s$4HX}FKWwaUPrdSizwZgm3&$1ozqHpn<=v%B; z`WCMYqT%9C><{YtUW{(e^r};xvJsU!_rE8|BTICqg()f>^oS}++BamkNxoQrVnVaQ zn2+kC58uXm2baP1LY(tcM%Pl2$=ngFG#N;eFbWi7t|1XFG-j)0=L-D2%{SuClDmgh zGCOapl^4XAT`mPm_R-QGv07W^%dLvGd(3{u54*A(GZ!GNZDJgimarusvaD@kz)pnpgaNw%7D=EI%hQI^ zB4Ut2DyO+g0pGJk7FKMGQ6&oW8T}}ct4QRCcPRXEb>oNOy@BY_Z0*63#08Kx1f*1? z1|Ic%skBNx5iIc(c~O}>f3L3-|I1i! zor7>v8{&i6C|<4#`Y(3$UkqwNoF-9Cd!g0fYVr=j9dmX0mZh|pA`1F?7d!g)XtALj4_p0i z3roKjj>z;j6+Rc|(_|L;#J|q}eo*hMSqhq&>k8U;gZXPqM2S|^wq#eUhU>)_#SkBmTrvo z{V(b7N^t{+Y(Xk(tO^2FK7`naqyVz6c!FeSdAXR zuJD_Z)yV}(Ca#lqS)ryt`8#lng6RBmV^?I@*d-1-`xvrl02Nb66j*T?ndE2^zeV}) zH_w$MUEd4jyQJbm@Q=A;A!7F<^oGsRIFCtFW%jvd@l9u@eDND5CT9>w{YH{@s(mdv zo)}OQ_-``k=(8bdbc8mCoVE~`9(K{Z+Ij1I4i{t@=e+5L9T4TTrge z!J}6~yJc4pYmkH5y&6sKGp|-}c<8Hx6m4IZYOm31-^ntk%Ol&IA`iQHgFGDOweoP9 zK6&&q$H*hcyj&i+<|XpzZI;O+&m1a`eDf@M6qxxM^w|C<_{#?OFs27 z@0Dt8kZw^63#QPmiT-L=bM!hR=qAT&zEqa#21=_B-}^B zeN0Wl^6wqZv~$y`5bli~w1?TbrHHFeS2IG*>Dy{ON};Y*)(^ojQnl!sirbU7vZ`gw zHuq{a;v@PyJD!+ZsiEwHn8xS>~Oz z>S(q(O&)gD;iC?7qP#iHpgek+W95-!y5*5;j+94lbA&wd%=6@tZw`@1fmtGtLbINb2!*6=}H@k^h%79Dc9CCQF6eftEta-|y zK)up^k-m40Q!{(s8DH9LgZY*6E9ZA9zft@={KoUUj^8AHQ~Ax{_g#M9=Qp3vOG2Hc?0vZ@JX;v!%|k@3n*Xu8Ee zD8oDo32SsliTraRcuI;QA7>HvP27y>Xp|4Xn<_*XYe7gKR}zTN&I-Ca=KAV>P^SD1 zTw7$^OJVEAVP+LCxZL;^F9FDNbh8BB5VtmUZjH7Vgf!ne7V~3?#n+aFV&h66II+vU zwul=Cs7uxK@?GhgIBJY5;Z8SDXKb7+Sp&W`zFP~8PhS=A-X(%#QP&jKf&jZXMd})d z*+rr`H63%_R@gc3@Z1VPgC+d*ogyYLLC2PGyAAD{=yZc-Pi*DDwa(LFGhT$|Wn*S< z*qAaeM$_R*I)PrNLbcFH@G#3D4EP{C1Eo-jearU<>T;JA_l4)Fq{gjm8`8x2LK4vE z*|c(c*V&+_e-NhWOVsGpAwl_$8zj?YUp#@yxkD!B4w;-gWOB?%W@ZBV+ElSF^~%iL zqGkpn&D}J2n3@=e%!hF~XVaB(aERsNUt4BKX4<^O8h4J;&_jMwo{W3%^thXk z8ef0^bb~I)g^gbJl@fL3fbttYk)eY~7neKiif@;scg4nMg$sbw2h3z}6rS^4#G4qf zSr`4l)0oJNJi%!T3lLJcgw1i&N)d7fV&ff5i$qK%Tp)p&1P1WDD>nXY9(OD3Gw)ggc2%~f3U(rr3=&~DMcS?uxIg9?9w7?nj^uLebg)pOvN9rP?cu# z(yY{3v?3mFQ1R${OKSiC7&0_el`}$>qdnFvlN?t)WjoGCYfwy(Whl_aba4$2O0D9C zn}dB*k}ByOd$K^Or+eN97!S>sbCf!^+Sd0dT`eaM%4rb9V-3zT!H-j3FW++>v6a5{x{1Z+}aKO3TeFG!0bEi4|XU-Q@pxDNbVTUvg4DgI2{>LlzCZG$8&-oyEO!A34ZC12$ zS|qC({S#OG#yn#vrk;Trt$<^r&)1bi66-mzF`DfmzwCFx4a`=*=9w`sT%3C@n>uWt!2&2+6K(rH#o=`>#{o39eCUI=lL%eb|x%tB*aSD7ZNeN$4t zsyh#h34L{YMu}f2{i!K7#;Jz3~!`24!FM>h@S^h zCrQ4mJ^~G8#`(VnKG(w@cq{=+MV;59V}37rw1)B$*+SMQIbbVaEGO?z7H$>|&!hs1 zz)o}OoxouHHi z<_tj0qBLseoD4lVcO%9PguxaAtg`RIf1%*3;(1_`}%umU)Qqo(ZKGpF9l-rOG2^P zE)eFdUxF-EPh}|7WfawK8+T!&g&YOsGY8bdAYx#1J`i_4Ptf*89#`+BDMZ zf&<`2&VXkczxZBeEREXl(iF=exQrVb6R0Y1zc(B?fhl}~-a@N@$1Z%y29Y6W*l9Ny zm9)rIUW#&zPi`gL7ye88+!4l=s*VEMWzm4?gQao*B(-w)Fqp=-R;n=Un8JstQjYq< z(M%O5X9xr~h1<+E>YOJQ2o)e3HW>kyG6~I=kjv;r4YW0op+C@;pA8nB4-yUJD(4$= zy@xpP{<3o0>xDL3Q|y}#)^$;AA|ou10@#5?LYMiAUjHHAqX9=2QQ7IJpIA}ZL}jI; zeq=>Ch;pQ(5LigYT%vN*QBWunRm9BkvvZ8h!2wF=)=F<~w7uvXUaHT0=$&Y{r$6ML z^dS#9Rr-VDq!0Oa$U0S0Hu01$Wx=*gM`jUee4m~cpYFF1wmTq5Zo6aC}Md4L}F*X-^!{_nz@a)6MFH)h3$hDj2tAGnG z3`OQtAa29sfq?%S3oBN!M zmbR)gN5V3UgnLU^#+PuOgtM)1zJ&2=EAa(-R3~T8kgUUTCB7zc{dTl3o0{iluzwf zr@Ld}tkd{@7!A>}R2JkZz8}J8Bcj-cPlKMmA9@>aFhXoreT-S0gDi1@<=~-&a;(Ee z8n=Nb>2oe^$@q9EHu{q(>arQ-U75|Wh|?;WRQ}M{D1QGAX;vi-2MuCLaA^S zPph@Y4>=N^>hr;x!Wl={V=9CQ6IqL+a+e9Y>HHq8QBn%Dwj#Yf4J+g*8Od`Wi3~pE zna_=(#&IYfB_M%BG&+R*aW{t(l=Y#6#Zkr;xENr2`%|j;Pg7<5_*S64z0F>jC*5VF z(K<~W!4y{pyr6ZRuWyw&m@i;wc*JV5a#;c>bPaGcSR(R?7~FPmZVY?5n3uaHy=4!3 z2mCK=q!&u*jL{Q3tuacnz&)Pd3uBgDKySry5CL-BqkH zz^chC5=|#%Bz=u6IAtYm`G;)5@$csxR;4|?x-;&&BfT%v`^mDnrwg=qNiHE3E%@%@ zD~ji2)WYPbe89L3L7tk@zQ$iE+v=li^X84%?}-r$XcAJ4iF$(RVWPBDvEx=Is@3RA z29qsW(#YYql|u}3cJrC(IosHC&gy3NtpdNx49OCfHpSlD<;dtD)K>^+WFi>X!PHZS*P2Q>dtpZ+y59isF; z=ulwTmvZYsL7=6H9;A|%p5OAZy=oA`NA6rQ1h*dzyXKdOz}2ZO+ZgN9fXUb6P@T<5 z(Mey@T-rXmDdP10CEGlkmyXfx@?yv0uDSH^=nhNc&-)k5aF$uVw#!@f9ozT$mn6!$ zD5ZJWR&%(2$plO|`XNC*F*;j&_*Edrcja2`LE)YHuS{ss=LwMC2)aMl-$x5*x9M7< z(Xb_n(x%aMTBFW)9SI-Y>#Gy(z4W&Ht%&V|VUFqS>2X;{J>AQyaR8yEbC03t_o_8T$ilLIt|^=Wd*2Y}`?*&cy!<$)eG<*U72BKbm3a*o9?k?XgVun)dSxYPpbJM{*lLN- zx3>pUt#Xg)FdXT1(p{y`Une2>`TNYUQkF_ixd@RXJ3vWH)jJUgk4l7_#-8-`keVb0t69vW6Si$}0+FQ!`5d`~N74Ub5U z2lrV0y$JSoakDDREPPq=#0$f)7^q^y0k1Zt0O3X%{Oz&?AKb4ik7I-Fl)&f}ZY2Ey zZOXg+Ht>VfU)IjJ4BoEdCl~(Q`c9lm(<mN zrcr&-@J*`Pq7fhRB))?teMy1q3AYiJ-#&i(i5tGuYW9fdtfpqZZA+&kO;PbhRvjPF zd>UAESpn~q#pLfAY~`QYOj+&3ArL9slrEo+P1($EH{YaF34VOx8gASVjxYlm`!xA# zSYMs;b*g;5uv>l+a64D>nFZu_J}ZIEfqZ8R0Rg3^nx#G3sO0~F%BHn@YqySEv-ikC zLdOO_PujIdKR&qj$gUChO8CenBfia3Yw!ZiYumo~j2K}11E7~Q#Xpxc$EFS+M$hs+IMyh-(%$&{!_{G;9t_vy*6nUe^q20^LO1$*8S8I3=<6Skd4Mq?BVtBfccJd^ZgDTa$+2wdUjQ=`2!d zC$C<6q-&m+QgLyKil6Fq$CV+MI}FIB?SX5!jOS6BnuE!4Hul5T?oqC_e7o!?CAHvgQr{`5UpYB7`W4PI`5Zo< zfK37dpXU=$sE%BflItOInaZBDM@>EWG%05(yjV7~*X2SI$nV$$;TR&&$u+Jbh+kqj z*EyoE z#ygOXihcbKUoH0a7se)+I=lHheL8#_>xQui9Bf$E7-&>~BBnC&NqexuGzK$3!oe0> z6veOplm!QL(p$pgIMLRf(#{H^`4qhednFOBnz#XbF}4X5hbz%F=9nj;*s{j z)P|w`PO_30W9npS+{RRL2yd{3_eAICW<~Ipa40-N2{$+6nyw0Al(?f3)g8Q-tPl5- zNN7tgbT9AV`Z2iHIGcN0HsY#~a6g6ZsrV8;o0jOhv*W59_{B54;^|6sEGj zYC#_qEBx;ye@mbKMG=bOu5Yx88K8>6>qxl26r(lXp)%f{O3ox;MO{xQRea()#evrv zJ(5C3$uBA5)AfKpX%7R{2{*&*UW1>5H8{w7TWoF9jTgpT+&@sd_c54rB=0)^x8n-PRw8U39kcqiU z)Zvy%BJ^!AXmxK`@R4d2_X-Mlp#h{tpWu7)CV((A*Y2PWKvwTzR+-K4eQL&Qu*vT$ zWiZdyhsdYqG@}8vp$w6_C1qBhJhndOi1~ppogQ47d24|Gwp8Xx1~^~MlQWRo0?%M% zcX|3TU)2LSN*3@%mn;B|c=Zq=gKvQwh9-|JqO>?b`8Q4eEsKu1o1>F0a=9>w&oUl>Nt<4VH!zf()vzI!!x*y>-W#kxED`f|N>mcE zUKr&nOcAzCUHtZ09M5N$sI!?8upY&!1WVrXm6(=27)Q@eixgz-;dJ#p{Wd%ccS-pm52w+j03a_50UBxCdCK5 zs_DiTYc5O%2dbFc%0*^erChiGvYDGNnlnQ)QM|2o9lnv!oobt2|EXvl3j!pmbLKI^ z%Ii{DV8+wW@&%b)NdMDwgmA&+i}}Gb;)#j+7ha%LM%EiczNB5a>Y4HP7fIH5XdzeM zzJ;ow(Mx^kF#B>-`~&SENs(qoPox%n<+-sMk9cv)x#{@?sb706N&e^MB^E72tmMr|!Q-TtH& zjgv7~uJpV7NwtVSDb%QubdDf-k47rdp`{N-Bk#p{R6tlP&H7#+NA?Ftw7@V(UA_}a_DR9{l!-Rb&n?@qh;B5d61GV$(oU!K6)omE}@D?x5b zrqsp1ntrOkCXcbFgfi0pm%7D-8;N?BLACrf!FN*XAWsq_8;>|?5+o{nkZ~QzvrABj zu3i_~6@3u+Rl;+auJ~1%vu^jZ$9W<8X|DFd*`>Opl=QjH!phQK;8@?Ry#Q8T*#xi- z?TV|>E_QBUE!Pf^P%ELic?Sa8h*thxn2=+&<^K(YF$@xk>wTh!Ped-3!Km=X$Ju$Z zix&Qrj9^ut^aFCw#>J;!1*D74&mdTYF$dF0G3V8#_JYHaqP3}SM~=_yg*;J`gP^E+;6$mNuli~X*EmkT)CBK|C5&hsfrT@k+{RXj}9rjV`0PY0V?3{Qn~ zy{kNRB8gF>jdO+4T-+QcYP`c%d*c(D#JwS2t!xF5!{^{N)uY~Wc`L%(HumJ6_-5wU)oOysaj& z->My9o_82d9abmyIg#q+!^WXa38S|}wcESi^VEBG*Lyzi_NK1a0$%gC=C^tC*^>1Q ziS{#K*$rpDn-Y6V@)P;10T|V9={BGAHar6u+0pi_w*6ES-IqoE{hc?Io&Q0XcSPe2OX*=flxY0>2sA!&9lNo4obyG(y8(Gr#F|89+6{ zd_H4XtM_H${kgYpe-)x@YU1?*c%s$?g9=gCS4J&2luxV05`?3rt z6TsLaN<0^d!9X!Q&SwIPm4wmkyV6ERGjFBM#ludSO6Z!iN{%q{{uX7m8P9Rc0~PM( z1%G4PX)-Z<#lKNgP5#>qMLLBfC&jje;XwYDvx3H`V%F6#0eA?J(k0_=fwz*He7N2W zNliWu!J+ZU+154oxNNWAd$lc<8ZI{!-~g#>!K*u)>6tCDzXYL%l|$gJ&A?F#oKQyG z$o39fj~{t&qTT7smq^|v-k#WNKPkeI*qcp6Vn58~R&Cj8(s_p^h_N>@6Hq|Nj+?wl zxp1@wZb&1djO^~4$Al6xX7XSO9%{Zid@cU%n$bcMKylD0Z?rYHZZE^CKw24KGjJos@+yT+O%PP;)kPqqZv9pY;Pmf&1ExB_#yzfhFqn z|DM@hIf#K!2LJ;tKfym$3jahuoyGM9hF10^=7sQ%ydwI%5X zZuRT1vHE&iTRcre$=~8x0i@Z?5ipwNJYqvVS@Bh?yh=bt7_=!|=yN4CxDrTZ1M9jx z0vsP=(B>P@{{nKbY@JpnT8q&&v*?4s|7q@~fBH*GsKmTQ1Q7bAC~+zoV)aR$_M)m9 zybGStmY)%d&&2&y^tc0(6!!oh$eqS7s|1FUpiB(8KM3~^xs5q)Z0`^QiR7q8Oa@W1 z!KB1dUN=8w3zw)%sT)7zV0R)^{#n3|(aK$=F7s*VlKA9|uRJja6Q6k^%&Dy0MfJj{ zE~9E=ywoWon?b@P&Z%4AINyfM#15UlF5BE8j9)vmk!HMq#5xqeOiNX+HH!Cc-D!gK z*y4vntOw$QOM7Lp`b*`UyFRG-cdiuYe)iQ-w=FUe>^l#Jzwp6>!S16IZJV~jRwl_* z3RX{|J#V<}AJ6;)u*ia;k8a&)ZMoQ-i+z|tRnnj#lKMr7M=a#2-=SlSx9!Su48vr;eDN}ZJb*o`PR|Y``0FO z6j3bcNJ&qD#{>(synk&s&y?@&smK*#>{(=+cZpZs@#6h!N45UWlGTa*y-KgfM0T+w zKNvN$BAFL)Mwxvu(Ir8d-@S3pzRISPR-~e<(jt0% zPLBEGZqcvUVvJ<$fQxhGzAR+|WjshD1XMKLQ<^Y_h@Nm(=J3-ca^*aiSXuoo=4MoG zn0e#=*T86uR4be6M@{r|W-M5h4=B})`eq5nc(SgbMXGf#DhV4n-`LgU< zI3Me^EH=E3ki9ijNj2+lO%_v+HK6K$5Bkkrxc)O3m63jdM53ssGlApcNcMr|Kw^E7 zC>lwww7es`%~+2(cas2`@d}BKIiJJ7qoni@{v%&noDUKswYE6L_oLv-7Ux6hkV2w??=?|i z;X=vT;t-!lw(fYn@VB3;RytgnNK|VIf0l_P<0Pab2CIdWT>9<^=GnRlrx#^evzrm~ zTHWktbu*WSR_Lv&pNpv8m?PD#Y}L*9n?ZvZZm3ja&E|JT7Bu-Yc;LaDBJnBY|Lt8Qt;%ZH^cq8rT; zL28G-g2b~Z)Dg+@91jnG1R{W3_XB=) z{Fd^2mR}XWt^C^gP3PCaZv{UaY6dQTlL#yML$kI#kDCwJ+4BNCc!M=KRxU&EE%szL zixFvVGiFQK2en1E=9;A;9ggROToO&l3&prvB0$1G9=9De>vb$Cgc*gIFQ?2f4b^sX%G3VEMg0kDQEeF zbUD-;prFin_V`X4Zs=p>REd0xC-z}J9DUhL;p`T94>fDy{>VlH(Y+lKuOhX+`Jr-r ze6|J?$sDag7{=NK-j0yF@MoWJTpyU+Mojno@vU9EAgJ;)&wYym^$7(g7kKN4U&`%T zeV>&NFXBv-#Lp7>qC_@Hi96yJcN9=usvvR_1T-ip?pQZ4pr9-ff`WBHK?PG3Tea2|ty)^EQmZXm zwYcMsTg7S>t<|Ggi`H6Pxz986oFv%(-oBrE|G4*a?>&%w^POk*nKR2XbLM=4kAhJw zgEJ%*k0QJcr`r0jvaUai3#J7^O!*yrQW|Ry$g#5l?^RF@b@1_rx_Jb$Q!6OlA^z?V zf0xXhI>5OWox4MN+^eN$opMJdJH3Y0$6(uHOlt+K zd#ErK&kreKtrh1ESOy@2;Oi=2uW_jR5h?^D%noeI;W0e+ymd!^m9nEF^8@2q1~15^ z{5C*FMxY=J1zMipVPL35LoYN`L*9CUi5g8*N|kfnlpSCMF=5#)XQ``I`PQ|;sA9Y@ zJ1bar!Yp6qgR#M++{HG%?drmlwpH+CDIBEW zkn)%ZYMas$2Gm9+m&4OlC{K9;%gaZa7G;!H9m$3ISi{&$XR^`xf)8V0ejG_bBB zB?Nwg?hq1`;s-xn@TUtXjWP~_mj7hRS%@+`{f+h6*0@G?-xS2~==jN$#~^kn&p>Ma zn4Fz-N;s?JBy1|-q2svC1$rhJlELU%=bv#~i7KItI~8!;0=`NYo`QrEE3qMwpZ0^9 zX-WfK#$lDUAtdpUaz7kna`?d(xQ{aYeD7lA&cSsXn9zp8@iO3bF!&4SagMrp=(YmR z23ID4cIM<$r2(E8V?n_gzPBg&D~%A=RS+Al!IpzW*sjD)O8nbgfSGYhXXSxYV2+<7 z!M3LsTnteL!D`20Q2i*4PO@#-`Ea!amftR#4*gXMC!rR%DFJsD`|vPg#!(lT1s{Z> zKIsdm{00^Kr~5!dbja8lo(}eh8k}+);?5p>^jG%Q+h~((hv*N5!uAtRjr)S(ZY;k8 z)x3Nc)Dz50Z~#8QVPTN{75<0rfc{1qSPPF1gSi`|{8AY>PJnF^kZ73KVr(IiJf)|R zDJCh)A?;T$v?)nx9So0#LNZUo=P(y?``iXB%iL7%zZh&=66jqo1ZM4c&;}+71+@A z#@NlN=^LY%2$Z3`vY&${WJJoK^uf9_ibIXF^HP$#* zV*@q2ZZIX)2dHrB1kbSrng%)tnp8nh(2aw0!kl$_cmfI3OE^(F+`!-WWYTZ&mAn?- zqSh7?mL04Q$%2`MGi)V=Gj`c7OBj8`S#7k$7w=&H{li$toFr3{Gd^4g?hLq{)pRAu zbi4a?Nd>721Pv-IpO!(r4}tMqjOj;IMMU^#IKh+O3OFJlMG>N(tAe+6Rt?1X#qOFrq;1 zywVh4=VLRcHB6Lz{O#tt2Ku&|)iBUE(r&KOKf@aywD-?e!A^Gn>>5>vp~5!s{W0kP z3XI+S;n_|&?n$TbuYz#0bhbe--TKF8J^3cou}Azf)Nrr1#>XPBNM}0o>8z!$;l4~9 z5VDuku@^f%lIvqG{G6x7TQ*wmTJIxfKcerddc+;VgmKffc4Ix zm}3tQQkTNG8I;oY*hG|rHcJN+M_56Vq= z>J-E9CP;7z4!ly&q^!Dx+9xPQp&U<>*1~<2 zIsr!8=6RqlyRH;~ZhgbUlWR%d%o|-e%%ov*Fi;_NK!fb?aLW|ZYM%x~Lb7L$Q^Qky zrB}aW9KyoO;jOIiL+k$%6hx-_xa``b{5R=mCWXhzK5$!E6ahwXW2K{#3aCL@Hyb6o?0IMc0S$!3zF<==)DDH|Obf~| zc=#Qm(=U+dH_WEk(U@qSs{D3=fKks5$_h61)uI`0T7U`wM~9;p1`G_SeS-WQksfTS zhc?u(uO(Mq^W!E}4X=8FV|dgQ{qBB7%7gd*!m>T)27l&)w|k&XW>Y_W0SP?I2@m^K z!rHgg;xQKPFlda!BBZ*EjPwQ)BiS)B5T1g=N1#mbRMf+?nSR_23rMS7~pTRv%%G+S}|@A`y-z%$Rhpj|xO*VLeH zFsz>X{*us1*HE(!dJF8OaB~&2=0%-saTy-vJo_ z%EO#t3cNRAzBE7q?0r^%q|Q)4=EmO1hI9SkW=#$l;Umy8`$vyR-`##<@phK0*$Gp zP@h)`b96k7&8pkA>Z|a@jdCv)hG)m*LDr)(8(tR!Z)OTLmElGbbMrY6RHGrL57~=v zaBUn8p~(jauyx*82RBt=eL5{QbOepcT5JLIgPgeJR+m?b|I898e11}2U zH+KDeSCFYLw9Zg(-B9O<_mZ?5+{=%^dcFIiJE(6|H%*REMX;0Et51$E^Do5v&);MN zt3~7dGtyk_Qbzil{MB&mdPZf988E-->lWg1Za+6C4$-P&TV@5n}We+F}(79 zhB`PS%}aoXAeTLS3oj{Ws|rjV!QCDFG#J$IMRq#<5NDWAL8o;~>L#0mnaNp|9eRGj z$vM5Grp!3>R*0#;mrf6hK8Iix3h!Fj7%4rkjhg?IW~QL?x{RP(c5r@Q(D?;Lb5ELr zE>#r=XB=%%p1C+E5#D+N8`?$%o322w1EZDmi-S(UFX&f;=3>eKX8>q}bNW>v_XdOe z_yZ2Nih>&)`abpXpkfpD z?pq>9o#=>;#1Hg3&x`ySp^U^4&Pf))!e3Phr-;DrY7KbK+rWF$o+sUvEgL1^; zg>Dx{S@4*L8$8+_1?|>r@L3vjkKHcbe4AByAFLYFA3%~4l?$+fV_xCgV=#L_oe4Px z*@;;Mk-*)ZER&>ZV6*%ic18vKf+yCY9ZdFyb1KZo0gUq>JMM^-(gJ(3MEu?b9nN{F z2uc#parjHpW1Y`wD1nNb@kKBWIwJ)!`x^G`!@j$-Z%_Qjpg|EF`0k>oVV)0UPC7JJ zFigQ$iJG3k{wApQQUcsSfu^t8ma&9=)wTpNBUL3BN8;MYk+zuLQmH>!)A@v}jM{l( z=-_}dqxU>rsw)!Po{5%7+Kjp-|xFf#pqU+%vYLYQahzx;y~@a^Q0I96&sec!7PbOGANr#M7E|>?2l!E_m9nKMXq)nM5bq0}1$!^WewnbpM>Lk3g zCLCW}6K2B>c!VVA2g6|#cDb0Xw#9O$W4`F%K$d6h-2|*g@;zQ`A;FygC*fYBjKit& zi3ZtLxj6seTfCjjFS0aPc5p%U{IMxiD?V<)vV?9D2fpS$5@vs}6cA#9lOf><`;8Fy zpl;8*SNZgwlPXPxI}dKtV0flGM4##m?;W)Zv3)5Gw;01RqqE7wX~A!E0(JTmAvtZ+ zrJhV$8mxDKMQy18GVB^mmqNiC(0}GZ>Lo`Qqd;@vTm@RO6Lt%Jn_CR8dHL3+>V&U2 zD+>opVg8HRL?2o>K6K_YTDaq2DrL)(1TE)bJnyBd49CCtA}}}>0X8Rq#_kS`vEj@Y z7{J+Wh6<((@>jrI3hyl#*25WZxR=I7UJH2v``+QTu|6)dYeG(xI|S{DilO_4Qh)|b>z$@j zW{w6cJ|8Gj6h6MnoDd+UTJY?x6Ig`Y0lz9TPp0+se{QeB7NmJI=rd8d0sYTu={_u@ zR9%9Jf-fkL@p8_In|W#%UQVX70HGg2Y_p+L{`T#k-W7i5ATV7CE!gOQZ-(JS26 z4f?cm(ohJv+!x&#W5K>L3Q}EH(z0=WG3dphV(@IlnNxrN#rAFOo|iT~`PVf#ulohe z+tl#VWo(_Wl4A)&4WGsISzi3MJtDPrfj+Dye!1dTL;O;~SFYrQ-!S%O(+0Wd4Qx~k z=k~yMsK8eHS)&`$3OB(6DTc&I17Y)Zh$#k!hjFky!w(oJaMU_D8@31&ZJH6L%ihhW z1g8EvY=odlCunszOu_ak#54ok8Zo}7rLC}2L3)AP72u2(se=6oca!ep4-*~$G1QH% zyh`&P<9NA@wP_(fbHk0zPVgQ9idm4pWA=3h9kgT^N!T3-=4`MDhs{WRK;wxw8UzoM zlKm{A<*B%Nh`CM!*BKF7u)^b=!ILc*TVWS`PV!^UGnvmYlTrtov@WJFJCmZkc1X@3 zp#5A-BkfFe;9Rnn*pEThVS%{8p|ChV;^Bor>AS@I9qd z#vB+@w>9-M58H8q1C2p2gbnjzCmxe;V9YF?`Wdqe2JDC6M@V)IBnk5vbO6C7dtB&; z`vr0jH!oN<-ndw-GaZG6wd#7YYNhW5x=i-$&O>;?sI&zl$?}XXe?rH5URna$4>&uh zKZIPR^~!+7tIP__Z{OF-C9skvpve+ARYCBb1M?GnbTmZ&moyeV(hpKVgI!_jV}o@| z(pi~h%(Af)jLoDTR%U#l-x^IUJ@9yZmL1n(S!6~)WF*1LjqJ~(N0#uoKR=-f_XqZ? zvbu2{~Tfa8>2p-^S{q)uuCNyS~tAI5J=>u@}oW;gD#oy%6 z<`|nlB&mHSsEzfdw-2$j2dh~wu=xX4ei#rmLaT5(>3rNy{k%U+8!~bFPPbelWQJ{0 ztj|dG^eCOFpO;U#!dOo_hMt)Q!R-_aJ(Gl8SUGOmgNJU`^7jJ6TzvQ?ECRkM9ZqtF zUKB?DeE%R!_d&1>xCk<1f{YZx2{0uQZgwfW+Nkeb^w&*bU-fzo3jqcY$GofQ@3!l-@pX>C~ z?4-kxwa|mvV-I%P^atxguS4XaD*_8M?4*s=EqITH&YWeZL%PxFd61yuJto+%E2W@a z2t(f=dVhFx9h|5^W-uZM!V!Va_la>J)G4s6`v=Qt76LYLl*ikSm7#1BIbv~}}q5)9H!ssaFDIWL_*2f%y+<%xV;(9{^g3p)iPXb_~(mIl)ROY@~rRxY%ir{zv7-Y0T#X8>_&F0x`Dg;M3 zj^xKTMkw8CVmknXXr){2PVft62Fi{>MPTj$OxZEC1O#2#&!94(@WALrW9#QNRL15y zlMjrSDxo~JI+Fp$Pp74_b5N!^gDas>b4EZHo+3d5qsvaIsA~9gBM2rtNR3L6?4U{< zM>c(KuYj%fpTZeb*`a0S&ZeL;9Q_6!$_^?6jaDfrMaoPgj+#PY``dJI&Q8*U2F48< z7ieUDft55^-GC923et;fV5$eNYO^wW(7g^rx=F0Sa=)-il$C`4w8&vg+S96b{UF>k z!5OD*%Adk_jq*qEZCid1zU|6kugvM1ANNmF!XY3o+!Pv|eRK8HFE|?TjC)nqhi{+0yr{T;wlypBi&l|>P z{D4MoF1rfVLET~2AB5k23yTz19)fR|YrqX{@lAFW6b=hC7{-H-$3mW)9kDH#Trjhm z0G7R=Itj9?an*!-9YDlg1y&P)0t;7ySU{bsN%lf=$VuJm0vI-tpmL0L)L@N;`E#e5 zY5Hsfym^}Kq?U?7@(*bZ_2LeF%HGKyo~K6VdEU(-Z&|Z%ImxAZE?bh3IL>nt9fspuR&e?ZMkvYRPA1p5@!-w#Ico=+iQqVs4mM+LeXBy}xodbmTz1~29_%g!dSs8 zb}*(elaNHlL$yHMAaZWiA}5uh8#xcYz&WrS}DRd2Yz9)yo^QzTr2h>ssF69sH1#1hjHW)VgT1|e4P6yk+s_?`j3 z69Dx>qL3s+!>>tTG7)|yF?pQO70mdD`}=S1lZ7i^|CueGVhlZ9nFl1_m4J?jEqa+W>)rw zS({@Xq5a^5SYvEtTa&dg@pSFiwKVr789N!EFrv1SV|}nRuT%a zl<$OYgx-Wy$K87oh7qO`<`I?<3h~^&n$U|-u8%t65rpZ4s|X7TCrp?anH(ME#%>z; znlM2h6|Ij0G(;xDU1c#(Hbw!L4JJ%5#>AopGMF%7Qe?8xnoo!OF)>Lt0e|CUGGRh= ze&OrONvf5CdKNFvUy4Z+}@KDqNA9BEX9bb6QXBuTktz7IxgB6E%zX^f!}^$&nuzg3oyP zL`;Cq<^j8P)p41lg%tAD5V%lEmT~fn^<; z^q<|6|JKf9jXcjW3YPHAzFUjUavuHv$~67f7^Bg^0xXgjhA!q2ySs6%m$9;&+O5p={#!o&i~rT`cVkRabYzs(Z7;~}nYwjr zHF$5~`osy5Ga_TD85PvSp&d~NMkni&Vhxt&Kv4I^W+EUiGCA2ws*W_Oc~@X9_fJZS zOrv}xC%Ra;wUhKQX;zMz4Rt_bya8Ke_27w9pa)QgK)YoXF2}Kg8c#OZc3#}%GkD(B`l=xJG79Okl+S)-#>b2n2CI_AC*!>)+$HyAGXB8r z;1k?LtU$M(mo49FFCck;&1-9{(W{D#6xXu&<%A3knLV ziPw8xLKs?bQ+tPnJ1B%+US6ZZ93UvQ0=@-BL`(!+@KQ5FDqIQ&Fm(_V3I&M3HvXe) z!3{?3DKI9F6QDyvo{$n3$A2;oYPzCY>=*xP4jeUf^0o3Eo&y}hFki6JSB=BAwrU)- zT-7*iW~s(MdWV1f4&Pm)y8S)xaA%5%EukYJ&M)NIPqffkh+=sl2my&nL2zG(B_-;k zlamGE*{JICFl~5sem8-0k3^1rNG@ZuFSvO+;n;6EPbHKyYB{;vox$Z5gq23ld!%r5 zrg@_5f7k|YF8d>+ESLF>cjCSFop^c>SG;3Bf?Zo!y+yw!#~x}FcWC4fvcJn7J!_I@ z^OEYhAbc=s?#97$J~}ANA9eQ5{q}Jyv;6bL?fPGL_~L*p=l&lv`}a+)x^T@ihc{M~ z!2eEWxy{YEv|pN^u=sbY%WmP``{wWpeK)_@Rrag-{^$4I3yuBQ2Ho3lU4}!kFlsMk zjM%Ljg8mW8?TL(X`yrzsw;v4U_C`jzeUb4{u)5vqj1PQdl-mm#c|Mri4UJq+W#n>m zyD*n?bNiGow@)&{&P{g7Gw+M7y3d_;t%i2I_lS-&rzo{4pMU@0`!@}>-|sqeuy?;^ z+Oj824>^aoGQKzG=$zknelc)B$D8+?J$rQQlbtQg*I(X~KR0dl8yCNy+k0&2^Xl5} z*}FT&c=p@BUlY+NwQ9nhxsUSh{?&O--K2~6Lu%g(?|;wk#q0~Ki>7U@U+=elm#-=| zy;{5VXwp|RDwB2nI^=)fwn_THUXBk6m)%&{@b{TJmju0V@UQbEYUJX0+ZmTG_n)w? z;`8AupS`v3nQ&&#FS-0=1k*}vF|AN8M;WV?r(Etb3W8j&GRoyDF~k0&Lf-; zh~^paL4PvggYI#YWk>j|C%zF7LCts;Ll7Jmsl`CU8Y6r z*j4rn@PFRFM9_yOgWniiOtEzca_jo<{u`jCVT_}}uVnBihUr@)VZ4EQSWDi?dGK%X zML&`t?Fquz*6A3_HXWajYxu6$Zk^+pVd#PJx>dcTENR7RR$X5$-!Ii;7zO@djZK6yn+V^j{}4~P%Kmr!vraL_8FRDx zU0^8_tZCEfF0j_SV+`dnuN*ewKj#;k8X#v9!3}EgJt5~XkN&9@;5At;A303yFI4cs zXzng1um{srA(KZF<(5E^MPyS6e%wN~_?$oS~ti6H^Ofnb&OC;kRQ zSYlkPJ`Gj{Xiz^qIw?Lj0rX#q38B%(n8YZw8$76=5SuVb800@lNQg{8bQ=a=*yiH} zW^T#wC3BPq4+@kilgB1RF&^#igvEqs2ulbr6P6N|5lV#52wxM*{@bPVbUPC^AXF225qcBq z2!|7f6Gjjk2(t*WzTmZrcphOsVF6(wVG&_5VF_UwVFjTukH_1E(2Gz@7)}^L7(-|v zOeIVw%p%MsTt%2im`_+hSV&k*SVmYuDElwW=kZh#stLUab%f!B2Et6j4+&Qh77&&a zRuB$LNf1I46NKTgo;C_}=)+@Dgnmh}!mvoA0J5maG3YY<_ePBZ zzlO2)6Wl|angB+_fny{`!8bNY!(pV50@#oBQ8>QERvr=CT^xmRf4O@L=l&#{ZE*i^ z-PK|S-jM&e+G}x(<~%%$84nkGN{boV8vrrDc=rRJCjy27$2|0hegY9W#&7_o6A{b8 zA8<0@FmPu89L)Mz*e?P3FdcXxm}ALu|5KQ+=noGEdmRjiryYzbTwHhN7Y`rDnEc}5 zv*Kq4JRTPJJU-Z4@e0A?#m51BJ)HZ)ESmG5%h`&SO zuM6a96nv*yr3X#$&qGi%J7`aBHbI-*wocFqy&?2?_{Nc?d__a4cnTxfdezNM*)oa$STfZT1f z)vZ^*LBmFkU7ENyZPvU+OLeQ(ZQ8bL-@&b8CwC9e&Rx8^cI)2by`H_ieR})$@e?)L z$ceB}KWTDI?3Af-@d=5BX-Ub(l<6~4(`JqtJ8t}hi2p4AVAkw8bN_dz|9^M*|I7LB z-!~vIs9%3w@PL6Kp@Rm84H-IYIJ}26eDwP~|Npc6|A_ogft_8}*Z=AIWE+ZX*ec#H zqK*!)aN;=6#4Cch9j8JJanyg}l}a4vwRoiy$N4H=S;SHIiB~RhM^1%R#8LN%R~~WH z72=go9Ce0x6%a=qBVL8X>u@R*5tsG<#l&&Wj8_S9)J@`5O1vJYLK*S;#3kYlh*uDY zXBpU4NgQ>g?D~}EO+*#Mn-EtKcO~vZyeV-tan#M?hs??612xU3LJCyx7r@X8|Y&Z&?~ z+=KWk;-19wh<72LPrN7b0^+@h7ZUd-UPRo7crkHY=)$XnxQ0`ql(?378F7E&67c}y z6~qIHR}$|>Tv*NXw?AKh?kPwnYcu}Ht|a0b%-n0@bXX+cOkAK?nb;Wae3ZQkGMQ^C5; zBi@jBIB`5j3a=RAF2qxbHzA%y+?Dt$;!TO?6K_Vmka%FC~r#THz%TR}-%! z-io+lEzci(Y8x*X;%$h#5pPS}n|M3oI^yk#hZFBWJcf8j;;FOGx z#5KgziED}H689&bM?8Rd0r5cM#l(Y%mlE$sTq53|cqQ>*;)?Y={R4=*5Fbd~jd%!g zZ{mZ9>xd5~9!@-rcntBO#8ZinB%Vcl6!BHW-zT0=JeqhR@u|d%iN_HyB|eY1MBIi3 zAeF@Jh|Br_*a*Zf#Ri@qj>KJvI}vvy?o8a9xQe)rczxpG#2XNgA>N31DsflhS;U(Y z&m-5v)aV>Et;$g&{iANB3 zC2k<@OFWDCRN||M+t2_lpST_ILgEg@i-|iDFD33oTq5pFypp&pam7ZSeqZ7)#BFGR z=SJL)xHoYJ;yU7v#KVa@5sxA6OgxpiEAcGizQps0+u)`GxC)3n5-%d|M7)H!Gx0Lw zuEZ;d`w~}dqVlEzr3-OK;%>y9hm1i8~R`mE9B1 zlij!F_6ub9#EWG2#7kuN#LHy&Zrpu^?4G#r8BebhaTReJ4{l#g+>yAKY@fJRw(rI5 zhspMdN67Yx8)W-Exczk5KJi@HKJh%+zBjjDAj^pt$?`s2ULwnhm&tN1msiMg;=*Q1 ze;}8uWUk{}E%Ol0y<{H7xt6%yEY8D-yAqEe&b8bEXnj$OEeN<50WVo^sw2&-o^-NN zB*%4Aym0lDBWll)bKNcOi@<9V(=Nk!iR|-L00E@j9OWp7 z{KER=39A6I`vgc4 za(VuR^~)1h4P-giGfb}>KGru+V6uIzcgW@NvHoFvWcyeTG5_TBV}105+?4%KhTKNE zoF7;}Jt4Mqdqe2x-*B^kSYI)IvVT}_F@4lLKx{C)5mx1e`Q4Z88^avHdX3@9`HOpi zu>9okv7UQE?Bw|-)_3G`{$ahx@Z|Ji{r3dh@_ZKW156(+BZBRjjK2@xA;64O|M32> zt~Yp}c!DcAU1-k}YLProPi6UH;WL?g3&;D*+CJWAo={8Wbn#t5{mkWt_Z_A~j(0pu zXQ(-yxRb`ZUf}(S@f%I`2=7x|Ka%S?-ml2z`vUJ<><{LSqa z&nHVe&hsh2eE%i0dcxCb9SG==6LdWg;>P{>zgH99Iw`AyfF&=Ws@_2-r3rB*B>5^ z<$mJf1e()t?QivRjb|-E_4p5lJBeT1-vL$}^I@bpJ(zwpk!uEz*J!hxyALq8BXT~= z{VKZ0lBn)pZbfk1fYQF^a+UK>Zf|*b1I+2<_J^D65x4JeE>~_p#40}M|NG|s0NlQO zx5@Y0Kr1=g4>PwTa(d)`p8M}_m43{f5$5}X%lp3LKI|R&5Oe+D{>!ZQT4dUs< z<#mEw;%7*nNBjrk1;mSq%j+N=i5HQ44e?UqQ;CPux`#D;=*p8Kk_(G zMSM2N)x^Ie9zpKqbwY2F%lA(z$?eF#j^y(ACY<;plBbjXn#5yBF1OS2x}m(Tm`d_Z zWIv1eGUBU<%k6SL@oz|8NPHXda9S6T$BV@zH<3J-;^#oTl;rX{%_@>BNG_55GvbxR z&k|Sc;raa)aTnqziMtX1h`2ZLeZ+Odj}Z?izMFUq@gIq&5-%a1MO+>)uOePV@_gc# zi04uI9Elf_`~vY};y)8FC4QB-MEn%-O5%HnE57CVafrAJ@yo>Bh;JtDO?*3X9r0Vl z!-;=PJcf7~@l@j96VD=kj`%9#w~6NyzfQc6_)X%)#IF%AC4QWE4Bd}yh)X1oCN8gQ z%Il()B#$F`I=OF8T=5;xuNdO;y0{Z@7m|k%m)AWz6L%wdGVuZ`-&(}INxq!8j`$Yh z;ly_kk0CDi@2SMUC3zO{{lw*UNO|3L70I(muAuv|7x8?O%j=MZ6klhO7m{3_XUOZi zT}WO`awBmU%1;;Kr6k`;Tp}*d&x$C#+9au& z`x5F9cOyBe;mrFKlqB~i`3mAX;zNj+uHxaVh=-G0o_7~gd^|}WLvp#-E+u(alBbe9 zmAIP9r#JB|lFuhzwu*;em$;7XYlyER``N_vi4T+AQ~2G87m_@Ucq+-;5ichBWa0*r zwFHcVfac@eG{6MV>$rqB`jpV*ECwV6E5(>{t z_K)Q2i0g=R?H%mHA)Z3=7~&&{%llI55lhZA2#{1f8xK9>5#^GTjVT%h#y zBwk4JIm9bh@%(8(yqM%8W%r+Qc|+o*Bp*dwBEE`vCGii5EB0~s8;H9Q&zI%oeE*cp-6#_-W#m#7_`+qwrmcE57IHA4^=;>;FRBh2)2c zdl5fCTt|GX?4J0ivV97#De+X2uO^;Fd>nC!>~|-=isUni%llNc#PdnMn7C>+Pmee8 zLXxKwcOkhC@nVwCBkoP%HzQt3^6|ta;t9mHWWPD_N|H~IImzE6uGr7xH;cHu?@CSF zh2#^7>&Sfz;%+35AYMW89>l##zMgm(@ehb+k^K(DV@MuLJe7E&Y@fI-@m0j{5YH!` zOT3WyM&iZ9cM&fo{v~mVct7Hm#0|u`eiol>~ zX;$e)ttZzC>aFyF+=PF}fn4?h*QGom_Okzc9Y$WQ!*vu-TdPEGXBgCns9D;PK9&)wziK?HCN|yKPc;i z<7w52uLn&wYah7YCK9y7{Nj9~Ili3BtCg}|NNAGv^8K_-`=R zOD>mJ;pFh}IUDQvS?W2rKhsvi&KD_@7k{Fdt{*RxvckIdzE zh;#gw!$Uo6oVh-7c|5F_^NX*CSmMXmYb^IAu7BfwDwi)`hq9KV|9Ic>i|e=LRc%}^ z#`Mdp=g9GXjWpL^z8)yAX7lxR3{TE4zTRQEUpbdo-}(BxCupwacAKxGO*ZEjU-z17 zzCZZ-k|qA~`j2da+!I<4Isf=N*;I2o&es>^Rdrln$Mr{fwH?>5ah=X`Kk{`#c~u?d zxc(%Eh8){L{N@*5-?EnT`^_Rp9&fIHd>s(K`Nh|V<=qE-KZ14r;p;{6E(Mfh_}2E( ze@lD7*Yhm#;p@%vt_D2E1MB-lbAE9y?{*NNzvC-Ha*H8z`Hq*ld`I&2YI&Cg-zUMJ za_8ye>wT8^@bw(a{lmE>J)GmW>>k%a<=qzY`ZAuxAj|nWg6sq8^|4QqeUR5ltmU|F zVlBrUm188YD_A(Lr{gIEa(MFngQo!Fo(3-A>l}aY54m|VIf`%k{^Zwa5A3Bui4!)q|2(tD0SF|{TaXdnJ&>{qhZV}mpD z$UpaP`(g9gBTqW&`8Ypn&zl}Kk6v6f>7y47ed7YT8`ZVk=;a=LCtkG)YQ4H~`woL~ z&Z@1k!r@T%$hOTse|c&iRUfU0=>}ZM8&uZt)+r z&K=F{P^)~_k>%~S2iLI;SY_kZvnajLNvu zcfj4q)?ZxnQ}sEJ^vAEuj15N@)!y3tQQWmos!R94H`Rg`V6U=RGxAxlYc40{^UR=4byyN$0$4pw;*>}_R z*)OBN8g_HWnoa70VK06-zOCKzfuXaF7m;Y6x$k_BlVO&K)%JJ)8G}wFX z&aEV6bjU!r8I8)G#~)r6Fy#En6&*%wyYpj*d--d(e(eYD1nq#5N6#v<+RQx`?-ZVB z_d~#uah{brMcv2EM(4eBt9W)+v!!#BylFq~UlbTS+a}?KYTZcJw3N+D1>yFty?s)$ z=6~Esb9QR)-Pt!6tylC53XO5zdi~9^kK5j=|0u?*L*VXDAN$Yy_QB6Kv9o6SA9=kd_UbCfH=yzvt8rJ>f=ilhNL8nTl zt*U?bYHn}s;5(XaFA`^jw!gR232T|E>xgZR7sH*mo^BsGa#2RJDTkgdN|`PNdYtc{ z=fA$D;-qN5FHb5ye}6>L%iFsGZGJD9qi&nrF6qL&7ln6s)NJUWo#;Dr@VL$Ay8GW5 z93QW2^|brQUq{wI)b5k3b*KsMow<9_qz6!Z>Q9lHQlCOJGS%B{jpK)Aw74WO-O&W^TLSV^3?;@ zRF3*&o73AJHXm&D7!bSShZY^19X;{o#Ve)LPxQRtJmRO1bJv|%oqu{@JD2GdwH>qa z|1zpt_I_Pg_v`j0`q8TUr$3QmueKMH?(SarW$u{PKHb-*ILsWl>_LCe87~r6-`Cb^ zbhPp#XH~_7r*-3wwCihnadO?VTFEi%9{&HP1syFL$4wrq7h z;Qi8-e>UB=sfi}W4l*$6?d*eH>`o3W`0dZzKMmTrH2J#Y-L;PgPp-Y8;TJ#d+4H>4 zO7G-lhl9({eBwS~g~nU?{F`O!2E9@*-0FMb(9PCj!%??(E}rn~pEFFS?teCBXct?* z!T0+*fxm+4=VwD5gT~$NyL(6H9^ZVH_}N)a!c4c_f6X{Fu%!6nsAPdbYuJ$9~|(k=e41s()DS_S~Yv&I4@|xl+rJ+&I-A$Si5CSijdXkF4yU4 zKf0`XVs|hp%EkFm&qc4cr8elebI5C-Ps-ah^l}fWRmXOtZ=bhr`(9_w2oG3axcRPM z^5LibX04iNT&ir<$1qOruU7Z z($HPM4tmwtq083LgSW44a~k~H#1B7swD(*q?WD^>M#GKwQhqt}v}2ddd6+kM8_$S( z_2;E&e$(?FbZIbqQpmIJou3r`v81-Le(ds)i_ow~&+DyRYBB@9kI9 zyR{1G-0f_Aard&fhMw2Pe!t+827TYSp6OTlv-iD=iyUGbU#Q{w_Q@V`$F{vk5+5s? z9ps&;_RGWCdDmuCdiY(vJ#AH&`&S(GLy~@OlE1Ux`<;F~ccVt9w?Fqgm(#X>hwT^J zeAncAyQA)B?7urz{&oKw10C0$s&V7kk|FoHrjI#9c^#c!9t4iKeRgQ%BLOy*Ie(XZ|dy#e5zks@ce); z?xzj7_onq~!;fXZpFdUe>gJpSaYEED-`p6qB|(wDaedHIWAX4MuSXp>p1FLauy2C? z+Nd*Q_PqDtZT+~&AxB-W?_05F-JmBM!|uPhF>S8i!F@xQo9kL*c!DbX!1z8Rd(HU8 z`?J%2gV$f2=du2;&BhZij(l>z*%a@)6TVt&`orPnqpT}m9eQ6pcV_1TgQn%WOYxqP zv&-zpiOXZh-}YD%rSsXiqHdY8M|hvcyO%%LbvQ7p{jAPEnNsp{(|zlId)+fvcRqfO z-QBjIhOsc^uNqL4wlEH|a};dsY6~_s>j^gY@ct3|7D5e&c0vt>r(mmiPq1|q1zRVb zVCOVcu&Xsruyc+TYC5L~HEYioYSzgWYAQDf_R1ZCz3QM~U-!J=P`6BQsP|NGs9)1Y zQQyTz(a_UI(I~*ivC(K7$HoR5N0%%cCzm`MrzU%CoLn#2I5mB2Q>&?Cjatpx)u`1R z+Y!`}OVD$vKzW(B&_>YqRSM}VS3y7eXHDVMYF{sqcWr|wS0N6;qpJY%)GBU{_^2r+~S>3=hyZPKRA6| zW9=Z-iodsFnp>|g@*@y3@hl8 z&mEQdz2O*xJ!botkMD!{Wt;hiAx|9I1Wz>cimGwNJ<|J_Ir@Ws%Kl+?Vbdp91AIL! znicXFan=^xSzWp74~)Th7%uOeiWsqC zuMshC`tlDLhW23R1cxcsWFjw`_I43sdhU1=V#Sp2moR%7PRkI>_U!oxF>LUJ<%q&C zhn0vWN49^0Sh0ENr-$W?vqn`u3uYh($Fx zV-v%Oa$y&8)zAqH%VG{N4D)LG4Vstbr!w@qbcJEw&ThNWyhL2eP(81lq1TN5tbRqb z`i!AA{Vm7kqrXM_72|d@Ecm(3cgTeXu?!<@jxhAv+N_Y7+fHZb<#L{(_Fjj*Xr3FN z&MS^OCzc485}NGSoioy&ugDie(H{ckeOGo89LC znx|h`#!z^4k73>+--BpgFfx~6-nP38i;BE|VD?vj$k5BPjA7p4CPmEu!2t{-4#Y7` zcV5X*@cV(GYOutxqHo8<=f5XtL-wn>Q><**-vadWCmh2wR zuwuh3hUp2L85XF|FwFh-4~9^VN6?*mNneg7u?*9n=Q512DP&kyag(9fv6@F&I_7vV zENM23^Sm^Uj(H4)@Z$`iXp zvFmYk7gnlaSmGSbFx_o2NB5l!%Nkzh^81wx4I7)EKzC(*`!dv?nZz*9&&1H{lbsAz z*Df&(v#n&PZq%$8-R0KRGA#O2&#>(9B8EcRHil6D80O_YWoW3^h_&Yh@jeXGca3Ez z+@8xY?8PRAhF8ZJ7TlK@Rvf5x3d2jE)0tsJ#~}>!4kj}+h$|UZDMWC5EA)Un;}&yhRLE zPggSZ^4-d?;)6X5!*(BK7;*O!mplK$u*m%>Lsfvy1q@$1RK;<0ONL(Iof!&){TP<` zg)q!(JBFdbb_&C=pHdlWzgWaD!myHIUY9Klp?zRjwDK^+0`UUFikr6>8fH9Z7@>H> zFmG9{ix{7<`mPKOIc^M9LNA71Q-c_moEyeaaG%KeTmwVx**Od&>gO<24_(7BFZ&CI zWqZHlc;^_y0=vr$!&=^9Sk$e8p<45np&`(jjo%9Tx-u;Dabu|J)RSSg@g2mQT}#!w zTJLw-<#)Mu=kBq}ul+_{oFmmic_XmLP6VbKhFuP9Yw>^th<;CpE~dPuTH$}*I<8W%QH6i;t#(*A5!+mL%;GrTwBzd=_sD4QDn&e ztjKT33E0`wStZslkCLL$91^B)X-eKzjxY<^|xAz z5%x}>|Ik4p@^~~7$Bdt%dfv-k95`{-lloKYiM=PLpW7umiZ_=xd~m_5f!H-~sY*4q zx#<6NU#+!^8j0@vw~n__RQbhCK7Q8k+m52gwxjz!YPgGm(Lc{FY5c-(eJ|Tl5!!}g zMAMneO&6TSIbY1`5WT&z_{D?`$3nB}it|hCBaYT>ELJMI_UY`{MeKds{g-168jGt3 zC%^gp`}Sf+X4#&l&))d0s1EXkA^f;v|CtuzssTe^JZRWTEbQ8K zw6<{<@jdUTcBb=9#q{4y&GRR;6z^W^_#$*bTXDH_>r(ZqdZObmb|33%brRo3Z{0RB zw56yY(z8jfb1SiDhtY3Sm6d*{niaRp8mbbf7~^LTTT$l6^T$Q(^KsCl`~rLNi|c za1nc+e!tfDQEG9sO@~b99!}zqX-oHvSmG+KUN?SiE6)dhQ{K$2eNV3u8|a5ztFxxF z==|QqCb?}oiu1;&dS@ke6L)Ui7BXdwuh?w*k{eT6SNQ$r+Pmx30e!^AImxr6sD`4; zq{UAjE$uE&nm*&t^&k0(g?Tv@zB(VVefXD;>-_91?(0=!^v_3q#1p5=%O3pUDt=YF z!~9|A-V^uj?KI3d*hd_`Fl$AJ9u8u~z+Y+!?>kdDb`UE+{B3tTp`Dm_@##6!1xR0t zlXGXcR^qA8M|c0jP+M%L&96UauDjSGyVa2dukK=4iV3?gMdR`Xt&6Ak z7JpfIbLjCpe&WvXg=J?pcM;b+6e)JQ2RjgT{{8}O2 zKApR#O_nG=U)kc1y7haCtCgF^E^66X+_KjvIBA84cqd$(xuT}G*u!?i!}d?Qh>jzd zjQ(?&kElC3vNG{dPw`pgQ)TPZZN*K){H~~PzbB4-njJZJXm3%u_Hxzhk>27@SKa1! zcJ>m>ZUrtcssF@p>*$Ad^s07Z-K*V{sh!)4=POmN*Tmoa7MvY8XFzltvDNnU;M6fS z#i)d@FMD=rB|87a_wOOLywqrYmZq1us8d>P)u`^`bDPK=X%~FOJI{}dRDI?wzEZ56 zXmEoA{U%>b_ukiA+&a7C>Fzx}#2OEO|I|CPm3U8~UU%}0uNZdeKwwS5Tf99bqW$4z z?&2-?Z`4bQiHAM)|AX;FjVqE7DRF#QLhJeF<4UqU(n{OJat-@|)H%r)lhm??F7`TSqT{>-UMEv7Zy(U3A${ zuf~0so^&7e6bD2oGPgQt#8$(X-~FLSAF-B~f1Qf2y+wV~A2a&~XvCgIpYe|R-r~(B zdq*zp+e6%XZI{hQr+SLbKJL_ezIO-F>!ZeXvg-B`-wut>x#8DUZ2X{g_Lav_Pk)}8 z`O)Z(qNzjY38B|(i$~wH@APEL6TcpPJhCeK_7lhVfByNJ$DPEx5d$*j4s0)WP7Aox zw{}O-W^jFlx0pDAxaS|BJC- ztHqzEpVzC$bQN_SzWn1}Mn`e^gQ{myAsSKnzBFs!!G2=l)|U1`e9fyr92UZb+3c7aXB<+^i+qmOCDv+rH=Z*Zc!ILLSE zh>tcW`32nYw{?7}7N1@F#nG^|vlz74&h)(LKyl<3FK-QfEQ$xB?+T7ngQ$H76(jES zTDU1eCsu57ezG&VpJ;rf+xez$7xBb}%?q0z3=yNJ=f53O&`xYVz}4ySIe&4(8m-fW zv;LwXtbOswo4@TYaNjwoMj(X<&`Nwu4 zqVv`*=YGr>AnqG=thV7tFVX3MR4?vipxCg@FCRDY@DuyapHRQmiPqw5<4>XD>JFm& z=l-!9Dqs6`RXnNjd2lQ7ddj?61Gf(no$l-3dc_VByF9*j(Ehf+_))Vb^W9@S#aWxL zXFYM~Ej~{=dJX7E9X^d_FT{V zN~N#TOzS&feRLpjr#6Al+f`{4EoW66a;VbOSQ1ou;=x-@(IcC09L~Jel-ul^nZDz# zX7YCx+qy1$tGOHY$re}RTaEEoo0Gjqz11YU-bh>4`>m!0y8z2<;Qy^=@xsbqe*E=~ z=2Y{%8#brjXs*xOJ3V5@8_nXmE!sT&=#8d_N8#{qXS~tuN=ixpYU~?L^UMD5|3>3F z=JjVD9o}e+MF~syIKR;x{~>T}!qeB9T5D{xN0z?U+&^uzGXCIe&9d9$Yksr&wWjal zSMRqsz1B24F%AA-YZeCAzOX#}wWgx-h|N+BnCEr&+0*{DrmSe5twWvH8dJ`~#~FXV z()?w=Jlp-}SDFvRtmrpKUujDA9cu96t5=#fRW9x=R=m=fy8q-CH~W>Q=Hr9E+=+gr z8QfIbJ#Ww}%{lwh0lHqVG}qGOv^~|YG@Dyr>pIZ!mBwx7#{CPQzSNA*T|QU3{!-J_ zaLmI+ScjdurKIQ&1_ zI~Vw-s%-!7Q~F3B(DVff6dEdzDu}UGt-!d;yI_$}3KY>Hg#=P5ZA?=s$Y_g>YJFTMB0AM!oXAw|C_3qj20{G));TB8BFxPF%$+-*|GhV# zu720qXP^C8d#!y=PIhum@{g4(zns*1l1um3PV(_Y~kS zz!SsEf6JBy_#a<7u>FzQ0d8~b6qa0u{o*UY!&Ug@`tSh9@Be=n)<4L{FS}{^dgWE;J1rjKluCr_uM3G4s#9grgtvsDfrC*|2n@?d-(nVt`Ex>R#gn}nVWU9 zzrJmNAIshG{39C%xO6{tfS=j!MG$_w$YVH5u=2>F1CB zZs3i#_5J*<+uu0$(TaY4>ZA3>z`}mM^qXew)S3PK-joj}Z@j#pFJJTHDNk$qd7}8j z@y1c_?TkSF1UDB>_3?0j*QiL;(anDs;-Pwm*AIjO#nZ@5b}J^5FC{C>s8_fvOce`aMuW@R7$X2F~9tu5>0 z*%6=g?Jn%&fy*9W_wFry{FU-)r;>B~_`(FAYumy;e&FEhwOup&__yP4{rcuB`uNMr zX-ocmNgsdatH0!LRrT@e_q2j~WFOau9J;JS=;Njg7FqD$J=r?&SxzK6vME zR`l{clNRHzm#@{2dF0vad-*eLACRRS1(#tZ?BS2a`P9N=J$#@27Zoe^_V7PU ztG?TPUk{I0RmQ0*d-$#o$Eokz+QYY%&iz?LPwRFYdicnxW$Pxa?cr~J@Lk<= z%X|2&|A-p3F1v?MT9mPS6z}129arP8hr2vq|Lo_}d-zq_TfWG@q=!$*Zd7Z>V!!z6 z;T1~ZrBe~u_McJu&-l50@{`|wJ>cin`##@1aNN)1^gCCEclr6l3m*IsVZhOmWT(2U;?KC;};Uo(t;XYpb`SBB2PAM!2Q`RwbNem?fcDNjGB_4B`6 zy7jan&CeB~A(dGgKfiYS@@pokkY9ZHc?EuGIaJ}N`xtlyiJMei()SCjsS-VtL$c`e z2K^L?m*W20(9a*l!|^ZpiIfJPUj)JCGr@+jhOgmBpKjOSTqkjO82fWC}c@ zMsAeuGim?%`PUa1hUN8TOZkF**-*O0ccK2%`UiUbBmG|=eoXv2&q(C&z=uEYd?v7W z-j++fP~l?9|J*-~QX0SWOVO^E`j;v5{Qc}-)Se&IBPR^4PJ^{xRamhCpS)Ohv3a&3 z``tryI*7^$zJi~-Wg&se9r_x&Wujv+Ch)1DS%&GfM}<7WSK1Jr(!?_4okQ!Ta)-W# zZe^j~a_on14$U%5r`}W#+3$pYe%*8cl@%;yX#G_Fuoph+)FNpH9=}X0C$;$EW%W!! z+McvU3>VK00`p;?mZN%kE&4#3i@l96|OK^Gw>leY;^jOv-AyWt&>88zwEDBi3OXmUfd^ zhjVCJo|Ml$EKSPSjx;?wJfmD{i|V9+=Vb)9Cy5_H??YN5rAcF*4wbo)CfZm^yNc2} zkT%38GAJ!@N?>ELI7B}78cJiz5T=PlnpCA2vt}fV+vt8ZeAxrPoUvYh-VX}x!aCI% zX88cIkiY#;2o+f9T!s}X;7*yp#j`16!&$5$lEr2ySZr>zxf@?JgqhhKl)oeaAG*NL ziFZP(hipeuIjLArg8UdNHZF;=2FOduPZUA~7NP^gLs)ovh*rQ4Nsr8kVk0f#I!TXY zBh#TLg|VcJ=UI}_&cZ2wyn@B&K{6s(eEcY1j5%6QJ)=74MI0u{F)Z1jWXXB4EIDHo zOSY)|qkW0qc#o1yc<#7}5Edc)dib$o-y_g>*dRR`OK3t^WO|rZJdXMY`-o`=LUaP< zMZ03rE-|mz&M34qlEtS>?G#i|Ol26!RCzH>l@ZNUxrzRGpVBNug|euOkt}LYxLL}B ze0h<`qhP9ZDUW&rjl(FEKa$1ni8gyCVto!8qMi}S#v5#Ge8%H!yznR!Yl59 zAvKDnS|eGiLBUeA_@3>vXs>A0 z9mQfT(R#@S;Vdd0Ho%W~k4Al?_r&TVW&a4aZQ?Sw zr=Rno3)SDVg0WMOVEq@$^ECFqJS2}8FKA=1pAWCWvtJ?9K9TAuriLG@;lpZ6ykF@X z<$>?(#Q2Fv{K)Yp^%%#|Hnknci@H7ND~B*vufkVe8s;lL%sE0L?1J%3#CQg6B>IUJ z&-fAdjl#Z>*cZbR_bAPAqTec5RBrfLTi#cK=kFr2rUY#n6T)IFVY&<1U@r1CLxO%5 z7axvzQL^|0QoICh;X|IP+Zf|=nQ`a&L{u3T+e2;+)|rfPvW`LAkH(lKVayU)vJlUb zeCQ+9VMstdaV-8Y>=(3CQaDS3eUo6{qyuqMtnWcwQ_NdJF4+F7?__KN;u740>|2HWgYCy!vG@B_y*uTuQGY3#{wtg-MN_zlKR zjj>bjN%BiRJ;XkT&-t`eHtc}>NywkHC(b7%!|%zC2a@~=zBq5JXQVks5BrI+fq4~q zlaV($_gp#Z$&r{hu44&;mYth9q_&yinCg@;%=t^%NFkerV~nZIbUsvH0w2tXXNeZ2 zAD-Zi@3CR+*}*Db_?b4skICc2Br!)PX3! z!WZrh^#pwhreZ==2+hx0Dek4YI#}2Ery08f;=D+V-t#PD`yj6b_s1z%9AYreG7`%t zB0Ul2a6OfU;b%8K$Jk}h<5|{n-d5n7|@^RC|~%jb&Bmou4GG>j zPwd%w^?^5VzJRQf^Na1u7{kUK7#<_)v?%zuijD0Zo*wMK`tnFNF0VRdT*mz&9GXlEog5Hp7or z4)dcGKlGz~^i@1Q7sr!r^I~ArXf`H2!H>1n-jNZijDL~`y#y&o-lK$euOqe z977LcRlL3s7BhILej<&hbs;mq$JnC~L!ZDVPKjbu`sc9;hZeAeyhTirk&Q3xotKA> zJ2IcWh+`JKkLRw_acJAnZ6P6?CE&U#0oQa1>9J;Uz7pL-rgX_C{nKG{mb^eT1f5q5WkfUspNYO_4uBLR@|ZIU5I&0*jnW z=Mn{M1$$Y}ooPH1aXx`9=_TMRSy84C(Z&=5V{knX?MLLF^)AL7lkwi}O@ZBq{B%!X z3)=076-0faQi{`$;-ziLZnzG@e4mK<9_K2vG^VkL2VAEgfFDndUa4M@D8&81lcjMk zr*_diLt{m;WX1ac!w6iL+o>>KMWh%qS6 zoAH=8m2Au&ao!ZK#>6=S=LGfP;n!%9Vw-Vof@>G?+9X%nAGFnoEP>6MBlWQiTniym zpNaGeo)07OK&AxrndZZwjZzllei$SI-bECzWem99#`!%-x|Y{b8C`h4Nv}-Y_c;F* zf&?AX%P+8x?$yyNc%M!MJx4A}+#&x9-cuZ!&ov|;-ERrLvc7|^KeruB50dV~&@2A5 z#59@L%gmQqEOV#KeKOrL56Se&JR?&{_2V^N<~QP%53YUW?VDv5$=o4xuS}QBLo$!c z49E;WBbA>hbArt2GOw4Zlc|?kBy*?Chh;isw#$51rcY+C%ri2hzL)AxmN{MKOqmO1 z-X!x@nLA|OBXf_;$7DVw^DUWOGSA4wyC2c6X)=X_mQD=KV7F$!wK*P^MSr zCo<2-6f48O#i7f~jFxRWqh(`>WlKTv2IIVvvSKTq?42C4$Y`BcX0aHHtvXA|24iXI zVgu6*NzF4^j0FZHvg4GxVp}O55uR7L#W<&QVPTPxG`4BP;^IPUVL?&hcH@ei!cuEC z4q?7K42FjmPP-^x&HjL0z- z+;03qdaN+tSY)*RV8@0bwm$EmImLz*=E7oeY?&i0uc&lRQBlbT+}k7_&0AGageTWG z(iR#gZPnA(LW|MJ+5|#Q;d%=_L;eZs4;g2U!2r{j;@#1RoRR{AynjJC?D2tQQG;Y4 zoEO7aqkBg33wHZC`_cA|1zU_bVjQIo_cyj)SWsRV^ggyHEYE1!QdnGI#ZZV2$=J4Y zWl2?uwSO#7StVQG&}db$aSr>#c`2*ejU(WSX0dy0iKt5^d6eNmbAiRU!fGij-h`I5 zjmVj|w7`6JdpXr9diXZ8k!=$e!XxJum6RIUU826Q5YGmt{bF0H#k3pY;*_+S{S2N3 z`xYAJl^Be=f=x#D47F{}Je+GDrIME|SW5b9VvBX;j_j)uOUsI^g>$!Ajd>-j3k}A3 zrUDBK3lFM!C1>}unN-Gt;@b-?CB<717E-fI(T`Sf6fd-EEP3RR9jgi~g$3)WwaaMF z3hUW%{Fq9Yip)drQR=glB98}Il(9NtVNqGBiMl(tY~x0w1s?K^WdGvQk|HDZj?qyF zecDDS8SyPMaST>qo?vXbsOK7`5m^_STToaEYo7h6_Z}wNTXwEXsf|>duB4Cx2_eVc zV)HOLNe;J~sU+`{>s!sPK*Vhz^GgS?BNVT?4S6M03e8Y7W&E#tmDNbsDbm>w*G)7; zkSjEj8Pe^4y8Ktu82gV~G>11Hp(~Z|znAu0{J)^N_`ZK;PYB8lw)3AU=lo+sCP{rh zKm9+mEuF=2PaX#i`TFiZT!duVbGEHuQBm|A=kx8Y-z9y%AGAY|RMAlV?^Ucy2+8_e z`TyPf&u_m@b>a5|OS;>@$0} zeeK1|zq3|6VmaQ2F8}z)A8XjUk8k}r{fGJA@BGAf65ofvGuW~pWce>jkX9;P=)Y8f z=Ay6vq6Yk%iz!&Y!C>6D$y9jj=AtddCFa|3u~2sV*79xJrG{PnLH7UVhX0GJzmP{r zX;Q@(bqmeExMBaE;{QK)lWuvQE}tyTqyH@Ll3&N=a(Bq({%48h0gU9#dDk!Jp95(> zy@G?^{ps-Y$qYVcl@%Aj>k4swo|VNev>$5@*PUITm{n>uTqNK5d4hHRw^GR%Zp$%R zCzJ&`ARg#$FgXruexTDDvacZ8zXX(#^xh^KDZ7- z>AS#pRk%k-<$!5wDLoT3%R2FS$UDe$5DXtH=}PcT+zZtso$eX-;Ya?eq4$GRCP?L^ zf!VTN0ctf^Gle`^paIej-3(SiJkYDb2O)=`+rU~#2lS)hDbmTFU=l7gNLPVg2(^tk zF;z;R1TK{IZ18>v*`ykLL)JUM$8b%1D0l}X z$1kuQ;L8y2ajeY&&p?hMk9I1?cRKEiLwA91UydIe7{r=Fa2A4$+LH%92yuTYu)W~S zE2J`KgKt5cNPh>^YbBld6{H&J$H9BAl-jcod=r-~W~66c#aKOr`r-r^XTWEWo&(-; z4L-+2y?W3Kp*9dVUn}J=0{@gL+0X};%z}U8*ly7NBg6o72WYxp%1^vJ3)gi>*MiY= zr1r#sb_kX40I!)Vm6-{ynTPd{$bU1qd_L?0JrDd7#E<+waOFbD4&7igKIWr5E--Sj zRAvmgX9>m*>3czX@E-M-7@otJ61oCh3<-sv1CCz`|AwvsXF|w-W`nC_JsbmAmgCw_aYWZTo=lFd^4bHKDB+yO=TL^Fi?MSMoq+rcxkj-T&k z%OO-(9{4nb=AU+OZ?RMku?r%$2fVaInv14`TOeZj;6yX-M5EqG;7bq{`sD#_w_#kN z6TgEfq0%P#)EtjID-r zLeB>ug3SL0u>k%NavJGAkl)3a2I*Pg$O_bjbS0>TkWUgPSHgx!PXix-Q2VRF+?|r1 z2cCkEO-_SP-Yum+1%3^o_WQy3U6P&%E`U(}Y;c>b?*Ko&7jrw>(*?dc0#EAr@^cDNav;; zaOGZ1p6z2>A^03kbzaH|TG}e1~*mid#BX1GYTD*i%TKeE@UalTsUwg7HsD z<;(`VAY>n6?$g*t{ygwG2#w<*aLqH)u{VR|5X!#`41HE=12GFi`Ln^T5VA=*=z=Ja zpV$L2K<@`r+of~LeDKiourJbyzkdPqCv+dU;2>-SJsS*pQLYP|_7Z%U(n0OZh#ly} z0!RmR1Na4m+S3g#@!%YU^c=7gl88BhSojLY6nYU@`6}jc=)1ss4xwJ?RbcIFlI{Q# z-@v&O>BR3Knb27WuCv}kEI=owye;{v2E6)R%mYZz1mA@mhwcRhoZRpw}T62{0SNK2j6MqCz_2XD@vR`Uv8u&WtNcV#7ev}KH`0N1A zo6y_An@`{x7dmmupme@V18)kTUr0BA0mv_)6Tkfy?^~d2PT~9xp|;0Oik zhaL(}f>2$=+hpAe9+LIyNUW`hMH`WSHfV=XU9_$!Isrs_B4~!tH9YZU2({S*KAMO) zK%RZXF=+D%iMOdRPb0k=v_Z5;_krnZ%m?UK2B?EjImA(8rE*N;1lE>}HXwh-c(eyX z?RSG-2%R5^8z;bK$YTQUPQknaeHS=QBjukC{ux5$XH68?Zip3mJm4Q8lCnr;SEj>O&<}x2FPC(Dt(d(Ep*jB$ zxO)cLk37}jb63EI7^8#WQZ2@x$_E=ED(Ft|7=-%O1^(ztX{@urTnP0g58Np0Ca?lR z`H3~MPJAvM_D7iq!RxL<{6U`$Zh%lZ25>ioj@<|T9zuTQ18Hpxr4xTH>$DE$Q(4D% zI@!#trTnwO?;wT%=AUZ>b}xjEtpf9B;T{0eiETf^H5YU@xbu398R~ipEaM>BRu0}V z2XTx%JHU&!Vkd1kaDE^L3Ivn3|#{jL3Tl}0PlrVL9Yh)Kz;$8 zzSBhCQ>wwZ6Y2X2X-Fs1_f9CCNZ%JBok-tzAe~6xQy`s4Yp+QsmdQGi)~HiDk=9I; zPNenGq!VfVGwDQHQ%pLM)>D#Bq;->|6KPE(=|oz)NII?mqxE&96KOr%Y>Wkw*20PT zL0X&UL^_eyrBOPO)^w3hOp$f=f3J&MK#%hf_G;~!_AGn0J>PD&m)k4sRrYGT)9$vn z+x_-{oz-PIvK=}{zC-UYIn0i7M}?!xQSGR4*c?uW+tKduI653&N2kN*=yv!W0SBvB z)GO;%^_u#$dTo7XeO7&Ty{TC^>hEmxLev=JS`n9-WFd=cZI+{A0x|;$`ie^=FT61P| zc5{BSskywls=21w+1%dT(cIbG-5h9ExKyq*SEei5mG3gS%3+BbSfL#j=tS=WE(Q9X zhCXMbzb5px3jK7Vj~y+Y=wF~kfu5zISJ~*13B9R8Pn_sQ2YS$r)+^BRG_*RqEx*mw zR^C?CR@3HeYj5jl>ul?83$&ph)wo8%_$q8FTbeD?mTk+&D3@b|X?)u;ww<dK-g$XfHg?Mlx7CI0I-G~7N{67u8pAEk^!RM>s?@su72mHJnKCXa&r@^cu}gz6BTW<+K+qSB3s^dcJlh(sl#P>TrEA^OaSylO<98xiM4wD}QfN<^6!5vD_Q znHwt_s~c^N?nY0ex6#+=Z)8rTQ{&V+vz$7o-f4DLIIEpDr`zdqdYwL}-^unX_iOfR z_h;?b?bq)&@2}Wjz2COqz2CFnyWh9pzn?WJn>0<@rmQAilfKE^RMAx3WNUIad78XU zz9xSYYgRUEnzhYY&AMiNv$?sVxw_fb>~8indz*dD{$}P4WE6b&G>0M@51tQai zsPrHreTYVeNYo$-vk-xLL|+9W&xWY;h!N*Uv?&p3T11%+5oShoRU@+8h$=54%8zJL zB9gRiS#7#DeVe(hqOH2k*5+>Ww0YZnZGQ4cH?G?OW>eZUHmxm7oOjHabE<7N%r_p) zH9ni)#%h(AX|%OjwYpk;t+}?Mwz}3<>#p_GdTV{P{#s^N+BJ49=4qW>k9oQRbF>Zj z6PORz^8|RUAAVbdR42UD3qSSS+v~jWNBT~74)VCMUj?7ehd(>*9x)e1z0R4B(J^6s k$}vJ!7^51e6Qk6Qaq7TGbz-bE7$XzzH~io0e~tzIA5y~n3IG5A diff --git a/pyxell.sh b/pyxell.sh new file mode 100644 index 00000000..c09f09ba --- /dev/null +++ b/pyxell.sh @@ -0,0 +1 @@ +python -m src.main "$@" diff --git a/requirements.txt b/requirements.txt index 24a3e1e8..4afec941 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,4 @@ -argparse -colorama +antlr4-python3-runtime==4.7.2 +argparse==1.4.0 +colorama==0.4.1 +llvmlite==0.29.0 diff --git a/src/Checker.hs b/src/Checker.hs deleted file mode 100644 index 9637ed30..00000000 --- a/src/Checker.hs +++ /dev/null @@ -1,1018 +0,0 @@ - -module Checker where - -import Control.Monad -import Control.Monad.Trans.Reader -import Control.Monad.Trans.Error -import Data.Char -import Data.List -import qualified Data.Map as M -import qualified Data.Set as S - -import AbsPyxell hiding (Type) -import ParPyxell -import LayoutPyxell (resolveLayout) -import ErrM - -import Utils - - --- | Identifier environment: type and nesting level or namespace. -data EnvItem = Variable Int Bool -- level of definition, whether initialized - | Module Env - deriving Show -type Env = M.Map Ident (Type, EnvItem) - --- | Checker monad: Reader for identifier environment, Error to report compilation errors. -type Run r = ReaderT Env (ErrorT String IO) r - --- | Compilation error type. -data StaticError = NotComparable Type Type - | IllegalAssignment Type Type - | IllegalRedefinition Type - | NoBinaryOperator String Type Type - | NoUnaryOperator String Type - | UnexpectedStatement String - | NotPrintable Type - | UndeclaredIdentifier Ident - | RedeclaredIdentifier Ident - | RepeatedMember Ident - | NotType Ident - | NotVariable Ident - | NotInitialized Ident - | MissingReturn Ident - | VoidDeclaration - | NotLvalue - | InvalidExpression String - | InvalidSlice - | UnknownType - | NotTuple Type - | CannotUnpack Type Int - | NotFunction Type - | TooManyArguments Type - | TooFewArguments Type - | MissingDefault Ident - | RepeatedArgument Ident - | UnexpectedArgument Ident - | ExpectedNamedArgument - | ClosureRequired Ident - | NotIndexable Type - | NotIterable Type - | NotClass Type - | AbstractClass Type - | InvalidSuperCall - | NotNullable Type - | InvalidAttr Type Ident - | InvalidModule Ident - --- | Show instance for displaying compilation errors. -instance Show StaticError where - show err = case err of - NotComparable typ1 typ2 -> "Cannot compare `" ++ show typ1 ++ "` with `" ++ show typ2 ++ "`." - IllegalAssignment typ1 typ2 -> "Illegal assignment from `" ++ show typ1 ++ "` to `" ++ show typ2 ++ "`." - IllegalRedefinition typ -> "Illegal redefinition of function `" ++ show typ ++ "`." - NoBinaryOperator op typ1 typ2 -> "No binary operator `" ++ op ++ "` defined for `" ++ show typ1 ++ "` and `" ++ show typ2 ++ "`." - NoUnaryOperator op typ -> "No unary operator `" ++ op ++ "` defined for `" ++ show typ ++ "`." - UnexpectedStatement str -> "Unexpected `" ++ str ++ "` statement." - NotPrintable typ -> "Variable of type `" ++ show typ ++ "` cannot be printed." - UndeclaredIdentifier (Ident x) -> "Undeclared identifier `" ++ x ++ "`." - RedeclaredIdentifier (Ident x) -> "Identifier `" ++ x ++ "` is already declared." - RepeatedMember (Ident x) -> "Repeated member `" ++ x ++ "` in class definition." - NotType (Ident x) -> "Identifier `" ++ x ++ "` does not represent a type." - NotVariable (Ident x) -> "Identifier `" ++ x ++ "` does not represent a variable." - NotInitialized (Ident x) -> "Identifier `" ++ x ++ "` might not have been initialized." - MissingReturn (Ident x) -> "Not all code paths return a value in function `" ++ x ++ "`." - VoidDeclaration -> "Cannot declare variable of type `Void`." - NotLvalue -> "Expression cannot be assigned to." - InvalidExpression expr -> "Could not parse expression `" ++ expr ++ "`." - InvalidSlice -> "Invalid slice syntax." - UnknownType -> "Cannot settle type of the expression." - NotTuple typ -> "Type `" ++ show typ ++ "` is not a tuple." - CannotUnpack typ n -> "Cannot unpack value of type `" ++ show typ ++ "` into " ++ show n ++ " values." - NotFunction typ -> "Type `" ++ show typ ++ "` is not a function." - TooManyArguments typ -> "Too many arguments for function `" ++ show typ ++ "`." - TooFewArguments typ -> "Too few arguments for function `" ++ show typ ++ "`." - MissingDefault (Ident x) -> "Missing default value for argument `" ++ x ++ "`." - RepeatedArgument (Ident x) -> "Repeated argument `" ++ x ++ "`." - UnexpectedArgument (Ident x) -> "Unexpected argument `" ++ x ++ "`." - ExpectedNamedArgument -> "Expected named argument." - ClosureRequired (Ident x) -> "Cannot access a non-global and non-local variable `" ++ x ++ "`." - NotIndexable typ -> "Type `" ++ show typ ++ "` is not indexable." - NotIterable typ -> "Type `" ++ show typ ++ "` is not iterable." - NotClass typ -> "Type `" ++ show typ ++ "` is not a class." - AbstractClass typ -> "Cannot instantiate an abstract class `" ++ show typ ++ "`." - InvalidSuperCall -> "Cannot call `super` here." - NotNullable typ -> "Type `" ++ show typ ++ "` is not nullable." - InvalidAttr typ (Ident a) -> "Type `" ++ show typ ++ "` has no attribute `" ++ a ++ "`." - InvalidModule (Ident m) -> "Could not load module `" ++ m ++ "`." - - --- | Does nothing. -skip :: Run () -skip = do - return $ () - --- | Throws an error and exits compilation. -throw :: Pos -> StaticError -> Run a -throw pos err = do - case pos of - Just (r, c) -> fail $ ":" ++ show r ++ ":" ++ show c ++ ": " ++ show err - Nothing -> fail $ ": " ++ show err - - --- | Inserts a label into the map and continues with changed environment. -localLabel :: String -> Run a -> Run a -localLabel name cont = do - local (M.insert (Ident name) (tVoid, Variable 0 True)) cont - --- | Inserts a type into the map and continues with changed environment. -localType :: Ident -> Type -> Run a -> Run a -localType id typ cont = do - local (M.insert id (typ, Variable (-1) True)) cont - --- | Inserts a variable into the map and continues with changed environment. -localVar :: Ident -> Type -> Int -> Bool -> Run a -> Run a -localVar id typ lvl init cont = do - local (M.insert id (typ, Variable lvl init)) cont - --- | Sets a variable as initialized. -updateVar :: Ident -> Run a -> Run a -updateVar id cont = do - (t, Variable l _) <- asks (M.! id) - local (M.insert id (t, Variable l True)) cont - --- | Sets variables as initialized. -updateVars :: [Ident] -> Run a -> Run a -updateVars ids cont = case ids of - [] -> cont - id:ids -> updateVar id $ updateVars ids $ cont - --- | Gets an identifier from the environment. -getIdent :: Ident -> Run (Maybe Type) -getIdent id = do - r <- asks (M.lookup id) - case r of - Just (t, _) -> return $ Just t - Nothing -> return $ Nothing - --- | Runs continuation on a higher nesting level. -nextLevel :: Run a -> Run a -nextLevel cont = do - l <- getLevel - local (M.insert (Ident "#level") (tVoid, Variable (l+1) False)) cont - --- | Returns current nesting level. -getLevel :: Run Int -getLevel = do - Just (_, Variable l _) <- asks (M.lookup (Ident "#level")) - return $ l - - --- | Checks whether variable exists in the environment and returns its type. -checkVar :: Pos -> Ident -> Run Type -checkVar pos id = do - l1 <- getLevel - r <- asks (M.lookup id) - case r of - Just (t, Variable l2 init) -> do - if not init then throw pos $ NotInitialized id - else if l2 > 0 && l1 > l2 then throw pos $ ClosureRequired id - else if l2 < 0 then case t of - TClass {} -> return $ t - otherwise -> throw pos $ NotVariable id - else return $ t - Just (TModule _, _) -> do - return $ tModule - Nothing -> throw pos $ UndeclaredIdentifier id - --- | Checks whether type identifier exists in the environment and returns the actual type. -checkType :: Pos -> Type -> Run Type -checkType pos typ = do - case reduceType typ of - TVar _ id -> do - r <- asks (M.lookup id) - case r of - Just (t, Variable (-1) _) -> return $ t - otherwise -> throw pos $ NotType id - otherwise -> return $ typ - --- | Same as `checkType`, but skips the returned type. -checkType_ :: Pos -> Type -> Run () -checkType_ pos typ = checkType pos typ >> skip - --- | Declares a variable and continues with changed environment. -checkDecl :: Pos -> Type -> Ident -> Bool -> Run a -> Run a -checkDecl pos typ id init cont = do - case typ of - TVoid _ -> throw pos $ VoidDeclaration - otherwise -> do - l <- getLevel - localVar id typ l init cont - -checkNotDeclared :: Pos -> Ident -> Run () -checkNotDeclared pos id = do - r <- getIdent id - case r of - Nothing -> skip - Just _ -> throw pos $ RedeclaredIdentifier id - --- | Checks if one type can be cast to another and returns the unified type. -checkCast :: Pos -> Type -> Type -> Run Type -checkCast pos typ1 typ2 = do - case (typ1, typ2) of - (TInt _, TNum _) -> return $ typ1 - (TFloat _, TNum _) -> return $ typ1 - (_, TAny _) -> return $ typ1 - otherwise -> case castType typ1 typ2 of - Just t' -> case typ2 of - TFuncDef {} -> throw pos $ IllegalRedefinition typ2 - otherwise -> return $ t' - Nothing -> do - t1 <- retrieveType typ1 - t2 <- retrieveType typ2 - case castType t1 t2 of - Just t' -> return $ t' - Nothing -> throw pos $ IllegalAssignment typ1 typ2 - --- | Same as `checkCast`, but skips the returned type. -checkCast_ :: Pos -> Type -> Type -> Run () -checkCast_ pos typ1 typ2 = checkCast pos typ1 typ2 >> skip - - --- | Checks the whole program and returns environment. -checkProgram :: Program Pos -> String -> Run Env -checkProgram program name = do - case program of - Program pos stmts -> do - env1 <- ask - -- `std` module is automatically added to the namespace, unless this is the module being compiled - env2 <- case name of - "std" -> checkStmts stmts ask - otherwise -> checkStmts (SUse _pos (Ident "std") (UAll _pos) : stmts) ask - return $ M.insert (Ident name) (tModule, Module (M.difference env2 env1)) env1 - - --- | Checks a block with statements. Returns the set of variables that have been initialized. -checkBlock :: Block Pos -> Run (S.Set Ident) -checkBlock block = do - case block of - SBlock pos stmts -> checkStmts stmts $ do - env <- ask - return $ S.fromList $ M.keys $ flip M.filter env $ \case - (_, Variable _ True) -> True - otherwise -> False - --- | Checks a bunch of statements. -checkStmts :: [Stmt Pos] -> Run a -> Run a -checkStmts statements cont = do - case statements of - [] -> cont - s:ss -> checkStmt s (checkStmts ss cont) - --- | Checks a single statement. -checkStmt :: Stmt Pos -> Run a -> Run a -checkStmt statement cont = do - case statement of - SUse pos id use -> do - r <- asks (M.lookup id) - case r of - Just (TModule _, Module env) -> case use of - UAll _ -> do - local (M.union env) cont - UOnly pos ids -> do - case ids \\ (M.keys env) of - [] -> skip - id':_ -> throw pos $ UndeclaredIdentifier id' - local (M.union (M.filterWithKey (\id _ -> elem id ids) env)) cont - UHiding _ ids -> do - case ids \\ (M.keys env) of - [] -> skip - id':_ -> throw pos $ UndeclaredIdentifier id' - local (M.union (M.filterWithKey (\id _ -> not (elem id ids)) env)) cont - UAs _ id' -> do - local (M.insert id' (tModule, Module env)) cont - otherwise -> throw pos $ InvalidModule id - SClass pos id ext membs -> do - r <- getIdent id - case r of - Nothing -> skip - Just _ -> throw pos $ RedeclaredIdentifier id - membs <- return $ prepareMembers id membs - foldM' S.empty membs $ \s m -> let id' = idMember m in case S.member id' s of - False -> return $ S.insert id' s - True -> throw (posMember m) $ RepeatedMember id' - (bases, membs) <- case ext of - CNoExt _ -> return $ ([], membs) - CExt _ t' -> do - t' <- retrieveType t' - TClass _ _ _ membs' <- case t' of - TClass {} -> return $ t' - TVar _ id' -> throw pos $ NotType id' - otherwise -> throw pos $ NotClass t' - forM membs $ \m -> case findMember membs' (idMember m) of - Just (_, t, _) -> case reduceType t of - TFunc {} -> skip -- TODO check method compatibility as well - otherwise -> checkCast_ (posMember m) (typeMember m) t - Nothing -> skip - return $ ([t'], extendMembers membs' membs) - let t = tClass id bases membs - checkDecl pos t id False $ localType id t $ do - forM membs $ \case - MField pos t _ -> do - checkType_ pos t - MFieldDefault pos t _ e -> do - checkType pos t - (t', _) <- checkExpr e - checkCast_ pos t' t - MMethod pos (Ident f) (TFuncDef _ id' _ as r b) -> do - c <- case bases of - [TClass _ _ _ ms] -> case findMember ms (Ident f) of - Just (_, super@(TFuncDef {}), _) -> return $ localVar (Ident "#super") super 0 True - otherwise -> return $ \x -> x - [] -> return $ \x -> x - c $ checkFunc pos id' [] as r (Just b) skip - otherwise -> skip - cont - SFunc pos id vars args ret body -> do - vs <- case vars of - FGen _ vs -> return $ vs - FStd _ -> return $ [] - let r = typeFRet ret - b <- case body of - FDef _ b -> return $ Just b - FExtern _ -> return $ Nothing - checkFunc pos id vs args r b cont - SRetVoid pos -> do - r <- asks (M.lookup (Ident "#return")) - case r of - Just (t, _) -> do - checkCast pos tVoid t - updateVar (Ident "#return") $ cont - Nothing -> throw pos $ UnexpectedStatement "return" - SRetExpr pos expr -> do - (t1, _) <- checkExpr expr - r <- asks (M.lookup (Ident "#return")) - case r of - Just (t2, _) -> do - checkCast pos t1 t2 - updateVar (Ident "#return") $ cont - Nothing -> throw pos $ UnexpectedStatement "return" - SSkip pos -> do - cont - SPrint pos expr -> do - (t, _) <- checkExpr expr - t' <- retrieveType t - b <- checkPrint t' - case b of - True -> cont - False -> throw pos $ NotPrintable t - SPrintEmpty pos -> do - cont - SAssg pos exprs -> case exprs of - e:[] -> do - checkExpr e - cont - e1:e2:[] -> do - (t, _) <- checkExpr e2 - case (e1, t) of - (ETuple _ es, TTuple _ ts) -> do - if length es == length ts then checkAssgs pos es ts cont - else throw pos $ CannotUnpack t (length es) - (ETuple _ es, _) -> throw pos $ CannotUnpack t (length es) - otherwise -> do - checkAssgs pos [e1] [t] cont - e1:e2:es -> do - checkStmt (SAssg pos (e2:es)) (checkStmt (SAssg pos [e1, e2]) cont) - SAssgPow pos expr1 expr2 -> do - checkAssgOp pos EPow expr1 expr2 cont - SAssgMul pos expr1 expr2 -> do - checkAssgOp pos EMul expr1 expr2 cont - SAssgDiv pos expr1 expr2 -> do - checkAssgOp pos EDiv expr1 expr2 cont - SAssgMod pos expr1 expr2 -> do - checkAssgOp pos EMod expr1 expr2 cont - SAssgAdd pos expr1 expr2 -> do - checkAssgOp pos EAdd expr1 expr2 cont - SAssgSub pos expr1 expr2 -> do - checkAssgOp pos ESub expr1 expr2 cont - SAssgBShl pos expr1 expr2 -> do - checkAssgOp pos EBShl expr1 expr2 cont - SAssgBShr pos expr1 expr2 -> do - checkAssgOp pos EBShr expr1 expr2 cont - SAssgBAnd pos expr1 expr2 -> do - checkAssgOp pos EBAnd expr1 expr2 cont - SAssgBOr pos expr1 expr2 -> do - checkAssgOp pos EBOr expr1 expr2 cont - SAssgBXor pos expr1 expr2 -> do - checkAssgOp pos EBXor expr1 expr2 cont - SAssgCoalesce pos expr1 expr2 -> do - checkAssgOp pos ECoalesce expr1 expr2 cont - SDeclAssg pos typ id expr -> do - checkType pos typ - typ <- retrieveType typ - (t, _) <- checkExpr expr - checkCast pos t typ - checkNotDeclared pos id - checkDecl pos typ id True cont - SDecl pos typ id -> do - checkType pos typ - typ <- retrieveType typ - checkNotDeclared pos id - checkDecl pos typ id False cont - SIf pos brs el -> do - ss <- checkBranches brs - case el of - EElse pos b -> do - s <- checkBlock b - updateVars (S.elems (foldl1 S.intersection (s:ss))) $ cont - EEmpty pos -> cont - SWhile pos expr block -> do - localLabel "#loop" $ checkCond pos expr block - cont - SUntil pos expr block -> do - localLabel "#loop" $ checkCond pos expr block - cont - SFor pos expr1 expr2 block -> do - checkStmt (SForStep pos expr1 expr2 (eInt 1) block) cont - SForStep pos expr1 expr2 expr3 block -> do - checkFor pos expr1 expr2 expr3 (checkBlock block >> cont) - SBreak pos -> do - r <- asks (M.lookup (Ident "#loop")) - case r of - Just _ -> cont - otherwise -> throw pos $ UnexpectedStatement "break" - SContinue pos -> do - r <- asks (M.lookup (Ident "#loop")) - case r of - Just _ -> cont - otherwise -> throw pos $ UnexpectedStatement "continue" - where - checkPrint typ = case typ of - TVoid _ -> return $ False - TTuple _ ts -> do - bs <- mapM checkPrint ts - return $ all id bs - TArray _ t' -> checkPrint t' - TFunc {} -> return $ False - TClass _ _ _ membs -> case findMember membs (Ident "toString") of - Just (_, TFuncDef _ _ _ _ (TString _) _, _) -> return $ True - otherwise -> return $ False - TAny _ -> return $ False - otherwise -> return $ True - checkAssgOp pos op expr1 expr2 cont = do - checkStmt (SAssg pos [expr1, op pos expr1 expr2]) cont - checkBranches brs = case brs of - [] -> return $ [] - b:bs -> case b of - BElIf pos expr block -> do - s <- checkCond pos expr block - ss <- checkBranches bs - return $ s : ss - checkCond pos expr block = do - checkIf pos expr - checkBlock block - --- | Checks a list of variable assignments and continues with changed environment. -checkAssgs :: Pos -> [Expr Pos] -> [Type] -> Run a -> Run a -checkAssgs pos exprs types cont = do - case (exprs, types) of - ([], []) -> cont - (e:es, t:ts) -> checkAssg pos e t (checkAssgs pos es ts cont) - where - checkAssg pos expr typ cont = case expr of - EVar _ id -> do - r <- getIdent id - case r of - Just t -> do - checkCast pos typ t - updateVar id $ cont - Nothing -> case isUnknown typ of - False -> checkDecl pos (reduceType typ) id True $ cont - True -> throw pos $ UnknownType - EIndex {} -> do - (t, m) <- checkExpr expr - if m then do - checkCast pos typ t - cont - else throw pos $ NotLvalue - EAttr {} -> do - (t, m) <- checkExpr expr - if m then do - checkCast pos typ t - cont - else throw pos $ NotLvalue - otherwise -> throw pos $ NotLvalue - --- | Checks a single `if` statement. -checkIf :: Pos -> Expr Pos -> Run Type -checkIf pos expr = do - (t, _) <- checkExpr expr - case t of - TBool _ -> return $ () - otherwise -> throw pos $ IllegalAssignment t tBool - return $ t - --- | Checks a single `for` statement and continues with changed environment. -checkFor :: Pos -> Expr Pos -> Expr Pos -> Expr Pos -> Run a -> Run a -checkFor pos expr1 expr2 expr3 cont = do - t1 <- checkForExpr pos expr2 - (t2, _) <- checkExpr expr3 - checkForStep pos t2 t1 - localLabel "#loop" $ case (expr1, t1) of - (ETuple _ es, TTuple _ ts1) -> do - if length es == length ts1 then case t2 of - TTuple _ ts2 -> do - if length ts2 == length ts1 then checkAssgs pos es ts1 cont - else throw pos $ CannotUnpack t2 (length es) - otherwise -> checkAssgs pos es ts1 cont - else throw pos $ CannotUnpack t1 (length es) - otherwise -> checkAssgs pos [expr1] [t1] cont - where - checkForExpr pos expr = case expr of - ERangeIncl _ e1 e2 -> checkForRange pos e1 e2 - ERangeExcl _ e1 e2 -> checkForRange pos e1 e2 - ERangeInf _ e1 -> checkForRange pos e1 e1 - ETuple _ es -> do - ts <- forM es $ checkForExpr pos - return $ tTuple ts - otherwise -> checkForIterable pos expr - checkForRange pos from to = do - (t1, _) <- checkExpr from - (t2, _) <- checkExpr to - case (t1, t2) of - (TInt _, TInt _) -> return $ t1 - (TInt _, _) -> throw pos $ IllegalAssignment t2 tInt - (TFloat _, TFloat _) -> return $ t1 - (TFloat _, _) -> throw pos $ IllegalAssignment t2 tFloat - (TChar _, TChar _) -> return $ t1 - (TChar _, _) -> throw pos $ IllegalAssignment t2 tChar - otherwise -> throw pos $ UnknownType - checkForIterable pos iter = do - (t, _) <- checkExpr iter - case t of - TString _ -> return $ tChar - TArray _ t' -> return $ t' - otherwise -> throw pos $ NotIterable t - checkForStep pos step typ = case typ of - TTuple _ ts2 -> case step of - TTuple _ ts1 -> do - if length ts1 == length ts2 then do - ts <- forM (zip ts1 ts2) $ uncurry (checkForStep pos) - return $ tTuple ts - else throw pos $ CannotUnpack step (length ts2) - otherwise -> do - ts <- forM ts2 $ checkForStep pos step - return $ tTuple ts - TFloat _ -> checkCast pos step tNum - otherwise -> checkCast pos step tInt - --- | Checks function's arguments and body. -checkFunc :: Pos -> Ident -> [FVar Pos] -> [FArg Pos] -> Type -> Maybe (Block Pos) -> Run a -> Run a -checkFunc pos id vars args ret block cont = do - checkNotDeclared pos id - t <- case block of - Just b -> return $ tFuncDef id vars args ret b - Nothing -> return $ tFuncExt id args ret - checkDecl pos t id True $ do -- so global functions are global - case block of - Just b -> nextLevel $ checkDecl pos t id True $ do -- so recursion works inside the function - checkTypeVars vars $ checkArgs args False $ do - checkType pos ret - localVar (Ident "#return") (reduceType ret) (-1) (ret == tVoid) $ local (M.delete (Ident "#loop")) $ do - s <- checkBlock b - case S.member (Ident "#return") s of - True -> skip - False -> throw pos $ MissingReturn id - Nothing -> skip - cont - where - checkArgs args dflt cont = case args of - [] -> cont - a:as -> checkArg a dflt (\d -> checkArgs as (dflt || d) cont) - checkArg arg dflt cont = case arg of - ANoDefault pos typ id -> case dflt of - False -> do - let t = reduceType typ - checkType pos t - checkDecl pos t id True $ cont False - True -> throw pos $ MissingDefault id - ADefault pos typ id expr -> do - (t1, _) <- checkExpr expr - let t2 = reduceType typ - checkCast pos t1 t2 - checkDecl pos t2 id True $ cont True - --- | Adds function's type variables to the environment. -checkTypeVars :: [FVar Pos] -> Run a -> Run a -checkTypeVars vars cont = do - case vars of - [] -> cont - (FVar pos t id):vs -> do - t <- case t of - TAny _ -> return $ t - TNum _ -> return $ t - otherwise -> throw pos $ NotClass t - localType id t $ checkTypeVars vs cont -- TODO: type scopes - - --- | Checks an expression and returns its type and whether it is mutable. -checkExpr :: Expr Pos -> Run (Type, Bool) -checkExpr expression = do - case expression of - EStub pos -> throw pos $ UnknownType - EInt pos _ -> return $ (tInt, False) - EFloat pos _ -> return $ (tFloat, False) - ETrue pos -> return $ (tBool, False) - EFalse pos -> return $ (tBool, False) - EChar pos _ -> return $ (tChar, False) - EString pos str -> do - let (_, tags) = interpolateString (read str) - forM tags $ \tag -> do - if tag == "" then skip - else case pExpr $ resolveLayout False $ myLexer tag of - Bad err -> throw pos $ InvalidExpression tag - Ok expr -> checkExpr (ECall _pos (EAttr _pos expr (Ident "toString")) []) >> skip - return $ (tString, False) - EArray pos exprs -> do - rs <- mapM checkExpr exprs - let (ts, _) = unzip rs - case ts of - [] -> return $ (tArray tUnknown, False) - t:ts -> case foldM unifyTypes t ts of - Just t' -> return $ (tArray t', False) - Nothing -> throw pos $ UnknownType - EArrayCpr pos expr cprs -> do - checkArrayCprs cprs $ do - (t, _) <- checkExpr expr - return $ (tArray t, False) - ENull pos -> return $ (tNullable tUnknown, False) - EVar pos id -> do - t <- checkVar pos id - return $ (t, True) - EIndex pos expr1 expr2 -> do - (t2, _) <- checkExpr expr2 - checkCast pos t2 tInt - (t1, _) <- checkExpr expr1 - case t1 of - TString _ -> return $ (tChar, False) - TArray _ t1' -> return $ (t1', True) - otherwise -> do - t1' <- retrieveType t1 - case t1' of - TString _ -> return $ (tChar, False) - otherwise -> throw pos $ NotIndexable t1 - ESlice pos expr slices -> do - case slices of - _:_:_:_:_ -> throw pos $ InvalidSlice - otherwise -> skip - forM slices $ \case - SliceExpr pos e -> do - (t, _) <- checkExpr e - checkCast pos t tInt - SliceNone _ -> return $ tVoid - (t1, _) <- checkExpr expr - case t1 of - TString _ -> return $ (t1, False) - TArray {} -> return $ (t1, False) - otherwise -> do - t1' <- retrieveType t1 - case t1' of - TString _ -> return $ (t1, False) - otherwise -> throw pos $ NotIndexable t1 - EAttr pos expr id -> do - (t1, _) <- checkExpr expr - t1' <- case t1 of - TArray {} -> return $ t1 - TTuple {} -> return $ t1 - otherwise -> retrieveType t1 - let Ident attr = id - Just t2 <- case t1' of - TInt _ -> case attr of - "toString" -> getIdent (Ident "Int_toString") - "toFloat" -> getIdent (Ident "Int_toFloat") - otherwise -> throw pos $ InvalidAttr t1' id - TFloat _ -> case attr of - "toString" -> getIdent (Ident "Float_toString") - "toInt" -> getIdent (Ident "Float_toInt") - otherwise -> throw pos $ InvalidAttr t1' id - TBool _ -> case attr of - "toString" -> getIdent (Ident "Bool_toString") - "toInt" -> getIdent (Ident "Bool_toInt") - "toFloat" -> getIdent (Ident "Bool_toFloat") - otherwise -> throw pos $ InvalidAttr t1' id - TChar _ -> case attr of - "toString" -> getIdent (Ident "Char_toString") - "toInt" -> getIdent (Ident "Char_toInt") - "toFloat" -> getIdent (Ident "Char_toFloat") - otherwise -> throw pos $ InvalidAttr t1' id - TString _ -> case attr of - "length" -> return $ Just tInt - "toArray" -> getIdent (Ident "String_toArray") - "toString" -> getIdent (Ident "String_toString") - "toInt" -> getIdent (Ident "String_toInt") - "toFloat" -> getIdent (Ident "String_toFloat") - otherwise -> throw pos $ InvalidAttr t1' id - TArray _ t' -> case (t', attr) of - (_, "length") -> return $ Just tInt - (TChar _, "join") -> do - t'' <- getIdent (Ident "CharArray_join") - return $ t'' - (TString _, "join") -> do - t'' <- getIdent (Ident "StringArray_join") - return $ t'' - otherwise -> throw pos $ InvalidAttr t1' id - TTuple _ ts -> do - let i = ord (attr !! 0) - ord 'a' - if "a" <= attr && attr <= "z" && i < length ts then return $ Just (ts !! i) - else throw pos $ InvalidAttr t1' id - TClass _ _ _ membs -> case findMember membs id of - Just (_, t, _) -> return $ Just t - Nothing -> throw pos $ InvalidAttr t1' id - TModule _ -> do - (_, Module env) <- case expr of - EVar _ id' -> asks (M.! id') - r <- local (const env) $ getIdent id - case r of - Just t -> return $ Just t - otherwise -> throw pos $ UndeclaredIdentifier id - otherwise -> throw pos $ InvalidAttr t1' id - m <- case t1' of - TClass {} -> return $ True - otherwise -> return $ False - return $ (t2, m) - ESafeAttr pos e id -> do - (t, _) <- checkExpr (EAttr pos (EAssert pos e) id) - return $ (tNullable t, False) - ECall pos expr args -> do - (typ, _) <- checkExpr expr - typ <- case expr of - ESafeAttr {} -> let TNullable _ t' = typ in return $ t' - otherwise -> return $ typ - (vars, args1, args2, ret) <- case typ of - TFunc _ as r -> return $ ([], as, [], r) - TFuncDef _ _ vs as r _ -> return $ (vs, map typeArg as, as, reduceType r) - TFuncExt _ _ as r -> return $ ([], map typeArg as, as, reduceType r) - TClass _ id _ membs -> case isAbstract membs of - False -> do - let as = getConstructorArgs membs - return $ ([], map typeArg as, as, typ) - True -> throw pos $ AbstractClass typ - otherwise -> throw pos $ NotFunction typ - -- Build a map of arguments and their positions. - let m = M.empty - m <- case expr of - EAttr pos e id -> do -- if this is a method, the object will be passed as the first argument - (t, _) <- checkExpr e - case t of - TModule _ -> return $ m - otherwise -> return $ M.insert 0 (Left t) m - ESafeAttr pos e id -> do - (TNullable _ t, _) <- checkExpr e - return $ M.insert 0 (Left t) m - otherwise -> return $ m - (m, _) <- foldM' (m, False) (zip [(M.size m)..] args) $ \(m, named) (i, a) -> do - (pos', e, i, named) <- case (a, named) of - (APos pos' e, False) -> return $ (pos', e, i, False) - (ANamed pos' id e, _) -> case getArgument args2 id of - Just (i', _) -> case M.lookup i' m of - Nothing -> return $ (pos', e, i', True) - Just _ -> throw pos' $ RepeatedArgument id - Nothing -> throw pos' $ UnexpectedArgument id - (APos pos' _, True) -> throw pos' $ ExpectedNamedArgument - r <- case convertLambda pos' e of - e'@(ELambda {}) -> return $ Right e' - otherwise -> do - (t, _) <- checkExpr e - return $ Left t - return $ (M.insert i r m, named) - -- Extend the map using default arguments. - m <- foldM' m (zip [0..] args2) $ \m (i, a) -> case (a, M.lookup i m) of - (ADefault _ t _ _, Nothing) -> return $ M.insert i (Left t) m - otherwise -> return $ m - -- Check whether all (and no redundant) arguments have been provided. - if any (>= length args1) (M.keys m) then throw pos $ TooManyArguments typ - else if M.size m < length args1 then throw pos $ TooFewArguments typ - else skip - -- Check if all arguments have correct types. - checkTypeVars vars $ checkArgs (M.elems m) args1 $ checkLambdas (M.elems m) args1 $ do - r <- retrieveType ret - r <- case r of - TAny _ -> return $ ret - TNum _ -> return $ ret - otherwise -> return $ r - case expr of - ESafeAttr {} -> return $ (tNullable r, False) - otherwise -> return $ (r, False) - where - checkArgs as1 as2 cont = case (as1, as2) of - (_, []) -> cont - ((Left t1):as1, t2:as2) -> checkArg t1 t2 $ do - checkCast pos t1 t2 - checkArgs as1 as2 cont - (_:as1, _:as2) -> checkArgs as1 as2 cont - checkArg t1 t2 cont = case (reduceType t1, reduceType t2) of - (_, t2'@(TVar _ id)) -> do - checkType pos t2 - t3 <- retrieveType t2 - t4 <- case (t1, t3) of - (TInt _, TNum _) -> return $ t1 - (TFloat _, TNum _) -> return $ t1 - (_, TAny _) -> return $ t1 - otherwise -> checkCast pos t1 t2 - if t2' == t4 then cont -- to prevent looping - else localType id t4 cont - (TTuple _ ts1, TTuple _ ts2) -> do - if length ts1 == length ts2 then checkArgs (map Left ts1) ts2 cont - else throw pos $ IllegalAssignment t1 t2 - (TArray _ t1', TArray _ t2') -> do - checkArg t1' t2' cont - (TFunc _ as1 r1, TFunc _ as2 r2) -> do - if length as1 == length as2 then checkArgs (map Left as1) as2 (checkArg r1 r2 cont) - else throw pos $ IllegalAssignment t1 t2 - otherwise -> do - cont - checkLambdas as1 as2 cont = case (as1, as2) of - (_, []) -> cont - ((Right e):as1, t:as2) -> checkLambda e t (checkLambdas as1 as2 cont) - (_:as1, _:as2) -> checkLambdas as1 as2 cont - checkLambda e t cont = do - let ELambda pos' ids e' = e - let TFunc _ as1 r1 = t - as2 <- mapM retrieveType as1 - r2 <- retrieveType r1 - if length ids < length as1 then throw pos' $ TooFewArguments t - else if length ids > length as1 then throw pos' $ TooManyArguments t - else skip - let id = Ident ".lambda" - let b = SBlock pos' [SRetExpr pos' e'] - checkFunc pos' id [] [ANoDefault _pos t' id' | (t', id') <- zip as2 ids] r2 (Just b) skip - (r3, _) <- checkLambdaArgs (zip as2 ids) $ checkExpr e' - case r1 of - TVar _ id' -> do - r4 <- retrieveType r3 - localType id' r4 $ cont - otherwise -> cont - checkLambdaArgs args cont = case args of - [] -> cont - (t, id):as -> checkLambdaArg t id $ checkLambdaArgs as cont - checkLambdaArg typ id cont = do - checkDecl _pos typ id True $ cont - ESuper pos args -> do - r <- asks $ M.lookup (Ident "#super") - case r of - Just _ -> do - checkExpr (ECall _pos (EVar _pos (Ident "#super")) ((APos _pos (EVar _pos (Ident "self"))) : args)) - Nothing -> throw pos $ InvalidSuperCall - EAssert pos e -> do - (t, _) <- checkExpr e - case t of - TNullable _ t' -> return $ (t', False) - otherwise -> throw pos $ NotNullable t - EPow pos expr1 expr2 -> checkBinary pos "^" expr1 expr2 - EMinus pos expr -> checkUnary pos "-" expr - EPlus pos expr -> checkUnary pos "+" expr - EBNot pos expr -> checkUnary pos "~" expr - EMul pos expr1 expr2 -> checkBinary pos "*" expr1 expr2 - EDiv pos expr1 expr2 -> checkBinary pos "/" expr1 expr2 - EMod pos expr1 expr2 -> checkBinary pos "%" expr1 expr2 - EAdd pos expr1 expr2 -> checkBinary pos "+" expr1 expr2 - ESub pos expr1 expr2 -> checkBinary pos "-" expr1 expr2 - EBShl pos expr1 expr2 -> checkBinary pos "<<" expr1 expr2 - EBShr pos expr1 expr2 -> checkBinary pos ">>" expr1 expr2 - EBAnd pos expr1 expr2 -> checkBinary pos "&" expr1 expr2 - EBOr pos expr1 expr2 -> checkBinary pos "|" expr1 expr2 - EBXor pos expr1 expr2 -> checkBinary pos "$" expr1 expr2 - ERangeIncl pos _ _ -> throw pos $ UnknownType - ERangeExcl pos _ _ -> throw pos $ UnknownType - ECmp pos cmp -> case cmp of - Cmp1 pos e1 op e2 -> do - (t1, _) <- checkExpr e1 - (t2, _) <- checkExpr e2 - checkCmp pos op t1 t2 - Cmp2 pos e1 op cmp -> do - e2 <- case cmp of - Cmp1 _ e2 _ _ -> return $ e2 - Cmp2 _ e2 _ _ -> return $ e2 - checkExpr (ECmp _pos (Cmp1 pos e1 op e2)) - checkExpr (ECmp _pos cmp) - ENot pos expr -> checkUnary pos "not" expr - EAnd pos expr1 expr2 -> checkBinary pos "and" expr1 expr2 - EOr pos expr1 expr2 -> checkBinary pos "or" expr1 expr2 - ECoalesce pos expr1 expr2 -> do - checkExpr (ECond pos (ECmp pos (Cmp1 pos expr1 (CmpNE pos) (ENull pos))) (EAssert pos expr1) expr2) - ECond pos expr1 expr2 expr3 -> do - (t1, _) <- checkExpr expr1 - case t1 of - TBool _ -> skip - otherwise -> throw pos $ IllegalAssignment t1 tBool - (t2, _) <- checkExpr expr2 - (t3, _) <- checkExpr expr3 - case unifyTypes t2 t3 of - Just t4 -> return $ (t4, False) - Nothing -> throw pos $ UnknownType - ETuple pos exprs -> do - rs <- mapM checkExpr exprs - let (ts, ms) = unzip rs - case ts of - t:[] -> return $ (t, all (== True) ms) - otherwise -> return $ (tTuple ts, all (== True) ms) - ELambda pos expr1 expr2 -> do - throw pos $ UnknownType - where - checkBinary pos op expr1 expr2 = do - (t1, _) <- checkExpr expr1 - (t2, _) <- checkExpr expr2 - t1' <- retrieveType t1 - t2' <- retrieveType t2 - case op of - "*" -> case (t1', t2') of - (TString _, TInt _) -> return $ (tString, False) - (TInt _, TString _) -> return $ (tString, False) - (TArray {}, TInt _) -> return $ (t1, False) - (TInt _, TArray {}) -> return $ (t2, False) - (TInt _, TInt _) -> return $ (tInt, False) - (TFloat _, TInt _) -> return $ (tFloat, False) - (TInt _, TFloat _) -> return $ (tFloat, False) - (TFloat _, TFloat _) -> return $ (tFloat, False) - (TNum _, TNum _) -> if t1 == t2 then return $ (t1, False) else throw pos $ NoBinaryOperator "*" t1 t2 - otherwise -> throw pos $ NoBinaryOperator "*" t1 t2 - "+" -> case (t1', t2') of - (TString _, TString _) -> return $ (tString, False) - (TString _, TChar _) -> return $ (tString, False) - (TChar _, TString _) -> return $ (tString, False) - (TArray _ t1', TArray _ t2') -> do - t' <- case unifyTypes t1' t2' of - Just t' -> return $ t' - Nothing -> throw pos $ NoBinaryOperator "+" t1 t2 - return $ (tArray t', False) - (TInt _, TInt _) -> return $ (tInt, False) - (TFloat _, TInt _) -> return $ (tFloat, False) - (TInt _, TFloat _) -> return $ (tFloat, False) - (TFloat _, TFloat _) -> return $ (tFloat, False) - (TNum _, TNum _) -> if t1 == t2 then return $ (t1, False) else throw pos $ NoBinaryOperator "+" t1 t2 - otherwise -> throw pos $ NoBinaryOperator "+" t1 t2 - otherwise -> do - if op == "and" || op == "or" then case (t1', t2') of - (TBool _, TBool _) -> return $ (tBool, False) - otherwise -> throw pos $ NoBinaryOperator op t1 t2 - else if op == "^" || op == "/" || op == "-" then case (t1', t2') of - (TInt _, TInt _) -> return $ (tInt, False) - (TFloat _, TInt _) -> return $ (tFloat, False) - (TInt _, TFloat _) -> return $ (tFloat, False) - (TFloat _, TFloat _) -> return $ (tFloat, False) - (TNum _, TNum _) -> if t1 == t2 then return $ (t1, False) else throw pos $ NoBinaryOperator op t1 t2 - otherwise -> throw pos $ NoBinaryOperator op t1 t2 - else case (t1', t2') of -- modulo and bitwise operators - (TInt _, TInt _) -> return $ (tInt, False) - otherwise -> throw pos $ NoBinaryOperator op t1 t2 - checkUnary pos op expr = do - (t, _) <- checkExpr expr - t' <- retrieveType t - case op of - "~" -> case t' of - TInt _ -> return $ (tInt, False) - otherwise -> throw pos $ NoUnaryOperator "~" t - "not" -> case t' of - TBool _ -> return $ (tBool, False) - otherwise -> throw pos $ NoUnaryOperator "not" t - otherwise -> case t' of -- unary minus/plus - TInt _ -> return $ (tInt, False) - TFloat _ -> return $ (tFloat, False) - TNum _ -> return $ (t, False) - otherwise -> throw pos $ NoUnaryOperator op t - checkCmp pos op typ1 typ2 = do - t1 <- retrieveType typ1 - t2 <- retrieveType typ2 - case unifyTypes typ1 typ2 of - Just t' -> case t' of - TArray _ t'' -> checkCmp pos op t'' t'' - TFunc {} -> throw pos $ NotComparable typ1 typ2 - TClass {} -> case op of - CmpEQ _ -> return $ (tBool, False) - CmpNE _ -> return $ (tBool, False) - otherwise -> throw pos $ NotComparable typ1 typ2 - otherwise -> return $ (tBool, False) - Nothing -> case (t1, t2) of - (TInt _, TFloat _) -> return $ (tBool, False) - (TFloat _, TInt _) -> return $ (tBool, False) - (TInt _, TNum _) -> return $ (tBool, False) - (TFloat _, TNum _) -> return $ (tBool, False) - (TNum _, TInt _) -> return $ (tBool, False) - (TNum _, TFloat _) -> return $ (tBool, False) - (TNum _, TNum _) -> return $ (tBool, False) - otherwise -> throw pos $ NotComparable typ1 typ2 - checkArrayCprs cprs cont = case cprs of - [] -> cont - cpr:cprs -> checkArrayCpr cpr $ checkArrayCprs cprs cont - checkArrayCpr cpr cont = case cpr of - CprFor pos e1 e2 -> do - checkArrayCpr (CprForStep pos e1 e2 (eInt 1)) cont - CprForStep pos e1 e2 e3 -> do - checkFor pos e1 e2 e3 cont - CprIf pos e -> do - r <- asks (M.lookup (Ident "#loop")) - case r of - Just _ -> do - checkIf pos e - cont - otherwise -> throw pos $ UnexpectedStatement "if" diff --git a/src/CodeGen.hs b/src/CodeGen.hs deleted file mode 100644 index b3ec85fd..00000000 --- a/src/CodeGen.hs +++ /dev/null @@ -1,561 +0,0 @@ - -module CodeGen where - -import Control.Monad.Identity -import Control.Monad.Trans.Class -import Control.Monad.Trans.State hiding (State) -import Control.Monad.Trans.Reader -import Data.Char -import Data.List -import Data.Maybe -import qualified Data.Map as M -import qualified Data.Set as S - -import AbsPyxell hiding (Type) - -import Utils - - --- | Utility types for LLVM registers. -type Value = String -type Result = (Type, Value) - --- | Compiler environment and state. -type Env = M.Map Ident Result -data StateItem = Number Int | Label Value | Definition Env (S.Set [Type]) | Module Env -type State = M.Map Value StateItem - --- | LLVM code for each scope (function or global). -type Output = M.Map String [String] - --- | Main compiler monad: Reader for identifier environment, State to store some useful values and the output LLVM code. -type Run r = ReaderT Env (StateT State (StateT Output IO)) r - - --- | Does nothing. -skip :: Run () -skip = do - return $ () - --- | Outputs several lines of LLVM code in the current scope. -write :: [String] -> Run () -write lines = do - s <- getScope - lift $ lift $ modify (M.insertWith (++) (s ++ "-3") (reverse lines)) - --- | Outputs several lines of LLVM code at the top of the current scope. -writeEntry :: [String] -> Run () -writeEntry lines = do - s <- getScope - lift $ lift $ modify (M.insertWith (++) (s ++ "-2") (reverse lines)) - --- | Outputs several lines of LLVM code at the top of the current scope. -writeTop :: [String] -> Run () -writeTop lines = do - s <- getScope - lift $ lift $ modify (M.insertWith (++) (s ++ "-1") (reverse lines)) - --- | Adds an indent to given lines. -indent :: [String] -> [String] -indent lines = map ('\t':) lines - --- | Run computation without changing any state or generating output. -temporary :: Run a -> Run a -temporary cont = do - st1 <- lift $ get - st2 <- lift $ lift $ get - x <- cont - lift $ put st1 - lift $ lift $ put st2 - return $ x - - --- | Inserts a label into the map and continues with changed environment. -localLabel :: String -> Value -> Run a -> Run a -localLabel name lbl cont = do - local (M.insert (Ident name) (tVoid, lbl)) cont - --- | Inserts a type into the map and continues with changed environment. -localType :: Ident -> Type -> Run a -> Run a -localType id typ cont = do - local (M.insert id (typ, "")) $ cont - --- | Inserts a variable into the map and continues with changed environment. -localVar :: Ident -> Type -> Value -> Run a -> Run a -localVar id typ val cont = do - local (M.insert id (typ, val)) cont - --- | Inserts a function into the map and saves environment for later compilation. -localFunc :: Ident -> Type -> Run a -> Run a -localFunc id typ cont = do - f <- functionName id - let p = "@f" ++ f - localVar id typ p $ do - env <- ask - lift $ modify (M.insert p (Definition env S.empty)) - cont - --- | Runs continuation in a given scope (function). -localScope :: Value -> Run a -> Run a -localScope name cont = do - localLabel "#scope" name cont - --- | Returns name of the current scope (function). -getScope :: Run Value -getScope = do - r <- asks (M.lookup (Ident "#scope")) - case r of - Just (_, name) -> return $ name - Nothing -> return $ "!global" - - --- | Returns LLVM string representation for a given type. -strType :: Type -> Run String -strType typ = do - t <- retrieveType typ - case t of - TUnknown _ -> return $ "i8*" - TVar _ (Ident x) -> return $ x - TPtr _ t -> do - s <- strType t - return $ s ++ "*" - TArr _ n t -> do - s <- strType t - return $ "[" ++ show n ++ " x " ++ s ++ "]" - TDeref _ t -> do - s <- strType t - return $ init s - TVoid _ -> return $ "void" - TInt _ -> return $ "i64" - TFloat _ -> return $ "double" - TBool _ -> return $ "i1" - TChar _ -> return $ "i8" - TString _ -> strType (tArray tChar) - TArray _ t -> do - s <- strType t - return $ "{" ++ s ++ "*, i64}*" - TNullable _ t -> do - s <- strType t - return $ "{" ++ s ++ ", i1}*" - TTuple _ ts -> do - ss <- mapM strType ts - return $ "{" ++ intercalate ", " ss ++ "}*" - TFunc _ as r -> case r of - TTuple {} -> strType (tFunc (r:as) tVoid) - otherwise -> do - ss <- mapM strType as - s <- strType r - return $ s ++ " (" ++ intercalate ", " ss ++ ")*" - TClass _ id _ _ -> return $ "%c." ++ escapeName id ++ "*" - TModule _ -> return $ "" - --- | Returns LLVM string representation for given type variables. -strFVars :: [FVar Pos] -> Run String -strFVars vars = do - ts <- mapM (retrieveType.typeFVar) vars - return $ "--" ++ intercalate "-" (map (escapeName.Ident) (map show ts)) - --- | Returns a default value for a given type. --- | This function is for LLVM code and only serves its internal requirements. --- | Returned values are not to be relied upon. -defaultValue :: Type -> Run Value -defaultValue typ = do - t <- retrieveType typ - case t of - TVoid _ -> return $ "" - TInt _ -> return $ "42" - TFloat _ -> return $ "6.0" - TBool _ -> return $ "true" - TChar _ -> return $ show (ord '$') - otherwise -> return $ "null" - --- | Casts value to a given type. -castValue :: Type -> Type -> Value -> Run Value -castValue typ1 typ2 val = do - case (typ1, typ2) of - (TInt _, TFloat _) -> sitofp val - (TInt _, TChar _) -> trunc typ1 typ2 val - (TNullable {}, TNullable {}) -> bitcast typ1 typ2 val - (_, TNullable _ t2') -> do - v <- castValue t2' typ1 val - p <- initNullable t2' (Just v) - return $ p - otherwise -> bitcast typ1 typ2 val - --- | Casts given values to a common type. -unifyValues :: Type -> Value -> Type -> Value -> Run (Type, Value, Value) -unifyValues typ1 val1 typ2 val2 = do - t <- case (typ1, typ2) of - (TInt _, TFloat _) -> return $ tFloat - (TFloat _, TInt _) -> return $ tFloat - otherwise -> return $ fromJust (unifyTypes typ1 typ2) - v1 <- castValue typ1 t val1 - v2 <- castValue typ2 t val2 - return $ (t, v1, v2) - - --- | Returns an unused index for temporary names. -nextNumber :: Run Int -nextNumber = do - Number n <- lift $ gets (M.! "$number") - lift $ modify (M.insert "$number" (Number (n+1))) - return $ n+1 - --- | Returns an unused register name in the form: '%t\d+'. -nextTemp :: Run Value -nextTemp = do - n <- nextNumber - return $ "%t" ++ show n - --- | Returns an unused variable name in the form: '@g\d+'. -nextGlobal :: Run Value -nextGlobal = do - n <- nextNumber - return $ "@g" ++ show n - --- | Returns an unused constant name in the form: '@c\d+'. -nextConst :: Run Value -nextConst = do - n <- nextNumber - return $ "@c" ++ show n - --- | Returns an unused label name in the form: 'L\d+'. -nextLabel :: Run Value -nextLabel = do - n <- nextNumber - return $ "L" ++ show n - --- | Starts new LLVM label with a given name. -label :: Value -> Run () -label lbl = do - write $ [ lbl ++ ":" ] - s <- getScope - lift $ modify (M.insert ("$label-" ++ s) (Label lbl)) - --- | Returns name of the currently active label. -getLabel :: Run Value -getLabel = do - s <- getScope - Label l <- lift $ gets (M.! ("$label-" ++ s)) - return $ l - --- | Returns a unique function name to use in LLVM code. -functionName :: Ident -> Run Value -functionName id = do - s <- getScope - let f = (if s !! 0 == '.' then s else "") ++ "." ++ escapeName id - return $ f - --- | Shortcut for `localScope` with function's identifier. -functionScope :: Ident -> Run a -> Run a -functionScope id cont = do - f <- functionName id - localScope f cont - - --- | Outputs a function declaration. -declare :: Type -> Value -> Run () -declare (TFunc _ args rt) name = do - ss <- mapM strType args - s <- strType rt - localScope "!global" $ write $ [ "declare " ++ s ++ " " ++ name ++ "(" ++ intercalate ", " ss ++ ")" ] - --- | Outputs new function definition with given body. -define :: Type -> Ident -> Run () -> Run () -define typ id body = do - f <- functionName id - (args, rt, f) <- case typ of - TFunc _ as r -> return $ (as, r, f) - TFuncDef _ _ vs as r _ -> do - as <- mapM (retrieveType.typeArg) as - r <- retrieveType r - case vs of - [] -> return $ (as, r, f) - _:_ -> do - s <- strFVars vs - return $ (as, r, f ++ s) - localScope f $ do - (as, r) <- case rt of - TTuple {} -> return $ (rt : args, tVoid) - otherwise -> return $ (args, rt) - s <- strType typ - writeTop $ [ - "@f" ++ f ++ " = global " ++ s ++ " @func" ++ f ] - ss <- mapM strType as - s <- strType r - writeTop $ [ - "define " ++ s ++ " @func" ++ f ++ "(" ++ intercalate ", " ss ++ ") {", - "entry:" ] - lift $ modify (M.insert ("$label-" ++ f) (Label "entry")) - body - write $ [ "}", "" ] - --- | Outputs LLVM 'br' command with a single goal. -goto :: Value -> Run () -goto lbl = do - write $ indent [ "br label %" ++ lbl ] - --- | Outputs LLVM 'br' command with two goals depending on a given value. -branch :: Value -> Value -> Value -> Run () -branch val lbl1 lbl2 = do - write $ indent [ "br i1 " ++ val ++ ", label %" ++ lbl1 ++ ", label %" ++ lbl2 ] - --- | Outputs LLVM 'alloca' command. -alloca :: Type -> Run Value -alloca typ = do - p <- nextTemp - s <- strType typ - writeEntry $ indent [ p ++ " = alloca " ++ s ] - return $ p - --- | Outputs LLVM 'global' command. -global :: Type -> Value -> Run Value -global typ val = do - g <- nextGlobal - s <- strType typ - writeTop $ [ g ++ " = global " ++ s ++ " " ++ val ] - return $ g - --- | Outputs LLVM constant command. -constant :: Type -> Value -> Run Value -constant typ val = do - c <- nextConst - s <- strType typ - writeTop $ [ c ++ " = constant " ++ s ++ " " ++ val ] - return $ c - --- | Outputs LLVM 'external global' command. -external :: Value -> Type -> Run Value -external name typ = do - s <- strType typ - writeTop $ [ name ++ " = external global " ++ s ] - return $ name - --- | Outputs LLVM 'store' command. -store :: Type -> Value -> Value -> Run () -store typ val ptr = do - if val == "" then skip - else do - s <- strType typ - write $ indent [ "store " ++ s ++ " " ++ val ++ ", " ++ s ++ "* " ++ ptr ] - --- | Outputs LLVM 'load' command. -load :: Type -> Value -> Run Value -load typ ptr = do - v <- nextTemp - s <- strType typ - write $ indent [ v ++ " = load " ++ s ++ ", " ++ s ++ "* " ++ ptr ] - return $ v - --- | Allocates a new identifier, outputs corresponding LLVM code, and runs continuation with changed environment. -variable :: Type -> Ident -> Value -> Run a -> Run a -variable typ id val cont = do - s <- getScope - p <- case s of - "main" -> do - v <- defaultValue typ - localScope "!global" $ global typ v - otherwise -> alloca typ - store typ val p - localVar id typ p cont - --- | Outputs LLVM 'getelementptr' command with given indices. -gep :: Type -> Value -> [Value] -> [Int] -> Run Value -gep typ val inds1 inds2 = do - p <- nextTemp - s <- strType typ - s' <- strType (tDeref typ) - write $ indent [ p ++ " = getelementptr inbounds " ++ s' ++ ", " ++ s ++ " " ++ val ++ intercalate "" [", i64 " ++ i | i <- inds1] ++ intercalate "" [", i32 " ++ show i | i <- inds2] ] - return $ p - --- | Outputs LLVM 'bitcast' command. -bitcast :: Type -> Type -> Value -> Run Value -bitcast typ1 typ2 ptr = do - s1 <- strType typ1 - s2 <- strType typ2 - if s1 == s2 then do - return $ ptr - else do - p <- nextTemp - write $ indent [ p ++ " = bitcast " ++ s1 ++ " " ++ ptr ++ " to " ++ s2 ] - return $ p - --- | Outputs LLVM 'ptrtoint' command. -ptrtoint :: Type -> Value -> Run Value -ptrtoint typ ptr = do - v <- nextTemp - s <- strType typ - write $ indent [ v ++ " = ptrtoint " ++ s ++ " " ++ ptr ++ " to i64" ] - return $ v - --- | Outputs LLVM 'sitofp' command to convert from Int to Float. -sitofp :: Value -> Run Value -sitofp val = do - v <- nextTemp - s1 <- strType tInt - s2 <- strType tFloat - write $ indent [ v ++ " = sitofp " ++ s1 ++ " " ++ val ++ " to " ++ s2 ] - return $ v - --- | Outputs LLVM 'fptosi' command to convert from Float to Int. -fptosi :: Value -> Run Value -fptosi val = do - v <- nextTemp - s1 <- strType tFloat - s2 <- strType tInt - write $ indent [ v ++ " = fptosi " ++ s1 ++ " " ++ val ++ " to " ++ s2 ] - return $ v - --- | Outputs LLVM 'trunc' command. -trunc :: Type -> Type -> Value -> Run Value -trunc typ1 typ2 val = do - v <- nextTemp - s1 <- strType typ1 - s2 <- strType typ2 - write $ indent [ v ++ " = trunc " ++ s1 ++ " " ++ val ++ " to " ++ s2 ] - return $ v - --- | Outputs LLVM 'zext' command. -zext :: Type -> Type -> Value -> Run Value -zext typ1 typ2 val = do - v <- nextTemp - s1 <- strType typ1 - s2 <- strType typ2 - write $ indent [ v ++ " = zext " ++ s1 ++ " " ++ val ++ " to " ++ s2 ] - return $ v - --- | Outputs LLVM 'select' instruction for given values. -select :: String -> Type -> Value -> Value -> Run Value -select val typ opt1 opt2 = do - v <- nextTemp - s <- strType typ - write $ indent [ v ++ " = select i1 " ++ val ++ ", " ++ s ++ " " ++ opt1 ++ ", " ++ s ++ " " ++ opt2 ] - return $ v - --- | Outputs LLVM 'phi' instruction for given values and label names. -phi :: Type -> [(Value, Value)] -> Run Value -phi typ opts = do - v <- nextTemp - s <- strType typ - write $ indent [ v ++ " = phi " ++ s ++ " " ++ (intercalate ", " ["[" ++ v ++ ", %" ++ l ++ "]" | (v, l) <- opts]) ] - return $ v - --- | Outputs LLVM binary operation instruction. -binop :: String -> Type -> Value -> Value -> Run Value -binop op typ val1 val2 = do - v <- nextTemp - s <- strType typ - write $ indent [ v ++ " = " ++ op ++ " " ++ s ++ " " ++ val1 ++ ", " ++ val2 ] - return $ v - --- | Outputs LLVM function 'call' instruction. -call :: Type -> Value -> [Result] -> Run Value -call rt name args = do - v <- nextTemp - c <- case rt of - TVoid _ -> return $ "call " - TTuple {} -> return $ "call " - otherwise -> return $ v ++ " = call " - case rt of - TTuple {} -> do - p <- alloca (tDeref rt) - ss <- forM ((rt, p):args) $ \(t, v) -> do - s <- strType t - return $ s ++ " " ++ v - write $ indent [ c ++ "void " ++ name ++ "(" ++ intercalate ", " ss ++ ")" ] - return $ p - otherwise -> do - ss <- forM args $ \(t, v) -> do - s <- strType t - return $ s ++ " " ++ v - s <- strType rt - write $ indent [ c ++ s ++ " " ++ name ++ "(" ++ intercalate ", " ss ++ ")" ] - return $ v - --- | Outputs LLVM function 'call' with void return type. -callVoid :: Value -> [Result] -> Run () -callVoid name args = do - call tVoid name args - skip - --- | Outputs LLVM 'ret' instruction. -ret :: Type -> Value -> Run () -ret typ val = do - case typ of - TTuple {} -> do - p1 <- bitcast typ (tPtr tChar) "%0" - p2 <- bitcast typ (tPtr tChar) val - v <- sizeof typ "1" - call (tPtr tChar) "@memcpy" [(tPtr tChar, p1), (tPtr tChar, p2), (tInt, v)] - retVoid - otherwise -> do - s <- strType typ - write $ indent [ "ret " ++ s ++ " " ++ val ] - --- | Outputs LLVM 'ret void' instruction. -retVoid :: Run () -retVoid = do - ret tVoid "" - - --- | Outputs LLVM code to calculate memory size of an array of objects. -sizeof :: Type -> Value -> Run Value -sizeof typ len = do - gep typ "null" [len] [] >>= ptrtoint typ - --- | Outputs LLVM code to allocate memory for objects of a given type. -initMemory :: Type -> Value -> Run Value -initMemory typ len = do - v <- sizeof typ len - call (tPtr tChar) "@malloc" [(tInt, v)] >>= bitcast (tPtr tChar) typ - --- | Outputs LLVM code for tuple initialization. -initTuple :: [Result] -> Run Value -initTuple rs = do - let t = tTuple (map fst rs) - p <- initMemory t "1" - forM (zipWith (\r i -> (fst r, snd r, i)) rs [0..]) $ \(t', v', i) -> do - gep t p ["0"] [i] >>= store t' v' - return $ p - --- | Outputs LLVM code for string initialization. -initString :: String -> Run Value -initString str = do - let l = length str - let t = (tArr (toInteger l) tChar) - s <- strType tChar - c <- localScope "!global" $ constant t ("[" ++ intercalate ", " [s ++ " " ++ show (ord c) | c <- str] ++ "]") - p1 <- initMemory tString "1" - p2 <- gep (tPtr t) c ["0"] [0] - gep tString p1 ["0"] [0] >>= store (tPtr tChar) p2 - gep tString p1 ["0"] [1] >>= store tInt (show l) - return $ p1 - --- | Outputs LLVM code for array initialization. --- | `lens` is an array of two optional values: --- | - length which will be saved in the .length attribute (defaults to the length of `vals`), --- | - size of allocated memory (defaults to the previous value). -initArray :: Type -> [Value] -> [Value] -> Run Value -initArray typ vals lens = do - let t1 = tArray typ - let t2 = tPtr typ - let len1:len2:_ = lens ++ lens ++ replicate 2 (show (length vals)) - p1 <- initMemory t1 "1" - p2 <- initMemory t2 len2 - gep t1 p1 ["0"] [0] >>= store t2 p2 - gep t1 p1 ["0"] [1] >>= store tInt len1 - forM (zip [0..] vals) (\(i, v) -> gep t2 p2 [show i] [] >>= store typ v) - return $ p1 - --- | Outputs LLVM code for initialization of a nullable. -initNullable :: Type -> Maybe Value -> Run Value -initNullable typ val = do - let t = tNullable typ - case val of - Just v -> do - p <- initMemory t "1" - gep t p ["0"] [0] >>= store typ v - gep t p ["0"] [1] >>= store tBool "1" - return $ p - Nothing -> do - localScope "!global" $ constant (tDeref t) "zeroinitializer" diff --git a/src/Compiler.hs b/src/Compiler.hs deleted file mode 100644 index 98f8391f..00000000 --- a/src/Compiler.hs +++ /dev/null @@ -1,1232 +0,0 @@ - -module Compiler where - -import Control.Monad.Identity -import Control.Monad.Trans.Class -import Control.Monad.Trans.State -import Control.Monad.Trans.Reader -import Data.Char -import Data.List -import qualified Data.Map as M -import qualified Data.Set as S - -import AbsPyxell hiding (Type) -import ParPyxell -import LayoutPyxell (resolveLayout) -import ErrM - -import CodeGen -import Utils - - --- | Initializes the environment and outputs LLVM code with function declarations. -initCompiler :: Run Env -initCompiler = do - lift $ modify (M.insert "$number" (Number 0)) - lift $ modify (M.insert "$label-main" (Label "entry")) - writeTop $ [ "" ] - declare (tFunc [tInt] (tPtr tChar)) "@malloc" - declare (tFunc [tPtr tChar, tInt] (tPtr tChar)) "@realloc" - declare (tFunc [tPtr tChar, tPtr tChar, tInt] (tPtr tChar)) "@memcpy" - declare (tFunc [tChar] (tInt)) "@putchar" - write $ [ "" ] - ask - --- | Outputs LLVM code for all statements in the program. -compileProgram :: Program Pos -> String -> Run Env -compileProgram program name = do - case program of - Program _ stmts -> localScope "main" $ do - env1 <- ask - -- `std` module is automatically added to the namespace, unless this is the module being compiled - env2 <- case name of - "std" -> compileStmts stmts ask - otherwise -> compileStmts (SUse _pos (Ident "std") (UAll _pos) : stmts) ask - lift $ modify (M.insert name (Module (M.difference env2 env1))) - return $ M.insert (Ident name) (tModule, name) env1 - --- | Outputs LLVM code for a block of statements. -compileBlock :: Block Pos -> Run () -compileBlock block = do - case block of - SBlock _ stmts -> compileStmts stmts skip - --- | Outputs LLVM code for a bunch of statements and runs the continuation. -compileStmts :: [Stmt Pos] -> Run a -> Run a -compileStmts statements cont = do - case statements of - [] -> cont - s:ss -> compileStmt s (compileStmts ss cont) - --- | Outputs LLVM code for a single statement and runs the continuation. -compileStmt :: Stmt Pos -> Run a -> Run a -compileStmt statement cont = do - case statement of - SUse _ id use -> do - let Ident name = id - Module env <- lift $ gets (M.! name) - case use of - UAll _ -> local (M.union env) cont - UOnly _ ids -> local (M.union (M.filterWithKey (\id _ -> elem id ids) env)) cont - UHiding _ ids -> local (M.union (M.filterWithKey (\id _ -> not (elem id ids)) env)) cont - UAs _ id' -> local (M.insert id' (tModule, name)) cont - SClass _ id ext membs -> do - (bases, membs) <- case ext of - CNoExt _ -> return $ ([], prepareMembers id membs) - CExt _ t' -> do - t' <- retrieveType t' - TClass _ _ _ membs' <- retrieveType t' - return $ ([t'], extendMembers membs' (prepareMembers id membs)) - let Ident c = id - let t = tClass id bases membs - localType id t $ compileMembers bases membs $ do - env <- ask - lift $ modify (M.insert ("%c." ++ escapeName id) (Definition env S.empty)) - id' <- case findConstructor membs of -- handle inheritance to get the correct constructor name - Just (_, (TFuncDef _ id' _ _ _ _), _) -> return $ id' - Nothing -> return $ Ident (c ++ "__constructor") - let args = getConstructorArgs membs - localFunc (Ident (c ++ "__alloc")) (tFuncDef id' [] args t (SBlock _pos [])) $ cont - SFunc _ id vars args ret body -> do - vs <- case vars of - FGen _ vs -> return $ vs - FStd _ -> return $ [] - let r = typeFRet ret - t <- case body of - FDef _ b -> return $ tFuncDef id vs args r b - FExtern _ -> return $ tFuncExt id args r - localFunc id t cont - SRetVoid _ -> do - retVoid - cont - SRetExpr _ expr -> do - (t, v) <- compileExpr expr - (t', _) <- asks (M.! (Ident "#return")) - v' <- castValue t t' v - ret t' v' - cont - SSkip _ -> do - cont - SPrint _ expr -> do - (t, v) <- compileExpr expr - t' <- retrieveType t - compilePrint t' v - call tInt "@putchar" [(tChar, "10")] - cont - SPrintEmpty _ -> do - call tInt "@putchar" [(tChar, "10")] - cont - SAssg _ exprs -> case exprs of - e:[] -> do - compileExpr e - cont - e1:e2:[] -> do - (t, v) <- compileExpr e2 - case (e1, t) of - (ETuple _ es, TTuple _ ts) -> do - compileAssgs (zip3 ts es [0..]) t v cont - otherwise -> do - compileAssg t e1 v cont - e1:e2:es -> do - compileStmt (SAssg _pos (e2:es)) (compileStmt (SAssg _pos [e1, e2]) cont) - SAssgPow _pos expr1 expr2 -> do - compileAssgOp EPow expr1 expr2 cont - SAssgMul _pos expr1 expr2 -> do - compileAssgOp EMul expr1 expr2 cont - SAssgDiv pos expr1 expr2 -> do - compileAssgOp EDiv expr1 expr2 cont - SAssgMod pos expr1 expr2 -> do - compileAssgOp EMod expr1 expr2 cont - SAssgAdd pos expr1 expr2 -> do - compileAssgOp EAdd expr1 expr2 cont - SAssgSub pos expr1 expr2 -> do - compileAssgOp ESub expr1 expr2 cont - SAssgBShl pos expr1 expr2 -> do - compileAssgOp EBShl expr1 expr2 cont - SAssgBShr pos expr1 expr2 -> do - compileAssgOp EBShr expr1 expr2 cont - SAssgBAnd pos expr1 expr2 -> do - compileAssgOp EBAnd expr1 expr2 cont - SAssgBOr pos expr1 expr2 -> do - compileAssgOp EBOr expr1 expr2 cont - SAssgBXor pos expr1 expr2 -> do - compileAssgOp EBXor expr1 expr2 cont - SAssgCoalesce pos expr1 expr2 -> do - compileAssgOp ECoalesce expr1 expr2 cont - SDeclAssg _ typ id expr -> do - let t = reduceType typ - (t', v') <- compileExpr expr - v <- castValue t' t v' - variable t id v cont - SDecl _ typ id -> do - let t = reduceType typ - v <- defaultValue t - variable t id v cont - SIf _ brs el -> do - l <- nextLabel - compileBranches brs l - case el of - EElse _ block -> do - compileBlock block - EEmpty _ -> do - skip - goto l >> label l - cont - SWhile _ expr block -> do - [l1, l2, l3] <- sequence (replicate 3 nextLabel) - goto l1 >> label l1 - (_, v) <- compileExpr expr - branch v l2 l3 - label l2 - localLabel "#break" l3 $ localLabel "#continue" l1 $ compileBlock block - goto l1 - label l3 - cont - SUntil _ expr block -> do - [l1, l2] <- sequence (replicate 2 nextLabel) - goto l1 >> label l1 - localLabel "#break" l2 $ localLabel "#continue" l1 $ compileBlock block - (_, v) <- compileExpr expr - branch v l2 l1 - label l2 - cont - SFor _ expr1 expr2 block -> do - compileFor expr1 expr2 (EInt _pos 1) (compileBlock block) (const cont) - SForStep _ expr1 expr2 expr3 block -> do - compileFor expr1 expr2 expr3 (compileBlock block) (const cont) - SBreak _ -> do - (_, l) <- asks (M.! (Ident "#break")) - goto l - cont - SContinue _ -> do - (_, l) <- asks (M.! (Ident "#continue")) - goto l - cont - where - compilePrint typ val = case typ of - TTuple _ ts -> do - forM_ (zip [0..] ts) $ \(i, t) -> do - v <- gep typ val ["0"] [i] >>= load t - compilePrint t v - if i == length ts - 1 then skip - else call tInt "@putchar" [(tChar, "32")] >> skip - TArray _ t' -> do - call tInt "@putchar" [(tChar, "91")] -- [ - n <- nextNumber - let a = eVar ("a" ++ show n) - let i = eVar ("i" ++ show n) - compileAssg typ a val $ do - flip (compileFor i (ERangeExcl _pos (eInt 0) (EAttr _pos a (Ident "length"))) (eInt 1)) (const skip) $ do - l <- nextLabel - flip (compileIf (ECmp _pos (Cmp1 _pos i (CmpGT _pos) (eInt 0)))) l $ do - call tInt "@putchar" [(tChar, "44")] -- , - call tInt "@putchar" [(tChar, "32")] >> skip - goto l >> label l - (_, v) <- compileExpr (EIndex _pos a i) - compilePrint t' v - call tInt "@putchar" [(tChar, "93")] >> skip -- ] - TNullable _ t' -> do - v1 <- gep typ val ["0"] [0] >>= load t' - v2 <- gep typ val ["0"] [1] >>= load tBool - v3 <- binop "icmp eq" tBool v2 "1" - [l1, l2, l3] <- sequence (replicate 3 nextLabel) - branch v3 l1 l2 - label l1 - compilePrint t' v1 - goto l3 - label l2 - forM_ "null" $ \c -> call tInt "@putchar" [(tChar, show (ord c))] - goto l3 - label l3 - TClass _ _ _ membs -> do - (_, v) <- compileMethod typ val (Ident "toString") [val] - compileMethod tString "" (Ident "write") [v] >> skip - TUnknown _ -> do - skip - otherwise -> do - compileMethod typ "" (Ident "write") [val] >> skip - compileAssgOp op expr1 expr2 cont = do - compileStmt (SAssg _pos [expr1, op _pos expr1 expr2]) cont - compileBranches brs exit = case brs of - [] -> skip - b:bs -> case b of - BElIf _ expr block -> do - compileIf expr (compileBlock block) exit - compileBranches bs exit - compileMembers bases membs cont = case membs of - [] -> cont - memb:ms -> compileMember bases memb $ compileMembers bases ms cont - compileMember bases memb cont = case memb of - MMethod pos (Ident f) (TFuncDef _ id' _ _ _ _) -> do - super <- case bases of - [TClass _ _ _ ms] -> case findMember ms (Ident f) of - Just (_, super@(TFuncDef _ (Ident f') _ _ _ _), _) -> return $ f' - otherwise -> return $ "" - [] -> return $ "" - localVar (Ident "#super") tVoid super $ localFunc id' (typeMember memb) $ cont - otherwise -> cont - --- | Compiles a list of variable assignments and continues with changed environment. -compileAssgs :: [(Type, Expr Pos, Int)] -> Type -> Value -> Run a -> Run a -compileAssgs rs typ val cont = do - case rs of - [] -> cont - (t, e, i):rs -> do - v <- case val of - "" -> return $ "" - otherwise -> gep typ val ["0"] [i] >>= load t - compileAssg t e v (compileAssgs rs typ val cont) - --- | Compiles a single variable assignment and continues with changed environment. -compileAssg :: Type -> Expr Pos -> Value -> Run a -> Run a -compileAssg typ expr val cont = do - e <- case expr of - ETuple _ [e] -> return $ e - otherwise -> return $ expr - r <- compileLval expr - case (r, e) of - (Just (t, p), _) -> do - v <- castValue typ t val - store t v p - cont - (Nothing, EVar _ id) -> do - variable typ id val cont - --- | Compiles a single `if` statement. -compileIf :: Expr Pos -> Run a -> Value -> Run a -compileIf expr body exit = do - (t, v) <- compileExpr expr - l1 <- nextLabel - l2 <- nextLabel - branch v l1 l2 - label l1 - x <- body - goto exit - label l2 - return $ x - --- | Compiles a single `for` statement and continues with changed environment. -compileFor :: Expr Pos -> Expr Pos -> Expr Pos -> Run a -> (a -> Run b) -> Run b -compileFor expr1 expr2 expr3 body cont = do - es <- case expr1 of - ETuple _ es -> return $ es - otherwise -> return $ [expr1] - rs <- initFor expr2 expr3 - let (ts1, ts2, starts, steps, cmps, gets) = unzip6 rs - ps <- mapM alloca ts1 - forM (zip3 ts1 starts ps) $ \(t, v, p) -> store t v p - [l1, l2, l3] <- sequence (replicate 3 nextLabel) - ts3 <- case (es, ts2) of - (_:_:_, [TTuple _ ts']) -> return $ ts' -- for a, b in [(1, 2)] do - ([_], _:_:_) -> return $ [tTuple ts2] -- for t in 1..2, 3..4 do - otherwise -> return $ ts2 - compileAssgs (zip3 ts3 es [0..]) (tTuple ts3) "" $ do - goto l1 >> label l1 - vs1 <- forM (zip ts1 ps) $ \(t, p) -> load t p - forM (zip cmps vs1) $ \(cmp, v) -> do - l4 <- nextLabel - v' <- cmp v - branch v' l4 l2 - label l4 - vs2 <- forM (zip gets vs1) $ \(get, v) -> get v - case (es, ts2) of - (_:_:_, [TTuple _ ts']) -> do -- for a, b in [(1, 2)] do - compileAssgs (zip3 ts' es [0..]) (head ts2) (head vs2) skip - ([e], _:_:_) -> do -- for t in 1..2, 3..4 do - p <- alloca (tDeref (tTuple ts2)) - forM (zip3 ts2 vs2 [0..]) $ \(t, v, i) -> gep (tTuple ts2) p ["0"] [i] >>= store t v - compileAssg (tTuple ts2) e p skip - otherwise -> forM_ (zip3 ts2 es vs2) $ \(t, e, v) -> compileAssg t e v skip - x <- localLabel "#break" l2 $ localLabel "#continue" l3 $ body - goto l3 >> label l3 - vs3 <- forM (zip3 ts1 vs1 steps) $ \(t, v, s) -> case t of - TFloat _ -> binop "fadd" t v s - otherwise -> binop "add" t v s - forM (zip3 ts1 vs3 ps) $ \(t, v, p) -> store t v p - goto l1 - label l2 - cont x - where - initForRangeIncl from to step = do - [(t1, v1), (_, v2), (t2, v3)] <- mapM compileExpr [from, to, step] - v4 <- castValue t2 t1 v3 - c <- case t1 of - TFloat _ -> return $ "fcmp o" - otherwise -> return $ "icmp s" - v5 <- case t1 of - TFloat _ -> binop (c ++ "gt") t1 v4 "0.0" - otherwise -> binop (c ++ "gt") t1 v4 "0" - let cmp v = do - v6 <- binop (c ++ "le") t1 v v2 - v7 <- binop (c ++ "ge") t1 v v2 - select v5 tBool v6 v7 - return $ (t1, t1, v1, v4, cmp, return) - initForRangeExcl from to step = do - [(t1, v1), (_, v2), (t2, v3)] <- mapM compileExpr [from, to, step] - v4 <- castValue t2 t1 v3 - c <- case t1 of - TFloat _ -> return $ "fcmp o" - otherwise -> return $ "icmp s" - v5 <- case t1 of - TFloat _ -> binop (c ++ "gt") t1 v4 "0.0" - otherwise -> binop (c ++ "gt") t1 v4 "0" - let cmp v = do - v6 <- binop (c ++ "lt") t1 v v2 - v7 <- binop (c ++ "gt") t1 v v2 - select v5 tBool v6 v7 - return $ (t1, t1, v1, v4, cmp, return) - initForRangeInf from step = do - [(t1, v1), (t2, v2)] <- mapM compileExpr [from, step] - v3 <- castValue t2 t1 v2 - let cmp _ = return $ "true" - return $ (t1, t1, v1, v3, cmp, return) - initForIterable iter step = do - (t, v1) <- compileExpr iter - t' <- case t of - TString _ -> return $ tChar - TArray _ t' -> return $ t' - v2 <- gep t v1 ["0"] [0] >>= load (tPtr t') - v3 <- gep t v1 ["0"] [1] >>= load tInt - v4 <- binop "sub" tInt v3 "1" - (_, v5) <- compileExpr step - v6 <- binop "icmp sgt" tInt v5 "0" - v7 <- select v6 tInt "0" v4 - let cmp v = do - v8 <- binop "icmp sle" tInt v v4 - v9 <- binop "icmp sge" tInt v "0" - select v6 tBool v8 v9 - let get v = gep (tPtr t') v2 [v] [] >>= load t' - return $ (tInt, t', v7, v5, cmp, get) - initFor expr step = do - case expr of - ERangeIncl _ e1 e2 -> forM [step] $ initForRangeIncl e1 e2 - ERangeExcl _ e1 e2 -> forM [step] $ initForRangeExcl e1 e2 - ERangeInf _ e1 -> forM [step] $ initForRangeInf e1 - ETuple _ es1 -> case step of - ETuple _ es2 -> forM (zip es1 es2) $ \(e1, e2) -> do - r <- initFor e1 e2 - return $ head r - otherwise -> forM es1 $ \e -> do - r <- initFor e step - return $ head r - otherwise -> forM [step] $ initForIterable expr - --- | Outputs LLVM code for a function definition and initialization of its default arguments. -compileFunc :: Ident -> [FVar Pos] -> [FArg Pos] -> Type -> Maybe (Block Pos) -> [Type] -> Run () -compileFunc id vars args1 rt block args2 = do - (t, p) <- asks (M.! id) - Definition env set <- lift $ gets (M.! p) - let as = map typeArg args1 - case S.member args2 set of - True -> skip - False -> local (const env) $ compileTypeVars args2 as $ do -- environment is restored to the point of function definition - lift $ modify (M.insert p (Definition env (S.insert args2 set))) -- function is marked as compiled with these types - r <- retrieveType rt - i <- case r of -- if the return type is a tuple, the result is in the zeroth argument - TTuple {} -> return $ 1 - otherwise -> return $ 0 - case block of - Just b -> define t id $ compileArgs args1 i $ localType (Ident "#return") r $ do - l <- nextLabel - goto l >> label l - compileBlock b - case r of - TTuple {} -> retVoid - otherwise -> do - v <- defaultValue r - ret r v - Nothing -> do - localScope "!global" $ external p t - skip - --- | Outputs LLVM code for initialization of function arguments. -compileArgs :: [FArg Pos] -> Int -> Run a -> Run a -compileArgs args idx cont = do - case args of - [] -> cont - a:as -> compileArg a idx (compileArgs as (idx+1) cont) - where - compileArg arg idx cont = case arg of - ANoDefault _ typ id -> do - t <- retrieveType typ - variable t id ("%" ++ show idx) cont - ADefault _ typ id _ -> do - t <- retrieveType typ - variable t id ("%" ++ show idx) cont - --- | Adds type variables to the environment. -compileTypeVars :: [Type] -> [Type] -> Run a -> Run a -compileTypeVars as1 as2 cont = do - case (as1, as2) of - ([], _) -> cont - (t1:as1, t2:as2) -> compile t1 t2 $ compileTypeVars as1 as2 cont - where - compile t1 t2 cont = case (reduceType t1, reduceType t2) of - (t1', t2'@(TVar _ id)) -> do - if t1' == t2' then cont -- to prevent looping - else localType id t1 cont - (TTuple _ ts1, TTuple _ ts2) -> compileTypeVars ts1 ts2 cont - (TArray _ t1', TArray _ t2') -> compile t1' t2' cont - (TFunc _ as1 r1, TFunc _ as2 r2) -> compileTypeVars as1 as2 (compile r1 r2 cont) - otherwise -> cont - --- | Outputs LLVM code for a class definition. -compileClass :: Ident -> [Type] -> [CMemb Pos] -> Run () -compileClass id bases membs = do - let Ident c = id - let p = "%c." ++ escapeName id - Definition env set <- lift $ gets (M.! p) - case S.null set of - False -> skip - True -> local (const env) $ do - lift $ modify (M.insert p (Definition env (S.insert [] set))) - let t = tClass id bases membs - ss <- mapM (strType.typeMember) membs - functionScope id $ do - writeTop $ [ p ++ " = type { " ++ intercalate ", " ss ++ " }", "" ] - -- Function for object allocation. - let args = getConstructorArgs membs - let f = Ident (c ++ "__alloc") - define (tFunc (map typeArg args) t) f $ do - v <- gep t "null" ["1"] [] >>= ptrtoint t - p <- call (tPtr tChar) "@malloc" [(tInt, v)] >>= bitcast (tPtr tChar) t - -- Initialize fields and method pointers. - forM (zip [0..] membs) $ \(i, memb) -> case memb of - MFieldDefault _ t'' _ e -> do - (t', v') <- compileExpr e - v'' <- castValue t' t'' v' - gep t p ["0"] [i] >>= store t'' v'' - MMethod _ _ (TFuncDef _ id' _ _ _ _) -> do - Just (t', p') <- getIdent id' - v' <- load t' p' - gep t p ["0"] [i] >>= store t' v' - otherwise -> skip - -- Call the constructor, if defined. - case findConstructor membs of - Just (i, t', _) -> do - p' <- gep t p ["0"] [i] - f <- load t' p' - as <- forM (zip [0..] args) $ \(i, arg) -> - return $ (typeArg arg, "%" ++ show i) - let TFunc _ (t'':_) _ = reduceType t' -- original class of constructor definition - p'' <- castValue t t'' p - callVoid f ((t'', p'') : as) - Nothing -> skip - ret t p - -- Compile methods. - forM_ membs $ \case - MMethod _ _ (TFuncDef _ id' _ as r b) -> do - compileFunc id' [] as r (Just b) [] - otherwise -> skip - -- Compile base classes. - forM_ bases $ \b -> do - TClass _ id' bases' membs' <- retrieveType b - compileClass id' bases' membs' - --- | Gets an identifier from the environment. -getIdent :: Ident -> Run (Maybe Result) -getIdent id = do - r <- asks (M.lookup id) - case r of - Just (TFuncDef _ id [] as r b, _) -> compileFunc id [] as r (Just b) [] - Just (TFuncExt _ id as r, _) -> compileFunc id [] as r Nothing [] - Just (TClass _ id bases membs, _) -> compileClass id bases membs - otherwise -> skip - return $ r - --- | Outputs LLVM code that evaluates a given expression. Returns type and name of the result. -compileExpr :: Expr Pos -> Run Result -compileExpr expression = do - case expression of - EInt _ num -> return $ (tInt, show num) - EFloat _ num -> return $ (tFloat, show num) - ETrue _ -> return $ (tBool, "true") - EFalse _ -> return $ (tBool, "false") - EChar _ char -> return $ (tChar, show (ord char)) - EString _ str -> do - let (txts, tags) = interpolateString (read str) - if length txts == 1 then do - p <- initString (txts !! 0) - return $ (tString, p) - else do - p1 <- initArray tString [] [show (length txts * 2 - 1)] - p2 <- gep (tArray tString) p1 ["0"] [0] >>= load (tPtr tString) - forM (zip3 txts tags [0..]) $ \(txt, tag, i) -> do - p3 <- gep (tPtr tString) p2 [show (2*i)] [] - p4 <- initString txt - store tString p4 p3 - if tag == "" then skip - else do - p5 <- gep (tPtr tString) p2 [show (2*i+1)] [] - (_, v) <- case pExpr $ resolveLayout False $ myLexer tag of - Ok expr -> do - (t, v) <- compileExpr expr - compileMethod t "" (Ident "toString") [v] - store tString v p5 - p7 <- initString "" - compileMethod (tArray tString) "" (Ident "join") [p1, p7] - EArray _ exprs -> do - rs <- mapM compileExpr exprs - t <- case map fst rs of - t:ts -> case foldM unifyTypes t ts of - Just t' -> return $ t' - [] -> return $ tUnknown - vs <- forM rs $ \(t', v) -> castValue t' t v - p <- initArray t vs [] - return $ (tArray t, p) - EArrayCpr pos expr cprs -> do - let c = "4" -- initial capacity - p1 <- alloca tInt - store tInt c p1 - (t, _) <- temporary $ compileArrayCprs cprs $ compileExpr expr - p2 <- initMemory (tArray t) "1" - p3 <- gep (tArray t) p2 ["0"] [1] - store tInt "0" p3 - p4 <- gep (tArray t) p2 ["0"] [0] - p5 <- initMemory (tPtr t) c - store (tPtr t) p5 p4 - compileArrayCprs cprs $ do - (t1, v1) <- compileExpr expr - v2 <- load tInt p3 - v3 <- binop "add" tInt v2 "1" - store tInt v3 p3 - v4 <- load tInt p1 - v5 <- binop "icmp sgt" tInt v3 v4 - l1 <- nextLabel - l2 <- nextLabel - branch v5 l1 l2 - label l1 - v6 <- binop "shl" tInt v4 "1" - v7 <- sizeof (tPtr t) v6 - p6 <- load (tPtr t) p4 - p7 <- bitcast (tPtr t) (tPtr tChar) p6 - p8 <- call (tPtr tChar) "@realloc" [(tPtr tChar, p7), (tInt, v7)] - p9 <- bitcast (tPtr tChar) (tPtr t) p8 - store (tPtr t) p9 p4 - store tInt v6 p1 - goto l2 >> label l2 - p10 <- load (tPtr t) p4 - v8 <- castValue t1 t v1 - gep (tPtr t) p10 [v2] [] >>= store t v8 - return $ (tArray t, p2) - ENull _ -> do - p <- initNullable tUnknown Nothing - return $ (tNullable tUnknown, p) - EVar {} -> compileRval expression - EIndex {} -> compileRval expression - ESlice pos expr slices -> do - let s1:s2:s3:_ = slices ++ replicate 2 (SliceNone _pos) - (v1, v1') <- case s1 of - SliceExpr _ e -> do - (_, v) <- compileExpr e - return $ (v, "true") - SliceNone _ -> return $ ("0", "false") - (v2, v2') <- case s2 of - SliceExpr _ e -> do - (_, v) <- compileExpr e - return $ (v, "true") - SliceNone _ -> return $ ("0", "false") - (_, v3) <- case s3 of - SliceExpr _ e -> compileExpr e - SliceNone _ -> return $ (tInt, "1") - (t, p1) <- compileExpr expr - t' <- case t of - TArray _ t' -> return $ t' - TString _ -> return $ tChar - v4 <- gep t p1 ["0"] [1] >>= load tInt - (_, f) <- compileExpr (EVar _pos (Ident "Array_prepareSlice")) - let t2 = tTuple [tInt, tInt] - v5 <- call t2 f [(tInt, v4), (tInt, v1), (tBool, v1'), (tInt, v2), (tBool, v2'), (tInt, v3)] - v6 <- gep t2 v5 ["0"] [0] >>= load tInt - v7 <- gep t2 v5 ["0"] [1] >>= load tInt - p2 <- initArray t' [] [v7] - compileAssg t (eVar "source") p1 $ compileAssg t (eVar "result") p2 $ compileAssg tInt (eVar "c") v3 $ compileAssg tInt (eVar "j") v6 $ compileAssg tInt (eVar "d") v7 $ do - b <- return $ SBlock _pos [ - SAssg _pos [EIndex _pos (eVar "result") (eVar "i"), EIndex _pos (eVar "source") (eVar "j")], - SAssgAdd _pos (eVar "j") (eVar "c")] - compileFor (eVar "i") (ERangeExcl _pos (eInt 0) (eVar "d")) (eInt 1) (compileBlock b) (const skip) - return $ (t, p2) - EAttr {} -> compileRval expression - ESafeAttr _ e id -> do - (t1, v1) <- compileExpr e - let TNullable _ t1' = t1 - v2 <- gep t1 v1 ["0"] [0] >>= load t1' - v3 <- gep t1 v1 ["0"] [1] >>= load tBool - v4 <- binop "icmp eq" tBool v3 "1" - [l1, l2, l3] <- sequence (replicate 3 nextLabel) - branch v4 l1 l2 - label l1 - Just (t2', v5) <- compileAttr t1' v2 id - v6 <- load t2' v5 - v7 <- initNullable t2' (Just v6) - goto l3 - label l2 - v8 <- initNullable t2' Nothing - goto l3 - label l3 - let t2 = tNullable t2' - v9 <- select v4 t2 v7 v8 - return $ (t2, v9) - ECall _ expr args -> do - -- Build a map of arguments and their positions. - let m = M.empty - [l1, l2, l3] <- sequence (replicate 3 nextLabel) -- for safe calls - (typ, func, m) <- case expr of - EVar _ id -> do - Just (t, p) <- getIdent id - case t of - TClass _ (Ident c) _ _ -> do -- class instantiation - Just (t, p) <- asks (M.lookup (Ident (c ++ "__alloc"))) - return $ (t, p, m) - otherwise -> return $ (t, p, m) - EAttr pos e id -> do -- if this is a method, the object will be passed as the first argument - (t, p) <- compileExpr e - case t of - TModule _ -> do - (t, p) <- compileExpr expr - return $ (t, p, m) - otherwise -> do - Just (t', p') <- compileAttr t p id - v' <- load t' p' - let TFunc _ (t'':_) _ = reduceType t' -- original class of method definition - p'' <- bitcast t t'' p - return $ (t', v', M.insert 0 (t'', Left p'') m) - ESafeAttr pos e id -> do - (t1, v1) <- compileExpr e - let TNullable _ t1' = t1 - v2 <- gep t1 v1 ["0"] [0] >>= load t1' - v3 <- gep t1 v1 ["0"] [1] >>= load tBool - v4 <- binop "icmp eq" tBool v3 "1" - branch v4 l1 l2 - label l1 - Just (t2, v5) <- compileAttr t1' v2 id - v6 <- load t2 v5 - let TFunc _ (t3:_) _ = reduceType t2 -- original class of method definition - v7 <- bitcast t1' t3 v2 - return $ (t2, v6, M.insert 0 (t3, Left v7) m) - otherwise -> do - (t, p) <- compileExpr expr - return $ (t, p, m) - (id, vars, args1, args2, rt) <- case typ of - TFunc _ as r -> return $ (Ident "", [], as, [], r) - TFuncDef _ id vs as r _ -> return $ (id, vs, map typeArg as, as, reduceType r) - TFuncExt _ id as r -> return $ (id, [], map typeArg as, as, reduceType r) - m <- foldM' m (zip [(M.size m)..] args) $ \m (i, a) -> do - (e, i) <- case a of - APos _ e -> return $ (e, i) - ANamed _ id e -> do - let Just (i', _) = getArgument args2 id - return $ (e, i') - r <- case convertLambda _pos e of - ELambda _ ids e' -> return $ (args1 !! i, Right (ids, e')) - otherwise -> do - (t, v) <- compileExpr e - case vars of - [] -> do - v' <- castValue t (args1 !! i) v - return $ (args1 !! i, Left v') - _:_ -> do -- TODO: type unification for generic functions - return $ (t, Left v) - return $ M.insert i r m - -- Extend the map using default arguments. - m <- foldM' m (zip [0..] args2) $ \m (i, a) -> case (a, M.lookup i m) of - (ADefault _ t id' e, Nothing) -> do - t <- retrieveType t - (t', v') <- compileExpr e - v <- castValue t' t v' - return $ M.insert i (t, Left v) m - otherwise -> return $ m - -- Call the function. - compileTypeVars (map fst (M.elems m)) args1 $ do - args4 <- forM (M.elems m) $ \case - (t, Left v) -> return $ (t, v) - (t, Right (ids, e)) -> do - -- Compile lambda function. - let TFunc _ as r = t - n <- nextNumber - let id = Ident (".lambda" ++ show n) - f <- functionName id - s <- getScope - -- TODO: use compileFunc to get the returned type in a more concise way - i <- case r of -- if the return type is a tuple, the result is in the zeroth argument - TTuple {} -> return $ 1 - otherwise -> return $ 0 - (r', p) <- localFunc id t $ localScope f $ compileArgs [ANoDefault _pos t' id' | (t', id') <- zip as ids] i $ do - l <- nextLabel - goto l >> label l - (r', v) <- compileExpr e - case r' of - TVoid _ -> retVoid - otherwise -> ret r' v - localScope s $ case r of - TVar _ id' -> localType id' r' $ define t id $ skip - otherwise -> define t id $ skip - (_, p) <- asks (M.! id) - return $ (r', p) - let t' = tFunc as r' - v <- load t' p - return $ (t', v) - compileTypeVars (map fst args4) args1 $ do - case typ of - TFuncDef _ id (_:_) _ _ b -> do - -- Compile generic function. - compileFunc id vars args2 rt (Just b) (map (reduceType.fst) args4) - otherwise -> skip - r <- retrieveType rt - func <- case expr of - EVar _ id -> do - Just (t, p) <- getIdent id - p <- case vars of - [] -> return $ p - _:_ -> do - s <- strFVars vars - return $ p ++ s - p <- case t of - TClass _ (Ident c) _ _ -> return $ func - otherwise -> return $ p - load typ p - otherwise -> return $ func - v1 <- call r func args4 - case expr of - ESafeAttr {} -> do - v2 <- initNullable r (Just v1) - goto l3 - label l2 - v3 <- initNullable r Nothing - goto l3 - label l3 - v4 <- phi (tNullable r) [(v2, l1), (v3, l2)] - return $ (tNullable r, v4) - otherwise -> return $ (r, v1) - ESuper _ args -> do - (_, f) <- asks (M.! (Ident "#super")) - compileExpr (ECall _pos (EVar _pos (Ident f)) ((APos _pos (EVar _pos (Ident "self"))) : args)) - EAssert _ e -> do - (t, v) <- compileExpr e - let TNullable _ t' = t - v' <- gep t v ["0"] [0] >>= load t' - return $ (t', v') - EPow _ expr1 expr2 -> compileBinary "pow" expr1 expr2 - EMinus _ expr -> do - (t, v1) <- compileExpr expr - v2 <- case t of - TInt _ -> binop "sub" t "0" v1 - TFloat _ -> binop "fsub" t "0.0" v1 - return $ (t, v2) - EPlus _ expr -> do - (t, v1) <- compileExpr expr - v2 <- case t of - TInt _ -> binop "add" t "0" v1 - TFloat _ -> binop "fadd" t "0.0" v1 - return $ (t, v2) - EBNot _ expr -> compileBinary "xor" (eInt (-1)) expr - EMul _ expr1 expr2 -> compileBinary "mul" expr1 expr2 - EDiv _ expr1 expr2 -> do - (t1, v1) <- compileExpr expr1 - (t2, v2) <- compileExpr expr2 - case (t1, t2) of - (TInt _, TInt _) -> do - v3 <- binop "sdiv" t1 v1 v2 - v4 <- binop "sub" t1 v3 "1" - v5 <- binop "xor" t1 v1 v2 - v6 <- binop "icmp slt" t1 v5 "0" - v7 <- select v6 t1 v4 v3 - v8 <- binop "mul" t1 v3 v2 - v9 <- binop "icmp ne" t1 v8 v1 - v10 <- select v9 t1 v7 v3 - return $ (t1, v10) - otherwise -> compileBinary "div" expr1 expr2 - EMod _ expr1 expr2 -> do - (t, v1) <- compileExpr expr1 - (t, v2) <- compileExpr expr2 - v3 <- binop "srem" t v1 v2 - v4 <- binop "add" t v3 v2 - v5 <- binop "xor" t v1 v2 - v6 <- binop "icmp slt" t v5 "0" - v7 <- select v6 t v4 v3 - v8 <- binop "icmp eq" t v3 "0" - v9 <- select v8 t v3 v7 - return $ (t, v9) - EAdd _ expr1 expr2 -> compileBinary "add" expr1 expr2 - ESub _ expr1 expr2 -> compileBinary "sub" expr1 expr2 - EBShl _ expr1 expr2 -> compileBinary "shl" expr1 expr2 - EBShr _ expr1 expr2 -> compileBinary "ashr" expr1 expr2 - EBAnd _ expr1 expr2 -> compileBinary "and" expr1 expr2 - EBOr _ expr1 expr2 -> compileBinary "or" expr1 expr2 - EBXor _ expr1 expr2 -> compileBinary "xor" expr1 expr2 - ECmp _ cmp -> case cmp of - Cmp1 _ e1 op e2 -> do - (t1, v1) <- compileExpr e1 - (t2, v2) <- compileExpr e2 - (t, v1', v2') <- unifyValues t1 v1 t2 v2 - op <- case op of - CmpEQ _ -> return $ "eq" - CmpNE _ -> return $ "ne" - CmpLT _ -> return $ "lt" - CmpLE _ -> return $ "le" - CmpGT _ -> return $ "gt" - CmpGE _ -> return $ "ge" - v <- compileCmp op t v1' v2' - return $ (tBool, v) - Cmp2 _ e1 op cmp -> do - e2 <- case cmp of - Cmp1 pos e2 _ _ -> return $ e2 - Cmp2 pos e2 _ _ -> return $ e2 - compileExpr (EAnd _pos (ECmp _pos (Cmp1 _pos e1 op e2)) (ECmp _pos cmp)) - ENot _ expr -> compileBinary "xor" (ETrue _pos) expr - EAnd _ expr1 expr2 -> do - l <- nextLabel - v <- compileAnd expr1 expr2 [] l - return $ (tBool, v) - EOr _ expr1 expr2 -> do - l <- nextLabel - v <- compileOr expr1 expr2 [] l - return $ (tBool, v) - ECoalesce _ expr1 expr2 -> do - (t1, v1) <- compileExpr expr1 - let TNullable _ t1' = t1 - v2 <- gep t1 v1 ["0"] [0] >>= load t1' - v3 <- gep t1 v1 ["0"] [1] >>= load tBool - v4 <- binop "icmp eq" tBool v3 "0" - [l1, l2, l3] <- sequence (replicate 3 nextLabel) - branch v4 l1 l2 - label l1 - (t2, v5) <- compileExpr expr2 - let Just t3 = unifyTypes t1' t2 - v6 <- castValue t2 t3 v5 - goto l3 - label l2 - v7 <- castValue t1' t3 v2 - goto l3 - label l3 - v8 <- select v4 t3 v6 v7 - return $ (t3, v8) - ECond _ expr1 expr2 expr3 -> do - (t1, v1) <- compileExpr expr1 - (t2, v2) <- compileExpr expr2 - (t3, v3) <- compileExpr expr3 - let Just t4 = unifyTypes t2 t3 - [v2', v3'] <- forM [(t2, v2), (t3, v3)] $ \(t, v) -> castValue t t4 v - v4 <- select v1 t4 v2' v3' - return $ (t4, v4) - ETuple _ exprs -> do - rs <- mapM compileExpr exprs - case rs of - r:[] -> return $ r - otherwise -> do - let t = tTuple (map fst rs) - p <- initTuple rs - return $ (t, p) - where - compileBinary op expr1 expr2 = do - (t1, v1) <- compileExpr expr1 - (t2, v2) <- compileExpr expr2 - case (t1, t2, op) of - (TString _, TString _, "add") -> do - compileArrayConcat tString v1 v2 - (TString _, TChar _, "add") -> do - (_, v3) <- compileMethod tChar "" (Ident "toString") [v2] - compileArrayConcat tString v1 v3 - (TChar _, TString _, "add") -> do - (_, v3) <- compileMethod tChar "" (Ident "toString") [v1] - compileArrayConcat tString v3 v2 - (TArray _ t1', TArray _ t2', "add") -> do - compileArrayConcat t1 v1 v2 - (TString _, TInt _, "mul") -> do - p <- compileArrayMul tChar v1 v2 - return $ (tString, p) - (TInt _, TString _, "mul") -> do - p <- compileArrayMul tChar v2 v1 - return $ (tString, p) - (TArray _ t', TInt _, "mul") -> do - p <- compileArrayMul t' v1 v2 - return $ (t1, p) - (TInt _, TArray _ t', "mul") -> do - p <- compileArrayMul t' v2 v1 - return $ (t2, p) - (_, _, "pow") -> do - (t, v1', v2') <- unifyValues t1 v1 t2 v2 - compileMethod t "" (Ident "pow") [v1', v2'] - otherwise -> do - (t, v1', v2') <- unifyValues t1 v1 t2 v2 - v3 <- case t of - TFloat _ -> binop ("f" ++ op) t v1' v2' - otherwise -> binop op t v1' v2' - return $ (t, v3) - compileArrayConcat typ val1 val2 = do - t' <- case typ of - TString _ -> return $ tChar - TArray _ t' -> return $ t' - p1 <- gep typ val1 ["0"] [0] >>= load (tPtr t') - p2 <- gep typ val2 ["0"] [0] >>= load (tPtr t') - v1 <- gep typ val1 ["0"] [1] >>= load tInt - v2 <- gep typ val2 ["0"] [1] >>= load tInt - v3 <- binop "add" tInt v1 v2 - p3 <- initArray t' [] [v3] - p4 <- gep typ p3 ["0"] [0] >>= load (tPtr t') - p5 <- bitcast (tPtr t') (tPtr tChar) p4 - p6 <- bitcast (tPtr t') (tPtr tChar) p1 - v4 <- sizeof (tPtr t') v1 - call (tPtr tChar) "@memcpy" [(tPtr tChar, p5), (tPtr tChar, p6), (tInt, v4)] - p7 <- gep (tPtr t') p4 [v1] [] - p8 <- bitcast (tPtr t') (tPtr tChar) p7 - p9 <- bitcast (tPtr t') (tPtr tChar) p2 - v5 <- sizeof (tPtr t') v2 - call (tPtr tChar) "@memcpy" [(tPtr tChar, p8), (tPtr tChar, p9), (tInt, v5)] - return $ (typ, p3) - compileArrayMul typ val1 val2 = do - let t = tArray typ - p1 <- gep t val1 ["0"] [0] >>= load (tPtr typ) - v1 <- gep t val1 ["0"] [1] >>= load tInt - v2 <- binop "mul" tInt v1 val2 - p2 <- initArray typ [] [v2] - p3 <- gep t p2 ["0"] [0] >>= load (tPtr typ) - p4 <- alloca tInt - p5 <- alloca tInt - [l1, l2, l3, l4, l5, l6] <- sequence (replicate 6 nextLabel) - store tInt "0" p4 - goto l1 >> label l1 - v3 <- load tInt p4 - v4 <- binop "icmp slt" tInt v3 v1 - branch v4 l2 l3 - label l2 - v5 <- gep (tPtr typ) p1 [v3] [] >>= load typ - do - store tInt v3 p5 - goto l4 >> label l4 - v6 <- load tInt p5 - v7 <- binop "icmp slt" tInt v6 v2 - branch v7 l5 l6 - label l5 - gep (tPtr typ) p3 [v6] [] >>= store typ v5 - v8 <- binop "add" tInt v6 v1 - store tInt v8 p5 - goto l4 - label l6 - v9 <- binop "add" tInt v3 "1" - store tInt v9 p4 - goto l1 - label l3 - return $ p2 - compileArrayCprs cprs cont = case cprs of - [] -> cont - cpr:cprs -> compileArrayCpr cpr $ compileArrayCprs cprs cont - compileArrayCpr cpr cont = case cpr of - CprFor _ e1 e2 -> do - compileFor e1 e2 (EInt _pos 1) cont return - CprForStep _ e1 e2 e3 -> do - compileFor e1 e2 e3 cont return - CprIf _ e -> do - (_, l) <- asks (M.! (Ident "#continue")) - x <- compileIf e cont l - goto l - return $ x - compileCmp op typ val1 val2 = do - (t, v1, v2) <- case typ of - TString _ -> do - (_, v3) <- compileArrayCmp (tArray tChar) val1 val2 - return $ (tInt, v3, "0") - TArray {} -> do - (_, v3) <- compileArrayCmp typ val1 val2 - return $ (tInt, v3, "0") - otherwise -> return $ (typ, val1, val2) - case (op, t) of - (_, TNullable {}) -> do - compileNullableCmp op t v1 v2 - (_, TTuple {}) -> do - lt <- nextLabel - lf <- nextLabel - compileTupleCmp op t v1 v2 0 lt lf - ("eq", TFloat _) -> binop ("fcmp o" ++ op) t v1 v2 - ("eq", _) -> binop ("icmp " ++ op) t v1 v2 - ("ne", TFloat _) -> binop ("fcmp o" ++ op) t v1 v2 - ("ne", _) -> binop ("icmp " ++ op) t v1 v2 - (_, TBool _) -> binop ("icmp u" ++ op) t v1 v2 - (_, TFloat _) -> binop ("fcmp o" ++ op) t v1 v2 - otherwise -> binop ("icmp s" ++ op) t v1 v2 - compileArrayCmp typ val1 val2 = do - compileAssg typ (eVar "a1") val1 $ compileAssg typ (eVar "a2") val2 $ do - compileExpr (ECall _pos (EVar _pos (Ident "Array_compare")) (map (APos _pos) [eVar "a1", eVar "a2"])) - compileNullableCmp op typ val1 val2 = do - let TNullable _ t' = typ - v1 <- gep typ val1 ["0"] [1] >>= load tBool - v2 <- gep typ val2 ["0"] [1] >>= load tBool - v3 <- binop "icmp eq" tBool v1 v2 - v4 <- compileCmp op tBool v1 v2 - l1 <- getLabel - [l2, l3, l4] <- sequence (replicate 3 nextLabel) - branch v3 l2 l4 - label l2 - v5 <- binop "icmp eq" tBool v1 "1" - branch v5 l3 l4 - label l3 - v6 <- gep typ val1 ["0"] [0] >>= load t' - v7 <- gep typ val2 ["0"] [0] >>= load t' - v8 <- compileCmp op t' v6 v7 - goto l4 - label l4 - case op of - "eq" -> phi tBool [("false", l1), ("true", l2), (v8, l3)] - "ne" -> phi tBool [("true", l1), ("false", l2), (v8, l3)] - otherwise -> do - phi tBool [(v4, l1), (if op == "le" || op == "ge" then "true" else "false", l2), (v8, l3)] - compileTupleCmp op typ val1 val2 idx lt lf = do - t <- case typ of - TTuple _ ts -> return $ ts !! idx - v1 <- gep typ val1 ["0"] [idx] >>= load t - v2 <- gep typ val2 ["0"] [idx] >>= load t - v3 <- compileCmp op t v1 v2 - case typ of - TTuple _ ts -> do - if idx == length ts - 1 then do - l1 <- getLabel - l2 <- nextLabel - goto l2 - label lt >> goto l2 - label lf >> goto l2 - label l2 - phi tBool [("true", lt), ("false", lf), (v3, l1)] - else do - l1 <- nextLabel - case op of - "eq" -> do - branch v3 l1 lf - label l1 - "ne" -> do - branch v3 lt l1 - label l1 - otherwise -> do - branch v3 lt l1 - label l1 - v4 <- compileCmp "eq" t v1 v2 - l2 <- nextLabel - branch v4 l2 lf - label l2 - compileTupleCmp op typ val1 val2 (idx+1) lt lf - compileAnd expr1 expr2 preds exit = do - (_, v1) <- compileExpr expr1 - l1 <- getLabel - l2 <- nextLabel - branch v1 l2 exit - label l2 - case expr2 of - EAnd pos e1 e2 -> compileAnd e1 e2 (l1:preds) exit - otherwise -> do - (_, v2) <- compileExpr expr2 - l3 <- getLabel - goto exit >> label exit - phi tBool ([("false", l) | l <- l1:preds] ++ [(v2, l3)]) - compileOr expr1 expr2 preds exit = do - (_, v1) <- compileExpr expr1 - l1 <- getLabel - l2 <- nextLabel - branch v1 exit l2 - label l2 - case expr2 of - EOr pos e1 e2 -> compileOr e1 e2 (l1:preds) exit - otherwise -> do - (_, v2) <- compileExpr expr2 - l3 <- getLabel - goto exit >> label exit - phi tBool ([("true", l) | l <- l1:preds] ++ [(v2, l3)]) - --- | Outputs LLVM code that evaluates a given expression as an r-value. Returns type and name of the result. -compileRval :: Expr Pos -> Run Result -compileRval expr = do - Just (t, p) <- compileLval expr - case t of - TModule _ -> do - return $ (t, p) - otherwise -> do - v <- load t p - return $ (t, v) - --- | Outputs LLVM code that evaluates a given expression as an l-value. Returns type and name (location) of the result or Nothing. -compileLval :: Expr Pos -> Run (Maybe Result) -compileLval expr = do - case expr of - EVar _ id -> do - getIdent id - EIndex _ e1 e2 -> do - (t1, v1) <- compileExpr e1 - (t2, v2) <- compileExpr e2 - case t1 of - TString _ -> getIndex tChar v1 v2 - TArray _ t1' -> getIndex t1' v1 v2 - EAttr _ e id -> do - (t, v) <- compileExpr e - case t of - TModule _ -> do - (_, m) <- case e of - EVar _ id' -> asks (M.! id') - Module env <- lift $ gets (M.! m) - local (const env) $ getIdent id - otherwise -> do - compileAttr t v id - where - getIndex typ arr idx = do - v1 <- gep (tArray typ) arr ["0"] [1] >>= load tInt - v2 <- binop "add" tInt v1 idx - v3 <- binop "icmp sge" tInt idx "0" - v4 <- select v3 tInt idx v2 - v5 <- gep (tArray typ) arr ["0"] [0] >>= load (tPtr typ) - v6 <- gep (tPtr typ) v5 [v4] [] - return $ Just (typ, v6) - --- | Outputs LLVM code that evaluates a given attribute as an l-value. Returns type and name (location) of the result or Nothing. -compileAttr :: Type -> Value -> Ident -> Run (Maybe Result) -compileAttr typ val (Ident attr) = do - t <- retrieveType typ - case t of - -- TODO: toString() for other types - TInt _ -> case attr of - "write" -> getIdent (Ident "writeInt") - "toString" -> getIdent (Ident "Int_toString") - "toFloat" -> getIdent (Ident "Int_toFloat") - "pow" -> getIdent (Ident "Int_pow") - TFloat _ -> case attr of - "write" -> getIdent (Ident "writeFloat") - "toString" -> getIdent (Ident "Float_toString") - "toInt" -> getIdent (Ident "Float_toInt") - "pow" -> getIdent (Ident "Float_pow") - TBool _ -> case attr of - "write" -> getIdent (Ident "writeBool") - "toString" -> getIdent (Ident "Bool_toString") - "toInt" -> getIdent (Ident "Bool_toInt") - "toFloat" -> getIdent (Ident "Bool_toFloat") - TChar _ -> case attr of - "write" -> getIdent (Ident "writeChar") - "toString" -> getIdent (Ident "Char_toString") - "toInt" -> getIdent (Ident "Char_toInt") - "toFloat" -> getIdent (Ident "Char_toFloat") - TString _ -> case attr of - "write" -> getIdent (Ident "write") - "length" -> getAttr (tArray tChar) val tInt 1 - "toArray" -> getIdent (Ident "String_toArray") - "toString" -> getIdent (Ident "String_toString") - "toInt" -> getIdent (Ident "String_toInt") - "toFloat" -> getIdent (Ident "String_toFloat") - "compare" -> getIdent (Ident "String_compare") - TArray _ t' -> case (t', attr) of - (_, "length") -> getAttr t val tInt 1 - (TChar _, "join") -> getIdent (Ident "CharArray_join") - (TString _, "join") -> getIdent (Ident "StringArray_join") - TTuple _ ts -> do - let i = ord (attr !! 0) - ord 'a' - getAttr t val (ts !! i) i - TClass _ _ _ membs -> do - let Just (i, t', _) = findMember membs (Ident attr) - getAttr t val t' i - where - getAttr typ1 obj typ2 idx = do - p <- gep typ1 obj ["0"] [idx] - return $ Just (typ2, p) - --- | Outputs LLVM code that calls a method with given arguments. Returns type and name of the result. -compileMethod :: Type -> Value -> Ident -> [Value] -> Run Result -compileMethod typ val id args = do - Just (t, p1) <- compileAttr typ val id - TFunc _ as r <- retrieveType t - p2 <- load t p1 - v <- call r p2 (zip as args) - return $ (r, v) diff --git a/src/Libraries.hs b/src/Libraries.hs deleted file mode 100644 index a3c8e0f8..00000000 --- a/src/Libraries.hs +++ /dev/null @@ -1,243 +0,0 @@ - -module Libraries where - -import Control.Monad.Trans.Reader - -import AbsPyxell - -import CodeGen -import Utils - - -libBase :: Run Env -libBase = do - write $ [ - "@format.sw = internal constant [5 x i8] c\"%.*s\\00\"", - "@format.sr = internal constant [7 x i8] c\"%1000s\\00\"", - "@format.srl = internal constant [13 x i8] c\"%1000[^\\0A]%*c\\00\"", - "@format.d = internal constant [5 x i8] c\"%lld\\00\"", - "@format.fw = internal constant [6 x i8] c\"%.15g\\00\"", - "@format.fr = internal constant [4 x i8] c\"%lg\\00\"", - "@format.bt = internal constant [5 x i8] c\"true\\00\"", - "@format.bf = internal constant [6 x i8] c\"false\\00\"", - "@format.c = internal constant [3 x i8] c\"%c\\00\"", - "", - "declare i64 @printf(i8*, ...)", - "declare i64 @scanf(i8*, ...)", - "declare i64 @sprintf(i8*, i8*, ...)", - "declare i64 @sscanf(i8*, i8*, ...)", - "declare i64 @strlen(i8*)", - "declare i8* @strncpy(i8*, i8*, i64)", - "declare void @free(i8*)", - "" ] - - -- Char <-> Int (ASCII) - define (tFunc [tChar] tInt) (Ident "ord") $ do - v <- zext tChar tInt "%0" - ret tInt v - define (tFunc [tInt] tChar) (Ident "chr") $ do - v <- trunc tInt tChar "%0" - ret tChar v - - -- [Char] <-> String - define (tFunc [tArray tChar] tString) (Ident "CharArray_asString") $ do - ret tString "%0" - define (tFunc [tString] (tArray tChar)) (Ident "String_toArray") $ do - p1 <- gep tString "%0" ["0"] [0] >>= load (tPtr tChar) - v <- gep tString "%0" ["0"] [1] >>= load tInt - p2 <- initArray tChar [] [v] - p3 <- gep tString p2 ["0"] [0] >>= load (tPtr tChar) - call (tPtr tChar) "@memcpy" [(tPtr tChar, p3), (tPtr tChar, p1), (tInt, v)] - ret (tArray tChar) p2 - - -- Standard output - define (tFunc [tString] tVoid) (Ident "write") $ do - p <- gep tString "%0" ["0"] [0] >>= load (tPtr tChar) - v <- gep tString "%0" ["0"] [1] >>= load tInt - format "sw" 5 >>= \f -> call tInt "(i8*, ...) @printf" [(tPtr tChar, f), (tInt, v), (tPtr tChar, p)] - retVoid - define (tFunc [tString] tVoid) (Ident "writeLine") $ do - callVoid "@func.write" [(tString, "%0")] - call tInt "@putchar" [(tChar, "10")] - retVoid - define (tFunc [tInt] tVoid) (Ident "writeInt") $ do - format "d" 5 >>= \f -> call tInt "(i8*, ...) @printf" [(tPtr tChar, f), (tInt, "%0")] - retVoid - define (tFunc [tFloat] tVoid) (Ident "writeFloat") $ do - format "fw" 6 >>= \f -> call tInt "(i8*, ...) @printf" [(tPtr tChar, f), (tFloat, "%0")] - retVoid - define (tFunc [tBool] tVoid) (Ident "writeBool") $ do - f1 <- format "bt" 5 - f2 <- format "bf" 6 - f <- select "%0" (tPtr tChar) f1 f2 - call tInt "(i8*, ...) @printf" [(tPtr tChar, f)] - retVoid - define (tFunc [tChar] tVoid) (Ident "writeChar") $ do - format "c" 3 >>= \f -> call tInt "(i8*, ...) @printf" [(tPtr tChar, f), (tChar, "%0")] - retVoid - - -- Standard input - define (tFunc [] tString) (Ident "read") $ do - p1 <- initArray tChar [] ["1001"] - p2 <- gep tString p1 ["0"] [0] >>= load (tPtr tChar) - format "sr" 7 >>= scanf tChar p2 - v <- call tInt "@strlen" [(tPtr tChar, p2)] - gep tString p1 ["0"] [1] >>= store tInt v - ret tString p1 - define (tFunc [] tString) (Ident "readLine") $ do - p1 <- initArray tChar [] ["1001"] - p2 <- gep tString p1 ["0"] [0] >>= load (tPtr tChar) - format "srl" 13 >>= scanf tChar p2 - v <- call tInt "@strlen" [(tPtr tChar, p2)] - gep tString p1 ["0"] [1] >>= store tInt v - ret tString p1 - define (tFunc [] tInt) (Ident "readInt") $ do - p <- alloca tInt - format "d" 5 >>= scanf tInt p - load tInt p >>= ret tInt - define (tFunc [] tChar) (Ident "readChar") $ do - p <- alloca tChar - format "c" 3 >>= scanf tChar p - load tChar p >>= ret tChar - - -- Conversions to/from string - define (tFunc [tInt] tString) (Ident "Int_toString") $ do - p1 <- initArray tChar [] ["21"] - p2 <- gep tString p1 ["0"] [0] >>= load (tPtr tChar) - format "d" 5 >>= sprintf tInt p2 - v <- call tInt "@strlen" [(tPtr tChar, p2)] - gep tString p1 ["0"] [1] >>= store tInt v - ret tString p1 - define (tFunc [tFloat, tInt] tString) (Ident "Float_toString") $ do - p1 <- initArray tChar [] ["25"] - p2 <- gep tString p1 ["0"] [0] >>= load (tPtr tChar) - format "fw" 6 >>= sprintf tFloat p2 - v <- call tInt "@strlen" [(tPtr tChar, p2)] - gep tString p1 ["0"] [1] >>= store tInt v - ret tString p1 - define (tFunc [tString] tInt) (Ident "String_toInt") $ do - p1 <- alloca tInt - p2 <- gep tString "%0" ["0"] [0] >>= load (tPtr tChar) - -- sscanf needs a null-terminated string, so we have to copy it and append \0 - v1 <- gep tString "%0" ["0"] [1] >>= load tInt - v2 <- binop "add" tInt v1 "1" - p3 <- call (tPtr tChar) "@malloc" [(tInt, v2)] - call (tPtr tChar) "@strncpy" [(tPtr tChar, p3), (tPtr tChar, p2), (tInt, v1)] - gep (tPtr tChar) p3 [v1] [] >>= store tChar "0" - format "d" 5 >>= sscanf tInt p1 p3 - callVoid "@free" [(tPtr tChar, p3)] - load tInt p1 >>= ret tInt - define (tFunc [tString] tFloat) (Ident "String_toFloat") $ do - p1 <- alloca tFloat - p2 <- gep tString "%0" ["0"] [0] >>= load (tPtr tChar) - -- sscanf needs a null-terminated string, so we have to copy it and append \0 - v1 <- gep tString "%0" ["0"] [1] >>= load tInt - v2 <- binop "add" tInt v1 "1" - p3 <- call (tPtr tChar) "@malloc" [(tInt, v2)] - call (tPtr tChar) "@strncpy" [(tPtr tChar, p3), (tPtr tChar, p2), (tInt, v1)] - gep (tPtr tChar) p3 [v1] [] >>= store tChar "0" - format "fr" 4 >>= sscanf tFloat p1 p3 - callVoid "@free" [(tPtr tChar, p3)] - load tFloat p1 >>= ret tFloat - - -- Numeric conversions - define (tFunc [tInt] tFloat) (Ident "Int_toFloat") $ do - sitofp "%0" >>= ret tFloat - define (tFunc [tFloat] tInt) (Ident "Float_toInt") $ do - fptosi "%0" >>= ret tInt - - ask - - where - format f n = gep (tPtr (tArr n tChar)) ("@format." ++ f) [] [0, 0] - scanf t s f = call tInt "(i8*, ...) @scanf" [(tPtr tChar, f), (tPtr t, s)] - sprintf t s f = call tInt "(i8*, i8*, ...) @sprintf" [(tPtr tChar, s), (tPtr tChar, f), (t, "%0")] - sscanf t p s f = call tInt "(i8*, i8*, ...) @sscanf" [(tPtr tChar, s), (tPtr tChar, f), (tPtr t, p)] - - -libMath :: Run Env -libMath = do - write $ [ - "declare double @exp(double)", - "declare double @log(double)", - "declare double @log10(double)", - "declare double @pow(double, double)", - "declare double @sqrt(double)", - "", - "declare double @cos(double)", - "declare double @sin(double)", - "declare double @tan(double)", - "", - "declare double @acos(double)", - "declare double @asin(double)", - "declare double @atan(double)", - "declare double @atan2(double, double)", - "", - "declare double @floor(double)", - "declare double @ceil(double)", - "declare double @trunc(double)", - "" ] - - define (tFunc [tFloat] tFloat) (Ident "exp") $ do - call tFloat "@exp" [(tFloat, "%0")] >>= ret tFloat - define (tFunc [tFloat] tFloat) (Ident "log") $ do - call tFloat "@log" [(tFloat, "%0")] >>= ret tFloat - define (tFunc [tFloat] tFloat) (Ident "log10") $ do - call tFloat "@log10" [(tFloat, "%0")] >>= ret tFloat - define (tFunc [tFloat, tFloat] tFloat) (Ident "Float_pow") $ do - call tFloat "@pow" [(tFloat, "%0"), (tFloat, "%1")] >>= ret tFloat - define (tFunc [tFloat] tFloat) (Ident "sqrt") $ do - call tFloat "@sqrt" [(tFloat, "%0")] >>= ret tFloat - - define (tFunc [tFloat] tFloat) (Ident "cos") $ do - call tFloat "@cos" [(tFloat, "%0")] >>= ret tFloat - define (tFunc [tFloat] tFloat) (Ident "sin") $ do - call tFloat "@sin" [(tFloat, "%0")] >>= ret tFloat - define (tFunc [tFloat] tFloat) (Ident "tan") $ do - call tFloat "@tan" [(tFloat, "%0")] >>= ret tFloat - - define (tFunc [tFloat] tFloat) (Ident "acos") $ do - call tFloat "@acos" [(tFloat, "%0")] >>= ret tFloat - define (tFunc [tFloat] tFloat) (Ident "asin") $ do - call tFloat "@asin" [(tFloat, "%0")] >>= ret tFloat - define (tFunc [tFloat] tFloat) (Ident "atan") $ do - call tFloat "@atan" [(tFloat, "%0")] >>= ret tFloat - define (tFunc [tFloat, tFloat] tFloat) (Ident "atan2") $ do - call tFloat "@atan2" [(tFloat, "%0"), (tFloat, "%1")] >>= ret tFloat - - define (tFunc [tFloat] tFloat) (Ident "floor") $ do - call tFloat "@floor" [(tFloat, "%0")] >>= ret tFloat - define (tFunc [tFloat] tFloat) (Ident "ceil") $ do - call tFloat "@ceil" [(tFloat, "%0")] >>= ret tFloat - define (tFunc [tFloat] tFloat) (Ident "trunc") $ do - call tFloat "@trunc" [(tFloat, "%0")] >>= ret tFloat - - ask - - -libTime :: Run Env -libTime = do - write $ [ - "declare i64 @time(i64*)", - "" ] - - define (tFunc [] tInt) (Ident "time") $ do - call tInt "@time" [(tPtr tInt, "null")] >>= ret tInt - - ask - - -libRandom :: Run Env -libRandom = do - write $ [ - "declare void @srand(i64)", - "declare i64 @rand()", - "" ] - - define (tFunc [tInt] tVoid) (Ident "seed") $ do - callVoid "@srand" [(tInt, "%0")] >> retVoid - - define (tFunc [] tInt) (Ident "rand") $ do - call tInt "@rand" [] >>= ret tInt - - ask diff --git a/src/Main.hs b/src/Main.hs deleted file mode 100644 index 3beda7cc..00000000 --- a/src/Main.hs +++ /dev/null @@ -1,80 +0,0 @@ - -module Main where - -import System.IO -import System.Environment -import System.Exit -import System.FilePath -import System.Process - -import Control.Monad -import Control.Monad.Trans.Reader -import Control.Monad.Trans.State -import Control.Monad.Trans.Error -import qualified Data.Map as M - -import AbsPyxell -import ParPyxell -import LayoutPyxell (resolveLayout) -import ErrM - -import Checker -import CodeGen -import Compiler -import Libraries -import Utils - - --- | Runs compilation and writes generated LLVM code to a file. -outputCode :: [CodeGen.Run CodeGen.Env] -> String -> Bool -> IO () -outputCode units path main = do - -- Compile sequentially all units, passing down the environment, state and output. - (_, output) <- foldM (\((e, s), o) unit -> runStateT (runStateT (runReaderT unit e) s) o) ((M.empty, M.empty), M.empty) (initCompiler : units) - output <- case main of - True -> return $ M.insert "main-4" ["}", "\tret i64 0"] (M.insert "main-0" ["entry:", "define i64 @main() {"] output) - False -> return $ output - -- Write concatenated output to the file. - writeFile path (concat [unlines (reverse lines) | lines <- M.elems output]) - - -main :: IO () -main = do - abspath <- getExecutablePath >>= return . takeDirectory - args <- getArgs - case args of - [] -> hPutStrLn stderr $ "File path needed!" - "-l":_ -> do - readProcess "clang" [abspath "lib/io.c", "-S", "-emit-llvm", "-o", abspath "lib/io.ll"] "" - --forM libs $ \(lib, path) -> outputCode [lib] path False - outputCode [libBase, libMath, libTime, libRandom] (abspath "lib/base.ll") False - return $ () - path:clangArgs -> do - let file = fst $ splitExtension path - paths <- return $ [ - ("std", abspath "lib/std.px"), - ("math", abspath "lib/math.px"), - ("time", abspath "lib/time.px"), - ("random", abspath "lib/random.px"), - ("main", path) ] - -- Type-check all files, passing down the environment. - (_, units) <- foldM' (M.fromList [(Ident "#level", (tVoid, Variable 0 False))], []) paths $ \(env, units) (name, path) -> do - code <- readFile path - case pProgram $ resolveLayout True $ myLexer code of - Bad err -> do - hPutStrLn stderr $ path ++ ": " ++ err - exitFailure - return $ (env, units) - Ok prog -> do - result <- runErrorT $ runReaderT (checkProgram prog name) env - case result of - Left error -> do - hPutStr stderr $ path ++ error - exitFailure - return $ (env, units) - Right env' -> do - return $ (env', compileProgram prog name : units) - -- Compile all units to one LLVM file. - outputCode (reverse units) (file ++ ".ll") True - -- Generate executable file. - readProcess "clang" ([file ++ ".ll", abspath "lib/io.ll", abspath "lib/base.ll", "-o", file ++ ".exe", "-O2"] ++ clangArgs) "" - return $ () diff --git a/src/Makefile b/src/Makefile index e16e9c72..4aa8c0ae 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,12 +1,7 @@ -all: grammar bin +all: parser -grammar: - +$(MAKE) -C bnfc - -bin: - ghc --make Main.hs -i./bnfc/ -o ../pyxell \ - -XFlexibleInstances -XFlexibleContexts -XLambdaCase \ - -fwarn-unused-imports -fno-warn-warnings-deprecations +parser: + java -jar antlr*.jar Pyxell.g4 -visitor -no-listener -Dlanguage=Python3 -o antlr clean: - +$(MAKE) clean -C bnfc + rm -rf antlr/ diff --git a/src/Pyxell.cf b/src/Pyxell.cf deleted file mode 100644 index 1976a93e..00000000 --- a/src/Pyxell.cf +++ /dev/null @@ -1,203 +0,0 @@ - --- layout -- - -layout "do", "def" ; -layout stop "elif", "else" ; -layout toplevel ; - - --- program -- - -Program. Program ::= [Stmt] ; -separator Stmt ";" ; - - --- types -- - -internal TPtr. Type4 ::= Type4 ; -internal TArr. Type4 ::= Integer Type4 ; -internal TDeref. Type4 ::= Type4 ; -internal TUnknown. Type4 ::= "Unknown" ; -TVar. Type4 ::= Ident ; -TVoid. Type4 ::= "Void" ; -TInt. Type4 ::= "Int" ; -TFloat. Type4 ::= "Float" ; -TBool. Type4 ::= "Bool" ; -TChar. Type4 ::= "Char" ; -TString. Type4 ::= "String" ; -TArray. Type3 ::= "[" Type "]" ; -TNullable. Type3 ::= Type3 "?" ; -TTuple. Type2 ::= [Type3] ; -TFunc. Type1 ::= [Type2] "->" Type1 ; -internal TFuncDef. Type1 ::= Ident [FVar] [FArg] Type Block ; -internal TFuncAbstract. Type1 ::= Ident [FVar] [FArg] Type ; -internal TFuncExt. Type1 ::= Ident [FArg] Type ; -internal TClass. Type1 ::= Ident [Type] [CMemb] ; -internal TModule. Type1 ::= "Module" ; -TAny. Type1 ::= "Any" ; -TNum. Type1 ::= "Num" ; - -separator nonempty Type3 "*" ; -separator Type2 "," ; -separator Type "," ; - -coercions Type 4 ; - - --- statements -- - -SUse. Stmt ::= "use" Ident Use ; -UAll. Use ::= "" ; -UOnly. Use ::= "only" [Ident] ; -UHiding. Use ::= "hiding" [Ident] ; -UAs. Use ::= "as" Ident ; - -SClass. Stmt ::= "class" Ident CExt "def" "{" [CMemb] "}" ; -CNoExt. CExt ::= "" ; -CExt. CExt ::= "(" Type4 ")" ; -MField. CMemb ::= Type Ident ; -MFieldDefault. CMemb ::= Type Ident ":" Expr ; -MMethodCode. CMemb ::= "func" Ident "(" [FArg] ")" FRet MBody ; -MDef. MBody ::= "def" Block ; -MAbstract. MBody ::= "abstract" ; -MConstructor. CMemb ::= "constructor" "(" [FArg] ")" "def" Block ; -internal MMethod. CMemb ::= Ident Type ; -separator CMemb ";" ; - -SFunc. Stmt ::= "func" Ident FVars "(" [FArg] ")" FRet FBody ; -FStd. FVars ::= "" ; -FGen. FVars ::= "<" [FVar] ">" ; -FVar. FVar ::= Type Ident ; -separator FVar "," ; -ANoDefault. FArg ::= Type Ident ; -ADefault. FArg ::= Type Ident ":" Expr2 ; -separator FArg "," ; -FProc. FRet ::= "" ; -FFunc. FRet ::= Type ; -FDef. FBody ::= "def" Block ; -FExtern. FBody ::= "extern" ; -SRetVoid. Stmt ::= "return" ; -SRetExpr. Stmt ::= "return" Expr ; - -SBlock. Block ::= "{" [Stmt] "}" ; - -SSkip. Stmt ::= "skip" ; -SPrint. Stmt ::= "print" Expr ; -SPrintEmpty. Stmt ::= "print" ; - -SDeclAssg. Stmt ::= Type2 Ident "=" Expr ; -SDecl. Stmt ::= Type2 Ident ; - -SAssg. Stmt ::= [Expr]; -separator nonempty Expr "=" ; -SAssgPow. Stmt ::= Expr "^=" Expr; -SAssgMul. Stmt ::= Expr "*=" Expr; -SAssgDiv. Stmt ::= Expr "/=" Expr; -SAssgMod. Stmt ::= Expr "%=" Expr; -SAssgAdd. Stmt ::= Expr "+=" Expr; -SAssgSub. Stmt ::= Expr "-=" Expr; -SAssgBShl. Stmt ::= Expr "<<=" Expr; -SAssgBShr. Stmt ::= Expr ">>=" Expr; -SAssgBAnd. Stmt ::= Expr "&=" Expr; -SAssgBOr. Stmt ::= Expr "|=" Expr; -SAssgBXor. Stmt ::= Expr "$=" Expr; -SAssgCoalesce. Stmt ::= Expr "??=" Expr; - -SIf. Stmt ::= "if" [Branch] Else ; -BElIf. Branch ::= Expr "do" Block ; -separator Branch "elif" ; -EElse. Else ::= "else" "do" Block ; -EEmpty. Else ::= ; - -SWhile. Stmt ::= "while" Expr "do" Block ; -SUntil. Stmt ::= "until" Expr "do" Block ; -SFor. Stmt ::= "for" Expr "in" Expr "do" Block ; -SForStep. Stmt ::= "for" Expr "in" Expr "step" Expr "do" Block ; -SContinue. Stmt ::= "continue" ; -SBreak. Stmt ::= "break" ; - - --- expressions -- - -EStub. Expr13 ::= "_" ; -EInt. Expr13 ::= Integer ; -EFloat. Expr13 ::= Double ; -ETrue. Expr13 ::= "true" ; -EFalse. Expr13 ::= "false" ; -EChar. Expr13 ::= Char ; -EString. Expr13 ::= String ; -EArray. Expr13 ::= "[" [Expr2] "]" ; -EArrayCpr. Expr13 ::= "[" Expr2 [ACpr] "]" ; -CprFor. ACpr ::= "for" Expr "in" Expr ; -CprForStep. ACpr ::= "for" Expr "in" Expr "step" Expr ; -CprIf. ACpr ::= "if" Expr ; -separator nonempty ACpr "" ; -ENull. Expr13 ::= "null" ; - -EVar. Expr13 ::= Ident ; -EIndex. Expr13 ::= Expr13 "[" Expr "]" ; -ESlice. Expr13 ::= Expr13 "[" [Slice] "]" ; -SliceExpr. Slice ::= Expr ; -SliceNone. Slice ::= "" ; -separator nonempty Slice ":" ; -EAttr. Expr13 ::= Expr13 "." Ident ; -ESafeAttr. Expr13 ::= Expr13 "?." Ident ; -ECall. Expr13 ::= Expr13 "(" [CArg] ")"; -ESuper. Expr13 ::= "super" "(" [CArg] ")"; -APos. CArg ::= Expr2 ; -ANamed. CArg ::= Ident "=" Expr2 ; -separator CArg "," ; -EAssert. Expr13 ::= Expr13 "!" ; - -EPow. Expr12 ::= Expr13 "^" Expr12 ; -EMinus. Expr12 ::= "-" Expr12; -EPlus. Expr12 ::= "+" Expr12; -EBNot. Expr12 ::= "~" Expr12; -EMul. Expr11 ::= Expr11 "*" Expr12 ; -EDiv. Expr11 ::= Expr11 "/" Expr12 ; -EMod. Expr11 ::= Expr11 "%" Expr12 ; -EAdd. Expr10 ::= Expr10 "+" Expr11 ; -ESub. Expr10 ::= Expr10 "-" Expr11 ; -EBShl. Expr9 ::= Expr9 "<<" Expr10 ; -EBShr. Expr9 ::= Expr9 ">>" Expr10 ; -EBAnd. Expr8 ::= Expr8 "&" Expr9 ; -EBOr. Expr7 ::= Expr7 "|" Expr8 ; -EBXor. Expr7 ::= Expr7 "$" Expr8 ; - -ERangeIncl. Expr6 ::= Expr7 ".." Expr7 ; -ERangeExcl. Expr6 ::= Expr7 "..." Expr7 ; -ERangeInf. Expr6 ::= Expr7 "..." ; - -ECmp. Expr5 ::= Cmp ; -Cmp1. Cmp ::= Expr6 CmpOp Expr6 ; -Cmp2. Cmp ::= Expr6 CmpOp Cmp ; -CmpEQ. CmpOp ::= "==" ; -CmpNE. CmpOp ::= "!=" ; -CmpLT. CmpOp ::= "<" ; -CmpLE. CmpOp ::= "<=" ; -CmpGT. CmpOp ::= ">" ; -CmpGE. CmpOp ::= ">=" ; - -ENot. Expr5 ::= "not" Expr5 ; -EAnd. Expr4 ::= Expr5 "and" Expr4 ; -EOr. Expr3 ::= Expr4 "or" Expr3 ; - -ETuple. Expr1 ::= [Expr3] ; - -separator nonempty Expr3 "," ; -separator Expr2 "," ; - --- when these are above separator for Expr3, strange things happen -ECoalesce. Expr2 ::= Expr3 "??" Expr2 ; -ECond. Expr2 ::= Expr3 "?" Expr3 ":" Expr2 ; -ELambda. Expr2 ::= "lambda" [Ident] "->" Expr2 ; - -separator Ident "," ; - -coercions Expr 13 ; - - --- comments -- - -comment "--" ; -comment "{-" "-}" ; \ No newline at end of file diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 new file mode 100644 index 00000000..dcbd1487 --- /dev/null +++ b/src/Pyxell.g4 @@ -0,0 +1,32 @@ +grammar Pyxell; + +program + : stmt* EOF + ; + +stmt + : 'print' expr ';' # StmtPrint + | ID '=' expr ';' # StmtAssg + ; + +expr + : expr op=('*' | '/' | '%') expr # ExprBinaryOp + | expr op=('+' | '-') expr # ExprBinaryOp + | op=('+' | '-') expr # ExprUnaryOp + | '(' expr ')' # ExprParentheses + | atom # ExprAtom + ; + +atom + : INT # AtomInt + | ID # AtomId + ; + +INT : DIGIT+ ; +ID : ID_START ID_CONT* ; + +fragment DIGIT : [0-9] ; +fragment ID_START : [a-zA-Z_] ; +fragment ID_CONT : ID_START | DIGIT | [_'] ; + +WS: [ \n\r\t]+ -> skip; diff --git a/src/Utils.hs b/src/Utils.hs deleted file mode 100644 index 1b02ab14..00000000 --- a/src/Utils.hs +++ /dev/null @@ -1,414 +0,0 @@ - -module Utils where - -import Control.Monad -import Control.Monad.Identity -import Control.Monad.Trans.Class -import Control.Monad.Trans.State -import Control.Monad.Trans.Writer -import Control.Monad.Reader -import Data.Char -import Data.Maybe -import Data.List -import qualified Data.Map as M -import qualified Data.Set as S -import Numeric -import Text.Regex - -import AbsPyxell hiding (Type) -import qualified AbsPyxell as Abs (Type) - - --- | Representation of a position in the program's source code. -type Pos = Maybe (Int, Int) - --- | Alias for Type without passing Pos. -type Type = Abs.Type Pos - --- | Instances for displaying and comparing types and classes. -instance {-# OVERLAPS #-} Show Type where - show typ = case typ of - TUnknown _ -> "" - TVar _ (Ident x) -> x - TVoid _ -> "Void" - TInt _ -> "Int" - TFloat _ -> "Float" - TBool _ -> "Bool" - TChar _ -> "Char" - TString _ -> "String" - TArray _ t' -> "[" ++ show t' ++ "]" - TNullable _ t' -> show t' ++ "?" - TTuple _ ts -> intercalate "*" (map show ts) - TFunc _ as r -> intercalate "," (map show as) ++ "->" ++ show r - TFuncDef _ _ _ as r _ -> show (tFunc (map typeArg as) r) - TFuncExt _ _ as r -> show (tFunc (map typeArg as) r) - TClass _ (Ident c) _ _ -> c - TModule _ -> "" - TAny _ -> "Any" - TNum _ -> "Num" - -instance {-# OVERLAPS #-} Eq Type where - typ1 == typ2 = case (reduceType typ1, reduceType typ2) of - (TUnknown _, TUnknown _) -> True - (TVar _ id1, TVar _ id2) -> id1 == id2 - (TVoid _, TVoid _) -> True - (TInt _, TInt _) -> True - (TFloat _, TFloat _) -> True - (TBool _, TBool _) -> True - (TChar _, TChar _) -> True - (TString _, TString _) -> True - (TArray _ t1', TArray _ t2') -> t1' == t2' - (TNullable _ t1', TNullable _ t2') -> t1' == t2' - (TTuple _ ts1, TTuple _ ts2) -> ts1 == ts2 - (TFunc _ as1 r1, TFunc _ as2 r2) -> as1 == as2 && r1 == r2 - (TClass _ id1 _ _, TClass _ id2 _ _) -> id1 == id2 - otherwise -> False - --- | Some useful versions of standard functions. -find' a f = find f a -foldM' b a f = foldM f b a -third (_, _, x) = x - --- | Returns a common supertype of given types, assuming that the first one is being assigned to the second one. --- | If cast is not allowed, returns Nothing. -castType :: Type -> Type -> Maybe Type -castType typ1 typ2 = do - let t1 = reduceType typ1 - let t2 = reduceType typ2 - case (t1, t2) of - (TUnknown _, _) -> Just t2 - (TVar _ id1, TVar _ id2) -> if id1 == id2 then Just t1 else Nothing - (TVoid _, TVoid _) -> Just tVoid - (TInt _, TInt _) -> Just tInt - (TFloat _, TFloat _) -> Just tFloat - (TBool _, TBool _) -> Just tBool - (TChar _, TChar _) -> Just tChar - (TString _, TString _) -> Just tString - (TArray _ t1', TArray _ t2') -> - if t1' == t2' then Just t1 - else if unifyTypes t1' (tArray tUnknown) == Just (tArray tUnknown) then Just (tArray tUnknown) - else Nothing -- arrays are not covariant - (TNullable _ t1', TNullable _ t2') -> fmap tNullable (unifyTypes t1' t2') - (_, TNullable _ t2') -> fmap tNullable (unifyTypes t1 t2') - (TTuple _ ts1, TTuple _ ts2) -> - if length ts1 == length ts2 then fmap tTuple (sequence (map (uncurry unifyTypes) (zip ts1 ts2))) - else Nothing - (TFunc _ as1 r1, TFunc _ as2 r2) -> - if length as1 == length as2 then case (sequence (map (uncurry unifyTypes) (zip as1 as2)), (unifyTypes r1 r2)) of - (Just as, Just r) -> Just (tFunc as r) - otherwise -> Nothing - else Nothing - (TClass {}, TClass {}) -> if isSubclass t1 t2 then Just t2 else Nothing - otherwise -> Nothing - where - isSubclass t1@(TClass _ id1 bs1 _) t2@(TClass _ id2 _ _) = - if id1 == id2 then True - else case bs1 of - [b] -> isSubclass b t2 - [] -> False - --- | Returns a common supertype of given types, or Nothing. -unifyTypes :: Type -> Type -> Maybe Type -unifyTypes typ1 typ2 = do - let t1 = reduceType typ1 - let t2 = reduceType typ2 - case (t1, t2) of - (TClass {}, TClass {}) -> findCommonSuperclass t1 t2 t1 t2 - otherwise -> case castType typ1 typ2 of - Just t -> Just t - Nothing -> castType typ2 typ1 - where - findCommonSuperclass t1 t2 t1'@(TClass _ id1 bs1 _) t2'@(TClass _ id2 bs2 _) = - if id1 == id2 then Just t1' - else case (bs1, bs2) of - ([b1], [b2]) -> findCommonSuperclass t1 t2 b1 b2 - ([b1], []) -> findCommonSuperclass t1 t2 b1 t1 - ([], [b2]) -> findCommonSuperclass t1 t2 t2 b2 - ([], []) -> Nothing - --- | Returns whether a given type contains an unknown. -isUnknown :: Type -> Bool -isUnknown t = case reduceType t of - TUnknown _ -> True - TArray _ t' -> isUnknown t' - TNullable _ t' -> isUnknown t' - TTuple _ ts -> any isUnknown ts - TFunc _ as r -> any isUnknown as || isUnknown r - otherwise -> False - --- | Tries to reduce compound type to a simpler version (e.g. one-element tuple to the base type). --- | Also removes position data from the type. -reduceType :: Type -> Type -reduceType t = case t of - TUnknown _ -> tUnknown - TVar _ id -> tVar id - TVoid _ -> tVoid - TInt _ -> tInt - TFloat _ -> tFloat - TBool _ -> tBool - TChar _ -> tChar - TString _ -> tString - TArray _ t' -> tArray (reduceType t') - TNullable _ t' -> tNullable (reduceType t') - TTuple _ ts -> if length ts == 1 then reduceType (head ts) else tTuple (map reduceType ts) - TFunc _ as r -> tFunc (map reduceType as) (reduceType r) - TFuncDef _ _ _ as r _ -> tFunc (map typeArg as) (reduceType r) - TFuncAbstract _ _ _ as r -> tFunc (map typeArg as) (reduceType r) - TFuncExt _ _ as r -> tFunc (map typeArg as) (reduceType r) - otherwise -> t - --- | Similar to `reduceType`, but runs in a monad and additionally retrieves type from type variables. -retrieveType :: MonadReader (M.Map Ident (Type, t)) m => Type -> m Type -retrieveType t = case t of - TVar _ id -> do - r <- asks (M.lookup id) - case r of - Just (t', _) -> return $ t' -- TODO: recursion for nested types - otherwise -> return $ t - TArray _ t' -> retrieveType t' >>= return.tArray - TNullable _ t' -> retrieveType t' >>= return.tNullable - TTuple _ ts -> if length ts == 1 then retrieveType (head ts) else mapM retrieveType ts >>= return.tTuple - TFunc _ as r -> do - as <- mapM retrieveType as - r <- retrieveType r - return $ tFunc as r - TFuncDef _ _ _ as r _ -> retrieveType (tFunc (map typeArg as) r) - TFuncAbstract _ _ _ as r -> retrieveType (tFunc (map typeArg as) r) - TFuncExt _ _ as r -> retrieveType (tFunc (map typeArg as) r) - otherwise -> return $ t - --- | Shorter name for none position. -_pos = Nothing - --- | Helper functions for initializing Type without a position. -tPtr = TPtr _pos -tArr = TArr _pos -tDeref = TDeref _pos -tUnknown = TUnknown _pos -tVar = TVar _pos -tVoid = TVoid _pos -tInt = TInt _pos -tFloat = TFloat _pos -tBool = TBool _pos -tChar = TChar _pos -tString = TString _pos -tArray = TArray _pos -tNullable = TNullable _pos -tTuple = TTuple _pos -tFunc = TFunc _pos -tFuncDef = TFuncDef _pos -tFuncAbstract = TFuncAbstract _pos -tFuncExt = TFuncExt _pos -tClass = TClass _pos -tModule = TModule _pos -tAny = TAny _pos -tNum = TNum _pos - --- | Helper functions for initializing expressions. -eVar x = EVar _pos (Ident ('$':x)) -eInt = EInt _pos - --- | Debug logging function. -debug x = liftIO $ print x - --- | Changes apostrophes to hyphens. -escapeName (Ident name) = intercalate "" [if isAlphaNum c || c == '_' then [c] else '$' : showHex (ord c) "" | c <- name] - --- | Splits a string into formatting parts. -interpolateString :: String -> ([String], [String]) -interpolateString str = - let r = mkRegex "\\{[^{}]+\\}" in - case matchRegexAll r str of - Just (before, match, after, _) -> - let (txts, tags) = interpolateString after in - (before : txts, tail (init match) : tags) - Nothing -> ([str], [""]) - --- | Returns type from function type variable data. -typeFVar :: FVar Pos -> Type -typeFVar (FVar _ _ id) = tVar id - --- | Returns type from function return header. -typeFRet :: FRet Pos -> Type -typeFRet ret = case ret of - FFunc _ t -> reduceType t - FProc _ -> tVoid - --- | Returns type from function argument data. -typeArg :: FArg Pos -> Type -typeArg arg = case arg of - ANoDefault _ t _ -> reduceType t - ADefault _ t _ _ -> reduceType t - --- | Gets function argument by its name. -getArgument :: [FArg Pos] -> Ident -> Maybe (Int, Type) -getArgument args id = getArgument' args id 0 - where - getArgument' args id i = case args of - [] -> Nothing - (ANoDefault _ t id'):as -> if id == id' then Just (i, t) else getArgument' as id (i+1) - (ADefault _ t id' _):as -> if id == id' then Just (i, t) else getArgument' as id (i+1) - --- | Builds a lambda expression from expression with placeholders. -convertLambda :: Pos -> Expr Pos -> Expr Pos -convertLambda pos expression = do - case runIdentity (evalStateT (runWriterT (convertExpr expression)) 0) of - (e, []) -> e - (e, ids) -> ELambda pos ids e - where - convertExpr :: Expr Pos -> WriterT [Ident] (StateT Int Identity) (Expr Pos) - convertExpr expr = case expr of - EStub pos -> do - n <- lift $ get - lift $ put (n+1) - let id = Ident ("_" ++ show n) - tell [id] - return $ EVar pos id - EArray pos es -> convertMultiary (EArray pos) es - EArrayCpr pos e cprs -> do - e <- convertExpr e - cs <- mapM convertCpr cprs - return $ EArrayCpr pos e cs - EIndex pos e1 e2 -> convertBinary (EIndex pos) e1 e2 - ESlice pos e slices -> do - e <- convertExpr e - ss <- mapM convertSlice slices - return $ ESlice pos e ss - EAttr pos e id -> convertUnary (\e -> EAttr pos e id) e - ESafeAttr pos e id -> convertUnary (\e -> ESafeAttr pos e id) e - ECall pos e args -> do - e <- convertExpr e - as <- mapM convertArg args - return $ ECall pos e as - ESuper pos args -> do - as <- mapM convertArg args - return $ ESuper pos as - EAssert pos e -> convertUnary (EAssert pos) e - EPow pos e1 e2 -> convertBinary (EPow pos) e1 e2 - EMinus pos e -> convertUnary (EMinus pos) e - EPlus pos e -> convertUnary (EPlus pos) e - EBNot pos e -> convertUnary (EBNot pos) e - EMul pos e1 e2 -> convertBinary (EMul pos) e1 e2 - EDiv pos e1 e2 -> convertBinary (EDiv pos) e1 e2 - EMod pos e1 e2 -> convertBinary (EMod pos) e1 e2 - EAdd pos e1 e2 -> convertBinary (EAdd pos) e1 e2 - ESub pos e1 e2 -> convertBinary (ESub pos) e1 e2 - EBShl pos e1 e2 -> convertBinary (EBShl pos) e1 e2 - EBShr pos e1 e2 -> convertBinary (EBShr pos) e1 e2 - EBAnd pos e1 e2 -> convertBinary (EBAnd pos) e1 e2 - EBOr pos e1 e2 -> convertBinary (EBOr pos) e1 e2 - EBXor pos e1 e2 -> convertBinary (EBXor pos) e1 e2 - ERangeIncl pos e1 e2 -> convertBinary (ERangeIncl pos) e1 e2 - ERangeExcl pos e1 e2 -> convertBinary (ERangeExcl pos) e1 e2 - ERangeInf pos e -> convertUnary (ERangeInf pos) e - ECmp pos cmp -> do - cmp <- convertCmp cmp - return $ ECmp pos cmp - ENot pos e -> convertUnary (ENot pos) e - EAnd pos e1 e2 -> convertBinary (EAnd pos) e1 e2 - EOr pos e1 e2 -> convertBinary (EOr pos) e1 e2 - ECoalesce pos e1 e2 -> convertBinary (ECoalesce pos) e1 e2 - ECond pos e1 e2 e3 -> convertTernary (ECond pos) e1 e2 e3 - ETuple pos es -> convertMultiary (ETuple pos) es - otherwise -> return $ expr - convertUnary op e = do - e <- convertExpr e - return $ op e - convertBinary op e1 e2 = do - ~[e1, e2] <- mapM convertExpr [e1, e2] - return $ op e1 e2 - convertTernary op e1 e2 e3 = do - ~[e1, e2, e3] <- mapM convertExpr [e1, e2, e3] - return $ op e1 e2 e3 - convertMultiary op es = do - es <- mapM convertExpr es - return $ op es - convertCpr cpr = case cpr of - CprFor pos e1 e2 -> convertBinary (CprFor pos) e1 e2 - CprForStep pos e1 e2 e3 -> convertTernary (CprForStep pos) e1 e2 e3 - convertSlice slice = case slice of - SliceExpr pos e -> convertUnary (SliceExpr pos) e - SliceNone _ -> return $ slice - convertArg arg = case arg of - APos pos e -> convertUnary (APos pos) e - ANamed pos id e -> convertUnary (ANamed pos id) e - convertCmp cmp = case cmp of - Cmp1 pos e1 op e2 -> do - e1' <- convertExpr e1 - e2' <- convertExpr e2 - return $ Cmp1 pos e1' op e2' - Cmp2 pos e op c -> do - e' <- convertExpr e - c' <- convertCmp c - return $ Cmp2 pos e' op c' - --- | Processes a list of members of a class to add necessary information and provide consistency. -prepareMembers :: Ident -> [CMemb Pos] -> [CMemb Pos] -prepareMembers (Ident c) membs = flip map membs $ \memb -> - let self = ANoDefault _pos (tVar (Ident c)) (Ident "self") in - case memb of - MMethodCode pos (Ident f) as ret body -> case body of - MDef _ b -> MMethod pos (Ident f) (tFuncDef (Ident (c ++ "_" ++ f)) [] (self : as) (typeFRet ret) b) - MAbstract _ -> MMethod pos (Ident f) (tFuncAbstract (Ident (c ++ "_" ++ f)) [] (self : as) (typeFRet ret)) - MConstructor pos as b -> - MMethod pos (Ident ("_constructor")) (tFuncDef (Ident (c ++ "__constructor")) [] (self : as) tVoid b) - otherwise -> memb - --- | Merges two lists of members, assuming that the second class is a subclass of the first one. -extendMembers :: [CMemb Pos] -> [CMemb Pos] -> [CMemb Pos] -extendMembers membs1 membs2 = do - let ids1 = S.fromList (map idMember membs1) - let ids2 = S.fromList (map idMember membs2) - let membs1' = flip map membs1 $ \memb -> do - let id = idMember memb - if S.member id ids2 then third $ fromJust $ findMember membs2 id else memb - let membs2' = flip filter membs2 $ \memb -> not $ S.member (idMember memb) ids1 - membs1' ++ membs2' - --- | Retrieves identifier of a class member. -idMember :: CMemb Pos -> Ident -idMember memb = case memb of - MField _ _ id -> id - MFieldDefault _ _ id _ -> id - MMethod _ id _ -> id - --- | Retrieves type of a class member. -typeMember :: CMemb Pos -> Type -typeMember memb = case memb of - MField _ t _ -> reduceType t - MFieldDefault _ t _ _ -> reduceType t - MMethod _ _ t -> t - --- | Retrieves position data of a class member. -posMember :: CMemb Pos -> Pos -posMember memb = case memb of - MField pos _ _ -> pos - MFieldDefault pos _ _ _ -> pos - MMethod pos _ _ -> pos - --- | Finds class member by its name. -findMember :: [CMemb Pos] -> Ident -> Maybe (Int, Type, CMemb Pos) -findMember membs id = findMember' membs id 0 - where - findMember' membs id i = case membs of - [] -> Nothing - memb:ms -> - if id == idMember memb then Just (i, typeMember memb, memb) - else findMember' ms id (i+1) - --- | Finds constructor of a class. -findConstructor :: [CMemb Pos] -> Maybe (Int, Type, CMemb Pos) -findConstructor membs = findMember membs (Ident "_constructor") - --- | Returns list of arguments for a constructor of a class. -getConstructorArgs :: [CMemb Pos] -> [FArg Pos] -getConstructorArgs membs = case findMember membs (Ident "_constructor") of - Just (_, TFuncDef _ _ _ as _ _, _) -> tail as - Nothing -> [] - --- | Returns whether the class has any abstract methods. -isAbstract :: [CMemb Pos] -> Bool -isAbstract membs = case membs of - (MMethod _ _ (TFuncAbstract {})):_ -> True - [] -> False - _:ms -> isAbstract ms diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp new file mode 100644 index 00000000..23c8a4e0 --- /dev/null +++ b/src/antlr/Pyxell.interp @@ -0,0 +1,41 @@ +token literal names: +null +'print' +';' +'=' +'*' +'/' +'%' +'+' +'-' +'(' +')' +null +null +null + +token symbolic names: +null +null +null +null +null +null +null +null +null +null +null +INT +ID +WS + +rule names: +program +stmt +expr +atom + + +atn: +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 15, 55, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 3, 2, 7, 2, 12, 10, 2, 12, 2, 14, 2, 15, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 28, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 38, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 46, 10, 4, 12, 4, 14, 4, 49, 11, 4, 3, 5, 3, 5, 5, 5, 53, 10, 5, 3, 5, 2, 3, 6, 6, 2, 4, 6, 8, 2, 4, 3, 2, 9, 10, 3, 2, 6, 8, 2, 57, 2, 13, 3, 2, 2, 2, 4, 27, 3, 2, 2, 2, 6, 37, 3, 2, 2, 2, 8, 52, 3, 2, 2, 2, 10, 12, 5, 4, 3, 2, 11, 10, 3, 2, 2, 2, 12, 15, 3, 2, 2, 2, 13, 11, 3, 2, 2, 2, 13, 14, 3, 2, 2, 2, 14, 16, 3, 2, 2, 2, 15, 13, 3, 2, 2, 2, 16, 17, 7, 2, 2, 3, 17, 3, 3, 2, 2, 2, 18, 19, 7, 3, 2, 2, 19, 20, 5, 6, 4, 2, 20, 21, 7, 4, 2, 2, 21, 28, 3, 2, 2, 2, 22, 23, 7, 14, 2, 2, 23, 24, 7, 5, 2, 2, 24, 25, 5, 6, 4, 2, 25, 26, 7, 4, 2, 2, 26, 28, 3, 2, 2, 2, 27, 18, 3, 2, 2, 2, 27, 22, 3, 2, 2, 2, 28, 5, 3, 2, 2, 2, 29, 30, 8, 4, 1, 2, 30, 31, 9, 2, 2, 2, 31, 38, 5, 6, 4, 5, 32, 33, 7, 11, 2, 2, 33, 34, 5, 6, 4, 2, 34, 35, 7, 12, 2, 2, 35, 38, 3, 2, 2, 2, 36, 38, 5, 8, 5, 2, 37, 29, 3, 2, 2, 2, 37, 32, 3, 2, 2, 2, 37, 36, 3, 2, 2, 2, 38, 47, 3, 2, 2, 2, 39, 40, 12, 7, 2, 2, 40, 41, 9, 3, 2, 2, 41, 46, 5, 6, 4, 8, 42, 43, 12, 6, 2, 2, 43, 44, 9, 2, 2, 2, 44, 46, 5, 6, 4, 7, 45, 39, 3, 2, 2, 2, 45, 42, 3, 2, 2, 2, 46, 49, 3, 2, 2, 2, 47, 45, 3, 2, 2, 2, 47, 48, 3, 2, 2, 2, 48, 7, 3, 2, 2, 2, 49, 47, 3, 2, 2, 2, 50, 53, 7, 13, 2, 2, 51, 53, 7, 14, 2, 2, 52, 50, 3, 2, 2, 2, 52, 51, 3, 2, 2, 2, 53, 9, 3, 2, 2, 2, 8, 13, 27, 37, 45, 47, 52] \ No newline at end of file diff --git a/src/antlr/Pyxell.tokens b/src/antlr/Pyxell.tokens new file mode 100644 index 00000000..4a1cfa37 --- /dev/null +++ b/src/antlr/Pyxell.tokens @@ -0,0 +1,23 @@ +T__0=1 +T__1=2 +T__2=3 +T__3=4 +T__4=5 +T__5=6 +T__6=7 +T__7=8 +T__8=9 +T__9=10 +INT=11 +ID=12 +WS=13 +'print'=1 +';'=2 +'='=3 +'*'=4 +'/'=5 +'%'=6 +'+'=7 +'-'=8 +'('=9 +')'=10 diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp new file mode 100644 index 00000000..03fc108a --- /dev/null +++ b/src/antlr/PyxellLexer.interp @@ -0,0 +1,59 @@ +token literal names: +null +'print' +';' +'=' +'*' +'/' +'%' +'+' +'-' +'(' +')' +null +null +null + +token symbolic names: +null +null +null +null +null +null +null +null +null +null +null +INT +ID +WS + +rule names: +T__0 +T__1 +T__2 +T__3 +T__4 +T__5 +T__6 +T__7 +T__8 +T__9 +INT +ID +DIGIT +ID_START +ID_CONT +WS + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN + +mode names: +DEFAULT_MODE + +atn: +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 15, 87, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 6, 12, 61, 10, 12, 13, 12, 14, 12, 62, 3, 13, 3, 13, 7, 13, 67, 10, 13, 12, 13, 14, 13, 70, 11, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 5, 16, 79, 10, 16, 3, 17, 6, 17, 82, 10, 17, 13, 17, 14, 17, 83, 3, 17, 3, 17, 2, 2, 18, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 2, 29, 2, 31, 2, 33, 15, 3, 2, 6, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 88, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 3, 35, 3, 2, 2, 2, 5, 41, 3, 2, 2, 2, 7, 43, 3, 2, 2, 2, 9, 45, 3, 2, 2, 2, 11, 47, 3, 2, 2, 2, 13, 49, 3, 2, 2, 2, 15, 51, 3, 2, 2, 2, 17, 53, 3, 2, 2, 2, 19, 55, 3, 2, 2, 2, 21, 57, 3, 2, 2, 2, 23, 60, 3, 2, 2, 2, 25, 64, 3, 2, 2, 2, 27, 71, 3, 2, 2, 2, 29, 73, 3, 2, 2, 2, 31, 78, 3, 2, 2, 2, 33, 81, 3, 2, 2, 2, 35, 36, 7, 114, 2, 2, 36, 37, 7, 116, 2, 2, 37, 38, 7, 107, 2, 2, 38, 39, 7, 112, 2, 2, 39, 40, 7, 118, 2, 2, 40, 4, 3, 2, 2, 2, 41, 42, 7, 61, 2, 2, 42, 6, 3, 2, 2, 2, 43, 44, 7, 63, 2, 2, 44, 8, 3, 2, 2, 2, 45, 46, 7, 44, 2, 2, 46, 10, 3, 2, 2, 2, 47, 48, 7, 49, 2, 2, 48, 12, 3, 2, 2, 2, 49, 50, 7, 39, 2, 2, 50, 14, 3, 2, 2, 2, 51, 52, 7, 45, 2, 2, 52, 16, 3, 2, 2, 2, 53, 54, 7, 47, 2, 2, 54, 18, 3, 2, 2, 2, 55, 56, 7, 42, 2, 2, 56, 20, 3, 2, 2, 2, 57, 58, 7, 43, 2, 2, 58, 22, 3, 2, 2, 2, 59, 61, 5, 27, 14, 2, 60, 59, 3, 2, 2, 2, 61, 62, 3, 2, 2, 2, 62, 60, 3, 2, 2, 2, 62, 63, 3, 2, 2, 2, 63, 24, 3, 2, 2, 2, 64, 68, 5, 29, 15, 2, 65, 67, 5, 31, 16, 2, 66, 65, 3, 2, 2, 2, 67, 70, 3, 2, 2, 2, 68, 66, 3, 2, 2, 2, 68, 69, 3, 2, 2, 2, 69, 26, 3, 2, 2, 2, 70, 68, 3, 2, 2, 2, 71, 72, 9, 2, 2, 2, 72, 28, 3, 2, 2, 2, 73, 74, 9, 3, 2, 2, 74, 30, 3, 2, 2, 2, 75, 79, 5, 29, 15, 2, 76, 79, 5, 27, 14, 2, 77, 79, 9, 4, 2, 2, 78, 75, 3, 2, 2, 2, 78, 76, 3, 2, 2, 2, 78, 77, 3, 2, 2, 2, 79, 32, 3, 2, 2, 2, 80, 82, 9, 5, 2, 2, 81, 80, 3, 2, 2, 2, 82, 83, 3, 2, 2, 2, 83, 81, 3, 2, 2, 2, 83, 84, 3, 2, 2, 2, 84, 85, 3, 2, 2, 2, 85, 86, 8, 17, 2, 2, 86, 34, 3, 2, 2, 2, 7, 2, 62, 68, 78, 83, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py new file mode 100644 index 00000000..0ecff091 --- /dev/null +++ b/src/antlr/PyxellLexer.py @@ -0,0 +1,88 @@ +# Generated from Pyxell.g4 by ANTLR 4.7.2 +from antlr4 import * +from io import StringIO +from typing.io import TextIO +import sys + + + +def serializedATN(): + with StringIO() as buf: + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\17") + buf.write("W\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16") + buf.write("\t\16\4\17\t\17\4\20\t\20\4\21\t\21\3\2\3\2\3\2\3\2\3") + buf.write("\2\3\2\3\3\3\3\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b") + buf.write("\3\t\3\t\3\n\3\n\3\13\3\13\3\f\6\f=\n\f\r\f\16\f>\3\r") + buf.write("\3\r\7\rC\n\r\f\r\16\rF\13\r\3\16\3\16\3\17\3\17\3\20") + buf.write("\3\20\3\20\5\20O\n\20\3\21\6\21R\n\21\r\21\16\21S\3\21") + buf.write("\3\21\2\2\22\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13") + buf.write("\25\f\27\r\31\16\33\2\35\2\37\2!\17\3\2\6\3\2\62;\5\2") + buf.write("C\\aac|\4\2))aa\5\2\13\f\17\17\"\"\2X\2\3\3\2\2\2\2\5") + buf.write("\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2") + buf.write("\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2") + buf.write("\2\2\27\3\2\2\2\2\31\3\2\2\2\2!\3\2\2\2\3#\3\2\2\2\5)") + buf.write("\3\2\2\2\7+\3\2\2\2\t-\3\2\2\2\13/\3\2\2\2\r\61\3\2\2") + buf.write("\2\17\63\3\2\2\2\21\65\3\2\2\2\23\67\3\2\2\2\259\3\2\2") + buf.write("\2\27<\3\2\2\2\31@\3\2\2\2\33G\3\2\2\2\35I\3\2\2\2\37") + buf.write("N\3\2\2\2!Q\3\2\2\2#$\7r\2\2$%\7t\2\2%&\7k\2\2&\'\7p\2") + buf.write("\2\'(\7v\2\2(\4\3\2\2\2)*\7=\2\2*\6\3\2\2\2+,\7?\2\2,") + buf.write("\b\3\2\2\2-.\7,\2\2.\n\3\2\2\2/\60\7\61\2\2\60\f\3\2\2") + buf.write("\2\61\62\7\'\2\2\62\16\3\2\2\2\63\64\7-\2\2\64\20\3\2") + buf.write("\2\2\65\66\7/\2\2\66\22\3\2\2\2\678\7*\2\28\24\3\2\2\2") + buf.write("9:\7+\2\2:\26\3\2\2\2;=\5\33\16\2<;\3\2\2\2=>\3\2\2\2") + buf.write("><\3\2\2\2>?\3\2\2\2?\30\3\2\2\2@D\5\35\17\2AC\5\37\20") + buf.write("\2BA\3\2\2\2CF\3\2\2\2DB\3\2\2\2DE\3\2\2\2E\32\3\2\2\2") + buf.write("FD\3\2\2\2GH\t\2\2\2H\34\3\2\2\2IJ\t\3\2\2J\36\3\2\2\2") + buf.write("KO\5\35\17\2LO\5\33\16\2MO\t\4\2\2NK\3\2\2\2NL\3\2\2\2") + buf.write("NM\3\2\2\2O \3\2\2\2PR\t\5\2\2QP\3\2\2\2RS\3\2\2\2SQ\3") + buf.write("\2\2\2ST\3\2\2\2TU\3\2\2\2UV\b\21\2\2V\"\3\2\2\2\7\2>") + buf.write("DNS\3\b\2\2") + return buf.getvalue() + + +class PyxellLexer(Lexer): + + atn = ATNDeserializer().deserialize(serializedATN()) + + decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ] + + T__0 = 1 + T__1 = 2 + T__2 = 3 + T__3 = 4 + T__4 = 5 + T__5 = 6 + T__6 = 7 + T__7 = 8 + T__8 = 9 + T__9 = 10 + INT = 11 + ID = 12 + WS = 13 + + channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] + + modeNames = [ "DEFAULT_MODE" ] + + literalNames = [ "", + "'print'", "';'", "'='", "'*'", "'/'", "'%'", "'+'", "'-'", + "'('", "')'" ] + + symbolicNames = [ "", + "INT", "ID", "WS" ] + + ruleNames = [ "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", + "T__7", "T__8", "T__9", "INT", "ID", "DIGIT", "ID_START", + "ID_CONT", "WS" ] + + grammarFileName = "Pyxell.g4" + + def __init__(self, input=None, output:TextIO = sys.stdout): + super().__init__(input, output) + self.checkVersion("4.7.2") + self._interp = LexerATNSimulator(self, self.atn, self.decisionsToDFA, PredictionContextCache()) + self._actions = None + self._predicates = None + + diff --git a/src/antlr/PyxellLexer.tokens b/src/antlr/PyxellLexer.tokens new file mode 100644 index 00000000..4a1cfa37 --- /dev/null +++ b/src/antlr/PyxellLexer.tokens @@ -0,0 +1,23 @@ +T__0=1 +T__1=2 +T__2=3 +T__3=4 +T__4=5 +T__5=6 +T__6=7 +T__7=8 +T__8=9 +T__9=10 +INT=11 +ID=12 +WS=13 +'print'=1 +';'=2 +'='=3 +'*'=4 +'/'=5 +'%'=6 +'+'=7 +'-'=8 +'('=9 +')'=10 diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py new file mode 100644 index 00000000..9b5edbeb --- /dev/null +++ b/src/antlr/PyxellParser.py @@ -0,0 +1,540 @@ +# Generated from Pyxell.g4 by ANTLR 4.7.2 +# encoding: utf-8 +from antlr4 import * +from io import StringIO +from typing.io import TextIO +import sys + + +def serializedATN(): + with StringIO() as buf: + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\17") + buf.write("\67\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\3\2\7\2\f\n\2\f\2") + buf.write("\16\2\17\13\2\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3") + buf.write("\3\3\5\3\34\n\3\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\5\4&\n") + buf.write("\4\3\4\3\4\3\4\3\4\3\4\3\4\7\4.\n\4\f\4\16\4\61\13\4\3") + buf.write("\5\3\5\5\5\65\n\5\3\5\2\3\6\6\2\4\6\b\2\4\3\2\t\n\3\2") + buf.write("\6\b\29\2\r\3\2\2\2\4\33\3\2\2\2\6%\3\2\2\2\b\64\3\2\2") + buf.write("\2\n\f\5\4\3\2\13\n\3\2\2\2\f\17\3\2\2\2\r\13\3\2\2\2") + buf.write("\r\16\3\2\2\2\16\20\3\2\2\2\17\r\3\2\2\2\20\21\7\2\2\3") + buf.write("\21\3\3\2\2\2\22\23\7\3\2\2\23\24\5\6\4\2\24\25\7\4\2") + buf.write("\2\25\34\3\2\2\2\26\27\7\16\2\2\27\30\7\5\2\2\30\31\5") + buf.write("\6\4\2\31\32\7\4\2\2\32\34\3\2\2\2\33\22\3\2\2\2\33\26") + buf.write("\3\2\2\2\34\5\3\2\2\2\35\36\b\4\1\2\36\37\t\2\2\2\37&") + buf.write("\5\6\4\5 !\7\13\2\2!\"\5\6\4\2\"#\7\f\2\2#&\3\2\2\2$&") + buf.write("\5\b\5\2%\35\3\2\2\2% \3\2\2\2%$\3\2\2\2&/\3\2\2\2\'(") + buf.write("\f\7\2\2()\t\3\2\2).\5\6\4\b*+\f\6\2\2+,\t\2\2\2,.\5\6") + buf.write("\4\7-\'\3\2\2\2-*\3\2\2\2.\61\3\2\2\2/-\3\2\2\2/\60\3") + buf.write("\2\2\2\60\7\3\2\2\2\61/\3\2\2\2\62\65\7\r\2\2\63\65\7") + buf.write("\16\2\2\64\62\3\2\2\2\64\63\3\2\2\2\65\t\3\2\2\2\b\r\33") + buf.write("%-/\64") + return buf.getvalue() + + +class PyxellParser ( Parser ): + + grammarFileName = "Pyxell.g4" + + atn = ATNDeserializer().deserialize(serializedATN()) + + decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ] + + sharedContextCache = PredictionContextCache() + + literalNames = [ "", "'print'", "';'", "'='", "'*'", "'/'", + "'%'", "'+'", "'-'", "'('", "')'" ] + + symbolicNames = [ "", "", "", "", + "", "", "", "", + "", "", "", "INT", "ID", + "WS" ] + + RULE_program = 0 + RULE_stmt = 1 + RULE_expr = 2 + RULE_atom = 3 + + ruleNames = [ "program", "stmt", "expr", "atom" ] + + EOF = Token.EOF + T__0=1 + T__1=2 + T__2=3 + T__3=4 + T__4=5 + T__5=6 + T__6=7 + T__7=8 + T__8=9 + T__9=10 + INT=11 + ID=12 + WS=13 + + def __init__(self, input:TokenStream, output:TextIO = sys.stdout): + super().__init__(input, output) + self.checkVersion("4.7.2") + self._interp = ParserATNSimulator(self, self.atn, self.decisionsToDFA, self.sharedContextCache) + self._predicates = None + + + + + class ProgramContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def EOF(self): + return self.getToken(PyxellParser.EOF, 0) + + def stmt(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(PyxellParser.StmtContext) + else: + return self.getTypedRuleContext(PyxellParser.StmtContext,i) + + + def getRuleIndex(self): + return PyxellParser.RULE_program + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitProgram" ): + return visitor.visitProgram(self) + else: + return visitor.visitChildren(self) + + + + + def program(self): + + localctx = PyxellParser.ProgramContext(self, self._ctx, self.state) + self.enterRule(localctx, 0, self.RULE_program) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 11 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==PyxellParser.T__0 or _la==PyxellParser.ID: + self.state = 8 + self.stmt() + self.state = 13 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 14 + self.match(PyxellParser.EOF) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class StmtContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + + def getRuleIndex(self): + return PyxellParser.RULE_stmt + + + def copyFrom(self, ctx:ParserRuleContext): + super().copyFrom(ctx) + + + + class StmtAssgContext(StmtContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.StmtContext + super().__init__(parser) + self.copyFrom(ctx) + + def ID(self): + return self.getToken(PyxellParser.ID, 0) + def expr(self): + return self.getTypedRuleContext(PyxellParser.ExprContext,0) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStmtAssg" ): + return visitor.visitStmtAssg(self) + else: + return visitor.visitChildren(self) + + + class StmtPrintContext(StmtContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.StmtContext + super().__init__(parser) + self.copyFrom(ctx) + + def expr(self): + return self.getTypedRuleContext(PyxellParser.ExprContext,0) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStmtPrint" ): + return visitor.visitStmtPrint(self) + else: + return visitor.visitChildren(self) + + + + def stmt(self): + + localctx = PyxellParser.StmtContext(self, self._ctx, self.state) + self.enterRule(localctx, 2, self.RULE_stmt) + try: + self.state = 25 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [PyxellParser.T__0]: + localctx = PyxellParser.StmtPrintContext(self, localctx) + self.enterOuterAlt(localctx, 1) + self.state = 16 + self.match(PyxellParser.T__0) + self.state = 17 + self.expr(0) + self.state = 18 + self.match(PyxellParser.T__1) + pass + elif token in [PyxellParser.ID]: + localctx = PyxellParser.StmtAssgContext(self, localctx) + self.enterOuterAlt(localctx, 2) + self.state = 20 + self.match(PyxellParser.ID) + self.state = 21 + self.match(PyxellParser.T__2) + self.state = 22 + self.expr(0) + self.state = 23 + self.match(PyxellParser.T__1) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ExprContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + + def getRuleIndex(self): + return PyxellParser.RULE_expr + + + def copyFrom(self, ctx:ParserRuleContext): + super().copyFrom(ctx) + + + class ExprUnaryOpContext(ExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext + super().__init__(parser) + self.op = None # Token + self.copyFrom(ctx) + + def expr(self): + return self.getTypedRuleContext(PyxellParser.ExprContext,0) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExprUnaryOp" ): + return visitor.visitExprUnaryOp(self) + else: + return visitor.visitChildren(self) + + + class ExprAtomContext(ExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext + super().__init__(parser) + self.copyFrom(ctx) + + def atom(self): + return self.getTypedRuleContext(PyxellParser.AtomContext,0) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExprAtom" ): + return visitor.visitExprAtom(self) + else: + return visitor.visitChildren(self) + + + class ExprParenthesesContext(ExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext + super().__init__(parser) + self.copyFrom(ctx) + + def expr(self): + return self.getTypedRuleContext(PyxellParser.ExprContext,0) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExprParentheses" ): + return visitor.visitExprParentheses(self) + else: + return visitor.visitChildren(self) + + + class ExprBinaryOpContext(ExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext + super().__init__(parser) + self.op = None # Token + self.copyFrom(ctx) + + def expr(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(PyxellParser.ExprContext) + else: + return self.getTypedRuleContext(PyxellParser.ExprContext,i) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExprBinaryOp" ): + return visitor.visitExprBinaryOp(self) + else: + return visitor.visitChildren(self) + + + + def expr(self, _p:int=0): + _parentctx = self._ctx + _parentState = self.state + localctx = PyxellParser.ExprContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 4 + self.enterRecursionRule(localctx, 4, self.RULE_expr, _p) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 35 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [PyxellParser.T__6, PyxellParser.T__7]: + localctx = PyxellParser.ExprUnaryOpContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + + self.state = 28 + localctx.op = self._input.LT(1) + _la = self._input.LA(1) + if not(_la==PyxellParser.T__6 or _la==PyxellParser.T__7): + localctx.op = self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + self.state = 29 + self.expr(3) + pass + elif token in [PyxellParser.T__8]: + localctx = PyxellParser.ExprParenthesesContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 30 + self.match(PyxellParser.T__8) + self.state = 31 + self.expr(0) + self.state = 32 + self.match(PyxellParser.T__9) + pass + elif token in [PyxellParser.INT, PyxellParser.ID]: + localctx = PyxellParser.ExprAtomContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 34 + self.atom() + pass + else: + raise NoViableAltException(self) + + self._ctx.stop = self._input.LT(-1) + self.state = 45 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,4,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + self.state = 43 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,3,self._ctx) + if la_ == 1: + localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) + self.state = 37 + if not self.precpred(self._ctx, 5): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") + self.state = 38 + localctx.op = self._input.LT(1) + _la = self._input.LA(1) + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__3) | (1 << PyxellParser.T__4) | (1 << PyxellParser.T__5))) != 0)): + localctx.op = self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + self.state = 39 + self.expr(6) + pass + + elif la_ == 2: + localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) + self.state = 40 + if not self.precpred(self._ctx, 4): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") + self.state = 41 + localctx.op = self._input.LT(1) + _la = self._input.LA(1) + if not(_la==PyxellParser.T__6 or _la==PyxellParser.T__7): + localctx.op = self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + self.state = 42 + self.expr(5) + pass + + + self.state = 47 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,4,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.unrollRecursionContexts(_parentctx) + return localctx + + + class AtomContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + + def getRuleIndex(self): + return PyxellParser.RULE_atom + + + def copyFrom(self, ctx:ParserRuleContext): + super().copyFrom(ctx) + + + + class AtomIntContext(AtomContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.AtomContext + super().__init__(parser) + self.copyFrom(ctx) + + def INT(self): + return self.getToken(PyxellParser.INT, 0) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAtomInt" ): + return visitor.visitAtomInt(self) + else: + return visitor.visitChildren(self) + + + class AtomIdContext(AtomContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.AtomContext + super().__init__(parser) + self.copyFrom(ctx) + + def ID(self): + return self.getToken(PyxellParser.ID, 0) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAtomId" ): + return visitor.visitAtomId(self) + else: + return visitor.visitChildren(self) + + + + def atom(self): + + localctx = PyxellParser.AtomContext(self, self._ctx, self.state) + self.enterRule(localctx, 6, self.RULE_atom) + try: + self.state = 50 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [PyxellParser.INT]: + localctx = PyxellParser.AtomIntContext(self, localctx) + self.enterOuterAlt(localctx, 1) + self.state = 48 + self.match(PyxellParser.INT) + pass + elif token in [PyxellParser.ID]: + localctx = PyxellParser.AtomIdContext(self, localctx) + self.enterOuterAlt(localctx, 2) + self.state = 49 + self.match(PyxellParser.ID) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + + def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): + if self._predicates == None: + self._predicates = dict() + self._predicates[2] = self.expr_sempred + pred = self._predicates.get(ruleIndex, None) + if pred is None: + raise Exception("No predicate with index:" + str(ruleIndex)) + else: + return pred(localctx, predIndex) + + def expr_sempred(self, localctx:ExprContext, predIndex:int): + if predIndex == 0: + return self.precpred(self._ctx, 5) + + + if predIndex == 1: + return self.precpred(self._ctx, 4) + + + + + diff --git a/src/antlr/PyxellVisitor.py b/src/antlr/PyxellVisitor.py new file mode 100644 index 00000000..7b7d9ab7 --- /dev/null +++ b/src/antlr/PyxellVisitor.py @@ -0,0 +1,58 @@ +# Generated from Pyxell.g4 by ANTLR 4.7.2 +from antlr4 import * +if __name__ is not None and "." in __name__: + from .PyxellParser import PyxellParser +else: + from PyxellParser import PyxellParser + +# This class defines a complete generic visitor for a parse tree produced by PyxellParser. + +class PyxellVisitor(ParseTreeVisitor): + + # Visit a parse tree produced by PyxellParser#program. + def visitProgram(self, ctx:PyxellParser.ProgramContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by PyxellParser#StmtPrint. + def visitStmtPrint(self, ctx:PyxellParser.StmtPrintContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by PyxellParser#StmtAssg. + def visitStmtAssg(self, ctx:PyxellParser.StmtAssgContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by PyxellParser#ExprUnaryOp. + def visitExprUnaryOp(self, ctx:PyxellParser.ExprUnaryOpContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by PyxellParser#ExprAtom. + def visitExprAtom(self, ctx:PyxellParser.ExprAtomContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by PyxellParser#ExprParentheses. + def visitExprParentheses(self, ctx:PyxellParser.ExprParenthesesContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by PyxellParser#ExprBinaryOp. + def visitExprBinaryOp(self, ctx:PyxellParser.ExprBinaryOpContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by PyxellParser#AtomInt. + def visitAtomInt(self, ctx:PyxellParser.AtomIntContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by PyxellParser#AtomId. + def visitAtomId(self, ctx:PyxellParser.AtomIdContext): + return self.visitChildren(ctx) + + + +del PyxellParser \ No newline at end of file diff --git a/src/bnfc/AbsPyxell.hs b/src/bnfc/AbsPyxell.hs deleted file mode 100644 index 956bc9e8..00000000 --- a/src/bnfc/AbsPyxell.hs +++ /dev/null @@ -1,360 +0,0 @@ - - -module AbsPyxell where - --- Haskell module generated by the BNF converter - - - - -newtype Ident = Ident String deriving (Eq, Ord, Show, Read) -data Program a = Program a [Stmt a] - deriving (Eq, Ord, Show, Read) - -instance Functor Program where - fmap f x = case x of - Program a stmts -> Program (f a) (map (fmap f) stmts) -data Type a - = TPtr a (Type a) - | TArr a Integer (Type a) - | TDeref a (Type a) - | TUnknown a - | TVar a Ident - | TVoid a - | TInt a - | TFloat a - | TBool a - | TChar a - | TString a - | TArray a (Type a) - | TNullable a (Type a) - | TTuple a [Type a] - | TFunc a [Type a] (Type a) - | TFuncDef a Ident [FVar a] [FArg a] (Type a) (Block a) - | TFuncAbstract a Ident [FVar a] [FArg a] (Type a) - | TFuncExt a Ident [FArg a] (Type a) - | TClass a Ident [Type a] [CMemb a] - | TModule a - | TAny a - | TNum a - deriving (Eq, Ord, Show, Read) - -instance Functor Type where - fmap f x = case x of - TPtr a type_ -> TPtr (f a) (fmap f type_) - TArr a integer type_ -> TArr (f a) integer (fmap f type_) - TDeref a type_ -> TDeref (f a) (fmap f type_) - TUnknown a -> TUnknown (f a) - TVar a ident -> TVar (f a) ident - TVoid a -> TVoid (f a) - TInt a -> TInt (f a) - TFloat a -> TFloat (f a) - TBool a -> TBool (f a) - TChar a -> TChar (f a) - TString a -> TString (f a) - TArray a type_ -> TArray (f a) (fmap f type_) - TNullable a type_ -> TNullable (f a) (fmap f type_) - TTuple a types -> TTuple (f a) (map (fmap f) types) - TFunc a types type_ -> TFunc (f a) (map (fmap f) types) (fmap f type_) - TFuncDef a ident fvars fargs type_ block -> TFuncDef (f a) ident (map (fmap f) fvars) (map (fmap f) fargs) (fmap f type_) (fmap f block) - TFuncAbstract a ident fvars fargs type_ -> TFuncAbstract (f a) ident (map (fmap f) fvars) (map (fmap f) fargs) (fmap f type_) - TFuncExt a ident fargs type_ -> TFuncExt (f a) ident (map (fmap f) fargs) (fmap f type_) - TClass a ident types cmembs -> TClass (f a) ident (map (fmap f) types) (map (fmap f) cmembs) - TModule a -> TModule (f a) - TAny a -> TAny (f a) - TNum a -> TNum (f a) -data Stmt a - = SUse a Ident (Use a) - | SClass a Ident (CExt a) [CMemb a] - | SFunc a Ident (FVars a) [FArg a] (FRet a) (FBody a) - | SRetVoid a - | SRetExpr a (Expr a) - | SSkip a - | SPrint a (Expr a) - | SPrintEmpty a - | SDeclAssg a (Type a) Ident (Expr a) - | SDecl a (Type a) Ident - | SAssg a [Expr a] - | SAssgPow a (Expr a) (Expr a) - | SAssgMul a (Expr a) (Expr a) - | SAssgDiv a (Expr a) (Expr a) - | SAssgMod a (Expr a) (Expr a) - | SAssgAdd a (Expr a) (Expr a) - | SAssgSub a (Expr a) (Expr a) - | SAssgBShl a (Expr a) (Expr a) - | SAssgBShr a (Expr a) (Expr a) - | SAssgBAnd a (Expr a) (Expr a) - | SAssgBOr a (Expr a) (Expr a) - | SAssgBXor a (Expr a) (Expr a) - | SAssgCoalesce a (Expr a) (Expr a) - | SIf a [Branch a] (Else a) - | SWhile a (Expr a) (Block a) - | SUntil a (Expr a) (Block a) - | SFor a (Expr a) (Expr a) (Block a) - | SForStep a (Expr a) (Expr a) (Expr a) (Block a) - | SContinue a - | SBreak a - deriving (Eq, Ord, Show, Read) - -instance Functor Stmt where - fmap f x = case x of - SUse a ident use -> SUse (f a) ident (fmap f use) - SClass a ident cext cmembs -> SClass (f a) ident (fmap f cext) (map (fmap f) cmembs) - SFunc a ident fvars fargs fret fbody -> SFunc (f a) ident (fmap f fvars) (map (fmap f) fargs) (fmap f fret) (fmap f fbody) - SRetVoid a -> SRetVoid (f a) - SRetExpr a expr -> SRetExpr (f a) (fmap f expr) - SSkip a -> SSkip (f a) - SPrint a expr -> SPrint (f a) (fmap f expr) - SPrintEmpty a -> SPrintEmpty (f a) - SDeclAssg a type_ ident expr -> SDeclAssg (f a) (fmap f type_) ident (fmap f expr) - SDecl a type_ ident -> SDecl (f a) (fmap f type_) ident - SAssg a exprs -> SAssg (f a) (map (fmap f) exprs) - SAssgPow a expr1 expr2 -> SAssgPow (f a) (fmap f expr1) (fmap f expr2) - SAssgMul a expr1 expr2 -> SAssgMul (f a) (fmap f expr1) (fmap f expr2) - SAssgDiv a expr1 expr2 -> SAssgDiv (f a) (fmap f expr1) (fmap f expr2) - SAssgMod a expr1 expr2 -> SAssgMod (f a) (fmap f expr1) (fmap f expr2) - SAssgAdd a expr1 expr2 -> SAssgAdd (f a) (fmap f expr1) (fmap f expr2) - SAssgSub a expr1 expr2 -> SAssgSub (f a) (fmap f expr1) (fmap f expr2) - SAssgBShl a expr1 expr2 -> SAssgBShl (f a) (fmap f expr1) (fmap f expr2) - SAssgBShr a expr1 expr2 -> SAssgBShr (f a) (fmap f expr1) (fmap f expr2) - SAssgBAnd a expr1 expr2 -> SAssgBAnd (f a) (fmap f expr1) (fmap f expr2) - SAssgBOr a expr1 expr2 -> SAssgBOr (f a) (fmap f expr1) (fmap f expr2) - SAssgBXor a expr1 expr2 -> SAssgBXor (f a) (fmap f expr1) (fmap f expr2) - SAssgCoalesce a expr1 expr2 -> SAssgCoalesce (f a) (fmap f expr1) (fmap f expr2) - SIf a branchs else_ -> SIf (f a) (map (fmap f) branchs) (fmap f else_) - SWhile a expr block -> SWhile (f a) (fmap f expr) (fmap f block) - SUntil a expr block -> SUntil (f a) (fmap f expr) (fmap f block) - SFor a expr1 expr2 block -> SFor (f a) (fmap f expr1) (fmap f expr2) (fmap f block) - SForStep a expr1 expr2 expr3 block -> SForStep (f a) (fmap f expr1) (fmap f expr2) (fmap f expr3) (fmap f block) - SContinue a -> SContinue (f a) - SBreak a -> SBreak (f a) -data Use a - = UAll a | UOnly a [Ident] | UHiding a [Ident] | UAs a Ident - deriving (Eq, Ord, Show, Read) - -instance Functor Use where - fmap f x = case x of - UAll a -> UAll (f a) - UOnly a idents -> UOnly (f a) idents - UHiding a idents -> UHiding (f a) idents - UAs a ident -> UAs (f a) ident -data CExt a = CNoExt a | CExt a (Type a) - deriving (Eq, Ord, Show, Read) - -instance Functor CExt where - fmap f x = case x of - CNoExt a -> CNoExt (f a) - CExt a type_ -> CExt (f a) (fmap f type_) -data CMemb a - = MField a (Type a) Ident - | MFieldDefault a (Type a) Ident (Expr a) - | MMethodCode a Ident [FArg a] (FRet a) (MBody a) - | MConstructor a [FArg a] (Block a) - | MMethod a Ident (Type a) - deriving (Eq, Ord, Show, Read) - -instance Functor CMemb where - fmap f x = case x of - MField a type_ ident -> MField (f a) (fmap f type_) ident - MFieldDefault a type_ ident expr -> MFieldDefault (f a) (fmap f type_) ident (fmap f expr) - MMethodCode a ident fargs fret mbody -> MMethodCode (f a) ident (map (fmap f) fargs) (fmap f fret) (fmap f mbody) - MConstructor a fargs block -> MConstructor (f a) (map (fmap f) fargs) (fmap f block) - MMethod a ident type_ -> MMethod (f a) ident (fmap f type_) -data MBody a = MDef a (Block a) | MAbstract a - deriving (Eq, Ord, Show, Read) - -instance Functor MBody where - fmap f x = case x of - MDef a block -> MDef (f a) (fmap f block) - MAbstract a -> MAbstract (f a) -data FVars a = FStd a | FGen a [FVar a] - deriving (Eq, Ord, Show, Read) - -instance Functor FVars where - fmap f x = case x of - FStd a -> FStd (f a) - FGen a fvars -> FGen (f a) (map (fmap f) fvars) -data FVar a = FVar a (Type a) Ident - deriving (Eq, Ord, Show, Read) - -instance Functor FVar where - fmap f x = case x of - FVar a type_ ident -> FVar (f a) (fmap f type_) ident -data FArg a - = ANoDefault a (Type a) Ident | ADefault a (Type a) Ident (Expr a) - deriving (Eq, Ord, Show, Read) - -instance Functor FArg where - fmap f x = case x of - ANoDefault a type_ ident -> ANoDefault (f a) (fmap f type_) ident - ADefault a type_ ident expr -> ADefault (f a) (fmap f type_) ident (fmap f expr) -data FRet a = FProc a | FFunc a (Type a) - deriving (Eq, Ord, Show, Read) - -instance Functor FRet where - fmap f x = case x of - FProc a -> FProc (f a) - FFunc a type_ -> FFunc (f a) (fmap f type_) -data FBody a = FDef a (Block a) | FExtern a - deriving (Eq, Ord, Show, Read) - -instance Functor FBody where - fmap f x = case x of - FDef a block -> FDef (f a) (fmap f block) - FExtern a -> FExtern (f a) -data Block a = SBlock a [Stmt a] - deriving (Eq, Ord, Show, Read) - -instance Functor Block where - fmap f x = case x of - SBlock a stmts -> SBlock (f a) (map (fmap f) stmts) -data Branch a = BElIf a (Expr a) (Block a) - deriving (Eq, Ord, Show, Read) - -instance Functor Branch where - fmap f x = case x of - BElIf a expr block -> BElIf (f a) (fmap f expr) (fmap f block) -data Else a = EElse a (Block a) | EEmpty a - deriving (Eq, Ord, Show, Read) - -instance Functor Else where - fmap f x = case x of - EElse a block -> EElse (f a) (fmap f block) - EEmpty a -> EEmpty (f a) -data ACpr a - = CprFor a (Expr a) (Expr a) - | CprForStep a (Expr a) (Expr a) (Expr a) - | CprIf a (Expr a) - deriving (Eq, Ord, Show, Read) - -instance Functor ACpr where - fmap f x = case x of - CprFor a expr1 expr2 -> CprFor (f a) (fmap f expr1) (fmap f expr2) - CprForStep a expr1 expr2 expr3 -> CprForStep (f a) (fmap f expr1) (fmap f expr2) (fmap f expr3) - CprIf a expr -> CprIf (f a) (fmap f expr) -data Slice a = SliceExpr a (Expr a) | SliceNone a - deriving (Eq, Ord, Show, Read) - -instance Functor Slice where - fmap f x = case x of - SliceExpr a expr -> SliceExpr (f a) (fmap f expr) - SliceNone a -> SliceNone (f a) -data CArg a = APos a (Expr a) | ANamed a Ident (Expr a) - deriving (Eq, Ord, Show, Read) - -instance Functor CArg where - fmap f x = case x of - APos a expr -> APos (f a) (fmap f expr) - ANamed a ident expr -> ANamed (f a) ident (fmap f expr) -data Cmp a - = Cmp1 a (Expr a) (CmpOp a) (Expr a) - | Cmp2 a (Expr a) (CmpOp a) (Cmp a) - deriving (Eq, Ord, Show, Read) - -instance Functor Cmp where - fmap f x = case x of - Cmp1 a expr1 cmpop expr2 -> Cmp1 (f a) (fmap f expr1) (fmap f cmpop) (fmap f expr2) - Cmp2 a expr cmpop cmp -> Cmp2 (f a) (fmap f expr) (fmap f cmpop) (fmap f cmp) -data CmpOp a - = CmpEQ a | CmpNE a | CmpLT a | CmpLE a | CmpGT a | CmpGE a - deriving (Eq, Ord, Show, Read) - -instance Functor CmpOp where - fmap f x = case x of - CmpEQ a -> CmpEQ (f a) - CmpNE a -> CmpNE (f a) - CmpLT a -> CmpLT (f a) - CmpLE a -> CmpLE (f a) - CmpGT a -> CmpGT (f a) - CmpGE a -> CmpGE (f a) -data Expr a - = EStub a - | EInt a Integer - | EFloat a Double - | ETrue a - | EFalse a - | EChar a Char - | EString a String - | EArray a [Expr a] - | EArrayCpr a (Expr a) [ACpr a] - | ENull a - | EVar a Ident - | EIndex a (Expr a) (Expr a) - | ESlice a (Expr a) [Slice a] - | EAttr a (Expr a) Ident - | ESafeAttr a (Expr a) Ident - | ECall a (Expr a) [CArg a] - | ESuper a [CArg a] - | EAssert a (Expr a) - | EPow a (Expr a) (Expr a) - | EMinus a (Expr a) - | EPlus a (Expr a) - | EBNot a (Expr a) - | EMul a (Expr a) (Expr a) - | EDiv a (Expr a) (Expr a) - | EMod a (Expr a) (Expr a) - | EAdd a (Expr a) (Expr a) - | ESub a (Expr a) (Expr a) - | EBShl a (Expr a) (Expr a) - | EBShr a (Expr a) (Expr a) - | EBAnd a (Expr a) (Expr a) - | EBOr a (Expr a) (Expr a) - | EBXor a (Expr a) (Expr a) - | ERangeIncl a (Expr a) (Expr a) - | ERangeExcl a (Expr a) (Expr a) - | ERangeInf a (Expr a) - | ECmp a (Cmp a) - | ENot a (Expr a) - | EAnd a (Expr a) (Expr a) - | EOr a (Expr a) (Expr a) - | ETuple a [Expr a] - | ECoalesce a (Expr a) (Expr a) - | ECond a (Expr a) (Expr a) (Expr a) - | ELambda a [Ident] (Expr a) - deriving (Eq, Ord, Show, Read) - -instance Functor Expr where - fmap f x = case x of - EStub a -> EStub (f a) - EInt a integer -> EInt (f a) integer - EFloat a double -> EFloat (f a) double - ETrue a -> ETrue (f a) - EFalse a -> EFalse (f a) - EChar a char -> EChar (f a) char - EString a string -> EString (f a) string - EArray a exprs -> EArray (f a) (map (fmap f) exprs) - EArrayCpr a expr acprs -> EArrayCpr (f a) (fmap f expr) (map (fmap f) acprs) - ENull a -> ENull (f a) - EVar a ident -> EVar (f a) ident - EIndex a expr1 expr2 -> EIndex (f a) (fmap f expr1) (fmap f expr2) - ESlice a expr slices -> ESlice (f a) (fmap f expr) (map (fmap f) slices) - EAttr a expr ident -> EAttr (f a) (fmap f expr) ident - ESafeAttr a expr ident -> ESafeAttr (f a) (fmap f expr) ident - ECall a expr cargs -> ECall (f a) (fmap f expr) (map (fmap f) cargs) - ESuper a cargs -> ESuper (f a) (map (fmap f) cargs) - EAssert a expr -> EAssert (f a) (fmap f expr) - EPow a expr1 expr2 -> EPow (f a) (fmap f expr1) (fmap f expr2) - EMinus a expr -> EMinus (f a) (fmap f expr) - EPlus a expr -> EPlus (f a) (fmap f expr) - EBNot a expr -> EBNot (f a) (fmap f expr) - EMul a expr1 expr2 -> EMul (f a) (fmap f expr1) (fmap f expr2) - EDiv a expr1 expr2 -> EDiv (f a) (fmap f expr1) (fmap f expr2) - EMod a expr1 expr2 -> EMod (f a) (fmap f expr1) (fmap f expr2) - EAdd a expr1 expr2 -> EAdd (f a) (fmap f expr1) (fmap f expr2) - ESub a expr1 expr2 -> ESub (f a) (fmap f expr1) (fmap f expr2) - EBShl a expr1 expr2 -> EBShl (f a) (fmap f expr1) (fmap f expr2) - EBShr a expr1 expr2 -> EBShr (f a) (fmap f expr1) (fmap f expr2) - EBAnd a expr1 expr2 -> EBAnd (f a) (fmap f expr1) (fmap f expr2) - EBOr a expr1 expr2 -> EBOr (f a) (fmap f expr1) (fmap f expr2) - EBXor a expr1 expr2 -> EBXor (f a) (fmap f expr1) (fmap f expr2) - ERangeIncl a expr1 expr2 -> ERangeIncl (f a) (fmap f expr1) (fmap f expr2) - ERangeExcl a expr1 expr2 -> ERangeExcl (f a) (fmap f expr1) (fmap f expr2) - ERangeInf a expr -> ERangeInf (f a) (fmap f expr) - ECmp a cmp -> ECmp (f a) (fmap f cmp) - ENot a expr -> ENot (f a) (fmap f expr) - EAnd a expr1 expr2 -> EAnd (f a) (fmap f expr1) (fmap f expr2) - EOr a expr1 expr2 -> EOr (f a) (fmap f expr1) (fmap f expr2) - ETuple a exprs -> ETuple (f a) (map (fmap f) exprs) - ECoalesce a expr1 expr2 -> ECoalesce (f a) (fmap f expr1) (fmap f expr2) - ECond a expr1 expr2 expr3 -> ECond (f a) (fmap f expr1) (fmap f expr2) (fmap f expr3) - ELambda a idents expr -> ELambda (f a) idents (fmap f expr) diff --git a/src/bnfc/DocPyxell.txt b/src/bnfc/DocPyxell.txt deleted file mode 100644 index fd95f925..00000000 --- a/src/bnfc/DocPyxell.txt +++ /dev/null @@ -1,268 +0,0 @@ -The Language Pyxell -BNF Converter - - -%This txt2tags file is machine-generated by the BNF-converter -%Process by txt2tags to generate html or latex - - - -This document was automatically generated by the //BNF-Converter//. It was generated together with the lexer, the parser, and the abstract syntax module, which guarantees that the document matches with the implementation of the language (provided no hand-hacking has taken place). - -==The lexical structure of Pyxell== -===Identifiers=== -Identifiers //Ident// are unquoted strings beginning with a letter, -followed by any combination of letters, digits, and the characters ``_ '`` -reserved words excluded. - - -===Literals=== -Integer literals //Integer// are nonempty sequences of digits. - - - -Double-precision float literals //Double// have the structure -indicated by the regular expression ``digit+ '.' digit+ ('e' ('-')? digit+)?`` i.e.\ -two sequences of digits separated by a decimal point, optionally -followed by an unsigned or negative exponent. - - -Character literals //Char// have the form -``'``//c//``'``, where //c// is any single character. - - -String literals //String// have the form -``"``//x//``"``}, where //x// is any sequence of any characters -except ``"`` unless preceded by ``\``. - - - - -===Reserved words and symbols=== -The set of reserved words is the set of terminals appearing in the grammar. Those reserved words that consist of non-letter characters are called symbols, and they are treated in a different way from those that are similar to identifiers. The lexer follows rules familiar from languages like Haskell, C, and Java, including longest match and spacing conventions. - -The reserved words used in Pyxell are the following: - | ``Any`` | ``Bool`` | ``Char`` | ``Float`` - | ``Int`` | ``Module`` | ``Num`` | ``String`` - | ``Unknown`` | ``Void`` | ``abstract`` | ``and`` - | ``as`` | ``break`` | ``class`` | ``constructor`` - | ``continue`` | ``def`` | ``do`` | ``elif`` - | ``else`` | ``extern`` | ``false`` | ``for`` - | ``func`` | ``hiding`` | ``if`` | ``in`` - | ``lambda`` | ``not`` | ``null`` | ``only`` - | ``or`` | ``print`` | ``return`` | ``skip`` - | ``step`` | ``super`` | ``true`` | ``until`` - | ``use`` | ``while`` | | - -The symbols used in Pyxell are the following: - | ; | [ | ] | ? - | -> | * | , | ( - | ) | { | } | : - | < | > | = | ^= - | *= | /= | %= | += - | -= | <<= | >>= | &= - | |= | $= | ??= | _ - | . | ?. | ! | ^ - | - | + | ~ | / - | % | << | >> | & - | | | $ | .. | ... - | == | != | <= | >= - | ?? | | | - -===Comments=== -Single-line comments begin with --.Multiple-line comments are enclosed with {- and -}. - -==The syntactic structure of Pyxell== -Non-terminals are enclosed between < and >. -The symbols -> (production), **|** (union) -and **eps** (empty rule) belong to the BNF notation. -All other symbols are terminals. - - | //Program// | -> | //[Stmt]// - | //[Stmt]// | -> | **eps** - | | **|** | //Stmt// - | | **|** | //Stmt// ``;`` //[Stmt]// - | //Type4// | -> | //Ident// - | | **|** | ``Void`` - | | **|** | ``Int`` - | | **|** | ``Float`` - | | **|** | ``Bool`` - | | **|** | ``Char`` - | | **|** | ``String`` - | | **|** | ``(`` //Type// ``)`` - | //Type3// | -> | ``[`` //Type// ``]`` - | | **|** | //Type3// ``?`` - | | **|** | //Type4// - | //Type2// | -> | //[Type3]// - | | **|** | //Type3// - | //Type1// | -> | //[Type2]// ``->`` //Type1// - | | **|** | ``Any`` - | | **|** | ``Num`` - | | **|** | //Type2// - | //[Type3]// | -> | //Type3// - | | **|** | //Type3// ``*`` //[Type3]// - | //[Type2]// | -> | **eps** - | | **|** | //Type2// - | | **|** | //Type2// ``,`` //[Type2]// - | //[Type]// | -> | **eps** - | | **|** | //Type// - | | **|** | //Type// ``,`` //[Type]// - | //Type// | -> | //Type1// - | //Stmt// | -> | ``use`` //Ident// //Use// - | | **|** | ``class`` //Ident// //CExt// ``def`` ``{`` //[CMemb]// ``}`` - | | **|** | ``func`` //Ident// //FVars// ``(`` //[FArg]// ``)`` //FRet// //FBody// - | | **|** | ``return`` - | | **|** | ``return`` //Expr// - | | **|** | ``skip`` - | | **|** | ``print`` //Expr// - | | **|** | ``print`` - | | **|** | //Type2// //Ident// ``=`` //Expr// - | | **|** | //Type2// //Ident// - | | **|** | //[Expr]// - | | **|** | //Expr// ``^=`` //Expr// - | | **|** | //Expr// ``*=`` //Expr// - | | **|** | //Expr// ``/=`` //Expr// - | | **|** | //Expr// ``%=`` //Expr// - | | **|** | //Expr// ``+=`` //Expr// - | | **|** | //Expr// ``-=`` //Expr// - | | **|** | //Expr// ``<<=`` //Expr// - | | **|** | //Expr// ``>>=`` //Expr// - | | **|** | //Expr// ``&=`` //Expr// - | | **|** | //Expr// ``|=`` //Expr// - | | **|** | //Expr// ``$=`` //Expr// - | | **|** | //Expr// ``??=`` //Expr// - | | **|** | ``if`` //[Branch]// //Else// - | | **|** | ``while`` //Expr// ``do`` //Block// - | | **|** | ``until`` //Expr// ``do`` //Block// - | | **|** | ``for`` //Expr// ``in`` //Expr// ``do`` //Block// - | | **|** | ``for`` //Expr// ``in`` //Expr// ``step`` //Expr// ``do`` //Block// - | | **|** | ``continue`` - | | **|** | ``break`` - | //Use// | -> | **eps** - | | **|** | ``only`` //[Ident]// - | | **|** | ``hiding`` //[Ident]// - | | **|** | ``as`` //Ident// - | //CExt// | -> | **eps** - | | **|** | ``(`` //Type4// ``)`` - | //CMemb// | -> | //Type// //Ident// - | | **|** | //Type// //Ident// ``:`` //Expr// - | | **|** | ``func`` //Ident// ``(`` //[FArg]// ``)`` //FRet// //MBody// - | | **|** | ``constructor`` ``(`` //[FArg]// ``)`` ``def`` //Block// - | //MBody// | -> | ``def`` //Block// - | | **|** | ``abstract`` - | //[CMemb]// | -> | **eps** - | | **|** | //CMemb// - | | **|** | //CMemb// ``;`` //[CMemb]// - | //FVars// | -> | **eps** - | | **|** | ``<`` //[FVar]// ``>`` - | //FVar// | -> | //Type// //Ident// - | //[FVar]// | -> | **eps** - | | **|** | //FVar// - | | **|** | //FVar// ``,`` //[FVar]// - | //FArg// | -> | //Type// //Ident// - | | **|** | //Type// //Ident// ``:`` //Expr2// - | //[FArg]// | -> | **eps** - | | **|** | //FArg// - | | **|** | //FArg// ``,`` //[FArg]// - | //FRet// | -> | **eps** - | | **|** | //Type// - | //FBody// | -> | ``def`` //Block// - | | **|** | ``extern`` - | //Block// | -> | ``{`` //[Stmt]// ``}`` - | //[Expr]// | -> | //Expr// - | | **|** | //Expr// ``=`` //[Expr]// - | //Branch// | -> | //Expr// ``do`` //Block// - | //[Branch]// | -> | **eps** - | | **|** | //Branch// - | | **|** | //Branch// ``elif`` //[Branch]// - | //Else// | -> | ``else`` ``do`` //Block// - | | **|** | **eps** - | //Expr13// | -> | ``_`` - | | **|** | //Integer// - | | **|** | //Double// - | | **|** | ``true`` - | | **|** | ``false`` - | | **|** | //Char// - | | **|** | //String// - | | **|** | ``[`` //[Expr2]// ``]`` - | | **|** | ``[`` //Expr2// //[ACpr]// ``]`` - | | **|** | ``null`` - | | **|** | //Ident// - | | **|** | //Expr13// ``[`` //Expr// ``]`` - | | **|** | //Expr13// ``[`` //[Slice]// ``]`` - | | **|** | //Expr13// ``.`` //Ident// - | | **|** | //Expr13// ``?.`` //Ident// - | | **|** | //Expr13// ``(`` //[CArg]// ``)`` - | | **|** | ``super`` ``(`` //[CArg]// ``)`` - | | **|** | //Expr13// ``!`` - | | **|** | ``(`` //Expr// ``)`` - | //ACpr// | -> | ``for`` //Expr// ``in`` //Expr// - | | **|** | ``for`` //Expr// ``in`` //Expr// ``step`` //Expr// - | | **|** | ``if`` //Expr// - | //[ACpr]// | -> | //ACpr// - | | **|** | //ACpr// //[ACpr]// - | //Slice// | -> | //Expr// - | | **|** | **eps** - | //[Slice]// | -> | //Slice// - | | **|** | //Slice// ``:`` //[Slice]// - | //CArg// | -> | //Expr2// - | | **|** | //Ident// ``=`` //Expr2// - | //[CArg]// | -> | **eps** - | | **|** | //CArg// - | | **|** | //CArg// ``,`` //[CArg]// - | //Expr12// | -> | //Expr13// ``^`` //Expr12// - | | **|** | ``-`` //Expr12// - | | **|** | ``+`` //Expr12// - | | **|** | ``~`` //Expr12// - | | **|** | //Expr13// - | //Expr11// | -> | //Expr11// ``*`` //Expr12// - | | **|** | //Expr11// ``/`` //Expr12// - | | **|** | //Expr11// ``%`` //Expr12// - | | **|** | //Expr12// - | //Expr10// | -> | //Expr10// ``+`` //Expr11// - | | **|** | //Expr10// ``-`` //Expr11// - | | **|** | //Expr11// - | //Expr9// | -> | //Expr9// ``<<`` //Expr10// - | | **|** | //Expr9// ``>>`` //Expr10// - | | **|** | //Expr10// - | //Expr8// | -> | //Expr8// ``&`` //Expr9// - | | **|** | //Expr9// - | //Expr7// | -> | //Expr7// ``|`` //Expr8// - | | **|** | //Expr7// ``$`` //Expr8// - | | **|** | //Expr8// - | //Expr6// | -> | //Expr7// ``..`` //Expr7// - | | **|** | //Expr7// ``...`` //Expr7// - | | **|** | //Expr7// ``...`` - | | **|** | //Expr7// - | //Expr5// | -> | //Cmp// - | | **|** | ``not`` //Expr5// - | | **|** | //Expr6// - | //Cmp// | -> | //Expr6// //CmpOp// //Expr6// - | | **|** | //Expr6// //CmpOp// //Cmp// - | //CmpOp// | -> | ``==`` - | | **|** | ``!=`` - | | **|** | ``<`` - | | **|** | ``<=`` - | | **|** | ``>`` - | | **|** | ``>=`` - | //Expr4// | -> | //Expr5// ``and`` //Expr4// - | | **|** | //Expr5// - | //Expr3// | -> | //Expr4// ``or`` //Expr3// - | | **|** | //Expr4// - | //Expr1// | -> | //[Expr3]// - | | **|** | //Expr2// - | //[Expr3]// | -> | //Expr3// - | | **|** | //Expr3// ``,`` //[Expr3]// - | //[Expr2]// | -> | **eps** - | | **|** | //Expr2// - | | **|** | //Expr2// ``,`` //[Expr2]// - | //Expr2// | -> | //Expr3// ``??`` //Expr2// - | | **|** | //Expr3// ``?`` //Expr3// ``:`` //Expr2// - | | **|** | ``lambda`` //[Ident]// ``->`` //Expr2// - | | **|** | //Expr3// - | //[Ident]// | -> | **eps** - | | **|** | //Ident// - | | **|** | //Ident// ``,`` //[Ident]// - | //Expr// | -> | //Expr1// - - diff --git a/src/bnfc/ErrM.hs b/src/bnfc/ErrM.hs deleted file mode 100644 index 6fca35e2..00000000 --- a/src/bnfc/ErrM.hs +++ /dev/null @@ -1,36 +0,0 @@ --- BNF Converter: Error Monad --- Copyright (C) 2004 Author: Aarne Ranta - --- This file comes with NO WARRANTY and may be used FOR ANY PURPOSE. -module ErrM where - --- the Error monad: like Maybe type with error msgs - -import Control.Monad (MonadPlus(..), liftM) -import Control.Applicative (Applicative(..), Alternative(..)) - -data Err a = Ok a | Bad String - deriving (Read, Show, Eq, Ord) - -instance Monad Err where - return = Ok - fail = Bad - Ok a >>= f = f a - Bad s >>= _ = Bad s - -instance Applicative Err where - pure = Ok - (Bad s) <*> _ = Bad s - (Ok f) <*> o = liftM f o - -instance Functor Err where - fmap = liftM - -instance MonadPlus Err where - mzero = Bad "Err.mzero" - mplus (Bad _) y = y - mplus x _ = x - -instance Alternative Err where - empty = mzero - (<|>) = mplus \ No newline at end of file diff --git a/src/bnfc/LayoutPyxell.hs b/src/bnfc/LayoutPyxell.hs deleted file mode 100644 index 54974f27..00000000 --- a/src/bnfc/LayoutPyxell.hs +++ /dev/null @@ -1,340 +0,0 @@ -module LayoutPyxell where - -import LexPyxell - - -import Data.Maybe (isNothing, fromJust) - --- Generated by the BNF Converter - --- local parameters - - -topLayout :: Bool -topLayout = True - -layoutWords, layoutStopWords :: [String] -layoutWords = ["do","def"] -layoutStopWords = ["elif","else"] - --- layout separators - - -layoutOpen, layoutClose, layoutSep :: String -layoutOpen = "{" -layoutClose = "}" -layoutSep = ";" - --- | Replace layout syntax with explicit layout tokens. -resolveLayout :: Bool -- ^ Whether to use top-level layout. - -> [Token] -> [Token] -resolveLayout tp = res Nothing [if tl then Implicit 1 else Explicit] - where - -- Do top-level layout if the function parameter and the grammar say so. - tl = tp && topLayout - - res :: Maybe Token -- ^ The previous token, if any. - -> [Block] -- ^ A stack of layout blocks. - -> [Token] -> [Token] - - -- The stack should never be empty. - res _ [] ts = error $ "Layout error: stack empty. Tokens: " ++ show ts - - res _ st (t0:ts) - -- We found an open brace in the input, - -- put an explicit layout block on the stack. - -- This is done even if there was no layout word, - -- to keep opening and closing braces. - | isLayoutOpen t0 = moveAlong (Explicit:st) [t0] ts - - -- We are in an implicit layout block - res pt st@(Implicit n:ns) (t0:ts) - - -- End of implicit block by a layout stop word - | isStop t0 = - -- Exit the current block and all implicit blocks - -- more indented than the current token - let (ebs,ns') = span (`moreIndent` column t0) ns - moreIndent (Implicit x) y = x > y - moreIndent Explicit _ = False - -- the number of blocks exited - b = 1 + length ebs - bs = replicate b layoutClose - -- Insert closing braces after the previous token. - (ts1,ts2) = splitAt (1+b) $ addTokens (afterPrev pt) bs (t0:ts) - in moveAlong ns' ts1 ts2 - - -- End of an implicit layout block - | newLine pt t0 && column t0 < n = - -- Insert a closing brace after the previous token. - let b:t0':ts' = addToken (afterPrev pt) layoutClose (t0:ts) - -- Repeat, with the current block removed from the stack - in moveAlong ns [b] (t0':ts') - - res pt st (t0:ts) - -- Start a new layout block if the first token is a layout word - | isLayout t0 = - case ts of - -- Explicit layout, just move on. The case above - -- will push an explicit layout block. - t1:_ | isLayoutOpen t1 -> moveAlong st [t0] ts - -- at end of file, the start column doesn't matter - _ -> let col = if null ts then column t0 else column (head ts) - -- insert an open brace after the layout word - b:ts' = addToken (nextPos t0) layoutOpen ts - -- save the start column - st' = Implicit col:st - in -- Do we have to insert an extra layoutSep? - case st of - Implicit n:_ - | newLine pt t0 && column t0 == n - && not (isNothing pt || - isTokenIn [layoutSep,layoutOpen] (fromJust pt)) -> - let b':t0':b'':ts'' = - addToken (afterPrev pt) layoutSep (t0:b:ts') - in moveAlong st' [b',t0',b''] ts' - _ -> moveAlong st' [t0,b] ts' - - -- If we encounter a closing brace, exit the first explicit layout block. - | isLayoutClose t0 = - let st' = drop 1 (dropWhile isImplicit st) - in if null st' - then error $ "Layout error: Found " ++ layoutClose ++ " at (" - ++ show (line t0) ++ "," ++ show (column t0) - ++ ") without an explicit layout block." - else moveAlong st' [t0] ts - - -- Insert separator if necessary. - res pt st@(Implicit n:ns) (t0:ts) - -- Encounted a new line in an implicit layout block. - | newLine pt t0 && column t0 == n = - -- Insert a semicolon after the previous token. - -- unless we are the beginning of the file, - -- or the previous token is a semicolon or open brace. - if isNothing pt || isTokenIn [layoutSep,layoutOpen] (fromJust pt) - then moveAlong st [t0] ts - else let b:t0':ts' = addToken (afterPrev pt) layoutSep (t0:ts) - in moveAlong st [b,t0'] ts' - - -- Nothing to see here, move along. - res _ st (t:ts) = moveAlong st [t] ts - - -- At EOF: skip explicit blocks. - res (Just t) (Explicit:bs) [] | null bs = [] - | otherwise = res (Just t) bs [] - - -- If we are using top-level layout, insert a semicolon after - -- the last token, if there isn't one already - res (Just t) [Implicit _n] [] - | isTokenIn [layoutSep] t = [] - | otherwise = addToken (nextPos t) layoutSep [] - - -- At EOF in an implicit, non-top-level block: close the block - res (Just t) (Implicit _n:bs) [] = - let c = addToken (nextPos t) layoutClose [] - in moveAlong bs c [] - - -- This should only happen if the input is empty. - res Nothing _st [] = [] - - -- | Move on to the next token. - moveAlong :: [Block] -- ^ The layout stack. - -> [Token] -- ^ Any tokens just processed. - -> [Token] -- ^ the rest of the tokens. - -> [Token] - moveAlong _ [] _ = error $ "Layout error: moveAlong got [] as old tokens" - moveAlong st ot ts = ot ++ res (Just $ last ot) st ts - - newLine :: Maybe Token -> Token -> Bool - newLine pt t0 = case pt of - Nothing -> True - Just t -> line t /= line t0 - -data Block = Implicit Int -- ^ An implicit layout block with its start column. - | Explicit - deriving Show - -type Position = Posn - --- | Check if s block is implicit. -isImplicit :: Block -> Bool -isImplicit (Implicit _) = True -isImplicit _ = False - --- | Insert a number of tokens at the begninning of a list of tokens. -addTokens :: Position -- ^ Position of the first new token. - -> [String] -- ^ Token symbols. - -> [Token] -- ^ The rest of the tokens. These will have their - -- positions updated to make room for the new tokens . - -> [Token] -addTokens p ss ts = foldr (addToken p) ts ss - --- | Insert a new symbol token at the begninning of a list of tokens. -addToken :: Position -- ^ Position of the new token. - -> String -- ^ Symbol in the new token. - -> [Token] -- ^ The rest of the tokens. These will have their - -- positions updated to make room for the new token. - -> [Token] -addToken p s ts = sToken p s : map (incrGlobal p (length s)) ts - --- | Get the position immediately to the right of the given token. --- If no token is given, gets the first position in the file. -afterPrev :: Maybe Token -> Position -afterPrev = maybe (Pn 0 1 1) nextPos - --- | Get the position immediately to the right of the given token. -nextPos :: Token -> Position -nextPos t = Pn (g + s) l (c + s + 1) - where Pn g l c = position t - s = tokenLength t - --- | Add to the global and column positions of a token. --- The column position is only changed if the token is on --- the same line as the given position. -incrGlobal :: Position -- ^ If the token is on the same line - -- as this position, update the column position. - -> Int -- ^ Number of characters to add to the position. - -> Token -> Token -incrGlobal (Pn _ l0 _) i (PT (Pn g l c) t) = - if l /= l0 then PT (Pn (g + i) l c) t - else PT (Pn (g + i) l (c + i)) t -incrGlobal _ _ p = error $ "cannot add token at " ++ show p - --- | Create a symbol token. -sToken :: Position -> String -> Token -sToken p s = PT p (TS s i) - where - i = case s of - "!" -> 1 - "!=" -> 2 - "$" -> 3 - "$=" -> 4 - "%" -> 5 - "%=" -> 6 - "&" -> 7 - "&=" -> 8 - "(" -> 9 - ")" -> 10 - "*" -> 11 - "*=" -> 12 - "+" -> 13 - "+=" -> 14 - "," -> 15 - "-" -> 16 - "-=" -> 17 - "->" -> 18 - "." -> 19 - ".." -> 20 - "..." -> 21 - "/" -> 22 - "/=" -> 23 - ":" -> 24 - ";" -> 25 - "<" -> 26 - "<<" -> 27 - "<<=" -> 28 - "<=" -> 29 - "=" -> 30 - "==" -> 31 - ">" -> 32 - ">=" -> 33 - ">>" -> 34 - ">>=" -> 35 - "?" -> 36 - "?." -> 37 - "??" -> 38 - "??=" -> 39 - "Any" -> 40 - "Bool" -> 41 - "Char" -> 42 - "Float" -> 43 - "Int" -> 44 - "Module" -> 45 - "Num" -> 46 - "String" -> 47 - "Unknown" -> 48 - "Void" -> 49 - "[" -> 50 - "]" -> 51 - "^" -> 52 - "^=" -> 53 - "_" -> 54 - "abstract" -> 55 - "and" -> 56 - "as" -> 57 - "break" -> 58 - "class" -> 59 - "constructor" -> 60 - "continue" -> 61 - "def" -> 62 - "do" -> 63 - "elif" -> 64 - "else" -> 65 - "extern" -> 66 - "false" -> 67 - "for" -> 68 - "func" -> 69 - "hiding" -> 70 - "if" -> 71 - "in" -> 72 - "lambda" -> 73 - "not" -> 74 - "null" -> 75 - "only" -> 76 - "or" -> 77 - "print" -> 78 - "return" -> 79 - "skip" -> 80 - "step" -> 81 - "super" -> 82 - "true" -> 83 - "until" -> 84 - "use" -> 85 - "while" -> 86 - "{" -> 87 - "|" -> 88 - "|=" -> 89 - "}" -> 90 - "~" -> 91 - _ -> error $ "not a reserved word: " ++ show s - --- | Get the position of a token. -position :: Token -> Position -position t = case t of - PT p _ -> p - Err p -> p - --- | Get the line number of a token. -line :: Token -> Int -line t = case position t of Pn _ l _ -> l - --- | Get the column number of a token. -column :: Token -> Int -column t = case position t of Pn _ _ c -> c - --- | Check if a token is one of the given symbols. -isTokenIn :: [String] -> Token -> Bool -isTokenIn ts t = case t of - PT _ (TS r _) | elem r ts -> True - _ -> False - --- | Check if a word is a layout start token. -isLayout :: Token -> Bool -isLayout = isTokenIn layoutWords - --- | Check if a token is a layout stop token. -isStop :: Token -> Bool -isStop = isTokenIn layoutStopWords - --- | Check if a token is the layout open token. -isLayoutOpen :: Token -> Bool -isLayoutOpen = isTokenIn [layoutOpen] - --- | Check if a token is the layout close token. -isLayoutClose :: Token -> Bool -isLayoutClose = isTokenIn [layoutClose] - --- | Get the number of characters in the token. -tokenLength :: Token -> Int -tokenLength t = length $ prToken t - diff --git a/src/bnfc/LexPyxell.hs b/src/bnfc/LexPyxell.hs deleted file mode 100644 index 715caf2d..00000000 --- a/src/bnfc/LexPyxell.hs +++ /dev/null @@ -1,505 +0,0 @@ -{-# OPTIONS_GHC -fno-warn-unused-binds -fno-warn-missing-signatures #-} -{-# LANGUAGE CPP,MagicHash #-} -{-# LINE 3 "LexPyxell.x" #-} - -{-# OPTIONS -fno-warn-incomplete-patterns #-} -{-# OPTIONS_GHC -w #-} -module LexPyxell where - - - -import qualified Data.Bits -import Data.Word (Word8) -import Data.Char (ord) - -#if __GLASGOW_HASKELL__ >= 603 -#include "ghcconfig.h" -#elif defined(__GLASGOW_HASKELL__) -#include "config.h" -#endif -#if __GLASGOW_HASKELL__ >= 503 -import Data.Array -import Data.Array.Base (unsafeAt) -#else -import Array -#endif -#if __GLASGOW_HASKELL__ >= 503 -import GHC.Exts -#else -import GlaExts -#endif -alex_tab_size :: Int -alex_tab_size = 8 -alex_base :: AlexAddr -alex_base = AlexA# - "\xf8\xff\xff\xff\x4a\x00\x00\x00\xdf\xff\xff\xff\xca\x00\x00\x00\x9d\x01\x00\x00\x2d\x00\x00\x00\x1d\x02\x00\x00\x1d\x03\x00\x00\x0b\x01\x00\x00\x00\x00\x00\x00\x0e\x03\x00\x00\x0e\x04\x00\x00\xce\x03\x00\x00\xce\x04\x00\x00\x92\x05\x00\x00\xf0\x05\x00\x00\x8e\x04\x00\x00\x00\x00\x00\x00\xa6\x05\x00\x00\xda\xff\xff\xff\x48\x00\x00\x00\x5a\x00\x00\x00\xa6\x06\x00\x00\xa7\x06\x00\x00\x6a\x07\x00\x00\x2a\x07\x00\x00\x00\x00\x00\x00\x20\x08\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x67\x00\x00\x00\xcb\xff\xff\xff\xd7\xff\xff\xff\xdc\xff\xff\xff\x00\x00\x00\x00\x4b\x00\x00\x00\x68\x00\x00\x00\xe8\xff\xff\xff\xe9\xff\xff\xff\xf9\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x78\x00\x00\x00\xe8\x05\x00\x00\x8c\x00\x00\x00"# - -alex_table :: AlexAddr -alex_table = AlexA# - "\x00\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x29\x00\x15\x00\x22\x00\x04\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x22\x00\x1f\x00\x22\x00\x25\x00\x1d\x00\x1f\x00\x16\x00\x00\x00\x1f\x00\x1f\x00\x1f\x00\x0d\x00\x22\x00\x22\x00\x1f\x00\x1f\x00\x22\x00\x1e\x00\x26\x00\x1f\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x22\x00\x22\x00\x23\x00\x1f\x00\x20\x00\x24\x00\x00\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x22\x00\x02\x00\x22\x00\x1f\x00\x22\x00\x00\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x21\x00\x1f\x00\x22\x00\x22\x00\x01\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1f\x00\x22\x00\x02\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x1b\x00\x00\x00\x22\x00\x00\x00\x00\x00\x1d\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x22\x00\x22\x00\x14\x00\x1f\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x00\x00\x1c\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x00\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x01\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x00\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x00\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x05\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x0b\x00\x0c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x00\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x28\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x0f\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x00\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x00\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x00\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x00\x00\x0e\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x19\x00\x03\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x12\x00\x06\x00\x09\x00\x09\x00\x09\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x00\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"# - -alex_check :: AlexAddr -alex_check = AlexA# - "\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x27\x00\x2d\x00\x3d\x00\x2d\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3d\x00\x3e\x00\x2e\x00\x2e\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x27\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x2d\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x3c\x00\x3d\x00\x5c\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x2d\x00\xff\xff\x2e\x00\xff\xff\xff\xff\x20\x00\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\x3d\x00\x3e\x00\x2e\x00\x3f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x2d\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xff\xff\xc2\x00\xc3\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\x65\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\xff\xff\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xff\xff\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xff\xff\xc2\x00\xc3\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"# - -alex_deflt :: AlexAddr -alex_deflt = AlexA# - "\xff\xff\x04\x00\xff\xff\xff\xff\x04\x00\xff\xff\xff\xff\x04\x00\x04\x00\x11\x00\x11\x00\x02\x00\x02\x00\xff\xff\x16\x00\xff\xff\x16\x00\x1a\x00\x1a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x1b\x00\x1b\x00\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"# - -alex_accept = listArray (0 :: Int, 44) - [ AlexAccNone - , AlexAccNone - , AlexAccNone - , AlexAccNone - , AlexAccNone - , AlexAccNone - , AlexAccNone - , AlexAccNone - , AlexAccNone - , AlexAccNone - , AlexAccNone - , AlexAccNone - , AlexAccNone - , AlexAccNone - , AlexAccNone - , AlexAccNone - , AlexAccNone - , AlexAccNone - , AlexAccNone - , AlexAccNone - , AlexAccNone - , AlexAccNone - , AlexAccNone - , AlexAccNone - , AlexAccNone - , AlexAccNone - , AlexAccNone - , AlexAccSkip - , AlexAccSkip - , AlexAccSkip - , AlexAcc 14 - , AlexAcc 13 - , AlexAcc 12 - , AlexAcc 11 - , AlexAcc 10 - , AlexAcc 9 - , AlexAcc 8 - , AlexAcc 7 - , AlexAcc 6 - , AlexAcc 5 - , AlexAcc 4 - , AlexAcc 3 - , AlexAcc 2 - , AlexAcc 1 - , AlexAcc 0 - ] - -alex_actions = array (0 :: Int, 15) - [ (14,alex_action_3) - , (13,alex_action_3) - , (12,alex_action_3) - , (11,alex_action_3) - , (10,alex_action_3) - , (9,alex_action_3) - , (8,alex_action_3) - , (7,alex_action_3) - , (6,alex_action_3) - , (5,alex_action_4) - , (4,alex_action_5) - , (3,alex_action_6) - , (2,alex_action_7) - , (1,alex_action_8) - , (0,alex_action_8) - ] - -{-# LINE 39 "LexPyxell.x" #-} - - -tok :: (Posn -> String -> Token) -> (Posn -> String -> Token) -tok f p s = f p s - -share :: String -> String -share = id - -data Tok = - TS !String !Int -- reserved words and symbols - | TL !String -- string literals - | TI !String -- integer literals - | TV !String -- identifiers - | TD !String -- double precision float literals - | TC !String -- character literals - - deriving (Eq,Show,Ord) - -data Token = - PT Posn Tok - | Err Posn - deriving (Eq,Show,Ord) - -printPosn :: Posn -> String -printPosn (Pn _ l c) = "line " ++ show l ++ ", column " ++ show c - -tokenPos :: [Token] -> String -tokenPos (t:_) = printPosn (tokenPosn t) -tokenPos [] = "end of file" - -tokenPosn :: Token -> Posn -tokenPosn (PT p _) = p -tokenPosn (Err p) = p - -tokenLineCol :: Token -> (Int, Int) -tokenLineCol = posLineCol . tokenPosn - -posLineCol :: Posn -> (Int, Int) -posLineCol (Pn _ l c) = (l,c) - -mkPosToken :: Token -> ((Int, Int), String) -mkPosToken t@(PT p _) = (posLineCol p, prToken t) - -prToken :: Token -> String -prToken t = case t of - PT _ (TS s _) -> s - PT _ (TL s) -> show s - PT _ (TI s) -> s - PT _ (TV s) -> s - PT _ (TD s) -> s - PT _ (TC s) -> s - Err _ -> "#error" - - -data BTree = N | B String Tok BTree BTree deriving (Show) - -eitherResIdent :: (String -> Tok) -> String -> Tok -eitherResIdent tv s = treeFind resWords - where - treeFind N = tv s - treeFind (B a t left right) | s < a = treeFind left - | s > a = treeFind right - | s == a = t - -resWords :: BTree -resWords = b "Num" 46 (b "/=" 23 (b "*=" 12 (b "%=" 6 (b "$" 3 (b "!=" 2 (b "!" 1 N N) N) (b "%" 5 (b "$=" 4 N N) N)) (b "(" 9 (b "&=" 8 (b "&" 7 N N) N) (b "*" 11 (b ")" 10 N N) N))) (b "->" 18 (b "," 15 (b "+=" 14 (b "+" 13 N N) N) (b "-=" 17 (b "-" 16 N N) N)) (b "..." 21 (b ".." 20 (b "." 19 N N) N) (b "/" 22 N N)))) (b ">>=" 35 (b "<=" 29 (b "<" 26 (b ";" 25 (b ":" 24 N N) N) (b "<<=" 28 (b "<<" 27 N N) N)) (b ">" 32 (b "==" 31 (b "=" 30 N N) N) (b ">>" 34 (b ">=" 33 N N) N))) (b "Bool" 41 (b "??" 38 (b "?." 37 (b "?" 36 N N) N) (b "Any" 40 (b "??=" 39 N N) N)) (b "Int" 44 (b "Float" 43 (b "Char" 42 N N) N) (b "Module" 45 N N))))) (b "func" 69 (b "break" 58 (b "^" 52 (b "Void" 49 (b "Unknown" 48 (b "String" 47 N N) N) (b "]" 51 (b "[" 50 N N) N)) (b "abstract" 55 (b "_" 54 (b "^=" 53 N N) N) (b "as" 57 (b "and" 56 N N) N))) (b "elif" 64 (b "continue" 61 (b "constructor" 60 (b "class" 59 N N) N) (b "do" 63 (b "def" 62 N N) N)) (b "false" 67 (b "extern" 66 (b "else" 65 N N) N) (b "for" 68 N N)))) (b "step" 81 (b "null" 75 (b "in" 72 (b "if" 71 (b "hiding" 70 N N) N) (b "not" 74 (b "lambda" 73 N N) N)) (b "print" 78 (b "or" 77 (b "only" 76 N N) N) (b "skip" 80 (b "return" 79 N N) N))) (b "{" 87 (b "until" 84 (b "true" 83 (b "super" 82 N N) N) (b "while" 86 (b "use" 85 N N) N)) (b "}" 90 (b "|=" 89 (b "|" 88 N N) N) (b "~" 91 N N))))) - where b s n = let bs = id s - in B bs (TS bs n) - -unescapeInitTail :: String -> String -unescapeInitTail = id . unesc . tail . id where - unesc s = case s of - '\\':c:cs | elem c ['\"', '\\', '\''] -> c : unesc cs - '\\':'n':cs -> '\n' : unesc cs - '\\':'t':cs -> '\t' : unesc cs - '"':[] -> [] - c:cs -> c : unesc cs - _ -> [] - -------------------------------------------------------------------- --- Alex wrapper code. --- A modified "posn" wrapper. -------------------------------------------------------------------- - -data Posn = Pn !Int !Int !Int - deriving (Eq, Show,Ord) - -alexStartPos :: Posn -alexStartPos = Pn 0 1 1 - -alexMove :: Posn -> Char -> Posn -alexMove (Pn a l c) '\t' = Pn (a+1) l (((c+7) `div` 8)*8+1) -alexMove (Pn a l c) '\n' = Pn (a+1) (l+1) 1 -alexMove (Pn a l c) _ = Pn (a+1) l (c+1) - -type Byte = Word8 - -type AlexInput = (Posn, -- current position, - Char, -- previous char - [Byte], -- pending bytes on the current char - String) -- current input string - -tokens :: String -> [Token] -tokens str = go (alexStartPos, '\n', [], str) - where - go :: AlexInput -> [Token] - go inp@(pos, _, _, str) = - case alexScan inp 0 of - AlexEOF -> [] - AlexError (pos, _, _, _) -> [Err pos] - AlexSkip inp' len -> go inp' - AlexToken inp' len act -> act pos (take len str) : (go inp') - -alexGetByte :: AlexInput -> Maybe (Byte,AlexInput) -alexGetByte (p, c, (b:bs), s) = Just (b, (p, c, bs, s)) -alexGetByte (p, _, [], s) = - case s of - [] -> Nothing - (c:s) -> - let p' = alexMove p c - (b:bs) = utf8Encode c - in p' `seq` Just (b, (p', c, bs, s)) - -alexInputPrevChar :: AlexInput -> Char -alexInputPrevChar (p, c, bs, s) = c - --- | Encode a Haskell String to a list of Word8 values, in UTF8 format. -utf8Encode :: Char -> [Word8] -utf8Encode = map fromIntegral . go . ord - where - go oc - | oc <= 0x7f = [oc] - - | oc <= 0x7ff = [ 0xc0 + (oc `Data.Bits.shiftR` 6) - , 0x80 + oc Data.Bits..&. 0x3f - ] - - | oc <= 0xffff = [ 0xe0 + (oc `Data.Bits.shiftR` 12) - , 0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f) - , 0x80 + oc Data.Bits..&. 0x3f - ] - | otherwise = [ 0xf0 + (oc `Data.Bits.shiftR` 18) - , 0x80 + ((oc `Data.Bits.shiftR` 12) Data.Bits..&. 0x3f) - , 0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f) - , 0x80 + oc Data.Bits..&. 0x3f - ] - -alex_action_3 = tok (\p s -> PT p (eitherResIdent (TV . share) s)) -alex_action_4 = tok (\p s -> PT p (eitherResIdent (TV . share) s)) -alex_action_5 = tok (\p s -> PT p (TL $ share $ unescapeInitTail s)) -alex_action_6 = tok (\p s -> PT p (TC $ share s)) -alex_action_7 = tok (\p s -> PT p (TI $ share s)) -alex_action_8 = tok (\p s -> PT p (TD $ share s)) -{-# LINE 1 "templates/GenericTemplate.hs" #-} --- ----------------------------------------------------------------------------- --- ALEX TEMPLATE --- --- This code is in the PUBLIC DOMAIN; you may copy it freely and use --- it for any purpose whatsoever. - --- ----------------------------------------------------------------------------- --- INTERNALS and main scanner engine - - - - - - - - - - - - - - - - - --- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex. -#if __GLASGOW_HASKELL__ > 706 -#define GTE(n,m) (tagToEnum# (n >=# m)) -#define EQ(n,m) (tagToEnum# (n ==# m)) -#else -#define GTE(n,m) (n >=# m) -#define EQ(n,m) (n ==# m) -#endif - - - - - - - - - - - - - - - - - - - -data AlexAddr = AlexA# Addr# --- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex. -#if __GLASGOW_HASKELL__ < 503 -uncheckedShiftL# = shiftL# -#endif - -{-# INLINE alexIndexInt16OffAddr #-} -alexIndexInt16OffAddr (AlexA# arr) off = -#ifdef WORDS_BIGENDIAN - narrow16Int# i - where - i = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low) - high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#))) - low = int2Word# (ord# (indexCharOffAddr# arr off')) - off' = off *# 2# -#else - indexInt16OffAddr# arr off -#endif - - - - - -{-# INLINE alexIndexInt32OffAddr #-} -alexIndexInt32OffAddr (AlexA# arr) off = -#ifdef WORDS_BIGENDIAN - narrow32Int# i - where - i = word2Int# ((b3 `uncheckedShiftL#` 24#) `or#` - (b2 `uncheckedShiftL#` 16#) `or#` - (b1 `uncheckedShiftL#` 8#) `or#` b0) - b3 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 3#))) - b2 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 2#))) - b1 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#))) - b0 = int2Word# (ord# (indexCharOffAddr# arr off')) - off' = off *# 4# -#else - indexInt32OffAddr# arr off -#endif - - - - - - -#if __GLASGOW_HASKELL__ < 503 -quickIndex arr i = arr ! i -#else --- GHC >= 503, unsafeAt is available from Data.Array.Base. -quickIndex = unsafeAt -#endif - - - - --- ----------------------------------------------------------------------------- --- Main lexing routines - -data AlexReturn a - = AlexEOF - | AlexError !AlexInput - | AlexSkip !AlexInput !Int - | AlexToken !AlexInput !Int a - --- alexScan :: AlexInput -> StartCode -> AlexReturn a -alexScan input__ (I# (sc)) - = alexScanUser undefined input__ (I# (sc)) - -alexScanUser user__ input__ (I# (sc)) - = case alex_scan_tkn user__ input__ 0# input__ sc AlexNone of - (AlexNone, input__') -> - case alexGetByte input__ of - Nothing -> - - - - AlexEOF - Just _ -> - - - - AlexError input__' - - (AlexLastSkip input__'' len, _) -> - - - - AlexSkip input__'' len - - (AlexLastAcc k input__''' len, _) -> - - - - AlexToken input__''' len (alex_actions ! k) - - --- Push the input through the DFA, remembering the most recent accepting --- state it encountered. - -alex_scan_tkn user__ orig_input len input__ s last_acc = - input__ `seq` -- strict in the input - let - new_acc = (check_accs (alex_accept `quickIndex` (I# (s)))) - in - new_acc `seq` - case alexGetByte input__ of - Nothing -> (new_acc, input__) - Just (c, new_input) -> - - - - case fromIntegral c of { (I# (ord_c)) -> - let - base = alexIndexInt32OffAddr alex_base s - offset = (base +# ord_c) - check = alexIndexInt16OffAddr alex_check offset - - new_s = if GTE(offset,0#) && EQ(check,ord_c) - then alexIndexInt16OffAddr alex_table offset - else alexIndexInt16OffAddr alex_deflt s - in - case new_s of - -1# -> (new_acc, input__) - -- on an error, we want to keep the input *before* the - -- character that failed, not after. - _ -> alex_scan_tkn user__ orig_input (if c < 0x80 || c >= 0xC0 then (len +# 1#) else len) - -- note that the length is increased ONLY if this is the 1st byte in a char encoding) - new_input new_s new_acc - } - where - check_accs (AlexAccNone) = last_acc - check_accs (AlexAcc a ) = AlexLastAcc a input__ (I# (len)) - check_accs (AlexAccSkip) = AlexLastSkip input__ (I# (len)) - - - - - - - - - - - - - -data AlexLastAcc - = AlexNone - | AlexLastAcc !Int !AlexInput !Int - | AlexLastSkip !AlexInput !Int - -data AlexAcc user - = AlexAccNone - | AlexAcc Int - | AlexAccSkip - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/bnfc/LexPyxell.x b/src/bnfc/LexPyxell.x deleted file mode 100644 index 0802a7aa..00000000 --- a/src/bnfc/LexPyxell.x +++ /dev/null @@ -1,185 +0,0 @@ --- -*- haskell -*- --- This Alex file was machine-generated by the BNF converter -{ -{-# OPTIONS -fno-warn-incomplete-patterns #-} -{-# OPTIONS_GHC -w #-} -module LexPyxell where - - - -import qualified Data.Bits -import Data.Word (Word8) -import Data.Char (ord) -} - - -$l = [a-zA-Z\192 - \255] # [\215 \247] -- isolatin1 letter FIXME -$c = [A-Z\192-\221] # [\215] -- capital isolatin1 letter FIXME -$s = [a-z\222-\255] # [\247] -- small isolatin1 letter FIXME -$d = [0-9] -- digit -$i = [$l $d _ '] -- identifier character -$u = [\0-\255] -- universal: any character - -@rsyms = -- symbols and non-identifier-like reserved words - \; | \[ | \] | \? | \- \> | \* | \, | \( | \) | \{ | \} | \: | \< | \> | \= | \^ \= | \* \= | \/ \= | \% \= | \+ \= | \- \= | \< \< \= | \> \> \= | \& \= | \| \= | \$ \= | \? \? \= | \_ | \. | \? \. | \! | \^ | \- | \+ | \~ | \/ | \% | \< \< | \> \> | \& | \| | \$ | \. \. | \. \. \. | \= \= | \! \= | \< \= | \> \= | \? \? - -:- -"--" [.]* ; -- Toss single line comments -"{-" ([$u # \-] | \-+ [$u # [\- \}]])* ("-")+ "}" ; - -$white+ ; -@rsyms { tok (\p s -> PT p (eitherResIdent (TV . share) s)) } - -$l $i* { tok (\p s -> PT p (eitherResIdent (TV . share) s)) } -\" ([$u # [\" \\ \n]] | (\\ (\" | \\ | \' | n | t)))* \"{ tok (\p s -> PT p (TL $ share $ unescapeInitTail s)) } -\' ($u # [\' \\] | \\ [\\ \' n t]) \' { tok (\p s -> PT p (TC $ share s)) } -$d+ { tok (\p s -> PT p (TI $ share s)) } -$d+ \. $d+ (e (\-)? $d+)? { tok (\p s -> PT p (TD $ share s)) } - -{ - -tok :: (Posn -> String -> Token) -> (Posn -> String -> Token) -tok f p s = f p s - -share :: String -> String -share = id - -data Tok = - TS !String !Int -- reserved words and symbols - | TL !String -- string literals - | TI !String -- integer literals - | TV !String -- identifiers - | TD !String -- double precision float literals - | TC !String -- character literals - - deriving (Eq,Show,Ord) - -data Token = - PT Posn Tok - | Err Posn - deriving (Eq,Show,Ord) - -printPosn :: Posn -> String -printPosn (Pn _ l c) = "line " ++ show l ++ ", column " ++ show c - -tokenPos :: [Token] -> String -tokenPos (t:_) = printPosn (tokenPosn t) -tokenPos [] = "end of file" - -tokenPosn :: Token -> Posn -tokenPosn (PT p _) = p -tokenPosn (Err p) = p - -tokenLineCol :: Token -> (Int, Int) -tokenLineCol = posLineCol . tokenPosn - -posLineCol :: Posn -> (Int, Int) -posLineCol (Pn _ l c) = (l,c) - -mkPosToken :: Token -> ((Int, Int), String) -mkPosToken t@(PT p _) = (posLineCol p, prToken t) - -prToken :: Token -> String -prToken t = case t of - PT _ (TS s _) -> s - PT _ (TL s) -> show s - PT _ (TI s) -> s - PT _ (TV s) -> s - PT _ (TD s) -> s - PT _ (TC s) -> s - Err _ -> "#error" - - -data BTree = N | B String Tok BTree BTree deriving (Show) - -eitherResIdent :: (String -> Tok) -> String -> Tok -eitherResIdent tv s = treeFind resWords - where - treeFind N = tv s - treeFind (B a t left right) | s < a = treeFind left - | s > a = treeFind right - | s == a = t - -resWords :: BTree -resWords = b "Num" 46 (b "/=" 23 (b "*=" 12 (b "%=" 6 (b "$" 3 (b "!=" 2 (b "!" 1 N N) N) (b "%" 5 (b "$=" 4 N N) N)) (b "(" 9 (b "&=" 8 (b "&" 7 N N) N) (b "*" 11 (b ")" 10 N N) N))) (b "->" 18 (b "," 15 (b "+=" 14 (b "+" 13 N N) N) (b "-=" 17 (b "-" 16 N N) N)) (b "..." 21 (b ".." 20 (b "." 19 N N) N) (b "/" 22 N N)))) (b ">>=" 35 (b "<=" 29 (b "<" 26 (b ";" 25 (b ":" 24 N N) N) (b "<<=" 28 (b "<<" 27 N N) N)) (b ">" 32 (b "==" 31 (b "=" 30 N N) N) (b ">>" 34 (b ">=" 33 N N) N))) (b "Bool" 41 (b "??" 38 (b "?." 37 (b "?" 36 N N) N) (b "Any" 40 (b "??=" 39 N N) N)) (b "Int" 44 (b "Float" 43 (b "Char" 42 N N) N) (b "Module" 45 N N))))) (b "func" 69 (b "break" 58 (b "^" 52 (b "Void" 49 (b "Unknown" 48 (b "String" 47 N N) N) (b "]" 51 (b "[" 50 N N) N)) (b "abstract" 55 (b "_" 54 (b "^=" 53 N N) N) (b "as" 57 (b "and" 56 N N) N))) (b "elif" 64 (b "continue" 61 (b "constructor" 60 (b "class" 59 N N) N) (b "do" 63 (b "def" 62 N N) N)) (b "false" 67 (b "extern" 66 (b "else" 65 N N) N) (b "for" 68 N N)))) (b "step" 81 (b "null" 75 (b "in" 72 (b "if" 71 (b "hiding" 70 N N) N) (b "not" 74 (b "lambda" 73 N N) N)) (b "print" 78 (b "or" 77 (b "only" 76 N N) N) (b "skip" 80 (b "return" 79 N N) N))) (b "{" 87 (b "until" 84 (b "true" 83 (b "super" 82 N N) N) (b "while" 86 (b "use" 85 N N) N)) (b "}" 90 (b "|=" 89 (b "|" 88 N N) N) (b "~" 91 N N))))) - where b s n = let bs = id s - in B bs (TS bs n) - -unescapeInitTail :: String -> String -unescapeInitTail = id . unesc . tail . id where - unesc s = case s of - '\\':c:cs | elem c ['\"', '\\', '\''] -> c : unesc cs - '\\':'n':cs -> '\n' : unesc cs - '\\':'t':cs -> '\t' : unesc cs - '"':[] -> [] - c:cs -> c : unesc cs - _ -> [] - -------------------------------------------------------------------- --- Alex wrapper code. --- A modified "posn" wrapper. -------------------------------------------------------------------- - -data Posn = Pn !Int !Int !Int - deriving (Eq, Show,Ord) - -alexStartPos :: Posn -alexStartPos = Pn 0 1 1 - -alexMove :: Posn -> Char -> Posn -alexMove (Pn a l c) '\t' = Pn (a+1) l (((c+7) `div` 8)*8+1) -alexMove (Pn a l c) '\n' = Pn (a+1) (l+1) 1 -alexMove (Pn a l c) _ = Pn (a+1) l (c+1) - -type Byte = Word8 - -type AlexInput = (Posn, -- current position, - Char, -- previous char - [Byte], -- pending bytes on the current char - String) -- current input string - -tokens :: String -> [Token] -tokens str = go (alexStartPos, '\n', [], str) - where - go :: AlexInput -> [Token] - go inp@(pos, _, _, str) = - case alexScan inp 0 of - AlexEOF -> [] - AlexError (pos, _, _, _) -> [Err pos] - AlexSkip inp' len -> go inp' - AlexToken inp' len act -> act pos (take len str) : (go inp') - -alexGetByte :: AlexInput -> Maybe (Byte,AlexInput) -alexGetByte (p, c, (b:bs), s) = Just (b, (p, c, bs, s)) -alexGetByte (p, _, [], s) = - case s of - [] -> Nothing - (c:s) -> - let p' = alexMove p c - (b:bs) = utf8Encode c - in p' `seq` Just (b, (p', c, bs, s)) - -alexInputPrevChar :: AlexInput -> Char -alexInputPrevChar (p, c, bs, s) = c - --- | Encode a Haskell String to a list of Word8 values, in UTF8 format. -utf8Encode :: Char -> [Word8] -utf8Encode = map fromIntegral . go . ord - where - go oc - | oc <= 0x7f = [oc] - - | oc <= 0x7ff = [ 0xc0 + (oc `Data.Bits.shiftR` 6) - , 0x80 + oc Data.Bits..&. 0x3f - ] - - | oc <= 0xffff = [ 0xe0 + (oc `Data.Bits.shiftR` 12) - , 0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f) - , 0x80 + oc Data.Bits..&. 0x3f - ] - | otherwise = [ 0xf0 + (oc `Data.Bits.shiftR` 18) - , 0x80 + ((oc `Data.Bits.shiftR` 12) Data.Bits..&. 0x3f) - , 0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f) - , 0x80 + oc Data.Bits..&. 0x3f - ] -} diff --git a/src/bnfc/Makefile b/src/bnfc/Makefile deleted file mode 100644 index b4f77b2f..00000000 --- a/src/bnfc/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -all: - bnfc --functor ../Pyxell.cf - happy -gca ParPyxell.y - alex -g LexPyxell.x - -clean: - -rm -f *.log *.aux *.hi *.o *.dvi - -distclean: clean - -rm -f DocPyxell.* LexPyxell.* ParPyxell.* LayoutPyxell.* SkelPyxell.* PrintPyxell.* TestPyxell.* AbsPyxell.* TestPyxell ErrM.* SharedString.* ComposOp.* Pyxell.dtd XMLPyxell.* Makefile* - - diff --git a/src/bnfc/ParPyxell.hs b/src/bnfc/ParPyxell.hs deleted file mode 100644 index 3959eaff..00000000 --- a/src/bnfc/ParPyxell.hs +++ /dev/null @@ -1,3129 +0,0 @@ -{-# OPTIONS_GHC -w #-} -{-# OPTIONS -XMagicHash -XBangPatterns -XTypeSynonymInstances -XFlexibleInstances -cpp #-} -#if __GLASGOW_HASKELL__ >= 710 -{-# OPTIONS_GHC -XPartialTypeSignatures #-} -#endif -{-# OPTIONS_GHC -fno-warn-incomplete-patterns -fno-warn-overlapping-patterns #-} -module ParPyxell where -import AbsPyxell -import LexPyxell -import ErrM -import qualified Data.Array as Happy_Data_Array -import qualified Data.Bits as Bits -import qualified GHC.Exts as Happy_GHC_Exts -import Control.Applicative(Applicative(..)) -import Control.Monad (ap) - --- parser produced by Happy Version 1.19.9 - -newtype HappyAbsSyn = HappyAbsSyn HappyAny -#if __GLASGOW_HASKELL__ >= 607 -type HappyAny = Happy_GHC_Exts.Any -#else -type HappyAny = forall a . a -#endif -happyIn56 :: ((Maybe (Int, Int), Integer)) -> (HappyAbsSyn ) -happyIn56 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn56 #-} -happyOut56 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), Integer)) -happyOut56 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut56 #-} -happyIn57 :: ((Maybe (Int, Int), Ident)) -> (HappyAbsSyn ) -happyIn57 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn57 #-} -happyOut57 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), Ident)) -happyOut57 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut57 #-} -happyIn58 :: ((Maybe (Int, Int), Double)) -> (HappyAbsSyn ) -happyIn58 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn58 #-} -happyOut58 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), Double)) -happyOut58 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut58 #-} -happyIn59 :: ((Maybe (Int, Int), Char)) -> (HappyAbsSyn ) -happyIn59 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn59 #-} -happyOut59 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), Char)) -happyOut59 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut59 #-} -happyIn60 :: ((Maybe (Int, Int), String)) -> (HappyAbsSyn ) -happyIn60 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn60 #-} -happyOut60 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), String)) -happyOut60 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut60 #-} -happyIn61 :: ((Maybe (Int, Int), Program (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn61 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn61 #-} -happyOut61 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), Program (Maybe (Int, Int)))) -happyOut61 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut61 #-} -happyIn62 :: ((Maybe (Int, Int), [Stmt (Maybe (Int, Int))])) -> (HappyAbsSyn ) -happyIn62 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn62 #-} -happyOut62 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), [Stmt (Maybe (Int, Int))])) -happyOut62 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut62 #-} -happyIn63 :: ((Maybe (Int, Int), Type (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn63 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn63 #-} -happyOut63 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), Type (Maybe (Int, Int)))) -happyOut63 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut63 #-} -happyIn64 :: ((Maybe (Int, Int), Type (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn64 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn64 #-} -happyOut64 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), Type (Maybe (Int, Int)))) -happyOut64 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut64 #-} -happyIn65 :: ((Maybe (Int, Int), Type (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn65 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn65 #-} -happyOut65 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), Type (Maybe (Int, Int)))) -happyOut65 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut65 #-} -happyIn66 :: ((Maybe (Int, Int), Type (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn66 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn66 #-} -happyOut66 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), Type (Maybe (Int, Int)))) -happyOut66 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut66 #-} -happyIn67 :: ((Maybe (Int, Int), [Type (Maybe (Int, Int))])) -> (HappyAbsSyn ) -happyIn67 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn67 #-} -happyOut67 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), [Type (Maybe (Int, Int))])) -happyOut67 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut67 #-} -happyIn68 :: ((Maybe (Int, Int), [Type (Maybe (Int, Int))])) -> (HappyAbsSyn ) -happyIn68 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn68 #-} -happyOut68 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), [Type (Maybe (Int, Int))])) -happyOut68 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut68 #-} -happyIn69 :: ((Maybe (Int, Int), [Type (Maybe (Int, Int))])) -> (HappyAbsSyn ) -happyIn69 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn69 #-} -happyOut69 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), [Type (Maybe (Int, Int))])) -happyOut69 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut69 #-} -happyIn70 :: ((Maybe (Int, Int), Type (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn70 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn70 #-} -happyOut70 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), Type (Maybe (Int, Int)))) -happyOut70 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut70 #-} -happyIn71 :: ((Maybe (Int, Int), Stmt (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn71 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn71 #-} -happyOut71 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), Stmt (Maybe (Int, Int)))) -happyOut71 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut71 #-} -happyIn72 :: ((Maybe (Int, Int), Use (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn72 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn72 #-} -happyOut72 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), Use (Maybe (Int, Int)))) -happyOut72 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut72 #-} -happyIn73 :: ((Maybe (Int, Int), CExt (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn73 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn73 #-} -happyOut73 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), CExt (Maybe (Int, Int)))) -happyOut73 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut73 #-} -happyIn74 :: ((Maybe (Int, Int), CMemb (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn74 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn74 #-} -happyOut74 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), CMemb (Maybe (Int, Int)))) -happyOut74 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut74 #-} -happyIn75 :: ((Maybe (Int, Int), MBody (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn75 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn75 #-} -happyOut75 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), MBody (Maybe (Int, Int)))) -happyOut75 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut75 #-} -happyIn76 :: ((Maybe (Int, Int), [CMemb (Maybe (Int, Int))])) -> (HappyAbsSyn ) -happyIn76 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn76 #-} -happyOut76 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), [CMemb (Maybe (Int, Int))])) -happyOut76 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut76 #-} -happyIn77 :: ((Maybe (Int, Int), FVars (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn77 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn77 #-} -happyOut77 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), FVars (Maybe (Int, Int)))) -happyOut77 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut77 #-} -happyIn78 :: ((Maybe (Int, Int), FVar (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn78 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn78 #-} -happyOut78 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), FVar (Maybe (Int, Int)))) -happyOut78 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut78 #-} -happyIn79 :: ((Maybe (Int, Int), [FVar (Maybe (Int, Int))])) -> (HappyAbsSyn ) -happyIn79 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn79 #-} -happyOut79 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), [FVar (Maybe (Int, Int))])) -happyOut79 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut79 #-} -happyIn80 :: ((Maybe (Int, Int), FArg (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn80 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn80 #-} -happyOut80 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), FArg (Maybe (Int, Int)))) -happyOut80 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut80 #-} -happyIn81 :: ((Maybe (Int, Int), [FArg (Maybe (Int, Int))])) -> (HappyAbsSyn ) -happyIn81 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn81 #-} -happyOut81 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), [FArg (Maybe (Int, Int))])) -happyOut81 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut81 #-} -happyIn82 :: ((Maybe (Int, Int), FRet (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn82 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn82 #-} -happyOut82 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), FRet (Maybe (Int, Int)))) -happyOut82 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut82 #-} -happyIn83 :: ((Maybe (Int, Int), FBody (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn83 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn83 #-} -happyOut83 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), FBody (Maybe (Int, Int)))) -happyOut83 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut83 #-} -happyIn84 :: ((Maybe (Int, Int), Block (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn84 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn84 #-} -happyOut84 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), Block (Maybe (Int, Int)))) -happyOut84 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut84 #-} -happyIn85 :: ((Maybe (Int, Int), [Expr (Maybe (Int, Int))])) -> (HappyAbsSyn ) -happyIn85 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn85 #-} -happyOut85 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), [Expr (Maybe (Int, Int))])) -happyOut85 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut85 #-} -happyIn86 :: ((Maybe (Int, Int), Branch (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn86 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn86 #-} -happyOut86 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), Branch (Maybe (Int, Int)))) -happyOut86 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut86 #-} -happyIn87 :: ((Maybe (Int, Int), [Branch (Maybe (Int, Int))])) -> (HappyAbsSyn ) -happyIn87 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn87 #-} -happyOut87 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), [Branch (Maybe (Int, Int))])) -happyOut87 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut87 #-} -happyIn88 :: ((Maybe (Int, Int), Else (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn88 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn88 #-} -happyOut88 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), Else (Maybe (Int, Int)))) -happyOut88 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut88 #-} -happyIn89 :: ((Maybe (Int, Int), Expr (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn89 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn89 #-} -happyOut89 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), Expr (Maybe (Int, Int)))) -happyOut89 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut89 #-} -happyIn90 :: ((Maybe (Int, Int), ACpr (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn90 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn90 #-} -happyOut90 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), ACpr (Maybe (Int, Int)))) -happyOut90 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut90 #-} -happyIn91 :: ((Maybe (Int, Int), [ACpr (Maybe (Int, Int))])) -> (HappyAbsSyn ) -happyIn91 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn91 #-} -happyOut91 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), [ACpr (Maybe (Int, Int))])) -happyOut91 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut91 #-} -happyIn92 :: ((Maybe (Int, Int), Slice (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn92 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn92 #-} -happyOut92 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), Slice (Maybe (Int, Int)))) -happyOut92 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut92 #-} -happyIn93 :: ((Maybe (Int, Int), [Slice (Maybe (Int, Int))])) -> (HappyAbsSyn ) -happyIn93 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn93 #-} -happyOut93 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), [Slice (Maybe (Int, Int))])) -happyOut93 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut93 #-} -happyIn94 :: ((Maybe (Int, Int), CArg (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn94 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn94 #-} -happyOut94 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), CArg (Maybe (Int, Int)))) -happyOut94 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut94 #-} -happyIn95 :: ((Maybe (Int, Int), [CArg (Maybe (Int, Int))])) -> (HappyAbsSyn ) -happyIn95 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn95 #-} -happyOut95 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), [CArg (Maybe (Int, Int))])) -happyOut95 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut95 #-} -happyIn96 :: ((Maybe (Int, Int), Expr (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn96 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn96 #-} -happyOut96 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), Expr (Maybe (Int, Int)))) -happyOut96 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut96 #-} -happyIn97 :: ((Maybe (Int, Int), Expr (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn97 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn97 #-} -happyOut97 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), Expr (Maybe (Int, Int)))) -happyOut97 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut97 #-} -happyIn98 :: ((Maybe (Int, Int), Expr (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn98 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn98 #-} -happyOut98 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), Expr (Maybe (Int, Int)))) -happyOut98 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut98 #-} -happyIn99 :: ((Maybe (Int, Int), Expr (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn99 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn99 #-} -happyOut99 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), Expr (Maybe (Int, Int)))) -happyOut99 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut99 #-} -happyIn100 :: ((Maybe (Int, Int), Expr (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn100 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn100 #-} -happyOut100 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), Expr (Maybe (Int, Int)))) -happyOut100 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut100 #-} -happyIn101 :: ((Maybe (Int, Int), Expr (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn101 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn101 #-} -happyOut101 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), Expr (Maybe (Int, Int)))) -happyOut101 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut101 #-} -happyIn102 :: ((Maybe (Int, Int), Expr (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn102 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn102 #-} -happyOut102 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), Expr (Maybe (Int, Int)))) -happyOut102 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut102 #-} -happyIn103 :: ((Maybe (Int, Int), Expr (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn103 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn103 #-} -happyOut103 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), Expr (Maybe (Int, Int)))) -happyOut103 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut103 #-} -happyIn104 :: ((Maybe (Int, Int), Cmp (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn104 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn104 #-} -happyOut104 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), Cmp (Maybe (Int, Int)))) -happyOut104 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut104 #-} -happyIn105 :: ((Maybe (Int, Int), CmpOp (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn105 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn105 #-} -happyOut105 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), CmpOp (Maybe (Int, Int)))) -happyOut105 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut105 #-} -happyIn106 :: ((Maybe (Int, Int), Expr (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn106 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn106 #-} -happyOut106 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), Expr (Maybe (Int, Int)))) -happyOut106 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut106 #-} -happyIn107 :: ((Maybe (Int, Int), Expr (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn107 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn107 #-} -happyOut107 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), Expr (Maybe (Int, Int)))) -happyOut107 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut107 #-} -happyIn108 :: ((Maybe (Int, Int), Expr (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn108 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn108 #-} -happyOut108 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), Expr (Maybe (Int, Int)))) -happyOut108 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut108 #-} -happyIn109 :: ((Maybe (Int, Int), [Expr (Maybe (Int, Int))])) -> (HappyAbsSyn ) -happyIn109 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn109 #-} -happyOut109 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), [Expr (Maybe (Int, Int))])) -happyOut109 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut109 #-} -happyIn110 :: ((Maybe (Int, Int), [Expr (Maybe (Int, Int))])) -> (HappyAbsSyn ) -happyIn110 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn110 #-} -happyOut110 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), [Expr (Maybe (Int, Int))])) -happyOut110 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut110 #-} -happyIn111 :: ((Maybe (Int, Int), Expr (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn111 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn111 #-} -happyOut111 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), Expr (Maybe (Int, Int)))) -happyOut111 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut111 #-} -happyIn112 :: ((Maybe (Int, Int), [Ident])) -> (HappyAbsSyn ) -happyIn112 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn112 #-} -happyOut112 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), [Ident])) -happyOut112 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut112 #-} -happyIn113 :: ((Maybe (Int, Int), Expr (Maybe (Int, Int)))) -> (HappyAbsSyn ) -happyIn113 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn113 #-} -happyOut113 :: (HappyAbsSyn ) -> ((Maybe (Int, Int), Expr (Maybe (Int, Int)))) -happyOut113 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut113 #-} -happyInTok :: (Token) -> (HappyAbsSyn ) -happyInTok x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyInTok #-} -happyOutTok :: (HappyAbsSyn ) -> (Token) -happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOutTok #-} - - -happyExpList :: HappyAddr -happyExpList = HappyA# "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x01\x00\x00\x9e\x46\x2c\xb8\xce\x7d\xf8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x04\x00\x00\x78\x1a\xb1\xe0\x3a\xf7\xe1\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\xe0\x29\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\xa7\x01\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x9e\x06\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x7c\x1b\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\xe0\x69\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\xa7\x01\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\xdf\x06\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x7c\x1b\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x12\x00\x00\xe0\x69\xc4\x82\xeb\xdc\x87\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x10\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x7c\x1b\x40\x80\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\xc0\xb7\x01\x04\x08\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x7c\x1b\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\xf0\x6d\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\xc0\xb7\x01\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\xdf\x06\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x7c\x1b\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x01\x00\x00\x00\x44\x00\x08\x0e\x0c\xf8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x04\x00\x00\x00\x10\x01\x20\x38\x30\xe0\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x12\x00\x00\x00\x40\x04\x80\xe0\xc0\x80\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x44\x00\x08\x08\x0c\xf0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x48\x00\x00\x00\x00\x11\x00\x82\x03\x03\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x01\x00\x00\x00\x44\x00\x08\x0e\x0c\xf8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x04\x00\x00\x00\x10\x01\x20\x38\x30\xe0\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x12\x00\x00\x00\x40\x04\x80\xe0\xc0\x80\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x48\x00\x00\x00\x00\x11\x00\x02\x02\x03\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x01\x00\x00\x00\x44\x00\x08\x08\x0c\xf8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x04\x00\x00\x00\x10\x01\x20\x20\x30\xe0\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x12\x00\x00\x00\x40\x04\x80\x80\xc0\x80\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x48\x00\x00\x00\x00\x11\x00\x02\x02\x03\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x01\x00\x00\x00\x44\x00\x08\x08\x0c\xf8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x04\x00\x00\x00\x10\x01\x20\x20\x30\xe0\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x12\x00\x00\x00\x40\x04\x80\xc0\xc0\x80\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x48\x00\x00\x00\x00\x11\x00\x02\x02\x03\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\xa4\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x04\x00\x00\x00\x10\x01\x20\x30\x30\xe0\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x12\x00\x00\x00\x40\x04\x80\xc0\xc0\x80\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x48\x00\x00\x00\x00\x11\x00\x82\x03\x03\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x01\x00\x00\x00\x44\x00\x08\x0c\x0c\xf8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x04\x00\x00\x00\x10\x01\x20\x38\x30\xe0\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x12\x00\x00\x00\x40\x04\x80\xe0\xc0\x80\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x01\x00\x00\x00\x44\x00\x08\x0e\x0c\xf8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x02\x08\x00\x20\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\xe9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x01\x00\x00\x00\x44\x00\x08\x0e\x0c\xf8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x04\x00\x00\x00\x10\x01\x20\x20\x30\xe0\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x12\x00\x00\x00\x40\x04\x80\x80\xc0\x80\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x48\x00\x00\x00\x00\x11\x00\x82\x03\x03\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x48\x00\x00\x00\x00\x11\x00\x02\x03\x03\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x48\x00\x00\x00\x00\x11\x00\x02\x02\x03\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x40\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x48\x00\x00\x00\x00\x11\x00\x82\x03\x03\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x01\x00\x00\x00\x44\x00\x08\x0e\x0c\xf8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x20\x80\x00\x00\x02\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x01\x00\x00\x9e\x46\x2c\xb8\xce\x7d\xf8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x7c\x1b\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\xf0\x6d\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\xdf\x06\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\xa7\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x51\x82\x50\x88\x00\x20\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x04\x00\x00\x7c\x1b\x01\x20\x38\x30\xe0\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x12\x00\x00\xf0\x6d\x04\x80\xe0\xc0\x80\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x12\x00\x00\x00\x40\x04\x80\xe0\xc0\x80\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x01\x00\x00\x00\x44\x00\x08\x0e\x0c\xf8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x04\x00\x00\x00\x10\x01\x20\x38\x30\xe0\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x12\x00\x00\x00\x40\x04\x80\xe0\xc0\x80\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x01\x00\x00\x00\x44\x00\x08\x0e\x0c\xf8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x12\x00\x00\x00\x40\x04\x80\xe0\xc0\x80\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x12\x00\x00\xe0\x69\xc4\x82\xeb\xdc\x87\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x9e\x06\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x78\x1a\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\xf0\x6d\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x40\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x04\x00\x00\x00\x10\x01\x20\x38\x30\xe0\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x12\x00\x00\x00\x40\x04\x80\xe0\xc0\x80\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x48\x00\x00\x00\x00\x11\x00\x82\x03\x03\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x01\x00\x00\x00\x44\x00\x08\x0e\x0c\xf8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x04\x00\x00\x00\x10\x01\x20\x38\x30\xe0\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x12\x00\x00\x00\x40\x04\x80\xe0\xc0\x80\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x48\x00\x00\x00\x00\x11\x00\x82\x03\x03\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x01\x00\x00\x00\x44\x00\x08\x0e\x0c\xf8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x04\x00\x00\x00\x10\x01\x20\x38\x30\xe0\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x12\x00\x00\x00\x40\x04\x80\xe0\xc0\x80\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x48\x00\x00\x00\x00\x11\x00\x82\x03\x03\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x01\x00\x00\x00\x44\x00\x08\x0e\x0c\xf8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x04\x00\x00\x00\x10\x01\x20\x38\x30\xe0\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x7c\x1b\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\xf0\x6d\x00\x01\x02\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x7c\x1b\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\xc0\xb7\x01\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x7c\x1b\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x04\x00\x00\x00\x10\x01\x20\x38\x30\xe0\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x01\x00\x00\x00\x44\x00\x08\x0e\x0c\xf8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x48\x00\x00\x00\x00\x11\x00\x82\x03\x03\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x48\x00\x00\x00\x00\x11\x00\x82\x03\x03\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x01\x00\x00\x00\x44\x00\x08\x0e\x0c\xf8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x04\x00\x00\x00\x10\x01\x20\x38\x30\xe0\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x12\x00\x00\x00\x40\x04\x80\x80\xc0\x80\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x48\x00\x00\x00\x00\x11\x00\x02\x02\x03\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x01\x00\x00\x00\x44\x00\x08\x08\x0c\xf8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x04\x00\x00\x00\x10\x01\x20\x20\x30\xe0\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x12\x00\x00\x00\x40\x04\x80\x80\xc0\x80\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x48\x00\x00\x00\x00\x11\x00\x02\x02\x03\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x01\x00\x00\x00\x44\x00\x08\x08\x0c\xf8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x04\x00\x00\x00\x10\x01\x20\x20\x30\xe0\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x12\x00\x00\x00\x40\x04\x80\x80\xc0\x80\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x48\x00\x00\x00\x00\x11\x00\x02\x02\x03\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x01\x00\x00\x00\x44\x00\x08\x08\x0c\xf8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x04\x00\x00\x00\x10\x01\x20\x30\x30\xe0\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x12\x00\x00\x00\x40\x04\x80\xe0\xc0\x80\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x48\x00\x00\x00\x00\x11\x00\x02\x03\x03\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x01\x00\x00\x00\x44\x00\x08\x0e\x0c\xf8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x48\x00\x00\x00\x00\x11\x00\x82\x03\x03\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x01\x00\x00\x00\x44\x00\x08\x0c\x0c\xf8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x04\x00\x00\x00\x10\x01\x20\x30\x30\xe0\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x12\x00\x00\x00\x40\x04\x80\x80\xc0\x80\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x48\x00\x00\x00\x00\x11\x00\x02\x02\x03\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x01\x00\x00\x00\x44\x00\x08\x08\x0c\xf8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x12\x00\x00\x00\x40\x04\x80\xe0\xc0\x80\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x90\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x08\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x20\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x01\x00\x00\x00\x44\x00\x08\x0e\x0c\xf8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x48\x00\x00\x00\x00\x11\x00\x82\x03\x03\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x48\x00\x00\x00\x00\x11\x00\x82\x03\x03\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\xf0\x6d\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x01\x00\x00\x00\x44\x00\x08\x0e\x0c\xf8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x01\x00\x00\x00\x44\x00\x08\x0e\x0c\xf8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\xdf\x06\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x04\x00\x00\x00\x10\x01\x20\x38\x30\xe0\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x04\x00\x00\x00\x10\x01\x20\x38\x30\xe0\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\xc0\xb7\x01\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\xdf\x06\x10\x20\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x12\x00\x00\x00\x40\x04\x80\xe0\xc0\x80\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\xdf\x06\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"# - -{-# NOINLINE happyExpListPerState #-} -happyExpListPerState st = - token_strs_expected - where token_strs = ["error","%dummy","%start_pProgram_internal","%start_pListStmt_internal","%start_pType4_internal","%start_pType3_internal","%start_pType2_internal","%start_pType1_internal","%start_pListType3_internal","%start_pListType2_internal","%start_pListType_internal","%start_pType_internal","%start_pStmt_internal","%start_pUse_internal","%start_pCExt_internal","%start_pCMemb_internal","%start_pMBody_internal","%start_pListCMemb_internal","%start_pFVars_internal","%start_pFVar_internal","%start_pListFVar_internal","%start_pFArg_internal","%start_pListFArg_internal","%start_pFRet_internal","%start_pFBody_internal","%start_pBlock_internal","%start_pListExpr_internal","%start_pBranch_internal","%start_pListBranch_internal","%start_pElse_internal","%start_pExpr13_internal","%start_pACpr_internal","%start_pListACpr_internal","%start_pSlice_internal","%start_pListSlice_internal","%start_pCArg_internal","%start_pListCArg_internal","%start_pExpr12_internal","%start_pExpr11_internal","%start_pExpr10_internal","%start_pExpr9_internal","%start_pExpr8_internal","%start_pExpr7_internal","%start_pExpr6_internal","%start_pExpr5_internal","%start_pCmp_internal","%start_pCmpOp_internal","%start_pExpr4_internal","%start_pExpr3_internal","%start_pExpr1_internal","%start_pListExpr3_internal","%start_pListExpr2_internal","%start_pExpr2_internal","%start_pListIdent_internal","%start_pExpr_internal","Integer","Ident","Double","Char","String","Program","ListStmt","Type4","Type3","Type2","Type1","ListType3","ListType2","ListType","Type","Stmt","Use","CExt","CMemb","MBody","ListCMemb","FVars","FVar","ListFVar","FArg","ListFArg","FRet","FBody","Block","ListExpr","Branch","ListBranch","Else","Expr13","ACpr","ListACpr","Slice","ListSlice","CArg","ListCArg","Expr12","Expr11","Expr10","Expr9","Expr8","Expr7","Expr6","Expr5","Cmp","CmpOp","Expr4","Expr3","Expr1","ListExpr3","ListExpr2","Expr2","ListIdent","Expr","'!'","'!='","'$'","'$='","'%'","'%='","'&'","'&='","'('","')'","'*'","'*='","'+'","'+='","','","'-'","'-='","'->'","'.'","'..'","'...'","'/'","'/='","':'","';'","'<'","'<<'","'<<='","'<='","'='","'=='","'>'","'>='","'>>'","'>>='","'?'","'?.'","'??'","'??='","'Any'","'Bool'","'Char'","'Float'","'Int'","'Module'","'Num'","'String'","'Unknown'","'Void'","'['","']'","'^'","'^='","'_'","'abstract'","'and'","'as'","'break'","'class'","'constructor'","'continue'","'def'","'do'","'elif'","'else'","'extern'","'false'","'for'","'func'","'hiding'","'if'","'in'","'lambda'","'not'","'null'","'only'","'or'","'print'","'return'","'skip'","'step'","'super'","'true'","'until'","'use'","'while'","'{'","'|'","'|='","'}'","'~'","L_integ","L_ident","L_doubl","L_charac","L_quoted","%eof"] - bit_start = st * 210 - bit_end = (st + 1) * 210 - read_bit = readArrayBit happyExpList - bits = map read_bit [bit_start..bit_end - 1] - bits_indexed = zip bits [0..209] - token_strs_expected = concatMap f bits_indexed - f (False, _) = [] - f (True, nr) = [token_strs !! nr] - -happyActOffsets :: HappyAddr -happyActOffsets = HappyA# "\x00\x01\x00\x01\x14\x00\x7a\x00\x7a\x00\xfc\x02\x7a\x00\x7a\x00\x8f\x00\xfc\x02\x00\x01\x64\x00\x39\x00\xa3\x02\xfa\xff\x50\x00\xed\xff\xfc\x02\x9f\x00\xfc\x02\xaa\x00\xb6\x00\xf7\xff\xd1\xff\xc6\x01\xc6\x01\xc6\x01\x24\x00\x2a\x02\x30\x00\x30\x00\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xfb\x01\xfb\x01\xfb\x01\xfb\x01\xfb\x01\xfb\x01\xfb\x01\xf5\x01\xfb\x01\x4a\x01\xf5\x01\xf5\x01\xc6\x01\xf5\x01\xc6\x01\xc6\x01\xe7\xff\xc6\x01\xec\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x00\x00\x00\x1c\x00\x7b\x00\x35\x00\x60\x00\x06\x00\x4a\x01\x4c\x00\x00\x00\x3c\x00\x07\x00\x00\x00\x00\x00\x00\x00\x31\x00\xc6\x01\xfb\x01\xfb\x01\xc6\x01\x00\x00\x00\x00\x59\x00\xf5\x01\x00\x00\x97\x00\x00\x00\xfb\x01\x00\x00\x00\x00\x00\x00\x00\x00\xcb\x00\x5b\x00\x10\x00\x5b\x00\x5b\x00\xce\x00\xd7\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4a\x01\x8e\x00\x8e\x00\x8e\x00\xfe\xff\xfc\xff\x15\x00\x1f\x00\x03\x00\x8e\x00\xa7\x00\xe9\x00\x90\x00\x00\x00\x90\x00\xe7\x00\xa9\x00\x00\x00\xa9\x00\x55\x00\xa9\x00\xc6\x01\xc6\x01\xa9\x00\x01\x00\xa9\x00\xcd\x00\xd1\x00\xb4\x00\xde\x00\xbf\x00\xbf\x00\x06\x01\xc7\x00\x00\x01\xc7\x00\xd9\x00\x00\x00\x00\x00\x00\x00\x5a\x02\xbd\x00\x00\x00\x00\x00\x1c\x01\x00\x00\xd8\x00\xfc\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\x02\xdf\x00\x31\x01\xe0\x00\xe0\x00\xeb\x00\x48\x01\xe5\x00\xe5\x00\xe5\x00\xe2\x02\xfb\x00\x40\x01\xf9\x00\x59\x01\x09\x01\x02\x01\x00\x00\x16\x01\x0d\x01\x0d\x01\x14\x00\x0d\x01\x12\x01\x12\x01\x12\x01\x42\x00\x12\x01\x10\x01\x00\x00\x88\x02\x97\x01\x58\x01\x00\x00\x1b\x01\x00\x00\xc6\x01\x1b\x01\xc6\x01\xc6\x01\xc6\x01\x00\x00\xc6\x01\x1b\x01\xc6\x01\x19\x01\x19\x01\x6c\x01\x6d\x01\x1d\x01\x17\x00\x1d\x01\x1d\x01\x1d\x01\xe0\xff\x1d\x01\x1d\x01\x64\x01\x1e\x01\x00\x00\x00\x01\x00\x00\x7a\x00\x7a\x00\xf0\x00\x49\x01\x64\x00\x4d\x01\x00\x00\x00\x00\x4c\x01\x7a\x01\x4f\x01\x91\x01\x69\x01\x6a\x01\x43\x00\x95\x01\x9c\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\x8a\x01\x00\x00\x00\x00\x00\x00\x9f\x01\x00\x00\xa3\x01\xf1\x02\x41\x00\x9a\x01\x99\x01\x65\x00\x00\x00\xf1\x02\xa2\x01\xfc\x02\x00\x00\x61\x01\x65\x01\xc6\x01\x65\x01\x00\x00\xc6\x01\x60\x01\x60\x01\xc6\x01\x00\x00\x76\x01\x00\x00\xc6\x01\xc6\x01\xc6\x01\xfb\x01\xfb\x01\xfb\x01\xfb\x01\xfb\x01\xfb\x01\xfb\x01\xfb\x01\xfb\x01\xfb\x01\xfb\x01\xf5\x01\xc6\x01\xf5\x01\xc6\x01\x6e\x01\x00\x00\xc6\x01\x00\x00\xb5\x01\x00\x00\x00\x00\xf5\x01\xf5\x01\xfb\x01\xfb\x01\xfb\x01\x00\x00\x02\x00\x02\x00\x00\x00\x00\x00\xc6\x01\xc0\x01\x00\x00\x00\x00\xb4\x01\x00\x00\x00\x00\x4a\x01\x00\x00\xc9\x01\xc9\x01\x35\x00\xa2\x00\xa2\x00\x1c\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc6\x01\x9e\x01\xa1\x01\x00\x00\x00\x00\xc8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc6\x01\x00\x00\x00\x00\x00\x00\xc6\x01\x00\x00\xcd\x01\xf1\x02\x00\x00\xc6\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa5\x01\x00\x00\x00\x00\x9b\x01\xc6\x01\xd2\x01\x00\x00\x85\x01\x00\x00\x85\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x02\xd8\xff\x87\x01\x00\x00\x00\x00\xd5\x01\xb2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x01\xc6\x01\x00\x00\x00\x00\x00\x00\xc6\x01\xa4\x01\x67\x01\x97\x02\xa4\x01\xc6\x01\xef\x01\xbb\x02\xbb\x01\x00\x00\xa6\x01\x1e\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\x01\xf7\xff\x00\x00\x00\x00\x00\x00"# - -happyGotoOffsets :: HappyAddr -happyGotoOffsets = HappyA# "\x32\x03\x6c\x03\x05\x00\xad\x00\x2c\x01\xdc\x01\x07\x01\xe2\x00\xd3\x09\x1a\x0b\x54\x04\xed\x01\xf0\x01\xd7\x04\xf3\x01\xee\x03\xee\x01\x84\x09\x97\x08\x48\x08\xbd\x06\x6b\x01\xec\x01\xf1\x01\x57\x05\x79\x05\x76\x04\xea\x01\xf3\x00\xfd\x01\xa1\x00\x92\x05\x8f\x04\xd4\x0a\x31\x0a\xad\x01\xd6\x02\x80\x02\x1a\x02\xeb\x01\xb4\x0c\xa3\x0c\x5f\x0c\x81\x0c\xdd\x01\x2b\x0c\xe5\x0b\x41\x0a\xc2\x0b\x8f\x03\x0c\x0b\x0f\x00\xe1\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x06\x76\x02\x42\x03\x03\x04\x00\x00\x00\x00\x11\x00\x70\x0c\x00\x00\x00\x00\x00\x00\x7c\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x00\x00\x00\x30\x06\x6a\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x03\x00\x00\x04\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd0\x0b\x27\x02\x00\x00\x00\x00\x00\x00\x28\x02\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x08\x29\x02\x00\x00\x00\x00\x00\x00\x2b\x02\x00\x00\x00\x00\x12\x02\x00\x00\x00\x00\xa0\x00\x00\x00\x2e\x02\x1b\x00\x23\x00\x00\x00\x2f\x02\x00\x00\x00\x00\x00\x00\xe0\x03\x1e\x0a\x00\x00\x31\x02\x00\x00\x7f\x06\x33\x02\xc9\x04\xb9\x06\xce\x06\x00\x00\x08\x07\x34\x02\x1d\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x04\x00\x00\x37\x01\xfa\x00\x2f\x0a\x00\x00\x26\x02\x00\x00\x00\x00\x00\x00\x17\x02\x24\x02\x00\x00\x2c\x02\x00\x00\x00\x00\x04\x01\x00\x00\x00\x00\x57\x07\x6c\x07\xa6\x07\xbb\x07\xf5\x07\x0a\x08\x44\x08\x59\x08\xcc\x05\x93\x08\xa8\x08\xe2\x08\xf7\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x07\x8a\x0a\x00\x00\x00\x00\x35\x09\x00\x00\x5b\x07\x00\x00\x67\x02\x00\x00\x00\x00\x1e\x02\xeb\x04\x20\x02\x00\x00\x79\x0a\x40\x02\x48\x02\x04\x05\x00\x00\x00\x00\x00\x00\x3e\x05\x8c\x0a\x1c\x0b\xf0\x03\xd9\x04\x4e\x05\x25\x0d\x2b\x0d\x14\x0d\x1a\x0d\x09\x0d\xe7\x0c\xf8\x0c\x92\x0c\xd2\x0b\x3d\x04\x08\x0c\x2f\x0b\x62\x00\x00\x00\xc4\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x0c\x3d\x0c\xc5\x0c\xd6\x0c\xdc\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x31\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x77\x0b\x00\x00\x00\x00\x00\x00\x46\x09\x00\x00\x00\x00\xaa\x07\x00\x00\x80\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\x09\x00\x00\x00\x00\x30\x02\x00\x00\x41\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8a\x0b\x00\x00\x00\x00\x00\x00\xcf\x09\x42\x02\x1f\x06\xd2\x0a\x43\x02\xe4\x09\x00\x00\x6e\x06\x00\x00\x00\x00\x00\x00\x38\x02\x00\x00\x00\x00\x00\x00\x00\x00\x45\x02\x47\x02\x00\x00\x00\x00\x00\x00"# - -happyAdjustOffset :: Happy_GHC_Exts.Int# -> Happy_GHC_Exts.Int# -happyAdjustOffset off = off - -happyDefActions :: HappyAddr -happyDefActions = HappyA# "\xc4\xff\xc4\xff\x00\x00\x00\x00\x00\x00\xae\xff\x00\x00\xae\xff\xae\xff\xae\xff\x00\x00\x89\xff\x85\xff\xae\xff\x00\x00\xae\xff\x7a\xff\xae\xff\xae\xff\xae\xff\xae\xff\xae\xff\x00\x00\x00\x00\x00\x00\x00\x00\x67\xff\x63\xff\x00\x00\x00\x00\x00\x00\x49\xff\x49\xff\x00\x00\x44\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\xff\x00\x00\x0f\xff\x00\x00\x00\x00\xca\xff\x61\xff\x58\xff\x60\xff\x5d\xff\x5c\xff\x3d\xff\x39\xff\x36\xff\x33\xff\x31\xff\x2e\xff\x2a\xff\x27\xff\x1d\xff\x29\xff\x1b\xff\x10\xff\x0c\xff\x1a\xff\x19\xff\x00\x00\x00\x00\x00\x00\x00\x00\x16\xff\x62\xff\x5e\xff\x0f\xff\x00\x00\x59\xff\x00\x00\x5f\xff\x00\x00\xc9\xff\xc8\xff\xc7\xff\xc6\xff\x0e\xff\x00\x00\x10\xff\x00\x00\x00\x00\x15\xff\x18\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\xff\x22\xff\x21\xff\x24\xff\x20\xff\x1f\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\xff\x43\xff\x00\x00\x46\xff\x00\x00\x48\xff\x00\x00\x4a\xff\x00\x00\x4c\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x66\xff\x00\x00\x00\x00\x00\x00\x00\x00\x6a\xff\x00\x00\xc4\xff\x00\x00\x00\x00\x6c\xff\xc1\xff\xb7\xff\xb0\xff\xb1\xff\xa8\xff\xb6\xff\x00\x00\x6e\xff\x00\x00\xae\xff\xb3\xff\xbd\xff\xbc\xff\xbe\xff\xbf\xff\xb2\xff\xbb\xff\xc0\xff\xae\xff\x00\x00\x71\xff\x00\x00\x00\x00\x00\x00\x76\xff\x00\x00\x00\x00\x00\x00\xae\xff\x00\x00\x7c\xff\x00\x00\x00\x00\x00\x00\x00\x00\x7e\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\xff\x0f\xff\x58\xff\x00\x00\x00\x00\x9d\xff\x6a\xff\xae\xff\xae\xff\x8a\xff\x00\x00\x8b\xff\x00\x00\x00\x00\x67\xff\xa0\xff\xa4\xff\xa2\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaa\xff\xad\xff\x00\x00\xb0\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\xff\x00\x00\xc5\xff\xc4\xff\xb8\xff\x00\x00\xae\xff\xae\xff\x00\x00\x89\xff\x00\x00\xa3\xff\xa1\xff\x63\xff\x7a\xff\x00\x00\x85\xff\x00\x00\x00\x00\x15\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9e\xff\x88\xff\x87\xff\x86\xff\x00\x00\x7f\xff\x00\x00\x72\xff\xae\xff\x83\xff\x00\x00\xae\xff\x78\xff\x72\xff\x74\xff\xae\xff\x6d\xff\x00\x00\x00\x00\x67\xff\x00\x00\x51\xff\x44\xff\x00\x00\x00\x00\x49\xff\x4d\xff\x00\x00\x4b\xff\x49\xff\x44\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\xff\x00\x00\x00\x00\x0f\xff\x3e\xff\x44\xff\x28\xff\x00\x00\x40\xff\x3f\xff\x00\x00\x00\x00\x00\x00\x2b\xff\x00\x00\x41\xff\x2c\xff\x2d\xff\x1e\xff\x1c\xff\x00\x00\x00\x00\x0d\xff\x13\xff\x00\x00\x14\xff\x17\xff\x26\xff\x25\xff\x30\xff\x2f\xff\x32\xff\x34\xff\x35\xff\x37\xff\x38\xff\x3b\xff\x3c\xff\x3a\xff\x45\xff\x42\xff\x47\xff\x00\x00\x00\x00\x4a\xff\x54\xff\x55\xff\x00\x00\x64\xff\x65\xff\x68\xff\x6b\xff\xb4\xff\x00\x00\x70\xff\x75\xff\x79\xff\x00\x00\x7b\xff\x00\x00\x72\xff\x84\xff\x00\x00\x93\xff\x9c\xff\x91\xff\x95\xff\x69\xff\x96\xff\x9a\xff\x97\xff\x98\xff\x9b\xff\x94\xff\x99\xff\x92\xff\x50\xff\xba\xff\x00\x00\x5b\xff\xb9\xff\x00\x00\x00\x00\x00\x00\x90\xff\x00\x00\xa7\xff\x00\x00\xa9\xff\xac\xff\xaf\xff\xc2\xff\x8f\xff\x8e\xff\x72\xff\x00\x00\x00\x00\x5a\xff\x9f\xff\x00\x00\x00\x00\x82\xff\x73\xff\x53\xff\x57\xff\x56\xff\x4f\xff\x00\x00\x52\xff\x11\xff\x12\xff\x00\x00\x00\x00\xae\xff\xae\xff\x00\x00\x00\x00\x00\x00\xae\xff\x00\x00\x8d\xff\x00\x00\x00\x00\x80\xff\x4e\xff\x81\xff\xa6\xff\x00\x00\x00\x00\xa5\xff\x8c\xff"# - -happyCheck :: HappyAddr -happyCheck = HappyA# "\xff\xff\x03\x00\x01\x00\x07\x00\x24\x00\x03\x00\x01\x00\x1a\x00\x05\x00\x03\x00\x09\x00\x04\x00\x07\x00\x06\x00\x0b\x00\x08\x00\x01\x00\x0a\x00\x01\x00\x0c\x00\x13\x00\x0e\x00\x0f\x00\x3f\x00\x11\x00\x16\x00\x14\x00\x15\x00\x01\x00\x09\x00\x17\x00\x18\x00\x19\x00\x05\x00\x0b\x00\x1c\x00\x01\x00\x1e\x00\x25\x00\x0b\x00\x57\x00\x51\x00\x23\x00\x24\x00\x0d\x00\x26\x00\x27\x00\x10\x00\x1b\x00\x37\x00\x16\x00\x32\x00\x24\x00\x3e\x00\x26\x00\x22\x00\x3e\x00\x42\x00\x33\x00\x24\x00\x35\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x61\x00\x09\x00\x2f\x00\x5d\x00\x31\x00\x3f\x00\x38\x00\x5c\x00\x38\x00\x09\x00\x44\x00\x0a\x00\x0b\x00\x47\x00\x48\x00\x1b\x00\x0f\x00\x0f\x00\x38\x00\x12\x00\x37\x00\x58\x00\x22\x00\x51\x00\x09\x00\x58\x00\x38\x00\x3e\x00\x61\x00\x58\x00\x61\x00\x59\x00\x5a\x00\x61\x00\x01\x00\x61\x00\x41\x00\x24\x00\x07\x00\x61\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x09\x00\x2e\x00\x2f\x00\x5d\x00\x31\x00\x32\x00\x44\x00\x33\x00\x61\x00\x47\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x3c\x00\x2e\x00\x2f\x00\x61\x00\x31\x00\x32\x00\x09\x00\x38\x00\x20\x00\x45\x00\x44\x00\x0d\x00\x4d\x00\x47\x00\x10\x00\x3c\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x61\x00\x2e\x00\x2f\x00\x45\x00\x31\x00\x32\x00\x09\x00\x44\x00\x38\x00\x5a\x00\x47\x00\x39\x00\x5d\x00\x5d\x00\x09\x00\x01\x00\x61\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x07\x00\x09\x00\x2f\x00\x46\x00\x31\x00\x32\x00\x5d\x00\x01\x00\x0d\x00\x4c\x00\x61\x00\x10\x00\x09\x00\x07\x00\x08\x00\x5d\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x61\x00\x2e\x00\x2f\x00\x09\x00\x31\x00\x32\x00\x5d\x00\x22\x00\x23\x00\x1e\x00\x61\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x0f\x00\x2e\x00\x2f\x00\x12\x00\x31\x00\x32\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x5d\x00\x2e\x00\x2f\x00\x0f\x00\x31\x00\x32\x00\x0f\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x01\x00\x2e\x00\x2f\x00\x0f\x00\x31\x00\x32\x00\x07\x00\x08\x00\x09\x00\x5d\x00\x0b\x00\x0c\x00\x61\x00\x61\x00\x61\x00\x01\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x0f\x00\x09\x00\x09\x00\x01\x00\x5d\x00\x22\x00\x23\x00\x18\x00\x61\x00\x07\x00\x08\x00\x09\x00\x13\x00\x0b\x00\x0c\x00\x5d\x00\x01\x00\x09\x00\x61\x00\x61\x00\x3f\x00\x0d\x00\x07\x00\x08\x00\x10\x00\x40\x00\x0b\x00\x5d\x00\x21\x00\x61\x00\x25\x00\x61\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x3f\x00\x2e\x00\x2f\x00\x61\x00\x31\x00\x32\x00\x32\x00\x1e\x00\x34\x00\x22\x00\x23\x00\x61\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x01\x00\x12\x00\x2f\x00\x57\x00\x31\x00\x32\x00\x07\x00\x08\x00\x09\x00\x36\x00\x0b\x00\x01\x00\x61\x00\x3a\x00\x3b\x00\x5d\x00\x3d\x00\x07\x00\x08\x00\x0f\x00\x61\x00\x0b\x00\x43\x00\x44\x00\x45\x00\x61\x00\x47\x00\x5d\x00\x49\x00\x4a\x00\x4b\x00\x02\x00\x5d\x00\x4e\x00\x4f\x00\x50\x00\x61\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x0f\x00\x5d\x00\x19\x00\x61\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x09\x00\x09\x00\x61\x00\x1a\x00\x0d\x00\x5d\x00\x1d\x00\x10\x00\x1f\x00\x20\x00\x21\x00\x01\x00\x57\x00\x61\x00\x5d\x00\x09\x00\x61\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x5d\x00\x0e\x00\x61\x00\x0f\x00\x0f\x00\x19\x00\x61\x00\x61\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x1a\x00\x2e\x00\x2f\x00\x3f\x00\x31\x00\x32\x00\x33\x00\x3f\x00\x41\x00\x36\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x1a\x00\x2e\x00\x2f\x00\x48\x00\x31\x00\x32\x00\x09\x00\x43\x00\x33\x00\x33\x00\x37\x00\x0a\x00\x09\x00\x49\x00\x4a\x00\x4b\x00\x0d\x00\x3e\x00\x0a\x00\x10\x00\x1e\x00\x0a\x00\x52\x00\x53\x00\x09\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x18\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x20\x00\x18\x00\x5a\x00\x57\x00\x5d\x00\x48\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x5d\x00\x2e\x00\x2f\x00\x12\x00\x31\x00\x32\x00\x0a\x00\x5d\x00\x18\x00\x36\x00\x21\x00\x09\x00\x07\x00\x33\x00\x0a\x00\x0d\x00\x33\x00\x28\x00\x10\x00\x0a\x00\x33\x00\x3e\x00\x43\x00\x09\x00\x57\x00\x01\x00\x57\x00\x0a\x00\x49\x00\x4a\x00\x4b\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x52\x00\x53\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x3e\x00\x51\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x32\x00\x0a\x00\x3f\x00\x57\x00\x36\x00\x10\x00\x09\x00\x57\x00\x5a\x00\x11\x00\x0d\x00\x15\x00\x09\x00\x10\x00\x13\x00\x1b\x00\x0d\x00\x43\x00\x20\x00\x10\x00\x21\x00\x1c\x00\x31\x00\x49\x00\x4a\x00\x4b\x00\x31\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x52\x00\x53\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x22\x00\x1c\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x32\x00\x01\x00\x01\x00\x01\x00\x36\x00\x01\x00\x32\x00\x1c\x00\x01\x00\x01\x00\x36\x00\x01\x00\x09\x00\x01\x00\x01\x00\x10\x00\x20\x00\x43\x00\x15\x00\x1c\x00\x21\x00\x1c\x00\x11\x00\x43\x00\x4a\x00\x4b\x00\x01\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x4b\x00\x52\x00\x53\x00\x01\x00\x31\x00\x13\x00\x1c\x00\x52\x00\x53\x00\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x32\x00\x1c\x00\x1c\x00\x1c\x00\x36\x00\x1c\x00\x1b\x00\xff\xff\x0a\x00\x0b\x00\xff\xff\xff\xff\x01\x00\x0f\x00\xff\xff\xff\xff\x12\x00\x43\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\xff\xff\x4b\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x52\x00\x53\x00\x24\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\xff\xff\x04\x00\x33\x00\x06\x00\xff\xff\x08\x00\x37\x00\xff\xff\xff\xff\x0c\x00\xff\xff\x0e\x00\x21\x00\x3e\x00\x11\x00\xff\xff\xff\xff\x42\x00\xff\xff\x28\x00\x17\x00\x09\x00\x21\x00\xff\xff\xff\xff\x1c\x00\xff\xff\x1e\x00\xff\xff\x28\x00\x29\x00\x2a\x00\x23\x00\x09\x00\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5d\x00\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\x35\x00\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x09\x00\x2e\x00\x2f\x00\xff\xff\x31\x00\x32\x00\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\xff\xff\x2e\x00\x2f\x00\x3c\x00\x31\x00\x32\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x45\x00\xff\xff\xff\xff\x3c\x00\xff\xff\x59\x00\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x45\x00\x2e\x00\x2f\x00\x09\x00\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\x5a\x00\xff\xff\xff\xff\x5d\x00\xff\xff\xff\xff\x21\x00\xff\xff\x3e\x00\x09\x00\xff\xff\xff\xff\x42\x00\x28\x00\x29\x00\x5d\x00\xff\xff\x20\x00\x12\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\xff\xff\x2e\x00\x2f\x00\xff\xff\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\x5d\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\xff\xff\x2e\x00\x2f\x00\xff\xff\x31\x00\x32\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\xff\xff\x2e\x00\x2f\x00\xff\xff\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\x0b\x00\xff\xff\x5d\x00\xff\xff\x0f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5d\x00\x1d\x00\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5d\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x21\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\x37\x00\x28\x00\x39\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x21\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\x37\x00\x28\x00\x39\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x06\x00\x07\x00\x08\x00\x09\x00\x21\x00\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x1d\x00\xff\xff\x36\x00\x37\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\x37\x00\xff\xff\x39\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\xff\xff\x0e\x00\x01\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\xff\xff\x0e\x00\xff\xff\xff\xff\xff\xff\x12\x00\x21\x00\x14\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x21\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\x37\x00\x28\x00\x39\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x06\x00\x07\x00\x08\x00\x09\x00\x21\x00\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x1d\x00\xff\xff\x36\x00\x37\x00\x21\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\x37\x00\xff\xff\x39\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\x07\x00\x08\x00\x09\x00\x21\x00\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x1d\x00\xff\xff\x36\x00\x37\x00\x21\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\x37\x00\xff\xff\x39\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\x37\x00\xff\xff\x39\x00\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\x37\x00\xff\xff\x39\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\xff\xff\x0e\x00\xff\xff\x1e\x00\x1f\x00\x12\x00\x21\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x21\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\x37\x00\x28\x00\x39\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\x37\x00\xff\xff\x39\x00\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\x37\x00\xff\xff\x39\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x21\x00\x32\x00\x33\x00\x34\x00\x35\x00\x1d\x00\x37\x00\x28\x00\x39\x00\x21\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\x37\x00\xff\xff\x39\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x1e\x00\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\x37\x00\xff\xff\x39\x00\x21\x00\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\x37\x00\xff\xff\x39\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\x1d\x00\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x21\x00\x32\x00\x33\x00\x34\x00\x35\x00\x21\x00\x37\x00\x28\x00\x39\x00\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\x37\x00\xff\xff\x39\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x01\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\xff\xff\x0e\x00\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x21\x00\x37\x00\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\x37\x00\xff\xff\x39\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x01\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\xff\xff\x0e\x00\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x21\x00\x37\x00\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\x37\x00\xff\xff\x39\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x01\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\xff\xff\x0e\x00\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x21\x00\x37\x00\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\x37\x00\xff\xff\x39\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x01\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\xff\xff\x0e\x00\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x21\x00\x37\x00\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\x37\x00\xff\xff\x39\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x01\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\xff\xff\x0e\x00\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x21\x00\x37\x00\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\x37\x00\xff\xff\x39\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x01\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\xff\xff\x0e\x00\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x21\x00\x37\x00\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\x37\x00\xff\xff\x39\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x01\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\xff\xff\x0e\x00\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x21\x00\x37\x00\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\x37\x00\xff\xff\x39\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x01\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\xff\xff\x0e\x00\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x21\x00\x37\x00\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\x37\x00\xff\xff\x39\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x01\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\xff\xff\x0e\x00\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x16\x00\x17\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x21\x00\x37\x00\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\x37\x00\xff\xff\x39\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x01\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\xff\xff\x0e\x00\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x16\x00\x17\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x21\x00\x37\x00\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\x37\x00\xff\xff\x39\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x01\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\xff\xff\x0e\x00\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x16\x00\x17\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x21\x00\x37\x00\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\x37\x00\xff\xff\x39\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x01\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\xff\xff\x0e\x00\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x16\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x21\x00\x37\x00\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\x37\x00\xff\xff\x39\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x01\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x21\x00\x37\x00\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\x37\x00\xff\xff\x39\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\xff\xff\x0e\x00\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\xff\xff\x21\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x21\x00\xff\xff\x36\x00\x37\x00\xff\xff\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x21\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\x37\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\xff\xff\x0e\x00\xff\xff\x21\x00\xff\xff\x12\x00\xff\xff\x14\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x21\x00\xff\xff\xff\xff\x37\x00\xff\xff\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\xff\xff\x0e\x00\xff\xff\xff\xff\xff\xff\x12\x00\x21\x00\x14\x00\xff\xff\xff\xff\xff\xff\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x21\x00\x32\x00\x33\x00\xff\xff\xff\xff\x26\x00\x37\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\xff\xff\x0e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x21\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x21\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\xff\xff\x0e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x21\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x21\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\xff\xff\x0e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x21\x00\x32\x00\x33\x00\xff\xff\x35\x00\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x21\x00\x35\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x33\x00\x21\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x21\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x21\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x32\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x21\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xff\xff\x21\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\x30\x00\xff\xff\x21\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\x30\x00\xff\xff\x21\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\xff\xff\x21\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x21\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x21\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"# - -happyTable :: HappyAddr -happyTable = HappyA# "\x00\x00\x2b\x01\x18\x01\x2a\x01\xe4\x00\x2b\x01\x94\x00\xb1\x00\x23\x01\x2b\x01\x19\x01\x10\xff\xdd\x00\x10\xff\x24\x01\x10\xff\x5c\x00\x10\xff\x5c\x00\x10\xff\x1a\x01\x10\xff\x2e\x01\xa2\x01\x10\xff\x25\x01\x3b\x01\x3c\x01\x5c\x00\x9e\x00\x10\xff\x10\xff\x10\xff\x23\x01\xe5\x00\x10\xff\x5c\x00\x10\xff\x1b\x01\x24\x01\x91\x00\xa3\x01\x10\xff\x30\x01\x26\x01\x31\x01\x10\xff\x27\x01\x28\x01\xb8\x00\x25\x01\x1c\x01\x30\x01\x93\x00\x31\x01\x29\x01\xb9\x00\x94\x00\x10\xff\xe4\x00\x10\xff\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xff\xff\xbc\x00\xa5\x00\x59\x00\xa6\x00\x10\xff\x5d\x00\x37\x00\x35\x01\x9e\x00\x10\xff\x58\xff\x58\xff\x10\xff\x10\xff\x28\x01\x58\xff\x2f\x01\x04\x01\xc1\xff\xb8\x00\x2c\x01\x29\x01\x10\xff\x9e\x00\x2c\x01\x03\x01\xb9\x00\xff\xff\x2c\x01\xff\xff\x10\xff\x10\xff\xff\xff\x5c\x00\xff\xff\x89\x00\x58\xff\x2a\x01\x10\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\x9e\x00\xa4\x00\xa5\x00\x59\x00\xa6\x00\xa7\x00\x84\x00\x58\xff\xff\xff\x85\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xb5\x00\xa4\x00\xa5\x00\xff\xff\xa6\x00\xa7\x00\x9e\x00\x3a\x01\x77\xff\xb6\x00\x84\x00\x26\x01\x39\x01\x85\x00\x27\x01\xb5\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xff\xff\xa4\x00\xa5\x00\xb6\x00\xa6\x00\xa7\x00\x9e\x00\x84\x00\x44\x01\x7d\xff\x85\x00\xbe\x00\x59\x00\xc1\xff\x34\x01\x94\x00\x7d\xff\xa0\x00\xa1\x00\xa2\x00\xa3\x00\x06\x01\x9e\x00\xa5\x00\xbf\x00\xa6\x00\xa7\x00\x59\x00\x94\x00\x26\x01\xc0\x00\x7d\xff\x27\x01\x9e\x00\x95\x00\xdc\x00\x59\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xff\xff\xa4\x00\xa5\x00\x9e\x00\xa6\x00\xa7\x00\x59\x00\x81\x00\x82\x00\x22\x01\x77\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xe6\x00\xa4\x00\xa5\x00\xad\xff\xa6\x00\xa7\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\x59\x00\xa4\x00\xa5\x00\x32\x01\xa6\x00\xa7\x00\x2f\x01\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\x94\x00\xa4\x00\xa5\x00\x2e\x01\xa6\x00\xa7\x00\x95\x00\x96\x00\xd6\x00\x59\x00\x99\x00\xd7\x00\xff\xff\xab\xff\xff\xff\x18\x01\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x21\x01\x9e\x00\x19\x01\x94\x00\x59\x00\x81\x00\x1e\x01\x20\x01\x77\xff\x95\x00\x96\x00\xd6\x00\x1a\x01\x99\x00\x87\x01\x59\x00\x94\x00\xc6\x00\xff\xff\x72\xff\x17\x01\x4e\x00\x95\x00\xd8\x00\x4f\x00\x16\x01\xd9\x00\x59\x00\x86\x00\xff\xff\x1b\x01\x6f\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\x15\x01\xa4\x00\xa5\x00\xff\xff\xa6\x00\xa7\x00\x1c\x01\xfe\x00\x3d\x01\x81\x00\x7c\x01\xff\xff\xa0\x00\xa1\x00\xa2\x00\xa3\x00\x94\x00\x12\x01\xa5\x00\x91\x00\xa6\x00\xc7\x00\x95\x00\x96\x00\xdb\x00\x51\x00\x99\x00\x94\x00\xff\xff\xc8\x00\xc9\x00\x59\x00\xca\x00\x95\x00\xd8\x00\x10\x01\xff\xff\x88\x01\x52\x00\xcb\x00\xcc\x00\xff\xff\xcd\x00\x59\x00\x53\x00\x54\x00\x55\x00\x69\x00\x59\x00\xce\x00\xcf\x00\xd0\x00\xab\xff\x56\x00\x57\x00\xd1\x00\xd2\x00\xd3\x00\x0e\x01\x59\x00\x0b\x01\xff\xff\x58\x00\x37\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\xc6\x00\x0a\x01\xff\xff\x6a\x00\x4e\x00\x59\x00\x6b\x00\x4f\x00\x6c\x00\x6d\x00\x6e\x00\x94\x00\x91\x00\xff\xff\x59\x00\x9e\x00\xff\xff\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x59\x00\x9b\x00\xff\xff\xe7\x00\xe6\x00\xe3\x00\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\x9c\x00\xa4\x00\xa5\x00\x86\x01\xa6\x00\xc7\x00\x16\xff\x84\x01\x89\x00\x51\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xb1\x00\xa4\x00\xa5\x00\x81\x01\xa6\x00\xa7\x00\xbc\x00\x52\x00\x7f\x01\x7e\x01\x6f\xff\x7c\x01\xc6\x00\x53\x00\x54\x00\x55\x00\x4e\x00\x6f\xff\x7b\x01\x4f\x00\x6d\x01\x6c\x01\x56\x00\x57\x00\x6b\x01\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x68\x01\x58\x00\x37\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x67\x01\x64\x01\x62\x01\x91\x00\x59\x00\x59\x01\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\x59\x00\xa4\x00\xa5\x00\x43\x01\xa6\x00\xc7\x00\x9b\x01\x59\x00\x9a\x01\x51\x00\x3c\x00\x4d\x00\x2a\x01\x98\x01\x96\x01\x4e\x00\x97\x01\x77\x00\x4f\x00\x93\x01\x90\x01\x8f\x01\x52\x00\x8d\x01\x91\x00\x94\x00\xa1\x01\xa0\x01\x53\x00\x54\x00\x55\x00\x95\x00\x96\x00\x97\x00\xda\x00\x99\x00\x9a\x00\x56\x00\x57\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x9f\x01\x9e\x01\x58\x00\x37\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x50\x00\xa5\x01\xae\x01\x91\x00\x51\x00\xbc\x00\x4d\x00\x91\x00\xad\x01\xba\x00\x4e\x00\xaf\x00\x4d\x00\x4f\x00\xb6\x00\x91\x00\x4e\x00\x52\x00\x87\x00\x4f\x00\x3c\x00\x8f\x00\x67\x00\x53\x00\x54\x00\x55\x00\x2c\x01\x3d\x00\x3e\x00\x3f\x00\x40\x00\x73\x00\x56\x00\x57\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x85\x00\x12\x01\x58\x00\x37\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x50\x00\x10\x01\x0e\x01\x0b\x01\x51\x00\x08\x01\x50\x00\x07\x01\x05\x01\x02\x01\x51\x00\xef\x00\x4d\x00\xed\x00\xe8\x00\x84\x01\x82\x01\x52\x00\x81\x01\x60\x01\x3c\x00\x5e\x01\x7f\x01\x52\x00\x54\x00\x55\x00\x5c\x01\x3d\x00\x3e\x00\x3f\x00\x74\x00\x55\x00\x56\x00\x57\x00\x5b\x01\x2c\x01\xab\x01\x8b\x01\x56\x00\x57\x00\x00\x00\x58\x00\x37\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x58\x00\x37\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x50\x00\x8a\x01\xa9\x01\xa6\x01\x51\x00\xb0\x01\xaf\x01\x00\x00\xb0\xff\xe5\x00\x00\x00\x00\x00\x94\x00\xb0\xff\x00\x00\x00\x00\xb0\xff\x52\x00\x95\x00\x96\x00\x97\x00\x62\x01\x99\x00\x9a\x00\x00\x00\x55\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x56\x00\x57\x00\xe4\x00\x00\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x37\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x00\x00\xf6\x00\xb0\xff\xf7\x00\x00\x00\xf8\x00\xb0\xff\x00\x00\x00\x00\xf9\x00\x00\x00\xfa\x00\x3c\x00\xb0\xff\xfb\x00\x00\x00\x00\x00\xb0\xff\x00\x00\x37\x01\xfc\x00\x9e\x00\x3c\x00\x00\x00\x00\x00\xfd\x00\x00\x00\xfe\x00\x00\x00\x3d\x00\x3e\x00\x75\x00\xff\x00\x9e\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\xff\x00\x00\x00\x00\x00\x00\xb0\xff\x00\x00\x01\x01\x00\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\x9e\x00\xa4\x00\xa5\x00\x00\x00\xa6\x00\xa7\x00\x00\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\x00\x00\xa4\x00\xa5\x00\xb5\x00\xa6\x00\xa7\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\xb6\x00\x00\x00\x00\x00\xb5\x00\x00\x00\x02\x01\x00\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xb6\x00\xa4\x00\xa5\x00\x9e\x00\xa6\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x7d\xff\x00\x00\x00\x00\x59\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x6f\xff\x9e\x00\x00\x00\x00\x00\x6f\xff\x3d\x00\x76\x00\x59\x00\x00\x00\x77\xff\xae\xff\x00\x00\x9e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\x00\x00\xa4\x00\xa5\x00\x00\x00\xa6\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x59\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\x00\x00\xa4\x00\xa5\x00\x00\x00\xa6\x00\xa7\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\x00\x00\xa4\x00\xa5\x00\x00\x00\xa6\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x37\x00\xc0\x00\x39\x00\x3a\x00\x3b\x00\xe0\x00\xe1\x00\x95\x00\x96\x00\xc1\x00\x00\x00\x99\x00\x00\x00\x59\x00\x00\x00\xdf\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x59\x00\xc3\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x59\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x3c\x00\x46\x00\x47\x00\x48\x00\x49\x00\x00\x00\x4a\x00\x36\x01\xc4\x00\x37\x00\xc0\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\xde\x00\x95\x00\x96\x00\xc1\x00\x00\x00\x99\x00\x00\x00\x00\x00\x00\x00\xdf\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x3c\x00\x46\x00\x47\x00\x48\x00\x49\x00\x00\x00\x4a\x00\x32\x01\xc4\x00\x37\x00\xc0\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x13\x01\x95\x00\x96\x00\xc1\x00\x3c\x00\x99\x00\x00\x00\x00\x00\x00\x00\xdf\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x5e\x00\xc3\x00\x00\x00\x60\x00\x61\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x48\x00\x49\x00\x00\x00\x4a\x00\x00\x00\xc4\x00\x37\x00\xc0\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x00\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x00\x00\xf3\x00\x94\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x00\x00\xb1\x00\x00\x00\x00\x00\x00\x00\xb2\x00\x3c\x00\xb3\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x3c\x00\x46\x00\x47\x00\x48\x00\x49\x00\x00\x00\x4a\x00\x54\x01\xf4\x00\x37\x00\xc0\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x89\x01\x95\x00\x96\x00\xc1\x00\x3c\x00\x99\x00\x00\x00\x00\x00\x00\x00\xdf\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x5e\x00\xc3\x00\x00\x00\xf1\x00\xf2\x00\x3c\x00\x00\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x48\x00\x49\x00\x00\x00\x4a\x00\x00\x00\xc4\x00\x37\x00\xc0\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x00\x00\x95\x00\x96\x00\xc1\x00\x3c\x00\x99\x00\x00\x00\x00\x00\x00\x00\xc2\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x5e\x00\xc3\x00\x00\x00\x47\x01\x61\x00\x3c\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x48\x00\x49\x00\x00\x00\x4a\x00\x00\x00\xc4\x00\x00\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x89\x00\x8a\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x48\x00\x49\x00\x00\x00\x4a\x00\x00\x00\x8b\x00\x3c\x00\x00\x00\x00\x00\x7d\x00\x7e\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x48\x00\x49\x00\x00\x00\x4a\x00\x00\x00\x7f\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x00\x00\xb1\x00\x00\x00\x89\x00\xec\x00\xb9\x00\x3c\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x3c\x00\x46\x00\x47\x00\x48\x00\x49\x00\x00\x00\x4a\x00\x53\x01\x8b\x00\x00\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x89\x00\x5f\x01\x00\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x48\x00\x49\x00\x00\x00\x4a\x00\x00\x00\x8b\x00\x3c\x00\x00\x00\x00\x00\x7d\x00\x59\x01\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x48\x00\x49\x00\x00\x00\x4a\x00\x00\x00\x5a\x01\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x7d\x00\x57\x01\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x3c\x00\x46\x00\x47\x00\x48\x00\x49\x00\x8d\x00\x4a\x00\x52\x01\x7f\x00\x3c\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x48\x00\x49\x00\x00\x00\x4a\x00\x00\x00\x8e\x00\x00\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x8c\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x48\x00\x49\x00\x00\x00\x4a\x00\x00\x00\x8b\x00\x3c\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x48\x00\x49\x00\x00\x00\x4a\x00\x00\x00\x7f\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x71\x01\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x3c\x00\x46\x00\x47\x00\x48\x00\x49\x00\x3c\x00\x4a\x00\x3d\x01\x8e\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x48\x00\x49\x00\x00\x00\x4a\x00\x00\x00\x4b\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x94\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x00\x00\x9b\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\x01\x00\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x48\x00\x49\x00\x3c\x00\x4a\x00\x00\x00\xf4\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x48\x00\x49\x00\x00\x00\x4a\x00\x00\x00\x1d\x01\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x94\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x00\x00\x9b\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\x00\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x48\x00\x49\x00\x3c\x00\x4a\x00\x00\x00\x1c\x01\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x48\x00\x49\x00\x00\x00\x4a\x00\x00\x00\xee\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x94\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x00\x00\xa7\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x00\x00\xa8\x00\xa9\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x48\x00\x49\x00\x3c\x00\x4a\x00\x00\x00\xeb\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x48\x00\x49\x00\x00\x00\x4a\x00\x00\x00\xea\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x94\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x00\x00\xa7\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x00\x00\xa8\x00\x69\x01\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x48\x00\x49\x00\x3c\x00\x4a\x00\x00\x00\xe9\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x48\x00\x49\x00\x00\x00\x4a\x00\x00\x00\xe7\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x94\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x00\x00\xa7\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x00\x00\xa8\x00\x64\x01\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x48\x00\x49\x00\x3c\x00\x4a\x00\x00\x00\x79\x01\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x48\x00\x49\x00\x00\x00\x4a\x00\x00\x00\x78\x01\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x94\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x00\x00\xa7\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x00\x00\xa8\x00\x91\x01\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x48\x00\x49\x00\x3c\x00\x4a\x00\x00\x00\x77\x01\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x48\x00\x49\x00\x00\x00\x4a\x00\x00\x00\x76\x01\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x94\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x00\x00\xa7\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x00\x00\xa8\x00\xa3\x01\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x48\x00\x49\x00\x3c\x00\x4a\x00\x00\x00\x75\x01\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x48\x00\x49\x00\x00\x00\x4a\x00\x00\x00\x74\x01\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x94\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x00\x00\xa7\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x00\x00\xaa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x48\x00\x49\x00\x3c\x00\x4a\x00\x00\x00\x73\x01\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x48\x00\x49\x00\x00\x00\x4a\x00\x00\x00\x72\x01\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x94\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x00\x00\xab\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xac\x00\xad\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x48\x00\x49\x00\x3c\x00\x4a\x00\x00\x00\x70\x01\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x48\x00\x49\x00\x00\x00\x4a\x00\x00\x00\x6f\x01\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x94\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x00\x00\xab\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xac\x00\x0c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x48\x00\x49\x00\x3c\x00\x4a\x00\x00\x00\x6e\x01\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x48\x00\x49\x00\x00\x00\x4a\x00\x00\x00\x6d\x01\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x94\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x00\x00\xab\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xac\x00\x65\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x48\x00\x49\x00\x3c\x00\x4a\x00\x00\x00\x98\x01\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x48\x00\x49\x00\x00\x00\x4a\x00\x00\x00\x93\x01\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x94\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x00\x00\xab\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xae\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x48\x00\x49\x00\x3c\x00\x4a\x00\x00\x00\x90\x01\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x48\x00\x49\x00\x00\x00\x4a\x00\x00\x00\x8d\x01\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x94\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\xd4\x00\xd5\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x48\x00\x49\x00\x3c\x00\x4a\x00\x00\x00\xaa\x01\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x48\x00\x49\x00\x00\x00\x4a\x00\x00\x00\xa5\x01\x37\x00\xc0\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x00\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x00\x00\xf0\x00\x00\x00\x00\x00\x00\x00\x94\x00\x37\x00\x78\x00\x39\x00\x3a\x00\x3b\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x86\x01\xd5\x00\x00\x00\x3c\x00\x00\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x5e\x00\x3c\x00\x00\x00\xf1\x00\xf2\x00\x00\x00\x79\x00\x7a\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x3c\x00\x46\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x7b\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x47\x00\x64\x00\x49\x00\x00\x00\x4a\x00\x37\x00\x78\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\x00\x37\x00\x78\x00\x39\x00\x3a\x00\x3b\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x00\x00\xb1\x00\x00\x00\x3c\x00\x00\x00\xb2\x00\x00\x00\x68\x01\x79\x00\x5d\x01\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x5e\x00\x3c\x00\x00\x00\x00\x00\x7b\x00\x00\x00\x79\x00\x56\x01\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x7b\x00\x37\x00\x78\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\x00\x37\x00\x78\x00\x39\x00\x3a\x00\x3b\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x00\x00\xb1\x00\x00\x00\x00\x00\x00\x00\xb2\x00\x3c\x00\xa7\x01\x00\x00\x00\x00\x00\x00\x79\x00\x43\x01\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x3c\x00\x46\x00\x5e\x00\x00\x00\x00\x00\x7c\x00\x7b\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x7b\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x00\x00\xd3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x3c\x00\x46\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x5e\x00\x3c\x00\x00\x00\x00\x00\x55\x01\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x45\x01\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x00\x00\xf3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x3c\x00\x46\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x9b\x01\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x5e\x00\x3c\x00\x00\x00\x00\x00\x94\x01\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x9c\x01\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x00\x00\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x3c\x00\x46\x00\x62\x00\x00\x00\x63\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x62\x00\x3c\x00\x48\x01\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x65\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x46\x00\x46\x01\x3c\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x3c\x00\x46\x00\x41\x01\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x66\x00\x3c\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x40\x01\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x70\x00\x45\x00\x00\x00\x3c\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x34\x01\x45\x00\x00\x00\x3c\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x6e\x00\x00\x00\x6f\x00\x00\x00\x3c\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x49\x01\x00\x00\x4a\x01\x00\x00\x3c\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x71\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x3f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x3e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x4c\x01\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x4b\x01\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x4d\x01\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x3d\x00\x3e\x00\x4f\x01\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\x4e\x01\x00\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x3d\x00\x51\x01\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x50\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"# - -happyReduceArr = Happy_Data_Array.array (53, 243) [ - (53 , happyReduce_53), - (54 , happyReduce_54), - (55 , happyReduce_55), - (56 , happyReduce_56), - (57 , happyReduce_57), - (58 , happyReduce_58), - (59 , happyReduce_59), - (60 , happyReduce_60), - (61 , happyReduce_61), - (62 , happyReduce_62), - (63 , happyReduce_63), - (64 , happyReduce_64), - (65 , happyReduce_65), - (66 , happyReduce_66), - (67 , happyReduce_67), - (68 , happyReduce_68), - (69 , happyReduce_69), - (70 , happyReduce_70), - (71 , happyReduce_71), - (72 , happyReduce_72), - (73 , happyReduce_73), - (74 , happyReduce_74), - (75 , happyReduce_75), - (76 , happyReduce_76), - (77 , happyReduce_77), - (78 , happyReduce_78), - (79 , happyReduce_79), - (80 , happyReduce_80), - (81 , happyReduce_81), - (82 , happyReduce_82), - (83 , happyReduce_83), - (84 , happyReduce_84), - (85 , happyReduce_85), - (86 , happyReduce_86), - (87 , happyReduce_87), - (88 , happyReduce_88), - (89 , happyReduce_89), - (90 , happyReduce_90), - (91 , happyReduce_91), - (92 , happyReduce_92), - (93 , happyReduce_93), - (94 , happyReduce_94), - (95 , happyReduce_95), - (96 , happyReduce_96), - (97 , happyReduce_97), - (98 , happyReduce_98), - (99 , happyReduce_99), - (100 , happyReduce_100), - (101 , happyReduce_101), - (102 , happyReduce_102), - (103 , happyReduce_103), - (104 , happyReduce_104), - (105 , happyReduce_105), - (106 , happyReduce_106), - (107 , happyReduce_107), - (108 , happyReduce_108), - (109 , happyReduce_109), - (110 , happyReduce_110), - (111 , happyReduce_111), - (112 , happyReduce_112), - (113 , happyReduce_113), - (114 , happyReduce_114), - (115 , happyReduce_115), - (116 , happyReduce_116), - (117 , happyReduce_117), - (118 , happyReduce_118), - (119 , happyReduce_119), - (120 , happyReduce_120), - (121 , happyReduce_121), - (122 , happyReduce_122), - (123 , happyReduce_123), - (124 , happyReduce_124), - (125 , happyReduce_125), - (126 , happyReduce_126), - (127 , happyReduce_127), - (128 , happyReduce_128), - (129 , happyReduce_129), - (130 , happyReduce_130), - (131 , happyReduce_131), - (132 , happyReduce_132), - (133 , happyReduce_133), - (134 , happyReduce_134), - (135 , happyReduce_135), - (136 , happyReduce_136), - (137 , happyReduce_137), - (138 , happyReduce_138), - (139 , happyReduce_139), - (140 , happyReduce_140), - (141 , happyReduce_141), - (142 , happyReduce_142), - (143 , happyReduce_143), - (144 , happyReduce_144), - (145 , happyReduce_145), - (146 , happyReduce_146), - (147 , happyReduce_147), - (148 , happyReduce_148), - (149 , happyReduce_149), - (150 , happyReduce_150), - (151 , happyReduce_151), - (152 , happyReduce_152), - (153 , happyReduce_153), - (154 , happyReduce_154), - (155 , happyReduce_155), - (156 , happyReduce_156), - (157 , happyReduce_157), - (158 , happyReduce_158), - (159 , happyReduce_159), - (160 , happyReduce_160), - (161 , happyReduce_161), - (162 , happyReduce_162), - (163 , happyReduce_163), - (164 , happyReduce_164), - (165 , happyReduce_165), - (166 , happyReduce_166), - (167 , happyReduce_167), - (168 , happyReduce_168), - (169 , happyReduce_169), - (170 , happyReduce_170), - (171 , happyReduce_171), - (172 , happyReduce_172), - (173 , happyReduce_173), - (174 , happyReduce_174), - (175 , happyReduce_175), - (176 , happyReduce_176), - (177 , happyReduce_177), - (178 , happyReduce_178), - (179 , happyReduce_179), - (180 , happyReduce_180), - (181 , happyReduce_181), - (182 , happyReduce_182), - (183 , happyReduce_183), - (184 , happyReduce_184), - (185 , happyReduce_185), - (186 , happyReduce_186), - (187 , happyReduce_187), - (188 , happyReduce_188), - (189 , happyReduce_189), - (190 , happyReduce_190), - (191 , happyReduce_191), - (192 , happyReduce_192), - (193 , happyReduce_193), - (194 , happyReduce_194), - (195 , happyReduce_195), - (196 , happyReduce_196), - (197 , happyReduce_197), - (198 , happyReduce_198), - (199 , happyReduce_199), - (200 , happyReduce_200), - (201 , happyReduce_201), - (202 , happyReduce_202), - (203 , happyReduce_203), - (204 , happyReduce_204), - (205 , happyReduce_205), - (206 , happyReduce_206), - (207 , happyReduce_207), - (208 , happyReduce_208), - (209 , happyReduce_209), - (210 , happyReduce_210), - (211 , happyReduce_211), - (212 , happyReduce_212), - (213 , happyReduce_213), - (214 , happyReduce_214), - (215 , happyReduce_215), - (216 , happyReduce_216), - (217 , happyReduce_217), - (218 , happyReduce_218), - (219 , happyReduce_219), - (220 , happyReduce_220), - (221 , happyReduce_221), - (222 , happyReduce_222), - (223 , happyReduce_223), - (224 , happyReduce_224), - (225 , happyReduce_225), - (226 , happyReduce_226), - (227 , happyReduce_227), - (228 , happyReduce_228), - (229 , happyReduce_229), - (230 , happyReduce_230), - (231 , happyReduce_231), - (232 , happyReduce_232), - (233 , happyReduce_233), - (234 , happyReduce_234), - (235 , happyReduce_235), - (236 , happyReduce_236), - (237 , happyReduce_237), - (238 , happyReduce_238), - (239 , happyReduce_239), - (240 , happyReduce_240), - (241 , happyReduce_241), - (242 , happyReduce_242), - (243 , happyReduce_243) - ] - -happy_n_terms = 98 :: Int -happy_n_nonterms = 58 :: Int - -happyReduce_53 = happySpecReduce_1 0# happyReduction_53 -happyReduction_53 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn56 - ((Just (tokenLineCol happy_var_1), read (prToken happy_var_1)) - )} - -happyReduce_54 = happySpecReduce_1 1# happyReduction_54 -happyReduction_54 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn57 - ((Just (tokenLineCol happy_var_1), Ident (prToken happy_var_1)) - )} - -happyReduce_55 = happySpecReduce_1 2# happyReduction_55 -happyReduction_55 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn58 - ((Just (tokenLineCol happy_var_1), read (prToken happy_var_1)) - )} - -happyReduce_56 = happySpecReduce_1 3# happyReduction_56 -happyReduction_56 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn59 - ((Just (tokenLineCol happy_var_1), read (prToken happy_var_1)) - )} - -happyReduce_57 = happySpecReduce_1 4# happyReduction_57 -happyReduction_57 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn60 - ((Just (tokenLineCol happy_var_1), prToken happy_var_1) - )} - -happyReduce_58 = happySpecReduce_1 5# happyReduction_58 -happyReduction_58 happy_x_1 - = case happyOut62 happy_x_1 of { happy_var_1 -> - happyIn61 - ((fst happy_var_1, AbsPyxell.Program (fst happy_var_1)(snd happy_var_1)) - )} - -happyReduce_59 = happySpecReduce_0 6# happyReduction_59 -happyReduction_59 = happyIn62 - ((Nothing, []) - ) - -happyReduce_60 = happySpecReduce_1 6# happyReduction_60 -happyReduction_60 happy_x_1 - = case happyOut71 happy_x_1 of { happy_var_1 -> - happyIn62 - ((fst happy_var_1, (:[]) (snd happy_var_1)) - )} - -happyReduce_61 = happySpecReduce_3 6# happyReduction_61 -happyReduction_61 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut71 happy_x_1 of { happy_var_1 -> - case happyOut62 happy_x_3 of { happy_var_3 -> - happyIn62 - ((fst happy_var_1, (:) (snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_62 = happySpecReduce_1 7# happyReduction_62 -happyReduction_62 happy_x_1 - = case happyOut57 happy_x_1 of { happy_var_1 -> - happyIn63 - ((fst happy_var_1, AbsPyxell.TVar (fst happy_var_1)(snd happy_var_1)) - )} - -happyReduce_63 = happySpecReduce_1 7# happyReduction_63 -happyReduction_63 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn63 - ((Just (tokenLineCol happy_var_1), AbsPyxell.TVoid (Just (tokenLineCol happy_var_1))) - )} - -happyReduce_64 = happySpecReduce_1 7# happyReduction_64 -happyReduction_64 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn63 - ((Just (tokenLineCol happy_var_1), AbsPyxell.TInt (Just (tokenLineCol happy_var_1))) - )} - -happyReduce_65 = happySpecReduce_1 7# happyReduction_65 -happyReduction_65 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn63 - ((Just (tokenLineCol happy_var_1), AbsPyxell.TFloat (Just (tokenLineCol happy_var_1))) - )} - -happyReduce_66 = happySpecReduce_1 7# happyReduction_66 -happyReduction_66 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn63 - ((Just (tokenLineCol happy_var_1), AbsPyxell.TBool (Just (tokenLineCol happy_var_1))) - )} - -happyReduce_67 = happySpecReduce_1 7# happyReduction_67 -happyReduction_67 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn63 - ((Just (tokenLineCol happy_var_1), AbsPyxell.TChar (Just (tokenLineCol happy_var_1))) - )} - -happyReduce_68 = happySpecReduce_1 7# happyReduction_68 -happyReduction_68 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn63 - ((Just (tokenLineCol happy_var_1), AbsPyxell.TString (Just (tokenLineCol happy_var_1))) - )} - -happyReduce_69 = happySpecReduce_3 7# happyReduction_69 -happyReduction_69 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut70 happy_x_2 of { happy_var_2 -> - happyIn63 - ((Just (tokenLineCol happy_var_1), snd happy_var_2) - )}} - -happyReduce_70 = happySpecReduce_3 8# happyReduction_70 -happyReduction_70 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut70 happy_x_2 of { happy_var_2 -> - happyIn64 - ((Just (tokenLineCol happy_var_1), AbsPyxell.TArray (Just (tokenLineCol happy_var_1)) (snd happy_var_2)) - )}} - -happyReduce_71 = happySpecReduce_2 8# happyReduction_71 -happyReduction_71 happy_x_2 - happy_x_1 - = case happyOut64 happy_x_1 of { happy_var_1 -> - happyIn64 - ((fst happy_var_1, AbsPyxell.TNullable (fst happy_var_1)(snd happy_var_1)) - )} - -happyReduce_72 = happySpecReduce_1 8# happyReduction_72 -happyReduction_72 happy_x_1 - = case happyOut63 happy_x_1 of { happy_var_1 -> - happyIn64 - ((fst happy_var_1, snd happy_var_1) - )} - -happyReduce_73 = happySpecReduce_1 9# happyReduction_73 -happyReduction_73 happy_x_1 - = case happyOut67 happy_x_1 of { happy_var_1 -> - happyIn65 - ((fst happy_var_1, AbsPyxell.TTuple (fst happy_var_1)(snd happy_var_1)) - )} - -happyReduce_74 = happySpecReduce_1 9# happyReduction_74 -happyReduction_74 happy_x_1 - = case happyOut64 happy_x_1 of { happy_var_1 -> - happyIn65 - ((fst happy_var_1, snd happy_var_1) - )} - -happyReduce_75 = happySpecReduce_3 10# happyReduction_75 -happyReduction_75 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut68 happy_x_1 of { happy_var_1 -> - case happyOut66 happy_x_3 of { happy_var_3 -> - happyIn66 - ((fst happy_var_1, AbsPyxell.TFunc (fst happy_var_1)(snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_76 = happySpecReduce_1 10# happyReduction_76 -happyReduction_76 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn66 - ((Just (tokenLineCol happy_var_1), AbsPyxell.TAny (Just (tokenLineCol happy_var_1))) - )} - -happyReduce_77 = happySpecReduce_1 10# happyReduction_77 -happyReduction_77 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn66 - ((Just (tokenLineCol happy_var_1), AbsPyxell.TNum (Just (tokenLineCol happy_var_1))) - )} - -happyReduce_78 = happySpecReduce_1 10# happyReduction_78 -happyReduction_78 happy_x_1 - = case happyOut65 happy_x_1 of { happy_var_1 -> - happyIn66 - ((fst happy_var_1, snd happy_var_1) - )} - -happyReduce_79 = happySpecReduce_1 11# happyReduction_79 -happyReduction_79 happy_x_1 - = case happyOut64 happy_x_1 of { happy_var_1 -> - happyIn67 - ((fst happy_var_1, (:[]) (snd happy_var_1)) - )} - -happyReduce_80 = happySpecReduce_3 11# happyReduction_80 -happyReduction_80 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut64 happy_x_1 of { happy_var_1 -> - case happyOut67 happy_x_3 of { happy_var_3 -> - happyIn67 - ((fst happy_var_1, (:) (snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_81 = happySpecReduce_0 12# happyReduction_81 -happyReduction_81 = happyIn68 - ((Nothing, []) - ) - -happyReduce_82 = happySpecReduce_1 12# happyReduction_82 -happyReduction_82 happy_x_1 - = case happyOut65 happy_x_1 of { happy_var_1 -> - happyIn68 - ((fst happy_var_1, (:[]) (snd happy_var_1)) - )} - -happyReduce_83 = happySpecReduce_3 12# happyReduction_83 -happyReduction_83 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut65 happy_x_1 of { happy_var_1 -> - case happyOut68 happy_x_3 of { happy_var_3 -> - happyIn68 - ((fst happy_var_1, (:) (snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_84 = happySpecReduce_0 13# happyReduction_84 -happyReduction_84 = happyIn69 - ((Nothing, []) - ) - -happyReduce_85 = happySpecReduce_1 13# happyReduction_85 -happyReduction_85 happy_x_1 - = case happyOut70 happy_x_1 of { happy_var_1 -> - happyIn69 - ((fst happy_var_1, (:[]) (snd happy_var_1)) - )} - -happyReduce_86 = happySpecReduce_3 13# happyReduction_86 -happyReduction_86 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut70 happy_x_1 of { happy_var_1 -> - case happyOut69 happy_x_3 of { happy_var_3 -> - happyIn69 - ((fst happy_var_1, (:) (snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_87 = happySpecReduce_1 14# happyReduction_87 -happyReduction_87 happy_x_1 - = case happyOut66 happy_x_1 of { happy_var_1 -> - happyIn70 - ((fst happy_var_1, snd happy_var_1) - )} - -happyReduce_88 = happySpecReduce_3 15# happyReduction_88 -happyReduction_88 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut57 happy_x_2 of { happy_var_2 -> - case happyOut72 happy_x_3 of { happy_var_3 -> - happyIn71 - ((Just (tokenLineCol happy_var_1), AbsPyxell.SUse (Just (tokenLineCol happy_var_1)) (snd happy_var_2)(snd happy_var_3)) - )}}} - -happyReduce_89 = happyReduce 7# 15# happyReduction_89 -happyReduction_89 (happy_x_7 `HappyStk` - happy_x_6 `HappyStk` - happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut57 happy_x_2 of { happy_var_2 -> - case happyOut73 happy_x_3 of { happy_var_3 -> - case happyOut76 happy_x_6 of { happy_var_6 -> - happyIn71 - ((Just (tokenLineCol happy_var_1), AbsPyxell.SClass (Just (tokenLineCol happy_var_1)) (snd happy_var_2)(snd happy_var_3)(snd happy_var_6)) - ) `HappyStk` happyRest}}}} - -happyReduce_90 = happyReduce 8# 15# happyReduction_90 -happyReduction_90 (happy_x_8 `HappyStk` - happy_x_7 `HappyStk` - happy_x_6 `HappyStk` - happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut57 happy_x_2 of { happy_var_2 -> - case happyOut77 happy_x_3 of { happy_var_3 -> - case happyOut81 happy_x_5 of { happy_var_5 -> - case happyOut82 happy_x_7 of { happy_var_7 -> - case happyOut83 happy_x_8 of { happy_var_8 -> - happyIn71 - ((Just (tokenLineCol happy_var_1), AbsPyxell.SFunc (Just (tokenLineCol happy_var_1)) (snd happy_var_2)(snd happy_var_3)(snd happy_var_5)(snd happy_var_7)(snd happy_var_8)) - ) `HappyStk` happyRest}}}}}} - -happyReduce_91 = happySpecReduce_1 15# happyReduction_91 -happyReduction_91 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn71 - ((Just (tokenLineCol happy_var_1), AbsPyxell.SRetVoid (Just (tokenLineCol happy_var_1))) - )} - -happyReduce_92 = happySpecReduce_2 15# happyReduction_92 -happyReduction_92 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut113 happy_x_2 of { happy_var_2 -> - happyIn71 - ((Just (tokenLineCol happy_var_1), AbsPyxell.SRetExpr (Just (tokenLineCol happy_var_1)) (snd happy_var_2)) - )}} - -happyReduce_93 = happySpecReduce_1 15# happyReduction_93 -happyReduction_93 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn71 - ((Just (tokenLineCol happy_var_1), AbsPyxell.SSkip (Just (tokenLineCol happy_var_1))) - )} - -happyReduce_94 = happySpecReduce_2 15# happyReduction_94 -happyReduction_94 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut113 happy_x_2 of { happy_var_2 -> - happyIn71 - ((Just (tokenLineCol happy_var_1), AbsPyxell.SPrint (Just (tokenLineCol happy_var_1)) (snd happy_var_2)) - )}} - -happyReduce_95 = happySpecReduce_1 15# happyReduction_95 -happyReduction_95 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn71 - ((Just (tokenLineCol happy_var_1), AbsPyxell.SPrintEmpty (Just (tokenLineCol happy_var_1))) - )} - -happyReduce_96 = happyReduce 4# 15# happyReduction_96 -happyReduction_96 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOut65 happy_x_1 of { happy_var_1 -> - case happyOut57 happy_x_2 of { happy_var_2 -> - case happyOut113 happy_x_4 of { happy_var_4 -> - happyIn71 - ((fst happy_var_1, AbsPyxell.SDeclAssg (fst happy_var_1)(snd happy_var_1)(snd happy_var_2)(snd happy_var_4)) - ) `HappyStk` happyRest}}} - -happyReduce_97 = happySpecReduce_2 15# happyReduction_97 -happyReduction_97 happy_x_2 - happy_x_1 - = case happyOut65 happy_x_1 of { happy_var_1 -> - case happyOut57 happy_x_2 of { happy_var_2 -> - happyIn71 - ((fst happy_var_1, AbsPyxell.SDecl (fst happy_var_1)(snd happy_var_1)(snd happy_var_2)) - )}} - -happyReduce_98 = happySpecReduce_1 15# happyReduction_98 -happyReduction_98 happy_x_1 - = case happyOut85 happy_x_1 of { happy_var_1 -> - happyIn71 - ((fst happy_var_1, AbsPyxell.SAssg (fst happy_var_1)(snd happy_var_1)) - )} - -happyReduce_99 = happySpecReduce_3 15# happyReduction_99 -happyReduction_99 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut113 happy_x_1 of { happy_var_1 -> - case happyOut113 happy_x_3 of { happy_var_3 -> - happyIn71 - ((fst happy_var_1, AbsPyxell.SAssgPow (fst happy_var_1)(snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_100 = happySpecReduce_3 15# happyReduction_100 -happyReduction_100 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut113 happy_x_1 of { happy_var_1 -> - case happyOut113 happy_x_3 of { happy_var_3 -> - happyIn71 - ((fst happy_var_1, AbsPyxell.SAssgMul (fst happy_var_1)(snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_101 = happySpecReduce_3 15# happyReduction_101 -happyReduction_101 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut113 happy_x_1 of { happy_var_1 -> - case happyOut113 happy_x_3 of { happy_var_3 -> - happyIn71 - ((fst happy_var_1, AbsPyxell.SAssgDiv (fst happy_var_1)(snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_102 = happySpecReduce_3 15# happyReduction_102 -happyReduction_102 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut113 happy_x_1 of { happy_var_1 -> - case happyOut113 happy_x_3 of { happy_var_3 -> - happyIn71 - ((fst happy_var_1, AbsPyxell.SAssgMod (fst happy_var_1)(snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_103 = happySpecReduce_3 15# happyReduction_103 -happyReduction_103 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut113 happy_x_1 of { happy_var_1 -> - case happyOut113 happy_x_3 of { happy_var_3 -> - happyIn71 - ((fst happy_var_1, AbsPyxell.SAssgAdd (fst happy_var_1)(snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_104 = happySpecReduce_3 15# happyReduction_104 -happyReduction_104 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut113 happy_x_1 of { happy_var_1 -> - case happyOut113 happy_x_3 of { happy_var_3 -> - happyIn71 - ((fst happy_var_1, AbsPyxell.SAssgSub (fst happy_var_1)(snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_105 = happySpecReduce_3 15# happyReduction_105 -happyReduction_105 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut113 happy_x_1 of { happy_var_1 -> - case happyOut113 happy_x_3 of { happy_var_3 -> - happyIn71 - ((fst happy_var_1, AbsPyxell.SAssgBShl (fst happy_var_1)(snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_106 = happySpecReduce_3 15# happyReduction_106 -happyReduction_106 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut113 happy_x_1 of { happy_var_1 -> - case happyOut113 happy_x_3 of { happy_var_3 -> - happyIn71 - ((fst happy_var_1, AbsPyxell.SAssgBShr (fst happy_var_1)(snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_107 = happySpecReduce_3 15# happyReduction_107 -happyReduction_107 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut113 happy_x_1 of { happy_var_1 -> - case happyOut113 happy_x_3 of { happy_var_3 -> - happyIn71 - ((fst happy_var_1, AbsPyxell.SAssgBAnd (fst happy_var_1)(snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_108 = happySpecReduce_3 15# happyReduction_108 -happyReduction_108 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut113 happy_x_1 of { happy_var_1 -> - case happyOut113 happy_x_3 of { happy_var_3 -> - happyIn71 - ((fst happy_var_1, AbsPyxell.SAssgBOr (fst happy_var_1)(snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_109 = happySpecReduce_3 15# happyReduction_109 -happyReduction_109 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut113 happy_x_1 of { happy_var_1 -> - case happyOut113 happy_x_3 of { happy_var_3 -> - happyIn71 - ((fst happy_var_1, AbsPyxell.SAssgBXor (fst happy_var_1)(snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_110 = happySpecReduce_3 15# happyReduction_110 -happyReduction_110 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut113 happy_x_1 of { happy_var_1 -> - case happyOut113 happy_x_3 of { happy_var_3 -> - happyIn71 - ((fst happy_var_1, AbsPyxell.SAssgCoalesce (fst happy_var_1)(snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_111 = happySpecReduce_3 15# happyReduction_111 -happyReduction_111 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut87 happy_x_2 of { happy_var_2 -> - case happyOut88 happy_x_3 of { happy_var_3 -> - happyIn71 - ((Just (tokenLineCol happy_var_1), AbsPyxell.SIf (Just (tokenLineCol happy_var_1)) (snd happy_var_2)(snd happy_var_3)) - )}}} - -happyReduce_112 = happyReduce 4# 15# happyReduction_112 -happyReduction_112 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut113 happy_x_2 of { happy_var_2 -> - case happyOut84 happy_x_4 of { happy_var_4 -> - happyIn71 - ((Just (tokenLineCol happy_var_1), AbsPyxell.SWhile (Just (tokenLineCol happy_var_1)) (snd happy_var_2)(snd happy_var_4)) - ) `HappyStk` happyRest}}} - -happyReduce_113 = happyReduce 4# 15# happyReduction_113 -happyReduction_113 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut113 happy_x_2 of { happy_var_2 -> - case happyOut84 happy_x_4 of { happy_var_4 -> - happyIn71 - ((Just (tokenLineCol happy_var_1), AbsPyxell.SUntil (Just (tokenLineCol happy_var_1)) (snd happy_var_2)(snd happy_var_4)) - ) `HappyStk` happyRest}}} - -happyReduce_114 = happyReduce 6# 15# happyReduction_114 -happyReduction_114 (happy_x_6 `HappyStk` - happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut113 happy_x_2 of { happy_var_2 -> - case happyOut113 happy_x_4 of { happy_var_4 -> - case happyOut84 happy_x_6 of { happy_var_6 -> - happyIn71 - ((Just (tokenLineCol happy_var_1), AbsPyxell.SFor (Just (tokenLineCol happy_var_1)) (snd happy_var_2)(snd happy_var_4)(snd happy_var_6)) - ) `HappyStk` happyRest}}}} - -happyReduce_115 = happyReduce 8# 15# happyReduction_115 -happyReduction_115 (happy_x_8 `HappyStk` - happy_x_7 `HappyStk` - happy_x_6 `HappyStk` - happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut113 happy_x_2 of { happy_var_2 -> - case happyOut113 happy_x_4 of { happy_var_4 -> - case happyOut113 happy_x_6 of { happy_var_6 -> - case happyOut84 happy_x_8 of { happy_var_8 -> - happyIn71 - ((Just (tokenLineCol happy_var_1), AbsPyxell.SForStep (Just (tokenLineCol happy_var_1)) (snd happy_var_2)(snd happy_var_4)(snd happy_var_6)(snd happy_var_8)) - ) `HappyStk` happyRest}}}}} - -happyReduce_116 = happySpecReduce_1 15# happyReduction_116 -happyReduction_116 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn71 - ((Just (tokenLineCol happy_var_1), AbsPyxell.SContinue (Just (tokenLineCol happy_var_1))) - )} - -happyReduce_117 = happySpecReduce_1 15# happyReduction_117 -happyReduction_117 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn71 - ((Just (tokenLineCol happy_var_1), AbsPyxell.SBreak (Just (tokenLineCol happy_var_1))) - )} - -happyReduce_118 = happySpecReduce_0 16# happyReduction_118 -happyReduction_118 = happyIn72 - ((Nothing, AbsPyxell.UAll Nothing) - ) - -happyReduce_119 = happySpecReduce_2 16# happyReduction_119 -happyReduction_119 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut112 happy_x_2 of { happy_var_2 -> - happyIn72 - ((Just (tokenLineCol happy_var_1), AbsPyxell.UOnly (Just (tokenLineCol happy_var_1)) (snd happy_var_2)) - )}} - -happyReduce_120 = happySpecReduce_2 16# happyReduction_120 -happyReduction_120 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut112 happy_x_2 of { happy_var_2 -> - happyIn72 - ((Just (tokenLineCol happy_var_1), AbsPyxell.UHiding (Just (tokenLineCol happy_var_1)) (snd happy_var_2)) - )}} - -happyReduce_121 = happySpecReduce_2 16# happyReduction_121 -happyReduction_121 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut57 happy_x_2 of { happy_var_2 -> - happyIn72 - ((Just (tokenLineCol happy_var_1), AbsPyxell.UAs (Just (tokenLineCol happy_var_1)) (snd happy_var_2)) - )}} - -happyReduce_122 = happySpecReduce_0 17# happyReduction_122 -happyReduction_122 = happyIn73 - ((Nothing, AbsPyxell.CNoExt Nothing) - ) - -happyReduce_123 = happySpecReduce_3 17# happyReduction_123 -happyReduction_123 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut63 happy_x_2 of { happy_var_2 -> - happyIn73 - ((Just (tokenLineCol happy_var_1), AbsPyxell.CExt (Just (tokenLineCol happy_var_1)) (snd happy_var_2)) - )}} - -happyReduce_124 = happySpecReduce_2 18# happyReduction_124 -happyReduction_124 happy_x_2 - happy_x_1 - = case happyOut70 happy_x_1 of { happy_var_1 -> - case happyOut57 happy_x_2 of { happy_var_2 -> - happyIn74 - ((fst happy_var_1, AbsPyxell.MField (fst happy_var_1)(snd happy_var_1)(snd happy_var_2)) - )}} - -happyReduce_125 = happyReduce 4# 18# happyReduction_125 -happyReduction_125 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOut70 happy_x_1 of { happy_var_1 -> - case happyOut57 happy_x_2 of { happy_var_2 -> - case happyOut113 happy_x_4 of { happy_var_4 -> - happyIn74 - ((fst happy_var_1, AbsPyxell.MFieldDefault (fst happy_var_1)(snd happy_var_1)(snd happy_var_2)(snd happy_var_4)) - ) `HappyStk` happyRest}}} - -happyReduce_126 = happyReduce 7# 18# happyReduction_126 -happyReduction_126 (happy_x_7 `HappyStk` - happy_x_6 `HappyStk` - happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut57 happy_x_2 of { happy_var_2 -> - case happyOut81 happy_x_4 of { happy_var_4 -> - case happyOut82 happy_x_6 of { happy_var_6 -> - case happyOut75 happy_x_7 of { happy_var_7 -> - happyIn74 - ((Just (tokenLineCol happy_var_1), AbsPyxell.MMethodCode (Just (tokenLineCol happy_var_1)) (snd happy_var_2)(snd happy_var_4)(snd happy_var_6)(snd happy_var_7)) - ) `HappyStk` happyRest}}}}} - -happyReduce_127 = happyReduce 6# 18# happyReduction_127 -happyReduction_127 (happy_x_6 `HappyStk` - happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut81 happy_x_3 of { happy_var_3 -> - case happyOut84 happy_x_6 of { happy_var_6 -> - happyIn74 - ((Just (tokenLineCol happy_var_1), AbsPyxell.MConstructor (Just (tokenLineCol happy_var_1)) (snd happy_var_3)(snd happy_var_6)) - ) `HappyStk` happyRest}}} - -happyReduce_128 = happySpecReduce_2 19# happyReduction_128 -happyReduction_128 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut84 happy_x_2 of { happy_var_2 -> - happyIn75 - ((Just (tokenLineCol happy_var_1), AbsPyxell.MDef (Just (tokenLineCol happy_var_1)) (snd happy_var_2)) - )}} - -happyReduce_129 = happySpecReduce_1 19# happyReduction_129 -happyReduction_129 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn75 - ((Just (tokenLineCol happy_var_1), AbsPyxell.MAbstract (Just (tokenLineCol happy_var_1))) - )} - -happyReduce_130 = happySpecReduce_0 20# happyReduction_130 -happyReduction_130 = happyIn76 - ((Nothing, []) - ) - -happyReduce_131 = happySpecReduce_1 20# happyReduction_131 -happyReduction_131 happy_x_1 - = case happyOut74 happy_x_1 of { happy_var_1 -> - happyIn76 - ((fst happy_var_1, (:[]) (snd happy_var_1)) - )} - -happyReduce_132 = happySpecReduce_3 20# happyReduction_132 -happyReduction_132 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut74 happy_x_1 of { happy_var_1 -> - case happyOut76 happy_x_3 of { happy_var_3 -> - happyIn76 - ((fst happy_var_1, (:) (snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_133 = happySpecReduce_0 21# happyReduction_133 -happyReduction_133 = happyIn77 - ((Nothing, AbsPyxell.FStd Nothing) - ) - -happyReduce_134 = happySpecReduce_3 21# happyReduction_134 -happyReduction_134 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut79 happy_x_2 of { happy_var_2 -> - happyIn77 - ((Just (tokenLineCol happy_var_1), AbsPyxell.FGen (Just (tokenLineCol happy_var_1)) (snd happy_var_2)) - )}} - -happyReduce_135 = happySpecReduce_2 22# happyReduction_135 -happyReduction_135 happy_x_2 - happy_x_1 - = case happyOut70 happy_x_1 of { happy_var_1 -> - case happyOut57 happy_x_2 of { happy_var_2 -> - happyIn78 - ((fst happy_var_1, AbsPyxell.FVar (fst happy_var_1)(snd happy_var_1)(snd happy_var_2)) - )}} - -happyReduce_136 = happySpecReduce_0 23# happyReduction_136 -happyReduction_136 = happyIn79 - ((Nothing, []) - ) - -happyReduce_137 = happySpecReduce_1 23# happyReduction_137 -happyReduction_137 happy_x_1 - = case happyOut78 happy_x_1 of { happy_var_1 -> - happyIn79 - ((fst happy_var_1, (:[]) (snd happy_var_1)) - )} - -happyReduce_138 = happySpecReduce_3 23# happyReduction_138 -happyReduction_138 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut78 happy_x_1 of { happy_var_1 -> - case happyOut79 happy_x_3 of { happy_var_3 -> - happyIn79 - ((fst happy_var_1, (:) (snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_139 = happySpecReduce_2 24# happyReduction_139 -happyReduction_139 happy_x_2 - happy_x_1 - = case happyOut70 happy_x_1 of { happy_var_1 -> - case happyOut57 happy_x_2 of { happy_var_2 -> - happyIn80 - ((fst happy_var_1, AbsPyxell.ANoDefault (fst happy_var_1)(snd happy_var_1)(snd happy_var_2)) - )}} - -happyReduce_140 = happyReduce 4# 24# happyReduction_140 -happyReduction_140 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOut70 happy_x_1 of { happy_var_1 -> - case happyOut57 happy_x_2 of { happy_var_2 -> - case happyOut111 happy_x_4 of { happy_var_4 -> - happyIn80 - ((fst happy_var_1, AbsPyxell.ADefault (fst happy_var_1)(snd happy_var_1)(snd happy_var_2)(snd happy_var_4)) - ) `HappyStk` happyRest}}} - -happyReduce_141 = happySpecReduce_0 25# happyReduction_141 -happyReduction_141 = happyIn81 - ((Nothing, []) - ) - -happyReduce_142 = happySpecReduce_1 25# happyReduction_142 -happyReduction_142 happy_x_1 - = case happyOut80 happy_x_1 of { happy_var_1 -> - happyIn81 - ((fst happy_var_1, (:[]) (snd happy_var_1)) - )} - -happyReduce_143 = happySpecReduce_3 25# happyReduction_143 -happyReduction_143 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut80 happy_x_1 of { happy_var_1 -> - case happyOut81 happy_x_3 of { happy_var_3 -> - happyIn81 - ((fst happy_var_1, (:) (snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_144 = happySpecReduce_0 26# happyReduction_144 -happyReduction_144 = happyIn82 - ((Nothing, AbsPyxell.FProc Nothing) - ) - -happyReduce_145 = happySpecReduce_1 26# happyReduction_145 -happyReduction_145 happy_x_1 - = case happyOut70 happy_x_1 of { happy_var_1 -> - happyIn82 - ((fst happy_var_1, AbsPyxell.FFunc (fst happy_var_1)(snd happy_var_1)) - )} - -happyReduce_146 = happySpecReduce_2 27# happyReduction_146 -happyReduction_146 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut84 happy_x_2 of { happy_var_2 -> - happyIn83 - ((Just (tokenLineCol happy_var_1), AbsPyxell.FDef (Just (tokenLineCol happy_var_1)) (snd happy_var_2)) - )}} - -happyReduce_147 = happySpecReduce_1 27# happyReduction_147 -happyReduction_147 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn83 - ((Just (tokenLineCol happy_var_1), AbsPyxell.FExtern (Just (tokenLineCol happy_var_1))) - )} - -happyReduce_148 = happySpecReduce_3 28# happyReduction_148 -happyReduction_148 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut62 happy_x_2 of { happy_var_2 -> - happyIn84 - ((Just (tokenLineCol happy_var_1), AbsPyxell.SBlock (Just (tokenLineCol happy_var_1)) (snd happy_var_2)) - )}} - -happyReduce_149 = happySpecReduce_1 29# happyReduction_149 -happyReduction_149 happy_x_1 - = case happyOut113 happy_x_1 of { happy_var_1 -> - happyIn85 - ((fst happy_var_1, (:[]) (snd happy_var_1)) - )} - -happyReduce_150 = happySpecReduce_3 29# happyReduction_150 -happyReduction_150 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut113 happy_x_1 of { happy_var_1 -> - case happyOut85 happy_x_3 of { happy_var_3 -> - happyIn85 - ((fst happy_var_1, (:) (snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_151 = happySpecReduce_3 30# happyReduction_151 -happyReduction_151 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut113 happy_x_1 of { happy_var_1 -> - case happyOut84 happy_x_3 of { happy_var_3 -> - happyIn86 - ((fst happy_var_1, AbsPyxell.BElIf (fst happy_var_1)(snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_152 = happySpecReduce_0 31# happyReduction_152 -happyReduction_152 = happyIn87 - ((Nothing, []) - ) - -happyReduce_153 = happySpecReduce_1 31# happyReduction_153 -happyReduction_153 happy_x_1 - = case happyOut86 happy_x_1 of { happy_var_1 -> - happyIn87 - ((fst happy_var_1, (:[]) (snd happy_var_1)) - )} - -happyReduce_154 = happySpecReduce_3 31# happyReduction_154 -happyReduction_154 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut86 happy_x_1 of { happy_var_1 -> - case happyOut87 happy_x_3 of { happy_var_3 -> - happyIn87 - ((fst happy_var_1, (:) (snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_155 = happySpecReduce_3 32# happyReduction_155 -happyReduction_155 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut84 happy_x_3 of { happy_var_3 -> - happyIn88 - ((Just (tokenLineCol happy_var_1), AbsPyxell.EElse (Just (tokenLineCol happy_var_1)) (snd happy_var_3)) - )}} - -happyReduce_156 = happySpecReduce_0 32# happyReduction_156 -happyReduction_156 = happyIn88 - ((Nothing, AbsPyxell.EEmpty Nothing) - ) - -happyReduce_157 = happySpecReduce_1 33# happyReduction_157 -happyReduction_157 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn89 - ((Just (tokenLineCol happy_var_1), AbsPyxell.EStub (Just (tokenLineCol happy_var_1))) - )} - -happyReduce_158 = happySpecReduce_1 33# happyReduction_158 -happyReduction_158 happy_x_1 - = case happyOut56 happy_x_1 of { happy_var_1 -> - happyIn89 - ((fst happy_var_1, AbsPyxell.EInt (fst happy_var_1)(snd happy_var_1)) - )} - -happyReduce_159 = happySpecReduce_1 33# happyReduction_159 -happyReduction_159 happy_x_1 - = case happyOut58 happy_x_1 of { happy_var_1 -> - happyIn89 - ((fst happy_var_1, AbsPyxell.EFloat (fst happy_var_1)(snd happy_var_1)) - )} - -happyReduce_160 = happySpecReduce_1 33# happyReduction_160 -happyReduction_160 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn89 - ((Just (tokenLineCol happy_var_1), AbsPyxell.ETrue (Just (tokenLineCol happy_var_1))) - )} - -happyReduce_161 = happySpecReduce_1 33# happyReduction_161 -happyReduction_161 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn89 - ((Just (tokenLineCol happy_var_1), AbsPyxell.EFalse (Just (tokenLineCol happy_var_1))) - )} - -happyReduce_162 = happySpecReduce_1 33# happyReduction_162 -happyReduction_162 happy_x_1 - = case happyOut59 happy_x_1 of { happy_var_1 -> - happyIn89 - ((fst happy_var_1, AbsPyxell.EChar (fst happy_var_1)(snd happy_var_1)) - )} - -happyReduce_163 = happySpecReduce_1 33# happyReduction_163 -happyReduction_163 happy_x_1 - = case happyOut60 happy_x_1 of { happy_var_1 -> - happyIn89 - ((fst happy_var_1, AbsPyxell.EString (fst happy_var_1)(snd happy_var_1)) - )} - -happyReduce_164 = happySpecReduce_3 33# happyReduction_164 -happyReduction_164 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut110 happy_x_2 of { happy_var_2 -> - happyIn89 - ((Just (tokenLineCol happy_var_1), AbsPyxell.EArray (Just (tokenLineCol happy_var_1)) (snd happy_var_2)) - )}} - -happyReduce_165 = happyReduce 4# 33# happyReduction_165 -happyReduction_165 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut111 happy_x_2 of { happy_var_2 -> - case happyOut91 happy_x_3 of { happy_var_3 -> - happyIn89 - ((Just (tokenLineCol happy_var_1), AbsPyxell.EArrayCpr (Just (tokenLineCol happy_var_1)) (snd happy_var_2)(snd happy_var_3)) - ) `HappyStk` happyRest}}} - -happyReduce_166 = happySpecReduce_1 33# happyReduction_166 -happyReduction_166 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn89 - ((Just (tokenLineCol happy_var_1), AbsPyxell.ENull (Just (tokenLineCol happy_var_1))) - )} - -happyReduce_167 = happySpecReduce_1 33# happyReduction_167 -happyReduction_167 happy_x_1 - = case happyOut57 happy_x_1 of { happy_var_1 -> - happyIn89 - ((fst happy_var_1, AbsPyxell.EVar (fst happy_var_1)(snd happy_var_1)) - )} - -happyReduce_168 = happyReduce 4# 33# happyReduction_168 -happyReduction_168 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOut89 happy_x_1 of { happy_var_1 -> - case happyOut113 happy_x_3 of { happy_var_3 -> - happyIn89 - ((fst happy_var_1, AbsPyxell.EIndex (fst happy_var_1)(snd happy_var_1)(snd happy_var_3)) - ) `HappyStk` happyRest}} - -happyReduce_169 = happyReduce 4# 33# happyReduction_169 -happyReduction_169 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOut89 happy_x_1 of { happy_var_1 -> - case happyOut93 happy_x_3 of { happy_var_3 -> - happyIn89 - ((fst happy_var_1, AbsPyxell.ESlice (fst happy_var_1)(snd happy_var_1)(snd happy_var_3)) - ) `HappyStk` happyRest}} - -happyReduce_170 = happySpecReduce_3 33# happyReduction_170 -happyReduction_170 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut89 happy_x_1 of { happy_var_1 -> - case happyOut57 happy_x_3 of { happy_var_3 -> - happyIn89 - ((fst happy_var_1, AbsPyxell.EAttr (fst happy_var_1)(snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_171 = happySpecReduce_3 33# happyReduction_171 -happyReduction_171 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut89 happy_x_1 of { happy_var_1 -> - case happyOut57 happy_x_3 of { happy_var_3 -> - happyIn89 - ((fst happy_var_1, AbsPyxell.ESafeAttr (fst happy_var_1)(snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_172 = happyReduce 4# 33# happyReduction_172 -happyReduction_172 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOut89 happy_x_1 of { happy_var_1 -> - case happyOut95 happy_x_3 of { happy_var_3 -> - happyIn89 - ((fst happy_var_1, AbsPyxell.ECall (fst happy_var_1)(snd happy_var_1)(snd happy_var_3)) - ) `HappyStk` happyRest}} - -happyReduce_173 = happyReduce 4# 33# happyReduction_173 -happyReduction_173 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut95 happy_x_3 of { happy_var_3 -> - happyIn89 - ((Just (tokenLineCol happy_var_1), AbsPyxell.ESuper (Just (tokenLineCol happy_var_1)) (snd happy_var_3)) - ) `HappyStk` happyRest}} - -happyReduce_174 = happySpecReduce_2 33# happyReduction_174 -happyReduction_174 happy_x_2 - happy_x_1 - = case happyOut89 happy_x_1 of { happy_var_1 -> - happyIn89 - ((fst happy_var_1, AbsPyxell.EAssert (fst happy_var_1)(snd happy_var_1)) - )} - -happyReduce_175 = happySpecReduce_3 33# happyReduction_175 -happyReduction_175 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut113 happy_x_2 of { happy_var_2 -> - happyIn89 - ((Just (tokenLineCol happy_var_1), snd happy_var_2) - )}} - -happyReduce_176 = happyReduce 4# 34# happyReduction_176 -happyReduction_176 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut113 happy_x_2 of { happy_var_2 -> - case happyOut113 happy_x_4 of { happy_var_4 -> - happyIn90 - ((Just (tokenLineCol happy_var_1), AbsPyxell.CprFor (Just (tokenLineCol happy_var_1)) (snd happy_var_2)(snd happy_var_4)) - ) `HappyStk` happyRest}}} - -happyReduce_177 = happyReduce 6# 34# happyReduction_177 -happyReduction_177 (happy_x_6 `HappyStk` - happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut113 happy_x_2 of { happy_var_2 -> - case happyOut113 happy_x_4 of { happy_var_4 -> - case happyOut113 happy_x_6 of { happy_var_6 -> - happyIn90 - ((Just (tokenLineCol happy_var_1), AbsPyxell.CprForStep (Just (tokenLineCol happy_var_1)) (snd happy_var_2)(snd happy_var_4)(snd happy_var_6)) - ) `HappyStk` happyRest}}}} - -happyReduce_178 = happySpecReduce_2 34# happyReduction_178 -happyReduction_178 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut113 happy_x_2 of { happy_var_2 -> - happyIn90 - ((Just (tokenLineCol happy_var_1), AbsPyxell.CprIf (Just (tokenLineCol happy_var_1)) (snd happy_var_2)) - )}} - -happyReduce_179 = happySpecReduce_1 35# happyReduction_179 -happyReduction_179 happy_x_1 - = case happyOut90 happy_x_1 of { happy_var_1 -> - happyIn91 - ((fst happy_var_1, (:[]) (snd happy_var_1)) - )} - -happyReduce_180 = happySpecReduce_2 35# happyReduction_180 -happyReduction_180 happy_x_2 - happy_x_1 - = case happyOut90 happy_x_1 of { happy_var_1 -> - case happyOut91 happy_x_2 of { happy_var_2 -> - happyIn91 - ((fst happy_var_1, (:) (snd happy_var_1)(snd happy_var_2)) - )}} - -happyReduce_181 = happySpecReduce_1 36# happyReduction_181 -happyReduction_181 happy_x_1 - = case happyOut113 happy_x_1 of { happy_var_1 -> - happyIn92 - ((fst happy_var_1, AbsPyxell.SliceExpr (fst happy_var_1)(snd happy_var_1)) - )} - -happyReduce_182 = happySpecReduce_0 36# happyReduction_182 -happyReduction_182 = happyIn92 - ((Nothing, AbsPyxell.SliceNone Nothing) - ) - -happyReduce_183 = happySpecReduce_1 37# happyReduction_183 -happyReduction_183 happy_x_1 - = case happyOut92 happy_x_1 of { happy_var_1 -> - happyIn93 - ((fst happy_var_1, (:[]) (snd happy_var_1)) - )} - -happyReduce_184 = happySpecReduce_3 37# happyReduction_184 -happyReduction_184 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut92 happy_x_1 of { happy_var_1 -> - case happyOut93 happy_x_3 of { happy_var_3 -> - happyIn93 - ((fst happy_var_1, (:) (snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_185 = happySpecReduce_1 38# happyReduction_185 -happyReduction_185 happy_x_1 - = case happyOut111 happy_x_1 of { happy_var_1 -> - happyIn94 - ((fst happy_var_1, AbsPyxell.APos (fst happy_var_1)(snd happy_var_1)) - )} - -happyReduce_186 = happySpecReduce_3 38# happyReduction_186 -happyReduction_186 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut57 happy_x_1 of { happy_var_1 -> - case happyOut111 happy_x_3 of { happy_var_3 -> - happyIn94 - ((fst happy_var_1, AbsPyxell.ANamed (fst happy_var_1)(snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_187 = happySpecReduce_0 39# happyReduction_187 -happyReduction_187 = happyIn95 - ((Nothing, []) - ) - -happyReduce_188 = happySpecReduce_1 39# happyReduction_188 -happyReduction_188 happy_x_1 - = case happyOut94 happy_x_1 of { happy_var_1 -> - happyIn95 - ((fst happy_var_1, (:[]) (snd happy_var_1)) - )} - -happyReduce_189 = happySpecReduce_3 39# happyReduction_189 -happyReduction_189 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut94 happy_x_1 of { happy_var_1 -> - case happyOut95 happy_x_3 of { happy_var_3 -> - happyIn95 - ((fst happy_var_1, (:) (snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_190 = happySpecReduce_3 40# happyReduction_190 -happyReduction_190 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut89 happy_x_1 of { happy_var_1 -> - case happyOut96 happy_x_3 of { happy_var_3 -> - happyIn96 - ((fst happy_var_1, AbsPyxell.EPow (fst happy_var_1)(snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_191 = happySpecReduce_2 40# happyReduction_191 -happyReduction_191 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut96 happy_x_2 of { happy_var_2 -> - happyIn96 - ((Just (tokenLineCol happy_var_1), AbsPyxell.EMinus (Just (tokenLineCol happy_var_1)) (snd happy_var_2)) - )}} - -happyReduce_192 = happySpecReduce_2 40# happyReduction_192 -happyReduction_192 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut96 happy_x_2 of { happy_var_2 -> - happyIn96 - ((Just (tokenLineCol happy_var_1), AbsPyxell.EPlus (Just (tokenLineCol happy_var_1)) (snd happy_var_2)) - )}} - -happyReduce_193 = happySpecReduce_2 40# happyReduction_193 -happyReduction_193 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut96 happy_x_2 of { happy_var_2 -> - happyIn96 - ((Just (tokenLineCol happy_var_1), AbsPyxell.EBNot (Just (tokenLineCol happy_var_1)) (snd happy_var_2)) - )}} - -happyReduce_194 = happySpecReduce_1 40# happyReduction_194 -happyReduction_194 happy_x_1 - = case happyOut89 happy_x_1 of { happy_var_1 -> - happyIn96 - ((fst happy_var_1, snd happy_var_1) - )} - -happyReduce_195 = happySpecReduce_3 41# happyReduction_195 -happyReduction_195 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut97 happy_x_1 of { happy_var_1 -> - case happyOut96 happy_x_3 of { happy_var_3 -> - happyIn97 - ((fst happy_var_1, AbsPyxell.EMul (fst happy_var_1)(snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_196 = happySpecReduce_3 41# happyReduction_196 -happyReduction_196 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut97 happy_x_1 of { happy_var_1 -> - case happyOut96 happy_x_3 of { happy_var_3 -> - happyIn97 - ((fst happy_var_1, AbsPyxell.EDiv (fst happy_var_1)(snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_197 = happySpecReduce_3 41# happyReduction_197 -happyReduction_197 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut97 happy_x_1 of { happy_var_1 -> - case happyOut96 happy_x_3 of { happy_var_3 -> - happyIn97 - ((fst happy_var_1, AbsPyxell.EMod (fst happy_var_1)(snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_198 = happySpecReduce_1 41# happyReduction_198 -happyReduction_198 happy_x_1 - = case happyOut96 happy_x_1 of { happy_var_1 -> - happyIn97 - ((fst happy_var_1, snd happy_var_1) - )} - -happyReduce_199 = happySpecReduce_3 42# happyReduction_199 -happyReduction_199 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut98 happy_x_1 of { happy_var_1 -> - case happyOut97 happy_x_3 of { happy_var_3 -> - happyIn98 - ((fst happy_var_1, AbsPyxell.EAdd (fst happy_var_1)(snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_200 = happySpecReduce_3 42# happyReduction_200 -happyReduction_200 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut98 happy_x_1 of { happy_var_1 -> - case happyOut97 happy_x_3 of { happy_var_3 -> - happyIn98 - ((fst happy_var_1, AbsPyxell.ESub (fst happy_var_1)(snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_201 = happySpecReduce_1 42# happyReduction_201 -happyReduction_201 happy_x_1 - = case happyOut97 happy_x_1 of { happy_var_1 -> - happyIn98 - ((fst happy_var_1, snd happy_var_1) - )} - -happyReduce_202 = happySpecReduce_3 43# happyReduction_202 -happyReduction_202 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut99 happy_x_1 of { happy_var_1 -> - case happyOut98 happy_x_3 of { happy_var_3 -> - happyIn99 - ((fst happy_var_1, AbsPyxell.EBShl (fst happy_var_1)(snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_203 = happySpecReduce_3 43# happyReduction_203 -happyReduction_203 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut99 happy_x_1 of { happy_var_1 -> - case happyOut98 happy_x_3 of { happy_var_3 -> - happyIn99 - ((fst happy_var_1, AbsPyxell.EBShr (fst happy_var_1)(snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_204 = happySpecReduce_1 43# happyReduction_204 -happyReduction_204 happy_x_1 - = case happyOut98 happy_x_1 of { happy_var_1 -> - happyIn99 - ((fst happy_var_1, snd happy_var_1) - )} - -happyReduce_205 = happySpecReduce_3 44# happyReduction_205 -happyReduction_205 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut100 happy_x_1 of { happy_var_1 -> - case happyOut99 happy_x_3 of { happy_var_3 -> - happyIn100 - ((fst happy_var_1, AbsPyxell.EBAnd (fst happy_var_1)(snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_206 = happySpecReduce_1 44# happyReduction_206 -happyReduction_206 happy_x_1 - = case happyOut99 happy_x_1 of { happy_var_1 -> - happyIn100 - ((fst happy_var_1, snd happy_var_1) - )} - -happyReduce_207 = happySpecReduce_3 45# happyReduction_207 -happyReduction_207 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut101 happy_x_1 of { happy_var_1 -> - case happyOut100 happy_x_3 of { happy_var_3 -> - happyIn101 - ((fst happy_var_1, AbsPyxell.EBOr (fst happy_var_1)(snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_208 = happySpecReduce_3 45# happyReduction_208 -happyReduction_208 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut101 happy_x_1 of { happy_var_1 -> - case happyOut100 happy_x_3 of { happy_var_3 -> - happyIn101 - ((fst happy_var_1, AbsPyxell.EBXor (fst happy_var_1)(snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_209 = happySpecReduce_1 45# happyReduction_209 -happyReduction_209 happy_x_1 - = case happyOut100 happy_x_1 of { happy_var_1 -> - happyIn101 - ((fst happy_var_1, snd happy_var_1) - )} - -happyReduce_210 = happySpecReduce_3 46# happyReduction_210 -happyReduction_210 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut101 happy_x_1 of { happy_var_1 -> - case happyOut101 happy_x_3 of { happy_var_3 -> - happyIn102 - ((fst happy_var_1, AbsPyxell.ERangeIncl (fst happy_var_1)(snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_211 = happySpecReduce_3 46# happyReduction_211 -happyReduction_211 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut101 happy_x_1 of { happy_var_1 -> - case happyOut101 happy_x_3 of { happy_var_3 -> - happyIn102 - ((fst happy_var_1, AbsPyxell.ERangeExcl (fst happy_var_1)(snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_212 = happySpecReduce_2 46# happyReduction_212 -happyReduction_212 happy_x_2 - happy_x_1 - = case happyOut101 happy_x_1 of { happy_var_1 -> - happyIn102 - ((fst happy_var_1, AbsPyxell.ERangeInf (fst happy_var_1)(snd happy_var_1)) - )} - -happyReduce_213 = happySpecReduce_1 46# happyReduction_213 -happyReduction_213 happy_x_1 - = case happyOut101 happy_x_1 of { happy_var_1 -> - happyIn102 - ((fst happy_var_1, snd happy_var_1) - )} - -happyReduce_214 = happySpecReduce_1 47# happyReduction_214 -happyReduction_214 happy_x_1 - = case happyOut104 happy_x_1 of { happy_var_1 -> - happyIn103 - ((fst happy_var_1, AbsPyxell.ECmp (fst happy_var_1)(snd happy_var_1)) - )} - -happyReduce_215 = happySpecReduce_2 47# happyReduction_215 -happyReduction_215 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut103 happy_x_2 of { happy_var_2 -> - happyIn103 - ((Just (tokenLineCol happy_var_1), AbsPyxell.ENot (Just (tokenLineCol happy_var_1)) (snd happy_var_2)) - )}} - -happyReduce_216 = happySpecReduce_1 47# happyReduction_216 -happyReduction_216 happy_x_1 - = case happyOut102 happy_x_1 of { happy_var_1 -> - happyIn103 - ((fst happy_var_1, snd happy_var_1) - )} - -happyReduce_217 = happySpecReduce_3 48# happyReduction_217 -happyReduction_217 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut102 happy_x_1 of { happy_var_1 -> - case happyOut105 happy_x_2 of { happy_var_2 -> - case happyOut102 happy_x_3 of { happy_var_3 -> - happyIn104 - ((fst happy_var_1, AbsPyxell.Cmp1 (fst happy_var_1)(snd happy_var_1)(snd happy_var_2)(snd happy_var_3)) - )}}} - -happyReduce_218 = happySpecReduce_3 48# happyReduction_218 -happyReduction_218 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut102 happy_x_1 of { happy_var_1 -> - case happyOut105 happy_x_2 of { happy_var_2 -> - case happyOut104 happy_x_3 of { happy_var_3 -> - happyIn104 - ((fst happy_var_1, AbsPyxell.Cmp2 (fst happy_var_1)(snd happy_var_1)(snd happy_var_2)(snd happy_var_3)) - )}}} - -happyReduce_219 = happySpecReduce_1 49# happyReduction_219 -happyReduction_219 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn105 - ((Just (tokenLineCol happy_var_1), AbsPyxell.CmpEQ (Just (tokenLineCol happy_var_1))) - )} - -happyReduce_220 = happySpecReduce_1 49# happyReduction_220 -happyReduction_220 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn105 - ((Just (tokenLineCol happy_var_1), AbsPyxell.CmpNE (Just (tokenLineCol happy_var_1))) - )} - -happyReduce_221 = happySpecReduce_1 49# happyReduction_221 -happyReduction_221 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn105 - ((Just (tokenLineCol happy_var_1), AbsPyxell.CmpLT (Just (tokenLineCol happy_var_1))) - )} - -happyReduce_222 = happySpecReduce_1 49# happyReduction_222 -happyReduction_222 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn105 - ((Just (tokenLineCol happy_var_1), AbsPyxell.CmpLE (Just (tokenLineCol happy_var_1))) - )} - -happyReduce_223 = happySpecReduce_1 49# happyReduction_223 -happyReduction_223 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn105 - ((Just (tokenLineCol happy_var_1), AbsPyxell.CmpGT (Just (tokenLineCol happy_var_1))) - )} - -happyReduce_224 = happySpecReduce_1 49# happyReduction_224 -happyReduction_224 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn105 - ((Just (tokenLineCol happy_var_1), AbsPyxell.CmpGE (Just (tokenLineCol happy_var_1))) - )} - -happyReduce_225 = happySpecReduce_3 50# happyReduction_225 -happyReduction_225 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut103 happy_x_1 of { happy_var_1 -> - case happyOut106 happy_x_3 of { happy_var_3 -> - happyIn106 - ((fst happy_var_1, AbsPyxell.EAnd (fst happy_var_1)(snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_226 = happySpecReduce_1 50# happyReduction_226 -happyReduction_226 happy_x_1 - = case happyOut103 happy_x_1 of { happy_var_1 -> - happyIn106 - ((fst happy_var_1, snd happy_var_1) - )} - -happyReduce_227 = happySpecReduce_3 51# happyReduction_227 -happyReduction_227 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut106 happy_x_1 of { happy_var_1 -> - case happyOut107 happy_x_3 of { happy_var_3 -> - happyIn107 - ((fst happy_var_1, AbsPyxell.EOr (fst happy_var_1)(snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_228 = happySpecReduce_1 51# happyReduction_228 -happyReduction_228 happy_x_1 - = case happyOut106 happy_x_1 of { happy_var_1 -> - happyIn107 - ((fst happy_var_1, snd happy_var_1) - )} - -happyReduce_229 = happySpecReduce_1 52# happyReduction_229 -happyReduction_229 happy_x_1 - = case happyOut109 happy_x_1 of { happy_var_1 -> - happyIn108 - ((fst happy_var_1, AbsPyxell.ETuple (fst happy_var_1)(snd happy_var_1)) - )} - -happyReduce_230 = happySpecReduce_1 52# happyReduction_230 -happyReduction_230 happy_x_1 - = case happyOut111 happy_x_1 of { happy_var_1 -> - happyIn108 - ((fst happy_var_1, snd happy_var_1) - )} - -happyReduce_231 = happySpecReduce_1 53# happyReduction_231 -happyReduction_231 happy_x_1 - = case happyOut107 happy_x_1 of { happy_var_1 -> - happyIn109 - ((fst happy_var_1, (:[]) (snd happy_var_1)) - )} - -happyReduce_232 = happySpecReduce_3 53# happyReduction_232 -happyReduction_232 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut107 happy_x_1 of { happy_var_1 -> - case happyOut109 happy_x_3 of { happy_var_3 -> - happyIn109 - ((fst happy_var_1, (:) (snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_233 = happySpecReduce_0 54# happyReduction_233 -happyReduction_233 = happyIn110 - ((Nothing, []) - ) - -happyReduce_234 = happySpecReduce_1 54# happyReduction_234 -happyReduction_234 happy_x_1 - = case happyOut111 happy_x_1 of { happy_var_1 -> - happyIn110 - ((fst happy_var_1, (:[]) (snd happy_var_1)) - )} - -happyReduce_235 = happySpecReduce_3 54# happyReduction_235 -happyReduction_235 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut111 happy_x_1 of { happy_var_1 -> - case happyOut110 happy_x_3 of { happy_var_3 -> - happyIn110 - ((fst happy_var_1, (:) (snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_236 = happySpecReduce_3 55# happyReduction_236 -happyReduction_236 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut107 happy_x_1 of { happy_var_1 -> - case happyOut111 happy_x_3 of { happy_var_3 -> - happyIn111 - ((fst happy_var_1, AbsPyxell.ECoalesce (fst happy_var_1)(snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_237 = happyReduce 5# 55# happyReduction_237 -happyReduction_237 (happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOut107 happy_x_1 of { happy_var_1 -> - case happyOut107 happy_x_3 of { happy_var_3 -> - case happyOut111 happy_x_5 of { happy_var_5 -> - happyIn111 - ((fst happy_var_1, AbsPyxell.ECond (fst happy_var_1)(snd happy_var_1)(snd happy_var_3)(snd happy_var_5)) - ) `HappyStk` happyRest}}} - -happyReduce_238 = happyReduce 4# 55# happyReduction_238 -happyReduction_238 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut112 happy_x_2 of { happy_var_2 -> - case happyOut111 happy_x_4 of { happy_var_4 -> - happyIn111 - ((Just (tokenLineCol happy_var_1), AbsPyxell.ELambda (Just (tokenLineCol happy_var_1)) (snd happy_var_2)(snd happy_var_4)) - ) `HappyStk` happyRest}}} - -happyReduce_239 = happySpecReduce_1 55# happyReduction_239 -happyReduction_239 happy_x_1 - = case happyOut107 happy_x_1 of { happy_var_1 -> - happyIn111 - ((fst happy_var_1, snd happy_var_1) - )} - -happyReduce_240 = happySpecReduce_0 56# happyReduction_240 -happyReduction_240 = happyIn112 - ((Nothing, []) - ) - -happyReduce_241 = happySpecReduce_1 56# happyReduction_241 -happyReduction_241 happy_x_1 - = case happyOut57 happy_x_1 of { happy_var_1 -> - happyIn112 - ((fst happy_var_1, (:[]) (snd happy_var_1)) - )} - -happyReduce_242 = happySpecReduce_3 56# happyReduction_242 -happyReduction_242 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut57 happy_x_1 of { happy_var_1 -> - case happyOut112 happy_x_3 of { happy_var_3 -> - happyIn112 - ((fst happy_var_1, (:) (snd happy_var_1)(snd happy_var_3)) - )}} - -happyReduce_243 = happySpecReduce_1 57# happyReduction_243 -happyReduction_243 happy_x_1 - = case happyOut108 happy_x_1 of { happy_var_1 -> - happyIn113 - ((fst happy_var_1, snd happy_var_1) - )} - -happyNewToken action sts stk [] = - happyDoAction 97# notHappyAtAll action sts stk [] - -happyNewToken action sts stk (tk:tks) = - let cont i = happyDoAction i tk action sts stk tks in - case tk of { - PT _ (TS _ 1) -> cont 1#; - PT _ (TS _ 2) -> cont 2#; - PT _ (TS _ 3) -> cont 3#; - PT _ (TS _ 4) -> cont 4#; - PT _ (TS _ 5) -> cont 5#; - PT _ (TS _ 6) -> cont 6#; - PT _ (TS _ 7) -> cont 7#; - PT _ (TS _ 8) -> cont 8#; - PT _ (TS _ 9) -> cont 9#; - PT _ (TS _ 10) -> cont 10#; - PT _ (TS _ 11) -> cont 11#; - PT _ (TS _ 12) -> cont 12#; - PT _ (TS _ 13) -> cont 13#; - PT _ (TS _ 14) -> cont 14#; - PT _ (TS _ 15) -> cont 15#; - PT _ (TS _ 16) -> cont 16#; - PT _ (TS _ 17) -> cont 17#; - PT _ (TS _ 18) -> cont 18#; - PT _ (TS _ 19) -> cont 19#; - PT _ (TS _ 20) -> cont 20#; - PT _ (TS _ 21) -> cont 21#; - PT _ (TS _ 22) -> cont 22#; - PT _ (TS _ 23) -> cont 23#; - PT _ (TS _ 24) -> cont 24#; - PT _ (TS _ 25) -> cont 25#; - PT _ (TS _ 26) -> cont 26#; - PT _ (TS _ 27) -> cont 27#; - PT _ (TS _ 28) -> cont 28#; - PT _ (TS _ 29) -> cont 29#; - PT _ (TS _ 30) -> cont 30#; - PT _ (TS _ 31) -> cont 31#; - PT _ (TS _ 32) -> cont 32#; - PT _ (TS _ 33) -> cont 33#; - PT _ (TS _ 34) -> cont 34#; - PT _ (TS _ 35) -> cont 35#; - PT _ (TS _ 36) -> cont 36#; - PT _ (TS _ 37) -> cont 37#; - PT _ (TS _ 38) -> cont 38#; - PT _ (TS _ 39) -> cont 39#; - PT _ (TS _ 40) -> cont 40#; - PT _ (TS _ 41) -> cont 41#; - PT _ (TS _ 42) -> cont 42#; - PT _ (TS _ 43) -> cont 43#; - PT _ (TS _ 44) -> cont 44#; - PT _ (TS _ 45) -> cont 45#; - PT _ (TS _ 46) -> cont 46#; - PT _ (TS _ 47) -> cont 47#; - PT _ (TS _ 48) -> cont 48#; - PT _ (TS _ 49) -> cont 49#; - PT _ (TS _ 50) -> cont 50#; - PT _ (TS _ 51) -> cont 51#; - PT _ (TS _ 52) -> cont 52#; - PT _ (TS _ 53) -> cont 53#; - PT _ (TS _ 54) -> cont 54#; - PT _ (TS _ 55) -> cont 55#; - PT _ (TS _ 56) -> cont 56#; - PT _ (TS _ 57) -> cont 57#; - PT _ (TS _ 58) -> cont 58#; - PT _ (TS _ 59) -> cont 59#; - PT _ (TS _ 60) -> cont 60#; - PT _ (TS _ 61) -> cont 61#; - PT _ (TS _ 62) -> cont 62#; - PT _ (TS _ 63) -> cont 63#; - PT _ (TS _ 64) -> cont 64#; - PT _ (TS _ 65) -> cont 65#; - PT _ (TS _ 66) -> cont 66#; - PT _ (TS _ 67) -> cont 67#; - PT _ (TS _ 68) -> cont 68#; - PT _ (TS _ 69) -> cont 69#; - PT _ (TS _ 70) -> cont 70#; - PT _ (TS _ 71) -> cont 71#; - PT _ (TS _ 72) -> cont 72#; - PT _ (TS _ 73) -> cont 73#; - PT _ (TS _ 74) -> cont 74#; - PT _ (TS _ 75) -> cont 75#; - PT _ (TS _ 76) -> cont 76#; - PT _ (TS _ 77) -> cont 77#; - PT _ (TS _ 78) -> cont 78#; - PT _ (TS _ 79) -> cont 79#; - PT _ (TS _ 80) -> cont 80#; - PT _ (TS _ 81) -> cont 81#; - PT _ (TS _ 82) -> cont 82#; - PT _ (TS _ 83) -> cont 83#; - PT _ (TS _ 84) -> cont 84#; - PT _ (TS _ 85) -> cont 85#; - PT _ (TS _ 86) -> cont 86#; - PT _ (TS _ 87) -> cont 87#; - PT _ (TS _ 88) -> cont 88#; - PT _ (TS _ 89) -> cont 89#; - PT _ (TS _ 90) -> cont 90#; - PT _ (TS _ 91) -> cont 91#; - PT _ (TI _) -> cont 92#; - PT _ (TV _) -> cont 93#; - PT _ (TD _) -> cont 94#; - PT _ (TC _) -> cont 95#; - PT _ (TL _) -> cont 96#; - _ -> happyError' ((tk:tks), []) - } - -happyError_ explist 97# tk tks = happyError' (tks, explist) -happyError_ explist _ tk tks = happyError' ((tk:tks), explist) - -happyThen :: () => Err a -> (a -> Err b) -> Err b -happyThen = (thenM) -happyReturn :: () => a -> Err a -happyReturn = (returnM) -happyThen1 m k tks = (thenM) m (\a -> k a tks) -happyReturn1 :: () => a -> b -> Err a -happyReturn1 = \a tks -> (returnM) a -happyError' :: () => ([(Token)], [String]) -> Err a -happyError' = (\(tokens, _) -> happyError tokens) -pProgram_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 0# tks) (\x -> happyReturn (happyOut61 x)) - -pListStmt_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 1# tks) (\x -> happyReturn (happyOut62 x)) - -pType4_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 2# tks) (\x -> happyReturn (happyOut63 x)) - -pType3_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 3# tks) (\x -> happyReturn (happyOut64 x)) - -pType2_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 4# tks) (\x -> happyReturn (happyOut65 x)) - -pType1_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 5# tks) (\x -> happyReturn (happyOut66 x)) - -pListType3_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 6# tks) (\x -> happyReturn (happyOut67 x)) - -pListType2_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 7# tks) (\x -> happyReturn (happyOut68 x)) - -pListType_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 8# tks) (\x -> happyReturn (happyOut69 x)) - -pType_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 9# tks) (\x -> happyReturn (happyOut70 x)) - -pStmt_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 10# tks) (\x -> happyReturn (happyOut71 x)) - -pUse_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 11# tks) (\x -> happyReturn (happyOut72 x)) - -pCExt_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 12# tks) (\x -> happyReturn (happyOut73 x)) - -pCMemb_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 13# tks) (\x -> happyReturn (happyOut74 x)) - -pMBody_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 14# tks) (\x -> happyReturn (happyOut75 x)) - -pListCMemb_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 15# tks) (\x -> happyReturn (happyOut76 x)) - -pFVars_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 16# tks) (\x -> happyReturn (happyOut77 x)) - -pFVar_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 17# tks) (\x -> happyReturn (happyOut78 x)) - -pListFVar_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 18# tks) (\x -> happyReturn (happyOut79 x)) - -pFArg_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 19# tks) (\x -> happyReturn (happyOut80 x)) - -pListFArg_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 20# tks) (\x -> happyReturn (happyOut81 x)) - -pFRet_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 21# tks) (\x -> happyReturn (happyOut82 x)) - -pFBody_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 22# tks) (\x -> happyReturn (happyOut83 x)) - -pBlock_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 23# tks) (\x -> happyReturn (happyOut84 x)) - -pListExpr_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 24# tks) (\x -> happyReturn (happyOut85 x)) - -pBranch_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 25# tks) (\x -> happyReturn (happyOut86 x)) - -pListBranch_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 26# tks) (\x -> happyReturn (happyOut87 x)) - -pElse_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 27# tks) (\x -> happyReturn (happyOut88 x)) - -pExpr13_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 28# tks) (\x -> happyReturn (happyOut89 x)) - -pACpr_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 29# tks) (\x -> happyReturn (happyOut90 x)) - -pListACpr_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 30# tks) (\x -> happyReturn (happyOut91 x)) - -pSlice_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 31# tks) (\x -> happyReturn (happyOut92 x)) - -pListSlice_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 32# tks) (\x -> happyReturn (happyOut93 x)) - -pCArg_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 33# tks) (\x -> happyReturn (happyOut94 x)) - -pListCArg_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 34# tks) (\x -> happyReturn (happyOut95 x)) - -pExpr12_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 35# tks) (\x -> happyReturn (happyOut96 x)) - -pExpr11_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 36# tks) (\x -> happyReturn (happyOut97 x)) - -pExpr10_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 37# tks) (\x -> happyReturn (happyOut98 x)) - -pExpr9_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 38# tks) (\x -> happyReturn (happyOut99 x)) - -pExpr8_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 39# tks) (\x -> happyReturn (happyOut100 x)) - -pExpr7_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 40# tks) (\x -> happyReturn (happyOut101 x)) - -pExpr6_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 41# tks) (\x -> happyReturn (happyOut102 x)) - -pExpr5_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 42# tks) (\x -> happyReturn (happyOut103 x)) - -pCmp_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 43# tks) (\x -> happyReturn (happyOut104 x)) - -pCmpOp_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 44# tks) (\x -> happyReturn (happyOut105 x)) - -pExpr4_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 45# tks) (\x -> happyReturn (happyOut106 x)) - -pExpr3_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 46# tks) (\x -> happyReturn (happyOut107 x)) - -pExpr1_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 47# tks) (\x -> happyReturn (happyOut108 x)) - -pListExpr3_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 48# tks) (\x -> happyReturn (happyOut109 x)) - -pListExpr2_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 49# tks) (\x -> happyReturn (happyOut110 x)) - -pExpr2_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 50# tks) (\x -> happyReturn (happyOut111 x)) - -pListIdent_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 51# tks) (\x -> happyReturn (happyOut112 x)) - -pExpr_internal tks = happySomeParser where - happySomeParser = happyThen (happyParse 52# tks) (\x -> happyReturn (happyOut113 x)) - -happySeq = happyDontSeq - - -returnM :: a -> Err a -returnM = return - -thenM :: Err a -> (a -> Err b) -> Err b -thenM = (>>=) - -happyError :: [Token] -> Err a -happyError ts = - Bad $ "syntax error at " ++ tokenPos ts ++ - case ts of - [] -> [] - [Err _] -> " due to lexer error" - t:_ -> " before `" ++ id(prToken t) ++ "'" - -myLexer = tokens - -pProgram = (>>= return . snd) . pProgram_internal -pListStmt = (>>= return . snd) . pListStmt_internal -pType4 = (>>= return . snd) . pType4_internal -pType3 = (>>= return . snd) . pType3_internal -pType2 = (>>= return . snd) . pType2_internal -pType1 = (>>= return . snd) . pType1_internal -pListType3 = (>>= return . snd) . pListType3_internal -pListType2 = (>>= return . snd) . pListType2_internal -pListType = (>>= return . snd) . pListType_internal -pType = (>>= return . snd) . pType_internal -pStmt = (>>= return . snd) . pStmt_internal -pUse = (>>= return . snd) . pUse_internal -pCExt = (>>= return . snd) . pCExt_internal -pCMemb = (>>= return . snd) . pCMemb_internal -pMBody = (>>= return . snd) . pMBody_internal -pListCMemb = (>>= return . snd) . pListCMemb_internal -pFVars = (>>= return . snd) . pFVars_internal -pFVar = (>>= return . snd) . pFVar_internal -pListFVar = (>>= return . snd) . pListFVar_internal -pFArg = (>>= return . snd) . pFArg_internal -pListFArg = (>>= return . snd) . pListFArg_internal -pFRet = (>>= return . snd) . pFRet_internal -pFBody = (>>= return . snd) . pFBody_internal -pBlock = (>>= return . snd) . pBlock_internal -pListExpr = (>>= return . snd) . pListExpr_internal -pBranch = (>>= return . snd) . pBranch_internal -pListBranch = (>>= return . snd) . pListBranch_internal -pElse = (>>= return . snd) . pElse_internal -pExpr13 = (>>= return . snd) . pExpr13_internal -pACpr = (>>= return . snd) . pACpr_internal -pListACpr = (>>= return . snd) . pListACpr_internal -pSlice = (>>= return . snd) . pSlice_internal -pListSlice = (>>= return . snd) . pListSlice_internal -pCArg = (>>= return . snd) . pCArg_internal -pListCArg = (>>= return . snd) . pListCArg_internal -pExpr12 = (>>= return . snd) . pExpr12_internal -pExpr11 = (>>= return . snd) . pExpr11_internal -pExpr10 = (>>= return . snd) . pExpr10_internal -pExpr9 = (>>= return . snd) . pExpr9_internal -pExpr8 = (>>= return . snd) . pExpr8_internal -pExpr7 = (>>= return . snd) . pExpr7_internal -pExpr6 = (>>= return . snd) . pExpr6_internal -pExpr5 = (>>= return . snd) . pExpr5_internal -pCmp = (>>= return . snd) . pCmp_internal -pCmpOp = (>>= return . snd) . pCmpOp_internal -pExpr4 = (>>= return . snd) . pExpr4_internal -pExpr3 = (>>= return . snd) . pExpr3_internal -pExpr1 = (>>= return . snd) . pExpr1_internal -pListExpr3 = (>>= return . snd) . pListExpr3_internal -pListExpr2 = (>>= return . snd) . pListExpr2_internal -pExpr2 = (>>= return . snd) . pExpr2_internal -pListIdent = (>>= return . snd) . pListIdent_internal -pExpr = (>>= return . snd) . pExpr_internal -{-# LINE 1 "templates\GenericTemplate.hs" #-} -{-# LINE 1 "templates\\\\GenericTemplate.hs" #-} -{-# LINE 1 "" #-} -{-# LINE 1 "" #-} -{-# LINE 11 "" #-} -{-# LINE 1 "D:/GitHub/haskell-platform/build/ghc-bindist/local/lib/include/ghcversion.h" #-} - - - - - - - - - - - - - - - -{-# LINE 11 "" #-} -{-# LINE 1 "F:/Users/randy/AppData/Local/Temp/ghc8380_0/ghc_2.h" #-} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -{-# LINE 11 "" #-} -{-# LINE 1 "templates\\\\GenericTemplate.hs" #-} --- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp - - - - - - - - - - - - - --- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex. -#if __GLASGOW_HASKELL__ > 706 -#define LT(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.<# m)) :: Bool) -#define GTE(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.>=# m)) :: Bool) -#define EQ(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.==# m)) :: Bool) -#else -#define LT(n,m) (n Happy_GHC_Exts.<# m) -#define GTE(n,m) (n Happy_GHC_Exts.>=# m) -#define EQ(n,m) (n Happy_GHC_Exts.==# m) -#endif -{-# LINE 43 "templates\\\\GenericTemplate.hs" #-} - -data Happy_IntList = HappyCons Happy_GHC_Exts.Int# Happy_IntList - - - - - - - -{-# LINE 65 "templates\\\\GenericTemplate.hs" #-} - -{-# LINE 75 "templates\\\\GenericTemplate.hs" #-} - -{-# LINE 84 "templates\\\\GenericTemplate.hs" #-} - -infixr 9 `HappyStk` -data HappyStk a = HappyStk a (HappyStk a) - ------------------------------------------------------------------------------ --- starting the parse - -happyParse start_state = happyNewToken start_state notHappyAtAll notHappyAtAll - ------------------------------------------------------------------------------ --- Accepting the parse - --- If the current token is 0#, it means we've just accepted a partial --- parse (a %partial parser). We must ignore the saved token on the top of --- the stack in this case. -happyAccept 0# tk st sts (_ `HappyStk` ans `HappyStk` _) = - happyReturn1 ans -happyAccept j tk st sts (HappyStk ans _) = - (happyTcHack j (happyTcHack st)) (happyReturn1 ans) - ------------------------------------------------------------------------------ --- Arrays only: do the next action - - - -happyDoAction i tk st - = {- nothing -} - - - case action of - 0# -> {- nothing -} - happyFail (happyExpListPerState ((Happy_GHC_Exts.I# (st)) :: Int)) i tk st - -1# -> {- nothing -} - happyAccept i tk st - n | LT(n,(0# :: Happy_GHC_Exts.Int#)) -> {- nothing -} - - (happyReduceArr Happy_Data_Array.! rule) i tk st - where rule = (Happy_GHC_Exts.I# ((Happy_GHC_Exts.negateInt# ((n Happy_GHC_Exts.+# (1# :: Happy_GHC_Exts.Int#)))))) - n -> {- nothing -} - - - happyShift new_state i tk st - where new_state = (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) - where off = happyAdjustOffset (indexShortOffAddr happyActOffsets st) - off_i = (off Happy_GHC_Exts.+# i) - check = if GTE(off_i,(0# :: Happy_GHC_Exts.Int#)) - then EQ(indexShortOffAddr happyCheck off_i, i) - else False - action - | check = indexShortOffAddr happyTable off_i - | otherwise = indexShortOffAddr happyDefActions st - - - - -indexShortOffAddr (HappyA# arr) off = - Happy_GHC_Exts.narrow16Int# i - where - i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.uncheckedShiftL# high 8#) low) - high = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr (off' Happy_GHC_Exts.+# 1#))) - low = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr off')) - off' = off Happy_GHC_Exts.*# 2# - - - - -{-# INLINE happyLt #-} -happyLt x y = LT(x,y) - - -readArrayBit arr bit = - Bits.testBit (Happy_GHC_Exts.I# (indexShortOffAddr arr ((unbox_int bit) `Happy_GHC_Exts.iShiftRA#` 4#))) (bit `mod` 16) - where unbox_int (Happy_GHC_Exts.I# x) = x - - - - - - -data HappyAddr = HappyA# Happy_GHC_Exts.Addr# - - ------------------------------------------------------------------------------ --- HappyState data type (not arrays) - -{-# LINE 180 "templates\\\\GenericTemplate.hs" #-} - ------------------------------------------------------------------------------ --- Shifting a token - -happyShift new_state 0# tk st sts stk@(x `HappyStk` _) = - let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in --- trace "shifting the error token" $ - happyDoAction i tk new_state (HappyCons (st) (sts)) (stk) - -happyShift new_state i tk st sts stk = - happyNewToken new_state (HappyCons (st) (sts)) ((happyInTok (tk))`HappyStk`stk) - --- happyReduce is specialised for the common cases. - -happySpecReduce_0 i fn 0# tk st sts stk - = happyFail [] 0# tk st sts stk -happySpecReduce_0 nt fn j tk st@((action)) sts stk - = happyGoto nt j tk st (HappyCons (st) (sts)) (fn `HappyStk` stk) - -happySpecReduce_1 i fn 0# tk st sts stk - = happyFail [] 0# tk st sts stk -happySpecReduce_1 nt fn j tk _ sts@((HappyCons (st@(action)) (_))) (v1`HappyStk`stk') - = let r = fn v1 in - happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk')) - -happySpecReduce_2 i fn 0# tk st sts stk - = happyFail [] 0# tk st sts stk -happySpecReduce_2 nt fn j tk _ (HappyCons (_) (sts@((HappyCons (st@(action)) (_))))) (v1`HappyStk`v2`HappyStk`stk') - = let r = fn v1 v2 in - happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk')) - -happySpecReduce_3 i fn 0# tk st sts stk - = happyFail [] 0# tk st sts stk -happySpecReduce_3 nt fn j tk _ (HappyCons (_) ((HappyCons (_) (sts@((HappyCons (st@(action)) (_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk') - = let r = fn v1 v2 v3 in - happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk')) - -happyReduce k i fn 0# tk st sts stk - = happyFail [] 0# tk st sts stk -happyReduce k nt fn j tk st sts stk - = case happyDrop (k Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) sts of - sts1@((HappyCons (st1@(action)) (_))) -> - let r = fn stk in -- it doesn't hurt to always seq here... - happyDoSeq r (happyGoto nt j tk st1 sts1 r) - -happyMonadReduce k nt fn 0# tk st sts stk - = happyFail [] 0# tk st sts stk -happyMonadReduce k nt fn j tk st sts stk = - case happyDrop k (HappyCons (st) (sts)) of - sts1@((HappyCons (st1@(action)) (_))) -> - let drop_stk = happyDropStk k stk in - happyThen1 (fn stk tk) (\r -> happyGoto nt j tk st1 sts1 (r `HappyStk` drop_stk)) - -happyMonad2Reduce k nt fn 0# tk st sts stk - = happyFail [] 0# tk st sts stk -happyMonad2Reduce k nt fn j tk st sts stk = - case happyDrop k (HappyCons (st) (sts)) of - sts1@((HappyCons (st1@(action)) (_))) -> - let drop_stk = happyDropStk k stk - - off = happyAdjustOffset (indexShortOffAddr happyGotoOffsets st1) - off_i = (off Happy_GHC_Exts.+# nt) - new_state = indexShortOffAddr happyTable off_i - - - - - in - happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk)) - -happyDrop 0# l = l -happyDrop n (HappyCons (_) (t)) = happyDrop (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) t - -happyDropStk 0# l = l -happyDropStk n (x `HappyStk` xs) = happyDropStk (n Happy_GHC_Exts.-# (1#::Happy_GHC_Exts.Int#)) xs - ------------------------------------------------------------------------------ --- Moving to a new state after a reduction - - -happyGoto nt j tk st = - {- nothing -} - happyDoAction j tk new_state - where off = happyAdjustOffset (indexShortOffAddr happyGotoOffsets st) - off_i = (off Happy_GHC_Exts.+# nt) - new_state = indexShortOffAddr happyTable off_i - - - - ------------------------------------------------------------------------------ --- Error recovery (0# is the error token) - --- parse error if we are in recovery and we fail again -happyFail explist 0# tk old_st _ stk@(x `HappyStk` _) = - let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in --- trace "failing" $ - happyError_ explist i tk - -{- We don't need state discarding for our restricted implementation of - "error". In fact, it can cause some bogus parses, so I've disabled it - for now --SDM - --- discard a state -happyFail 0# tk old_st (HappyCons ((action)) (sts)) - (saved_tok `HappyStk` _ `HappyStk` stk) = --- trace ("discarding state, depth " ++ show (length stk)) $ - happyDoAction 0# tk action sts ((saved_tok`HappyStk`stk)) --} - --- Enter error recovery: generate an error token, --- save the old token and carry on. -happyFail explist i tk (action) sts stk = --- trace "entering error recovery" $ - happyDoAction 0# tk action sts ( (Happy_GHC_Exts.unsafeCoerce# (Happy_GHC_Exts.I# (i))) `HappyStk` stk) - --- Internal happy errors: - -notHappyAtAll :: a -notHappyAtAll = error "Internal Happy error\n" - ------------------------------------------------------------------------------ --- Hack to get the typechecker to accept our action functions - - -happyTcHack :: Happy_GHC_Exts.Int# -> a -> a -happyTcHack x y = y -{-# INLINE happyTcHack #-} - - ------------------------------------------------------------------------------ --- Seq-ing. If the --strict flag is given, then Happy emits --- happySeq = happyDoSeq --- otherwise it emits --- happySeq = happyDontSeq - -happyDoSeq, happyDontSeq :: a -> b -> b -happyDoSeq a b = a `seq` b -happyDontSeq a b = b - ------------------------------------------------------------------------------ --- Don't inline any functions from the template. GHC has a nasty habit --- of deciding to inline happyGoto everywhere, which increases the size of --- the generated parser quite a bit. - - -{-# NOINLINE happyDoAction #-} -{-# NOINLINE happyTable #-} -{-# NOINLINE happyCheck #-} -{-# NOINLINE happyActOffsets #-} -{-# NOINLINE happyGotoOffsets #-} -{-# NOINLINE happyDefActions #-} - -{-# NOINLINE happyShift #-} -{-# NOINLINE happySpecReduce_0 #-} -{-# NOINLINE happySpecReduce_1 #-} -{-# NOINLINE happySpecReduce_2 #-} -{-# NOINLINE happySpecReduce_3 #-} -{-# NOINLINE happyReduce #-} -{-# NOINLINE happyMonadReduce #-} -{-# NOINLINE happyGoto #-} -{-# NOINLINE happyFail #-} - --- end of Happy Template. diff --git a/src/bnfc/ParPyxell.y b/src/bnfc/ParPyxell.y deleted file mode 100644 index 2a4c0ce2..00000000 --- a/src/bnfc/ParPyxell.y +++ /dev/null @@ -1,1045 +0,0 @@ --- This Happy file was machine-generated by the BNF converter -{ -{-# OPTIONS_GHC -fno-warn-incomplete-patterns -fno-warn-overlapping-patterns #-} -module ParPyxell where -import AbsPyxell -import LexPyxell -import ErrM - -} - --- no lexer declaration -%monad { Err } { thenM } { returnM } -%tokentype {Token} -%name pProgram_internal Program -%name pListStmt_internal ListStmt -%name pType4_internal Type4 -%name pType3_internal Type3 -%name pType2_internal Type2 -%name pType1_internal Type1 -%name pListType3_internal ListType3 -%name pListType2_internal ListType2 -%name pListType_internal ListType -%name pType_internal Type -%name pStmt_internal Stmt -%name pUse_internal Use -%name pCExt_internal CExt -%name pCMemb_internal CMemb -%name pMBody_internal MBody -%name pListCMemb_internal ListCMemb -%name pFVars_internal FVars -%name pFVar_internal FVar -%name pListFVar_internal ListFVar -%name pFArg_internal FArg -%name pListFArg_internal ListFArg -%name pFRet_internal FRet -%name pFBody_internal FBody -%name pBlock_internal Block -%name pListExpr_internal ListExpr -%name pBranch_internal Branch -%name pListBranch_internal ListBranch -%name pElse_internal Else -%name pExpr13_internal Expr13 -%name pACpr_internal ACpr -%name pListACpr_internal ListACpr -%name pSlice_internal Slice -%name pListSlice_internal ListSlice -%name pCArg_internal CArg -%name pListCArg_internal ListCArg -%name pExpr12_internal Expr12 -%name pExpr11_internal Expr11 -%name pExpr10_internal Expr10 -%name pExpr9_internal Expr9 -%name pExpr8_internal Expr8 -%name pExpr7_internal Expr7 -%name pExpr6_internal Expr6 -%name pExpr5_internal Expr5 -%name pCmp_internal Cmp -%name pCmpOp_internal CmpOp -%name pExpr4_internal Expr4 -%name pExpr3_internal Expr3 -%name pExpr1_internal Expr1 -%name pListExpr3_internal ListExpr3 -%name pListExpr2_internal ListExpr2 -%name pExpr2_internal Expr2 -%name pListIdent_internal ListIdent -%name pExpr_internal Expr -%token - '!' { PT _ (TS _ 1) } - '!=' { PT _ (TS _ 2) } - '$' { PT _ (TS _ 3) } - '$=' { PT _ (TS _ 4) } - '%' { PT _ (TS _ 5) } - '%=' { PT _ (TS _ 6) } - '&' { PT _ (TS _ 7) } - '&=' { PT _ (TS _ 8) } - '(' { PT _ (TS _ 9) } - ')' { PT _ (TS _ 10) } - '*' { PT _ (TS _ 11) } - '*=' { PT _ (TS _ 12) } - '+' { PT _ (TS _ 13) } - '+=' { PT _ (TS _ 14) } - ',' { PT _ (TS _ 15) } - '-' { PT _ (TS _ 16) } - '-=' { PT _ (TS _ 17) } - '->' { PT _ (TS _ 18) } - '.' { PT _ (TS _ 19) } - '..' { PT _ (TS _ 20) } - '...' { PT _ (TS _ 21) } - '/' { PT _ (TS _ 22) } - '/=' { PT _ (TS _ 23) } - ':' { PT _ (TS _ 24) } - ';' { PT _ (TS _ 25) } - '<' { PT _ (TS _ 26) } - '<<' { PT _ (TS _ 27) } - '<<=' { PT _ (TS _ 28) } - '<=' { PT _ (TS _ 29) } - '=' { PT _ (TS _ 30) } - '==' { PT _ (TS _ 31) } - '>' { PT _ (TS _ 32) } - '>=' { PT _ (TS _ 33) } - '>>' { PT _ (TS _ 34) } - '>>=' { PT _ (TS _ 35) } - '?' { PT _ (TS _ 36) } - '?.' { PT _ (TS _ 37) } - '??' { PT _ (TS _ 38) } - '??=' { PT _ (TS _ 39) } - 'Any' { PT _ (TS _ 40) } - 'Bool' { PT _ (TS _ 41) } - 'Char' { PT _ (TS _ 42) } - 'Float' { PT _ (TS _ 43) } - 'Int' { PT _ (TS _ 44) } - 'Module' { PT _ (TS _ 45) } - 'Num' { PT _ (TS _ 46) } - 'String' { PT _ (TS _ 47) } - 'Unknown' { PT _ (TS _ 48) } - 'Void' { PT _ (TS _ 49) } - '[' { PT _ (TS _ 50) } - ']' { PT _ (TS _ 51) } - '^' { PT _ (TS _ 52) } - '^=' { PT _ (TS _ 53) } - '_' { PT _ (TS _ 54) } - 'abstract' { PT _ (TS _ 55) } - 'and' { PT _ (TS _ 56) } - 'as' { PT _ (TS _ 57) } - 'break' { PT _ (TS _ 58) } - 'class' { PT _ (TS _ 59) } - 'constructor' { PT _ (TS _ 60) } - 'continue' { PT _ (TS _ 61) } - 'def' { PT _ (TS _ 62) } - 'do' { PT _ (TS _ 63) } - 'elif' { PT _ (TS _ 64) } - 'else' { PT _ (TS _ 65) } - 'extern' { PT _ (TS _ 66) } - 'false' { PT _ (TS _ 67) } - 'for' { PT _ (TS _ 68) } - 'func' { PT _ (TS _ 69) } - 'hiding' { PT _ (TS _ 70) } - 'if' { PT _ (TS _ 71) } - 'in' { PT _ (TS _ 72) } - 'lambda' { PT _ (TS _ 73) } - 'not' { PT _ (TS _ 74) } - 'null' { PT _ (TS _ 75) } - 'only' { PT _ (TS _ 76) } - 'or' { PT _ (TS _ 77) } - 'print' { PT _ (TS _ 78) } - 'return' { PT _ (TS _ 79) } - 'skip' { PT _ (TS _ 80) } - 'step' { PT _ (TS _ 81) } - 'super' { PT _ (TS _ 82) } - 'true' { PT _ (TS _ 83) } - 'until' { PT _ (TS _ 84) } - 'use' { PT _ (TS _ 85) } - 'while' { PT _ (TS _ 86) } - '{' { PT _ (TS _ 87) } - '|' { PT _ (TS _ 88) } - '|=' { PT _ (TS _ 89) } - '}' { PT _ (TS _ 90) } - '~' { PT _ (TS _ 91) } - - L_integ {PT _ (TI _)} - L_ident {PT _ (TV _)} - L_doubl {PT _ (TD _)} - L_charac {PT _ (TC _)} - L_quoted {PT _ (TL _)} - -%% - -Integer :: { - (Maybe (Int, Int), Integer) -} -: L_integ { - (Just (tokenLineCol $1), read (prToken $1)) -} - -Ident :: { - (Maybe (Int, Int), Ident) -} -: L_ident { - (Just (tokenLineCol $1), Ident (prToken $1)) -} - -Double :: { - (Maybe (Int, Int), Double) -} -: L_doubl { - (Just (tokenLineCol $1), read (prToken $1)) -} - -Char :: { - (Maybe (Int, Int), Char) -} -: L_charac { - (Just (tokenLineCol $1), read (prToken $1)) -} - -String :: { - (Maybe (Int, Int), String) -} -: L_quoted { - (Just (tokenLineCol $1), prToken $1) -} - -Program :: { - (Maybe (Int, Int), Program (Maybe (Int, Int))) -} -: ListStmt { - (fst $1, AbsPyxell.Program (fst $1)(snd $1)) -} - -ListStmt :: { - (Maybe (Int, Int), [Stmt (Maybe (Int, Int))]) -} -: { - (Nothing, []) -} -| Stmt { - (fst $1, (:[]) (snd $1)) -} -| Stmt ';' ListStmt { - (fst $1, (:) (snd $1)(snd $3)) -} - -Type4 :: { - (Maybe (Int, Int), Type (Maybe (Int, Int))) -} -: Ident { - (fst $1, AbsPyxell.TVar (fst $1)(snd $1)) -} -| 'Void' { - (Just (tokenLineCol $1), AbsPyxell.TVoid (Just (tokenLineCol $1))) -} -| 'Int' { - (Just (tokenLineCol $1), AbsPyxell.TInt (Just (tokenLineCol $1))) -} -| 'Float' { - (Just (tokenLineCol $1), AbsPyxell.TFloat (Just (tokenLineCol $1))) -} -| 'Bool' { - (Just (tokenLineCol $1), AbsPyxell.TBool (Just (tokenLineCol $1))) -} -| 'Char' { - (Just (tokenLineCol $1), AbsPyxell.TChar (Just (tokenLineCol $1))) -} -| 'String' { - (Just (tokenLineCol $1), AbsPyxell.TString (Just (tokenLineCol $1))) -} -| '(' Type ')' { - (Just (tokenLineCol $1), snd $2) -} - -Type3 :: { - (Maybe (Int, Int), Type (Maybe (Int, Int))) -} -: '[' Type ']' { - (Just (tokenLineCol $1), AbsPyxell.TArray (Just (tokenLineCol $1)) (snd $2)) -} -| Type3 '?' { - (fst $1, AbsPyxell.TNullable (fst $1)(snd $1)) -} -| Type4 { - (fst $1, snd $1) -} - -Type2 :: { - (Maybe (Int, Int), Type (Maybe (Int, Int))) -} -: ListType3 { - (fst $1, AbsPyxell.TTuple (fst $1)(snd $1)) -} -| Type3 { - (fst $1, snd $1) -} - -Type1 :: { - (Maybe (Int, Int), Type (Maybe (Int, Int))) -} -: ListType2 '->' Type1 { - (fst $1, AbsPyxell.TFunc (fst $1)(snd $1)(snd $3)) -} -| 'Any' { - (Just (tokenLineCol $1), AbsPyxell.TAny (Just (tokenLineCol $1))) -} -| 'Num' { - (Just (tokenLineCol $1), AbsPyxell.TNum (Just (tokenLineCol $1))) -} -| Type2 { - (fst $1, snd $1) -} - -ListType3 :: { - (Maybe (Int, Int), [Type (Maybe (Int, Int))]) -} -: Type3 { - (fst $1, (:[]) (snd $1)) -} -| Type3 '*' ListType3 { - (fst $1, (:) (snd $1)(snd $3)) -} - -ListType2 :: { - (Maybe (Int, Int), [Type (Maybe (Int, Int))]) -} -: { - (Nothing, []) -} -| Type2 { - (fst $1, (:[]) (snd $1)) -} -| Type2 ',' ListType2 { - (fst $1, (:) (snd $1)(snd $3)) -} - -ListType :: { - (Maybe (Int, Int), [Type (Maybe (Int, Int))]) -} -: { - (Nothing, []) -} -| Type { - (fst $1, (:[]) (snd $1)) -} -| Type ',' ListType { - (fst $1, (:) (snd $1)(snd $3)) -} - -Type :: { - (Maybe (Int, Int), Type (Maybe (Int, Int))) -} -: Type1 { - (fst $1, snd $1) -} - -Stmt :: { - (Maybe (Int, Int), Stmt (Maybe (Int, Int))) -} -: 'use' Ident Use { - (Just (tokenLineCol $1), AbsPyxell.SUse (Just (tokenLineCol $1)) (snd $2)(snd $3)) -} -| 'class' Ident CExt 'def' '{' ListCMemb '}' { - (Just (tokenLineCol $1), AbsPyxell.SClass (Just (tokenLineCol $1)) (snd $2)(snd $3)(snd $6)) -} -| 'func' Ident FVars '(' ListFArg ')' FRet FBody { - (Just (tokenLineCol $1), AbsPyxell.SFunc (Just (tokenLineCol $1)) (snd $2)(snd $3)(snd $5)(snd $7)(snd $8)) -} -| 'return' { - (Just (tokenLineCol $1), AbsPyxell.SRetVoid (Just (tokenLineCol $1))) -} -| 'return' Expr { - (Just (tokenLineCol $1), AbsPyxell.SRetExpr (Just (tokenLineCol $1)) (snd $2)) -} -| 'skip' { - (Just (tokenLineCol $1), AbsPyxell.SSkip (Just (tokenLineCol $1))) -} -| 'print' Expr { - (Just (tokenLineCol $1), AbsPyxell.SPrint (Just (tokenLineCol $1)) (snd $2)) -} -| 'print' { - (Just (tokenLineCol $1), AbsPyxell.SPrintEmpty (Just (tokenLineCol $1))) -} -| Type2 Ident '=' Expr { - (fst $1, AbsPyxell.SDeclAssg (fst $1)(snd $1)(snd $2)(snd $4)) -} -| Type2 Ident { - (fst $1, AbsPyxell.SDecl (fst $1)(snd $1)(snd $2)) -} -| ListExpr { - (fst $1, AbsPyxell.SAssg (fst $1)(snd $1)) -} -| Expr '^=' Expr { - (fst $1, AbsPyxell.SAssgPow (fst $1)(snd $1)(snd $3)) -} -| Expr '*=' Expr { - (fst $1, AbsPyxell.SAssgMul (fst $1)(snd $1)(snd $3)) -} -| Expr '/=' Expr { - (fst $1, AbsPyxell.SAssgDiv (fst $1)(snd $1)(snd $3)) -} -| Expr '%=' Expr { - (fst $1, AbsPyxell.SAssgMod (fst $1)(snd $1)(snd $3)) -} -| Expr '+=' Expr { - (fst $1, AbsPyxell.SAssgAdd (fst $1)(snd $1)(snd $3)) -} -| Expr '-=' Expr { - (fst $1, AbsPyxell.SAssgSub (fst $1)(snd $1)(snd $3)) -} -| Expr '<<=' Expr { - (fst $1, AbsPyxell.SAssgBShl (fst $1)(snd $1)(snd $3)) -} -| Expr '>>=' Expr { - (fst $1, AbsPyxell.SAssgBShr (fst $1)(snd $1)(snd $3)) -} -| Expr '&=' Expr { - (fst $1, AbsPyxell.SAssgBAnd (fst $1)(snd $1)(snd $3)) -} -| Expr '|=' Expr { - (fst $1, AbsPyxell.SAssgBOr (fst $1)(snd $1)(snd $3)) -} -| Expr '$=' Expr { - (fst $1, AbsPyxell.SAssgBXor (fst $1)(snd $1)(snd $3)) -} -| Expr '??=' Expr { - (fst $1, AbsPyxell.SAssgCoalesce (fst $1)(snd $1)(snd $3)) -} -| 'if' ListBranch Else { - (Just (tokenLineCol $1), AbsPyxell.SIf (Just (tokenLineCol $1)) (snd $2)(snd $3)) -} -| 'while' Expr 'do' Block { - (Just (tokenLineCol $1), AbsPyxell.SWhile (Just (tokenLineCol $1)) (snd $2)(snd $4)) -} -| 'until' Expr 'do' Block { - (Just (tokenLineCol $1), AbsPyxell.SUntil (Just (tokenLineCol $1)) (snd $2)(snd $4)) -} -| 'for' Expr 'in' Expr 'do' Block { - (Just (tokenLineCol $1), AbsPyxell.SFor (Just (tokenLineCol $1)) (snd $2)(snd $4)(snd $6)) -} -| 'for' Expr 'in' Expr 'step' Expr 'do' Block { - (Just (tokenLineCol $1), AbsPyxell.SForStep (Just (tokenLineCol $1)) (snd $2)(snd $4)(snd $6)(snd $8)) -} -| 'continue' { - (Just (tokenLineCol $1), AbsPyxell.SContinue (Just (tokenLineCol $1))) -} -| 'break' { - (Just (tokenLineCol $1), AbsPyxell.SBreak (Just (tokenLineCol $1))) -} - -Use :: { - (Maybe (Int, Int), Use (Maybe (Int, Int))) -} -: { - (Nothing, AbsPyxell.UAll Nothing) -} -| 'only' ListIdent { - (Just (tokenLineCol $1), AbsPyxell.UOnly (Just (tokenLineCol $1)) (snd $2)) -} -| 'hiding' ListIdent { - (Just (tokenLineCol $1), AbsPyxell.UHiding (Just (tokenLineCol $1)) (snd $2)) -} -| 'as' Ident { - (Just (tokenLineCol $1), AbsPyxell.UAs (Just (tokenLineCol $1)) (snd $2)) -} - -CExt :: { - (Maybe (Int, Int), CExt (Maybe (Int, Int))) -} -: { - (Nothing, AbsPyxell.CNoExt Nothing) -} -| '(' Type4 ')' { - (Just (tokenLineCol $1), AbsPyxell.CExt (Just (tokenLineCol $1)) (snd $2)) -} - -CMemb :: { - (Maybe (Int, Int), CMemb (Maybe (Int, Int))) -} -: Type Ident { - (fst $1, AbsPyxell.MField (fst $1)(snd $1)(snd $2)) -} -| Type Ident ':' Expr { - (fst $1, AbsPyxell.MFieldDefault (fst $1)(snd $1)(snd $2)(snd $4)) -} -| 'func' Ident '(' ListFArg ')' FRet MBody { - (Just (tokenLineCol $1), AbsPyxell.MMethodCode (Just (tokenLineCol $1)) (snd $2)(snd $4)(snd $6)(snd $7)) -} -| 'constructor' '(' ListFArg ')' 'def' Block { - (Just (tokenLineCol $1), AbsPyxell.MConstructor (Just (tokenLineCol $1)) (snd $3)(snd $6)) -} - -MBody :: { - (Maybe (Int, Int), MBody (Maybe (Int, Int))) -} -: 'def' Block { - (Just (tokenLineCol $1), AbsPyxell.MDef (Just (tokenLineCol $1)) (snd $2)) -} -| 'abstract' { - (Just (tokenLineCol $1), AbsPyxell.MAbstract (Just (tokenLineCol $1))) -} - -ListCMemb :: { - (Maybe (Int, Int), [CMemb (Maybe (Int, Int))]) -} -: { - (Nothing, []) -} -| CMemb { - (fst $1, (:[]) (snd $1)) -} -| CMemb ';' ListCMemb { - (fst $1, (:) (snd $1)(snd $3)) -} - -FVars :: { - (Maybe (Int, Int), FVars (Maybe (Int, Int))) -} -: { - (Nothing, AbsPyxell.FStd Nothing) -} -| '<' ListFVar '>' { - (Just (tokenLineCol $1), AbsPyxell.FGen (Just (tokenLineCol $1)) (snd $2)) -} - -FVar :: { - (Maybe (Int, Int), FVar (Maybe (Int, Int))) -} -: Type Ident { - (fst $1, AbsPyxell.FVar (fst $1)(snd $1)(snd $2)) -} - -ListFVar :: { - (Maybe (Int, Int), [FVar (Maybe (Int, Int))]) -} -: { - (Nothing, []) -} -| FVar { - (fst $1, (:[]) (snd $1)) -} -| FVar ',' ListFVar { - (fst $1, (:) (snd $1)(snd $3)) -} - -FArg :: { - (Maybe (Int, Int), FArg (Maybe (Int, Int))) -} -: Type Ident { - (fst $1, AbsPyxell.ANoDefault (fst $1)(snd $1)(snd $2)) -} -| Type Ident ':' Expr2 { - (fst $1, AbsPyxell.ADefault (fst $1)(snd $1)(snd $2)(snd $4)) -} - -ListFArg :: { - (Maybe (Int, Int), [FArg (Maybe (Int, Int))]) -} -: { - (Nothing, []) -} -| FArg { - (fst $1, (:[]) (snd $1)) -} -| FArg ',' ListFArg { - (fst $1, (:) (snd $1)(snd $3)) -} - -FRet :: { - (Maybe (Int, Int), FRet (Maybe (Int, Int))) -} -: { - (Nothing, AbsPyxell.FProc Nothing) -} -| Type { - (fst $1, AbsPyxell.FFunc (fst $1)(snd $1)) -} - -FBody :: { - (Maybe (Int, Int), FBody (Maybe (Int, Int))) -} -: 'def' Block { - (Just (tokenLineCol $1), AbsPyxell.FDef (Just (tokenLineCol $1)) (snd $2)) -} -| 'extern' { - (Just (tokenLineCol $1), AbsPyxell.FExtern (Just (tokenLineCol $1))) -} - -Block :: { - (Maybe (Int, Int), Block (Maybe (Int, Int))) -} -: '{' ListStmt '}' { - (Just (tokenLineCol $1), AbsPyxell.SBlock (Just (tokenLineCol $1)) (snd $2)) -} - -ListExpr :: { - (Maybe (Int, Int), [Expr (Maybe (Int, Int))]) -} -: Expr { - (fst $1, (:[]) (snd $1)) -} -| Expr '=' ListExpr { - (fst $1, (:) (snd $1)(snd $3)) -} - -Branch :: { - (Maybe (Int, Int), Branch (Maybe (Int, Int))) -} -: Expr 'do' Block { - (fst $1, AbsPyxell.BElIf (fst $1)(snd $1)(snd $3)) -} - -ListBranch :: { - (Maybe (Int, Int), [Branch (Maybe (Int, Int))]) -} -: { - (Nothing, []) -} -| Branch { - (fst $1, (:[]) (snd $1)) -} -| Branch 'elif' ListBranch { - (fst $1, (:) (snd $1)(snd $3)) -} - -Else :: { - (Maybe (Int, Int), Else (Maybe (Int, Int))) -} -: 'else' 'do' Block { - (Just (tokenLineCol $1), AbsPyxell.EElse (Just (tokenLineCol $1)) (snd $3)) -} -| { - (Nothing, AbsPyxell.EEmpty Nothing) -} - -Expr13 :: { - (Maybe (Int, Int), Expr (Maybe (Int, Int))) -} -: '_' { - (Just (tokenLineCol $1), AbsPyxell.EStub (Just (tokenLineCol $1))) -} -| Integer { - (fst $1, AbsPyxell.EInt (fst $1)(snd $1)) -} -| Double { - (fst $1, AbsPyxell.EFloat (fst $1)(snd $1)) -} -| 'true' { - (Just (tokenLineCol $1), AbsPyxell.ETrue (Just (tokenLineCol $1))) -} -| 'false' { - (Just (tokenLineCol $1), AbsPyxell.EFalse (Just (tokenLineCol $1))) -} -| Char { - (fst $1, AbsPyxell.EChar (fst $1)(snd $1)) -} -| String { - (fst $1, AbsPyxell.EString (fst $1)(snd $1)) -} -| '[' ListExpr2 ']' { - (Just (tokenLineCol $1), AbsPyxell.EArray (Just (tokenLineCol $1)) (snd $2)) -} -| '[' Expr2 ListACpr ']' { - (Just (tokenLineCol $1), AbsPyxell.EArrayCpr (Just (tokenLineCol $1)) (snd $2)(snd $3)) -} -| 'null' { - (Just (tokenLineCol $1), AbsPyxell.ENull (Just (tokenLineCol $1))) -} -| Ident { - (fst $1, AbsPyxell.EVar (fst $1)(snd $1)) -} -| Expr13 '[' Expr ']' { - (fst $1, AbsPyxell.EIndex (fst $1)(snd $1)(snd $3)) -} -| Expr13 '[' ListSlice ']' { - (fst $1, AbsPyxell.ESlice (fst $1)(snd $1)(snd $3)) -} -| Expr13 '.' Ident { - (fst $1, AbsPyxell.EAttr (fst $1)(snd $1)(snd $3)) -} -| Expr13 '?.' Ident { - (fst $1, AbsPyxell.ESafeAttr (fst $1)(snd $1)(snd $3)) -} -| Expr13 '(' ListCArg ')' { - (fst $1, AbsPyxell.ECall (fst $1)(snd $1)(snd $3)) -} -| 'super' '(' ListCArg ')' { - (Just (tokenLineCol $1), AbsPyxell.ESuper (Just (tokenLineCol $1)) (snd $3)) -} -| Expr13 '!' { - (fst $1, AbsPyxell.EAssert (fst $1)(snd $1)) -} -| '(' Expr ')' { - (Just (tokenLineCol $1), snd $2) -} - -ACpr :: { - (Maybe (Int, Int), ACpr (Maybe (Int, Int))) -} -: 'for' Expr 'in' Expr { - (Just (tokenLineCol $1), AbsPyxell.CprFor (Just (tokenLineCol $1)) (snd $2)(snd $4)) -} -| 'for' Expr 'in' Expr 'step' Expr { - (Just (tokenLineCol $1), AbsPyxell.CprForStep (Just (tokenLineCol $1)) (snd $2)(snd $4)(snd $6)) -} -| 'if' Expr { - (Just (tokenLineCol $1), AbsPyxell.CprIf (Just (tokenLineCol $1)) (snd $2)) -} - -ListACpr :: { - (Maybe (Int, Int), [ACpr (Maybe (Int, Int))]) -} -: ACpr { - (fst $1, (:[]) (snd $1)) -} -| ACpr ListACpr { - (fst $1, (:) (snd $1)(snd $2)) -} - -Slice :: { - (Maybe (Int, Int), Slice (Maybe (Int, Int))) -} -: Expr { - (fst $1, AbsPyxell.SliceExpr (fst $1)(snd $1)) -} -| { - (Nothing, AbsPyxell.SliceNone Nothing) -} - -ListSlice :: { - (Maybe (Int, Int), [Slice (Maybe (Int, Int))]) -} -: Slice { - (fst $1, (:[]) (snd $1)) -} -| Slice ':' ListSlice { - (fst $1, (:) (snd $1)(snd $3)) -} - -CArg :: { - (Maybe (Int, Int), CArg (Maybe (Int, Int))) -} -: Expr2 { - (fst $1, AbsPyxell.APos (fst $1)(snd $1)) -} -| Ident '=' Expr2 { - (fst $1, AbsPyxell.ANamed (fst $1)(snd $1)(snd $3)) -} - -ListCArg :: { - (Maybe (Int, Int), [CArg (Maybe (Int, Int))]) -} -: { - (Nothing, []) -} -| CArg { - (fst $1, (:[]) (snd $1)) -} -| CArg ',' ListCArg { - (fst $1, (:) (snd $1)(snd $3)) -} - -Expr12 :: { - (Maybe (Int, Int), Expr (Maybe (Int, Int))) -} -: Expr13 '^' Expr12 { - (fst $1, AbsPyxell.EPow (fst $1)(snd $1)(snd $3)) -} -| '-' Expr12 { - (Just (tokenLineCol $1), AbsPyxell.EMinus (Just (tokenLineCol $1)) (snd $2)) -} -| '+' Expr12 { - (Just (tokenLineCol $1), AbsPyxell.EPlus (Just (tokenLineCol $1)) (snd $2)) -} -| '~' Expr12 { - (Just (tokenLineCol $1), AbsPyxell.EBNot (Just (tokenLineCol $1)) (snd $2)) -} -| Expr13 { - (fst $1, snd $1) -} - -Expr11 :: { - (Maybe (Int, Int), Expr (Maybe (Int, Int))) -} -: Expr11 '*' Expr12 { - (fst $1, AbsPyxell.EMul (fst $1)(snd $1)(snd $3)) -} -| Expr11 '/' Expr12 { - (fst $1, AbsPyxell.EDiv (fst $1)(snd $1)(snd $3)) -} -| Expr11 '%' Expr12 { - (fst $1, AbsPyxell.EMod (fst $1)(snd $1)(snd $3)) -} -| Expr12 { - (fst $1, snd $1) -} - -Expr10 :: { - (Maybe (Int, Int), Expr (Maybe (Int, Int))) -} -: Expr10 '+' Expr11 { - (fst $1, AbsPyxell.EAdd (fst $1)(snd $1)(snd $3)) -} -| Expr10 '-' Expr11 { - (fst $1, AbsPyxell.ESub (fst $1)(snd $1)(snd $3)) -} -| Expr11 { - (fst $1, snd $1) -} - -Expr9 :: { - (Maybe (Int, Int), Expr (Maybe (Int, Int))) -} -: Expr9 '<<' Expr10 { - (fst $1, AbsPyxell.EBShl (fst $1)(snd $1)(snd $3)) -} -| Expr9 '>>' Expr10 { - (fst $1, AbsPyxell.EBShr (fst $1)(snd $1)(snd $3)) -} -| Expr10 { - (fst $1, snd $1) -} - -Expr8 :: { - (Maybe (Int, Int), Expr (Maybe (Int, Int))) -} -: Expr8 '&' Expr9 { - (fst $1, AbsPyxell.EBAnd (fst $1)(snd $1)(snd $3)) -} -| Expr9 { - (fst $1, snd $1) -} - -Expr7 :: { - (Maybe (Int, Int), Expr (Maybe (Int, Int))) -} -: Expr7 '|' Expr8 { - (fst $1, AbsPyxell.EBOr (fst $1)(snd $1)(snd $3)) -} -| Expr7 '$' Expr8 { - (fst $1, AbsPyxell.EBXor (fst $1)(snd $1)(snd $3)) -} -| Expr8 { - (fst $1, snd $1) -} - -Expr6 :: { - (Maybe (Int, Int), Expr (Maybe (Int, Int))) -} -: Expr7 '..' Expr7 { - (fst $1, AbsPyxell.ERangeIncl (fst $1)(snd $1)(snd $3)) -} -| Expr7 '...' Expr7 { - (fst $1, AbsPyxell.ERangeExcl (fst $1)(snd $1)(snd $3)) -} -| Expr7 '...' { - (fst $1, AbsPyxell.ERangeInf (fst $1)(snd $1)) -} -| Expr7 { - (fst $1, snd $1) -} - -Expr5 :: { - (Maybe (Int, Int), Expr (Maybe (Int, Int))) -} -: Cmp { - (fst $1, AbsPyxell.ECmp (fst $1)(snd $1)) -} -| 'not' Expr5 { - (Just (tokenLineCol $1), AbsPyxell.ENot (Just (tokenLineCol $1)) (snd $2)) -} -| Expr6 { - (fst $1, snd $1) -} - -Cmp :: { - (Maybe (Int, Int), Cmp (Maybe (Int, Int))) -} -: Expr6 CmpOp Expr6 { - (fst $1, AbsPyxell.Cmp1 (fst $1)(snd $1)(snd $2)(snd $3)) -} -| Expr6 CmpOp Cmp { - (fst $1, AbsPyxell.Cmp2 (fst $1)(snd $1)(snd $2)(snd $3)) -} - -CmpOp :: { - (Maybe (Int, Int), CmpOp (Maybe (Int, Int))) -} -: '==' { - (Just (tokenLineCol $1), AbsPyxell.CmpEQ (Just (tokenLineCol $1))) -} -| '!=' { - (Just (tokenLineCol $1), AbsPyxell.CmpNE (Just (tokenLineCol $1))) -} -| '<' { - (Just (tokenLineCol $1), AbsPyxell.CmpLT (Just (tokenLineCol $1))) -} -| '<=' { - (Just (tokenLineCol $1), AbsPyxell.CmpLE (Just (tokenLineCol $1))) -} -| '>' { - (Just (tokenLineCol $1), AbsPyxell.CmpGT (Just (tokenLineCol $1))) -} -| '>=' { - (Just (tokenLineCol $1), AbsPyxell.CmpGE (Just (tokenLineCol $1))) -} - -Expr4 :: { - (Maybe (Int, Int), Expr (Maybe (Int, Int))) -} -: Expr5 'and' Expr4 { - (fst $1, AbsPyxell.EAnd (fst $1)(snd $1)(snd $3)) -} -| Expr5 { - (fst $1, snd $1) -} - -Expr3 :: { - (Maybe (Int, Int), Expr (Maybe (Int, Int))) -} -: Expr4 'or' Expr3 { - (fst $1, AbsPyxell.EOr (fst $1)(snd $1)(snd $3)) -} -| Expr4 { - (fst $1, snd $1) -} - -Expr1 :: { - (Maybe (Int, Int), Expr (Maybe (Int, Int))) -} -: ListExpr3 { - (fst $1, AbsPyxell.ETuple (fst $1)(snd $1)) -} -| Expr2 { - (fst $1, snd $1) -} - -ListExpr3 :: { - (Maybe (Int, Int), [Expr (Maybe (Int, Int))]) -} -: Expr3 { - (fst $1, (:[]) (snd $1)) -} -| Expr3 ',' ListExpr3 { - (fst $1, (:) (snd $1)(snd $3)) -} - -ListExpr2 :: { - (Maybe (Int, Int), [Expr (Maybe (Int, Int))]) -} -: { - (Nothing, []) -} -| Expr2 { - (fst $1, (:[]) (snd $1)) -} -| Expr2 ',' ListExpr2 { - (fst $1, (:) (snd $1)(snd $3)) -} - -Expr2 :: { - (Maybe (Int, Int), Expr (Maybe (Int, Int))) -} -: Expr3 '??' Expr2 { - (fst $1, AbsPyxell.ECoalesce (fst $1)(snd $1)(snd $3)) -} -| Expr3 '?' Expr3 ':' Expr2 { - (fst $1, AbsPyxell.ECond (fst $1)(snd $1)(snd $3)(snd $5)) -} -| 'lambda' ListIdent '->' Expr2 { - (Just (tokenLineCol $1), AbsPyxell.ELambda (Just (tokenLineCol $1)) (snd $2)(snd $4)) -} -| Expr3 { - (fst $1, snd $1) -} - -ListIdent :: { - (Maybe (Int, Int), [Ident]) -} -: { - (Nothing, []) -} -| Ident { - (fst $1, (:[]) (snd $1)) -} -| Ident ',' ListIdent { - (fst $1, (:) (snd $1)(snd $3)) -} - -Expr :: { - (Maybe (Int, Int), Expr (Maybe (Int, Int))) -} -: Expr1 { - (fst $1, snd $1) -} - -{ - -returnM :: a -> Err a -returnM = return - -thenM :: Err a -> (a -> Err b) -> Err b -thenM = (>>=) - -happyError :: [Token] -> Err a -happyError ts = - Bad $ "syntax error at " ++ tokenPos ts ++ - case ts of - [] -> [] - [Err _] -> " due to lexer error" - t:_ -> " before `" ++ id(prToken t) ++ "'" - -myLexer = tokens - -pProgram = (>>= return . snd) . pProgram_internal -pListStmt = (>>= return . snd) . pListStmt_internal -pType4 = (>>= return . snd) . pType4_internal -pType3 = (>>= return . snd) . pType3_internal -pType2 = (>>= return . snd) . pType2_internal -pType1 = (>>= return . snd) . pType1_internal -pListType3 = (>>= return . snd) . pListType3_internal -pListType2 = (>>= return . snd) . pListType2_internal -pListType = (>>= return . snd) . pListType_internal -pType = (>>= return . snd) . pType_internal -pStmt = (>>= return . snd) . pStmt_internal -pUse = (>>= return . snd) . pUse_internal -pCExt = (>>= return . snd) . pCExt_internal -pCMemb = (>>= return . snd) . pCMemb_internal -pMBody = (>>= return . snd) . pMBody_internal -pListCMemb = (>>= return . snd) . pListCMemb_internal -pFVars = (>>= return . snd) . pFVars_internal -pFVar = (>>= return . snd) . pFVar_internal -pListFVar = (>>= return . snd) . pListFVar_internal -pFArg = (>>= return . snd) . pFArg_internal -pListFArg = (>>= return . snd) . pListFArg_internal -pFRet = (>>= return . snd) . pFRet_internal -pFBody = (>>= return . snd) . pFBody_internal -pBlock = (>>= return . snd) . pBlock_internal -pListExpr = (>>= return . snd) . pListExpr_internal -pBranch = (>>= return . snd) . pBranch_internal -pListBranch = (>>= return . snd) . pListBranch_internal -pElse = (>>= return . snd) . pElse_internal -pExpr13 = (>>= return . snd) . pExpr13_internal -pACpr = (>>= return . snd) . pACpr_internal -pListACpr = (>>= return . snd) . pListACpr_internal -pSlice = (>>= return . snd) . pSlice_internal -pListSlice = (>>= return . snd) . pListSlice_internal -pCArg = (>>= return . snd) . pCArg_internal -pListCArg = (>>= return . snd) . pListCArg_internal -pExpr12 = (>>= return . snd) . pExpr12_internal -pExpr11 = (>>= return . snd) . pExpr11_internal -pExpr10 = (>>= return . snd) . pExpr10_internal -pExpr9 = (>>= return . snd) . pExpr9_internal -pExpr8 = (>>= return . snd) . pExpr8_internal -pExpr7 = (>>= return . snd) . pExpr7_internal -pExpr6 = (>>= return . snd) . pExpr6_internal -pExpr5 = (>>= return . snd) . pExpr5_internal -pCmp = (>>= return . snd) . pCmp_internal -pCmpOp = (>>= return . snd) . pCmpOp_internal -pExpr4 = (>>= return . snd) . pExpr4_internal -pExpr3 = (>>= return . snd) . pExpr3_internal -pExpr1 = (>>= return . snd) . pExpr1_internal -pListExpr3 = (>>= return . snd) . pListExpr3_internal -pListExpr2 = (>>= return . snd) . pListExpr2_internal -pExpr2 = (>>= return . snd) . pExpr2_internal -pListIdent = (>>= return . snd) . pListIdent_internal -pExpr = (>>= return . snd) . pExpr_internal -} - diff --git a/src/bnfc/PrintPyxell.hs b/src/bnfc/PrintPyxell.hs deleted file mode 100644 index 5084a37b..00000000 --- a/src/bnfc/PrintPyxell.hs +++ /dev/null @@ -1,362 +0,0 @@ -{-# LANGUAGE FlexibleInstances, OverlappingInstances #-} -{-# OPTIONS_GHC -fno-warn-incomplete-patterns #-} - --- | Pretty-printer for PrintPyxell. --- Generated by the BNF converter. - -module PrintPyxell where - -import AbsPyxell -import Data.Char - --- | The top-level printing method. - -printTree :: Print a => a -> String -printTree = render . prt 0 - -type Doc = [ShowS] -> [ShowS] - -doc :: ShowS -> Doc -doc = (:) - -render :: Doc -> String -render d = rend 0 (map ($ "") $ d []) "" where - rend i ss = case ss of - "[" :ts -> showChar '[' . rend i ts - "(" :ts -> showChar '(' . rend i ts - "{" :ts -> showChar '{' . new (i+1) . rend (i+1) ts - "}" : ";":ts -> new (i-1) . space "}" . showChar ';' . new (i-1) . rend (i-1) ts - "}" :ts -> new (i-1) . showChar '}' . new (i-1) . rend (i-1) ts - ";" :ts -> showChar ';' . new i . rend i ts - t : ts@(p:_) | closingOrPunctuation p -> showString t . rend i ts - t :ts -> space t . rend i ts - _ -> id - new i = showChar '\n' . replicateS (2*i) (showChar ' ') . dropWhile isSpace - space t = showString t . (\s -> if null s then "" else ' ':s) - - closingOrPunctuation :: String -> Bool - closingOrPunctuation [c] = c `elem` closerOrPunct - closingOrPunctuation _ = False - - closerOrPunct :: String - closerOrPunct = ")],;" - -parenth :: Doc -> Doc -parenth ss = doc (showChar '(') . ss . doc (showChar ')') - -concatS :: [ShowS] -> ShowS -concatS = foldr (.) id - -concatD :: [Doc] -> Doc -concatD = foldr (.) id - -replicateS :: Int -> ShowS -> ShowS -replicateS n f = concatS (replicate n f) - --- | The printer class does the job. - -class Print a where - prt :: Int -> a -> Doc - prtList :: Int -> [a] -> Doc - prtList i = concatD . map (prt i) - -instance Print a => Print [a] where - prt = prtList - -instance Print Char where - prt _ s = doc (showChar '\'' . mkEsc '\'' s . showChar '\'') - prtList _ s = doc (showChar '"' . concatS (map (mkEsc '"') s) . showChar '"') - -mkEsc :: Char -> Char -> ShowS -mkEsc q s = case s of - _ | s == q -> showChar '\\' . showChar s - '\\'-> showString "\\\\" - '\n' -> showString "\\n" - '\t' -> showString "\\t" - _ -> showChar s - -prPrec :: Int -> Int -> Doc -> Doc -prPrec i j = if j < i then parenth else id - -instance Print Integer where - prt _ x = doc (shows x) - -instance Print Double where - prt _ x = doc (shows x) - -instance Print Ident where - prt _ (Ident i) = doc (showString i) - prtList _ [] = concatD [] - prtList _ [x] = concatD [prt 0 x] - prtList _ (x:xs) = concatD [prt 0 x, doc (showString ","), prt 0 xs] - -instance Print (Program a) where - prt i e = case e of - Program _ stmts -> prPrec i 0 (concatD [prt 0 stmts]) - -instance Print [Stmt a] where - prt = prtList - -instance Print [Type a] where - prt = prtList - -instance Print (Type a) where - prt i e = case e of - TPtr _ type_ -> prPrec i 4 (concatD [prt 4 type_]) - TArr _ n type_ -> prPrec i 4 (concatD [prt 0 n, prt 4 type_]) - TDeref _ type_ -> prPrec i 4 (concatD [prt 4 type_]) - TUnknown _ -> prPrec i 4 (concatD [doc (showString "Unknown")]) - TVar _ id -> prPrec i 4 (concatD [prt 0 id]) - TVoid _ -> prPrec i 4 (concatD [doc (showString "Void")]) - TInt _ -> prPrec i 4 (concatD [doc (showString "Int")]) - TFloat _ -> prPrec i 4 (concatD [doc (showString "Float")]) - TBool _ -> prPrec i 4 (concatD [doc (showString "Bool")]) - TChar _ -> prPrec i 4 (concatD [doc (showString "Char")]) - TString _ -> prPrec i 4 (concatD [doc (showString "String")]) - TArray _ type_ -> prPrec i 3 (concatD [doc (showString "["), prt 0 type_, doc (showString "]")]) - TNullable _ type_ -> prPrec i 3 (concatD [prt 3 type_, doc (showString "?")]) - TTuple _ types -> prPrec i 2 (concatD [prt 3 types]) - TFunc _ types type_ -> prPrec i 1 (concatD [prt 2 types, doc (showString "->"), prt 1 type_]) - TFuncDef _ id fvars fargs type_ block -> prPrec i 1 (concatD [prt 0 id, prt 0 fvars, prt 0 fargs, prt 0 type_, prt 0 block]) - TFuncAbstract _ id fvars fargs type_ -> prPrec i 1 (concatD [prt 0 id, prt 0 fvars, prt 0 fargs, prt 0 type_]) - TFuncExt _ id fargs type_ -> prPrec i 1 (concatD [prt 0 id, prt 0 fargs, prt 0 type_]) - TClass _ id types cmembs -> prPrec i 1 (concatD [prt 0 id, prt 0 types, prt 0 cmembs]) - TModule _ -> prPrec i 1 (concatD [doc (showString "Module")]) - TAny _ -> prPrec i 1 (concatD [doc (showString "Any")]) - TNum _ -> prPrec i 1 (concatD [doc (showString "Num")]) - prtList 3 [x] = concatD [prt 3 x] - prtList 3 (x:xs) = concatD [prt 3 x, doc (showString "*"), prt 3 xs] - prtList 2 [] = concatD [] - prtList 2 [x] = concatD [prt 2 x] - prtList 2 (x:xs) = concatD [prt 2 x, doc (showString ","), prt 2 xs] - prtList _ [] = concatD [] - prtList _ [x] = concatD [prt 0 x] - prtList _ (x:xs) = concatD [prt 0 x, doc (showString ","), prt 0 xs] - -instance Print (Stmt a) where - prt i e = case e of - SUse _ id use -> prPrec i 0 (concatD [doc (showString "use"), prt 0 id, prt 0 use]) - SClass _ id cext cmembs -> prPrec i 0 (concatD [doc (showString "class"), prt 0 id, prt 0 cext, doc (showString "def"), doc (showString "{"), prt 0 cmembs, doc (showString "}")]) - SFunc _ id fvars fargs fret fbody -> prPrec i 0 (concatD [doc (showString "func"), prt 0 id, prt 0 fvars, doc (showString "("), prt 0 fargs, doc (showString ")"), prt 0 fret, prt 0 fbody]) - SRetVoid _ -> prPrec i 0 (concatD [doc (showString "return")]) - SRetExpr _ expr -> prPrec i 0 (concatD [doc (showString "return"), prt 0 expr]) - SSkip _ -> prPrec i 0 (concatD [doc (showString "skip")]) - SPrint _ expr -> prPrec i 0 (concatD [doc (showString "print"), prt 0 expr]) - SPrintEmpty _ -> prPrec i 0 (concatD [doc (showString "print")]) - SDeclAssg _ type_ id expr -> prPrec i 0 (concatD [prt 2 type_, prt 0 id, doc (showString "="), prt 0 expr]) - SDecl _ type_ id -> prPrec i 0 (concatD [prt 2 type_, prt 0 id]) - SAssg _ exprs -> prPrec i 0 (concatD [prt 0 exprs]) - SAssgPow _ expr1 expr2 -> prPrec i 0 (concatD [prt 0 expr1, doc (showString "^="), prt 0 expr2]) - SAssgMul _ expr1 expr2 -> prPrec i 0 (concatD [prt 0 expr1, doc (showString "*="), prt 0 expr2]) - SAssgDiv _ expr1 expr2 -> prPrec i 0 (concatD [prt 0 expr1, doc (showString "/="), prt 0 expr2]) - SAssgMod _ expr1 expr2 -> prPrec i 0 (concatD [prt 0 expr1, doc (showString "%="), prt 0 expr2]) - SAssgAdd _ expr1 expr2 -> prPrec i 0 (concatD [prt 0 expr1, doc (showString "+="), prt 0 expr2]) - SAssgSub _ expr1 expr2 -> prPrec i 0 (concatD [prt 0 expr1, doc (showString "-="), prt 0 expr2]) - SAssgBShl _ expr1 expr2 -> prPrec i 0 (concatD [prt 0 expr1, doc (showString "<<="), prt 0 expr2]) - SAssgBShr _ expr1 expr2 -> prPrec i 0 (concatD [prt 0 expr1, doc (showString ">>="), prt 0 expr2]) - SAssgBAnd _ expr1 expr2 -> prPrec i 0 (concatD [prt 0 expr1, doc (showString "&="), prt 0 expr2]) - SAssgBOr _ expr1 expr2 -> prPrec i 0 (concatD [prt 0 expr1, doc (showString "|="), prt 0 expr2]) - SAssgBXor _ expr1 expr2 -> prPrec i 0 (concatD [prt 0 expr1, doc (showString "$="), prt 0 expr2]) - SAssgCoalesce _ expr1 expr2 -> prPrec i 0 (concatD [prt 0 expr1, doc (showString "??="), prt 0 expr2]) - SIf _ branchs else_ -> prPrec i 0 (concatD [doc (showString "if"), prt 0 branchs, prt 0 else_]) - SWhile _ expr block -> prPrec i 0 (concatD [doc (showString "while"), prt 0 expr, doc (showString "do"), prt 0 block]) - SUntil _ expr block -> prPrec i 0 (concatD [doc (showString "until"), prt 0 expr, doc (showString "do"), prt 0 block]) - SFor _ expr1 expr2 block -> prPrec i 0 (concatD [doc (showString "for"), prt 0 expr1, doc (showString "in"), prt 0 expr2, doc (showString "do"), prt 0 block]) - SForStep _ expr1 expr2 expr3 block -> prPrec i 0 (concatD [doc (showString "for"), prt 0 expr1, doc (showString "in"), prt 0 expr2, doc (showString "step"), prt 0 expr3, doc (showString "do"), prt 0 block]) - SContinue _ -> prPrec i 0 (concatD [doc (showString "continue")]) - SBreak _ -> prPrec i 0 (concatD [doc (showString "break")]) - prtList _ [] = concatD [] - prtList _ [x] = concatD [prt 0 x] - prtList _ (x:xs) = concatD [prt 0 x, doc (showString ";"), prt 0 xs] - -instance Print (Use a) where - prt i e = case e of - UAll _ -> prPrec i 0 (concatD []) - UOnly _ ids -> prPrec i 0 (concatD [doc (showString "only"), prt 0 ids]) - UHiding _ ids -> prPrec i 0 (concatD [doc (showString "hiding"), prt 0 ids]) - UAs _ id -> prPrec i 0 (concatD [doc (showString "as"), prt 0 id]) - -instance Print (CExt a) where - prt i e = case e of - CNoExt _ -> prPrec i 0 (concatD []) - CExt _ type_ -> prPrec i 0 (concatD [doc (showString "("), prt 4 type_, doc (showString ")")]) - -instance Print (CMemb a) where - prt i e = case e of - MField _ type_ id -> prPrec i 0 (concatD [prt 0 type_, prt 0 id]) - MFieldDefault _ type_ id expr -> prPrec i 0 (concatD [prt 0 type_, prt 0 id, doc (showString ":"), prt 0 expr]) - MMethodCode _ id fargs fret mbody -> prPrec i 0 (concatD [doc (showString "func"), prt 0 id, doc (showString "("), prt 0 fargs, doc (showString ")"), prt 0 fret, prt 0 mbody]) - MConstructor _ fargs block -> prPrec i 0 (concatD [doc (showString "constructor"), doc (showString "("), prt 0 fargs, doc (showString ")"), doc (showString "def"), prt 0 block]) - MMethod _ id type_ -> prPrec i 0 (concatD [prt 0 id, prt 0 type_]) - prtList _ [] = concatD [] - prtList _ [x] = concatD [prt 0 x] - prtList _ (x:xs) = concatD [prt 0 x, doc (showString ";"), prt 0 xs] - -instance Print (MBody a) where - prt i e = case e of - MDef _ block -> prPrec i 0 (concatD [doc (showString "def"), prt 0 block]) - MAbstract _ -> prPrec i 0 (concatD [doc (showString "abstract")]) - -instance Print [CMemb a] where - prt = prtList - -instance Print (FVars a) where - prt i e = case e of - FStd _ -> prPrec i 0 (concatD []) - FGen _ fvars -> prPrec i 0 (concatD [doc (showString "<"), prt 0 fvars, doc (showString ">")]) - -instance Print (FVar a) where - prt i e = case e of - FVar _ type_ id -> prPrec i 0 (concatD [prt 0 type_, prt 0 id]) - prtList _ [] = concatD [] - prtList _ [x] = concatD [prt 0 x] - prtList _ (x:xs) = concatD [prt 0 x, doc (showString ","), prt 0 xs] - -instance Print [FVar a] where - prt = prtList - -instance Print (FArg a) where - prt i e = case e of - ANoDefault _ type_ id -> prPrec i 0 (concatD [prt 0 type_, prt 0 id]) - ADefault _ type_ id expr -> prPrec i 0 (concatD [prt 0 type_, prt 0 id, doc (showString ":"), prt 2 expr]) - prtList _ [] = concatD [] - prtList _ [x] = concatD [prt 0 x] - prtList _ (x:xs) = concatD [prt 0 x, doc (showString ","), prt 0 xs] - -instance Print [FArg a] where - prt = prtList - -instance Print (FRet a) where - prt i e = case e of - FProc _ -> prPrec i 0 (concatD []) - FFunc _ type_ -> prPrec i 0 (concatD [prt 0 type_]) - -instance Print (FBody a) where - prt i e = case e of - FDef _ block -> prPrec i 0 (concatD [doc (showString "def"), prt 0 block]) - FExtern _ -> prPrec i 0 (concatD [doc (showString "extern")]) - -instance Print (Block a) where - prt i e = case e of - SBlock _ stmts -> prPrec i 0 (concatD [doc (showString "{"), prt 0 stmts, doc (showString "}")]) - -instance Print [Expr a] where - prt = prtList - -instance Print (Branch a) where - prt i e = case e of - BElIf _ expr block -> prPrec i 0 (concatD [prt 0 expr, doc (showString "do"), prt 0 block]) - prtList _ [] = concatD [] - prtList _ [x] = concatD [prt 0 x] - prtList _ (x:xs) = concatD [prt 0 x, doc (showString "elif"), prt 0 xs] - -instance Print [Branch a] where - prt = prtList - -instance Print (Else a) where - prt i e = case e of - EElse _ block -> prPrec i 0 (concatD [doc (showString "else"), doc (showString "do"), prt 0 block]) - EEmpty _ -> prPrec i 0 (concatD []) - -instance Print (ACpr a) where - prt i e = case e of - CprFor _ expr1 expr2 -> prPrec i 0 (concatD [doc (showString "for"), prt 0 expr1, doc (showString "in"), prt 0 expr2]) - CprForStep _ expr1 expr2 expr3 -> prPrec i 0 (concatD [doc (showString "for"), prt 0 expr1, doc (showString "in"), prt 0 expr2, doc (showString "step"), prt 0 expr3]) - CprIf _ expr -> prPrec i 0 (concatD [doc (showString "if"), prt 0 expr]) - prtList _ [x] = concatD [prt 0 x] - prtList _ (x:xs) = concatD [prt 0 x, prt 0 xs] - -instance Print [ACpr a] where - prt = prtList - -instance Print (Slice a) where - prt i e = case e of - SliceExpr _ expr -> prPrec i 0 (concatD [prt 0 expr]) - SliceNone _ -> prPrec i 0 (concatD []) - prtList _ [x] = concatD [prt 0 x] - prtList _ (x:xs) = concatD [prt 0 x, doc (showString ":"), prt 0 xs] - -instance Print [Slice a] where - prt = prtList - -instance Print (CArg a) where - prt i e = case e of - APos _ expr -> prPrec i 0 (concatD [prt 2 expr]) - ANamed _ id expr -> prPrec i 0 (concatD [prt 0 id, doc (showString "="), prt 2 expr]) - prtList _ [] = concatD [] - prtList _ [x] = concatD [prt 0 x] - prtList _ (x:xs) = concatD [prt 0 x, doc (showString ","), prt 0 xs] - -instance Print [CArg a] where - prt = prtList - -instance Print (Cmp a) where - prt i e = case e of - Cmp1 _ expr1 cmpop expr2 -> prPrec i 0 (concatD [prt 6 expr1, prt 0 cmpop, prt 6 expr2]) - Cmp2 _ expr cmpop cmp -> prPrec i 0 (concatD [prt 6 expr, prt 0 cmpop, prt 0 cmp]) - -instance Print (CmpOp a) where - prt i e = case e of - CmpEQ _ -> prPrec i 0 (concatD [doc (showString "==")]) - CmpNE _ -> prPrec i 0 (concatD [doc (showString "!=")]) - CmpLT _ -> prPrec i 0 (concatD [doc (showString "<")]) - CmpLE _ -> prPrec i 0 (concatD [doc (showString "<=")]) - CmpGT _ -> prPrec i 0 (concatD [doc (showString ">")]) - CmpGE _ -> prPrec i 0 (concatD [doc (showString ">=")]) - -instance Print [Ident] where - prt = prtList - -instance Print (Expr a) where - prt i e = case e of - EStub _ -> prPrec i 13 (concatD [doc (showString "_")]) - EInt _ n -> prPrec i 13 (concatD [prt 0 n]) - EFloat _ d -> prPrec i 13 (concatD [prt 0 d]) - ETrue _ -> prPrec i 13 (concatD [doc (showString "true")]) - EFalse _ -> prPrec i 13 (concatD [doc (showString "false")]) - EChar _ c -> prPrec i 13 (concatD [prt 0 c]) - EString _ str -> prPrec i 13 (concatD [prt 0 str]) - EArray _ exprs -> prPrec i 13 (concatD [doc (showString "["), prt 2 exprs, doc (showString "]")]) - EArrayCpr _ expr acprs -> prPrec i 13 (concatD [doc (showString "["), prt 2 expr, prt 0 acprs, doc (showString "]")]) - ENull _ -> prPrec i 13 (concatD [doc (showString "null")]) - EVar _ id -> prPrec i 13 (concatD [prt 0 id]) - EIndex _ expr1 expr2 -> prPrec i 13 (concatD [prt 13 expr1, doc (showString "["), prt 0 expr2, doc (showString "]")]) - ESlice _ expr slices -> prPrec i 13 (concatD [prt 13 expr, doc (showString "["), prt 0 slices, doc (showString "]")]) - EAttr _ expr id -> prPrec i 13 (concatD [prt 13 expr, doc (showString "."), prt 0 id]) - ESafeAttr _ expr id -> prPrec i 13 (concatD [prt 13 expr, doc (showString "?."), prt 0 id]) - ECall _ expr cargs -> prPrec i 13 (concatD [prt 13 expr, doc (showString "("), prt 0 cargs, doc (showString ")")]) - ESuper _ cargs -> prPrec i 13 (concatD [doc (showString "super"), doc (showString "("), prt 0 cargs, doc (showString ")")]) - EAssert _ expr -> prPrec i 13 (concatD [prt 13 expr, doc (showString "!")]) - EPow _ expr1 expr2 -> prPrec i 12 (concatD [prt 13 expr1, doc (showString "^"), prt 12 expr2]) - EMinus _ expr -> prPrec i 12 (concatD [doc (showString "-"), prt 12 expr]) - EPlus _ expr -> prPrec i 12 (concatD [doc (showString "+"), prt 12 expr]) - EBNot _ expr -> prPrec i 12 (concatD [doc (showString "~"), prt 12 expr]) - EMul _ expr1 expr2 -> prPrec i 11 (concatD [prt 11 expr1, doc (showString "*"), prt 12 expr2]) - EDiv _ expr1 expr2 -> prPrec i 11 (concatD [prt 11 expr1, doc (showString "/"), prt 12 expr2]) - EMod _ expr1 expr2 -> prPrec i 11 (concatD [prt 11 expr1, doc (showString "%"), prt 12 expr2]) - EAdd _ expr1 expr2 -> prPrec i 10 (concatD [prt 10 expr1, doc (showString "+"), prt 11 expr2]) - ESub _ expr1 expr2 -> prPrec i 10 (concatD [prt 10 expr1, doc (showString "-"), prt 11 expr2]) - EBShl _ expr1 expr2 -> prPrec i 9 (concatD [prt 9 expr1, doc (showString "<<"), prt 10 expr2]) - EBShr _ expr1 expr2 -> prPrec i 9 (concatD [prt 9 expr1, doc (showString ">>"), prt 10 expr2]) - EBAnd _ expr1 expr2 -> prPrec i 8 (concatD [prt 8 expr1, doc (showString "&"), prt 9 expr2]) - EBOr _ expr1 expr2 -> prPrec i 7 (concatD [prt 7 expr1, doc (showString "|"), prt 8 expr2]) - EBXor _ expr1 expr2 -> prPrec i 7 (concatD [prt 7 expr1, doc (showString "$"), prt 8 expr2]) - ERangeIncl _ expr1 expr2 -> prPrec i 6 (concatD [prt 7 expr1, doc (showString ".."), prt 7 expr2]) - ERangeExcl _ expr1 expr2 -> prPrec i 6 (concatD [prt 7 expr1, doc (showString "..."), prt 7 expr2]) - ERangeInf _ expr -> prPrec i 6 (concatD [prt 7 expr, doc (showString "...")]) - ECmp _ cmp -> prPrec i 5 (concatD [prt 0 cmp]) - ENot _ expr -> prPrec i 5 (concatD [doc (showString "not"), prt 5 expr]) - EAnd _ expr1 expr2 -> prPrec i 4 (concatD [prt 5 expr1, doc (showString "and"), prt 4 expr2]) - EOr _ expr1 expr2 -> prPrec i 3 (concatD [prt 4 expr1, doc (showString "or"), prt 3 expr2]) - ETuple _ exprs -> prPrec i 1 (concatD [prt 3 exprs]) - ECoalesce _ expr1 expr2 -> prPrec i 2 (concatD [prt 3 expr1, doc (showString "??"), prt 2 expr2]) - ECond _ expr1 expr2 expr3 -> prPrec i 2 (concatD [prt 3 expr1, doc (showString "?"), prt 3 expr2, doc (showString ":"), prt 2 expr3]) - ELambda _ ids expr -> prPrec i 2 (concatD [doc (showString "lambda"), prt 0 ids, doc (showString "->"), prt 2 expr]) - prtList 3 [x] = concatD [prt 3 x] - prtList 3 (x:xs) = concatD [prt 3 x, doc (showString ","), prt 3 xs] - prtList 2 [] = concatD [] - prtList 2 [x] = concatD [prt 2 x] - prtList 2 (x:xs) = concatD [prt 2 x, doc (showString ","), prt 2 xs] - prtList _ [x] = concatD [prt 0 x] - prtList _ (x:xs) = concatD [prt 0 x, doc (showString "="), prt 0 xs] - diff --git a/src/bnfc/SkelPyxell.hs b/src/bnfc/SkelPyxell.hs deleted file mode 100644 index 894f7dab..00000000 --- a/src/bnfc/SkelPyxell.hs +++ /dev/null @@ -1,194 +0,0 @@ -module SkelPyxell where - --- Haskell module generated by the BNF converter - -import AbsPyxell -import ErrM -type Result = Err String - -failure :: Show a => a -> Result -failure x = Bad $ "Undefined case: " ++ show x - -transIdent :: Ident -> Result -transIdent x = case x of - Ident string -> failure x -transProgram :: Show a => Program a -> Result -transProgram x = case x of - Program _ stmts -> failure x -transType :: Show a => Type a -> Result -transType x = case x of - TPtr _ type_ -> failure x - TArr _ integer type_ -> failure x - TDeref _ type_ -> failure x - TUnknown _ -> failure x - TVar _ ident -> failure x - TVoid _ -> failure x - TInt _ -> failure x - TFloat _ -> failure x - TBool _ -> failure x - TChar _ -> failure x - TString _ -> failure x - TArray _ type_ -> failure x - TNullable _ type_ -> failure x - TTuple _ types -> failure x - TFunc _ types type_ -> failure x - TFuncDef _ ident fvars fargs type_ block -> failure x - TFuncAbstract _ ident fvars fargs type_ -> failure x - TFuncExt _ ident fargs type_ -> failure x - TClass _ ident types cmembs -> failure x - TModule _ -> failure x - TAny _ -> failure x - TNum _ -> failure x -transStmt :: Show a => Stmt a -> Result -transStmt x = case x of - SUse _ ident use -> failure x - SClass _ ident cext cmembs -> failure x - SFunc _ ident fvars fargs fret fbody -> failure x - SRetVoid _ -> failure x - SRetExpr _ expr -> failure x - SSkip _ -> failure x - SPrint _ expr -> failure x - SPrintEmpty _ -> failure x - SDeclAssg _ type_ ident expr -> failure x - SDecl _ type_ ident -> failure x - SAssg _ exprs -> failure x - SAssgPow _ expr1 expr2 -> failure x - SAssgMul _ expr1 expr2 -> failure x - SAssgDiv _ expr1 expr2 -> failure x - SAssgMod _ expr1 expr2 -> failure x - SAssgAdd _ expr1 expr2 -> failure x - SAssgSub _ expr1 expr2 -> failure x - SAssgBShl _ expr1 expr2 -> failure x - SAssgBShr _ expr1 expr2 -> failure x - SAssgBAnd _ expr1 expr2 -> failure x - SAssgBOr _ expr1 expr2 -> failure x - SAssgBXor _ expr1 expr2 -> failure x - SAssgCoalesce _ expr1 expr2 -> failure x - SIf _ branchs else_ -> failure x - SWhile _ expr block -> failure x - SUntil _ expr block -> failure x - SFor _ expr1 expr2 block -> failure x - SForStep _ expr1 expr2 expr3 block -> failure x - SContinue _ -> failure x - SBreak _ -> failure x -transUse :: Show a => Use a -> Result -transUse x = case x of - UAll _ -> failure x - UOnly _ idents -> failure x - UHiding _ idents -> failure x - UAs _ ident -> failure x -transCExt :: Show a => CExt a -> Result -transCExt x = case x of - CNoExt _ -> failure x - CExt _ type_ -> failure x -transCMemb :: Show a => CMemb a -> Result -transCMemb x = case x of - MField _ type_ ident -> failure x - MFieldDefault _ type_ ident expr -> failure x - MMethodCode _ ident fargs fret mbody -> failure x - MConstructor _ fargs block -> failure x - MMethod _ ident type_ -> failure x -transMBody :: Show a => MBody a -> Result -transMBody x = case x of - MDef _ block -> failure x - MAbstract _ -> failure x -transFVars :: Show a => FVars a -> Result -transFVars x = case x of - FStd _ -> failure x - FGen _ fvars -> failure x -transFVar :: Show a => FVar a -> Result -transFVar x = case x of - FVar _ type_ ident -> failure x -transFArg :: Show a => FArg a -> Result -transFArg x = case x of - ANoDefault _ type_ ident -> failure x - ADefault _ type_ ident expr -> failure x -transFRet :: Show a => FRet a -> Result -transFRet x = case x of - FProc _ -> failure x - FFunc _ type_ -> failure x -transFBody :: Show a => FBody a -> Result -transFBody x = case x of - FDef _ block -> failure x - FExtern _ -> failure x -transBlock :: Show a => Block a -> Result -transBlock x = case x of - SBlock _ stmts -> failure x -transBranch :: Show a => Branch a -> Result -transBranch x = case x of - BElIf _ expr block -> failure x -transElse :: Show a => Else a -> Result -transElse x = case x of - EElse _ block -> failure x - EEmpty _ -> failure x -transACpr :: Show a => ACpr a -> Result -transACpr x = case x of - CprFor _ expr1 expr2 -> failure x - CprForStep _ expr1 expr2 expr3 -> failure x - CprIf _ expr -> failure x -transSlice :: Show a => Slice a -> Result -transSlice x = case x of - SliceExpr _ expr -> failure x - SliceNone _ -> failure x -transCArg :: Show a => CArg a -> Result -transCArg x = case x of - APos _ expr -> failure x - ANamed _ ident expr -> failure x -transCmp :: Show a => Cmp a -> Result -transCmp x = case x of - Cmp1 _ expr1 cmpop expr2 -> failure x - Cmp2 _ expr cmpop cmp -> failure x -transCmpOp :: Show a => CmpOp a -> Result -transCmpOp x = case x of - CmpEQ _ -> failure x - CmpNE _ -> failure x - CmpLT _ -> failure x - CmpLE _ -> failure x - CmpGT _ -> failure x - CmpGE _ -> failure x -transExpr :: Show a => Expr a -> Result -transExpr x = case x of - EStub _ -> failure x - EInt _ integer -> failure x - EFloat _ double -> failure x - ETrue _ -> failure x - EFalse _ -> failure x - EChar _ char -> failure x - EString _ string -> failure x - EArray _ exprs -> failure x - EArrayCpr _ expr acprs -> failure x - ENull _ -> failure x - EVar _ ident -> failure x - EIndex _ expr1 expr2 -> failure x - ESlice _ expr slices -> failure x - EAttr _ expr ident -> failure x - ESafeAttr _ expr ident -> failure x - ECall _ expr cargs -> failure x - ESuper _ cargs -> failure x - EAssert _ expr -> failure x - EPow _ expr1 expr2 -> failure x - EMinus _ expr -> failure x - EPlus _ expr -> failure x - EBNot _ expr -> failure x - EMul _ expr1 expr2 -> failure x - EDiv _ expr1 expr2 -> failure x - EMod _ expr1 expr2 -> failure x - EAdd _ expr1 expr2 -> failure x - ESub _ expr1 expr2 -> failure x - EBShl _ expr1 expr2 -> failure x - EBShr _ expr1 expr2 -> failure x - EBAnd _ expr1 expr2 -> failure x - EBOr _ expr1 expr2 -> failure x - EBXor _ expr1 expr2 -> failure x - ERangeIncl _ expr1 expr2 -> failure x - ERangeExcl _ expr1 expr2 -> failure x - ERangeInf _ expr -> failure x - ECmp _ cmp -> failure x - ENot _ expr -> failure x - EAnd _ expr1 expr2 -> failure x - EOr _ expr1 expr2 -> failure x - ETuple _ exprs -> failure x - ECoalesce _ expr1 expr2 -> failure x - ECond _ expr1 expr2 expr3 -> failure x - ELambda _ idents expr -> failure x - diff --git a/src/bnfc/TestPyxell.hs b/src/bnfc/TestPyxell.hs deleted file mode 100644 index e3403e6f..00000000 --- a/src/bnfc/TestPyxell.hs +++ /dev/null @@ -1,75 +0,0 @@ --- automatically generated by BNF Converter -module Main where - - -import System.IO ( stdin, hGetContents ) -import System.Environment ( getArgs, getProgName ) -import System.Exit ( exitFailure, exitSuccess ) -import Control.Monad (when) - -import LexPyxell -import ParPyxell -import SkelPyxell -import PrintPyxell -import AbsPyxell -import LayoutPyxell - - - -import ErrM - -type ParseFun a = [Token] -> Err a - -myLLexer = resolveLayout True . myLexer - -type Verbosity = Int - -putStrV :: Verbosity -> String -> IO () -putStrV v s = when (v > 1) $ putStrLn s - -runFile :: (Print a, Show a) => Verbosity -> ParseFun a -> FilePath -> IO () -runFile v p f = putStrLn f >> readFile f >>= run v p - -run :: (Print a, Show a) => Verbosity -> ParseFun a -> String -> IO () -run v p s = let ts = myLLexer s in case p ts of - Bad s -> do putStrLn "\nParse Failed...\n" - putStrV v "Tokens:" - putStrV v $ show ts - putStrLn s - exitFailure - Ok tree -> do putStrLn "\nParse Successful!" - showTree v tree - - exitSuccess - - -showTree :: (Show a, Print a) => Int -> a -> IO () -showTree v tree - = do - putStrV v $ "\n[Abstract Syntax]\n\n" ++ show tree - putStrV v $ "\n[Linearized tree]\n\n" ++ printTree tree - -usage :: IO () -usage = do - putStrLn $ unlines - [ "usage: Call with one of the following argument combinations:" - , " --help Display this help message." - , " (no arguments) Parse stdin verbosely." - , " (files) Parse content of files verbosely." - , " -s (files) Silent mode. Parse content of files silently." - ] - exitFailure - -main :: IO () -main = do - args <- getArgs - case args of - ["--help"] -> usage - [] -> getContents >>= run 2 pProgram - "-s":fs -> mapM_ (runFile 0 pProgram) fs - fs -> mapM_ (runFile 2 pProgram) fs - - - - - diff --git a/src/compiler.py b/src/compiler.py new file mode 100644 index 00000000..c458ae4d --- /dev/null +++ b/src/compiler.py @@ -0,0 +1,103 @@ + +from contextlib import contextmanager + +import llvmlite.ir as ll + +from .antlr.PyxellVisitor import PyxellVisitor + + +### Types ### + +tVoid = ll.VoidType() +tInt = ll.IntType(64) +tChar = ll.IntType(8) + +def tFunc(args, ret=tVoid): + return ll.FunctionType(ret, args) + + +### Visitor ### + +class PyxellCompiler(PyxellVisitor): + + def __init__(self): + self.env = {} + self.builder = ll.IRBuilder() + self.module = ll.Module() + self.builtins = { + 'writeInt': ll.Function(self.module, tFunc([tInt]), 'func.writeInt'), + 'putchar': ll.Function(self.module, tFunc([tChar]), 'putchar'), + } + pass + + ### Helpers ### + + @contextmanager + def local(self): + tmp = self.env.copy() + yield + self.env = tmp + + def get(self, id): + return self.env[str(id)] + + def assign(self, id, value): + id = str(id) + + try: + var = self.env[id] + except KeyError: + var = self.env[id] = self.builder.alloca(value.type) + + self.builder.store(value, var) + + ### Program ### + + def visitProgram(self, ctx): + func = ll.Function(self.module, tFunc([], tInt), 'main') + entry = func.append_basic_block() + self.builder.position_at_end(entry) + self.visitChildren(ctx) + self.builder.position_at_end(func.blocks[-1]) + self.builder.ret(ll.Constant(tInt, 0)) + + ### Statements ### + + def visitStmtPrint(self, ctx): + value = self.visit(ctx.expr()) + self.builder.call(self.builtins['writeInt'], [value]) + self.builder.call(self.builtins['putchar'], [ll.Constant(tChar, ord('\n'))]) + + def visitStmtAssg(self, ctx): + v = self.visit(ctx.expr()) + self.assign(ctx.ID(), v) + + ### Expressions ### + + def visitExprBinaryOp(self, ctx): + instruction = { + '*': self.builder.mul, + '/': self.builder.sdiv, + '%': self.builder.srem, + '+': self.builder.add, + '-': self.builder.sub, + }[ctx.op.text] + return instruction(self.visit(ctx.expr(0)), self.visit(ctx.expr(1))) + + def visitExprUnaryOp(self, ctx): + instruction = { + '+': self.builder.add, + '-': self.builder.sub, + }[ctx.op.text] + return instruction(ll.Constant(tInt, 0), self.visit(ctx.expr())) + + def visitExprParentheses(self, ctx): + return self.visit(ctx.expr()) + + ### Atoms ### + + def visitAtomInt(self, ctx): + return ll.Constant(tInt, ctx.INT()) + + def visitAtomId(self, ctx): + return self.builder.load(self.get(ctx.ID())) diff --git a/src/errors.py b/src/errors.py new file mode 100644 index 00000000..7c930b8f --- /dev/null +++ b/src/errors.py @@ -0,0 +1,5 @@ + +class IndentationError(Exception): + + def __init__(self, line): + super().__init__(f"Indentation error at line {line}.") diff --git a/src/indentation.py b/src/indentation.py new file mode 100644 index 00000000..4f2a8084 --- /dev/null +++ b/src/indentation.py @@ -0,0 +1,49 @@ + +import re + +from .errors import IndentationError + + +def transform_indented_code(code): + """ + Adds braces and semicolons to the code with indents. + """ + lines = code.split('\n') + indents = [''] + new_block = False + + for i in range(len(lines)): + line = lines[i] + match = re.search(r'^(\s*)\S', line) + if not match: + # Skip line with whitespace only. + continue + indent = match.group(1) + prev_indent = indents[-1] + + if new_block: + if not (indent.startswith(prev_indent) and len(indent) > len(indents[-1])): + # New block must be indented more than the previous one. + raise IndentationError(i+1) + indents.append(indent) + new_block = False + else: + while indents: + if indent == indents[-1]: + break + elif indents[-1].startswith(indent): + lines[i-1] += '}' + indents.pop() + else: + raise IndentationError(i+1) + + if re.search(r'\W(do|def)\s*$', line): + lines[i] += '{' + new_block = True + else: + lines[i] += ';' + + indents.pop() + lines[-1] += '}' * len(indents) + + return '\n'.join(lines) diff --git a/src/main.py b/src/main.py new file mode 100644 index 00000000..983f4f8b --- /dev/null +++ b/src/main.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python + +import argparse +import os +import subprocess +from pathlib import Path + +from antlr4 import * + +from .antlr.PyxellLexer import PyxellLexer +from .antlr.PyxellParser import PyxellParser +from .compiler import PyxellCompiler +from .indentation import transform_indented_code + + +# Parse arguments. +parser = argparse.ArgumentParser(prog='pyxell', description="Run Pyxell compiler.") +parser.add_argument('filepath', help="source file path") +parser.add_argument('clangargs', nargs=argparse.REMAINDER, help="other arguments that will be passed to clang") +args = parser.parse_args() + +filepath = Path(args.filepath) +filename, ext = os.path.splitext(filepath) +abspath = Path(__file__).parents[1] + +# Read the code and transform indents. +pyxell_code = filepath.read_text() +pyxell_code = transform_indented_code(pyxell_code) + +# Parse the program. +input_stream = InputStream(pyxell_code) +lexer = PyxellLexer(input_stream) +stream = CommonTokenStream(lexer) +parser = PyxellParser(stream) +tree = parser.program() + +# Generate LLVM code. +compiler = PyxellCompiler() +compiler.visit(tree) +llvm_code = str(compiler.module) + +# Create an executable. +with open(f'{filename}.ll', 'w') as file: + file.write(llvm_code) +subprocess.run(['clang', f'{filename}.ll', f'{abspath / "lib/io.ll"}', f'{abspath / "lib/base.ll"}', '-o', f'{filename}.exe', '-O2'] + args.clangargs) diff --git a/test.py b/test.py index 13e6d73f..09ce3045 100644 --- a/test.py +++ b/test.py @@ -28,7 +28,8 @@ # Run tests that satisfy the pattern. tests = [] for path in glob.glob('test/**/{}*.px'.format('[!_]' if '_' not in args.pattern else ''), recursive=True): - if args.pattern.replace('/', os.path.sep) in path: + path = path.replace(os.path.sep, '/') + if args.pattern in path: tests.append(path) n = len(tests) @@ -40,7 +41,7 @@ with open('tmp.out', 'w') as outfile: try: params = '-target x86_64-pc-windows-gnu' if args.target_windows_gnu else '' - subprocess.check_output(f'pyxell.exe {path} {params}', stderr=subprocess.STDOUT) + subprocess.check_output(f'python -m src.main {path} {params}', stderr=subprocess.STDOUT) except subprocess.CalledProcessError as e: if os.path.isfile(path.replace(".px", ".err")): error_message = e.output.decode() diff --git a/test/good/basic/calc01.out b/test/good/basic/calc01.out index ec635144..3d780f82 100644 --- a/test/good/basic/calc01.out +++ b/test/good/basic/calc01.out @@ -1 +1,2 @@ 9 +20 diff --git a/test/good/basic/calc01.px b/test/good/basic/calc01.px index ba422cae..31c1ed77 100644 --- a/test/good/basic/calc01.px +++ b/test/good/basic/calc01.px @@ -1,4 +1,5 @@ a = 2 b = 3 -print a + b + a * b + a - b - -b / -a +print a + b + a * b + a - b + -b / --a +print (a + b) * 4 From f635aa21fed22c94b5a148cfc26e001cb530937f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Mon, 30 Sep 2019 22:04:09 +0200 Subject: [PATCH 002/100] Chained assignments --- src/Pyxell.g4 | 2 +- src/antlr/Pyxell.interp | 2 +- src/antlr/PyxellParser.py | 117 +++++++++++++++++++++----------------- src/compiler.py | 5 +- 4 files changed, 70 insertions(+), 56 deletions(-) diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index dcbd1487..112d50ee 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -6,7 +6,7 @@ program stmt : 'print' expr ';' # StmtPrint - | ID '=' expr ';' # StmtAssg + | (ID '=')* expr ';' # StmtAssg ; expr diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index 23c8a4e0..7a022452 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -38,4 +38,4 @@ atom atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 15, 55, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 3, 2, 7, 2, 12, 10, 2, 12, 2, 14, 2, 15, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 28, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 38, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 46, 10, 4, 12, 4, 14, 4, 49, 11, 4, 3, 5, 3, 5, 5, 5, 53, 10, 5, 3, 5, 2, 3, 6, 6, 2, 4, 6, 8, 2, 4, 3, 2, 9, 10, 3, 2, 6, 8, 2, 57, 2, 13, 3, 2, 2, 2, 4, 27, 3, 2, 2, 2, 6, 37, 3, 2, 2, 2, 8, 52, 3, 2, 2, 2, 10, 12, 5, 4, 3, 2, 11, 10, 3, 2, 2, 2, 12, 15, 3, 2, 2, 2, 13, 11, 3, 2, 2, 2, 13, 14, 3, 2, 2, 2, 14, 16, 3, 2, 2, 2, 15, 13, 3, 2, 2, 2, 16, 17, 7, 2, 2, 3, 17, 3, 3, 2, 2, 2, 18, 19, 7, 3, 2, 2, 19, 20, 5, 6, 4, 2, 20, 21, 7, 4, 2, 2, 21, 28, 3, 2, 2, 2, 22, 23, 7, 14, 2, 2, 23, 24, 7, 5, 2, 2, 24, 25, 5, 6, 4, 2, 25, 26, 7, 4, 2, 2, 26, 28, 3, 2, 2, 2, 27, 18, 3, 2, 2, 2, 27, 22, 3, 2, 2, 2, 28, 5, 3, 2, 2, 2, 29, 30, 8, 4, 1, 2, 30, 31, 9, 2, 2, 2, 31, 38, 5, 6, 4, 5, 32, 33, 7, 11, 2, 2, 33, 34, 5, 6, 4, 2, 34, 35, 7, 12, 2, 2, 35, 38, 3, 2, 2, 2, 36, 38, 5, 8, 5, 2, 37, 29, 3, 2, 2, 2, 37, 32, 3, 2, 2, 2, 37, 36, 3, 2, 2, 2, 38, 47, 3, 2, 2, 2, 39, 40, 12, 7, 2, 2, 40, 41, 9, 3, 2, 2, 41, 46, 5, 6, 4, 8, 42, 43, 12, 6, 2, 2, 43, 44, 9, 2, 2, 2, 44, 46, 5, 6, 4, 7, 45, 39, 3, 2, 2, 2, 45, 42, 3, 2, 2, 2, 46, 49, 3, 2, 2, 2, 47, 45, 3, 2, 2, 2, 47, 48, 3, 2, 2, 2, 48, 7, 3, 2, 2, 2, 49, 47, 3, 2, 2, 2, 50, 53, 7, 13, 2, 2, 51, 53, 7, 14, 2, 2, 52, 50, 3, 2, 2, 2, 52, 51, 3, 2, 2, 2, 53, 9, 3, 2, 2, 2, 8, 13, 27, 37, 45, 47, 52] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 15, 60, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 3, 2, 7, 2, 12, 10, 2, 12, 2, 14, 2, 15, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 3, 25, 10, 3, 12, 3, 14, 3, 28, 11, 3, 3, 3, 3, 3, 3, 3, 5, 3, 33, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 43, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 51, 10, 4, 12, 4, 14, 4, 54, 11, 4, 3, 5, 3, 5, 5, 5, 58, 10, 5, 3, 5, 2, 3, 6, 6, 2, 4, 6, 8, 2, 4, 3, 2, 9, 10, 3, 2, 6, 8, 2, 63, 2, 13, 3, 2, 2, 2, 4, 32, 3, 2, 2, 2, 6, 42, 3, 2, 2, 2, 8, 57, 3, 2, 2, 2, 10, 12, 5, 4, 3, 2, 11, 10, 3, 2, 2, 2, 12, 15, 3, 2, 2, 2, 13, 11, 3, 2, 2, 2, 13, 14, 3, 2, 2, 2, 14, 16, 3, 2, 2, 2, 15, 13, 3, 2, 2, 2, 16, 17, 7, 2, 2, 3, 17, 3, 3, 2, 2, 2, 18, 19, 7, 3, 2, 2, 19, 20, 5, 6, 4, 2, 20, 21, 7, 4, 2, 2, 21, 33, 3, 2, 2, 2, 22, 23, 7, 14, 2, 2, 23, 25, 7, 5, 2, 2, 24, 22, 3, 2, 2, 2, 25, 28, 3, 2, 2, 2, 26, 24, 3, 2, 2, 2, 26, 27, 3, 2, 2, 2, 27, 29, 3, 2, 2, 2, 28, 26, 3, 2, 2, 2, 29, 30, 5, 6, 4, 2, 30, 31, 7, 4, 2, 2, 31, 33, 3, 2, 2, 2, 32, 18, 3, 2, 2, 2, 32, 26, 3, 2, 2, 2, 33, 5, 3, 2, 2, 2, 34, 35, 8, 4, 1, 2, 35, 36, 9, 2, 2, 2, 36, 43, 5, 6, 4, 5, 37, 38, 7, 11, 2, 2, 38, 39, 5, 6, 4, 2, 39, 40, 7, 12, 2, 2, 40, 43, 3, 2, 2, 2, 41, 43, 5, 8, 5, 2, 42, 34, 3, 2, 2, 2, 42, 37, 3, 2, 2, 2, 42, 41, 3, 2, 2, 2, 43, 52, 3, 2, 2, 2, 44, 45, 12, 7, 2, 2, 45, 46, 9, 3, 2, 2, 46, 51, 5, 6, 4, 8, 47, 48, 12, 6, 2, 2, 48, 49, 9, 2, 2, 2, 49, 51, 5, 6, 4, 7, 50, 44, 3, 2, 2, 2, 50, 47, 3, 2, 2, 2, 51, 54, 3, 2, 2, 2, 52, 50, 3, 2, 2, 2, 52, 53, 3, 2, 2, 2, 53, 7, 3, 2, 2, 2, 54, 52, 3, 2, 2, 2, 55, 58, 7, 13, 2, 2, 56, 58, 7, 14, 2, 2, 57, 55, 3, 2, 2, 2, 57, 56, 3, 2, 2, 2, 58, 9, 3, 2, 2, 2, 9, 13, 26, 32, 42, 50, 52, 57] \ No newline at end of file diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index 9b5edbeb..ee400b9b 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -9,25 +9,26 @@ def serializedATN(): with StringIO() as buf: buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\17") - buf.write("\67\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\3\2\7\2\f\n\2\f\2") - buf.write("\16\2\17\13\2\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3") - buf.write("\3\3\5\3\34\n\3\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\5\4&\n") - buf.write("\4\3\4\3\4\3\4\3\4\3\4\3\4\7\4.\n\4\f\4\16\4\61\13\4\3") - buf.write("\5\3\5\5\5\65\n\5\3\5\2\3\6\6\2\4\6\b\2\4\3\2\t\n\3\2") - buf.write("\6\b\29\2\r\3\2\2\2\4\33\3\2\2\2\6%\3\2\2\2\b\64\3\2\2") - buf.write("\2\n\f\5\4\3\2\13\n\3\2\2\2\f\17\3\2\2\2\r\13\3\2\2\2") - buf.write("\r\16\3\2\2\2\16\20\3\2\2\2\17\r\3\2\2\2\20\21\7\2\2\3") - buf.write("\21\3\3\2\2\2\22\23\7\3\2\2\23\24\5\6\4\2\24\25\7\4\2") - buf.write("\2\25\34\3\2\2\2\26\27\7\16\2\2\27\30\7\5\2\2\30\31\5") - buf.write("\6\4\2\31\32\7\4\2\2\32\34\3\2\2\2\33\22\3\2\2\2\33\26") - buf.write("\3\2\2\2\34\5\3\2\2\2\35\36\b\4\1\2\36\37\t\2\2\2\37&") - buf.write("\5\6\4\5 !\7\13\2\2!\"\5\6\4\2\"#\7\f\2\2#&\3\2\2\2$&") - buf.write("\5\b\5\2%\35\3\2\2\2% \3\2\2\2%$\3\2\2\2&/\3\2\2\2\'(") - buf.write("\f\7\2\2()\t\3\2\2).\5\6\4\b*+\f\6\2\2+,\t\2\2\2,.\5\6") - buf.write("\4\7-\'\3\2\2\2-*\3\2\2\2.\61\3\2\2\2/-\3\2\2\2/\60\3") - buf.write("\2\2\2\60\7\3\2\2\2\61/\3\2\2\2\62\65\7\r\2\2\63\65\7") - buf.write("\16\2\2\64\62\3\2\2\2\64\63\3\2\2\2\65\t\3\2\2\2\b\r\33") - buf.write("%-/\64") + buf.write("<\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\3\2\7\2\f\n\2\f\2\16") + buf.write("\2\17\13\2\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\3\7\3\31\n\3") + buf.write("\f\3\16\3\34\13\3\3\3\3\3\3\3\5\3!\n\3\3\4\3\4\3\4\3\4") + buf.write("\3\4\3\4\3\4\3\4\5\4+\n\4\3\4\3\4\3\4\3\4\3\4\3\4\7\4") + buf.write("\63\n\4\f\4\16\4\66\13\4\3\5\3\5\5\5:\n\5\3\5\2\3\6\6") + buf.write("\2\4\6\b\2\4\3\2\t\n\3\2\6\b\2?\2\r\3\2\2\2\4 \3\2\2\2") + buf.write("\6*\3\2\2\2\b9\3\2\2\2\n\f\5\4\3\2\13\n\3\2\2\2\f\17\3") + buf.write("\2\2\2\r\13\3\2\2\2\r\16\3\2\2\2\16\20\3\2\2\2\17\r\3") + buf.write("\2\2\2\20\21\7\2\2\3\21\3\3\2\2\2\22\23\7\3\2\2\23\24") + buf.write("\5\6\4\2\24\25\7\4\2\2\25!\3\2\2\2\26\27\7\16\2\2\27\31") + buf.write("\7\5\2\2\30\26\3\2\2\2\31\34\3\2\2\2\32\30\3\2\2\2\32") + buf.write("\33\3\2\2\2\33\35\3\2\2\2\34\32\3\2\2\2\35\36\5\6\4\2") + buf.write("\36\37\7\4\2\2\37!\3\2\2\2 \22\3\2\2\2 \32\3\2\2\2!\5") + buf.write("\3\2\2\2\"#\b\4\1\2#$\t\2\2\2$+\5\6\4\5%&\7\13\2\2&\'") + buf.write("\5\6\4\2\'(\7\f\2\2(+\3\2\2\2)+\5\b\5\2*\"\3\2\2\2*%\3") + buf.write("\2\2\2*)\3\2\2\2+\64\3\2\2\2,-\f\7\2\2-.\t\3\2\2.\63\5") + buf.write("\6\4\b/\60\f\6\2\2\60\61\t\2\2\2\61\63\5\6\4\7\62,\3\2") + buf.write("\2\2\62/\3\2\2\2\63\66\3\2\2\2\64\62\3\2\2\2\64\65\3\2") + buf.write("\2\2\65\7\3\2\2\2\66\64\3\2\2\2\67:\7\r\2\28:\7\16\2\2") + buf.write("9\67\3\2\2\298\3\2\2\2:\t\3\2\2\2\t\r\32 *\62\649") return buf.getvalue() @@ -118,7 +119,7 @@ def program(self): self.state = 11 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==PyxellParser.T__0 or _la==PyxellParser.ID: + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__0) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__7) | (1 << PyxellParser.T__8) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0): self.state = 8 self.stmt() self.state = 13 @@ -158,11 +159,14 @@ def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Stm super().__init__(parser) self.copyFrom(ctx) - def ID(self): - return self.getToken(PyxellParser.ID, 0) def expr(self): return self.getTypedRuleContext(PyxellParser.ExprContext,0) + def ID(self, i:int=None): + if i is None: + return self.getTokens(PyxellParser.ID) + else: + return self.getToken(PyxellParser.ID, i) def accept(self, visitor:ParseTreeVisitor): if hasattr( visitor, "visitStmtAssg" ): @@ -194,7 +198,7 @@ def stmt(self): localctx = PyxellParser.StmtContext(self, self._ctx, self.state) self.enterRule(localctx, 2, self.RULE_stmt) try: - self.state = 25 + self.state = 30 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__0]: @@ -207,16 +211,25 @@ def stmt(self): self.state = 18 self.match(PyxellParser.T__1) pass - elif token in [PyxellParser.ID]: + elif token in [PyxellParser.T__6, PyxellParser.T__7, PyxellParser.T__8, PyxellParser.INT, PyxellParser.ID]: localctx = PyxellParser.StmtAssgContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 20 - self.match(PyxellParser.ID) - self.state = 21 - self.match(PyxellParser.T__2) - self.state = 22 + self.state = 24 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,1,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 20 + self.match(PyxellParser.ID) + self.state = 21 + self.match(PyxellParser.T__2) + self.state = 26 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,1,self._ctx) + + self.state = 27 self.expr(0) - self.state = 23 + self.state = 28 self.match(PyxellParser.T__1) pass else: @@ -330,7 +343,7 @@ def expr(self, _p:int=0): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 35 + self.state = 40 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__6, PyxellParser.T__7]: @@ -338,7 +351,7 @@ def expr(self, _p:int=0): self._ctx = localctx _prevctx = localctx - self.state = 28 + self.state = 33 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__6 or _la==PyxellParser.T__7): @@ -346,50 +359,50 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 29 + self.state = 34 self.expr(3) pass elif token in [PyxellParser.T__8]: localctx = PyxellParser.ExprParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 30 + self.state = 35 self.match(PyxellParser.T__8) - self.state = 31 + self.state = 36 self.expr(0) - self.state = 32 + self.state = 37 self.match(PyxellParser.T__9) pass elif token in [PyxellParser.INT, PyxellParser.ID]: localctx = PyxellParser.ExprAtomContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 34 + self.state = 39 self.atom() pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 45 + self.state = 50 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,4,self._ctx) + _alt = self._interp.adaptivePredict(self._input,5,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 43 + self.state = 48 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,3,self._ctx) + la_ = self._interp.adaptivePredict(self._input,4,self._ctx) if la_ == 1: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 37 + self.state = 42 if not self.precpred(self._ctx, 5): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") - self.state = 38 + self.state = 43 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__3) | (1 << PyxellParser.T__4) | (1 << PyxellParser.T__5))) != 0)): @@ -397,18 +410,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 39 + self.state = 44 self.expr(6) pass elif la_ == 2: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 40 + self.state = 45 if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") - self.state = 41 + self.state = 46 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__6 or _la==PyxellParser.T__7): @@ -416,14 +429,14 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 42 + self.state = 47 self.expr(5) pass - self.state = 47 + self.state = 52 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,4,self._ctx) + _alt = self._interp.adaptivePredict(self._input,5,self._ctx) except RecognitionException as re: localctx.exception = re @@ -488,19 +501,19 @@ def atom(self): localctx = PyxellParser.AtomContext(self, self._ctx, self.state) self.enterRule(localctx, 6, self.RULE_atom) try: - self.state = 50 + self.state = 55 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: localctx = PyxellParser.AtomIntContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 48 + self.state = 53 self.match(PyxellParser.INT) pass elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 49 + self.state = 54 self.match(PyxellParser.ID) pass else: diff --git a/src/compiler.py b/src/compiler.py index c458ae4d..f03757f0 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -69,8 +69,9 @@ def visitStmtPrint(self, ctx): self.builder.call(self.builtins['putchar'], [ll.Constant(tChar, ord('\n'))]) def visitStmtAssg(self, ctx): - v = self.visit(ctx.expr()) - self.assign(ctx.ID(), v) + value = self.visit(ctx.expr()) + for id in ctx.ID(): + self.assign(id, value) ### Expressions ### From 9d2683aa3d16619b0f29c5b8e2bc66ba8e8ea068 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Mon, 30 Sep 2019 23:34:48 +0200 Subject: [PATCH 003/100] Conditional statements --- src/Pyxell.g4 | 19 +- src/antlr/Pyxell.interp | 25 +- src/antlr/Pyxell.tokens | 44 +++- src/antlr/PyxellLexer.interp | 31 ++- src/antlr/PyxellLexer.py | 104 +++++--- src/antlr/PyxellLexer.tokens | 44 +++- src/antlr/PyxellParser.py | 472 +++++++++++++++++++++++++++-------- src/antlr/PyxellVisitor.py | 25 ++ src/compiler.py | 37 +++ 9 files changed, 634 insertions(+), 167 deletions(-) diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index 112d50ee..214d3cc2 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -5,8 +5,22 @@ program ; stmt - : 'print' expr ';' # StmtPrint - | (ID '=')* expr ';' # StmtAssg + : simple_stmt ';' + | compound_stmt + ; + +simple_stmt + : 'skip' # StmtSkip + | 'print' expr # StmtPrint + | (ID '=')* expr # StmtAssg + ; + +compound_stmt + : 'if' expr block ('elif' expr block)* ('else' block)? # StmtIf + ; + +block + : 'do' '{' stmt+ '}' ; expr @@ -19,6 +33,7 @@ expr atom : INT # AtomInt + | ('true' | 'false') # AtomBool | ID # AtomId ; diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index 7a022452..37b1d9cd 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -1,8 +1,15 @@ token literal names: null -'print' ';' +'skip' +'print' '=' +'if' +'elif' +'else' +'do' +'{' +'}' '*' '/' '%' @@ -10,6 +17,8 @@ null '-' '(' ')' +'true' +'false' null null null @@ -26,6 +35,15 @@ null null null null +null +null +null +null +null +null +null +null +null INT ID WS @@ -33,9 +51,12 @@ WS rule names: program stmt +simple_stmt +compound_stmt +block expr atom atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 15, 60, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 3, 2, 7, 2, 12, 10, 2, 12, 2, 14, 2, 15, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 3, 25, 10, 3, 12, 3, 14, 3, 28, 11, 3, 3, 3, 3, 3, 3, 3, 5, 3, 33, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 43, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 51, 10, 4, 12, 4, 14, 4, 54, 11, 4, 3, 5, 3, 5, 5, 5, 58, 10, 5, 3, 5, 2, 3, 6, 6, 2, 4, 6, 8, 2, 4, 3, 2, 9, 10, 3, 2, 6, 8, 2, 63, 2, 13, 3, 2, 2, 2, 4, 32, 3, 2, 2, 2, 6, 42, 3, 2, 2, 2, 8, 57, 3, 2, 2, 2, 10, 12, 5, 4, 3, 2, 11, 10, 3, 2, 2, 2, 12, 15, 3, 2, 2, 2, 13, 11, 3, 2, 2, 2, 13, 14, 3, 2, 2, 2, 14, 16, 3, 2, 2, 2, 15, 13, 3, 2, 2, 2, 16, 17, 7, 2, 2, 3, 17, 3, 3, 2, 2, 2, 18, 19, 7, 3, 2, 2, 19, 20, 5, 6, 4, 2, 20, 21, 7, 4, 2, 2, 21, 33, 3, 2, 2, 2, 22, 23, 7, 14, 2, 2, 23, 25, 7, 5, 2, 2, 24, 22, 3, 2, 2, 2, 25, 28, 3, 2, 2, 2, 26, 24, 3, 2, 2, 2, 26, 27, 3, 2, 2, 2, 27, 29, 3, 2, 2, 2, 28, 26, 3, 2, 2, 2, 29, 30, 5, 6, 4, 2, 30, 31, 7, 4, 2, 2, 31, 33, 3, 2, 2, 2, 32, 18, 3, 2, 2, 2, 32, 26, 3, 2, 2, 2, 33, 5, 3, 2, 2, 2, 34, 35, 8, 4, 1, 2, 35, 36, 9, 2, 2, 2, 36, 43, 5, 6, 4, 5, 37, 38, 7, 11, 2, 2, 38, 39, 5, 6, 4, 2, 39, 40, 7, 12, 2, 2, 40, 43, 3, 2, 2, 2, 41, 43, 5, 8, 5, 2, 42, 34, 3, 2, 2, 2, 42, 37, 3, 2, 2, 2, 42, 41, 3, 2, 2, 2, 43, 52, 3, 2, 2, 2, 44, 45, 12, 7, 2, 2, 45, 46, 9, 3, 2, 2, 46, 51, 5, 6, 4, 8, 47, 48, 12, 6, 2, 2, 48, 49, 9, 2, 2, 2, 49, 51, 5, 6, 4, 7, 50, 44, 3, 2, 2, 2, 50, 47, 3, 2, 2, 2, 51, 54, 3, 2, 2, 2, 52, 50, 3, 2, 2, 2, 52, 53, 3, 2, 2, 2, 53, 7, 3, 2, 2, 2, 54, 52, 3, 2, 2, 2, 55, 58, 7, 13, 2, 2, 56, 58, 7, 14, 2, 2, 57, 55, 3, 2, 2, 2, 57, 56, 3, 2, 2, 2, 58, 9, 3, 2, 2, 2, 9, 13, 26, 32, 42, 50, 52, 57] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 24, 95, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 3, 2, 7, 2, 18, 10, 2, 12, 2, 14, 2, 21, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 29, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 36, 10, 4, 12, 4, 14, 4, 39, 11, 4, 3, 4, 5, 4, 42, 10, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 7, 5, 51, 10, 5, 12, 5, 14, 5, 54, 11, 5, 3, 5, 3, 5, 5, 5, 58, 10, 5, 3, 6, 3, 6, 3, 6, 6, 6, 63, 10, 6, 13, 6, 14, 6, 64, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 77, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 85, 10, 7, 12, 7, 14, 7, 88, 11, 7, 3, 8, 3, 8, 3, 8, 5, 8, 93, 10, 8, 3, 8, 2, 3, 12, 9, 2, 4, 6, 8, 10, 12, 14, 2, 5, 3, 2, 16, 17, 3, 2, 13, 15, 3, 2, 20, 21, 2, 101, 2, 19, 3, 2, 2, 2, 4, 28, 3, 2, 2, 2, 6, 41, 3, 2, 2, 2, 8, 43, 3, 2, 2, 2, 10, 59, 3, 2, 2, 2, 12, 76, 3, 2, 2, 2, 14, 92, 3, 2, 2, 2, 16, 18, 5, 4, 3, 2, 17, 16, 3, 2, 2, 2, 18, 21, 3, 2, 2, 2, 19, 17, 3, 2, 2, 2, 19, 20, 3, 2, 2, 2, 20, 22, 3, 2, 2, 2, 21, 19, 3, 2, 2, 2, 22, 23, 7, 2, 2, 3, 23, 3, 3, 2, 2, 2, 24, 25, 5, 6, 4, 2, 25, 26, 7, 3, 2, 2, 26, 29, 3, 2, 2, 2, 27, 29, 5, 8, 5, 2, 28, 24, 3, 2, 2, 2, 28, 27, 3, 2, 2, 2, 29, 5, 3, 2, 2, 2, 30, 42, 7, 4, 2, 2, 31, 32, 7, 5, 2, 2, 32, 42, 5, 12, 7, 2, 33, 34, 7, 23, 2, 2, 34, 36, 7, 6, 2, 2, 35, 33, 3, 2, 2, 2, 36, 39, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 37, 38, 3, 2, 2, 2, 38, 40, 3, 2, 2, 2, 39, 37, 3, 2, 2, 2, 40, 42, 5, 12, 7, 2, 41, 30, 3, 2, 2, 2, 41, 31, 3, 2, 2, 2, 41, 37, 3, 2, 2, 2, 42, 7, 3, 2, 2, 2, 43, 44, 7, 7, 2, 2, 44, 45, 5, 12, 7, 2, 45, 52, 5, 10, 6, 2, 46, 47, 7, 8, 2, 2, 47, 48, 5, 12, 7, 2, 48, 49, 5, 10, 6, 2, 49, 51, 3, 2, 2, 2, 50, 46, 3, 2, 2, 2, 51, 54, 3, 2, 2, 2, 52, 50, 3, 2, 2, 2, 52, 53, 3, 2, 2, 2, 53, 57, 3, 2, 2, 2, 54, 52, 3, 2, 2, 2, 55, 56, 7, 9, 2, 2, 56, 58, 5, 10, 6, 2, 57, 55, 3, 2, 2, 2, 57, 58, 3, 2, 2, 2, 58, 9, 3, 2, 2, 2, 59, 60, 7, 10, 2, 2, 60, 62, 7, 11, 2, 2, 61, 63, 5, 4, 3, 2, 62, 61, 3, 2, 2, 2, 63, 64, 3, 2, 2, 2, 64, 62, 3, 2, 2, 2, 64, 65, 3, 2, 2, 2, 65, 66, 3, 2, 2, 2, 66, 67, 7, 12, 2, 2, 67, 11, 3, 2, 2, 2, 68, 69, 8, 7, 1, 2, 69, 70, 9, 2, 2, 2, 70, 77, 5, 12, 7, 5, 71, 72, 7, 18, 2, 2, 72, 73, 5, 12, 7, 2, 73, 74, 7, 19, 2, 2, 74, 77, 3, 2, 2, 2, 75, 77, 5, 14, 8, 2, 76, 68, 3, 2, 2, 2, 76, 71, 3, 2, 2, 2, 76, 75, 3, 2, 2, 2, 77, 86, 3, 2, 2, 2, 78, 79, 12, 7, 2, 2, 79, 80, 9, 3, 2, 2, 80, 85, 5, 12, 7, 8, 81, 82, 12, 6, 2, 2, 82, 83, 9, 2, 2, 2, 83, 85, 5, 12, 7, 7, 84, 78, 3, 2, 2, 2, 84, 81, 3, 2, 2, 2, 85, 88, 3, 2, 2, 2, 86, 84, 3, 2, 2, 2, 86, 87, 3, 2, 2, 2, 87, 13, 3, 2, 2, 2, 88, 86, 3, 2, 2, 2, 89, 93, 7, 22, 2, 2, 90, 93, 9, 4, 2, 2, 91, 93, 7, 23, 2, 2, 92, 89, 3, 2, 2, 2, 92, 90, 3, 2, 2, 2, 92, 91, 3, 2, 2, 2, 93, 15, 3, 2, 2, 2, 13, 19, 28, 37, 41, 52, 57, 64, 76, 84, 86, 92] \ No newline at end of file diff --git a/src/antlr/Pyxell.tokens b/src/antlr/Pyxell.tokens index 4a1cfa37..90b6f97f 100644 --- a/src/antlr/Pyxell.tokens +++ b/src/antlr/Pyxell.tokens @@ -8,16 +8,34 @@ T__6=7 T__7=8 T__8=9 T__9=10 -INT=11 -ID=12 -WS=13 -'print'=1 -';'=2 -'='=3 -'*'=4 -'/'=5 -'%'=6 -'+'=7 -'-'=8 -'('=9 -')'=10 +T__10=11 +T__11=12 +T__12=13 +T__13=14 +T__14=15 +T__15=16 +T__16=17 +T__17=18 +T__18=19 +INT=20 +ID=21 +WS=22 +';'=1 +'skip'=2 +'print'=3 +'='=4 +'if'=5 +'elif'=6 +'else'=7 +'do'=8 +'{'=9 +'}'=10 +'*'=11 +'/'=12 +'%'=13 +'+'=14 +'-'=15 +'('=16 +')'=17 +'true'=18 +'false'=19 diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp index 03fc108a..469eee74 100644 --- a/src/antlr/PyxellLexer.interp +++ b/src/antlr/PyxellLexer.interp @@ -1,8 +1,15 @@ token literal names: null -'print' ';' +'skip' +'print' '=' +'if' +'elif' +'else' +'do' +'{' +'}' '*' '/' '%' @@ -10,6 +17,8 @@ null '-' '(' ')' +'true' +'false' null null null @@ -26,6 +35,15 @@ null null null null +null +null +null +null +null +null +null +null +null INT ID WS @@ -41,6 +59,15 @@ T__6 T__7 T__8 T__9 +T__10 +T__11 +T__12 +T__13 +T__14 +T__15 +T__16 +T__17 +T__18 INT ID DIGIT @@ -56,4 +83,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 15, 87, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 6, 12, 61, 10, 12, 13, 12, 14, 12, 62, 3, 13, 3, 13, 7, 13, 67, 10, 13, 12, 13, 14, 13, 70, 11, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 5, 16, 79, 10, 16, 3, 17, 6, 17, 82, 10, 17, 13, 17, 14, 17, 83, 3, 17, 3, 17, 2, 2, 18, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 2, 29, 2, 31, 2, 33, 15, 3, 2, 6, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 88, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 3, 35, 3, 2, 2, 2, 5, 41, 3, 2, 2, 2, 7, 43, 3, 2, 2, 2, 9, 45, 3, 2, 2, 2, 11, 47, 3, 2, 2, 2, 13, 49, 3, 2, 2, 2, 15, 51, 3, 2, 2, 2, 17, 53, 3, 2, 2, 2, 19, 55, 3, 2, 2, 2, 21, 57, 3, 2, 2, 2, 23, 60, 3, 2, 2, 2, 25, 64, 3, 2, 2, 2, 27, 71, 3, 2, 2, 2, 29, 73, 3, 2, 2, 2, 31, 78, 3, 2, 2, 2, 33, 81, 3, 2, 2, 2, 35, 36, 7, 114, 2, 2, 36, 37, 7, 116, 2, 2, 37, 38, 7, 107, 2, 2, 38, 39, 7, 112, 2, 2, 39, 40, 7, 118, 2, 2, 40, 4, 3, 2, 2, 2, 41, 42, 7, 61, 2, 2, 42, 6, 3, 2, 2, 2, 43, 44, 7, 63, 2, 2, 44, 8, 3, 2, 2, 2, 45, 46, 7, 44, 2, 2, 46, 10, 3, 2, 2, 2, 47, 48, 7, 49, 2, 2, 48, 12, 3, 2, 2, 2, 49, 50, 7, 39, 2, 2, 50, 14, 3, 2, 2, 2, 51, 52, 7, 45, 2, 2, 52, 16, 3, 2, 2, 2, 53, 54, 7, 47, 2, 2, 54, 18, 3, 2, 2, 2, 55, 56, 7, 42, 2, 2, 56, 20, 3, 2, 2, 2, 57, 58, 7, 43, 2, 2, 58, 22, 3, 2, 2, 2, 59, 61, 5, 27, 14, 2, 60, 59, 3, 2, 2, 2, 61, 62, 3, 2, 2, 2, 62, 60, 3, 2, 2, 2, 62, 63, 3, 2, 2, 2, 63, 24, 3, 2, 2, 2, 64, 68, 5, 29, 15, 2, 65, 67, 5, 31, 16, 2, 66, 65, 3, 2, 2, 2, 67, 70, 3, 2, 2, 2, 68, 66, 3, 2, 2, 2, 68, 69, 3, 2, 2, 2, 69, 26, 3, 2, 2, 2, 70, 68, 3, 2, 2, 2, 71, 72, 9, 2, 2, 2, 72, 28, 3, 2, 2, 2, 73, 74, 9, 3, 2, 2, 74, 30, 3, 2, 2, 2, 75, 79, 5, 29, 15, 2, 76, 79, 5, 27, 14, 2, 77, 79, 9, 4, 2, 2, 78, 75, 3, 2, 2, 2, 78, 76, 3, 2, 2, 2, 78, 77, 3, 2, 2, 2, 79, 32, 3, 2, 2, 2, 80, 82, 9, 5, 2, 2, 81, 80, 3, 2, 2, 2, 82, 83, 3, 2, 2, 2, 83, 81, 3, 2, 2, 2, 83, 84, 3, 2, 2, 2, 84, 85, 3, 2, 2, 2, 85, 86, 8, 17, 2, 2, 86, 34, 3, 2, 2, 2, 7, 2, 62, 68, 78, 83, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 24, 141, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 6, 21, 115, 10, 21, 13, 21, 14, 21, 116, 3, 22, 3, 22, 7, 22, 121, 10, 22, 12, 22, 14, 22, 124, 11, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 5, 25, 133, 10, 25, 3, 26, 6, 26, 136, 10, 26, 13, 26, 14, 26, 137, 3, 26, 3, 26, 2, 2, 27, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 2, 47, 2, 49, 2, 51, 24, 3, 2, 6, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 142, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 3, 53, 3, 2, 2, 2, 5, 55, 3, 2, 2, 2, 7, 60, 3, 2, 2, 2, 9, 66, 3, 2, 2, 2, 11, 68, 3, 2, 2, 2, 13, 71, 3, 2, 2, 2, 15, 76, 3, 2, 2, 2, 17, 81, 3, 2, 2, 2, 19, 84, 3, 2, 2, 2, 21, 86, 3, 2, 2, 2, 23, 88, 3, 2, 2, 2, 25, 90, 3, 2, 2, 2, 27, 92, 3, 2, 2, 2, 29, 94, 3, 2, 2, 2, 31, 96, 3, 2, 2, 2, 33, 98, 3, 2, 2, 2, 35, 100, 3, 2, 2, 2, 37, 102, 3, 2, 2, 2, 39, 107, 3, 2, 2, 2, 41, 114, 3, 2, 2, 2, 43, 118, 3, 2, 2, 2, 45, 125, 3, 2, 2, 2, 47, 127, 3, 2, 2, 2, 49, 132, 3, 2, 2, 2, 51, 135, 3, 2, 2, 2, 53, 54, 7, 61, 2, 2, 54, 4, 3, 2, 2, 2, 55, 56, 7, 117, 2, 2, 56, 57, 7, 109, 2, 2, 57, 58, 7, 107, 2, 2, 58, 59, 7, 114, 2, 2, 59, 6, 3, 2, 2, 2, 60, 61, 7, 114, 2, 2, 61, 62, 7, 116, 2, 2, 62, 63, 7, 107, 2, 2, 63, 64, 7, 112, 2, 2, 64, 65, 7, 118, 2, 2, 65, 8, 3, 2, 2, 2, 66, 67, 7, 63, 2, 2, 67, 10, 3, 2, 2, 2, 68, 69, 7, 107, 2, 2, 69, 70, 7, 104, 2, 2, 70, 12, 3, 2, 2, 2, 71, 72, 7, 103, 2, 2, 72, 73, 7, 110, 2, 2, 73, 74, 7, 107, 2, 2, 74, 75, 7, 104, 2, 2, 75, 14, 3, 2, 2, 2, 76, 77, 7, 103, 2, 2, 77, 78, 7, 110, 2, 2, 78, 79, 7, 117, 2, 2, 79, 80, 7, 103, 2, 2, 80, 16, 3, 2, 2, 2, 81, 82, 7, 102, 2, 2, 82, 83, 7, 113, 2, 2, 83, 18, 3, 2, 2, 2, 84, 85, 7, 125, 2, 2, 85, 20, 3, 2, 2, 2, 86, 87, 7, 127, 2, 2, 87, 22, 3, 2, 2, 2, 88, 89, 7, 44, 2, 2, 89, 24, 3, 2, 2, 2, 90, 91, 7, 49, 2, 2, 91, 26, 3, 2, 2, 2, 92, 93, 7, 39, 2, 2, 93, 28, 3, 2, 2, 2, 94, 95, 7, 45, 2, 2, 95, 30, 3, 2, 2, 2, 96, 97, 7, 47, 2, 2, 97, 32, 3, 2, 2, 2, 98, 99, 7, 42, 2, 2, 99, 34, 3, 2, 2, 2, 100, 101, 7, 43, 2, 2, 101, 36, 3, 2, 2, 2, 102, 103, 7, 118, 2, 2, 103, 104, 7, 116, 2, 2, 104, 105, 7, 119, 2, 2, 105, 106, 7, 103, 2, 2, 106, 38, 3, 2, 2, 2, 107, 108, 7, 104, 2, 2, 108, 109, 7, 99, 2, 2, 109, 110, 7, 110, 2, 2, 110, 111, 7, 117, 2, 2, 111, 112, 7, 103, 2, 2, 112, 40, 3, 2, 2, 2, 113, 115, 5, 45, 23, 2, 114, 113, 3, 2, 2, 2, 115, 116, 3, 2, 2, 2, 116, 114, 3, 2, 2, 2, 116, 117, 3, 2, 2, 2, 117, 42, 3, 2, 2, 2, 118, 122, 5, 47, 24, 2, 119, 121, 5, 49, 25, 2, 120, 119, 3, 2, 2, 2, 121, 124, 3, 2, 2, 2, 122, 120, 3, 2, 2, 2, 122, 123, 3, 2, 2, 2, 123, 44, 3, 2, 2, 2, 124, 122, 3, 2, 2, 2, 125, 126, 9, 2, 2, 2, 126, 46, 3, 2, 2, 2, 127, 128, 9, 3, 2, 2, 128, 48, 3, 2, 2, 2, 129, 133, 5, 47, 24, 2, 130, 133, 5, 45, 23, 2, 131, 133, 9, 4, 2, 2, 132, 129, 3, 2, 2, 2, 132, 130, 3, 2, 2, 2, 132, 131, 3, 2, 2, 2, 133, 50, 3, 2, 2, 2, 134, 136, 9, 5, 2, 2, 135, 134, 3, 2, 2, 2, 136, 137, 3, 2, 2, 2, 137, 135, 3, 2, 2, 2, 137, 138, 3, 2, 2, 2, 138, 139, 3, 2, 2, 2, 139, 140, 8, 26, 2, 2, 140, 52, 3, 2, 2, 2, 7, 2, 116, 122, 132, 137, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py index 0ecff091..9f0228db 100644 --- a/src/antlr/PyxellLexer.py +++ b/src/antlr/PyxellLexer.py @@ -8,36 +8,55 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\17") - buf.write("W\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") - buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16") - buf.write("\t\16\4\17\t\17\4\20\t\20\4\21\t\21\3\2\3\2\3\2\3\2\3") - buf.write("\2\3\2\3\3\3\3\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b") - buf.write("\3\t\3\t\3\n\3\n\3\13\3\13\3\f\6\f=\n\f\r\f\16\f>\3\r") - buf.write("\3\r\7\rC\n\r\f\r\16\rF\13\r\3\16\3\16\3\17\3\17\3\20") - buf.write("\3\20\3\20\5\20O\n\20\3\21\6\21R\n\21\r\21\16\21S\3\21") - buf.write("\3\21\2\2\22\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13") - buf.write("\25\f\27\r\31\16\33\2\35\2\37\2!\17\3\2\6\3\2\62;\5\2") - buf.write("C\\aac|\4\2))aa\5\2\13\f\17\17\"\"\2X\2\3\3\2\2\2\2\5") - buf.write("\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2") - buf.write("\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2") - buf.write("\2\2\27\3\2\2\2\2\31\3\2\2\2\2!\3\2\2\2\3#\3\2\2\2\5)") - buf.write("\3\2\2\2\7+\3\2\2\2\t-\3\2\2\2\13/\3\2\2\2\r\61\3\2\2") - buf.write("\2\17\63\3\2\2\2\21\65\3\2\2\2\23\67\3\2\2\2\259\3\2\2") - buf.write("\2\27<\3\2\2\2\31@\3\2\2\2\33G\3\2\2\2\35I\3\2\2\2\37") - buf.write("N\3\2\2\2!Q\3\2\2\2#$\7r\2\2$%\7t\2\2%&\7k\2\2&\'\7p\2") - buf.write("\2\'(\7v\2\2(\4\3\2\2\2)*\7=\2\2*\6\3\2\2\2+,\7?\2\2,") - buf.write("\b\3\2\2\2-.\7,\2\2.\n\3\2\2\2/\60\7\61\2\2\60\f\3\2\2") - buf.write("\2\61\62\7\'\2\2\62\16\3\2\2\2\63\64\7-\2\2\64\20\3\2") - buf.write("\2\2\65\66\7/\2\2\66\22\3\2\2\2\678\7*\2\28\24\3\2\2\2") - buf.write("9:\7+\2\2:\26\3\2\2\2;=\5\33\16\2<;\3\2\2\2=>\3\2\2\2") - buf.write("><\3\2\2\2>?\3\2\2\2?\30\3\2\2\2@D\5\35\17\2AC\5\37\20") - buf.write("\2BA\3\2\2\2CF\3\2\2\2DB\3\2\2\2DE\3\2\2\2E\32\3\2\2\2") - buf.write("FD\3\2\2\2GH\t\2\2\2H\34\3\2\2\2IJ\t\3\2\2J\36\3\2\2\2") - buf.write("KO\5\35\17\2LO\5\33\16\2MO\t\4\2\2NK\3\2\2\2NL\3\2\2\2") - buf.write("NM\3\2\2\2O \3\2\2\2PR\t\5\2\2QP\3\2\2\2RS\3\2\2\2SQ\3") - buf.write("\2\2\2ST\3\2\2\2TU\3\2\2\2UV\b\21\2\2V\"\3\2\2\2\7\2>") - buf.write("DNS\3\b\2\2") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\30") + buf.write("\u008d\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") + buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") + buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") + buf.write("\4\31\t\31\4\32\t\32\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\4\3") + buf.write("\4\3\4\3\4\3\4\3\4\3\5\3\5\3\6\3\6\3\6\3\7\3\7\3\7\3\7") + buf.write("\3\7\3\b\3\b\3\b\3\b\3\b\3\t\3\t\3\t\3\n\3\n\3\13\3\13") + buf.write("\3\f\3\f\3\r\3\r\3\16\3\16\3\17\3\17\3\20\3\20\3\21\3") + buf.write("\21\3\22\3\22\3\23\3\23\3\23\3\23\3\23\3\24\3\24\3\24") + buf.write("\3\24\3\24\3\24\3\25\6\25s\n\25\r\25\16\25t\3\26\3\26") + buf.write("\7\26y\n\26\f\26\16\26|\13\26\3\27\3\27\3\30\3\30\3\31") + buf.write("\3\31\3\31\5\31\u0085\n\31\3\32\6\32\u0088\n\32\r\32\16") + buf.write("\32\u0089\3\32\3\32\2\2\33\3\3\5\4\7\5\t\6\13\7\r\b\17") + buf.write("\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23") + buf.write("%\24\'\25)\26+\27-\2/\2\61\2\63\30\3\2\6\3\2\62;\5\2C") + buf.write("\\aac|\4\2))aa\5\2\13\f\17\17\"\"\2\u008e\2\3\3\2\2\2") + buf.write("\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r") + buf.write("\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3") + buf.write("\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2") + buf.write("\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'") + buf.write("\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2\63\3\2\2\2\3\65\3\2\2") + buf.write("\2\5\67\3\2\2\2\7<\3\2\2\2\tB\3\2\2\2\13D\3\2\2\2\rG\3") + buf.write("\2\2\2\17L\3\2\2\2\21Q\3\2\2\2\23T\3\2\2\2\25V\3\2\2\2") + buf.write("\27X\3\2\2\2\31Z\3\2\2\2\33\\\3\2\2\2\35^\3\2\2\2\37`") + buf.write("\3\2\2\2!b\3\2\2\2#d\3\2\2\2%f\3\2\2\2\'k\3\2\2\2)r\3") + buf.write("\2\2\2+v\3\2\2\2-}\3\2\2\2/\177\3\2\2\2\61\u0084\3\2\2") + buf.write("\2\63\u0087\3\2\2\2\65\66\7=\2\2\66\4\3\2\2\2\678\7u\2") + buf.write("\289\7m\2\29:\7k\2\2:;\7r\2\2;\6\3\2\2\2<=\7r\2\2=>\7") + buf.write("t\2\2>?\7k\2\2?@\7p\2\2@A\7v\2\2A\b\3\2\2\2BC\7?\2\2C") + buf.write("\n\3\2\2\2DE\7k\2\2EF\7h\2\2F\f\3\2\2\2GH\7g\2\2HI\7n") + buf.write("\2\2IJ\7k\2\2JK\7h\2\2K\16\3\2\2\2LM\7g\2\2MN\7n\2\2N") + buf.write("O\7u\2\2OP\7g\2\2P\20\3\2\2\2QR\7f\2\2RS\7q\2\2S\22\3") + buf.write("\2\2\2TU\7}\2\2U\24\3\2\2\2VW\7\177\2\2W\26\3\2\2\2XY") + buf.write("\7,\2\2Y\30\3\2\2\2Z[\7\61\2\2[\32\3\2\2\2\\]\7\'\2\2") + buf.write("]\34\3\2\2\2^_\7-\2\2_\36\3\2\2\2`a\7/\2\2a \3\2\2\2b") + buf.write("c\7*\2\2c\"\3\2\2\2de\7+\2\2e$\3\2\2\2fg\7v\2\2gh\7t\2") + buf.write("\2hi\7w\2\2ij\7g\2\2j&\3\2\2\2kl\7h\2\2lm\7c\2\2mn\7n") + buf.write("\2\2no\7u\2\2op\7g\2\2p(\3\2\2\2qs\5-\27\2rq\3\2\2\2s") + buf.write("t\3\2\2\2tr\3\2\2\2tu\3\2\2\2u*\3\2\2\2vz\5/\30\2wy\5") + buf.write("\61\31\2xw\3\2\2\2y|\3\2\2\2zx\3\2\2\2z{\3\2\2\2{,\3\2") + buf.write("\2\2|z\3\2\2\2}~\t\2\2\2~.\3\2\2\2\177\u0080\t\3\2\2\u0080") + buf.write("\60\3\2\2\2\u0081\u0085\5/\30\2\u0082\u0085\5-\27\2\u0083") + buf.write("\u0085\t\4\2\2\u0084\u0081\3\2\2\2\u0084\u0082\3\2\2\2") + buf.write("\u0084\u0083\3\2\2\2\u0085\62\3\2\2\2\u0086\u0088\t\5") + buf.write("\2\2\u0087\u0086\3\2\2\2\u0088\u0089\3\2\2\2\u0089\u0087") + buf.write("\3\2\2\2\u0089\u008a\3\2\2\2\u008a\u008b\3\2\2\2\u008b") + buf.write("\u008c\b\32\2\2\u008c\64\3\2\2\2\7\2tz\u0084\u0089\3\b") + buf.write("\2\2") return buf.getvalue() @@ -57,24 +76,35 @@ class PyxellLexer(Lexer): T__7 = 8 T__8 = 9 T__9 = 10 - INT = 11 - ID = 12 - WS = 13 + T__10 = 11 + T__11 = 12 + T__12 = 13 + T__13 = 14 + T__14 = 15 + T__15 = 16 + T__16 = 17 + T__17 = 18 + T__18 = 19 + INT = 20 + ID = 21 + WS = 22 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] modeNames = [ "DEFAULT_MODE" ] literalNames = [ "", - "'print'", "';'", "'='", "'*'", "'/'", "'%'", "'+'", "'-'", - "'('", "')'" ] + "';'", "'skip'", "'print'", "'='", "'if'", "'elif'", "'else'", + "'do'", "'{'", "'}'", "'*'", "'/'", "'%'", "'+'", "'-'", "'('", + "')'", "'true'", "'false'" ] symbolicNames = [ "", "INT", "ID", "WS" ] ruleNames = [ "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", - "T__7", "T__8", "T__9", "INT", "ID", "DIGIT", "ID_START", - "ID_CONT", "WS" ] + "T__7", "T__8", "T__9", "T__10", "T__11", "T__12", "T__13", + "T__14", "T__15", "T__16", "T__17", "T__18", "INT", "ID", + "DIGIT", "ID_START", "ID_CONT", "WS" ] grammarFileName = "Pyxell.g4" diff --git a/src/antlr/PyxellLexer.tokens b/src/antlr/PyxellLexer.tokens index 4a1cfa37..90b6f97f 100644 --- a/src/antlr/PyxellLexer.tokens +++ b/src/antlr/PyxellLexer.tokens @@ -8,16 +8,34 @@ T__6=7 T__7=8 T__8=9 T__9=10 -INT=11 -ID=12 -WS=13 -'print'=1 -';'=2 -'='=3 -'*'=4 -'/'=5 -'%'=6 -'+'=7 -'-'=8 -'('=9 -')'=10 +T__10=11 +T__11=12 +T__12=13 +T__13=14 +T__14=15 +T__15=16 +T__16=17 +T__17=18 +T__18=19 +INT=20 +ID=21 +WS=22 +';'=1 +'skip'=2 +'print'=3 +'='=4 +'if'=5 +'elif'=6 +'else'=7 +'do'=8 +'{'=9 +'}'=10 +'*'=11 +'/'=12 +'%'=13 +'+'=14 +'-'=15 +'('=16 +')'=17 +'true'=18 +'false'=19 diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index ee400b9b..7ffe306c 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -8,27 +8,38 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\17") - buf.write("<\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\3\2\7\2\f\n\2\f\2\16") - buf.write("\2\17\13\2\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\3\7\3\31\n\3") - buf.write("\f\3\16\3\34\13\3\3\3\3\3\3\3\5\3!\n\3\3\4\3\4\3\4\3\4") - buf.write("\3\4\3\4\3\4\3\4\5\4+\n\4\3\4\3\4\3\4\3\4\3\4\3\4\7\4") - buf.write("\63\n\4\f\4\16\4\66\13\4\3\5\3\5\5\5:\n\5\3\5\2\3\6\6") - buf.write("\2\4\6\b\2\4\3\2\t\n\3\2\6\b\2?\2\r\3\2\2\2\4 \3\2\2\2") - buf.write("\6*\3\2\2\2\b9\3\2\2\2\n\f\5\4\3\2\13\n\3\2\2\2\f\17\3") - buf.write("\2\2\2\r\13\3\2\2\2\r\16\3\2\2\2\16\20\3\2\2\2\17\r\3") - buf.write("\2\2\2\20\21\7\2\2\3\21\3\3\2\2\2\22\23\7\3\2\2\23\24") - buf.write("\5\6\4\2\24\25\7\4\2\2\25!\3\2\2\2\26\27\7\16\2\2\27\31") - buf.write("\7\5\2\2\30\26\3\2\2\2\31\34\3\2\2\2\32\30\3\2\2\2\32") - buf.write("\33\3\2\2\2\33\35\3\2\2\2\34\32\3\2\2\2\35\36\5\6\4\2") - buf.write("\36\37\7\4\2\2\37!\3\2\2\2 \22\3\2\2\2 \32\3\2\2\2!\5") - buf.write("\3\2\2\2\"#\b\4\1\2#$\t\2\2\2$+\5\6\4\5%&\7\13\2\2&\'") - buf.write("\5\6\4\2\'(\7\f\2\2(+\3\2\2\2)+\5\b\5\2*\"\3\2\2\2*%\3") - buf.write("\2\2\2*)\3\2\2\2+\64\3\2\2\2,-\f\7\2\2-.\t\3\2\2.\63\5") - buf.write("\6\4\b/\60\f\6\2\2\60\61\t\2\2\2\61\63\5\6\4\7\62,\3\2") - buf.write("\2\2\62/\3\2\2\2\63\66\3\2\2\2\64\62\3\2\2\2\64\65\3\2") - buf.write("\2\2\65\7\3\2\2\2\66\64\3\2\2\2\67:\7\r\2\28:\7\16\2\2") - buf.write("9\67\3\2\2\298\3\2\2\2:\t\3\2\2\2\t\r\32 *\62\649") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\30") + buf.write("_\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b") + buf.write("\t\b\3\2\7\2\22\n\2\f\2\16\2\25\13\2\3\2\3\2\3\3\3\3\3") + buf.write("\3\3\3\5\3\35\n\3\3\4\3\4\3\4\3\4\3\4\7\4$\n\4\f\4\16") + buf.write("\4\'\13\4\3\4\5\4*\n\4\3\5\3\5\3\5\3\5\3\5\3\5\3\5\7\5") + buf.write("\63\n\5\f\5\16\5\66\13\5\3\5\3\5\5\5:\n\5\3\6\3\6\3\6") + buf.write("\6\6?\n\6\r\6\16\6@\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\7\3") + buf.write("\7\3\7\5\7M\n\7\3\7\3\7\3\7\3\7\3\7\3\7\7\7U\n\7\f\7\16") + buf.write("\7X\13\7\3\b\3\b\3\b\5\b]\n\b\3\b\2\3\f\t\2\4\6\b\n\f") + buf.write("\16\2\5\3\2\20\21\3\2\r\17\3\2\24\25\2e\2\23\3\2\2\2\4") + buf.write("\34\3\2\2\2\6)\3\2\2\2\b+\3\2\2\2\n;\3\2\2\2\fL\3\2\2") + buf.write("\2\16\\\3\2\2\2\20\22\5\4\3\2\21\20\3\2\2\2\22\25\3\2") + buf.write("\2\2\23\21\3\2\2\2\23\24\3\2\2\2\24\26\3\2\2\2\25\23\3") + buf.write("\2\2\2\26\27\7\2\2\3\27\3\3\2\2\2\30\31\5\6\4\2\31\32") + buf.write("\7\3\2\2\32\35\3\2\2\2\33\35\5\b\5\2\34\30\3\2\2\2\34") + buf.write("\33\3\2\2\2\35\5\3\2\2\2\36*\7\4\2\2\37 \7\5\2\2 *\5\f") + buf.write("\7\2!\"\7\27\2\2\"$\7\6\2\2#!\3\2\2\2$\'\3\2\2\2%#\3\2") + buf.write("\2\2%&\3\2\2\2&(\3\2\2\2\'%\3\2\2\2(*\5\f\7\2)\36\3\2") + buf.write("\2\2)\37\3\2\2\2)%\3\2\2\2*\7\3\2\2\2+,\7\7\2\2,-\5\f") + buf.write("\7\2-\64\5\n\6\2./\7\b\2\2/\60\5\f\7\2\60\61\5\n\6\2\61") + buf.write("\63\3\2\2\2\62.\3\2\2\2\63\66\3\2\2\2\64\62\3\2\2\2\64") + buf.write("\65\3\2\2\2\659\3\2\2\2\66\64\3\2\2\2\678\7\t\2\28:\5") + buf.write("\n\6\29\67\3\2\2\29:\3\2\2\2:\t\3\2\2\2;<\7\n\2\2<>\7") + buf.write("\13\2\2=?\5\4\3\2>=\3\2\2\2?@\3\2\2\2@>\3\2\2\2@A\3\2") + buf.write("\2\2AB\3\2\2\2BC\7\f\2\2C\13\3\2\2\2DE\b\7\1\2EF\t\2\2") + buf.write("\2FM\5\f\7\5GH\7\22\2\2HI\5\f\7\2IJ\7\23\2\2JM\3\2\2\2") + buf.write("KM\5\16\b\2LD\3\2\2\2LG\3\2\2\2LK\3\2\2\2MV\3\2\2\2NO") + buf.write("\f\7\2\2OP\t\3\2\2PU\5\f\7\bQR\f\6\2\2RS\t\2\2\2SU\5\f") + buf.write("\7\7TN\3\2\2\2TQ\3\2\2\2UX\3\2\2\2VT\3\2\2\2VW\3\2\2\2") + buf.write("W\r\3\2\2\2XV\3\2\2\2Y]\7\26\2\2Z]\t\4\2\2[]\7\27\2\2") + buf.write("\\Y\3\2\2\2\\Z\3\2\2\2\\[\3\2\2\2]\17\3\2\2\2\r\23\34") + buf.write("%)\649@LTV\\") return buf.getvalue() @@ -42,20 +53,27 @@ class PyxellParser ( Parser ): sharedContextCache = PredictionContextCache() - literalNames = [ "", "'print'", "';'", "'='", "'*'", "'/'", - "'%'", "'+'", "'-'", "'('", "')'" ] + literalNames = [ "", "';'", "'skip'", "'print'", "'='", "'if'", + "'elif'", "'else'", "'do'", "'{'", "'}'", "'*'", "'/'", + "'%'", "'+'", "'-'", "'('", "')'", "'true'", "'false'" ] symbolicNames = [ "", "", "", "", "", "", "", "", - "", "", "", "INT", "ID", - "WS" ] + "", "", "", "", + "", "", "", "", + "", "", "", "", + "INT", "ID", "WS" ] RULE_program = 0 RULE_stmt = 1 - RULE_expr = 2 - RULE_atom = 3 + RULE_simple_stmt = 2 + RULE_compound_stmt = 3 + RULE_block = 4 + RULE_expr = 5 + RULE_atom = 6 - ruleNames = [ "program", "stmt", "expr", "atom" ] + ruleNames = [ "program", "stmt", "simple_stmt", "compound_stmt", "block", + "expr", "atom" ] EOF = Token.EOF T__0=1 @@ -68,9 +86,18 @@ class PyxellParser ( Parser ): T__7=8 T__8=9 T__9=10 - INT=11 - ID=12 - WS=13 + T__10=11 + T__11=12 + T__12=13 + T__13=14 + T__14=15 + T__15=16 + T__16=17 + T__17=18 + T__18=19 + INT=20 + ID=21 + WS=22 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -116,17 +143,17 @@ def program(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 11 + self.state = 17 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__0) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__7) | (1 << PyxellParser.T__8) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0): - self.state = 8 + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__4) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__14) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__17) | (1 << PyxellParser.T__18) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0): + self.state = 14 self.stmt() - self.state = 13 + self.state = 19 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 14 + self.state = 20 self.match(PyxellParser.EOF) except RecognitionException as re: localctx.exception = re @@ -143,19 +170,77 @@ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) self.parser = parser + def simple_stmt(self): + return self.getTypedRuleContext(PyxellParser.Simple_stmtContext,0) + + + def compound_stmt(self): + return self.getTypedRuleContext(PyxellParser.Compound_stmtContext,0) + def getRuleIndex(self): return PyxellParser.RULE_stmt + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStmt" ): + return visitor.visitStmt(self) + else: + return visitor.visitChildren(self) + + + + + def stmt(self): + + localctx = PyxellParser.StmtContext(self, self._ctx, self.state) + self.enterRule(localctx, 2, self.RULE_stmt) + try: + self.state = 26 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__13, PyxellParser.T__14, PyxellParser.T__15, PyxellParser.T__17, PyxellParser.T__18, PyxellParser.INT, PyxellParser.ID]: + self.enterOuterAlt(localctx, 1) + self.state = 22 + self.simple_stmt() + self.state = 23 + self.match(PyxellParser.T__0) + pass + elif token in [PyxellParser.T__4]: + self.enterOuterAlt(localctx, 2) + self.state = 25 + self.compound_stmt() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class Simple_stmtContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + + def getRuleIndex(self): + return PyxellParser.RULE_simple_stmt + def copyFrom(self, ctx:ParserRuleContext): super().copyFrom(ctx) - class StmtAssgContext(StmtContext): + class StmtAssgContext(Simple_stmtContext): - def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.StmtContext + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Simple_stmtContext super().__init__(parser) self.copyFrom(ctx) @@ -175,9 +260,23 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) - class StmtPrintContext(StmtContext): + class StmtSkipContext(Simple_stmtContext): - def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.StmtContext + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Simple_stmtContext + super().__init__(parser) + self.copyFrom(ctx) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStmtSkip" ): + return visitor.visitStmtSkip(self) + else: + return visitor.visitChildren(self) + + + class StmtPrintContext(Simple_stmtContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Simple_stmtContext super().__init__(parser) self.copyFrom(ctx) @@ -193,44 +292,46 @@ def accept(self, visitor:ParseTreeVisitor): - def stmt(self): + def simple_stmt(self): - localctx = PyxellParser.StmtContext(self, self._ctx, self.state) - self.enterRule(localctx, 2, self.RULE_stmt) + localctx = PyxellParser.Simple_stmtContext(self, self._ctx, self.state) + self.enterRule(localctx, 4, self.RULE_simple_stmt) try: - self.state = 30 + self.state = 39 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__0]: - localctx = PyxellParser.StmtPrintContext(self, localctx) + if token in [PyxellParser.T__1]: + localctx = PyxellParser.StmtSkipContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 16 - self.match(PyxellParser.T__0) - self.state = 17 - self.expr(0) - self.state = 18 + self.state = 28 self.match(PyxellParser.T__1) pass - elif token in [PyxellParser.T__6, PyxellParser.T__7, PyxellParser.T__8, PyxellParser.INT, PyxellParser.ID]: - localctx = PyxellParser.StmtAssgContext(self, localctx) + elif token in [PyxellParser.T__2]: + localctx = PyxellParser.StmtPrintContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 24 + self.state = 29 + self.match(PyxellParser.T__2) + self.state = 30 + self.expr(0) + pass + elif token in [PyxellParser.T__13, PyxellParser.T__14, PyxellParser.T__15, PyxellParser.T__17, PyxellParser.T__18, PyxellParser.INT, PyxellParser.ID]: + localctx = PyxellParser.StmtAssgContext(self, localctx) + self.enterOuterAlt(localctx, 3) + self.state = 35 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,1,self._ctx) + _alt = self._interp.adaptivePredict(self._input,2,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 20 + self.state = 31 self.match(PyxellParser.ID) - self.state = 21 - self.match(PyxellParser.T__2) - self.state = 26 + self.state = 32 + self.match(PyxellParser.T__3) + self.state = 37 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,1,self._ctx) + _alt = self._interp.adaptivePredict(self._input,2,self._ctx) - self.state = 27 + self.state = 38 self.expr(0) - self.state = 28 - self.match(PyxellParser.T__1) pass else: raise NoViableAltException(self) @@ -244,6 +345,155 @@ def stmt(self): return localctx + class Compound_stmtContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + + def getRuleIndex(self): + return PyxellParser.RULE_compound_stmt + + + def copyFrom(self, ctx:ParserRuleContext): + super().copyFrom(ctx) + + + + class StmtIfContext(Compound_stmtContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Compound_stmtContext + super().__init__(parser) + self.copyFrom(ctx) + + def expr(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(PyxellParser.ExprContext) + else: + return self.getTypedRuleContext(PyxellParser.ExprContext,i) + + def block(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(PyxellParser.BlockContext) + else: + return self.getTypedRuleContext(PyxellParser.BlockContext,i) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStmtIf" ): + return visitor.visitStmtIf(self) + else: + return visitor.visitChildren(self) + + + + def compound_stmt(self): + + localctx = PyxellParser.Compound_stmtContext(self, self._ctx, self.state) + self.enterRule(localctx, 6, self.RULE_compound_stmt) + self._la = 0 # Token type + try: + localctx = PyxellParser.StmtIfContext(self, localctx) + self.enterOuterAlt(localctx, 1) + self.state = 41 + self.match(PyxellParser.T__4) + self.state = 42 + self.expr(0) + self.state = 43 + self.block() + self.state = 50 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==PyxellParser.T__5: + self.state = 44 + self.match(PyxellParser.T__5) + self.state = 45 + self.expr(0) + self.state = 46 + self.block() + self.state = 52 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 55 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==PyxellParser.T__6: + self.state = 53 + self.match(PyxellParser.T__6) + self.state = 54 + self.block() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class BlockContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def stmt(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(PyxellParser.StmtContext) + else: + return self.getTypedRuleContext(PyxellParser.StmtContext,i) + + + def getRuleIndex(self): + return PyxellParser.RULE_block + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitBlock" ): + return visitor.visitBlock(self) + else: + return visitor.visitChildren(self) + + + + + def block(self): + + localctx = PyxellParser.BlockContext(self, self._ctx, self.state) + self.enterRule(localctx, 8, self.RULE_block) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 57 + self.match(PyxellParser.T__7) + self.state = 58 + self.match(PyxellParser.T__8) + self.state = 60 + self._errHandler.sync(self) + _la = self._input.LA(1) + while True: + self.state = 59 + self.stmt() + self.state = 62 + self._errHandler.sync(self) + _la = self._input.LA(1) + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__4) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__14) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__17) | (1 << PyxellParser.T__18) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0)): + break + + self.state = 64 + self.match(PyxellParser.T__9) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ExprContext(ParserRuleContext): def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): @@ -338,105 +588,105 @@ def expr(self, _p:int=0): _parentState = self.state localctx = PyxellParser.ExprContext(self, self._ctx, _parentState) _prevctx = localctx - _startState = 4 - self.enterRecursionRule(localctx, 4, self.RULE_expr, _p) + _startState = 10 + self.enterRecursionRule(localctx, 10, self.RULE_expr, _p) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 40 + self.state = 74 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__6, PyxellParser.T__7]: + if token in [PyxellParser.T__13, PyxellParser.T__14]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 33 + self.state = 67 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not(_la==PyxellParser.T__6 or _la==PyxellParser.T__7): + if not(_la==PyxellParser.T__13 or _la==PyxellParser.T__14): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 34 + self.state = 68 self.expr(3) pass - elif token in [PyxellParser.T__8]: + elif token in [PyxellParser.T__15]: localctx = PyxellParser.ExprParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 35 - self.match(PyxellParser.T__8) - self.state = 36 + self.state = 69 + self.match(PyxellParser.T__15) + self.state = 70 self.expr(0) - self.state = 37 - self.match(PyxellParser.T__9) + self.state = 71 + self.match(PyxellParser.T__16) pass - elif token in [PyxellParser.INT, PyxellParser.ID]: + elif token in [PyxellParser.T__17, PyxellParser.T__18, PyxellParser.INT, PyxellParser.ID]: localctx = PyxellParser.ExprAtomContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 39 + self.state = 73 self.atom() pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 50 + self.state = 84 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,5,self._ctx) + _alt = self._interp.adaptivePredict(self._input,9,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 48 + self.state = 82 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,4,self._ctx) + la_ = self._interp.adaptivePredict(self._input,8,self._ctx) if la_ == 1: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 42 + self.state = 76 if not self.precpred(self._ctx, 5): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") - self.state = 43 + self.state = 77 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__3) | (1 << PyxellParser.T__4) | (1 << PyxellParser.T__5))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__10) | (1 << PyxellParser.T__11) | (1 << PyxellParser.T__12))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 44 + self.state = 78 self.expr(6) pass elif la_ == 2: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 45 + self.state = 79 if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") - self.state = 46 + self.state = 80 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not(_la==PyxellParser.T__6 or _la==PyxellParser.T__7): + if not(_la==PyxellParser.T__13 or _la==PyxellParser.T__14): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 47 + self.state = 81 self.expr(5) pass - self.state = 52 + self.state = 86 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,5,self._ctx) + _alt = self._interp.adaptivePredict(self._input,9,self._ctx) except RecognitionException as re: localctx.exception = re @@ -463,6 +713,20 @@ def copyFrom(self, ctx:ParserRuleContext): + class AtomBoolContext(AtomContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.AtomContext + super().__init__(parser) + self.copyFrom(ctx) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAtomBool" ): + return visitor.visitAtomBool(self) + else: + return visitor.visitChildren(self) + + class AtomIntContext(AtomContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.AtomContext @@ -499,21 +763,33 @@ def accept(self, visitor:ParseTreeVisitor): def atom(self): localctx = PyxellParser.AtomContext(self, self._ctx, self.state) - self.enterRule(localctx, 6, self.RULE_atom) + self.enterRule(localctx, 12, self.RULE_atom) + self._la = 0 # Token type try: - self.state = 55 + self.state = 90 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: localctx = PyxellParser.AtomIntContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 53 + self.state = 87 self.match(PyxellParser.INT) pass + elif token in [PyxellParser.T__17, PyxellParser.T__18]: + localctx = PyxellParser.AtomBoolContext(self, localctx) + self.enterOuterAlt(localctx, 2) + self.state = 88 + _la = self._input.LA(1) + if not(_la==PyxellParser.T__17 or _la==PyxellParser.T__18): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + pass elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 54 + self.enterOuterAlt(localctx, 3) + self.state = 89 self.match(PyxellParser.ID) pass else: @@ -532,7 +808,7 @@ def atom(self): def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): if self._predicates == None: self._predicates = dict() - self._predicates[2] = self.expr_sempred + self._predicates[5] = self.expr_sempred pred = self._predicates.get(ruleIndex, None) if pred is None: raise Exception("No predicate with index:" + str(ruleIndex)) diff --git a/src/antlr/PyxellVisitor.py b/src/antlr/PyxellVisitor.py index 7b7d9ab7..9f6375c5 100644 --- a/src/antlr/PyxellVisitor.py +++ b/src/antlr/PyxellVisitor.py @@ -14,6 +14,16 @@ def visitProgram(self, ctx:PyxellParser.ProgramContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#stmt. + def visitStmt(self, ctx:PyxellParser.StmtContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by PyxellParser#StmtSkip. + def visitStmtSkip(self, ctx:PyxellParser.StmtSkipContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#StmtPrint. def visitStmtPrint(self, ctx:PyxellParser.StmtPrintContext): return self.visitChildren(ctx) @@ -24,6 +34,16 @@ def visitStmtAssg(self, ctx:PyxellParser.StmtAssgContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#StmtIf. + def visitStmtIf(self, ctx:PyxellParser.StmtIfContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by PyxellParser#block. + def visitBlock(self, ctx:PyxellParser.BlockContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#ExprUnaryOp. def visitExprUnaryOp(self, ctx:PyxellParser.ExprUnaryOpContext): return self.visitChildren(ctx) @@ -49,6 +69,11 @@ def visitAtomInt(self, ctx:PyxellParser.AtomIntContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#AtomBool. + def visitAtomBool(self, ctx:PyxellParser.AtomBoolContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#AtomId. def visitAtomId(self, ctx:PyxellParser.AtomIdContext): return self.visitChildren(ctx) diff --git a/src/compiler.py b/src/compiler.py index f03757f0..8d094b2d 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -10,6 +10,7 @@ tVoid = ll.VoidType() tInt = ll.IntType(64) +tBool = ll.IntType(1) tChar = ll.IntType(8) def tFunc(args, ret=tVoid): @@ -30,6 +31,7 @@ def __init__(self): } pass + ### Helpers ### @contextmanager @@ -51,6 +53,7 @@ def assign(self, id, value): self.builder.store(value, var) + ### Program ### def visitProgram(self, ctx): @@ -61,6 +64,7 @@ def visitProgram(self, ctx): self.builder.position_at_end(func.blocks[-1]) self.builder.ret(ll.Constant(tInt, 0)) + ### Statements ### def visitStmtPrint(self, ctx): @@ -73,6 +77,35 @@ def visitStmtAssg(self, ctx): for id in ctx.ID(): self.assign(id, value) + def visitStmtIf(self, ctx): + exprs = ctx.expr() + blocks = ctx.block() + + bbend = ll.Block(parent=self.builder.function) + + def emitIfElse(index): + if len(exprs) <= index: + if len(blocks) > index: + with self.local(): + self.visit(blocks[index]) + return + + cond = self.visit(exprs[index]) + bbif = self.builder.function.append_basic_block() + bbelse = self.builder.function.append_basic_block() + self.builder.cbranch(cond, bbif, bbelse) + + with self.builder._branch_helper(bbif, bbend): + with self.local(): + self.visit(blocks[index]) + + with self.builder._branch_helper(bbelse, bbend): + emitIfElse(index+1) + + emitIfElse(0) + self.builder.function.blocks.append(bbend) + self.builder.position_at_end(bbend) + ### Expressions ### def visitExprBinaryOp(self, ctx): @@ -95,10 +128,14 @@ def visitExprUnaryOp(self, ctx): def visitExprParentheses(self, ctx): return self.visit(ctx.expr()) + ### Atoms ### def visitAtomInt(self, ctx): return ll.Constant(tInt, ctx.INT()) + def visitAtomBool(self, ctx): + return ll.Constant(tBool, int(ctx.getText() == 'true')) + def visitAtomId(self, ctx): return self.builder.load(self.get(ctx.ID())) From 4b7eb09ff606f6c5cc43a919550445c3bb436e65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Tue, 1 Oct 2019 22:07:32 +0200 Subject: [PATCH 004/100] Comparisons --- src/Pyxell.g4 | 9 +- src/antlr/Pyxell.interp | 22 +++- src/antlr/Pyxell.tokens | 36 ++++--- src/antlr/PyxellLexer.interp | 28 ++++- src/antlr/PyxellLexer.py | 125 ++++++++++++--------- src/antlr/PyxellLexer.tokens | 36 ++++--- src/antlr/PyxellParser.py | 203 ++++++++++++++++++++++------------- src/antlr/PyxellVisitor.py | 5 + src/compiler.py | 27 +++-- 9 files changed, 318 insertions(+), 173 deletions(-) diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index 214d3cc2..c0228c84 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -24,11 +24,12 @@ block ; expr - : expr op=('*' | '/' | '%') expr # ExprBinaryOp - | expr op=('+' | '-') expr # ExprBinaryOp - | op=('+' | '-') expr # ExprUnaryOp + : atom # ExprAtom | '(' expr ')' # ExprParentheses - | atom # ExprAtom + | op=('+' | '-') expr # ExprUnaryOp + | expr op=('*' | '/' | '%') expr # ExprBinaryOp + | expr op=('+' | '-') expr # ExprBinaryOp + | expr op=('==' | '!=' | '<' | '<=' | '>' | '>=') expr # ExprCmp ; atom diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index 37b1d9cd..ba58d210 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -10,13 +10,19 @@ null 'do' '{' '}' +'(' +')' +'+' +'-' '*' '/' '%' -'+' -'-' -'(' -')' +'==' +'!=' +'<' +'<=' +'>' +'>=' 'true' 'false' null @@ -44,6 +50,12 @@ null null null null +null +null +null +null +null +null INT ID WS @@ -59,4 +71,4 @@ atom atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 24, 95, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 3, 2, 7, 2, 18, 10, 2, 12, 2, 14, 2, 21, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 29, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 36, 10, 4, 12, 4, 14, 4, 39, 11, 4, 3, 4, 5, 4, 42, 10, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 7, 5, 51, 10, 5, 12, 5, 14, 5, 54, 11, 5, 3, 5, 3, 5, 5, 5, 58, 10, 5, 3, 6, 3, 6, 3, 6, 6, 6, 63, 10, 6, 13, 6, 14, 6, 64, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 77, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 85, 10, 7, 12, 7, 14, 7, 88, 11, 7, 3, 8, 3, 8, 3, 8, 5, 8, 93, 10, 8, 3, 8, 2, 3, 12, 9, 2, 4, 6, 8, 10, 12, 14, 2, 5, 3, 2, 16, 17, 3, 2, 13, 15, 3, 2, 20, 21, 2, 101, 2, 19, 3, 2, 2, 2, 4, 28, 3, 2, 2, 2, 6, 41, 3, 2, 2, 2, 8, 43, 3, 2, 2, 2, 10, 59, 3, 2, 2, 2, 12, 76, 3, 2, 2, 2, 14, 92, 3, 2, 2, 2, 16, 18, 5, 4, 3, 2, 17, 16, 3, 2, 2, 2, 18, 21, 3, 2, 2, 2, 19, 17, 3, 2, 2, 2, 19, 20, 3, 2, 2, 2, 20, 22, 3, 2, 2, 2, 21, 19, 3, 2, 2, 2, 22, 23, 7, 2, 2, 3, 23, 3, 3, 2, 2, 2, 24, 25, 5, 6, 4, 2, 25, 26, 7, 3, 2, 2, 26, 29, 3, 2, 2, 2, 27, 29, 5, 8, 5, 2, 28, 24, 3, 2, 2, 2, 28, 27, 3, 2, 2, 2, 29, 5, 3, 2, 2, 2, 30, 42, 7, 4, 2, 2, 31, 32, 7, 5, 2, 2, 32, 42, 5, 12, 7, 2, 33, 34, 7, 23, 2, 2, 34, 36, 7, 6, 2, 2, 35, 33, 3, 2, 2, 2, 36, 39, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 37, 38, 3, 2, 2, 2, 38, 40, 3, 2, 2, 2, 39, 37, 3, 2, 2, 2, 40, 42, 5, 12, 7, 2, 41, 30, 3, 2, 2, 2, 41, 31, 3, 2, 2, 2, 41, 37, 3, 2, 2, 2, 42, 7, 3, 2, 2, 2, 43, 44, 7, 7, 2, 2, 44, 45, 5, 12, 7, 2, 45, 52, 5, 10, 6, 2, 46, 47, 7, 8, 2, 2, 47, 48, 5, 12, 7, 2, 48, 49, 5, 10, 6, 2, 49, 51, 3, 2, 2, 2, 50, 46, 3, 2, 2, 2, 51, 54, 3, 2, 2, 2, 52, 50, 3, 2, 2, 2, 52, 53, 3, 2, 2, 2, 53, 57, 3, 2, 2, 2, 54, 52, 3, 2, 2, 2, 55, 56, 7, 9, 2, 2, 56, 58, 5, 10, 6, 2, 57, 55, 3, 2, 2, 2, 57, 58, 3, 2, 2, 2, 58, 9, 3, 2, 2, 2, 59, 60, 7, 10, 2, 2, 60, 62, 7, 11, 2, 2, 61, 63, 5, 4, 3, 2, 62, 61, 3, 2, 2, 2, 63, 64, 3, 2, 2, 2, 64, 62, 3, 2, 2, 2, 64, 65, 3, 2, 2, 2, 65, 66, 3, 2, 2, 2, 66, 67, 7, 12, 2, 2, 67, 11, 3, 2, 2, 2, 68, 69, 8, 7, 1, 2, 69, 70, 9, 2, 2, 2, 70, 77, 5, 12, 7, 5, 71, 72, 7, 18, 2, 2, 72, 73, 5, 12, 7, 2, 73, 74, 7, 19, 2, 2, 74, 77, 3, 2, 2, 2, 75, 77, 5, 14, 8, 2, 76, 68, 3, 2, 2, 2, 76, 71, 3, 2, 2, 2, 76, 75, 3, 2, 2, 2, 77, 86, 3, 2, 2, 2, 78, 79, 12, 7, 2, 2, 79, 80, 9, 3, 2, 2, 80, 85, 5, 12, 7, 8, 81, 82, 12, 6, 2, 2, 82, 83, 9, 2, 2, 2, 83, 85, 5, 12, 7, 7, 84, 78, 3, 2, 2, 2, 84, 81, 3, 2, 2, 2, 85, 88, 3, 2, 2, 2, 86, 84, 3, 2, 2, 2, 86, 87, 3, 2, 2, 2, 87, 13, 3, 2, 2, 2, 88, 86, 3, 2, 2, 2, 89, 93, 7, 22, 2, 2, 90, 93, 9, 4, 2, 2, 91, 93, 7, 23, 2, 2, 92, 89, 3, 2, 2, 2, 92, 90, 3, 2, 2, 2, 92, 91, 3, 2, 2, 2, 93, 15, 3, 2, 2, 2, 13, 19, 28, 37, 41, 52, 57, 64, 76, 84, 86, 92] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 30, 98, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 3, 2, 7, 2, 18, 10, 2, 12, 2, 14, 2, 21, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 29, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 36, 10, 4, 12, 4, 14, 4, 39, 11, 4, 3, 4, 5, 4, 42, 10, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 7, 5, 51, 10, 5, 12, 5, 14, 5, 54, 11, 5, 3, 5, 3, 5, 5, 5, 58, 10, 5, 3, 6, 3, 6, 3, 6, 6, 6, 63, 10, 6, 13, 6, 14, 6, 64, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 77, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 88, 10, 7, 12, 7, 14, 7, 91, 11, 7, 3, 8, 3, 8, 3, 8, 5, 8, 96, 10, 8, 3, 8, 2, 3, 12, 9, 2, 4, 6, 8, 10, 12, 14, 2, 6, 3, 2, 15, 16, 3, 2, 17, 19, 3, 2, 20, 25, 3, 2, 26, 27, 2, 105, 2, 19, 3, 2, 2, 2, 4, 28, 3, 2, 2, 2, 6, 41, 3, 2, 2, 2, 8, 43, 3, 2, 2, 2, 10, 59, 3, 2, 2, 2, 12, 76, 3, 2, 2, 2, 14, 95, 3, 2, 2, 2, 16, 18, 5, 4, 3, 2, 17, 16, 3, 2, 2, 2, 18, 21, 3, 2, 2, 2, 19, 17, 3, 2, 2, 2, 19, 20, 3, 2, 2, 2, 20, 22, 3, 2, 2, 2, 21, 19, 3, 2, 2, 2, 22, 23, 7, 2, 2, 3, 23, 3, 3, 2, 2, 2, 24, 25, 5, 6, 4, 2, 25, 26, 7, 3, 2, 2, 26, 29, 3, 2, 2, 2, 27, 29, 5, 8, 5, 2, 28, 24, 3, 2, 2, 2, 28, 27, 3, 2, 2, 2, 29, 5, 3, 2, 2, 2, 30, 42, 7, 4, 2, 2, 31, 32, 7, 5, 2, 2, 32, 42, 5, 12, 7, 2, 33, 34, 7, 29, 2, 2, 34, 36, 7, 6, 2, 2, 35, 33, 3, 2, 2, 2, 36, 39, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 37, 38, 3, 2, 2, 2, 38, 40, 3, 2, 2, 2, 39, 37, 3, 2, 2, 2, 40, 42, 5, 12, 7, 2, 41, 30, 3, 2, 2, 2, 41, 31, 3, 2, 2, 2, 41, 37, 3, 2, 2, 2, 42, 7, 3, 2, 2, 2, 43, 44, 7, 7, 2, 2, 44, 45, 5, 12, 7, 2, 45, 52, 5, 10, 6, 2, 46, 47, 7, 8, 2, 2, 47, 48, 5, 12, 7, 2, 48, 49, 5, 10, 6, 2, 49, 51, 3, 2, 2, 2, 50, 46, 3, 2, 2, 2, 51, 54, 3, 2, 2, 2, 52, 50, 3, 2, 2, 2, 52, 53, 3, 2, 2, 2, 53, 57, 3, 2, 2, 2, 54, 52, 3, 2, 2, 2, 55, 56, 7, 9, 2, 2, 56, 58, 5, 10, 6, 2, 57, 55, 3, 2, 2, 2, 57, 58, 3, 2, 2, 2, 58, 9, 3, 2, 2, 2, 59, 60, 7, 10, 2, 2, 60, 62, 7, 11, 2, 2, 61, 63, 5, 4, 3, 2, 62, 61, 3, 2, 2, 2, 63, 64, 3, 2, 2, 2, 64, 62, 3, 2, 2, 2, 64, 65, 3, 2, 2, 2, 65, 66, 3, 2, 2, 2, 66, 67, 7, 12, 2, 2, 67, 11, 3, 2, 2, 2, 68, 69, 8, 7, 1, 2, 69, 77, 5, 14, 8, 2, 70, 71, 7, 13, 2, 2, 71, 72, 5, 12, 7, 2, 72, 73, 7, 14, 2, 2, 73, 77, 3, 2, 2, 2, 74, 75, 9, 2, 2, 2, 75, 77, 5, 12, 7, 6, 76, 68, 3, 2, 2, 2, 76, 70, 3, 2, 2, 2, 76, 74, 3, 2, 2, 2, 77, 89, 3, 2, 2, 2, 78, 79, 12, 5, 2, 2, 79, 80, 9, 3, 2, 2, 80, 88, 5, 12, 7, 6, 81, 82, 12, 4, 2, 2, 82, 83, 9, 2, 2, 2, 83, 88, 5, 12, 7, 5, 84, 85, 12, 3, 2, 2, 85, 86, 9, 4, 2, 2, 86, 88, 5, 12, 7, 4, 87, 78, 3, 2, 2, 2, 87, 81, 3, 2, 2, 2, 87, 84, 3, 2, 2, 2, 88, 91, 3, 2, 2, 2, 89, 87, 3, 2, 2, 2, 89, 90, 3, 2, 2, 2, 90, 13, 3, 2, 2, 2, 91, 89, 3, 2, 2, 2, 92, 96, 7, 28, 2, 2, 93, 96, 9, 5, 2, 2, 94, 96, 7, 29, 2, 2, 95, 92, 3, 2, 2, 2, 95, 93, 3, 2, 2, 2, 95, 94, 3, 2, 2, 2, 96, 15, 3, 2, 2, 2, 13, 19, 28, 37, 41, 52, 57, 64, 76, 87, 89, 95] \ No newline at end of file diff --git a/src/antlr/Pyxell.tokens b/src/antlr/Pyxell.tokens index 90b6f97f..de5c0140 100644 --- a/src/antlr/Pyxell.tokens +++ b/src/antlr/Pyxell.tokens @@ -17,9 +17,15 @@ T__15=16 T__16=17 T__17=18 T__18=19 -INT=20 -ID=21 -WS=22 +T__19=20 +T__20=21 +T__21=22 +T__22=23 +T__23=24 +T__24=25 +INT=26 +ID=27 +WS=28 ';'=1 'skip'=2 'print'=3 @@ -30,12 +36,18 @@ WS=22 'do'=8 '{'=9 '}'=10 -'*'=11 -'/'=12 -'%'=13 -'+'=14 -'-'=15 -'('=16 -')'=17 -'true'=18 -'false'=19 +'('=11 +')'=12 +'+'=13 +'-'=14 +'*'=15 +'/'=16 +'%'=17 +'=='=18 +'!='=19 +'<'=20 +'<='=21 +'>'=22 +'>='=23 +'true'=24 +'false'=25 diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp index 469eee74..7907cfff 100644 --- a/src/antlr/PyxellLexer.interp +++ b/src/antlr/PyxellLexer.interp @@ -10,13 +10,19 @@ null 'do' '{' '}' +'(' +')' +'+' +'-' '*' '/' '%' -'+' -'-' -'(' -')' +'==' +'!=' +'<' +'<=' +'>' +'>=' 'true' 'false' null @@ -44,6 +50,12 @@ null null null null +null +null +null +null +null +null INT ID WS @@ -68,6 +80,12 @@ T__15 T__16 T__17 T__18 +T__19 +T__20 +T__21 +T__22 +T__23 +T__24 INT ID DIGIT @@ -83,4 +101,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 24, 141, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 6, 21, 115, 10, 21, 13, 21, 14, 21, 116, 3, 22, 3, 22, 7, 22, 121, 10, 22, 12, 22, 14, 22, 124, 11, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 5, 25, 133, 10, 25, 3, 26, 6, 26, 136, 10, 26, 13, 26, 14, 26, 137, 3, 26, 3, 26, 2, 2, 27, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 2, 47, 2, 49, 2, 51, 24, 3, 2, 6, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 142, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 3, 53, 3, 2, 2, 2, 5, 55, 3, 2, 2, 2, 7, 60, 3, 2, 2, 2, 9, 66, 3, 2, 2, 2, 11, 68, 3, 2, 2, 2, 13, 71, 3, 2, 2, 2, 15, 76, 3, 2, 2, 2, 17, 81, 3, 2, 2, 2, 19, 84, 3, 2, 2, 2, 21, 86, 3, 2, 2, 2, 23, 88, 3, 2, 2, 2, 25, 90, 3, 2, 2, 2, 27, 92, 3, 2, 2, 2, 29, 94, 3, 2, 2, 2, 31, 96, 3, 2, 2, 2, 33, 98, 3, 2, 2, 2, 35, 100, 3, 2, 2, 2, 37, 102, 3, 2, 2, 2, 39, 107, 3, 2, 2, 2, 41, 114, 3, 2, 2, 2, 43, 118, 3, 2, 2, 2, 45, 125, 3, 2, 2, 2, 47, 127, 3, 2, 2, 2, 49, 132, 3, 2, 2, 2, 51, 135, 3, 2, 2, 2, 53, 54, 7, 61, 2, 2, 54, 4, 3, 2, 2, 2, 55, 56, 7, 117, 2, 2, 56, 57, 7, 109, 2, 2, 57, 58, 7, 107, 2, 2, 58, 59, 7, 114, 2, 2, 59, 6, 3, 2, 2, 2, 60, 61, 7, 114, 2, 2, 61, 62, 7, 116, 2, 2, 62, 63, 7, 107, 2, 2, 63, 64, 7, 112, 2, 2, 64, 65, 7, 118, 2, 2, 65, 8, 3, 2, 2, 2, 66, 67, 7, 63, 2, 2, 67, 10, 3, 2, 2, 2, 68, 69, 7, 107, 2, 2, 69, 70, 7, 104, 2, 2, 70, 12, 3, 2, 2, 2, 71, 72, 7, 103, 2, 2, 72, 73, 7, 110, 2, 2, 73, 74, 7, 107, 2, 2, 74, 75, 7, 104, 2, 2, 75, 14, 3, 2, 2, 2, 76, 77, 7, 103, 2, 2, 77, 78, 7, 110, 2, 2, 78, 79, 7, 117, 2, 2, 79, 80, 7, 103, 2, 2, 80, 16, 3, 2, 2, 2, 81, 82, 7, 102, 2, 2, 82, 83, 7, 113, 2, 2, 83, 18, 3, 2, 2, 2, 84, 85, 7, 125, 2, 2, 85, 20, 3, 2, 2, 2, 86, 87, 7, 127, 2, 2, 87, 22, 3, 2, 2, 2, 88, 89, 7, 44, 2, 2, 89, 24, 3, 2, 2, 2, 90, 91, 7, 49, 2, 2, 91, 26, 3, 2, 2, 2, 92, 93, 7, 39, 2, 2, 93, 28, 3, 2, 2, 2, 94, 95, 7, 45, 2, 2, 95, 30, 3, 2, 2, 2, 96, 97, 7, 47, 2, 2, 97, 32, 3, 2, 2, 2, 98, 99, 7, 42, 2, 2, 99, 34, 3, 2, 2, 2, 100, 101, 7, 43, 2, 2, 101, 36, 3, 2, 2, 2, 102, 103, 7, 118, 2, 2, 103, 104, 7, 116, 2, 2, 104, 105, 7, 119, 2, 2, 105, 106, 7, 103, 2, 2, 106, 38, 3, 2, 2, 2, 107, 108, 7, 104, 2, 2, 108, 109, 7, 99, 2, 2, 109, 110, 7, 110, 2, 2, 110, 111, 7, 117, 2, 2, 111, 112, 7, 103, 2, 2, 112, 40, 3, 2, 2, 2, 113, 115, 5, 45, 23, 2, 114, 113, 3, 2, 2, 2, 115, 116, 3, 2, 2, 2, 116, 114, 3, 2, 2, 2, 116, 117, 3, 2, 2, 2, 117, 42, 3, 2, 2, 2, 118, 122, 5, 47, 24, 2, 119, 121, 5, 49, 25, 2, 120, 119, 3, 2, 2, 2, 121, 124, 3, 2, 2, 2, 122, 120, 3, 2, 2, 2, 122, 123, 3, 2, 2, 2, 123, 44, 3, 2, 2, 2, 124, 122, 3, 2, 2, 2, 125, 126, 9, 2, 2, 2, 126, 46, 3, 2, 2, 2, 127, 128, 9, 3, 2, 2, 128, 48, 3, 2, 2, 2, 129, 133, 5, 47, 24, 2, 130, 133, 5, 45, 23, 2, 131, 133, 9, 4, 2, 2, 132, 129, 3, 2, 2, 2, 132, 130, 3, 2, 2, 2, 132, 131, 3, 2, 2, 2, 133, 50, 3, 2, 2, 2, 134, 136, 9, 5, 2, 2, 135, 134, 3, 2, 2, 2, 136, 137, 3, 2, 2, 2, 137, 135, 3, 2, 2, 2, 137, 138, 3, 2, 2, 2, 138, 139, 3, 2, 2, 2, 139, 140, 8, 26, 2, 2, 140, 52, 3, 2, 2, 2, 7, 2, 116, 122, 132, 137, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 30, 169, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 6, 27, 143, 10, 27, 13, 27, 14, 27, 144, 3, 28, 3, 28, 7, 28, 149, 10, 28, 12, 28, 14, 28, 152, 11, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 5, 31, 161, 10, 31, 3, 32, 6, 32, 164, 10, 32, 13, 32, 14, 32, 165, 3, 32, 3, 32, 2, 2, 33, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 2, 59, 2, 61, 2, 63, 30, 3, 2, 6, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 170, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 3, 65, 3, 2, 2, 2, 5, 67, 3, 2, 2, 2, 7, 72, 3, 2, 2, 2, 9, 78, 3, 2, 2, 2, 11, 80, 3, 2, 2, 2, 13, 83, 3, 2, 2, 2, 15, 88, 3, 2, 2, 2, 17, 93, 3, 2, 2, 2, 19, 96, 3, 2, 2, 2, 21, 98, 3, 2, 2, 2, 23, 100, 3, 2, 2, 2, 25, 102, 3, 2, 2, 2, 27, 104, 3, 2, 2, 2, 29, 106, 3, 2, 2, 2, 31, 108, 3, 2, 2, 2, 33, 110, 3, 2, 2, 2, 35, 112, 3, 2, 2, 2, 37, 114, 3, 2, 2, 2, 39, 117, 3, 2, 2, 2, 41, 120, 3, 2, 2, 2, 43, 122, 3, 2, 2, 2, 45, 125, 3, 2, 2, 2, 47, 127, 3, 2, 2, 2, 49, 130, 3, 2, 2, 2, 51, 135, 3, 2, 2, 2, 53, 142, 3, 2, 2, 2, 55, 146, 3, 2, 2, 2, 57, 153, 3, 2, 2, 2, 59, 155, 3, 2, 2, 2, 61, 160, 3, 2, 2, 2, 63, 163, 3, 2, 2, 2, 65, 66, 7, 61, 2, 2, 66, 4, 3, 2, 2, 2, 67, 68, 7, 117, 2, 2, 68, 69, 7, 109, 2, 2, 69, 70, 7, 107, 2, 2, 70, 71, 7, 114, 2, 2, 71, 6, 3, 2, 2, 2, 72, 73, 7, 114, 2, 2, 73, 74, 7, 116, 2, 2, 74, 75, 7, 107, 2, 2, 75, 76, 7, 112, 2, 2, 76, 77, 7, 118, 2, 2, 77, 8, 3, 2, 2, 2, 78, 79, 7, 63, 2, 2, 79, 10, 3, 2, 2, 2, 80, 81, 7, 107, 2, 2, 81, 82, 7, 104, 2, 2, 82, 12, 3, 2, 2, 2, 83, 84, 7, 103, 2, 2, 84, 85, 7, 110, 2, 2, 85, 86, 7, 107, 2, 2, 86, 87, 7, 104, 2, 2, 87, 14, 3, 2, 2, 2, 88, 89, 7, 103, 2, 2, 89, 90, 7, 110, 2, 2, 90, 91, 7, 117, 2, 2, 91, 92, 7, 103, 2, 2, 92, 16, 3, 2, 2, 2, 93, 94, 7, 102, 2, 2, 94, 95, 7, 113, 2, 2, 95, 18, 3, 2, 2, 2, 96, 97, 7, 125, 2, 2, 97, 20, 3, 2, 2, 2, 98, 99, 7, 127, 2, 2, 99, 22, 3, 2, 2, 2, 100, 101, 7, 42, 2, 2, 101, 24, 3, 2, 2, 2, 102, 103, 7, 43, 2, 2, 103, 26, 3, 2, 2, 2, 104, 105, 7, 45, 2, 2, 105, 28, 3, 2, 2, 2, 106, 107, 7, 47, 2, 2, 107, 30, 3, 2, 2, 2, 108, 109, 7, 44, 2, 2, 109, 32, 3, 2, 2, 2, 110, 111, 7, 49, 2, 2, 111, 34, 3, 2, 2, 2, 112, 113, 7, 39, 2, 2, 113, 36, 3, 2, 2, 2, 114, 115, 7, 63, 2, 2, 115, 116, 7, 63, 2, 2, 116, 38, 3, 2, 2, 2, 117, 118, 7, 35, 2, 2, 118, 119, 7, 63, 2, 2, 119, 40, 3, 2, 2, 2, 120, 121, 7, 62, 2, 2, 121, 42, 3, 2, 2, 2, 122, 123, 7, 62, 2, 2, 123, 124, 7, 63, 2, 2, 124, 44, 3, 2, 2, 2, 125, 126, 7, 64, 2, 2, 126, 46, 3, 2, 2, 2, 127, 128, 7, 64, 2, 2, 128, 129, 7, 63, 2, 2, 129, 48, 3, 2, 2, 2, 130, 131, 7, 118, 2, 2, 131, 132, 7, 116, 2, 2, 132, 133, 7, 119, 2, 2, 133, 134, 7, 103, 2, 2, 134, 50, 3, 2, 2, 2, 135, 136, 7, 104, 2, 2, 136, 137, 7, 99, 2, 2, 137, 138, 7, 110, 2, 2, 138, 139, 7, 117, 2, 2, 139, 140, 7, 103, 2, 2, 140, 52, 3, 2, 2, 2, 141, 143, 5, 57, 29, 2, 142, 141, 3, 2, 2, 2, 143, 144, 3, 2, 2, 2, 144, 142, 3, 2, 2, 2, 144, 145, 3, 2, 2, 2, 145, 54, 3, 2, 2, 2, 146, 150, 5, 59, 30, 2, 147, 149, 5, 61, 31, 2, 148, 147, 3, 2, 2, 2, 149, 152, 3, 2, 2, 2, 150, 148, 3, 2, 2, 2, 150, 151, 3, 2, 2, 2, 151, 56, 3, 2, 2, 2, 152, 150, 3, 2, 2, 2, 153, 154, 9, 2, 2, 2, 154, 58, 3, 2, 2, 2, 155, 156, 9, 3, 2, 2, 156, 60, 3, 2, 2, 2, 157, 161, 5, 59, 30, 2, 158, 161, 5, 57, 29, 2, 159, 161, 9, 4, 2, 2, 160, 157, 3, 2, 2, 2, 160, 158, 3, 2, 2, 2, 160, 159, 3, 2, 2, 2, 161, 62, 3, 2, 2, 2, 162, 164, 9, 5, 2, 2, 163, 162, 3, 2, 2, 2, 164, 165, 3, 2, 2, 2, 165, 163, 3, 2, 2, 2, 165, 166, 3, 2, 2, 2, 166, 167, 3, 2, 2, 2, 167, 168, 8, 32, 2, 2, 168, 64, 3, 2, 2, 2, 7, 2, 144, 150, 160, 165, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py index 9f0228db..13cd89a2 100644 --- a/src/antlr/PyxellLexer.py +++ b/src/antlr/PyxellLexer.py @@ -8,55 +8,68 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\30") - buf.write("\u008d\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\36") + buf.write("\u00a9\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") - buf.write("\4\31\t\31\4\32\t\32\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\4\3") - buf.write("\4\3\4\3\4\3\4\3\4\3\5\3\5\3\6\3\6\3\6\3\7\3\7\3\7\3\7") - buf.write("\3\7\3\b\3\b\3\b\3\b\3\b\3\t\3\t\3\t\3\n\3\n\3\13\3\13") - buf.write("\3\f\3\f\3\r\3\r\3\16\3\16\3\17\3\17\3\20\3\20\3\21\3") - buf.write("\21\3\22\3\22\3\23\3\23\3\23\3\23\3\23\3\24\3\24\3\24") - buf.write("\3\24\3\24\3\24\3\25\6\25s\n\25\r\25\16\25t\3\26\3\26") - buf.write("\7\26y\n\26\f\26\16\26|\13\26\3\27\3\27\3\30\3\30\3\31") - buf.write("\3\31\3\31\5\31\u0085\n\31\3\32\6\32\u0088\n\32\r\32\16") - buf.write("\32\u0089\3\32\3\32\2\2\33\3\3\5\4\7\5\t\6\13\7\r\b\17") - buf.write("\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23") - buf.write("%\24\'\25)\26+\27-\2/\2\61\2\63\30\3\2\6\3\2\62;\5\2C") - buf.write("\\aac|\4\2))aa\5\2\13\f\17\17\"\"\2\u008e\2\3\3\2\2\2") - buf.write("\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r") - buf.write("\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3") - buf.write("\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2") - buf.write("\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'") - buf.write("\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2\63\3\2\2\2\3\65\3\2\2") - buf.write("\2\5\67\3\2\2\2\7<\3\2\2\2\tB\3\2\2\2\13D\3\2\2\2\rG\3") - buf.write("\2\2\2\17L\3\2\2\2\21Q\3\2\2\2\23T\3\2\2\2\25V\3\2\2\2") - buf.write("\27X\3\2\2\2\31Z\3\2\2\2\33\\\3\2\2\2\35^\3\2\2\2\37`") - buf.write("\3\2\2\2!b\3\2\2\2#d\3\2\2\2%f\3\2\2\2\'k\3\2\2\2)r\3") - buf.write("\2\2\2+v\3\2\2\2-}\3\2\2\2/\177\3\2\2\2\61\u0084\3\2\2") - buf.write("\2\63\u0087\3\2\2\2\65\66\7=\2\2\66\4\3\2\2\2\678\7u\2") - buf.write("\289\7m\2\29:\7k\2\2:;\7r\2\2;\6\3\2\2\2<=\7r\2\2=>\7") - buf.write("t\2\2>?\7k\2\2?@\7p\2\2@A\7v\2\2A\b\3\2\2\2BC\7?\2\2C") - buf.write("\n\3\2\2\2DE\7k\2\2EF\7h\2\2F\f\3\2\2\2GH\7g\2\2HI\7n") - buf.write("\2\2IJ\7k\2\2JK\7h\2\2K\16\3\2\2\2LM\7g\2\2MN\7n\2\2N") - buf.write("O\7u\2\2OP\7g\2\2P\20\3\2\2\2QR\7f\2\2RS\7q\2\2S\22\3") - buf.write("\2\2\2TU\7}\2\2U\24\3\2\2\2VW\7\177\2\2W\26\3\2\2\2XY") - buf.write("\7,\2\2Y\30\3\2\2\2Z[\7\61\2\2[\32\3\2\2\2\\]\7\'\2\2") - buf.write("]\34\3\2\2\2^_\7-\2\2_\36\3\2\2\2`a\7/\2\2a \3\2\2\2b") - buf.write("c\7*\2\2c\"\3\2\2\2de\7+\2\2e$\3\2\2\2fg\7v\2\2gh\7t\2") - buf.write("\2hi\7w\2\2ij\7g\2\2j&\3\2\2\2kl\7h\2\2lm\7c\2\2mn\7n") - buf.write("\2\2no\7u\2\2op\7g\2\2p(\3\2\2\2qs\5-\27\2rq\3\2\2\2s") - buf.write("t\3\2\2\2tr\3\2\2\2tu\3\2\2\2u*\3\2\2\2vz\5/\30\2wy\5") - buf.write("\61\31\2xw\3\2\2\2y|\3\2\2\2zx\3\2\2\2z{\3\2\2\2{,\3\2") - buf.write("\2\2|z\3\2\2\2}~\t\2\2\2~.\3\2\2\2\177\u0080\t\3\2\2\u0080") - buf.write("\60\3\2\2\2\u0081\u0085\5/\30\2\u0082\u0085\5-\27\2\u0083") - buf.write("\u0085\t\4\2\2\u0084\u0081\3\2\2\2\u0084\u0082\3\2\2\2") - buf.write("\u0084\u0083\3\2\2\2\u0085\62\3\2\2\2\u0086\u0088\t\5") - buf.write("\2\2\u0087\u0086\3\2\2\2\u0088\u0089\3\2\2\2\u0089\u0087") - buf.write("\3\2\2\2\u0089\u008a\3\2\2\2\u008a\u008b\3\2\2\2\u008b") - buf.write("\u008c\b\32\2\2\u008c\64\3\2\2\2\7\2tz\u0084\u0089\3\b") - buf.write("\2\2") + buf.write("\4\31\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36") + buf.write("\t\36\4\37\t\37\4 \t \3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\4") + buf.write("\3\4\3\4\3\4\3\4\3\4\3\5\3\5\3\6\3\6\3\6\3\7\3\7\3\7\3") + buf.write("\7\3\7\3\b\3\b\3\b\3\b\3\b\3\t\3\t\3\t\3\n\3\n\3\13\3") + buf.write("\13\3\f\3\f\3\r\3\r\3\16\3\16\3\17\3\17\3\20\3\20\3\21") + buf.write("\3\21\3\22\3\22\3\23\3\23\3\23\3\24\3\24\3\24\3\25\3\25") + buf.write("\3\26\3\26\3\26\3\27\3\27\3\30\3\30\3\30\3\31\3\31\3\31") + buf.write("\3\31\3\31\3\32\3\32\3\32\3\32\3\32\3\32\3\33\6\33\u008f") + buf.write("\n\33\r\33\16\33\u0090\3\34\3\34\7\34\u0095\n\34\f\34") + buf.write("\16\34\u0098\13\34\3\35\3\35\3\36\3\36\3\37\3\37\3\37") + buf.write("\5\37\u00a1\n\37\3 \6 \u00a4\n \r \16 \u00a5\3 \3 \2\2") + buf.write("!\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31") + buf.write("\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31") + buf.write("\61\32\63\33\65\34\67\359\2;\2=\2?\36\3\2\6\3\2\62;\5") + buf.write("\2C\\aac|\4\2))aa\5\2\13\f\17\17\"\"\2\u00aa\2\3\3\2\2") + buf.write("\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2") + buf.write("\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25") + buf.write("\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3") + buf.write("\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2") + buf.write("\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2") + buf.write("\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\2") + buf.write("?\3\2\2\2\3A\3\2\2\2\5C\3\2\2\2\7H\3\2\2\2\tN\3\2\2\2") + buf.write("\13P\3\2\2\2\rS\3\2\2\2\17X\3\2\2\2\21]\3\2\2\2\23`\3") + buf.write("\2\2\2\25b\3\2\2\2\27d\3\2\2\2\31f\3\2\2\2\33h\3\2\2\2") + buf.write("\35j\3\2\2\2\37l\3\2\2\2!n\3\2\2\2#p\3\2\2\2%r\3\2\2\2") + buf.write("\'u\3\2\2\2)x\3\2\2\2+z\3\2\2\2-}\3\2\2\2/\177\3\2\2\2") + buf.write("\61\u0082\3\2\2\2\63\u0087\3\2\2\2\65\u008e\3\2\2\2\67") + buf.write("\u0092\3\2\2\29\u0099\3\2\2\2;\u009b\3\2\2\2=\u00a0\3") + buf.write("\2\2\2?\u00a3\3\2\2\2AB\7=\2\2B\4\3\2\2\2CD\7u\2\2DE\7") + buf.write("m\2\2EF\7k\2\2FG\7r\2\2G\6\3\2\2\2HI\7r\2\2IJ\7t\2\2J") + buf.write("K\7k\2\2KL\7p\2\2LM\7v\2\2M\b\3\2\2\2NO\7?\2\2O\n\3\2") + buf.write("\2\2PQ\7k\2\2QR\7h\2\2R\f\3\2\2\2ST\7g\2\2TU\7n\2\2UV") + buf.write("\7k\2\2VW\7h\2\2W\16\3\2\2\2XY\7g\2\2YZ\7n\2\2Z[\7u\2") + buf.write("\2[\\\7g\2\2\\\20\3\2\2\2]^\7f\2\2^_\7q\2\2_\22\3\2\2") + buf.write("\2`a\7}\2\2a\24\3\2\2\2bc\7\177\2\2c\26\3\2\2\2de\7*\2") + buf.write("\2e\30\3\2\2\2fg\7+\2\2g\32\3\2\2\2hi\7-\2\2i\34\3\2\2") + buf.write("\2jk\7/\2\2k\36\3\2\2\2lm\7,\2\2m \3\2\2\2no\7\61\2\2") + buf.write("o\"\3\2\2\2pq\7\'\2\2q$\3\2\2\2rs\7?\2\2st\7?\2\2t&\3") + buf.write("\2\2\2uv\7#\2\2vw\7?\2\2w(\3\2\2\2xy\7>\2\2y*\3\2\2\2") + buf.write("z{\7>\2\2{|\7?\2\2|,\3\2\2\2}~\7@\2\2~.\3\2\2\2\177\u0080") + buf.write("\7@\2\2\u0080\u0081\7?\2\2\u0081\60\3\2\2\2\u0082\u0083") + buf.write("\7v\2\2\u0083\u0084\7t\2\2\u0084\u0085\7w\2\2\u0085\u0086") + buf.write("\7g\2\2\u0086\62\3\2\2\2\u0087\u0088\7h\2\2\u0088\u0089") + buf.write("\7c\2\2\u0089\u008a\7n\2\2\u008a\u008b\7u\2\2\u008b\u008c") + buf.write("\7g\2\2\u008c\64\3\2\2\2\u008d\u008f\59\35\2\u008e\u008d") + buf.write("\3\2\2\2\u008f\u0090\3\2\2\2\u0090\u008e\3\2\2\2\u0090") + buf.write("\u0091\3\2\2\2\u0091\66\3\2\2\2\u0092\u0096\5;\36\2\u0093") + buf.write("\u0095\5=\37\2\u0094\u0093\3\2\2\2\u0095\u0098\3\2\2\2") + buf.write("\u0096\u0094\3\2\2\2\u0096\u0097\3\2\2\2\u00978\3\2\2") + buf.write("\2\u0098\u0096\3\2\2\2\u0099\u009a\t\2\2\2\u009a:\3\2") + buf.write("\2\2\u009b\u009c\t\3\2\2\u009c<\3\2\2\2\u009d\u00a1\5") + buf.write(";\36\2\u009e\u00a1\59\35\2\u009f\u00a1\t\4\2\2\u00a0\u009d") + buf.write("\3\2\2\2\u00a0\u009e\3\2\2\2\u00a0\u009f\3\2\2\2\u00a1") + buf.write(">\3\2\2\2\u00a2\u00a4\t\5\2\2\u00a3\u00a2\3\2\2\2\u00a4") + buf.write("\u00a5\3\2\2\2\u00a5\u00a3\3\2\2\2\u00a5\u00a6\3\2\2\2") + buf.write("\u00a6\u00a7\3\2\2\2\u00a7\u00a8\b \2\2\u00a8@\3\2\2\2") + buf.write("\7\2\u0090\u0096\u00a0\u00a5\3\b\2\2") return buf.getvalue() @@ -85,9 +98,15 @@ class PyxellLexer(Lexer): T__16 = 17 T__17 = 18 T__18 = 19 - INT = 20 - ID = 21 - WS = 22 + T__19 = 20 + T__20 = 21 + T__21 = 22 + T__22 = 23 + T__23 = 24 + T__24 = 25 + INT = 26 + ID = 27 + WS = 28 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -95,15 +114,17 @@ class PyxellLexer(Lexer): literalNames = [ "", "';'", "'skip'", "'print'", "'='", "'if'", "'elif'", "'else'", - "'do'", "'{'", "'}'", "'*'", "'/'", "'%'", "'+'", "'-'", "'('", - "')'", "'true'", "'false'" ] + "'do'", "'{'", "'}'", "'('", "')'", "'+'", "'-'", "'*'", "'/'", + "'%'", "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", "'true'", + "'false'" ] symbolicNames = [ "", "INT", "ID", "WS" ] ruleNames = [ "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8", "T__9", "T__10", "T__11", "T__12", "T__13", - "T__14", "T__15", "T__16", "T__17", "T__18", "INT", "ID", + "T__14", "T__15", "T__16", "T__17", "T__18", "T__19", + "T__20", "T__21", "T__22", "T__23", "T__24", "INT", "ID", "DIGIT", "ID_START", "ID_CONT", "WS" ] grammarFileName = "Pyxell.g4" diff --git a/src/antlr/PyxellLexer.tokens b/src/antlr/PyxellLexer.tokens index 90b6f97f..de5c0140 100644 --- a/src/antlr/PyxellLexer.tokens +++ b/src/antlr/PyxellLexer.tokens @@ -17,9 +17,15 @@ T__15=16 T__16=17 T__17=18 T__18=19 -INT=20 -ID=21 -WS=22 +T__19=20 +T__20=21 +T__21=22 +T__22=23 +T__23=24 +T__24=25 +INT=26 +ID=27 +WS=28 ';'=1 'skip'=2 'print'=3 @@ -30,12 +36,18 @@ WS=22 'do'=8 '{'=9 '}'=10 -'*'=11 -'/'=12 -'%'=13 -'+'=14 -'-'=15 -'('=16 -')'=17 -'true'=18 -'false'=19 +'('=11 +')'=12 +'+'=13 +'-'=14 +'*'=15 +'/'=16 +'%'=17 +'=='=18 +'!='=19 +'<'=20 +'<='=21 +'>'=22 +'>='=23 +'true'=24 +'false'=25 diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index 7ffe306c..552e010a 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -8,38 +8,39 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\30") - buf.write("_\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\36") + buf.write("b\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b") buf.write("\t\b\3\2\7\2\22\n\2\f\2\16\2\25\13\2\3\2\3\2\3\3\3\3\3") buf.write("\3\3\3\5\3\35\n\3\3\4\3\4\3\4\3\4\3\4\7\4$\n\4\f\4\16") buf.write("\4\'\13\4\3\4\5\4*\n\4\3\5\3\5\3\5\3\5\3\5\3\5\3\5\7\5") buf.write("\63\n\5\f\5\16\5\66\13\5\3\5\3\5\5\5:\n\5\3\6\3\6\3\6") buf.write("\6\6?\n\6\r\6\16\6@\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\7\3") - buf.write("\7\3\7\5\7M\n\7\3\7\3\7\3\7\3\7\3\7\3\7\7\7U\n\7\f\7\16") - buf.write("\7X\13\7\3\b\3\b\3\b\5\b]\n\b\3\b\2\3\f\t\2\4\6\b\n\f") - buf.write("\16\2\5\3\2\20\21\3\2\r\17\3\2\24\25\2e\2\23\3\2\2\2\4") - buf.write("\34\3\2\2\2\6)\3\2\2\2\b+\3\2\2\2\n;\3\2\2\2\fL\3\2\2") - buf.write("\2\16\\\3\2\2\2\20\22\5\4\3\2\21\20\3\2\2\2\22\25\3\2") - buf.write("\2\2\23\21\3\2\2\2\23\24\3\2\2\2\24\26\3\2\2\2\25\23\3") - buf.write("\2\2\2\26\27\7\2\2\3\27\3\3\2\2\2\30\31\5\6\4\2\31\32") - buf.write("\7\3\2\2\32\35\3\2\2\2\33\35\5\b\5\2\34\30\3\2\2\2\34") - buf.write("\33\3\2\2\2\35\5\3\2\2\2\36*\7\4\2\2\37 \7\5\2\2 *\5\f") - buf.write("\7\2!\"\7\27\2\2\"$\7\6\2\2#!\3\2\2\2$\'\3\2\2\2%#\3\2") - buf.write("\2\2%&\3\2\2\2&(\3\2\2\2\'%\3\2\2\2(*\5\f\7\2)\36\3\2") - buf.write("\2\2)\37\3\2\2\2)%\3\2\2\2*\7\3\2\2\2+,\7\7\2\2,-\5\f") - buf.write("\7\2-\64\5\n\6\2./\7\b\2\2/\60\5\f\7\2\60\61\5\n\6\2\61") - buf.write("\63\3\2\2\2\62.\3\2\2\2\63\66\3\2\2\2\64\62\3\2\2\2\64") - buf.write("\65\3\2\2\2\659\3\2\2\2\66\64\3\2\2\2\678\7\t\2\28:\5") - buf.write("\n\6\29\67\3\2\2\29:\3\2\2\2:\t\3\2\2\2;<\7\n\2\2<>\7") - buf.write("\13\2\2=?\5\4\3\2>=\3\2\2\2?@\3\2\2\2@>\3\2\2\2@A\3\2") - buf.write("\2\2AB\3\2\2\2BC\7\f\2\2C\13\3\2\2\2DE\b\7\1\2EF\t\2\2") - buf.write("\2FM\5\f\7\5GH\7\22\2\2HI\5\f\7\2IJ\7\23\2\2JM\3\2\2\2") - buf.write("KM\5\16\b\2LD\3\2\2\2LG\3\2\2\2LK\3\2\2\2MV\3\2\2\2NO") - buf.write("\f\7\2\2OP\t\3\2\2PU\5\f\7\bQR\f\6\2\2RS\t\2\2\2SU\5\f") - buf.write("\7\7TN\3\2\2\2TQ\3\2\2\2UX\3\2\2\2VT\3\2\2\2VW\3\2\2\2") - buf.write("W\r\3\2\2\2XV\3\2\2\2Y]\7\26\2\2Z]\t\4\2\2[]\7\27\2\2") - buf.write("\\Y\3\2\2\2\\Z\3\2\2\2\\[\3\2\2\2]\17\3\2\2\2\r\23\34") - buf.write("%)\649@LTV\\") + buf.write("\7\3\7\5\7M\n\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\7") + buf.write("\7X\n\7\f\7\16\7[\13\7\3\b\3\b\3\b\5\b`\n\b\3\b\2\3\f") + buf.write("\t\2\4\6\b\n\f\16\2\6\3\2\17\20\3\2\21\23\3\2\24\31\3") + buf.write("\2\32\33\2i\2\23\3\2\2\2\4\34\3\2\2\2\6)\3\2\2\2\b+\3") + buf.write("\2\2\2\n;\3\2\2\2\fL\3\2\2\2\16_\3\2\2\2\20\22\5\4\3\2") + buf.write("\21\20\3\2\2\2\22\25\3\2\2\2\23\21\3\2\2\2\23\24\3\2\2") + buf.write("\2\24\26\3\2\2\2\25\23\3\2\2\2\26\27\7\2\2\3\27\3\3\2") + buf.write("\2\2\30\31\5\6\4\2\31\32\7\3\2\2\32\35\3\2\2\2\33\35\5") + buf.write("\b\5\2\34\30\3\2\2\2\34\33\3\2\2\2\35\5\3\2\2\2\36*\7") + buf.write("\4\2\2\37 \7\5\2\2 *\5\f\7\2!\"\7\35\2\2\"$\7\6\2\2#!") + buf.write("\3\2\2\2$\'\3\2\2\2%#\3\2\2\2%&\3\2\2\2&(\3\2\2\2\'%\3") + buf.write("\2\2\2(*\5\f\7\2)\36\3\2\2\2)\37\3\2\2\2)%\3\2\2\2*\7") + buf.write("\3\2\2\2+,\7\7\2\2,-\5\f\7\2-\64\5\n\6\2./\7\b\2\2/\60") + buf.write("\5\f\7\2\60\61\5\n\6\2\61\63\3\2\2\2\62.\3\2\2\2\63\66") + buf.write("\3\2\2\2\64\62\3\2\2\2\64\65\3\2\2\2\659\3\2\2\2\66\64") + buf.write("\3\2\2\2\678\7\t\2\28:\5\n\6\29\67\3\2\2\29:\3\2\2\2:") + buf.write("\t\3\2\2\2;<\7\n\2\2<>\7\13\2\2=?\5\4\3\2>=\3\2\2\2?@") + buf.write("\3\2\2\2@>\3\2\2\2@A\3\2\2\2AB\3\2\2\2BC\7\f\2\2C\13\3") + buf.write("\2\2\2DE\b\7\1\2EM\5\16\b\2FG\7\r\2\2GH\5\f\7\2HI\7\16") + buf.write("\2\2IM\3\2\2\2JK\t\2\2\2KM\5\f\7\6LD\3\2\2\2LF\3\2\2\2") + buf.write("LJ\3\2\2\2MY\3\2\2\2NO\f\5\2\2OP\t\3\2\2PX\5\f\7\6QR\f") + buf.write("\4\2\2RS\t\2\2\2SX\5\f\7\5TU\f\3\2\2UV\t\4\2\2VX\5\f\7") + buf.write("\4WN\3\2\2\2WQ\3\2\2\2WT\3\2\2\2X[\3\2\2\2YW\3\2\2\2Y") + buf.write("Z\3\2\2\2Z\r\3\2\2\2[Y\3\2\2\2\\`\7\34\2\2]`\t\5\2\2^") + buf.write("`\7\35\2\2_\\\3\2\2\2_]\3\2\2\2_^\3\2\2\2`\17\3\2\2\2") + buf.write("\r\23\34%)\649@LWY_") return buf.getvalue() @@ -54,15 +55,17 @@ class PyxellParser ( Parser ): sharedContextCache = PredictionContextCache() literalNames = [ "", "';'", "'skip'", "'print'", "'='", "'if'", - "'elif'", "'else'", "'do'", "'{'", "'}'", "'*'", "'/'", - "'%'", "'+'", "'-'", "'('", "')'", "'true'", "'false'" ] + "'elif'", "'else'", "'do'", "'{'", "'}'", "'('", "')'", + "'+'", "'-'", "'*'", "'/'", "'%'", "'=='", "'!='", + "'<'", "'<='", "'>'", "'>='", "'true'", "'false'" ] symbolicNames = [ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", - "INT", "ID", "WS" ] + "", "", "", "", + "", "", "INT", "ID", "WS" ] RULE_program = 0 RULE_stmt = 1 @@ -95,9 +98,15 @@ class PyxellParser ( Parser ): T__16=17 T__17=18 T__18=19 - INT=20 - ID=21 - WS=22 + T__19=20 + T__20=21 + T__21=22 + T__22=23 + T__23=24 + T__24=25 + INT=26 + ID=27 + WS=28 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -146,7 +155,7 @@ def program(self): self.state = 17 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__4) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__14) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__17) | (1 << PyxellParser.T__18) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0): + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__4) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__24) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0): self.state = 14 self.stmt() self.state = 19 @@ -198,7 +207,7 @@ def stmt(self): self.state = 26 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__13, PyxellParser.T__14, PyxellParser.T__15, PyxellParser.T__17, PyxellParser.T__18, PyxellParser.INT, PyxellParser.ID]: + if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__10, PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__23, PyxellParser.T__24, PyxellParser.INT, PyxellParser.ID]: self.enterOuterAlt(localctx, 1) self.state = 22 self.simple_stmt() @@ -314,7 +323,7 @@ def simple_stmt(self): self.state = 30 self.expr(0) pass - elif token in [PyxellParser.T__13, PyxellParser.T__14, PyxellParser.T__15, PyxellParser.T__17, PyxellParser.T__18, PyxellParser.INT, PyxellParser.ID]: + elif token in [PyxellParser.T__10, PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__23, PyxellParser.T__24, PyxellParser.INT, PyxellParser.ID]: localctx = PyxellParser.StmtAssgContext(self, localctx) self.enterOuterAlt(localctx, 3) self.state = 35 @@ -480,7 +489,7 @@ def block(self): self.state = 62 self._errHandler.sync(self) _la = self._input.LA(1) - if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__4) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__14) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__17) | (1 << PyxellParser.T__18) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0)): + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__4) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__24) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0)): break self.state = 64 @@ -527,6 +536,27 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) + class ExprCmpContext(ExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext + super().__init__(parser) + self.op = None # Token + self.copyFrom(ctx) + + def expr(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(PyxellParser.ExprContext) + else: + return self.getTypedRuleContext(PyxellParser.ExprContext,i) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExprCmp" ): + return visitor.visitExprCmp(self) + else: + return visitor.visitChildren(self) + + class ExprAtomContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext @@ -596,45 +626,45 @@ def expr(self, _p:int=0): self.state = 74 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__13, PyxellParser.T__14]: - localctx = PyxellParser.ExprUnaryOpContext(self, localctx) + if token in [PyxellParser.T__23, PyxellParser.T__24, PyxellParser.INT, PyxellParser.ID]: + localctx = PyxellParser.ExprAtomContext(self, localctx) self._ctx = localctx _prevctx = localctx self.state = 67 - localctx.op = self._input.LT(1) - _la = self._input.LA(1) - if not(_la==PyxellParser.T__13 or _la==PyxellParser.T__14): - localctx.op = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 68 - self.expr(3) + self.atom() pass - elif token in [PyxellParser.T__15]: + elif token in [PyxellParser.T__10]: localctx = PyxellParser.ExprParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx + self.state = 68 + self.match(PyxellParser.T__10) self.state = 69 - self.match(PyxellParser.T__15) - self.state = 70 self.expr(0) - self.state = 71 - self.match(PyxellParser.T__16) + self.state = 70 + self.match(PyxellParser.T__11) pass - elif token in [PyxellParser.T__17, PyxellParser.T__18, PyxellParser.INT, PyxellParser.ID]: - localctx = PyxellParser.ExprAtomContext(self, localctx) + elif token in [PyxellParser.T__12, PyxellParser.T__13]: + localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx + self.state = 72 + localctx.op = self._input.LT(1) + _la = self._input.LA(1) + if not(_la==PyxellParser.T__12 or _la==PyxellParser.T__13): + localctx.op = self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() self.state = 73 - self.atom() + self.expr(4) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 84 + self.state = 87 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,9,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: @@ -642,49 +672,68 @@ def expr(self, _p:int=0): if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 82 + self.state = 85 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,8,self._ctx) if la_ == 1: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 76 - if not self.precpred(self._ctx, 5): + if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") self.state = 77 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__10) | (1 << PyxellParser.T__11) | (1 << PyxellParser.T__12))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__14) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__16))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() self.state = 78 - self.expr(6) + self.expr(4) pass elif la_ == 2: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 79 - if not self.precpred(self._ctx, 4): + if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") self.state = 80 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not(_la==PyxellParser.T__13 or _la==PyxellParser.T__14): + if not(_la==PyxellParser.T__12 or _la==PyxellParser.T__13): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() self.state = 81 - self.expr(5) + self.expr(3) + pass + + elif la_ == 3: + localctx = PyxellParser.ExprCmpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) + self.state = 82 + if not self.precpred(self._ctx, 1): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 83 + localctx.op = self._input.LT(1) + _la = self._input.LA(1) + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__17) | (1 << PyxellParser.T__18) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22))) != 0)): + localctx.op = self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + self.state = 84 + self.expr(2) pass - self.state = 86 + self.state = 89 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,9,self._ctx) @@ -766,21 +815,21 @@ def atom(self): self.enterRule(localctx, 12, self.RULE_atom) self._la = 0 # Token type try: - self.state = 90 + self.state = 93 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: localctx = PyxellParser.AtomIntContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 87 + self.state = 90 self.match(PyxellParser.INT) pass - elif token in [PyxellParser.T__17, PyxellParser.T__18]: + elif token in [PyxellParser.T__23, PyxellParser.T__24]: localctx = PyxellParser.AtomBoolContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 88 + self.state = 91 _la = self._input.LA(1) - if not(_la==PyxellParser.T__17 or _la==PyxellParser.T__18): + if not(_la==PyxellParser.T__23 or _la==PyxellParser.T__24): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -789,7 +838,7 @@ def atom(self): elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 89 + self.state = 92 self.match(PyxellParser.ID) pass else: @@ -817,11 +866,15 @@ def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): def expr_sempred(self, localctx:ExprContext, predIndex:int): if predIndex == 0: - return self.precpred(self._ctx, 5) + return self.precpred(self._ctx, 3) if predIndex == 1: - return self.precpred(self._ctx, 4) + return self.precpred(self._ctx, 2) + + + if predIndex == 2: + return self.precpred(self._ctx, 1) diff --git a/src/antlr/PyxellVisitor.py b/src/antlr/PyxellVisitor.py index 9f6375c5..e6486864 100644 --- a/src/antlr/PyxellVisitor.py +++ b/src/antlr/PyxellVisitor.py @@ -49,6 +49,11 @@ def visitExprUnaryOp(self, ctx:PyxellParser.ExprUnaryOpContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#ExprCmp. + def visitExprCmp(self, ctx:PyxellParser.ExprCmpContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#ExprAtom. def visitExprAtom(self, ctx:PyxellParser.ExprAtomContext): return self.visitChildren(ctx) diff --git a/src/compiler.py b/src/compiler.py index 8d094b2d..942c51da 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -106,8 +106,20 @@ def emitIfElse(index): self.builder.function.blocks.append(bbend) self.builder.position_at_end(bbend) + ### Expressions ### + def visitExprParentheses(self, ctx): + return self.visit(ctx.expr()) + + def visitExprUnaryOp(self, ctx): + instruction = { + '+': self.builder.add, + '-': self.builder.sub, + }[ctx.op.text] + + return instruction(ll.Constant(tInt, 0), self.visit(ctx.expr())) + def visitExprBinaryOp(self, ctx): instruction = { '*': self.builder.mul, @@ -116,17 +128,16 @@ def visitExprBinaryOp(self, ctx): '+': self.builder.add, '-': self.builder.sub, }[ctx.op.text] + return instruction(self.visit(ctx.expr(0)), self.visit(ctx.expr(1))) - def visitExprUnaryOp(self, ctx): - instruction = { - '+': self.builder.add, - '-': self.builder.sub, - }[ctx.op.text] - return instruction(ll.Constant(tInt, 0), self.visit(ctx.expr())) + def visitExprCmp(self, ctx): + values = self.visit(ctx.expr(0)), self.visit(ctx.expr(1)) - def visitExprParentheses(self, ctx): - return self.visit(ctx.expr()) + if values[0].type == tBool: + return self.builder.icmp_unsigned(ctx.op.text, values[0], values[1]) + else: + return self.builder.icmp_signed(ctx.op.text, values[0], values[1]) ### Atoms ### From e359223feee830186ff7d9f3bcea5b9192be1eb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Wed, 2 Oct 2019 22:28:21 +0200 Subject: [PATCH 005/100] Logical operators --- src/Pyxell.g4 | 3 + src/antlr/Pyxell.interp | 8 +- src/antlr/Pyxell.tokens | 16 ++- src/antlr/PyxellLexer.interp | 11 +- src/antlr/PyxellLexer.py | 142 +++++++++++++----------- src/antlr/PyxellLexer.tokens | 16 ++- src/antlr/PyxellParser.py | 207 +++++++++++++++++++++++------------ src/antlr/PyxellVisitor.py | 5 + src/compiler.py | 52 +++++++-- 9 files changed, 308 insertions(+), 152 deletions(-) diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index c0228c84..f136a263 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -30,6 +30,9 @@ expr | expr op=('*' | '/' | '%') expr # ExprBinaryOp | expr op=('+' | '-') expr # ExprBinaryOp | expr op=('==' | '!=' | '<' | '<=' | '>' | '>=') expr # ExprCmp + | op='not' expr # ExprUnaryOp + | expr op='and' expr # ExprLogicalOp + | expr op='or' expr # ExprLogicalOp ; atom diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index ba58d210..fb8045a9 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -23,6 +23,9 @@ null '<=' '>' '>=' +'not' +'and' +'or' 'true' 'false' null @@ -56,6 +59,9 @@ null null null null +null +null +null INT ID WS @@ -71,4 +77,4 @@ atom atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 30, 98, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 3, 2, 7, 2, 18, 10, 2, 12, 2, 14, 2, 21, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 29, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 36, 10, 4, 12, 4, 14, 4, 39, 11, 4, 3, 4, 5, 4, 42, 10, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 7, 5, 51, 10, 5, 12, 5, 14, 5, 54, 11, 5, 3, 5, 3, 5, 5, 5, 58, 10, 5, 3, 6, 3, 6, 3, 6, 6, 6, 63, 10, 6, 13, 6, 14, 6, 64, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 77, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 88, 10, 7, 12, 7, 14, 7, 91, 11, 7, 3, 8, 3, 8, 3, 8, 5, 8, 96, 10, 8, 3, 8, 2, 3, 12, 9, 2, 4, 6, 8, 10, 12, 14, 2, 6, 3, 2, 15, 16, 3, 2, 17, 19, 3, 2, 20, 25, 3, 2, 26, 27, 2, 105, 2, 19, 3, 2, 2, 2, 4, 28, 3, 2, 2, 2, 6, 41, 3, 2, 2, 2, 8, 43, 3, 2, 2, 2, 10, 59, 3, 2, 2, 2, 12, 76, 3, 2, 2, 2, 14, 95, 3, 2, 2, 2, 16, 18, 5, 4, 3, 2, 17, 16, 3, 2, 2, 2, 18, 21, 3, 2, 2, 2, 19, 17, 3, 2, 2, 2, 19, 20, 3, 2, 2, 2, 20, 22, 3, 2, 2, 2, 21, 19, 3, 2, 2, 2, 22, 23, 7, 2, 2, 3, 23, 3, 3, 2, 2, 2, 24, 25, 5, 6, 4, 2, 25, 26, 7, 3, 2, 2, 26, 29, 3, 2, 2, 2, 27, 29, 5, 8, 5, 2, 28, 24, 3, 2, 2, 2, 28, 27, 3, 2, 2, 2, 29, 5, 3, 2, 2, 2, 30, 42, 7, 4, 2, 2, 31, 32, 7, 5, 2, 2, 32, 42, 5, 12, 7, 2, 33, 34, 7, 29, 2, 2, 34, 36, 7, 6, 2, 2, 35, 33, 3, 2, 2, 2, 36, 39, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 37, 38, 3, 2, 2, 2, 38, 40, 3, 2, 2, 2, 39, 37, 3, 2, 2, 2, 40, 42, 5, 12, 7, 2, 41, 30, 3, 2, 2, 2, 41, 31, 3, 2, 2, 2, 41, 37, 3, 2, 2, 2, 42, 7, 3, 2, 2, 2, 43, 44, 7, 7, 2, 2, 44, 45, 5, 12, 7, 2, 45, 52, 5, 10, 6, 2, 46, 47, 7, 8, 2, 2, 47, 48, 5, 12, 7, 2, 48, 49, 5, 10, 6, 2, 49, 51, 3, 2, 2, 2, 50, 46, 3, 2, 2, 2, 51, 54, 3, 2, 2, 2, 52, 50, 3, 2, 2, 2, 52, 53, 3, 2, 2, 2, 53, 57, 3, 2, 2, 2, 54, 52, 3, 2, 2, 2, 55, 56, 7, 9, 2, 2, 56, 58, 5, 10, 6, 2, 57, 55, 3, 2, 2, 2, 57, 58, 3, 2, 2, 2, 58, 9, 3, 2, 2, 2, 59, 60, 7, 10, 2, 2, 60, 62, 7, 11, 2, 2, 61, 63, 5, 4, 3, 2, 62, 61, 3, 2, 2, 2, 63, 64, 3, 2, 2, 2, 64, 62, 3, 2, 2, 2, 64, 65, 3, 2, 2, 2, 65, 66, 3, 2, 2, 2, 66, 67, 7, 12, 2, 2, 67, 11, 3, 2, 2, 2, 68, 69, 8, 7, 1, 2, 69, 77, 5, 14, 8, 2, 70, 71, 7, 13, 2, 2, 71, 72, 5, 12, 7, 2, 72, 73, 7, 14, 2, 2, 73, 77, 3, 2, 2, 2, 74, 75, 9, 2, 2, 2, 75, 77, 5, 12, 7, 6, 76, 68, 3, 2, 2, 2, 76, 70, 3, 2, 2, 2, 76, 74, 3, 2, 2, 2, 77, 89, 3, 2, 2, 2, 78, 79, 12, 5, 2, 2, 79, 80, 9, 3, 2, 2, 80, 88, 5, 12, 7, 6, 81, 82, 12, 4, 2, 2, 82, 83, 9, 2, 2, 2, 83, 88, 5, 12, 7, 5, 84, 85, 12, 3, 2, 2, 85, 86, 9, 4, 2, 2, 86, 88, 5, 12, 7, 4, 87, 78, 3, 2, 2, 2, 87, 81, 3, 2, 2, 2, 87, 84, 3, 2, 2, 2, 88, 91, 3, 2, 2, 2, 89, 87, 3, 2, 2, 2, 89, 90, 3, 2, 2, 2, 90, 13, 3, 2, 2, 2, 91, 89, 3, 2, 2, 2, 92, 96, 7, 28, 2, 2, 93, 96, 9, 5, 2, 2, 94, 96, 7, 29, 2, 2, 95, 92, 3, 2, 2, 2, 95, 93, 3, 2, 2, 2, 95, 94, 3, 2, 2, 2, 96, 15, 3, 2, 2, 2, 13, 19, 28, 37, 41, 52, 57, 64, 76, 87, 89, 95] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 33, 106, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 3, 2, 7, 2, 18, 10, 2, 12, 2, 14, 2, 21, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 29, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 36, 10, 4, 12, 4, 14, 4, 39, 11, 4, 3, 4, 5, 4, 42, 10, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 7, 5, 51, 10, 5, 12, 5, 14, 5, 54, 11, 5, 3, 5, 3, 5, 5, 5, 58, 10, 5, 3, 6, 3, 6, 3, 6, 6, 6, 63, 10, 6, 13, 6, 14, 6, 64, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 79, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 96, 10, 7, 12, 7, 14, 7, 99, 11, 7, 3, 8, 3, 8, 3, 8, 5, 8, 104, 10, 8, 3, 8, 2, 3, 12, 9, 2, 4, 6, 8, 10, 12, 14, 2, 6, 3, 2, 15, 16, 3, 2, 17, 19, 3, 2, 20, 25, 3, 2, 29, 30, 2, 116, 2, 19, 3, 2, 2, 2, 4, 28, 3, 2, 2, 2, 6, 41, 3, 2, 2, 2, 8, 43, 3, 2, 2, 2, 10, 59, 3, 2, 2, 2, 12, 78, 3, 2, 2, 2, 14, 103, 3, 2, 2, 2, 16, 18, 5, 4, 3, 2, 17, 16, 3, 2, 2, 2, 18, 21, 3, 2, 2, 2, 19, 17, 3, 2, 2, 2, 19, 20, 3, 2, 2, 2, 20, 22, 3, 2, 2, 2, 21, 19, 3, 2, 2, 2, 22, 23, 7, 2, 2, 3, 23, 3, 3, 2, 2, 2, 24, 25, 5, 6, 4, 2, 25, 26, 7, 3, 2, 2, 26, 29, 3, 2, 2, 2, 27, 29, 5, 8, 5, 2, 28, 24, 3, 2, 2, 2, 28, 27, 3, 2, 2, 2, 29, 5, 3, 2, 2, 2, 30, 42, 7, 4, 2, 2, 31, 32, 7, 5, 2, 2, 32, 42, 5, 12, 7, 2, 33, 34, 7, 32, 2, 2, 34, 36, 7, 6, 2, 2, 35, 33, 3, 2, 2, 2, 36, 39, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 37, 38, 3, 2, 2, 2, 38, 40, 3, 2, 2, 2, 39, 37, 3, 2, 2, 2, 40, 42, 5, 12, 7, 2, 41, 30, 3, 2, 2, 2, 41, 31, 3, 2, 2, 2, 41, 37, 3, 2, 2, 2, 42, 7, 3, 2, 2, 2, 43, 44, 7, 7, 2, 2, 44, 45, 5, 12, 7, 2, 45, 52, 5, 10, 6, 2, 46, 47, 7, 8, 2, 2, 47, 48, 5, 12, 7, 2, 48, 49, 5, 10, 6, 2, 49, 51, 3, 2, 2, 2, 50, 46, 3, 2, 2, 2, 51, 54, 3, 2, 2, 2, 52, 50, 3, 2, 2, 2, 52, 53, 3, 2, 2, 2, 53, 57, 3, 2, 2, 2, 54, 52, 3, 2, 2, 2, 55, 56, 7, 9, 2, 2, 56, 58, 5, 10, 6, 2, 57, 55, 3, 2, 2, 2, 57, 58, 3, 2, 2, 2, 58, 9, 3, 2, 2, 2, 59, 60, 7, 10, 2, 2, 60, 62, 7, 11, 2, 2, 61, 63, 5, 4, 3, 2, 62, 61, 3, 2, 2, 2, 63, 64, 3, 2, 2, 2, 64, 62, 3, 2, 2, 2, 64, 65, 3, 2, 2, 2, 65, 66, 3, 2, 2, 2, 66, 67, 7, 12, 2, 2, 67, 11, 3, 2, 2, 2, 68, 69, 8, 7, 1, 2, 69, 79, 5, 14, 8, 2, 70, 71, 7, 13, 2, 2, 71, 72, 5, 12, 7, 2, 72, 73, 7, 14, 2, 2, 73, 79, 3, 2, 2, 2, 74, 75, 9, 2, 2, 2, 75, 79, 5, 12, 7, 9, 76, 77, 7, 26, 2, 2, 77, 79, 5, 12, 7, 5, 78, 68, 3, 2, 2, 2, 78, 70, 3, 2, 2, 2, 78, 74, 3, 2, 2, 2, 78, 76, 3, 2, 2, 2, 79, 97, 3, 2, 2, 2, 80, 81, 12, 8, 2, 2, 81, 82, 9, 3, 2, 2, 82, 96, 5, 12, 7, 9, 83, 84, 12, 7, 2, 2, 84, 85, 9, 2, 2, 2, 85, 96, 5, 12, 7, 8, 86, 87, 12, 6, 2, 2, 87, 88, 9, 4, 2, 2, 88, 96, 5, 12, 7, 7, 89, 90, 12, 4, 2, 2, 90, 91, 7, 27, 2, 2, 91, 96, 5, 12, 7, 4, 92, 93, 12, 3, 2, 2, 93, 94, 7, 28, 2, 2, 94, 96, 5, 12, 7, 3, 95, 80, 3, 2, 2, 2, 95, 83, 3, 2, 2, 2, 95, 86, 3, 2, 2, 2, 95, 89, 3, 2, 2, 2, 95, 92, 3, 2, 2, 2, 96, 99, 3, 2, 2, 2, 97, 95, 3, 2, 2, 2, 97, 98, 3, 2, 2, 2, 98, 13, 3, 2, 2, 2, 99, 97, 3, 2, 2, 2, 100, 104, 7, 31, 2, 2, 101, 104, 9, 5, 2, 2, 102, 104, 7, 32, 2, 2, 103, 100, 3, 2, 2, 2, 103, 101, 3, 2, 2, 2, 103, 102, 3, 2, 2, 2, 104, 15, 3, 2, 2, 2, 13, 19, 28, 37, 41, 52, 57, 64, 78, 95, 97, 103] \ No newline at end of file diff --git a/src/antlr/Pyxell.tokens b/src/antlr/Pyxell.tokens index de5c0140..0d037a60 100644 --- a/src/antlr/Pyxell.tokens +++ b/src/antlr/Pyxell.tokens @@ -23,9 +23,12 @@ T__21=22 T__22=23 T__23=24 T__24=25 -INT=26 -ID=27 -WS=28 +T__25=26 +T__26=27 +T__27=28 +INT=29 +ID=30 +WS=31 ';'=1 'skip'=2 'print'=3 @@ -49,5 +52,8 @@ WS=28 '<='=21 '>'=22 '>='=23 -'true'=24 -'false'=25 +'not'=24 +'and'=25 +'or'=26 +'true'=27 +'false'=28 diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp index 7907cfff..622162d5 100644 --- a/src/antlr/PyxellLexer.interp +++ b/src/antlr/PyxellLexer.interp @@ -23,6 +23,9 @@ null '<=' '>' '>=' +'not' +'and' +'or' 'true' 'false' null @@ -56,6 +59,9 @@ null null null null +null +null +null INT ID WS @@ -86,6 +92,9 @@ T__21 T__22 T__23 T__24 +T__25 +T__26 +T__27 INT ID DIGIT @@ -101,4 +110,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 30, 169, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 6, 27, 143, 10, 27, 13, 27, 14, 27, 144, 3, 28, 3, 28, 7, 28, 149, 10, 28, 12, 28, 14, 28, 152, 11, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 5, 31, 161, 10, 31, 3, 32, 6, 32, 164, 10, 32, 13, 32, 14, 32, 165, 3, 32, 3, 32, 2, 2, 33, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 2, 59, 2, 61, 2, 63, 30, 3, 2, 6, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 170, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 3, 65, 3, 2, 2, 2, 5, 67, 3, 2, 2, 2, 7, 72, 3, 2, 2, 2, 9, 78, 3, 2, 2, 2, 11, 80, 3, 2, 2, 2, 13, 83, 3, 2, 2, 2, 15, 88, 3, 2, 2, 2, 17, 93, 3, 2, 2, 2, 19, 96, 3, 2, 2, 2, 21, 98, 3, 2, 2, 2, 23, 100, 3, 2, 2, 2, 25, 102, 3, 2, 2, 2, 27, 104, 3, 2, 2, 2, 29, 106, 3, 2, 2, 2, 31, 108, 3, 2, 2, 2, 33, 110, 3, 2, 2, 2, 35, 112, 3, 2, 2, 2, 37, 114, 3, 2, 2, 2, 39, 117, 3, 2, 2, 2, 41, 120, 3, 2, 2, 2, 43, 122, 3, 2, 2, 2, 45, 125, 3, 2, 2, 2, 47, 127, 3, 2, 2, 2, 49, 130, 3, 2, 2, 2, 51, 135, 3, 2, 2, 2, 53, 142, 3, 2, 2, 2, 55, 146, 3, 2, 2, 2, 57, 153, 3, 2, 2, 2, 59, 155, 3, 2, 2, 2, 61, 160, 3, 2, 2, 2, 63, 163, 3, 2, 2, 2, 65, 66, 7, 61, 2, 2, 66, 4, 3, 2, 2, 2, 67, 68, 7, 117, 2, 2, 68, 69, 7, 109, 2, 2, 69, 70, 7, 107, 2, 2, 70, 71, 7, 114, 2, 2, 71, 6, 3, 2, 2, 2, 72, 73, 7, 114, 2, 2, 73, 74, 7, 116, 2, 2, 74, 75, 7, 107, 2, 2, 75, 76, 7, 112, 2, 2, 76, 77, 7, 118, 2, 2, 77, 8, 3, 2, 2, 2, 78, 79, 7, 63, 2, 2, 79, 10, 3, 2, 2, 2, 80, 81, 7, 107, 2, 2, 81, 82, 7, 104, 2, 2, 82, 12, 3, 2, 2, 2, 83, 84, 7, 103, 2, 2, 84, 85, 7, 110, 2, 2, 85, 86, 7, 107, 2, 2, 86, 87, 7, 104, 2, 2, 87, 14, 3, 2, 2, 2, 88, 89, 7, 103, 2, 2, 89, 90, 7, 110, 2, 2, 90, 91, 7, 117, 2, 2, 91, 92, 7, 103, 2, 2, 92, 16, 3, 2, 2, 2, 93, 94, 7, 102, 2, 2, 94, 95, 7, 113, 2, 2, 95, 18, 3, 2, 2, 2, 96, 97, 7, 125, 2, 2, 97, 20, 3, 2, 2, 2, 98, 99, 7, 127, 2, 2, 99, 22, 3, 2, 2, 2, 100, 101, 7, 42, 2, 2, 101, 24, 3, 2, 2, 2, 102, 103, 7, 43, 2, 2, 103, 26, 3, 2, 2, 2, 104, 105, 7, 45, 2, 2, 105, 28, 3, 2, 2, 2, 106, 107, 7, 47, 2, 2, 107, 30, 3, 2, 2, 2, 108, 109, 7, 44, 2, 2, 109, 32, 3, 2, 2, 2, 110, 111, 7, 49, 2, 2, 111, 34, 3, 2, 2, 2, 112, 113, 7, 39, 2, 2, 113, 36, 3, 2, 2, 2, 114, 115, 7, 63, 2, 2, 115, 116, 7, 63, 2, 2, 116, 38, 3, 2, 2, 2, 117, 118, 7, 35, 2, 2, 118, 119, 7, 63, 2, 2, 119, 40, 3, 2, 2, 2, 120, 121, 7, 62, 2, 2, 121, 42, 3, 2, 2, 2, 122, 123, 7, 62, 2, 2, 123, 124, 7, 63, 2, 2, 124, 44, 3, 2, 2, 2, 125, 126, 7, 64, 2, 2, 126, 46, 3, 2, 2, 2, 127, 128, 7, 64, 2, 2, 128, 129, 7, 63, 2, 2, 129, 48, 3, 2, 2, 2, 130, 131, 7, 118, 2, 2, 131, 132, 7, 116, 2, 2, 132, 133, 7, 119, 2, 2, 133, 134, 7, 103, 2, 2, 134, 50, 3, 2, 2, 2, 135, 136, 7, 104, 2, 2, 136, 137, 7, 99, 2, 2, 137, 138, 7, 110, 2, 2, 138, 139, 7, 117, 2, 2, 139, 140, 7, 103, 2, 2, 140, 52, 3, 2, 2, 2, 141, 143, 5, 57, 29, 2, 142, 141, 3, 2, 2, 2, 143, 144, 3, 2, 2, 2, 144, 142, 3, 2, 2, 2, 144, 145, 3, 2, 2, 2, 145, 54, 3, 2, 2, 2, 146, 150, 5, 59, 30, 2, 147, 149, 5, 61, 31, 2, 148, 147, 3, 2, 2, 2, 149, 152, 3, 2, 2, 2, 150, 148, 3, 2, 2, 2, 150, 151, 3, 2, 2, 2, 151, 56, 3, 2, 2, 2, 152, 150, 3, 2, 2, 2, 153, 154, 9, 2, 2, 2, 154, 58, 3, 2, 2, 2, 155, 156, 9, 3, 2, 2, 156, 60, 3, 2, 2, 2, 157, 161, 5, 59, 30, 2, 158, 161, 5, 57, 29, 2, 159, 161, 9, 4, 2, 2, 160, 157, 3, 2, 2, 2, 160, 158, 3, 2, 2, 2, 160, 159, 3, 2, 2, 2, 161, 62, 3, 2, 2, 2, 162, 164, 9, 5, 2, 2, 163, 162, 3, 2, 2, 2, 164, 165, 3, 2, 2, 2, 165, 163, 3, 2, 2, 2, 165, 166, 3, 2, 2, 2, 166, 167, 3, 2, 2, 2, 167, 168, 8, 32, 2, 2, 168, 64, 3, 2, 2, 2, 7, 2, 144, 150, 160, 165, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 33, 186, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 6, 30, 160, 10, 30, 13, 30, 14, 30, 161, 3, 31, 3, 31, 7, 31, 166, 10, 31, 12, 31, 14, 31, 169, 11, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 5, 34, 178, 10, 34, 3, 35, 6, 35, 181, 10, 35, 13, 35, 14, 35, 182, 3, 35, 3, 35, 2, 2, 36, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 2, 65, 2, 67, 2, 69, 33, 3, 2, 6, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 187, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 3, 71, 3, 2, 2, 2, 5, 73, 3, 2, 2, 2, 7, 78, 3, 2, 2, 2, 9, 84, 3, 2, 2, 2, 11, 86, 3, 2, 2, 2, 13, 89, 3, 2, 2, 2, 15, 94, 3, 2, 2, 2, 17, 99, 3, 2, 2, 2, 19, 102, 3, 2, 2, 2, 21, 104, 3, 2, 2, 2, 23, 106, 3, 2, 2, 2, 25, 108, 3, 2, 2, 2, 27, 110, 3, 2, 2, 2, 29, 112, 3, 2, 2, 2, 31, 114, 3, 2, 2, 2, 33, 116, 3, 2, 2, 2, 35, 118, 3, 2, 2, 2, 37, 120, 3, 2, 2, 2, 39, 123, 3, 2, 2, 2, 41, 126, 3, 2, 2, 2, 43, 128, 3, 2, 2, 2, 45, 131, 3, 2, 2, 2, 47, 133, 3, 2, 2, 2, 49, 136, 3, 2, 2, 2, 51, 140, 3, 2, 2, 2, 53, 144, 3, 2, 2, 2, 55, 147, 3, 2, 2, 2, 57, 152, 3, 2, 2, 2, 59, 159, 3, 2, 2, 2, 61, 163, 3, 2, 2, 2, 63, 170, 3, 2, 2, 2, 65, 172, 3, 2, 2, 2, 67, 177, 3, 2, 2, 2, 69, 180, 3, 2, 2, 2, 71, 72, 7, 61, 2, 2, 72, 4, 3, 2, 2, 2, 73, 74, 7, 117, 2, 2, 74, 75, 7, 109, 2, 2, 75, 76, 7, 107, 2, 2, 76, 77, 7, 114, 2, 2, 77, 6, 3, 2, 2, 2, 78, 79, 7, 114, 2, 2, 79, 80, 7, 116, 2, 2, 80, 81, 7, 107, 2, 2, 81, 82, 7, 112, 2, 2, 82, 83, 7, 118, 2, 2, 83, 8, 3, 2, 2, 2, 84, 85, 7, 63, 2, 2, 85, 10, 3, 2, 2, 2, 86, 87, 7, 107, 2, 2, 87, 88, 7, 104, 2, 2, 88, 12, 3, 2, 2, 2, 89, 90, 7, 103, 2, 2, 90, 91, 7, 110, 2, 2, 91, 92, 7, 107, 2, 2, 92, 93, 7, 104, 2, 2, 93, 14, 3, 2, 2, 2, 94, 95, 7, 103, 2, 2, 95, 96, 7, 110, 2, 2, 96, 97, 7, 117, 2, 2, 97, 98, 7, 103, 2, 2, 98, 16, 3, 2, 2, 2, 99, 100, 7, 102, 2, 2, 100, 101, 7, 113, 2, 2, 101, 18, 3, 2, 2, 2, 102, 103, 7, 125, 2, 2, 103, 20, 3, 2, 2, 2, 104, 105, 7, 127, 2, 2, 105, 22, 3, 2, 2, 2, 106, 107, 7, 42, 2, 2, 107, 24, 3, 2, 2, 2, 108, 109, 7, 43, 2, 2, 109, 26, 3, 2, 2, 2, 110, 111, 7, 45, 2, 2, 111, 28, 3, 2, 2, 2, 112, 113, 7, 47, 2, 2, 113, 30, 3, 2, 2, 2, 114, 115, 7, 44, 2, 2, 115, 32, 3, 2, 2, 2, 116, 117, 7, 49, 2, 2, 117, 34, 3, 2, 2, 2, 118, 119, 7, 39, 2, 2, 119, 36, 3, 2, 2, 2, 120, 121, 7, 63, 2, 2, 121, 122, 7, 63, 2, 2, 122, 38, 3, 2, 2, 2, 123, 124, 7, 35, 2, 2, 124, 125, 7, 63, 2, 2, 125, 40, 3, 2, 2, 2, 126, 127, 7, 62, 2, 2, 127, 42, 3, 2, 2, 2, 128, 129, 7, 62, 2, 2, 129, 130, 7, 63, 2, 2, 130, 44, 3, 2, 2, 2, 131, 132, 7, 64, 2, 2, 132, 46, 3, 2, 2, 2, 133, 134, 7, 64, 2, 2, 134, 135, 7, 63, 2, 2, 135, 48, 3, 2, 2, 2, 136, 137, 7, 112, 2, 2, 137, 138, 7, 113, 2, 2, 138, 139, 7, 118, 2, 2, 139, 50, 3, 2, 2, 2, 140, 141, 7, 99, 2, 2, 141, 142, 7, 112, 2, 2, 142, 143, 7, 102, 2, 2, 143, 52, 3, 2, 2, 2, 144, 145, 7, 113, 2, 2, 145, 146, 7, 116, 2, 2, 146, 54, 3, 2, 2, 2, 147, 148, 7, 118, 2, 2, 148, 149, 7, 116, 2, 2, 149, 150, 7, 119, 2, 2, 150, 151, 7, 103, 2, 2, 151, 56, 3, 2, 2, 2, 152, 153, 7, 104, 2, 2, 153, 154, 7, 99, 2, 2, 154, 155, 7, 110, 2, 2, 155, 156, 7, 117, 2, 2, 156, 157, 7, 103, 2, 2, 157, 58, 3, 2, 2, 2, 158, 160, 5, 63, 32, 2, 159, 158, 3, 2, 2, 2, 160, 161, 3, 2, 2, 2, 161, 159, 3, 2, 2, 2, 161, 162, 3, 2, 2, 2, 162, 60, 3, 2, 2, 2, 163, 167, 5, 65, 33, 2, 164, 166, 5, 67, 34, 2, 165, 164, 3, 2, 2, 2, 166, 169, 3, 2, 2, 2, 167, 165, 3, 2, 2, 2, 167, 168, 3, 2, 2, 2, 168, 62, 3, 2, 2, 2, 169, 167, 3, 2, 2, 2, 170, 171, 9, 2, 2, 2, 171, 64, 3, 2, 2, 2, 172, 173, 9, 3, 2, 2, 173, 66, 3, 2, 2, 2, 174, 178, 5, 65, 33, 2, 175, 178, 5, 63, 32, 2, 176, 178, 9, 4, 2, 2, 177, 174, 3, 2, 2, 2, 177, 175, 3, 2, 2, 2, 177, 176, 3, 2, 2, 2, 178, 68, 3, 2, 2, 2, 179, 181, 9, 5, 2, 2, 180, 179, 3, 2, 2, 2, 181, 182, 3, 2, 2, 2, 182, 180, 3, 2, 2, 2, 182, 183, 3, 2, 2, 2, 183, 184, 3, 2, 2, 2, 184, 185, 8, 35, 2, 2, 185, 70, 3, 2, 2, 2, 7, 2, 161, 167, 177, 182, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py index 13cd89a2..074988d2 100644 --- a/src/antlr/PyxellLexer.py +++ b/src/antlr/PyxellLexer.py @@ -8,68 +8,76 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\36") - buf.write("\u00a9\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2!") + buf.write("\u00ba\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") buf.write("\4\31\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36") - buf.write("\t\36\4\37\t\37\4 \t \3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\4") - buf.write("\3\4\3\4\3\4\3\4\3\4\3\5\3\5\3\6\3\6\3\6\3\7\3\7\3\7\3") - buf.write("\7\3\7\3\b\3\b\3\b\3\b\3\b\3\t\3\t\3\t\3\n\3\n\3\13\3") - buf.write("\13\3\f\3\f\3\r\3\r\3\16\3\16\3\17\3\17\3\20\3\20\3\21") - buf.write("\3\21\3\22\3\22\3\23\3\23\3\23\3\24\3\24\3\24\3\25\3\25") - buf.write("\3\26\3\26\3\26\3\27\3\27\3\30\3\30\3\30\3\31\3\31\3\31") - buf.write("\3\31\3\31\3\32\3\32\3\32\3\32\3\32\3\32\3\33\6\33\u008f") - buf.write("\n\33\r\33\16\33\u0090\3\34\3\34\7\34\u0095\n\34\f\34") - buf.write("\16\34\u0098\13\34\3\35\3\35\3\36\3\36\3\37\3\37\3\37") - buf.write("\5\37\u00a1\n\37\3 \6 \u00a4\n \r \16 \u00a5\3 \3 \2\2") - buf.write("!\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31") - buf.write("\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31") - buf.write("\61\32\63\33\65\34\67\359\2;\2=\2?\36\3\2\6\3\2\62;\5") - buf.write("\2C\\aac|\4\2))aa\5\2\13\f\17\17\"\"\2\u00aa\2\3\3\2\2") - buf.write("\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2") - buf.write("\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25") - buf.write("\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3") - buf.write("\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2") - buf.write("\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2") - buf.write("\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\2") - buf.write("?\3\2\2\2\3A\3\2\2\2\5C\3\2\2\2\7H\3\2\2\2\tN\3\2\2\2") - buf.write("\13P\3\2\2\2\rS\3\2\2\2\17X\3\2\2\2\21]\3\2\2\2\23`\3") - buf.write("\2\2\2\25b\3\2\2\2\27d\3\2\2\2\31f\3\2\2\2\33h\3\2\2\2") - buf.write("\35j\3\2\2\2\37l\3\2\2\2!n\3\2\2\2#p\3\2\2\2%r\3\2\2\2") - buf.write("\'u\3\2\2\2)x\3\2\2\2+z\3\2\2\2-}\3\2\2\2/\177\3\2\2\2") - buf.write("\61\u0082\3\2\2\2\63\u0087\3\2\2\2\65\u008e\3\2\2\2\67") - buf.write("\u0092\3\2\2\29\u0099\3\2\2\2;\u009b\3\2\2\2=\u00a0\3") - buf.write("\2\2\2?\u00a3\3\2\2\2AB\7=\2\2B\4\3\2\2\2CD\7u\2\2DE\7") - buf.write("m\2\2EF\7k\2\2FG\7r\2\2G\6\3\2\2\2HI\7r\2\2IJ\7t\2\2J") - buf.write("K\7k\2\2KL\7p\2\2LM\7v\2\2M\b\3\2\2\2NO\7?\2\2O\n\3\2") - buf.write("\2\2PQ\7k\2\2QR\7h\2\2R\f\3\2\2\2ST\7g\2\2TU\7n\2\2UV") - buf.write("\7k\2\2VW\7h\2\2W\16\3\2\2\2XY\7g\2\2YZ\7n\2\2Z[\7u\2") - buf.write("\2[\\\7g\2\2\\\20\3\2\2\2]^\7f\2\2^_\7q\2\2_\22\3\2\2") - buf.write("\2`a\7}\2\2a\24\3\2\2\2bc\7\177\2\2c\26\3\2\2\2de\7*\2") - buf.write("\2e\30\3\2\2\2fg\7+\2\2g\32\3\2\2\2hi\7-\2\2i\34\3\2\2") - buf.write("\2jk\7/\2\2k\36\3\2\2\2lm\7,\2\2m \3\2\2\2no\7\61\2\2") - buf.write("o\"\3\2\2\2pq\7\'\2\2q$\3\2\2\2rs\7?\2\2st\7?\2\2t&\3") - buf.write("\2\2\2uv\7#\2\2vw\7?\2\2w(\3\2\2\2xy\7>\2\2y*\3\2\2\2") - buf.write("z{\7>\2\2{|\7?\2\2|,\3\2\2\2}~\7@\2\2~.\3\2\2\2\177\u0080") - buf.write("\7@\2\2\u0080\u0081\7?\2\2\u0081\60\3\2\2\2\u0082\u0083") - buf.write("\7v\2\2\u0083\u0084\7t\2\2\u0084\u0085\7w\2\2\u0085\u0086") - buf.write("\7g\2\2\u0086\62\3\2\2\2\u0087\u0088\7h\2\2\u0088\u0089") - buf.write("\7c\2\2\u0089\u008a\7n\2\2\u008a\u008b\7u\2\2\u008b\u008c") - buf.write("\7g\2\2\u008c\64\3\2\2\2\u008d\u008f\59\35\2\u008e\u008d") - buf.write("\3\2\2\2\u008f\u0090\3\2\2\2\u0090\u008e\3\2\2\2\u0090") - buf.write("\u0091\3\2\2\2\u0091\66\3\2\2\2\u0092\u0096\5;\36\2\u0093") - buf.write("\u0095\5=\37\2\u0094\u0093\3\2\2\2\u0095\u0098\3\2\2\2") - buf.write("\u0096\u0094\3\2\2\2\u0096\u0097\3\2\2\2\u00978\3\2\2") - buf.write("\2\u0098\u0096\3\2\2\2\u0099\u009a\t\2\2\2\u009a:\3\2") - buf.write("\2\2\u009b\u009c\t\3\2\2\u009c<\3\2\2\2\u009d\u00a1\5") - buf.write(";\36\2\u009e\u00a1\59\35\2\u009f\u00a1\t\4\2\2\u00a0\u009d") - buf.write("\3\2\2\2\u00a0\u009e\3\2\2\2\u00a0\u009f\3\2\2\2\u00a1") - buf.write(">\3\2\2\2\u00a2\u00a4\t\5\2\2\u00a3\u00a2\3\2\2\2\u00a4") - buf.write("\u00a5\3\2\2\2\u00a5\u00a3\3\2\2\2\u00a5\u00a6\3\2\2\2") - buf.write("\u00a6\u00a7\3\2\2\2\u00a7\u00a8\b \2\2\u00a8@\3\2\2\2") - buf.write("\7\2\u0090\u0096\u00a0\u00a5\3\b\2\2") + buf.write("\t\36\4\37\t\37\4 \t \4!\t!\4\"\t\"\4#\t#\3\2\3\2\3\3") + buf.write("\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\4\3\5\3\5\3\6\3") + buf.write("\6\3\6\3\7\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\b\3\b\3\t\3\t") + buf.write("\3\t\3\n\3\n\3\13\3\13\3\f\3\f\3\r\3\r\3\16\3\16\3\17") + buf.write("\3\17\3\20\3\20\3\21\3\21\3\22\3\22\3\23\3\23\3\23\3\24") + buf.write("\3\24\3\24\3\25\3\25\3\26\3\26\3\26\3\27\3\27\3\30\3\30") + buf.write("\3\30\3\31\3\31\3\31\3\31\3\32\3\32\3\32\3\32\3\33\3\33") + buf.write("\3\33\3\34\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35") + buf.write("\3\35\3\36\6\36\u00a0\n\36\r\36\16\36\u00a1\3\37\3\37") + buf.write("\7\37\u00a6\n\37\f\37\16\37\u00a9\13\37\3 \3 \3!\3!\3") + buf.write("\"\3\"\3\"\5\"\u00b2\n\"\3#\6#\u00b5\n#\r#\16#\u00b6\3") + buf.write("#\3#\2\2$\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25") + buf.write("\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+") + buf.write("\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?\2A\2C\2") + buf.write("E!\3\2\6\3\2\62;\5\2C\\aac|\4\2))aa\5\2\13\f\17\17\"\"") + buf.write("\2\u00bb\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2") + buf.write("\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2") + buf.write("\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2") + buf.write("\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3") + buf.write("\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2") + buf.write("-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3") + buf.write("\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2") + buf.write("E\3\2\2\2\3G\3\2\2\2\5I\3\2\2\2\7N\3\2\2\2\tT\3\2\2\2") + buf.write("\13V\3\2\2\2\rY\3\2\2\2\17^\3\2\2\2\21c\3\2\2\2\23f\3") + buf.write("\2\2\2\25h\3\2\2\2\27j\3\2\2\2\31l\3\2\2\2\33n\3\2\2\2") + buf.write("\35p\3\2\2\2\37r\3\2\2\2!t\3\2\2\2#v\3\2\2\2%x\3\2\2\2") + buf.write("\'{\3\2\2\2)~\3\2\2\2+\u0080\3\2\2\2-\u0083\3\2\2\2/\u0085") + buf.write("\3\2\2\2\61\u0088\3\2\2\2\63\u008c\3\2\2\2\65\u0090\3") + buf.write("\2\2\2\67\u0093\3\2\2\29\u0098\3\2\2\2;\u009f\3\2\2\2") + buf.write("=\u00a3\3\2\2\2?\u00aa\3\2\2\2A\u00ac\3\2\2\2C\u00b1\3") + buf.write("\2\2\2E\u00b4\3\2\2\2GH\7=\2\2H\4\3\2\2\2IJ\7u\2\2JK\7") + buf.write("m\2\2KL\7k\2\2LM\7r\2\2M\6\3\2\2\2NO\7r\2\2OP\7t\2\2P") + buf.write("Q\7k\2\2QR\7p\2\2RS\7v\2\2S\b\3\2\2\2TU\7?\2\2U\n\3\2") + buf.write("\2\2VW\7k\2\2WX\7h\2\2X\f\3\2\2\2YZ\7g\2\2Z[\7n\2\2[\\") + buf.write("\7k\2\2\\]\7h\2\2]\16\3\2\2\2^_\7g\2\2_`\7n\2\2`a\7u\2") + buf.write("\2ab\7g\2\2b\20\3\2\2\2cd\7f\2\2de\7q\2\2e\22\3\2\2\2") + buf.write("fg\7}\2\2g\24\3\2\2\2hi\7\177\2\2i\26\3\2\2\2jk\7*\2\2") + buf.write("k\30\3\2\2\2lm\7+\2\2m\32\3\2\2\2no\7-\2\2o\34\3\2\2\2") + buf.write("pq\7/\2\2q\36\3\2\2\2rs\7,\2\2s \3\2\2\2tu\7\61\2\2u\"") + buf.write("\3\2\2\2vw\7\'\2\2w$\3\2\2\2xy\7?\2\2yz\7?\2\2z&\3\2\2") + buf.write("\2{|\7#\2\2|}\7?\2\2}(\3\2\2\2~\177\7>\2\2\177*\3\2\2") + buf.write("\2\u0080\u0081\7>\2\2\u0081\u0082\7?\2\2\u0082,\3\2\2") + buf.write("\2\u0083\u0084\7@\2\2\u0084.\3\2\2\2\u0085\u0086\7@\2") + buf.write("\2\u0086\u0087\7?\2\2\u0087\60\3\2\2\2\u0088\u0089\7p") + buf.write("\2\2\u0089\u008a\7q\2\2\u008a\u008b\7v\2\2\u008b\62\3") + buf.write("\2\2\2\u008c\u008d\7c\2\2\u008d\u008e\7p\2\2\u008e\u008f") + buf.write("\7f\2\2\u008f\64\3\2\2\2\u0090\u0091\7q\2\2\u0091\u0092") + buf.write("\7t\2\2\u0092\66\3\2\2\2\u0093\u0094\7v\2\2\u0094\u0095") + buf.write("\7t\2\2\u0095\u0096\7w\2\2\u0096\u0097\7g\2\2\u00978\3") + buf.write("\2\2\2\u0098\u0099\7h\2\2\u0099\u009a\7c\2\2\u009a\u009b") + buf.write("\7n\2\2\u009b\u009c\7u\2\2\u009c\u009d\7g\2\2\u009d:\3") + buf.write("\2\2\2\u009e\u00a0\5? \2\u009f\u009e\3\2\2\2\u00a0\u00a1") + buf.write("\3\2\2\2\u00a1\u009f\3\2\2\2\u00a1\u00a2\3\2\2\2\u00a2") + buf.write("<\3\2\2\2\u00a3\u00a7\5A!\2\u00a4\u00a6\5C\"\2\u00a5\u00a4") + buf.write("\3\2\2\2\u00a6\u00a9\3\2\2\2\u00a7\u00a5\3\2\2\2\u00a7") + buf.write("\u00a8\3\2\2\2\u00a8>\3\2\2\2\u00a9\u00a7\3\2\2\2\u00aa") + buf.write("\u00ab\t\2\2\2\u00ab@\3\2\2\2\u00ac\u00ad\t\3\2\2\u00ad") + buf.write("B\3\2\2\2\u00ae\u00b2\5A!\2\u00af\u00b2\5? \2\u00b0\u00b2") + buf.write("\t\4\2\2\u00b1\u00ae\3\2\2\2\u00b1\u00af\3\2\2\2\u00b1") + buf.write("\u00b0\3\2\2\2\u00b2D\3\2\2\2\u00b3\u00b5\t\5\2\2\u00b4") + buf.write("\u00b3\3\2\2\2\u00b5\u00b6\3\2\2\2\u00b6\u00b4\3\2\2\2") + buf.write("\u00b6\u00b7\3\2\2\2\u00b7\u00b8\3\2\2\2\u00b8\u00b9\b") + buf.write("#\2\2\u00b9F\3\2\2\2\7\2\u00a1\u00a7\u00b1\u00b6\3\b\2") + buf.write("\2") return buf.getvalue() @@ -104,9 +112,12 @@ class PyxellLexer(Lexer): T__22 = 23 T__23 = 24 T__24 = 25 - INT = 26 - ID = 27 - WS = 28 + T__25 = 26 + T__26 = 27 + T__27 = 28 + INT = 29 + ID = 30 + WS = 31 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -115,8 +126,8 @@ class PyxellLexer(Lexer): literalNames = [ "", "';'", "'skip'", "'print'", "'='", "'if'", "'elif'", "'else'", "'do'", "'{'", "'}'", "'('", "')'", "'+'", "'-'", "'*'", "'/'", - "'%'", "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", "'true'", - "'false'" ] + "'%'", "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", "'not'", + "'and'", "'or'", "'true'", "'false'" ] symbolicNames = [ "", "INT", "ID", "WS" ] @@ -124,8 +135,9 @@ class PyxellLexer(Lexer): ruleNames = [ "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8", "T__9", "T__10", "T__11", "T__12", "T__13", "T__14", "T__15", "T__16", "T__17", "T__18", "T__19", - "T__20", "T__21", "T__22", "T__23", "T__24", "INT", "ID", - "DIGIT", "ID_START", "ID_CONT", "WS" ] + "T__20", "T__21", "T__22", "T__23", "T__24", "T__25", + "T__26", "T__27", "INT", "ID", "DIGIT", "ID_START", "ID_CONT", + "WS" ] grammarFileName = "Pyxell.g4" diff --git a/src/antlr/PyxellLexer.tokens b/src/antlr/PyxellLexer.tokens index de5c0140..0d037a60 100644 --- a/src/antlr/PyxellLexer.tokens +++ b/src/antlr/PyxellLexer.tokens @@ -23,9 +23,12 @@ T__21=22 T__22=23 T__23=24 T__24=25 -INT=26 -ID=27 -WS=28 +T__25=26 +T__26=27 +T__27=28 +INT=29 +ID=30 +WS=31 ';'=1 'skip'=2 'print'=3 @@ -49,5 +52,8 @@ WS=28 '<='=21 '>'=22 '>='=23 -'true'=24 -'false'=25 +'not'=24 +'and'=25 +'or'=26 +'true'=27 +'false'=28 diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index 552e010a..6643183b 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -8,39 +8,41 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\36") - buf.write("b\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3!") + buf.write("j\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b") buf.write("\t\b\3\2\7\2\22\n\2\f\2\16\2\25\13\2\3\2\3\2\3\3\3\3\3") buf.write("\3\3\3\5\3\35\n\3\3\4\3\4\3\4\3\4\3\4\7\4$\n\4\f\4\16") buf.write("\4\'\13\4\3\4\5\4*\n\4\3\5\3\5\3\5\3\5\3\5\3\5\3\5\7\5") buf.write("\63\n\5\f\5\16\5\66\13\5\3\5\3\5\5\5:\n\5\3\6\3\6\3\6") buf.write("\6\6?\n\6\r\6\16\6@\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\7\3") - buf.write("\7\3\7\5\7M\n\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\7") - buf.write("\7X\n\7\f\7\16\7[\13\7\3\b\3\b\3\b\5\b`\n\b\3\b\2\3\f") - buf.write("\t\2\4\6\b\n\f\16\2\6\3\2\17\20\3\2\21\23\3\2\24\31\3") - buf.write("\2\32\33\2i\2\23\3\2\2\2\4\34\3\2\2\2\6)\3\2\2\2\b+\3") - buf.write("\2\2\2\n;\3\2\2\2\fL\3\2\2\2\16_\3\2\2\2\20\22\5\4\3\2") - buf.write("\21\20\3\2\2\2\22\25\3\2\2\2\23\21\3\2\2\2\23\24\3\2\2") - buf.write("\2\24\26\3\2\2\2\25\23\3\2\2\2\26\27\7\2\2\3\27\3\3\2") - buf.write("\2\2\30\31\5\6\4\2\31\32\7\3\2\2\32\35\3\2\2\2\33\35\5") - buf.write("\b\5\2\34\30\3\2\2\2\34\33\3\2\2\2\35\5\3\2\2\2\36*\7") - buf.write("\4\2\2\37 \7\5\2\2 *\5\f\7\2!\"\7\35\2\2\"$\7\6\2\2#!") - buf.write("\3\2\2\2$\'\3\2\2\2%#\3\2\2\2%&\3\2\2\2&(\3\2\2\2\'%\3") - buf.write("\2\2\2(*\5\f\7\2)\36\3\2\2\2)\37\3\2\2\2)%\3\2\2\2*\7") - buf.write("\3\2\2\2+,\7\7\2\2,-\5\f\7\2-\64\5\n\6\2./\7\b\2\2/\60") - buf.write("\5\f\7\2\60\61\5\n\6\2\61\63\3\2\2\2\62.\3\2\2\2\63\66") - buf.write("\3\2\2\2\64\62\3\2\2\2\64\65\3\2\2\2\659\3\2\2\2\66\64") - buf.write("\3\2\2\2\678\7\t\2\28:\5\n\6\29\67\3\2\2\29:\3\2\2\2:") - buf.write("\t\3\2\2\2;<\7\n\2\2<>\7\13\2\2=?\5\4\3\2>=\3\2\2\2?@") - buf.write("\3\2\2\2@>\3\2\2\2@A\3\2\2\2AB\3\2\2\2BC\7\f\2\2C\13\3") - buf.write("\2\2\2DE\b\7\1\2EM\5\16\b\2FG\7\r\2\2GH\5\f\7\2HI\7\16") - buf.write("\2\2IM\3\2\2\2JK\t\2\2\2KM\5\f\7\6LD\3\2\2\2LF\3\2\2\2") - buf.write("LJ\3\2\2\2MY\3\2\2\2NO\f\5\2\2OP\t\3\2\2PX\5\f\7\6QR\f") - buf.write("\4\2\2RS\t\2\2\2SX\5\f\7\5TU\f\3\2\2UV\t\4\2\2VX\5\f\7") - buf.write("\4WN\3\2\2\2WQ\3\2\2\2WT\3\2\2\2X[\3\2\2\2YW\3\2\2\2Y") - buf.write("Z\3\2\2\2Z\r\3\2\2\2[Y\3\2\2\2\\`\7\34\2\2]`\t\5\2\2^") - buf.write("`\7\35\2\2_\\\3\2\2\2_]\3\2\2\2_^\3\2\2\2`\17\3\2\2\2") - buf.write("\r\23\34%)\649@LWY_") + buf.write("\7\3\7\3\7\3\7\5\7O\n\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3") + buf.write("\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\7\7`\n\7\f\7\16\7c\13\7") + buf.write("\3\b\3\b\3\b\5\bh\n\b\3\b\2\3\f\t\2\4\6\b\n\f\16\2\6\3") + buf.write("\2\17\20\3\2\21\23\3\2\24\31\3\2\35\36\2t\2\23\3\2\2\2") + buf.write("\4\34\3\2\2\2\6)\3\2\2\2\b+\3\2\2\2\n;\3\2\2\2\fN\3\2") + buf.write("\2\2\16g\3\2\2\2\20\22\5\4\3\2\21\20\3\2\2\2\22\25\3\2") + buf.write("\2\2\23\21\3\2\2\2\23\24\3\2\2\2\24\26\3\2\2\2\25\23\3") + buf.write("\2\2\2\26\27\7\2\2\3\27\3\3\2\2\2\30\31\5\6\4\2\31\32") + buf.write("\7\3\2\2\32\35\3\2\2\2\33\35\5\b\5\2\34\30\3\2\2\2\34") + buf.write("\33\3\2\2\2\35\5\3\2\2\2\36*\7\4\2\2\37 \7\5\2\2 *\5\f") + buf.write("\7\2!\"\7 \2\2\"$\7\6\2\2#!\3\2\2\2$\'\3\2\2\2%#\3\2\2") + buf.write("\2%&\3\2\2\2&(\3\2\2\2\'%\3\2\2\2(*\5\f\7\2)\36\3\2\2") + buf.write("\2)\37\3\2\2\2)%\3\2\2\2*\7\3\2\2\2+,\7\7\2\2,-\5\f\7") + buf.write("\2-\64\5\n\6\2./\7\b\2\2/\60\5\f\7\2\60\61\5\n\6\2\61") + buf.write("\63\3\2\2\2\62.\3\2\2\2\63\66\3\2\2\2\64\62\3\2\2\2\64") + buf.write("\65\3\2\2\2\659\3\2\2\2\66\64\3\2\2\2\678\7\t\2\28:\5") + buf.write("\n\6\29\67\3\2\2\29:\3\2\2\2:\t\3\2\2\2;<\7\n\2\2<>\7") + buf.write("\13\2\2=?\5\4\3\2>=\3\2\2\2?@\3\2\2\2@>\3\2\2\2@A\3\2") + buf.write("\2\2AB\3\2\2\2BC\7\f\2\2C\13\3\2\2\2DE\b\7\1\2EO\5\16") + buf.write("\b\2FG\7\r\2\2GH\5\f\7\2HI\7\16\2\2IO\3\2\2\2JK\t\2\2") + buf.write("\2KO\5\f\7\tLM\7\32\2\2MO\5\f\7\5ND\3\2\2\2NF\3\2\2\2") + buf.write("NJ\3\2\2\2NL\3\2\2\2Oa\3\2\2\2PQ\f\b\2\2QR\t\3\2\2R`\5") + buf.write("\f\7\tST\f\7\2\2TU\t\2\2\2U`\5\f\7\bVW\f\6\2\2WX\t\4\2") + buf.write("\2X`\5\f\7\7YZ\f\4\2\2Z[\7\33\2\2[`\5\f\7\4\\]\f\3\2\2") + buf.write("]^\7\34\2\2^`\5\f\7\3_P\3\2\2\2_S\3\2\2\2_V\3\2\2\2_Y") + buf.write("\3\2\2\2_\\\3\2\2\2`c\3\2\2\2a_\3\2\2\2ab\3\2\2\2b\r\3") + buf.write("\2\2\2ca\3\2\2\2dh\7\37\2\2eh\t\5\2\2fh\7 \2\2gd\3\2\2") + buf.write("\2ge\3\2\2\2gf\3\2\2\2h\17\3\2\2\2\r\23\34%)\649@N_ag") return buf.getvalue() @@ -57,7 +59,8 @@ class PyxellParser ( Parser ): literalNames = [ "", "';'", "'skip'", "'print'", "'='", "'if'", "'elif'", "'else'", "'do'", "'{'", "'}'", "'('", "')'", "'+'", "'-'", "'*'", "'/'", "'%'", "'=='", "'!='", - "'<'", "'<='", "'>'", "'>='", "'true'", "'false'" ] + "'<'", "'<='", "'>'", "'>='", "'not'", "'and'", "'or'", + "'true'", "'false'" ] symbolicNames = [ "", "", "", "", "", "", "", "", @@ -65,7 +68,8 @@ class PyxellParser ( Parser ): "", "", "", "", "", "", "", "", "", "", "", "", - "", "", "INT", "ID", "WS" ] + "", "", "", "", + "", "INT", "ID", "WS" ] RULE_program = 0 RULE_stmt = 1 @@ -104,9 +108,12 @@ class PyxellParser ( Parser ): T__22=23 T__23=24 T__24=25 - INT=26 - ID=27 - WS=28 + T__25=26 + T__26=27 + T__27=28 + INT=29 + ID=30 + WS=31 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -155,7 +162,7 @@ def program(self): self.state = 17 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__4) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__24) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0): + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__4) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__26) | (1 << PyxellParser.T__27) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0): self.state = 14 self.stmt() self.state = 19 @@ -207,7 +214,7 @@ def stmt(self): self.state = 26 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__10, PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__23, PyxellParser.T__24, PyxellParser.INT, PyxellParser.ID]: + if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__10, PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__23, PyxellParser.T__26, PyxellParser.T__27, PyxellParser.INT, PyxellParser.ID]: self.enterOuterAlt(localctx, 1) self.state = 22 self.simple_stmt() @@ -323,7 +330,7 @@ def simple_stmt(self): self.state = 30 self.expr(0) pass - elif token in [PyxellParser.T__10, PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__23, PyxellParser.T__24, PyxellParser.INT, PyxellParser.ID]: + elif token in [PyxellParser.T__10, PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__23, PyxellParser.T__26, PyxellParser.T__27, PyxellParser.INT, PyxellParser.ID]: localctx = PyxellParser.StmtAssgContext(self, localctx) self.enterOuterAlt(localctx, 3) self.state = 35 @@ -489,7 +496,7 @@ def block(self): self.state = 62 self._errHandler.sync(self) _la = self._input.LA(1) - if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__4) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__24) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0)): + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__4) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__26) | (1 << PyxellParser.T__27) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0)): break self.state = 64 @@ -612,6 +619,27 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) + class ExprLogicalOpContext(ExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext + super().__init__(parser) + self.op = None # Token + self.copyFrom(ctx) + + def expr(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(PyxellParser.ExprContext) + else: + return self.getTypedRuleContext(PyxellParser.ExprContext,i) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExprLogicalOp" ): + return visitor.visitExprLogicalOp(self) + else: + return visitor.visitChildren(self) + + def expr(self, _p:int=0): _parentctx = self._ctx @@ -623,10 +651,10 @@ def expr(self, _p:int=0): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 74 + self.state = 76 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__23, PyxellParser.T__24, PyxellParser.INT, PyxellParser.ID]: + if token in [PyxellParser.T__26, PyxellParser.T__27, PyxellParser.INT, PyxellParser.ID]: localctx = PyxellParser.ExprAtomContext(self, localctx) self._ctx = localctx _prevctx = localctx @@ -658,13 +686,22 @@ def expr(self, _p:int=0): self._errHandler.reportMatch(self) self.consume() self.state = 73 - self.expr(4) + self.expr(7) + pass + elif token in [PyxellParser.T__23]: + localctx = PyxellParser.ExprUnaryOpContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 74 + localctx.op = self.match(PyxellParser.T__23) + self.state = 75 + self.expr(3) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 87 + self.state = 95 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,9,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: @@ -672,17 +709,17 @@ def expr(self, _p:int=0): if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 85 + self.state = 93 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,8,self._ctx) if la_ == 1: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 76 - if not self.precpred(self._ctx, 3): + self.state = 78 + if not self.precpred(self._ctx, 6): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 77 + raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") + self.state = 79 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__14) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__16))) != 0)): @@ -690,18 +727,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 78 - self.expr(4) + self.state = 80 + self.expr(7) pass elif la_ == 2: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 79 - if not self.precpred(self._ctx, 2): + self.state = 81 + if not self.precpred(self._ctx, 5): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 80 + raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") + self.state = 82 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__12 or _la==PyxellParser.T__13): @@ -709,18 +746,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 81 - self.expr(3) + self.state = 83 + self.expr(6) pass elif la_ == 3: localctx = PyxellParser.ExprCmpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 82 - if not self.precpred(self._ctx, 1): + self.state = 84 + if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") - self.state = 83 + raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") + self.state = 85 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__17) | (1 << PyxellParser.T__18) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22))) != 0)): @@ -728,12 +765,38 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 84 + self.state = 86 + self.expr(5) + pass + + elif la_ == 4: + localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) + self.state = 87 + if not self.precpred(self._ctx, 2): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") + self.state = 88 + localctx.op = self.match(PyxellParser.T__24) + self.state = 89 self.expr(2) pass + elif la_ == 5: + localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) + self.state = 90 + if not self.precpred(self._ctx, 1): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 91 + localctx.op = self.match(PyxellParser.T__25) + self.state = 92 + self.expr(1) + pass + - self.state = 89 + self.state = 97 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,9,self._ctx) @@ -815,21 +878,21 @@ def atom(self): self.enterRule(localctx, 12, self.RULE_atom) self._la = 0 # Token type try: - self.state = 93 + self.state = 101 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: localctx = PyxellParser.AtomIntContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 90 + self.state = 98 self.match(PyxellParser.INT) pass - elif token in [PyxellParser.T__23, PyxellParser.T__24]: + elif token in [PyxellParser.T__26, PyxellParser.T__27]: localctx = PyxellParser.AtomBoolContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 91 + self.state = 99 _la = self._input.LA(1) - if not(_la==PyxellParser.T__23 or _la==PyxellParser.T__24): + if not(_la==PyxellParser.T__26 or _la==PyxellParser.T__27): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -838,7 +901,7 @@ def atom(self): elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 92 + self.state = 100 self.match(PyxellParser.ID) pass else: @@ -866,14 +929,22 @@ def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): def expr_sempred(self, localctx:ExprContext, predIndex:int): if predIndex == 0: - return self.precpred(self._ctx, 3) + return self.precpred(self._ctx, 6) if predIndex == 1: - return self.precpred(self._ctx, 2) + return self.precpred(self._ctx, 5) if predIndex == 2: + return self.precpred(self._ctx, 4) + + + if predIndex == 3: + return self.precpred(self._ctx, 2) + + + if predIndex == 4: return self.precpred(self._ctx, 1) diff --git a/src/antlr/PyxellVisitor.py b/src/antlr/PyxellVisitor.py index e6486864..84a59847 100644 --- a/src/antlr/PyxellVisitor.py +++ b/src/antlr/PyxellVisitor.py @@ -69,6 +69,11 @@ def visitExprBinaryOp(self, ctx:PyxellParser.ExprBinaryOpContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#ExprLogicalOp. + def visitExprLogicalOp(self, ctx:PyxellParser.ExprLogicalOpContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#AtomInt. def visitAtomInt(self, ctx:PyxellParser.AtomIntContext): return self.visitChildren(ctx) diff --git a/src/compiler.py b/src/compiler.py index 942c51da..b1ae2288 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -17,6 +17,12 @@ def tFunc(args, ret=tVoid): return ll.FunctionType(ret, args) +### Constants ### + +vFalse = ll.Constant(tBool, 0) +vTrue = ll.Constant(tBool, 1) + + ### Visitor ### class PyxellCompiler(PyxellVisitor): @@ -81,10 +87,10 @@ def visitStmtIf(self, ctx): exprs = ctx.expr() blocks = ctx.block() - bbend = ll.Block(parent=self.builder.function) + bbend = ll.Block(self.builder.function) def emitIfElse(index): - if len(exprs) <= index: + if len(exprs) == index: if len(blocks) > index: with self.local(): self.visit(blocks[index]) @@ -113,12 +119,15 @@ def visitExprParentheses(self, ctx): return self.visit(ctx.expr()) def visitExprUnaryOp(self, ctx): - instruction = { - '+': self.builder.add, - '-': self.builder.sub, - }[ctx.op.text] + value = self.visit(ctx.expr()) + op = ctx.op.text - return instruction(ll.Constant(tInt, 0), self.visit(ctx.expr())) + if op == '+': + return value + elif op == '-': + return self.builder.neg(value) + elif op == 'not': + return self.builder.not_(value) def visitExprBinaryOp(self, ctx): instruction = { @@ -139,6 +148,35 @@ def visitExprCmp(self, ctx): else: return self.builder.icmp_signed(ctx.op.text, values[0], values[1]) + def visitExprLogicalOp(self, ctx): + op = ctx.op.text + + bbstart = self.builder.basic_block + bbif = self.builder.function.append_basic_block() + bbend = ll.Block(self.builder.function) + + cond1 = self.visit(ctx.expr(0)) + if op == 'and': + self.builder.cbranch(cond1, bbif, bbend) + elif op == 'or': + self.builder.cbranch(cond1, bbend, bbif) + + self.builder.position_at_end(bbend) + phi = self.builder.phi(tBool) + if op == 'and': + phi.add_incoming(vFalse, bbstart) + elif op == 'or': + phi.add_incoming(vTrue, bbstart) + + with self.builder._branch_helper(bbif, bbend): + cond2 = self.visit(ctx.expr(1)) + phi.add_incoming(cond2, self.builder.basic_block) + + self.builder.function.blocks.append(bbend) + self.builder.position_at_end(bbend) + + return phi + ### Atoms ### From 28abd01ad24f21c50392fe76d72199de939248ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Thu, 3 Oct 2019 23:28:29 +0200 Subject: [PATCH 006/100] Chained comparisons There was a bug in the previous implementation: some expressions were evaluated more than once. --- src/Pyxell.g4 | 2 +- src/antlr/Pyxell.interp | 2 +- src/antlr/PyxellParser.py | 4 +-- src/compiler.py | 56 ++++++++++++++++++++++++++++++++++----- test/good/basic/cmp03.out | 1 + test/good/basic/cmp03.px | 3 +++ test/good/basic/cmp07.out | 7 +++++ test/good/basic/cmp07.px | 7 +++++ 8 files changed, 71 insertions(+), 11 deletions(-) create mode 100644 test/good/basic/cmp07.out create mode 100644 test/good/basic/cmp07.px diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index f136a263..cd64e510 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -29,7 +29,7 @@ expr | op=('+' | '-') expr # ExprUnaryOp | expr op=('*' | '/' | '%') expr # ExprBinaryOp | expr op=('+' | '-') expr # ExprBinaryOp - | expr op=('==' | '!=' | '<' | '<=' | '>' | '>=') expr # ExprCmp + | expr op=('==' | '!=' | '<' | '<=' | '>' | '>=') expr # ExprCmp | op='not' expr # ExprUnaryOp | expr op='and' expr # ExprLogicalOp | expr op='or' expr # ExprLogicalOp diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index fb8045a9..2fb55b7d 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -77,4 +77,4 @@ atom atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 33, 106, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 3, 2, 7, 2, 18, 10, 2, 12, 2, 14, 2, 21, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 29, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 36, 10, 4, 12, 4, 14, 4, 39, 11, 4, 3, 4, 5, 4, 42, 10, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 7, 5, 51, 10, 5, 12, 5, 14, 5, 54, 11, 5, 3, 5, 3, 5, 5, 5, 58, 10, 5, 3, 6, 3, 6, 3, 6, 6, 6, 63, 10, 6, 13, 6, 14, 6, 64, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 79, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 96, 10, 7, 12, 7, 14, 7, 99, 11, 7, 3, 8, 3, 8, 3, 8, 5, 8, 104, 10, 8, 3, 8, 2, 3, 12, 9, 2, 4, 6, 8, 10, 12, 14, 2, 6, 3, 2, 15, 16, 3, 2, 17, 19, 3, 2, 20, 25, 3, 2, 29, 30, 2, 116, 2, 19, 3, 2, 2, 2, 4, 28, 3, 2, 2, 2, 6, 41, 3, 2, 2, 2, 8, 43, 3, 2, 2, 2, 10, 59, 3, 2, 2, 2, 12, 78, 3, 2, 2, 2, 14, 103, 3, 2, 2, 2, 16, 18, 5, 4, 3, 2, 17, 16, 3, 2, 2, 2, 18, 21, 3, 2, 2, 2, 19, 17, 3, 2, 2, 2, 19, 20, 3, 2, 2, 2, 20, 22, 3, 2, 2, 2, 21, 19, 3, 2, 2, 2, 22, 23, 7, 2, 2, 3, 23, 3, 3, 2, 2, 2, 24, 25, 5, 6, 4, 2, 25, 26, 7, 3, 2, 2, 26, 29, 3, 2, 2, 2, 27, 29, 5, 8, 5, 2, 28, 24, 3, 2, 2, 2, 28, 27, 3, 2, 2, 2, 29, 5, 3, 2, 2, 2, 30, 42, 7, 4, 2, 2, 31, 32, 7, 5, 2, 2, 32, 42, 5, 12, 7, 2, 33, 34, 7, 32, 2, 2, 34, 36, 7, 6, 2, 2, 35, 33, 3, 2, 2, 2, 36, 39, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 37, 38, 3, 2, 2, 2, 38, 40, 3, 2, 2, 2, 39, 37, 3, 2, 2, 2, 40, 42, 5, 12, 7, 2, 41, 30, 3, 2, 2, 2, 41, 31, 3, 2, 2, 2, 41, 37, 3, 2, 2, 2, 42, 7, 3, 2, 2, 2, 43, 44, 7, 7, 2, 2, 44, 45, 5, 12, 7, 2, 45, 52, 5, 10, 6, 2, 46, 47, 7, 8, 2, 2, 47, 48, 5, 12, 7, 2, 48, 49, 5, 10, 6, 2, 49, 51, 3, 2, 2, 2, 50, 46, 3, 2, 2, 2, 51, 54, 3, 2, 2, 2, 52, 50, 3, 2, 2, 2, 52, 53, 3, 2, 2, 2, 53, 57, 3, 2, 2, 2, 54, 52, 3, 2, 2, 2, 55, 56, 7, 9, 2, 2, 56, 58, 5, 10, 6, 2, 57, 55, 3, 2, 2, 2, 57, 58, 3, 2, 2, 2, 58, 9, 3, 2, 2, 2, 59, 60, 7, 10, 2, 2, 60, 62, 7, 11, 2, 2, 61, 63, 5, 4, 3, 2, 62, 61, 3, 2, 2, 2, 63, 64, 3, 2, 2, 2, 64, 62, 3, 2, 2, 2, 64, 65, 3, 2, 2, 2, 65, 66, 3, 2, 2, 2, 66, 67, 7, 12, 2, 2, 67, 11, 3, 2, 2, 2, 68, 69, 8, 7, 1, 2, 69, 79, 5, 14, 8, 2, 70, 71, 7, 13, 2, 2, 71, 72, 5, 12, 7, 2, 72, 73, 7, 14, 2, 2, 73, 79, 3, 2, 2, 2, 74, 75, 9, 2, 2, 2, 75, 79, 5, 12, 7, 9, 76, 77, 7, 26, 2, 2, 77, 79, 5, 12, 7, 5, 78, 68, 3, 2, 2, 2, 78, 70, 3, 2, 2, 2, 78, 74, 3, 2, 2, 2, 78, 76, 3, 2, 2, 2, 79, 97, 3, 2, 2, 2, 80, 81, 12, 8, 2, 2, 81, 82, 9, 3, 2, 2, 82, 96, 5, 12, 7, 9, 83, 84, 12, 7, 2, 2, 84, 85, 9, 2, 2, 2, 85, 96, 5, 12, 7, 8, 86, 87, 12, 6, 2, 2, 87, 88, 9, 4, 2, 2, 88, 96, 5, 12, 7, 7, 89, 90, 12, 4, 2, 2, 90, 91, 7, 27, 2, 2, 91, 96, 5, 12, 7, 4, 92, 93, 12, 3, 2, 2, 93, 94, 7, 28, 2, 2, 94, 96, 5, 12, 7, 3, 95, 80, 3, 2, 2, 2, 95, 83, 3, 2, 2, 2, 95, 86, 3, 2, 2, 2, 95, 89, 3, 2, 2, 2, 95, 92, 3, 2, 2, 2, 96, 99, 3, 2, 2, 2, 97, 95, 3, 2, 2, 2, 97, 98, 3, 2, 2, 2, 98, 13, 3, 2, 2, 2, 99, 97, 3, 2, 2, 2, 100, 104, 7, 31, 2, 2, 101, 104, 9, 5, 2, 2, 102, 104, 7, 32, 2, 2, 103, 100, 3, 2, 2, 2, 103, 101, 3, 2, 2, 2, 103, 102, 3, 2, 2, 2, 104, 15, 3, 2, 2, 2, 13, 19, 28, 37, 41, 52, 57, 64, 78, 95, 97, 103] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 33, 106, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 3, 2, 7, 2, 18, 10, 2, 12, 2, 14, 2, 21, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 29, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 36, 10, 4, 12, 4, 14, 4, 39, 11, 4, 3, 4, 5, 4, 42, 10, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 7, 5, 51, 10, 5, 12, 5, 14, 5, 54, 11, 5, 3, 5, 3, 5, 5, 5, 58, 10, 5, 3, 6, 3, 6, 3, 6, 6, 6, 63, 10, 6, 13, 6, 14, 6, 64, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 79, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 96, 10, 7, 12, 7, 14, 7, 99, 11, 7, 3, 8, 3, 8, 3, 8, 5, 8, 104, 10, 8, 3, 8, 2, 3, 12, 9, 2, 4, 6, 8, 10, 12, 14, 2, 6, 3, 2, 15, 16, 3, 2, 17, 19, 3, 2, 20, 25, 3, 2, 29, 30, 2, 116, 2, 19, 3, 2, 2, 2, 4, 28, 3, 2, 2, 2, 6, 41, 3, 2, 2, 2, 8, 43, 3, 2, 2, 2, 10, 59, 3, 2, 2, 2, 12, 78, 3, 2, 2, 2, 14, 103, 3, 2, 2, 2, 16, 18, 5, 4, 3, 2, 17, 16, 3, 2, 2, 2, 18, 21, 3, 2, 2, 2, 19, 17, 3, 2, 2, 2, 19, 20, 3, 2, 2, 2, 20, 22, 3, 2, 2, 2, 21, 19, 3, 2, 2, 2, 22, 23, 7, 2, 2, 3, 23, 3, 3, 2, 2, 2, 24, 25, 5, 6, 4, 2, 25, 26, 7, 3, 2, 2, 26, 29, 3, 2, 2, 2, 27, 29, 5, 8, 5, 2, 28, 24, 3, 2, 2, 2, 28, 27, 3, 2, 2, 2, 29, 5, 3, 2, 2, 2, 30, 42, 7, 4, 2, 2, 31, 32, 7, 5, 2, 2, 32, 42, 5, 12, 7, 2, 33, 34, 7, 32, 2, 2, 34, 36, 7, 6, 2, 2, 35, 33, 3, 2, 2, 2, 36, 39, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 37, 38, 3, 2, 2, 2, 38, 40, 3, 2, 2, 2, 39, 37, 3, 2, 2, 2, 40, 42, 5, 12, 7, 2, 41, 30, 3, 2, 2, 2, 41, 31, 3, 2, 2, 2, 41, 37, 3, 2, 2, 2, 42, 7, 3, 2, 2, 2, 43, 44, 7, 7, 2, 2, 44, 45, 5, 12, 7, 2, 45, 52, 5, 10, 6, 2, 46, 47, 7, 8, 2, 2, 47, 48, 5, 12, 7, 2, 48, 49, 5, 10, 6, 2, 49, 51, 3, 2, 2, 2, 50, 46, 3, 2, 2, 2, 51, 54, 3, 2, 2, 2, 52, 50, 3, 2, 2, 2, 52, 53, 3, 2, 2, 2, 53, 57, 3, 2, 2, 2, 54, 52, 3, 2, 2, 2, 55, 56, 7, 9, 2, 2, 56, 58, 5, 10, 6, 2, 57, 55, 3, 2, 2, 2, 57, 58, 3, 2, 2, 2, 58, 9, 3, 2, 2, 2, 59, 60, 7, 10, 2, 2, 60, 62, 7, 11, 2, 2, 61, 63, 5, 4, 3, 2, 62, 61, 3, 2, 2, 2, 63, 64, 3, 2, 2, 2, 64, 62, 3, 2, 2, 2, 64, 65, 3, 2, 2, 2, 65, 66, 3, 2, 2, 2, 66, 67, 7, 12, 2, 2, 67, 11, 3, 2, 2, 2, 68, 69, 8, 7, 1, 2, 69, 79, 5, 14, 8, 2, 70, 71, 7, 13, 2, 2, 71, 72, 5, 12, 7, 2, 72, 73, 7, 14, 2, 2, 73, 79, 3, 2, 2, 2, 74, 75, 9, 2, 2, 2, 75, 79, 5, 12, 7, 9, 76, 77, 7, 26, 2, 2, 77, 79, 5, 12, 7, 5, 78, 68, 3, 2, 2, 2, 78, 70, 3, 2, 2, 2, 78, 74, 3, 2, 2, 2, 78, 76, 3, 2, 2, 2, 79, 97, 3, 2, 2, 2, 80, 81, 12, 8, 2, 2, 81, 82, 9, 3, 2, 2, 82, 96, 5, 12, 7, 9, 83, 84, 12, 7, 2, 2, 84, 85, 9, 2, 2, 2, 85, 96, 5, 12, 7, 8, 86, 87, 12, 6, 2, 2, 87, 88, 9, 4, 2, 2, 88, 96, 5, 12, 7, 6, 89, 90, 12, 4, 2, 2, 90, 91, 7, 27, 2, 2, 91, 96, 5, 12, 7, 4, 92, 93, 12, 3, 2, 2, 93, 94, 7, 28, 2, 2, 94, 96, 5, 12, 7, 3, 95, 80, 3, 2, 2, 2, 95, 83, 3, 2, 2, 2, 95, 86, 3, 2, 2, 2, 95, 89, 3, 2, 2, 2, 95, 92, 3, 2, 2, 2, 96, 99, 3, 2, 2, 2, 97, 95, 3, 2, 2, 2, 97, 98, 3, 2, 2, 2, 98, 13, 3, 2, 2, 2, 99, 97, 3, 2, 2, 2, 100, 104, 7, 31, 2, 2, 101, 104, 9, 5, 2, 2, 102, 104, 7, 32, 2, 2, 103, 100, 3, 2, 2, 2, 103, 101, 3, 2, 2, 2, 103, 102, 3, 2, 2, 2, 104, 15, 3, 2, 2, 2, 13, 19, 28, 37, 41, 52, 57, 64, 78, 95, 97, 103] \ No newline at end of file diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index 6643183b..0b57c697 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -38,7 +38,7 @@ def serializedATN(): buf.write("\2KO\5\f\7\tLM\7\32\2\2MO\5\f\7\5ND\3\2\2\2NF\3\2\2\2") buf.write("NJ\3\2\2\2NL\3\2\2\2Oa\3\2\2\2PQ\f\b\2\2QR\t\3\2\2R`\5") buf.write("\f\7\tST\f\7\2\2TU\t\2\2\2U`\5\f\7\bVW\f\6\2\2WX\t\4\2") - buf.write("\2X`\5\f\7\7YZ\f\4\2\2Z[\7\33\2\2[`\5\f\7\4\\]\f\3\2\2") + buf.write("\2X`\5\f\7\6YZ\f\4\2\2Z[\7\33\2\2[`\5\f\7\4\\]\f\3\2\2") buf.write("]^\7\34\2\2^`\5\f\7\3_P\3\2\2\2_S\3\2\2\2_V\3\2\2\2_Y") buf.write("\3\2\2\2_\\\3\2\2\2`c\3\2\2\2a_\3\2\2\2ab\3\2\2\2b\r\3") buf.write("\2\2\2ca\3\2\2\2dh\7\37\2\2eh\t\5\2\2fh\7 \2\2gd\3\2\2") @@ -766,7 +766,7 @@ def expr(self, _p:int=0): self._errHandler.reportMatch(self) self.consume() self.state = 86 - self.expr(5) + self.expr(4) pass elif la_ == 4: diff --git a/src/compiler.py b/src/compiler.py index b1ae2288..9e786a87 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -3,6 +3,7 @@ import llvmlite.ir as ll +from .antlr.PyxellParser import PyxellParser from .antlr.PyxellVisitor import PyxellVisitor @@ -35,7 +36,6 @@ def __init__(self): 'writeInt': ll.Function(self.module, tFunc([tInt]), 'func.writeInt'), 'putchar': ll.Function(self.module, tFunc([tChar]), 'putchar'), } - pass ### Helpers ### @@ -109,6 +109,7 @@ def emitIfElse(index): emitIfElse(index+1) emitIfElse(0) + self.builder.function.blocks.append(bbend) self.builder.position_at_end(bbend) @@ -141,21 +142,62 @@ def visitExprBinaryOp(self, ctx): return instruction(self.visit(ctx.expr(0)), self.visit(ctx.expr(1))) def visitExprCmp(self, ctx): - values = self.visit(ctx.expr(0)), self.visit(ctx.expr(1)) + ops = [] + exprs = [] + + while True: + exprs.append(ctx.expr(0)) + ops.append(ctx.op.text) + if not isinstance(ctx.expr(1), PyxellParser.ExprCmpContext): + break + ctx = ctx.expr(1) + exprs.append(ctx.expr(1)) + + values = [self.visit(exprs[0])] + + bbstart = self.builder.basic_block + bbend = ll.Block(self.builder.function) + self.builder.position_at_end(bbend) + phi = self.builder.phi(tBool) + self.builder.position_at_end(bbstart) + + def emitCmp(op, left, right): + if left.type == tBool: + return self.builder.icmp_unsigned(op, left, right) + else: + return self.builder.icmp_signed(op, left, right) - if values[0].type == tBool: - return self.builder.icmp_unsigned(ctx.op.text, values[0], values[1]) - else: - return self.builder.icmp_signed(ctx.op.text, values[0], values[1]) + def emitIf(index): + values.append(self.visit(exprs[index+1])) + cond = emitCmp(ops[index], values[index], values[index+1]) + + if len(exprs) == index+2: + phi.add_incoming(cond, self.builder.basic_block) + self.builder.branch(bbend) + return + + phi.add_incoming(vFalse, self.builder.basic_block) + bbif = self.builder.function.append_basic_block() + self.builder.cbranch(cond, bbif, bbend) + + with self.builder._branch_helper(bbif, bbend): + emitIf(index+1) + + emitIf(0) + + self.builder.function.blocks.append(bbend) + self.builder.position_at_end(bbend) + + return phi def visitExprLogicalOp(self, ctx): op = ctx.op.text + cond1 = self.visit(ctx.expr(0)) bbstart = self.builder.basic_block bbif = self.builder.function.append_basic_block() bbend = ll.Block(self.builder.function) - cond1 = self.visit(ctx.expr(0)) if op == 'and': self.builder.cbranch(cond1, bbif, bbend) elif op == 'or': diff --git a/test/good/basic/cmp03.out b/test/good/basic/cmp03.out index 01e79c32..94ebaf90 100644 --- a/test/good/basic/cmp03.out +++ b/test/good/basic/cmp03.out @@ -1,3 +1,4 @@ 1 2 3 +4 diff --git a/test/good/basic/cmp03.px b/test/good/basic/cmp03.px index 7de8bda2..2205ab0d 100644 --- a/test/good/basic/cmp03.px +++ b/test/good/basic/cmp03.px @@ -7,3 +7,6 @@ if (1 * 0 == 0 or 1 * 0 == 1) and ((false or false) or true or false) do if "abc" == "abc" and "a" == "b" or (3 == 4) == false and true and not false do print 3 + +if true == (false == false) do + print 4 diff --git a/test/good/basic/cmp07.out b/test/good/basic/cmp07.out new file mode 100644 index 00000000..3d6ee2a2 --- /dev/null +++ b/test/good/basic/cmp07.out @@ -0,0 +1,7 @@ +0 +0 +0 +true +0 +0 +false diff --git a/test/good/basic/cmp07.px b/test/good/basic/cmp07.px new file mode 100644 index 00000000..1babb3ce --- /dev/null +++ b/test/good/basic/cmp07.px @@ -0,0 +1,7 @@ + +func f() Int def + print 0 + return 0 + +print f() <= f() == f() +print f() < f() == f() From 9f6e943bd9e3f3e1400234ada17c182bc7f06a1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Fri, 4 Oct 2019 19:29:54 +0200 Subject: [PATCH 007/100] Loops --- src/Pyxell.g4 | 2 + src/antlr/Pyxell.interp | 6 +- src/antlr/Pyxell.tokens | 52 +++--- src/antlr/PyxellLexer.interp | 8 +- src/antlr/PyxellLexer.py | 156 +++++++++-------- src/antlr/PyxellLexer.tokens | 52 +++--- src/antlr/PyxellParser.py | 329 +++++++++++++++++++++-------------- src/antlr/PyxellVisitor.py | 10 ++ src/compiler.py | 36 +++- 9 files changed, 398 insertions(+), 253 deletions(-) diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index cd64e510..a952da1a 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -17,6 +17,8 @@ simple_stmt compound_stmt : 'if' expr block ('elif' expr block)* ('else' block)? # StmtIf + | 'while' expr block # StmtWhile + | 'until' expr block # StmtUntil ; block diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index 2fb55b7d..ac27d151 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -7,6 +7,8 @@ null 'if' 'elif' 'else' +'while' +'until' 'do' '{' '}' @@ -62,6 +64,8 @@ null null null null +null +null INT ID WS @@ -77,4 +81,4 @@ atom atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 33, 106, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 3, 2, 7, 2, 18, 10, 2, 12, 2, 14, 2, 21, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 29, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 36, 10, 4, 12, 4, 14, 4, 39, 11, 4, 3, 4, 5, 4, 42, 10, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 7, 5, 51, 10, 5, 12, 5, 14, 5, 54, 11, 5, 3, 5, 3, 5, 5, 5, 58, 10, 5, 3, 6, 3, 6, 3, 6, 6, 6, 63, 10, 6, 13, 6, 14, 6, 64, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 79, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 96, 10, 7, 12, 7, 14, 7, 99, 11, 7, 3, 8, 3, 8, 3, 8, 5, 8, 104, 10, 8, 3, 8, 2, 3, 12, 9, 2, 4, 6, 8, 10, 12, 14, 2, 6, 3, 2, 15, 16, 3, 2, 17, 19, 3, 2, 20, 25, 3, 2, 29, 30, 2, 116, 2, 19, 3, 2, 2, 2, 4, 28, 3, 2, 2, 2, 6, 41, 3, 2, 2, 2, 8, 43, 3, 2, 2, 2, 10, 59, 3, 2, 2, 2, 12, 78, 3, 2, 2, 2, 14, 103, 3, 2, 2, 2, 16, 18, 5, 4, 3, 2, 17, 16, 3, 2, 2, 2, 18, 21, 3, 2, 2, 2, 19, 17, 3, 2, 2, 2, 19, 20, 3, 2, 2, 2, 20, 22, 3, 2, 2, 2, 21, 19, 3, 2, 2, 2, 22, 23, 7, 2, 2, 3, 23, 3, 3, 2, 2, 2, 24, 25, 5, 6, 4, 2, 25, 26, 7, 3, 2, 2, 26, 29, 3, 2, 2, 2, 27, 29, 5, 8, 5, 2, 28, 24, 3, 2, 2, 2, 28, 27, 3, 2, 2, 2, 29, 5, 3, 2, 2, 2, 30, 42, 7, 4, 2, 2, 31, 32, 7, 5, 2, 2, 32, 42, 5, 12, 7, 2, 33, 34, 7, 32, 2, 2, 34, 36, 7, 6, 2, 2, 35, 33, 3, 2, 2, 2, 36, 39, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 37, 38, 3, 2, 2, 2, 38, 40, 3, 2, 2, 2, 39, 37, 3, 2, 2, 2, 40, 42, 5, 12, 7, 2, 41, 30, 3, 2, 2, 2, 41, 31, 3, 2, 2, 2, 41, 37, 3, 2, 2, 2, 42, 7, 3, 2, 2, 2, 43, 44, 7, 7, 2, 2, 44, 45, 5, 12, 7, 2, 45, 52, 5, 10, 6, 2, 46, 47, 7, 8, 2, 2, 47, 48, 5, 12, 7, 2, 48, 49, 5, 10, 6, 2, 49, 51, 3, 2, 2, 2, 50, 46, 3, 2, 2, 2, 51, 54, 3, 2, 2, 2, 52, 50, 3, 2, 2, 2, 52, 53, 3, 2, 2, 2, 53, 57, 3, 2, 2, 2, 54, 52, 3, 2, 2, 2, 55, 56, 7, 9, 2, 2, 56, 58, 5, 10, 6, 2, 57, 55, 3, 2, 2, 2, 57, 58, 3, 2, 2, 2, 58, 9, 3, 2, 2, 2, 59, 60, 7, 10, 2, 2, 60, 62, 7, 11, 2, 2, 61, 63, 5, 4, 3, 2, 62, 61, 3, 2, 2, 2, 63, 64, 3, 2, 2, 2, 64, 62, 3, 2, 2, 2, 64, 65, 3, 2, 2, 2, 65, 66, 3, 2, 2, 2, 66, 67, 7, 12, 2, 2, 67, 11, 3, 2, 2, 2, 68, 69, 8, 7, 1, 2, 69, 79, 5, 14, 8, 2, 70, 71, 7, 13, 2, 2, 71, 72, 5, 12, 7, 2, 72, 73, 7, 14, 2, 2, 73, 79, 3, 2, 2, 2, 74, 75, 9, 2, 2, 2, 75, 79, 5, 12, 7, 9, 76, 77, 7, 26, 2, 2, 77, 79, 5, 12, 7, 5, 78, 68, 3, 2, 2, 2, 78, 70, 3, 2, 2, 2, 78, 74, 3, 2, 2, 2, 78, 76, 3, 2, 2, 2, 79, 97, 3, 2, 2, 2, 80, 81, 12, 8, 2, 2, 81, 82, 9, 3, 2, 2, 82, 96, 5, 12, 7, 9, 83, 84, 12, 7, 2, 2, 84, 85, 9, 2, 2, 2, 85, 96, 5, 12, 7, 8, 86, 87, 12, 6, 2, 2, 87, 88, 9, 4, 2, 2, 88, 96, 5, 12, 7, 6, 89, 90, 12, 4, 2, 2, 90, 91, 7, 27, 2, 2, 91, 96, 5, 12, 7, 4, 92, 93, 12, 3, 2, 2, 93, 94, 7, 28, 2, 2, 94, 96, 5, 12, 7, 3, 95, 80, 3, 2, 2, 2, 95, 83, 3, 2, 2, 2, 95, 86, 3, 2, 2, 2, 95, 89, 3, 2, 2, 2, 95, 92, 3, 2, 2, 2, 96, 99, 3, 2, 2, 2, 97, 95, 3, 2, 2, 2, 97, 98, 3, 2, 2, 2, 98, 13, 3, 2, 2, 2, 99, 97, 3, 2, 2, 2, 100, 104, 7, 31, 2, 2, 101, 104, 9, 5, 2, 2, 102, 104, 7, 32, 2, 2, 103, 100, 3, 2, 2, 2, 103, 101, 3, 2, 2, 2, 103, 102, 3, 2, 2, 2, 104, 15, 3, 2, 2, 2, 13, 19, 28, 37, 41, 52, 57, 64, 78, 95, 97, 103] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 35, 116, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 3, 2, 7, 2, 18, 10, 2, 12, 2, 14, 2, 21, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 29, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 36, 10, 4, 12, 4, 14, 4, 39, 11, 4, 3, 4, 5, 4, 42, 10, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 7, 5, 51, 10, 5, 12, 5, 14, 5, 54, 11, 5, 3, 5, 3, 5, 5, 5, 58, 10, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 68, 10, 5, 3, 6, 3, 6, 3, 6, 6, 6, 73, 10, 6, 13, 6, 14, 6, 74, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 89, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 106, 10, 7, 12, 7, 14, 7, 109, 11, 7, 3, 8, 3, 8, 3, 8, 5, 8, 114, 10, 8, 3, 8, 2, 3, 12, 9, 2, 4, 6, 8, 10, 12, 14, 2, 6, 3, 2, 17, 18, 3, 2, 19, 21, 3, 2, 22, 27, 3, 2, 31, 32, 2, 128, 2, 19, 3, 2, 2, 2, 4, 28, 3, 2, 2, 2, 6, 41, 3, 2, 2, 2, 8, 67, 3, 2, 2, 2, 10, 69, 3, 2, 2, 2, 12, 88, 3, 2, 2, 2, 14, 113, 3, 2, 2, 2, 16, 18, 5, 4, 3, 2, 17, 16, 3, 2, 2, 2, 18, 21, 3, 2, 2, 2, 19, 17, 3, 2, 2, 2, 19, 20, 3, 2, 2, 2, 20, 22, 3, 2, 2, 2, 21, 19, 3, 2, 2, 2, 22, 23, 7, 2, 2, 3, 23, 3, 3, 2, 2, 2, 24, 25, 5, 6, 4, 2, 25, 26, 7, 3, 2, 2, 26, 29, 3, 2, 2, 2, 27, 29, 5, 8, 5, 2, 28, 24, 3, 2, 2, 2, 28, 27, 3, 2, 2, 2, 29, 5, 3, 2, 2, 2, 30, 42, 7, 4, 2, 2, 31, 32, 7, 5, 2, 2, 32, 42, 5, 12, 7, 2, 33, 34, 7, 34, 2, 2, 34, 36, 7, 6, 2, 2, 35, 33, 3, 2, 2, 2, 36, 39, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 37, 38, 3, 2, 2, 2, 38, 40, 3, 2, 2, 2, 39, 37, 3, 2, 2, 2, 40, 42, 5, 12, 7, 2, 41, 30, 3, 2, 2, 2, 41, 31, 3, 2, 2, 2, 41, 37, 3, 2, 2, 2, 42, 7, 3, 2, 2, 2, 43, 44, 7, 7, 2, 2, 44, 45, 5, 12, 7, 2, 45, 52, 5, 10, 6, 2, 46, 47, 7, 8, 2, 2, 47, 48, 5, 12, 7, 2, 48, 49, 5, 10, 6, 2, 49, 51, 3, 2, 2, 2, 50, 46, 3, 2, 2, 2, 51, 54, 3, 2, 2, 2, 52, 50, 3, 2, 2, 2, 52, 53, 3, 2, 2, 2, 53, 57, 3, 2, 2, 2, 54, 52, 3, 2, 2, 2, 55, 56, 7, 9, 2, 2, 56, 58, 5, 10, 6, 2, 57, 55, 3, 2, 2, 2, 57, 58, 3, 2, 2, 2, 58, 68, 3, 2, 2, 2, 59, 60, 7, 10, 2, 2, 60, 61, 5, 12, 7, 2, 61, 62, 5, 10, 6, 2, 62, 68, 3, 2, 2, 2, 63, 64, 7, 11, 2, 2, 64, 65, 5, 12, 7, 2, 65, 66, 5, 10, 6, 2, 66, 68, 3, 2, 2, 2, 67, 43, 3, 2, 2, 2, 67, 59, 3, 2, 2, 2, 67, 63, 3, 2, 2, 2, 68, 9, 3, 2, 2, 2, 69, 70, 7, 12, 2, 2, 70, 72, 7, 13, 2, 2, 71, 73, 5, 4, 3, 2, 72, 71, 3, 2, 2, 2, 73, 74, 3, 2, 2, 2, 74, 72, 3, 2, 2, 2, 74, 75, 3, 2, 2, 2, 75, 76, 3, 2, 2, 2, 76, 77, 7, 14, 2, 2, 77, 11, 3, 2, 2, 2, 78, 79, 8, 7, 1, 2, 79, 89, 5, 14, 8, 2, 80, 81, 7, 15, 2, 2, 81, 82, 5, 12, 7, 2, 82, 83, 7, 16, 2, 2, 83, 89, 3, 2, 2, 2, 84, 85, 9, 2, 2, 2, 85, 89, 5, 12, 7, 9, 86, 87, 7, 28, 2, 2, 87, 89, 5, 12, 7, 5, 88, 78, 3, 2, 2, 2, 88, 80, 3, 2, 2, 2, 88, 84, 3, 2, 2, 2, 88, 86, 3, 2, 2, 2, 89, 107, 3, 2, 2, 2, 90, 91, 12, 8, 2, 2, 91, 92, 9, 3, 2, 2, 92, 106, 5, 12, 7, 9, 93, 94, 12, 7, 2, 2, 94, 95, 9, 2, 2, 2, 95, 106, 5, 12, 7, 8, 96, 97, 12, 6, 2, 2, 97, 98, 9, 4, 2, 2, 98, 106, 5, 12, 7, 6, 99, 100, 12, 4, 2, 2, 100, 101, 7, 29, 2, 2, 101, 106, 5, 12, 7, 4, 102, 103, 12, 3, 2, 2, 103, 104, 7, 30, 2, 2, 104, 106, 5, 12, 7, 3, 105, 90, 3, 2, 2, 2, 105, 93, 3, 2, 2, 2, 105, 96, 3, 2, 2, 2, 105, 99, 3, 2, 2, 2, 105, 102, 3, 2, 2, 2, 106, 109, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 107, 108, 3, 2, 2, 2, 108, 13, 3, 2, 2, 2, 109, 107, 3, 2, 2, 2, 110, 114, 7, 33, 2, 2, 111, 114, 9, 5, 2, 2, 112, 114, 7, 34, 2, 2, 113, 110, 3, 2, 2, 2, 113, 111, 3, 2, 2, 2, 113, 112, 3, 2, 2, 2, 114, 15, 3, 2, 2, 2, 14, 19, 28, 37, 41, 52, 57, 67, 74, 88, 105, 107, 113] \ No newline at end of file diff --git a/src/antlr/Pyxell.tokens b/src/antlr/Pyxell.tokens index 0d037a60..81872820 100644 --- a/src/antlr/Pyxell.tokens +++ b/src/antlr/Pyxell.tokens @@ -26,9 +26,11 @@ T__24=25 T__25=26 T__26=27 T__27=28 -INT=29 -ID=30 -WS=31 +T__28=29 +T__29=30 +INT=31 +ID=32 +WS=33 ';'=1 'skip'=2 'print'=3 @@ -36,24 +38,26 @@ WS=31 'if'=5 'elif'=6 'else'=7 -'do'=8 -'{'=9 -'}'=10 -'('=11 -')'=12 -'+'=13 -'-'=14 -'*'=15 -'/'=16 -'%'=17 -'=='=18 -'!='=19 -'<'=20 -'<='=21 -'>'=22 -'>='=23 -'not'=24 -'and'=25 -'or'=26 -'true'=27 -'false'=28 +'while'=8 +'until'=9 +'do'=10 +'{'=11 +'}'=12 +'('=13 +')'=14 +'+'=15 +'-'=16 +'*'=17 +'/'=18 +'%'=19 +'=='=20 +'!='=21 +'<'=22 +'<='=23 +'>'=24 +'>='=25 +'not'=26 +'and'=27 +'or'=28 +'true'=29 +'false'=30 diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp index 622162d5..c8a0d981 100644 --- a/src/antlr/PyxellLexer.interp +++ b/src/antlr/PyxellLexer.interp @@ -7,6 +7,8 @@ null 'if' 'elif' 'else' +'while' +'until' 'do' '{' '}' @@ -62,6 +64,8 @@ null null null null +null +null INT ID WS @@ -95,6 +99,8 @@ T__24 T__25 T__26 T__27 +T__28 +T__29 INT ID DIGIT @@ -110,4 +116,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 33, 186, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 6, 30, 160, 10, 30, 13, 30, 14, 30, 161, 3, 31, 3, 31, 7, 31, 166, 10, 31, 12, 31, 14, 31, 169, 11, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 5, 34, 178, 10, 34, 3, 35, 6, 35, 181, 10, 35, 13, 35, 14, 35, 182, 3, 35, 3, 35, 2, 2, 36, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 2, 65, 2, 67, 2, 69, 33, 3, 2, 6, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 187, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 3, 71, 3, 2, 2, 2, 5, 73, 3, 2, 2, 2, 7, 78, 3, 2, 2, 2, 9, 84, 3, 2, 2, 2, 11, 86, 3, 2, 2, 2, 13, 89, 3, 2, 2, 2, 15, 94, 3, 2, 2, 2, 17, 99, 3, 2, 2, 2, 19, 102, 3, 2, 2, 2, 21, 104, 3, 2, 2, 2, 23, 106, 3, 2, 2, 2, 25, 108, 3, 2, 2, 2, 27, 110, 3, 2, 2, 2, 29, 112, 3, 2, 2, 2, 31, 114, 3, 2, 2, 2, 33, 116, 3, 2, 2, 2, 35, 118, 3, 2, 2, 2, 37, 120, 3, 2, 2, 2, 39, 123, 3, 2, 2, 2, 41, 126, 3, 2, 2, 2, 43, 128, 3, 2, 2, 2, 45, 131, 3, 2, 2, 2, 47, 133, 3, 2, 2, 2, 49, 136, 3, 2, 2, 2, 51, 140, 3, 2, 2, 2, 53, 144, 3, 2, 2, 2, 55, 147, 3, 2, 2, 2, 57, 152, 3, 2, 2, 2, 59, 159, 3, 2, 2, 2, 61, 163, 3, 2, 2, 2, 63, 170, 3, 2, 2, 2, 65, 172, 3, 2, 2, 2, 67, 177, 3, 2, 2, 2, 69, 180, 3, 2, 2, 2, 71, 72, 7, 61, 2, 2, 72, 4, 3, 2, 2, 2, 73, 74, 7, 117, 2, 2, 74, 75, 7, 109, 2, 2, 75, 76, 7, 107, 2, 2, 76, 77, 7, 114, 2, 2, 77, 6, 3, 2, 2, 2, 78, 79, 7, 114, 2, 2, 79, 80, 7, 116, 2, 2, 80, 81, 7, 107, 2, 2, 81, 82, 7, 112, 2, 2, 82, 83, 7, 118, 2, 2, 83, 8, 3, 2, 2, 2, 84, 85, 7, 63, 2, 2, 85, 10, 3, 2, 2, 2, 86, 87, 7, 107, 2, 2, 87, 88, 7, 104, 2, 2, 88, 12, 3, 2, 2, 2, 89, 90, 7, 103, 2, 2, 90, 91, 7, 110, 2, 2, 91, 92, 7, 107, 2, 2, 92, 93, 7, 104, 2, 2, 93, 14, 3, 2, 2, 2, 94, 95, 7, 103, 2, 2, 95, 96, 7, 110, 2, 2, 96, 97, 7, 117, 2, 2, 97, 98, 7, 103, 2, 2, 98, 16, 3, 2, 2, 2, 99, 100, 7, 102, 2, 2, 100, 101, 7, 113, 2, 2, 101, 18, 3, 2, 2, 2, 102, 103, 7, 125, 2, 2, 103, 20, 3, 2, 2, 2, 104, 105, 7, 127, 2, 2, 105, 22, 3, 2, 2, 2, 106, 107, 7, 42, 2, 2, 107, 24, 3, 2, 2, 2, 108, 109, 7, 43, 2, 2, 109, 26, 3, 2, 2, 2, 110, 111, 7, 45, 2, 2, 111, 28, 3, 2, 2, 2, 112, 113, 7, 47, 2, 2, 113, 30, 3, 2, 2, 2, 114, 115, 7, 44, 2, 2, 115, 32, 3, 2, 2, 2, 116, 117, 7, 49, 2, 2, 117, 34, 3, 2, 2, 2, 118, 119, 7, 39, 2, 2, 119, 36, 3, 2, 2, 2, 120, 121, 7, 63, 2, 2, 121, 122, 7, 63, 2, 2, 122, 38, 3, 2, 2, 2, 123, 124, 7, 35, 2, 2, 124, 125, 7, 63, 2, 2, 125, 40, 3, 2, 2, 2, 126, 127, 7, 62, 2, 2, 127, 42, 3, 2, 2, 2, 128, 129, 7, 62, 2, 2, 129, 130, 7, 63, 2, 2, 130, 44, 3, 2, 2, 2, 131, 132, 7, 64, 2, 2, 132, 46, 3, 2, 2, 2, 133, 134, 7, 64, 2, 2, 134, 135, 7, 63, 2, 2, 135, 48, 3, 2, 2, 2, 136, 137, 7, 112, 2, 2, 137, 138, 7, 113, 2, 2, 138, 139, 7, 118, 2, 2, 139, 50, 3, 2, 2, 2, 140, 141, 7, 99, 2, 2, 141, 142, 7, 112, 2, 2, 142, 143, 7, 102, 2, 2, 143, 52, 3, 2, 2, 2, 144, 145, 7, 113, 2, 2, 145, 146, 7, 116, 2, 2, 146, 54, 3, 2, 2, 2, 147, 148, 7, 118, 2, 2, 148, 149, 7, 116, 2, 2, 149, 150, 7, 119, 2, 2, 150, 151, 7, 103, 2, 2, 151, 56, 3, 2, 2, 2, 152, 153, 7, 104, 2, 2, 153, 154, 7, 99, 2, 2, 154, 155, 7, 110, 2, 2, 155, 156, 7, 117, 2, 2, 156, 157, 7, 103, 2, 2, 157, 58, 3, 2, 2, 2, 158, 160, 5, 63, 32, 2, 159, 158, 3, 2, 2, 2, 160, 161, 3, 2, 2, 2, 161, 159, 3, 2, 2, 2, 161, 162, 3, 2, 2, 2, 162, 60, 3, 2, 2, 2, 163, 167, 5, 65, 33, 2, 164, 166, 5, 67, 34, 2, 165, 164, 3, 2, 2, 2, 166, 169, 3, 2, 2, 2, 167, 165, 3, 2, 2, 2, 167, 168, 3, 2, 2, 2, 168, 62, 3, 2, 2, 2, 169, 167, 3, 2, 2, 2, 170, 171, 9, 2, 2, 2, 171, 64, 3, 2, 2, 2, 172, 173, 9, 3, 2, 2, 173, 66, 3, 2, 2, 2, 174, 178, 5, 65, 33, 2, 175, 178, 5, 63, 32, 2, 176, 178, 9, 4, 2, 2, 177, 174, 3, 2, 2, 2, 177, 175, 3, 2, 2, 2, 177, 176, 3, 2, 2, 2, 178, 68, 3, 2, 2, 2, 179, 181, 9, 5, 2, 2, 180, 179, 3, 2, 2, 2, 181, 182, 3, 2, 2, 2, 182, 180, 3, 2, 2, 2, 182, 183, 3, 2, 2, 2, 183, 184, 3, 2, 2, 2, 184, 185, 8, 35, 2, 2, 185, 70, 3, 2, 2, 2, 7, 2, 161, 167, 177, 182, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 35, 202, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 6, 32, 176, 10, 32, 13, 32, 14, 32, 177, 3, 33, 3, 33, 7, 33, 182, 10, 33, 12, 33, 14, 33, 185, 11, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 5, 36, 194, 10, 36, 3, 37, 6, 37, 197, 10, 37, 13, 37, 14, 37, 198, 3, 37, 3, 37, 2, 2, 38, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 2, 69, 2, 71, 2, 73, 35, 3, 2, 6, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 203, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 3, 75, 3, 2, 2, 2, 5, 77, 3, 2, 2, 2, 7, 82, 3, 2, 2, 2, 9, 88, 3, 2, 2, 2, 11, 90, 3, 2, 2, 2, 13, 93, 3, 2, 2, 2, 15, 98, 3, 2, 2, 2, 17, 103, 3, 2, 2, 2, 19, 109, 3, 2, 2, 2, 21, 115, 3, 2, 2, 2, 23, 118, 3, 2, 2, 2, 25, 120, 3, 2, 2, 2, 27, 122, 3, 2, 2, 2, 29, 124, 3, 2, 2, 2, 31, 126, 3, 2, 2, 2, 33, 128, 3, 2, 2, 2, 35, 130, 3, 2, 2, 2, 37, 132, 3, 2, 2, 2, 39, 134, 3, 2, 2, 2, 41, 136, 3, 2, 2, 2, 43, 139, 3, 2, 2, 2, 45, 142, 3, 2, 2, 2, 47, 144, 3, 2, 2, 2, 49, 147, 3, 2, 2, 2, 51, 149, 3, 2, 2, 2, 53, 152, 3, 2, 2, 2, 55, 156, 3, 2, 2, 2, 57, 160, 3, 2, 2, 2, 59, 163, 3, 2, 2, 2, 61, 168, 3, 2, 2, 2, 63, 175, 3, 2, 2, 2, 65, 179, 3, 2, 2, 2, 67, 186, 3, 2, 2, 2, 69, 188, 3, 2, 2, 2, 71, 193, 3, 2, 2, 2, 73, 196, 3, 2, 2, 2, 75, 76, 7, 61, 2, 2, 76, 4, 3, 2, 2, 2, 77, 78, 7, 117, 2, 2, 78, 79, 7, 109, 2, 2, 79, 80, 7, 107, 2, 2, 80, 81, 7, 114, 2, 2, 81, 6, 3, 2, 2, 2, 82, 83, 7, 114, 2, 2, 83, 84, 7, 116, 2, 2, 84, 85, 7, 107, 2, 2, 85, 86, 7, 112, 2, 2, 86, 87, 7, 118, 2, 2, 87, 8, 3, 2, 2, 2, 88, 89, 7, 63, 2, 2, 89, 10, 3, 2, 2, 2, 90, 91, 7, 107, 2, 2, 91, 92, 7, 104, 2, 2, 92, 12, 3, 2, 2, 2, 93, 94, 7, 103, 2, 2, 94, 95, 7, 110, 2, 2, 95, 96, 7, 107, 2, 2, 96, 97, 7, 104, 2, 2, 97, 14, 3, 2, 2, 2, 98, 99, 7, 103, 2, 2, 99, 100, 7, 110, 2, 2, 100, 101, 7, 117, 2, 2, 101, 102, 7, 103, 2, 2, 102, 16, 3, 2, 2, 2, 103, 104, 7, 121, 2, 2, 104, 105, 7, 106, 2, 2, 105, 106, 7, 107, 2, 2, 106, 107, 7, 110, 2, 2, 107, 108, 7, 103, 2, 2, 108, 18, 3, 2, 2, 2, 109, 110, 7, 119, 2, 2, 110, 111, 7, 112, 2, 2, 111, 112, 7, 118, 2, 2, 112, 113, 7, 107, 2, 2, 113, 114, 7, 110, 2, 2, 114, 20, 3, 2, 2, 2, 115, 116, 7, 102, 2, 2, 116, 117, 7, 113, 2, 2, 117, 22, 3, 2, 2, 2, 118, 119, 7, 125, 2, 2, 119, 24, 3, 2, 2, 2, 120, 121, 7, 127, 2, 2, 121, 26, 3, 2, 2, 2, 122, 123, 7, 42, 2, 2, 123, 28, 3, 2, 2, 2, 124, 125, 7, 43, 2, 2, 125, 30, 3, 2, 2, 2, 126, 127, 7, 45, 2, 2, 127, 32, 3, 2, 2, 2, 128, 129, 7, 47, 2, 2, 129, 34, 3, 2, 2, 2, 130, 131, 7, 44, 2, 2, 131, 36, 3, 2, 2, 2, 132, 133, 7, 49, 2, 2, 133, 38, 3, 2, 2, 2, 134, 135, 7, 39, 2, 2, 135, 40, 3, 2, 2, 2, 136, 137, 7, 63, 2, 2, 137, 138, 7, 63, 2, 2, 138, 42, 3, 2, 2, 2, 139, 140, 7, 35, 2, 2, 140, 141, 7, 63, 2, 2, 141, 44, 3, 2, 2, 2, 142, 143, 7, 62, 2, 2, 143, 46, 3, 2, 2, 2, 144, 145, 7, 62, 2, 2, 145, 146, 7, 63, 2, 2, 146, 48, 3, 2, 2, 2, 147, 148, 7, 64, 2, 2, 148, 50, 3, 2, 2, 2, 149, 150, 7, 64, 2, 2, 150, 151, 7, 63, 2, 2, 151, 52, 3, 2, 2, 2, 152, 153, 7, 112, 2, 2, 153, 154, 7, 113, 2, 2, 154, 155, 7, 118, 2, 2, 155, 54, 3, 2, 2, 2, 156, 157, 7, 99, 2, 2, 157, 158, 7, 112, 2, 2, 158, 159, 7, 102, 2, 2, 159, 56, 3, 2, 2, 2, 160, 161, 7, 113, 2, 2, 161, 162, 7, 116, 2, 2, 162, 58, 3, 2, 2, 2, 163, 164, 7, 118, 2, 2, 164, 165, 7, 116, 2, 2, 165, 166, 7, 119, 2, 2, 166, 167, 7, 103, 2, 2, 167, 60, 3, 2, 2, 2, 168, 169, 7, 104, 2, 2, 169, 170, 7, 99, 2, 2, 170, 171, 7, 110, 2, 2, 171, 172, 7, 117, 2, 2, 172, 173, 7, 103, 2, 2, 173, 62, 3, 2, 2, 2, 174, 176, 5, 67, 34, 2, 175, 174, 3, 2, 2, 2, 176, 177, 3, 2, 2, 2, 177, 175, 3, 2, 2, 2, 177, 178, 3, 2, 2, 2, 178, 64, 3, 2, 2, 2, 179, 183, 5, 69, 35, 2, 180, 182, 5, 71, 36, 2, 181, 180, 3, 2, 2, 2, 182, 185, 3, 2, 2, 2, 183, 181, 3, 2, 2, 2, 183, 184, 3, 2, 2, 2, 184, 66, 3, 2, 2, 2, 185, 183, 3, 2, 2, 2, 186, 187, 9, 2, 2, 2, 187, 68, 3, 2, 2, 2, 188, 189, 9, 3, 2, 2, 189, 70, 3, 2, 2, 2, 190, 194, 5, 69, 35, 2, 191, 194, 5, 67, 34, 2, 192, 194, 9, 4, 2, 2, 193, 190, 3, 2, 2, 2, 193, 191, 3, 2, 2, 2, 193, 192, 3, 2, 2, 2, 194, 72, 3, 2, 2, 2, 195, 197, 9, 5, 2, 2, 196, 195, 3, 2, 2, 2, 197, 198, 3, 2, 2, 2, 198, 196, 3, 2, 2, 2, 198, 199, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 201, 8, 37, 2, 2, 201, 74, 3, 2, 2, 2, 7, 2, 177, 183, 193, 198, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py index 074988d2..3e72b6d4 100644 --- a/src/antlr/PyxellLexer.py +++ b/src/antlr/PyxellLexer.py @@ -8,76 +8,82 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2!") - buf.write("\u00ba\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2#") + buf.write("\u00ca\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") buf.write("\4\31\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36") - buf.write("\t\36\4\37\t\37\4 \t \4!\t!\4\"\t\"\4#\t#\3\2\3\2\3\3") - buf.write("\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\4\3\5\3\5\3\6\3") - buf.write("\6\3\6\3\7\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\b\3\b\3\t\3\t") - buf.write("\3\t\3\n\3\n\3\13\3\13\3\f\3\f\3\r\3\r\3\16\3\16\3\17") - buf.write("\3\17\3\20\3\20\3\21\3\21\3\22\3\22\3\23\3\23\3\23\3\24") - buf.write("\3\24\3\24\3\25\3\25\3\26\3\26\3\26\3\27\3\27\3\30\3\30") - buf.write("\3\30\3\31\3\31\3\31\3\31\3\32\3\32\3\32\3\32\3\33\3\33") - buf.write("\3\33\3\34\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35") - buf.write("\3\35\3\36\6\36\u00a0\n\36\r\36\16\36\u00a1\3\37\3\37") - buf.write("\7\37\u00a6\n\37\f\37\16\37\u00a9\13\37\3 \3 \3!\3!\3") - buf.write("\"\3\"\3\"\5\"\u00b2\n\"\3#\6#\u00b5\n#\r#\16#\u00b6\3") - buf.write("#\3#\2\2$\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25") - buf.write("\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+") - buf.write("\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?\2A\2C\2") - buf.write("E!\3\2\6\3\2\62;\5\2C\\aac|\4\2))aa\5\2\13\f\17\17\"\"") - buf.write("\2\u00bb\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2") - buf.write("\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2") - buf.write("\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2") - buf.write("\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3") - buf.write("\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2") - buf.write("-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3") - buf.write("\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2") - buf.write("E\3\2\2\2\3G\3\2\2\2\5I\3\2\2\2\7N\3\2\2\2\tT\3\2\2\2") - buf.write("\13V\3\2\2\2\rY\3\2\2\2\17^\3\2\2\2\21c\3\2\2\2\23f\3") - buf.write("\2\2\2\25h\3\2\2\2\27j\3\2\2\2\31l\3\2\2\2\33n\3\2\2\2") - buf.write("\35p\3\2\2\2\37r\3\2\2\2!t\3\2\2\2#v\3\2\2\2%x\3\2\2\2") - buf.write("\'{\3\2\2\2)~\3\2\2\2+\u0080\3\2\2\2-\u0083\3\2\2\2/\u0085") - buf.write("\3\2\2\2\61\u0088\3\2\2\2\63\u008c\3\2\2\2\65\u0090\3") - buf.write("\2\2\2\67\u0093\3\2\2\29\u0098\3\2\2\2;\u009f\3\2\2\2") - buf.write("=\u00a3\3\2\2\2?\u00aa\3\2\2\2A\u00ac\3\2\2\2C\u00b1\3") - buf.write("\2\2\2E\u00b4\3\2\2\2GH\7=\2\2H\4\3\2\2\2IJ\7u\2\2JK\7") - buf.write("m\2\2KL\7k\2\2LM\7r\2\2M\6\3\2\2\2NO\7r\2\2OP\7t\2\2P") - buf.write("Q\7k\2\2QR\7p\2\2RS\7v\2\2S\b\3\2\2\2TU\7?\2\2U\n\3\2") - buf.write("\2\2VW\7k\2\2WX\7h\2\2X\f\3\2\2\2YZ\7g\2\2Z[\7n\2\2[\\") - buf.write("\7k\2\2\\]\7h\2\2]\16\3\2\2\2^_\7g\2\2_`\7n\2\2`a\7u\2") - buf.write("\2ab\7g\2\2b\20\3\2\2\2cd\7f\2\2de\7q\2\2e\22\3\2\2\2") - buf.write("fg\7}\2\2g\24\3\2\2\2hi\7\177\2\2i\26\3\2\2\2jk\7*\2\2") - buf.write("k\30\3\2\2\2lm\7+\2\2m\32\3\2\2\2no\7-\2\2o\34\3\2\2\2") - buf.write("pq\7/\2\2q\36\3\2\2\2rs\7,\2\2s \3\2\2\2tu\7\61\2\2u\"") - buf.write("\3\2\2\2vw\7\'\2\2w$\3\2\2\2xy\7?\2\2yz\7?\2\2z&\3\2\2") - buf.write("\2{|\7#\2\2|}\7?\2\2}(\3\2\2\2~\177\7>\2\2\177*\3\2\2") - buf.write("\2\u0080\u0081\7>\2\2\u0081\u0082\7?\2\2\u0082,\3\2\2") - buf.write("\2\u0083\u0084\7@\2\2\u0084.\3\2\2\2\u0085\u0086\7@\2") - buf.write("\2\u0086\u0087\7?\2\2\u0087\60\3\2\2\2\u0088\u0089\7p") - buf.write("\2\2\u0089\u008a\7q\2\2\u008a\u008b\7v\2\2\u008b\62\3") - buf.write("\2\2\2\u008c\u008d\7c\2\2\u008d\u008e\7p\2\2\u008e\u008f") - buf.write("\7f\2\2\u008f\64\3\2\2\2\u0090\u0091\7q\2\2\u0091\u0092") - buf.write("\7t\2\2\u0092\66\3\2\2\2\u0093\u0094\7v\2\2\u0094\u0095") - buf.write("\7t\2\2\u0095\u0096\7w\2\2\u0096\u0097\7g\2\2\u00978\3") - buf.write("\2\2\2\u0098\u0099\7h\2\2\u0099\u009a\7c\2\2\u009a\u009b") - buf.write("\7n\2\2\u009b\u009c\7u\2\2\u009c\u009d\7g\2\2\u009d:\3") - buf.write("\2\2\2\u009e\u00a0\5? \2\u009f\u009e\3\2\2\2\u00a0\u00a1") - buf.write("\3\2\2\2\u00a1\u009f\3\2\2\2\u00a1\u00a2\3\2\2\2\u00a2") - buf.write("<\3\2\2\2\u00a3\u00a7\5A!\2\u00a4\u00a6\5C\"\2\u00a5\u00a4") - buf.write("\3\2\2\2\u00a6\u00a9\3\2\2\2\u00a7\u00a5\3\2\2\2\u00a7") - buf.write("\u00a8\3\2\2\2\u00a8>\3\2\2\2\u00a9\u00a7\3\2\2\2\u00aa") - buf.write("\u00ab\t\2\2\2\u00ab@\3\2\2\2\u00ac\u00ad\t\3\2\2\u00ad") - buf.write("B\3\2\2\2\u00ae\u00b2\5A!\2\u00af\u00b2\5? \2\u00b0\u00b2") - buf.write("\t\4\2\2\u00b1\u00ae\3\2\2\2\u00b1\u00af\3\2\2\2\u00b1") - buf.write("\u00b0\3\2\2\2\u00b2D\3\2\2\2\u00b3\u00b5\t\5\2\2\u00b4") - buf.write("\u00b3\3\2\2\2\u00b5\u00b6\3\2\2\2\u00b6\u00b4\3\2\2\2") - buf.write("\u00b6\u00b7\3\2\2\2\u00b7\u00b8\3\2\2\2\u00b8\u00b9\b") - buf.write("#\2\2\u00b9F\3\2\2\2\7\2\u00a1\u00a7\u00b1\u00b6\3\b\2") - buf.write("\2") + buf.write("\t\36\4\37\t\37\4 \t \4!\t!\4\"\t\"\4#\t#\4$\t$\4%\t%") + buf.write("\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\4\3") + buf.write("\5\3\5\3\6\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\b") + buf.write("\3\b\3\t\3\t\3\t\3\t\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\n\3") + buf.write("\13\3\13\3\13\3\f\3\f\3\r\3\r\3\16\3\16\3\17\3\17\3\20") + buf.write("\3\20\3\21\3\21\3\22\3\22\3\23\3\23\3\24\3\24\3\25\3\25") + buf.write("\3\25\3\26\3\26\3\26\3\27\3\27\3\30\3\30\3\30\3\31\3\31") + buf.write("\3\32\3\32\3\32\3\33\3\33\3\33\3\33\3\34\3\34\3\34\3\34") + buf.write("\3\35\3\35\3\35\3\36\3\36\3\36\3\36\3\36\3\37\3\37\3\37") + buf.write("\3\37\3\37\3\37\3 \6 \u00b0\n \r \16 \u00b1\3!\3!\7!\u00b6") + buf.write("\n!\f!\16!\u00b9\13!\3\"\3\"\3#\3#\3$\3$\3$\5$\u00c2\n") + buf.write("$\3%\6%\u00c5\n%\r%\16%\u00c6\3%\3%\2\2&\3\3\5\4\7\5\t") + buf.write("\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20") + buf.write("\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65") + buf.write("\34\67\359\36;\37= ?!A\"C\2E\2G\2I#\3\2\6\3\2\62;\5\2") + buf.write("C\\aac|\4\2))aa\5\2\13\f\17\17\"\"\2\u00cb\2\3\3\2\2\2") + buf.write("\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r") + buf.write("\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3") + buf.write("\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2") + buf.write("\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'") + buf.write("\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2") + buf.write("\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29") + buf.write("\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2") + buf.write("I\3\2\2\2\3K\3\2\2\2\5M\3\2\2\2\7R\3\2\2\2\tX\3\2\2\2") + buf.write("\13Z\3\2\2\2\r]\3\2\2\2\17b\3\2\2\2\21g\3\2\2\2\23m\3") + buf.write("\2\2\2\25s\3\2\2\2\27v\3\2\2\2\31x\3\2\2\2\33z\3\2\2\2") + buf.write("\35|\3\2\2\2\37~\3\2\2\2!\u0080\3\2\2\2#\u0082\3\2\2\2") + buf.write("%\u0084\3\2\2\2\'\u0086\3\2\2\2)\u0088\3\2\2\2+\u008b") + buf.write("\3\2\2\2-\u008e\3\2\2\2/\u0090\3\2\2\2\61\u0093\3\2\2") + buf.write("\2\63\u0095\3\2\2\2\65\u0098\3\2\2\2\67\u009c\3\2\2\2") + buf.write("9\u00a0\3\2\2\2;\u00a3\3\2\2\2=\u00a8\3\2\2\2?\u00af\3") + buf.write("\2\2\2A\u00b3\3\2\2\2C\u00ba\3\2\2\2E\u00bc\3\2\2\2G\u00c1") + buf.write("\3\2\2\2I\u00c4\3\2\2\2KL\7=\2\2L\4\3\2\2\2MN\7u\2\2N") + buf.write("O\7m\2\2OP\7k\2\2PQ\7r\2\2Q\6\3\2\2\2RS\7r\2\2ST\7t\2") + buf.write("\2TU\7k\2\2UV\7p\2\2VW\7v\2\2W\b\3\2\2\2XY\7?\2\2Y\n\3") + buf.write("\2\2\2Z[\7k\2\2[\\\7h\2\2\\\f\3\2\2\2]^\7g\2\2^_\7n\2") + buf.write("\2_`\7k\2\2`a\7h\2\2a\16\3\2\2\2bc\7g\2\2cd\7n\2\2de\7") + buf.write("u\2\2ef\7g\2\2f\20\3\2\2\2gh\7y\2\2hi\7j\2\2ij\7k\2\2") + buf.write("jk\7n\2\2kl\7g\2\2l\22\3\2\2\2mn\7w\2\2no\7p\2\2op\7v") + buf.write("\2\2pq\7k\2\2qr\7n\2\2r\24\3\2\2\2st\7f\2\2tu\7q\2\2u") + buf.write("\26\3\2\2\2vw\7}\2\2w\30\3\2\2\2xy\7\177\2\2y\32\3\2\2") + buf.write("\2z{\7*\2\2{\34\3\2\2\2|}\7+\2\2}\36\3\2\2\2~\177\7-\2") + buf.write("\2\177 \3\2\2\2\u0080\u0081\7/\2\2\u0081\"\3\2\2\2\u0082") + buf.write("\u0083\7,\2\2\u0083$\3\2\2\2\u0084\u0085\7\61\2\2\u0085") + buf.write("&\3\2\2\2\u0086\u0087\7\'\2\2\u0087(\3\2\2\2\u0088\u0089") + buf.write("\7?\2\2\u0089\u008a\7?\2\2\u008a*\3\2\2\2\u008b\u008c") + buf.write("\7#\2\2\u008c\u008d\7?\2\2\u008d,\3\2\2\2\u008e\u008f") + buf.write("\7>\2\2\u008f.\3\2\2\2\u0090\u0091\7>\2\2\u0091\u0092") + buf.write("\7?\2\2\u0092\60\3\2\2\2\u0093\u0094\7@\2\2\u0094\62\3") + buf.write("\2\2\2\u0095\u0096\7@\2\2\u0096\u0097\7?\2\2\u0097\64") + buf.write("\3\2\2\2\u0098\u0099\7p\2\2\u0099\u009a\7q\2\2\u009a\u009b") + buf.write("\7v\2\2\u009b\66\3\2\2\2\u009c\u009d\7c\2\2\u009d\u009e") + buf.write("\7p\2\2\u009e\u009f\7f\2\2\u009f8\3\2\2\2\u00a0\u00a1") + buf.write("\7q\2\2\u00a1\u00a2\7t\2\2\u00a2:\3\2\2\2\u00a3\u00a4") + buf.write("\7v\2\2\u00a4\u00a5\7t\2\2\u00a5\u00a6\7w\2\2\u00a6\u00a7") + buf.write("\7g\2\2\u00a7<\3\2\2\2\u00a8\u00a9\7h\2\2\u00a9\u00aa") + buf.write("\7c\2\2\u00aa\u00ab\7n\2\2\u00ab\u00ac\7u\2\2\u00ac\u00ad") + buf.write("\7g\2\2\u00ad>\3\2\2\2\u00ae\u00b0\5C\"\2\u00af\u00ae") + buf.write("\3\2\2\2\u00b0\u00b1\3\2\2\2\u00b1\u00af\3\2\2\2\u00b1") + buf.write("\u00b2\3\2\2\2\u00b2@\3\2\2\2\u00b3\u00b7\5E#\2\u00b4") + buf.write("\u00b6\5G$\2\u00b5\u00b4\3\2\2\2\u00b6\u00b9\3\2\2\2\u00b7") + buf.write("\u00b5\3\2\2\2\u00b7\u00b8\3\2\2\2\u00b8B\3\2\2\2\u00b9") + buf.write("\u00b7\3\2\2\2\u00ba\u00bb\t\2\2\2\u00bbD\3\2\2\2\u00bc") + buf.write("\u00bd\t\3\2\2\u00bdF\3\2\2\2\u00be\u00c2\5E#\2\u00bf") + buf.write("\u00c2\5C\"\2\u00c0\u00c2\t\4\2\2\u00c1\u00be\3\2\2\2") + buf.write("\u00c1\u00bf\3\2\2\2\u00c1\u00c0\3\2\2\2\u00c2H\3\2\2") + buf.write("\2\u00c3\u00c5\t\5\2\2\u00c4\u00c3\3\2\2\2\u00c5\u00c6") + buf.write("\3\2\2\2\u00c6\u00c4\3\2\2\2\u00c6\u00c7\3\2\2\2\u00c7") + buf.write("\u00c8\3\2\2\2\u00c8\u00c9\b%\2\2\u00c9J\3\2\2\2\7\2\u00b1") + buf.write("\u00b7\u00c1\u00c6\3\b\2\2") return buf.getvalue() @@ -115,9 +121,11 @@ class PyxellLexer(Lexer): T__25 = 26 T__26 = 27 T__27 = 28 - INT = 29 - ID = 30 - WS = 31 + T__28 = 29 + T__29 = 30 + INT = 31 + ID = 32 + WS = 33 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -125,9 +133,9 @@ class PyxellLexer(Lexer): literalNames = [ "", "';'", "'skip'", "'print'", "'='", "'if'", "'elif'", "'else'", - "'do'", "'{'", "'}'", "'('", "')'", "'+'", "'-'", "'*'", "'/'", - "'%'", "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", "'not'", - "'and'", "'or'", "'true'", "'false'" ] + "'while'", "'until'", "'do'", "'{'", "'}'", "'('", "')'", "'+'", + "'-'", "'*'", "'/'", "'%'", "'=='", "'!='", "'<'", "'<='", "'>'", + "'>='", "'not'", "'and'", "'or'", "'true'", "'false'" ] symbolicNames = [ "", "INT", "ID", "WS" ] @@ -136,8 +144,8 @@ class PyxellLexer(Lexer): "T__7", "T__8", "T__9", "T__10", "T__11", "T__12", "T__13", "T__14", "T__15", "T__16", "T__17", "T__18", "T__19", "T__20", "T__21", "T__22", "T__23", "T__24", "T__25", - "T__26", "T__27", "INT", "ID", "DIGIT", "ID_START", "ID_CONT", - "WS" ] + "T__26", "T__27", "T__28", "T__29", "INT", "ID", "DIGIT", + "ID_START", "ID_CONT", "WS" ] grammarFileName = "Pyxell.g4" diff --git a/src/antlr/PyxellLexer.tokens b/src/antlr/PyxellLexer.tokens index 0d037a60..81872820 100644 --- a/src/antlr/PyxellLexer.tokens +++ b/src/antlr/PyxellLexer.tokens @@ -26,9 +26,11 @@ T__24=25 T__25=26 T__26=27 T__27=28 -INT=29 -ID=30 -WS=31 +T__28=29 +T__29=30 +INT=31 +ID=32 +WS=33 ';'=1 'skip'=2 'print'=3 @@ -36,24 +38,26 @@ WS=31 'if'=5 'elif'=6 'else'=7 -'do'=8 -'{'=9 -'}'=10 -'('=11 -')'=12 -'+'=13 -'-'=14 -'*'=15 -'/'=16 -'%'=17 -'=='=18 -'!='=19 -'<'=20 -'<='=21 -'>'=22 -'>='=23 -'not'=24 -'and'=25 -'or'=26 -'true'=27 -'false'=28 +'while'=8 +'until'=9 +'do'=10 +'{'=11 +'}'=12 +'('=13 +')'=14 +'+'=15 +'-'=16 +'*'=17 +'/'=18 +'%'=19 +'=='=20 +'!='=21 +'<'=22 +'<='=23 +'>'=24 +'>='=25 +'not'=26 +'and'=27 +'or'=28 +'true'=29 +'false'=30 diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index 0b57c697..946d3a39 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -8,41 +8,45 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3!") - buf.write("j\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3#") + buf.write("t\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b") buf.write("\t\b\3\2\7\2\22\n\2\f\2\16\2\25\13\2\3\2\3\2\3\3\3\3\3") buf.write("\3\3\3\5\3\35\n\3\3\4\3\4\3\4\3\4\3\4\7\4$\n\4\f\4\16") buf.write("\4\'\13\4\3\4\5\4*\n\4\3\5\3\5\3\5\3\5\3\5\3\5\3\5\7\5") - buf.write("\63\n\5\f\5\16\5\66\13\5\3\5\3\5\5\5:\n\5\3\6\3\6\3\6") - buf.write("\6\6?\n\6\r\6\16\6@\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\7\3") - buf.write("\7\3\7\3\7\3\7\5\7O\n\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3") - buf.write("\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\7\7`\n\7\f\7\16\7c\13\7") - buf.write("\3\b\3\b\3\b\5\bh\n\b\3\b\2\3\f\t\2\4\6\b\n\f\16\2\6\3") - buf.write("\2\17\20\3\2\21\23\3\2\24\31\3\2\35\36\2t\2\23\3\2\2\2") - buf.write("\4\34\3\2\2\2\6)\3\2\2\2\b+\3\2\2\2\n;\3\2\2\2\fN\3\2") - buf.write("\2\2\16g\3\2\2\2\20\22\5\4\3\2\21\20\3\2\2\2\22\25\3\2") - buf.write("\2\2\23\21\3\2\2\2\23\24\3\2\2\2\24\26\3\2\2\2\25\23\3") - buf.write("\2\2\2\26\27\7\2\2\3\27\3\3\2\2\2\30\31\5\6\4\2\31\32") - buf.write("\7\3\2\2\32\35\3\2\2\2\33\35\5\b\5\2\34\30\3\2\2\2\34") - buf.write("\33\3\2\2\2\35\5\3\2\2\2\36*\7\4\2\2\37 \7\5\2\2 *\5\f") - buf.write("\7\2!\"\7 \2\2\"$\7\6\2\2#!\3\2\2\2$\'\3\2\2\2%#\3\2\2") - buf.write("\2%&\3\2\2\2&(\3\2\2\2\'%\3\2\2\2(*\5\f\7\2)\36\3\2\2") - buf.write("\2)\37\3\2\2\2)%\3\2\2\2*\7\3\2\2\2+,\7\7\2\2,-\5\f\7") - buf.write("\2-\64\5\n\6\2./\7\b\2\2/\60\5\f\7\2\60\61\5\n\6\2\61") - buf.write("\63\3\2\2\2\62.\3\2\2\2\63\66\3\2\2\2\64\62\3\2\2\2\64") - buf.write("\65\3\2\2\2\659\3\2\2\2\66\64\3\2\2\2\678\7\t\2\28:\5") - buf.write("\n\6\29\67\3\2\2\29:\3\2\2\2:\t\3\2\2\2;<\7\n\2\2<>\7") - buf.write("\13\2\2=?\5\4\3\2>=\3\2\2\2?@\3\2\2\2@>\3\2\2\2@A\3\2") - buf.write("\2\2AB\3\2\2\2BC\7\f\2\2C\13\3\2\2\2DE\b\7\1\2EO\5\16") - buf.write("\b\2FG\7\r\2\2GH\5\f\7\2HI\7\16\2\2IO\3\2\2\2JK\t\2\2") - buf.write("\2KO\5\f\7\tLM\7\32\2\2MO\5\f\7\5ND\3\2\2\2NF\3\2\2\2") - buf.write("NJ\3\2\2\2NL\3\2\2\2Oa\3\2\2\2PQ\f\b\2\2QR\t\3\2\2R`\5") - buf.write("\f\7\tST\f\7\2\2TU\t\2\2\2U`\5\f\7\bVW\f\6\2\2WX\t\4\2") - buf.write("\2X`\5\f\7\6YZ\f\4\2\2Z[\7\33\2\2[`\5\f\7\4\\]\f\3\2\2") - buf.write("]^\7\34\2\2^`\5\f\7\3_P\3\2\2\2_S\3\2\2\2_V\3\2\2\2_Y") - buf.write("\3\2\2\2_\\\3\2\2\2`c\3\2\2\2a_\3\2\2\2ab\3\2\2\2b\r\3") - buf.write("\2\2\2ca\3\2\2\2dh\7\37\2\2eh\t\5\2\2fh\7 \2\2gd\3\2\2") - buf.write("\2ge\3\2\2\2gf\3\2\2\2h\17\3\2\2\2\r\23\34%)\649@N_ag") + buf.write("\63\n\5\f\5\16\5\66\13\5\3\5\3\5\5\5:\n\5\3\5\3\5\3\5") + buf.write("\3\5\3\5\3\5\3\5\3\5\5\5D\n\5\3\6\3\6\3\6\6\6I\n\6\r\6") + buf.write("\16\6J\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7") + buf.write("\5\7Y\n\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7") + buf.write("\3\7\3\7\3\7\3\7\7\7j\n\7\f\7\16\7m\13\7\3\b\3\b\3\b\5") + buf.write("\br\n\b\3\b\2\3\f\t\2\4\6\b\n\f\16\2\6\3\2\21\22\3\2\23") + buf.write("\25\3\2\26\33\3\2\37 \2\u0080\2\23\3\2\2\2\4\34\3\2\2") + buf.write("\2\6)\3\2\2\2\bC\3\2\2\2\nE\3\2\2\2\fX\3\2\2\2\16q\3\2") + buf.write("\2\2\20\22\5\4\3\2\21\20\3\2\2\2\22\25\3\2\2\2\23\21\3") + buf.write("\2\2\2\23\24\3\2\2\2\24\26\3\2\2\2\25\23\3\2\2\2\26\27") + buf.write("\7\2\2\3\27\3\3\2\2\2\30\31\5\6\4\2\31\32\7\3\2\2\32\35") + buf.write("\3\2\2\2\33\35\5\b\5\2\34\30\3\2\2\2\34\33\3\2\2\2\35") + buf.write("\5\3\2\2\2\36*\7\4\2\2\37 \7\5\2\2 *\5\f\7\2!\"\7\"\2") + buf.write("\2\"$\7\6\2\2#!\3\2\2\2$\'\3\2\2\2%#\3\2\2\2%&\3\2\2\2") + buf.write("&(\3\2\2\2\'%\3\2\2\2(*\5\f\7\2)\36\3\2\2\2)\37\3\2\2") + buf.write("\2)%\3\2\2\2*\7\3\2\2\2+,\7\7\2\2,-\5\f\7\2-\64\5\n\6") + buf.write("\2./\7\b\2\2/\60\5\f\7\2\60\61\5\n\6\2\61\63\3\2\2\2\62") + buf.write(".\3\2\2\2\63\66\3\2\2\2\64\62\3\2\2\2\64\65\3\2\2\2\65") + buf.write("9\3\2\2\2\66\64\3\2\2\2\678\7\t\2\28:\5\n\6\29\67\3\2") + buf.write("\2\29:\3\2\2\2:D\3\2\2\2;<\7\n\2\2<=\5\f\7\2=>\5\n\6\2") + buf.write(">D\3\2\2\2?@\7\13\2\2@A\5\f\7\2AB\5\n\6\2BD\3\2\2\2C+") + buf.write("\3\2\2\2C;\3\2\2\2C?\3\2\2\2D\t\3\2\2\2EF\7\f\2\2FH\7") + buf.write("\r\2\2GI\5\4\3\2HG\3\2\2\2IJ\3\2\2\2JH\3\2\2\2JK\3\2\2") + buf.write("\2KL\3\2\2\2LM\7\16\2\2M\13\3\2\2\2NO\b\7\1\2OY\5\16\b") + buf.write("\2PQ\7\17\2\2QR\5\f\7\2RS\7\20\2\2SY\3\2\2\2TU\t\2\2\2") + buf.write("UY\5\f\7\tVW\7\34\2\2WY\5\f\7\5XN\3\2\2\2XP\3\2\2\2XT") + buf.write("\3\2\2\2XV\3\2\2\2Yk\3\2\2\2Z[\f\b\2\2[\\\t\3\2\2\\j\5") + buf.write("\f\7\t]^\f\7\2\2^_\t\2\2\2_j\5\f\7\b`a\f\6\2\2ab\t\4\2") + buf.write("\2bj\5\f\7\6cd\f\4\2\2de\7\35\2\2ej\5\f\7\4fg\f\3\2\2") + buf.write("gh\7\36\2\2hj\5\f\7\3iZ\3\2\2\2i]\3\2\2\2i`\3\2\2\2ic") + buf.write("\3\2\2\2if\3\2\2\2jm\3\2\2\2ki\3\2\2\2kl\3\2\2\2l\r\3") + buf.write("\2\2\2mk\3\2\2\2nr\7!\2\2or\t\5\2\2pr\7\"\2\2qn\3\2\2") + buf.write("\2qo\3\2\2\2qp\3\2\2\2r\17\3\2\2\2\16\23\34%)\649CJXi") + buf.write("kq") return buf.getvalue() @@ -57,10 +61,10 @@ class PyxellParser ( Parser ): sharedContextCache = PredictionContextCache() literalNames = [ "", "';'", "'skip'", "'print'", "'='", "'if'", - "'elif'", "'else'", "'do'", "'{'", "'}'", "'('", "')'", - "'+'", "'-'", "'*'", "'/'", "'%'", "'=='", "'!='", - "'<'", "'<='", "'>'", "'>='", "'not'", "'and'", "'or'", - "'true'", "'false'" ] + "'elif'", "'else'", "'while'", "'until'", "'do'", "'{'", + "'}'", "'('", "')'", "'+'", "'-'", "'*'", "'/'", "'%'", + "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", "'not'", + "'and'", "'or'", "'true'", "'false'" ] symbolicNames = [ "", "", "", "", "", "", "", "", @@ -69,7 +73,8 @@ class PyxellParser ( Parser ): "", "", "", "", "", "", "", "", "", "", "", "", - "", "INT", "ID", "WS" ] + "", "", "", "INT", "ID", + "WS" ] RULE_program = 0 RULE_stmt = 1 @@ -111,9 +116,11 @@ class PyxellParser ( Parser ): T__25=26 T__26=27 T__27=28 - INT=29 - ID=30 - WS=31 + T__28=29 + T__29=30 + INT=31 + ID=32 + WS=33 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -162,7 +169,7 @@ def program(self): self.state = 17 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__4) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__26) | (1 << PyxellParser.T__27) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0): + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__4) | (1 << PyxellParser.T__7) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__14) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__25) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0): self.state = 14 self.stmt() self.state = 19 @@ -214,14 +221,14 @@ def stmt(self): self.state = 26 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__10, PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__23, PyxellParser.T__26, PyxellParser.T__27, PyxellParser.INT, PyxellParser.ID]: + if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__12, PyxellParser.T__14, PyxellParser.T__15, PyxellParser.T__25, PyxellParser.T__28, PyxellParser.T__29, PyxellParser.INT, PyxellParser.ID]: self.enterOuterAlt(localctx, 1) self.state = 22 self.simple_stmt() self.state = 23 self.match(PyxellParser.T__0) pass - elif token in [PyxellParser.T__4]: + elif token in [PyxellParser.T__4, PyxellParser.T__7, PyxellParser.T__8]: self.enterOuterAlt(localctx, 2) self.state = 25 self.compound_stmt() @@ -330,7 +337,7 @@ def simple_stmt(self): self.state = 30 self.expr(0) pass - elif token in [PyxellParser.T__10, PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__23, PyxellParser.T__26, PyxellParser.T__27, PyxellParser.INT, PyxellParser.ID]: + elif token in [PyxellParser.T__12, PyxellParser.T__14, PyxellParser.T__15, PyxellParser.T__25, PyxellParser.T__28, PyxellParser.T__29, PyxellParser.INT, PyxellParser.ID]: localctx = PyxellParser.StmtAssgContext(self, localctx) self.enterOuterAlt(localctx, 3) self.state = 35 @@ -377,6 +384,46 @@ def copyFrom(self, ctx:ParserRuleContext): + class StmtWhileContext(Compound_stmtContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Compound_stmtContext + super().__init__(parser) + self.copyFrom(ctx) + + def expr(self): + return self.getTypedRuleContext(PyxellParser.ExprContext,0) + + def block(self): + return self.getTypedRuleContext(PyxellParser.BlockContext,0) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStmtWhile" ): + return visitor.visitStmtWhile(self) + else: + return visitor.visitChildren(self) + + + class StmtUntilContext(Compound_stmtContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Compound_stmtContext + super().__init__(parser) + self.copyFrom(ctx) + + def expr(self): + return self.getTypedRuleContext(PyxellParser.ExprContext,0) + + def block(self): + return self.getTypedRuleContext(PyxellParser.BlockContext,0) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStmtUntil" ): + return visitor.visitStmtUntil(self) + else: + return visitor.visitChildren(self) + + class StmtIfContext(Compound_stmtContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Compound_stmtContext @@ -410,37 +457,65 @@ def compound_stmt(self): self.enterRule(localctx, 6, self.RULE_compound_stmt) self._la = 0 # Token type try: - localctx = PyxellParser.StmtIfContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 41 - self.match(PyxellParser.T__4) - self.state = 42 - self.expr(0) - self.state = 43 - self.block() - self.state = 50 + self.state = 65 self._errHandler.sync(self) - _la = self._input.LA(1) - while _la==PyxellParser.T__5: - self.state = 44 - self.match(PyxellParser.T__5) - self.state = 45 + token = self._input.LA(1) + if token in [PyxellParser.T__4]: + localctx = PyxellParser.StmtIfContext(self, localctx) + self.enterOuterAlt(localctx, 1) + self.state = 41 + self.match(PyxellParser.T__4) + self.state = 42 self.expr(0) - self.state = 46 + self.state = 43 self.block() - self.state = 52 + self.state = 50 self._errHandler.sync(self) _la = self._input.LA(1) + while _la==PyxellParser.T__5: + self.state = 44 + self.match(PyxellParser.T__5) + self.state = 45 + self.expr(0) + self.state = 46 + self.block() + self.state = 52 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 55 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==PyxellParser.T__6: + self.state = 53 + self.match(PyxellParser.T__6) + self.state = 54 + self.block() - self.state = 55 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==PyxellParser.T__6: - self.state = 53 - self.match(PyxellParser.T__6) - self.state = 54 - self.block() + pass + elif token in [PyxellParser.T__7]: + localctx = PyxellParser.StmtWhileContext(self, localctx) + self.enterOuterAlt(localctx, 2) + self.state = 57 + self.match(PyxellParser.T__7) + self.state = 58 + self.expr(0) + self.state = 59 + self.block() + pass + elif token in [PyxellParser.T__8]: + localctx = PyxellParser.StmtUntilContext(self, localctx) + self.enterOuterAlt(localctx, 3) + self.state = 61 + self.match(PyxellParser.T__8) + self.state = 62 + self.expr(0) + self.state = 63 + self.block() + pass + else: + raise NoViableAltException(self) except RecognitionException as re: localctx.exception = re @@ -483,24 +558,24 @@ def block(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 57 - self.match(PyxellParser.T__7) - self.state = 58 - self.match(PyxellParser.T__8) - self.state = 60 + self.state = 67 + self.match(PyxellParser.T__9) + self.state = 68 + self.match(PyxellParser.T__10) + self.state = 70 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 59 + self.state = 69 self.stmt() - self.state = 62 + self.state = 72 self._errHandler.sync(self) _la = self._input.LA(1) - if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__4) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__26) | (1 << PyxellParser.T__27) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0)): + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__4) | (1 << PyxellParser.T__7) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__14) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__25) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0)): break - self.state = 64 - self.match(PyxellParser.T__9) + self.state = 74 + self.match(PyxellParser.T__11) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -651,154 +726,154 @@ def expr(self, _p:int=0): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 76 + self.state = 86 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__26, PyxellParser.T__27, PyxellParser.INT, PyxellParser.ID]: + if token in [PyxellParser.T__28, PyxellParser.T__29, PyxellParser.INT, PyxellParser.ID]: localctx = PyxellParser.ExprAtomContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 67 + self.state = 77 self.atom() pass - elif token in [PyxellParser.T__10]: + elif token in [PyxellParser.T__12]: localctx = PyxellParser.ExprParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 68 - self.match(PyxellParser.T__10) - self.state = 69 + self.state = 78 + self.match(PyxellParser.T__12) + self.state = 79 self.expr(0) - self.state = 70 - self.match(PyxellParser.T__11) + self.state = 80 + self.match(PyxellParser.T__13) pass - elif token in [PyxellParser.T__12, PyxellParser.T__13]: + elif token in [PyxellParser.T__14, PyxellParser.T__15]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 72 + self.state = 82 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not(_la==PyxellParser.T__12 or _la==PyxellParser.T__13): + if not(_la==PyxellParser.T__14 or _la==PyxellParser.T__15): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 73 + self.state = 83 self.expr(7) pass - elif token in [PyxellParser.T__23]: + elif token in [PyxellParser.T__25]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 74 - localctx.op = self.match(PyxellParser.T__23) - self.state = 75 + self.state = 84 + localctx.op = self.match(PyxellParser.T__25) + self.state = 85 self.expr(3) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 95 + self.state = 105 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,9,self._ctx) + _alt = self._interp.adaptivePredict(self._input,10,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 93 + self.state = 103 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,8,self._ctx) + la_ = self._interp.adaptivePredict(self._input,9,self._ctx) if la_ == 1: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 78 + self.state = 88 if not self.precpred(self._ctx, 6): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") - self.state = 79 + self.state = 89 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__14) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__16))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__16) | (1 << PyxellParser.T__17) | (1 << PyxellParser.T__18))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 80 + self.state = 90 self.expr(7) pass elif la_ == 2: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 81 + self.state = 91 if not self.precpred(self._ctx, 5): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") - self.state = 82 + self.state = 92 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not(_la==PyxellParser.T__12 or _la==PyxellParser.T__13): + if not(_la==PyxellParser.T__14 or _la==PyxellParser.T__15): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 83 + self.state = 93 self.expr(6) pass elif la_ == 3: localctx = PyxellParser.ExprCmpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 84 + self.state = 94 if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") - self.state = 85 + self.state = 95 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__17) | (1 << PyxellParser.T__18) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__24))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 86 + self.state = 96 self.expr(4) pass elif la_ == 4: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 87 + self.state = 97 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 88 - localctx.op = self.match(PyxellParser.T__24) - self.state = 89 + self.state = 98 + localctx.op = self.match(PyxellParser.T__26) + self.state = 99 self.expr(2) pass elif la_ == 5: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 90 + self.state = 100 if not self.precpred(self._ctx, 1): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") - self.state = 91 - localctx.op = self.match(PyxellParser.T__25) - self.state = 92 + self.state = 101 + localctx.op = self.match(PyxellParser.T__27) + self.state = 102 self.expr(1) pass - self.state = 97 + self.state = 107 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,9,self._ctx) + _alt = self._interp.adaptivePredict(self._input,10,self._ctx) except RecognitionException as re: localctx.exception = re @@ -878,21 +953,21 @@ def atom(self): self.enterRule(localctx, 12, self.RULE_atom) self._la = 0 # Token type try: - self.state = 101 + self.state = 111 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: localctx = PyxellParser.AtomIntContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 98 + self.state = 108 self.match(PyxellParser.INT) pass - elif token in [PyxellParser.T__26, PyxellParser.T__27]: + elif token in [PyxellParser.T__28, PyxellParser.T__29]: localctx = PyxellParser.AtomBoolContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 99 + self.state = 109 _la = self._input.LA(1) - if not(_la==PyxellParser.T__26 or _la==PyxellParser.T__27): + if not(_la==PyxellParser.T__28 or _la==PyxellParser.T__29): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -901,7 +976,7 @@ def atom(self): elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 100 + self.state = 110 self.match(PyxellParser.ID) pass else: diff --git a/src/antlr/PyxellVisitor.py b/src/antlr/PyxellVisitor.py index 84a59847..ea3ac4ac 100644 --- a/src/antlr/PyxellVisitor.py +++ b/src/antlr/PyxellVisitor.py @@ -39,6 +39,16 @@ def visitStmtIf(self, ctx:PyxellParser.StmtIfContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#StmtWhile. + def visitStmtWhile(self, ctx:PyxellParser.StmtWhileContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by PyxellParser#StmtUntil. + def visitStmtUntil(self, ctx:PyxellParser.StmtUntilContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#block. def visitBlock(self, ctx:PyxellParser.BlockContext): return self.visitChildren(ctx) diff --git a/src/compiler.py b/src/compiler.py index 9e786a87..3f709163 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -97,8 +97,8 @@ def emitIfElse(index): return cond = self.visit(exprs[index]) - bbif = self.builder.function.append_basic_block() - bbelse = self.builder.function.append_basic_block() + bbif = self.builder.append_basic_block() + bbelse = self.builder.append_basic_block() self.builder.cbranch(cond, bbif, bbelse) with self.builder._branch_helper(bbif, bbend): @@ -113,6 +113,38 @@ def emitIfElse(index): self.builder.function.blocks.append(bbend) self.builder.position_at_end(bbend) + def visitStmtWhile(self, ctx): + bbstart = self.builder.append_basic_block() + self.builder.branch(bbstart) + self.builder.position_at_end(bbstart) + cond = self.visit(ctx.expr()) + + bbwhile = self.builder.append_basic_block() + bbend = ll.Block(self.builder.function) + self.builder.cbranch(cond, bbwhile, bbend) + + self.builder.position_at_end(bbwhile) + with self.local(): + self.visit(ctx.block()) + self.builder.branch(bbstart) + + self.builder.function.blocks.append(bbend) + self.builder.position_at_end(bbend) + + def visitStmtUntil(self, ctx): + bbuntil = self.builder.append_basic_block() + self.builder.branch(bbuntil) + bbend = ll.Block(self.builder.function) + + self.builder.position_at_end(bbuntil) + with self.local(): + self.visit(ctx.block()) + cond = self.visit(ctx.expr()) + self.builder.cbranch(cond, bbend, bbuntil) + + self.builder.function.blocks.append(bbend) + self.builder.position_at_end(bbend) + ### Expressions ### From e60308e77232e03098fb84c8b5e4a3251d20e562 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Fri, 4 Oct 2019 19:47:55 +0200 Subject: [PATCH 008/100] Compound assignments --- src/Pyxell.g4 | 1 + src/antlr/Pyxell.interp | 12 +- src/antlr/Pyxell.tokens | 30 ++-- src/antlr/PyxellLexer.interp | 12 +- src/antlr/PyxellLexer.py | 142 ++++++++--------- src/antlr/PyxellLexer.tokens | 30 ++-- src/antlr/PyxellParser.py | 296 ++++++++++++++++++++--------------- src/antlr/PyxellVisitor.py | 5 + src/compiler.py | 25 +-- 9 files changed, 304 insertions(+), 249 deletions(-) diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index a952da1a..42087287 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -13,6 +13,7 @@ simple_stmt : 'skip' # StmtSkip | 'print' expr # StmtPrint | (ID '=')* expr # StmtAssg + | ID op=('*' | '/' | '%' | '+' | '-') '=' expr # StmtAssgExpr ; compound_stmt diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index ac27d151..6d0fab02 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -4,6 +4,11 @@ null 'skip' 'print' '=' +'*' +'/' +'%' +'+' +'-' 'if' 'elif' 'else' @@ -14,11 +19,6 @@ null '}' '(' ')' -'+' -'-' -'*' -'/' -'%' '==' '!=' '<' @@ -81,4 +81,4 @@ atom atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 35, 116, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 3, 2, 7, 2, 18, 10, 2, 12, 2, 14, 2, 21, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 29, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 36, 10, 4, 12, 4, 14, 4, 39, 11, 4, 3, 4, 5, 4, 42, 10, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 7, 5, 51, 10, 5, 12, 5, 14, 5, 54, 11, 5, 3, 5, 3, 5, 5, 5, 58, 10, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 68, 10, 5, 3, 6, 3, 6, 3, 6, 6, 6, 73, 10, 6, 13, 6, 14, 6, 74, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 89, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 106, 10, 7, 12, 7, 14, 7, 109, 11, 7, 3, 8, 3, 8, 3, 8, 5, 8, 114, 10, 8, 3, 8, 2, 3, 12, 9, 2, 4, 6, 8, 10, 12, 14, 2, 6, 3, 2, 17, 18, 3, 2, 19, 21, 3, 2, 22, 27, 3, 2, 31, 32, 2, 128, 2, 19, 3, 2, 2, 2, 4, 28, 3, 2, 2, 2, 6, 41, 3, 2, 2, 2, 8, 67, 3, 2, 2, 2, 10, 69, 3, 2, 2, 2, 12, 88, 3, 2, 2, 2, 14, 113, 3, 2, 2, 2, 16, 18, 5, 4, 3, 2, 17, 16, 3, 2, 2, 2, 18, 21, 3, 2, 2, 2, 19, 17, 3, 2, 2, 2, 19, 20, 3, 2, 2, 2, 20, 22, 3, 2, 2, 2, 21, 19, 3, 2, 2, 2, 22, 23, 7, 2, 2, 3, 23, 3, 3, 2, 2, 2, 24, 25, 5, 6, 4, 2, 25, 26, 7, 3, 2, 2, 26, 29, 3, 2, 2, 2, 27, 29, 5, 8, 5, 2, 28, 24, 3, 2, 2, 2, 28, 27, 3, 2, 2, 2, 29, 5, 3, 2, 2, 2, 30, 42, 7, 4, 2, 2, 31, 32, 7, 5, 2, 2, 32, 42, 5, 12, 7, 2, 33, 34, 7, 34, 2, 2, 34, 36, 7, 6, 2, 2, 35, 33, 3, 2, 2, 2, 36, 39, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 37, 38, 3, 2, 2, 2, 38, 40, 3, 2, 2, 2, 39, 37, 3, 2, 2, 2, 40, 42, 5, 12, 7, 2, 41, 30, 3, 2, 2, 2, 41, 31, 3, 2, 2, 2, 41, 37, 3, 2, 2, 2, 42, 7, 3, 2, 2, 2, 43, 44, 7, 7, 2, 2, 44, 45, 5, 12, 7, 2, 45, 52, 5, 10, 6, 2, 46, 47, 7, 8, 2, 2, 47, 48, 5, 12, 7, 2, 48, 49, 5, 10, 6, 2, 49, 51, 3, 2, 2, 2, 50, 46, 3, 2, 2, 2, 51, 54, 3, 2, 2, 2, 52, 50, 3, 2, 2, 2, 52, 53, 3, 2, 2, 2, 53, 57, 3, 2, 2, 2, 54, 52, 3, 2, 2, 2, 55, 56, 7, 9, 2, 2, 56, 58, 5, 10, 6, 2, 57, 55, 3, 2, 2, 2, 57, 58, 3, 2, 2, 2, 58, 68, 3, 2, 2, 2, 59, 60, 7, 10, 2, 2, 60, 61, 5, 12, 7, 2, 61, 62, 5, 10, 6, 2, 62, 68, 3, 2, 2, 2, 63, 64, 7, 11, 2, 2, 64, 65, 5, 12, 7, 2, 65, 66, 5, 10, 6, 2, 66, 68, 3, 2, 2, 2, 67, 43, 3, 2, 2, 2, 67, 59, 3, 2, 2, 2, 67, 63, 3, 2, 2, 2, 68, 9, 3, 2, 2, 2, 69, 70, 7, 12, 2, 2, 70, 72, 7, 13, 2, 2, 71, 73, 5, 4, 3, 2, 72, 71, 3, 2, 2, 2, 73, 74, 3, 2, 2, 2, 74, 72, 3, 2, 2, 2, 74, 75, 3, 2, 2, 2, 75, 76, 3, 2, 2, 2, 76, 77, 7, 14, 2, 2, 77, 11, 3, 2, 2, 2, 78, 79, 8, 7, 1, 2, 79, 89, 5, 14, 8, 2, 80, 81, 7, 15, 2, 2, 81, 82, 5, 12, 7, 2, 82, 83, 7, 16, 2, 2, 83, 89, 3, 2, 2, 2, 84, 85, 9, 2, 2, 2, 85, 89, 5, 12, 7, 9, 86, 87, 7, 28, 2, 2, 87, 89, 5, 12, 7, 5, 88, 78, 3, 2, 2, 2, 88, 80, 3, 2, 2, 2, 88, 84, 3, 2, 2, 2, 88, 86, 3, 2, 2, 2, 89, 107, 3, 2, 2, 2, 90, 91, 12, 8, 2, 2, 91, 92, 9, 3, 2, 2, 92, 106, 5, 12, 7, 9, 93, 94, 12, 7, 2, 2, 94, 95, 9, 2, 2, 2, 95, 106, 5, 12, 7, 8, 96, 97, 12, 6, 2, 2, 97, 98, 9, 4, 2, 2, 98, 106, 5, 12, 7, 6, 99, 100, 12, 4, 2, 2, 100, 101, 7, 29, 2, 2, 101, 106, 5, 12, 7, 4, 102, 103, 12, 3, 2, 2, 103, 104, 7, 30, 2, 2, 104, 106, 5, 12, 7, 3, 105, 90, 3, 2, 2, 2, 105, 93, 3, 2, 2, 2, 105, 96, 3, 2, 2, 2, 105, 99, 3, 2, 2, 2, 105, 102, 3, 2, 2, 2, 106, 109, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 107, 108, 3, 2, 2, 2, 108, 13, 3, 2, 2, 2, 109, 107, 3, 2, 2, 2, 110, 114, 7, 33, 2, 2, 111, 114, 9, 5, 2, 2, 112, 114, 7, 34, 2, 2, 113, 110, 3, 2, 2, 2, 113, 111, 3, 2, 2, 2, 113, 112, 3, 2, 2, 2, 114, 15, 3, 2, 2, 2, 14, 19, 28, 37, 41, 52, 57, 67, 74, 88, 105, 107, 113] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 35, 120, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 3, 2, 7, 2, 18, 10, 2, 12, 2, 14, 2, 21, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 29, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 36, 10, 4, 12, 4, 14, 4, 39, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 46, 10, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 7, 5, 55, 10, 5, 12, 5, 14, 5, 58, 11, 5, 3, 5, 3, 5, 5, 5, 62, 10, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 72, 10, 5, 3, 6, 3, 6, 3, 6, 6, 6, 77, 10, 6, 13, 6, 14, 6, 78, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 93, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 110, 10, 7, 12, 7, 14, 7, 113, 11, 7, 3, 8, 3, 8, 3, 8, 5, 8, 118, 10, 8, 3, 8, 2, 3, 12, 9, 2, 4, 6, 8, 10, 12, 14, 2, 7, 3, 2, 7, 11, 3, 2, 10, 11, 3, 2, 7, 9, 3, 2, 22, 27, 3, 2, 31, 32, 2, 133, 2, 19, 3, 2, 2, 2, 4, 28, 3, 2, 2, 2, 6, 45, 3, 2, 2, 2, 8, 71, 3, 2, 2, 2, 10, 73, 3, 2, 2, 2, 12, 92, 3, 2, 2, 2, 14, 117, 3, 2, 2, 2, 16, 18, 5, 4, 3, 2, 17, 16, 3, 2, 2, 2, 18, 21, 3, 2, 2, 2, 19, 17, 3, 2, 2, 2, 19, 20, 3, 2, 2, 2, 20, 22, 3, 2, 2, 2, 21, 19, 3, 2, 2, 2, 22, 23, 7, 2, 2, 3, 23, 3, 3, 2, 2, 2, 24, 25, 5, 6, 4, 2, 25, 26, 7, 3, 2, 2, 26, 29, 3, 2, 2, 2, 27, 29, 5, 8, 5, 2, 28, 24, 3, 2, 2, 2, 28, 27, 3, 2, 2, 2, 29, 5, 3, 2, 2, 2, 30, 46, 7, 4, 2, 2, 31, 32, 7, 5, 2, 2, 32, 46, 5, 12, 7, 2, 33, 34, 7, 34, 2, 2, 34, 36, 7, 6, 2, 2, 35, 33, 3, 2, 2, 2, 36, 39, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 37, 38, 3, 2, 2, 2, 38, 40, 3, 2, 2, 2, 39, 37, 3, 2, 2, 2, 40, 46, 5, 12, 7, 2, 41, 42, 7, 34, 2, 2, 42, 43, 9, 2, 2, 2, 43, 44, 7, 6, 2, 2, 44, 46, 5, 12, 7, 2, 45, 30, 3, 2, 2, 2, 45, 31, 3, 2, 2, 2, 45, 37, 3, 2, 2, 2, 45, 41, 3, 2, 2, 2, 46, 7, 3, 2, 2, 2, 47, 48, 7, 12, 2, 2, 48, 49, 5, 12, 7, 2, 49, 56, 5, 10, 6, 2, 50, 51, 7, 13, 2, 2, 51, 52, 5, 12, 7, 2, 52, 53, 5, 10, 6, 2, 53, 55, 3, 2, 2, 2, 54, 50, 3, 2, 2, 2, 55, 58, 3, 2, 2, 2, 56, 54, 3, 2, 2, 2, 56, 57, 3, 2, 2, 2, 57, 61, 3, 2, 2, 2, 58, 56, 3, 2, 2, 2, 59, 60, 7, 14, 2, 2, 60, 62, 5, 10, 6, 2, 61, 59, 3, 2, 2, 2, 61, 62, 3, 2, 2, 2, 62, 72, 3, 2, 2, 2, 63, 64, 7, 15, 2, 2, 64, 65, 5, 12, 7, 2, 65, 66, 5, 10, 6, 2, 66, 72, 3, 2, 2, 2, 67, 68, 7, 16, 2, 2, 68, 69, 5, 12, 7, 2, 69, 70, 5, 10, 6, 2, 70, 72, 3, 2, 2, 2, 71, 47, 3, 2, 2, 2, 71, 63, 3, 2, 2, 2, 71, 67, 3, 2, 2, 2, 72, 9, 3, 2, 2, 2, 73, 74, 7, 17, 2, 2, 74, 76, 7, 18, 2, 2, 75, 77, 5, 4, 3, 2, 76, 75, 3, 2, 2, 2, 77, 78, 3, 2, 2, 2, 78, 76, 3, 2, 2, 2, 78, 79, 3, 2, 2, 2, 79, 80, 3, 2, 2, 2, 80, 81, 7, 19, 2, 2, 81, 11, 3, 2, 2, 2, 82, 83, 8, 7, 1, 2, 83, 93, 5, 14, 8, 2, 84, 85, 7, 20, 2, 2, 85, 86, 5, 12, 7, 2, 86, 87, 7, 21, 2, 2, 87, 93, 3, 2, 2, 2, 88, 89, 9, 3, 2, 2, 89, 93, 5, 12, 7, 9, 90, 91, 7, 28, 2, 2, 91, 93, 5, 12, 7, 5, 92, 82, 3, 2, 2, 2, 92, 84, 3, 2, 2, 2, 92, 88, 3, 2, 2, 2, 92, 90, 3, 2, 2, 2, 93, 111, 3, 2, 2, 2, 94, 95, 12, 8, 2, 2, 95, 96, 9, 4, 2, 2, 96, 110, 5, 12, 7, 9, 97, 98, 12, 7, 2, 2, 98, 99, 9, 3, 2, 2, 99, 110, 5, 12, 7, 8, 100, 101, 12, 6, 2, 2, 101, 102, 9, 5, 2, 2, 102, 110, 5, 12, 7, 6, 103, 104, 12, 4, 2, 2, 104, 105, 7, 29, 2, 2, 105, 110, 5, 12, 7, 4, 106, 107, 12, 3, 2, 2, 107, 108, 7, 30, 2, 2, 108, 110, 5, 12, 7, 3, 109, 94, 3, 2, 2, 2, 109, 97, 3, 2, 2, 2, 109, 100, 3, 2, 2, 2, 109, 103, 3, 2, 2, 2, 109, 106, 3, 2, 2, 2, 110, 113, 3, 2, 2, 2, 111, 109, 3, 2, 2, 2, 111, 112, 3, 2, 2, 2, 112, 13, 3, 2, 2, 2, 113, 111, 3, 2, 2, 2, 114, 118, 7, 33, 2, 2, 115, 118, 9, 6, 2, 2, 116, 118, 7, 34, 2, 2, 117, 114, 3, 2, 2, 2, 117, 115, 3, 2, 2, 2, 117, 116, 3, 2, 2, 2, 118, 15, 3, 2, 2, 2, 14, 19, 28, 37, 45, 56, 61, 71, 78, 92, 109, 111, 117] \ No newline at end of file diff --git a/src/antlr/Pyxell.tokens b/src/antlr/Pyxell.tokens index 81872820..c98b778f 100644 --- a/src/antlr/Pyxell.tokens +++ b/src/antlr/Pyxell.tokens @@ -35,21 +35,21 @@ WS=33 'skip'=2 'print'=3 '='=4 -'if'=5 -'elif'=6 -'else'=7 -'while'=8 -'until'=9 -'do'=10 -'{'=11 -'}'=12 -'('=13 -')'=14 -'+'=15 -'-'=16 -'*'=17 -'/'=18 -'%'=19 +'*'=5 +'/'=6 +'%'=7 +'+'=8 +'-'=9 +'if'=10 +'elif'=11 +'else'=12 +'while'=13 +'until'=14 +'do'=15 +'{'=16 +'}'=17 +'('=18 +')'=19 '=='=20 '!='=21 '<'=22 diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp index c8a0d981..63e67c16 100644 --- a/src/antlr/PyxellLexer.interp +++ b/src/antlr/PyxellLexer.interp @@ -4,6 +4,11 @@ null 'skip' 'print' '=' +'*' +'/' +'%' +'+' +'-' 'if' 'elif' 'else' @@ -14,11 +19,6 @@ null '}' '(' ')' -'+' -'-' -'*' -'/' -'%' '==' '!=' '<' @@ -116,4 +116,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 35, 202, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 6, 32, 176, 10, 32, 13, 32, 14, 32, 177, 3, 33, 3, 33, 7, 33, 182, 10, 33, 12, 33, 14, 33, 185, 11, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 5, 36, 194, 10, 36, 3, 37, 6, 37, 197, 10, 37, 13, 37, 14, 37, 198, 3, 37, 3, 37, 2, 2, 38, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 2, 69, 2, 71, 2, 73, 35, 3, 2, 6, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 203, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 3, 75, 3, 2, 2, 2, 5, 77, 3, 2, 2, 2, 7, 82, 3, 2, 2, 2, 9, 88, 3, 2, 2, 2, 11, 90, 3, 2, 2, 2, 13, 93, 3, 2, 2, 2, 15, 98, 3, 2, 2, 2, 17, 103, 3, 2, 2, 2, 19, 109, 3, 2, 2, 2, 21, 115, 3, 2, 2, 2, 23, 118, 3, 2, 2, 2, 25, 120, 3, 2, 2, 2, 27, 122, 3, 2, 2, 2, 29, 124, 3, 2, 2, 2, 31, 126, 3, 2, 2, 2, 33, 128, 3, 2, 2, 2, 35, 130, 3, 2, 2, 2, 37, 132, 3, 2, 2, 2, 39, 134, 3, 2, 2, 2, 41, 136, 3, 2, 2, 2, 43, 139, 3, 2, 2, 2, 45, 142, 3, 2, 2, 2, 47, 144, 3, 2, 2, 2, 49, 147, 3, 2, 2, 2, 51, 149, 3, 2, 2, 2, 53, 152, 3, 2, 2, 2, 55, 156, 3, 2, 2, 2, 57, 160, 3, 2, 2, 2, 59, 163, 3, 2, 2, 2, 61, 168, 3, 2, 2, 2, 63, 175, 3, 2, 2, 2, 65, 179, 3, 2, 2, 2, 67, 186, 3, 2, 2, 2, 69, 188, 3, 2, 2, 2, 71, 193, 3, 2, 2, 2, 73, 196, 3, 2, 2, 2, 75, 76, 7, 61, 2, 2, 76, 4, 3, 2, 2, 2, 77, 78, 7, 117, 2, 2, 78, 79, 7, 109, 2, 2, 79, 80, 7, 107, 2, 2, 80, 81, 7, 114, 2, 2, 81, 6, 3, 2, 2, 2, 82, 83, 7, 114, 2, 2, 83, 84, 7, 116, 2, 2, 84, 85, 7, 107, 2, 2, 85, 86, 7, 112, 2, 2, 86, 87, 7, 118, 2, 2, 87, 8, 3, 2, 2, 2, 88, 89, 7, 63, 2, 2, 89, 10, 3, 2, 2, 2, 90, 91, 7, 107, 2, 2, 91, 92, 7, 104, 2, 2, 92, 12, 3, 2, 2, 2, 93, 94, 7, 103, 2, 2, 94, 95, 7, 110, 2, 2, 95, 96, 7, 107, 2, 2, 96, 97, 7, 104, 2, 2, 97, 14, 3, 2, 2, 2, 98, 99, 7, 103, 2, 2, 99, 100, 7, 110, 2, 2, 100, 101, 7, 117, 2, 2, 101, 102, 7, 103, 2, 2, 102, 16, 3, 2, 2, 2, 103, 104, 7, 121, 2, 2, 104, 105, 7, 106, 2, 2, 105, 106, 7, 107, 2, 2, 106, 107, 7, 110, 2, 2, 107, 108, 7, 103, 2, 2, 108, 18, 3, 2, 2, 2, 109, 110, 7, 119, 2, 2, 110, 111, 7, 112, 2, 2, 111, 112, 7, 118, 2, 2, 112, 113, 7, 107, 2, 2, 113, 114, 7, 110, 2, 2, 114, 20, 3, 2, 2, 2, 115, 116, 7, 102, 2, 2, 116, 117, 7, 113, 2, 2, 117, 22, 3, 2, 2, 2, 118, 119, 7, 125, 2, 2, 119, 24, 3, 2, 2, 2, 120, 121, 7, 127, 2, 2, 121, 26, 3, 2, 2, 2, 122, 123, 7, 42, 2, 2, 123, 28, 3, 2, 2, 2, 124, 125, 7, 43, 2, 2, 125, 30, 3, 2, 2, 2, 126, 127, 7, 45, 2, 2, 127, 32, 3, 2, 2, 2, 128, 129, 7, 47, 2, 2, 129, 34, 3, 2, 2, 2, 130, 131, 7, 44, 2, 2, 131, 36, 3, 2, 2, 2, 132, 133, 7, 49, 2, 2, 133, 38, 3, 2, 2, 2, 134, 135, 7, 39, 2, 2, 135, 40, 3, 2, 2, 2, 136, 137, 7, 63, 2, 2, 137, 138, 7, 63, 2, 2, 138, 42, 3, 2, 2, 2, 139, 140, 7, 35, 2, 2, 140, 141, 7, 63, 2, 2, 141, 44, 3, 2, 2, 2, 142, 143, 7, 62, 2, 2, 143, 46, 3, 2, 2, 2, 144, 145, 7, 62, 2, 2, 145, 146, 7, 63, 2, 2, 146, 48, 3, 2, 2, 2, 147, 148, 7, 64, 2, 2, 148, 50, 3, 2, 2, 2, 149, 150, 7, 64, 2, 2, 150, 151, 7, 63, 2, 2, 151, 52, 3, 2, 2, 2, 152, 153, 7, 112, 2, 2, 153, 154, 7, 113, 2, 2, 154, 155, 7, 118, 2, 2, 155, 54, 3, 2, 2, 2, 156, 157, 7, 99, 2, 2, 157, 158, 7, 112, 2, 2, 158, 159, 7, 102, 2, 2, 159, 56, 3, 2, 2, 2, 160, 161, 7, 113, 2, 2, 161, 162, 7, 116, 2, 2, 162, 58, 3, 2, 2, 2, 163, 164, 7, 118, 2, 2, 164, 165, 7, 116, 2, 2, 165, 166, 7, 119, 2, 2, 166, 167, 7, 103, 2, 2, 167, 60, 3, 2, 2, 2, 168, 169, 7, 104, 2, 2, 169, 170, 7, 99, 2, 2, 170, 171, 7, 110, 2, 2, 171, 172, 7, 117, 2, 2, 172, 173, 7, 103, 2, 2, 173, 62, 3, 2, 2, 2, 174, 176, 5, 67, 34, 2, 175, 174, 3, 2, 2, 2, 176, 177, 3, 2, 2, 2, 177, 175, 3, 2, 2, 2, 177, 178, 3, 2, 2, 2, 178, 64, 3, 2, 2, 2, 179, 183, 5, 69, 35, 2, 180, 182, 5, 71, 36, 2, 181, 180, 3, 2, 2, 2, 182, 185, 3, 2, 2, 2, 183, 181, 3, 2, 2, 2, 183, 184, 3, 2, 2, 2, 184, 66, 3, 2, 2, 2, 185, 183, 3, 2, 2, 2, 186, 187, 9, 2, 2, 2, 187, 68, 3, 2, 2, 2, 188, 189, 9, 3, 2, 2, 189, 70, 3, 2, 2, 2, 190, 194, 5, 69, 35, 2, 191, 194, 5, 67, 34, 2, 192, 194, 9, 4, 2, 2, 193, 190, 3, 2, 2, 2, 193, 191, 3, 2, 2, 2, 193, 192, 3, 2, 2, 2, 194, 72, 3, 2, 2, 2, 195, 197, 9, 5, 2, 2, 196, 195, 3, 2, 2, 2, 197, 198, 3, 2, 2, 2, 198, 196, 3, 2, 2, 2, 198, 199, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 201, 8, 37, 2, 2, 201, 74, 3, 2, 2, 2, 7, 2, 177, 183, 193, 198, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 35, 202, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 6, 32, 176, 10, 32, 13, 32, 14, 32, 177, 3, 33, 3, 33, 7, 33, 182, 10, 33, 12, 33, 14, 33, 185, 11, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 5, 36, 194, 10, 36, 3, 37, 6, 37, 197, 10, 37, 13, 37, 14, 37, 198, 3, 37, 3, 37, 2, 2, 38, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 2, 69, 2, 71, 2, 73, 35, 3, 2, 6, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 203, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 3, 75, 3, 2, 2, 2, 5, 77, 3, 2, 2, 2, 7, 82, 3, 2, 2, 2, 9, 88, 3, 2, 2, 2, 11, 90, 3, 2, 2, 2, 13, 92, 3, 2, 2, 2, 15, 94, 3, 2, 2, 2, 17, 96, 3, 2, 2, 2, 19, 98, 3, 2, 2, 2, 21, 100, 3, 2, 2, 2, 23, 103, 3, 2, 2, 2, 25, 108, 3, 2, 2, 2, 27, 113, 3, 2, 2, 2, 29, 119, 3, 2, 2, 2, 31, 125, 3, 2, 2, 2, 33, 128, 3, 2, 2, 2, 35, 130, 3, 2, 2, 2, 37, 132, 3, 2, 2, 2, 39, 134, 3, 2, 2, 2, 41, 136, 3, 2, 2, 2, 43, 139, 3, 2, 2, 2, 45, 142, 3, 2, 2, 2, 47, 144, 3, 2, 2, 2, 49, 147, 3, 2, 2, 2, 51, 149, 3, 2, 2, 2, 53, 152, 3, 2, 2, 2, 55, 156, 3, 2, 2, 2, 57, 160, 3, 2, 2, 2, 59, 163, 3, 2, 2, 2, 61, 168, 3, 2, 2, 2, 63, 175, 3, 2, 2, 2, 65, 179, 3, 2, 2, 2, 67, 186, 3, 2, 2, 2, 69, 188, 3, 2, 2, 2, 71, 193, 3, 2, 2, 2, 73, 196, 3, 2, 2, 2, 75, 76, 7, 61, 2, 2, 76, 4, 3, 2, 2, 2, 77, 78, 7, 117, 2, 2, 78, 79, 7, 109, 2, 2, 79, 80, 7, 107, 2, 2, 80, 81, 7, 114, 2, 2, 81, 6, 3, 2, 2, 2, 82, 83, 7, 114, 2, 2, 83, 84, 7, 116, 2, 2, 84, 85, 7, 107, 2, 2, 85, 86, 7, 112, 2, 2, 86, 87, 7, 118, 2, 2, 87, 8, 3, 2, 2, 2, 88, 89, 7, 63, 2, 2, 89, 10, 3, 2, 2, 2, 90, 91, 7, 44, 2, 2, 91, 12, 3, 2, 2, 2, 92, 93, 7, 49, 2, 2, 93, 14, 3, 2, 2, 2, 94, 95, 7, 39, 2, 2, 95, 16, 3, 2, 2, 2, 96, 97, 7, 45, 2, 2, 97, 18, 3, 2, 2, 2, 98, 99, 7, 47, 2, 2, 99, 20, 3, 2, 2, 2, 100, 101, 7, 107, 2, 2, 101, 102, 7, 104, 2, 2, 102, 22, 3, 2, 2, 2, 103, 104, 7, 103, 2, 2, 104, 105, 7, 110, 2, 2, 105, 106, 7, 107, 2, 2, 106, 107, 7, 104, 2, 2, 107, 24, 3, 2, 2, 2, 108, 109, 7, 103, 2, 2, 109, 110, 7, 110, 2, 2, 110, 111, 7, 117, 2, 2, 111, 112, 7, 103, 2, 2, 112, 26, 3, 2, 2, 2, 113, 114, 7, 121, 2, 2, 114, 115, 7, 106, 2, 2, 115, 116, 7, 107, 2, 2, 116, 117, 7, 110, 2, 2, 117, 118, 7, 103, 2, 2, 118, 28, 3, 2, 2, 2, 119, 120, 7, 119, 2, 2, 120, 121, 7, 112, 2, 2, 121, 122, 7, 118, 2, 2, 122, 123, 7, 107, 2, 2, 123, 124, 7, 110, 2, 2, 124, 30, 3, 2, 2, 2, 125, 126, 7, 102, 2, 2, 126, 127, 7, 113, 2, 2, 127, 32, 3, 2, 2, 2, 128, 129, 7, 125, 2, 2, 129, 34, 3, 2, 2, 2, 130, 131, 7, 127, 2, 2, 131, 36, 3, 2, 2, 2, 132, 133, 7, 42, 2, 2, 133, 38, 3, 2, 2, 2, 134, 135, 7, 43, 2, 2, 135, 40, 3, 2, 2, 2, 136, 137, 7, 63, 2, 2, 137, 138, 7, 63, 2, 2, 138, 42, 3, 2, 2, 2, 139, 140, 7, 35, 2, 2, 140, 141, 7, 63, 2, 2, 141, 44, 3, 2, 2, 2, 142, 143, 7, 62, 2, 2, 143, 46, 3, 2, 2, 2, 144, 145, 7, 62, 2, 2, 145, 146, 7, 63, 2, 2, 146, 48, 3, 2, 2, 2, 147, 148, 7, 64, 2, 2, 148, 50, 3, 2, 2, 2, 149, 150, 7, 64, 2, 2, 150, 151, 7, 63, 2, 2, 151, 52, 3, 2, 2, 2, 152, 153, 7, 112, 2, 2, 153, 154, 7, 113, 2, 2, 154, 155, 7, 118, 2, 2, 155, 54, 3, 2, 2, 2, 156, 157, 7, 99, 2, 2, 157, 158, 7, 112, 2, 2, 158, 159, 7, 102, 2, 2, 159, 56, 3, 2, 2, 2, 160, 161, 7, 113, 2, 2, 161, 162, 7, 116, 2, 2, 162, 58, 3, 2, 2, 2, 163, 164, 7, 118, 2, 2, 164, 165, 7, 116, 2, 2, 165, 166, 7, 119, 2, 2, 166, 167, 7, 103, 2, 2, 167, 60, 3, 2, 2, 2, 168, 169, 7, 104, 2, 2, 169, 170, 7, 99, 2, 2, 170, 171, 7, 110, 2, 2, 171, 172, 7, 117, 2, 2, 172, 173, 7, 103, 2, 2, 173, 62, 3, 2, 2, 2, 174, 176, 5, 67, 34, 2, 175, 174, 3, 2, 2, 2, 176, 177, 3, 2, 2, 2, 177, 175, 3, 2, 2, 2, 177, 178, 3, 2, 2, 2, 178, 64, 3, 2, 2, 2, 179, 183, 5, 69, 35, 2, 180, 182, 5, 71, 36, 2, 181, 180, 3, 2, 2, 2, 182, 185, 3, 2, 2, 2, 183, 181, 3, 2, 2, 2, 183, 184, 3, 2, 2, 2, 184, 66, 3, 2, 2, 2, 185, 183, 3, 2, 2, 2, 186, 187, 9, 2, 2, 2, 187, 68, 3, 2, 2, 2, 188, 189, 9, 3, 2, 2, 189, 70, 3, 2, 2, 2, 190, 194, 5, 69, 35, 2, 191, 194, 5, 67, 34, 2, 192, 194, 9, 4, 2, 2, 193, 190, 3, 2, 2, 2, 193, 191, 3, 2, 2, 2, 193, 192, 3, 2, 2, 2, 194, 72, 3, 2, 2, 2, 195, 197, 9, 5, 2, 2, 196, 195, 3, 2, 2, 2, 197, 198, 3, 2, 2, 2, 198, 196, 3, 2, 2, 2, 198, 199, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 201, 8, 37, 2, 2, 201, 74, 3, 2, 2, 2, 7, 2, 177, 183, 193, 198, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py index 3e72b6d4..a188194a 100644 --- a/src/antlr/PyxellLexer.py +++ b/src/antlr/PyxellLexer.py @@ -16,74 +16,74 @@ def serializedATN(): buf.write("\4\31\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36") buf.write("\t\36\4\37\t\37\4 \t \4!\t!\4\"\t\"\4#\t#\4$\t$\4%\t%") buf.write("\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\4\3") - buf.write("\5\3\5\3\6\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\b") - buf.write("\3\b\3\t\3\t\3\t\3\t\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\n\3") - buf.write("\13\3\13\3\13\3\f\3\f\3\r\3\r\3\16\3\16\3\17\3\17\3\20") - buf.write("\3\20\3\21\3\21\3\22\3\22\3\23\3\23\3\24\3\24\3\25\3\25") - buf.write("\3\25\3\26\3\26\3\26\3\27\3\27\3\30\3\30\3\30\3\31\3\31") - buf.write("\3\32\3\32\3\32\3\33\3\33\3\33\3\33\3\34\3\34\3\34\3\34") - buf.write("\3\35\3\35\3\35\3\36\3\36\3\36\3\36\3\36\3\37\3\37\3\37") - buf.write("\3\37\3\37\3\37\3 \6 \u00b0\n \r \16 \u00b1\3!\3!\7!\u00b6") - buf.write("\n!\f!\16!\u00b9\13!\3\"\3\"\3#\3#\3$\3$\3$\5$\u00c2\n") - buf.write("$\3%\6%\u00c5\n%\r%\16%\u00c6\3%\3%\2\2&\3\3\5\4\7\5\t") - buf.write("\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20") - buf.write("\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65") - buf.write("\34\67\359\36;\37= ?!A\"C\2E\2G\2I#\3\2\6\3\2\62;\5\2") - buf.write("C\\aac|\4\2))aa\5\2\13\f\17\17\"\"\2\u00cb\2\3\3\2\2\2") - buf.write("\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r") - buf.write("\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3") - buf.write("\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2") - buf.write("\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'") - buf.write("\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2") - buf.write("\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29") - buf.write("\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2") - buf.write("I\3\2\2\2\3K\3\2\2\2\5M\3\2\2\2\7R\3\2\2\2\tX\3\2\2\2") - buf.write("\13Z\3\2\2\2\r]\3\2\2\2\17b\3\2\2\2\21g\3\2\2\2\23m\3") - buf.write("\2\2\2\25s\3\2\2\2\27v\3\2\2\2\31x\3\2\2\2\33z\3\2\2\2") - buf.write("\35|\3\2\2\2\37~\3\2\2\2!\u0080\3\2\2\2#\u0082\3\2\2\2") - buf.write("%\u0084\3\2\2\2\'\u0086\3\2\2\2)\u0088\3\2\2\2+\u008b") - buf.write("\3\2\2\2-\u008e\3\2\2\2/\u0090\3\2\2\2\61\u0093\3\2\2") - buf.write("\2\63\u0095\3\2\2\2\65\u0098\3\2\2\2\67\u009c\3\2\2\2") - buf.write("9\u00a0\3\2\2\2;\u00a3\3\2\2\2=\u00a8\3\2\2\2?\u00af\3") - buf.write("\2\2\2A\u00b3\3\2\2\2C\u00ba\3\2\2\2E\u00bc\3\2\2\2G\u00c1") - buf.write("\3\2\2\2I\u00c4\3\2\2\2KL\7=\2\2L\4\3\2\2\2MN\7u\2\2N") - buf.write("O\7m\2\2OP\7k\2\2PQ\7r\2\2Q\6\3\2\2\2RS\7r\2\2ST\7t\2") - buf.write("\2TU\7k\2\2UV\7p\2\2VW\7v\2\2W\b\3\2\2\2XY\7?\2\2Y\n\3") - buf.write("\2\2\2Z[\7k\2\2[\\\7h\2\2\\\f\3\2\2\2]^\7g\2\2^_\7n\2") - buf.write("\2_`\7k\2\2`a\7h\2\2a\16\3\2\2\2bc\7g\2\2cd\7n\2\2de\7") - buf.write("u\2\2ef\7g\2\2f\20\3\2\2\2gh\7y\2\2hi\7j\2\2ij\7k\2\2") - buf.write("jk\7n\2\2kl\7g\2\2l\22\3\2\2\2mn\7w\2\2no\7p\2\2op\7v") - buf.write("\2\2pq\7k\2\2qr\7n\2\2r\24\3\2\2\2st\7f\2\2tu\7q\2\2u") - buf.write("\26\3\2\2\2vw\7}\2\2w\30\3\2\2\2xy\7\177\2\2y\32\3\2\2") - buf.write("\2z{\7*\2\2{\34\3\2\2\2|}\7+\2\2}\36\3\2\2\2~\177\7-\2") - buf.write("\2\177 \3\2\2\2\u0080\u0081\7/\2\2\u0081\"\3\2\2\2\u0082") - buf.write("\u0083\7,\2\2\u0083$\3\2\2\2\u0084\u0085\7\61\2\2\u0085") - buf.write("&\3\2\2\2\u0086\u0087\7\'\2\2\u0087(\3\2\2\2\u0088\u0089") - buf.write("\7?\2\2\u0089\u008a\7?\2\2\u008a*\3\2\2\2\u008b\u008c") - buf.write("\7#\2\2\u008c\u008d\7?\2\2\u008d,\3\2\2\2\u008e\u008f") - buf.write("\7>\2\2\u008f.\3\2\2\2\u0090\u0091\7>\2\2\u0091\u0092") - buf.write("\7?\2\2\u0092\60\3\2\2\2\u0093\u0094\7@\2\2\u0094\62\3") - buf.write("\2\2\2\u0095\u0096\7@\2\2\u0096\u0097\7?\2\2\u0097\64") - buf.write("\3\2\2\2\u0098\u0099\7p\2\2\u0099\u009a\7q\2\2\u009a\u009b") - buf.write("\7v\2\2\u009b\66\3\2\2\2\u009c\u009d\7c\2\2\u009d\u009e") - buf.write("\7p\2\2\u009e\u009f\7f\2\2\u009f8\3\2\2\2\u00a0\u00a1") - buf.write("\7q\2\2\u00a1\u00a2\7t\2\2\u00a2:\3\2\2\2\u00a3\u00a4") - buf.write("\7v\2\2\u00a4\u00a5\7t\2\2\u00a5\u00a6\7w\2\2\u00a6\u00a7") - buf.write("\7g\2\2\u00a7<\3\2\2\2\u00a8\u00a9\7h\2\2\u00a9\u00aa") - buf.write("\7c\2\2\u00aa\u00ab\7n\2\2\u00ab\u00ac\7u\2\2\u00ac\u00ad") - buf.write("\7g\2\2\u00ad>\3\2\2\2\u00ae\u00b0\5C\"\2\u00af\u00ae") - buf.write("\3\2\2\2\u00b0\u00b1\3\2\2\2\u00b1\u00af\3\2\2\2\u00b1") - buf.write("\u00b2\3\2\2\2\u00b2@\3\2\2\2\u00b3\u00b7\5E#\2\u00b4") - buf.write("\u00b6\5G$\2\u00b5\u00b4\3\2\2\2\u00b6\u00b9\3\2\2\2\u00b7") - buf.write("\u00b5\3\2\2\2\u00b7\u00b8\3\2\2\2\u00b8B\3\2\2\2\u00b9") - buf.write("\u00b7\3\2\2\2\u00ba\u00bb\t\2\2\2\u00bbD\3\2\2\2\u00bc") - buf.write("\u00bd\t\3\2\2\u00bdF\3\2\2\2\u00be\u00c2\5E#\2\u00bf") - buf.write("\u00c2\5C\"\2\u00c0\u00c2\t\4\2\2\u00c1\u00be\3\2\2\2") - buf.write("\u00c1\u00bf\3\2\2\2\u00c1\u00c0\3\2\2\2\u00c2H\3\2\2") - buf.write("\2\u00c3\u00c5\t\5\2\2\u00c4\u00c3\3\2\2\2\u00c5\u00c6") - buf.write("\3\2\2\2\u00c6\u00c4\3\2\2\2\u00c6\u00c7\3\2\2\2\u00c7") - buf.write("\u00c8\3\2\2\2\u00c8\u00c9\b%\2\2\u00c9J\3\2\2\2\7\2\u00b1") - buf.write("\u00b7\u00c1\u00c6\3\b\2\2") + buf.write("\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\n\3\n\3\13\3") + buf.write("\13\3\13\3\f\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\16") + buf.write("\3\16\3\16\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3\17\3\17") + buf.write("\3\20\3\20\3\20\3\21\3\21\3\22\3\22\3\23\3\23\3\24\3\24") + buf.write("\3\25\3\25\3\25\3\26\3\26\3\26\3\27\3\27\3\30\3\30\3\30") + buf.write("\3\31\3\31\3\32\3\32\3\32\3\33\3\33\3\33\3\33\3\34\3\34") + buf.write("\3\34\3\34\3\35\3\35\3\35\3\36\3\36\3\36\3\36\3\36\3\37") + buf.write("\3\37\3\37\3\37\3\37\3\37\3 \6 \u00b0\n \r \16 \u00b1") + buf.write("\3!\3!\7!\u00b6\n!\f!\16!\u00b9\13!\3\"\3\"\3#\3#\3$\3") + buf.write("$\3$\5$\u00c2\n$\3%\6%\u00c5\n%\r%\16%\u00c6\3%\3%\2\2") + buf.write("&\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31") + buf.write("\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31") + buf.write("\61\32\63\33\65\34\67\359\36;\37= ?!A\"C\2E\2G\2I#\3\2") + buf.write("\6\3\2\62;\5\2C\\aac|\4\2))aa\5\2\13\f\17\17\"\"\2\u00cb") + buf.write("\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13") + buf.write("\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3") + buf.write("\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2") + buf.write("\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2") + buf.write("%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2") + buf.write("\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67") + buf.write("\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2") + buf.write("A\3\2\2\2\2I\3\2\2\2\3K\3\2\2\2\5M\3\2\2\2\7R\3\2\2\2") + buf.write("\tX\3\2\2\2\13Z\3\2\2\2\r\\\3\2\2\2\17^\3\2\2\2\21`\3") + buf.write("\2\2\2\23b\3\2\2\2\25d\3\2\2\2\27g\3\2\2\2\31l\3\2\2\2") + buf.write("\33q\3\2\2\2\35w\3\2\2\2\37}\3\2\2\2!\u0080\3\2\2\2#\u0082") + buf.write("\3\2\2\2%\u0084\3\2\2\2\'\u0086\3\2\2\2)\u0088\3\2\2\2") + buf.write("+\u008b\3\2\2\2-\u008e\3\2\2\2/\u0090\3\2\2\2\61\u0093") + buf.write("\3\2\2\2\63\u0095\3\2\2\2\65\u0098\3\2\2\2\67\u009c\3") + buf.write("\2\2\29\u00a0\3\2\2\2;\u00a3\3\2\2\2=\u00a8\3\2\2\2?\u00af") + buf.write("\3\2\2\2A\u00b3\3\2\2\2C\u00ba\3\2\2\2E\u00bc\3\2\2\2") + buf.write("G\u00c1\3\2\2\2I\u00c4\3\2\2\2KL\7=\2\2L\4\3\2\2\2MN\7") + buf.write("u\2\2NO\7m\2\2OP\7k\2\2PQ\7r\2\2Q\6\3\2\2\2RS\7r\2\2S") + buf.write("T\7t\2\2TU\7k\2\2UV\7p\2\2VW\7v\2\2W\b\3\2\2\2XY\7?\2") + buf.write("\2Y\n\3\2\2\2Z[\7,\2\2[\f\3\2\2\2\\]\7\61\2\2]\16\3\2") + buf.write("\2\2^_\7\'\2\2_\20\3\2\2\2`a\7-\2\2a\22\3\2\2\2bc\7/\2") + buf.write("\2c\24\3\2\2\2de\7k\2\2ef\7h\2\2f\26\3\2\2\2gh\7g\2\2") + buf.write("hi\7n\2\2ij\7k\2\2jk\7h\2\2k\30\3\2\2\2lm\7g\2\2mn\7n") + buf.write("\2\2no\7u\2\2op\7g\2\2p\32\3\2\2\2qr\7y\2\2rs\7j\2\2s") + buf.write("t\7k\2\2tu\7n\2\2uv\7g\2\2v\34\3\2\2\2wx\7w\2\2xy\7p\2") + buf.write("\2yz\7v\2\2z{\7k\2\2{|\7n\2\2|\36\3\2\2\2}~\7f\2\2~\177") + buf.write("\7q\2\2\177 \3\2\2\2\u0080\u0081\7}\2\2\u0081\"\3\2\2") + buf.write("\2\u0082\u0083\7\177\2\2\u0083$\3\2\2\2\u0084\u0085\7") + buf.write("*\2\2\u0085&\3\2\2\2\u0086\u0087\7+\2\2\u0087(\3\2\2\2") + buf.write("\u0088\u0089\7?\2\2\u0089\u008a\7?\2\2\u008a*\3\2\2\2") + buf.write("\u008b\u008c\7#\2\2\u008c\u008d\7?\2\2\u008d,\3\2\2\2") + buf.write("\u008e\u008f\7>\2\2\u008f.\3\2\2\2\u0090\u0091\7>\2\2") + buf.write("\u0091\u0092\7?\2\2\u0092\60\3\2\2\2\u0093\u0094\7@\2") + buf.write("\2\u0094\62\3\2\2\2\u0095\u0096\7@\2\2\u0096\u0097\7?") + buf.write("\2\2\u0097\64\3\2\2\2\u0098\u0099\7p\2\2\u0099\u009a\7") + buf.write("q\2\2\u009a\u009b\7v\2\2\u009b\66\3\2\2\2\u009c\u009d") + buf.write("\7c\2\2\u009d\u009e\7p\2\2\u009e\u009f\7f\2\2\u009f8\3") + buf.write("\2\2\2\u00a0\u00a1\7q\2\2\u00a1\u00a2\7t\2\2\u00a2:\3") + buf.write("\2\2\2\u00a3\u00a4\7v\2\2\u00a4\u00a5\7t\2\2\u00a5\u00a6") + buf.write("\7w\2\2\u00a6\u00a7\7g\2\2\u00a7<\3\2\2\2\u00a8\u00a9") + buf.write("\7h\2\2\u00a9\u00aa\7c\2\2\u00aa\u00ab\7n\2\2\u00ab\u00ac") + buf.write("\7u\2\2\u00ac\u00ad\7g\2\2\u00ad>\3\2\2\2\u00ae\u00b0") + buf.write("\5C\"\2\u00af\u00ae\3\2\2\2\u00b0\u00b1\3\2\2\2\u00b1") + buf.write("\u00af\3\2\2\2\u00b1\u00b2\3\2\2\2\u00b2@\3\2\2\2\u00b3") + buf.write("\u00b7\5E#\2\u00b4\u00b6\5G$\2\u00b5\u00b4\3\2\2\2\u00b6") + buf.write("\u00b9\3\2\2\2\u00b7\u00b5\3\2\2\2\u00b7\u00b8\3\2\2\2") + buf.write("\u00b8B\3\2\2\2\u00b9\u00b7\3\2\2\2\u00ba\u00bb\t\2\2") + buf.write("\2\u00bbD\3\2\2\2\u00bc\u00bd\t\3\2\2\u00bdF\3\2\2\2\u00be") + buf.write("\u00c2\5E#\2\u00bf\u00c2\5C\"\2\u00c0\u00c2\t\4\2\2\u00c1") + buf.write("\u00be\3\2\2\2\u00c1\u00bf\3\2\2\2\u00c1\u00c0\3\2\2\2") + buf.write("\u00c2H\3\2\2\2\u00c3\u00c5\t\5\2\2\u00c4\u00c3\3\2\2") + buf.write("\2\u00c5\u00c6\3\2\2\2\u00c6\u00c4\3\2\2\2\u00c6\u00c7") + buf.write("\3\2\2\2\u00c7\u00c8\3\2\2\2\u00c8\u00c9\b%\2\2\u00c9") + buf.write("J\3\2\2\2\7\2\u00b1\u00b7\u00c1\u00c6\3\b\2\2") return buf.getvalue() @@ -132,9 +132,9 @@ class PyxellLexer(Lexer): modeNames = [ "DEFAULT_MODE" ] literalNames = [ "", - "';'", "'skip'", "'print'", "'='", "'if'", "'elif'", "'else'", - "'while'", "'until'", "'do'", "'{'", "'}'", "'('", "')'", "'+'", - "'-'", "'*'", "'/'", "'%'", "'=='", "'!='", "'<'", "'<='", "'>'", + "';'", "'skip'", "'print'", "'='", "'*'", "'/'", "'%'", "'+'", + "'-'", "'if'", "'elif'", "'else'", "'while'", "'until'", "'do'", + "'{'", "'}'", "'('", "')'", "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", "'not'", "'and'", "'or'", "'true'", "'false'" ] symbolicNames = [ "", diff --git a/src/antlr/PyxellLexer.tokens b/src/antlr/PyxellLexer.tokens index 81872820..c98b778f 100644 --- a/src/antlr/PyxellLexer.tokens +++ b/src/antlr/PyxellLexer.tokens @@ -35,21 +35,21 @@ WS=33 'skip'=2 'print'=3 '='=4 -'if'=5 -'elif'=6 -'else'=7 -'while'=8 -'until'=9 -'do'=10 -'{'=11 -'}'=12 -'('=13 -')'=14 -'+'=15 -'-'=16 -'*'=17 -'/'=18 -'%'=19 +'*'=5 +'/'=6 +'%'=7 +'+'=8 +'-'=9 +'if'=10 +'elif'=11 +'else'=12 +'while'=13 +'until'=14 +'do'=15 +'{'=16 +'}'=17 +'('=18 +')'=19 '=='=20 '!='=21 '<'=22 diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index 946d3a39..e4b30860 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -9,44 +9,45 @@ def serializedATN(): with StringIO() as buf: buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3#") - buf.write("t\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b") + buf.write("x\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b") buf.write("\t\b\3\2\7\2\22\n\2\f\2\16\2\25\13\2\3\2\3\2\3\3\3\3\3") buf.write("\3\3\3\5\3\35\n\3\3\4\3\4\3\4\3\4\3\4\7\4$\n\4\f\4\16") - buf.write("\4\'\13\4\3\4\5\4*\n\4\3\5\3\5\3\5\3\5\3\5\3\5\3\5\7\5") - buf.write("\63\n\5\f\5\16\5\66\13\5\3\5\3\5\5\5:\n\5\3\5\3\5\3\5") - buf.write("\3\5\3\5\3\5\3\5\3\5\5\5D\n\5\3\6\3\6\3\6\6\6I\n\6\r\6") - buf.write("\16\6J\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7") - buf.write("\5\7Y\n\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7") - buf.write("\3\7\3\7\3\7\3\7\7\7j\n\7\f\7\16\7m\13\7\3\b\3\b\3\b\5") - buf.write("\br\n\b\3\b\2\3\f\t\2\4\6\b\n\f\16\2\6\3\2\21\22\3\2\23") - buf.write("\25\3\2\26\33\3\2\37 \2\u0080\2\23\3\2\2\2\4\34\3\2\2") - buf.write("\2\6)\3\2\2\2\bC\3\2\2\2\nE\3\2\2\2\fX\3\2\2\2\16q\3\2") - buf.write("\2\2\20\22\5\4\3\2\21\20\3\2\2\2\22\25\3\2\2\2\23\21\3") - buf.write("\2\2\2\23\24\3\2\2\2\24\26\3\2\2\2\25\23\3\2\2\2\26\27") - buf.write("\7\2\2\3\27\3\3\2\2\2\30\31\5\6\4\2\31\32\7\3\2\2\32\35") - buf.write("\3\2\2\2\33\35\5\b\5\2\34\30\3\2\2\2\34\33\3\2\2\2\35") - buf.write("\5\3\2\2\2\36*\7\4\2\2\37 \7\5\2\2 *\5\f\7\2!\"\7\"\2") - buf.write("\2\"$\7\6\2\2#!\3\2\2\2$\'\3\2\2\2%#\3\2\2\2%&\3\2\2\2") - buf.write("&(\3\2\2\2\'%\3\2\2\2(*\5\f\7\2)\36\3\2\2\2)\37\3\2\2") - buf.write("\2)%\3\2\2\2*\7\3\2\2\2+,\7\7\2\2,-\5\f\7\2-\64\5\n\6") - buf.write("\2./\7\b\2\2/\60\5\f\7\2\60\61\5\n\6\2\61\63\3\2\2\2\62") - buf.write(".\3\2\2\2\63\66\3\2\2\2\64\62\3\2\2\2\64\65\3\2\2\2\65") - buf.write("9\3\2\2\2\66\64\3\2\2\2\678\7\t\2\28:\5\n\6\29\67\3\2") - buf.write("\2\29:\3\2\2\2:D\3\2\2\2;<\7\n\2\2<=\5\f\7\2=>\5\n\6\2") - buf.write(">D\3\2\2\2?@\7\13\2\2@A\5\f\7\2AB\5\n\6\2BD\3\2\2\2C+") - buf.write("\3\2\2\2C;\3\2\2\2C?\3\2\2\2D\t\3\2\2\2EF\7\f\2\2FH\7") - buf.write("\r\2\2GI\5\4\3\2HG\3\2\2\2IJ\3\2\2\2JH\3\2\2\2JK\3\2\2") - buf.write("\2KL\3\2\2\2LM\7\16\2\2M\13\3\2\2\2NO\b\7\1\2OY\5\16\b") - buf.write("\2PQ\7\17\2\2QR\5\f\7\2RS\7\20\2\2SY\3\2\2\2TU\t\2\2\2") - buf.write("UY\5\f\7\tVW\7\34\2\2WY\5\f\7\5XN\3\2\2\2XP\3\2\2\2XT") - buf.write("\3\2\2\2XV\3\2\2\2Yk\3\2\2\2Z[\f\b\2\2[\\\t\3\2\2\\j\5") - buf.write("\f\7\t]^\f\7\2\2^_\t\2\2\2_j\5\f\7\b`a\f\6\2\2ab\t\4\2") - buf.write("\2bj\5\f\7\6cd\f\4\2\2de\7\35\2\2ej\5\f\7\4fg\f\3\2\2") - buf.write("gh\7\36\2\2hj\5\f\7\3iZ\3\2\2\2i]\3\2\2\2i`\3\2\2\2ic") - buf.write("\3\2\2\2if\3\2\2\2jm\3\2\2\2ki\3\2\2\2kl\3\2\2\2l\r\3") - buf.write("\2\2\2mk\3\2\2\2nr\7!\2\2or\t\5\2\2pr\7\"\2\2qn\3\2\2") - buf.write("\2qo\3\2\2\2qp\3\2\2\2r\17\3\2\2\2\16\23\34%)\649CJXi") - buf.write("kq") + buf.write("\4\'\13\4\3\4\3\4\3\4\3\4\3\4\5\4.\n\4\3\5\3\5\3\5\3\5") + buf.write("\3\5\3\5\3\5\7\5\67\n\5\f\5\16\5:\13\5\3\5\3\5\5\5>\n") + buf.write("\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\5\5H\n\5\3\6\3\6\3") + buf.write("\6\6\6M\n\6\r\6\16\6N\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\7") + buf.write("\3\7\3\7\3\7\3\7\5\7]\n\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7") + buf.write("\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\7\7n\n\7\f\7\16\7q\13") + buf.write("\7\3\b\3\b\3\b\5\bv\n\b\3\b\2\3\f\t\2\4\6\b\n\f\16\2\7") + buf.write("\3\2\7\13\3\2\n\13\3\2\7\t\3\2\26\33\3\2\37 \2\u0085\2") + buf.write("\23\3\2\2\2\4\34\3\2\2\2\6-\3\2\2\2\bG\3\2\2\2\nI\3\2") + buf.write("\2\2\f\\\3\2\2\2\16u\3\2\2\2\20\22\5\4\3\2\21\20\3\2\2") + buf.write("\2\22\25\3\2\2\2\23\21\3\2\2\2\23\24\3\2\2\2\24\26\3\2") + buf.write("\2\2\25\23\3\2\2\2\26\27\7\2\2\3\27\3\3\2\2\2\30\31\5") + buf.write("\6\4\2\31\32\7\3\2\2\32\35\3\2\2\2\33\35\5\b\5\2\34\30") + buf.write("\3\2\2\2\34\33\3\2\2\2\35\5\3\2\2\2\36.\7\4\2\2\37 \7") + buf.write("\5\2\2 .\5\f\7\2!\"\7\"\2\2\"$\7\6\2\2#!\3\2\2\2$\'\3") + buf.write("\2\2\2%#\3\2\2\2%&\3\2\2\2&(\3\2\2\2\'%\3\2\2\2(.\5\f") + buf.write("\7\2)*\7\"\2\2*+\t\2\2\2+,\7\6\2\2,.\5\f\7\2-\36\3\2\2") + buf.write("\2-\37\3\2\2\2-%\3\2\2\2-)\3\2\2\2.\7\3\2\2\2/\60\7\f") + buf.write("\2\2\60\61\5\f\7\2\618\5\n\6\2\62\63\7\r\2\2\63\64\5\f") + buf.write("\7\2\64\65\5\n\6\2\65\67\3\2\2\2\66\62\3\2\2\2\67:\3\2") + buf.write("\2\28\66\3\2\2\289\3\2\2\29=\3\2\2\2:8\3\2\2\2;<\7\16") + buf.write("\2\2<>\5\n\6\2=;\3\2\2\2=>\3\2\2\2>H\3\2\2\2?@\7\17\2") + buf.write("\2@A\5\f\7\2AB\5\n\6\2BH\3\2\2\2CD\7\20\2\2DE\5\f\7\2") + buf.write("EF\5\n\6\2FH\3\2\2\2G/\3\2\2\2G?\3\2\2\2GC\3\2\2\2H\t") + buf.write("\3\2\2\2IJ\7\21\2\2JL\7\22\2\2KM\5\4\3\2LK\3\2\2\2MN\3") + buf.write("\2\2\2NL\3\2\2\2NO\3\2\2\2OP\3\2\2\2PQ\7\23\2\2Q\13\3") + buf.write("\2\2\2RS\b\7\1\2S]\5\16\b\2TU\7\24\2\2UV\5\f\7\2VW\7\25") + buf.write("\2\2W]\3\2\2\2XY\t\3\2\2Y]\5\f\7\tZ[\7\34\2\2[]\5\f\7") + buf.write("\5\\R\3\2\2\2\\T\3\2\2\2\\X\3\2\2\2\\Z\3\2\2\2]o\3\2\2") + buf.write("\2^_\f\b\2\2_`\t\4\2\2`n\5\f\7\tab\f\7\2\2bc\t\3\2\2c") + buf.write("n\5\f\7\bde\f\6\2\2ef\t\5\2\2fn\5\f\7\6gh\f\4\2\2hi\7") + buf.write("\35\2\2in\5\f\7\4jk\f\3\2\2kl\7\36\2\2ln\5\f\7\3m^\3\2") + buf.write("\2\2ma\3\2\2\2md\3\2\2\2mg\3\2\2\2mj\3\2\2\2nq\3\2\2\2") + buf.write("om\3\2\2\2op\3\2\2\2p\r\3\2\2\2qo\3\2\2\2rv\7!\2\2sv\t") + buf.write("\6\2\2tv\7\"\2\2ur\3\2\2\2us\3\2\2\2ut\3\2\2\2v\17\3\2") + buf.write("\2\2\16\23\34%-8=GN\\mou") return buf.getvalue() @@ -60,11 +61,11 @@ class PyxellParser ( Parser ): sharedContextCache = PredictionContextCache() - literalNames = [ "", "';'", "'skip'", "'print'", "'='", "'if'", - "'elif'", "'else'", "'while'", "'until'", "'do'", "'{'", - "'}'", "'('", "')'", "'+'", "'-'", "'*'", "'/'", "'%'", - "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", "'not'", - "'and'", "'or'", "'true'", "'false'" ] + literalNames = [ "", "';'", "'skip'", "'print'", "'='", "'*'", + "'/'", "'%'", "'+'", "'-'", "'if'", "'elif'", "'else'", + "'while'", "'until'", "'do'", "'{'", "'}'", "'('", + "')'", "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", + "'not'", "'and'", "'or'", "'true'", "'false'" ] symbolicNames = [ "", "", "", "", "", "", "", "", @@ -169,7 +170,7 @@ def program(self): self.state = 17 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__4) | (1 << PyxellParser.T__7) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__14) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__25) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0): + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__7) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__17) | (1 << PyxellParser.T__25) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0): self.state = 14 self.stmt() self.state = 19 @@ -221,14 +222,14 @@ def stmt(self): self.state = 26 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__12, PyxellParser.T__14, PyxellParser.T__15, PyxellParser.T__25, PyxellParser.T__28, PyxellParser.T__29, PyxellParser.INT, PyxellParser.ID]: + if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__7, PyxellParser.T__8, PyxellParser.T__17, PyxellParser.T__25, PyxellParser.T__28, PyxellParser.T__29, PyxellParser.INT, PyxellParser.ID]: self.enterOuterAlt(localctx, 1) self.state = 22 self.simple_stmt() self.state = 23 self.match(PyxellParser.T__0) pass - elif token in [PyxellParser.T__4, PyxellParser.T__7, PyxellParser.T__8]: + elif token in [PyxellParser.T__9, PyxellParser.T__12, PyxellParser.T__13]: self.enterOuterAlt(localctx, 2) self.state = 25 self.compound_stmt() @@ -261,6 +262,26 @@ def copyFrom(self, ctx:ParserRuleContext): + class StmtAssgExprContext(Simple_stmtContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Simple_stmtContext + super().__init__(parser) + self.op = None # Token + self.copyFrom(ctx) + + def ID(self): + return self.getToken(PyxellParser.ID, 0) + def expr(self): + return self.getTypedRuleContext(PyxellParser.ExprContext,0) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStmtAssgExpr" ): + return visitor.visitStmtAssgExpr(self) + else: + return visitor.visitChildren(self) + + class StmtAssgContext(Simple_stmtContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Simple_stmtContext @@ -319,17 +340,19 @@ def simple_stmt(self): localctx = PyxellParser.Simple_stmtContext(self, self._ctx, self.state) self.enterRule(localctx, 4, self.RULE_simple_stmt) + self._la = 0 # Token type try: - self.state = 39 + self.state = 43 self._errHandler.sync(self) - token = self._input.LA(1) - if token in [PyxellParser.T__1]: + la_ = self._interp.adaptivePredict(self._input,3,self._ctx) + if la_ == 1: localctx = PyxellParser.StmtSkipContext(self, localctx) self.enterOuterAlt(localctx, 1) self.state = 28 self.match(PyxellParser.T__1) pass - elif token in [PyxellParser.T__2]: + + elif la_ == 2: localctx = PyxellParser.StmtPrintContext(self, localctx) self.enterOuterAlt(localctx, 2) self.state = 29 @@ -337,7 +360,8 @@ def simple_stmt(self): self.state = 30 self.expr(0) pass - elif token in [PyxellParser.T__12, PyxellParser.T__14, PyxellParser.T__15, PyxellParser.T__25, PyxellParser.T__28, PyxellParser.T__29, PyxellParser.INT, PyxellParser.ID]: + + elif la_ == 3: localctx = PyxellParser.StmtAssgContext(self, localctx) self.enterOuterAlt(localctx, 3) self.state = 35 @@ -356,8 +380,26 @@ def simple_stmt(self): self.state = 38 self.expr(0) pass - else: - raise NoViableAltException(self) + + elif la_ == 4: + localctx = PyxellParser.StmtAssgExprContext(self, localctx) + self.enterOuterAlt(localctx, 4) + self.state = 39 + self.match(PyxellParser.ID) + self.state = 40 + localctx.op = self._input.LT(1) + _la = self._input.LA(1) + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__4) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__7) | (1 << PyxellParser.T__8))) != 0)): + localctx.op = self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + self.state = 41 + self.match(PyxellParser.T__3) + self.state = 42 + self.expr(0) + pass + except RecognitionException as re: localctx.exception = re @@ -457,61 +499,61 @@ def compound_stmt(self): self.enterRule(localctx, 6, self.RULE_compound_stmt) self._la = 0 # Token type try: - self.state = 65 + self.state = 69 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__4]: + if token in [PyxellParser.T__9]: localctx = PyxellParser.StmtIfContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 41 - self.match(PyxellParser.T__4) - self.state = 42 + self.state = 45 + self.match(PyxellParser.T__9) + self.state = 46 self.expr(0) - self.state = 43 + self.state = 47 self.block() - self.state = 50 + self.state = 54 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==PyxellParser.T__5: - self.state = 44 - self.match(PyxellParser.T__5) - self.state = 45 + while _la==PyxellParser.T__10: + self.state = 48 + self.match(PyxellParser.T__10) + self.state = 49 self.expr(0) - self.state = 46 + self.state = 50 self.block() - self.state = 52 + self.state = 56 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 55 + self.state = 59 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__6: - self.state = 53 - self.match(PyxellParser.T__6) - self.state = 54 + if _la==PyxellParser.T__11: + self.state = 57 + self.match(PyxellParser.T__11) + self.state = 58 self.block() pass - elif token in [PyxellParser.T__7]: + elif token in [PyxellParser.T__12]: localctx = PyxellParser.StmtWhileContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 57 - self.match(PyxellParser.T__7) - self.state = 58 + self.state = 61 + self.match(PyxellParser.T__12) + self.state = 62 self.expr(0) - self.state = 59 + self.state = 63 self.block() pass - elif token in [PyxellParser.T__8]: + elif token in [PyxellParser.T__13]: localctx = PyxellParser.StmtUntilContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 61 - self.match(PyxellParser.T__8) - self.state = 62 + self.state = 65 + self.match(PyxellParser.T__13) + self.state = 66 self.expr(0) - self.state = 63 + self.state = 67 self.block() pass else: @@ -558,24 +600,24 @@ def block(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 67 - self.match(PyxellParser.T__9) - self.state = 68 - self.match(PyxellParser.T__10) - self.state = 70 + self.state = 71 + self.match(PyxellParser.T__14) + self.state = 72 + self.match(PyxellParser.T__15) + self.state = 74 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 69 + self.state = 73 self.stmt() - self.state = 72 + self.state = 76 self._errHandler.sync(self) _la = self._input.LA(1) - if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__4) | (1 << PyxellParser.T__7) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__14) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__25) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0)): + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__7) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__17) | (1 << PyxellParser.T__25) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0)): break - self.state = 74 - self.match(PyxellParser.T__11) + self.state = 78 + self.match(PyxellParser.T__16) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -726,7 +768,7 @@ def expr(self, _p:int=0): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 86 + self.state = 90 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__28, PyxellParser.T__29, PyxellParser.INT, PyxellParser.ID]: @@ -734,49 +776,49 @@ def expr(self, _p:int=0): self._ctx = localctx _prevctx = localctx - self.state = 77 + self.state = 81 self.atom() pass - elif token in [PyxellParser.T__12]: + elif token in [PyxellParser.T__17]: localctx = PyxellParser.ExprParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 78 - self.match(PyxellParser.T__12) - self.state = 79 + self.state = 82 + self.match(PyxellParser.T__17) + self.state = 83 self.expr(0) - self.state = 80 - self.match(PyxellParser.T__13) + self.state = 84 + self.match(PyxellParser.T__18) pass - elif token in [PyxellParser.T__14, PyxellParser.T__15]: + elif token in [PyxellParser.T__7, PyxellParser.T__8]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 82 + self.state = 86 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not(_la==PyxellParser.T__14 or _la==PyxellParser.T__15): + if not(_la==PyxellParser.T__7 or _la==PyxellParser.T__8): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 83 + self.state = 87 self.expr(7) pass elif token in [PyxellParser.T__25]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 84 + self.state = 88 localctx.op = self.match(PyxellParser.T__25) - self.state = 85 + self.state = 89 self.expr(3) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 105 + self.state = 109 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,10,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: @@ -784,55 +826,55 @@ def expr(self, _p:int=0): if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 103 + self.state = 107 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,9,self._ctx) if la_ == 1: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 88 + self.state = 92 if not self.precpred(self._ctx, 6): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") - self.state = 89 + self.state = 93 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__16) | (1 << PyxellParser.T__17) | (1 << PyxellParser.T__18))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__4) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 90 + self.state = 94 self.expr(7) pass elif la_ == 2: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 91 + self.state = 95 if not self.precpred(self._ctx, 5): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") - self.state = 92 + self.state = 96 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not(_la==PyxellParser.T__14 or _la==PyxellParser.T__15): + if not(_la==PyxellParser.T__7 or _la==PyxellParser.T__8): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 93 + self.state = 97 self.expr(6) pass elif la_ == 3: localctx = PyxellParser.ExprCmpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 94 + self.state = 98 if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") - self.state = 95 + self.state = 99 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__24))) != 0)): @@ -840,38 +882,38 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 96 + self.state = 100 self.expr(4) pass elif la_ == 4: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 97 + self.state = 101 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 98 + self.state = 102 localctx.op = self.match(PyxellParser.T__26) - self.state = 99 + self.state = 103 self.expr(2) pass elif la_ == 5: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 100 + self.state = 104 if not self.precpred(self._ctx, 1): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") - self.state = 101 + self.state = 105 localctx.op = self.match(PyxellParser.T__27) - self.state = 102 + self.state = 106 self.expr(1) pass - self.state = 107 + self.state = 111 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,10,self._ctx) @@ -953,19 +995,19 @@ def atom(self): self.enterRule(localctx, 12, self.RULE_atom) self._la = 0 # Token type try: - self.state = 111 + self.state = 115 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: localctx = PyxellParser.AtomIntContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 108 + self.state = 112 self.match(PyxellParser.INT) pass elif token in [PyxellParser.T__28, PyxellParser.T__29]: localctx = PyxellParser.AtomBoolContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 109 + self.state = 113 _la = self._input.LA(1) if not(_la==PyxellParser.T__28 or _la==PyxellParser.T__29): self._errHandler.recoverInline(self) @@ -976,7 +1018,7 @@ def atom(self): elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 110 + self.state = 114 self.match(PyxellParser.ID) pass else: diff --git a/src/antlr/PyxellVisitor.py b/src/antlr/PyxellVisitor.py index ea3ac4ac..af27d09b 100644 --- a/src/antlr/PyxellVisitor.py +++ b/src/antlr/PyxellVisitor.py @@ -34,6 +34,11 @@ def visitStmtAssg(self, ctx:PyxellParser.StmtAssgContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#StmtAssgExpr. + def visitStmtAssgExpr(self, ctx:PyxellParser.StmtAssgExprContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#StmtIf. def visitStmtIf(self, ctx:PyxellParser.StmtIfContext): return self.visitChildren(ctx) diff --git a/src/compiler.py b/src/compiler.py index 3f709163..3d60605d 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -59,6 +59,16 @@ def assign(self, id, value): self.builder.store(value, var) + def binop(self, op, left, right): + instruction = { + '*': self.builder.mul, + '/': self.builder.sdiv, + '%': self.builder.srem, + '+': self.builder.add, + '-': self.builder.sub, + }[op] + return instruction(left, right) + ### Program ### @@ -83,6 +93,11 @@ def visitStmtAssg(self, ctx): for id in ctx.ID(): self.assign(id, value) + def visitStmtAssgExpr(self, ctx): + var = self.get(ctx.ID()) + value = self.binop(ctx.op.text, self.builder.load(var), self.visit(ctx.expr())) + self.builder.store(value, var) + def visitStmtIf(self, ctx): exprs = ctx.expr() blocks = ctx.block() @@ -163,15 +178,7 @@ def visitExprUnaryOp(self, ctx): return self.builder.not_(value) def visitExprBinaryOp(self, ctx): - instruction = { - '*': self.builder.mul, - '/': self.builder.sdiv, - '%': self.builder.srem, - '+': self.builder.add, - '-': self.builder.sub, - }[ctx.op.text] - - return instruction(self.visit(ctx.expr(0)), self.visit(ctx.expr(1))) + return self.binop(ctx.op.text, self.visit(ctx.expr(0)), self.visit(ctx.expr(1))) def visitExprCmp(self, ctx): ops = [] From 17268d81c5a9c8981f75cefac190d58e14b001e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sat, 5 Oct 2019 21:32:25 +0200 Subject: [PATCH 009/100] Type checking and better error reporting --- src/Pyxell.g4 | 3 +- src/antlr/Pyxell.interp | 4 +- src/antlr/Pyxell.tokens | 1 + src/antlr/PyxellLexer.interp | 5 +- src/antlr/PyxellLexer.py | 149 ++++++++++++++++++----------------- src/antlr/PyxellLexer.tokens | 1 + src/antlr/PyxellParser.py | 5 +- src/compiler.py | 102 ++++++++++++++---------- src/errors.py | 27 ++++++- src/indentation.py | 6 +- src/main.py | 44 +++++++---- src/types.py | 29 +++++++ test.py | 4 +- 13 files changed, 238 insertions(+), 142 deletions(-) create mode 100644 src/types.py diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index 42087287..2f34b918 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -51,4 +51,5 @@ fragment DIGIT : [0-9] ; fragment ID_START : [a-zA-Z_] ; fragment ID_CONT : ID_START | DIGIT | [_'] ; -WS: [ \n\r\t]+ -> skip; +WS : [ \n\r\t]+ -> skip ; +ERR : . ; diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index 6d0fab02..0338a1cc 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -33,6 +33,7 @@ null null null null +null token symbolic names: null @@ -69,6 +70,7 @@ null INT ID WS +ERR rule names: program @@ -81,4 +83,4 @@ atom atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 35, 120, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 3, 2, 7, 2, 18, 10, 2, 12, 2, 14, 2, 21, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 29, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 36, 10, 4, 12, 4, 14, 4, 39, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 46, 10, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 7, 5, 55, 10, 5, 12, 5, 14, 5, 58, 11, 5, 3, 5, 3, 5, 5, 5, 62, 10, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 72, 10, 5, 3, 6, 3, 6, 3, 6, 6, 6, 77, 10, 6, 13, 6, 14, 6, 78, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 93, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 110, 10, 7, 12, 7, 14, 7, 113, 11, 7, 3, 8, 3, 8, 3, 8, 5, 8, 118, 10, 8, 3, 8, 2, 3, 12, 9, 2, 4, 6, 8, 10, 12, 14, 2, 7, 3, 2, 7, 11, 3, 2, 10, 11, 3, 2, 7, 9, 3, 2, 22, 27, 3, 2, 31, 32, 2, 133, 2, 19, 3, 2, 2, 2, 4, 28, 3, 2, 2, 2, 6, 45, 3, 2, 2, 2, 8, 71, 3, 2, 2, 2, 10, 73, 3, 2, 2, 2, 12, 92, 3, 2, 2, 2, 14, 117, 3, 2, 2, 2, 16, 18, 5, 4, 3, 2, 17, 16, 3, 2, 2, 2, 18, 21, 3, 2, 2, 2, 19, 17, 3, 2, 2, 2, 19, 20, 3, 2, 2, 2, 20, 22, 3, 2, 2, 2, 21, 19, 3, 2, 2, 2, 22, 23, 7, 2, 2, 3, 23, 3, 3, 2, 2, 2, 24, 25, 5, 6, 4, 2, 25, 26, 7, 3, 2, 2, 26, 29, 3, 2, 2, 2, 27, 29, 5, 8, 5, 2, 28, 24, 3, 2, 2, 2, 28, 27, 3, 2, 2, 2, 29, 5, 3, 2, 2, 2, 30, 46, 7, 4, 2, 2, 31, 32, 7, 5, 2, 2, 32, 46, 5, 12, 7, 2, 33, 34, 7, 34, 2, 2, 34, 36, 7, 6, 2, 2, 35, 33, 3, 2, 2, 2, 36, 39, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 37, 38, 3, 2, 2, 2, 38, 40, 3, 2, 2, 2, 39, 37, 3, 2, 2, 2, 40, 46, 5, 12, 7, 2, 41, 42, 7, 34, 2, 2, 42, 43, 9, 2, 2, 2, 43, 44, 7, 6, 2, 2, 44, 46, 5, 12, 7, 2, 45, 30, 3, 2, 2, 2, 45, 31, 3, 2, 2, 2, 45, 37, 3, 2, 2, 2, 45, 41, 3, 2, 2, 2, 46, 7, 3, 2, 2, 2, 47, 48, 7, 12, 2, 2, 48, 49, 5, 12, 7, 2, 49, 56, 5, 10, 6, 2, 50, 51, 7, 13, 2, 2, 51, 52, 5, 12, 7, 2, 52, 53, 5, 10, 6, 2, 53, 55, 3, 2, 2, 2, 54, 50, 3, 2, 2, 2, 55, 58, 3, 2, 2, 2, 56, 54, 3, 2, 2, 2, 56, 57, 3, 2, 2, 2, 57, 61, 3, 2, 2, 2, 58, 56, 3, 2, 2, 2, 59, 60, 7, 14, 2, 2, 60, 62, 5, 10, 6, 2, 61, 59, 3, 2, 2, 2, 61, 62, 3, 2, 2, 2, 62, 72, 3, 2, 2, 2, 63, 64, 7, 15, 2, 2, 64, 65, 5, 12, 7, 2, 65, 66, 5, 10, 6, 2, 66, 72, 3, 2, 2, 2, 67, 68, 7, 16, 2, 2, 68, 69, 5, 12, 7, 2, 69, 70, 5, 10, 6, 2, 70, 72, 3, 2, 2, 2, 71, 47, 3, 2, 2, 2, 71, 63, 3, 2, 2, 2, 71, 67, 3, 2, 2, 2, 72, 9, 3, 2, 2, 2, 73, 74, 7, 17, 2, 2, 74, 76, 7, 18, 2, 2, 75, 77, 5, 4, 3, 2, 76, 75, 3, 2, 2, 2, 77, 78, 3, 2, 2, 2, 78, 76, 3, 2, 2, 2, 78, 79, 3, 2, 2, 2, 79, 80, 3, 2, 2, 2, 80, 81, 7, 19, 2, 2, 81, 11, 3, 2, 2, 2, 82, 83, 8, 7, 1, 2, 83, 93, 5, 14, 8, 2, 84, 85, 7, 20, 2, 2, 85, 86, 5, 12, 7, 2, 86, 87, 7, 21, 2, 2, 87, 93, 3, 2, 2, 2, 88, 89, 9, 3, 2, 2, 89, 93, 5, 12, 7, 9, 90, 91, 7, 28, 2, 2, 91, 93, 5, 12, 7, 5, 92, 82, 3, 2, 2, 2, 92, 84, 3, 2, 2, 2, 92, 88, 3, 2, 2, 2, 92, 90, 3, 2, 2, 2, 93, 111, 3, 2, 2, 2, 94, 95, 12, 8, 2, 2, 95, 96, 9, 4, 2, 2, 96, 110, 5, 12, 7, 9, 97, 98, 12, 7, 2, 2, 98, 99, 9, 3, 2, 2, 99, 110, 5, 12, 7, 8, 100, 101, 12, 6, 2, 2, 101, 102, 9, 5, 2, 2, 102, 110, 5, 12, 7, 6, 103, 104, 12, 4, 2, 2, 104, 105, 7, 29, 2, 2, 105, 110, 5, 12, 7, 4, 106, 107, 12, 3, 2, 2, 107, 108, 7, 30, 2, 2, 108, 110, 5, 12, 7, 3, 109, 94, 3, 2, 2, 2, 109, 97, 3, 2, 2, 2, 109, 100, 3, 2, 2, 2, 109, 103, 3, 2, 2, 2, 109, 106, 3, 2, 2, 2, 110, 113, 3, 2, 2, 2, 111, 109, 3, 2, 2, 2, 111, 112, 3, 2, 2, 2, 112, 13, 3, 2, 2, 2, 113, 111, 3, 2, 2, 2, 114, 118, 7, 33, 2, 2, 115, 118, 9, 6, 2, 2, 116, 118, 7, 34, 2, 2, 117, 114, 3, 2, 2, 2, 117, 115, 3, 2, 2, 2, 117, 116, 3, 2, 2, 2, 118, 15, 3, 2, 2, 2, 14, 19, 28, 37, 45, 56, 61, 71, 78, 92, 109, 111, 117] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 36, 120, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 3, 2, 7, 2, 18, 10, 2, 12, 2, 14, 2, 21, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 29, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 36, 10, 4, 12, 4, 14, 4, 39, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 46, 10, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 7, 5, 55, 10, 5, 12, 5, 14, 5, 58, 11, 5, 3, 5, 3, 5, 5, 5, 62, 10, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 72, 10, 5, 3, 6, 3, 6, 3, 6, 6, 6, 77, 10, 6, 13, 6, 14, 6, 78, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 93, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 110, 10, 7, 12, 7, 14, 7, 113, 11, 7, 3, 8, 3, 8, 3, 8, 5, 8, 118, 10, 8, 3, 8, 2, 3, 12, 9, 2, 4, 6, 8, 10, 12, 14, 2, 7, 3, 2, 7, 11, 3, 2, 10, 11, 3, 2, 7, 9, 3, 2, 22, 27, 3, 2, 31, 32, 2, 133, 2, 19, 3, 2, 2, 2, 4, 28, 3, 2, 2, 2, 6, 45, 3, 2, 2, 2, 8, 71, 3, 2, 2, 2, 10, 73, 3, 2, 2, 2, 12, 92, 3, 2, 2, 2, 14, 117, 3, 2, 2, 2, 16, 18, 5, 4, 3, 2, 17, 16, 3, 2, 2, 2, 18, 21, 3, 2, 2, 2, 19, 17, 3, 2, 2, 2, 19, 20, 3, 2, 2, 2, 20, 22, 3, 2, 2, 2, 21, 19, 3, 2, 2, 2, 22, 23, 7, 2, 2, 3, 23, 3, 3, 2, 2, 2, 24, 25, 5, 6, 4, 2, 25, 26, 7, 3, 2, 2, 26, 29, 3, 2, 2, 2, 27, 29, 5, 8, 5, 2, 28, 24, 3, 2, 2, 2, 28, 27, 3, 2, 2, 2, 29, 5, 3, 2, 2, 2, 30, 46, 7, 4, 2, 2, 31, 32, 7, 5, 2, 2, 32, 46, 5, 12, 7, 2, 33, 34, 7, 34, 2, 2, 34, 36, 7, 6, 2, 2, 35, 33, 3, 2, 2, 2, 36, 39, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 37, 38, 3, 2, 2, 2, 38, 40, 3, 2, 2, 2, 39, 37, 3, 2, 2, 2, 40, 46, 5, 12, 7, 2, 41, 42, 7, 34, 2, 2, 42, 43, 9, 2, 2, 2, 43, 44, 7, 6, 2, 2, 44, 46, 5, 12, 7, 2, 45, 30, 3, 2, 2, 2, 45, 31, 3, 2, 2, 2, 45, 37, 3, 2, 2, 2, 45, 41, 3, 2, 2, 2, 46, 7, 3, 2, 2, 2, 47, 48, 7, 12, 2, 2, 48, 49, 5, 12, 7, 2, 49, 56, 5, 10, 6, 2, 50, 51, 7, 13, 2, 2, 51, 52, 5, 12, 7, 2, 52, 53, 5, 10, 6, 2, 53, 55, 3, 2, 2, 2, 54, 50, 3, 2, 2, 2, 55, 58, 3, 2, 2, 2, 56, 54, 3, 2, 2, 2, 56, 57, 3, 2, 2, 2, 57, 61, 3, 2, 2, 2, 58, 56, 3, 2, 2, 2, 59, 60, 7, 14, 2, 2, 60, 62, 5, 10, 6, 2, 61, 59, 3, 2, 2, 2, 61, 62, 3, 2, 2, 2, 62, 72, 3, 2, 2, 2, 63, 64, 7, 15, 2, 2, 64, 65, 5, 12, 7, 2, 65, 66, 5, 10, 6, 2, 66, 72, 3, 2, 2, 2, 67, 68, 7, 16, 2, 2, 68, 69, 5, 12, 7, 2, 69, 70, 5, 10, 6, 2, 70, 72, 3, 2, 2, 2, 71, 47, 3, 2, 2, 2, 71, 63, 3, 2, 2, 2, 71, 67, 3, 2, 2, 2, 72, 9, 3, 2, 2, 2, 73, 74, 7, 17, 2, 2, 74, 76, 7, 18, 2, 2, 75, 77, 5, 4, 3, 2, 76, 75, 3, 2, 2, 2, 77, 78, 3, 2, 2, 2, 78, 76, 3, 2, 2, 2, 78, 79, 3, 2, 2, 2, 79, 80, 3, 2, 2, 2, 80, 81, 7, 19, 2, 2, 81, 11, 3, 2, 2, 2, 82, 83, 8, 7, 1, 2, 83, 93, 5, 14, 8, 2, 84, 85, 7, 20, 2, 2, 85, 86, 5, 12, 7, 2, 86, 87, 7, 21, 2, 2, 87, 93, 3, 2, 2, 2, 88, 89, 9, 3, 2, 2, 89, 93, 5, 12, 7, 9, 90, 91, 7, 28, 2, 2, 91, 93, 5, 12, 7, 5, 92, 82, 3, 2, 2, 2, 92, 84, 3, 2, 2, 2, 92, 88, 3, 2, 2, 2, 92, 90, 3, 2, 2, 2, 93, 111, 3, 2, 2, 2, 94, 95, 12, 8, 2, 2, 95, 96, 9, 4, 2, 2, 96, 110, 5, 12, 7, 9, 97, 98, 12, 7, 2, 2, 98, 99, 9, 3, 2, 2, 99, 110, 5, 12, 7, 8, 100, 101, 12, 6, 2, 2, 101, 102, 9, 5, 2, 2, 102, 110, 5, 12, 7, 6, 103, 104, 12, 4, 2, 2, 104, 105, 7, 29, 2, 2, 105, 110, 5, 12, 7, 4, 106, 107, 12, 3, 2, 2, 107, 108, 7, 30, 2, 2, 108, 110, 5, 12, 7, 3, 109, 94, 3, 2, 2, 2, 109, 97, 3, 2, 2, 2, 109, 100, 3, 2, 2, 2, 109, 103, 3, 2, 2, 2, 109, 106, 3, 2, 2, 2, 110, 113, 3, 2, 2, 2, 111, 109, 3, 2, 2, 2, 111, 112, 3, 2, 2, 2, 112, 13, 3, 2, 2, 2, 113, 111, 3, 2, 2, 2, 114, 118, 7, 33, 2, 2, 115, 118, 9, 6, 2, 2, 116, 118, 7, 34, 2, 2, 117, 114, 3, 2, 2, 2, 117, 115, 3, 2, 2, 2, 117, 116, 3, 2, 2, 2, 118, 15, 3, 2, 2, 2, 14, 19, 28, 37, 45, 56, 61, 71, 78, 92, 109, 111, 117] \ No newline at end of file diff --git a/src/antlr/Pyxell.tokens b/src/antlr/Pyxell.tokens index c98b778f..a69a296d 100644 --- a/src/antlr/Pyxell.tokens +++ b/src/antlr/Pyxell.tokens @@ -31,6 +31,7 @@ T__29=30 INT=31 ID=32 WS=33 +ERR=34 ';'=1 'skip'=2 'print'=3 diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp index 63e67c16..45705358 100644 --- a/src/antlr/PyxellLexer.interp +++ b/src/antlr/PyxellLexer.interp @@ -33,6 +33,7 @@ null null null null +null token symbolic names: null @@ -69,6 +70,7 @@ null INT ID WS +ERR rule names: T__0 @@ -107,6 +109,7 @@ DIGIT ID_START ID_CONT WS +ERR channel names: DEFAULT_TOKEN_CHANNEL @@ -116,4 +119,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 35, 202, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 6, 32, 176, 10, 32, 13, 32, 14, 32, 177, 3, 33, 3, 33, 7, 33, 182, 10, 33, 12, 33, 14, 33, 185, 11, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 5, 36, 194, 10, 36, 3, 37, 6, 37, 197, 10, 37, 13, 37, 14, 37, 198, 3, 37, 3, 37, 2, 2, 38, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 2, 69, 2, 71, 2, 73, 35, 3, 2, 6, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 203, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 3, 75, 3, 2, 2, 2, 5, 77, 3, 2, 2, 2, 7, 82, 3, 2, 2, 2, 9, 88, 3, 2, 2, 2, 11, 90, 3, 2, 2, 2, 13, 92, 3, 2, 2, 2, 15, 94, 3, 2, 2, 2, 17, 96, 3, 2, 2, 2, 19, 98, 3, 2, 2, 2, 21, 100, 3, 2, 2, 2, 23, 103, 3, 2, 2, 2, 25, 108, 3, 2, 2, 2, 27, 113, 3, 2, 2, 2, 29, 119, 3, 2, 2, 2, 31, 125, 3, 2, 2, 2, 33, 128, 3, 2, 2, 2, 35, 130, 3, 2, 2, 2, 37, 132, 3, 2, 2, 2, 39, 134, 3, 2, 2, 2, 41, 136, 3, 2, 2, 2, 43, 139, 3, 2, 2, 2, 45, 142, 3, 2, 2, 2, 47, 144, 3, 2, 2, 2, 49, 147, 3, 2, 2, 2, 51, 149, 3, 2, 2, 2, 53, 152, 3, 2, 2, 2, 55, 156, 3, 2, 2, 2, 57, 160, 3, 2, 2, 2, 59, 163, 3, 2, 2, 2, 61, 168, 3, 2, 2, 2, 63, 175, 3, 2, 2, 2, 65, 179, 3, 2, 2, 2, 67, 186, 3, 2, 2, 2, 69, 188, 3, 2, 2, 2, 71, 193, 3, 2, 2, 2, 73, 196, 3, 2, 2, 2, 75, 76, 7, 61, 2, 2, 76, 4, 3, 2, 2, 2, 77, 78, 7, 117, 2, 2, 78, 79, 7, 109, 2, 2, 79, 80, 7, 107, 2, 2, 80, 81, 7, 114, 2, 2, 81, 6, 3, 2, 2, 2, 82, 83, 7, 114, 2, 2, 83, 84, 7, 116, 2, 2, 84, 85, 7, 107, 2, 2, 85, 86, 7, 112, 2, 2, 86, 87, 7, 118, 2, 2, 87, 8, 3, 2, 2, 2, 88, 89, 7, 63, 2, 2, 89, 10, 3, 2, 2, 2, 90, 91, 7, 44, 2, 2, 91, 12, 3, 2, 2, 2, 92, 93, 7, 49, 2, 2, 93, 14, 3, 2, 2, 2, 94, 95, 7, 39, 2, 2, 95, 16, 3, 2, 2, 2, 96, 97, 7, 45, 2, 2, 97, 18, 3, 2, 2, 2, 98, 99, 7, 47, 2, 2, 99, 20, 3, 2, 2, 2, 100, 101, 7, 107, 2, 2, 101, 102, 7, 104, 2, 2, 102, 22, 3, 2, 2, 2, 103, 104, 7, 103, 2, 2, 104, 105, 7, 110, 2, 2, 105, 106, 7, 107, 2, 2, 106, 107, 7, 104, 2, 2, 107, 24, 3, 2, 2, 2, 108, 109, 7, 103, 2, 2, 109, 110, 7, 110, 2, 2, 110, 111, 7, 117, 2, 2, 111, 112, 7, 103, 2, 2, 112, 26, 3, 2, 2, 2, 113, 114, 7, 121, 2, 2, 114, 115, 7, 106, 2, 2, 115, 116, 7, 107, 2, 2, 116, 117, 7, 110, 2, 2, 117, 118, 7, 103, 2, 2, 118, 28, 3, 2, 2, 2, 119, 120, 7, 119, 2, 2, 120, 121, 7, 112, 2, 2, 121, 122, 7, 118, 2, 2, 122, 123, 7, 107, 2, 2, 123, 124, 7, 110, 2, 2, 124, 30, 3, 2, 2, 2, 125, 126, 7, 102, 2, 2, 126, 127, 7, 113, 2, 2, 127, 32, 3, 2, 2, 2, 128, 129, 7, 125, 2, 2, 129, 34, 3, 2, 2, 2, 130, 131, 7, 127, 2, 2, 131, 36, 3, 2, 2, 2, 132, 133, 7, 42, 2, 2, 133, 38, 3, 2, 2, 2, 134, 135, 7, 43, 2, 2, 135, 40, 3, 2, 2, 2, 136, 137, 7, 63, 2, 2, 137, 138, 7, 63, 2, 2, 138, 42, 3, 2, 2, 2, 139, 140, 7, 35, 2, 2, 140, 141, 7, 63, 2, 2, 141, 44, 3, 2, 2, 2, 142, 143, 7, 62, 2, 2, 143, 46, 3, 2, 2, 2, 144, 145, 7, 62, 2, 2, 145, 146, 7, 63, 2, 2, 146, 48, 3, 2, 2, 2, 147, 148, 7, 64, 2, 2, 148, 50, 3, 2, 2, 2, 149, 150, 7, 64, 2, 2, 150, 151, 7, 63, 2, 2, 151, 52, 3, 2, 2, 2, 152, 153, 7, 112, 2, 2, 153, 154, 7, 113, 2, 2, 154, 155, 7, 118, 2, 2, 155, 54, 3, 2, 2, 2, 156, 157, 7, 99, 2, 2, 157, 158, 7, 112, 2, 2, 158, 159, 7, 102, 2, 2, 159, 56, 3, 2, 2, 2, 160, 161, 7, 113, 2, 2, 161, 162, 7, 116, 2, 2, 162, 58, 3, 2, 2, 2, 163, 164, 7, 118, 2, 2, 164, 165, 7, 116, 2, 2, 165, 166, 7, 119, 2, 2, 166, 167, 7, 103, 2, 2, 167, 60, 3, 2, 2, 2, 168, 169, 7, 104, 2, 2, 169, 170, 7, 99, 2, 2, 170, 171, 7, 110, 2, 2, 171, 172, 7, 117, 2, 2, 172, 173, 7, 103, 2, 2, 173, 62, 3, 2, 2, 2, 174, 176, 5, 67, 34, 2, 175, 174, 3, 2, 2, 2, 176, 177, 3, 2, 2, 2, 177, 175, 3, 2, 2, 2, 177, 178, 3, 2, 2, 2, 178, 64, 3, 2, 2, 2, 179, 183, 5, 69, 35, 2, 180, 182, 5, 71, 36, 2, 181, 180, 3, 2, 2, 2, 182, 185, 3, 2, 2, 2, 183, 181, 3, 2, 2, 2, 183, 184, 3, 2, 2, 2, 184, 66, 3, 2, 2, 2, 185, 183, 3, 2, 2, 2, 186, 187, 9, 2, 2, 2, 187, 68, 3, 2, 2, 2, 188, 189, 9, 3, 2, 2, 189, 70, 3, 2, 2, 2, 190, 194, 5, 69, 35, 2, 191, 194, 5, 67, 34, 2, 192, 194, 9, 4, 2, 2, 193, 190, 3, 2, 2, 2, 193, 191, 3, 2, 2, 2, 193, 192, 3, 2, 2, 2, 194, 72, 3, 2, 2, 2, 195, 197, 9, 5, 2, 2, 196, 195, 3, 2, 2, 2, 197, 198, 3, 2, 2, 2, 198, 196, 3, 2, 2, 2, 198, 199, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 201, 8, 37, 2, 2, 201, 74, 3, 2, 2, 2, 7, 2, 177, 183, 193, 198, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 36, 206, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 6, 32, 178, 10, 32, 13, 32, 14, 32, 179, 3, 33, 3, 33, 7, 33, 184, 10, 33, 12, 33, 14, 33, 187, 11, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 5, 36, 196, 10, 36, 3, 37, 6, 37, 199, 10, 37, 13, 37, 14, 37, 200, 3, 37, 3, 37, 3, 38, 3, 38, 2, 2, 39, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 2, 69, 2, 71, 2, 73, 35, 75, 36, 3, 2, 6, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 207, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 3, 77, 3, 2, 2, 2, 5, 79, 3, 2, 2, 2, 7, 84, 3, 2, 2, 2, 9, 90, 3, 2, 2, 2, 11, 92, 3, 2, 2, 2, 13, 94, 3, 2, 2, 2, 15, 96, 3, 2, 2, 2, 17, 98, 3, 2, 2, 2, 19, 100, 3, 2, 2, 2, 21, 102, 3, 2, 2, 2, 23, 105, 3, 2, 2, 2, 25, 110, 3, 2, 2, 2, 27, 115, 3, 2, 2, 2, 29, 121, 3, 2, 2, 2, 31, 127, 3, 2, 2, 2, 33, 130, 3, 2, 2, 2, 35, 132, 3, 2, 2, 2, 37, 134, 3, 2, 2, 2, 39, 136, 3, 2, 2, 2, 41, 138, 3, 2, 2, 2, 43, 141, 3, 2, 2, 2, 45, 144, 3, 2, 2, 2, 47, 146, 3, 2, 2, 2, 49, 149, 3, 2, 2, 2, 51, 151, 3, 2, 2, 2, 53, 154, 3, 2, 2, 2, 55, 158, 3, 2, 2, 2, 57, 162, 3, 2, 2, 2, 59, 165, 3, 2, 2, 2, 61, 170, 3, 2, 2, 2, 63, 177, 3, 2, 2, 2, 65, 181, 3, 2, 2, 2, 67, 188, 3, 2, 2, 2, 69, 190, 3, 2, 2, 2, 71, 195, 3, 2, 2, 2, 73, 198, 3, 2, 2, 2, 75, 204, 3, 2, 2, 2, 77, 78, 7, 61, 2, 2, 78, 4, 3, 2, 2, 2, 79, 80, 7, 117, 2, 2, 80, 81, 7, 109, 2, 2, 81, 82, 7, 107, 2, 2, 82, 83, 7, 114, 2, 2, 83, 6, 3, 2, 2, 2, 84, 85, 7, 114, 2, 2, 85, 86, 7, 116, 2, 2, 86, 87, 7, 107, 2, 2, 87, 88, 7, 112, 2, 2, 88, 89, 7, 118, 2, 2, 89, 8, 3, 2, 2, 2, 90, 91, 7, 63, 2, 2, 91, 10, 3, 2, 2, 2, 92, 93, 7, 44, 2, 2, 93, 12, 3, 2, 2, 2, 94, 95, 7, 49, 2, 2, 95, 14, 3, 2, 2, 2, 96, 97, 7, 39, 2, 2, 97, 16, 3, 2, 2, 2, 98, 99, 7, 45, 2, 2, 99, 18, 3, 2, 2, 2, 100, 101, 7, 47, 2, 2, 101, 20, 3, 2, 2, 2, 102, 103, 7, 107, 2, 2, 103, 104, 7, 104, 2, 2, 104, 22, 3, 2, 2, 2, 105, 106, 7, 103, 2, 2, 106, 107, 7, 110, 2, 2, 107, 108, 7, 107, 2, 2, 108, 109, 7, 104, 2, 2, 109, 24, 3, 2, 2, 2, 110, 111, 7, 103, 2, 2, 111, 112, 7, 110, 2, 2, 112, 113, 7, 117, 2, 2, 113, 114, 7, 103, 2, 2, 114, 26, 3, 2, 2, 2, 115, 116, 7, 121, 2, 2, 116, 117, 7, 106, 2, 2, 117, 118, 7, 107, 2, 2, 118, 119, 7, 110, 2, 2, 119, 120, 7, 103, 2, 2, 120, 28, 3, 2, 2, 2, 121, 122, 7, 119, 2, 2, 122, 123, 7, 112, 2, 2, 123, 124, 7, 118, 2, 2, 124, 125, 7, 107, 2, 2, 125, 126, 7, 110, 2, 2, 126, 30, 3, 2, 2, 2, 127, 128, 7, 102, 2, 2, 128, 129, 7, 113, 2, 2, 129, 32, 3, 2, 2, 2, 130, 131, 7, 125, 2, 2, 131, 34, 3, 2, 2, 2, 132, 133, 7, 127, 2, 2, 133, 36, 3, 2, 2, 2, 134, 135, 7, 42, 2, 2, 135, 38, 3, 2, 2, 2, 136, 137, 7, 43, 2, 2, 137, 40, 3, 2, 2, 2, 138, 139, 7, 63, 2, 2, 139, 140, 7, 63, 2, 2, 140, 42, 3, 2, 2, 2, 141, 142, 7, 35, 2, 2, 142, 143, 7, 63, 2, 2, 143, 44, 3, 2, 2, 2, 144, 145, 7, 62, 2, 2, 145, 46, 3, 2, 2, 2, 146, 147, 7, 62, 2, 2, 147, 148, 7, 63, 2, 2, 148, 48, 3, 2, 2, 2, 149, 150, 7, 64, 2, 2, 150, 50, 3, 2, 2, 2, 151, 152, 7, 64, 2, 2, 152, 153, 7, 63, 2, 2, 153, 52, 3, 2, 2, 2, 154, 155, 7, 112, 2, 2, 155, 156, 7, 113, 2, 2, 156, 157, 7, 118, 2, 2, 157, 54, 3, 2, 2, 2, 158, 159, 7, 99, 2, 2, 159, 160, 7, 112, 2, 2, 160, 161, 7, 102, 2, 2, 161, 56, 3, 2, 2, 2, 162, 163, 7, 113, 2, 2, 163, 164, 7, 116, 2, 2, 164, 58, 3, 2, 2, 2, 165, 166, 7, 118, 2, 2, 166, 167, 7, 116, 2, 2, 167, 168, 7, 119, 2, 2, 168, 169, 7, 103, 2, 2, 169, 60, 3, 2, 2, 2, 170, 171, 7, 104, 2, 2, 171, 172, 7, 99, 2, 2, 172, 173, 7, 110, 2, 2, 173, 174, 7, 117, 2, 2, 174, 175, 7, 103, 2, 2, 175, 62, 3, 2, 2, 2, 176, 178, 5, 67, 34, 2, 177, 176, 3, 2, 2, 2, 178, 179, 3, 2, 2, 2, 179, 177, 3, 2, 2, 2, 179, 180, 3, 2, 2, 2, 180, 64, 3, 2, 2, 2, 181, 185, 5, 69, 35, 2, 182, 184, 5, 71, 36, 2, 183, 182, 3, 2, 2, 2, 184, 187, 3, 2, 2, 2, 185, 183, 3, 2, 2, 2, 185, 186, 3, 2, 2, 2, 186, 66, 3, 2, 2, 2, 187, 185, 3, 2, 2, 2, 188, 189, 9, 2, 2, 2, 189, 68, 3, 2, 2, 2, 190, 191, 9, 3, 2, 2, 191, 70, 3, 2, 2, 2, 192, 196, 5, 69, 35, 2, 193, 196, 5, 67, 34, 2, 194, 196, 9, 4, 2, 2, 195, 192, 3, 2, 2, 2, 195, 193, 3, 2, 2, 2, 195, 194, 3, 2, 2, 2, 196, 72, 3, 2, 2, 2, 197, 199, 9, 5, 2, 2, 198, 197, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 198, 3, 2, 2, 2, 200, 201, 3, 2, 2, 2, 201, 202, 3, 2, 2, 2, 202, 203, 8, 37, 2, 2, 203, 74, 3, 2, 2, 2, 204, 205, 11, 2, 2, 2, 205, 76, 3, 2, 2, 2, 7, 2, 179, 185, 195, 200, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py index a188194a..c1545ffd 100644 --- a/src/antlr/PyxellLexer.py +++ b/src/antlr/PyxellLexer.py @@ -8,82 +8,84 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2#") - buf.write("\u00ca\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2$") + buf.write("\u00ce\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") buf.write("\4\31\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36") buf.write("\t\36\4\37\t\37\4 \t \4!\t!\4\"\t\"\4#\t#\4$\t$\4%\t%") - buf.write("\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\4\3") - buf.write("\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\n\3\n\3\13\3") - buf.write("\13\3\13\3\f\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\16") - buf.write("\3\16\3\16\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3\17\3\17") - buf.write("\3\20\3\20\3\20\3\21\3\21\3\22\3\22\3\23\3\23\3\24\3\24") - buf.write("\3\25\3\25\3\25\3\26\3\26\3\26\3\27\3\27\3\30\3\30\3\30") - buf.write("\3\31\3\31\3\32\3\32\3\32\3\33\3\33\3\33\3\33\3\34\3\34") - buf.write("\3\34\3\34\3\35\3\35\3\35\3\36\3\36\3\36\3\36\3\36\3\37") - buf.write("\3\37\3\37\3\37\3\37\3\37\3 \6 \u00b0\n \r \16 \u00b1") - buf.write("\3!\3!\7!\u00b6\n!\f!\16!\u00b9\13!\3\"\3\"\3#\3#\3$\3") - buf.write("$\3$\5$\u00c2\n$\3%\6%\u00c5\n%\r%\16%\u00c6\3%\3%\2\2") - buf.write("&\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31") - buf.write("\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31") - buf.write("\61\32\63\33\65\34\67\359\36;\37= ?!A\"C\2E\2G\2I#\3\2") - buf.write("\6\3\2\62;\5\2C\\aac|\4\2))aa\5\2\13\f\17\17\"\"\2\u00cb") - buf.write("\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13") - buf.write("\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3") - buf.write("\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2") - buf.write("\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2") - buf.write("%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2") - buf.write("\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67") - buf.write("\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2") - buf.write("A\3\2\2\2\2I\3\2\2\2\3K\3\2\2\2\5M\3\2\2\2\7R\3\2\2\2") - buf.write("\tX\3\2\2\2\13Z\3\2\2\2\r\\\3\2\2\2\17^\3\2\2\2\21`\3") - buf.write("\2\2\2\23b\3\2\2\2\25d\3\2\2\2\27g\3\2\2\2\31l\3\2\2\2") - buf.write("\33q\3\2\2\2\35w\3\2\2\2\37}\3\2\2\2!\u0080\3\2\2\2#\u0082") - buf.write("\3\2\2\2%\u0084\3\2\2\2\'\u0086\3\2\2\2)\u0088\3\2\2\2") - buf.write("+\u008b\3\2\2\2-\u008e\3\2\2\2/\u0090\3\2\2\2\61\u0093") - buf.write("\3\2\2\2\63\u0095\3\2\2\2\65\u0098\3\2\2\2\67\u009c\3") - buf.write("\2\2\29\u00a0\3\2\2\2;\u00a3\3\2\2\2=\u00a8\3\2\2\2?\u00af") - buf.write("\3\2\2\2A\u00b3\3\2\2\2C\u00ba\3\2\2\2E\u00bc\3\2\2\2") - buf.write("G\u00c1\3\2\2\2I\u00c4\3\2\2\2KL\7=\2\2L\4\3\2\2\2MN\7") - buf.write("u\2\2NO\7m\2\2OP\7k\2\2PQ\7r\2\2Q\6\3\2\2\2RS\7r\2\2S") - buf.write("T\7t\2\2TU\7k\2\2UV\7p\2\2VW\7v\2\2W\b\3\2\2\2XY\7?\2") - buf.write("\2Y\n\3\2\2\2Z[\7,\2\2[\f\3\2\2\2\\]\7\61\2\2]\16\3\2") - buf.write("\2\2^_\7\'\2\2_\20\3\2\2\2`a\7-\2\2a\22\3\2\2\2bc\7/\2") - buf.write("\2c\24\3\2\2\2de\7k\2\2ef\7h\2\2f\26\3\2\2\2gh\7g\2\2") - buf.write("hi\7n\2\2ij\7k\2\2jk\7h\2\2k\30\3\2\2\2lm\7g\2\2mn\7n") - buf.write("\2\2no\7u\2\2op\7g\2\2p\32\3\2\2\2qr\7y\2\2rs\7j\2\2s") - buf.write("t\7k\2\2tu\7n\2\2uv\7g\2\2v\34\3\2\2\2wx\7w\2\2xy\7p\2") - buf.write("\2yz\7v\2\2z{\7k\2\2{|\7n\2\2|\36\3\2\2\2}~\7f\2\2~\177") - buf.write("\7q\2\2\177 \3\2\2\2\u0080\u0081\7}\2\2\u0081\"\3\2\2") - buf.write("\2\u0082\u0083\7\177\2\2\u0083$\3\2\2\2\u0084\u0085\7") - buf.write("*\2\2\u0085&\3\2\2\2\u0086\u0087\7+\2\2\u0087(\3\2\2\2") - buf.write("\u0088\u0089\7?\2\2\u0089\u008a\7?\2\2\u008a*\3\2\2\2") - buf.write("\u008b\u008c\7#\2\2\u008c\u008d\7?\2\2\u008d,\3\2\2\2") - buf.write("\u008e\u008f\7>\2\2\u008f.\3\2\2\2\u0090\u0091\7>\2\2") - buf.write("\u0091\u0092\7?\2\2\u0092\60\3\2\2\2\u0093\u0094\7@\2") - buf.write("\2\u0094\62\3\2\2\2\u0095\u0096\7@\2\2\u0096\u0097\7?") - buf.write("\2\2\u0097\64\3\2\2\2\u0098\u0099\7p\2\2\u0099\u009a\7") - buf.write("q\2\2\u009a\u009b\7v\2\2\u009b\66\3\2\2\2\u009c\u009d") - buf.write("\7c\2\2\u009d\u009e\7p\2\2\u009e\u009f\7f\2\2\u009f8\3") - buf.write("\2\2\2\u00a0\u00a1\7q\2\2\u00a1\u00a2\7t\2\2\u00a2:\3") - buf.write("\2\2\2\u00a3\u00a4\7v\2\2\u00a4\u00a5\7t\2\2\u00a5\u00a6") - buf.write("\7w\2\2\u00a6\u00a7\7g\2\2\u00a7<\3\2\2\2\u00a8\u00a9") - buf.write("\7h\2\2\u00a9\u00aa\7c\2\2\u00aa\u00ab\7n\2\2\u00ab\u00ac") - buf.write("\7u\2\2\u00ac\u00ad\7g\2\2\u00ad>\3\2\2\2\u00ae\u00b0") - buf.write("\5C\"\2\u00af\u00ae\3\2\2\2\u00b0\u00b1\3\2\2\2\u00b1") - buf.write("\u00af\3\2\2\2\u00b1\u00b2\3\2\2\2\u00b2@\3\2\2\2\u00b3") - buf.write("\u00b7\5E#\2\u00b4\u00b6\5G$\2\u00b5\u00b4\3\2\2\2\u00b6") - buf.write("\u00b9\3\2\2\2\u00b7\u00b5\3\2\2\2\u00b7\u00b8\3\2\2\2") - buf.write("\u00b8B\3\2\2\2\u00b9\u00b7\3\2\2\2\u00ba\u00bb\t\2\2") - buf.write("\2\u00bbD\3\2\2\2\u00bc\u00bd\t\3\2\2\u00bdF\3\2\2\2\u00be") - buf.write("\u00c2\5E#\2\u00bf\u00c2\5C\"\2\u00c0\u00c2\t\4\2\2\u00c1") - buf.write("\u00be\3\2\2\2\u00c1\u00bf\3\2\2\2\u00c1\u00c0\3\2\2\2") - buf.write("\u00c2H\3\2\2\2\u00c3\u00c5\t\5\2\2\u00c4\u00c3\3\2\2") - buf.write("\2\u00c5\u00c6\3\2\2\2\u00c6\u00c4\3\2\2\2\u00c6\u00c7") - buf.write("\3\2\2\2\u00c7\u00c8\3\2\2\2\u00c8\u00c9\b%\2\2\u00c9") - buf.write("J\3\2\2\2\7\2\u00b1\u00b7\u00c1\u00c6\3\b\2\2") + buf.write("\4&\t&\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4") + buf.write("\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\n\3\n\3") + buf.write("\13\3\13\3\13\3\f\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r") + buf.write("\3\16\3\16\3\16\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3\17") + buf.write("\3\17\3\20\3\20\3\20\3\21\3\21\3\22\3\22\3\23\3\23\3\24") + buf.write("\3\24\3\25\3\25\3\25\3\26\3\26\3\26\3\27\3\27\3\30\3\30") + buf.write("\3\30\3\31\3\31\3\32\3\32\3\32\3\33\3\33\3\33\3\33\3\34") + buf.write("\3\34\3\34\3\34\3\35\3\35\3\35\3\36\3\36\3\36\3\36\3\36") + buf.write("\3\37\3\37\3\37\3\37\3\37\3\37\3 \6 \u00b2\n \r \16 \u00b3") + buf.write("\3!\3!\7!\u00b8\n!\f!\16!\u00bb\13!\3\"\3\"\3#\3#\3$\3") + buf.write("$\3$\5$\u00c4\n$\3%\6%\u00c7\n%\r%\16%\u00c8\3%\3%\3&") + buf.write("\3&\2\2\'\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25") + buf.write("\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+") + buf.write("\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C\2") + buf.write("E\2G\2I#K$\3\2\6\3\2\62;\5\2C\\aac|\4\2))aa\5\2\13\f\17") + buf.write("\17\"\"\2\u00cf\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2") + buf.write("\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21") + buf.write("\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3") + buf.write("\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2") + buf.write("\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2") + buf.write("\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2") + buf.write("\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2") + buf.write("\2\2\2?\3\2\2\2\2A\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\3M\3") + buf.write("\2\2\2\5O\3\2\2\2\7T\3\2\2\2\tZ\3\2\2\2\13\\\3\2\2\2\r") + buf.write("^\3\2\2\2\17`\3\2\2\2\21b\3\2\2\2\23d\3\2\2\2\25f\3\2") + buf.write("\2\2\27i\3\2\2\2\31n\3\2\2\2\33s\3\2\2\2\35y\3\2\2\2\37") + buf.write("\177\3\2\2\2!\u0082\3\2\2\2#\u0084\3\2\2\2%\u0086\3\2") + buf.write("\2\2\'\u0088\3\2\2\2)\u008a\3\2\2\2+\u008d\3\2\2\2-\u0090") + buf.write("\3\2\2\2/\u0092\3\2\2\2\61\u0095\3\2\2\2\63\u0097\3\2") + buf.write("\2\2\65\u009a\3\2\2\2\67\u009e\3\2\2\29\u00a2\3\2\2\2") + buf.write(";\u00a5\3\2\2\2=\u00aa\3\2\2\2?\u00b1\3\2\2\2A\u00b5\3") + buf.write("\2\2\2C\u00bc\3\2\2\2E\u00be\3\2\2\2G\u00c3\3\2\2\2I\u00c6") + buf.write("\3\2\2\2K\u00cc\3\2\2\2MN\7=\2\2N\4\3\2\2\2OP\7u\2\2P") + buf.write("Q\7m\2\2QR\7k\2\2RS\7r\2\2S\6\3\2\2\2TU\7r\2\2UV\7t\2") + buf.write("\2VW\7k\2\2WX\7p\2\2XY\7v\2\2Y\b\3\2\2\2Z[\7?\2\2[\n\3") + buf.write("\2\2\2\\]\7,\2\2]\f\3\2\2\2^_\7\61\2\2_\16\3\2\2\2`a\7") + buf.write("\'\2\2a\20\3\2\2\2bc\7-\2\2c\22\3\2\2\2de\7/\2\2e\24\3") + buf.write("\2\2\2fg\7k\2\2gh\7h\2\2h\26\3\2\2\2ij\7g\2\2jk\7n\2\2") + buf.write("kl\7k\2\2lm\7h\2\2m\30\3\2\2\2no\7g\2\2op\7n\2\2pq\7u") + buf.write("\2\2qr\7g\2\2r\32\3\2\2\2st\7y\2\2tu\7j\2\2uv\7k\2\2v") + buf.write("w\7n\2\2wx\7g\2\2x\34\3\2\2\2yz\7w\2\2z{\7p\2\2{|\7v\2") + buf.write("\2|}\7k\2\2}~\7n\2\2~\36\3\2\2\2\177\u0080\7f\2\2\u0080") + buf.write("\u0081\7q\2\2\u0081 \3\2\2\2\u0082\u0083\7}\2\2\u0083") + buf.write("\"\3\2\2\2\u0084\u0085\7\177\2\2\u0085$\3\2\2\2\u0086") + buf.write("\u0087\7*\2\2\u0087&\3\2\2\2\u0088\u0089\7+\2\2\u0089") + buf.write("(\3\2\2\2\u008a\u008b\7?\2\2\u008b\u008c\7?\2\2\u008c") + buf.write("*\3\2\2\2\u008d\u008e\7#\2\2\u008e\u008f\7?\2\2\u008f") + buf.write(",\3\2\2\2\u0090\u0091\7>\2\2\u0091.\3\2\2\2\u0092\u0093") + buf.write("\7>\2\2\u0093\u0094\7?\2\2\u0094\60\3\2\2\2\u0095\u0096") + buf.write("\7@\2\2\u0096\62\3\2\2\2\u0097\u0098\7@\2\2\u0098\u0099") + buf.write("\7?\2\2\u0099\64\3\2\2\2\u009a\u009b\7p\2\2\u009b\u009c") + buf.write("\7q\2\2\u009c\u009d\7v\2\2\u009d\66\3\2\2\2\u009e\u009f") + buf.write("\7c\2\2\u009f\u00a0\7p\2\2\u00a0\u00a1\7f\2\2\u00a18\3") + buf.write("\2\2\2\u00a2\u00a3\7q\2\2\u00a3\u00a4\7t\2\2\u00a4:\3") + buf.write("\2\2\2\u00a5\u00a6\7v\2\2\u00a6\u00a7\7t\2\2\u00a7\u00a8") + buf.write("\7w\2\2\u00a8\u00a9\7g\2\2\u00a9<\3\2\2\2\u00aa\u00ab") + buf.write("\7h\2\2\u00ab\u00ac\7c\2\2\u00ac\u00ad\7n\2\2\u00ad\u00ae") + buf.write("\7u\2\2\u00ae\u00af\7g\2\2\u00af>\3\2\2\2\u00b0\u00b2") + buf.write("\5C\"\2\u00b1\u00b0\3\2\2\2\u00b2\u00b3\3\2\2\2\u00b3") + buf.write("\u00b1\3\2\2\2\u00b3\u00b4\3\2\2\2\u00b4@\3\2\2\2\u00b5") + buf.write("\u00b9\5E#\2\u00b6\u00b8\5G$\2\u00b7\u00b6\3\2\2\2\u00b8") + buf.write("\u00bb\3\2\2\2\u00b9\u00b7\3\2\2\2\u00b9\u00ba\3\2\2\2") + buf.write("\u00baB\3\2\2\2\u00bb\u00b9\3\2\2\2\u00bc\u00bd\t\2\2") + buf.write("\2\u00bdD\3\2\2\2\u00be\u00bf\t\3\2\2\u00bfF\3\2\2\2\u00c0") + buf.write("\u00c4\5E#\2\u00c1\u00c4\5C\"\2\u00c2\u00c4\t\4\2\2\u00c3") + buf.write("\u00c0\3\2\2\2\u00c3\u00c1\3\2\2\2\u00c3\u00c2\3\2\2\2") + buf.write("\u00c4H\3\2\2\2\u00c5\u00c7\t\5\2\2\u00c6\u00c5\3\2\2") + buf.write("\2\u00c7\u00c8\3\2\2\2\u00c8\u00c6\3\2\2\2\u00c8\u00c9") + buf.write("\3\2\2\2\u00c9\u00ca\3\2\2\2\u00ca\u00cb\b%\2\2\u00cb") + buf.write("J\3\2\2\2\u00cc\u00cd\13\2\2\2\u00cdL\3\2\2\2\7\2\u00b3") + buf.write("\u00b9\u00c3\u00c8\3\b\2\2") return buf.getvalue() @@ -126,6 +128,7 @@ class PyxellLexer(Lexer): INT = 31 ID = 32 WS = 33 + ERR = 34 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -138,14 +141,14 @@ class PyxellLexer(Lexer): "'>='", "'not'", "'and'", "'or'", "'true'", "'false'" ] symbolicNames = [ "", - "INT", "ID", "WS" ] + "INT", "ID", "WS", "ERR" ] ruleNames = [ "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8", "T__9", "T__10", "T__11", "T__12", "T__13", "T__14", "T__15", "T__16", "T__17", "T__18", "T__19", "T__20", "T__21", "T__22", "T__23", "T__24", "T__25", "T__26", "T__27", "T__28", "T__29", "INT", "ID", "DIGIT", - "ID_START", "ID_CONT", "WS" ] + "ID_START", "ID_CONT", "WS", "ERR" ] grammarFileName = "Pyxell.g4" diff --git a/src/antlr/PyxellLexer.tokens b/src/antlr/PyxellLexer.tokens index c98b778f..a69a296d 100644 --- a/src/antlr/PyxellLexer.tokens +++ b/src/antlr/PyxellLexer.tokens @@ -31,6 +31,7 @@ T__29=30 INT=31 ID=32 WS=33 +ERR=34 ';'=1 'skip'=2 'print'=3 diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index e4b30860..86a94c1f 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -8,7 +8,7 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3#") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3$") buf.write("x\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b") buf.write("\t\b\3\2\7\2\22\n\2\f\2\16\2\25\13\2\3\2\3\2\3\3\3\3\3") buf.write("\3\3\3\5\3\35\n\3\3\4\3\4\3\4\3\4\3\4\7\4$\n\4\f\4\16") @@ -75,7 +75,7 @@ class PyxellParser ( Parser ): "", "", "", "", "", "", "", "", "", "", "", "INT", "ID", - "WS" ] + "WS", "ERR" ] RULE_program = 0 RULE_stmt = 1 @@ -122,6 +122,7 @@ class PyxellParser ( Parser ): INT=31 ID=32 WS=33 + ERR=34 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) diff --git a/src/compiler.py b/src/compiler.py index 3d60605d..69ec2eb4 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -1,31 +1,12 @@ from contextlib import contextmanager -import llvmlite.ir as ll - from .antlr.PyxellParser import PyxellParser from .antlr.PyxellVisitor import PyxellVisitor +from .errors import PyxellError as err +from .types import * -### Types ### - -tVoid = ll.VoidType() -tInt = ll.IntType(64) -tBool = ll.IntType(1) -tChar = ll.IntType(8) - -def tFunc(args, ret=tVoid): - return ll.FunctionType(ret, args) - - -### Constants ### - -vFalse = ll.Constant(tBool, 0) -vTrue = ll.Constant(tBool, 1) - - -### Visitor ### - class PyxellCompiler(PyxellVisitor): def __init__(self): @@ -46,20 +27,37 @@ def local(self): yield self.env = tmp - def get(self, id): - return self.env[str(id)] + def throw(self, ctx, msg): + raise err(msg, ctx.start.line, ctx.start.column+1) + + def get(self, ctx, id): + try: + return self.env[str(id)] + except KeyError: + self.throw(ctx, err.UndeclaredIdentifier(id)) + + def cast(self, ctx, value, type): + if value.type != type: + raise self.throw(ctx, err.IllegalAssignment(value.type, type)) + + return value - def assign(self, id, value): + def assign(self, ctx, id, value): id = str(id) try: var = self.env[id] except KeyError: var = self.env[id] = self.builder.alloca(value.type) + else: + value = self.cast(ctx, value, var.type.pointee) self.builder.store(value, var) - def binop(self, op, left, right): + def binop(self, ctx, op, left, right): + if not left.type == right.type == tInt: + self.throw(ctx, err.NoBinaryOperator(op, left.type, right.type)) + instruction = { '*': self.builder.mul, '/': self.builder.sdiv, @@ -69,6 +67,15 @@ def binop(self, op, left, right): }[op] return instruction(left, right) + def cmp(self, ctx, op, left, right): + if left.type != right.type: + self.throw(ctx, err.NotComparable(left.type, right.type)) + + if left.type == tBool: + return self.builder.icmp_unsigned(op, left, right) + else: + return self.builder.icmp_signed(op, left, right) + ### Program ### @@ -91,11 +98,11 @@ def visitStmtPrint(self, ctx): def visitStmtAssg(self, ctx): value = self.visit(ctx.expr()) for id in ctx.ID(): - self.assign(id, value) + self.assign(ctx, id, value) def visitStmtAssgExpr(self, ctx): - var = self.get(ctx.ID()) - value = self.binop(ctx.op.text, self.builder.load(var), self.visit(ctx.expr())) + var = self.get(ctx, ctx.ID()) + value = self.binop(ctx, ctx.op.text, self.builder.load(var), self.visit(ctx.expr())) self.builder.store(value, var) def visitStmtIf(self, ctx): @@ -111,7 +118,11 @@ def emitIfElse(index): self.visit(blocks[index]) return - cond = self.visit(exprs[index]) + expr = exprs[index] + cond = self.visit(expr) + if cond.type != tBool: + self.throw(expr, err.IllegalAssignment(cond.type, tBool)) + bbif = self.builder.append_basic_block() bbelse = self.builder.append_basic_block() self.builder.cbranch(cond, bbif, bbelse) @@ -132,7 +143,11 @@ def visitStmtWhile(self, ctx): bbstart = self.builder.append_basic_block() self.builder.branch(bbstart) self.builder.position_at_end(bbstart) - cond = self.visit(ctx.expr()) + + expr = ctx.expr() + cond = self.visit(expr) + if cond.type != tBool: + self.throw(expr, err.IllegalAssignment(cond.type, tBool)) bbwhile = self.builder.append_basic_block() bbend = ll.Block(self.builder.function) @@ -154,7 +169,12 @@ def visitStmtUntil(self, ctx): self.builder.position_at_end(bbuntil) with self.local(): self.visit(ctx.block()) - cond = self.visit(ctx.expr()) + + expr = ctx.expr() + cond = self.visit(expr) + if cond.type != tBool: + self.throw(expr, err.IllegalAssignment(cond.type, tBool)) + self.builder.cbranch(cond, bbend, bbuntil) self.builder.function.blocks.append(bbend) @@ -171,14 +191,20 @@ def visitExprUnaryOp(self, ctx): op = ctx.op.text if op == '+': + if value.type != tInt: + self.throw(ctx, err.NoUnaryOperator(op, value.type)) return value elif op == '-': + if value.type != tInt: + self.throw(ctx, err.NoUnaryOperator(op, value.type)) return self.builder.neg(value) elif op == 'not': + if value.type != tBool: + self.throw(ctx, err.NoUnaryOperator(op, value.type)) return self.builder.not_(value) def visitExprBinaryOp(self, ctx): - return self.binop(ctx.op.text, self.visit(ctx.expr(0)), self.visit(ctx.expr(1))) + return self.binop(ctx, ctx.op.text, self.visit(ctx.expr(0)), self.visit(ctx.expr(1))) def visitExprCmp(self, ctx): ops = [] @@ -200,15 +226,9 @@ def visitExprCmp(self, ctx): phi = self.builder.phi(tBool) self.builder.position_at_end(bbstart) - def emitCmp(op, left, right): - if left.type == tBool: - return self.builder.icmp_unsigned(op, left, right) - else: - return self.builder.icmp_signed(op, left, right) - def emitIf(index): values.append(self.visit(exprs[index+1])) - cond = emitCmp(ops[index], values[index], values[index+1]) + cond = self.cmp(ctx, ops[index], values[index], values[index+1]) if len(exprs) == index+2: phi.add_incoming(cond, self.builder.basic_block) @@ -251,6 +271,8 @@ def visitExprLogicalOp(self, ctx): with self.builder._branch_helper(bbif, bbend): cond2 = self.visit(ctx.expr(1)) + if not cond1.type == cond2.type == tBool: + self.throw(ctx, err.NoBinaryOperator(op, cond1.type, cond2.type)) phi.add_incoming(cond2, self.builder.basic_block) self.builder.function.blocks.append(bbend) @@ -268,4 +290,4 @@ def visitAtomBool(self, ctx): return ll.Constant(tBool, int(ctx.getText() == 'true')) def visitAtomId(self, ctx): - return self.builder.load(self.get(ctx.ID())) + return self.builder.load(self.get(ctx, ctx.ID())) diff --git a/src/errors.py b/src/errors.py index 7c930b8f..ce1fe92d 100644 --- a/src/errors.py +++ b/src/errors.py @@ -1,5 +1,26 @@ -class IndentationError(Exception): +from antlr4.error.ErrorListener import ErrorListener - def __init__(self, line): - super().__init__(f"Indentation error at line {line}.") + +class PyxellErrorListener(ErrorListener): + + def syntaxError(self, recognizer, offendingSymbol, line, column, msg, e): + raise PyxellError(PyxellError.InvalidSyntax(), line, column+1) + + +class PyxellError(Exception): + + IllegalAssignment = lambda t1, t2: f"Illegal assignment from `{t1.show()}` to `{t2.show()}`" + InvalidIndentation = lambda: f"Indentation error" + InvalidSyntax = lambda: f"Syntax error" + NoBinaryOperator = lambda op, t1, t2: f"No binary operator `{op}` defined for `{t1.show()}` and `{t2.show()}`" + NoUnaryOperator = lambda op, t: f"No unary operator `{op}` defined for `{t.show()}`" + NotComparable = lambda t1, t2: f"Cannot compare `{t1.show()}` with `{t2.show()}`" + UndeclaredIdentifier = lambda id: f"Undeclared identifier `{id}`" + + def __init__(self, msg, line, column=None): + text = f"Line {line}" + if column: + text += f", column {column}" + text += f": {msg}." + super().__init__(text) diff --git a/src/indentation.py b/src/indentation.py index 4f2a8084..e6fe8057 100644 --- a/src/indentation.py +++ b/src/indentation.py @@ -1,7 +1,7 @@ import re -from .errors import IndentationError +from .errors import PyxellError def transform_indented_code(code): @@ -24,7 +24,7 @@ def transform_indented_code(code): if new_block: if not (indent.startswith(prev_indent) and len(indent) > len(indents[-1])): # New block must be indented more than the previous one. - raise IndentationError(i+1) + raise PyxellError(PyxellError.InvalidIndentation(), i+1) indents.append(indent) new_block = False else: @@ -35,7 +35,7 @@ def transform_indented_code(code): lines[i-1] += '}' indents.pop() else: - raise IndentationError(i+1) + raise PyxellError(PyxellError.InvalidIndentation(), i+1) if re.search(r'\W(do|def)\s*$', line): lines[i] += '{' diff --git a/src/main.py b/src/main.py index 983f4f8b..3e98051f 100644 --- a/src/main.py +++ b/src/main.py @@ -10,6 +10,7 @@ from .antlr.PyxellLexer import PyxellLexer from .antlr.PyxellParser import PyxellParser from .compiler import PyxellCompiler +from .errors import PyxellErrorListener, PyxellError from .indentation import transform_indented_code @@ -23,23 +24,34 @@ filename, ext = os.path.splitext(filepath) abspath = Path(__file__).parents[1] -# Read the code and transform indents. -pyxell_code = filepath.read_text() -pyxell_code = transform_indented_code(pyxell_code) - -# Parse the program. -input_stream = InputStream(pyxell_code) -lexer = PyxellLexer(input_stream) -stream = CommonTokenStream(lexer) -parser = PyxellParser(stream) -tree = parser.program() - -# Generate LLVM code. -compiler = PyxellCompiler() -compiler.visit(tree) -llvm_code = str(compiler.module) +try: + # Read the code and transform indents. + pyxell_code = filepath.read_text() + pyxell_code = transform_indented_code(pyxell_code) + + # Parse the program. + input_stream = InputStream(pyxell_code) + lexer = PyxellLexer(input_stream) + stream = CommonTokenStream(lexer) + parser = PyxellParser(stream) + parser.removeErrorListeners() + parser.addErrorListener(PyxellErrorListener()) + tree = parser.program() + + # Generate LLVM code. + compiler = PyxellCompiler() + compiler.visit(tree) + llvm_code = str(compiler.module) + +except FileNotFoundError: + print("File not found.") + exit(1) + +except PyxellError as error: + print(str(error)) + exit(1) # Create an executable. with open(f'{filename}.ll', 'w') as file: file.write(llvm_code) -subprocess.run(['clang', f'{filename}.ll', f'{abspath / "lib/io.ll"}', f'{abspath / "lib/base.ll"}', '-o', f'{filename}.exe', '-O2'] + args.clangargs) +subprocess.check_output(['clang', f'{filename}.ll', f'{abspath / "lib/io.ll"}', f'{abspath / "lib/base.ll"}', '-o', f'{filename}.exe', '-O2'] + args.clangargs) diff --git a/src/types.py b/src/types.py new file mode 100644 index 00000000..8749b1ae --- /dev/null +++ b/src/types.py @@ -0,0 +1,29 @@ + +import llvmlite.ir as ll + + +tVoid = ll.VoidType() +tInt = ll.IntType(64) +tBool = ll.IntType(1) +tChar = ll.IntType(8) + +def tFunc(args, ret=tVoid): + return ll.FunctionType(ret, args) + + +def showType(type): + if type == tVoid: + return 'Void' + if type == tInt: + return 'Int' + if type == tBool: + return 'Bool' + if type == tChar: + return 'Char' + return str(type) + +ll.Type.show = showType + + +vFalse = ll.Constant(tBool, 0) +vTrue = ll.Constant(tBool, 1) diff --git a/test.py b/test.py index 09ce3045..a7f4ce9b 100644 --- a/test.py +++ b/test.py @@ -47,11 +47,11 @@ error_message = e.output.decode() with open(f'{path.replace(".px", ".err")}', 'r') as errfile: error_expected = errfile.read() - if e.output.decode().endswith(error_expected): + if e.output.decode().strip().endswith(error_expected): print(f"{G}{error_message}{E}") ok += 1 else: - print(f"{R}{error_message}\n---\n> {error_expected}{E}") + print(f"{R}{error_message}---\n> {error_expected}{E}") else: print(f"{R}Compiler returned error code {e.returncode}.\n{e.output.decode()}{E}") continue From c1f5086cf006a200040b67dfe2cbaba8fba470d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sun, 6 Oct 2019 11:50:00 +0200 Subject: [PATCH 010/100] Printing booleans and empty lines --- src/Pyxell.g4 | 2 +- src/antlr/Pyxell.interp | 2 +- src/antlr/PyxellParser.py | 229 ++++++++++++++++++++------------------ src/compiler.py | 13 ++- src/errors.py | 1 + 5 files changed, 132 insertions(+), 115 deletions(-) diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index 2f34b918..e1b1b224 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -11,7 +11,7 @@ stmt simple_stmt : 'skip' # StmtSkip - | 'print' expr # StmtPrint + | 'print' expr? # StmtPrint | (ID '=')* expr # StmtAssg | ID op=('*' | '/' | '%' | '+' | '-') '=' expr # StmtAssgExpr ; diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index 0338a1cc..621fd538 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -83,4 +83,4 @@ atom atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 36, 120, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 3, 2, 7, 2, 18, 10, 2, 12, 2, 14, 2, 21, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 29, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 36, 10, 4, 12, 4, 14, 4, 39, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 46, 10, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 7, 5, 55, 10, 5, 12, 5, 14, 5, 58, 11, 5, 3, 5, 3, 5, 5, 5, 62, 10, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 72, 10, 5, 3, 6, 3, 6, 3, 6, 6, 6, 77, 10, 6, 13, 6, 14, 6, 78, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 93, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 110, 10, 7, 12, 7, 14, 7, 113, 11, 7, 3, 8, 3, 8, 3, 8, 5, 8, 118, 10, 8, 3, 8, 2, 3, 12, 9, 2, 4, 6, 8, 10, 12, 14, 2, 7, 3, 2, 7, 11, 3, 2, 10, 11, 3, 2, 7, 9, 3, 2, 22, 27, 3, 2, 31, 32, 2, 133, 2, 19, 3, 2, 2, 2, 4, 28, 3, 2, 2, 2, 6, 45, 3, 2, 2, 2, 8, 71, 3, 2, 2, 2, 10, 73, 3, 2, 2, 2, 12, 92, 3, 2, 2, 2, 14, 117, 3, 2, 2, 2, 16, 18, 5, 4, 3, 2, 17, 16, 3, 2, 2, 2, 18, 21, 3, 2, 2, 2, 19, 17, 3, 2, 2, 2, 19, 20, 3, 2, 2, 2, 20, 22, 3, 2, 2, 2, 21, 19, 3, 2, 2, 2, 22, 23, 7, 2, 2, 3, 23, 3, 3, 2, 2, 2, 24, 25, 5, 6, 4, 2, 25, 26, 7, 3, 2, 2, 26, 29, 3, 2, 2, 2, 27, 29, 5, 8, 5, 2, 28, 24, 3, 2, 2, 2, 28, 27, 3, 2, 2, 2, 29, 5, 3, 2, 2, 2, 30, 46, 7, 4, 2, 2, 31, 32, 7, 5, 2, 2, 32, 46, 5, 12, 7, 2, 33, 34, 7, 34, 2, 2, 34, 36, 7, 6, 2, 2, 35, 33, 3, 2, 2, 2, 36, 39, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 37, 38, 3, 2, 2, 2, 38, 40, 3, 2, 2, 2, 39, 37, 3, 2, 2, 2, 40, 46, 5, 12, 7, 2, 41, 42, 7, 34, 2, 2, 42, 43, 9, 2, 2, 2, 43, 44, 7, 6, 2, 2, 44, 46, 5, 12, 7, 2, 45, 30, 3, 2, 2, 2, 45, 31, 3, 2, 2, 2, 45, 37, 3, 2, 2, 2, 45, 41, 3, 2, 2, 2, 46, 7, 3, 2, 2, 2, 47, 48, 7, 12, 2, 2, 48, 49, 5, 12, 7, 2, 49, 56, 5, 10, 6, 2, 50, 51, 7, 13, 2, 2, 51, 52, 5, 12, 7, 2, 52, 53, 5, 10, 6, 2, 53, 55, 3, 2, 2, 2, 54, 50, 3, 2, 2, 2, 55, 58, 3, 2, 2, 2, 56, 54, 3, 2, 2, 2, 56, 57, 3, 2, 2, 2, 57, 61, 3, 2, 2, 2, 58, 56, 3, 2, 2, 2, 59, 60, 7, 14, 2, 2, 60, 62, 5, 10, 6, 2, 61, 59, 3, 2, 2, 2, 61, 62, 3, 2, 2, 2, 62, 72, 3, 2, 2, 2, 63, 64, 7, 15, 2, 2, 64, 65, 5, 12, 7, 2, 65, 66, 5, 10, 6, 2, 66, 72, 3, 2, 2, 2, 67, 68, 7, 16, 2, 2, 68, 69, 5, 12, 7, 2, 69, 70, 5, 10, 6, 2, 70, 72, 3, 2, 2, 2, 71, 47, 3, 2, 2, 2, 71, 63, 3, 2, 2, 2, 71, 67, 3, 2, 2, 2, 72, 9, 3, 2, 2, 2, 73, 74, 7, 17, 2, 2, 74, 76, 7, 18, 2, 2, 75, 77, 5, 4, 3, 2, 76, 75, 3, 2, 2, 2, 77, 78, 3, 2, 2, 2, 78, 76, 3, 2, 2, 2, 78, 79, 3, 2, 2, 2, 79, 80, 3, 2, 2, 2, 80, 81, 7, 19, 2, 2, 81, 11, 3, 2, 2, 2, 82, 83, 8, 7, 1, 2, 83, 93, 5, 14, 8, 2, 84, 85, 7, 20, 2, 2, 85, 86, 5, 12, 7, 2, 86, 87, 7, 21, 2, 2, 87, 93, 3, 2, 2, 2, 88, 89, 9, 3, 2, 2, 89, 93, 5, 12, 7, 9, 90, 91, 7, 28, 2, 2, 91, 93, 5, 12, 7, 5, 92, 82, 3, 2, 2, 2, 92, 84, 3, 2, 2, 2, 92, 88, 3, 2, 2, 2, 92, 90, 3, 2, 2, 2, 93, 111, 3, 2, 2, 2, 94, 95, 12, 8, 2, 2, 95, 96, 9, 4, 2, 2, 96, 110, 5, 12, 7, 9, 97, 98, 12, 7, 2, 2, 98, 99, 9, 3, 2, 2, 99, 110, 5, 12, 7, 8, 100, 101, 12, 6, 2, 2, 101, 102, 9, 5, 2, 2, 102, 110, 5, 12, 7, 6, 103, 104, 12, 4, 2, 2, 104, 105, 7, 29, 2, 2, 105, 110, 5, 12, 7, 4, 106, 107, 12, 3, 2, 2, 107, 108, 7, 30, 2, 2, 108, 110, 5, 12, 7, 3, 109, 94, 3, 2, 2, 2, 109, 97, 3, 2, 2, 2, 109, 100, 3, 2, 2, 2, 109, 103, 3, 2, 2, 2, 109, 106, 3, 2, 2, 2, 110, 113, 3, 2, 2, 2, 111, 109, 3, 2, 2, 2, 111, 112, 3, 2, 2, 2, 112, 13, 3, 2, 2, 2, 113, 111, 3, 2, 2, 2, 114, 118, 7, 33, 2, 2, 115, 118, 9, 6, 2, 2, 116, 118, 7, 34, 2, 2, 117, 114, 3, 2, 2, 2, 117, 115, 3, 2, 2, 2, 117, 116, 3, 2, 2, 2, 118, 15, 3, 2, 2, 2, 14, 19, 28, 37, 45, 56, 61, 71, 78, 92, 109, 111, 117] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 36, 122, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 3, 2, 7, 2, 18, 10, 2, 12, 2, 14, 2, 21, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 29, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 34, 10, 4, 3, 4, 3, 4, 7, 4, 38, 10, 4, 12, 4, 14, 4, 41, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 48, 10, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 7, 5, 57, 10, 5, 12, 5, 14, 5, 60, 11, 5, 3, 5, 3, 5, 5, 5, 64, 10, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 74, 10, 5, 3, 6, 3, 6, 3, 6, 6, 6, 79, 10, 6, 13, 6, 14, 6, 80, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 95, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 112, 10, 7, 12, 7, 14, 7, 115, 11, 7, 3, 8, 3, 8, 3, 8, 5, 8, 120, 10, 8, 3, 8, 2, 3, 12, 9, 2, 4, 6, 8, 10, 12, 14, 2, 7, 3, 2, 7, 11, 3, 2, 10, 11, 3, 2, 7, 9, 3, 2, 22, 27, 3, 2, 31, 32, 2, 136, 2, 19, 3, 2, 2, 2, 4, 28, 3, 2, 2, 2, 6, 47, 3, 2, 2, 2, 8, 73, 3, 2, 2, 2, 10, 75, 3, 2, 2, 2, 12, 94, 3, 2, 2, 2, 14, 119, 3, 2, 2, 2, 16, 18, 5, 4, 3, 2, 17, 16, 3, 2, 2, 2, 18, 21, 3, 2, 2, 2, 19, 17, 3, 2, 2, 2, 19, 20, 3, 2, 2, 2, 20, 22, 3, 2, 2, 2, 21, 19, 3, 2, 2, 2, 22, 23, 7, 2, 2, 3, 23, 3, 3, 2, 2, 2, 24, 25, 5, 6, 4, 2, 25, 26, 7, 3, 2, 2, 26, 29, 3, 2, 2, 2, 27, 29, 5, 8, 5, 2, 28, 24, 3, 2, 2, 2, 28, 27, 3, 2, 2, 2, 29, 5, 3, 2, 2, 2, 30, 48, 7, 4, 2, 2, 31, 33, 7, 5, 2, 2, 32, 34, 5, 12, 7, 2, 33, 32, 3, 2, 2, 2, 33, 34, 3, 2, 2, 2, 34, 48, 3, 2, 2, 2, 35, 36, 7, 34, 2, 2, 36, 38, 7, 6, 2, 2, 37, 35, 3, 2, 2, 2, 38, 41, 3, 2, 2, 2, 39, 37, 3, 2, 2, 2, 39, 40, 3, 2, 2, 2, 40, 42, 3, 2, 2, 2, 41, 39, 3, 2, 2, 2, 42, 48, 5, 12, 7, 2, 43, 44, 7, 34, 2, 2, 44, 45, 9, 2, 2, 2, 45, 46, 7, 6, 2, 2, 46, 48, 5, 12, 7, 2, 47, 30, 3, 2, 2, 2, 47, 31, 3, 2, 2, 2, 47, 39, 3, 2, 2, 2, 47, 43, 3, 2, 2, 2, 48, 7, 3, 2, 2, 2, 49, 50, 7, 12, 2, 2, 50, 51, 5, 12, 7, 2, 51, 58, 5, 10, 6, 2, 52, 53, 7, 13, 2, 2, 53, 54, 5, 12, 7, 2, 54, 55, 5, 10, 6, 2, 55, 57, 3, 2, 2, 2, 56, 52, 3, 2, 2, 2, 57, 60, 3, 2, 2, 2, 58, 56, 3, 2, 2, 2, 58, 59, 3, 2, 2, 2, 59, 63, 3, 2, 2, 2, 60, 58, 3, 2, 2, 2, 61, 62, 7, 14, 2, 2, 62, 64, 5, 10, 6, 2, 63, 61, 3, 2, 2, 2, 63, 64, 3, 2, 2, 2, 64, 74, 3, 2, 2, 2, 65, 66, 7, 15, 2, 2, 66, 67, 5, 12, 7, 2, 67, 68, 5, 10, 6, 2, 68, 74, 3, 2, 2, 2, 69, 70, 7, 16, 2, 2, 70, 71, 5, 12, 7, 2, 71, 72, 5, 10, 6, 2, 72, 74, 3, 2, 2, 2, 73, 49, 3, 2, 2, 2, 73, 65, 3, 2, 2, 2, 73, 69, 3, 2, 2, 2, 74, 9, 3, 2, 2, 2, 75, 76, 7, 17, 2, 2, 76, 78, 7, 18, 2, 2, 77, 79, 5, 4, 3, 2, 78, 77, 3, 2, 2, 2, 79, 80, 3, 2, 2, 2, 80, 78, 3, 2, 2, 2, 80, 81, 3, 2, 2, 2, 81, 82, 3, 2, 2, 2, 82, 83, 7, 19, 2, 2, 83, 11, 3, 2, 2, 2, 84, 85, 8, 7, 1, 2, 85, 95, 5, 14, 8, 2, 86, 87, 7, 20, 2, 2, 87, 88, 5, 12, 7, 2, 88, 89, 7, 21, 2, 2, 89, 95, 3, 2, 2, 2, 90, 91, 9, 3, 2, 2, 91, 95, 5, 12, 7, 9, 92, 93, 7, 28, 2, 2, 93, 95, 5, 12, 7, 5, 94, 84, 3, 2, 2, 2, 94, 86, 3, 2, 2, 2, 94, 90, 3, 2, 2, 2, 94, 92, 3, 2, 2, 2, 95, 113, 3, 2, 2, 2, 96, 97, 12, 8, 2, 2, 97, 98, 9, 4, 2, 2, 98, 112, 5, 12, 7, 9, 99, 100, 12, 7, 2, 2, 100, 101, 9, 3, 2, 2, 101, 112, 5, 12, 7, 8, 102, 103, 12, 6, 2, 2, 103, 104, 9, 5, 2, 2, 104, 112, 5, 12, 7, 6, 105, 106, 12, 4, 2, 2, 106, 107, 7, 29, 2, 2, 107, 112, 5, 12, 7, 4, 108, 109, 12, 3, 2, 2, 109, 110, 7, 30, 2, 2, 110, 112, 5, 12, 7, 3, 111, 96, 3, 2, 2, 2, 111, 99, 3, 2, 2, 2, 111, 102, 3, 2, 2, 2, 111, 105, 3, 2, 2, 2, 111, 108, 3, 2, 2, 2, 112, 115, 3, 2, 2, 2, 113, 111, 3, 2, 2, 2, 113, 114, 3, 2, 2, 2, 114, 13, 3, 2, 2, 2, 115, 113, 3, 2, 2, 2, 116, 120, 7, 33, 2, 2, 117, 120, 9, 6, 2, 2, 118, 120, 7, 34, 2, 2, 119, 116, 3, 2, 2, 2, 119, 117, 3, 2, 2, 2, 119, 118, 3, 2, 2, 2, 120, 15, 3, 2, 2, 2, 15, 19, 28, 33, 39, 47, 58, 63, 73, 80, 94, 111, 113, 119] \ No newline at end of file diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index 86a94c1f..f257b47f 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -9,45 +9,46 @@ def serializedATN(): with StringIO() as buf: buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3$") - buf.write("x\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b") + buf.write("z\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b") buf.write("\t\b\3\2\7\2\22\n\2\f\2\16\2\25\13\2\3\2\3\2\3\3\3\3\3") - buf.write("\3\3\3\5\3\35\n\3\3\4\3\4\3\4\3\4\3\4\7\4$\n\4\f\4\16") - buf.write("\4\'\13\4\3\4\3\4\3\4\3\4\3\4\5\4.\n\4\3\5\3\5\3\5\3\5") - buf.write("\3\5\3\5\3\5\7\5\67\n\5\f\5\16\5:\13\5\3\5\3\5\5\5>\n") - buf.write("\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\5\5H\n\5\3\6\3\6\3") - buf.write("\6\6\6M\n\6\r\6\16\6N\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\7") - buf.write("\3\7\3\7\3\7\3\7\5\7]\n\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7") - buf.write("\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\7\7n\n\7\f\7\16\7q\13") - buf.write("\7\3\b\3\b\3\b\5\bv\n\b\3\b\2\3\f\t\2\4\6\b\n\f\16\2\7") - buf.write("\3\2\7\13\3\2\n\13\3\2\7\t\3\2\26\33\3\2\37 \2\u0085\2") - buf.write("\23\3\2\2\2\4\34\3\2\2\2\6-\3\2\2\2\bG\3\2\2\2\nI\3\2") - buf.write("\2\2\f\\\3\2\2\2\16u\3\2\2\2\20\22\5\4\3\2\21\20\3\2\2") - buf.write("\2\22\25\3\2\2\2\23\21\3\2\2\2\23\24\3\2\2\2\24\26\3\2") - buf.write("\2\2\25\23\3\2\2\2\26\27\7\2\2\3\27\3\3\2\2\2\30\31\5") - buf.write("\6\4\2\31\32\7\3\2\2\32\35\3\2\2\2\33\35\5\b\5\2\34\30") - buf.write("\3\2\2\2\34\33\3\2\2\2\35\5\3\2\2\2\36.\7\4\2\2\37 \7") - buf.write("\5\2\2 .\5\f\7\2!\"\7\"\2\2\"$\7\6\2\2#!\3\2\2\2$\'\3") - buf.write("\2\2\2%#\3\2\2\2%&\3\2\2\2&(\3\2\2\2\'%\3\2\2\2(.\5\f") - buf.write("\7\2)*\7\"\2\2*+\t\2\2\2+,\7\6\2\2,.\5\f\7\2-\36\3\2\2") - buf.write("\2-\37\3\2\2\2-%\3\2\2\2-)\3\2\2\2.\7\3\2\2\2/\60\7\f") - buf.write("\2\2\60\61\5\f\7\2\618\5\n\6\2\62\63\7\r\2\2\63\64\5\f") - buf.write("\7\2\64\65\5\n\6\2\65\67\3\2\2\2\66\62\3\2\2\2\67:\3\2") - buf.write("\2\28\66\3\2\2\289\3\2\2\29=\3\2\2\2:8\3\2\2\2;<\7\16") - buf.write("\2\2<>\5\n\6\2=;\3\2\2\2=>\3\2\2\2>H\3\2\2\2?@\7\17\2") - buf.write("\2@A\5\f\7\2AB\5\n\6\2BH\3\2\2\2CD\7\20\2\2DE\5\f\7\2") - buf.write("EF\5\n\6\2FH\3\2\2\2G/\3\2\2\2G?\3\2\2\2GC\3\2\2\2H\t") - buf.write("\3\2\2\2IJ\7\21\2\2JL\7\22\2\2KM\5\4\3\2LK\3\2\2\2MN\3") - buf.write("\2\2\2NL\3\2\2\2NO\3\2\2\2OP\3\2\2\2PQ\7\23\2\2Q\13\3") - buf.write("\2\2\2RS\b\7\1\2S]\5\16\b\2TU\7\24\2\2UV\5\f\7\2VW\7\25") - buf.write("\2\2W]\3\2\2\2XY\t\3\2\2Y]\5\f\7\tZ[\7\34\2\2[]\5\f\7") - buf.write("\5\\R\3\2\2\2\\T\3\2\2\2\\X\3\2\2\2\\Z\3\2\2\2]o\3\2\2") - buf.write("\2^_\f\b\2\2_`\t\4\2\2`n\5\f\7\tab\f\7\2\2bc\t\3\2\2c") - buf.write("n\5\f\7\bde\f\6\2\2ef\t\5\2\2fn\5\f\7\6gh\f\4\2\2hi\7") - buf.write("\35\2\2in\5\f\7\4jk\f\3\2\2kl\7\36\2\2ln\5\f\7\3m^\3\2") - buf.write("\2\2ma\3\2\2\2md\3\2\2\2mg\3\2\2\2mj\3\2\2\2nq\3\2\2\2") - buf.write("om\3\2\2\2op\3\2\2\2p\r\3\2\2\2qo\3\2\2\2rv\7!\2\2sv\t") - buf.write("\6\2\2tv\7\"\2\2ur\3\2\2\2us\3\2\2\2ut\3\2\2\2v\17\3\2") - buf.write("\2\2\16\23\34%-8=GN\\mou") + buf.write("\3\3\3\5\3\35\n\3\3\4\3\4\3\4\5\4\"\n\4\3\4\3\4\7\4&\n") + buf.write("\4\f\4\16\4)\13\4\3\4\3\4\3\4\3\4\3\4\5\4\60\n\4\3\5\3") + buf.write("\5\3\5\3\5\3\5\3\5\3\5\7\59\n\5\f\5\16\5<\13\5\3\5\3\5") + buf.write("\5\5@\n\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\5\5J\n\5\3\6") + buf.write("\3\6\3\6\6\6O\n\6\r\6\16\6P\3\6\3\6\3\7\3\7\3\7\3\7\3") + buf.write("\7\3\7\3\7\3\7\3\7\3\7\5\7_\n\7\3\7\3\7\3\7\3\7\3\7\3") + buf.write("\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\7\7p\n\7\f\7\16") + buf.write("\7s\13\7\3\b\3\b\3\b\5\bx\n\b\3\b\2\3\f\t\2\4\6\b\n\f") + buf.write("\16\2\7\3\2\7\13\3\2\n\13\3\2\7\t\3\2\26\33\3\2\37 \2") + buf.write("\u0088\2\23\3\2\2\2\4\34\3\2\2\2\6/\3\2\2\2\bI\3\2\2\2") + buf.write("\nK\3\2\2\2\f^\3\2\2\2\16w\3\2\2\2\20\22\5\4\3\2\21\20") + buf.write("\3\2\2\2\22\25\3\2\2\2\23\21\3\2\2\2\23\24\3\2\2\2\24") + buf.write("\26\3\2\2\2\25\23\3\2\2\2\26\27\7\2\2\3\27\3\3\2\2\2\30") + buf.write("\31\5\6\4\2\31\32\7\3\2\2\32\35\3\2\2\2\33\35\5\b\5\2") + buf.write("\34\30\3\2\2\2\34\33\3\2\2\2\35\5\3\2\2\2\36\60\7\4\2") + buf.write("\2\37!\7\5\2\2 \"\5\f\7\2! \3\2\2\2!\"\3\2\2\2\"\60\3") + buf.write("\2\2\2#$\7\"\2\2$&\7\6\2\2%#\3\2\2\2&)\3\2\2\2\'%\3\2") + buf.write("\2\2\'(\3\2\2\2(*\3\2\2\2)\'\3\2\2\2*\60\5\f\7\2+,\7\"") + buf.write("\2\2,-\t\2\2\2-.\7\6\2\2.\60\5\f\7\2/\36\3\2\2\2/\37\3") + buf.write("\2\2\2/\'\3\2\2\2/+\3\2\2\2\60\7\3\2\2\2\61\62\7\f\2\2") + buf.write("\62\63\5\f\7\2\63:\5\n\6\2\64\65\7\r\2\2\65\66\5\f\7\2") + buf.write("\66\67\5\n\6\2\679\3\2\2\28\64\3\2\2\29<\3\2\2\2:8\3\2") + buf.write("\2\2:;\3\2\2\2;?\3\2\2\2<:\3\2\2\2=>\7\16\2\2>@\5\n\6") + buf.write("\2?=\3\2\2\2?@\3\2\2\2@J\3\2\2\2AB\7\17\2\2BC\5\f\7\2") + buf.write("CD\5\n\6\2DJ\3\2\2\2EF\7\20\2\2FG\5\f\7\2GH\5\n\6\2HJ") + buf.write("\3\2\2\2I\61\3\2\2\2IA\3\2\2\2IE\3\2\2\2J\t\3\2\2\2KL") + buf.write("\7\21\2\2LN\7\22\2\2MO\5\4\3\2NM\3\2\2\2OP\3\2\2\2PN\3") + buf.write("\2\2\2PQ\3\2\2\2QR\3\2\2\2RS\7\23\2\2S\13\3\2\2\2TU\b") + buf.write("\7\1\2U_\5\16\b\2VW\7\24\2\2WX\5\f\7\2XY\7\25\2\2Y_\3") + buf.write("\2\2\2Z[\t\3\2\2[_\5\f\7\t\\]\7\34\2\2]_\5\f\7\5^T\3\2") + buf.write("\2\2^V\3\2\2\2^Z\3\2\2\2^\\\3\2\2\2_q\3\2\2\2`a\f\b\2") + buf.write("\2ab\t\4\2\2bp\5\f\7\tcd\f\7\2\2de\t\3\2\2ep\5\f\7\bf") + buf.write("g\f\6\2\2gh\t\5\2\2hp\5\f\7\6ij\f\4\2\2jk\7\35\2\2kp\5") + buf.write("\f\7\4lm\f\3\2\2mn\7\36\2\2np\5\f\7\3o`\3\2\2\2oc\3\2") + buf.write("\2\2of\3\2\2\2oi\3\2\2\2ol\3\2\2\2ps\3\2\2\2qo\3\2\2\2") + buf.write("qr\3\2\2\2r\r\3\2\2\2sq\3\2\2\2tx\7!\2\2ux\t\6\2\2vx\7") + buf.write("\"\2\2wt\3\2\2\2wu\3\2\2\2wv\3\2\2\2x\17\3\2\2\2\17\23") + buf.write("\34!\'/:?IP^oqw") return buf.getvalue() @@ -343,9 +344,9 @@ def simple_stmt(self): self.enterRule(localctx, 4, self.RULE_simple_stmt) self._la = 0 # Token type try: - self.state = 43 + self.state = 45 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,3,self._ctx) + la_ = self._interp.adaptivePredict(self._input,4,self._ctx) if la_ == 1: localctx = PyxellParser.StmtSkipContext(self, localctx) self.enterOuterAlt(localctx, 1) @@ -358,36 +359,42 @@ def simple_stmt(self): self.enterOuterAlt(localctx, 2) self.state = 29 self.match(PyxellParser.T__2) - self.state = 30 - self.expr(0) + self.state = 31 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__7) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__17) | (1 << PyxellParser.T__25) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0): + self.state = 30 + self.expr(0) + + pass elif la_ == 3: localctx = PyxellParser.StmtAssgContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 35 + self.state = 37 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,2,self._ctx) + _alt = self._interp.adaptivePredict(self._input,3,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 31 + self.state = 33 self.match(PyxellParser.ID) - self.state = 32 + self.state = 34 self.match(PyxellParser.T__3) - self.state = 37 + self.state = 39 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,2,self._ctx) + _alt = self._interp.adaptivePredict(self._input,3,self._ctx) - self.state = 38 + self.state = 40 self.expr(0) pass elif la_ == 4: localctx = PyxellParser.StmtAssgExprContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 39 + self.state = 41 self.match(PyxellParser.ID) - self.state = 40 + self.state = 42 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__4) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__7) | (1 << PyxellParser.T__8))) != 0)): @@ -395,9 +402,9 @@ def simple_stmt(self): else: self._errHandler.reportMatch(self) self.consume() - self.state = 41 + self.state = 43 self.match(PyxellParser.T__3) - self.state = 42 + self.state = 44 self.expr(0) pass @@ -500,39 +507,39 @@ def compound_stmt(self): self.enterRule(localctx, 6, self.RULE_compound_stmt) self._la = 0 # Token type try: - self.state = 69 + self.state = 71 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__9]: localctx = PyxellParser.StmtIfContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 45 + self.state = 47 self.match(PyxellParser.T__9) - self.state = 46 + self.state = 48 self.expr(0) - self.state = 47 + self.state = 49 self.block() - self.state = 54 + self.state = 56 self._errHandler.sync(self) _la = self._input.LA(1) while _la==PyxellParser.T__10: - self.state = 48 + self.state = 50 self.match(PyxellParser.T__10) - self.state = 49 + self.state = 51 self.expr(0) - self.state = 50 + self.state = 52 self.block() - self.state = 56 + self.state = 58 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 59 + self.state = 61 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__11: - self.state = 57 + self.state = 59 self.match(PyxellParser.T__11) - self.state = 58 + self.state = 60 self.block() @@ -540,21 +547,21 @@ def compound_stmt(self): elif token in [PyxellParser.T__12]: localctx = PyxellParser.StmtWhileContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 61 + self.state = 63 self.match(PyxellParser.T__12) - self.state = 62 + self.state = 64 self.expr(0) - self.state = 63 + self.state = 65 self.block() pass elif token in [PyxellParser.T__13]: localctx = PyxellParser.StmtUntilContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 65 + self.state = 67 self.match(PyxellParser.T__13) - self.state = 66 + self.state = 68 self.expr(0) - self.state = 67 + self.state = 69 self.block() pass else: @@ -601,23 +608,23 @@ def block(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 71 + self.state = 73 self.match(PyxellParser.T__14) - self.state = 72 + self.state = 74 self.match(PyxellParser.T__15) - self.state = 74 + self.state = 76 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 73 + self.state = 75 self.stmt() - self.state = 76 + self.state = 78 self._errHandler.sync(self) _la = self._input.LA(1) if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__7) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__17) | (1 << PyxellParser.T__25) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0)): break - self.state = 78 + self.state = 80 self.match(PyxellParser.T__16) except RecognitionException as re: localctx.exception = re @@ -769,7 +776,7 @@ def expr(self, _p:int=0): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 90 + self.state = 92 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__28, PyxellParser.T__29, PyxellParser.INT, PyxellParser.ID]: @@ -777,25 +784,25 @@ def expr(self, _p:int=0): self._ctx = localctx _prevctx = localctx - self.state = 81 + self.state = 83 self.atom() pass elif token in [PyxellParser.T__17]: localctx = PyxellParser.ExprParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 82 + self.state = 84 self.match(PyxellParser.T__17) - self.state = 83 + self.state = 85 self.expr(0) - self.state = 84 + self.state = 86 self.match(PyxellParser.T__18) pass elif token in [PyxellParser.T__7, PyxellParser.T__8]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 86 + self.state = 88 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__7 or _la==PyxellParser.T__8): @@ -803,41 +810,41 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 87 + self.state = 89 self.expr(7) pass elif token in [PyxellParser.T__25]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 88 + self.state = 90 localctx.op = self.match(PyxellParser.T__25) - self.state = 89 + self.state = 91 self.expr(3) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 109 + self.state = 111 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,10,self._ctx) + _alt = self._interp.adaptivePredict(self._input,11,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 107 + self.state = 109 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,9,self._ctx) + la_ = self._interp.adaptivePredict(self._input,10,self._ctx) if la_ == 1: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 92 + self.state = 94 if not self.precpred(self._ctx, 6): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") - self.state = 93 + self.state = 95 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__4) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6))) != 0)): @@ -845,18 +852,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 94 + self.state = 96 self.expr(7) pass elif la_ == 2: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 95 + self.state = 97 if not self.precpred(self._ctx, 5): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") - self.state = 96 + self.state = 98 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__7 or _la==PyxellParser.T__8): @@ -864,18 +871,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 97 + self.state = 99 self.expr(6) pass elif la_ == 3: localctx = PyxellParser.ExprCmpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 98 + self.state = 100 if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") - self.state = 99 + self.state = 101 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__24))) != 0)): @@ -883,40 +890,40 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 100 + self.state = 102 self.expr(4) pass elif la_ == 4: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 101 + self.state = 103 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 102 + self.state = 104 localctx.op = self.match(PyxellParser.T__26) - self.state = 103 + self.state = 105 self.expr(2) pass elif la_ == 5: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 104 + self.state = 106 if not self.precpred(self._ctx, 1): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") - self.state = 105 + self.state = 107 localctx.op = self.match(PyxellParser.T__27) - self.state = 106 + self.state = 108 self.expr(1) pass - self.state = 111 + self.state = 113 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,10,self._ctx) + _alt = self._interp.adaptivePredict(self._input,11,self._ctx) except RecognitionException as re: localctx.exception = re @@ -996,19 +1003,19 @@ def atom(self): self.enterRule(localctx, 12, self.RULE_atom) self._la = 0 # Token type try: - self.state = 115 + self.state = 117 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: localctx = PyxellParser.AtomIntContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 112 + self.state = 114 self.match(PyxellParser.INT) pass elif token in [PyxellParser.T__28, PyxellParser.T__29]: localctx = PyxellParser.AtomBoolContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 113 + self.state = 115 _la = self._input.LA(1) if not(_la==PyxellParser.T__28 or _la==PyxellParser.T__29): self._errHandler.recoverInline(self) @@ -1019,7 +1026,7 @@ def atom(self): elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 114 + self.state = 116 self.match(PyxellParser.ID) pass else: diff --git a/src/compiler.py b/src/compiler.py index 69ec2eb4..dbcee7b0 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -15,6 +15,7 @@ def __init__(self): self.module = ll.Module() self.builtins = { 'writeInt': ll.Function(self.module, tFunc([tInt]), 'func.writeInt'), + 'writeBool': ll.Function(self.module, tFunc([tBool]), 'func.writeBool'), 'putchar': ll.Function(self.module, tFunc([tChar]), 'putchar'), } @@ -91,8 +92,16 @@ def visitProgram(self, ctx): ### Statements ### def visitStmtPrint(self, ctx): - value = self.visit(ctx.expr()) - self.builder.call(self.builtins['writeInt'], [value]) + expr = ctx.expr() + if expr: + value = self.visit(expr) + if value.type == tInt: + self.builder.call(self.builtins['writeInt'], [value]) + elif value.type == tBool: + self.builder.call(self.builtins['writeBool'], [value]) + else: + self.throw(expr, err.NotPrintable(value.type)) + self.builder.call(self.builtins['putchar'], [ll.Constant(tChar, ord('\n'))]) def visitStmtAssg(self, ctx): diff --git a/src/errors.py b/src/errors.py index ce1fe92d..38143cc1 100644 --- a/src/errors.py +++ b/src/errors.py @@ -16,6 +16,7 @@ class PyxellError(Exception): NoBinaryOperator = lambda op, t1, t2: f"No binary operator `{op}` defined for `{t1.show()}` and `{t2.show()}`" NoUnaryOperator = lambda op, t: f"No unary operator `{op}` defined for `{t.show()}`" NotComparable = lambda t1, t2: f"Cannot compare `{t1.show()}` with `{t2.show()}`" + NotPrintable = lambda t: f"Variable of type `{t.show()}` cannot be printed" UndeclaredIdentifier = lambda id: f"Undeclared identifier `{id}`" def __init__(self, msg, line, column=None): From e3b3ab6e0847db6b77ce4ee08115b38a92f4cb06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sun, 6 Oct 2019 17:21:44 +0200 Subject: [PATCH 011/100] Tuples --- src/Pyxell.g4 | 9 +- src/antlr/Pyxell.interp | 7 +- src/antlr/Pyxell.tokens | 54 ++-- src/antlr/PyxellLexer.interp | 9 +- src/antlr/PyxellLexer.py | 160 ++++++----- src/antlr/PyxellLexer.tokens | 54 ++-- src/antlr/PyxellParser.py | 525 ++++++++++++++++++++++------------- src/antlr/PyxellVisitor.py | 15 + src/compiler.py | 100 ++++++- src/errors.py | 2 + src/types.py | 35 ++- test/bad/tuples/tuple07.err | 1 + test/bad/tuples/tuple07.px | 2 + 13 files changed, 635 insertions(+), 338 deletions(-) create mode 100644 test/bad/tuples/tuple07.err create mode 100644 test/bad/tuples/tuple07.px diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index e1b1b224..fdf51220 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -12,10 +12,14 @@ stmt simple_stmt : 'skip' # StmtSkip | 'print' expr? # StmtPrint - | (ID '=')* expr # StmtAssg + | (lvalue '=')* expr # StmtAssg | ID op=('*' | '/' | '%' | '+' | '-') '=' expr # StmtAssgExpr ; +lvalue + : ID (',' ID)* + ; + compound_stmt : 'if' expr block ('elif' expr block)* ('else' block)? # StmtIf | 'while' expr block # StmtWhile @@ -29,6 +33,7 @@ block expr : atom # ExprAtom | '(' expr ')' # ExprParentheses + | expr '.' ID # ExprAttr | op=('+' | '-') expr # ExprUnaryOp | expr op=('*' | '/' | '%') expr # ExprBinaryOp | expr op=('+' | '-') expr # ExprBinaryOp @@ -36,6 +41,7 @@ expr | op='not' expr # ExprUnaryOp | expr op='and' expr # ExprLogicalOp | expr op='or' expr # ExprLogicalOp + | expr ',' expr # ExprTuple ; atom @@ -48,6 +54,7 @@ INT : DIGIT+ ; ID : ID_START ID_CONT* ; fragment DIGIT : [0-9] ; +fragment LETTER : [a-z] ; fragment ID_START : [a-zA-Z_] ; fragment ID_CONT : ID_START | DIGIT | [_'] ; diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index 621fd538..2c24c49e 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -9,6 +9,7 @@ null '%' '+' '-' +',' 'if' 'elif' 'else' @@ -19,6 +20,7 @@ null '}' '(' ')' +'.' '==' '!=' '<' @@ -67,6 +69,8 @@ null null null null +null +null INT ID WS @@ -76,6 +80,7 @@ rule names: program stmt simple_stmt +lvalue compound_stmt block expr @@ -83,4 +88,4 @@ atom atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 36, 122, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 3, 2, 7, 2, 18, 10, 2, 12, 2, 14, 2, 21, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 29, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 34, 10, 4, 3, 4, 3, 4, 7, 4, 38, 10, 4, 12, 4, 14, 4, 41, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 48, 10, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 7, 5, 57, 10, 5, 12, 5, 14, 5, 60, 11, 5, 3, 5, 3, 5, 5, 5, 64, 10, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 74, 10, 5, 3, 6, 3, 6, 3, 6, 6, 6, 79, 10, 6, 13, 6, 14, 6, 80, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 95, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 112, 10, 7, 12, 7, 14, 7, 115, 11, 7, 3, 8, 3, 8, 3, 8, 5, 8, 120, 10, 8, 3, 8, 2, 3, 12, 9, 2, 4, 6, 8, 10, 12, 14, 2, 7, 3, 2, 7, 11, 3, 2, 10, 11, 3, 2, 7, 9, 3, 2, 22, 27, 3, 2, 31, 32, 2, 136, 2, 19, 3, 2, 2, 2, 4, 28, 3, 2, 2, 2, 6, 47, 3, 2, 2, 2, 8, 73, 3, 2, 2, 2, 10, 75, 3, 2, 2, 2, 12, 94, 3, 2, 2, 2, 14, 119, 3, 2, 2, 2, 16, 18, 5, 4, 3, 2, 17, 16, 3, 2, 2, 2, 18, 21, 3, 2, 2, 2, 19, 17, 3, 2, 2, 2, 19, 20, 3, 2, 2, 2, 20, 22, 3, 2, 2, 2, 21, 19, 3, 2, 2, 2, 22, 23, 7, 2, 2, 3, 23, 3, 3, 2, 2, 2, 24, 25, 5, 6, 4, 2, 25, 26, 7, 3, 2, 2, 26, 29, 3, 2, 2, 2, 27, 29, 5, 8, 5, 2, 28, 24, 3, 2, 2, 2, 28, 27, 3, 2, 2, 2, 29, 5, 3, 2, 2, 2, 30, 48, 7, 4, 2, 2, 31, 33, 7, 5, 2, 2, 32, 34, 5, 12, 7, 2, 33, 32, 3, 2, 2, 2, 33, 34, 3, 2, 2, 2, 34, 48, 3, 2, 2, 2, 35, 36, 7, 34, 2, 2, 36, 38, 7, 6, 2, 2, 37, 35, 3, 2, 2, 2, 38, 41, 3, 2, 2, 2, 39, 37, 3, 2, 2, 2, 39, 40, 3, 2, 2, 2, 40, 42, 3, 2, 2, 2, 41, 39, 3, 2, 2, 2, 42, 48, 5, 12, 7, 2, 43, 44, 7, 34, 2, 2, 44, 45, 9, 2, 2, 2, 45, 46, 7, 6, 2, 2, 46, 48, 5, 12, 7, 2, 47, 30, 3, 2, 2, 2, 47, 31, 3, 2, 2, 2, 47, 39, 3, 2, 2, 2, 47, 43, 3, 2, 2, 2, 48, 7, 3, 2, 2, 2, 49, 50, 7, 12, 2, 2, 50, 51, 5, 12, 7, 2, 51, 58, 5, 10, 6, 2, 52, 53, 7, 13, 2, 2, 53, 54, 5, 12, 7, 2, 54, 55, 5, 10, 6, 2, 55, 57, 3, 2, 2, 2, 56, 52, 3, 2, 2, 2, 57, 60, 3, 2, 2, 2, 58, 56, 3, 2, 2, 2, 58, 59, 3, 2, 2, 2, 59, 63, 3, 2, 2, 2, 60, 58, 3, 2, 2, 2, 61, 62, 7, 14, 2, 2, 62, 64, 5, 10, 6, 2, 63, 61, 3, 2, 2, 2, 63, 64, 3, 2, 2, 2, 64, 74, 3, 2, 2, 2, 65, 66, 7, 15, 2, 2, 66, 67, 5, 12, 7, 2, 67, 68, 5, 10, 6, 2, 68, 74, 3, 2, 2, 2, 69, 70, 7, 16, 2, 2, 70, 71, 5, 12, 7, 2, 71, 72, 5, 10, 6, 2, 72, 74, 3, 2, 2, 2, 73, 49, 3, 2, 2, 2, 73, 65, 3, 2, 2, 2, 73, 69, 3, 2, 2, 2, 74, 9, 3, 2, 2, 2, 75, 76, 7, 17, 2, 2, 76, 78, 7, 18, 2, 2, 77, 79, 5, 4, 3, 2, 78, 77, 3, 2, 2, 2, 79, 80, 3, 2, 2, 2, 80, 78, 3, 2, 2, 2, 80, 81, 3, 2, 2, 2, 81, 82, 3, 2, 2, 2, 82, 83, 7, 19, 2, 2, 83, 11, 3, 2, 2, 2, 84, 85, 8, 7, 1, 2, 85, 95, 5, 14, 8, 2, 86, 87, 7, 20, 2, 2, 87, 88, 5, 12, 7, 2, 88, 89, 7, 21, 2, 2, 89, 95, 3, 2, 2, 2, 90, 91, 9, 3, 2, 2, 91, 95, 5, 12, 7, 9, 92, 93, 7, 28, 2, 2, 93, 95, 5, 12, 7, 5, 94, 84, 3, 2, 2, 2, 94, 86, 3, 2, 2, 2, 94, 90, 3, 2, 2, 2, 94, 92, 3, 2, 2, 2, 95, 113, 3, 2, 2, 2, 96, 97, 12, 8, 2, 2, 97, 98, 9, 4, 2, 2, 98, 112, 5, 12, 7, 9, 99, 100, 12, 7, 2, 2, 100, 101, 9, 3, 2, 2, 101, 112, 5, 12, 7, 8, 102, 103, 12, 6, 2, 2, 103, 104, 9, 5, 2, 2, 104, 112, 5, 12, 7, 6, 105, 106, 12, 4, 2, 2, 106, 107, 7, 29, 2, 2, 107, 112, 5, 12, 7, 4, 108, 109, 12, 3, 2, 2, 109, 110, 7, 30, 2, 2, 110, 112, 5, 12, 7, 3, 111, 96, 3, 2, 2, 2, 111, 99, 3, 2, 2, 2, 111, 102, 3, 2, 2, 2, 111, 105, 3, 2, 2, 2, 111, 108, 3, 2, 2, 2, 112, 115, 3, 2, 2, 2, 113, 111, 3, 2, 2, 2, 113, 114, 3, 2, 2, 2, 114, 13, 3, 2, 2, 2, 115, 113, 3, 2, 2, 2, 116, 120, 7, 33, 2, 2, 117, 120, 9, 6, 2, 2, 118, 120, 7, 34, 2, 2, 119, 116, 3, 2, 2, 2, 119, 117, 3, 2, 2, 2, 119, 118, 3, 2, 2, 2, 120, 15, 3, 2, 2, 2, 15, 19, 28, 33, 39, 47, 58, 63, 73, 80, 94, 111, 113, 119] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 38, 139, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 3, 2, 7, 2, 20, 10, 2, 12, 2, 14, 2, 23, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 31, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 36, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 41, 10, 4, 12, 4, 14, 4, 44, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 51, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 56, 10, 5, 12, 5, 14, 5, 59, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 68, 10, 6, 12, 6, 14, 6, 71, 11, 6, 3, 6, 3, 6, 5, 6, 75, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 85, 10, 6, 3, 7, 3, 7, 3, 7, 6, 7, 90, 10, 7, 13, 7, 14, 7, 91, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 106, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 129, 10, 8, 12, 8, 14, 8, 132, 11, 8, 3, 9, 3, 9, 3, 9, 5, 9, 137, 10, 9, 3, 9, 2, 3, 14, 10, 2, 4, 6, 8, 10, 12, 14, 16, 2, 7, 3, 2, 7, 11, 3, 2, 10, 11, 3, 2, 7, 9, 3, 2, 24, 29, 3, 2, 33, 34, 2, 155, 2, 21, 3, 2, 2, 2, 4, 30, 3, 2, 2, 2, 6, 50, 3, 2, 2, 2, 8, 52, 3, 2, 2, 2, 10, 84, 3, 2, 2, 2, 12, 86, 3, 2, 2, 2, 14, 105, 3, 2, 2, 2, 16, 136, 3, 2, 2, 2, 18, 20, 5, 4, 3, 2, 19, 18, 3, 2, 2, 2, 20, 23, 3, 2, 2, 2, 21, 19, 3, 2, 2, 2, 21, 22, 3, 2, 2, 2, 22, 24, 3, 2, 2, 2, 23, 21, 3, 2, 2, 2, 24, 25, 7, 2, 2, 3, 25, 3, 3, 2, 2, 2, 26, 27, 5, 6, 4, 2, 27, 28, 7, 3, 2, 2, 28, 31, 3, 2, 2, 2, 29, 31, 5, 10, 6, 2, 30, 26, 3, 2, 2, 2, 30, 29, 3, 2, 2, 2, 31, 5, 3, 2, 2, 2, 32, 51, 7, 4, 2, 2, 33, 35, 7, 5, 2, 2, 34, 36, 5, 14, 8, 2, 35, 34, 3, 2, 2, 2, 35, 36, 3, 2, 2, 2, 36, 51, 3, 2, 2, 2, 37, 38, 5, 8, 5, 2, 38, 39, 7, 6, 2, 2, 39, 41, 3, 2, 2, 2, 40, 37, 3, 2, 2, 2, 41, 44, 3, 2, 2, 2, 42, 40, 3, 2, 2, 2, 42, 43, 3, 2, 2, 2, 43, 45, 3, 2, 2, 2, 44, 42, 3, 2, 2, 2, 45, 51, 5, 14, 8, 2, 46, 47, 7, 36, 2, 2, 47, 48, 9, 2, 2, 2, 48, 49, 7, 6, 2, 2, 49, 51, 5, 14, 8, 2, 50, 32, 3, 2, 2, 2, 50, 33, 3, 2, 2, 2, 50, 42, 3, 2, 2, 2, 50, 46, 3, 2, 2, 2, 51, 7, 3, 2, 2, 2, 52, 57, 7, 36, 2, 2, 53, 54, 7, 12, 2, 2, 54, 56, 7, 36, 2, 2, 55, 53, 3, 2, 2, 2, 56, 59, 3, 2, 2, 2, 57, 55, 3, 2, 2, 2, 57, 58, 3, 2, 2, 2, 58, 9, 3, 2, 2, 2, 59, 57, 3, 2, 2, 2, 60, 61, 7, 13, 2, 2, 61, 62, 5, 14, 8, 2, 62, 69, 5, 12, 7, 2, 63, 64, 7, 14, 2, 2, 64, 65, 5, 14, 8, 2, 65, 66, 5, 12, 7, 2, 66, 68, 3, 2, 2, 2, 67, 63, 3, 2, 2, 2, 68, 71, 3, 2, 2, 2, 69, 67, 3, 2, 2, 2, 69, 70, 3, 2, 2, 2, 70, 74, 3, 2, 2, 2, 71, 69, 3, 2, 2, 2, 72, 73, 7, 15, 2, 2, 73, 75, 5, 12, 7, 2, 74, 72, 3, 2, 2, 2, 74, 75, 3, 2, 2, 2, 75, 85, 3, 2, 2, 2, 76, 77, 7, 16, 2, 2, 77, 78, 5, 14, 8, 2, 78, 79, 5, 12, 7, 2, 79, 85, 3, 2, 2, 2, 80, 81, 7, 17, 2, 2, 81, 82, 5, 14, 8, 2, 82, 83, 5, 12, 7, 2, 83, 85, 3, 2, 2, 2, 84, 60, 3, 2, 2, 2, 84, 76, 3, 2, 2, 2, 84, 80, 3, 2, 2, 2, 85, 11, 3, 2, 2, 2, 86, 87, 7, 18, 2, 2, 87, 89, 7, 19, 2, 2, 88, 90, 5, 4, 3, 2, 89, 88, 3, 2, 2, 2, 90, 91, 3, 2, 2, 2, 91, 89, 3, 2, 2, 2, 91, 92, 3, 2, 2, 2, 92, 93, 3, 2, 2, 2, 93, 94, 7, 20, 2, 2, 94, 13, 3, 2, 2, 2, 95, 96, 8, 8, 1, 2, 96, 106, 5, 16, 9, 2, 97, 98, 7, 21, 2, 2, 98, 99, 5, 14, 8, 2, 99, 100, 7, 22, 2, 2, 100, 106, 3, 2, 2, 2, 101, 102, 9, 3, 2, 2, 102, 106, 5, 14, 8, 10, 103, 104, 7, 30, 2, 2, 104, 106, 5, 14, 8, 6, 105, 95, 3, 2, 2, 2, 105, 97, 3, 2, 2, 2, 105, 101, 3, 2, 2, 2, 105, 103, 3, 2, 2, 2, 106, 130, 3, 2, 2, 2, 107, 108, 12, 9, 2, 2, 108, 109, 9, 4, 2, 2, 109, 129, 5, 14, 8, 10, 110, 111, 12, 8, 2, 2, 111, 112, 9, 3, 2, 2, 112, 129, 5, 14, 8, 9, 113, 114, 12, 7, 2, 2, 114, 115, 9, 5, 2, 2, 115, 129, 5, 14, 8, 7, 116, 117, 12, 5, 2, 2, 117, 118, 7, 31, 2, 2, 118, 129, 5, 14, 8, 5, 119, 120, 12, 4, 2, 2, 120, 121, 7, 32, 2, 2, 121, 129, 5, 14, 8, 4, 122, 123, 12, 3, 2, 2, 123, 124, 7, 12, 2, 2, 124, 129, 5, 14, 8, 3, 125, 126, 12, 11, 2, 2, 126, 127, 7, 23, 2, 2, 127, 129, 7, 36, 2, 2, 128, 107, 3, 2, 2, 2, 128, 110, 3, 2, 2, 2, 128, 113, 3, 2, 2, 2, 128, 116, 3, 2, 2, 2, 128, 119, 3, 2, 2, 2, 128, 122, 3, 2, 2, 2, 128, 125, 3, 2, 2, 2, 129, 132, 3, 2, 2, 2, 130, 128, 3, 2, 2, 2, 130, 131, 3, 2, 2, 2, 131, 15, 3, 2, 2, 2, 132, 130, 3, 2, 2, 2, 133, 137, 7, 35, 2, 2, 134, 137, 9, 6, 2, 2, 135, 137, 7, 36, 2, 2, 136, 133, 3, 2, 2, 2, 136, 134, 3, 2, 2, 2, 136, 135, 3, 2, 2, 2, 137, 17, 3, 2, 2, 2, 16, 21, 30, 35, 42, 50, 57, 69, 74, 84, 91, 105, 128, 130, 136] \ No newline at end of file diff --git a/src/antlr/Pyxell.tokens b/src/antlr/Pyxell.tokens index a69a296d..c186b36f 100644 --- a/src/antlr/Pyxell.tokens +++ b/src/antlr/Pyxell.tokens @@ -28,10 +28,12 @@ T__26=27 T__27=28 T__28=29 T__29=30 -INT=31 -ID=32 -WS=33 -ERR=34 +T__30=31 +T__31=32 +INT=33 +ID=34 +WS=35 +ERR=36 ';'=1 'skip'=2 'print'=3 @@ -41,24 +43,26 @@ ERR=34 '%'=7 '+'=8 '-'=9 -'if'=10 -'elif'=11 -'else'=12 -'while'=13 -'until'=14 -'do'=15 -'{'=16 -'}'=17 -'('=18 -')'=19 -'=='=20 -'!='=21 -'<'=22 -'<='=23 -'>'=24 -'>='=25 -'not'=26 -'and'=27 -'or'=28 -'true'=29 -'false'=30 +','=10 +'if'=11 +'elif'=12 +'else'=13 +'while'=14 +'until'=15 +'do'=16 +'{'=17 +'}'=18 +'('=19 +')'=20 +'.'=21 +'=='=22 +'!='=23 +'<'=24 +'<='=25 +'>'=26 +'>='=27 +'not'=28 +'and'=29 +'or'=30 +'true'=31 +'false'=32 diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp index 45705358..a60aa0b0 100644 --- a/src/antlr/PyxellLexer.interp +++ b/src/antlr/PyxellLexer.interp @@ -9,6 +9,7 @@ null '%' '+' '-' +',' 'if' 'elif' 'else' @@ -19,6 +20,7 @@ null '}' '(' ')' +'.' '==' '!=' '<' @@ -67,6 +69,8 @@ null null null null +null +null INT ID WS @@ -103,9 +107,12 @@ T__26 T__27 T__28 T__29 +T__30 +T__31 INT ID DIGIT +LETTER ID_START ID_CONT WS @@ -119,4 +126,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 36, 206, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 6, 32, 178, 10, 32, 13, 32, 14, 32, 179, 3, 33, 3, 33, 7, 33, 184, 10, 33, 12, 33, 14, 33, 187, 11, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 5, 36, 196, 10, 36, 3, 37, 6, 37, 199, 10, 37, 13, 37, 14, 37, 200, 3, 37, 3, 37, 3, 38, 3, 38, 2, 2, 39, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 2, 69, 2, 71, 2, 73, 35, 75, 36, 3, 2, 6, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 207, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 3, 77, 3, 2, 2, 2, 5, 79, 3, 2, 2, 2, 7, 84, 3, 2, 2, 2, 9, 90, 3, 2, 2, 2, 11, 92, 3, 2, 2, 2, 13, 94, 3, 2, 2, 2, 15, 96, 3, 2, 2, 2, 17, 98, 3, 2, 2, 2, 19, 100, 3, 2, 2, 2, 21, 102, 3, 2, 2, 2, 23, 105, 3, 2, 2, 2, 25, 110, 3, 2, 2, 2, 27, 115, 3, 2, 2, 2, 29, 121, 3, 2, 2, 2, 31, 127, 3, 2, 2, 2, 33, 130, 3, 2, 2, 2, 35, 132, 3, 2, 2, 2, 37, 134, 3, 2, 2, 2, 39, 136, 3, 2, 2, 2, 41, 138, 3, 2, 2, 2, 43, 141, 3, 2, 2, 2, 45, 144, 3, 2, 2, 2, 47, 146, 3, 2, 2, 2, 49, 149, 3, 2, 2, 2, 51, 151, 3, 2, 2, 2, 53, 154, 3, 2, 2, 2, 55, 158, 3, 2, 2, 2, 57, 162, 3, 2, 2, 2, 59, 165, 3, 2, 2, 2, 61, 170, 3, 2, 2, 2, 63, 177, 3, 2, 2, 2, 65, 181, 3, 2, 2, 2, 67, 188, 3, 2, 2, 2, 69, 190, 3, 2, 2, 2, 71, 195, 3, 2, 2, 2, 73, 198, 3, 2, 2, 2, 75, 204, 3, 2, 2, 2, 77, 78, 7, 61, 2, 2, 78, 4, 3, 2, 2, 2, 79, 80, 7, 117, 2, 2, 80, 81, 7, 109, 2, 2, 81, 82, 7, 107, 2, 2, 82, 83, 7, 114, 2, 2, 83, 6, 3, 2, 2, 2, 84, 85, 7, 114, 2, 2, 85, 86, 7, 116, 2, 2, 86, 87, 7, 107, 2, 2, 87, 88, 7, 112, 2, 2, 88, 89, 7, 118, 2, 2, 89, 8, 3, 2, 2, 2, 90, 91, 7, 63, 2, 2, 91, 10, 3, 2, 2, 2, 92, 93, 7, 44, 2, 2, 93, 12, 3, 2, 2, 2, 94, 95, 7, 49, 2, 2, 95, 14, 3, 2, 2, 2, 96, 97, 7, 39, 2, 2, 97, 16, 3, 2, 2, 2, 98, 99, 7, 45, 2, 2, 99, 18, 3, 2, 2, 2, 100, 101, 7, 47, 2, 2, 101, 20, 3, 2, 2, 2, 102, 103, 7, 107, 2, 2, 103, 104, 7, 104, 2, 2, 104, 22, 3, 2, 2, 2, 105, 106, 7, 103, 2, 2, 106, 107, 7, 110, 2, 2, 107, 108, 7, 107, 2, 2, 108, 109, 7, 104, 2, 2, 109, 24, 3, 2, 2, 2, 110, 111, 7, 103, 2, 2, 111, 112, 7, 110, 2, 2, 112, 113, 7, 117, 2, 2, 113, 114, 7, 103, 2, 2, 114, 26, 3, 2, 2, 2, 115, 116, 7, 121, 2, 2, 116, 117, 7, 106, 2, 2, 117, 118, 7, 107, 2, 2, 118, 119, 7, 110, 2, 2, 119, 120, 7, 103, 2, 2, 120, 28, 3, 2, 2, 2, 121, 122, 7, 119, 2, 2, 122, 123, 7, 112, 2, 2, 123, 124, 7, 118, 2, 2, 124, 125, 7, 107, 2, 2, 125, 126, 7, 110, 2, 2, 126, 30, 3, 2, 2, 2, 127, 128, 7, 102, 2, 2, 128, 129, 7, 113, 2, 2, 129, 32, 3, 2, 2, 2, 130, 131, 7, 125, 2, 2, 131, 34, 3, 2, 2, 2, 132, 133, 7, 127, 2, 2, 133, 36, 3, 2, 2, 2, 134, 135, 7, 42, 2, 2, 135, 38, 3, 2, 2, 2, 136, 137, 7, 43, 2, 2, 137, 40, 3, 2, 2, 2, 138, 139, 7, 63, 2, 2, 139, 140, 7, 63, 2, 2, 140, 42, 3, 2, 2, 2, 141, 142, 7, 35, 2, 2, 142, 143, 7, 63, 2, 2, 143, 44, 3, 2, 2, 2, 144, 145, 7, 62, 2, 2, 145, 46, 3, 2, 2, 2, 146, 147, 7, 62, 2, 2, 147, 148, 7, 63, 2, 2, 148, 48, 3, 2, 2, 2, 149, 150, 7, 64, 2, 2, 150, 50, 3, 2, 2, 2, 151, 152, 7, 64, 2, 2, 152, 153, 7, 63, 2, 2, 153, 52, 3, 2, 2, 2, 154, 155, 7, 112, 2, 2, 155, 156, 7, 113, 2, 2, 156, 157, 7, 118, 2, 2, 157, 54, 3, 2, 2, 2, 158, 159, 7, 99, 2, 2, 159, 160, 7, 112, 2, 2, 160, 161, 7, 102, 2, 2, 161, 56, 3, 2, 2, 2, 162, 163, 7, 113, 2, 2, 163, 164, 7, 116, 2, 2, 164, 58, 3, 2, 2, 2, 165, 166, 7, 118, 2, 2, 166, 167, 7, 116, 2, 2, 167, 168, 7, 119, 2, 2, 168, 169, 7, 103, 2, 2, 169, 60, 3, 2, 2, 2, 170, 171, 7, 104, 2, 2, 171, 172, 7, 99, 2, 2, 172, 173, 7, 110, 2, 2, 173, 174, 7, 117, 2, 2, 174, 175, 7, 103, 2, 2, 175, 62, 3, 2, 2, 2, 176, 178, 5, 67, 34, 2, 177, 176, 3, 2, 2, 2, 178, 179, 3, 2, 2, 2, 179, 177, 3, 2, 2, 2, 179, 180, 3, 2, 2, 2, 180, 64, 3, 2, 2, 2, 181, 185, 5, 69, 35, 2, 182, 184, 5, 71, 36, 2, 183, 182, 3, 2, 2, 2, 184, 187, 3, 2, 2, 2, 185, 183, 3, 2, 2, 2, 185, 186, 3, 2, 2, 2, 186, 66, 3, 2, 2, 2, 187, 185, 3, 2, 2, 2, 188, 189, 9, 2, 2, 2, 189, 68, 3, 2, 2, 2, 190, 191, 9, 3, 2, 2, 191, 70, 3, 2, 2, 2, 192, 196, 5, 69, 35, 2, 193, 196, 5, 67, 34, 2, 194, 196, 9, 4, 2, 2, 195, 192, 3, 2, 2, 2, 195, 193, 3, 2, 2, 2, 195, 194, 3, 2, 2, 2, 196, 72, 3, 2, 2, 2, 197, 199, 9, 5, 2, 2, 198, 197, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 198, 3, 2, 2, 2, 200, 201, 3, 2, 2, 2, 201, 202, 3, 2, 2, 2, 202, 203, 8, 37, 2, 2, 203, 74, 3, 2, 2, 2, 204, 205, 11, 2, 2, 2, 205, 76, 3, 2, 2, 2, 7, 2, 179, 185, 195, 200, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 38, 218, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 6, 34, 188, 10, 34, 13, 34, 14, 34, 189, 3, 35, 3, 35, 7, 35, 194, 10, 35, 12, 35, 14, 35, 197, 11, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 5, 39, 208, 10, 39, 3, 40, 6, 40, 211, 10, 40, 13, 40, 14, 40, 212, 3, 40, 3, 40, 3, 41, 3, 41, 2, 2, 42, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 2, 73, 2, 75, 2, 77, 2, 79, 37, 81, 38, 3, 2, 7, 3, 2, 50, 59, 3, 2, 99, 124, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 218, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 3, 83, 3, 2, 2, 2, 5, 85, 3, 2, 2, 2, 7, 90, 3, 2, 2, 2, 9, 96, 3, 2, 2, 2, 11, 98, 3, 2, 2, 2, 13, 100, 3, 2, 2, 2, 15, 102, 3, 2, 2, 2, 17, 104, 3, 2, 2, 2, 19, 106, 3, 2, 2, 2, 21, 108, 3, 2, 2, 2, 23, 110, 3, 2, 2, 2, 25, 113, 3, 2, 2, 2, 27, 118, 3, 2, 2, 2, 29, 123, 3, 2, 2, 2, 31, 129, 3, 2, 2, 2, 33, 135, 3, 2, 2, 2, 35, 138, 3, 2, 2, 2, 37, 140, 3, 2, 2, 2, 39, 142, 3, 2, 2, 2, 41, 144, 3, 2, 2, 2, 43, 146, 3, 2, 2, 2, 45, 148, 3, 2, 2, 2, 47, 151, 3, 2, 2, 2, 49, 154, 3, 2, 2, 2, 51, 156, 3, 2, 2, 2, 53, 159, 3, 2, 2, 2, 55, 161, 3, 2, 2, 2, 57, 164, 3, 2, 2, 2, 59, 168, 3, 2, 2, 2, 61, 172, 3, 2, 2, 2, 63, 175, 3, 2, 2, 2, 65, 180, 3, 2, 2, 2, 67, 187, 3, 2, 2, 2, 69, 191, 3, 2, 2, 2, 71, 198, 3, 2, 2, 2, 73, 200, 3, 2, 2, 2, 75, 202, 3, 2, 2, 2, 77, 207, 3, 2, 2, 2, 79, 210, 3, 2, 2, 2, 81, 216, 3, 2, 2, 2, 83, 84, 7, 61, 2, 2, 84, 4, 3, 2, 2, 2, 85, 86, 7, 117, 2, 2, 86, 87, 7, 109, 2, 2, 87, 88, 7, 107, 2, 2, 88, 89, 7, 114, 2, 2, 89, 6, 3, 2, 2, 2, 90, 91, 7, 114, 2, 2, 91, 92, 7, 116, 2, 2, 92, 93, 7, 107, 2, 2, 93, 94, 7, 112, 2, 2, 94, 95, 7, 118, 2, 2, 95, 8, 3, 2, 2, 2, 96, 97, 7, 63, 2, 2, 97, 10, 3, 2, 2, 2, 98, 99, 7, 44, 2, 2, 99, 12, 3, 2, 2, 2, 100, 101, 7, 49, 2, 2, 101, 14, 3, 2, 2, 2, 102, 103, 7, 39, 2, 2, 103, 16, 3, 2, 2, 2, 104, 105, 7, 45, 2, 2, 105, 18, 3, 2, 2, 2, 106, 107, 7, 47, 2, 2, 107, 20, 3, 2, 2, 2, 108, 109, 7, 46, 2, 2, 109, 22, 3, 2, 2, 2, 110, 111, 7, 107, 2, 2, 111, 112, 7, 104, 2, 2, 112, 24, 3, 2, 2, 2, 113, 114, 7, 103, 2, 2, 114, 115, 7, 110, 2, 2, 115, 116, 7, 107, 2, 2, 116, 117, 7, 104, 2, 2, 117, 26, 3, 2, 2, 2, 118, 119, 7, 103, 2, 2, 119, 120, 7, 110, 2, 2, 120, 121, 7, 117, 2, 2, 121, 122, 7, 103, 2, 2, 122, 28, 3, 2, 2, 2, 123, 124, 7, 121, 2, 2, 124, 125, 7, 106, 2, 2, 125, 126, 7, 107, 2, 2, 126, 127, 7, 110, 2, 2, 127, 128, 7, 103, 2, 2, 128, 30, 3, 2, 2, 2, 129, 130, 7, 119, 2, 2, 130, 131, 7, 112, 2, 2, 131, 132, 7, 118, 2, 2, 132, 133, 7, 107, 2, 2, 133, 134, 7, 110, 2, 2, 134, 32, 3, 2, 2, 2, 135, 136, 7, 102, 2, 2, 136, 137, 7, 113, 2, 2, 137, 34, 3, 2, 2, 2, 138, 139, 7, 125, 2, 2, 139, 36, 3, 2, 2, 2, 140, 141, 7, 127, 2, 2, 141, 38, 3, 2, 2, 2, 142, 143, 7, 42, 2, 2, 143, 40, 3, 2, 2, 2, 144, 145, 7, 43, 2, 2, 145, 42, 3, 2, 2, 2, 146, 147, 7, 48, 2, 2, 147, 44, 3, 2, 2, 2, 148, 149, 7, 63, 2, 2, 149, 150, 7, 63, 2, 2, 150, 46, 3, 2, 2, 2, 151, 152, 7, 35, 2, 2, 152, 153, 7, 63, 2, 2, 153, 48, 3, 2, 2, 2, 154, 155, 7, 62, 2, 2, 155, 50, 3, 2, 2, 2, 156, 157, 7, 62, 2, 2, 157, 158, 7, 63, 2, 2, 158, 52, 3, 2, 2, 2, 159, 160, 7, 64, 2, 2, 160, 54, 3, 2, 2, 2, 161, 162, 7, 64, 2, 2, 162, 163, 7, 63, 2, 2, 163, 56, 3, 2, 2, 2, 164, 165, 7, 112, 2, 2, 165, 166, 7, 113, 2, 2, 166, 167, 7, 118, 2, 2, 167, 58, 3, 2, 2, 2, 168, 169, 7, 99, 2, 2, 169, 170, 7, 112, 2, 2, 170, 171, 7, 102, 2, 2, 171, 60, 3, 2, 2, 2, 172, 173, 7, 113, 2, 2, 173, 174, 7, 116, 2, 2, 174, 62, 3, 2, 2, 2, 175, 176, 7, 118, 2, 2, 176, 177, 7, 116, 2, 2, 177, 178, 7, 119, 2, 2, 178, 179, 7, 103, 2, 2, 179, 64, 3, 2, 2, 2, 180, 181, 7, 104, 2, 2, 181, 182, 7, 99, 2, 2, 182, 183, 7, 110, 2, 2, 183, 184, 7, 117, 2, 2, 184, 185, 7, 103, 2, 2, 185, 66, 3, 2, 2, 2, 186, 188, 5, 71, 36, 2, 187, 186, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 187, 3, 2, 2, 2, 189, 190, 3, 2, 2, 2, 190, 68, 3, 2, 2, 2, 191, 195, 5, 75, 38, 2, 192, 194, 5, 77, 39, 2, 193, 192, 3, 2, 2, 2, 194, 197, 3, 2, 2, 2, 195, 193, 3, 2, 2, 2, 195, 196, 3, 2, 2, 2, 196, 70, 3, 2, 2, 2, 197, 195, 3, 2, 2, 2, 198, 199, 9, 2, 2, 2, 199, 72, 3, 2, 2, 2, 200, 201, 9, 3, 2, 2, 201, 74, 3, 2, 2, 2, 202, 203, 9, 4, 2, 2, 203, 76, 3, 2, 2, 2, 204, 208, 5, 75, 38, 2, 205, 208, 5, 71, 36, 2, 206, 208, 9, 5, 2, 2, 207, 204, 3, 2, 2, 2, 207, 205, 3, 2, 2, 2, 207, 206, 3, 2, 2, 2, 208, 78, 3, 2, 2, 2, 209, 211, 9, 6, 2, 2, 210, 209, 3, 2, 2, 2, 211, 212, 3, 2, 2, 2, 212, 210, 3, 2, 2, 2, 212, 213, 3, 2, 2, 2, 213, 214, 3, 2, 2, 2, 214, 215, 8, 40, 2, 2, 215, 80, 3, 2, 2, 2, 216, 217, 11, 2, 2, 2, 217, 82, 3, 2, 2, 2, 7, 2, 189, 195, 207, 212, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py index c1545ffd..f7ac37d8 100644 --- a/src/antlr/PyxellLexer.py +++ b/src/antlr/PyxellLexer.py @@ -8,84 +8,89 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2$") - buf.write("\u00ce\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2&") + buf.write("\u00da\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") buf.write("\4\31\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36") buf.write("\t\36\4\37\t\37\4 \t \4!\t!\4\"\t\"\4#\t#\4$\t$\4%\t%") - buf.write("\4&\t&\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4") - buf.write("\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\n\3\n\3") - buf.write("\13\3\13\3\13\3\f\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r") - buf.write("\3\16\3\16\3\16\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3\17") - buf.write("\3\17\3\20\3\20\3\20\3\21\3\21\3\22\3\22\3\23\3\23\3\24") - buf.write("\3\24\3\25\3\25\3\25\3\26\3\26\3\26\3\27\3\27\3\30\3\30") - buf.write("\3\30\3\31\3\31\3\32\3\32\3\32\3\33\3\33\3\33\3\33\3\34") - buf.write("\3\34\3\34\3\34\3\35\3\35\3\35\3\36\3\36\3\36\3\36\3\36") - buf.write("\3\37\3\37\3\37\3\37\3\37\3\37\3 \6 \u00b2\n \r \16 \u00b3") - buf.write("\3!\3!\7!\u00b8\n!\f!\16!\u00bb\13!\3\"\3\"\3#\3#\3$\3") - buf.write("$\3$\5$\u00c4\n$\3%\6%\u00c7\n%\r%\16%\u00c8\3%\3%\3&") - buf.write("\3&\2\2\'\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25") - buf.write("\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+") - buf.write("\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C\2") - buf.write("E\2G\2I#K$\3\2\6\3\2\62;\5\2C\\aac|\4\2))aa\5\2\13\f\17") - buf.write("\17\"\"\2\u00cf\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2") + buf.write("\4&\t&\4\'\t\'\4(\t(\4)\t)\3\2\3\2\3\3\3\3\3\3\3\3\3\3") + buf.write("\3\4\3\4\3\4\3\4\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3") + buf.write("\b\3\t\3\t\3\n\3\n\3\13\3\13\3\f\3\f\3\f\3\r\3\r\3\r\3") + buf.write("\r\3\r\3\16\3\16\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3") + buf.write("\17\3\17\3\20\3\20\3\20\3\20\3\20\3\20\3\21\3\21\3\21") + buf.write("\3\22\3\22\3\23\3\23\3\24\3\24\3\25\3\25\3\26\3\26\3\27") + buf.write("\3\27\3\27\3\30\3\30\3\30\3\31\3\31\3\32\3\32\3\32\3\33") + buf.write("\3\33\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\36\3\36\3\36") + buf.write("\3\36\3\37\3\37\3\37\3 \3 \3 \3 \3 \3!\3!\3!\3!\3!\3!") + buf.write("\3\"\6\"\u00bc\n\"\r\"\16\"\u00bd\3#\3#\7#\u00c2\n#\f") + buf.write("#\16#\u00c5\13#\3$\3$\3%\3%\3&\3&\3\'\3\'\3\'\5\'\u00d0") + buf.write("\n\'\3(\6(\u00d3\n(\r(\16(\u00d4\3(\3(\3)\3)\2\2*\3\3") + buf.write("\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16") + buf.write("\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61") + buf.write("\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G\2I\2K\2M\2O") + buf.write("%Q&\3\2\7\3\2\62;\3\2c|\5\2C\\aac|\4\2))aa\5\2\13\f\17") + buf.write("\17\"\"\2\u00da\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2") buf.write("\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21") buf.write("\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3") buf.write("\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2") buf.write("\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2") buf.write("\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2") buf.write("\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2") - buf.write("\2\2\2?\3\2\2\2\2A\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\3M\3") - buf.write("\2\2\2\5O\3\2\2\2\7T\3\2\2\2\tZ\3\2\2\2\13\\\3\2\2\2\r") - buf.write("^\3\2\2\2\17`\3\2\2\2\21b\3\2\2\2\23d\3\2\2\2\25f\3\2") - buf.write("\2\2\27i\3\2\2\2\31n\3\2\2\2\33s\3\2\2\2\35y\3\2\2\2\37") - buf.write("\177\3\2\2\2!\u0082\3\2\2\2#\u0084\3\2\2\2%\u0086\3\2") - buf.write("\2\2\'\u0088\3\2\2\2)\u008a\3\2\2\2+\u008d\3\2\2\2-\u0090") - buf.write("\3\2\2\2/\u0092\3\2\2\2\61\u0095\3\2\2\2\63\u0097\3\2") - buf.write("\2\2\65\u009a\3\2\2\2\67\u009e\3\2\2\29\u00a2\3\2\2\2") - buf.write(";\u00a5\3\2\2\2=\u00aa\3\2\2\2?\u00b1\3\2\2\2A\u00b5\3") - buf.write("\2\2\2C\u00bc\3\2\2\2E\u00be\3\2\2\2G\u00c3\3\2\2\2I\u00c6") - buf.write("\3\2\2\2K\u00cc\3\2\2\2MN\7=\2\2N\4\3\2\2\2OP\7u\2\2P") - buf.write("Q\7m\2\2QR\7k\2\2RS\7r\2\2S\6\3\2\2\2TU\7r\2\2UV\7t\2") - buf.write("\2VW\7k\2\2WX\7p\2\2XY\7v\2\2Y\b\3\2\2\2Z[\7?\2\2[\n\3") - buf.write("\2\2\2\\]\7,\2\2]\f\3\2\2\2^_\7\61\2\2_\16\3\2\2\2`a\7") - buf.write("\'\2\2a\20\3\2\2\2bc\7-\2\2c\22\3\2\2\2de\7/\2\2e\24\3") - buf.write("\2\2\2fg\7k\2\2gh\7h\2\2h\26\3\2\2\2ij\7g\2\2jk\7n\2\2") - buf.write("kl\7k\2\2lm\7h\2\2m\30\3\2\2\2no\7g\2\2op\7n\2\2pq\7u") - buf.write("\2\2qr\7g\2\2r\32\3\2\2\2st\7y\2\2tu\7j\2\2uv\7k\2\2v") - buf.write("w\7n\2\2wx\7g\2\2x\34\3\2\2\2yz\7w\2\2z{\7p\2\2{|\7v\2") - buf.write("\2|}\7k\2\2}~\7n\2\2~\36\3\2\2\2\177\u0080\7f\2\2\u0080") - buf.write("\u0081\7q\2\2\u0081 \3\2\2\2\u0082\u0083\7}\2\2\u0083") - buf.write("\"\3\2\2\2\u0084\u0085\7\177\2\2\u0085$\3\2\2\2\u0086") - buf.write("\u0087\7*\2\2\u0087&\3\2\2\2\u0088\u0089\7+\2\2\u0089") - buf.write("(\3\2\2\2\u008a\u008b\7?\2\2\u008b\u008c\7?\2\2\u008c") - buf.write("*\3\2\2\2\u008d\u008e\7#\2\2\u008e\u008f\7?\2\2\u008f") - buf.write(",\3\2\2\2\u0090\u0091\7>\2\2\u0091.\3\2\2\2\u0092\u0093") - buf.write("\7>\2\2\u0093\u0094\7?\2\2\u0094\60\3\2\2\2\u0095\u0096") - buf.write("\7@\2\2\u0096\62\3\2\2\2\u0097\u0098\7@\2\2\u0098\u0099") - buf.write("\7?\2\2\u0099\64\3\2\2\2\u009a\u009b\7p\2\2\u009b\u009c") - buf.write("\7q\2\2\u009c\u009d\7v\2\2\u009d\66\3\2\2\2\u009e\u009f") - buf.write("\7c\2\2\u009f\u00a0\7p\2\2\u00a0\u00a1\7f\2\2\u00a18\3") - buf.write("\2\2\2\u00a2\u00a3\7q\2\2\u00a3\u00a4\7t\2\2\u00a4:\3") - buf.write("\2\2\2\u00a5\u00a6\7v\2\2\u00a6\u00a7\7t\2\2\u00a7\u00a8") - buf.write("\7w\2\2\u00a8\u00a9\7g\2\2\u00a9<\3\2\2\2\u00aa\u00ab") - buf.write("\7h\2\2\u00ab\u00ac\7c\2\2\u00ac\u00ad\7n\2\2\u00ad\u00ae") - buf.write("\7u\2\2\u00ae\u00af\7g\2\2\u00af>\3\2\2\2\u00b0\u00b2") - buf.write("\5C\"\2\u00b1\u00b0\3\2\2\2\u00b2\u00b3\3\2\2\2\u00b3") - buf.write("\u00b1\3\2\2\2\u00b3\u00b4\3\2\2\2\u00b4@\3\2\2\2\u00b5") - buf.write("\u00b9\5E#\2\u00b6\u00b8\5G$\2\u00b7\u00b6\3\2\2\2\u00b8") - buf.write("\u00bb\3\2\2\2\u00b9\u00b7\3\2\2\2\u00b9\u00ba\3\2\2\2") - buf.write("\u00baB\3\2\2\2\u00bb\u00b9\3\2\2\2\u00bc\u00bd\t\2\2") - buf.write("\2\u00bdD\3\2\2\2\u00be\u00bf\t\3\2\2\u00bfF\3\2\2\2\u00c0") - buf.write("\u00c4\5E#\2\u00c1\u00c4\5C\"\2\u00c2\u00c4\t\4\2\2\u00c3") - buf.write("\u00c0\3\2\2\2\u00c3\u00c1\3\2\2\2\u00c3\u00c2\3\2\2\2") - buf.write("\u00c4H\3\2\2\2\u00c5\u00c7\t\5\2\2\u00c6\u00c5\3\2\2") - buf.write("\2\u00c7\u00c8\3\2\2\2\u00c8\u00c6\3\2\2\2\u00c8\u00c9") - buf.write("\3\2\2\2\u00c9\u00ca\3\2\2\2\u00ca\u00cb\b%\2\2\u00cb") - buf.write("J\3\2\2\2\u00cc\u00cd\13\2\2\2\u00cdL\3\2\2\2\7\2\u00b3") - buf.write("\u00b9\u00c3\u00c8\3\b\2\2") + buf.write("\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2O\3") + buf.write("\2\2\2\2Q\3\2\2\2\3S\3\2\2\2\5U\3\2\2\2\7Z\3\2\2\2\t`") + buf.write("\3\2\2\2\13b\3\2\2\2\rd\3\2\2\2\17f\3\2\2\2\21h\3\2\2") + buf.write("\2\23j\3\2\2\2\25l\3\2\2\2\27n\3\2\2\2\31q\3\2\2\2\33") + buf.write("v\3\2\2\2\35{\3\2\2\2\37\u0081\3\2\2\2!\u0087\3\2\2\2") + buf.write("#\u008a\3\2\2\2%\u008c\3\2\2\2\'\u008e\3\2\2\2)\u0090") + buf.write("\3\2\2\2+\u0092\3\2\2\2-\u0094\3\2\2\2/\u0097\3\2\2\2") + buf.write("\61\u009a\3\2\2\2\63\u009c\3\2\2\2\65\u009f\3\2\2\2\67") + buf.write("\u00a1\3\2\2\29\u00a4\3\2\2\2;\u00a8\3\2\2\2=\u00ac\3") + buf.write("\2\2\2?\u00af\3\2\2\2A\u00b4\3\2\2\2C\u00bb\3\2\2\2E\u00bf") + buf.write("\3\2\2\2G\u00c6\3\2\2\2I\u00c8\3\2\2\2K\u00ca\3\2\2\2") + buf.write("M\u00cf\3\2\2\2O\u00d2\3\2\2\2Q\u00d8\3\2\2\2ST\7=\2\2") + buf.write("T\4\3\2\2\2UV\7u\2\2VW\7m\2\2WX\7k\2\2XY\7r\2\2Y\6\3\2") + buf.write("\2\2Z[\7r\2\2[\\\7t\2\2\\]\7k\2\2]^\7p\2\2^_\7v\2\2_\b") + buf.write("\3\2\2\2`a\7?\2\2a\n\3\2\2\2bc\7,\2\2c\f\3\2\2\2de\7\61") + buf.write("\2\2e\16\3\2\2\2fg\7\'\2\2g\20\3\2\2\2hi\7-\2\2i\22\3") + buf.write("\2\2\2jk\7/\2\2k\24\3\2\2\2lm\7.\2\2m\26\3\2\2\2no\7k") + buf.write("\2\2op\7h\2\2p\30\3\2\2\2qr\7g\2\2rs\7n\2\2st\7k\2\2t") + buf.write("u\7h\2\2u\32\3\2\2\2vw\7g\2\2wx\7n\2\2xy\7u\2\2yz\7g\2") + buf.write("\2z\34\3\2\2\2{|\7y\2\2|}\7j\2\2}~\7k\2\2~\177\7n\2\2") + buf.write("\177\u0080\7g\2\2\u0080\36\3\2\2\2\u0081\u0082\7w\2\2") + buf.write("\u0082\u0083\7p\2\2\u0083\u0084\7v\2\2\u0084\u0085\7k") + buf.write("\2\2\u0085\u0086\7n\2\2\u0086 \3\2\2\2\u0087\u0088\7f") + buf.write("\2\2\u0088\u0089\7q\2\2\u0089\"\3\2\2\2\u008a\u008b\7") + buf.write("}\2\2\u008b$\3\2\2\2\u008c\u008d\7\177\2\2\u008d&\3\2") + buf.write("\2\2\u008e\u008f\7*\2\2\u008f(\3\2\2\2\u0090\u0091\7+") + buf.write("\2\2\u0091*\3\2\2\2\u0092\u0093\7\60\2\2\u0093,\3\2\2") + buf.write("\2\u0094\u0095\7?\2\2\u0095\u0096\7?\2\2\u0096.\3\2\2") + buf.write("\2\u0097\u0098\7#\2\2\u0098\u0099\7?\2\2\u0099\60\3\2") + buf.write("\2\2\u009a\u009b\7>\2\2\u009b\62\3\2\2\2\u009c\u009d\7") + buf.write(">\2\2\u009d\u009e\7?\2\2\u009e\64\3\2\2\2\u009f\u00a0") + buf.write("\7@\2\2\u00a0\66\3\2\2\2\u00a1\u00a2\7@\2\2\u00a2\u00a3") + buf.write("\7?\2\2\u00a38\3\2\2\2\u00a4\u00a5\7p\2\2\u00a5\u00a6") + buf.write("\7q\2\2\u00a6\u00a7\7v\2\2\u00a7:\3\2\2\2\u00a8\u00a9") + buf.write("\7c\2\2\u00a9\u00aa\7p\2\2\u00aa\u00ab\7f\2\2\u00ab<\3") + buf.write("\2\2\2\u00ac\u00ad\7q\2\2\u00ad\u00ae\7t\2\2\u00ae>\3") + buf.write("\2\2\2\u00af\u00b0\7v\2\2\u00b0\u00b1\7t\2\2\u00b1\u00b2") + buf.write("\7w\2\2\u00b2\u00b3\7g\2\2\u00b3@\3\2\2\2\u00b4\u00b5") + buf.write("\7h\2\2\u00b5\u00b6\7c\2\2\u00b6\u00b7\7n\2\2\u00b7\u00b8") + buf.write("\7u\2\2\u00b8\u00b9\7g\2\2\u00b9B\3\2\2\2\u00ba\u00bc") + buf.write("\5G$\2\u00bb\u00ba\3\2\2\2\u00bc\u00bd\3\2\2\2\u00bd\u00bb") + buf.write("\3\2\2\2\u00bd\u00be\3\2\2\2\u00beD\3\2\2\2\u00bf\u00c3") + buf.write("\5K&\2\u00c0\u00c2\5M\'\2\u00c1\u00c0\3\2\2\2\u00c2\u00c5") + buf.write("\3\2\2\2\u00c3\u00c1\3\2\2\2\u00c3\u00c4\3\2\2\2\u00c4") + buf.write("F\3\2\2\2\u00c5\u00c3\3\2\2\2\u00c6\u00c7\t\2\2\2\u00c7") + buf.write("H\3\2\2\2\u00c8\u00c9\t\3\2\2\u00c9J\3\2\2\2\u00ca\u00cb") + buf.write("\t\4\2\2\u00cbL\3\2\2\2\u00cc\u00d0\5K&\2\u00cd\u00d0") + buf.write("\5G$\2\u00ce\u00d0\t\5\2\2\u00cf\u00cc\3\2\2\2\u00cf\u00cd") + buf.write("\3\2\2\2\u00cf\u00ce\3\2\2\2\u00d0N\3\2\2\2\u00d1\u00d3") + buf.write("\t\6\2\2\u00d2\u00d1\3\2\2\2\u00d3\u00d4\3\2\2\2\u00d4") + buf.write("\u00d2\3\2\2\2\u00d4\u00d5\3\2\2\2\u00d5\u00d6\3\2\2\2") + buf.write("\u00d6\u00d7\b(\2\2\u00d7P\3\2\2\2\u00d8\u00d9\13\2\2") + buf.write("\2\u00d9R\3\2\2\2\7\2\u00bd\u00c3\u00cf\u00d4\3\b\2\2") return buf.getvalue() @@ -125,10 +130,12 @@ class PyxellLexer(Lexer): T__27 = 28 T__28 = 29 T__29 = 30 - INT = 31 - ID = 32 - WS = 33 - ERR = 34 + T__30 = 31 + T__31 = 32 + INT = 33 + ID = 34 + WS = 35 + ERR = 36 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -136,9 +143,9 @@ class PyxellLexer(Lexer): literalNames = [ "", "';'", "'skip'", "'print'", "'='", "'*'", "'/'", "'%'", "'+'", - "'-'", "'if'", "'elif'", "'else'", "'while'", "'until'", "'do'", - "'{'", "'}'", "'('", "')'", "'=='", "'!='", "'<'", "'<='", "'>'", - "'>='", "'not'", "'and'", "'or'", "'true'", "'false'" ] + "'-'", "','", "'if'", "'elif'", "'else'", "'while'", "'until'", + "'do'", "'{'", "'}'", "'('", "')'", "'.'", "'=='", "'!='", "'<'", + "'<='", "'>'", "'>='", "'not'", "'and'", "'or'", "'true'", "'false'" ] symbolicNames = [ "", "INT", "ID", "WS", "ERR" ] @@ -147,8 +154,9 @@ class PyxellLexer(Lexer): "T__7", "T__8", "T__9", "T__10", "T__11", "T__12", "T__13", "T__14", "T__15", "T__16", "T__17", "T__18", "T__19", "T__20", "T__21", "T__22", "T__23", "T__24", "T__25", - "T__26", "T__27", "T__28", "T__29", "INT", "ID", "DIGIT", - "ID_START", "ID_CONT", "WS", "ERR" ] + "T__26", "T__27", "T__28", "T__29", "T__30", "T__31", + "INT", "ID", "DIGIT", "LETTER", "ID_START", "ID_CONT", + "WS", "ERR" ] grammarFileName = "Pyxell.g4" diff --git a/src/antlr/PyxellLexer.tokens b/src/antlr/PyxellLexer.tokens index a69a296d..c186b36f 100644 --- a/src/antlr/PyxellLexer.tokens +++ b/src/antlr/PyxellLexer.tokens @@ -28,10 +28,12 @@ T__26=27 T__27=28 T__28=29 T__29=30 -INT=31 -ID=32 -WS=33 -ERR=34 +T__30=31 +T__31=32 +INT=33 +ID=34 +WS=35 +ERR=36 ';'=1 'skip'=2 'print'=3 @@ -41,24 +43,26 @@ ERR=34 '%'=7 '+'=8 '-'=9 -'if'=10 -'elif'=11 -'else'=12 -'while'=13 -'until'=14 -'do'=15 -'{'=16 -'}'=17 -'('=18 -')'=19 -'=='=20 -'!='=21 -'<'=22 -'<='=23 -'>'=24 -'>='=25 -'not'=26 -'and'=27 -'or'=28 -'true'=29 -'false'=30 +','=10 +'if'=11 +'elif'=12 +'else'=13 +'while'=14 +'until'=15 +'do'=16 +'{'=17 +'}'=18 +'('=19 +')'=20 +'.'=21 +'=='=22 +'!='=23 +'<'=24 +'<='=25 +'>'=26 +'>='=27 +'not'=28 +'and'=29 +'or'=30 +'true'=31 +'false'=32 diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index f257b47f..c3ad3268 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -8,47 +8,56 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3$") - buf.write("z\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b") - buf.write("\t\b\3\2\7\2\22\n\2\f\2\16\2\25\13\2\3\2\3\2\3\3\3\3\3") - buf.write("\3\3\3\5\3\35\n\3\3\4\3\4\3\4\5\4\"\n\4\3\4\3\4\7\4&\n") - buf.write("\4\f\4\16\4)\13\4\3\4\3\4\3\4\3\4\3\4\5\4\60\n\4\3\5\3") - buf.write("\5\3\5\3\5\3\5\3\5\3\5\7\59\n\5\f\5\16\5<\13\5\3\5\3\5") - buf.write("\5\5@\n\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\5\5J\n\5\3\6") - buf.write("\3\6\3\6\6\6O\n\6\r\6\16\6P\3\6\3\6\3\7\3\7\3\7\3\7\3") - buf.write("\7\3\7\3\7\3\7\3\7\3\7\5\7_\n\7\3\7\3\7\3\7\3\7\3\7\3") - buf.write("\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\7\7p\n\7\f\7\16") - buf.write("\7s\13\7\3\b\3\b\3\b\5\bx\n\b\3\b\2\3\f\t\2\4\6\b\n\f") - buf.write("\16\2\7\3\2\7\13\3\2\n\13\3\2\7\t\3\2\26\33\3\2\37 \2") - buf.write("\u0088\2\23\3\2\2\2\4\34\3\2\2\2\6/\3\2\2\2\bI\3\2\2\2") - buf.write("\nK\3\2\2\2\f^\3\2\2\2\16w\3\2\2\2\20\22\5\4\3\2\21\20") - buf.write("\3\2\2\2\22\25\3\2\2\2\23\21\3\2\2\2\23\24\3\2\2\2\24") - buf.write("\26\3\2\2\2\25\23\3\2\2\2\26\27\7\2\2\3\27\3\3\2\2\2\30") - buf.write("\31\5\6\4\2\31\32\7\3\2\2\32\35\3\2\2\2\33\35\5\b\5\2") - buf.write("\34\30\3\2\2\2\34\33\3\2\2\2\35\5\3\2\2\2\36\60\7\4\2") - buf.write("\2\37!\7\5\2\2 \"\5\f\7\2! \3\2\2\2!\"\3\2\2\2\"\60\3") - buf.write("\2\2\2#$\7\"\2\2$&\7\6\2\2%#\3\2\2\2&)\3\2\2\2\'%\3\2") - buf.write("\2\2\'(\3\2\2\2(*\3\2\2\2)\'\3\2\2\2*\60\5\f\7\2+,\7\"") - buf.write("\2\2,-\t\2\2\2-.\7\6\2\2.\60\5\f\7\2/\36\3\2\2\2/\37\3") - buf.write("\2\2\2/\'\3\2\2\2/+\3\2\2\2\60\7\3\2\2\2\61\62\7\f\2\2") - buf.write("\62\63\5\f\7\2\63:\5\n\6\2\64\65\7\r\2\2\65\66\5\f\7\2") - buf.write("\66\67\5\n\6\2\679\3\2\2\28\64\3\2\2\29<\3\2\2\2:8\3\2") - buf.write("\2\2:;\3\2\2\2;?\3\2\2\2<:\3\2\2\2=>\7\16\2\2>@\5\n\6") - buf.write("\2?=\3\2\2\2?@\3\2\2\2@J\3\2\2\2AB\7\17\2\2BC\5\f\7\2") - buf.write("CD\5\n\6\2DJ\3\2\2\2EF\7\20\2\2FG\5\f\7\2GH\5\n\6\2HJ") - buf.write("\3\2\2\2I\61\3\2\2\2IA\3\2\2\2IE\3\2\2\2J\t\3\2\2\2KL") - buf.write("\7\21\2\2LN\7\22\2\2MO\5\4\3\2NM\3\2\2\2OP\3\2\2\2PN\3") - buf.write("\2\2\2PQ\3\2\2\2QR\3\2\2\2RS\7\23\2\2S\13\3\2\2\2TU\b") - buf.write("\7\1\2U_\5\16\b\2VW\7\24\2\2WX\5\f\7\2XY\7\25\2\2Y_\3") - buf.write("\2\2\2Z[\t\3\2\2[_\5\f\7\t\\]\7\34\2\2]_\5\f\7\5^T\3\2") - buf.write("\2\2^V\3\2\2\2^Z\3\2\2\2^\\\3\2\2\2_q\3\2\2\2`a\f\b\2") - buf.write("\2ab\t\4\2\2bp\5\f\7\tcd\f\7\2\2de\t\3\2\2ep\5\f\7\bf") - buf.write("g\f\6\2\2gh\t\5\2\2hp\5\f\7\6ij\f\4\2\2jk\7\35\2\2kp\5") - buf.write("\f\7\4lm\f\3\2\2mn\7\36\2\2np\5\f\7\3o`\3\2\2\2oc\3\2") - buf.write("\2\2of\3\2\2\2oi\3\2\2\2ol\3\2\2\2ps\3\2\2\2qo\3\2\2\2") - buf.write("qr\3\2\2\2r\r\3\2\2\2sq\3\2\2\2tx\7!\2\2ux\t\6\2\2vx\7") - buf.write("\"\2\2wt\3\2\2\2wu\3\2\2\2wv\3\2\2\2x\17\3\2\2\2\17\23") - buf.write("\34!\'/:?IP^oqw") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3&") + buf.write("\u008b\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\4\b\t\b\4\t\t\t\3\2\7\2\24\n\2\f\2\16\2\27\13\2\3\2\3") + buf.write("\2\3\3\3\3\3\3\3\3\5\3\37\n\3\3\4\3\4\3\4\5\4$\n\4\3\4") + buf.write("\3\4\3\4\7\4)\n\4\f\4\16\4,\13\4\3\4\3\4\3\4\3\4\3\4\5") + buf.write("\4\63\n\4\3\5\3\5\3\5\7\58\n\5\f\5\16\5;\13\5\3\6\3\6") + buf.write("\3\6\3\6\3\6\3\6\3\6\7\6D\n\6\f\6\16\6G\13\6\3\6\3\6\5") + buf.write("\6K\n\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\5\6U\n\6\3\7\3") + buf.write("\7\3\7\6\7Z\n\7\r\7\16\7[\3\7\3\7\3\b\3\b\3\b\3\b\3\b") + buf.write("\3\b\3\b\3\b\3\b\3\b\5\bj\n\b\3\b\3\b\3\b\3\b\3\b\3\b") + buf.write("\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3") + buf.write("\b\3\b\7\b\u0081\n\b\f\b\16\b\u0084\13\b\3\t\3\t\3\t\5") + buf.write("\t\u0089\n\t\3\t\2\3\16\n\2\4\6\b\n\f\16\20\2\7\3\2\7") + buf.write("\13\3\2\n\13\3\2\7\t\3\2\30\35\3\2!\"\2\u009b\2\25\3\2") + buf.write("\2\2\4\36\3\2\2\2\6\62\3\2\2\2\b\64\3\2\2\2\nT\3\2\2\2") + buf.write("\fV\3\2\2\2\16i\3\2\2\2\20\u0088\3\2\2\2\22\24\5\4\3\2") + buf.write("\23\22\3\2\2\2\24\27\3\2\2\2\25\23\3\2\2\2\25\26\3\2\2") + buf.write("\2\26\30\3\2\2\2\27\25\3\2\2\2\30\31\7\2\2\3\31\3\3\2") + buf.write("\2\2\32\33\5\6\4\2\33\34\7\3\2\2\34\37\3\2\2\2\35\37\5") + buf.write("\n\6\2\36\32\3\2\2\2\36\35\3\2\2\2\37\5\3\2\2\2 \63\7") + buf.write("\4\2\2!#\7\5\2\2\"$\5\16\b\2#\"\3\2\2\2#$\3\2\2\2$\63") + buf.write("\3\2\2\2%&\5\b\5\2&\'\7\6\2\2\')\3\2\2\2(%\3\2\2\2),\3") + buf.write("\2\2\2*(\3\2\2\2*+\3\2\2\2+-\3\2\2\2,*\3\2\2\2-\63\5\16") + buf.write("\b\2./\7$\2\2/\60\t\2\2\2\60\61\7\6\2\2\61\63\5\16\b\2") + buf.write("\62 \3\2\2\2\62!\3\2\2\2\62*\3\2\2\2\62.\3\2\2\2\63\7") + buf.write("\3\2\2\2\649\7$\2\2\65\66\7\f\2\2\668\7$\2\2\67\65\3\2") + buf.write("\2\28;\3\2\2\29\67\3\2\2\29:\3\2\2\2:\t\3\2\2\2;9\3\2") + buf.write("\2\2<=\7\r\2\2=>\5\16\b\2>E\5\f\7\2?@\7\16\2\2@A\5\16") + buf.write("\b\2AB\5\f\7\2BD\3\2\2\2C?\3\2\2\2DG\3\2\2\2EC\3\2\2\2") + buf.write("EF\3\2\2\2FJ\3\2\2\2GE\3\2\2\2HI\7\17\2\2IK\5\f\7\2JH") + buf.write("\3\2\2\2JK\3\2\2\2KU\3\2\2\2LM\7\20\2\2MN\5\16\b\2NO\5") + buf.write("\f\7\2OU\3\2\2\2PQ\7\21\2\2QR\5\16\b\2RS\5\f\7\2SU\3\2") + buf.write("\2\2T<\3\2\2\2TL\3\2\2\2TP\3\2\2\2U\13\3\2\2\2VW\7\22") + buf.write("\2\2WY\7\23\2\2XZ\5\4\3\2YX\3\2\2\2Z[\3\2\2\2[Y\3\2\2") + buf.write("\2[\\\3\2\2\2\\]\3\2\2\2]^\7\24\2\2^\r\3\2\2\2_`\b\b\1") + buf.write("\2`j\5\20\t\2ab\7\25\2\2bc\5\16\b\2cd\7\26\2\2dj\3\2\2") + buf.write("\2ef\t\3\2\2fj\5\16\b\ngh\7\36\2\2hj\5\16\b\6i_\3\2\2") + buf.write("\2ia\3\2\2\2ie\3\2\2\2ig\3\2\2\2j\u0082\3\2\2\2kl\f\t") + buf.write("\2\2lm\t\4\2\2m\u0081\5\16\b\nno\f\b\2\2op\t\3\2\2p\u0081") + buf.write("\5\16\b\tqr\f\7\2\2rs\t\5\2\2s\u0081\5\16\b\7tu\f\5\2") + buf.write("\2uv\7\37\2\2v\u0081\5\16\b\5wx\f\4\2\2xy\7 \2\2y\u0081") + buf.write("\5\16\b\4z{\f\3\2\2{|\7\f\2\2|\u0081\5\16\b\3}~\f\13\2") + buf.write("\2~\177\7\27\2\2\177\u0081\7$\2\2\u0080k\3\2\2\2\u0080") + buf.write("n\3\2\2\2\u0080q\3\2\2\2\u0080t\3\2\2\2\u0080w\3\2\2\2") + buf.write("\u0080z\3\2\2\2\u0080}\3\2\2\2\u0081\u0084\3\2\2\2\u0082") + buf.write("\u0080\3\2\2\2\u0082\u0083\3\2\2\2\u0083\17\3\2\2\2\u0084") + buf.write("\u0082\3\2\2\2\u0085\u0089\7#\2\2\u0086\u0089\t\6\2\2") + buf.write("\u0087\u0089\7$\2\2\u0088\u0085\3\2\2\2\u0088\u0086\3") + buf.write("\2\2\2\u0088\u0087\3\2\2\2\u0089\21\3\2\2\2\20\25\36#") + buf.write("*\629EJT[i\u0080\u0082\u0088") return buf.getvalue() @@ -63,10 +72,11 @@ class PyxellParser ( Parser ): sharedContextCache = PredictionContextCache() literalNames = [ "", "';'", "'skip'", "'print'", "'='", "'*'", - "'/'", "'%'", "'+'", "'-'", "'if'", "'elif'", "'else'", - "'while'", "'until'", "'do'", "'{'", "'}'", "'('", - "')'", "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", - "'not'", "'and'", "'or'", "'true'", "'false'" ] + "'/'", "'%'", "'+'", "'-'", "','", "'if'", "'elif'", + "'else'", "'while'", "'until'", "'do'", "'{'", "'}'", + "'('", "')'", "'.'", "'=='", "'!='", "'<'", "'<='", + "'>'", "'>='", "'not'", "'and'", "'or'", "'true'", + "'false'" ] symbolicNames = [ "", "", "", "", "", "", "", "", @@ -75,19 +85,20 @@ class PyxellParser ( Parser ): "", "", "", "", "", "", "", "", "", "", "", "", - "", "", "", "INT", "ID", - "WS", "ERR" ] + "", "", "", "", + "", "INT", "ID", "WS", "ERR" ] RULE_program = 0 RULE_stmt = 1 RULE_simple_stmt = 2 - RULE_compound_stmt = 3 - RULE_block = 4 - RULE_expr = 5 - RULE_atom = 6 + RULE_lvalue = 3 + RULE_compound_stmt = 4 + RULE_block = 5 + RULE_expr = 6 + RULE_atom = 7 - ruleNames = [ "program", "stmt", "simple_stmt", "compound_stmt", "block", - "expr", "atom" ] + ruleNames = [ "program", "stmt", "simple_stmt", "lvalue", "compound_stmt", + "block", "expr", "atom" ] EOF = Token.EOF T__0=1 @@ -120,10 +131,12 @@ class PyxellParser ( Parser ): T__27=28 T__28=29 T__29=30 - INT=31 - ID=32 - WS=33 - ERR=34 + T__30=31 + T__31=32 + INT=33 + ID=34 + WS=35 + ERR=36 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -169,17 +182,17 @@ def program(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 17 + self.state = 19 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__7) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__17) | (1 << PyxellParser.T__25) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0): - self.state = 14 + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__7) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__14) | (1 << PyxellParser.T__18) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__31) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0): + self.state = 16 self.stmt() - self.state = 19 + self.state = 21 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 20 + self.state = 22 self.match(PyxellParser.EOF) except RecognitionException as re: localctx.exception = re @@ -221,19 +234,19 @@ def stmt(self): localctx = PyxellParser.StmtContext(self, self._ctx, self.state) self.enterRule(localctx, 2, self.RULE_stmt) try: - self.state = 26 + self.state = 28 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__7, PyxellParser.T__8, PyxellParser.T__17, PyxellParser.T__25, PyxellParser.T__28, PyxellParser.T__29, PyxellParser.INT, PyxellParser.ID]: + if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__7, PyxellParser.T__8, PyxellParser.T__18, PyxellParser.T__27, PyxellParser.T__30, PyxellParser.T__31, PyxellParser.INT, PyxellParser.ID]: self.enterOuterAlt(localctx, 1) - self.state = 22 + self.state = 24 self.simple_stmt() - self.state = 23 + self.state = 25 self.match(PyxellParser.T__0) pass - elif token in [PyxellParser.T__9, PyxellParser.T__12, PyxellParser.T__13]: + elif token in [PyxellParser.T__10, PyxellParser.T__13, PyxellParser.T__14]: self.enterOuterAlt(localctx, 2) - self.state = 25 + self.state = 27 self.compound_stmt() pass else: @@ -293,11 +306,12 @@ def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Sim def expr(self): return self.getTypedRuleContext(PyxellParser.ExprContext,0) - def ID(self, i:int=None): + def lvalue(self, i:int=None): if i is None: - return self.getTokens(PyxellParser.ID) + return self.getTypedRuleContexts(PyxellParser.LvalueContext) else: - return self.getToken(PyxellParser.ID, i) + return self.getTypedRuleContext(PyxellParser.LvalueContext,i) + def accept(self, visitor:ParseTreeVisitor): if hasattr( visitor, "visitStmtAssg" ): @@ -344,26 +358,26 @@ def simple_stmt(self): self.enterRule(localctx, 4, self.RULE_simple_stmt) self._la = 0 # Token type try: - self.state = 45 + self.state = 48 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,4,self._ctx) if la_ == 1: localctx = PyxellParser.StmtSkipContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 28 + self.state = 30 self.match(PyxellParser.T__1) pass elif la_ == 2: localctx = PyxellParser.StmtPrintContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 29 - self.match(PyxellParser.T__2) self.state = 31 + self.match(PyxellParser.T__2) + self.state = 33 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__7) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__17) | (1 << PyxellParser.T__25) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0): - self.state = 30 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__7) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__18) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__31) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0): + self.state = 32 self.expr(0) @@ -372,29 +386,29 @@ def simple_stmt(self): elif la_ == 3: localctx = PyxellParser.StmtAssgContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 37 + self.state = 40 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,3,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 33 - self.match(PyxellParser.ID) - self.state = 34 + self.state = 35 + self.lvalue() + self.state = 36 self.match(PyxellParser.T__3) - self.state = 39 + self.state = 42 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,3,self._ctx) - self.state = 40 + self.state = 43 self.expr(0) pass elif la_ == 4: localctx = PyxellParser.StmtAssgExprContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 41 + self.state = 44 self.match(PyxellParser.ID) - self.state = 42 + self.state = 45 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__4) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__7) | (1 << PyxellParser.T__8))) != 0)): @@ -402,9 +416,9 @@ def simple_stmt(self): else: self._errHandler.reportMatch(self) self.consume() - self.state = 43 + self.state = 46 self.match(PyxellParser.T__3) - self.state = 44 + self.state = 47 self.expr(0) pass @@ -418,6 +432,60 @@ def simple_stmt(self): return localctx + class LvalueContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def ID(self, i:int=None): + if i is None: + return self.getTokens(PyxellParser.ID) + else: + return self.getToken(PyxellParser.ID, i) + + def getRuleIndex(self): + return PyxellParser.RULE_lvalue + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLvalue" ): + return visitor.visitLvalue(self) + else: + return visitor.visitChildren(self) + + + + + def lvalue(self): + + localctx = PyxellParser.LvalueContext(self, self._ctx, self.state) + self.enterRule(localctx, 6, self.RULE_lvalue) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 50 + self.match(PyxellParser.ID) + self.state = 55 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==PyxellParser.T__9: + self.state = 51 + self.match(PyxellParser.T__9) + self.state = 52 + self.match(PyxellParser.ID) + self.state = 57 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Compound_stmtContext(ParserRuleContext): def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): @@ -504,64 +572,64 @@ def accept(self, visitor:ParseTreeVisitor): def compound_stmt(self): localctx = PyxellParser.Compound_stmtContext(self, self._ctx, self.state) - self.enterRule(localctx, 6, self.RULE_compound_stmt) + self.enterRule(localctx, 8, self.RULE_compound_stmt) self._la = 0 # Token type try: - self.state = 71 + self.state = 82 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__9]: + if token in [PyxellParser.T__10]: localctx = PyxellParser.StmtIfContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 47 - self.match(PyxellParser.T__9) - self.state = 48 + self.state = 58 + self.match(PyxellParser.T__10) + self.state = 59 self.expr(0) - self.state = 49 + self.state = 60 self.block() - self.state = 56 + self.state = 67 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==PyxellParser.T__10: - self.state = 50 - self.match(PyxellParser.T__10) - self.state = 51 + while _la==PyxellParser.T__11: + self.state = 61 + self.match(PyxellParser.T__11) + self.state = 62 self.expr(0) - self.state = 52 + self.state = 63 self.block() - self.state = 58 + self.state = 69 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 61 + self.state = 72 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__11: - self.state = 59 - self.match(PyxellParser.T__11) - self.state = 60 + if _la==PyxellParser.T__12: + self.state = 70 + self.match(PyxellParser.T__12) + self.state = 71 self.block() pass - elif token in [PyxellParser.T__12]: + elif token in [PyxellParser.T__13]: localctx = PyxellParser.StmtWhileContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 63 - self.match(PyxellParser.T__12) - self.state = 64 + self.state = 74 + self.match(PyxellParser.T__13) + self.state = 75 self.expr(0) - self.state = 65 + self.state = 76 self.block() pass - elif token in [PyxellParser.T__13]: + elif token in [PyxellParser.T__14]: localctx = PyxellParser.StmtUntilContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 67 - self.match(PyxellParser.T__13) - self.state = 68 + self.state = 78 + self.match(PyxellParser.T__14) + self.state = 79 self.expr(0) - self.state = 69 + self.state = 80 self.block() pass else: @@ -604,28 +672,28 @@ def accept(self, visitor:ParseTreeVisitor): def block(self): localctx = PyxellParser.BlockContext(self, self._ctx, self.state) - self.enterRule(localctx, 8, self.RULE_block) + self.enterRule(localctx, 10, self.RULE_block) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 73 - self.match(PyxellParser.T__14) - self.state = 74 + self.state = 84 self.match(PyxellParser.T__15) - self.state = 76 + self.state = 85 + self.match(PyxellParser.T__16) + self.state = 87 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 75 + self.state = 86 self.stmt() - self.state = 78 + self.state = 89 self._errHandler.sync(self) _la = self._input.LA(1) - if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__7) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__17) | (1 << PyxellParser.T__25) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0)): + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__7) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__14) | (1 << PyxellParser.T__18) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__31) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0)): break - self.state = 80 - self.match(PyxellParser.T__16) + self.state = 91 + self.match(PyxellParser.T__17) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -689,6 +757,26 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) + class ExprTupleContext(ExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext + super().__init__(parser) + self.copyFrom(ctx) + + def expr(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(PyxellParser.ExprContext) + else: + return self.getTypedRuleContext(PyxellParser.ExprContext,i) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExprTuple" ): + return visitor.visitExprTuple(self) + else: + return visitor.visitChildren(self) + + class ExprAtomContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext @@ -706,6 +794,25 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) + class ExprAttrContext(ExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext + super().__init__(parser) + self.copyFrom(ctx) + + def expr(self): + return self.getTypedRuleContext(PyxellParser.ExprContext,0) + + def ID(self): + return self.getToken(PyxellParser.ID, 0) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExprAttr" ): + return visitor.visitExprAttr(self) + else: + return visitor.visitChildren(self) + + class ExprParenthesesContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext @@ -771,38 +878,38 @@ def expr(self, _p:int=0): _parentState = self.state localctx = PyxellParser.ExprContext(self, self._ctx, _parentState) _prevctx = localctx - _startState = 10 - self.enterRecursionRule(localctx, 10, self.RULE_expr, _p) + _startState = 12 + self.enterRecursionRule(localctx, 12, self.RULE_expr, _p) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 92 + self.state = 103 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__28, PyxellParser.T__29, PyxellParser.INT, PyxellParser.ID]: + if token in [PyxellParser.T__30, PyxellParser.T__31, PyxellParser.INT, PyxellParser.ID]: localctx = PyxellParser.ExprAtomContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 83 + self.state = 94 self.atom() pass - elif token in [PyxellParser.T__17]: + elif token in [PyxellParser.T__18]: localctx = PyxellParser.ExprParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 84 - self.match(PyxellParser.T__17) - self.state = 85 - self.expr(0) - self.state = 86 + self.state = 95 self.match(PyxellParser.T__18) + self.state = 96 + self.expr(0) + self.state = 97 + self.match(PyxellParser.T__19) pass elif token in [PyxellParser.T__7, PyxellParser.T__8]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 88 + self.state = 99 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__7 or _la==PyxellParser.T__8): @@ -810,41 +917,41 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 89 - self.expr(7) + self.state = 100 + self.expr(8) pass - elif token in [PyxellParser.T__25]: + elif token in [PyxellParser.T__27]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 90 - localctx.op = self.match(PyxellParser.T__25) - self.state = 91 - self.expr(3) + self.state = 101 + localctx.op = self.match(PyxellParser.T__27) + self.state = 102 + self.expr(4) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 111 + self.state = 128 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,11,self._ctx) + _alt = self._interp.adaptivePredict(self._input,12,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 109 + self.state = 126 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,10,self._ctx) + la_ = self._interp.adaptivePredict(self._input,11,self._ctx) if la_ == 1: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 94 - if not self.precpred(self._ctx, 6): + self.state = 105 + if not self.precpred(self._ctx, 7): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") - self.state = 95 + raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") + self.state = 106 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__4) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6))) != 0)): @@ -852,18 +959,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 96 - self.expr(7) + self.state = 107 + self.expr(8) pass elif la_ == 2: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 97 - if not self.precpred(self._ctx, 5): + self.state = 108 + if not self.precpred(self._ctx, 6): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") - self.state = 98 + raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") + self.state = 109 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__7 or _la==PyxellParser.T__8): @@ -871,59 +978,85 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 99 - self.expr(6) + self.state = 110 + self.expr(7) pass elif la_ == 3: localctx = PyxellParser.ExprCmpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 100 - if not self.precpred(self._ctx, 4): + self.state = 111 + if not self.precpred(self._ctx, 5): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") - self.state = 101 + raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") + self.state = 112 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__24))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__25) | (1 << PyxellParser.T__26))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 102 - self.expr(4) + self.state = 113 + self.expr(5) pass elif la_ == 4: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 103 + self.state = 114 + if not self.precpred(self._ctx, 3): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") + self.state = 115 + localctx.op = self.match(PyxellParser.T__28) + self.state = 116 + self.expr(3) + pass + + elif la_ == 5: + localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) + self.state = 117 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 104 - localctx.op = self.match(PyxellParser.T__26) - self.state = 105 + self.state = 118 + localctx.op = self.match(PyxellParser.T__29) + self.state = 119 self.expr(2) pass - elif la_ == 5: - localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + elif la_ == 6: + localctx = PyxellParser.ExprTupleContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 106 + self.state = 120 if not self.precpred(self._ctx, 1): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") - self.state = 107 - localctx.op = self.match(PyxellParser.T__27) - self.state = 108 + self.state = 121 + self.match(PyxellParser.T__9) + self.state = 122 self.expr(1) pass + elif la_ == 7: + localctx = PyxellParser.ExprAttrContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) + self.state = 123 + if not self.precpred(self._ctx, 9): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") + self.state = 124 + self.match(PyxellParser.T__20) + self.state = 125 + self.match(PyxellParser.ID) + pass + - self.state = 113 + self.state = 130 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,11,self._ctx) + _alt = self._interp.adaptivePredict(self._input,12,self._ctx) except RecognitionException as re: localctx.exception = re @@ -1000,24 +1133,24 @@ def accept(self, visitor:ParseTreeVisitor): def atom(self): localctx = PyxellParser.AtomContext(self, self._ctx, self.state) - self.enterRule(localctx, 12, self.RULE_atom) + self.enterRule(localctx, 14, self.RULE_atom) self._la = 0 # Token type try: - self.state = 117 + self.state = 134 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: localctx = PyxellParser.AtomIntContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 114 + self.state = 131 self.match(PyxellParser.INT) pass - elif token in [PyxellParser.T__28, PyxellParser.T__29]: + elif token in [PyxellParser.T__30, PyxellParser.T__31]: localctx = PyxellParser.AtomBoolContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 115 + self.state = 132 _la = self._input.LA(1) - if not(_la==PyxellParser.T__28 or _la==PyxellParser.T__29): + if not(_la==PyxellParser.T__30 or _la==PyxellParser.T__31): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -1026,7 +1159,7 @@ def atom(self): elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 116 + self.state = 133 self.match(PyxellParser.ID) pass else: @@ -1045,7 +1178,7 @@ def atom(self): def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): if self._predicates == None: self._predicates = dict() - self._predicates[5] = self.expr_sempred + self._predicates[6] = self.expr_sempred pred = self._predicates.get(ruleIndex, None) if pred is None: raise Exception("No predicate with index:" + str(ruleIndex)) @@ -1054,25 +1187,33 @@ def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): def expr_sempred(self, localctx:ExprContext, predIndex:int): if predIndex == 0: - return self.precpred(self._ctx, 6) + return self.precpred(self._ctx, 7) if predIndex == 1: - return self.precpred(self._ctx, 5) + return self.precpred(self._ctx, 6) if predIndex == 2: - return self.precpred(self._ctx, 4) + return self.precpred(self._ctx, 5) if predIndex == 3: - return self.precpred(self._ctx, 2) + return self.precpred(self._ctx, 3) if predIndex == 4: + return self.precpred(self._ctx, 2) + + + if predIndex == 5: return self.precpred(self._ctx, 1) + if predIndex == 6: + return self.precpred(self._ctx, 9) + + diff --git a/src/antlr/PyxellVisitor.py b/src/antlr/PyxellVisitor.py index af27d09b..0a8ea533 100644 --- a/src/antlr/PyxellVisitor.py +++ b/src/antlr/PyxellVisitor.py @@ -39,6 +39,11 @@ def visitStmtAssgExpr(self, ctx:PyxellParser.StmtAssgExprContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#lvalue. + def visitLvalue(self, ctx:PyxellParser.LvalueContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#StmtIf. def visitStmtIf(self, ctx:PyxellParser.StmtIfContext): return self.visitChildren(ctx) @@ -69,11 +74,21 @@ def visitExprCmp(self, ctx:PyxellParser.ExprCmpContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#ExprTuple. + def visitExprTuple(self, ctx:PyxellParser.ExprTupleContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#ExprAtom. def visitExprAtom(self, ctx:PyxellParser.ExprAtomContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#ExprAttr. + def visitExprAttr(self, ctx:PyxellParser.ExprAttrContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#ExprParentheses. def visitExprParentheses(self, ctx:PyxellParser.ExprParenthesesContext): return self.visitChildren(ctx) diff --git a/src/compiler.py b/src/compiler.py index dbcee7b0..eb89cf60 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -14,6 +14,7 @@ def __init__(self): self.builder = ll.IRBuilder() self.module = ll.Module() self.builtins = { + 'malloc': ll.Function(self.module, tFunc([tInt], tPtr()), 'malloc'), 'writeInt': ll.Function(self.module, tFunc([tInt]), 'func.writeInt'), 'writeBool': ll.Function(self.module, tFunc([tBool]), 'func.writeBool'), 'putchar': ll.Function(self.module, tFunc([tChar]), 'putchar'), @@ -72,10 +73,26 @@ def cmp(self, ctx, op, left, right): if left.type != right.type: self.throw(ctx, err.NotComparable(left.type, right.type)) - if left.type == tBool: + if left.type == tInt: + return self.builder.icmp_signed(op, left, right) + elif left.type == tBool: return self.builder.icmp_unsigned(op, left, right) else: - return self.builder.icmp_signed(op, left, right) + self.throw(ctx, err.NotComparable(left.type, right.type)) + + def print(self, ctx, value): + if value.type == tInt: + self.builder.call(self.builtins['writeInt'], [value]) + elif value.type == tBool: + self.builder.call(self.builtins['writeBool'], [value]) + elif value.type.isTuple(): + for i in range(len(value.type.elements)): + if i > 0: + self.builder.call(self.builtins['putchar'], [vChar(' ')]) + elem = self.builder.extract_value(value, [i]) + self.print(ctx, elem) + else: + self.throw(ctx, err.NotPrintable(value.type)) ### Program ### @@ -95,19 +112,32 @@ def visitStmtPrint(self, ctx): expr = ctx.expr() if expr: value = self.visit(expr) - if value.type == tInt: - self.builder.call(self.builtins['writeInt'], [value]) - elif value.type == tBool: - self.builder.call(self.builtins['writeBool'], [value]) - else: - self.throw(expr, err.NotPrintable(value.type)) + self.print(expr, value) - self.builder.call(self.builtins['putchar'], [ll.Constant(tChar, ord('\n'))]) + self.builder.call(self.builtins['putchar'], [vChar('\n')]) def visitStmtAssg(self, ctx): value = self.visit(ctx.expr()) - for id in ctx.ID(): - self.assign(ctx, id, value) + + for lvalue in ctx.lvalue(): + ids = self.visit(lvalue) + len1 = len(ids) + + if value.type.isTuple(): + len2 = len(value.type.elements) + if len1 > 1 and len1 != len2: + self.throw(ctx, err.CannotUnpack(value.type, len1)) + elif len1 > 1: + self.throw(ctx, err.CannotUnpack(value.type, len1)) + + if len1 == 1: + self.assign(ctx, ids[0], value) + else: + for i, id in enumerate(ids): + self.assign(ctx, id, self.builder.extract_value(value, [i])) + + def visitLvalue(self, ctx): + return ctx.ID() def visitStmtAssgExpr(self, ctx): var = self.get(ctx, ctx.ID()) @@ -195,6 +225,22 @@ def visitStmtUntil(self, ctx): def visitExprParentheses(self, ctx): return self.visit(ctx.expr()) + def visitExprAttr(self, ctx): + value = self.visit(ctx.expr()) + id = str(ctx.ID()) + + if value.type.isTuple(): + if len(id) > 1: + self.throw(ctx, err.NoAttribute(value.type, id)) + + index = ord(id) - ord('a') + if not 0 <= index < len(value.type.elements): + self.throw(ctx, err.NoAttribute(value.type, id)) + + return self.builder.extract_value(value, [index]) + + self.throw(ctx, err.NoAttribute(value.type, id)) + def visitExprUnaryOp(self, ctx): value = self.visit(ctx.expr()) op = ctx.op.text @@ -216,9 +262,8 @@ def visitExprBinaryOp(self, ctx): return self.binop(ctx, ctx.op.text, self.visit(ctx.expr(0)), self.visit(ctx.expr(1))) def visitExprCmp(self, ctx): - ops = [] exprs = [] - + ops = [] while True: exprs.append(ctx.expr(0)) ops.append(ctx.op.text) @@ -289,14 +334,39 @@ def visitExprLogicalOp(self, ctx): return phi + def visitExprTuple(self, ctx): + exprs = [] + while True: + exprs.append(ctx.expr(0)) + if not isinstance(ctx.expr(1), PyxellParser.ExprTupleContext): + break + ctx = ctx.expr(1) + exprs.append(ctx.expr(1)) + + values = [self.visit(expr) for expr in exprs] + type = tTuple(value.type for value in values) + + size = self.builder.gep(vNull(type), [vIndex(1)]) + size = self.builder.ptrtoint(size, tInt) + + tuple = self.builder.call(self.builtins['malloc'], [size]) + tuple = self.builder.bitcast(tuple, tPtr(type)) + + for i, value in enumerate(values): + ptr = self.builder.gep(tuple, [vIndex(0), vIndex(i)]) + self.builder.store(value, ptr) + + return self.builder.load(tuple) + + ### Atoms ### def visitAtomInt(self, ctx): - return ll.Constant(tInt, ctx.INT()) + return vInt(ctx.INT()) def visitAtomBool(self, ctx): - return ll.Constant(tBool, int(ctx.getText() == 'true')) + return vBool(ctx.getText() == 'true') def visitAtomId(self, ctx): return self.builder.load(self.get(ctx, ctx.ID())) diff --git a/src/errors.py b/src/errors.py index 38143cc1..d60f55be 100644 --- a/src/errors.py +++ b/src/errors.py @@ -10,9 +10,11 @@ def syntaxError(self, recognizer, offendingSymbol, line, column, msg, e): class PyxellError(Exception): + CannotUnpack = lambda t, n: f"Cannot unpack value of type `{t.show()}` into {n} values" IllegalAssignment = lambda t1, t2: f"Illegal assignment from `{t1.show()}` to `{t2.show()}`" InvalidIndentation = lambda: f"Indentation error" InvalidSyntax = lambda: f"Syntax error" + NoAttribute = lambda t, id: f"Type `{t.show()}` has no attribute `{id}`" NoBinaryOperator = lambda op, t1, t2: f"No binary operator `{op}` defined for `{t1.show()}` and `{t2.show()}`" NoUnaryOperator = lambda op, t: f"No unary operator `{op}` defined for `{t.show()}`" NotComparable = lambda t1, t2: f"Cannot compare `{t1.show()}` with `{t2.show()}`" diff --git a/src/types.py b/src/types.py index 8749b1ae..f8d0edd0 100644 --- a/src/types.py +++ b/src/types.py @@ -7,9 +7,23 @@ tBool = ll.IntType(1) tChar = ll.IntType(8) +def tTuple(elements): + type = ll.LiteralStructType(elements) + type.kind = 'tuple' + return type + def tFunc(args, ret=tVoid): return ll.FunctionType(ret, args) +def tPtr(type=tChar): + return type.as_pointer() + + +def isTuple(type): + return getattr(type, 'kind', None) == 'tuple' + +ll.Type.isTuple = isTuple + def showType(type): if type == tVoid: @@ -20,10 +34,27 @@ def showType(type): return 'Bool' if type == tChar: return 'Char' + if type.isTuple(): + return '*'.join(t.show() for t in type.elements) return str(type) ll.Type.show = showType -vFalse = ll.Constant(tBool, 0) -vTrue = ll.Constant(tBool, 1) +def vInt(n): + return ll.Constant(tInt, n) + +def vBool(b): + return ll.Constant(tBool, int(b)) + +vFalse = vBool(False) +vTrue = vBool(True) + +def vChar(c): + return ll.Constant(tChar, ord(c)) + +def vNull(type=tChar): + return ll.Constant(tPtr(type), 'null') + +def vIndex(i): + return ll.Constant(ll.IntType(32), i) diff --git a/test/bad/tuples/tuple07.err b/test/bad/tuples/tuple07.err new file mode 100644 index 00000000..0e477bc4 --- /dev/null +++ b/test/bad/tuples/tuple07.err @@ -0,0 +1 @@ +Type `Int*Int` has no attribute `ab`. \ No newline at end of file diff --git a/test/bad/tuples/tuple07.px b/test/bad/tuples/tuple07.px new file mode 100644 index 00000000..63f81c99 --- /dev/null +++ b/test/bad/tuples/tuple07.px @@ -0,0 +1,2 @@ + +(1, 2).ab From 9a0048eda74a7d1213f9a302e0ab1c8c25c0b561 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sun, 6 Oct 2019 18:48:29 +0200 Subject: [PATCH 012/100] Bitwise operators --- src/Pyxell.g4 | 8 +- src/antlr/Pyxell.interp | 14 +- src/antlr/Pyxell.tokens | 66 ++++--- src/antlr/PyxellLexer.interp | 20 +- src/antlr/PyxellLexer.py | 189 ++++++++++--------- src/antlr/PyxellLexer.tokens | 66 ++++--- src/antlr/PyxellParser.py | 343 ++++++++++++++++++++++------------- src/compiler.py | 43 +++-- 8 files changed, 461 insertions(+), 288 deletions(-) diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index fdf51220..bdf2017a 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -13,7 +13,7 @@ simple_stmt : 'skip' # StmtSkip | 'print' expr? # StmtPrint | (lvalue '=')* expr # StmtAssg - | ID op=('*' | '/' | '%' | '+' | '-') '=' expr # StmtAssgExpr + | ID op=('*' | '/' | '%' | '+' | '-' | '<<' | '>>' | '&' | '$' | '|') '=' expr # StmtAssgExpr ; lvalue @@ -34,9 +34,13 @@ expr : atom # ExprAtom | '(' expr ')' # ExprParentheses | expr '.' ID # ExprAttr - | op=('+' | '-') expr # ExprUnaryOp + | op=('+' | '-' | '~') expr # ExprUnaryOp | expr op=('*' | '/' | '%') expr # ExprBinaryOp | expr op=('+' | '-') expr # ExprBinaryOp + | expr op=('<<' | '>>') expr # ExprBinaryOp + | expr op='&' expr # ExprBinaryOp + | expr op='$' expr # ExprBinaryOp + | expr op='|' expr # ExprBinaryOp | expr op=('==' | '!=' | '<' | '<=' | '>' | '>=') expr # ExprCmp | op='not' expr # ExprUnaryOp | expr op='and' expr # ExprLogicalOp diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index 2c24c49e..585b8111 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -9,6 +9,11 @@ null '%' '+' '-' +'<<' +'>>' +'&' +'$' +'|' ',' 'if' 'elif' @@ -21,6 +26,7 @@ null '(' ')' '.' +'~' '==' '!=' '<' @@ -71,6 +77,12 @@ null null null null +null +null +null +null +null +null INT ID WS @@ -88,4 +100,4 @@ atom atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 38, 139, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 3, 2, 7, 2, 20, 10, 2, 12, 2, 14, 2, 23, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 31, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 36, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 41, 10, 4, 12, 4, 14, 4, 44, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 51, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 56, 10, 5, 12, 5, 14, 5, 59, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 68, 10, 6, 12, 6, 14, 6, 71, 11, 6, 3, 6, 3, 6, 5, 6, 75, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 85, 10, 6, 3, 7, 3, 7, 3, 7, 6, 7, 90, 10, 7, 13, 7, 14, 7, 91, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 106, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 129, 10, 8, 12, 8, 14, 8, 132, 11, 8, 3, 9, 3, 9, 3, 9, 5, 9, 137, 10, 9, 3, 9, 2, 3, 14, 10, 2, 4, 6, 8, 10, 12, 14, 16, 2, 7, 3, 2, 7, 11, 3, 2, 10, 11, 3, 2, 7, 9, 3, 2, 24, 29, 3, 2, 33, 34, 2, 155, 2, 21, 3, 2, 2, 2, 4, 30, 3, 2, 2, 2, 6, 50, 3, 2, 2, 2, 8, 52, 3, 2, 2, 2, 10, 84, 3, 2, 2, 2, 12, 86, 3, 2, 2, 2, 14, 105, 3, 2, 2, 2, 16, 136, 3, 2, 2, 2, 18, 20, 5, 4, 3, 2, 19, 18, 3, 2, 2, 2, 20, 23, 3, 2, 2, 2, 21, 19, 3, 2, 2, 2, 21, 22, 3, 2, 2, 2, 22, 24, 3, 2, 2, 2, 23, 21, 3, 2, 2, 2, 24, 25, 7, 2, 2, 3, 25, 3, 3, 2, 2, 2, 26, 27, 5, 6, 4, 2, 27, 28, 7, 3, 2, 2, 28, 31, 3, 2, 2, 2, 29, 31, 5, 10, 6, 2, 30, 26, 3, 2, 2, 2, 30, 29, 3, 2, 2, 2, 31, 5, 3, 2, 2, 2, 32, 51, 7, 4, 2, 2, 33, 35, 7, 5, 2, 2, 34, 36, 5, 14, 8, 2, 35, 34, 3, 2, 2, 2, 35, 36, 3, 2, 2, 2, 36, 51, 3, 2, 2, 2, 37, 38, 5, 8, 5, 2, 38, 39, 7, 6, 2, 2, 39, 41, 3, 2, 2, 2, 40, 37, 3, 2, 2, 2, 41, 44, 3, 2, 2, 2, 42, 40, 3, 2, 2, 2, 42, 43, 3, 2, 2, 2, 43, 45, 3, 2, 2, 2, 44, 42, 3, 2, 2, 2, 45, 51, 5, 14, 8, 2, 46, 47, 7, 36, 2, 2, 47, 48, 9, 2, 2, 2, 48, 49, 7, 6, 2, 2, 49, 51, 5, 14, 8, 2, 50, 32, 3, 2, 2, 2, 50, 33, 3, 2, 2, 2, 50, 42, 3, 2, 2, 2, 50, 46, 3, 2, 2, 2, 51, 7, 3, 2, 2, 2, 52, 57, 7, 36, 2, 2, 53, 54, 7, 12, 2, 2, 54, 56, 7, 36, 2, 2, 55, 53, 3, 2, 2, 2, 56, 59, 3, 2, 2, 2, 57, 55, 3, 2, 2, 2, 57, 58, 3, 2, 2, 2, 58, 9, 3, 2, 2, 2, 59, 57, 3, 2, 2, 2, 60, 61, 7, 13, 2, 2, 61, 62, 5, 14, 8, 2, 62, 69, 5, 12, 7, 2, 63, 64, 7, 14, 2, 2, 64, 65, 5, 14, 8, 2, 65, 66, 5, 12, 7, 2, 66, 68, 3, 2, 2, 2, 67, 63, 3, 2, 2, 2, 68, 71, 3, 2, 2, 2, 69, 67, 3, 2, 2, 2, 69, 70, 3, 2, 2, 2, 70, 74, 3, 2, 2, 2, 71, 69, 3, 2, 2, 2, 72, 73, 7, 15, 2, 2, 73, 75, 5, 12, 7, 2, 74, 72, 3, 2, 2, 2, 74, 75, 3, 2, 2, 2, 75, 85, 3, 2, 2, 2, 76, 77, 7, 16, 2, 2, 77, 78, 5, 14, 8, 2, 78, 79, 5, 12, 7, 2, 79, 85, 3, 2, 2, 2, 80, 81, 7, 17, 2, 2, 81, 82, 5, 14, 8, 2, 82, 83, 5, 12, 7, 2, 83, 85, 3, 2, 2, 2, 84, 60, 3, 2, 2, 2, 84, 76, 3, 2, 2, 2, 84, 80, 3, 2, 2, 2, 85, 11, 3, 2, 2, 2, 86, 87, 7, 18, 2, 2, 87, 89, 7, 19, 2, 2, 88, 90, 5, 4, 3, 2, 89, 88, 3, 2, 2, 2, 90, 91, 3, 2, 2, 2, 91, 89, 3, 2, 2, 2, 91, 92, 3, 2, 2, 2, 92, 93, 3, 2, 2, 2, 93, 94, 7, 20, 2, 2, 94, 13, 3, 2, 2, 2, 95, 96, 8, 8, 1, 2, 96, 106, 5, 16, 9, 2, 97, 98, 7, 21, 2, 2, 98, 99, 5, 14, 8, 2, 99, 100, 7, 22, 2, 2, 100, 106, 3, 2, 2, 2, 101, 102, 9, 3, 2, 2, 102, 106, 5, 14, 8, 10, 103, 104, 7, 30, 2, 2, 104, 106, 5, 14, 8, 6, 105, 95, 3, 2, 2, 2, 105, 97, 3, 2, 2, 2, 105, 101, 3, 2, 2, 2, 105, 103, 3, 2, 2, 2, 106, 130, 3, 2, 2, 2, 107, 108, 12, 9, 2, 2, 108, 109, 9, 4, 2, 2, 109, 129, 5, 14, 8, 10, 110, 111, 12, 8, 2, 2, 111, 112, 9, 3, 2, 2, 112, 129, 5, 14, 8, 9, 113, 114, 12, 7, 2, 2, 114, 115, 9, 5, 2, 2, 115, 129, 5, 14, 8, 7, 116, 117, 12, 5, 2, 2, 117, 118, 7, 31, 2, 2, 118, 129, 5, 14, 8, 5, 119, 120, 12, 4, 2, 2, 120, 121, 7, 32, 2, 2, 121, 129, 5, 14, 8, 4, 122, 123, 12, 3, 2, 2, 123, 124, 7, 12, 2, 2, 124, 129, 5, 14, 8, 3, 125, 126, 12, 11, 2, 2, 126, 127, 7, 23, 2, 2, 127, 129, 7, 36, 2, 2, 128, 107, 3, 2, 2, 2, 128, 110, 3, 2, 2, 2, 128, 113, 3, 2, 2, 2, 128, 116, 3, 2, 2, 2, 128, 119, 3, 2, 2, 2, 128, 122, 3, 2, 2, 2, 128, 125, 3, 2, 2, 2, 129, 132, 3, 2, 2, 2, 130, 128, 3, 2, 2, 2, 130, 131, 3, 2, 2, 2, 131, 15, 3, 2, 2, 2, 132, 130, 3, 2, 2, 2, 133, 137, 7, 35, 2, 2, 134, 137, 9, 6, 2, 2, 135, 137, 7, 36, 2, 2, 136, 133, 3, 2, 2, 2, 136, 134, 3, 2, 2, 2, 136, 135, 3, 2, 2, 2, 137, 17, 3, 2, 2, 2, 16, 21, 30, 35, 42, 50, 57, 69, 74, 84, 91, 105, 128, 130, 136] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 44, 151, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 3, 2, 7, 2, 20, 10, 2, 12, 2, 14, 2, 23, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 31, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 36, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 41, 10, 4, 12, 4, 14, 4, 44, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 51, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 56, 10, 5, 12, 5, 14, 5, 59, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 68, 10, 6, 12, 6, 14, 6, 71, 11, 6, 3, 6, 3, 6, 5, 6, 75, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 85, 10, 6, 3, 7, 3, 7, 3, 7, 6, 7, 90, 10, 7, 13, 7, 14, 7, 91, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 106, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 141, 10, 8, 12, 8, 14, 8, 144, 11, 8, 3, 9, 3, 9, 3, 9, 5, 9, 149, 10, 9, 3, 9, 2, 3, 14, 10, 2, 4, 6, 8, 10, 12, 14, 16, 2, 9, 3, 2, 7, 16, 4, 2, 10, 11, 29, 29, 3, 2, 7, 9, 3, 2, 10, 11, 3, 2, 12, 13, 3, 2, 30, 35, 3, 2, 39, 40, 2, 171, 2, 21, 3, 2, 2, 2, 4, 30, 3, 2, 2, 2, 6, 50, 3, 2, 2, 2, 8, 52, 3, 2, 2, 2, 10, 84, 3, 2, 2, 2, 12, 86, 3, 2, 2, 2, 14, 105, 3, 2, 2, 2, 16, 148, 3, 2, 2, 2, 18, 20, 5, 4, 3, 2, 19, 18, 3, 2, 2, 2, 20, 23, 3, 2, 2, 2, 21, 19, 3, 2, 2, 2, 21, 22, 3, 2, 2, 2, 22, 24, 3, 2, 2, 2, 23, 21, 3, 2, 2, 2, 24, 25, 7, 2, 2, 3, 25, 3, 3, 2, 2, 2, 26, 27, 5, 6, 4, 2, 27, 28, 7, 3, 2, 2, 28, 31, 3, 2, 2, 2, 29, 31, 5, 10, 6, 2, 30, 26, 3, 2, 2, 2, 30, 29, 3, 2, 2, 2, 31, 5, 3, 2, 2, 2, 32, 51, 7, 4, 2, 2, 33, 35, 7, 5, 2, 2, 34, 36, 5, 14, 8, 2, 35, 34, 3, 2, 2, 2, 35, 36, 3, 2, 2, 2, 36, 51, 3, 2, 2, 2, 37, 38, 5, 8, 5, 2, 38, 39, 7, 6, 2, 2, 39, 41, 3, 2, 2, 2, 40, 37, 3, 2, 2, 2, 41, 44, 3, 2, 2, 2, 42, 40, 3, 2, 2, 2, 42, 43, 3, 2, 2, 2, 43, 45, 3, 2, 2, 2, 44, 42, 3, 2, 2, 2, 45, 51, 5, 14, 8, 2, 46, 47, 7, 42, 2, 2, 47, 48, 9, 2, 2, 2, 48, 49, 7, 6, 2, 2, 49, 51, 5, 14, 8, 2, 50, 32, 3, 2, 2, 2, 50, 33, 3, 2, 2, 2, 50, 42, 3, 2, 2, 2, 50, 46, 3, 2, 2, 2, 51, 7, 3, 2, 2, 2, 52, 57, 7, 42, 2, 2, 53, 54, 7, 17, 2, 2, 54, 56, 7, 42, 2, 2, 55, 53, 3, 2, 2, 2, 56, 59, 3, 2, 2, 2, 57, 55, 3, 2, 2, 2, 57, 58, 3, 2, 2, 2, 58, 9, 3, 2, 2, 2, 59, 57, 3, 2, 2, 2, 60, 61, 7, 18, 2, 2, 61, 62, 5, 14, 8, 2, 62, 69, 5, 12, 7, 2, 63, 64, 7, 19, 2, 2, 64, 65, 5, 14, 8, 2, 65, 66, 5, 12, 7, 2, 66, 68, 3, 2, 2, 2, 67, 63, 3, 2, 2, 2, 68, 71, 3, 2, 2, 2, 69, 67, 3, 2, 2, 2, 69, 70, 3, 2, 2, 2, 70, 74, 3, 2, 2, 2, 71, 69, 3, 2, 2, 2, 72, 73, 7, 20, 2, 2, 73, 75, 5, 12, 7, 2, 74, 72, 3, 2, 2, 2, 74, 75, 3, 2, 2, 2, 75, 85, 3, 2, 2, 2, 76, 77, 7, 21, 2, 2, 77, 78, 5, 14, 8, 2, 78, 79, 5, 12, 7, 2, 79, 85, 3, 2, 2, 2, 80, 81, 7, 22, 2, 2, 81, 82, 5, 14, 8, 2, 82, 83, 5, 12, 7, 2, 83, 85, 3, 2, 2, 2, 84, 60, 3, 2, 2, 2, 84, 76, 3, 2, 2, 2, 84, 80, 3, 2, 2, 2, 85, 11, 3, 2, 2, 2, 86, 87, 7, 23, 2, 2, 87, 89, 7, 24, 2, 2, 88, 90, 5, 4, 3, 2, 89, 88, 3, 2, 2, 2, 90, 91, 3, 2, 2, 2, 91, 89, 3, 2, 2, 2, 91, 92, 3, 2, 2, 2, 92, 93, 3, 2, 2, 2, 93, 94, 7, 25, 2, 2, 94, 13, 3, 2, 2, 2, 95, 96, 8, 8, 1, 2, 96, 106, 5, 16, 9, 2, 97, 98, 7, 26, 2, 2, 98, 99, 5, 14, 8, 2, 99, 100, 7, 27, 2, 2, 100, 106, 3, 2, 2, 2, 101, 102, 9, 3, 2, 2, 102, 106, 5, 14, 8, 14, 103, 104, 7, 36, 2, 2, 104, 106, 5, 14, 8, 6, 105, 95, 3, 2, 2, 2, 105, 97, 3, 2, 2, 2, 105, 101, 3, 2, 2, 2, 105, 103, 3, 2, 2, 2, 106, 142, 3, 2, 2, 2, 107, 108, 12, 13, 2, 2, 108, 109, 9, 4, 2, 2, 109, 141, 5, 14, 8, 14, 110, 111, 12, 12, 2, 2, 111, 112, 9, 5, 2, 2, 112, 141, 5, 14, 8, 13, 113, 114, 12, 11, 2, 2, 114, 115, 9, 6, 2, 2, 115, 141, 5, 14, 8, 12, 116, 117, 12, 10, 2, 2, 117, 118, 7, 14, 2, 2, 118, 141, 5, 14, 8, 11, 119, 120, 12, 9, 2, 2, 120, 121, 7, 15, 2, 2, 121, 141, 5, 14, 8, 10, 122, 123, 12, 8, 2, 2, 123, 124, 7, 16, 2, 2, 124, 141, 5, 14, 8, 9, 125, 126, 12, 7, 2, 2, 126, 127, 9, 7, 2, 2, 127, 141, 5, 14, 8, 7, 128, 129, 12, 5, 2, 2, 129, 130, 7, 37, 2, 2, 130, 141, 5, 14, 8, 5, 131, 132, 12, 4, 2, 2, 132, 133, 7, 38, 2, 2, 133, 141, 5, 14, 8, 4, 134, 135, 12, 3, 2, 2, 135, 136, 7, 17, 2, 2, 136, 141, 5, 14, 8, 3, 137, 138, 12, 15, 2, 2, 138, 139, 7, 28, 2, 2, 139, 141, 7, 42, 2, 2, 140, 107, 3, 2, 2, 2, 140, 110, 3, 2, 2, 2, 140, 113, 3, 2, 2, 2, 140, 116, 3, 2, 2, 2, 140, 119, 3, 2, 2, 2, 140, 122, 3, 2, 2, 2, 140, 125, 3, 2, 2, 2, 140, 128, 3, 2, 2, 2, 140, 131, 3, 2, 2, 2, 140, 134, 3, 2, 2, 2, 140, 137, 3, 2, 2, 2, 141, 144, 3, 2, 2, 2, 142, 140, 3, 2, 2, 2, 142, 143, 3, 2, 2, 2, 143, 15, 3, 2, 2, 2, 144, 142, 3, 2, 2, 2, 145, 149, 7, 41, 2, 2, 146, 149, 9, 8, 2, 2, 147, 149, 7, 42, 2, 2, 148, 145, 3, 2, 2, 2, 148, 146, 3, 2, 2, 2, 148, 147, 3, 2, 2, 2, 149, 17, 3, 2, 2, 2, 16, 21, 30, 35, 42, 50, 57, 69, 74, 84, 91, 105, 140, 142, 148] \ No newline at end of file diff --git a/src/antlr/Pyxell.tokens b/src/antlr/Pyxell.tokens index c186b36f..c8e2fb10 100644 --- a/src/antlr/Pyxell.tokens +++ b/src/antlr/Pyxell.tokens @@ -30,10 +30,16 @@ T__28=29 T__29=30 T__30=31 T__31=32 -INT=33 -ID=34 -WS=35 -ERR=36 +T__32=33 +T__33=34 +T__34=35 +T__35=36 +T__36=37 +T__37=38 +INT=39 +ID=40 +WS=41 +ERR=42 ';'=1 'skip'=2 'print'=3 @@ -43,26 +49,32 @@ ERR=36 '%'=7 '+'=8 '-'=9 -','=10 -'if'=11 -'elif'=12 -'else'=13 -'while'=14 -'until'=15 -'do'=16 -'{'=17 -'}'=18 -'('=19 -')'=20 -'.'=21 -'=='=22 -'!='=23 -'<'=24 -'<='=25 -'>'=26 -'>='=27 -'not'=28 -'and'=29 -'or'=30 -'true'=31 -'false'=32 +'<<'=10 +'>>'=11 +'&'=12 +'$'=13 +'|'=14 +','=15 +'if'=16 +'elif'=17 +'else'=18 +'while'=19 +'until'=20 +'do'=21 +'{'=22 +'}'=23 +'('=24 +')'=25 +'.'=26 +'~'=27 +'=='=28 +'!='=29 +'<'=30 +'<='=31 +'>'=32 +'>='=33 +'not'=34 +'and'=35 +'or'=36 +'true'=37 +'false'=38 diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp index a60aa0b0..416542dd 100644 --- a/src/antlr/PyxellLexer.interp +++ b/src/antlr/PyxellLexer.interp @@ -9,6 +9,11 @@ null '%' '+' '-' +'<<' +'>>' +'&' +'$' +'|' ',' 'if' 'elif' @@ -21,6 +26,7 @@ null '(' ')' '.' +'~' '==' '!=' '<' @@ -71,6 +77,12 @@ null null null null +null +null +null +null +null +null INT ID WS @@ -109,6 +121,12 @@ T__28 T__29 T__30 T__31 +T__32 +T__33 +T__34 +T__35 +T__36 +T__37 INT ID DIGIT @@ -126,4 +144,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 38, 218, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 6, 34, 188, 10, 34, 13, 34, 14, 34, 189, 3, 35, 3, 35, 7, 35, 194, 10, 35, 12, 35, 14, 35, 197, 11, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 5, 39, 208, 10, 39, 3, 40, 6, 40, 211, 10, 40, 13, 40, 14, 40, 212, 3, 40, 3, 40, 3, 41, 3, 41, 2, 2, 42, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 2, 73, 2, 75, 2, 77, 2, 79, 37, 81, 38, 3, 2, 7, 3, 2, 50, 59, 3, 2, 99, 124, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 218, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 3, 83, 3, 2, 2, 2, 5, 85, 3, 2, 2, 2, 7, 90, 3, 2, 2, 2, 9, 96, 3, 2, 2, 2, 11, 98, 3, 2, 2, 2, 13, 100, 3, 2, 2, 2, 15, 102, 3, 2, 2, 2, 17, 104, 3, 2, 2, 2, 19, 106, 3, 2, 2, 2, 21, 108, 3, 2, 2, 2, 23, 110, 3, 2, 2, 2, 25, 113, 3, 2, 2, 2, 27, 118, 3, 2, 2, 2, 29, 123, 3, 2, 2, 2, 31, 129, 3, 2, 2, 2, 33, 135, 3, 2, 2, 2, 35, 138, 3, 2, 2, 2, 37, 140, 3, 2, 2, 2, 39, 142, 3, 2, 2, 2, 41, 144, 3, 2, 2, 2, 43, 146, 3, 2, 2, 2, 45, 148, 3, 2, 2, 2, 47, 151, 3, 2, 2, 2, 49, 154, 3, 2, 2, 2, 51, 156, 3, 2, 2, 2, 53, 159, 3, 2, 2, 2, 55, 161, 3, 2, 2, 2, 57, 164, 3, 2, 2, 2, 59, 168, 3, 2, 2, 2, 61, 172, 3, 2, 2, 2, 63, 175, 3, 2, 2, 2, 65, 180, 3, 2, 2, 2, 67, 187, 3, 2, 2, 2, 69, 191, 3, 2, 2, 2, 71, 198, 3, 2, 2, 2, 73, 200, 3, 2, 2, 2, 75, 202, 3, 2, 2, 2, 77, 207, 3, 2, 2, 2, 79, 210, 3, 2, 2, 2, 81, 216, 3, 2, 2, 2, 83, 84, 7, 61, 2, 2, 84, 4, 3, 2, 2, 2, 85, 86, 7, 117, 2, 2, 86, 87, 7, 109, 2, 2, 87, 88, 7, 107, 2, 2, 88, 89, 7, 114, 2, 2, 89, 6, 3, 2, 2, 2, 90, 91, 7, 114, 2, 2, 91, 92, 7, 116, 2, 2, 92, 93, 7, 107, 2, 2, 93, 94, 7, 112, 2, 2, 94, 95, 7, 118, 2, 2, 95, 8, 3, 2, 2, 2, 96, 97, 7, 63, 2, 2, 97, 10, 3, 2, 2, 2, 98, 99, 7, 44, 2, 2, 99, 12, 3, 2, 2, 2, 100, 101, 7, 49, 2, 2, 101, 14, 3, 2, 2, 2, 102, 103, 7, 39, 2, 2, 103, 16, 3, 2, 2, 2, 104, 105, 7, 45, 2, 2, 105, 18, 3, 2, 2, 2, 106, 107, 7, 47, 2, 2, 107, 20, 3, 2, 2, 2, 108, 109, 7, 46, 2, 2, 109, 22, 3, 2, 2, 2, 110, 111, 7, 107, 2, 2, 111, 112, 7, 104, 2, 2, 112, 24, 3, 2, 2, 2, 113, 114, 7, 103, 2, 2, 114, 115, 7, 110, 2, 2, 115, 116, 7, 107, 2, 2, 116, 117, 7, 104, 2, 2, 117, 26, 3, 2, 2, 2, 118, 119, 7, 103, 2, 2, 119, 120, 7, 110, 2, 2, 120, 121, 7, 117, 2, 2, 121, 122, 7, 103, 2, 2, 122, 28, 3, 2, 2, 2, 123, 124, 7, 121, 2, 2, 124, 125, 7, 106, 2, 2, 125, 126, 7, 107, 2, 2, 126, 127, 7, 110, 2, 2, 127, 128, 7, 103, 2, 2, 128, 30, 3, 2, 2, 2, 129, 130, 7, 119, 2, 2, 130, 131, 7, 112, 2, 2, 131, 132, 7, 118, 2, 2, 132, 133, 7, 107, 2, 2, 133, 134, 7, 110, 2, 2, 134, 32, 3, 2, 2, 2, 135, 136, 7, 102, 2, 2, 136, 137, 7, 113, 2, 2, 137, 34, 3, 2, 2, 2, 138, 139, 7, 125, 2, 2, 139, 36, 3, 2, 2, 2, 140, 141, 7, 127, 2, 2, 141, 38, 3, 2, 2, 2, 142, 143, 7, 42, 2, 2, 143, 40, 3, 2, 2, 2, 144, 145, 7, 43, 2, 2, 145, 42, 3, 2, 2, 2, 146, 147, 7, 48, 2, 2, 147, 44, 3, 2, 2, 2, 148, 149, 7, 63, 2, 2, 149, 150, 7, 63, 2, 2, 150, 46, 3, 2, 2, 2, 151, 152, 7, 35, 2, 2, 152, 153, 7, 63, 2, 2, 153, 48, 3, 2, 2, 2, 154, 155, 7, 62, 2, 2, 155, 50, 3, 2, 2, 2, 156, 157, 7, 62, 2, 2, 157, 158, 7, 63, 2, 2, 158, 52, 3, 2, 2, 2, 159, 160, 7, 64, 2, 2, 160, 54, 3, 2, 2, 2, 161, 162, 7, 64, 2, 2, 162, 163, 7, 63, 2, 2, 163, 56, 3, 2, 2, 2, 164, 165, 7, 112, 2, 2, 165, 166, 7, 113, 2, 2, 166, 167, 7, 118, 2, 2, 167, 58, 3, 2, 2, 2, 168, 169, 7, 99, 2, 2, 169, 170, 7, 112, 2, 2, 170, 171, 7, 102, 2, 2, 171, 60, 3, 2, 2, 2, 172, 173, 7, 113, 2, 2, 173, 174, 7, 116, 2, 2, 174, 62, 3, 2, 2, 2, 175, 176, 7, 118, 2, 2, 176, 177, 7, 116, 2, 2, 177, 178, 7, 119, 2, 2, 178, 179, 7, 103, 2, 2, 179, 64, 3, 2, 2, 2, 180, 181, 7, 104, 2, 2, 181, 182, 7, 99, 2, 2, 182, 183, 7, 110, 2, 2, 183, 184, 7, 117, 2, 2, 184, 185, 7, 103, 2, 2, 185, 66, 3, 2, 2, 2, 186, 188, 5, 71, 36, 2, 187, 186, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 187, 3, 2, 2, 2, 189, 190, 3, 2, 2, 2, 190, 68, 3, 2, 2, 2, 191, 195, 5, 75, 38, 2, 192, 194, 5, 77, 39, 2, 193, 192, 3, 2, 2, 2, 194, 197, 3, 2, 2, 2, 195, 193, 3, 2, 2, 2, 195, 196, 3, 2, 2, 2, 196, 70, 3, 2, 2, 2, 197, 195, 3, 2, 2, 2, 198, 199, 9, 2, 2, 2, 199, 72, 3, 2, 2, 2, 200, 201, 9, 3, 2, 2, 201, 74, 3, 2, 2, 2, 202, 203, 9, 4, 2, 2, 203, 76, 3, 2, 2, 2, 204, 208, 5, 75, 38, 2, 205, 208, 5, 71, 36, 2, 206, 208, 9, 5, 2, 2, 207, 204, 3, 2, 2, 2, 207, 205, 3, 2, 2, 2, 207, 206, 3, 2, 2, 2, 208, 78, 3, 2, 2, 2, 209, 211, 9, 6, 2, 2, 210, 209, 3, 2, 2, 2, 211, 212, 3, 2, 2, 2, 212, 210, 3, 2, 2, 2, 212, 213, 3, 2, 2, 2, 213, 214, 3, 2, 2, 2, 214, 215, 8, 40, 2, 2, 215, 80, 3, 2, 2, 2, 216, 217, 11, 2, 2, 2, 217, 82, 3, 2, 2, 2, 7, 2, 189, 195, 207, 212, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 44, 244, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 6, 40, 214, 10, 40, 13, 40, 14, 40, 215, 3, 41, 3, 41, 7, 41, 220, 10, 41, 12, 41, 14, 41, 223, 11, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 5, 45, 234, 10, 45, 3, 46, 6, 46, 237, 10, 46, 13, 46, 14, 46, 238, 3, 46, 3, 46, 3, 47, 3, 47, 2, 2, 48, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 2, 85, 2, 87, 2, 89, 2, 91, 43, 93, 44, 3, 2, 7, 3, 2, 50, 59, 3, 2, 99, 124, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 244, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 3, 95, 3, 2, 2, 2, 5, 97, 3, 2, 2, 2, 7, 102, 3, 2, 2, 2, 9, 108, 3, 2, 2, 2, 11, 110, 3, 2, 2, 2, 13, 112, 3, 2, 2, 2, 15, 114, 3, 2, 2, 2, 17, 116, 3, 2, 2, 2, 19, 118, 3, 2, 2, 2, 21, 120, 3, 2, 2, 2, 23, 123, 3, 2, 2, 2, 25, 126, 3, 2, 2, 2, 27, 128, 3, 2, 2, 2, 29, 130, 3, 2, 2, 2, 31, 132, 3, 2, 2, 2, 33, 134, 3, 2, 2, 2, 35, 137, 3, 2, 2, 2, 37, 142, 3, 2, 2, 2, 39, 147, 3, 2, 2, 2, 41, 153, 3, 2, 2, 2, 43, 159, 3, 2, 2, 2, 45, 162, 3, 2, 2, 2, 47, 164, 3, 2, 2, 2, 49, 166, 3, 2, 2, 2, 51, 168, 3, 2, 2, 2, 53, 170, 3, 2, 2, 2, 55, 172, 3, 2, 2, 2, 57, 174, 3, 2, 2, 2, 59, 177, 3, 2, 2, 2, 61, 180, 3, 2, 2, 2, 63, 182, 3, 2, 2, 2, 65, 185, 3, 2, 2, 2, 67, 187, 3, 2, 2, 2, 69, 190, 3, 2, 2, 2, 71, 194, 3, 2, 2, 2, 73, 198, 3, 2, 2, 2, 75, 201, 3, 2, 2, 2, 77, 206, 3, 2, 2, 2, 79, 213, 3, 2, 2, 2, 81, 217, 3, 2, 2, 2, 83, 224, 3, 2, 2, 2, 85, 226, 3, 2, 2, 2, 87, 228, 3, 2, 2, 2, 89, 233, 3, 2, 2, 2, 91, 236, 3, 2, 2, 2, 93, 242, 3, 2, 2, 2, 95, 96, 7, 61, 2, 2, 96, 4, 3, 2, 2, 2, 97, 98, 7, 117, 2, 2, 98, 99, 7, 109, 2, 2, 99, 100, 7, 107, 2, 2, 100, 101, 7, 114, 2, 2, 101, 6, 3, 2, 2, 2, 102, 103, 7, 114, 2, 2, 103, 104, 7, 116, 2, 2, 104, 105, 7, 107, 2, 2, 105, 106, 7, 112, 2, 2, 106, 107, 7, 118, 2, 2, 107, 8, 3, 2, 2, 2, 108, 109, 7, 63, 2, 2, 109, 10, 3, 2, 2, 2, 110, 111, 7, 44, 2, 2, 111, 12, 3, 2, 2, 2, 112, 113, 7, 49, 2, 2, 113, 14, 3, 2, 2, 2, 114, 115, 7, 39, 2, 2, 115, 16, 3, 2, 2, 2, 116, 117, 7, 45, 2, 2, 117, 18, 3, 2, 2, 2, 118, 119, 7, 47, 2, 2, 119, 20, 3, 2, 2, 2, 120, 121, 7, 62, 2, 2, 121, 122, 7, 62, 2, 2, 122, 22, 3, 2, 2, 2, 123, 124, 7, 64, 2, 2, 124, 125, 7, 64, 2, 2, 125, 24, 3, 2, 2, 2, 126, 127, 7, 40, 2, 2, 127, 26, 3, 2, 2, 2, 128, 129, 7, 38, 2, 2, 129, 28, 3, 2, 2, 2, 130, 131, 7, 126, 2, 2, 131, 30, 3, 2, 2, 2, 132, 133, 7, 46, 2, 2, 133, 32, 3, 2, 2, 2, 134, 135, 7, 107, 2, 2, 135, 136, 7, 104, 2, 2, 136, 34, 3, 2, 2, 2, 137, 138, 7, 103, 2, 2, 138, 139, 7, 110, 2, 2, 139, 140, 7, 107, 2, 2, 140, 141, 7, 104, 2, 2, 141, 36, 3, 2, 2, 2, 142, 143, 7, 103, 2, 2, 143, 144, 7, 110, 2, 2, 144, 145, 7, 117, 2, 2, 145, 146, 7, 103, 2, 2, 146, 38, 3, 2, 2, 2, 147, 148, 7, 121, 2, 2, 148, 149, 7, 106, 2, 2, 149, 150, 7, 107, 2, 2, 150, 151, 7, 110, 2, 2, 151, 152, 7, 103, 2, 2, 152, 40, 3, 2, 2, 2, 153, 154, 7, 119, 2, 2, 154, 155, 7, 112, 2, 2, 155, 156, 7, 118, 2, 2, 156, 157, 7, 107, 2, 2, 157, 158, 7, 110, 2, 2, 158, 42, 3, 2, 2, 2, 159, 160, 7, 102, 2, 2, 160, 161, 7, 113, 2, 2, 161, 44, 3, 2, 2, 2, 162, 163, 7, 125, 2, 2, 163, 46, 3, 2, 2, 2, 164, 165, 7, 127, 2, 2, 165, 48, 3, 2, 2, 2, 166, 167, 7, 42, 2, 2, 167, 50, 3, 2, 2, 2, 168, 169, 7, 43, 2, 2, 169, 52, 3, 2, 2, 2, 170, 171, 7, 48, 2, 2, 171, 54, 3, 2, 2, 2, 172, 173, 7, 128, 2, 2, 173, 56, 3, 2, 2, 2, 174, 175, 7, 63, 2, 2, 175, 176, 7, 63, 2, 2, 176, 58, 3, 2, 2, 2, 177, 178, 7, 35, 2, 2, 178, 179, 7, 63, 2, 2, 179, 60, 3, 2, 2, 2, 180, 181, 7, 62, 2, 2, 181, 62, 3, 2, 2, 2, 182, 183, 7, 62, 2, 2, 183, 184, 7, 63, 2, 2, 184, 64, 3, 2, 2, 2, 185, 186, 7, 64, 2, 2, 186, 66, 3, 2, 2, 2, 187, 188, 7, 64, 2, 2, 188, 189, 7, 63, 2, 2, 189, 68, 3, 2, 2, 2, 190, 191, 7, 112, 2, 2, 191, 192, 7, 113, 2, 2, 192, 193, 7, 118, 2, 2, 193, 70, 3, 2, 2, 2, 194, 195, 7, 99, 2, 2, 195, 196, 7, 112, 2, 2, 196, 197, 7, 102, 2, 2, 197, 72, 3, 2, 2, 2, 198, 199, 7, 113, 2, 2, 199, 200, 7, 116, 2, 2, 200, 74, 3, 2, 2, 2, 201, 202, 7, 118, 2, 2, 202, 203, 7, 116, 2, 2, 203, 204, 7, 119, 2, 2, 204, 205, 7, 103, 2, 2, 205, 76, 3, 2, 2, 2, 206, 207, 7, 104, 2, 2, 207, 208, 7, 99, 2, 2, 208, 209, 7, 110, 2, 2, 209, 210, 7, 117, 2, 2, 210, 211, 7, 103, 2, 2, 211, 78, 3, 2, 2, 2, 212, 214, 5, 83, 42, 2, 213, 212, 3, 2, 2, 2, 214, 215, 3, 2, 2, 2, 215, 213, 3, 2, 2, 2, 215, 216, 3, 2, 2, 2, 216, 80, 3, 2, 2, 2, 217, 221, 5, 87, 44, 2, 218, 220, 5, 89, 45, 2, 219, 218, 3, 2, 2, 2, 220, 223, 3, 2, 2, 2, 221, 219, 3, 2, 2, 2, 221, 222, 3, 2, 2, 2, 222, 82, 3, 2, 2, 2, 223, 221, 3, 2, 2, 2, 224, 225, 9, 2, 2, 2, 225, 84, 3, 2, 2, 2, 226, 227, 9, 3, 2, 2, 227, 86, 3, 2, 2, 2, 228, 229, 9, 4, 2, 2, 229, 88, 3, 2, 2, 2, 230, 234, 5, 87, 44, 2, 231, 234, 5, 83, 42, 2, 232, 234, 9, 5, 2, 2, 233, 230, 3, 2, 2, 2, 233, 231, 3, 2, 2, 2, 233, 232, 3, 2, 2, 2, 234, 90, 3, 2, 2, 2, 235, 237, 9, 6, 2, 2, 236, 235, 3, 2, 2, 2, 237, 238, 3, 2, 2, 2, 238, 236, 3, 2, 2, 2, 238, 239, 3, 2, 2, 2, 239, 240, 3, 2, 2, 2, 240, 241, 8, 46, 2, 2, 241, 92, 3, 2, 2, 2, 242, 243, 11, 2, 2, 2, 243, 94, 3, 2, 2, 2, 7, 2, 215, 221, 233, 238, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py index f7ac37d8..8c65c2ee 100644 --- a/src/antlr/PyxellLexer.py +++ b/src/antlr/PyxellLexer.py @@ -8,89 +8,100 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2&") - buf.write("\u00da\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2,") + buf.write("\u00f4\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") buf.write("\4\31\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36") buf.write("\t\36\4\37\t\37\4 \t \4!\t!\4\"\t\"\4#\t#\4$\t$\4%\t%") - buf.write("\4&\t&\4\'\t\'\4(\t(\4)\t)\3\2\3\2\3\3\3\3\3\3\3\3\3\3") - buf.write("\3\4\3\4\3\4\3\4\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3") - buf.write("\b\3\t\3\t\3\n\3\n\3\13\3\13\3\f\3\f\3\f\3\r\3\r\3\r\3") - buf.write("\r\3\r\3\16\3\16\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3") - buf.write("\17\3\17\3\20\3\20\3\20\3\20\3\20\3\20\3\21\3\21\3\21") - buf.write("\3\22\3\22\3\23\3\23\3\24\3\24\3\25\3\25\3\26\3\26\3\27") - buf.write("\3\27\3\27\3\30\3\30\3\30\3\31\3\31\3\32\3\32\3\32\3\33") - buf.write("\3\33\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\36\3\36\3\36") - buf.write("\3\36\3\37\3\37\3\37\3 \3 \3 \3 \3 \3!\3!\3!\3!\3!\3!") - buf.write("\3\"\6\"\u00bc\n\"\r\"\16\"\u00bd\3#\3#\7#\u00c2\n#\f") - buf.write("#\16#\u00c5\13#\3$\3$\3%\3%\3&\3&\3\'\3\'\3\'\5\'\u00d0") - buf.write("\n\'\3(\6(\u00d3\n(\r(\16(\u00d4\3(\3(\3)\3)\2\2*\3\3") - buf.write("\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16") - buf.write("\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61") - buf.write("\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G\2I\2K\2M\2O") - buf.write("%Q&\3\2\7\3\2\62;\3\2c|\5\2C\\aac|\4\2))aa\5\2\13\f\17") - buf.write("\17\"\"\2\u00da\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2") - buf.write("\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21") - buf.write("\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3") - buf.write("\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2") - buf.write("\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2") - buf.write("\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2") - buf.write("\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2") - buf.write("\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2O\3") - buf.write("\2\2\2\2Q\3\2\2\2\3S\3\2\2\2\5U\3\2\2\2\7Z\3\2\2\2\t`") - buf.write("\3\2\2\2\13b\3\2\2\2\rd\3\2\2\2\17f\3\2\2\2\21h\3\2\2") - buf.write("\2\23j\3\2\2\2\25l\3\2\2\2\27n\3\2\2\2\31q\3\2\2\2\33") - buf.write("v\3\2\2\2\35{\3\2\2\2\37\u0081\3\2\2\2!\u0087\3\2\2\2") - buf.write("#\u008a\3\2\2\2%\u008c\3\2\2\2\'\u008e\3\2\2\2)\u0090") - buf.write("\3\2\2\2+\u0092\3\2\2\2-\u0094\3\2\2\2/\u0097\3\2\2\2") - buf.write("\61\u009a\3\2\2\2\63\u009c\3\2\2\2\65\u009f\3\2\2\2\67") - buf.write("\u00a1\3\2\2\29\u00a4\3\2\2\2;\u00a8\3\2\2\2=\u00ac\3") - buf.write("\2\2\2?\u00af\3\2\2\2A\u00b4\3\2\2\2C\u00bb\3\2\2\2E\u00bf") - buf.write("\3\2\2\2G\u00c6\3\2\2\2I\u00c8\3\2\2\2K\u00ca\3\2\2\2") - buf.write("M\u00cf\3\2\2\2O\u00d2\3\2\2\2Q\u00d8\3\2\2\2ST\7=\2\2") - buf.write("T\4\3\2\2\2UV\7u\2\2VW\7m\2\2WX\7k\2\2XY\7r\2\2Y\6\3\2") - buf.write("\2\2Z[\7r\2\2[\\\7t\2\2\\]\7k\2\2]^\7p\2\2^_\7v\2\2_\b") - buf.write("\3\2\2\2`a\7?\2\2a\n\3\2\2\2bc\7,\2\2c\f\3\2\2\2de\7\61") - buf.write("\2\2e\16\3\2\2\2fg\7\'\2\2g\20\3\2\2\2hi\7-\2\2i\22\3") - buf.write("\2\2\2jk\7/\2\2k\24\3\2\2\2lm\7.\2\2m\26\3\2\2\2no\7k") - buf.write("\2\2op\7h\2\2p\30\3\2\2\2qr\7g\2\2rs\7n\2\2st\7k\2\2t") - buf.write("u\7h\2\2u\32\3\2\2\2vw\7g\2\2wx\7n\2\2xy\7u\2\2yz\7g\2") - buf.write("\2z\34\3\2\2\2{|\7y\2\2|}\7j\2\2}~\7k\2\2~\177\7n\2\2") - buf.write("\177\u0080\7g\2\2\u0080\36\3\2\2\2\u0081\u0082\7w\2\2") - buf.write("\u0082\u0083\7p\2\2\u0083\u0084\7v\2\2\u0084\u0085\7k") - buf.write("\2\2\u0085\u0086\7n\2\2\u0086 \3\2\2\2\u0087\u0088\7f") - buf.write("\2\2\u0088\u0089\7q\2\2\u0089\"\3\2\2\2\u008a\u008b\7") - buf.write("}\2\2\u008b$\3\2\2\2\u008c\u008d\7\177\2\2\u008d&\3\2") - buf.write("\2\2\u008e\u008f\7*\2\2\u008f(\3\2\2\2\u0090\u0091\7+") - buf.write("\2\2\u0091*\3\2\2\2\u0092\u0093\7\60\2\2\u0093,\3\2\2") - buf.write("\2\u0094\u0095\7?\2\2\u0095\u0096\7?\2\2\u0096.\3\2\2") - buf.write("\2\u0097\u0098\7#\2\2\u0098\u0099\7?\2\2\u0099\60\3\2") - buf.write("\2\2\u009a\u009b\7>\2\2\u009b\62\3\2\2\2\u009c\u009d\7") - buf.write(">\2\2\u009d\u009e\7?\2\2\u009e\64\3\2\2\2\u009f\u00a0") - buf.write("\7@\2\2\u00a0\66\3\2\2\2\u00a1\u00a2\7@\2\2\u00a2\u00a3") - buf.write("\7?\2\2\u00a38\3\2\2\2\u00a4\u00a5\7p\2\2\u00a5\u00a6") - buf.write("\7q\2\2\u00a6\u00a7\7v\2\2\u00a7:\3\2\2\2\u00a8\u00a9") - buf.write("\7c\2\2\u00a9\u00aa\7p\2\2\u00aa\u00ab\7f\2\2\u00ab<\3") - buf.write("\2\2\2\u00ac\u00ad\7q\2\2\u00ad\u00ae\7t\2\2\u00ae>\3") - buf.write("\2\2\2\u00af\u00b0\7v\2\2\u00b0\u00b1\7t\2\2\u00b1\u00b2") - buf.write("\7w\2\2\u00b2\u00b3\7g\2\2\u00b3@\3\2\2\2\u00b4\u00b5") - buf.write("\7h\2\2\u00b5\u00b6\7c\2\2\u00b6\u00b7\7n\2\2\u00b7\u00b8") - buf.write("\7u\2\2\u00b8\u00b9\7g\2\2\u00b9B\3\2\2\2\u00ba\u00bc") - buf.write("\5G$\2\u00bb\u00ba\3\2\2\2\u00bc\u00bd\3\2\2\2\u00bd\u00bb") - buf.write("\3\2\2\2\u00bd\u00be\3\2\2\2\u00beD\3\2\2\2\u00bf\u00c3") - buf.write("\5K&\2\u00c0\u00c2\5M\'\2\u00c1\u00c0\3\2\2\2\u00c2\u00c5") - buf.write("\3\2\2\2\u00c3\u00c1\3\2\2\2\u00c3\u00c4\3\2\2\2\u00c4") - buf.write("F\3\2\2\2\u00c5\u00c3\3\2\2\2\u00c6\u00c7\t\2\2\2\u00c7") - buf.write("H\3\2\2\2\u00c8\u00c9\t\3\2\2\u00c9J\3\2\2\2\u00ca\u00cb") - buf.write("\t\4\2\2\u00cbL\3\2\2\2\u00cc\u00d0\5K&\2\u00cd\u00d0") - buf.write("\5G$\2\u00ce\u00d0\t\5\2\2\u00cf\u00cc\3\2\2\2\u00cf\u00cd") - buf.write("\3\2\2\2\u00cf\u00ce\3\2\2\2\u00d0N\3\2\2\2\u00d1\u00d3") - buf.write("\t\6\2\2\u00d2\u00d1\3\2\2\2\u00d3\u00d4\3\2\2\2\u00d4") - buf.write("\u00d2\3\2\2\2\u00d4\u00d5\3\2\2\2\u00d5\u00d6\3\2\2\2") - buf.write("\u00d6\u00d7\b(\2\2\u00d7P\3\2\2\2\u00d8\u00d9\13\2\2") - buf.write("\2\u00d9R\3\2\2\2\7\2\u00bd\u00c3\u00cf\u00d4\3\b\2\2") + buf.write("\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4,\t,\4-\t-\4.") + buf.write("\t.\4/\t/\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4") + buf.write("\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\n\3") + buf.write("\n\3\13\3\13\3\13\3\f\3\f\3\f\3\r\3\r\3\16\3\16\3\17\3") + buf.write("\17\3\20\3\20\3\21\3\21\3\21\3\22\3\22\3\22\3\22\3\22") + buf.write("\3\23\3\23\3\23\3\23\3\23\3\24\3\24\3\24\3\24\3\24\3\24") + buf.write("\3\25\3\25\3\25\3\25\3\25\3\25\3\26\3\26\3\26\3\27\3\27") + buf.write("\3\30\3\30\3\31\3\31\3\32\3\32\3\33\3\33\3\34\3\34\3\35") + buf.write("\3\35\3\35\3\36\3\36\3\36\3\37\3\37\3 \3 \3 \3!\3!\3\"") + buf.write("\3\"\3\"\3#\3#\3#\3#\3$\3$\3$\3$\3%\3%\3%\3&\3&\3&\3&") + buf.write("\3&\3\'\3\'\3\'\3\'\3\'\3\'\3(\6(\u00d6\n(\r(\16(\u00d7") + buf.write("\3)\3)\7)\u00dc\n)\f)\16)\u00df\13)\3*\3*\3+\3+\3,\3,") + buf.write("\3-\3-\3-\5-\u00ea\n-\3.\6.\u00ed\n.\r.\16.\u00ee\3.\3") + buf.write(".\3/\3/\2\2\60\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13") + buf.write("\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26") + buf.write("+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#") + buf.write("E$G%I&K\'M(O)Q*S\2U\2W\2Y\2[+],\3\2\7\3\2\62;\3\2c|\5") + buf.write("\2C\\aac|\4\2))aa\5\2\13\f\17\17\"\"\2\u00f4\2\3\3\2\2") + buf.write("\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2") + buf.write("\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25") + buf.write("\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3") + buf.write("\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2") + buf.write("\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2") + buf.write("\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\2") + buf.write("9\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2") + buf.write("\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2") + buf.write("\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2[\3\2\2\2\2]\3\2") + buf.write("\2\2\3_\3\2\2\2\5a\3\2\2\2\7f\3\2\2\2\tl\3\2\2\2\13n\3") + buf.write("\2\2\2\rp\3\2\2\2\17r\3\2\2\2\21t\3\2\2\2\23v\3\2\2\2") + buf.write("\25x\3\2\2\2\27{\3\2\2\2\31~\3\2\2\2\33\u0080\3\2\2\2") + buf.write("\35\u0082\3\2\2\2\37\u0084\3\2\2\2!\u0086\3\2\2\2#\u0089") + buf.write("\3\2\2\2%\u008e\3\2\2\2\'\u0093\3\2\2\2)\u0099\3\2\2\2") + buf.write("+\u009f\3\2\2\2-\u00a2\3\2\2\2/\u00a4\3\2\2\2\61\u00a6") + buf.write("\3\2\2\2\63\u00a8\3\2\2\2\65\u00aa\3\2\2\2\67\u00ac\3") + buf.write("\2\2\29\u00ae\3\2\2\2;\u00b1\3\2\2\2=\u00b4\3\2\2\2?\u00b6") + buf.write("\3\2\2\2A\u00b9\3\2\2\2C\u00bb\3\2\2\2E\u00be\3\2\2\2") + buf.write("G\u00c2\3\2\2\2I\u00c6\3\2\2\2K\u00c9\3\2\2\2M\u00ce\3") + buf.write("\2\2\2O\u00d5\3\2\2\2Q\u00d9\3\2\2\2S\u00e0\3\2\2\2U\u00e2") + buf.write("\3\2\2\2W\u00e4\3\2\2\2Y\u00e9\3\2\2\2[\u00ec\3\2\2\2") + buf.write("]\u00f2\3\2\2\2_`\7=\2\2`\4\3\2\2\2ab\7u\2\2bc\7m\2\2") + buf.write("cd\7k\2\2de\7r\2\2e\6\3\2\2\2fg\7r\2\2gh\7t\2\2hi\7k\2") + buf.write("\2ij\7p\2\2jk\7v\2\2k\b\3\2\2\2lm\7?\2\2m\n\3\2\2\2no") + buf.write("\7,\2\2o\f\3\2\2\2pq\7\61\2\2q\16\3\2\2\2rs\7\'\2\2s\20") + buf.write("\3\2\2\2tu\7-\2\2u\22\3\2\2\2vw\7/\2\2w\24\3\2\2\2xy\7") + buf.write(">\2\2yz\7>\2\2z\26\3\2\2\2{|\7@\2\2|}\7@\2\2}\30\3\2\2") + buf.write("\2~\177\7(\2\2\177\32\3\2\2\2\u0080\u0081\7&\2\2\u0081") + buf.write("\34\3\2\2\2\u0082\u0083\7~\2\2\u0083\36\3\2\2\2\u0084") + buf.write("\u0085\7.\2\2\u0085 \3\2\2\2\u0086\u0087\7k\2\2\u0087") + buf.write("\u0088\7h\2\2\u0088\"\3\2\2\2\u0089\u008a\7g\2\2\u008a") + buf.write("\u008b\7n\2\2\u008b\u008c\7k\2\2\u008c\u008d\7h\2\2\u008d") + buf.write("$\3\2\2\2\u008e\u008f\7g\2\2\u008f\u0090\7n\2\2\u0090") + buf.write("\u0091\7u\2\2\u0091\u0092\7g\2\2\u0092&\3\2\2\2\u0093") + buf.write("\u0094\7y\2\2\u0094\u0095\7j\2\2\u0095\u0096\7k\2\2\u0096") + buf.write("\u0097\7n\2\2\u0097\u0098\7g\2\2\u0098(\3\2\2\2\u0099") + buf.write("\u009a\7w\2\2\u009a\u009b\7p\2\2\u009b\u009c\7v\2\2\u009c") + buf.write("\u009d\7k\2\2\u009d\u009e\7n\2\2\u009e*\3\2\2\2\u009f") + buf.write("\u00a0\7f\2\2\u00a0\u00a1\7q\2\2\u00a1,\3\2\2\2\u00a2") + buf.write("\u00a3\7}\2\2\u00a3.\3\2\2\2\u00a4\u00a5\7\177\2\2\u00a5") + buf.write("\60\3\2\2\2\u00a6\u00a7\7*\2\2\u00a7\62\3\2\2\2\u00a8") + buf.write("\u00a9\7+\2\2\u00a9\64\3\2\2\2\u00aa\u00ab\7\60\2\2\u00ab") + buf.write("\66\3\2\2\2\u00ac\u00ad\7\u0080\2\2\u00ad8\3\2\2\2\u00ae") + buf.write("\u00af\7?\2\2\u00af\u00b0\7?\2\2\u00b0:\3\2\2\2\u00b1") + buf.write("\u00b2\7#\2\2\u00b2\u00b3\7?\2\2\u00b3<\3\2\2\2\u00b4") + buf.write("\u00b5\7>\2\2\u00b5>\3\2\2\2\u00b6\u00b7\7>\2\2\u00b7") + buf.write("\u00b8\7?\2\2\u00b8@\3\2\2\2\u00b9\u00ba\7@\2\2\u00ba") + buf.write("B\3\2\2\2\u00bb\u00bc\7@\2\2\u00bc\u00bd\7?\2\2\u00bd") + buf.write("D\3\2\2\2\u00be\u00bf\7p\2\2\u00bf\u00c0\7q\2\2\u00c0") + buf.write("\u00c1\7v\2\2\u00c1F\3\2\2\2\u00c2\u00c3\7c\2\2\u00c3") + buf.write("\u00c4\7p\2\2\u00c4\u00c5\7f\2\2\u00c5H\3\2\2\2\u00c6") + buf.write("\u00c7\7q\2\2\u00c7\u00c8\7t\2\2\u00c8J\3\2\2\2\u00c9") + buf.write("\u00ca\7v\2\2\u00ca\u00cb\7t\2\2\u00cb\u00cc\7w\2\2\u00cc") + buf.write("\u00cd\7g\2\2\u00cdL\3\2\2\2\u00ce\u00cf\7h\2\2\u00cf") + buf.write("\u00d0\7c\2\2\u00d0\u00d1\7n\2\2\u00d1\u00d2\7u\2\2\u00d2") + buf.write("\u00d3\7g\2\2\u00d3N\3\2\2\2\u00d4\u00d6\5S*\2\u00d5\u00d4") + buf.write("\3\2\2\2\u00d6\u00d7\3\2\2\2\u00d7\u00d5\3\2\2\2\u00d7") + buf.write("\u00d8\3\2\2\2\u00d8P\3\2\2\2\u00d9\u00dd\5W,\2\u00da") + buf.write("\u00dc\5Y-\2\u00db\u00da\3\2\2\2\u00dc\u00df\3\2\2\2\u00dd") + buf.write("\u00db\3\2\2\2\u00dd\u00de\3\2\2\2\u00deR\3\2\2\2\u00df") + buf.write("\u00dd\3\2\2\2\u00e0\u00e1\t\2\2\2\u00e1T\3\2\2\2\u00e2") + buf.write("\u00e3\t\3\2\2\u00e3V\3\2\2\2\u00e4\u00e5\t\4\2\2\u00e5") + buf.write("X\3\2\2\2\u00e6\u00ea\5W,\2\u00e7\u00ea\5S*\2\u00e8\u00ea") + buf.write("\t\5\2\2\u00e9\u00e6\3\2\2\2\u00e9\u00e7\3\2\2\2\u00e9") + buf.write("\u00e8\3\2\2\2\u00eaZ\3\2\2\2\u00eb\u00ed\t\6\2\2\u00ec") + buf.write("\u00eb\3\2\2\2\u00ed\u00ee\3\2\2\2\u00ee\u00ec\3\2\2\2") + buf.write("\u00ee\u00ef\3\2\2\2\u00ef\u00f0\3\2\2\2\u00f0\u00f1\b") + buf.write(".\2\2\u00f1\\\3\2\2\2\u00f2\u00f3\13\2\2\2\u00f3^\3\2") + buf.write("\2\2\7\2\u00d7\u00dd\u00e9\u00ee\3\b\2\2") return buf.getvalue() @@ -132,10 +143,16 @@ class PyxellLexer(Lexer): T__29 = 30 T__30 = 31 T__31 = 32 - INT = 33 - ID = 34 - WS = 35 - ERR = 36 + T__32 = 33 + T__33 = 34 + T__34 = 35 + T__35 = 36 + T__36 = 37 + T__37 = 38 + INT = 39 + ID = 40 + WS = 41 + ERR = 42 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -143,9 +160,10 @@ class PyxellLexer(Lexer): literalNames = [ "", "';'", "'skip'", "'print'", "'='", "'*'", "'/'", "'%'", "'+'", - "'-'", "','", "'if'", "'elif'", "'else'", "'while'", "'until'", - "'do'", "'{'", "'}'", "'('", "')'", "'.'", "'=='", "'!='", "'<'", - "'<='", "'>'", "'>='", "'not'", "'and'", "'or'", "'true'", "'false'" ] + "'-'", "'<<'", "'>>'", "'&'", "'$'", "'|'", "','", "'if'", "'elif'", + "'else'", "'while'", "'until'", "'do'", "'{'", "'}'", "'('", + "')'", "'.'", "'~'", "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", + "'not'", "'and'", "'or'", "'true'", "'false'" ] symbolicNames = [ "", "INT", "ID", "WS", "ERR" ] @@ -155,6 +173,7 @@ class PyxellLexer(Lexer): "T__14", "T__15", "T__16", "T__17", "T__18", "T__19", "T__20", "T__21", "T__22", "T__23", "T__24", "T__25", "T__26", "T__27", "T__28", "T__29", "T__30", "T__31", + "T__32", "T__33", "T__34", "T__35", "T__36", "T__37", "INT", "ID", "DIGIT", "LETTER", "ID_START", "ID_CONT", "WS", "ERR" ] diff --git a/src/antlr/PyxellLexer.tokens b/src/antlr/PyxellLexer.tokens index c186b36f..c8e2fb10 100644 --- a/src/antlr/PyxellLexer.tokens +++ b/src/antlr/PyxellLexer.tokens @@ -30,10 +30,16 @@ T__28=29 T__29=30 T__30=31 T__31=32 -INT=33 -ID=34 -WS=35 -ERR=36 +T__32=33 +T__33=34 +T__34=35 +T__35=36 +T__36=37 +T__37=38 +INT=39 +ID=40 +WS=41 +ERR=42 ';'=1 'skip'=2 'print'=3 @@ -43,26 +49,32 @@ ERR=36 '%'=7 '+'=8 '-'=9 -','=10 -'if'=11 -'elif'=12 -'else'=13 -'while'=14 -'until'=15 -'do'=16 -'{'=17 -'}'=18 -'('=19 -')'=20 -'.'=21 -'=='=22 -'!='=23 -'<'=24 -'<='=25 -'>'=26 -'>='=27 -'not'=28 -'and'=29 -'or'=30 -'true'=31 -'false'=32 +'<<'=10 +'>>'=11 +'&'=12 +'$'=13 +'|'=14 +','=15 +'if'=16 +'elif'=17 +'else'=18 +'while'=19 +'until'=20 +'do'=21 +'{'=22 +'}'=23 +'('=24 +')'=25 +'.'=26 +'~'=27 +'=='=28 +'!='=29 +'<'=30 +'<='=31 +'>'=32 +'>='=33 +'not'=34 +'and'=35 +'or'=36 +'true'=37 +'false'=38 diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index c3ad3268..11eda14b 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -8,8 +8,8 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3&") - buf.write("\u008b\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3,") + buf.write("\u0097\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") buf.write("\4\b\t\b\4\t\t\t\3\2\7\2\24\n\2\f\2\16\2\27\13\2\3\2\3") buf.write("\2\3\3\3\3\3\3\3\3\5\3\37\n\3\3\4\3\4\3\4\5\4$\n\4\3\4") buf.write("\3\4\3\4\7\4)\n\4\f\4\16\4,\13\4\3\4\3\4\3\4\3\4\3\4\5") @@ -19,45 +19,52 @@ def serializedATN(): buf.write("\7\3\7\6\7Z\n\7\r\7\16\7[\3\7\3\7\3\b\3\b\3\b\3\b\3\b") buf.write("\3\b\3\b\3\b\3\b\3\b\5\bj\n\b\3\b\3\b\3\b\3\b\3\b\3\b") buf.write("\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3") - buf.write("\b\3\b\7\b\u0081\n\b\f\b\16\b\u0084\13\b\3\t\3\t\3\t\5") - buf.write("\t\u0089\n\t\3\t\2\3\16\n\2\4\6\b\n\f\16\20\2\7\3\2\7") - buf.write("\13\3\2\n\13\3\2\7\t\3\2\30\35\3\2!\"\2\u009b\2\25\3\2") - buf.write("\2\2\4\36\3\2\2\2\6\62\3\2\2\2\b\64\3\2\2\2\nT\3\2\2\2") - buf.write("\fV\3\2\2\2\16i\3\2\2\2\20\u0088\3\2\2\2\22\24\5\4\3\2") - buf.write("\23\22\3\2\2\2\24\27\3\2\2\2\25\23\3\2\2\2\25\26\3\2\2") - buf.write("\2\26\30\3\2\2\2\27\25\3\2\2\2\30\31\7\2\2\3\31\3\3\2") - buf.write("\2\2\32\33\5\6\4\2\33\34\7\3\2\2\34\37\3\2\2\2\35\37\5") - buf.write("\n\6\2\36\32\3\2\2\2\36\35\3\2\2\2\37\5\3\2\2\2 \63\7") - buf.write("\4\2\2!#\7\5\2\2\"$\5\16\b\2#\"\3\2\2\2#$\3\2\2\2$\63") - buf.write("\3\2\2\2%&\5\b\5\2&\'\7\6\2\2\')\3\2\2\2(%\3\2\2\2),\3") - buf.write("\2\2\2*(\3\2\2\2*+\3\2\2\2+-\3\2\2\2,*\3\2\2\2-\63\5\16") - buf.write("\b\2./\7$\2\2/\60\t\2\2\2\60\61\7\6\2\2\61\63\5\16\b\2") - buf.write("\62 \3\2\2\2\62!\3\2\2\2\62*\3\2\2\2\62.\3\2\2\2\63\7") - buf.write("\3\2\2\2\649\7$\2\2\65\66\7\f\2\2\668\7$\2\2\67\65\3\2") - buf.write("\2\28;\3\2\2\29\67\3\2\2\29:\3\2\2\2:\t\3\2\2\2;9\3\2") - buf.write("\2\2<=\7\r\2\2=>\5\16\b\2>E\5\f\7\2?@\7\16\2\2@A\5\16") - buf.write("\b\2AB\5\f\7\2BD\3\2\2\2C?\3\2\2\2DG\3\2\2\2EC\3\2\2\2") - buf.write("EF\3\2\2\2FJ\3\2\2\2GE\3\2\2\2HI\7\17\2\2IK\5\f\7\2JH") - buf.write("\3\2\2\2JK\3\2\2\2KU\3\2\2\2LM\7\20\2\2MN\5\16\b\2NO\5") - buf.write("\f\7\2OU\3\2\2\2PQ\7\21\2\2QR\5\16\b\2RS\5\f\7\2SU\3\2") - buf.write("\2\2T<\3\2\2\2TL\3\2\2\2TP\3\2\2\2U\13\3\2\2\2VW\7\22") - buf.write("\2\2WY\7\23\2\2XZ\5\4\3\2YX\3\2\2\2Z[\3\2\2\2[Y\3\2\2") - buf.write("\2[\\\3\2\2\2\\]\3\2\2\2]^\7\24\2\2^\r\3\2\2\2_`\b\b\1") - buf.write("\2`j\5\20\t\2ab\7\25\2\2bc\5\16\b\2cd\7\26\2\2dj\3\2\2") - buf.write("\2ef\t\3\2\2fj\5\16\b\ngh\7\36\2\2hj\5\16\b\6i_\3\2\2") - buf.write("\2ia\3\2\2\2ie\3\2\2\2ig\3\2\2\2j\u0082\3\2\2\2kl\f\t") - buf.write("\2\2lm\t\4\2\2m\u0081\5\16\b\nno\f\b\2\2op\t\3\2\2p\u0081") - buf.write("\5\16\b\tqr\f\7\2\2rs\t\5\2\2s\u0081\5\16\b\7tu\f\5\2") - buf.write("\2uv\7\37\2\2v\u0081\5\16\b\5wx\f\4\2\2xy\7 \2\2y\u0081") - buf.write("\5\16\b\4z{\f\3\2\2{|\7\f\2\2|\u0081\5\16\b\3}~\f\13\2") - buf.write("\2~\177\7\27\2\2\177\u0081\7$\2\2\u0080k\3\2\2\2\u0080") - buf.write("n\3\2\2\2\u0080q\3\2\2\2\u0080t\3\2\2\2\u0080w\3\2\2\2") - buf.write("\u0080z\3\2\2\2\u0080}\3\2\2\2\u0081\u0084\3\2\2\2\u0082") - buf.write("\u0080\3\2\2\2\u0082\u0083\3\2\2\2\u0083\17\3\2\2\2\u0084") - buf.write("\u0082\3\2\2\2\u0085\u0089\7#\2\2\u0086\u0089\t\6\2\2") - buf.write("\u0087\u0089\7$\2\2\u0088\u0085\3\2\2\2\u0088\u0086\3") - buf.write("\2\2\2\u0088\u0087\3\2\2\2\u0089\21\3\2\2\2\20\25\36#") - buf.write("*\629EJT[i\u0080\u0082\u0088") + buf.write("\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b") + buf.write("\7\b\u008d\n\b\f\b\16\b\u0090\13\b\3\t\3\t\3\t\5\t\u0095") + buf.write("\n\t\3\t\2\3\16\n\2\4\6\b\n\f\16\20\2\t\3\2\7\20\4\2\n") + buf.write("\13\35\35\3\2\7\t\3\2\n\13\3\2\f\r\3\2\36#\3\2\'(\2\u00ab") + buf.write("\2\25\3\2\2\2\4\36\3\2\2\2\6\62\3\2\2\2\b\64\3\2\2\2\n") + buf.write("T\3\2\2\2\fV\3\2\2\2\16i\3\2\2\2\20\u0094\3\2\2\2\22\24") + buf.write("\5\4\3\2\23\22\3\2\2\2\24\27\3\2\2\2\25\23\3\2\2\2\25") + buf.write("\26\3\2\2\2\26\30\3\2\2\2\27\25\3\2\2\2\30\31\7\2\2\3") + buf.write("\31\3\3\2\2\2\32\33\5\6\4\2\33\34\7\3\2\2\34\37\3\2\2") + buf.write("\2\35\37\5\n\6\2\36\32\3\2\2\2\36\35\3\2\2\2\37\5\3\2") + buf.write("\2\2 \63\7\4\2\2!#\7\5\2\2\"$\5\16\b\2#\"\3\2\2\2#$\3") + buf.write("\2\2\2$\63\3\2\2\2%&\5\b\5\2&\'\7\6\2\2\')\3\2\2\2(%\3") + buf.write("\2\2\2),\3\2\2\2*(\3\2\2\2*+\3\2\2\2+-\3\2\2\2,*\3\2\2") + buf.write("\2-\63\5\16\b\2./\7*\2\2/\60\t\2\2\2\60\61\7\6\2\2\61") + buf.write("\63\5\16\b\2\62 \3\2\2\2\62!\3\2\2\2\62*\3\2\2\2\62.\3") + buf.write("\2\2\2\63\7\3\2\2\2\649\7*\2\2\65\66\7\21\2\2\668\7*\2") + buf.write("\2\67\65\3\2\2\28;\3\2\2\29\67\3\2\2\29:\3\2\2\2:\t\3") + buf.write("\2\2\2;9\3\2\2\2<=\7\22\2\2=>\5\16\b\2>E\5\f\7\2?@\7\23") + buf.write("\2\2@A\5\16\b\2AB\5\f\7\2BD\3\2\2\2C?\3\2\2\2DG\3\2\2") + buf.write("\2EC\3\2\2\2EF\3\2\2\2FJ\3\2\2\2GE\3\2\2\2HI\7\24\2\2") + buf.write("IK\5\f\7\2JH\3\2\2\2JK\3\2\2\2KU\3\2\2\2LM\7\25\2\2MN") + buf.write("\5\16\b\2NO\5\f\7\2OU\3\2\2\2PQ\7\26\2\2QR\5\16\b\2RS") + buf.write("\5\f\7\2SU\3\2\2\2T<\3\2\2\2TL\3\2\2\2TP\3\2\2\2U\13\3") + buf.write("\2\2\2VW\7\27\2\2WY\7\30\2\2XZ\5\4\3\2YX\3\2\2\2Z[\3\2") + buf.write("\2\2[Y\3\2\2\2[\\\3\2\2\2\\]\3\2\2\2]^\7\31\2\2^\r\3\2") + buf.write("\2\2_`\b\b\1\2`j\5\20\t\2ab\7\32\2\2bc\5\16\b\2cd\7\33") + buf.write("\2\2dj\3\2\2\2ef\t\3\2\2fj\5\16\b\16gh\7$\2\2hj\5\16\b") + buf.write("\6i_\3\2\2\2ia\3\2\2\2ie\3\2\2\2ig\3\2\2\2j\u008e\3\2") + buf.write("\2\2kl\f\r\2\2lm\t\4\2\2m\u008d\5\16\b\16no\f\f\2\2op") + buf.write("\t\5\2\2p\u008d\5\16\b\rqr\f\13\2\2rs\t\6\2\2s\u008d\5") + buf.write("\16\b\ftu\f\n\2\2uv\7\16\2\2v\u008d\5\16\b\13wx\f\t\2") + buf.write("\2xy\7\17\2\2y\u008d\5\16\b\nz{\f\b\2\2{|\7\20\2\2|\u008d") + buf.write("\5\16\b\t}~\f\7\2\2~\177\t\7\2\2\177\u008d\5\16\b\7\u0080") + buf.write("\u0081\f\5\2\2\u0081\u0082\7%\2\2\u0082\u008d\5\16\b\5") + buf.write("\u0083\u0084\f\4\2\2\u0084\u0085\7&\2\2\u0085\u008d\5") + buf.write("\16\b\4\u0086\u0087\f\3\2\2\u0087\u0088\7\21\2\2\u0088") + buf.write("\u008d\5\16\b\3\u0089\u008a\f\17\2\2\u008a\u008b\7\34") + buf.write("\2\2\u008b\u008d\7*\2\2\u008ck\3\2\2\2\u008cn\3\2\2\2") + buf.write("\u008cq\3\2\2\2\u008ct\3\2\2\2\u008cw\3\2\2\2\u008cz\3") + buf.write("\2\2\2\u008c}\3\2\2\2\u008c\u0080\3\2\2\2\u008c\u0083") + buf.write("\3\2\2\2\u008c\u0086\3\2\2\2\u008c\u0089\3\2\2\2\u008d") + buf.write("\u0090\3\2\2\2\u008e\u008c\3\2\2\2\u008e\u008f\3\2\2\2") + buf.write("\u008f\17\3\2\2\2\u0090\u008e\3\2\2\2\u0091\u0095\7)\2") + buf.write("\2\u0092\u0095\t\b\2\2\u0093\u0095\7*\2\2\u0094\u0091") + buf.write("\3\2\2\2\u0094\u0092\3\2\2\2\u0094\u0093\3\2\2\2\u0095") + buf.write("\21\3\2\2\2\20\25\36#*\629EJT[i\u008c\u008e\u0094") return buf.getvalue() @@ -72,11 +79,11 @@ class PyxellParser ( Parser ): sharedContextCache = PredictionContextCache() literalNames = [ "", "';'", "'skip'", "'print'", "'='", "'*'", - "'/'", "'%'", "'+'", "'-'", "','", "'if'", "'elif'", - "'else'", "'while'", "'until'", "'do'", "'{'", "'}'", - "'('", "')'", "'.'", "'=='", "'!='", "'<'", "'<='", - "'>'", "'>='", "'not'", "'and'", "'or'", "'true'", - "'false'" ] + "'/'", "'%'", "'+'", "'-'", "'<<'", "'>>'", "'&'", + "'$'", "'|'", "','", "'if'", "'elif'", "'else'", "'while'", + "'until'", "'do'", "'{'", "'}'", "'('", "')'", "'.'", + "'~'", "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", + "'not'", "'and'", "'or'", "'true'", "'false'" ] symbolicNames = [ "", "", "", "", "", "", "", "", @@ -86,7 +93,9 @@ class PyxellParser ( Parser ): "", "", "", "", "", "", "", "", "", "", "", "", - "", "INT", "ID", "WS", "ERR" ] + "", "", "", "", + "", "", "", "INT", "ID", + "WS", "ERR" ] RULE_program = 0 RULE_stmt = 1 @@ -133,10 +142,16 @@ class PyxellParser ( Parser ): T__29=30 T__30=31 T__31=32 - INT=33 - ID=34 - WS=35 - ERR=36 + T__32=33 + T__33=34 + T__34=35 + T__35=36 + T__36=37 + T__37=38 + INT=39 + ID=40 + WS=41 + ERR=42 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -185,7 +200,7 @@ def program(self): self.state = 19 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__7) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__14) | (1 << PyxellParser.T__18) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__31) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0): + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__7) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__18) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__26) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__37) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0): self.state = 16 self.stmt() self.state = 21 @@ -237,14 +252,14 @@ def stmt(self): self.state = 28 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__7, PyxellParser.T__8, PyxellParser.T__18, PyxellParser.T__27, PyxellParser.T__30, PyxellParser.T__31, PyxellParser.INT, PyxellParser.ID]: + if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__7, PyxellParser.T__8, PyxellParser.T__23, PyxellParser.T__26, PyxellParser.T__33, PyxellParser.T__36, PyxellParser.T__37, PyxellParser.INT, PyxellParser.ID]: self.enterOuterAlt(localctx, 1) self.state = 24 self.simple_stmt() self.state = 25 self.match(PyxellParser.T__0) pass - elif token in [PyxellParser.T__10, PyxellParser.T__13, PyxellParser.T__14]: + elif token in [PyxellParser.T__15, PyxellParser.T__18, PyxellParser.T__19]: self.enterOuterAlt(localctx, 2) self.state = 27 self.compound_stmt() @@ -376,7 +391,7 @@ def simple_stmt(self): self.state = 33 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__7) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__18) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__31) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0): + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__7) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__26) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__37) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0): self.state = 32 self.expr(0) @@ -411,7 +426,7 @@ def simple_stmt(self): self.state = 45 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__4) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__7) | (1 << PyxellParser.T__8))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__4) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__7) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__11) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -468,9 +483,9 @@ def lvalue(self): self.state = 55 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==PyxellParser.T__9: + while _la==PyxellParser.T__14: self.state = 51 - self.match(PyxellParser.T__9) + self.match(PyxellParser.T__14) self.state = 52 self.match(PyxellParser.ID) self.state = 57 @@ -578,11 +593,11 @@ def compound_stmt(self): self.state = 82 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__10]: + if token in [PyxellParser.T__15]: localctx = PyxellParser.StmtIfContext(self, localctx) self.enterOuterAlt(localctx, 1) self.state = 58 - self.match(PyxellParser.T__10) + self.match(PyxellParser.T__15) self.state = 59 self.expr(0) self.state = 60 @@ -590,9 +605,9 @@ def compound_stmt(self): self.state = 67 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==PyxellParser.T__11: + while _la==PyxellParser.T__16: self.state = 61 - self.match(PyxellParser.T__11) + self.match(PyxellParser.T__16) self.state = 62 self.expr(0) self.state = 63 @@ -604,29 +619,29 @@ def compound_stmt(self): self.state = 72 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__12: + if _la==PyxellParser.T__17: self.state = 70 - self.match(PyxellParser.T__12) + self.match(PyxellParser.T__17) self.state = 71 self.block() pass - elif token in [PyxellParser.T__13]: + elif token in [PyxellParser.T__18]: localctx = PyxellParser.StmtWhileContext(self, localctx) self.enterOuterAlt(localctx, 2) self.state = 74 - self.match(PyxellParser.T__13) + self.match(PyxellParser.T__18) self.state = 75 self.expr(0) self.state = 76 self.block() pass - elif token in [PyxellParser.T__14]: + elif token in [PyxellParser.T__19]: localctx = PyxellParser.StmtUntilContext(self, localctx) self.enterOuterAlt(localctx, 3) self.state = 78 - self.match(PyxellParser.T__14) + self.match(PyxellParser.T__19) self.state = 79 self.expr(0) self.state = 80 @@ -677,9 +692,9 @@ def block(self): try: self.enterOuterAlt(localctx, 1) self.state = 84 - self.match(PyxellParser.T__15) + self.match(PyxellParser.T__20) self.state = 85 - self.match(PyxellParser.T__16) + self.match(PyxellParser.T__21) self.state = 87 self._errHandler.sync(self) _la = self._input.LA(1) @@ -689,11 +704,11 @@ def block(self): self.state = 89 self._errHandler.sync(self) _la = self._input.LA(1) - if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__7) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__14) | (1 << PyxellParser.T__18) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__31) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0)): + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__7) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__18) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__26) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__37) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0)): break self.state = 91 - self.match(PyxellParser.T__17) + self.match(PyxellParser.T__22) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -886,7 +901,7 @@ def expr(self, _p:int=0): self.state = 103 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__30, PyxellParser.T__31, PyxellParser.INT, PyxellParser.ID]: + if token in [PyxellParser.T__36, PyxellParser.T__37, PyxellParser.INT, PyxellParser.ID]: localctx = PyxellParser.ExprAtomContext(self, localctx) self._ctx = localctx _prevctx = localctx @@ -894,38 +909,38 @@ def expr(self, _p:int=0): self.state = 94 self.atom() pass - elif token in [PyxellParser.T__18]: + elif token in [PyxellParser.T__23]: localctx = PyxellParser.ExprParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx self.state = 95 - self.match(PyxellParser.T__18) + self.match(PyxellParser.T__23) self.state = 96 self.expr(0) self.state = 97 - self.match(PyxellParser.T__19) + self.match(PyxellParser.T__24) pass - elif token in [PyxellParser.T__7, PyxellParser.T__8]: + elif token in [PyxellParser.T__7, PyxellParser.T__8, PyxellParser.T__26]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx self.state = 99 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not(_la==PyxellParser.T__7 or _la==PyxellParser.T__8): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__7) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__26))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() self.state = 100 - self.expr(8) + self.expr(12) pass - elif token in [PyxellParser.T__27]: + elif token in [PyxellParser.T__33]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx self.state = 101 - localctx.op = self.match(PyxellParser.T__27) + localctx.op = self.match(PyxellParser.T__33) self.state = 102 self.expr(4) pass @@ -933,7 +948,7 @@ def expr(self, _p:int=0): raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 128 + self.state = 140 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,12,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: @@ -941,16 +956,16 @@ def expr(self, _p:int=0): if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 126 + self.state = 138 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,11,self._ctx) if la_ == 1: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 105 - if not self.precpred(self._ctx, 7): + if not self.precpred(self._ctx, 11): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") self.state = 106 localctx.op = self._input.LT(1) _la = self._input.LA(1) @@ -960,16 +975,16 @@ def expr(self, _p:int=0): self._errHandler.reportMatch(self) self.consume() self.state = 107 - self.expr(8) + self.expr(12) pass elif la_ == 2: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 108 - if not self.precpred(self._ctx, 6): + if not self.precpred(self._ctx, 10): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") self.state = 109 localctx.op = self._input.LT(1) _la = self._input.LA(1) @@ -979,82 +994,140 @@ def expr(self, _p:int=0): self._errHandler.reportMatch(self) self.consume() self.state = 110 - self.expr(7) + self.expr(11) pass elif la_ == 3: - localctx = PyxellParser.ExprCmpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 111 - if not self.precpred(self._ctx, 5): + if not self.precpred(self._ctx, 9): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") self.state = 112 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__25) | (1 << PyxellParser.T__26))) != 0)): + if not(_la==PyxellParser.T__9 or _la==PyxellParser.T__10): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() self.state = 113 - self.expr(5) + self.expr(10) pass elif la_ == 4: - localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 114 - if not self.precpred(self._ctx, 3): + if not self.precpred(self._ctx, 8): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") self.state = 115 - localctx.op = self.match(PyxellParser.T__28) + localctx.op = self.match(PyxellParser.T__11) self.state = 116 - self.expr(3) + self.expr(9) pass elif la_ == 5: - localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 117 - if not self.precpred(self._ctx, 2): + if not self.precpred(self._ctx, 7): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") self.state = 118 - localctx.op = self.match(PyxellParser.T__29) + localctx.op = self.match(PyxellParser.T__12) self.state = 119 - self.expr(2) + self.expr(8) pass elif la_ == 6: - localctx = PyxellParser.ExprTupleContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 120 - if not self.precpred(self._ctx, 1): + if not self.precpred(self._ctx, 6): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") self.state = 121 - self.match(PyxellParser.T__9) + localctx.op = self.match(PyxellParser.T__13) self.state = 122 - self.expr(1) + self.expr(7) pass elif la_ == 7: - localctx = PyxellParser.ExprAttrContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + localctx = PyxellParser.ExprCmpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 123 - if not self.precpred(self._ctx, 9): + if not self.precpred(self._ctx, 5): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") self.state = 124 - self.match(PyxellParser.T__20) + localctx.op = self._input.LT(1) + _la = self._input.LA(1) + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__27) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__31) | (1 << PyxellParser.T__32))) != 0)): + localctx.op = self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() self.state = 125 + self.expr(5) + pass + + elif la_ == 8: + localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) + self.state = 126 + if not self.precpred(self._ctx, 3): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") + self.state = 127 + localctx.op = self.match(PyxellParser.T__34) + self.state = 128 + self.expr(3) + pass + + elif la_ == 9: + localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) + self.state = 129 + if not self.precpred(self._ctx, 2): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") + self.state = 130 + localctx.op = self.match(PyxellParser.T__35) + self.state = 131 + self.expr(2) + pass + + elif la_ == 10: + localctx = PyxellParser.ExprTupleContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) + self.state = 132 + if not self.precpred(self._ctx, 1): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 133 + self.match(PyxellParser.T__14) + self.state = 134 + self.expr(1) + pass + + elif la_ == 11: + localctx = PyxellParser.ExprAttrContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) + self.state = 135 + if not self.precpred(self._ctx, 13): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") + self.state = 136 + self.match(PyxellParser.T__25) + self.state = 137 self.match(PyxellParser.ID) pass - self.state = 130 + self.state = 142 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,12,self._ctx) @@ -1136,21 +1209,21 @@ def atom(self): self.enterRule(localctx, 14, self.RULE_atom) self._la = 0 # Token type try: - self.state = 134 + self.state = 146 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: localctx = PyxellParser.AtomIntContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 131 + self.state = 143 self.match(PyxellParser.INT) pass - elif token in [PyxellParser.T__30, PyxellParser.T__31]: + elif token in [PyxellParser.T__36, PyxellParser.T__37]: localctx = PyxellParser.AtomBoolContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 132 + self.state = 144 _la = self._input.LA(1) - if not(_la==PyxellParser.T__30 or _la==PyxellParser.T__31): + if not(_la==PyxellParser.T__36 or _la==PyxellParser.T__37): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -1159,7 +1232,7 @@ def atom(self): elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 133 + self.state = 145 self.match(PyxellParser.ID) pass else: @@ -1187,31 +1260,47 @@ def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): def expr_sempred(self, localctx:ExprContext, predIndex:int): if predIndex == 0: - return self.precpred(self._ctx, 7) + return self.precpred(self._ctx, 11) if predIndex == 1: - return self.precpred(self._ctx, 6) + return self.precpred(self._ctx, 10) if predIndex == 2: - return self.precpred(self._ctx, 5) + return self.precpred(self._ctx, 9) if predIndex == 3: - return self.precpred(self._ctx, 3) + return self.precpred(self._ctx, 8) if predIndex == 4: - return self.precpred(self._ctx, 2) + return self.precpred(self._ctx, 7) if predIndex == 5: - return self.precpred(self._ctx, 1) + return self.precpred(self._ctx, 6) if predIndex == 6: - return self.precpred(self._ctx, 9) + return self.precpred(self._ctx, 5) + + + if predIndex == 7: + return self.precpred(self._ctx, 3) + + + if predIndex == 8: + return self.precpred(self._ctx, 2) + + + if predIndex == 9: + return self.precpred(self._ctx, 1) + + + if predIndex == 10: + return self.precpred(self._ctx, 13) diff --git a/src/compiler.py b/src/compiler.py index eb89cf60..f21fe6c1 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -56,7 +56,23 @@ def assign(self, ctx, id, value): self.builder.store(value, var) - def binop(self, ctx, op, left, right): + def unaryop(self, ctx, op, value): + if op in ('+', '-', '~'): + type = tInt + elif op == 'not': + type = tBool + + if value.type != type: + self.throw(ctx, err.NoUnaryOperator(op, value.type)) + + if op == '+': + return value + elif op == '-': + return self.builder.neg(value) + elif op in ('~', 'not'): + return self.builder.not_(value) + + def binaryop(self, ctx, op, left, right): if not left.type == right.type == tInt: self.throw(ctx, err.NoBinaryOperator(op, left.type, right.type)) @@ -66,6 +82,11 @@ def binop(self, ctx, op, left, right): '%': self.builder.srem, '+': self.builder.add, '-': self.builder.sub, + '<<': self.builder.shl, + '>>': self.builder.ashr, + '&': self.builder.and_, + '$': self.builder.xor, + '|': self.builder.or_, }[op] return instruction(left, right) @@ -141,7 +162,7 @@ def visitLvalue(self, ctx): def visitStmtAssgExpr(self, ctx): var = self.get(ctx, ctx.ID()) - value = self.binop(ctx, ctx.op.text, self.builder.load(var), self.visit(ctx.expr())) + value = self.binaryop(ctx, ctx.op.text, self.builder.load(var), self.visit(ctx.expr())) self.builder.store(value, var) def visitStmtIf(self, ctx): @@ -242,24 +263,10 @@ def visitExprAttr(self, ctx): self.throw(ctx, err.NoAttribute(value.type, id)) def visitExprUnaryOp(self, ctx): - value = self.visit(ctx.expr()) - op = ctx.op.text - - if op == '+': - if value.type != tInt: - self.throw(ctx, err.NoUnaryOperator(op, value.type)) - return value - elif op == '-': - if value.type != tInt: - self.throw(ctx, err.NoUnaryOperator(op, value.type)) - return self.builder.neg(value) - elif op == 'not': - if value.type != tBool: - self.throw(ctx, err.NoUnaryOperator(op, value.type)) - return self.builder.not_(value) + return self.unaryop(ctx, ctx.op.text, self.visit(ctx.expr())) def visitExprBinaryOp(self, ctx): - return self.binop(ctx, ctx.op.text, self.visit(ctx.expr(0)), self.visit(ctx.expr(1))) + return self.binaryop(ctx, ctx.op.text, self.visit(ctx.expr(0)), self.visit(ctx.expr(1))) def visitExprCmp(self, ctx): exprs = [] From d564aca006a80c6589b1cd25793915ccc3399a3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sun, 6 Oct 2019 18:59:13 +0200 Subject: [PATCH 013/100] Power operator --- src/Pyxell.g4 | 3 +- src/antlr/Pyxell.interp | 4 +- src/antlr/Pyxell.tokens | 78 ++++---- src/antlr/PyxellLexer.interp | 5 +- src/antlr/PyxellLexer.py | 199 ++++++++++---------- src/antlr/PyxellLexer.tokens | 78 ++++---- src/antlr/PyxellParser.py | 345 +++++++++++++++++++---------------- src/compiler.py | 30 +-- 8 files changed, 390 insertions(+), 352 deletions(-) diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index bdf2017a..aa4cd313 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -13,7 +13,7 @@ simple_stmt : 'skip' # StmtSkip | 'print' expr? # StmtPrint | (lvalue '=')* expr # StmtAssg - | ID op=('*' | '/' | '%' | '+' | '-' | '<<' | '>>' | '&' | '$' | '|') '=' expr # StmtAssgExpr + | ID op=('^' | '*' | '/' | '%' | '+' | '-' | '<<' | '>>' | '&' | '$' | '|') '=' expr # StmtAssgExpr ; lvalue @@ -34,6 +34,7 @@ expr : atom # ExprAtom | '(' expr ')' # ExprParentheses | expr '.' ID # ExprAttr + | expr op='^' expr # ExprBinaryOp | op=('+' | '-' | '~') expr # ExprUnaryOp | expr op=('*' | '/' | '%') expr # ExprBinaryOp | expr op=('+' | '-') expr # ExprBinaryOp diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index 585b8111..cf3821ba 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -4,6 +4,7 @@ null 'skip' 'print' '=' +'^' '*' '/' '%' @@ -83,6 +84,7 @@ null null null null +null INT ID WS @@ -100,4 +102,4 @@ atom atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 44, 151, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 3, 2, 7, 2, 20, 10, 2, 12, 2, 14, 2, 23, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 31, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 36, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 41, 10, 4, 12, 4, 14, 4, 44, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 51, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 56, 10, 5, 12, 5, 14, 5, 59, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 68, 10, 6, 12, 6, 14, 6, 71, 11, 6, 3, 6, 3, 6, 5, 6, 75, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 85, 10, 6, 3, 7, 3, 7, 3, 7, 6, 7, 90, 10, 7, 13, 7, 14, 7, 91, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 106, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 141, 10, 8, 12, 8, 14, 8, 144, 11, 8, 3, 9, 3, 9, 3, 9, 5, 9, 149, 10, 9, 3, 9, 2, 3, 14, 10, 2, 4, 6, 8, 10, 12, 14, 16, 2, 9, 3, 2, 7, 16, 4, 2, 10, 11, 29, 29, 3, 2, 7, 9, 3, 2, 10, 11, 3, 2, 12, 13, 3, 2, 30, 35, 3, 2, 39, 40, 2, 171, 2, 21, 3, 2, 2, 2, 4, 30, 3, 2, 2, 2, 6, 50, 3, 2, 2, 2, 8, 52, 3, 2, 2, 2, 10, 84, 3, 2, 2, 2, 12, 86, 3, 2, 2, 2, 14, 105, 3, 2, 2, 2, 16, 148, 3, 2, 2, 2, 18, 20, 5, 4, 3, 2, 19, 18, 3, 2, 2, 2, 20, 23, 3, 2, 2, 2, 21, 19, 3, 2, 2, 2, 21, 22, 3, 2, 2, 2, 22, 24, 3, 2, 2, 2, 23, 21, 3, 2, 2, 2, 24, 25, 7, 2, 2, 3, 25, 3, 3, 2, 2, 2, 26, 27, 5, 6, 4, 2, 27, 28, 7, 3, 2, 2, 28, 31, 3, 2, 2, 2, 29, 31, 5, 10, 6, 2, 30, 26, 3, 2, 2, 2, 30, 29, 3, 2, 2, 2, 31, 5, 3, 2, 2, 2, 32, 51, 7, 4, 2, 2, 33, 35, 7, 5, 2, 2, 34, 36, 5, 14, 8, 2, 35, 34, 3, 2, 2, 2, 35, 36, 3, 2, 2, 2, 36, 51, 3, 2, 2, 2, 37, 38, 5, 8, 5, 2, 38, 39, 7, 6, 2, 2, 39, 41, 3, 2, 2, 2, 40, 37, 3, 2, 2, 2, 41, 44, 3, 2, 2, 2, 42, 40, 3, 2, 2, 2, 42, 43, 3, 2, 2, 2, 43, 45, 3, 2, 2, 2, 44, 42, 3, 2, 2, 2, 45, 51, 5, 14, 8, 2, 46, 47, 7, 42, 2, 2, 47, 48, 9, 2, 2, 2, 48, 49, 7, 6, 2, 2, 49, 51, 5, 14, 8, 2, 50, 32, 3, 2, 2, 2, 50, 33, 3, 2, 2, 2, 50, 42, 3, 2, 2, 2, 50, 46, 3, 2, 2, 2, 51, 7, 3, 2, 2, 2, 52, 57, 7, 42, 2, 2, 53, 54, 7, 17, 2, 2, 54, 56, 7, 42, 2, 2, 55, 53, 3, 2, 2, 2, 56, 59, 3, 2, 2, 2, 57, 55, 3, 2, 2, 2, 57, 58, 3, 2, 2, 2, 58, 9, 3, 2, 2, 2, 59, 57, 3, 2, 2, 2, 60, 61, 7, 18, 2, 2, 61, 62, 5, 14, 8, 2, 62, 69, 5, 12, 7, 2, 63, 64, 7, 19, 2, 2, 64, 65, 5, 14, 8, 2, 65, 66, 5, 12, 7, 2, 66, 68, 3, 2, 2, 2, 67, 63, 3, 2, 2, 2, 68, 71, 3, 2, 2, 2, 69, 67, 3, 2, 2, 2, 69, 70, 3, 2, 2, 2, 70, 74, 3, 2, 2, 2, 71, 69, 3, 2, 2, 2, 72, 73, 7, 20, 2, 2, 73, 75, 5, 12, 7, 2, 74, 72, 3, 2, 2, 2, 74, 75, 3, 2, 2, 2, 75, 85, 3, 2, 2, 2, 76, 77, 7, 21, 2, 2, 77, 78, 5, 14, 8, 2, 78, 79, 5, 12, 7, 2, 79, 85, 3, 2, 2, 2, 80, 81, 7, 22, 2, 2, 81, 82, 5, 14, 8, 2, 82, 83, 5, 12, 7, 2, 83, 85, 3, 2, 2, 2, 84, 60, 3, 2, 2, 2, 84, 76, 3, 2, 2, 2, 84, 80, 3, 2, 2, 2, 85, 11, 3, 2, 2, 2, 86, 87, 7, 23, 2, 2, 87, 89, 7, 24, 2, 2, 88, 90, 5, 4, 3, 2, 89, 88, 3, 2, 2, 2, 90, 91, 3, 2, 2, 2, 91, 89, 3, 2, 2, 2, 91, 92, 3, 2, 2, 2, 92, 93, 3, 2, 2, 2, 93, 94, 7, 25, 2, 2, 94, 13, 3, 2, 2, 2, 95, 96, 8, 8, 1, 2, 96, 106, 5, 16, 9, 2, 97, 98, 7, 26, 2, 2, 98, 99, 5, 14, 8, 2, 99, 100, 7, 27, 2, 2, 100, 106, 3, 2, 2, 2, 101, 102, 9, 3, 2, 2, 102, 106, 5, 14, 8, 14, 103, 104, 7, 36, 2, 2, 104, 106, 5, 14, 8, 6, 105, 95, 3, 2, 2, 2, 105, 97, 3, 2, 2, 2, 105, 101, 3, 2, 2, 2, 105, 103, 3, 2, 2, 2, 106, 142, 3, 2, 2, 2, 107, 108, 12, 13, 2, 2, 108, 109, 9, 4, 2, 2, 109, 141, 5, 14, 8, 14, 110, 111, 12, 12, 2, 2, 111, 112, 9, 5, 2, 2, 112, 141, 5, 14, 8, 13, 113, 114, 12, 11, 2, 2, 114, 115, 9, 6, 2, 2, 115, 141, 5, 14, 8, 12, 116, 117, 12, 10, 2, 2, 117, 118, 7, 14, 2, 2, 118, 141, 5, 14, 8, 11, 119, 120, 12, 9, 2, 2, 120, 121, 7, 15, 2, 2, 121, 141, 5, 14, 8, 10, 122, 123, 12, 8, 2, 2, 123, 124, 7, 16, 2, 2, 124, 141, 5, 14, 8, 9, 125, 126, 12, 7, 2, 2, 126, 127, 9, 7, 2, 2, 127, 141, 5, 14, 8, 7, 128, 129, 12, 5, 2, 2, 129, 130, 7, 37, 2, 2, 130, 141, 5, 14, 8, 5, 131, 132, 12, 4, 2, 2, 132, 133, 7, 38, 2, 2, 133, 141, 5, 14, 8, 4, 134, 135, 12, 3, 2, 2, 135, 136, 7, 17, 2, 2, 136, 141, 5, 14, 8, 3, 137, 138, 12, 15, 2, 2, 138, 139, 7, 28, 2, 2, 139, 141, 7, 42, 2, 2, 140, 107, 3, 2, 2, 2, 140, 110, 3, 2, 2, 2, 140, 113, 3, 2, 2, 2, 140, 116, 3, 2, 2, 2, 140, 119, 3, 2, 2, 2, 140, 122, 3, 2, 2, 2, 140, 125, 3, 2, 2, 2, 140, 128, 3, 2, 2, 2, 140, 131, 3, 2, 2, 2, 140, 134, 3, 2, 2, 2, 140, 137, 3, 2, 2, 2, 141, 144, 3, 2, 2, 2, 142, 140, 3, 2, 2, 2, 142, 143, 3, 2, 2, 2, 143, 15, 3, 2, 2, 2, 144, 142, 3, 2, 2, 2, 145, 149, 7, 41, 2, 2, 146, 149, 9, 8, 2, 2, 147, 149, 7, 42, 2, 2, 148, 145, 3, 2, 2, 2, 148, 146, 3, 2, 2, 2, 148, 147, 3, 2, 2, 2, 149, 17, 3, 2, 2, 2, 16, 21, 30, 35, 42, 50, 57, 69, 74, 84, 91, 105, 140, 142, 148] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 45, 154, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 3, 2, 7, 2, 20, 10, 2, 12, 2, 14, 2, 23, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 31, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 36, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 41, 10, 4, 12, 4, 14, 4, 44, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 51, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 56, 10, 5, 12, 5, 14, 5, 59, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 68, 10, 6, 12, 6, 14, 6, 71, 11, 6, 3, 6, 3, 6, 5, 6, 75, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 85, 10, 6, 3, 7, 3, 7, 3, 7, 6, 7, 90, 10, 7, 13, 7, 14, 7, 91, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 106, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 144, 10, 8, 12, 8, 14, 8, 147, 11, 8, 3, 9, 3, 9, 3, 9, 5, 9, 152, 10, 9, 3, 9, 2, 3, 14, 10, 2, 4, 6, 8, 10, 12, 14, 16, 2, 9, 3, 2, 7, 17, 4, 2, 11, 12, 30, 30, 3, 2, 8, 10, 3, 2, 11, 12, 3, 2, 13, 14, 3, 2, 31, 36, 3, 2, 40, 41, 2, 175, 2, 21, 3, 2, 2, 2, 4, 30, 3, 2, 2, 2, 6, 50, 3, 2, 2, 2, 8, 52, 3, 2, 2, 2, 10, 84, 3, 2, 2, 2, 12, 86, 3, 2, 2, 2, 14, 105, 3, 2, 2, 2, 16, 151, 3, 2, 2, 2, 18, 20, 5, 4, 3, 2, 19, 18, 3, 2, 2, 2, 20, 23, 3, 2, 2, 2, 21, 19, 3, 2, 2, 2, 21, 22, 3, 2, 2, 2, 22, 24, 3, 2, 2, 2, 23, 21, 3, 2, 2, 2, 24, 25, 7, 2, 2, 3, 25, 3, 3, 2, 2, 2, 26, 27, 5, 6, 4, 2, 27, 28, 7, 3, 2, 2, 28, 31, 3, 2, 2, 2, 29, 31, 5, 10, 6, 2, 30, 26, 3, 2, 2, 2, 30, 29, 3, 2, 2, 2, 31, 5, 3, 2, 2, 2, 32, 51, 7, 4, 2, 2, 33, 35, 7, 5, 2, 2, 34, 36, 5, 14, 8, 2, 35, 34, 3, 2, 2, 2, 35, 36, 3, 2, 2, 2, 36, 51, 3, 2, 2, 2, 37, 38, 5, 8, 5, 2, 38, 39, 7, 6, 2, 2, 39, 41, 3, 2, 2, 2, 40, 37, 3, 2, 2, 2, 41, 44, 3, 2, 2, 2, 42, 40, 3, 2, 2, 2, 42, 43, 3, 2, 2, 2, 43, 45, 3, 2, 2, 2, 44, 42, 3, 2, 2, 2, 45, 51, 5, 14, 8, 2, 46, 47, 7, 43, 2, 2, 47, 48, 9, 2, 2, 2, 48, 49, 7, 6, 2, 2, 49, 51, 5, 14, 8, 2, 50, 32, 3, 2, 2, 2, 50, 33, 3, 2, 2, 2, 50, 42, 3, 2, 2, 2, 50, 46, 3, 2, 2, 2, 51, 7, 3, 2, 2, 2, 52, 57, 7, 43, 2, 2, 53, 54, 7, 18, 2, 2, 54, 56, 7, 43, 2, 2, 55, 53, 3, 2, 2, 2, 56, 59, 3, 2, 2, 2, 57, 55, 3, 2, 2, 2, 57, 58, 3, 2, 2, 2, 58, 9, 3, 2, 2, 2, 59, 57, 3, 2, 2, 2, 60, 61, 7, 19, 2, 2, 61, 62, 5, 14, 8, 2, 62, 69, 5, 12, 7, 2, 63, 64, 7, 20, 2, 2, 64, 65, 5, 14, 8, 2, 65, 66, 5, 12, 7, 2, 66, 68, 3, 2, 2, 2, 67, 63, 3, 2, 2, 2, 68, 71, 3, 2, 2, 2, 69, 67, 3, 2, 2, 2, 69, 70, 3, 2, 2, 2, 70, 74, 3, 2, 2, 2, 71, 69, 3, 2, 2, 2, 72, 73, 7, 21, 2, 2, 73, 75, 5, 12, 7, 2, 74, 72, 3, 2, 2, 2, 74, 75, 3, 2, 2, 2, 75, 85, 3, 2, 2, 2, 76, 77, 7, 22, 2, 2, 77, 78, 5, 14, 8, 2, 78, 79, 5, 12, 7, 2, 79, 85, 3, 2, 2, 2, 80, 81, 7, 23, 2, 2, 81, 82, 5, 14, 8, 2, 82, 83, 5, 12, 7, 2, 83, 85, 3, 2, 2, 2, 84, 60, 3, 2, 2, 2, 84, 76, 3, 2, 2, 2, 84, 80, 3, 2, 2, 2, 85, 11, 3, 2, 2, 2, 86, 87, 7, 24, 2, 2, 87, 89, 7, 25, 2, 2, 88, 90, 5, 4, 3, 2, 89, 88, 3, 2, 2, 2, 90, 91, 3, 2, 2, 2, 91, 89, 3, 2, 2, 2, 91, 92, 3, 2, 2, 2, 92, 93, 3, 2, 2, 2, 93, 94, 7, 26, 2, 2, 94, 13, 3, 2, 2, 2, 95, 96, 8, 8, 1, 2, 96, 106, 5, 16, 9, 2, 97, 98, 7, 27, 2, 2, 98, 99, 5, 14, 8, 2, 99, 100, 7, 28, 2, 2, 100, 106, 3, 2, 2, 2, 101, 102, 9, 3, 2, 2, 102, 106, 5, 14, 8, 14, 103, 104, 7, 37, 2, 2, 104, 106, 5, 14, 8, 6, 105, 95, 3, 2, 2, 2, 105, 97, 3, 2, 2, 2, 105, 101, 3, 2, 2, 2, 105, 103, 3, 2, 2, 2, 106, 145, 3, 2, 2, 2, 107, 108, 12, 15, 2, 2, 108, 109, 7, 7, 2, 2, 109, 144, 5, 14, 8, 15, 110, 111, 12, 13, 2, 2, 111, 112, 9, 4, 2, 2, 112, 144, 5, 14, 8, 14, 113, 114, 12, 12, 2, 2, 114, 115, 9, 5, 2, 2, 115, 144, 5, 14, 8, 13, 116, 117, 12, 11, 2, 2, 117, 118, 9, 6, 2, 2, 118, 144, 5, 14, 8, 12, 119, 120, 12, 10, 2, 2, 120, 121, 7, 15, 2, 2, 121, 144, 5, 14, 8, 11, 122, 123, 12, 9, 2, 2, 123, 124, 7, 16, 2, 2, 124, 144, 5, 14, 8, 10, 125, 126, 12, 8, 2, 2, 126, 127, 7, 17, 2, 2, 127, 144, 5, 14, 8, 9, 128, 129, 12, 7, 2, 2, 129, 130, 9, 7, 2, 2, 130, 144, 5, 14, 8, 7, 131, 132, 12, 5, 2, 2, 132, 133, 7, 38, 2, 2, 133, 144, 5, 14, 8, 5, 134, 135, 12, 4, 2, 2, 135, 136, 7, 39, 2, 2, 136, 144, 5, 14, 8, 4, 137, 138, 12, 3, 2, 2, 138, 139, 7, 18, 2, 2, 139, 144, 5, 14, 8, 3, 140, 141, 12, 16, 2, 2, 141, 142, 7, 29, 2, 2, 142, 144, 7, 43, 2, 2, 143, 107, 3, 2, 2, 2, 143, 110, 3, 2, 2, 2, 143, 113, 3, 2, 2, 2, 143, 116, 3, 2, 2, 2, 143, 119, 3, 2, 2, 2, 143, 122, 3, 2, 2, 2, 143, 125, 3, 2, 2, 2, 143, 128, 3, 2, 2, 2, 143, 131, 3, 2, 2, 2, 143, 134, 3, 2, 2, 2, 143, 137, 3, 2, 2, 2, 143, 140, 3, 2, 2, 2, 144, 147, 3, 2, 2, 2, 145, 143, 3, 2, 2, 2, 145, 146, 3, 2, 2, 2, 146, 15, 3, 2, 2, 2, 147, 145, 3, 2, 2, 2, 148, 152, 7, 42, 2, 2, 149, 152, 9, 8, 2, 2, 150, 152, 7, 43, 2, 2, 151, 148, 3, 2, 2, 2, 151, 149, 3, 2, 2, 2, 151, 150, 3, 2, 2, 2, 152, 17, 3, 2, 2, 2, 16, 21, 30, 35, 42, 50, 57, 69, 74, 84, 91, 105, 143, 145, 151] \ No newline at end of file diff --git a/src/antlr/Pyxell.tokens b/src/antlr/Pyxell.tokens index c8e2fb10..0c88cbb2 100644 --- a/src/antlr/Pyxell.tokens +++ b/src/antlr/Pyxell.tokens @@ -36,45 +36,47 @@ T__34=35 T__35=36 T__36=37 T__37=38 -INT=39 -ID=40 -WS=41 -ERR=42 +T__38=39 +INT=40 +ID=41 +WS=42 +ERR=43 ';'=1 'skip'=2 'print'=3 '='=4 -'*'=5 -'/'=6 -'%'=7 -'+'=8 -'-'=9 -'<<'=10 -'>>'=11 -'&'=12 -'$'=13 -'|'=14 -','=15 -'if'=16 -'elif'=17 -'else'=18 -'while'=19 -'until'=20 -'do'=21 -'{'=22 -'}'=23 -'('=24 -')'=25 -'.'=26 -'~'=27 -'=='=28 -'!='=29 -'<'=30 -'<='=31 -'>'=32 -'>='=33 -'not'=34 -'and'=35 -'or'=36 -'true'=37 -'false'=38 +'^'=5 +'*'=6 +'/'=7 +'%'=8 +'+'=9 +'-'=10 +'<<'=11 +'>>'=12 +'&'=13 +'$'=14 +'|'=15 +','=16 +'if'=17 +'elif'=18 +'else'=19 +'while'=20 +'until'=21 +'do'=22 +'{'=23 +'}'=24 +'('=25 +')'=26 +'.'=27 +'~'=28 +'=='=29 +'!='=30 +'<'=31 +'<='=32 +'>'=33 +'>='=34 +'not'=35 +'and'=36 +'or'=37 +'true'=38 +'false'=39 diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp index 416542dd..6a7c73d7 100644 --- a/src/antlr/PyxellLexer.interp +++ b/src/antlr/PyxellLexer.interp @@ -4,6 +4,7 @@ null 'skip' 'print' '=' +'^' '*' '/' '%' @@ -83,6 +84,7 @@ null null null null +null INT ID WS @@ -127,6 +129,7 @@ T__34 T__35 T__36 T__37 +T__38 INT ID DIGIT @@ -144,4 +147,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 44, 244, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 6, 40, 214, 10, 40, 13, 40, 14, 40, 215, 3, 41, 3, 41, 7, 41, 220, 10, 41, 12, 41, 14, 41, 223, 11, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 5, 45, 234, 10, 45, 3, 46, 6, 46, 237, 10, 46, 13, 46, 14, 46, 238, 3, 46, 3, 46, 3, 47, 3, 47, 2, 2, 48, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 2, 85, 2, 87, 2, 89, 2, 91, 43, 93, 44, 3, 2, 7, 3, 2, 50, 59, 3, 2, 99, 124, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 244, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 3, 95, 3, 2, 2, 2, 5, 97, 3, 2, 2, 2, 7, 102, 3, 2, 2, 2, 9, 108, 3, 2, 2, 2, 11, 110, 3, 2, 2, 2, 13, 112, 3, 2, 2, 2, 15, 114, 3, 2, 2, 2, 17, 116, 3, 2, 2, 2, 19, 118, 3, 2, 2, 2, 21, 120, 3, 2, 2, 2, 23, 123, 3, 2, 2, 2, 25, 126, 3, 2, 2, 2, 27, 128, 3, 2, 2, 2, 29, 130, 3, 2, 2, 2, 31, 132, 3, 2, 2, 2, 33, 134, 3, 2, 2, 2, 35, 137, 3, 2, 2, 2, 37, 142, 3, 2, 2, 2, 39, 147, 3, 2, 2, 2, 41, 153, 3, 2, 2, 2, 43, 159, 3, 2, 2, 2, 45, 162, 3, 2, 2, 2, 47, 164, 3, 2, 2, 2, 49, 166, 3, 2, 2, 2, 51, 168, 3, 2, 2, 2, 53, 170, 3, 2, 2, 2, 55, 172, 3, 2, 2, 2, 57, 174, 3, 2, 2, 2, 59, 177, 3, 2, 2, 2, 61, 180, 3, 2, 2, 2, 63, 182, 3, 2, 2, 2, 65, 185, 3, 2, 2, 2, 67, 187, 3, 2, 2, 2, 69, 190, 3, 2, 2, 2, 71, 194, 3, 2, 2, 2, 73, 198, 3, 2, 2, 2, 75, 201, 3, 2, 2, 2, 77, 206, 3, 2, 2, 2, 79, 213, 3, 2, 2, 2, 81, 217, 3, 2, 2, 2, 83, 224, 3, 2, 2, 2, 85, 226, 3, 2, 2, 2, 87, 228, 3, 2, 2, 2, 89, 233, 3, 2, 2, 2, 91, 236, 3, 2, 2, 2, 93, 242, 3, 2, 2, 2, 95, 96, 7, 61, 2, 2, 96, 4, 3, 2, 2, 2, 97, 98, 7, 117, 2, 2, 98, 99, 7, 109, 2, 2, 99, 100, 7, 107, 2, 2, 100, 101, 7, 114, 2, 2, 101, 6, 3, 2, 2, 2, 102, 103, 7, 114, 2, 2, 103, 104, 7, 116, 2, 2, 104, 105, 7, 107, 2, 2, 105, 106, 7, 112, 2, 2, 106, 107, 7, 118, 2, 2, 107, 8, 3, 2, 2, 2, 108, 109, 7, 63, 2, 2, 109, 10, 3, 2, 2, 2, 110, 111, 7, 44, 2, 2, 111, 12, 3, 2, 2, 2, 112, 113, 7, 49, 2, 2, 113, 14, 3, 2, 2, 2, 114, 115, 7, 39, 2, 2, 115, 16, 3, 2, 2, 2, 116, 117, 7, 45, 2, 2, 117, 18, 3, 2, 2, 2, 118, 119, 7, 47, 2, 2, 119, 20, 3, 2, 2, 2, 120, 121, 7, 62, 2, 2, 121, 122, 7, 62, 2, 2, 122, 22, 3, 2, 2, 2, 123, 124, 7, 64, 2, 2, 124, 125, 7, 64, 2, 2, 125, 24, 3, 2, 2, 2, 126, 127, 7, 40, 2, 2, 127, 26, 3, 2, 2, 2, 128, 129, 7, 38, 2, 2, 129, 28, 3, 2, 2, 2, 130, 131, 7, 126, 2, 2, 131, 30, 3, 2, 2, 2, 132, 133, 7, 46, 2, 2, 133, 32, 3, 2, 2, 2, 134, 135, 7, 107, 2, 2, 135, 136, 7, 104, 2, 2, 136, 34, 3, 2, 2, 2, 137, 138, 7, 103, 2, 2, 138, 139, 7, 110, 2, 2, 139, 140, 7, 107, 2, 2, 140, 141, 7, 104, 2, 2, 141, 36, 3, 2, 2, 2, 142, 143, 7, 103, 2, 2, 143, 144, 7, 110, 2, 2, 144, 145, 7, 117, 2, 2, 145, 146, 7, 103, 2, 2, 146, 38, 3, 2, 2, 2, 147, 148, 7, 121, 2, 2, 148, 149, 7, 106, 2, 2, 149, 150, 7, 107, 2, 2, 150, 151, 7, 110, 2, 2, 151, 152, 7, 103, 2, 2, 152, 40, 3, 2, 2, 2, 153, 154, 7, 119, 2, 2, 154, 155, 7, 112, 2, 2, 155, 156, 7, 118, 2, 2, 156, 157, 7, 107, 2, 2, 157, 158, 7, 110, 2, 2, 158, 42, 3, 2, 2, 2, 159, 160, 7, 102, 2, 2, 160, 161, 7, 113, 2, 2, 161, 44, 3, 2, 2, 2, 162, 163, 7, 125, 2, 2, 163, 46, 3, 2, 2, 2, 164, 165, 7, 127, 2, 2, 165, 48, 3, 2, 2, 2, 166, 167, 7, 42, 2, 2, 167, 50, 3, 2, 2, 2, 168, 169, 7, 43, 2, 2, 169, 52, 3, 2, 2, 2, 170, 171, 7, 48, 2, 2, 171, 54, 3, 2, 2, 2, 172, 173, 7, 128, 2, 2, 173, 56, 3, 2, 2, 2, 174, 175, 7, 63, 2, 2, 175, 176, 7, 63, 2, 2, 176, 58, 3, 2, 2, 2, 177, 178, 7, 35, 2, 2, 178, 179, 7, 63, 2, 2, 179, 60, 3, 2, 2, 2, 180, 181, 7, 62, 2, 2, 181, 62, 3, 2, 2, 2, 182, 183, 7, 62, 2, 2, 183, 184, 7, 63, 2, 2, 184, 64, 3, 2, 2, 2, 185, 186, 7, 64, 2, 2, 186, 66, 3, 2, 2, 2, 187, 188, 7, 64, 2, 2, 188, 189, 7, 63, 2, 2, 189, 68, 3, 2, 2, 2, 190, 191, 7, 112, 2, 2, 191, 192, 7, 113, 2, 2, 192, 193, 7, 118, 2, 2, 193, 70, 3, 2, 2, 2, 194, 195, 7, 99, 2, 2, 195, 196, 7, 112, 2, 2, 196, 197, 7, 102, 2, 2, 197, 72, 3, 2, 2, 2, 198, 199, 7, 113, 2, 2, 199, 200, 7, 116, 2, 2, 200, 74, 3, 2, 2, 2, 201, 202, 7, 118, 2, 2, 202, 203, 7, 116, 2, 2, 203, 204, 7, 119, 2, 2, 204, 205, 7, 103, 2, 2, 205, 76, 3, 2, 2, 2, 206, 207, 7, 104, 2, 2, 207, 208, 7, 99, 2, 2, 208, 209, 7, 110, 2, 2, 209, 210, 7, 117, 2, 2, 210, 211, 7, 103, 2, 2, 211, 78, 3, 2, 2, 2, 212, 214, 5, 83, 42, 2, 213, 212, 3, 2, 2, 2, 214, 215, 3, 2, 2, 2, 215, 213, 3, 2, 2, 2, 215, 216, 3, 2, 2, 2, 216, 80, 3, 2, 2, 2, 217, 221, 5, 87, 44, 2, 218, 220, 5, 89, 45, 2, 219, 218, 3, 2, 2, 2, 220, 223, 3, 2, 2, 2, 221, 219, 3, 2, 2, 2, 221, 222, 3, 2, 2, 2, 222, 82, 3, 2, 2, 2, 223, 221, 3, 2, 2, 2, 224, 225, 9, 2, 2, 2, 225, 84, 3, 2, 2, 2, 226, 227, 9, 3, 2, 2, 227, 86, 3, 2, 2, 2, 228, 229, 9, 4, 2, 2, 229, 88, 3, 2, 2, 2, 230, 234, 5, 87, 44, 2, 231, 234, 5, 83, 42, 2, 232, 234, 9, 5, 2, 2, 233, 230, 3, 2, 2, 2, 233, 231, 3, 2, 2, 2, 233, 232, 3, 2, 2, 2, 234, 90, 3, 2, 2, 2, 235, 237, 9, 6, 2, 2, 236, 235, 3, 2, 2, 2, 237, 238, 3, 2, 2, 2, 238, 236, 3, 2, 2, 2, 238, 239, 3, 2, 2, 2, 239, 240, 3, 2, 2, 2, 240, 241, 8, 46, 2, 2, 241, 92, 3, 2, 2, 2, 242, 243, 11, 2, 2, 2, 243, 94, 3, 2, 2, 2, 7, 2, 215, 221, 233, 238, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 45, 248, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 6, 41, 218, 10, 41, 13, 41, 14, 41, 219, 3, 42, 3, 42, 7, 42, 224, 10, 42, 12, 42, 14, 42, 227, 11, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 5, 46, 238, 10, 46, 3, 47, 6, 47, 241, 10, 47, 13, 47, 14, 47, 242, 3, 47, 3, 47, 3, 48, 3, 48, 2, 2, 49, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 2, 87, 2, 89, 2, 91, 2, 93, 44, 95, 45, 3, 2, 7, 3, 2, 50, 59, 3, 2, 99, 124, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 248, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 3, 97, 3, 2, 2, 2, 5, 99, 3, 2, 2, 2, 7, 104, 3, 2, 2, 2, 9, 110, 3, 2, 2, 2, 11, 112, 3, 2, 2, 2, 13, 114, 3, 2, 2, 2, 15, 116, 3, 2, 2, 2, 17, 118, 3, 2, 2, 2, 19, 120, 3, 2, 2, 2, 21, 122, 3, 2, 2, 2, 23, 124, 3, 2, 2, 2, 25, 127, 3, 2, 2, 2, 27, 130, 3, 2, 2, 2, 29, 132, 3, 2, 2, 2, 31, 134, 3, 2, 2, 2, 33, 136, 3, 2, 2, 2, 35, 138, 3, 2, 2, 2, 37, 141, 3, 2, 2, 2, 39, 146, 3, 2, 2, 2, 41, 151, 3, 2, 2, 2, 43, 157, 3, 2, 2, 2, 45, 163, 3, 2, 2, 2, 47, 166, 3, 2, 2, 2, 49, 168, 3, 2, 2, 2, 51, 170, 3, 2, 2, 2, 53, 172, 3, 2, 2, 2, 55, 174, 3, 2, 2, 2, 57, 176, 3, 2, 2, 2, 59, 178, 3, 2, 2, 2, 61, 181, 3, 2, 2, 2, 63, 184, 3, 2, 2, 2, 65, 186, 3, 2, 2, 2, 67, 189, 3, 2, 2, 2, 69, 191, 3, 2, 2, 2, 71, 194, 3, 2, 2, 2, 73, 198, 3, 2, 2, 2, 75, 202, 3, 2, 2, 2, 77, 205, 3, 2, 2, 2, 79, 210, 3, 2, 2, 2, 81, 217, 3, 2, 2, 2, 83, 221, 3, 2, 2, 2, 85, 228, 3, 2, 2, 2, 87, 230, 3, 2, 2, 2, 89, 232, 3, 2, 2, 2, 91, 237, 3, 2, 2, 2, 93, 240, 3, 2, 2, 2, 95, 246, 3, 2, 2, 2, 97, 98, 7, 61, 2, 2, 98, 4, 3, 2, 2, 2, 99, 100, 7, 117, 2, 2, 100, 101, 7, 109, 2, 2, 101, 102, 7, 107, 2, 2, 102, 103, 7, 114, 2, 2, 103, 6, 3, 2, 2, 2, 104, 105, 7, 114, 2, 2, 105, 106, 7, 116, 2, 2, 106, 107, 7, 107, 2, 2, 107, 108, 7, 112, 2, 2, 108, 109, 7, 118, 2, 2, 109, 8, 3, 2, 2, 2, 110, 111, 7, 63, 2, 2, 111, 10, 3, 2, 2, 2, 112, 113, 7, 96, 2, 2, 113, 12, 3, 2, 2, 2, 114, 115, 7, 44, 2, 2, 115, 14, 3, 2, 2, 2, 116, 117, 7, 49, 2, 2, 117, 16, 3, 2, 2, 2, 118, 119, 7, 39, 2, 2, 119, 18, 3, 2, 2, 2, 120, 121, 7, 45, 2, 2, 121, 20, 3, 2, 2, 2, 122, 123, 7, 47, 2, 2, 123, 22, 3, 2, 2, 2, 124, 125, 7, 62, 2, 2, 125, 126, 7, 62, 2, 2, 126, 24, 3, 2, 2, 2, 127, 128, 7, 64, 2, 2, 128, 129, 7, 64, 2, 2, 129, 26, 3, 2, 2, 2, 130, 131, 7, 40, 2, 2, 131, 28, 3, 2, 2, 2, 132, 133, 7, 38, 2, 2, 133, 30, 3, 2, 2, 2, 134, 135, 7, 126, 2, 2, 135, 32, 3, 2, 2, 2, 136, 137, 7, 46, 2, 2, 137, 34, 3, 2, 2, 2, 138, 139, 7, 107, 2, 2, 139, 140, 7, 104, 2, 2, 140, 36, 3, 2, 2, 2, 141, 142, 7, 103, 2, 2, 142, 143, 7, 110, 2, 2, 143, 144, 7, 107, 2, 2, 144, 145, 7, 104, 2, 2, 145, 38, 3, 2, 2, 2, 146, 147, 7, 103, 2, 2, 147, 148, 7, 110, 2, 2, 148, 149, 7, 117, 2, 2, 149, 150, 7, 103, 2, 2, 150, 40, 3, 2, 2, 2, 151, 152, 7, 121, 2, 2, 152, 153, 7, 106, 2, 2, 153, 154, 7, 107, 2, 2, 154, 155, 7, 110, 2, 2, 155, 156, 7, 103, 2, 2, 156, 42, 3, 2, 2, 2, 157, 158, 7, 119, 2, 2, 158, 159, 7, 112, 2, 2, 159, 160, 7, 118, 2, 2, 160, 161, 7, 107, 2, 2, 161, 162, 7, 110, 2, 2, 162, 44, 3, 2, 2, 2, 163, 164, 7, 102, 2, 2, 164, 165, 7, 113, 2, 2, 165, 46, 3, 2, 2, 2, 166, 167, 7, 125, 2, 2, 167, 48, 3, 2, 2, 2, 168, 169, 7, 127, 2, 2, 169, 50, 3, 2, 2, 2, 170, 171, 7, 42, 2, 2, 171, 52, 3, 2, 2, 2, 172, 173, 7, 43, 2, 2, 173, 54, 3, 2, 2, 2, 174, 175, 7, 48, 2, 2, 175, 56, 3, 2, 2, 2, 176, 177, 7, 128, 2, 2, 177, 58, 3, 2, 2, 2, 178, 179, 7, 63, 2, 2, 179, 180, 7, 63, 2, 2, 180, 60, 3, 2, 2, 2, 181, 182, 7, 35, 2, 2, 182, 183, 7, 63, 2, 2, 183, 62, 3, 2, 2, 2, 184, 185, 7, 62, 2, 2, 185, 64, 3, 2, 2, 2, 186, 187, 7, 62, 2, 2, 187, 188, 7, 63, 2, 2, 188, 66, 3, 2, 2, 2, 189, 190, 7, 64, 2, 2, 190, 68, 3, 2, 2, 2, 191, 192, 7, 64, 2, 2, 192, 193, 7, 63, 2, 2, 193, 70, 3, 2, 2, 2, 194, 195, 7, 112, 2, 2, 195, 196, 7, 113, 2, 2, 196, 197, 7, 118, 2, 2, 197, 72, 3, 2, 2, 2, 198, 199, 7, 99, 2, 2, 199, 200, 7, 112, 2, 2, 200, 201, 7, 102, 2, 2, 201, 74, 3, 2, 2, 2, 202, 203, 7, 113, 2, 2, 203, 204, 7, 116, 2, 2, 204, 76, 3, 2, 2, 2, 205, 206, 7, 118, 2, 2, 206, 207, 7, 116, 2, 2, 207, 208, 7, 119, 2, 2, 208, 209, 7, 103, 2, 2, 209, 78, 3, 2, 2, 2, 210, 211, 7, 104, 2, 2, 211, 212, 7, 99, 2, 2, 212, 213, 7, 110, 2, 2, 213, 214, 7, 117, 2, 2, 214, 215, 7, 103, 2, 2, 215, 80, 3, 2, 2, 2, 216, 218, 5, 85, 43, 2, 217, 216, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 217, 3, 2, 2, 2, 219, 220, 3, 2, 2, 2, 220, 82, 3, 2, 2, 2, 221, 225, 5, 89, 45, 2, 222, 224, 5, 91, 46, 2, 223, 222, 3, 2, 2, 2, 224, 227, 3, 2, 2, 2, 225, 223, 3, 2, 2, 2, 225, 226, 3, 2, 2, 2, 226, 84, 3, 2, 2, 2, 227, 225, 3, 2, 2, 2, 228, 229, 9, 2, 2, 2, 229, 86, 3, 2, 2, 2, 230, 231, 9, 3, 2, 2, 231, 88, 3, 2, 2, 2, 232, 233, 9, 4, 2, 2, 233, 90, 3, 2, 2, 2, 234, 238, 5, 89, 45, 2, 235, 238, 5, 85, 43, 2, 236, 238, 9, 5, 2, 2, 237, 234, 3, 2, 2, 2, 237, 235, 3, 2, 2, 2, 237, 236, 3, 2, 2, 2, 238, 92, 3, 2, 2, 2, 239, 241, 9, 6, 2, 2, 240, 239, 3, 2, 2, 2, 241, 242, 3, 2, 2, 2, 242, 240, 3, 2, 2, 2, 242, 243, 3, 2, 2, 2, 243, 244, 3, 2, 2, 2, 244, 245, 8, 47, 2, 2, 245, 94, 3, 2, 2, 2, 246, 247, 11, 2, 2, 2, 247, 96, 3, 2, 2, 2, 7, 2, 219, 225, 237, 242, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py index 8c65c2ee..73c24d67 100644 --- a/src/antlr/PyxellLexer.py +++ b/src/antlr/PyxellLexer.py @@ -8,100 +8,102 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2,") - buf.write("\u00f4\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2-") + buf.write("\u00f8\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") buf.write("\4\31\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36") buf.write("\t\36\4\37\t\37\4 \t \4!\t!\4\"\t\"\4#\t#\4$\t$\4%\t%") buf.write("\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4,\t,\4-\t-\4.") - buf.write("\t.\4/\t/\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4") - buf.write("\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\n\3") - buf.write("\n\3\13\3\13\3\13\3\f\3\f\3\f\3\r\3\r\3\16\3\16\3\17\3") - buf.write("\17\3\20\3\20\3\21\3\21\3\21\3\22\3\22\3\22\3\22\3\22") - buf.write("\3\23\3\23\3\23\3\23\3\23\3\24\3\24\3\24\3\24\3\24\3\24") - buf.write("\3\25\3\25\3\25\3\25\3\25\3\25\3\26\3\26\3\26\3\27\3\27") - buf.write("\3\30\3\30\3\31\3\31\3\32\3\32\3\33\3\33\3\34\3\34\3\35") - buf.write("\3\35\3\35\3\36\3\36\3\36\3\37\3\37\3 \3 \3 \3!\3!\3\"") - buf.write("\3\"\3\"\3#\3#\3#\3#\3$\3$\3$\3$\3%\3%\3%\3&\3&\3&\3&") - buf.write("\3&\3\'\3\'\3\'\3\'\3\'\3\'\3(\6(\u00d6\n(\r(\16(\u00d7") - buf.write("\3)\3)\7)\u00dc\n)\f)\16)\u00df\13)\3*\3*\3+\3+\3,\3,") - buf.write("\3-\3-\3-\5-\u00ea\n-\3.\6.\u00ed\n.\r.\16.\u00ee\3.\3") - buf.write(".\3/\3/\2\2\60\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13") - buf.write("\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26") - buf.write("+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#") - buf.write("E$G%I&K\'M(O)Q*S\2U\2W\2Y\2[+],\3\2\7\3\2\62;\3\2c|\5") - buf.write("\2C\\aac|\4\2))aa\5\2\13\f\17\17\"\"\2\u00f4\2\3\3\2\2") - buf.write("\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2") - buf.write("\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25") - buf.write("\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3") - buf.write("\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2") - buf.write("\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2") - buf.write("\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\2") - buf.write("9\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2") - buf.write("\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2") - buf.write("\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2[\3\2\2\2\2]\3\2") - buf.write("\2\2\3_\3\2\2\2\5a\3\2\2\2\7f\3\2\2\2\tl\3\2\2\2\13n\3") - buf.write("\2\2\2\rp\3\2\2\2\17r\3\2\2\2\21t\3\2\2\2\23v\3\2\2\2") - buf.write("\25x\3\2\2\2\27{\3\2\2\2\31~\3\2\2\2\33\u0080\3\2\2\2") - buf.write("\35\u0082\3\2\2\2\37\u0084\3\2\2\2!\u0086\3\2\2\2#\u0089") - buf.write("\3\2\2\2%\u008e\3\2\2\2\'\u0093\3\2\2\2)\u0099\3\2\2\2") - buf.write("+\u009f\3\2\2\2-\u00a2\3\2\2\2/\u00a4\3\2\2\2\61\u00a6") - buf.write("\3\2\2\2\63\u00a8\3\2\2\2\65\u00aa\3\2\2\2\67\u00ac\3") - buf.write("\2\2\29\u00ae\3\2\2\2;\u00b1\3\2\2\2=\u00b4\3\2\2\2?\u00b6") - buf.write("\3\2\2\2A\u00b9\3\2\2\2C\u00bb\3\2\2\2E\u00be\3\2\2\2") - buf.write("G\u00c2\3\2\2\2I\u00c6\3\2\2\2K\u00c9\3\2\2\2M\u00ce\3") - buf.write("\2\2\2O\u00d5\3\2\2\2Q\u00d9\3\2\2\2S\u00e0\3\2\2\2U\u00e2") - buf.write("\3\2\2\2W\u00e4\3\2\2\2Y\u00e9\3\2\2\2[\u00ec\3\2\2\2") - buf.write("]\u00f2\3\2\2\2_`\7=\2\2`\4\3\2\2\2ab\7u\2\2bc\7m\2\2") - buf.write("cd\7k\2\2de\7r\2\2e\6\3\2\2\2fg\7r\2\2gh\7t\2\2hi\7k\2") - buf.write("\2ij\7p\2\2jk\7v\2\2k\b\3\2\2\2lm\7?\2\2m\n\3\2\2\2no") - buf.write("\7,\2\2o\f\3\2\2\2pq\7\61\2\2q\16\3\2\2\2rs\7\'\2\2s\20") - buf.write("\3\2\2\2tu\7-\2\2u\22\3\2\2\2vw\7/\2\2w\24\3\2\2\2xy\7") - buf.write(">\2\2yz\7>\2\2z\26\3\2\2\2{|\7@\2\2|}\7@\2\2}\30\3\2\2") - buf.write("\2~\177\7(\2\2\177\32\3\2\2\2\u0080\u0081\7&\2\2\u0081") - buf.write("\34\3\2\2\2\u0082\u0083\7~\2\2\u0083\36\3\2\2\2\u0084") - buf.write("\u0085\7.\2\2\u0085 \3\2\2\2\u0086\u0087\7k\2\2\u0087") - buf.write("\u0088\7h\2\2\u0088\"\3\2\2\2\u0089\u008a\7g\2\2\u008a") - buf.write("\u008b\7n\2\2\u008b\u008c\7k\2\2\u008c\u008d\7h\2\2\u008d") - buf.write("$\3\2\2\2\u008e\u008f\7g\2\2\u008f\u0090\7n\2\2\u0090") - buf.write("\u0091\7u\2\2\u0091\u0092\7g\2\2\u0092&\3\2\2\2\u0093") - buf.write("\u0094\7y\2\2\u0094\u0095\7j\2\2\u0095\u0096\7k\2\2\u0096") - buf.write("\u0097\7n\2\2\u0097\u0098\7g\2\2\u0098(\3\2\2\2\u0099") - buf.write("\u009a\7w\2\2\u009a\u009b\7p\2\2\u009b\u009c\7v\2\2\u009c") - buf.write("\u009d\7k\2\2\u009d\u009e\7n\2\2\u009e*\3\2\2\2\u009f") - buf.write("\u00a0\7f\2\2\u00a0\u00a1\7q\2\2\u00a1,\3\2\2\2\u00a2") - buf.write("\u00a3\7}\2\2\u00a3.\3\2\2\2\u00a4\u00a5\7\177\2\2\u00a5") - buf.write("\60\3\2\2\2\u00a6\u00a7\7*\2\2\u00a7\62\3\2\2\2\u00a8") - buf.write("\u00a9\7+\2\2\u00a9\64\3\2\2\2\u00aa\u00ab\7\60\2\2\u00ab") - buf.write("\66\3\2\2\2\u00ac\u00ad\7\u0080\2\2\u00ad8\3\2\2\2\u00ae") - buf.write("\u00af\7?\2\2\u00af\u00b0\7?\2\2\u00b0:\3\2\2\2\u00b1") - buf.write("\u00b2\7#\2\2\u00b2\u00b3\7?\2\2\u00b3<\3\2\2\2\u00b4") - buf.write("\u00b5\7>\2\2\u00b5>\3\2\2\2\u00b6\u00b7\7>\2\2\u00b7") - buf.write("\u00b8\7?\2\2\u00b8@\3\2\2\2\u00b9\u00ba\7@\2\2\u00ba") - buf.write("B\3\2\2\2\u00bb\u00bc\7@\2\2\u00bc\u00bd\7?\2\2\u00bd") - buf.write("D\3\2\2\2\u00be\u00bf\7p\2\2\u00bf\u00c0\7q\2\2\u00c0") - buf.write("\u00c1\7v\2\2\u00c1F\3\2\2\2\u00c2\u00c3\7c\2\2\u00c3") - buf.write("\u00c4\7p\2\2\u00c4\u00c5\7f\2\2\u00c5H\3\2\2\2\u00c6") - buf.write("\u00c7\7q\2\2\u00c7\u00c8\7t\2\2\u00c8J\3\2\2\2\u00c9") - buf.write("\u00ca\7v\2\2\u00ca\u00cb\7t\2\2\u00cb\u00cc\7w\2\2\u00cc") - buf.write("\u00cd\7g\2\2\u00cdL\3\2\2\2\u00ce\u00cf\7h\2\2\u00cf") - buf.write("\u00d0\7c\2\2\u00d0\u00d1\7n\2\2\u00d1\u00d2\7u\2\2\u00d2") - buf.write("\u00d3\7g\2\2\u00d3N\3\2\2\2\u00d4\u00d6\5S*\2\u00d5\u00d4") - buf.write("\3\2\2\2\u00d6\u00d7\3\2\2\2\u00d7\u00d5\3\2\2\2\u00d7") - buf.write("\u00d8\3\2\2\2\u00d8P\3\2\2\2\u00d9\u00dd\5W,\2\u00da") - buf.write("\u00dc\5Y-\2\u00db\u00da\3\2\2\2\u00dc\u00df\3\2\2\2\u00dd") - buf.write("\u00db\3\2\2\2\u00dd\u00de\3\2\2\2\u00deR\3\2\2\2\u00df") - buf.write("\u00dd\3\2\2\2\u00e0\u00e1\t\2\2\2\u00e1T\3\2\2\2\u00e2") - buf.write("\u00e3\t\3\2\2\u00e3V\3\2\2\2\u00e4\u00e5\t\4\2\2\u00e5") - buf.write("X\3\2\2\2\u00e6\u00ea\5W,\2\u00e7\u00ea\5S*\2\u00e8\u00ea") - buf.write("\t\5\2\2\u00e9\u00e6\3\2\2\2\u00e9\u00e7\3\2\2\2\u00e9") - buf.write("\u00e8\3\2\2\2\u00eaZ\3\2\2\2\u00eb\u00ed\t\6\2\2\u00ec") - buf.write("\u00eb\3\2\2\2\u00ed\u00ee\3\2\2\2\u00ee\u00ec\3\2\2\2") - buf.write("\u00ee\u00ef\3\2\2\2\u00ef\u00f0\3\2\2\2\u00f0\u00f1\b") - buf.write(".\2\2\u00f1\\\3\2\2\2\u00f2\u00f3\13\2\2\2\u00f3^\3\2") - buf.write("\2\2\7\2\u00d7\u00dd\u00e9\u00ee\3\b\2\2") + buf.write("\t.\4/\t/\4\60\t\60\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\4\3") + buf.write("\4\3\4\3\4\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t") + buf.write("\3\t\3\n\3\n\3\13\3\13\3\f\3\f\3\f\3\r\3\r\3\r\3\16\3") + buf.write("\16\3\17\3\17\3\20\3\20\3\21\3\21\3\22\3\22\3\22\3\23") + buf.write("\3\23\3\23\3\23\3\23\3\24\3\24\3\24\3\24\3\24\3\25\3\25") + buf.write("\3\25\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\26\3\27") + buf.write("\3\27\3\27\3\30\3\30\3\31\3\31\3\32\3\32\3\33\3\33\3\34") + buf.write("\3\34\3\35\3\35\3\36\3\36\3\36\3\37\3\37\3\37\3 \3 \3") + buf.write("!\3!\3!\3\"\3\"\3#\3#\3#\3$\3$\3$\3$\3%\3%\3%\3%\3&\3") + buf.write("&\3&\3\'\3\'\3\'\3\'\3\'\3(\3(\3(\3(\3(\3(\3)\6)\u00da") + buf.write("\n)\r)\16)\u00db\3*\3*\7*\u00e0\n*\f*\16*\u00e3\13*\3") + buf.write("+\3+\3,\3,\3-\3-\3.\3.\3.\5.\u00ee\n.\3/\6/\u00f1\n/\r") + buf.write("/\16/\u00f2\3/\3/\3\60\3\60\2\2\61\3\3\5\4\7\5\t\6\13") + buf.write("\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37") + buf.write("\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34") + buf.write("\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U\2W\2Y\2[\2]") + buf.write(",_-\3\2\7\3\2\62;\3\2c|\5\2C\\aac|\4\2))aa\5\2\13\f\17") + buf.write("\17\"\"\2\u00f8\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2") + buf.write("\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21") + buf.write("\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3") + buf.write("\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2") + buf.write("\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2") + buf.write("\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2") + buf.write("\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2") + buf.write("\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3") + buf.write("\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q") + buf.write("\3\2\2\2\2S\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\3a\3\2\2\2\5") + buf.write("c\3\2\2\2\7h\3\2\2\2\tn\3\2\2\2\13p\3\2\2\2\rr\3\2\2\2") + buf.write("\17t\3\2\2\2\21v\3\2\2\2\23x\3\2\2\2\25z\3\2\2\2\27|\3") + buf.write("\2\2\2\31\177\3\2\2\2\33\u0082\3\2\2\2\35\u0084\3\2\2") + buf.write("\2\37\u0086\3\2\2\2!\u0088\3\2\2\2#\u008a\3\2\2\2%\u008d") + buf.write("\3\2\2\2\'\u0092\3\2\2\2)\u0097\3\2\2\2+\u009d\3\2\2\2") + buf.write("-\u00a3\3\2\2\2/\u00a6\3\2\2\2\61\u00a8\3\2\2\2\63\u00aa") + buf.write("\3\2\2\2\65\u00ac\3\2\2\2\67\u00ae\3\2\2\29\u00b0\3\2") + buf.write("\2\2;\u00b2\3\2\2\2=\u00b5\3\2\2\2?\u00b8\3\2\2\2A\u00ba") + buf.write("\3\2\2\2C\u00bd\3\2\2\2E\u00bf\3\2\2\2G\u00c2\3\2\2\2") + buf.write("I\u00c6\3\2\2\2K\u00ca\3\2\2\2M\u00cd\3\2\2\2O\u00d2\3") + buf.write("\2\2\2Q\u00d9\3\2\2\2S\u00dd\3\2\2\2U\u00e4\3\2\2\2W\u00e6") + buf.write("\3\2\2\2Y\u00e8\3\2\2\2[\u00ed\3\2\2\2]\u00f0\3\2\2\2") + buf.write("_\u00f6\3\2\2\2ab\7=\2\2b\4\3\2\2\2cd\7u\2\2de\7m\2\2") + buf.write("ef\7k\2\2fg\7r\2\2g\6\3\2\2\2hi\7r\2\2ij\7t\2\2jk\7k\2") + buf.write("\2kl\7p\2\2lm\7v\2\2m\b\3\2\2\2no\7?\2\2o\n\3\2\2\2pq") + buf.write("\7`\2\2q\f\3\2\2\2rs\7,\2\2s\16\3\2\2\2tu\7\61\2\2u\20") + buf.write("\3\2\2\2vw\7\'\2\2w\22\3\2\2\2xy\7-\2\2y\24\3\2\2\2z{") + buf.write("\7/\2\2{\26\3\2\2\2|}\7>\2\2}~\7>\2\2~\30\3\2\2\2\177") + buf.write("\u0080\7@\2\2\u0080\u0081\7@\2\2\u0081\32\3\2\2\2\u0082") + buf.write("\u0083\7(\2\2\u0083\34\3\2\2\2\u0084\u0085\7&\2\2\u0085") + buf.write("\36\3\2\2\2\u0086\u0087\7~\2\2\u0087 \3\2\2\2\u0088\u0089") + buf.write("\7.\2\2\u0089\"\3\2\2\2\u008a\u008b\7k\2\2\u008b\u008c") + buf.write("\7h\2\2\u008c$\3\2\2\2\u008d\u008e\7g\2\2\u008e\u008f") + buf.write("\7n\2\2\u008f\u0090\7k\2\2\u0090\u0091\7h\2\2\u0091&\3") + buf.write("\2\2\2\u0092\u0093\7g\2\2\u0093\u0094\7n\2\2\u0094\u0095") + buf.write("\7u\2\2\u0095\u0096\7g\2\2\u0096(\3\2\2\2\u0097\u0098") + buf.write("\7y\2\2\u0098\u0099\7j\2\2\u0099\u009a\7k\2\2\u009a\u009b") + buf.write("\7n\2\2\u009b\u009c\7g\2\2\u009c*\3\2\2\2\u009d\u009e") + buf.write("\7w\2\2\u009e\u009f\7p\2\2\u009f\u00a0\7v\2\2\u00a0\u00a1") + buf.write("\7k\2\2\u00a1\u00a2\7n\2\2\u00a2,\3\2\2\2\u00a3\u00a4") + buf.write("\7f\2\2\u00a4\u00a5\7q\2\2\u00a5.\3\2\2\2\u00a6\u00a7") + buf.write("\7}\2\2\u00a7\60\3\2\2\2\u00a8\u00a9\7\177\2\2\u00a9\62") + buf.write("\3\2\2\2\u00aa\u00ab\7*\2\2\u00ab\64\3\2\2\2\u00ac\u00ad") + buf.write("\7+\2\2\u00ad\66\3\2\2\2\u00ae\u00af\7\60\2\2\u00af8\3") + buf.write("\2\2\2\u00b0\u00b1\7\u0080\2\2\u00b1:\3\2\2\2\u00b2\u00b3") + buf.write("\7?\2\2\u00b3\u00b4\7?\2\2\u00b4<\3\2\2\2\u00b5\u00b6") + buf.write("\7#\2\2\u00b6\u00b7\7?\2\2\u00b7>\3\2\2\2\u00b8\u00b9") + buf.write("\7>\2\2\u00b9@\3\2\2\2\u00ba\u00bb\7>\2\2\u00bb\u00bc") + buf.write("\7?\2\2\u00bcB\3\2\2\2\u00bd\u00be\7@\2\2\u00beD\3\2\2") + buf.write("\2\u00bf\u00c0\7@\2\2\u00c0\u00c1\7?\2\2\u00c1F\3\2\2") + buf.write("\2\u00c2\u00c3\7p\2\2\u00c3\u00c4\7q\2\2\u00c4\u00c5\7") + buf.write("v\2\2\u00c5H\3\2\2\2\u00c6\u00c7\7c\2\2\u00c7\u00c8\7") + buf.write("p\2\2\u00c8\u00c9\7f\2\2\u00c9J\3\2\2\2\u00ca\u00cb\7") + buf.write("q\2\2\u00cb\u00cc\7t\2\2\u00ccL\3\2\2\2\u00cd\u00ce\7") + buf.write("v\2\2\u00ce\u00cf\7t\2\2\u00cf\u00d0\7w\2\2\u00d0\u00d1") + buf.write("\7g\2\2\u00d1N\3\2\2\2\u00d2\u00d3\7h\2\2\u00d3\u00d4") + buf.write("\7c\2\2\u00d4\u00d5\7n\2\2\u00d5\u00d6\7u\2\2\u00d6\u00d7") + buf.write("\7g\2\2\u00d7P\3\2\2\2\u00d8\u00da\5U+\2\u00d9\u00d8\3") + buf.write("\2\2\2\u00da\u00db\3\2\2\2\u00db\u00d9\3\2\2\2\u00db\u00dc") + buf.write("\3\2\2\2\u00dcR\3\2\2\2\u00dd\u00e1\5Y-\2\u00de\u00e0") + buf.write("\5[.\2\u00df\u00de\3\2\2\2\u00e0\u00e3\3\2\2\2\u00e1\u00df") + buf.write("\3\2\2\2\u00e1\u00e2\3\2\2\2\u00e2T\3\2\2\2\u00e3\u00e1") + buf.write("\3\2\2\2\u00e4\u00e5\t\2\2\2\u00e5V\3\2\2\2\u00e6\u00e7") + buf.write("\t\3\2\2\u00e7X\3\2\2\2\u00e8\u00e9\t\4\2\2\u00e9Z\3\2") + buf.write("\2\2\u00ea\u00ee\5Y-\2\u00eb\u00ee\5U+\2\u00ec\u00ee\t") + buf.write("\5\2\2\u00ed\u00ea\3\2\2\2\u00ed\u00eb\3\2\2\2\u00ed\u00ec") + buf.write("\3\2\2\2\u00ee\\\3\2\2\2\u00ef\u00f1\t\6\2\2\u00f0\u00ef") + buf.write("\3\2\2\2\u00f1\u00f2\3\2\2\2\u00f2\u00f0\3\2\2\2\u00f2") + buf.write("\u00f3\3\2\2\2\u00f3\u00f4\3\2\2\2\u00f4\u00f5\b/\2\2") + buf.write("\u00f5^\3\2\2\2\u00f6\u00f7\13\2\2\2\u00f7`\3\2\2\2\7") + buf.write("\2\u00db\u00e1\u00ed\u00f2\3\b\2\2") return buf.getvalue() @@ -149,21 +151,22 @@ class PyxellLexer(Lexer): T__35 = 36 T__36 = 37 T__37 = 38 - INT = 39 - ID = 40 - WS = 41 - ERR = 42 + T__38 = 39 + INT = 40 + ID = 41 + WS = 42 + ERR = 43 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] modeNames = [ "DEFAULT_MODE" ] literalNames = [ "", - "';'", "'skip'", "'print'", "'='", "'*'", "'/'", "'%'", "'+'", - "'-'", "'<<'", "'>>'", "'&'", "'$'", "'|'", "','", "'if'", "'elif'", - "'else'", "'while'", "'until'", "'do'", "'{'", "'}'", "'('", - "')'", "'.'", "'~'", "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", - "'not'", "'and'", "'or'", "'true'", "'false'" ] + "';'", "'skip'", "'print'", "'='", "'^'", "'*'", "'/'", "'%'", + "'+'", "'-'", "'<<'", "'>>'", "'&'", "'$'", "'|'", "','", "'if'", + "'elif'", "'else'", "'while'", "'until'", "'do'", "'{'", "'}'", + "'('", "')'", "'.'", "'~'", "'=='", "'!='", "'<'", "'<='", "'>'", + "'>='", "'not'", "'and'", "'or'", "'true'", "'false'" ] symbolicNames = [ "", "INT", "ID", "WS", "ERR" ] @@ -174,7 +177,7 @@ class PyxellLexer(Lexer): "T__20", "T__21", "T__22", "T__23", "T__24", "T__25", "T__26", "T__27", "T__28", "T__29", "T__30", "T__31", "T__32", "T__33", "T__34", "T__35", "T__36", "T__37", - "INT", "ID", "DIGIT", "LETTER", "ID_START", "ID_CONT", + "T__38", "INT", "ID", "DIGIT", "LETTER", "ID_START", "ID_CONT", "WS", "ERR" ] grammarFileName = "Pyxell.g4" diff --git a/src/antlr/PyxellLexer.tokens b/src/antlr/PyxellLexer.tokens index c8e2fb10..0c88cbb2 100644 --- a/src/antlr/PyxellLexer.tokens +++ b/src/antlr/PyxellLexer.tokens @@ -36,45 +36,47 @@ T__34=35 T__35=36 T__36=37 T__37=38 -INT=39 -ID=40 -WS=41 -ERR=42 +T__38=39 +INT=40 +ID=41 +WS=42 +ERR=43 ';'=1 'skip'=2 'print'=3 '='=4 -'*'=5 -'/'=6 -'%'=7 -'+'=8 -'-'=9 -'<<'=10 -'>>'=11 -'&'=12 -'$'=13 -'|'=14 -','=15 -'if'=16 -'elif'=17 -'else'=18 -'while'=19 -'until'=20 -'do'=21 -'{'=22 -'}'=23 -'('=24 -')'=25 -'.'=26 -'~'=27 -'=='=28 -'!='=29 -'<'=30 -'<='=31 -'>'=32 -'>='=33 -'not'=34 -'and'=35 -'or'=36 -'true'=37 -'false'=38 +'^'=5 +'*'=6 +'/'=7 +'%'=8 +'+'=9 +'-'=10 +'<<'=11 +'>>'=12 +'&'=13 +'$'=14 +'|'=15 +','=16 +'if'=17 +'elif'=18 +'else'=19 +'while'=20 +'until'=21 +'do'=22 +'{'=23 +'}'=24 +'('=25 +')'=26 +'.'=27 +'~'=28 +'=='=29 +'!='=30 +'<'=31 +'<='=32 +'>'=33 +'>='=34 +'not'=35 +'and'=36 +'or'=37 +'true'=38 +'false'=39 diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index 11eda14b..e9c5eeec 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -8,8 +8,8 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3,") - buf.write("\u0097\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3-") + buf.write("\u009a\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") buf.write("\4\b\t\b\4\t\t\t\3\2\7\2\24\n\2\f\2\16\2\27\13\2\3\2\3") buf.write("\2\3\3\3\3\3\3\3\3\5\3\37\n\3\3\4\3\4\3\4\5\4$\n\4\3\4") buf.write("\3\4\3\4\7\4)\n\4\f\4\16\4,\13\4\3\4\3\4\3\4\3\4\3\4\5") @@ -20,51 +20,53 @@ def serializedATN(): buf.write("\3\b\3\b\3\b\3\b\3\b\5\bj\n\b\3\b\3\b\3\b\3\b\3\b\3\b") buf.write("\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3") buf.write("\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b") - buf.write("\7\b\u008d\n\b\f\b\16\b\u0090\13\b\3\t\3\t\3\t\5\t\u0095") - buf.write("\n\t\3\t\2\3\16\n\2\4\6\b\n\f\16\20\2\t\3\2\7\20\4\2\n") - buf.write("\13\35\35\3\2\7\t\3\2\n\13\3\2\f\r\3\2\36#\3\2\'(\2\u00ab") - buf.write("\2\25\3\2\2\2\4\36\3\2\2\2\6\62\3\2\2\2\b\64\3\2\2\2\n") - buf.write("T\3\2\2\2\fV\3\2\2\2\16i\3\2\2\2\20\u0094\3\2\2\2\22\24") - buf.write("\5\4\3\2\23\22\3\2\2\2\24\27\3\2\2\2\25\23\3\2\2\2\25") - buf.write("\26\3\2\2\2\26\30\3\2\2\2\27\25\3\2\2\2\30\31\7\2\2\3") - buf.write("\31\3\3\2\2\2\32\33\5\6\4\2\33\34\7\3\2\2\34\37\3\2\2") - buf.write("\2\35\37\5\n\6\2\36\32\3\2\2\2\36\35\3\2\2\2\37\5\3\2") - buf.write("\2\2 \63\7\4\2\2!#\7\5\2\2\"$\5\16\b\2#\"\3\2\2\2#$\3") - buf.write("\2\2\2$\63\3\2\2\2%&\5\b\5\2&\'\7\6\2\2\')\3\2\2\2(%\3") - buf.write("\2\2\2),\3\2\2\2*(\3\2\2\2*+\3\2\2\2+-\3\2\2\2,*\3\2\2") - buf.write("\2-\63\5\16\b\2./\7*\2\2/\60\t\2\2\2\60\61\7\6\2\2\61") - buf.write("\63\5\16\b\2\62 \3\2\2\2\62!\3\2\2\2\62*\3\2\2\2\62.\3") - buf.write("\2\2\2\63\7\3\2\2\2\649\7*\2\2\65\66\7\21\2\2\668\7*\2") - buf.write("\2\67\65\3\2\2\28;\3\2\2\29\67\3\2\2\29:\3\2\2\2:\t\3") - buf.write("\2\2\2;9\3\2\2\2<=\7\22\2\2=>\5\16\b\2>E\5\f\7\2?@\7\23") - buf.write("\2\2@A\5\16\b\2AB\5\f\7\2BD\3\2\2\2C?\3\2\2\2DG\3\2\2") - buf.write("\2EC\3\2\2\2EF\3\2\2\2FJ\3\2\2\2GE\3\2\2\2HI\7\24\2\2") - buf.write("IK\5\f\7\2JH\3\2\2\2JK\3\2\2\2KU\3\2\2\2LM\7\25\2\2MN") - buf.write("\5\16\b\2NO\5\f\7\2OU\3\2\2\2PQ\7\26\2\2QR\5\16\b\2RS") - buf.write("\5\f\7\2SU\3\2\2\2T<\3\2\2\2TL\3\2\2\2TP\3\2\2\2U\13\3") - buf.write("\2\2\2VW\7\27\2\2WY\7\30\2\2XZ\5\4\3\2YX\3\2\2\2Z[\3\2") - buf.write("\2\2[Y\3\2\2\2[\\\3\2\2\2\\]\3\2\2\2]^\7\31\2\2^\r\3\2") - buf.write("\2\2_`\b\b\1\2`j\5\20\t\2ab\7\32\2\2bc\5\16\b\2cd\7\33") - buf.write("\2\2dj\3\2\2\2ef\t\3\2\2fj\5\16\b\16gh\7$\2\2hj\5\16\b") - buf.write("\6i_\3\2\2\2ia\3\2\2\2ie\3\2\2\2ig\3\2\2\2j\u008e\3\2") - buf.write("\2\2kl\f\r\2\2lm\t\4\2\2m\u008d\5\16\b\16no\f\f\2\2op") - buf.write("\t\5\2\2p\u008d\5\16\b\rqr\f\13\2\2rs\t\6\2\2s\u008d\5") - buf.write("\16\b\ftu\f\n\2\2uv\7\16\2\2v\u008d\5\16\b\13wx\f\t\2") - buf.write("\2xy\7\17\2\2y\u008d\5\16\b\nz{\f\b\2\2{|\7\20\2\2|\u008d") - buf.write("\5\16\b\t}~\f\7\2\2~\177\t\7\2\2\177\u008d\5\16\b\7\u0080") - buf.write("\u0081\f\5\2\2\u0081\u0082\7%\2\2\u0082\u008d\5\16\b\5") - buf.write("\u0083\u0084\f\4\2\2\u0084\u0085\7&\2\2\u0085\u008d\5") - buf.write("\16\b\4\u0086\u0087\f\3\2\2\u0087\u0088\7\21\2\2\u0088") - buf.write("\u008d\5\16\b\3\u0089\u008a\f\17\2\2\u008a\u008b\7\34") - buf.write("\2\2\u008b\u008d\7*\2\2\u008ck\3\2\2\2\u008cn\3\2\2\2") - buf.write("\u008cq\3\2\2\2\u008ct\3\2\2\2\u008cw\3\2\2\2\u008cz\3") - buf.write("\2\2\2\u008c}\3\2\2\2\u008c\u0080\3\2\2\2\u008c\u0083") - buf.write("\3\2\2\2\u008c\u0086\3\2\2\2\u008c\u0089\3\2\2\2\u008d") - buf.write("\u0090\3\2\2\2\u008e\u008c\3\2\2\2\u008e\u008f\3\2\2\2") - buf.write("\u008f\17\3\2\2\2\u0090\u008e\3\2\2\2\u0091\u0095\7)\2") - buf.write("\2\u0092\u0095\t\b\2\2\u0093\u0095\7*\2\2\u0094\u0091") - buf.write("\3\2\2\2\u0094\u0092\3\2\2\2\u0094\u0093\3\2\2\2\u0095") - buf.write("\21\3\2\2\2\20\25\36#*\629EJT[i\u008c\u008e\u0094") + buf.write("\3\b\3\b\3\b\7\b\u0090\n\b\f\b\16\b\u0093\13\b\3\t\3\t") + buf.write("\3\t\5\t\u0098\n\t\3\t\2\3\16\n\2\4\6\b\n\f\16\20\2\t") + buf.write("\3\2\7\21\4\2\13\f\36\36\3\2\b\n\3\2\13\f\3\2\r\16\3\2") + buf.write("\37$\3\2()\2\u00af\2\25\3\2\2\2\4\36\3\2\2\2\6\62\3\2") + buf.write("\2\2\b\64\3\2\2\2\nT\3\2\2\2\fV\3\2\2\2\16i\3\2\2\2\20") + buf.write("\u0097\3\2\2\2\22\24\5\4\3\2\23\22\3\2\2\2\24\27\3\2\2") + buf.write("\2\25\23\3\2\2\2\25\26\3\2\2\2\26\30\3\2\2\2\27\25\3\2") + buf.write("\2\2\30\31\7\2\2\3\31\3\3\2\2\2\32\33\5\6\4\2\33\34\7") + buf.write("\3\2\2\34\37\3\2\2\2\35\37\5\n\6\2\36\32\3\2\2\2\36\35") + buf.write("\3\2\2\2\37\5\3\2\2\2 \63\7\4\2\2!#\7\5\2\2\"$\5\16\b") + buf.write("\2#\"\3\2\2\2#$\3\2\2\2$\63\3\2\2\2%&\5\b\5\2&\'\7\6\2") + buf.write("\2\')\3\2\2\2(%\3\2\2\2),\3\2\2\2*(\3\2\2\2*+\3\2\2\2") + buf.write("+-\3\2\2\2,*\3\2\2\2-\63\5\16\b\2./\7+\2\2/\60\t\2\2\2") + buf.write("\60\61\7\6\2\2\61\63\5\16\b\2\62 \3\2\2\2\62!\3\2\2\2") + buf.write("\62*\3\2\2\2\62.\3\2\2\2\63\7\3\2\2\2\649\7+\2\2\65\66") + buf.write("\7\22\2\2\668\7+\2\2\67\65\3\2\2\28;\3\2\2\29\67\3\2\2") + buf.write("\29:\3\2\2\2:\t\3\2\2\2;9\3\2\2\2<=\7\23\2\2=>\5\16\b") + buf.write("\2>E\5\f\7\2?@\7\24\2\2@A\5\16\b\2AB\5\f\7\2BD\3\2\2\2") + buf.write("C?\3\2\2\2DG\3\2\2\2EC\3\2\2\2EF\3\2\2\2FJ\3\2\2\2GE\3") + buf.write("\2\2\2HI\7\25\2\2IK\5\f\7\2JH\3\2\2\2JK\3\2\2\2KU\3\2") + buf.write("\2\2LM\7\26\2\2MN\5\16\b\2NO\5\f\7\2OU\3\2\2\2PQ\7\27") + buf.write("\2\2QR\5\16\b\2RS\5\f\7\2SU\3\2\2\2T<\3\2\2\2TL\3\2\2") + buf.write("\2TP\3\2\2\2U\13\3\2\2\2VW\7\30\2\2WY\7\31\2\2XZ\5\4\3") + buf.write("\2YX\3\2\2\2Z[\3\2\2\2[Y\3\2\2\2[\\\3\2\2\2\\]\3\2\2\2") + buf.write("]^\7\32\2\2^\r\3\2\2\2_`\b\b\1\2`j\5\20\t\2ab\7\33\2\2") + buf.write("bc\5\16\b\2cd\7\34\2\2dj\3\2\2\2ef\t\3\2\2fj\5\16\b\16") + buf.write("gh\7%\2\2hj\5\16\b\6i_\3\2\2\2ia\3\2\2\2ie\3\2\2\2ig\3") + buf.write("\2\2\2j\u0091\3\2\2\2kl\f\17\2\2lm\7\7\2\2m\u0090\5\16") + buf.write("\b\17no\f\r\2\2op\t\4\2\2p\u0090\5\16\b\16qr\f\f\2\2r") + buf.write("s\t\5\2\2s\u0090\5\16\b\rtu\f\13\2\2uv\t\6\2\2v\u0090") + buf.write("\5\16\b\fwx\f\n\2\2xy\7\17\2\2y\u0090\5\16\b\13z{\f\t") + buf.write("\2\2{|\7\20\2\2|\u0090\5\16\b\n}~\f\b\2\2~\177\7\21\2") + buf.write("\2\177\u0090\5\16\b\t\u0080\u0081\f\7\2\2\u0081\u0082") + buf.write("\t\7\2\2\u0082\u0090\5\16\b\7\u0083\u0084\f\5\2\2\u0084") + buf.write("\u0085\7&\2\2\u0085\u0090\5\16\b\5\u0086\u0087\f\4\2\2") + buf.write("\u0087\u0088\7\'\2\2\u0088\u0090\5\16\b\4\u0089\u008a") + buf.write("\f\3\2\2\u008a\u008b\7\22\2\2\u008b\u0090\5\16\b\3\u008c") + buf.write("\u008d\f\20\2\2\u008d\u008e\7\35\2\2\u008e\u0090\7+\2") + buf.write("\2\u008fk\3\2\2\2\u008fn\3\2\2\2\u008fq\3\2\2\2\u008f") + buf.write("t\3\2\2\2\u008fw\3\2\2\2\u008fz\3\2\2\2\u008f}\3\2\2\2") + buf.write("\u008f\u0080\3\2\2\2\u008f\u0083\3\2\2\2\u008f\u0086\3") + buf.write("\2\2\2\u008f\u0089\3\2\2\2\u008f\u008c\3\2\2\2\u0090\u0093") + buf.write("\3\2\2\2\u0091\u008f\3\2\2\2\u0091\u0092\3\2\2\2\u0092") + buf.write("\17\3\2\2\2\u0093\u0091\3\2\2\2\u0094\u0098\7*\2\2\u0095") + buf.write("\u0098\t\b\2\2\u0096\u0098\7+\2\2\u0097\u0094\3\2\2\2") + buf.write("\u0097\u0095\3\2\2\2\u0097\u0096\3\2\2\2\u0098\21\3\2") + buf.write("\2\2\20\25\36#*\629EJT[i\u008f\u0091\u0097") return buf.getvalue() @@ -78,12 +80,13 @@ class PyxellParser ( Parser ): sharedContextCache = PredictionContextCache() - literalNames = [ "", "';'", "'skip'", "'print'", "'='", "'*'", - "'/'", "'%'", "'+'", "'-'", "'<<'", "'>>'", "'&'", - "'$'", "'|'", "','", "'if'", "'elif'", "'else'", "'while'", - "'until'", "'do'", "'{'", "'}'", "'('", "')'", "'.'", - "'~'", "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", - "'not'", "'and'", "'or'", "'true'", "'false'" ] + literalNames = [ "", "';'", "'skip'", "'print'", "'='", "'^'", + "'*'", "'/'", "'%'", "'+'", "'-'", "'<<'", "'>>'", + "'&'", "'$'", "'|'", "','", "'if'", "'elif'", "'else'", + "'while'", "'until'", "'do'", "'{'", "'}'", "'('", + "')'", "'.'", "'~'", "'=='", "'!='", "'<'", "'<='", + "'>'", "'>='", "'not'", "'and'", "'or'", "'true'", + "'false'" ] symbolicNames = [ "", "", "", "", "", "", "", "", @@ -94,8 +97,8 @@ class PyxellParser ( Parser ): "", "", "", "", "", "", "", "", "", "", "", "", - "", "", "", "INT", "ID", - "WS", "ERR" ] + "", "", "", "", + "INT", "ID", "WS", "ERR" ] RULE_program = 0 RULE_stmt = 1 @@ -148,10 +151,11 @@ class PyxellParser ( Parser ): T__35=36 T__36=37 T__37=38 - INT=39 - ID=40 - WS=41 - ERR=42 + T__38=39 + INT=40 + ID=41 + WS=42 + ERR=43 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -200,7 +204,7 @@ def program(self): self.state = 19 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__7) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__18) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__26) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__37) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0): + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__37) | (1 << PyxellParser.T__38) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0): self.state = 16 self.stmt() self.state = 21 @@ -252,14 +256,14 @@ def stmt(self): self.state = 28 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__7, PyxellParser.T__8, PyxellParser.T__23, PyxellParser.T__26, PyxellParser.T__33, PyxellParser.T__36, PyxellParser.T__37, PyxellParser.INT, PyxellParser.ID]: + if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__24, PyxellParser.T__27, PyxellParser.T__34, PyxellParser.T__37, PyxellParser.T__38, PyxellParser.INT, PyxellParser.ID]: self.enterOuterAlt(localctx, 1) self.state = 24 self.simple_stmt() self.state = 25 self.match(PyxellParser.T__0) pass - elif token in [PyxellParser.T__15, PyxellParser.T__18, PyxellParser.T__19]: + elif token in [PyxellParser.T__16, PyxellParser.T__19, PyxellParser.T__20]: self.enterOuterAlt(localctx, 2) self.state = 27 self.compound_stmt() @@ -391,7 +395,7 @@ def simple_stmt(self): self.state = 33 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__7) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__26) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__37) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0): + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__37) | (1 << PyxellParser.T__38) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0): self.state = 32 self.expr(0) @@ -426,7 +430,7 @@ def simple_stmt(self): self.state = 45 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__4) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__7) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__11) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__4) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__7) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__11) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__14))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -483,9 +487,9 @@ def lvalue(self): self.state = 55 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==PyxellParser.T__14: + while _la==PyxellParser.T__15: self.state = 51 - self.match(PyxellParser.T__14) + self.match(PyxellParser.T__15) self.state = 52 self.match(PyxellParser.ID) self.state = 57 @@ -593,11 +597,11 @@ def compound_stmt(self): self.state = 82 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__15]: + if token in [PyxellParser.T__16]: localctx = PyxellParser.StmtIfContext(self, localctx) self.enterOuterAlt(localctx, 1) self.state = 58 - self.match(PyxellParser.T__15) + self.match(PyxellParser.T__16) self.state = 59 self.expr(0) self.state = 60 @@ -605,9 +609,9 @@ def compound_stmt(self): self.state = 67 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==PyxellParser.T__16: + while _la==PyxellParser.T__17: self.state = 61 - self.match(PyxellParser.T__16) + self.match(PyxellParser.T__17) self.state = 62 self.expr(0) self.state = 63 @@ -619,29 +623,29 @@ def compound_stmt(self): self.state = 72 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__17: + if _la==PyxellParser.T__18: self.state = 70 - self.match(PyxellParser.T__17) + self.match(PyxellParser.T__18) self.state = 71 self.block() pass - elif token in [PyxellParser.T__18]: + elif token in [PyxellParser.T__19]: localctx = PyxellParser.StmtWhileContext(self, localctx) self.enterOuterAlt(localctx, 2) self.state = 74 - self.match(PyxellParser.T__18) + self.match(PyxellParser.T__19) self.state = 75 self.expr(0) self.state = 76 self.block() pass - elif token in [PyxellParser.T__19]: + elif token in [PyxellParser.T__20]: localctx = PyxellParser.StmtUntilContext(self, localctx) self.enterOuterAlt(localctx, 3) self.state = 78 - self.match(PyxellParser.T__19) + self.match(PyxellParser.T__20) self.state = 79 self.expr(0) self.state = 80 @@ -692,9 +696,9 @@ def block(self): try: self.enterOuterAlt(localctx, 1) self.state = 84 - self.match(PyxellParser.T__20) - self.state = 85 self.match(PyxellParser.T__21) + self.state = 85 + self.match(PyxellParser.T__22) self.state = 87 self._errHandler.sync(self) _la = self._input.LA(1) @@ -704,11 +708,11 @@ def block(self): self.state = 89 self._errHandler.sync(self) _la = self._input.LA(1) - if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__7) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__18) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__26) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__37) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0)): + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__37) | (1 << PyxellParser.T__38) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0)): break self.state = 91 - self.match(PyxellParser.T__22) + self.match(PyxellParser.T__23) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -901,7 +905,7 @@ def expr(self, _p:int=0): self.state = 103 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__36, PyxellParser.T__37, PyxellParser.INT, PyxellParser.ID]: + if token in [PyxellParser.T__37, PyxellParser.T__38, PyxellParser.INT, PyxellParser.ID]: localctx = PyxellParser.ExprAtomContext(self, localctx) self._ctx = localctx _prevctx = localctx @@ -909,25 +913,25 @@ def expr(self, _p:int=0): self.state = 94 self.atom() pass - elif token in [PyxellParser.T__23]: + elif token in [PyxellParser.T__24]: localctx = PyxellParser.ExprParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx self.state = 95 - self.match(PyxellParser.T__23) + self.match(PyxellParser.T__24) self.state = 96 self.expr(0) self.state = 97 - self.match(PyxellParser.T__24) + self.match(PyxellParser.T__25) pass - elif token in [PyxellParser.T__7, PyxellParser.T__8, PyxellParser.T__26]: + elif token in [PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__27]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx self.state = 99 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__7) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__26))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__27))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -935,12 +939,12 @@ def expr(self, _p:int=0): self.state = 100 self.expr(12) pass - elif token in [PyxellParser.T__33]: + elif token in [PyxellParser.T__34]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx self.state = 101 - localctx.op = self.match(PyxellParser.T__33) + localctx.op = self.match(PyxellParser.T__34) self.state = 102 self.expr(4) pass @@ -948,7 +952,7 @@ def expr(self, _p:int=0): raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 140 + self.state = 143 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,12,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: @@ -956,178 +960,191 @@ def expr(self, _p:int=0): if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 138 + self.state = 141 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,11,self._ctx) if la_ == 1: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 105 - if not self.precpred(self._ctx, 11): + if not self.precpred(self._ctx, 13): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") self.state = 106 - localctx.op = self._input.LT(1) - _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__4) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6))) != 0)): - localctx.op = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() + localctx.op = self.match(PyxellParser.T__4) self.state = 107 - self.expr(12) + self.expr(13) pass elif la_ == 2: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 108 - if not self.precpred(self._ctx, 10): + if not self.precpred(self._ctx, 11): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") self.state = 109 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not(_la==PyxellParser.T__7 or _la==PyxellParser.T__8): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__7))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() self.state = 110 - self.expr(11) + self.expr(12) pass elif la_ == 3: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 111 - if not self.precpred(self._ctx, 9): + if not self.precpred(self._ctx, 10): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") self.state = 112 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not(_la==PyxellParser.T__9 or _la==PyxellParser.T__10): + if not(_la==PyxellParser.T__8 or _la==PyxellParser.T__9): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() self.state = 113 - self.expr(10) + self.expr(11) pass elif la_ == 4: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 114 - if not self.precpred(self._ctx, 8): + if not self.precpred(self._ctx, 9): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") self.state = 115 - localctx.op = self.match(PyxellParser.T__11) + localctx.op = self._input.LT(1) + _la = self._input.LA(1) + if not(_la==PyxellParser.T__10 or _la==PyxellParser.T__11): + localctx.op = self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() self.state = 116 - self.expr(9) + self.expr(10) pass elif la_ == 5: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 117 - if not self.precpred(self._ctx, 7): + if not self.precpred(self._ctx, 8): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") self.state = 118 localctx.op = self.match(PyxellParser.T__12) self.state = 119 - self.expr(8) + self.expr(9) pass elif la_ == 6: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 120 - if not self.precpred(self._ctx, 6): + if not self.precpred(self._ctx, 7): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") self.state = 121 localctx.op = self.match(PyxellParser.T__13) self.state = 122 - self.expr(7) + self.expr(8) pass elif la_ == 7: - localctx = PyxellParser.ExprCmpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 123 + if not self.precpred(self._ctx, 6): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") + self.state = 124 + localctx.op = self.match(PyxellParser.T__14) + self.state = 125 + self.expr(7) + pass + + elif la_ == 8: + localctx = PyxellParser.ExprCmpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) + self.state = 126 if not self.precpred(self._ctx, 5): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") - self.state = 124 + self.state = 127 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__27) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__31) | (1 << PyxellParser.T__32))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__31) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__33))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 125 + self.state = 128 self.expr(5) pass - elif la_ == 8: + elif la_ == 9: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 126 + self.state = 129 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 127 - localctx.op = self.match(PyxellParser.T__34) - self.state = 128 + self.state = 130 + localctx.op = self.match(PyxellParser.T__35) + self.state = 131 self.expr(3) pass - elif la_ == 9: + elif la_ == 10: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 129 + self.state = 132 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 130 - localctx.op = self.match(PyxellParser.T__35) - self.state = 131 + self.state = 133 + localctx.op = self.match(PyxellParser.T__36) + self.state = 134 self.expr(2) pass - elif la_ == 10: + elif la_ == 11: localctx = PyxellParser.ExprTupleContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 132 + self.state = 135 if not self.precpred(self._ctx, 1): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") - self.state = 133 - self.match(PyxellParser.T__14) - self.state = 134 + self.state = 136 + self.match(PyxellParser.T__15) + self.state = 137 self.expr(1) pass - elif la_ == 11: + elif la_ == 12: localctx = PyxellParser.ExprAttrContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 135 - if not self.precpred(self._ctx, 13): + self.state = 138 + if not self.precpred(self._ctx, 14): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") - self.state = 136 - self.match(PyxellParser.T__25) - self.state = 137 + raise FailedPredicateException(self, "self.precpred(self._ctx, 14)") + self.state = 139 + self.match(PyxellParser.T__26) + self.state = 140 self.match(PyxellParser.ID) pass - self.state = 142 + self.state = 145 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,12,self._ctx) @@ -1209,21 +1226,21 @@ def atom(self): self.enterRule(localctx, 14, self.RULE_atom) self._la = 0 # Token type try: - self.state = 146 + self.state = 149 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: localctx = PyxellParser.AtomIntContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 143 + self.state = 146 self.match(PyxellParser.INT) pass - elif token in [PyxellParser.T__36, PyxellParser.T__37]: + elif token in [PyxellParser.T__37, PyxellParser.T__38]: localctx = PyxellParser.AtomBoolContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 144 + self.state = 147 _la = self._input.LA(1) - if not(_la==PyxellParser.T__36 or _la==PyxellParser.T__37): + if not(_la==PyxellParser.T__37 or _la==PyxellParser.T__38): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -1232,7 +1249,7 @@ def atom(self): elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 145 + self.state = 148 self.match(PyxellParser.ID) pass else: @@ -1260,47 +1277,51 @@ def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): def expr_sempred(self, localctx:ExprContext, predIndex:int): if predIndex == 0: - return self.precpred(self._ctx, 11) + return self.precpred(self._ctx, 13) if predIndex == 1: - return self.precpred(self._ctx, 10) + return self.precpred(self._ctx, 11) if predIndex == 2: - return self.precpred(self._ctx, 9) + return self.precpred(self._ctx, 10) if predIndex == 3: - return self.precpred(self._ctx, 8) + return self.precpred(self._ctx, 9) if predIndex == 4: - return self.precpred(self._ctx, 7) + return self.precpred(self._ctx, 8) if predIndex == 5: - return self.precpred(self._ctx, 6) + return self.precpred(self._ctx, 7) if predIndex == 6: - return self.precpred(self._ctx, 5) + return self.precpred(self._ctx, 6) if predIndex == 7: - return self.precpred(self._ctx, 3) + return self.precpred(self._ctx, 5) if predIndex == 8: - return self.precpred(self._ctx, 2) + return self.precpred(self._ctx, 3) if predIndex == 9: - return self.precpred(self._ctx, 1) + return self.precpred(self._ctx, 2) if predIndex == 10: - return self.precpred(self._ctx, 13) + return self.precpred(self._ctx, 1) + + + if predIndex == 11: + return self.precpred(self._ctx, 14) diff --git a/src/compiler.py b/src/compiler.py index f21fe6c1..da6d0ca8 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -18,6 +18,7 @@ def __init__(self): 'writeInt': ll.Function(self.module, tFunc([tInt]), 'func.writeInt'), 'writeBool': ll.Function(self.module, tFunc([tBool]), 'func.writeBool'), 'putchar': ll.Function(self.module, tFunc([tChar]), 'putchar'), + 'Int_pow': ll.Function(self.module, tFunc([tInt, tInt], tInt), 'func.Int_pow'), } @@ -76,19 +77,22 @@ def binaryop(self, ctx, op, left, right): if not left.type == right.type == tInt: self.throw(ctx, err.NoBinaryOperator(op, left.type, right.type)) - instruction = { - '*': self.builder.mul, - '/': self.builder.sdiv, - '%': self.builder.srem, - '+': self.builder.add, - '-': self.builder.sub, - '<<': self.builder.shl, - '>>': self.builder.ashr, - '&': self.builder.and_, - '$': self.builder.xor, - '|': self.builder.or_, - }[op] - return instruction(left, right) + if op == '^': + return self.builder.call(self.builtins['Int_pow'], [left, right]) + else: + instruction = { + '*': self.builder.mul, + '/': self.builder.sdiv, + '%': self.builder.srem, + '+': self.builder.add, + '-': self.builder.sub, + '<<': self.builder.shl, + '>>': self.builder.ashr, + '&': self.builder.and_, + '$': self.builder.xor, + '|': self.builder.or_, + }[op] + return instruction(left, right) def cmp(self, ctx, op, left, right): if left.type != right.type: From 26fd37a0a90cbfba315fc4fa19e09b3728fdc73c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sun, 6 Oct 2019 19:11:04 +0200 Subject: [PATCH 014/100] Fix division and modulo --- src/compiler.py | 19 +++++++++++++++++-- test/good/basic/calc01.px | 2 +- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/compiler.py b/src/compiler.py index da6d0ca8..95d653b3 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -79,11 +79,26 @@ def binaryop(self, ctx, op, left, right): if op == '^': return self.builder.call(self.builtins['Int_pow'], [left, right]) + elif op == '/': + v1 = self.builder.sdiv(left, right) + v2 = self.builder.sub(v1, vInt(1)) + v3 = self.builder.xor(left, right) + v4 = self.builder.icmp_signed('<', v3, vInt(0)) + v5 = self.builder.select(v4, v2, v1) + v6 = self.builder.mul(v1, right) + v7 = self.builder.icmp_signed('!=', v6, left) + return self.builder.select(v7, v5, v1) + elif op == '%': + v1 = self.builder.srem(left, right) + v2 = self.builder.add(v1, right) + v3 = self.builder.xor(left, right) + v4 = self.builder.icmp_signed('<', v3, vInt(0)) + v5 = self.builder.select(v4, v2, v1) + v6 = self.builder.icmp_signed('==', v1, vInt(0)) + return self.builder.select(v6, v1, v5) else: instruction = { '*': self.builder.mul, - '/': self.builder.sdiv, - '%': self.builder.srem, '+': self.builder.add, '-': self.builder.sub, '<<': self.builder.shl, diff --git a/test/good/basic/calc01.px b/test/good/basic/calc01.px index 31c1ed77..88ac9658 100644 --- a/test/good/basic/calc01.px +++ b/test/good/basic/calc01.px @@ -1,5 +1,5 @@ a = 2 b = 3 -print a + b + a * b + a - b + -b / --a +print a + b + a * b + a - b - -b / -a print (a + b) * 4 From 08eb80b027ccd668e28cef87862f5cf044e49b78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Tue, 8 Oct 2019 23:59:40 +0200 Subject: [PATCH 015/100] Strings --- src/Pyxell.g4 | 2 + src/antlr/Pyxell.interp | 4 +- src/antlr/Pyxell.tokens | 7 +- src/antlr/PyxellLexer.interp | 5 +- src/antlr/PyxellLexer.py | 201 +++++++++++++++++---------------- src/antlr/PyxellLexer.tokens | 7 +- src/antlr/PyxellParser.py | 136 +++++++++++++--------- src/antlr/PyxellVisitor.py | 5 + src/compiler.py | 42 +++++-- src/types.py | 23 ++-- test/bad/strings/string03.err | 1 + test/bad/strings/string03.px | 2 + test/good/strings/string02.out | 2 +- test/good/strings/string02.px | 2 +- 14 files changed, 263 insertions(+), 176 deletions(-) create mode 100644 test/bad/strings/string03.err create mode 100644 test/bad/strings/string03.px diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index aa4cd313..346bb7e0 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -52,10 +52,12 @@ expr atom : INT # AtomInt | ('true' | 'false') # AtomBool + | STRING # AtomString | ID # AtomId ; INT : DIGIT+ ; +STRING : '"' (~[\\"] | ('\\' ["\\nt]))* '"' ; ID : ID_START ID_CONT* ; fragment DIGIT : [0-9] ; diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index cf3821ba..f00d8dac 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -43,6 +43,7 @@ null null null null +null token symbolic names: null @@ -86,6 +87,7 @@ null null null INT +STRING ID WS ERR @@ -102,4 +104,4 @@ atom atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 45, 154, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 3, 2, 7, 2, 20, 10, 2, 12, 2, 14, 2, 23, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 31, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 36, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 41, 10, 4, 12, 4, 14, 4, 44, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 51, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 56, 10, 5, 12, 5, 14, 5, 59, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 68, 10, 6, 12, 6, 14, 6, 71, 11, 6, 3, 6, 3, 6, 5, 6, 75, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 85, 10, 6, 3, 7, 3, 7, 3, 7, 6, 7, 90, 10, 7, 13, 7, 14, 7, 91, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 106, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 144, 10, 8, 12, 8, 14, 8, 147, 11, 8, 3, 9, 3, 9, 3, 9, 5, 9, 152, 10, 9, 3, 9, 2, 3, 14, 10, 2, 4, 6, 8, 10, 12, 14, 16, 2, 9, 3, 2, 7, 17, 4, 2, 11, 12, 30, 30, 3, 2, 8, 10, 3, 2, 11, 12, 3, 2, 13, 14, 3, 2, 31, 36, 3, 2, 40, 41, 2, 175, 2, 21, 3, 2, 2, 2, 4, 30, 3, 2, 2, 2, 6, 50, 3, 2, 2, 2, 8, 52, 3, 2, 2, 2, 10, 84, 3, 2, 2, 2, 12, 86, 3, 2, 2, 2, 14, 105, 3, 2, 2, 2, 16, 151, 3, 2, 2, 2, 18, 20, 5, 4, 3, 2, 19, 18, 3, 2, 2, 2, 20, 23, 3, 2, 2, 2, 21, 19, 3, 2, 2, 2, 21, 22, 3, 2, 2, 2, 22, 24, 3, 2, 2, 2, 23, 21, 3, 2, 2, 2, 24, 25, 7, 2, 2, 3, 25, 3, 3, 2, 2, 2, 26, 27, 5, 6, 4, 2, 27, 28, 7, 3, 2, 2, 28, 31, 3, 2, 2, 2, 29, 31, 5, 10, 6, 2, 30, 26, 3, 2, 2, 2, 30, 29, 3, 2, 2, 2, 31, 5, 3, 2, 2, 2, 32, 51, 7, 4, 2, 2, 33, 35, 7, 5, 2, 2, 34, 36, 5, 14, 8, 2, 35, 34, 3, 2, 2, 2, 35, 36, 3, 2, 2, 2, 36, 51, 3, 2, 2, 2, 37, 38, 5, 8, 5, 2, 38, 39, 7, 6, 2, 2, 39, 41, 3, 2, 2, 2, 40, 37, 3, 2, 2, 2, 41, 44, 3, 2, 2, 2, 42, 40, 3, 2, 2, 2, 42, 43, 3, 2, 2, 2, 43, 45, 3, 2, 2, 2, 44, 42, 3, 2, 2, 2, 45, 51, 5, 14, 8, 2, 46, 47, 7, 43, 2, 2, 47, 48, 9, 2, 2, 2, 48, 49, 7, 6, 2, 2, 49, 51, 5, 14, 8, 2, 50, 32, 3, 2, 2, 2, 50, 33, 3, 2, 2, 2, 50, 42, 3, 2, 2, 2, 50, 46, 3, 2, 2, 2, 51, 7, 3, 2, 2, 2, 52, 57, 7, 43, 2, 2, 53, 54, 7, 18, 2, 2, 54, 56, 7, 43, 2, 2, 55, 53, 3, 2, 2, 2, 56, 59, 3, 2, 2, 2, 57, 55, 3, 2, 2, 2, 57, 58, 3, 2, 2, 2, 58, 9, 3, 2, 2, 2, 59, 57, 3, 2, 2, 2, 60, 61, 7, 19, 2, 2, 61, 62, 5, 14, 8, 2, 62, 69, 5, 12, 7, 2, 63, 64, 7, 20, 2, 2, 64, 65, 5, 14, 8, 2, 65, 66, 5, 12, 7, 2, 66, 68, 3, 2, 2, 2, 67, 63, 3, 2, 2, 2, 68, 71, 3, 2, 2, 2, 69, 67, 3, 2, 2, 2, 69, 70, 3, 2, 2, 2, 70, 74, 3, 2, 2, 2, 71, 69, 3, 2, 2, 2, 72, 73, 7, 21, 2, 2, 73, 75, 5, 12, 7, 2, 74, 72, 3, 2, 2, 2, 74, 75, 3, 2, 2, 2, 75, 85, 3, 2, 2, 2, 76, 77, 7, 22, 2, 2, 77, 78, 5, 14, 8, 2, 78, 79, 5, 12, 7, 2, 79, 85, 3, 2, 2, 2, 80, 81, 7, 23, 2, 2, 81, 82, 5, 14, 8, 2, 82, 83, 5, 12, 7, 2, 83, 85, 3, 2, 2, 2, 84, 60, 3, 2, 2, 2, 84, 76, 3, 2, 2, 2, 84, 80, 3, 2, 2, 2, 85, 11, 3, 2, 2, 2, 86, 87, 7, 24, 2, 2, 87, 89, 7, 25, 2, 2, 88, 90, 5, 4, 3, 2, 89, 88, 3, 2, 2, 2, 90, 91, 3, 2, 2, 2, 91, 89, 3, 2, 2, 2, 91, 92, 3, 2, 2, 2, 92, 93, 3, 2, 2, 2, 93, 94, 7, 26, 2, 2, 94, 13, 3, 2, 2, 2, 95, 96, 8, 8, 1, 2, 96, 106, 5, 16, 9, 2, 97, 98, 7, 27, 2, 2, 98, 99, 5, 14, 8, 2, 99, 100, 7, 28, 2, 2, 100, 106, 3, 2, 2, 2, 101, 102, 9, 3, 2, 2, 102, 106, 5, 14, 8, 14, 103, 104, 7, 37, 2, 2, 104, 106, 5, 14, 8, 6, 105, 95, 3, 2, 2, 2, 105, 97, 3, 2, 2, 2, 105, 101, 3, 2, 2, 2, 105, 103, 3, 2, 2, 2, 106, 145, 3, 2, 2, 2, 107, 108, 12, 15, 2, 2, 108, 109, 7, 7, 2, 2, 109, 144, 5, 14, 8, 15, 110, 111, 12, 13, 2, 2, 111, 112, 9, 4, 2, 2, 112, 144, 5, 14, 8, 14, 113, 114, 12, 12, 2, 2, 114, 115, 9, 5, 2, 2, 115, 144, 5, 14, 8, 13, 116, 117, 12, 11, 2, 2, 117, 118, 9, 6, 2, 2, 118, 144, 5, 14, 8, 12, 119, 120, 12, 10, 2, 2, 120, 121, 7, 15, 2, 2, 121, 144, 5, 14, 8, 11, 122, 123, 12, 9, 2, 2, 123, 124, 7, 16, 2, 2, 124, 144, 5, 14, 8, 10, 125, 126, 12, 8, 2, 2, 126, 127, 7, 17, 2, 2, 127, 144, 5, 14, 8, 9, 128, 129, 12, 7, 2, 2, 129, 130, 9, 7, 2, 2, 130, 144, 5, 14, 8, 7, 131, 132, 12, 5, 2, 2, 132, 133, 7, 38, 2, 2, 133, 144, 5, 14, 8, 5, 134, 135, 12, 4, 2, 2, 135, 136, 7, 39, 2, 2, 136, 144, 5, 14, 8, 4, 137, 138, 12, 3, 2, 2, 138, 139, 7, 18, 2, 2, 139, 144, 5, 14, 8, 3, 140, 141, 12, 16, 2, 2, 141, 142, 7, 29, 2, 2, 142, 144, 7, 43, 2, 2, 143, 107, 3, 2, 2, 2, 143, 110, 3, 2, 2, 2, 143, 113, 3, 2, 2, 2, 143, 116, 3, 2, 2, 2, 143, 119, 3, 2, 2, 2, 143, 122, 3, 2, 2, 2, 143, 125, 3, 2, 2, 2, 143, 128, 3, 2, 2, 2, 143, 131, 3, 2, 2, 2, 143, 134, 3, 2, 2, 2, 143, 137, 3, 2, 2, 2, 143, 140, 3, 2, 2, 2, 144, 147, 3, 2, 2, 2, 145, 143, 3, 2, 2, 2, 145, 146, 3, 2, 2, 2, 146, 15, 3, 2, 2, 2, 147, 145, 3, 2, 2, 2, 148, 152, 7, 42, 2, 2, 149, 152, 9, 8, 2, 2, 150, 152, 7, 43, 2, 2, 151, 148, 3, 2, 2, 2, 151, 149, 3, 2, 2, 2, 151, 150, 3, 2, 2, 2, 152, 17, 3, 2, 2, 2, 16, 21, 30, 35, 42, 50, 57, 69, 74, 84, 91, 105, 143, 145, 151] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 46, 155, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 3, 2, 7, 2, 20, 10, 2, 12, 2, 14, 2, 23, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 31, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 36, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 41, 10, 4, 12, 4, 14, 4, 44, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 51, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 56, 10, 5, 12, 5, 14, 5, 59, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 68, 10, 6, 12, 6, 14, 6, 71, 11, 6, 3, 6, 3, 6, 5, 6, 75, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 85, 10, 6, 3, 7, 3, 7, 3, 7, 6, 7, 90, 10, 7, 13, 7, 14, 7, 91, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 106, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 144, 10, 8, 12, 8, 14, 8, 147, 11, 8, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 153, 10, 9, 3, 9, 2, 3, 14, 10, 2, 4, 6, 8, 10, 12, 14, 16, 2, 9, 3, 2, 7, 17, 4, 2, 11, 12, 30, 30, 3, 2, 8, 10, 3, 2, 11, 12, 3, 2, 13, 14, 3, 2, 31, 36, 3, 2, 40, 41, 2, 177, 2, 21, 3, 2, 2, 2, 4, 30, 3, 2, 2, 2, 6, 50, 3, 2, 2, 2, 8, 52, 3, 2, 2, 2, 10, 84, 3, 2, 2, 2, 12, 86, 3, 2, 2, 2, 14, 105, 3, 2, 2, 2, 16, 152, 3, 2, 2, 2, 18, 20, 5, 4, 3, 2, 19, 18, 3, 2, 2, 2, 20, 23, 3, 2, 2, 2, 21, 19, 3, 2, 2, 2, 21, 22, 3, 2, 2, 2, 22, 24, 3, 2, 2, 2, 23, 21, 3, 2, 2, 2, 24, 25, 7, 2, 2, 3, 25, 3, 3, 2, 2, 2, 26, 27, 5, 6, 4, 2, 27, 28, 7, 3, 2, 2, 28, 31, 3, 2, 2, 2, 29, 31, 5, 10, 6, 2, 30, 26, 3, 2, 2, 2, 30, 29, 3, 2, 2, 2, 31, 5, 3, 2, 2, 2, 32, 51, 7, 4, 2, 2, 33, 35, 7, 5, 2, 2, 34, 36, 5, 14, 8, 2, 35, 34, 3, 2, 2, 2, 35, 36, 3, 2, 2, 2, 36, 51, 3, 2, 2, 2, 37, 38, 5, 8, 5, 2, 38, 39, 7, 6, 2, 2, 39, 41, 3, 2, 2, 2, 40, 37, 3, 2, 2, 2, 41, 44, 3, 2, 2, 2, 42, 40, 3, 2, 2, 2, 42, 43, 3, 2, 2, 2, 43, 45, 3, 2, 2, 2, 44, 42, 3, 2, 2, 2, 45, 51, 5, 14, 8, 2, 46, 47, 7, 44, 2, 2, 47, 48, 9, 2, 2, 2, 48, 49, 7, 6, 2, 2, 49, 51, 5, 14, 8, 2, 50, 32, 3, 2, 2, 2, 50, 33, 3, 2, 2, 2, 50, 42, 3, 2, 2, 2, 50, 46, 3, 2, 2, 2, 51, 7, 3, 2, 2, 2, 52, 57, 7, 44, 2, 2, 53, 54, 7, 18, 2, 2, 54, 56, 7, 44, 2, 2, 55, 53, 3, 2, 2, 2, 56, 59, 3, 2, 2, 2, 57, 55, 3, 2, 2, 2, 57, 58, 3, 2, 2, 2, 58, 9, 3, 2, 2, 2, 59, 57, 3, 2, 2, 2, 60, 61, 7, 19, 2, 2, 61, 62, 5, 14, 8, 2, 62, 69, 5, 12, 7, 2, 63, 64, 7, 20, 2, 2, 64, 65, 5, 14, 8, 2, 65, 66, 5, 12, 7, 2, 66, 68, 3, 2, 2, 2, 67, 63, 3, 2, 2, 2, 68, 71, 3, 2, 2, 2, 69, 67, 3, 2, 2, 2, 69, 70, 3, 2, 2, 2, 70, 74, 3, 2, 2, 2, 71, 69, 3, 2, 2, 2, 72, 73, 7, 21, 2, 2, 73, 75, 5, 12, 7, 2, 74, 72, 3, 2, 2, 2, 74, 75, 3, 2, 2, 2, 75, 85, 3, 2, 2, 2, 76, 77, 7, 22, 2, 2, 77, 78, 5, 14, 8, 2, 78, 79, 5, 12, 7, 2, 79, 85, 3, 2, 2, 2, 80, 81, 7, 23, 2, 2, 81, 82, 5, 14, 8, 2, 82, 83, 5, 12, 7, 2, 83, 85, 3, 2, 2, 2, 84, 60, 3, 2, 2, 2, 84, 76, 3, 2, 2, 2, 84, 80, 3, 2, 2, 2, 85, 11, 3, 2, 2, 2, 86, 87, 7, 24, 2, 2, 87, 89, 7, 25, 2, 2, 88, 90, 5, 4, 3, 2, 89, 88, 3, 2, 2, 2, 90, 91, 3, 2, 2, 2, 91, 89, 3, 2, 2, 2, 91, 92, 3, 2, 2, 2, 92, 93, 3, 2, 2, 2, 93, 94, 7, 26, 2, 2, 94, 13, 3, 2, 2, 2, 95, 96, 8, 8, 1, 2, 96, 106, 5, 16, 9, 2, 97, 98, 7, 27, 2, 2, 98, 99, 5, 14, 8, 2, 99, 100, 7, 28, 2, 2, 100, 106, 3, 2, 2, 2, 101, 102, 9, 3, 2, 2, 102, 106, 5, 14, 8, 14, 103, 104, 7, 37, 2, 2, 104, 106, 5, 14, 8, 6, 105, 95, 3, 2, 2, 2, 105, 97, 3, 2, 2, 2, 105, 101, 3, 2, 2, 2, 105, 103, 3, 2, 2, 2, 106, 145, 3, 2, 2, 2, 107, 108, 12, 15, 2, 2, 108, 109, 7, 7, 2, 2, 109, 144, 5, 14, 8, 15, 110, 111, 12, 13, 2, 2, 111, 112, 9, 4, 2, 2, 112, 144, 5, 14, 8, 14, 113, 114, 12, 12, 2, 2, 114, 115, 9, 5, 2, 2, 115, 144, 5, 14, 8, 13, 116, 117, 12, 11, 2, 2, 117, 118, 9, 6, 2, 2, 118, 144, 5, 14, 8, 12, 119, 120, 12, 10, 2, 2, 120, 121, 7, 15, 2, 2, 121, 144, 5, 14, 8, 11, 122, 123, 12, 9, 2, 2, 123, 124, 7, 16, 2, 2, 124, 144, 5, 14, 8, 10, 125, 126, 12, 8, 2, 2, 126, 127, 7, 17, 2, 2, 127, 144, 5, 14, 8, 9, 128, 129, 12, 7, 2, 2, 129, 130, 9, 7, 2, 2, 130, 144, 5, 14, 8, 7, 131, 132, 12, 5, 2, 2, 132, 133, 7, 38, 2, 2, 133, 144, 5, 14, 8, 5, 134, 135, 12, 4, 2, 2, 135, 136, 7, 39, 2, 2, 136, 144, 5, 14, 8, 4, 137, 138, 12, 3, 2, 2, 138, 139, 7, 18, 2, 2, 139, 144, 5, 14, 8, 3, 140, 141, 12, 16, 2, 2, 141, 142, 7, 29, 2, 2, 142, 144, 7, 44, 2, 2, 143, 107, 3, 2, 2, 2, 143, 110, 3, 2, 2, 2, 143, 113, 3, 2, 2, 2, 143, 116, 3, 2, 2, 2, 143, 119, 3, 2, 2, 2, 143, 122, 3, 2, 2, 2, 143, 125, 3, 2, 2, 2, 143, 128, 3, 2, 2, 2, 143, 131, 3, 2, 2, 2, 143, 134, 3, 2, 2, 2, 143, 137, 3, 2, 2, 2, 143, 140, 3, 2, 2, 2, 144, 147, 3, 2, 2, 2, 145, 143, 3, 2, 2, 2, 145, 146, 3, 2, 2, 2, 146, 15, 3, 2, 2, 2, 147, 145, 3, 2, 2, 2, 148, 153, 7, 42, 2, 2, 149, 153, 9, 8, 2, 2, 150, 153, 7, 43, 2, 2, 151, 153, 7, 44, 2, 2, 152, 148, 3, 2, 2, 2, 152, 149, 3, 2, 2, 2, 152, 150, 3, 2, 2, 2, 152, 151, 3, 2, 2, 2, 153, 17, 3, 2, 2, 2, 16, 21, 30, 35, 42, 50, 57, 69, 74, 84, 91, 105, 143, 145, 152] \ No newline at end of file diff --git a/src/antlr/Pyxell.tokens b/src/antlr/Pyxell.tokens index 0c88cbb2..6228dbc7 100644 --- a/src/antlr/Pyxell.tokens +++ b/src/antlr/Pyxell.tokens @@ -38,9 +38,10 @@ T__36=37 T__37=38 T__38=39 INT=40 -ID=41 -WS=42 -ERR=43 +STRING=41 +ID=42 +WS=43 +ERR=44 ';'=1 'skip'=2 'print'=3 diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp index 6a7c73d7..f1e7fdfb 100644 --- a/src/antlr/PyxellLexer.interp +++ b/src/antlr/PyxellLexer.interp @@ -43,6 +43,7 @@ null null null null +null token symbolic names: null @@ -86,6 +87,7 @@ null null null INT +STRING ID WS ERR @@ -131,6 +133,7 @@ T__36 T__37 T__38 INT +STRING ID DIGIT LETTER @@ -147,4 +150,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 45, 248, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 6, 41, 218, 10, 41, 13, 41, 14, 41, 219, 3, 42, 3, 42, 7, 42, 224, 10, 42, 12, 42, 14, 42, 227, 11, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 5, 46, 238, 10, 46, 3, 47, 6, 47, 241, 10, 47, 13, 47, 14, 47, 242, 3, 47, 3, 47, 3, 48, 3, 48, 2, 2, 49, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 2, 87, 2, 89, 2, 91, 2, 93, 44, 95, 45, 3, 2, 7, 3, 2, 50, 59, 3, 2, 99, 124, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 248, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 3, 97, 3, 2, 2, 2, 5, 99, 3, 2, 2, 2, 7, 104, 3, 2, 2, 2, 9, 110, 3, 2, 2, 2, 11, 112, 3, 2, 2, 2, 13, 114, 3, 2, 2, 2, 15, 116, 3, 2, 2, 2, 17, 118, 3, 2, 2, 2, 19, 120, 3, 2, 2, 2, 21, 122, 3, 2, 2, 2, 23, 124, 3, 2, 2, 2, 25, 127, 3, 2, 2, 2, 27, 130, 3, 2, 2, 2, 29, 132, 3, 2, 2, 2, 31, 134, 3, 2, 2, 2, 33, 136, 3, 2, 2, 2, 35, 138, 3, 2, 2, 2, 37, 141, 3, 2, 2, 2, 39, 146, 3, 2, 2, 2, 41, 151, 3, 2, 2, 2, 43, 157, 3, 2, 2, 2, 45, 163, 3, 2, 2, 2, 47, 166, 3, 2, 2, 2, 49, 168, 3, 2, 2, 2, 51, 170, 3, 2, 2, 2, 53, 172, 3, 2, 2, 2, 55, 174, 3, 2, 2, 2, 57, 176, 3, 2, 2, 2, 59, 178, 3, 2, 2, 2, 61, 181, 3, 2, 2, 2, 63, 184, 3, 2, 2, 2, 65, 186, 3, 2, 2, 2, 67, 189, 3, 2, 2, 2, 69, 191, 3, 2, 2, 2, 71, 194, 3, 2, 2, 2, 73, 198, 3, 2, 2, 2, 75, 202, 3, 2, 2, 2, 77, 205, 3, 2, 2, 2, 79, 210, 3, 2, 2, 2, 81, 217, 3, 2, 2, 2, 83, 221, 3, 2, 2, 2, 85, 228, 3, 2, 2, 2, 87, 230, 3, 2, 2, 2, 89, 232, 3, 2, 2, 2, 91, 237, 3, 2, 2, 2, 93, 240, 3, 2, 2, 2, 95, 246, 3, 2, 2, 2, 97, 98, 7, 61, 2, 2, 98, 4, 3, 2, 2, 2, 99, 100, 7, 117, 2, 2, 100, 101, 7, 109, 2, 2, 101, 102, 7, 107, 2, 2, 102, 103, 7, 114, 2, 2, 103, 6, 3, 2, 2, 2, 104, 105, 7, 114, 2, 2, 105, 106, 7, 116, 2, 2, 106, 107, 7, 107, 2, 2, 107, 108, 7, 112, 2, 2, 108, 109, 7, 118, 2, 2, 109, 8, 3, 2, 2, 2, 110, 111, 7, 63, 2, 2, 111, 10, 3, 2, 2, 2, 112, 113, 7, 96, 2, 2, 113, 12, 3, 2, 2, 2, 114, 115, 7, 44, 2, 2, 115, 14, 3, 2, 2, 2, 116, 117, 7, 49, 2, 2, 117, 16, 3, 2, 2, 2, 118, 119, 7, 39, 2, 2, 119, 18, 3, 2, 2, 2, 120, 121, 7, 45, 2, 2, 121, 20, 3, 2, 2, 2, 122, 123, 7, 47, 2, 2, 123, 22, 3, 2, 2, 2, 124, 125, 7, 62, 2, 2, 125, 126, 7, 62, 2, 2, 126, 24, 3, 2, 2, 2, 127, 128, 7, 64, 2, 2, 128, 129, 7, 64, 2, 2, 129, 26, 3, 2, 2, 2, 130, 131, 7, 40, 2, 2, 131, 28, 3, 2, 2, 2, 132, 133, 7, 38, 2, 2, 133, 30, 3, 2, 2, 2, 134, 135, 7, 126, 2, 2, 135, 32, 3, 2, 2, 2, 136, 137, 7, 46, 2, 2, 137, 34, 3, 2, 2, 2, 138, 139, 7, 107, 2, 2, 139, 140, 7, 104, 2, 2, 140, 36, 3, 2, 2, 2, 141, 142, 7, 103, 2, 2, 142, 143, 7, 110, 2, 2, 143, 144, 7, 107, 2, 2, 144, 145, 7, 104, 2, 2, 145, 38, 3, 2, 2, 2, 146, 147, 7, 103, 2, 2, 147, 148, 7, 110, 2, 2, 148, 149, 7, 117, 2, 2, 149, 150, 7, 103, 2, 2, 150, 40, 3, 2, 2, 2, 151, 152, 7, 121, 2, 2, 152, 153, 7, 106, 2, 2, 153, 154, 7, 107, 2, 2, 154, 155, 7, 110, 2, 2, 155, 156, 7, 103, 2, 2, 156, 42, 3, 2, 2, 2, 157, 158, 7, 119, 2, 2, 158, 159, 7, 112, 2, 2, 159, 160, 7, 118, 2, 2, 160, 161, 7, 107, 2, 2, 161, 162, 7, 110, 2, 2, 162, 44, 3, 2, 2, 2, 163, 164, 7, 102, 2, 2, 164, 165, 7, 113, 2, 2, 165, 46, 3, 2, 2, 2, 166, 167, 7, 125, 2, 2, 167, 48, 3, 2, 2, 2, 168, 169, 7, 127, 2, 2, 169, 50, 3, 2, 2, 2, 170, 171, 7, 42, 2, 2, 171, 52, 3, 2, 2, 2, 172, 173, 7, 43, 2, 2, 173, 54, 3, 2, 2, 2, 174, 175, 7, 48, 2, 2, 175, 56, 3, 2, 2, 2, 176, 177, 7, 128, 2, 2, 177, 58, 3, 2, 2, 2, 178, 179, 7, 63, 2, 2, 179, 180, 7, 63, 2, 2, 180, 60, 3, 2, 2, 2, 181, 182, 7, 35, 2, 2, 182, 183, 7, 63, 2, 2, 183, 62, 3, 2, 2, 2, 184, 185, 7, 62, 2, 2, 185, 64, 3, 2, 2, 2, 186, 187, 7, 62, 2, 2, 187, 188, 7, 63, 2, 2, 188, 66, 3, 2, 2, 2, 189, 190, 7, 64, 2, 2, 190, 68, 3, 2, 2, 2, 191, 192, 7, 64, 2, 2, 192, 193, 7, 63, 2, 2, 193, 70, 3, 2, 2, 2, 194, 195, 7, 112, 2, 2, 195, 196, 7, 113, 2, 2, 196, 197, 7, 118, 2, 2, 197, 72, 3, 2, 2, 2, 198, 199, 7, 99, 2, 2, 199, 200, 7, 112, 2, 2, 200, 201, 7, 102, 2, 2, 201, 74, 3, 2, 2, 2, 202, 203, 7, 113, 2, 2, 203, 204, 7, 116, 2, 2, 204, 76, 3, 2, 2, 2, 205, 206, 7, 118, 2, 2, 206, 207, 7, 116, 2, 2, 207, 208, 7, 119, 2, 2, 208, 209, 7, 103, 2, 2, 209, 78, 3, 2, 2, 2, 210, 211, 7, 104, 2, 2, 211, 212, 7, 99, 2, 2, 212, 213, 7, 110, 2, 2, 213, 214, 7, 117, 2, 2, 214, 215, 7, 103, 2, 2, 215, 80, 3, 2, 2, 2, 216, 218, 5, 85, 43, 2, 217, 216, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 217, 3, 2, 2, 2, 219, 220, 3, 2, 2, 2, 220, 82, 3, 2, 2, 2, 221, 225, 5, 89, 45, 2, 222, 224, 5, 91, 46, 2, 223, 222, 3, 2, 2, 2, 224, 227, 3, 2, 2, 2, 225, 223, 3, 2, 2, 2, 225, 226, 3, 2, 2, 2, 226, 84, 3, 2, 2, 2, 227, 225, 3, 2, 2, 2, 228, 229, 9, 2, 2, 2, 229, 86, 3, 2, 2, 2, 230, 231, 9, 3, 2, 2, 231, 88, 3, 2, 2, 2, 232, 233, 9, 4, 2, 2, 233, 90, 3, 2, 2, 2, 234, 238, 5, 89, 45, 2, 235, 238, 5, 85, 43, 2, 236, 238, 9, 5, 2, 2, 237, 234, 3, 2, 2, 2, 237, 235, 3, 2, 2, 2, 237, 236, 3, 2, 2, 2, 238, 92, 3, 2, 2, 2, 239, 241, 9, 6, 2, 2, 240, 239, 3, 2, 2, 2, 241, 242, 3, 2, 2, 2, 242, 240, 3, 2, 2, 2, 242, 243, 3, 2, 2, 2, 243, 244, 3, 2, 2, 2, 244, 245, 8, 47, 2, 2, 245, 94, 3, 2, 2, 2, 246, 247, 11, 2, 2, 2, 247, 96, 3, 2, 2, 2, 7, 2, 219, 225, 237, 242, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 46, 261, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 6, 41, 220, 10, 41, 13, 41, 14, 41, 221, 3, 42, 3, 42, 3, 42, 3, 42, 7, 42, 228, 10, 42, 12, 42, 14, 42, 231, 11, 42, 3, 42, 3, 42, 3, 43, 3, 43, 7, 43, 237, 10, 43, 12, 43, 14, 43, 240, 11, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 5, 47, 251, 10, 47, 3, 48, 6, 48, 254, 10, 48, 13, 48, 14, 48, 255, 3, 48, 3, 48, 3, 49, 3, 49, 2, 2, 50, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 2, 89, 2, 91, 2, 93, 2, 95, 45, 97, 46, 3, 2, 9, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 3, 2, 99, 124, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 263, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 3, 99, 3, 2, 2, 2, 5, 101, 3, 2, 2, 2, 7, 106, 3, 2, 2, 2, 9, 112, 3, 2, 2, 2, 11, 114, 3, 2, 2, 2, 13, 116, 3, 2, 2, 2, 15, 118, 3, 2, 2, 2, 17, 120, 3, 2, 2, 2, 19, 122, 3, 2, 2, 2, 21, 124, 3, 2, 2, 2, 23, 126, 3, 2, 2, 2, 25, 129, 3, 2, 2, 2, 27, 132, 3, 2, 2, 2, 29, 134, 3, 2, 2, 2, 31, 136, 3, 2, 2, 2, 33, 138, 3, 2, 2, 2, 35, 140, 3, 2, 2, 2, 37, 143, 3, 2, 2, 2, 39, 148, 3, 2, 2, 2, 41, 153, 3, 2, 2, 2, 43, 159, 3, 2, 2, 2, 45, 165, 3, 2, 2, 2, 47, 168, 3, 2, 2, 2, 49, 170, 3, 2, 2, 2, 51, 172, 3, 2, 2, 2, 53, 174, 3, 2, 2, 2, 55, 176, 3, 2, 2, 2, 57, 178, 3, 2, 2, 2, 59, 180, 3, 2, 2, 2, 61, 183, 3, 2, 2, 2, 63, 186, 3, 2, 2, 2, 65, 188, 3, 2, 2, 2, 67, 191, 3, 2, 2, 2, 69, 193, 3, 2, 2, 2, 71, 196, 3, 2, 2, 2, 73, 200, 3, 2, 2, 2, 75, 204, 3, 2, 2, 2, 77, 207, 3, 2, 2, 2, 79, 212, 3, 2, 2, 2, 81, 219, 3, 2, 2, 2, 83, 223, 3, 2, 2, 2, 85, 234, 3, 2, 2, 2, 87, 241, 3, 2, 2, 2, 89, 243, 3, 2, 2, 2, 91, 245, 3, 2, 2, 2, 93, 250, 3, 2, 2, 2, 95, 253, 3, 2, 2, 2, 97, 259, 3, 2, 2, 2, 99, 100, 7, 61, 2, 2, 100, 4, 3, 2, 2, 2, 101, 102, 7, 117, 2, 2, 102, 103, 7, 109, 2, 2, 103, 104, 7, 107, 2, 2, 104, 105, 7, 114, 2, 2, 105, 6, 3, 2, 2, 2, 106, 107, 7, 114, 2, 2, 107, 108, 7, 116, 2, 2, 108, 109, 7, 107, 2, 2, 109, 110, 7, 112, 2, 2, 110, 111, 7, 118, 2, 2, 111, 8, 3, 2, 2, 2, 112, 113, 7, 63, 2, 2, 113, 10, 3, 2, 2, 2, 114, 115, 7, 96, 2, 2, 115, 12, 3, 2, 2, 2, 116, 117, 7, 44, 2, 2, 117, 14, 3, 2, 2, 2, 118, 119, 7, 49, 2, 2, 119, 16, 3, 2, 2, 2, 120, 121, 7, 39, 2, 2, 121, 18, 3, 2, 2, 2, 122, 123, 7, 45, 2, 2, 123, 20, 3, 2, 2, 2, 124, 125, 7, 47, 2, 2, 125, 22, 3, 2, 2, 2, 126, 127, 7, 62, 2, 2, 127, 128, 7, 62, 2, 2, 128, 24, 3, 2, 2, 2, 129, 130, 7, 64, 2, 2, 130, 131, 7, 64, 2, 2, 131, 26, 3, 2, 2, 2, 132, 133, 7, 40, 2, 2, 133, 28, 3, 2, 2, 2, 134, 135, 7, 38, 2, 2, 135, 30, 3, 2, 2, 2, 136, 137, 7, 126, 2, 2, 137, 32, 3, 2, 2, 2, 138, 139, 7, 46, 2, 2, 139, 34, 3, 2, 2, 2, 140, 141, 7, 107, 2, 2, 141, 142, 7, 104, 2, 2, 142, 36, 3, 2, 2, 2, 143, 144, 7, 103, 2, 2, 144, 145, 7, 110, 2, 2, 145, 146, 7, 107, 2, 2, 146, 147, 7, 104, 2, 2, 147, 38, 3, 2, 2, 2, 148, 149, 7, 103, 2, 2, 149, 150, 7, 110, 2, 2, 150, 151, 7, 117, 2, 2, 151, 152, 7, 103, 2, 2, 152, 40, 3, 2, 2, 2, 153, 154, 7, 121, 2, 2, 154, 155, 7, 106, 2, 2, 155, 156, 7, 107, 2, 2, 156, 157, 7, 110, 2, 2, 157, 158, 7, 103, 2, 2, 158, 42, 3, 2, 2, 2, 159, 160, 7, 119, 2, 2, 160, 161, 7, 112, 2, 2, 161, 162, 7, 118, 2, 2, 162, 163, 7, 107, 2, 2, 163, 164, 7, 110, 2, 2, 164, 44, 3, 2, 2, 2, 165, 166, 7, 102, 2, 2, 166, 167, 7, 113, 2, 2, 167, 46, 3, 2, 2, 2, 168, 169, 7, 125, 2, 2, 169, 48, 3, 2, 2, 2, 170, 171, 7, 127, 2, 2, 171, 50, 3, 2, 2, 2, 172, 173, 7, 42, 2, 2, 173, 52, 3, 2, 2, 2, 174, 175, 7, 43, 2, 2, 175, 54, 3, 2, 2, 2, 176, 177, 7, 48, 2, 2, 177, 56, 3, 2, 2, 2, 178, 179, 7, 128, 2, 2, 179, 58, 3, 2, 2, 2, 180, 181, 7, 63, 2, 2, 181, 182, 7, 63, 2, 2, 182, 60, 3, 2, 2, 2, 183, 184, 7, 35, 2, 2, 184, 185, 7, 63, 2, 2, 185, 62, 3, 2, 2, 2, 186, 187, 7, 62, 2, 2, 187, 64, 3, 2, 2, 2, 188, 189, 7, 62, 2, 2, 189, 190, 7, 63, 2, 2, 190, 66, 3, 2, 2, 2, 191, 192, 7, 64, 2, 2, 192, 68, 3, 2, 2, 2, 193, 194, 7, 64, 2, 2, 194, 195, 7, 63, 2, 2, 195, 70, 3, 2, 2, 2, 196, 197, 7, 112, 2, 2, 197, 198, 7, 113, 2, 2, 198, 199, 7, 118, 2, 2, 199, 72, 3, 2, 2, 2, 200, 201, 7, 99, 2, 2, 201, 202, 7, 112, 2, 2, 202, 203, 7, 102, 2, 2, 203, 74, 3, 2, 2, 2, 204, 205, 7, 113, 2, 2, 205, 206, 7, 116, 2, 2, 206, 76, 3, 2, 2, 2, 207, 208, 7, 118, 2, 2, 208, 209, 7, 116, 2, 2, 209, 210, 7, 119, 2, 2, 210, 211, 7, 103, 2, 2, 211, 78, 3, 2, 2, 2, 212, 213, 7, 104, 2, 2, 213, 214, 7, 99, 2, 2, 214, 215, 7, 110, 2, 2, 215, 216, 7, 117, 2, 2, 216, 217, 7, 103, 2, 2, 217, 80, 3, 2, 2, 2, 218, 220, 5, 87, 44, 2, 219, 218, 3, 2, 2, 2, 220, 221, 3, 2, 2, 2, 221, 219, 3, 2, 2, 2, 221, 222, 3, 2, 2, 2, 222, 82, 3, 2, 2, 2, 223, 229, 7, 36, 2, 2, 224, 228, 10, 2, 2, 2, 225, 226, 7, 94, 2, 2, 226, 228, 9, 3, 2, 2, 227, 224, 3, 2, 2, 2, 227, 225, 3, 2, 2, 2, 228, 231, 3, 2, 2, 2, 229, 227, 3, 2, 2, 2, 229, 230, 3, 2, 2, 2, 230, 232, 3, 2, 2, 2, 231, 229, 3, 2, 2, 2, 232, 233, 7, 36, 2, 2, 233, 84, 3, 2, 2, 2, 234, 238, 5, 91, 46, 2, 235, 237, 5, 93, 47, 2, 236, 235, 3, 2, 2, 2, 237, 240, 3, 2, 2, 2, 238, 236, 3, 2, 2, 2, 238, 239, 3, 2, 2, 2, 239, 86, 3, 2, 2, 2, 240, 238, 3, 2, 2, 2, 241, 242, 9, 4, 2, 2, 242, 88, 3, 2, 2, 2, 243, 244, 9, 5, 2, 2, 244, 90, 3, 2, 2, 2, 245, 246, 9, 6, 2, 2, 246, 92, 3, 2, 2, 2, 247, 251, 5, 91, 46, 2, 248, 251, 5, 87, 44, 2, 249, 251, 9, 7, 2, 2, 250, 247, 3, 2, 2, 2, 250, 248, 3, 2, 2, 2, 250, 249, 3, 2, 2, 2, 251, 94, 3, 2, 2, 2, 252, 254, 9, 8, 2, 2, 253, 252, 3, 2, 2, 2, 254, 255, 3, 2, 2, 2, 255, 253, 3, 2, 2, 2, 255, 256, 3, 2, 2, 2, 256, 257, 3, 2, 2, 2, 257, 258, 8, 48, 2, 2, 258, 96, 3, 2, 2, 2, 259, 260, 11, 2, 2, 2, 260, 98, 3, 2, 2, 2, 9, 2, 221, 227, 229, 238, 250, 255, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py index 73c24d67..d96a2241 100644 --- a/src/antlr/PyxellLexer.py +++ b/src/antlr/PyxellLexer.py @@ -8,102 +8,110 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2-") - buf.write("\u00f8\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2.") + buf.write("\u0105\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") buf.write("\4\31\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36") buf.write("\t\36\4\37\t\37\4 \t \4!\t!\4\"\t\"\4#\t#\4$\t$\4%\t%") buf.write("\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4,\t,\4-\t-\4.") - buf.write("\t.\4/\t/\4\60\t\60\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\4\3") - buf.write("\4\3\4\3\4\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t") - buf.write("\3\t\3\n\3\n\3\13\3\13\3\f\3\f\3\f\3\r\3\r\3\r\3\16\3") - buf.write("\16\3\17\3\17\3\20\3\20\3\21\3\21\3\22\3\22\3\22\3\23") - buf.write("\3\23\3\23\3\23\3\23\3\24\3\24\3\24\3\24\3\24\3\25\3\25") - buf.write("\3\25\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\26\3\27") - buf.write("\3\27\3\27\3\30\3\30\3\31\3\31\3\32\3\32\3\33\3\33\3\34") - buf.write("\3\34\3\35\3\35\3\36\3\36\3\36\3\37\3\37\3\37\3 \3 \3") - buf.write("!\3!\3!\3\"\3\"\3#\3#\3#\3$\3$\3$\3$\3%\3%\3%\3%\3&\3") - buf.write("&\3&\3\'\3\'\3\'\3\'\3\'\3(\3(\3(\3(\3(\3(\3)\6)\u00da") - buf.write("\n)\r)\16)\u00db\3*\3*\7*\u00e0\n*\f*\16*\u00e3\13*\3") - buf.write("+\3+\3,\3,\3-\3-\3.\3.\3.\5.\u00ee\n.\3/\6/\u00f1\n/\r") - buf.write("/\16/\u00f2\3/\3/\3\60\3\60\2\2\61\3\3\5\4\7\5\t\6\13") - buf.write("\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37") - buf.write("\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34") - buf.write("\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U\2W\2Y\2[\2]") - buf.write(",_-\3\2\7\3\2\62;\3\2c|\5\2C\\aac|\4\2))aa\5\2\13\f\17") - buf.write("\17\"\"\2\u00f8\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2") - buf.write("\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21") - buf.write("\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3") - buf.write("\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2") - buf.write("\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2") - buf.write("\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2") - buf.write("\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2") - buf.write("\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3") - buf.write("\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q") - buf.write("\3\2\2\2\2S\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\3a\3\2\2\2\5") - buf.write("c\3\2\2\2\7h\3\2\2\2\tn\3\2\2\2\13p\3\2\2\2\rr\3\2\2\2") - buf.write("\17t\3\2\2\2\21v\3\2\2\2\23x\3\2\2\2\25z\3\2\2\2\27|\3") - buf.write("\2\2\2\31\177\3\2\2\2\33\u0082\3\2\2\2\35\u0084\3\2\2") - buf.write("\2\37\u0086\3\2\2\2!\u0088\3\2\2\2#\u008a\3\2\2\2%\u008d") - buf.write("\3\2\2\2\'\u0092\3\2\2\2)\u0097\3\2\2\2+\u009d\3\2\2\2") - buf.write("-\u00a3\3\2\2\2/\u00a6\3\2\2\2\61\u00a8\3\2\2\2\63\u00aa") - buf.write("\3\2\2\2\65\u00ac\3\2\2\2\67\u00ae\3\2\2\29\u00b0\3\2") - buf.write("\2\2;\u00b2\3\2\2\2=\u00b5\3\2\2\2?\u00b8\3\2\2\2A\u00ba") - buf.write("\3\2\2\2C\u00bd\3\2\2\2E\u00bf\3\2\2\2G\u00c2\3\2\2\2") - buf.write("I\u00c6\3\2\2\2K\u00ca\3\2\2\2M\u00cd\3\2\2\2O\u00d2\3") - buf.write("\2\2\2Q\u00d9\3\2\2\2S\u00dd\3\2\2\2U\u00e4\3\2\2\2W\u00e6") - buf.write("\3\2\2\2Y\u00e8\3\2\2\2[\u00ed\3\2\2\2]\u00f0\3\2\2\2") - buf.write("_\u00f6\3\2\2\2ab\7=\2\2b\4\3\2\2\2cd\7u\2\2de\7m\2\2") - buf.write("ef\7k\2\2fg\7r\2\2g\6\3\2\2\2hi\7r\2\2ij\7t\2\2jk\7k\2") - buf.write("\2kl\7p\2\2lm\7v\2\2m\b\3\2\2\2no\7?\2\2o\n\3\2\2\2pq") - buf.write("\7`\2\2q\f\3\2\2\2rs\7,\2\2s\16\3\2\2\2tu\7\61\2\2u\20") - buf.write("\3\2\2\2vw\7\'\2\2w\22\3\2\2\2xy\7-\2\2y\24\3\2\2\2z{") - buf.write("\7/\2\2{\26\3\2\2\2|}\7>\2\2}~\7>\2\2~\30\3\2\2\2\177") - buf.write("\u0080\7@\2\2\u0080\u0081\7@\2\2\u0081\32\3\2\2\2\u0082") - buf.write("\u0083\7(\2\2\u0083\34\3\2\2\2\u0084\u0085\7&\2\2\u0085") - buf.write("\36\3\2\2\2\u0086\u0087\7~\2\2\u0087 \3\2\2\2\u0088\u0089") - buf.write("\7.\2\2\u0089\"\3\2\2\2\u008a\u008b\7k\2\2\u008b\u008c") - buf.write("\7h\2\2\u008c$\3\2\2\2\u008d\u008e\7g\2\2\u008e\u008f") - buf.write("\7n\2\2\u008f\u0090\7k\2\2\u0090\u0091\7h\2\2\u0091&\3") - buf.write("\2\2\2\u0092\u0093\7g\2\2\u0093\u0094\7n\2\2\u0094\u0095") - buf.write("\7u\2\2\u0095\u0096\7g\2\2\u0096(\3\2\2\2\u0097\u0098") - buf.write("\7y\2\2\u0098\u0099\7j\2\2\u0099\u009a\7k\2\2\u009a\u009b") - buf.write("\7n\2\2\u009b\u009c\7g\2\2\u009c*\3\2\2\2\u009d\u009e") - buf.write("\7w\2\2\u009e\u009f\7p\2\2\u009f\u00a0\7v\2\2\u00a0\u00a1") - buf.write("\7k\2\2\u00a1\u00a2\7n\2\2\u00a2,\3\2\2\2\u00a3\u00a4") - buf.write("\7f\2\2\u00a4\u00a5\7q\2\2\u00a5.\3\2\2\2\u00a6\u00a7") - buf.write("\7}\2\2\u00a7\60\3\2\2\2\u00a8\u00a9\7\177\2\2\u00a9\62") - buf.write("\3\2\2\2\u00aa\u00ab\7*\2\2\u00ab\64\3\2\2\2\u00ac\u00ad") - buf.write("\7+\2\2\u00ad\66\3\2\2\2\u00ae\u00af\7\60\2\2\u00af8\3") - buf.write("\2\2\2\u00b0\u00b1\7\u0080\2\2\u00b1:\3\2\2\2\u00b2\u00b3") - buf.write("\7?\2\2\u00b3\u00b4\7?\2\2\u00b4<\3\2\2\2\u00b5\u00b6") - buf.write("\7#\2\2\u00b6\u00b7\7?\2\2\u00b7>\3\2\2\2\u00b8\u00b9") - buf.write("\7>\2\2\u00b9@\3\2\2\2\u00ba\u00bb\7>\2\2\u00bb\u00bc") - buf.write("\7?\2\2\u00bcB\3\2\2\2\u00bd\u00be\7@\2\2\u00beD\3\2\2") - buf.write("\2\u00bf\u00c0\7@\2\2\u00c0\u00c1\7?\2\2\u00c1F\3\2\2") - buf.write("\2\u00c2\u00c3\7p\2\2\u00c3\u00c4\7q\2\2\u00c4\u00c5\7") - buf.write("v\2\2\u00c5H\3\2\2\2\u00c6\u00c7\7c\2\2\u00c7\u00c8\7") - buf.write("p\2\2\u00c8\u00c9\7f\2\2\u00c9J\3\2\2\2\u00ca\u00cb\7") - buf.write("q\2\2\u00cb\u00cc\7t\2\2\u00ccL\3\2\2\2\u00cd\u00ce\7") - buf.write("v\2\2\u00ce\u00cf\7t\2\2\u00cf\u00d0\7w\2\2\u00d0\u00d1") - buf.write("\7g\2\2\u00d1N\3\2\2\2\u00d2\u00d3\7h\2\2\u00d3\u00d4") - buf.write("\7c\2\2\u00d4\u00d5\7n\2\2\u00d5\u00d6\7u\2\2\u00d6\u00d7") - buf.write("\7g\2\2\u00d7P\3\2\2\2\u00d8\u00da\5U+\2\u00d9\u00d8\3") - buf.write("\2\2\2\u00da\u00db\3\2\2\2\u00db\u00d9\3\2\2\2\u00db\u00dc") - buf.write("\3\2\2\2\u00dcR\3\2\2\2\u00dd\u00e1\5Y-\2\u00de\u00e0") - buf.write("\5[.\2\u00df\u00de\3\2\2\2\u00e0\u00e3\3\2\2\2\u00e1\u00df") - buf.write("\3\2\2\2\u00e1\u00e2\3\2\2\2\u00e2T\3\2\2\2\u00e3\u00e1") - buf.write("\3\2\2\2\u00e4\u00e5\t\2\2\2\u00e5V\3\2\2\2\u00e6\u00e7") - buf.write("\t\3\2\2\u00e7X\3\2\2\2\u00e8\u00e9\t\4\2\2\u00e9Z\3\2") - buf.write("\2\2\u00ea\u00ee\5Y-\2\u00eb\u00ee\5U+\2\u00ec\u00ee\t") - buf.write("\5\2\2\u00ed\u00ea\3\2\2\2\u00ed\u00eb\3\2\2\2\u00ed\u00ec") - buf.write("\3\2\2\2\u00ee\\\3\2\2\2\u00ef\u00f1\t\6\2\2\u00f0\u00ef") - buf.write("\3\2\2\2\u00f1\u00f2\3\2\2\2\u00f2\u00f0\3\2\2\2\u00f2") - buf.write("\u00f3\3\2\2\2\u00f3\u00f4\3\2\2\2\u00f4\u00f5\b/\2\2") - buf.write("\u00f5^\3\2\2\2\u00f6\u00f7\13\2\2\2\u00f7`\3\2\2\2\7") - buf.write("\2\u00db\u00e1\u00ed\u00f2\3\b\2\2") + buf.write("\t.\4/\t/\4\60\t\60\4\61\t\61\3\2\3\2\3\3\3\3\3\3\3\3") + buf.write("\3\3\3\4\3\4\3\4\3\4\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3") + buf.write("\b\3\b\3\t\3\t\3\n\3\n\3\13\3\13\3\f\3\f\3\f\3\r\3\r\3") + buf.write("\r\3\16\3\16\3\17\3\17\3\20\3\20\3\21\3\21\3\22\3\22\3") + buf.write("\22\3\23\3\23\3\23\3\23\3\23\3\24\3\24\3\24\3\24\3\24") + buf.write("\3\25\3\25\3\25\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26") + buf.write("\3\26\3\27\3\27\3\27\3\30\3\30\3\31\3\31\3\32\3\32\3\33") + buf.write("\3\33\3\34\3\34\3\35\3\35\3\36\3\36\3\36\3\37\3\37\3\37") + buf.write("\3 \3 \3!\3!\3!\3\"\3\"\3#\3#\3#\3$\3$\3$\3$\3%\3%\3%") + buf.write("\3%\3&\3&\3&\3\'\3\'\3\'\3\'\3\'\3(\3(\3(\3(\3(\3(\3)") + buf.write("\6)\u00dc\n)\r)\16)\u00dd\3*\3*\3*\3*\7*\u00e4\n*\f*\16") + buf.write("*\u00e7\13*\3*\3*\3+\3+\7+\u00ed\n+\f+\16+\u00f0\13+\3") + buf.write(",\3,\3-\3-\3.\3.\3/\3/\3/\5/\u00fb\n/\3\60\6\60\u00fe") + buf.write("\n\60\r\60\16\60\u00ff\3\60\3\60\3\61\3\61\2\2\62\3\3") + buf.write("\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16") + buf.write("\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61") + buf.write("\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*") + buf.write("S+U,W\2Y\2[\2]\2_-a.\3\2\t\4\2$$^^\6\2$$^^ppvv\3\2\62") + buf.write(";\3\2c|\5\2C\\aac|\4\2))aa\5\2\13\f\17\17\"\"\2\u0107") + buf.write("\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13") + buf.write("\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3") + buf.write("\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2") + buf.write("\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2") + buf.write("%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2") + buf.write("\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67") + buf.write("\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2") + buf.write("A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2") + buf.write("\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2") + buf.write("\2\2U\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\3c\3\2\2\2\5e\3\2") + buf.write("\2\2\7j\3\2\2\2\tp\3\2\2\2\13r\3\2\2\2\rt\3\2\2\2\17v") + buf.write("\3\2\2\2\21x\3\2\2\2\23z\3\2\2\2\25|\3\2\2\2\27~\3\2\2") + buf.write("\2\31\u0081\3\2\2\2\33\u0084\3\2\2\2\35\u0086\3\2\2\2") + buf.write("\37\u0088\3\2\2\2!\u008a\3\2\2\2#\u008c\3\2\2\2%\u008f") + buf.write("\3\2\2\2\'\u0094\3\2\2\2)\u0099\3\2\2\2+\u009f\3\2\2\2") + buf.write("-\u00a5\3\2\2\2/\u00a8\3\2\2\2\61\u00aa\3\2\2\2\63\u00ac") + buf.write("\3\2\2\2\65\u00ae\3\2\2\2\67\u00b0\3\2\2\29\u00b2\3\2") + buf.write("\2\2;\u00b4\3\2\2\2=\u00b7\3\2\2\2?\u00ba\3\2\2\2A\u00bc") + buf.write("\3\2\2\2C\u00bf\3\2\2\2E\u00c1\3\2\2\2G\u00c4\3\2\2\2") + buf.write("I\u00c8\3\2\2\2K\u00cc\3\2\2\2M\u00cf\3\2\2\2O\u00d4\3") + buf.write("\2\2\2Q\u00db\3\2\2\2S\u00df\3\2\2\2U\u00ea\3\2\2\2W\u00f1") + buf.write("\3\2\2\2Y\u00f3\3\2\2\2[\u00f5\3\2\2\2]\u00fa\3\2\2\2") + buf.write("_\u00fd\3\2\2\2a\u0103\3\2\2\2cd\7=\2\2d\4\3\2\2\2ef\7") + buf.write("u\2\2fg\7m\2\2gh\7k\2\2hi\7r\2\2i\6\3\2\2\2jk\7r\2\2k") + buf.write("l\7t\2\2lm\7k\2\2mn\7p\2\2no\7v\2\2o\b\3\2\2\2pq\7?\2") + buf.write("\2q\n\3\2\2\2rs\7`\2\2s\f\3\2\2\2tu\7,\2\2u\16\3\2\2\2") + buf.write("vw\7\61\2\2w\20\3\2\2\2xy\7\'\2\2y\22\3\2\2\2z{\7-\2\2") + buf.write("{\24\3\2\2\2|}\7/\2\2}\26\3\2\2\2~\177\7>\2\2\177\u0080") + buf.write("\7>\2\2\u0080\30\3\2\2\2\u0081\u0082\7@\2\2\u0082\u0083") + buf.write("\7@\2\2\u0083\32\3\2\2\2\u0084\u0085\7(\2\2\u0085\34\3") + buf.write("\2\2\2\u0086\u0087\7&\2\2\u0087\36\3\2\2\2\u0088\u0089") + buf.write("\7~\2\2\u0089 \3\2\2\2\u008a\u008b\7.\2\2\u008b\"\3\2") + buf.write("\2\2\u008c\u008d\7k\2\2\u008d\u008e\7h\2\2\u008e$\3\2") + buf.write("\2\2\u008f\u0090\7g\2\2\u0090\u0091\7n\2\2\u0091\u0092") + buf.write("\7k\2\2\u0092\u0093\7h\2\2\u0093&\3\2\2\2\u0094\u0095") + buf.write("\7g\2\2\u0095\u0096\7n\2\2\u0096\u0097\7u\2\2\u0097\u0098") + buf.write("\7g\2\2\u0098(\3\2\2\2\u0099\u009a\7y\2\2\u009a\u009b") + buf.write("\7j\2\2\u009b\u009c\7k\2\2\u009c\u009d\7n\2\2\u009d\u009e") + buf.write("\7g\2\2\u009e*\3\2\2\2\u009f\u00a0\7w\2\2\u00a0\u00a1") + buf.write("\7p\2\2\u00a1\u00a2\7v\2\2\u00a2\u00a3\7k\2\2\u00a3\u00a4") + buf.write("\7n\2\2\u00a4,\3\2\2\2\u00a5\u00a6\7f\2\2\u00a6\u00a7") + buf.write("\7q\2\2\u00a7.\3\2\2\2\u00a8\u00a9\7}\2\2\u00a9\60\3\2") + buf.write("\2\2\u00aa\u00ab\7\177\2\2\u00ab\62\3\2\2\2\u00ac\u00ad") + buf.write("\7*\2\2\u00ad\64\3\2\2\2\u00ae\u00af\7+\2\2\u00af\66\3") + buf.write("\2\2\2\u00b0\u00b1\7\60\2\2\u00b18\3\2\2\2\u00b2\u00b3") + buf.write("\7\u0080\2\2\u00b3:\3\2\2\2\u00b4\u00b5\7?\2\2\u00b5\u00b6") + buf.write("\7?\2\2\u00b6<\3\2\2\2\u00b7\u00b8\7#\2\2\u00b8\u00b9") + buf.write("\7?\2\2\u00b9>\3\2\2\2\u00ba\u00bb\7>\2\2\u00bb@\3\2\2") + buf.write("\2\u00bc\u00bd\7>\2\2\u00bd\u00be\7?\2\2\u00beB\3\2\2") + buf.write("\2\u00bf\u00c0\7@\2\2\u00c0D\3\2\2\2\u00c1\u00c2\7@\2") + buf.write("\2\u00c2\u00c3\7?\2\2\u00c3F\3\2\2\2\u00c4\u00c5\7p\2") + buf.write("\2\u00c5\u00c6\7q\2\2\u00c6\u00c7\7v\2\2\u00c7H\3\2\2") + buf.write("\2\u00c8\u00c9\7c\2\2\u00c9\u00ca\7p\2\2\u00ca\u00cb\7") + buf.write("f\2\2\u00cbJ\3\2\2\2\u00cc\u00cd\7q\2\2\u00cd\u00ce\7") + buf.write("t\2\2\u00ceL\3\2\2\2\u00cf\u00d0\7v\2\2\u00d0\u00d1\7") + buf.write("t\2\2\u00d1\u00d2\7w\2\2\u00d2\u00d3\7g\2\2\u00d3N\3\2") + buf.write("\2\2\u00d4\u00d5\7h\2\2\u00d5\u00d6\7c\2\2\u00d6\u00d7") + buf.write("\7n\2\2\u00d7\u00d8\7u\2\2\u00d8\u00d9\7g\2\2\u00d9P\3") + buf.write("\2\2\2\u00da\u00dc\5W,\2\u00db\u00da\3\2\2\2\u00dc\u00dd") + buf.write("\3\2\2\2\u00dd\u00db\3\2\2\2\u00dd\u00de\3\2\2\2\u00de") + buf.write("R\3\2\2\2\u00df\u00e5\7$\2\2\u00e0\u00e4\n\2\2\2\u00e1") + buf.write("\u00e2\7^\2\2\u00e2\u00e4\t\3\2\2\u00e3\u00e0\3\2\2\2") + buf.write("\u00e3\u00e1\3\2\2\2\u00e4\u00e7\3\2\2\2\u00e5\u00e3\3") + buf.write("\2\2\2\u00e5\u00e6\3\2\2\2\u00e6\u00e8\3\2\2\2\u00e7\u00e5") + buf.write("\3\2\2\2\u00e8\u00e9\7$\2\2\u00e9T\3\2\2\2\u00ea\u00ee") + buf.write("\5[.\2\u00eb\u00ed\5]/\2\u00ec\u00eb\3\2\2\2\u00ed\u00f0") + buf.write("\3\2\2\2\u00ee\u00ec\3\2\2\2\u00ee\u00ef\3\2\2\2\u00ef") + buf.write("V\3\2\2\2\u00f0\u00ee\3\2\2\2\u00f1\u00f2\t\4\2\2\u00f2") + buf.write("X\3\2\2\2\u00f3\u00f4\t\5\2\2\u00f4Z\3\2\2\2\u00f5\u00f6") + buf.write("\t\6\2\2\u00f6\\\3\2\2\2\u00f7\u00fb\5[.\2\u00f8\u00fb") + buf.write("\5W,\2\u00f9\u00fb\t\7\2\2\u00fa\u00f7\3\2\2\2\u00fa\u00f8") + buf.write("\3\2\2\2\u00fa\u00f9\3\2\2\2\u00fb^\3\2\2\2\u00fc\u00fe") + buf.write("\t\b\2\2\u00fd\u00fc\3\2\2\2\u00fe\u00ff\3\2\2\2\u00ff") + buf.write("\u00fd\3\2\2\2\u00ff\u0100\3\2\2\2\u0100\u0101\3\2\2\2") + buf.write("\u0101\u0102\b\60\2\2\u0102`\3\2\2\2\u0103\u0104\13\2") + buf.write("\2\2\u0104b\3\2\2\2\t\2\u00dd\u00e3\u00e5\u00ee\u00fa") + buf.write("\u00ff\3\b\2\2") return buf.getvalue() @@ -153,9 +161,10 @@ class PyxellLexer(Lexer): T__37 = 38 T__38 = 39 INT = 40 - ID = 41 - WS = 42 - ERR = 43 + STRING = 41 + ID = 42 + WS = 43 + ERR = 44 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -169,7 +178,7 @@ class PyxellLexer(Lexer): "'>='", "'not'", "'and'", "'or'", "'true'", "'false'" ] symbolicNames = [ "", - "INT", "ID", "WS", "ERR" ] + "INT", "STRING", "ID", "WS", "ERR" ] ruleNames = [ "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8", "T__9", "T__10", "T__11", "T__12", "T__13", @@ -177,8 +186,8 @@ class PyxellLexer(Lexer): "T__20", "T__21", "T__22", "T__23", "T__24", "T__25", "T__26", "T__27", "T__28", "T__29", "T__30", "T__31", "T__32", "T__33", "T__34", "T__35", "T__36", "T__37", - "T__38", "INT", "ID", "DIGIT", "LETTER", "ID_START", "ID_CONT", - "WS", "ERR" ] + "T__38", "INT", "STRING", "ID", "DIGIT", "LETTER", "ID_START", + "ID_CONT", "WS", "ERR" ] grammarFileName = "Pyxell.g4" diff --git a/src/antlr/PyxellLexer.tokens b/src/antlr/PyxellLexer.tokens index 0c88cbb2..6228dbc7 100644 --- a/src/antlr/PyxellLexer.tokens +++ b/src/antlr/PyxellLexer.tokens @@ -38,9 +38,10 @@ T__36=37 T__37=38 T__38=39 INT=40 -ID=41 -WS=42 -ERR=43 +STRING=41 +ID=42 +WS=43 +ERR=44 ';'=1 'skip'=2 'print'=3 diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index e9c5eeec..037b69e8 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -8,8 +8,8 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3-") - buf.write("\u009a\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3.") + buf.write("\u009b\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") buf.write("\4\b\t\b\4\t\t\t\3\2\7\2\24\n\2\f\2\16\2\27\13\2\3\2\3") buf.write("\2\3\3\3\3\3\3\3\3\5\3\37\n\3\3\4\3\4\3\4\5\4$\n\4\3\4") buf.write("\3\4\3\4\7\4)\n\4\f\4\16\4,\13\4\3\4\3\4\3\4\3\4\3\4\5") @@ -21,52 +21,53 @@ def serializedATN(): buf.write("\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3") buf.write("\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b") buf.write("\3\b\3\b\3\b\7\b\u0090\n\b\f\b\16\b\u0093\13\b\3\t\3\t") - buf.write("\3\t\5\t\u0098\n\t\3\t\2\3\16\n\2\4\6\b\n\f\16\20\2\t") - buf.write("\3\2\7\21\4\2\13\f\36\36\3\2\b\n\3\2\13\f\3\2\r\16\3\2") - buf.write("\37$\3\2()\2\u00af\2\25\3\2\2\2\4\36\3\2\2\2\6\62\3\2") - buf.write("\2\2\b\64\3\2\2\2\nT\3\2\2\2\fV\3\2\2\2\16i\3\2\2\2\20") - buf.write("\u0097\3\2\2\2\22\24\5\4\3\2\23\22\3\2\2\2\24\27\3\2\2") - buf.write("\2\25\23\3\2\2\2\25\26\3\2\2\2\26\30\3\2\2\2\27\25\3\2") - buf.write("\2\2\30\31\7\2\2\3\31\3\3\2\2\2\32\33\5\6\4\2\33\34\7") - buf.write("\3\2\2\34\37\3\2\2\2\35\37\5\n\6\2\36\32\3\2\2\2\36\35") - buf.write("\3\2\2\2\37\5\3\2\2\2 \63\7\4\2\2!#\7\5\2\2\"$\5\16\b") - buf.write("\2#\"\3\2\2\2#$\3\2\2\2$\63\3\2\2\2%&\5\b\5\2&\'\7\6\2") - buf.write("\2\')\3\2\2\2(%\3\2\2\2),\3\2\2\2*(\3\2\2\2*+\3\2\2\2") - buf.write("+-\3\2\2\2,*\3\2\2\2-\63\5\16\b\2./\7+\2\2/\60\t\2\2\2") - buf.write("\60\61\7\6\2\2\61\63\5\16\b\2\62 \3\2\2\2\62!\3\2\2\2") - buf.write("\62*\3\2\2\2\62.\3\2\2\2\63\7\3\2\2\2\649\7+\2\2\65\66") - buf.write("\7\22\2\2\668\7+\2\2\67\65\3\2\2\28;\3\2\2\29\67\3\2\2") - buf.write("\29:\3\2\2\2:\t\3\2\2\2;9\3\2\2\2<=\7\23\2\2=>\5\16\b") - buf.write("\2>E\5\f\7\2?@\7\24\2\2@A\5\16\b\2AB\5\f\7\2BD\3\2\2\2") - buf.write("C?\3\2\2\2DG\3\2\2\2EC\3\2\2\2EF\3\2\2\2FJ\3\2\2\2GE\3") - buf.write("\2\2\2HI\7\25\2\2IK\5\f\7\2JH\3\2\2\2JK\3\2\2\2KU\3\2") - buf.write("\2\2LM\7\26\2\2MN\5\16\b\2NO\5\f\7\2OU\3\2\2\2PQ\7\27") - buf.write("\2\2QR\5\16\b\2RS\5\f\7\2SU\3\2\2\2T<\3\2\2\2TL\3\2\2") - buf.write("\2TP\3\2\2\2U\13\3\2\2\2VW\7\30\2\2WY\7\31\2\2XZ\5\4\3") - buf.write("\2YX\3\2\2\2Z[\3\2\2\2[Y\3\2\2\2[\\\3\2\2\2\\]\3\2\2\2") - buf.write("]^\7\32\2\2^\r\3\2\2\2_`\b\b\1\2`j\5\20\t\2ab\7\33\2\2") - buf.write("bc\5\16\b\2cd\7\34\2\2dj\3\2\2\2ef\t\3\2\2fj\5\16\b\16") - buf.write("gh\7%\2\2hj\5\16\b\6i_\3\2\2\2ia\3\2\2\2ie\3\2\2\2ig\3") - buf.write("\2\2\2j\u0091\3\2\2\2kl\f\17\2\2lm\7\7\2\2m\u0090\5\16") - buf.write("\b\17no\f\r\2\2op\t\4\2\2p\u0090\5\16\b\16qr\f\f\2\2r") - buf.write("s\t\5\2\2s\u0090\5\16\b\rtu\f\13\2\2uv\t\6\2\2v\u0090") - buf.write("\5\16\b\fwx\f\n\2\2xy\7\17\2\2y\u0090\5\16\b\13z{\f\t") - buf.write("\2\2{|\7\20\2\2|\u0090\5\16\b\n}~\f\b\2\2~\177\7\21\2") - buf.write("\2\177\u0090\5\16\b\t\u0080\u0081\f\7\2\2\u0081\u0082") - buf.write("\t\7\2\2\u0082\u0090\5\16\b\7\u0083\u0084\f\5\2\2\u0084") - buf.write("\u0085\7&\2\2\u0085\u0090\5\16\b\5\u0086\u0087\f\4\2\2") - buf.write("\u0087\u0088\7\'\2\2\u0088\u0090\5\16\b\4\u0089\u008a") - buf.write("\f\3\2\2\u008a\u008b\7\22\2\2\u008b\u0090\5\16\b\3\u008c") - buf.write("\u008d\f\20\2\2\u008d\u008e\7\35\2\2\u008e\u0090\7+\2") - buf.write("\2\u008fk\3\2\2\2\u008fn\3\2\2\2\u008fq\3\2\2\2\u008f") + buf.write("\3\t\3\t\5\t\u0099\n\t\3\t\2\3\16\n\2\4\6\b\n\f\16\20") + buf.write("\2\t\3\2\7\21\4\2\13\f\36\36\3\2\b\n\3\2\13\f\3\2\r\16") + buf.write("\3\2\37$\3\2()\2\u00b1\2\25\3\2\2\2\4\36\3\2\2\2\6\62") + buf.write("\3\2\2\2\b\64\3\2\2\2\nT\3\2\2\2\fV\3\2\2\2\16i\3\2\2") + buf.write("\2\20\u0098\3\2\2\2\22\24\5\4\3\2\23\22\3\2\2\2\24\27") + buf.write("\3\2\2\2\25\23\3\2\2\2\25\26\3\2\2\2\26\30\3\2\2\2\27") + buf.write("\25\3\2\2\2\30\31\7\2\2\3\31\3\3\2\2\2\32\33\5\6\4\2\33") + buf.write("\34\7\3\2\2\34\37\3\2\2\2\35\37\5\n\6\2\36\32\3\2\2\2") + buf.write("\36\35\3\2\2\2\37\5\3\2\2\2 \63\7\4\2\2!#\7\5\2\2\"$\5") + buf.write("\16\b\2#\"\3\2\2\2#$\3\2\2\2$\63\3\2\2\2%&\5\b\5\2&\'") + buf.write("\7\6\2\2\')\3\2\2\2(%\3\2\2\2),\3\2\2\2*(\3\2\2\2*+\3") + buf.write("\2\2\2+-\3\2\2\2,*\3\2\2\2-\63\5\16\b\2./\7,\2\2/\60\t") + buf.write("\2\2\2\60\61\7\6\2\2\61\63\5\16\b\2\62 \3\2\2\2\62!\3") + buf.write("\2\2\2\62*\3\2\2\2\62.\3\2\2\2\63\7\3\2\2\2\649\7,\2\2") + buf.write("\65\66\7\22\2\2\668\7,\2\2\67\65\3\2\2\28;\3\2\2\29\67") + buf.write("\3\2\2\29:\3\2\2\2:\t\3\2\2\2;9\3\2\2\2<=\7\23\2\2=>\5") + buf.write("\16\b\2>E\5\f\7\2?@\7\24\2\2@A\5\16\b\2AB\5\f\7\2BD\3") + buf.write("\2\2\2C?\3\2\2\2DG\3\2\2\2EC\3\2\2\2EF\3\2\2\2FJ\3\2\2") + buf.write("\2GE\3\2\2\2HI\7\25\2\2IK\5\f\7\2JH\3\2\2\2JK\3\2\2\2") + buf.write("KU\3\2\2\2LM\7\26\2\2MN\5\16\b\2NO\5\f\7\2OU\3\2\2\2P") + buf.write("Q\7\27\2\2QR\5\16\b\2RS\5\f\7\2SU\3\2\2\2T<\3\2\2\2TL") + buf.write("\3\2\2\2TP\3\2\2\2U\13\3\2\2\2VW\7\30\2\2WY\7\31\2\2X") + buf.write("Z\5\4\3\2YX\3\2\2\2Z[\3\2\2\2[Y\3\2\2\2[\\\3\2\2\2\\]") + buf.write("\3\2\2\2]^\7\32\2\2^\r\3\2\2\2_`\b\b\1\2`j\5\20\t\2ab") + buf.write("\7\33\2\2bc\5\16\b\2cd\7\34\2\2dj\3\2\2\2ef\t\3\2\2fj") + buf.write("\5\16\b\16gh\7%\2\2hj\5\16\b\6i_\3\2\2\2ia\3\2\2\2ie\3") + buf.write("\2\2\2ig\3\2\2\2j\u0091\3\2\2\2kl\f\17\2\2lm\7\7\2\2m") + buf.write("\u0090\5\16\b\17no\f\r\2\2op\t\4\2\2p\u0090\5\16\b\16") + buf.write("qr\f\f\2\2rs\t\5\2\2s\u0090\5\16\b\rtu\f\13\2\2uv\t\6") + buf.write("\2\2v\u0090\5\16\b\fwx\f\n\2\2xy\7\17\2\2y\u0090\5\16") + buf.write("\b\13z{\f\t\2\2{|\7\20\2\2|\u0090\5\16\b\n}~\f\b\2\2~") + buf.write("\177\7\21\2\2\177\u0090\5\16\b\t\u0080\u0081\f\7\2\2\u0081") + buf.write("\u0082\t\7\2\2\u0082\u0090\5\16\b\7\u0083\u0084\f\5\2") + buf.write("\2\u0084\u0085\7&\2\2\u0085\u0090\5\16\b\5\u0086\u0087") + buf.write("\f\4\2\2\u0087\u0088\7\'\2\2\u0088\u0090\5\16\b\4\u0089") + buf.write("\u008a\f\3\2\2\u008a\u008b\7\22\2\2\u008b\u0090\5\16\b") + buf.write("\3\u008c\u008d\f\20\2\2\u008d\u008e\7\35\2\2\u008e\u0090") + buf.write("\7,\2\2\u008fk\3\2\2\2\u008fn\3\2\2\2\u008fq\3\2\2\2\u008f") buf.write("t\3\2\2\2\u008fw\3\2\2\2\u008fz\3\2\2\2\u008f}\3\2\2\2") buf.write("\u008f\u0080\3\2\2\2\u008f\u0083\3\2\2\2\u008f\u0086\3") buf.write("\2\2\2\u008f\u0089\3\2\2\2\u008f\u008c\3\2\2\2\u0090\u0093") buf.write("\3\2\2\2\u0091\u008f\3\2\2\2\u0091\u0092\3\2\2\2\u0092") - buf.write("\17\3\2\2\2\u0093\u0091\3\2\2\2\u0094\u0098\7*\2\2\u0095") - buf.write("\u0098\t\b\2\2\u0096\u0098\7+\2\2\u0097\u0094\3\2\2\2") - buf.write("\u0097\u0095\3\2\2\2\u0097\u0096\3\2\2\2\u0098\21\3\2") - buf.write("\2\2\20\25\36#*\629EJT[i\u008f\u0091\u0097") + buf.write("\17\3\2\2\2\u0093\u0091\3\2\2\2\u0094\u0099\7*\2\2\u0095") + buf.write("\u0099\t\b\2\2\u0096\u0099\7+\2\2\u0097\u0099\7,\2\2\u0098") + buf.write("\u0094\3\2\2\2\u0098\u0095\3\2\2\2\u0098\u0096\3\2\2\2") + buf.write("\u0098\u0097\3\2\2\2\u0099\21\3\2\2\2\20\25\36#*\629E") + buf.write("JT[i\u008f\u0091\u0098") return buf.getvalue() @@ -98,7 +99,7 @@ class PyxellParser ( Parser ): "", "", "", "", "", "", "", "", "", "", "", "", - "INT", "ID", "WS", "ERR" ] + "INT", "STRING", "ID", "WS", "ERR" ] RULE_program = 0 RULE_stmt = 1 @@ -153,9 +154,10 @@ class PyxellParser ( Parser ): T__37=38 T__38=39 INT=40 - ID=41 - WS=42 - ERR=43 + STRING=41 + ID=42 + WS=43 + ERR=44 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -204,7 +206,7 @@ def program(self): self.state = 19 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__37) | (1 << PyxellParser.T__38) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0): + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__37) | (1 << PyxellParser.T__38) | (1 << PyxellParser.INT) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): self.state = 16 self.stmt() self.state = 21 @@ -256,7 +258,7 @@ def stmt(self): self.state = 28 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__24, PyxellParser.T__27, PyxellParser.T__34, PyxellParser.T__37, PyxellParser.T__38, PyxellParser.INT, PyxellParser.ID]: + if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__24, PyxellParser.T__27, PyxellParser.T__34, PyxellParser.T__37, PyxellParser.T__38, PyxellParser.INT, PyxellParser.STRING, PyxellParser.ID]: self.enterOuterAlt(localctx, 1) self.state = 24 self.simple_stmt() @@ -395,7 +397,7 @@ def simple_stmt(self): self.state = 33 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__37) | (1 << PyxellParser.T__38) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0): + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__37) | (1 << PyxellParser.T__38) | (1 << PyxellParser.INT) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): self.state = 32 self.expr(0) @@ -708,7 +710,7 @@ def block(self): self.state = 89 self._errHandler.sync(self) _la = self._input.LA(1) - if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__37) | (1 << PyxellParser.T__38) | (1 << PyxellParser.INT) | (1 << PyxellParser.ID))) != 0)): + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__37) | (1 << PyxellParser.T__38) | (1 << PyxellParser.INT) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0)): break self.state = 91 @@ -905,7 +907,7 @@ def expr(self, _p:int=0): self.state = 103 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__37, PyxellParser.T__38, PyxellParser.INT, PyxellParser.ID]: + if token in [PyxellParser.T__37, PyxellParser.T__38, PyxellParser.INT, PyxellParser.STRING, PyxellParser.ID]: localctx = PyxellParser.ExprAtomContext(self, localctx) self._ctx = localctx _prevctx = localctx @@ -1219,6 +1221,22 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) + class AtomStringContext(AtomContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.AtomContext + super().__init__(parser) + self.copyFrom(ctx) + + def STRING(self): + return self.getToken(PyxellParser.STRING, 0) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAtomString" ): + return visitor.visitAtomString(self) + else: + return visitor.visitChildren(self) + + def atom(self): @@ -1226,7 +1244,7 @@ def atom(self): self.enterRule(localctx, 14, self.RULE_atom) self._la = 0 # Token type try: - self.state = 149 + self.state = 150 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: @@ -1246,10 +1264,16 @@ def atom(self): self._errHandler.reportMatch(self) self.consume() pass - elif token in [PyxellParser.ID]: - localctx = PyxellParser.AtomIdContext(self, localctx) + elif token in [PyxellParser.STRING]: + localctx = PyxellParser.AtomStringContext(self, localctx) self.enterOuterAlt(localctx, 3) self.state = 148 + self.match(PyxellParser.STRING) + pass + elif token in [PyxellParser.ID]: + localctx = PyxellParser.AtomIdContext(self, localctx) + self.enterOuterAlt(localctx, 4) + self.state = 149 self.match(PyxellParser.ID) pass else: diff --git a/src/antlr/PyxellVisitor.py b/src/antlr/PyxellVisitor.py index 0a8ea533..469733a4 100644 --- a/src/antlr/PyxellVisitor.py +++ b/src/antlr/PyxellVisitor.py @@ -114,6 +114,11 @@ def visitAtomBool(self, ctx:PyxellParser.AtomBoolContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#AtomString. + def visitAtomString(self, ctx:PyxellParser.AtomStringContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#AtomId. def visitAtomId(self, ctx:PyxellParser.AtomIdContext): return self.visitChildren(ctx) diff --git a/src/compiler.py b/src/compiler.py index 95d653b3..5a227657 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -1,4 +1,5 @@ +import ast from contextlib import contextmanager from .antlr.PyxellParser import PyxellParser @@ -15,6 +16,7 @@ def __init__(self): self.module = ll.Module() self.builtins = { 'malloc': ll.Function(self.module, tFunc([tInt], tPtr()), 'malloc'), + 'write': ll.Function(self.module, tFunc([tString]), 'func.write'), 'writeInt': ll.Function(self.module, tFunc([tInt]), 'func.writeInt'), 'writeBool': ll.Function(self.module, tFunc([tBool]), 'func.writeBool'), 'putchar': ll.Function(self.module, tFunc([tChar]), 'putchar'), @@ -125,6 +127,8 @@ def print(self, ctx, value): self.builder.call(self.builtins['writeInt'], [value]) elif value.type == tBool: self.builder.call(self.builtins['writeBool'], [value]) + elif value.type.isString(): + self.builder.call(self.builtins['write'], [value]) elif value.type.isTuple(): for i in range(len(value.type.elements)): if i > 0: @@ -134,6 +138,12 @@ def print(self, ctx, value): else: self.throw(ctx, err.NotPrintable(value.type)) + def malloc(self, type): + size = self.builder.gep(vNull(type), [vIndex(1)]) + size = self.builder.ptrtoint(size, tInt) + ptr = self.builder.call(self.builtins['malloc'], [size]) + return self.builder.bitcast(ptr, tPtr(type)) + ### Program ### @@ -269,7 +279,13 @@ def visitExprAttr(self, ctx): value = self.visit(ctx.expr()) id = str(ctx.ID()) - if value.type.isTuple(): + if value.type.isString(): + if id != "length": + self.throw(ctx, err.NoAttribute(value.type, id)) + + return self.builder.extract_value(value, [1]) + + elif value.type.isTuple(): if len(id) > 1: self.throw(ctx, err.NoAttribute(value.type, id)) @@ -372,11 +388,7 @@ def visitExprTuple(self, ctx): values = [self.visit(expr) for expr in exprs] type = tTuple(value.type for value in values) - size = self.builder.gep(vNull(type), [vIndex(1)]) - size = self.builder.ptrtoint(size, tInt) - - tuple = self.builder.call(self.builtins['malloc'], [size]) - tuple = self.builder.bitcast(tuple, tPtr(type)) + tuple = self.malloc(type) for i, value in enumerate(values): ptr = self.builder.gep(tuple, [vIndex(0), vIndex(i)]) @@ -385,7 +397,6 @@ def visitExprTuple(self, ctx): return self.builder.load(tuple) - ### Atoms ### def visitAtomInt(self, ctx): @@ -394,5 +405,22 @@ def visitAtomInt(self, ctx): def visitAtomBool(self, ctx): return vBool(ctx.getText() == 'true') + def visitAtomString(self, ctx): + lit = ast.literal_eval(str(ctx.STRING())) + value = ll.Constant(ll.ArrayType(tChar, len(lit)), [vChar(c) for c in lit]) + + string = self.malloc(tString) + + pointer = self.builder.gep(string, [vIndex(0), vIndex(0)]) + array = ll.GlobalVariable(self.module, value.type, self.module.get_unique_name('str')) + array.global_constant = True + array.initializer = value + self.builder.store(self.builder.gep(array, [vIndex(0), vIndex(0)]), pointer) + + length = self.builder.gep(string, [vIndex(0), vIndex(1)]) + self.builder.store(vInt(value.type.count), length) + + return self.builder.load(string) + def visitAtomId(self, ctx): return self.builder.load(self.get(ctx, ctx.ID())) diff --git a/src/types.py b/src/types.py index f8d0edd0..5f4f4015 100644 --- a/src/types.py +++ b/src/types.py @@ -7,23 +7,30 @@ tBool = ll.IntType(1) tChar = ll.IntType(8) +def tPtr(type=tChar): + return type.as_pointer() + +tString = ll.LiteralStructType([tPtr(), tInt]) +tString.kind = 'string' + +def isString(type): + return getattr(type, 'kind', None) == 'string' + +ll.Type.isString = isString + def tTuple(elements): type = ll.LiteralStructType(elements) type.kind = 'tuple' return type -def tFunc(args, ret=tVoid): - return ll.FunctionType(ret, args) - -def tPtr(type=tChar): - return type.as_pointer() - - def isTuple(type): return getattr(type, 'kind', None) == 'tuple' ll.Type.isTuple = isTuple +def tFunc(args, ret=tVoid): + return ll.FunctionType(ret, args) + def showType(type): if type == tVoid: @@ -34,6 +41,8 @@ def showType(type): return 'Bool' if type == tChar: return 'Char' + if type.isString(): + return 'String' if type.isTuple(): return '*'.join(t.show() for t in type.elements) return str(type) diff --git a/test/bad/strings/string03.err b/test/bad/strings/string03.err new file mode 100644 index 00000000..13500d38 --- /dev/null +++ b/test/bad/strings/string03.err @@ -0,0 +1 @@ +Type `String` has no attribute `len`. \ No newline at end of file diff --git a/test/bad/strings/string03.px b/test/bad/strings/string03.px new file mode 100644 index 00000000..78a82cfd --- /dev/null +++ b/test/bad/strings/string03.px @@ -0,0 +1,2 @@ + +"test".len diff --git a/test/good/strings/string02.out b/test/good/strings/string02.out index 9753f4c7..e258f99d 100644 --- a/test/good/strings/string02.out +++ b/test/good/strings/string02.out @@ -1,2 +1,2 @@ -escape +escape"\ test diff --git a/test/good/strings/string02.px b/test/good/strings/string02.px index dcf6ea49..6bf897fa 100644 --- a/test/good/strings/string02.px +++ b/test/good/strings/string02.px @@ -1,3 +1,3 @@ -s = "escape\n\ttest" +s = "escape\"\\\n\ttest" print s From 55a05066f2994d5df099547003e9d256224042ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Tue, 8 Oct 2019 21:58:50 +0200 Subject: [PATCH 016/100] String indexing and characters --- src/Pyxell.g4 | 4 +- src/antlr/Pyxell.interp | 8 +- src/antlr/Pyxell.tokens | 41 +++--- src/antlr/PyxellLexer.interp | 12 +- src/antlr/PyxellLexer.py | 228 +++++++++++++++++---------------- src/antlr/PyxellLexer.tokens | 41 +++--- src/antlr/PyxellParser.py | 240 ++++++++++++++++++++++------------- src/antlr/PyxellVisitor.py | 10 ++ src/compiler.py | 23 +++- src/errors.py | 1 + 10 files changed, 373 insertions(+), 235 deletions(-) diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index 346bb7e0..1569feb5 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -33,6 +33,7 @@ block expr : atom # ExprAtom | '(' expr ')' # ExprParentheses + | expr '[' expr ']' # ExprIndex | expr '.' ID # ExprAttr | expr op='^' expr # ExprBinaryOp | op=('+' | '-' | '~') expr # ExprUnaryOp @@ -52,16 +53,17 @@ expr atom : INT # AtomInt | ('true' | 'false') # AtomBool + | CHAR # AtomChar | STRING # AtomString | ID # AtomId ; INT : DIGIT+ ; +CHAR : '\'' (~[\\'] | ('\\' ['\\nt]))* '\'' ; STRING : '"' (~[\\"] | ('\\' ["\\nt]))* '"' ; ID : ID_START ID_CONT* ; fragment DIGIT : [0-9] ; -fragment LETTER : [a-z] ; fragment ID_START : [a-zA-Z_] ; fragment ID_CONT : ID_START | DIGIT | [_'] ; diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index f00d8dac..0a52332c 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -26,6 +26,8 @@ null '}' '(' ')' +'[' +']' '.' '~' '==' @@ -44,6 +46,7 @@ null null null null +null token symbolic names: null @@ -86,7 +89,10 @@ null null null null +null +null INT +CHAR STRING ID WS @@ -104,4 +110,4 @@ atom atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 46, 155, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 3, 2, 7, 2, 20, 10, 2, 12, 2, 14, 2, 23, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 31, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 36, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 41, 10, 4, 12, 4, 14, 4, 44, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 51, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 56, 10, 5, 12, 5, 14, 5, 59, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 68, 10, 6, 12, 6, 14, 6, 71, 11, 6, 3, 6, 3, 6, 5, 6, 75, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 85, 10, 6, 3, 7, 3, 7, 3, 7, 6, 7, 90, 10, 7, 13, 7, 14, 7, 91, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 106, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 144, 10, 8, 12, 8, 14, 8, 147, 11, 8, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 153, 10, 9, 3, 9, 2, 3, 14, 10, 2, 4, 6, 8, 10, 12, 14, 16, 2, 9, 3, 2, 7, 17, 4, 2, 11, 12, 30, 30, 3, 2, 8, 10, 3, 2, 11, 12, 3, 2, 13, 14, 3, 2, 31, 36, 3, 2, 40, 41, 2, 177, 2, 21, 3, 2, 2, 2, 4, 30, 3, 2, 2, 2, 6, 50, 3, 2, 2, 2, 8, 52, 3, 2, 2, 2, 10, 84, 3, 2, 2, 2, 12, 86, 3, 2, 2, 2, 14, 105, 3, 2, 2, 2, 16, 152, 3, 2, 2, 2, 18, 20, 5, 4, 3, 2, 19, 18, 3, 2, 2, 2, 20, 23, 3, 2, 2, 2, 21, 19, 3, 2, 2, 2, 21, 22, 3, 2, 2, 2, 22, 24, 3, 2, 2, 2, 23, 21, 3, 2, 2, 2, 24, 25, 7, 2, 2, 3, 25, 3, 3, 2, 2, 2, 26, 27, 5, 6, 4, 2, 27, 28, 7, 3, 2, 2, 28, 31, 3, 2, 2, 2, 29, 31, 5, 10, 6, 2, 30, 26, 3, 2, 2, 2, 30, 29, 3, 2, 2, 2, 31, 5, 3, 2, 2, 2, 32, 51, 7, 4, 2, 2, 33, 35, 7, 5, 2, 2, 34, 36, 5, 14, 8, 2, 35, 34, 3, 2, 2, 2, 35, 36, 3, 2, 2, 2, 36, 51, 3, 2, 2, 2, 37, 38, 5, 8, 5, 2, 38, 39, 7, 6, 2, 2, 39, 41, 3, 2, 2, 2, 40, 37, 3, 2, 2, 2, 41, 44, 3, 2, 2, 2, 42, 40, 3, 2, 2, 2, 42, 43, 3, 2, 2, 2, 43, 45, 3, 2, 2, 2, 44, 42, 3, 2, 2, 2, 45, 51, 5, 14, 8, 2, 46, 47, 7, 44, 2, 2, 47, 48, 9, 2, 2, 2, 48, 49, 7, 6, 2, 2, 49, 51, 5, 14, 8, 2, 50, 32, 3, 2, 2, 2, 50, 33, 3, 2, 2, 2, 50, 42, 3, 2, 2, 2, 50, 46, 3, 2, 2, 2, 51, 7, 3, 2, 2, 2, 52, 57, 7, 44, 2, 2, 53, 54, 7, 18, 2, 2, 54, 56, 7, 44, 2, 2, 55, 53, 3, 2, 2, 2, 56, 59, 3, 2, 2, 2, 57, 55, 3, 2, 2, 2, 57, 58, 3, 2, 2, 2, 58, 9, 3, 2, 2, 2, 59, 57, 3, 2, 2, 2, 60, 61, 7, 19, 2, 2, 61, 62, 5, 14, 8, 2, 62, 69, 5, 12, 7, 2, 63, 64, 7, 20, 2, 2, 64, 65, 5, 14, 8, 2, 65, 66, 5, 12, 7, 2, 66, 68, 3, 2, 2, 2, 67, 63, 3, 2, 2, 2, 68, 71, 3, 2, 2, 2, 69, 67, 3, 2, 2, 2, 69, 70, 3, 2, 2, 2, 70, 74, 3, 2, 2, 2, 71, 69, 3, 2, 2, 2, 72, 73, 7, 21, 2, 2, 73, 75, 5, 12, 7, 2, 74, 72, 3, 2, 2, 2, 74, 75, 3, 2, 2, 2, 75, 85, 3, 2, 2, 2, 76, 77, 7, 22, 2, 2, 77, 78, 5, 14, 8, 2, 78, 79, 5, 12, 7, 2, 79, 85, 3, 2, 2, 2, 80, 81, 7, 23, 2, 2, 81, 82, 5, 14, 8, 2, 82, 83, 5, 12, 7, 2, 83, 85, 3, 2, 2, 2, 84, 60, 3, 2, 2, 2, 84, 76, 3, 2, 2, 2, 84, 80, 3, 2, 2, 2, 85, 11, 3, 2, 2, 2, 86, 87, 7, 24, 2, 2, 87, 89, 7, 25, 2, 2, 88, 90, 5, 4, 3, 2, 89, 88, 3, 2, 2, 2, 90, 91, 3, 2, 2, 2, 91, 89, 3, 2, 2, 2, 91, 92, 3, 2, 2, 2, 92, 93, 3, 2, 2, 2, 93, 94, 7, 26, 2, 2, 94, 13, 3, 2, 2, 2, 95, 96, 8, 8, 1, 2, 96, 106, 5, 16, 9, 2, 97, 98, 7, 27, 2, 2, 98, 99, 5, 14, 8, 2, 99, 100, 7, 28, 2, 2, 100, 106, 3, 2, 2, 2, 101, 102, 9, 3, 2, 2, 102, 106, 5, 14, 8, 14, 103, 104, 7, 37, 2, 2, 104, 106, 5, 14, 8, 6, 105, 95, 3, 2, 2, 2, 105, 97, 3, 2, 2, 2, 105, 101, 3, 2, 2, 2, 105, 103, 3, 2, 2, 2, 106, 145, 3, 2, 2, 2, 107, 108, 12, 15, 2, 2, 108, 109, 7, 7, 2, 2, 109, 144, 5, 14, 8, 15, 110, 111, 12, 13, 2, 2, 111, 112, 9, 4, 2, 2, 112, 144, 5, 14, 8, 14, 113, 114, 12, 12, 2, 2, 114, 115, 9, 5, 2, 2, 115, 144, 5, 14, 8, 13, 116, 117, 12, 11, 2, 2, 117, 118, 9, 6, 2, 2, 118, 144, 5, 14, 8, 12, 119, 120, 12, 10, 2, 2, 120, 121, 7, 15, 2, 2, 121, 144, 5, 14, 8, 11, 122, 123, 12, 9, 2, 2, 123, 124, 7, 16, 2, 2, 124, 144, 5, 14, 8, 10, 125, 126, 12, 8, 2, 2, 126, 127, 7, 17, 2, 2, 127, 144, 5, 14, 8, 9, 128, 129, 12, 7, 2, 2, 129, 130, 9, 7, 2, 2, 130, 144, 5, 14, 8, 7, 131, 132, 12, 5, 2, 2, 132, 133, 7, 38, 2, 2, 133, 144, 5, 14, 8, 5, 134, 135, 12, 4, 2, 2, 135, 136, 7, 39, 2, 2, 136, 144, 5, 14, 8, 4, 137, 138, 12, 3, 2, 2, 138, 139, 7, 18, 2, 2, 139, 144, 5, 14, 8, 3, 140, 141, 12, 16, 2, 2, 141, 142, 7, 29, 2, 2, 142, 144, 7, 44, 2, 2, 143, 107, 3, 2, 2, 2, 143, 110, 3, 2, 2, 2, 143, 113, 3, 2, 2, 2, 143, 116, 3, 2, 2, 2, 143, 119, 3, 2, 2, 2, 143, 122, 3, 2, 2, 2, 143, 125, 3, 2, 2, 2, 143, 128, 3, 2, 2, 2, 143, 131, 3, 2, 2, 2, 143, 134, 3, 2, 2, 2, 143, 137, 3, 2, 2, 2, 143, 140, 3, 2, 2, 2, 144, 147, 3, 2, 2, 2, 145, 143, 3, 2, 2, 2, 145, 146, 3, 2, 2, 2, 146, 15, 3, 2, 2, 2, 147, 145, 3, 2, 2, 2, 148, 153, 7, 42, 2, 2, 149, 153, 9, 8, 2, 2, 150, 153, 7, 43, 2, 2, 151, 153, 7, 44, 2, 2, 152, 148, 3, 2, 2, 2, 152, 149, 3, 2, 2, 2, 152, 150, 3, 2, 2, 2, 152, 151, 3, 2, 2, 2, 153, 17, 3, 2, 2, 2, 16, 21, 30, 35, 42, 50, 57, 69, 74, 84, 91, 105, 143, 145, 152] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 49, 161, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 3, 2, 7, 2, 20, 10, 2, 12, 2, 14, 2, 23, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 31, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 36, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 41, 10, 4, 12, 4, 14, 4, 44, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 51, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 56, 10, 5, 12, 5, 14, 5, 59, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 68, 10, 6, 12, 6, 14, 6, 71, 11, 6, 3, 6, 3, 6, 5, 6, 75, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 85, 10, 6, 3, 7, 3, 7, 3, 7, 6, 7, 90, 10, 7, 13, 7, 14, 7, 91, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 106, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 149, 10, 8, 12, 8, 14, 8, 152, 11, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 159, 10, 9, 3, 9, 2, 3, 14, 10, 2, 4, 6, 8, 10, 12, 14, 16, 2, 9, 3, 2, 7, 17, 4, 2, 11, 12, 32, 32, 3, 2, 8, 10, 3, 2, 11, 12, 3, 2, 13, 14, 3, 2, 33, 38, 3, 2, 42, 43, 2, 185, 2, 21, 3, 2, 2, 2, 4, 30, 3, 2, 2, 2, 6, 50, 3, 2, 2, 2, 8, 52, 3, 2, 2, 2, 10, 84, 3, 2, 2, 2, 12, 86, 3, 2, 2, 2, 14, 105, 3, 2, 2, 2, 16, 158, 3, 2, 2, 2, 18, 20, 5, 4, 3, 2, 19, 18, 3, 2, 2, 2, 20, 23, 3, 2, 2, 2, 21, 19, 3, 2, 2, 2, 21, 22, 3, 2, 2, 2, 22, 24, 3, 2, 2, 2, 23, 21, 3, 2, 2, 2, 24, 25, 7, 2, 2, 3, 25, 3, 3, 2, 2, 2, 26, 27, 5, 6, 4, 2, 27, 28, 7, 3, 2, 2, 28, 31, 3, 2, 2, 2, 29, 31, 5, 10, 6, 2, 30, 26, 3, 2, 2, 2, 30, 29, 3, 2, 2, 2, 31, 5, 3, 2, 2, 2, 32, 51, 7, 4, 2, 2, 33, 35, 7, 5, 2, 2, 34, 36, 5, 14, 8, 2, 35, 34, 3, 2, 2, 2, 35, 36, 3, 2, 2, 2, 36, 51, 3, 2, 2, 2, 37, 38, 5, 8, 5, 2, 38, 39, 7, 6, 2, 2, 39, 41, 3, 2, 2, 2, 40, 37, 3, 2, 2, 2, 41, 44, 3, 2, 2, 2, 42, 40, 3, 2, 2, 2, 42, 43, 3, 2, 2, 2, 43, 45, 3, 2, 2, 2, 44, 42, 3, 2, 2, 2, 45, 51, 5, 14, 8, 2, 46, 47, 7, 47, 2, 2, 47, 48, 9, 2, 2, 2, 48, 49, 7, 6, 2, 2, 49, 51, 5, 14, 8, 2, 50, 32, 3, 2, 2, 2, 50, 33, 3, 2, 2, 2, 50, 42, 3, 2, 2, 2, 50, 46, 3, 2, 2, 2, 51, 7, 3, 2, 2, 2, 52, 57, 7, 47, 2, 2, 53, 54, 7, 18, 2, 2, 54, 56, 7, 47, 2, 2, 55, 53, 3, 2, 2, 2, 56, 59, 3, 2, 2, 2, 57, 55, 3, 2, 2, 2, 57, 58, 3, 2, 2, 2, 58, 9, 3, 2, 2, 2, 59, 57, 3, 2, 2, 2, 60, 61, 7, 19, 2, 2, 61, 62, 5, 14, 8, 2, 62, 69, 5, 12, 7, 2, 63, 64, 7, 20, 2, 2, 64, 65, 5, 14, 8, 2, 65, 66, 5, 12, 7, 2, 66, 68, 3, 2, 2, 2, 67, 63, 3, 2, 2, 2, 68, 71, 3, 2, 2, 2, 69, 67, 3, 2, 2, 2, 69, 70, 3, 2, 2, 2, 70, 74, 3, 2, 2, 2, 71, 69, 3, 2, 2, 2, 72, 73, 7, 21, 2, 2, 73, 75, 5, 12, 7, 2, 74, 72, 3, 2, 2, 2, 74, 75, 3, 2, 2, 2, 75, 85, 3, 2, 2, 2, 76, 77, 7, 22, 2, 2, 77, 78, 5, 14, 8, 2, 78, 79, 5, 12, 7, 2, 79, 85, 3, 2, 2, 2, 80, 81, 7, 23, 2, 2, 81, 82, 5, 14, 8, 2, 82, 83, 5, 12, 7, 2, 83, 85, 3, 2, 2, 2, 84, 60, 3, 2, 2, 2, 84, 76, 3, 2, 2, 2, 84, 80, 3, 2, 2, 2, 85, 11, 3, 2, 2, 2, 86, 87, 7, 24, 2, 2, 87, 89, 7, 25, 2, 2, 88, 90, 5, 4, 3, 2, 89, 88, 3, 2, 2, 2, 90, 91, 3, 2, 2, 2, 91, 89, 3, 2, 2, 2, 91, 92, 3, 2, 2, 2, 92, 93, 3, 2, 2, 2, 93, 94, 7, 26, 2, 2, 94, 13, 3, 2, 2, 2, 95, 96, 8, 8, 1, 2, 96, 106, 5, 16, 9, 2, 97, 98, 7, 27, 2, 2, 98, 99, 5, 14, 8, 2, 99, 100, 7, 28, 2, 2, 100, 106, 3, 2, 2, 2, 101, 102, 9, 3, 2, 2, 102, 106, 5, 14, 8, 14, 103, 104, 7, 39, 2, 2, 104, 106, 5, 14, 8, 6, 105, 95, 3, 2, 2, 2, 105, 97, 3, 2, 2, 2, 105, 101, 3, 2, 2, 2, 105, 103, 3, 2, 2, 2, 106, 150, 3, 2, 2, 2, 107, 108, 12, 15, 2, 2, 108, 109, 7, 7, 2, 2, 109, 149, 5, 14, 8, 15, 110, 111, 12, 13, 2, 2, 111, 112, 9, 4, 2, 2, 112, 149, 5, 14, 8, 14, 113, 114, 12, 12, 2, 2, 114, 115, 9, 5, 2, 2, 115, 149, 5, 14, 8, 13, 116, 117, 12, 11, 2, 2, 117, 118, 9, 6, 2, 2, 118, 149, 5, 14, 8, 12, 119, 120, 12, 10, 2, 2, 120, 121, 7, 15, 2, 2, 121, 149, 5, 14, 8, 11, 122, 123, 12, 9, 2, 2, 123, 124, 7, 16, 2, 2, 124, 149, 5, 14, 8, 10, 125, 126, 12, 8, 2, 2, 126, 127, 7, 17, 2, 2, 127, 149, 5, 14, 8, 9, 128, 129, 12, 7, 2, 2, 129, 130, 9, 7, 2, 2, 130, 149, 5, 14, 8, 7, 131, 132, 12, 5, 2, 2, 132, 133, 7, 40, 2, 2, 133, 149, 5, 14, 8, 5, 134, 135, 12, 4, 2, 2, 135, 136, 7, 41, 2, 2, 136, 149, 5, 14, 8, 4, 137, 138, 12, 3, 2, 2, 138, 139, 7, 18, 2, 2, 139, 149, 5, 14, 8, 3, 140, 141, 12, 17, 2, 2, 141, 142, 7, 29, 2, 2, 142, 143, 5, 14, 8, 2, 143, 144, 7, 30, 2, 2, 144, 149, 3, 2, 2, 2, 145, 146, 12, 16, 2, 2, 146, 147, 7, 31, 2, 2, 147, 149, 7, 47, 2, 2, 148, 107, 3, 2, 2, 2, 148, 110, 3, 2, 2, 2, 148, 113, 3, 2, 2, 2, 148, 116, 3, 2, 2, 2, 148, 119, 3, 2, 2, 2, 148, 122, 3, 2, 2, 2, 148, 125, 3, 2, 2, 2, 148, 128, 3, 2, 2, 2, 148, 131, 3, 2, 2, 2, 148, 134, 3, 2, 2, 2, 148, 137, 3, 2, 2, 2, 148, 140, 3, 2, 2, 2, 148, 145, 3, 2, 2, 2, 149, 152, 3, 2, 2, 2, 150, 148, 3, 2, 2, 2, 150, 151, 3, 2, 2, 2, 151, 15, 3, 2, 2, 2, 152, 150, 3, 2, 2, 2, 153, 159, 7, 44, 2, 2, 154, 159, 9, 8, 2, 2, 155, 159, 7, 45, 2, 2, 156, 159, 7, 46, 2, 2, 157, 159, 7, 47, 2, 2, 158, 153, 3, 2, 2, 2, 158, 154, 3, 2, 2, 2, 158, 155, 3, 2, 2, 2, 158, 156, 3, 2, 2, 2, 158, 157, 3, 2, 2, 2, 159, 17, 3, 2, 2, 2, 16, 21, 30, 35, 42, 50, 57, 69, 74, 84, 91, 105, 148, 150, 158] \ No newline at end of file diff --git a/src/antlr/Pyxell.tokens b/src/antlr/Pyxell.tokens index 6228dbc7..096724f7 100644 --- a/src/antlr/Pyxell.tokens +++ b/src/antlr/Pyxell.tokens @@ -37,11 +37,14 @@ T__35=36 T__36=37 T__37=38 T__38=39 -INT=40 -STRING=41 -ID=42 -WS=43 -ERR=44 +T__39=40 +T__40=41 +INT=42 +CHAR=43 +STRING=44 +ID=45 +WS=46 +ERR=47 ';'=1 'skip'=2 'print'=3 @@ -68,16 +71,18 @@ ERR=44 '}'=24 '('=25 ')'=26 -'.'=27 -'~'=28 -'=='=29 -'!='=30 -'<'=31 -'<='=32 -'>'=33 -'>='=34 -'not'=35 -'and'=36 -'or'=37 -'true'=38 -'false'=39 +'['=27 +']'=28 +'.'=29 +'~'=30 +'=='=31 +'!='=32 +'<'=33 +'<='=34 +'>'=35 +'>='=36 +'not'=37 +'and'=38 +'or'=39 +'true'=40 +'false'=41 diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp index f1e7fdfb..6629a4c0 100644 --- a/src/antlr/PyxellLexer.interp +++ b/src/antlr/PyxellLexer.interp @@ -26,6 +26,8 @@ null '}' '(' ')' +'[' +']' '.' '~' '==' @@ -44,6 +46,7 @@ null null null null +null token symbolic names: null @@ -86,7 +89,10 @@ null null null null +null +null INT +CHAR STRING ID WS @@ -132,11 +138,13 @@ T__35 T__36 T__37 T__38 +T__39 +T__40 INT +CHAR STRING ID DIGIT -LETTER ID_START ID_CONT WS @@ -150,4 +158,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 46, 261, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 6, 41, 220, 10, 41, 13, 41, 14, 41, 221, 3, 42, 3, 42, 3, 42, 3, 42, 7, 42, 228, 10, 42, 12, 42, 14, 42, 231, 11, 42, 3, 42, 3, 42, 3, 43, 3, 43, 7, 43, 237, 10, 43, 12, 43, 14, 43, 240, 11, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 5, 47, 251, 10, 47, 3, 48, 6, 48, 254, 10, 48, 13, 48, 14, 48, 255, 3, 48, 3, 48, 3, 49, 3, 49, 2, 2, 50, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 2, 89, 2, 91, 2, 93, 2, 95, 45, 97, 46, 3, 2, 9, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 3, 2, 99, 124, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 263, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 3, 99, 3, 2, 2, 2, 5, 101, 3, 2, 2, 2, 7, 106, 3, 2, 2, 2, 9, 112, 3, 2, 2, 2, 11, 114, 3, 2, 2, 2, 13, 116, 3, 2, 2, 2, 15, 118, 3, 2, 2, 2, 17, 120, 3, 2, 2, 2, 19, 122, 3, 2, 2, 2, 21, 124, 3, 2, 2, 2, 23, 126, 3, 2, 2, 2, 25, 129, 3, 2, 2, 2, 27, 132, 3, 2, 2, 2, 29, 134, 3, 2, 2, 2, 31, 136, 3, 2, 2, 2, 33, 138, 3, 2, 2, 2, 35, 140, 3, 2, 2, 2, 37, 143, 3, 2, 2, 2, 39, 148, 3, 2, 2, 2, 41, 153, 3, 2, 2, 2, 43, 159, 3, 2, 2, 2, 45, 165, 3, 2, 2, 2, 47, 168, 3, 2, 2, 2, 49, 170, 3, 2, 2, 2, 51, 172, 3, 2, 2, 2, 53, 174, 3, 2, 2, 2, 55, 176, 3, 2, 2, 2, 57, 178, 3, 2, 2, 2, 59, 180, 3, 2, 2, 2, 61, 183, 3, 2, 2, 2, 63, 186, 3, 2, 2, 2, 65, 188, 3, 2, 2, 2, 67, 191, 3, 2, 2, 2, 69, 193, 3, 2, 2, 2, 71, 196, 3, 2, 2, 2, 73, 200, 3, 2, 2, 2, 75, 204, 3, 2, 2, 2, 77, 207, 3, 2, 2, 2, 79, 212, 3, 2, 2, 2, 81, 219, 3, 2, 2, 2, 83, 223, 3, 2, 2, 2, 85, 234, 3, 2, 2, 2, 87, 241, 3, 2, 2, 2, 89, 243, 3, 2, 2, 2, 91, 245, 3, 2, 2, 2, 93, 250, 3, 2, 2, 2, 95, 253, 3, 2, 2, 2, 97, 259, 3, 2, 2, 2, 99, 100, 7, 61, 2, 2, 100, 4, 3, 2, 2, 2, 101, 102, 7, 117, 2, 2, 102, 103, 7, 109, 2, 2, 103, 104, 7, 107, 2, 2, 104, 105, 7, 114, 2, 2, 105, 6, 3, 2, 2, 2, 106, 107, 7, 114, 2, 2, 107, 108, 7, 116, 2, 2, 108, 109, 7, 107, 2, 2, 109, 110, 7, 112, 2, 2, 110, 111, 7, 118, 2, 2, 111, 8, 3, 2, 2, 2, 112, 113, 7, 63, 2, 2, 113, 10, 3, 2, 2, 2, 114, 115, 7, 96, 2, 2, 115, 12, 3, 2, 2, 2, 116, 117, 7, 44, 2, 2, 117, 14, 3, 2, 2, 2, 118, 119, 7, 49, 2, 2, 119, 16, 3, 2, 2, 2, 120, 121, 7, 39, 2, 2, 121, 18, 3, 2, 2, 2, 122, 123, 7, 45, 2, 2, 123, 20, 3, 2, 2, 2, 124, 125, 7, 47, 2, 2, 125, 22, 3, 2, 2, 2, 126, 127, 7, 62, 2, 2, 127, 128, 7, 62, 2, 2, 128, 24, 3, 2, 2, 2, 129, 130, 7, 64, 2, 2, 130, 131, 7, 64, 2, 2, 131, 26, 3, 2, 2, 2, 132, 133, 7, 40, 2, 2, 133, 28, 3, 2, 2, 2, 134, 135, 7, 38, 2, 2, 135, 30, 3, 2, 2, 2, 136, 137, 7, 126, 2, 2, 137, 32, 3, 2, 2, 2, 138, 139, 7, 46, 2, 2, 139, 34, 3, 2, 2, 2, 140, 141, 7, 107, 2, 2, 141, 142, 7, 104, 2, 2, 142, 36, 3, 2, 2, 2, 143, 144, 7, 103, 2, 2, 144, 145, 7, 110, 2, 2, 145, 146, 7, 107, 2, 2, 146, 147, 7, 104, 2, 2, 147, 38, 3, 2, 2, 2, 148, 149, 7, 103, 2, 2, 149, 150, 7, 110, 2, 2, 150, 151, 7, 117, 2, 2, 151, 152, 7, 103, 2, 2, 152, 40, 3, 2, 2, 2, 153, 154, 7, 121, 2, 2, 154, 155, 7, 106, 2, 2, 155, 156, 7, 107, 2, 2, 156, 157, 7, 110, 2, 2, 157, 158, 7, 103, 2, 2, 158, 42, 3, 2, 2, 2, 159, 160, 7, 119, 2, 2, 160, 161, 7, 112, 2, 2, 161, 162, 7, 118, 2, 2, 162, 163, 7, 107, 2, 2, 163, 164, 7, 110, 2, 2, 164, 44, 3, 2, 2, 2, 165, 166, 7, 102, 2, 2, 166, 167, 7, 113, 2, 2, 167, 46, 3, 2, 2, 2, 168, 169, 7, 125, 2, 2, 169, 48, 3, 2, 2, 2, 170, 171, 7, 127, 2, 2, 171, 50, 3, 2, 2, 2, 172, 173, 7, 42, 2, 2, 173, 52, 3, 2, 2, 2, 174, 175, 7, 43, 2, 2, 175, 54, 3, 2, 2, 2, 176, 177, 7, 48, 2, 2, 177, 56, 3, 2, 2, 2, 178, 179, 7, 128, 2, 2, 179, 58, 3, 2, 2, 2, 180, 181, 7, 63, 2, 2, 181, 182, 7, 63, 2, 2, 182, 60, 3, 2, 2, 2, 183, 184, 7, 35, 2, 2, 184, 185, 7, 63, 2, 2, 185, 62, 3, 2, 2, 2, 186, 187, 7, 62, 2, 2, 187, 64, 3, 2, 2, 2, 188, 189, 7, 62, 2, 2, 189, 190, 7, 63, 2, 2, 190, 66, 3, 2, 2, 2, 191, 192, 7, 64, 2, 2, 192, 68, 3, 2, 2, 2, 193, 194, 7, 64, 2, 2, 194, 195, 7, 63, 2, 2, 195, 70, 3, 2, 2, 2, 196, 197, 7, 112, 2, 2, 197, 198, 7, 113, 2, 2, 198, 199, 7, 118, 2, 2, 199, 72, 3, 2, 2, 2, 200, 201, 7, 99, 2, 2, 201, 202, 7, 112, 2, 2, 202, 203, 7, 102, 2, 2, 203, 74, 3, 2, 2, 2, 204, 205, 7, 113, 2, 2, 205, 206, 7, 116, 2, 2, 206, 76, 3, 2, 2, 2, 207, 208, 7, 118, 2, 2, 208, 209, 7, 116, 2, 2, 209, 210, 7, 119, 2, 2, 210, 211, 7, 103, 2, 2, 211, 78, 3, 2, 2, 2, 212, 213, 7, 104, 2, 2, 213, 214, 7, 99, 2, 2, 214, 215, 7, 110, 2, 2, 215, 216, 7, 117, 2, 2, 216, 217, 7, 103, 2, 2, 217, 80, 3, 2, 2, 2, 218, 220, 5, 87, 44, 2, 219, 218, 3, 2, 2, 2, 220, 221, 3, 2, 2, 2, 221, 219, 3, 2, 2, 2, 221, 222, 3, 2, 2, 2, 222, 82, 3, 2, 2, 2, 223, 229, 7, 36, 2, 2, 224, 228, 10, 2, 2, 2, 225, 226, 7, 94, 2, 2, 226, 228, 9, 3, 2, 2, 227, 224, 3, 2, 2, 2, 227, 225, 3, 2, 2, 2, 228, 231, 3, 2, 2, 2, 229, 227, 3, 2, 2, 2, 229, 230, 3, 2, 2, 2, 230, 232, 3, 2, 2, 2, 231, 229, 3, 2, 2, 2, 232, 233, 7, 36, 2, 2, 233, 84, 3, 2, 2, 2, 234, 238, 5, 91, 46, 2, 235, 237, 5, 93, 47, 2, 236, 235, 3, 2, 2, 2, 237, 240, 3, 2, 2, 2, 238, 236, 3, 2, 2, 2, 238, 239, 3, 2, 2, 2, 239, 86, 3, 2, 2, 2, 240, 238, 3, 2, 2, 2, 241, 242, 9, 4, 2, 2, 242, 88, 3, 2, 2, 2, 243, 244, 9, 5, 2, 2, 244, 90, 3, 2, 2, 2, 245, 246, 9, 6, 2, 2, 246, 92, 3, 2, 2, 2, 247, 251, 5, 91, 46, 2, 248, 251, 5, 87, 44, 2, 249, 251, 9, 7, 2, 2, 250, 247, 3, 2, 2, 2, 250, 248, 3, 2, 2, 2, 250, 249, 3, 2, 2, 2, 251, 94, 3, 2, 2, 2, 252, 254, 9, 8, 2, 2, 253, 252, 3, 2, 2, 2, 254, 255, 3, 2, 2, 2, 255, 253, 3, 2, 2, 2, 255, 256, 3, 2, 2, 2, 256, 257, 3, 2, 2, 2, 257, 258, 8, 48, 2, 2, 258, 96, 3, 2, 2, 2, 259, 260, 11, 2, 2, 2, 260, 98, 3, 2, 2, 2, 9, 2, 221, 227, 229, 238, 250, 255, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 49, 278, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 6, 43, 228, 10, 43, 13, 43, 14, 43, 229, 3, 44, 3, 44, 3, 44, 3, 44, 7, 44, 236, 10, 44, 12, 44, 14, 44, 239, 11, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 7, 45, 247, 10, 45, 12, 45, 14, 45, 250, 11, 45, 3, 45, 3, 45, 3, 46, 3, 46, 7, 46, 256, 10, 46, 12, 46, 14, 46, 259, 11, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 5, 49, 268, 10, 49, 3, 50, 6, 50, 271, 10, 50, 13, 50, 14, 50, 272, 3, 50, 3, 50, 3, 51, 3, 51, 2, 2, 52, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 2, 95, 2, 97, 2, 99, 48, 101, 49, 3, 2, 10, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 283, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 3, 103, 3, 2, 2, 2, 5, 105, 3, 2, 2, 2, 7, 110, 3, 2, 2, 2, 9, 116, 3, 2, 2, 2, 11, 118, 3, 2, 2, 2, 13, 120, 3, 2, 2, 2, 15, 122, 3, 2, 2, 2, 17, 124, 3, 2, 2, 2, 19, 126, 3, 2, 2, 2, 21, 128, 3, 2, 2, 2, 23, 130, 3, 2, 2, 2, 25, 133, 3, 2, 2, 2, 27, 136, 3, 2, 2, 2, 29, 138, 3, 2, 2, 2, 31, 140, 3, 2, 2, 2, 33, 142, 3, 2, 2, 2, 35, 144, 3, 2, 2, 2, 37, 147, 3, 2, 2, 2, 39, 152, 3, 2, 2, 2, 41, 157, 3, 2, 2, 2, 43, 163, 3, 2, 2, 2, 45, 169, 3, 2, 2, 2, 47, 172, 3, 2, 2, 2, 49, 174, 3, 2, 2, 2, 51, 176, 3, 2, 2, 2, 53, 178, 3, 2, 2, 2, 55, 180, 3, 2, 2, 2, 57, 182, 3, 2, 2, 2, 59, 184, 3, 2, 2, 2, 61, 186, 3, 2, 2, 2, 63, 188, 3, 2, 2, 2, 65, 191, 3, 2, 2, 2, 67, 194, 3, 2, 2, 2, 69, 196, 3, 2, 2, 2, 71, 199, 3, 2, 2, 2, 73, 201, 3, 2, 2, 2, 75, 204, 3, 2, 2, 2, 77, 208, 3, 2, 2, 2, 79, 212, 3, 2, 2, 2, 81, 215, 3, 2, 2, 2, 83, 220, 3, 2, 2, 2, 85, 227, 3, 2, 2, 2, 87, 231, 3, 2, 2, 2, 89, 242, 3, 2, 2, 2, 91, 253, 3, 2, 2, 2, 93, 260, 3, 2, 2, 2, 95, 262, 3, 2, 2, 2, 97, 267, 3, 2, 2, 2, 99, 270, 3, 2, 2, 2, 101, 276, 3, 2, 2, 2, 103, 104, 7, 61, 2, 2, 104, 4, 3, 2, 2, 2, 105, 106, 7, 117, 2, 2, 106, 107, 7, 109, 2, 2, 107, 108, 7, 107, 2, 2, 108, 109, 7, 114, 2, 2, 109, 6, 3, 2, 2, 2, 110, 111, 7, 114, 2, 2, 111, 112, 7, 116, 2, 2, 112, 113, 7, 107, 2, 2, 113, 114, 7, 112, 2, 2, 114, 115, 7, 118, 2, 2, 115, 8, 3, 2, 2, 2, 116, 117, 7, 63, 2, 2, 117, 10, 3, 2, 2, 2, 118, 119, 7, 96, 2, 2, 119, 12, 3, 2, 2, 2, 120, 121, 7, 44, 2, 2, 121, 14, 3, 2, 2, 2, 122, 123, 7, 49, 2, 2, 123, 16, 3, 2, 2, 2, 124, 125, 7, 39, 2, 2, 125, 18, 3, 2, 2, 2, 126, 127, 7, 45, 2, 2, 127, 20, 3, 2, 2, 2, 128, 129, 7, 47, 2, 2, 129, 22, 3, 2, 2, 2, 130, 131, 7, 62, 2, 2, 131, 132, 7, 62, 2, 2, 132, 24, 3, 2, 2, 2, 133, 134, 7, 64, 2, 2, 134, 135, 7, 64, 2, 2, 135, 26, 3, 2, 2, 2, 136, 137, 7, 40, 2, 2, 137, 28, 3, 2, 2, 2, 138, 139, 7, 38, 2, 2, 139, 30, 3, 2, 2, 2, 140, 141, 7, 126, 2, 2, 141, 32, 3, 2, 2, 2, 142, 143, 7, 46, 2, 2, 143, 34, 3, 2, 2, 2, 144, 145, 7, 107, 2, 2, 145, 146, 7, 104, 2, 2, 146, 36, 3, 2, 2, 2, 147, 148, 7, 103, 2, 2, 148, 149, 7, 110, 2, 2, 149, 150, 7, 107, 2, 2, 150, 151, 7, 104, 2, 2, 151, 38, 3, 2, 2, 2, 152, 153, 7, 103, 2, 2, 153, 154, 7, 110, 2, 2, 154, 155, 7, 117, 2, 2, 155, 156, 7, 103, 2, 2, 156, 40, 3, 2, 2, 2, 157, 158, 7, 121, 2, 2, 158, 159, 7, 106, 2, 2, 159, 160, 7, 107, 2, 2, 160, 161, 7, 110, 2, 2, 161, 162, 7, 103, 2, 2, 162, 42, 3, 2, 2, 2, 163, 164, 7, 119, 2, 2, 164, 165, 7, 112, 2, 2, 165, 166, 7, 118, 2, 2, 166, 167, 7, 107, 2, 2, 167, 168, 7, 110, 2, 2, 168, 44, 3, 2, 2, 2, 169, 170, 7, 102, 2, 2, 170, 171, 7, 113, 2, 2, 171, 46, 3, 2, 2, 2, 172, 173, 7, 125, 2, 2, 173, 48, 3, 2, 2, 2, 174, 175, 7, 127, 2, 2, 175, 50, 3, 2, 2, 2, 176, 177, 7, 42, 2, 2, 177, 52, 3, 2, 2, 2, 178, 179, 7, 43, 2, 2, 179, 54, 3, 2, 2, 2, 180, 181, 7, 93, 2, 2, 181, 56, 3, 2, 2, 2, 182, 183, 7, 95, 2, 2, 183, 58, 3, 2, 2, 2, 184, 185, 7, 48, 2, 2, 185, 60, 3, 2, 2, 2, 186, 187, 7, 128, 2, 2, 187, 62, 3, 2, 2, 2, 188, 189, 7, 63, 2, 2, 189, 190, 7, 63, 2, 2, 190, 64, 3, 2, 2, 2, 191, 192, 7, 35, 2, 2, 192, 193, 7, 63, 2, 2, 193, 66, 3, 2, 2, 2, 194, 195, 7, 62, 2, 2, 195, 68, 3, 2, 2, 2, 196, 197, 7, 62, 2, 2, 197, 198, 7, 63, 2, 2, 198, 70, 3, 2, 2, 2, 199, 200, 7, 64, 2, 2, 200, 72, 3, 2, 2, 2, 201, 202, 7, 64, 2, 2, 202, 203, 7, 63, 2, 2, 203, 74, 3, 2, 2, 2, 204, 205, 7, 112, 2, 2, 205, 206, 7, 113, 2, 2, 206, 207, 7, 118, 2, 2, 207, 76, 3, 2, 2, 2, 208, 209, 7, 99, 2, 2, 209, 210, 7, 112, 2, 2, 210, 211, 7, 102, 2, 2, 211, 78, 3, 2, 2, 2, 212, 213, 7, 113, 2, 2, 213, 214, 7, 116, 2, 2, 214, 80, 3, 2, 2, 2, 215, 216, 7, 118, 2, 2, 216, 217, 7, 116, 2, 2, 217, 218, 7, 119, 2, 2, 218, 219, 7, 103, 2, 2, 219, 82, 3, 2, 2, 2, 220, 221, 7, 104, 2, 2, 221, 222, 7, 99, 2, 2, 222, 223, 7, 110, 2, 2, 223, 224, 7, 117, 2, 2, 224, 225, 7, 103, 2, 2, 225, 84, 3, 2, 2, 2, 226, 228, 5, 93, 47, 2, 227, 226, 3, 2, 2, 2, 228, 229, 3, 2, 2, 2, 229, 227, 3, 2, 2, 2, 229, 230, 3, 2, 2, 2, 230, 86, 3, 2, 2, 2, 231, 237, 7, 41, 2, 2, 232, 236, 10, 2, 2, 2, 233, 234, 7, 94, 2, 2, 234, 236, 9, 3, 2, 2, 235, 232, 3, 2, 2, 2, 235, 233, 3, 2, 2, 2, 236, 239, 3, 2, 2, 2, 237, 235, 3, 2, 2, 2, 237, 238, 3, 2, 2, 2, 238, 240, 3, 2, 2, 2, 239, 237, 3, 2, 2, 2, 240, 241, 7, 41, 2, 2, 241, 88, 3, 2, 2, 2, 242, 248, 7, 36, 2, 2, 243, 247, 10, 4, 2, 2, 244, 245, 7, 94, 2, 2, 245, 247, 9, 5, 2, 2, 246, 243, 3, 2, 2, 2, 246, 244, 3, 2, 2, 2, 247, 250, 3, 2, 2, 2, 248, 246, 3, 2, 2, 2, 248, 249, 3, 2, 2, 2, 249, 251, 3, 2, 2, 2, 250, 248, 3, 2, 2, 2, 251, 252, 7, 36, 2, 2, 252, 90, 3, 2, 2, 2, 253, 257, 5, 95, 48, 2, 254, 256, 5, 97, 49, 2, 255, 254, 3, 2, 2, 2, 256, 259, 3, 2, 2, 2, 257, 255, 3, 2, 2, 2, 257, 258, 3, 2, 2, 2, 258, 92, 3, 2, 2, 2, 259, 257, 3, 2, 2, 2, 260, 261, 9, 6, 2, 2, 261, 94, 3, 2, 2, 2, 262, 263, 9, 7, 2, 2, 263, 96, 3, 2, 2, 2, 264, 268, 5, 95, 48, 2, 265, 268, 5, 93, 47, 2, 266, 268, 9, 8, 2, 2, 267, 264, 3, 2, 2, 2, 267, 265, 3, 2, 2, 2, 267, 266, 3, 2, 2, 2, 268, 98, 3, 2, 2, 2, 269, 271, 9, 9, 2, 2, 270, 269, 3, 2, 2, 2, 271, 272, 3, 2, 2, 2, 272, 270, 3, 2, 2, 2, 272, 273, 3, 2, 2, 2, 273, 274, 3, 2, 2, 2, 274, 275, 8, 50, 2, 2, 275, 100, 3, 2, 2, 2, 276, 277, 11, 2, 2, 2, 277, 102, 3, 2, 2, 2, 11, 2, 229, 235, 237, 246, 248, 257, 267, 272, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py index d96a2241..056a61fb 100644 --- a/src/antlr/PyxellLexer.py +++ b/src/antlr/PyxellLexer.py @@ -8,110 +8,119 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2.") - buf.write("\u0105\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\61") + buf.write("\u0116\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") buf.write("\4\31\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36") buf.write("\t\36\4\37\t\37\4 \t \4!\t!\4\"\t\"\4#\t#\4$\t$\4%\t%") buf.write("\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4,\t,\4-\t-\4.") - buf.write("\t.\4/\t/\4\60\t\60\4\61\t\61\3\2\3\2\3\3\3\3\3\3\3\3") - buf.write("\3\3\3\4\3\4\3\4\3\4\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3") - buf.write("\b\3\b\3\t\3\t\3\n\3\n\3\13\3\13\3\f\3\f\3\f\3\r\3\r\3") - buf.write("\r\3\16\3\16\3\17\3\17\3\20\3\20\3\21\3\21\3\22\3\22\3") - buf.write("\22\3\23\3\23\3\23\3\23\3\23\3\24\3\24\3\24\3\24\3\24") - buf.write("\3\25\3\25\3\25\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26") - buf.write("\3\26\3\27\3\27\3\27\3\30\3\30\3\31\3\31\3\32\3\32\3\33") - buf.write("\3\33\3\34\3\34\3\35\3\35\3\36\3\36\3\36\3\37\3\37\3\37") - buf.write("\3 \3 \3!\3!\3!\3\"\3\"\3#\3#\3#\3$\3$\3$\3$\3%\3%\3%") - buf.write("\3%\3&\3&\3&\3\'\3\'\3\'\3\'\3\'\3(\3(\3(\3(\3(\3(\3)") - buf.write("\6)\u00dc\n)\r)\16)\u00dd\3*\3*\3*\3*\7*\u00e4\n*\f*\16") - buf.write("*\u00e7\13*\3*\3*\3+\3+\7+\u00ed\n+\f+\16+\u00f0\13+\3") - buf.write(",\3,\3-\3-\3.\3.\3/\3/\3/\5/\u00fb\n/\3\60\6\60\u00fe") - buf.write("\n\60\r\60\16\60\u00ff\3\60\3\60\3\61\3\61\2\2\62\3\3") - buf.write("\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16") - buf.write("\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61") - buf.write("\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*") - buf.write("S+U,W\2Y\2[\2]\2_-a.\3\2\t\4\2$$^^\6\2$$^^ppvv\3\2\62") - buf.write(";\3\2c|\5\2C\\aac|\4\2))aa\5\2\13\f\17\17\"\"\2\u0107") - buf.write("\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13") - buf.write("\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3") - buf.write("\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2") - buf.write("\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2") - buf.write("%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2") - buf.write("\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67") - buf.write("\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2") - buf.write("A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2") - buf.write("\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2") - buf.write("\2\2U\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\3c\3\2\2\2\5e\3\2") - buf.write("\2\2\7j\3\2\2\2\tp\3\2\2\2\13r\3\2\2\2\rt\3\2\2\2\17v") - buf.write("\3\2\2\2\21x\3\2\2\2\23z\3\2\2\2\25|\3\2\2\2\27~\3\2\2") - buf.write("\2\31\u0081\3\2\2\2\33\u0084\3\2\2\2\35\u0086\3\2\2\2") - buf.write("\37\u0088\3\2\2\2!\u008a\3\2\2\2#\u008c\3\2\2\2%\u008f") - buf.write("\3\2\2\2\'\u0094\3\2\2\2)\u0099\3\2\2\2+\u009f\3\2\2\2") - buf.write("-\u00a5\3\2\2\2/\u00a8\3\2\2\2\61\u00aa\3\2\2\2\63\u00ac") - buf.write("\3\2\2\2\65\u00ae\3\2\2\2\67\u00b0\3\2\2\29\u00b2\3\2") - buf.write("\2\2;\u00b4\3\2\2\2=\u00b7\3\2\2\2?\u00ba\3\2\2\2A\u00bc") - buf.write("\3\2\2\2C\u00bf\3\2\2\2E\u00c1\3\2\2\2G\u00c4\3\2\2\2") - buf.write("I\u00c8\3\2\2\2K\u00cc\3\2\2\2M\u00cf\3\2\2\2O\u00d4\3") - buf.write("\2\2\2Q\u00db\3\2\2\2S\u00df\3\2\2\2U\u00ea\3\2\2\2W\u00f1") - buf.write("\3\2\2\2Y\u00f3\3\2\2\2[\u00f5\3\2\2\2]\u00fa\3\2\2\2") - buf.write("_\u00fd\3\2\2\2a\u0103\3\2\2\2cd\7=\2\2d\4\3\2\2\2ef\7") - buf.write("u\2\2fg\7m\2\2gh\7k\2\2hi\7r\2\2i\6\3\2\2\2jk\7r\2\2k") - buf.write("l\7t\2\2lm\7k\2\2mn\7p\2\2no\7v\2\2o\b\3\2\2\2pq\7?\2") - buf.write("\2q\n\3\2\2\2rs\7`\2\2s\f\3\2\2\2tu\7,\2\2u\16\3\2\2\2") - buf.write("vw\7\61\2\2w\20\3\2\2\2xy\7\'\2\2y\22\3\2\2\2z{\7-\2\2") - buf.write("{\24\3\2\2\2|}\7/\2\2}\26\3\2\2\2~\177\7>\2\2\177\u0080") - buf.write("\7>\2\2\u0080\30\3\2\2\2\u0081\u0082\7@\2\2\u0082\u0083") - buf.write("\7@\2\2\u0083\32\3\2\2\2\u0084\u0085\7(\2\2\u0085\34\3") - buf.write("\2\2\2\u0086\u0087\7&\2\2\u0087\36\3\2\2\2\u0088\u0089") - buf.write("\7~\2\2\u0089 \3\2\2\2\u008a\u008b\7.\2\2\u008b\"\3\2") - buf.write("\2\2\u008c\u008d\7k\2\2\u008d\u008e\7h\2\2\u008e$\3\2") - buf.write("\2\2\u008f\u0090\7g\2\2\u0090\u0091\7n\2\2\u0091\u0092") - buf.write("\7k\2\2\u0092\u0093\7h\2\2\u0093&\3\2\2\2\u0094\u0095") - buf.write("\7g\2\2\u0095\u0096\7n\2\2\u0096\u0097\7u\2\2\u0097\u0098") - buf.write("\7g\2\2\u0098(\3\2\2\2\u0099\u009a\7y\2\2\u009a\u009b") - buf.write("\7j\2\2\u009b\u009c\7k\2\2\u009c\u009d\7n\2\2\u009d\u009e") - buf.write("\7g\2\2\u009e*\3\2\2\2\u009f\u00a0\7w\2\2\u00a0\u00a1") - buf.write("\7p\2\2\u00a1\u00a2\7v\2\2\u00a2\u00a3\7k\2\2\u00a3\u00a4") - buf.write("\7n\2\2\u00a4,\3\2\2\2\u00a5\u00a6\7f\2\2\u00a6\u00a7") - buf.write("\7q\2\2\u00a7.\3\2\2\2\u00a8\u00a9\7}\2\2\u00a9\60\3\2") - buf.write("\2\2\u00aa\u00ab\7\177\2\2\u00ab\62\3\2\2\2\u00ac\u00ad") - buf.write("\7*\2\2\u00ad\64\3\2\2\2\u00ae\u00af\7+\2\2\u00af\66\3") - buf.write("\2\2\2\u00b0\u00b1\7\60\2\2\u00b18\3\2\2\2\u00b2\u00b3") - buf.write("\7\u0080\2\2\u00b3:\3\2\2\2\u00b4\u00b5\7?\2\2\u00b5\u00b6") - buf.write("\7?\2\2\u00b6<\3\2\2\2\u00b7\u00b8\7#\2\2\u00b8\u00b9") - buf.write("\7?\2\2\u00b9>\3\2\2\2\u00ba\u00bb\7>\2\2\u00bb@\3\2\2") - buf.write("\2\u00bc\u00bd\7>\2\2\u00bd\u00be\7?\2\2\u00beB\3\2\2") - buf.write("\2\u00bf\u00c0\7@\2\2\u00c0D\3\2\2\2\u00c1\u00c2\7@\2") - buf.write("\2\u00c2\u00c3\7?\2\2\u00c3F\3\2\2\2\u00c4\u00c5\7p\2") - buf.write("\2\u00c5\u00c6\7q\2\2\u00c6\u00c7\7v\2\2\u00c7H\3\2\2") - buf.write("\2\u00c8\u00c9\7c\2\2\u00c9\u00ca\7p\2\2\u00ca\u00cb\7") - buf.write("f\2\2\u00cbJ\3\2\2\2\u00cc\u00cd\7q\2\2\u00cd\u00ce\7") - buf.write("t\2\2\u00ceL\3\2\2\2\u00cf\u00d0\7v\2\2\u00d0\u00d1\7") - buf.write("t\2\2\u00d1\u00d2\7w\2\2\u00d2\u00d3\7g\2\2\u00d3N\3\2") - buf.write("\2\2\u00d4\u00d5\7h\2\2\u00d5\u00d6\7c\2\2\u00d6\u00d7") - buf.write("\7n\2\2\u00d7\u00d8\7u\2\2\u00d8\u00d9\7g\2\2\u00d9P\3") - buf.write("\2\2\2\u00da\u00dc\5W,\2\u00db\u00da\3\2\2\2\u00dc\u00dd") - buf.write("\3\2\2\2\u00dd\u00db\3\2\2\2\u00dd\u00de\3\2\2\2\u00de") - buf.write("R\3\2\2\2\u00df\u00e5\7$\2\2\u00e0\u00e4\n\2\2\2\u00e1") - buf.write("\u00e2\7^\2\2\u00e2\u00e4\t\3\2\2\u00e3\u00e0\3\2\2\2") - buf.write("\u00e3\u00e1\3\2\2\2\u00e4\u00e7\3\2\2\2\u00e5\u00e3\3") - buf.write("\2\2\2\u00e5\u00e6\3\2\2\2\u00e6\u00e8\3\2\2\2\u00e7\u00e5") - buf.write("\3\2\2\2\u00e8\u00e9\7$\2\2\u00e9T\3\2\2\2\u00ea\u00ee") - buf.write("\5[.\2\u00eb\u00ed\5]/\2\u00ec\u00eb\3\2\2\2\u00ed\u00f0") - buf.write("\3\2\2\2\u00ee\u00ec\3\2\2\2\u00ee\u00ef\3\2\2\2\u00ef") - buf.write("V\3\2\2\2\u00f0\u00ee\3\2\2\2\u00f1\u00f2\t\4\2\2\u00f2") - buf.write("X\3\2\2\2\u00f3\u00f4\t\5\2\2\u00f4Z\3\2\2\2\u00f5\u00f6") - buf.write("\t\6\2\2\u00f6\\\3\2\2\2\u00f7\u00fb\5[.\2\u00f8\u00fb") - buf.write("\5W,\2\u00f9\u00fb\t\7\2\2\u00fa\u00f7\3\2\2\2\u00fa\u00f8") - buf.write("\3\2\2\2\u00fa\u00f9\3\2\2\2\u00fb^\3\2\2\2\u00fc\u00fe") - buf.write("\t\b\2\2\u00fd\u00fc\3\2\2\2\u00fe\u00ff\3\2\2\2\u00ff") - buf.write("\u00fd\3\2\2\2\u00ff\u0100\3\2\2\2\u0100\u0101\3\2\2\2") - buf.write("\u0101\u0102\b\60\2\2\u0102`\3\2\2\2\u0103\u0104\13\2") - buf.write("\2\2\u0104b\3\2\2\2\t\2\u00dd\u00e3\u00e5\u00ee\u00fa") - buf.write("\u00ff\3\b\2\2") + buf.write("\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\3\2") + buf.write("\3\2\3\3\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\4\3\5\3") + buf.write("\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\n\3\n\3\13\3\13\3") + buf.write("\f\3\f\3\f\3\r\3\r\3\r\3\16\3\16\3\17\3\17\3\20\3\20\3") + buf.write("\21\3\21\3\22\3\22\3\22\3\23\3\23\3\23\3\23\3\23\3\24") + buf.write("\3\24\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3\25\3\25\3\26") + buf.write("\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\30\3\30\3\31") + buf.write("\3\31\3\32\3\32\3\33\3\33\3\34\3\34\3\35\3\35\3\36\3\36") + buf.write("\3\37\3\37\3 \3 \3 \3!\3!\3!\3\"\3\"\3#\3#\3#\3$\3$\3") + buf.write("%\3%\3%\3&\3&\3&\3&\3\'\3\'\3\'\3\'\3(\3(\3(\3)\3)\3)") + buf.write("\3)\3)\3*\3*\3*\3*\3*\3*\3+\6+\u00e4\n+\r+\16+\u00e5\3") + buf.write(",\3,\3,\3,\7,\u00ec\n,\f,\16,\u00ef\13,\3,\3,\3-\3-\3") + buf.write("-\3-\7-\u00f7\n-\f-\16-\u00fa\13-\3-\3-\3.\3.\7.\u0100") + buf.write("\n.\f.\16.\u0103\13.\3/\3/\3\60\3\60\3\61\3\61\3\61\5") + buf.write("\61\u010c\n\61\3\62\6\62\u010f\n\62\r\62\16\62\u0110\3") + buf.write("\62\3\62\3\63\3\63\2\2\64\3\3\5\4\7\5\t\6\13\7\r\b\17") + buf.write("\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23") + buf.write("%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34\67\359\36") + buf.write(";\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\2_\2a\2c\60e\61") + buf.write("\3\2\n\4\2))^^\6\2))^^ppvv\4\2$$^^\6\2$$^^ppvv\3\2\62") + buf.write(";\5\2C\\aac|\4\2))aa\5\2\13\f\17\17\"\"\2\u011b\2\3\3") + buf.write("\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2") + buf.write("\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2") + buf.write("\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2") + buf.write("\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2") + buf.write("\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3") + buf.write("\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2") + buf.write("\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3") + buf.write("\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K") + buf.write("\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2") + buf.write("U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2c\3\2\2\2") + buf.write("\2e\3\2\2\2\3g\3\2\2\2\5i\3\2\2\2\7n\3\2\2\2\tt\3\2\2") + buf.write("\2\13v\3\2\2\2\rx\3\2\2\2\17z\3\2\2\2\21|\3\2\2\2\23~") + buf.write("\3\2\2\2\25\u0080\3\2\2\2\27\u0082\3\2\2\2\31\u0085\3") + buf.write("\2\2\2\33\u0088\3\2\2\2\35\u008a\3\2\2\2\37\u008c\3\2") + buf.write("\2\2!\u008e\3\2\2\2#\u0090\3\2\2\2%\u0093\3\2\2\2\'\u0098") + buf.write("\3\2\2\2)\u009d\3\2\2\2+\u00a3\3\2\2\2-\u00a9\3\2\2\2") + buf.write("/\u00ac\3\2\2\2\61\u00ae\3\2\2\2\63\u00b0\3\2\2\2\65\u00b2") + buf.write("\3\2\2\2\67\u00b4\3\2\2\29\u00b6\3\2\2\2;\u00b8\3\2\2") + buf.write("\2=\u00ba\3\2\2\2?\u00bc\3\2\2\2A\u00bf\3\2\2\2C\u00c2") + buf.write("\3\2\2\2E\u00c4\3\2\2\2G\u00c7\3\2\2\2I\u00c9\3\2\2\2") + buf.write("K\u00cc\3\2\2\2M\u00d0\3\2\2\2O\u00d4\3\2\2\2Q\u00d7\3") + buf.write("\2\2\2S\u00dc\3\2\2\2U\u00e3\3\2\2\2W\u00e7\3\2\2\2Y\u00f2") + buf.write("\3\2\2\2[\u00fd\3\2\2\2]\u0104\3\2\2\2_\u0106\3\2\2\2") + buf.write("a\u010b\3\2\2\2c\u010e\3\2\2\2e\u0114\3\2\2\2gh\7=\2\2") + buf.write("h\4\3\2\2\2ij\7u\2\2jk\7m\2\2kl\7k\2\2lm\7r\2\2m\6\3\2") + buf.write("\2\2no\7r\2\2op\7t\2\2pq\7k\2\2qr\7p\2\2rs\7v\2\2s\b\3") + buf.write("\2\2\2tu\7?\2\2u\n\3\2\2\2vw\7`\2\2w\f\3\2\2\2xy\7,\2") + buf.write("\2y\16\3\2\2\2z{\7\61\2\2{\20\3\2\2\2|}\7\'\2\2}\22\3") + buf.write("\2\2\2~\177\7-\2\2\177\24\3\2\2\2\u0080\u0081\7/\2\2\u0081") + buf.write("\26\3\2\2\2\u0082\u0083\7>\2\2\u0083\u0084\7>\2\2\u0084") + buf.write("\30\3\2\2\2\u0085\u0086\7@\2\2\u0086\u0087\7@\2\2\u0087") + buf.write("\32\3\2\2\2\u0088\u0089\7(\2\2\u0089\34\3\2\2\2\u008a") + buf.write("\u008b\7&\2\2\u008b\36\3\2\2\2\u008c\u008d\7~\2\2\u008d") + buf.write(" \3\2\2\2\u008e\u008f\7.\2\2\u008f\"\3\2\2\2\u0090\u0091") + buf.write("\7k\2\2\u0091\u0092\7h\2\2\u0092$\3\2\2\2\u0093\u0094") + buf.write("\7g\2\2\u0094\u0095\7n\2\2\u0095\u0096\7k\2\2\u0096\u0097") + buf.write("\7h\2\2\u0097&\3\2\2\2\u0098\u0099\7g\2\2\u0099\u009a") + buf.write("\7n\2\2\u009a\u009b\7u\2\2\u009b\u009c\7g\2\2\u009c(\3") + buf.write("\2\2\2\u009d\u009e\7y\2\2\u009e\u009f\7j\2\2\u009f\u00a0") + buf.write("\7k\2\2\u00a0\u00a1\7n\2\2\u00a1\u00a2\7g\2\2\u00a2*\3") + buf.write("\2\2\2\u00a3\u00a4\7w\2\2\u00a4\u00a5\7p\2\2\u00a5\u00a6") + buf.write("\7v\2\2\u00a6\u00a7\7k\2\2\u00a7\u00a8\7n\2\2\u00a8,\3") + buf.write("\2\2\2\u00a9\u00aa\7f\2\2\u00aa\u00ab\7q\2\2\u00ab.\3") + buf.write("\2\2\2\u00ac\u00ad\7}\2\2\u00ad\60\3\2\2\2\u00ae\u00af") + buf.write("\7\177\2\2\u00af\62\3\2\2\2\u00b0\u00b1\7*\2\2\u00b1\64") + buf.write("\3\2\2\2\u00b2\u00b3\7+\2\2\u00b3\66\3\2\2\2\u00b4\u00b5") + buf.write("\7]\2\2\u00b58\3\2\2\2\u00b6\u00b7\7_\2\2\u00b7:\3\2\2") + buf.write("\2\u00b8\u00b9\7\60\2\2\u00b9<\3\2\2\2\u00ba\u00bb\7\u0080") + buf.write("\2\2\u00bb>\3\2\2\2\u00bc\u00bd\7?\2\2\u00bd\u00be\7?") + buf.write("\2\2\u00be@\3\2\2\2\u00bf\u00c0\7#\2\2\u00c0\u00c1\7?") + buf.write("\2\2\u00c1B\3\2\2\2\u00c2\u00c3\7>\2\2\u00c3D\3\2\2\2") + buf.write("\u00c4\u00c5\7>\2\2\u00c5\u00c6\7?\2\2\u00c6F\3\2\2\2") + buf.write("\u00c7\u00c8\7@\2\2\u00c8H\3\2\2\2\u00c9\u00ca\7@\2\2") + buf.write("\u00ca\u00cb\7?\2\2\u00cbJ\3\2\2\2\u00cc\u00cd\7p\2\2") + buf.write("\u00cd\u00ce\7q\2\2\u00ce\u00cf\7v\2\2\u00cfL\3\2\2\2") + buf.write("\u00d0\u00d1\7c\2\2\u00d1\u00d2\7p\2\2\u00d2\u00d3\7f") + buf.write("\2\2\u00d3N\3\2\2\2\u00d4\u00d5\7q\2\2\u00d5\u00d6\7t") + buf.write("\2\2\u00d6P\3\2\2\2\u00d7\u00d8\7v\2\2\u00d8\u00d9\7t") + buf.write("\2\2\u00d9\u00da\7w\2\2\u00da\u00db\7g\2\2\u00dbR\3\2") + buf.write("\2\2\u00dc\u00dd\7h\2\2\u00dd\u00de\7c\2\2\u00de\u00df") + buf.write("\7n\2\2\u00df\u00e0\7u\2\2\u00e0\u00e1\7g\2\2\u00e1T\3") + buf.write("\2\2\2\u00e2\u00e4\5]/\2\u00e3\u00e2\3\2\2\2\u00e4\u00e5") + buf.write("\3\2\2\2\u00e5\u00e3\3\2\2\2\u00e5\u00e6\3\2\2\2\u00e6") + buf.write("V\3\2\2\2\u00e7\u00ed\7)\2\2\u00e8\u00ec\n\2\2\2\u00e9") + buf.write("\u00ea\7^\2\2\u00ea\u00ec\t\3\2\2\u00eb\u00e8\3\2\2\2") + buf.write("\u00eb\u00e9\3\2\2\2\u00ec\u00ef\3\2\2\2\u00ed\u00eb\3") + buf.write("\2\2\2\u00ed\u00ee\3\2\2\2\u00ee\u00f0\3\2\2\2\u00ef\u00ed") + buf.write("\3\2\2\2\u00f0\u00f1\7)\2\2\u00f1X\3\2\2\2\u00f2\u00f8") + buf.write("\7$\2\2\u00f3\u00f7\n\4\2\2\u00f4\u00f5\7^\2\2\u00f5\u00f7") + buf.write("\t\5\2\2\u00f6\u00f3\3\2\2\2\u00f6\u00f4\3\2\2\2\u00f7") + buf.write("\u00fa\3\2\2\2\u00f8\u00f6\3\2\2\2\u00f8\u00f9\3\2\2\2") + buf.write("\u00f9\u00fb\3\2\2\2\u00fa\u00f8\3\2\2\2\u00fb\u00fc\7") + buf.write("$\2\2\u00fcZ\3\2\2\2\u00fd\u0101\5_\60\2\u00fe\u0100\5") + buf.write("a\61\2\u00ff\u00fe\3\2\2\2\u0100\u0103\3\2\2\2\u0101\u00ff") + buf.write("\3\2\2\2\u0101\u0102\3\2\2\2\u0102\\\3\2\2\2\u0103\u0101") + buf.write("\3\2\2\2\u0104\u0105\t\6\2\2\u0105^\3\2\2\2\u0106\u0107") + buf.write("\t\7\2\2\u0107`\3\2\2\2\u0108\u010c\5_\60\2\u0109\u010c") + buf.write("\5]/\2\u010a\u010c\t\b\2\2\u010b\u0108\3\2\2\2\u010b\u0109") + buf.write("\3\2\2\2\u010b\u010a\3\2\2\2\u010cb\3\2\2\2\u010d\u010f") + buf.write("\t\t\2\2\u010e\u010d\3\2\2\2\u010f\u0110\3\2\2\2\u0110") + buf.write("\u010e\3\2\2\2\u0110\u0111\3\2\2\2\u0111\u0112\3\2\2\2") + buf.write("\u0112\u0113\b\62\2\2\u0113d\3\2\2\2\u0114\u0115\13\2") + buf.write("\2\2\u0115f\3\2\2\2\13\2\u00e5\u00eb\u00ed\u00f6\u00f8") + buf.write("\u0101\u010b\u0110\3\b\2\2") return buf.getvalue() @@ -160,11 +169,14 @@ class PyxellLexer(Lexer): T__36 = 37 T__37 = 38 T__38 = 39 - INT = 40 - STRING = 41 - ID = 42 - WS = 43 - ERR = 44 + T__39 = 40 + T__40 = 41 + INT = 42 + CHAR = 43 + STRING = 44 + ID = 45 + WS = 46 + ERR = 47 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -174,11 +186,11 @@ class PyxellLexer(Lexer): "';'", "'skip'", "'print'", "'='", "'^'", "'*'", "'/'", "'%'", "'+'", "'-'", "'<<'", "'>>'", "'&'", "'$'", "'|'", "','", "'if'", "'elif'", "'else'", "'while'", "'until'", "'do'", "'{'", "'}'", - "'('", "')'", "'.'", "'~'", "'=='", "'!='", "'<'", "'<='", "'>'", - "'>='", "'not'", "'and'", "'or'", "'true'", "'false'" ] + "'('", "')'", "'['", "']'", "'.'", "'~'", "'=='", "'!='", "'<'", + "'<='", "'>'", "'>='", "'not'", "'and'", "'or'", "'true'", "'false'" ] symbolicNames = [ "", - "INT", "STRING", "ID", "WS", "ERR" ] + "INT", "CHAR", "STRING", "ID", "WS", "ERR" ] ruleNames = [ "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8", "T__9", "T__10", "T__11", "T__12", "T__13", @@ -186,8 +198,8 @@ class PyxellLexer(Lexer): "T__20", "T__21", "T__22", "T__23", "T__24", "T__25", "T__26", "T__27", "T__28", "T__29", "T__30", "T__31", "T__32", "T__33", "T__34", "T__35", "T__36", "T__37", - "T__38", "INT", "STRING", "ID", "DIGIT", "LETTER", "ID_START", - "ID_CONT", "WS", "ERR" ] + "T__38", "T__39", "T__40", "INT", "CHAR", "STRING", "ID", + "DIGIT", "ID_START", "ID_CONT", "WS", "ERR" ] grammarFileName = "Pyxell.g4" diff --git a/src/antlr/PyxellLexer.tokens b/src/antlr/PyxellLexer.tokens index 6228dbc7..096724f7 100644 --- a/src/antlr/PyxellLexer.tokens +++ b/src/antlr/PyxellLexer.tokens @@ -37,11 +37,14 @@ T__35=36 T__36=37 T__37=38 T__38=39 -INT=40 -STRING=41 -ID=42 -WS=43 -ERR=44 +T__39=40 +T__40=41 +INT=42 +CHAR=43 +STRING=44 +ID=45 +WS=46 +ERR=47 ';'=1 'skip'=2 'print'=3 @@ -68,16 +71,18 @@ ERR=44 '}'=24 '('=25 ')'=26 -'.'=27 -'~'=28 -'=='=29 -'!='=30 -'<'=31 -'<='=32 -'>'=33 -'>='=34 -'not'=35 -'and'=36 -'or'=37 -'true'=38 -'false'=39 +'['=27 +']'=28 +'.'=29 +'~'=30 +'=='=31 +'!='=32 +'<'=33 +'<='=34 +'>'=35 +'>='=36 +'not'=37 +'and'=38 +'or'=39 +'true'=40 +'false'=41 diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index 037b69e8..73d07163 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -8,8 +8,8 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3.") - buf.write("\u009b\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\61") + buf.write("\u00a1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") buf.write("\4\b\t\b\4\t\t\t\3\2\7\2\24\n\2\f\2\16\2\27\13\2\3\2\3") buf.write("\2\3\3\3\3\3\3\3\3\5\3\37\n\3\3\4\3\4\3\4\5\4$\n\4\3\4") buf.write("\3\4\3\4\7\4)\n\4\f\4\16\4,\13\4\3\4\3\4\3\4\3\4\3\4\5") @@ -20,54 +20,57 @@ def serializedATN(): buf.write("\3\b\3\b\3\b\3\b\3\b\5\bj\n\b\3\b\3\b\3\b\3\b\3\b\3\b") buf.write("\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3") buf.write("\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b") - buf.write("\3\b\3\b\3\b\7\b\u0090\n\b\f\b\16\b\u0093\13\b\3\t\3\t") - buf.write("\3\t\3\t\5\t\u0099\n\t\3\t\2\3\16\n\2\4\6\b\n\f\16\20") - buf.write("\2\t\3\2\7\21\4\2\13\f\36\36\3\2\b\n\3\2\13\f\3\2\r\16") - buf.write("\3\2\37$\3\2()\2\u00b1\2\25\3\2\2\2\4\36\3\2\2\2\6\62") - buf.write("\3\2\2\2\b\64\3\2\2\2\nT\3\2\2\2\fV\3\2\2\2\16i\3\2\2") - buf.write("\2\20\u0098\3\2\2\2\22\24\5\4\3\2\23\22\3\2\2\2\24\27") - buf.write("\3\2\2\2\25\23\3\2\2\2\25\26\3\2\2\2\26\30\3\2\2\2\27") - buf.write("\25\3\2\2\2\30\31\7\2\2\3\31\3\3\2\2\2\32\33\5\6\4\2\33") - buf.write("\34\7\3\2\2\34\37\3\2\2\2\35\37\5\n\6\2\36\32\3\2\2\2") - buf.write("\36\35\3\2\2\2\37\5\3\2\2\2 \63\7\4\2\2!#\7\5\2\2\"$\5") - buf.write("\16\b\2#\"\3\2\2\2#$\3\2\2\2$\63\3\2\2\2%&\5\b\5\2&\'") - buf.write("\7\6\2\2\')\3\2\2\2(%\3\2\2\2),\3\2\2\2*(\3\2\2\2*+\3") - buf.write("\2\2\2+-\3\2\2\2,*\3\2\2\2-\63\5\16\b\2./\7,\2\2/\60\t") - buf.write("\2\2\2\60\61\7\6\2\2\61\63\5\16\b\2\62 \3\2\2\2\62!\3") - buf.write("\2\2\2\62*\3\2\2\2\62.\3\2\2\2\63\7\3\2\2\2\649\7,\2\2") - buf.write("\65\66\7\22\2\2\668\7,\2\2\67\65\3\2\2\28;\3\2\2\29\67") - buf.write("\3\2\2\29:\3\2\2\2:\t\3\2\2\2;9\3\2\2\2<=\7\23\2\2=>\5") - buf.write("\16\b\2>E\5\f\7\2?@\7\24\2\2@A\5\16\b\2AB\5\f\7\2BD\3") - buf.write("\2\2\2C?\3\2\2\2DG\3\2\2\2EC\3\2\2\2EF\3\2\2\2FJ\3\2\2") - buf.write("\2GE\3\2\2\2HI\7\25\2\2IK\5\f\7\2JH\3\2\2\2JK\3\2\2\2") - buf.write("KU\3\2\2\2LM\7\26\2\2MN\5\16\b\2NO\5\f\7\2OU\3\2\2\2P") - buf.write("Q\7\27\2\2QR\5\16\b\2RS\5\f\7\2SU\3\2\2\2T<\3\2\2\2TL") - buf.write("\3\2\2\2TP\3\2\2\2U\13\3\2\2\2VW\7\30\2\2WY\7\31\2\2X") - buf.write("Z\5\4\3\2YX\3\2\2\2Z[\3\2\2\2[Y\3\2\2\2[\\\3\2\2\2\\]") - buf.write("\3\2\2\2]^\7\32\2\2^\r\3\2\2\2_`\b\b\1\2`j\5\20\t\2ab") - buf.write("\7\33\2\2bc\5\16\b\2cd\7\34\2\2dj\3\2\2\2ef\t\3\2\2fj") - buf.write("\5\16\b\16gh\7%\2\2hj\5\16\b\6i_\3\2\2\2ia\3\2\2\2ie\3") - buf.write("\2\2\2ig\3\2\2\2j\u0091\3\2\2\2kl\f\17\2\2lm\7\7\2\2m") - buf.write("\u0090\5\16\b\17no\f\r\2\2op\t\4\2\2p\u0090\5\16\b\16") - buf.write("qr\f\f\2\2rs\t\5\2\2s\u0090\5\16\b\rtu\f\13\2\2uv\t\6") - buf.write("\2\2v\u0090\5\16\b\fwx\f\n\2\2xy\7\17\2\2y\u0090\5\16") - buf.write("\b\13z{\f\t\2\2{|\7\20\2\2|\u0090\5\16\b\n}~\f\b\2\2~") - buf.write("\177\7\21\2\2\177\u0090\5\16\b\t\u0080\u0081\f\7\2\2\u0081") - buf.write("\u0082\t\7\2\2\u0082\u0090\5\16\b\7\u0083\u0084\f\5\2") - buf.write("\2\u0084\u0085\7&\2\2\u0085\u0090\5\16\b\5\u0086\u0087") - buf.write("\f\4\2\2\u0087\u0088\7\'\2\2\u0088\u0090\5\16\b\4\u0089") - buf.write("\u008a\f\3\2\2\u008a\u008b\7\22\2\2\u008b\u0090\5\16\b") - buf.write("\3\u008c\u008d\f\20\2\2\u008d\u008e\7\35\2\2\u008e\u0090") - buf.write("\7,\2\2\u008fk\3\2\2\2\u008fn\3\2\2\2\u008fq\3\2\2\2\u008f") - buf.write("t\3\2\2\2\u008fw\3\2\2\2\u008fz\3\2\2\2\u008f}\3\2\2\2") - buf.write("\u008f\u0080\3\2\2\2\u008f\u0083\3\2\2\2\u008f\u0086\3") - buf.write("\2\2\2\u008f\u0089\3\2\2\2\u008f\u008c\3\2\2\2\u0090\u0093") - buf.write("\3\2\2\2\u0091\u008f\3\2\2\2\u0091\u0092\3\2\2\2\u0092") - buf.write("\17\3\2\2\2\u0093\u0091\3\2\2\2\u0094\u0099\7*\2\2\u0095") - buf.write("\u0099\t\b\2\2\u0096\u0099\7+\2\2\u0097\u0099\7,\2\2\u0098") - buf.write("\u0094\3\2\2\2\u0098\u0095\3\2\2\2\u0098\u0096\3\2\2\2") - buf.write("\u0098\u0097\3\2\2\2\u0099\21\3\2\2\2\20\25\36#*\629E") - buf.write("JT[i\u008f\u0091\u0098") + buf.write("\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\7\b\u0095\n\b\f\b\16") + buf.write("\b\u0098\13\b\3\t\3\t\3\t\3\t\3\t\5\t\u009f\n\t\3\t\2") + buf.write("\3\16\n\2\4\6\b\n\f\16\20\2\t\3\2\7\21\4\2\13\f \3\2") + buf.write("\b\n\3\2\13\f\3\2\r\16\3\2!&\3\2*+\2\u00b9\2\25\3\2\2") + buf.write("\2\4\36\3\2\2\2\6\62\3\2\2\2\b\64\3\2\2\2\nT\3\2\2\2\f") + buf.write("V\3\2\2\2\16i\3\2\2\2\20\u009e\3\2\2\2\22\24\5\4\3\2\23") + buf.write("\22\3\2\2\2\24\27\3\2\2\2\25\23\3\2\2\2\25\26\3\2\2\2") + buf.write("\26\30\3\2\2\2\27\25\3\2\2\2\30\31\7\2\2\3\31\3\3\2\2") + buf.write("\2\32\33\5\6\4\2\33\34\7\3\2\2\34\37\3\2\2\2\35\37\5\n") + buf.write("\6\2\36\32\3\2\2\2\36\35\3\2\2\2\37\5\3\2\2\2 \63\7\4") + buf.write("\2\2!#\7\5\2\2\"$\5\16\b\2#\"\3\2\2\2#$\3\2\2\2$\63\3") + buf.write("\2\2\2%&\5\b\5\2&\'\7\6\2\2\')\3\2\2\2(%\3\2\2\2),\3\2") + buf.write("\2\2*(\3\2\2\2*+\3\2\2\2+-\3\2\2\2,*\3\2\2\2-\63\5\16") + buf.write("\b\2./\7/\2\2/\60\t\2\2\2\60\61\7\6\2\2\61\63\5\16\b\2") + buf.write("\62 \3\2\2\2\62!\3\2\2\2\62*\3\2\2\2\62.\3\2\2\2\63\7") + buf.write("\3\2\2\2\649\7/\2\2\65\66\7\22\2\2\668\7/\2\2\67\65\3") + buf.write("\2\2\28;\3\2\2\29\67\3\2\2\29:\3\2\2\2:\t\3\2\2\2;9\3") + buf.write("\2\2\2<=\7\23\2\2=>\5\16\b\2>E\5\f\7\2?@\7\24\2\2@A\5") + buf.write("\16\b\2AB\5\f\7\2BD\3\2\2\2C?\3\2\2\2DG\3\2\2\2EC\3\2") + buf.write("\2\2EF\3\2\2\2FJ\3\2\2\2GE\3\2\2\2HI\7\25\2\2IK\5\f\7") + buf.write("\2JH\3\2\2\2JK\3\2\2\2KU\3\2\2\2LM\7\26\2\2MN\5\16\b\2") + buf.write("NO\5\f\7\2OU\3\2\2\2PQ\7\27\2\2QR\5\16\b\2RS\5\f\7\2S") + buf.write("U\3\2\2\2T<\3\2\2\2TL\3\2\2\2TP\3\2\2\2U\13\3\2\2\2VW") + buf.write("\7\30\2\2WY\7\31\2\2XZ\5\4\3\2YX\3\2\2\2Z[\3\2\2\2[Y\3") + buf.write("\2\2\2[\\\3\2\2\2\\]\3\2\2\2]^\7\32\2\2^\r\3\2\2\2_`\b") + buf.write("\b\1\2`j\5\20\t\2ab\7\33\2\2bc\5\16\b\2cd\7\34\2\2dj\3") + buf.write("\2\2\2ef\t\3\2\2fj\5\16\b\16gh\7\'\2\2hj\5\16\b\6i_\3") + buf.write("\2\2\2ia\3\2\2\2ie\3\2\2\2ig\3\2\2\2j\u0096\3\2\2\2kl") + buf.write("\f\17\2\2lm\7\7\2\2m\u0095\5\16\b\17no\f\r\2\2op\t\4\2") + buf.write("\2p\u0095\5\16\b\16qr\f\f\2\2rs\t\5\2\2s\u0095\5\16\b") + buf.write("\rtu\f\13\2\2uv\t\6\2\2v\u0095\5\16\b\fwx\f\n\2\2xy\7") + buf.write("\17\2\2y\u0095\5\16\b\13z{\f\t\2\2{|\7\20\2\2|\u0095\5") + buf.write("\16\b\n}~\f\b\2\2~\177\7\21\2\2\177\u0095\5\16\b\t\u0080") + buf.write("\u0081\f\7\2\2\u0081\u0082\t\7\2\2\u0082\u0095\5\16\b") + buf.write("\7\u0083\u0084\f\5\2\2\u0084\u0085\7(\2\2\u0085\u0095") + buf.write("\5\16\b\5\u0086\u0087\f\4\2\2\u0087\u0088\7)\2\2\u0088") + buf.write("\u0095\5\16\b\4\u0089\u008a\f\3\2\2\u008a\u008b\7\22\2") + buf.write("\2\u008b\u0095\5\16\b\3\u008c\u008d\f\21\2\2\u008d\u008e") + buf.write("\7\35\2\2\u008e\u008f\5\16\b\2\u008f\u0090\7\36\2\2\u0090") + buf.write("\u0095\3\2\2\2\u0091\u0092\f\20\2\2\u0092\u0093\7\37\2") + buf.write("\2\u0093\u0095\7/\2\2\u0094k\3\2\2\2\u0094n\3\2\2\2\u0094") + buf.write("q\3\2\2\2\u0094t\3\2\2\2\u0094w\3\2\2\2\u0094z\3\2\2\2") + buf.write("\u0094}\3\2\2\2\u0094\u0080\3\2\2\2\u0094\u0083\3\2\2") + buf.write("\2\u0094\u0086\3\2\2\2\u0094\u0089\3\2\2\2\u0094\u008c") + buf.write("\3\2\2\2\u0094\u0091\3\2\2\2\u0095\u0098\3\2\2\2\u0096") + buf.write("\u0094\3\2\2\2\u0096\u0097\3\2\2\2\u0097\17\3\2\2\2\u0098") + buf.write("\u0096\3\2\2\2\u0099\u009f\7,\2\2\u009a\u009f\t\b\2\2") + buf.write("\u009b\u009f\7-\2\2\u009c\u009f\7.\2\2\u009d\u009f\7/") + buf.write("\2\2\u009e\u0099\3\2\2\2\u009e\u009a\3\2\2\2\u009e\u009b") + buf.write("\3\2\2\2\u009e\u009c\3\2\2\2\u009e\u009d\3\2\2\2\u009f") + buf.write("\21\3\2\2\2\20\25\36#*\629EJT[i\u0094\u0096\u009e") return buf.getvalue() @@ -85,9 +88,9 @@ class PyxellParser ( Parser ): "'*'", "'/'", "'%'", "'+'", "'-'", "'<<'", "'>>'", "'&'", "'$'", "'|'", "','", "'if'", "'elif'", "'else'", "'while'", "'until'", "'do'", "'{'", "'}'", "'('", - "')'", "'.'", "'~'", "'=='", "'!='", "'<'", "'<='", - "'>'", "'>='", "'not'", "'and'", "'or'", "'true'", - "'false'" ] + "')'", "'['", "']'", "'.'", "'~'", "'=='", "'!='", + "'<'", "'<='", "'>'", "'>='", "'not'", "'and'", "'or'", + "'true'", "'false'" ] symbolicNames = [ "", "", "", "", "", "", "", "", @@ -99,7 +102,8 @@ class PyxellParser ( Parser ): "", "", "", "", "", "", "", "", "", "", "", "", - "INT", "STRING", "ID", "WS", "ERR" ] + "", "", "INT", "CHAR", "STRING", + "ID", "WS", "ERR" ] RULE_program = 0 RULE_stmt = 1 @@ -153,11 +157,14 @@ class PyxellParser ( Parser ): T__36=37 T__37=38 T__38=39 - INT=40 - STRING=41 - ID=42 - WS=43 - ERR=44 + T__39=40 + T__40=41 + INT=42 + CHAR=43 + STRING=44 + ID=45 + WS=46 + ERR=47 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -206,7 +213,7 @@ def program(self): self.state = 19 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__37) | (1 << PyxellParser.T__38) | (1 << PyxellParser.INT) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__39) | (1 << PyxellParser.T__40) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): self.state = 16 self.stmt() self.state = 21 @@ -258,7 +265,7 @@ def stmt(self): self.state = 28 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__24, PyxellParser.T__27, PyxellParser.T__34, PyxellParser.T__37, PyxellParser.T__38, PyxellParser.INT, PyxellParser.STRING, PyxellParser.ID]: + if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__24, PyxellParser.T__29, PyxellParser.T__36, PyxellParser.T__39, PyxellParser.T__40, PyxellParser.INT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: self.enterOuterAlt(localctx, 1) self.state = 24 self.simple_stmt() @@ -397,7 +404,7 @@ def simple_stmt(self): self.state = 33 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__37) | (1 << PyxellParser.T__38) | (1 << PyxellParser.INT) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__39) | (1 << PyxellParser.T__40) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): self.state = 32 self.expr(0) @@ -710,7 +717,7 @@ def block(self): self.state = 89 self._errHandler.sync(self) _la = self._input.LA(1) - if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__37) | (1 << PyxellParser.T__38) | (1 << PyxellParser.INT) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0)): + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__39) | (1 << PyxellParser.T__40) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0)): break self.state = 91 @@ -798,6 +805,26 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) + class ExprIndexContext(ExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext + super().__init__(parser) + self.copyFrom(ctx) + + def expr(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(PyxellParser.ExprContext) + else: + return self.getTypedRuleContext(PyxellParser.ExprContext,i) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExprIndex" ): + return visitor.visitExprIndex(self) + else: + return visitor.visitChildren(self) + + class ExprAtomContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext @@ -907,7 +934,7 @@ def expr(self, _p:int=0): self.state = 103 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__37, PyxellParser.T__38, PyxellParser.INT, PyxellParser.STRING, PyxellParser.ID]: + if token in [PyxellParser.T__39, PyxellParser.T__40, PyxellParser.INT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: localctx = PyxellParser.ExprAtomContext(self, localctx) self._ctx = localctx _prevctx = localctx @@ -926,14 +953,14 @@ def expr(self, _p:int=0): self.state = 97 self.match(PyxellParser.T__25) pass - elif token in [PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__27]: + elif token in [PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__29]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx self.state = 99 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__27))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__29))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -941,12 +968,12 @@ def expr(self, _p:int=0): self.state = 100 self.expr(12) pass - elif token in [PyxellParser.T__34]: + elif token in [PyxellParser.T__36]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx self.state = 101 - localctx.op = self.match(PyxellParser.T__34) + localctx.op = self.match(PyxellParser.T__36) self.state = 102 self.expr(4) pass @@ -954,7 +981,7 @@ def expr(self, _p:int=0): raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 143 + self.state = 148 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,12,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: @@ -962,7 +989,7 @@ def expr(self, _p:int=0): if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 141 + self.state = 146 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,11,self._ctx) if la_ == 1: @@ -1084,7 +1111,7 @@ def expr(self, _p:int=0): self.state = 127 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__31) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__33))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__30) | (1 << PyxellParser.T__31) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__35))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -1101,7 +1128,7 @@ def expr(self, _p:int=0): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") self.state = 130 - localctx.op = self.match(PyxellParser.T__35) + localctx.op = self.match(PyxellParser.T__37) self.state = 131 self.expr(3) pass @@ -1114,7 +1141,7 @@ def expr(self, _p:int=0): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") self.state = 133 - localctx.op = self.match(PyxellParser.T__36) + localctx.op = self.match(PyxellParser.T__38) self.state = 134 self.expr(2) pass @@ -1133,20 +1160,35 @@ def expr(self, _p:int=0): pass elif la_ == 12: - localctx = PyxellParser.ExprAttrContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + localctx = PyxellParser.ExprIndexContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 138 - if not self.precpred(self._ctx, 14): + if not self.precpred(self._ctx, 15): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 14)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 15)") self.state = 139 self.match(PyxellParser.T__26) self.state = 140 + self.expr(0) + self.state = 141 + self.match(PyxellParser.T__27) + pass + + elif la_ == 13: + localctx = PyxellParser.ExprAttrContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) + self.state = 143 + if not self.precpred(self._ctx, 14): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 14)") + self.state = 144 + self.match(PyxellParser.T__28) + self.state = 145 self.match(PyxellParser.ID) pass - self.state = 145 + self.state = 150 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,12,self._ctx) @@ -1221,6 +1263,22 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) + class AtomCharContext(AtomContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.AtomContext + super().__init__(parser) + self.copyFrom(ctx) + + def CHAR(self): + return self.getToken(PyxellParser.CHAR, 0) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAtomChar" ): + return visitor.visitAtomChar(self) + else: + return visitor.visitChildren(self) + + class AtomStringContext(AtomContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.AtomContext @@ -1244,36 +1302,42 @@ def atom(self): self.enterRule(localctx, 14, self.RULE_atom) self._la = 0 # Token type try: - self.state = 150 + self.state = 156 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: localctx = PyxellParser.AtomIntContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 146 + self.state = 151 self.match(PyxellParser.INT) pass - elif token in [PyxellParser.T__37, PyxellParser.T__38]: + elif token in [PyxellParser.T__39, PyxellParser.T__40]: localctx = PyxellParser.AtomBoolContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 147 + self.state = 152 _la = self._input.LA(1) - if not(_la==PyxellParser.T__37 or _la==PyxellParser.T__38): + if not(_la==PyxellParser.T__39 or _la==PyxellParser.T__40): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() pass + elif token in [PyxellParser.CHAR]: + localctx = PyxellParser.AtomCharContext(self, localctx) + self.enterOuterAlt(localctx, 3) + self.state = 153 + self.match(PyxellParser.CHAR) + pass elif token in [PyxellParser.STRING]: localctx = PyxellParser.AtomStringContext(self, localctx) - self.enterOuterAlt(localctx, 3) - self.state = 148 + self.enterOuterAlt(localctx, 4) + self.state = 154 self.match(PyxellParser.STRING) pass elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) - self.enterOuterAlt(localctx, 4) - self.state = 149 + self.enterOuterAlt(localctx, 5) + self.state = 155 self.match(PyxellParser.ID) pass else: @@ -1345,6 +1409,10 @@ def expr_sempred(self, localctx:ExprContext, predIndex:int): if predIndex == 11: + return self.precpred(self._ctx, 15) + + + if predIndex == 12: return self.precpred(self._ctx, 14) diff --git a/src/antlr/PyxellVisitor.py b/src/antlr/PyxellVisitor.py index 469733a4..b4c2cb03 100644 --- a/src/antlr/PyxellVisitor.py +++ b/src/antlr/PyxellVisitor.py @@ -79,6 +79,11 @@ def visitExprTuple(self, ctx:PyxellParser.ExprTupleContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#ExprIndex. + def visitExprIndex(self, ctx:PyxellParser.ExprIndexContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#ExprAtom. def visitExprAtom(self, ctx:PyxellParser.ExprAtomContext): return self.visitChildren(ctx) @@ -114,6 +119,11 @@ def visitAtomBool(self, ctx:PyxellParser.AtomBoolContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#AtomChar. + def visitAtomChar(self, ctx:PyxellParser.AtomCharContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#AtomString. def visitAtomString(self, ctx:PyxellParser.AtomStringContext): return self.visitChildren(ctx) diff --git a/src/compiler.py b/src/compiler.py index 5a227657..e8cb6bde 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -19,6 +19,7 @@ def __init__(self): 'write': ll.Function(self.module, tFunc([tString]), 'func.write'), 'writeInt': ll.Function(self.module, tFunc([tInt]), 'func.writeInt'), 'writeBool': ll.Function(self.module, tFunc([tBool]), 'func.writeBool'), + 'writeChar': ll.Function(self.module, tFunc([tChar]), 'func.writeChar'), 'putchar': ll.Function(self.module, tFunc([tChar]), 'putchar'), 'Int_pow': ll.Function(self.module, tFunc([tInt, tInt], tInt), 'func.Int_pow'), } @@ -115,7 +116,7 @@ def cmp(self, ctx, op, left, right): if left.type != right.type: self.throw(ctx, err.NotComparable(left.type, right.type)) - if left.type == tInt: + if left.type in (tInt, tChar): return self.builder.icmp_signed(op, left, right) elif left.type == tBool: return self.builder.icmp_unsigned(op, left, right) @@ -127,6 +128,8 @@ def print(self, ctx, value): self.builder.call(self.builtins['writeInt'], [value]) elif value.type == tBool: self.builder.call(self.builtins['writeBool'], [value]) + elif value.type == tChar: + self.builder.call(self.builtins['writeChar'], [value]) elif value.type.isString(): self.builder.call(self.builtins['write'], [value]) elif value.type.isTuple(): @@ -275,6 +278,20 @@ def visitStmtUntil(self, ctx): def visitExprParentheses(self, ctx): return self.visit(ctx.expr()) + def visitExprIndex(self, ctx): + exprs = ctx.expr() + + index = self.visit(exprs[1]) + if index.type != tInt: + self.throw(exprs[1], err.IllegalAssignment(index.type, tInt)) + + value = self.visit(exprs[0]) + + if value.type.isString(): + return self.builder.load(self.builder.gep(self.builder.extract_value(value, [0]), [index])) + + self.throw(ctx, err.NotIndexable(value.type)) + def visitExprAttr(self, ctx): value = self.visit(ctx.expr()) id = str(ctx.ID()) @@ -405,6 +422,10 @@ def visitAtomInt(self, ctx): def visitAtomBool(self, ctx): return vBool(ctx.getText() == 'true') + def visitAtomChar(self, ctx): + lit = ast.literal_eval(str(ctx.CHAR())) + return vChar(lit) + def visitAtomString(self, ctx): lit = ast.literal_eval(str(ctx.STRING())) value = ll.Constant(ll.ArrayType(tChar, len(lit)), [vChar(c) for c in lit]) diff --git a/src/errors.py b/src/errors.py index d60f55be..a7de7f49 100644 --- a/src/errors.py +++ b/src/errors.py @@ -18,6 +18,7 @@ class PyxellError(Exception): NoBinaryOperator = lambda op, t1, t2: f"No binary operator `{op}` defined for `{t1.show()}` and `{t2.show()}`" NoUnaryOperator = lambda op, t: f"No unary operator `{op}` defined for `{t.show()}`" NotComparable = lambda t1, t2: f"Cannot compare `{t1.show()}` with `{t2.show()}`" + NotIndexable = lambda t: f"Type `{t.show()}` is not indexable" NotPrintable = lambda t: f"Variable of type `{t.show()}` cannot be printed" UndeclaredIdentifier = lambda id: f"Undeclared identifier `{id}`" From c3410a9d33039155034b87db44afc162f2eb4277 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Tue, 8 Oct 2019 22:26:18 +0200 Subject: [PATCH 017/100] Conditional operator --- src/Pyxell.g4 | 1 + src/antlr/Pyxell.interp | 6 +- src/antlr/Pyxell.tokens | 20 ++- src/antlr/PyxellLexer.interp | 8 +- src/antlr/PyxellLexer.py | 220 ++++++++++++------------ src/antlr/PyxellLexer.tokens | 20 ++- src/antlr/PyxellParser.py | 324 ++++++++++++++++++++--------------- src/antlr/PyxellVisitor.py | 5 + src/compiler.py | 35 ++-- src/errors.py | 1 + 10 files changed, 362 insertions(+), 278 deletions(-) diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index 1569feb5..19b174a3 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -47,6 +47,7 @@ expr | op='not' expr # ExprUnaryOp | expr op='and' expr # ExprLogicalOp | expr op='or' expr # ExprLogicalOp + | expr '?' expr ':' expr # ExprCond | expr ',' expr # ExprTuple ; diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index 0a52332c..63a499d6 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -39,6 +39,8 @@ null 'not' 'and' 'or' +'?' +':' 'true' 'false' null @@ -91,6 +93,8 @@ null null null null +null +null INT CHAR STRING @@ -110,4 +114,4 @@ atom atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 49, 161, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 3, 2, 7, 2, 20, 10, 2, 12, 2, 14, 2, 23, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 31, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 36, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 41, 10, 4, 12, 4, 14, 4, 44, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 51, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 56, 10, 5, 12, 5, 14, 5, 59, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 68, 10, 6, 12, 6, 14, 6, 71, 11, 6, 3, 6, 3, 6, 5, 6, 75, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 85, 10, 6, 3, 7, 3, 7, 3, 7, 6, 7, 90, 10, 7, 13, 7, 14, 7, 91, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 106, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 149, 10, 8, 12, 8, 14, 8, 152, 11, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 159, 10, 9, 3, 9, 2, 3, 14, 10, 2, 4, 6, 8, 10, 12, 14, 16, 2, 9, 3, 2, 7, 17, 4, 2, 11, 12, 32, 32, 3, 2, 8, 10, 3, 2, 11, 12, 3, 2, 13, 14, 3, 2, 33, 38, 3, 2, 42, 43, 2, 185, 2, 21, 3, 2, 2, 2, 4, 30, 3, 2, 2, 2, 6, 50, 3, 2, 2, 2, 8, 52, 3, 2, 2, 2, 10, 84, 3, 2, 2, 2, 12, 86, 3, 2, 2, 2, 14, 105, 3, 2, 2, 2, 16, 158, 3, 2, 2, 2, 18, 20, 5, 4, 3, 2, 19, 18, 3, 2, 2, 2, 20, 23, 3, 2, 2, 2, 21, 19, 3, 2, 2, 2, 21, 22, 3, 2, 2, 2, 22, 24, 3, 2, 2, 2, 23, 21, 3, 2, 2, 2, 24, 25, 7, 2, 2, 3, 25, 3, 3, 2, 2, 2, 26, 27, 5, 6, 4, 2, 27, 28, 7, 3, 2, 2, 28, 31, 3, 2, 2, 2, 29, 31, 5, 10, 6, 2, 30, 26, 3, 2, 2, 2, 30, 29, 3, 2, 2, 2, 31, 5, 3, 2, 2, 2, 32, 51, 7, 4, 2, 2, 33, 35, 7, 5, 2, 2, 34, 36, 5, 14, 8, 2, 35, 34, 3, 2, 2, 2, 35, 36, 3, 2, 2, 2, 36, 51, 3, 2, 2, 2, 37, 38, 5, 8, 5, 2, 38, 39, 7, 6, 2, 2, 39, 41, 3, 2, 2, 2, 40, 37, 3, 2, 2, 2, 41, 44, 3, 2, 2, 2, 42, 40, 3, 2, 2, 2, 42, 43, 3, 2, 2, 2, 43, 45, 3, 2, 2, 2, 44, 42, 3, 2, 2, 2, 45, 51, 5, 14, 8, 2, 46, 47, 7, 47, 2, 2, 47, 48, 9, 2, 2, 2, 48, 49, 7, 6, 2, 2, 49, 51, 5, 14, 8, 2, 50, 32, 3, 2, 2, 2, 50, 33, 3, 2, 2, 2, 50, 42, 3, 2, 2, 2, 50, 46, 3, 2, 2, 2, 51, 7, 3, 2, 2, 2, 52, 57, 7, 47, 2, 2, 53, 54, 7, 18, 2, 2, 54, 56, 7, 47, 2, 2, 55, 53, 3, 2, 2, 2, 56, 59, 3, 2, 2, 2, 57, 55, 3, 2, 2, 2, 57, 58, 3, 2, 2, 2, 58, 9, 3, 2, 2, 2, 59, 57, 3, 2, 2, 2, 60, 61, 7, 19, 2, 2, 61, 62, 5, 14, 8, 2, 62, 69, 5, 12, 7, 2, 63, 64, 7, 20, 2, 2, 64, 65, 5, 14, 8, 2, 65, 66, 5, 12, 7, 2, 66, 68, 3, 2, 2, 2, 67, 63, 3, 2, 2, 2, 68, 71, 3, 2, 2, 2, 69, 67, 3, 2, 2, 2, 69, 70, 3, 2, 2, 2, 70, 74, 3, 2, 2, 2, 71, 69, 3, 2, 2, 2, 72, 73, 7, 21, 2, 2, 73, 75, 5, 12, 7, 2, 74, 72, 3, 2, 2, 2, 74, 75, 3, 2, 2, 2, 75, 85, 3, 2, 2, 2, 76, 77, 7, 22, 2, 2, 77, 78, 5, 14, 8, 2, 78, 79, 5, 12, 7, 2, 79, 85, 3, 2, 2, 2, 80, 81, 7, 23, 2, 2, 81, 82, 5, 14, 8, 2, 82, 83, 5, 12, 7, 2, 83, 85, 3, 2, 2, 2, 84, 60, 3, 2, 2, 2, 84, 76, 3, 2, 2, 2, 84, 80, 3, 2, 2, 2, 85, 11, 3, 2, 2, 2, 86, 87, 7, 24, 2, 2, 87, 89, 7, 25, 2, 2, 88, 90, 5, 4, 3, 2, 89, 88, 3, 2, 2, 2, 90, 91, 3, 2, 2, 2, 91, 89, 3, 2, 2, 2, 91, 92, 3, 2, 2, 2, 92, 93, 3, 2, 2, 2, 93, 94, 7, 26, 2, 2, 94, 13, 3, 2, 2, 2, 95, 96, 8, 8, 1, 2, 96, 106, 5, 16, 9, 2, 97, 98, 7, 27, 2, 2, 98, 99, 5, 14, 8, 2, 99, 100, 7, 28, 2, 2, 100, 106, 3, 2, 2, 2, 101, 102, 9, 3, 2, 2, 102, 106, 5, 14, 8, 14, 103, 104, 7, 39, 2, 2, 104, 106, 5, 14, 8, 6, 105, 95, 3, 2, 2, 2, 105, 97, 3, 2, 2, 2, 105, 101, 3, 2, 2, 2, 105, 103, 3, 2, 2, 2, 106, 150, 3, 2, 2, 2, 107, 108, 12, 15, 2, 2, 108, 109, 7, 7, 2, 2, 109, 149, 5, 14, 8, 15, 110, 111, 12, 13, 2, 2, 111, 112, 9, 4, 2, 2, 112, 149, 5, 14, 8, 14, 113, 114, 12, 12, 2, 2, 114, 115, 9, 5, 2, 2, 115, 149, 5, 14, 8, 13, 116, 117, 12, 11, 2, 2, 117, 118, 9, 6, 2, 2, 118, 149, 5, 14, 8, 12, 119, 120, 12, 10, 2, 2, 120, 121, 7, 15, 2, 2, 121, 149, 5, 14, 8, 11, 122, 123, 12, 9, 2, 2, 123, 124, 7, 16, 2, 2, 124, 149, 5, 14, 8, 10, 125, 126, 12, 8, 2, 2, 126, 127, 7, 17, 2, 2, 127, 149, 5, 14, 8, 9, 128, 129, 12, 7, 2, 2, 129, 130, 9, 7, 2, 2, 130, 149, 5, 14, 8, 7, 131, 132, 12, 5, 2, 2, 132, 133, 7, 40, 2, 2, 133, 149, 5, 14, 8, 5, 134, 135, 12, 4, 2, 2, 135, 136, 7, 41, 2, 2, 136, 149, 5, 14, 8, 4, 137, 138, 12, 3, 2, 2, 138, 139, 7, 18, 2, 2, 139, 149, 5, 14, 8, 3, 140, 141, 12, 17, 2, 2, 141, 142, 7, 29, 2, 2, 142, 143, 5, 14, 8, 2, 143, 144, 7, 30, 2, 2, 144, 149, 3, 2, 2, 2, 145, 146, 12, 16, 2, 2, 146, 147, 7, 31, 2, 2, 147, 149, 7, 47, 2, 2, 148, 107, 3, 2, 2, 2, 148, 110, 3, 2, 2, 2, 148, 113, 3, 2, 2, 2, 148, 116, 3, 2, 2, 2, 148, 119, 3, 2, 2, 2, 148, 122, 3, 2, 2, 2, 148, 125, 3, 2, 2, 2, 148, 128, 3, 2, 2, 2, 148, 131, 3, 2, 2, 2, 148, 134, 3, 2, 2, 2, 148, 137, 3, 2, 2, 2, 148, 140, 3, 2, 2, 2, 148, 145, 3, 2, 2, 2, 149, 152, 3, 2, 2, 2, 150, 148, 3, 2, 2, 2, 150, 151, 3, 2, 2, 2, 151, 15, 3, 2, 2, 2, 152, 150, 3, 2, 2, 2, 153, 159, 7, 44, 2, 2, 154, 159, 9, 8, 2, 2, 155, 159, 7, 45, 2, 2, 156, 159, 7, 46, 2, 2, 157, 159, 7, 47, 2, 2, 158, 153, 3, 2, 2, 2, 158, 154, 3, 2, 2, 2, 158, 155, 3, 2, 2, 2, 158, 156, 3, 2, 2, 2, 158, 157, 3, 2, 2, 2, 159, 17, 3, 2, 2, 2, 16, 21, 30, 35, 42, 50, 57, 69, 74, 84, 91, 105, 148, 150, 158] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 51, 167, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 3, 2, 7, 2, 20, 10, 2, 12, 2, 14, 2, 23, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 31, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 36, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 41, 10, 4, 12, 4, 14, 4, 44, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 51, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 56, 10, 5, 12, 5, 14, 5, 59, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 68, 10, 6, 12, 6, 14, 6, 71, 11, 6, 3, 6, 3, 6, 5, 6, 75, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 85, 10, 6, 3, 7, 3, 7, 3, 7, 6, 7, 90, 10, 7, 13, 7, 14, 7, 91, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 106, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 155, 10, 8, 12, 8, 14, 8, 158, 11, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 165, 10, 9, 3, 9, 2, 3, 14, 10, 2, 4, 6, 8, 10, 12, 14, 16, 2, 9, 3, 2, 7, 17, 4, 2, 11, 12, 32, 32, 3, 2, 8, 10, 3, 2, 11, 12, 3, 2, 13, 14, 3, 2, 33, 38, 3, 2, 44, 45, 2, 192, 2, 21, 3, 2, 2, 2, 4, 30, 3, 2, 2, 2, 6, 50, 3, 2, 2, 2, 8, 52, 3, 2, 2, 2, 10, 84, 3, 2, 2, 2, 12, 86, 3, 2, 2, 2, 14, 105, 3, 2, 2, 2, 16, 164, 3, 2, 2, 2, 18, 20, 5, 4, 3, 2, 19, 18, 3, 2, 2, 2, 20, 23, 3, 2, 2, 2, 21, 19, 3, 2, 2, 2, 21, 22, 3, 2, 2, 2, 22, 24, 3, 2, 2, 2, 23, 21, 3, 2, 2, 2, 24, 25, 7, 2, 2, 3, 25, 3, 3, 2, 2, 2, 26, 27, 5, 6, 4, 2, 27, 28, 7, 3, 2, 2, 28, 31, 3, 2, 2, 2, 29, 31, 5, 10, 6, 2, 30, 26, 3, 2, 2, 2, 30, 29, 3, 2, 2, 2, 31, 5, 3, 2, 2, 2, 32, 51, 7, 4, 2, 2, 33, 35, 7, 5, 2, 2, 34, 36, 5, 14, 8, 2, 35, 34, 3, 2, 2, 2, 35, 36, 3, 2, 2, 2, 36, 51, 3, 2, 2, 2, 37, 38, 5, 8, 5, 2, 38, 39, 7, 6, 2, 2, 39, 41, 3, 2, 2, 2, 40, 37, 3, 2, 2, 2, 41, 44, 3, 2, 2, 2, 42, 40, 3, 2, 2, 2, 42, 43, 3, 2, 2, 2, 43, 45, 3, 2, 2, 2, 44, 42, 3, 2, 2, 2, 45, 51, 5, 14, 8, 2, 46, 47, 7, 49, 2, 2, 47, 48, 9, 2, 2, 2, 48, 49, 7, 6, 2, 2, 49, 51, 5, 14, 8, 2, 50, 32, 3, 2, 2, 2, 50, 33, 3, 2, 2, 2, 50, 42, 3, 2, 2, 2, 50, 46, 3, 2, 2, 2, 51, 7, 3, 2, 2, 2, 52, 57, 7, 49, 2, 2, 53, 54, 7, 18, 2, 2, 54, 56, 7, 49, 2, 2, 55, 53, 3, 2, 2, 2, 56, 59, 3, 2, 2, 2, 57, 55, 3, 2, 2, 2, 57, 58, 3, 2, 2, 2, 58, 9, 3, 2, 2, 2, 59, 57, 3, 2, 2, 2, 60, 61, 7, 19, 2, 2, 61, 62, 5, 14, 8, 2, 62, 69, 5, 12, 7, 2, 63, 64, 7, 20, 2, 2, 64, 65, 5, 14, 8, 2, 65, 66, 5, 12, 7, 2, 66, 68, 3, 2, 2, 2, 67, 63, 3, 2, 2, 2, 68, 71, 3, 2, 2, 2, 69, 67, 3, 2, 2, 2, 69, 70, 3, 2, 2, 2, 70, 74, 3, 2, 2, 2, 71, 69, 3, 2, 2, 2, 72, 73, 7, 21, 2, 2, 73, 75, 5, 12, 7, 2, 74, 72, 3, 2, 2, 2, 74, 75, 3, 2, 2, 2, 75, 85, 3, 2, 2, 2, 76, 77, 7, 22, 2, 2, 77, 78, 5, 14, 8, 2, 78, 79, 5, 12, 7, 2, 79, 85, 3, 2, 2, 2, 80, 81, 7, 23, 2, 2, 81, 82, 5, 14, 8, 2, 82, 83, 5, 12, 7, 2, 83, 85, 3, 2, 2, 2, 84, 60, 3, 2, 2, 2, 84, 76, 3, 2, 2, 2, 84, 80, 3, 2, 2, 2, 85, 11, 3, 2, 2, 2, 86, 87, 7, 24, 2, 2, 87, 89, 7, 25, 2, 2, 88, 90, 5, 4, 3, 2, 89, 88, 3, 2, 2, 2, 90, 91, 3, 2, 2, 2, 91, 89, 3, 2, 2, 2, 91, 92, 3, 2, 2, 2, 92, 93, 3, 2, 2, 2, 93, 94, 7, 26, 2, 2, 94, 13, 3, 2, 2, 2, 95, 96, 8, 8, 1, 2, 96, 106, 5, 16, 9, 2, 97, 98, 7, 27, 2, 2, 98, 99, 5, 14, 8, 2, 99, 100, 7, 28, 2, 2, 100, 106, 3, 2, 2, 2, 101, 102, 9, 3, 2, 2, 102, 106, 5, 14, 8, 15, 103, 104, 7, 39, 2, 2, 104, 106, 5, 14, 8, 7, 105, 95, 3, 2, 2, 2, 105, 97, 3, 2, 2, 2, 105, 101, 3, 2, 2, 2, 105, 103, 3, 2, 2, 2, 106, 156, 3, 2, 2, 2, 107, 108, 12, 16, 2, 2, 108, 109, 7, 7, 2, 2, 109, 155, 5, 14, 8, 16, 110, 111, 12, 14, 2, 2, 111, 112, 9, 4, 2, 2, 112, 155, 5, 14, 8, 15, 113, 114, 12, 13, 2, 2, 114, 115, 9, 5, 2, 2, 115, 155, 5, 14, 8, 14, 116, 117, 12, 12, 2, 2, 117, 118, 9, 6, 2, 2, 118, 155, 5, 14, 8, 13, 119, 120, 12, 11, 2, 2, 120, 121, 7, 15, 2, 2, 121, 155, 5, 14, 8, 12, 122, 123, 12, 10, 2, 2, 123, 124, 7, 16, 2, 2, 124, 155, 5, 14, 8, 11, 125, 126, 12, 9, 2, 2, 126, 127, 7, 17, 2, 2, 127, 155, 5, 14, 8, 10, 128, 129, 12, 8, 2, 2, 129, 130, 9, 7, 2, 2, 130, 155, 5, 14, 8, 8, 131, 132, 12, 6, 2, 2, 132, 133, 7, 40, 2, 2, 133, 155, 5, 14, 8, 6, 134, 135, 12, 5, 2, 2, 135, 136, 7, 41, 2, 2, 136, 155, 5, 14, 8, 5, 137, 138, 12, 4, 2, 2, 138, 139, 7, 42, 2, 2, 139, 140, 5, 14, 8, 2, 140, 141, 7, 43, 2, 2, 141, 142, 5, 14, 8, 4, 142, 155, 3, 2, 2, 2, 143, 144, 12, 3, 2, 2, 144, 145, 7, 18, 2, 2, 145, 155, 5, 14, 8, 3, 146, 147, 12, 18, 2, 2, 147, 148, 7, 29, 2, 2, 148, 149, 5, 14, 8, 2, 149, 150, 7, 30, 2, 2, 150, 155, 3, 2, 2, 2, 151, 152, 12, 17, 2, 2, 152, 153, 7, 31, 2, 2, 153, 155, 7, 49, 2, 2, 154, 107, 3, 2, 2, 2, 154, 110, 3, 2, 2, 2, 154, 113, 3, 2, 2, 2, 154, 116, 3, 2, 2, 2, 154, 119, 3, 2, 2, 2, 154, 122, 3, 2, 2, 2, 154, 125, 3, 2, 2, 2, 154, 128, 3, 2, 2, 2, 154, 131, 3, 2, 2, 2, 154, 134, 3, 2, 2, 2, 154, 137, 3, 2, 2, 2, 154, 143, 3, 2, 2, 2, 154, 146, 3, 2, 2, 2, 154, 151, 3, 2, 2, 2, 155, 158, 3, 2, 2, 2, 156, 154, 3, 2, 2, 2, 156, 157, 3, 2, 2, 2, 157, 15, 3, 2, 2, 2, 158, 156, 3, 2, 2, 2, 159, 165, 7, 46, 2, 2, 160, 165, 9, 8, 2, 2, 161, 165, 7, 47, 2, 2, 162, 165, 7, 48, 2, 2, 163, 165, 7, 49, 2, 2, 164, 159, 3, 2, 2, 2, 164, 160, 3, 2, 2, 2, 164, 161, 3, 2, 2, 2, 164, 162, 3, 2, 2, 2, 164, 163, 3, 2, 2, 2, 165, 17, 3, 2, 2, 2, 16, 21, 30, 35, 42, 50, 57, 69, 74, 84, 91, 105, 154, 156, 164] \ No newline at end of file diff --git a/src/antlr/Pyxell.tokens b/src/antlr/Pyxell.tokens index 096724f7..1c16cb39 100644 --- a/src/antlr/Pyxell.tokens +++ b/src/antlr/Pyxell.tokens @@ -39,12 +39,14 @@ T__37=38 T__38=39 T__39=40 T__40=41 -INT=42 -CHAR=43 -STRING=44 -ID=45 -WS=46 -ERR=47 +T__41=42 +T__42=43 +INT=44 +CHAR=45 +STRING=46 +ID=47 +WS=48 +ERR=49 ';'=1 'skip'=2 'print'=3 @@ -84,5 +86,7 @@ ERR=47 'not'=37 'and'=38 'or'=39 -'true'=40 -'false'=41 +'?'=40 +':'=41 +'true'=42 +'false'=43 diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp index 6629a4c0..1ffa5121 100644 --- a/src/antlr/PyxellLexer.interp +++ b/src/antlr/PyxellLexer.interp @@ -39,6 +39,8 @@ null 'not' 'and' 'or' +'?' +':' 'true' 'false' null @@ -91,6 +93,8 @@ null null null null +null +null INT CHAR STRING @@ -140,6 +144,8 @@ T__37 T__38 T__39 T__40 +T__41 +T__42 INT CHAR STRING @@ -158,4 +164,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 49, 278, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 6, 43, 228, 10, 43, 13, 43, 14, 43, 229, 3, 44, 3, 44, 3, 44, 3, 44, 7, 44, 236, 10, 44, 12, 44, 14, 44, 239, 11, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 7, 45, 247, 10, 45, 12, 45, 14, 45, 250, 11, 45, 3, 45, 3, 45, 3, 46, 3, 46, 7, 46, 256, 10, 46, 12, 46, 14, 46, 259, 11, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 5, 49, 268, 10, 49, 3, 50, 6, 50, 271, 10, 50, 13, 50, 14, 50, 272, 3, 50, 3, 50, 3, 51, 3, 51, 2, 2, 52, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 2, 95, 2, 97, 2, 99, 48, 101, 49, 3, 2, 10, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 283, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 3, 103, 3, 2, 2, 2, 5, 105, 3, 2, 2, 2, 7, 110, 3, 2, 2, 2, 9, 116, 3, 2, 2, 2, 11, 118, 3, 2, 2, 2, 13, 120, 3, 2, 2, 2, 15, 122, 3, 2, 2, 2, 17, 124, 3, 2, 2, 2, 19, 126, 3, 2, 2, 2, 21, 128, 3, 2, 2, 2, 23, 130, 3, 2, 2, 2, 25, 133, 3, 2, 2, 2, 27, 136, 3, 2, 2, 2, 29, 138, 3, 2, 2, 2, 31, 140, 3, 2, 2, 2, 33, 142, 3, 2, 2, 2, 35, 144, 3, 2, 2, 2, 37, 147, 3, 2, 2, 2, 39, 152, 3, 2, 2, 2, 41, 157, 3, 2, 2, 2, 43, 163, 3, 2, 2, 2, 45, 169, 3, 2, 2, 2, 47, 172, 3, 2, 2, 2, 49, 174, 3, 2, 2, 2, 51, 176, 3, 2, 2, 2, 53, 178, 3, 2, 2, 2, 55, 180, 3, 2, 2, 2, 57, 182, 3, 2, 2, 2, 59, 184, 3, 2, 2, 2, 61, 186, 3, 2, 2, 2, 63, 188, 3, 2, 2, 2, 65, 191, 3, 2, 2, 2, 67, 194, 3, 2, 2, 2, 69, 196, 3, 2, 2, 2, 71, 199, 3, 2, 2, 2, 73, 201, 3, 2, 2, 2, 75, 204, 3, 2, 2, 2, 77, 208, 3, 2, 2, 2, 79, 212, 3, 2, 2, 2, 81, 215, 3, 2, 2, 2, 83, 220, 3, 2, 2, 2, 85, 227, 3, 2, 2, 2, 87, 231, 3, 2, 2, 2, 89, 242, 3, 2, 2, 2, 91, 253, 3, 2, 2, 2, 93, 260, 3, 2, 2, 2, 95, 262, 3, 2, 2, 2, 97, 267, 3, 2, 2, 2, 99, 270, 3, 2, 2, 2, 101, 276, 3, 2, 2, 2, 103, 104, 7, 61, 2, 2, 104, 4, 3, 2, 2, 2, 105, 106, 7, 117, 2, 2, 106, 107, 7, 109, 2, 2, 107, 108, 7, 107, 2, 2, 108, 109, 7, 114, 2, 2, 109, 6, 3, 2, 2, 2, 110, 111, 7, 114, 2, 2, 111, 112, 7, 116, 2, 2, 112, 113, 7, 107, 2, 2, 113, 114, 7, 112, 2, 2, 114, 115, 7, 118, 2, 2, 115, 8, 3, 2, 2, 2, 116, 117, 7, 63, 2, 2, 117, 10, 3, 2, 2, 2, 118, 119, 7, 96, 2, 2, 119, 12, 3, 2, 2, 2, 120, 121, 7, 44, 2, 2, 121, 14, 3, 2, 2, 2, 122, 123, 7, 49, 2, 2, 123, 16, 3, 2, 2, 2, 124, 125, 7, 39, 2, 2, 125, 18, 3, 2, 2, 2, 126, 127, 7, 45, 2, 2, 127, 20, 3, 2, 2, 2, 128, 129, 7, 47, 2, 2, 129, 22, 3, 2, 2, 2, 130, 131, 7, 62, 2, 2, 131, 132, 7, 62, 2, 2, 132, 24, 3, 2, 2, 2, 133, 134, 7, 64, 2, 2, 134, 135, 7, 64, 2, 2, 135, 26, 3, 2, 2, 2, 136, 137, 7, 40, 2, 2, 137, 28, 3, 2, 2, 2, 138, 139, 7, 38, 2, 2, 139, 30, 3, 2, 2, 2, 140, 141, 7, 126, 2, 2, 141, 32, 3, 2, 2, 2, 142, 143, 7, 46, 2, 2, 143, 34, 3, 2, 2, 2, 144, 145, 7, 107, 2, 2, 145, 146, 7, 104, 2, 2, 146, 36, 3, 2, 2, 2, 147, 148, 7, 103, 2, 2, 148, 149, 7, 110, 2, 2, 149, 150, 7, 107, 2, 2, 150, 151, 7, 104, 2, 2, 151, 38, 3, 2, 2, 2, 152, 153, 7, 103, 2, 2, 153, 154, 7, 110, 2, 2, 154, 155, 7, 117, 2, 2, 155, 156, 7, 103, 2, 2, 156, 40, 3, 2, 2, 2, 157, 158, 7, 121, 2, 2, 158, 159, 7, 106, 2, 2, 159, 160, 7, 107, 2, 2, 160, 161, 7, 110, 2, 2, 161, 162, 7, 103, 2, 2, 162, 42, 3, 2, 2, 2, 163, 164, 7, 119, 2, 2, 164, 165, 7, 112, 2, 2, 165, 166, 7, 118, 2, 2, 166, 167, 7, 107, 2, 2, 167, 168, 7, 110, 2, 2, 168, 44, 3, 2, 2, 2, 169, 170, 7, 102, 2, 2, 170, 171, 7, 113, 2, 2, 171, 46, 3, 2, 2, 2, 172, 173, 7, 125, 2, 2, 173, 48, 3, 2, 2, 2, 174, 175, 7, 127, 2, 2, 175, 50, 3, 2, 2, 2, 176, 177, 7, 42, 2, 2, 177, 52, 3, 2, 2, 2, 178, 179, 7, 43, 2, 2, 179, 54, 3, 2, 2, 2, 180, 181, 7, 93, 2, 2, 181, 56, 3, 2, 2, 2, 182, 183, 7, 95, 2, 2, 183, 58, 3, 2, 2, 2, 184, 185, 7, 48, 2, 2, 185, 60, 3, 2, 2, 2, 186, 187, 7, 128, 2, 2, 187, 62, 3, 2, 2, 2, 188, 189, 7, 63, 2, 2, 189, 190, 7, 63, 2, 2, 190, 64, 3, 2, 2, 2, 191, 192, 7, 35, 2, 2, 192, 193, 7, 63, 2, 2, 193, 66, 3, 2, 2, 2, 194, 195, 7, 62, 2, 2, 195, 68, 3, 2, 2, 2, 196, 197, 7, 62, 2, 2, 197, 198, 7, 63, 2, 2, 198, 70, 3, 2, 2, 2, 199, 200, 7, 64, 2, 2, 200, 72, 3, 2, 2, 2, 201, 202, 7, 64, 2, 2, 202, 203, 7, 63, 2, 2, 203, 74, 3, 2, 2, 2, 204, 205, 7, 112, 2, 2, 205, 206, 7, 113, 2, 2, 206, 207, 7, 118, 2, 2, 207, 76, 3, 2, 2, 2, 208, 209, 7, 99, 2, 2, 209, 210, 7, 112, 2, 2, 210, 211, 7, 102, 2, 2, 211, 78, 3, 2, 2, 2, 212, 213, 7, 113, 2, 2, 213, 214, 7, 116, 2, 2, 214, 80, 3, 2, 2, 2, 215, 216, 7, 118, 2, 2, 216, 217, 7, 116, 2, 2, 217, 218, 7, 119, 2, 2, 218, 219, 7, 103, 2, 2, 219, 82, 3, 2, 2, 2, 220, 221, 7, 104, 2, 2, 221, 222, 7, 99, 2, 2, 222, 223, 7, 110, 2, 2, 223, 224, 7, 117, 2, 2, 224, 225, 7, 103, 2, 2, 225, 84, 3, 2, 2, 2, 226, 228, 5, 93, 47, 2, 227, 226, 3, 2, 2, 2, 228, 229, 3, 2, 2, 2, 229, 227, 3, 2, 2, 2, 229, 230, 3, 2, 2, 2, 230, 86, 3, 2, 2, 2, 231, 237, 7, 41, 2, 2, 232, 236, 10, 2, 2, 2, 233, 234, 7, 94, 2, 2, 234, 236, 9, 3, 2, 2, 235, 232, 3, 2, 2, 2, 235, 233, 3, 2, 2, 2, 236, 239, 3, 2, 2, 2, 237, 235, 3, 2, 2, 2, 237, 238, 3, 2, 2, 2, 238, 240, 3, 2, 2, 2, 239, 237, 3, 2, 2, 2, 240, 241, 7, 41, 2, 2, 241, 88, 3, 2, 2, 2, 242, 248, 7, 36, 2, 2, 243, 247, 10, 4, 2, 2, 244, 245, 7, 94, 2, 2, 245, 247, 9, 5, 2, 2, 246, 243, 3, 2, 2, 2, 246, 244, 3, 2, 2, 2, 247, 250, 3, 2, 2, 2, 248, 246, 3, 2, 2, 2, 248, 249, 3, 2, 2, 2, 249, 251, 3, 2, 2, 2, 250, 248, 3, 2, 2, 2, 251, 252, 7, 36, 2, 2, 252, 90, 3, 2, 2, 2, 253, 257, 5, 95, 48, 2, 254, 256, 5, 97, 49, 2, 255, 254, 3, 2, 2, 2, 256, 259, 3, 2, 2, 2, 257, 255, 3, 2, 2, 2, 257, 258, 3, 2, 2, 2, 258, 92, 3, 2, 2, 2, 259, 257, 3, 2, 2, 2, 260, 261, 9, 6, 2, 2, 261, 94, 3, 2, 2, 2, 262, 263, 9, 7, 2, 2, 263, 96, 3, 2, 2, 2, 264, 268, 5, 95, 48, 2, 265, 268, 5, 93, 47, 2, 266, 268, 9, 8, 2, 2, 267, 264, 3, 2, 2, 2, 267, 265, 3, 2, 2, 2, 267, 266, 3, 2, 2, 2, 268, 98, 3, 2, 2, 2, 269, 271, 9, 9, 2, 2, 270, 269, 3, 2, 2, 2, 271, 272, 3, 2, 2, 2, 272, 270, 3, 2, 2, 2, 272, 273, 3, 2, 2, 2, 273, 274, 3, 2, 2, 2, 274, 275, 8, 50, 2, 2, 275, 100, 3, 2, 2, 2, 276, 277, 11, 2, 2, 2, 277, 102, 3, 2, 2, 2, 11, 2, 229, 235, 237, 246, 248, 257, 267, 272, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 51, 286, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 45, 6, 45, 236, 10, 45, 13, 45, 14, 45, 237, 3, 46, 3, 46, 3, 46, 3, 46, 7, 46, 244, 10, 46, 12, 46, 14, 46, 247, 11, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 7, 47, 255, 10, 47, 12, 47, 14, 47, 258, 11, 47, 3, 47, 3, 47, 3, 48, 3, 48, 7, 48, 264, 10, 48, 12, 48, 14, 48, 267, 11, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 5, 51, 276, 10, 51, 3, 52, 6, 52, 279, 10, 52, 13, 52, 14, 52, 280, 3, 52, 3, 52, 3, 53, 3, 53, 2, 2, 54, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 2, 99, 2, 101, 2, 103, 50, 105, 51, 3, 2, 10, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 291, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 3, 107, 3, 2, 2, 2, 5, 109, 3, 2, 2, 2, 7, 114, 3, 2, 2, 2, 9, 120, 3, 2, 2, 2, 11, 122, 3, 2, 2, 2, 13, 124, 3, 2, 2, 2, 15, 126, 3, 2, 2, 2, 17, 128, 3, 2, 2, 2, 19, 130, 3, 2, 2, 2, 21, 132, 3, 2, 2, 2, 23, 134, 3, 2, 2, 2, 25, 137, 3, 2, 2, 2, 27, 140, 3, 2, 2, 2, 29, 142, 3, 2, 2, 2, 31, 144, 3, 2, 2, 2, 33, 146, 3, 2, 2, 2, 35, 148, 3, 2, 2, 2, 37, 151, 3, 2, 2, 2, 39, 156, 3, 2, 2, 2, 41, 161, 3, 2, 2, 2, 43, 167, 3, 2, 2, 2, 45, 173, 3, 2, 2, 2, 47, 176, 3, 2, 2, 2, 49, 178, 3, 2, 2, 2, 51, 180, 3, 2, 2, 2, 53, 182, 3, 2, 2, 2, 55, 184, 3, 2, 2, 2, 57, 186, 3, 2, 2, 2, 59, 188, 3, 2, 2, 2, 61, 190, 3, 2, 2, 2, 63, 192, 3, 2, 2, 2, 65, 195, 3, 2, 2, 2, 67, 198, 3, 2, 2, 2, 69, 200, 3, 2, 2, 2, 71, 203, 3, 2, 2, 2, 73, 205, 3, 2, 2, 2, 75, 208, 3, 2, 2, 2, 77, 212, 3, 2, 2, 2, 79, 216, 3, 2, 2, 2, 81, 219, 3, 2, 2, 2, 83, 221, 3, 2, 2, 2, 85, 223, 3, 2, 2, 2, 87, 228, 3, 2, 2, 2, 89, 235, 3, 2, 2, 2, 91, 239, 3, 2, 2, 2, 93, 250, 3, 2, 2, 2, 95, 261, 3, 2, 2, 2, 97, 268, 3, 2, 2, 2, 99, 270, 3, 2, 2, 2, 101, 275, 3, 2, 2, 2, 103, 278, 3, 2, 2, 2, 105, 284, 3, 2, 2, 2, 107, 108, 7, 61, 2, 2, 108, 4, 3, 2, 2, 2, 109, 110, 7, 117, 2, 2, 110, 111, 7, 109, 2, 2, 111, 112, 7, 107, 2, 2, 112, 113, 7, 114, 2, 2, 113, 6, 3, 2, 2, 2, 114, 115, 7, 114, 2, 2, 115, 116, 7, 116, 2, 2, 116, 117, 7, 107, 2, 2, 117, 118, 7, 112, 2, 2, 118, 119, 7, 118, 2, 2, 119, 8, 3, 2, 2, 2, 120, 121, 7, 63, 2, 2, 121, 10, 3, 2, 2, 2, 122, 123, 7, 96, 2, 2, 123, 12, 3, 2, 2, 2, 124, 125, 7, 44, 2, 2, 125, 14, 3, 2, 2, 2, 126, 127, 7, 49, 2, 2, 127, 16, 3, 2, 2, 2, 128, 129, 7, 39, 2, 2, 129, 18, 3, 2, 2, 2, 130, 131, 7, 45, 2, 2, 131, 20, 3, 2, 2, 2, 132, 133, 7, 47, 2, 2, 133, 22, 3, 2, 2, 2, 134, 135, 7, 62, 2, 2, 135, 136, 7, 62, 2, 2, 136, 24, 3, 2, 2, 2, 137, 138, 7, 64, 2, 2, 138, 139, 7, 64, 2, 2, 139, 26, 3, 2, 2, 2, 140, 141, 7, 40, 2, 2, 141, 28, 3, 2, 2, 2, 142, 143, 7, 38, 2, 2, 143, 30, 3, 2, 2, 2, 144, 145, 7, 126, 2, 2, 145, 32, 3, 2, 2, 2, 146, 147, 7, 46, 2, 2, 147, 34, 3, 2, 2, 2, 148, 149, 7, 107, 2, 2, 149, 150, 7, 104, 2, 2, 150, 36, 3, 2, 2, 2, 151, 152, 7, 103, 2, 2, 152, 153, 7, 110, 2, 2, 153, 154, 7, 107, 2, 2, 154, 155, 7, 104, 2, 2, 155, 38, 3, 2, 2, 2, 156, 157, 7, 103, 2, 2, 157, 158, 7, 110, 2, 2, 158, 159, 7, 117, 2, 2, 159, 160, 7, 103, 2, 2, 160, 40, 3, 2, 2, 2, 161, 162, 7, 121, 2, 2, 162, 163, 7, 106, 2, 2, 163, 164, 7, 107, 2, 2, 164, 165, 7, 110, 2, 2, 165, 166, 7, 103, 2, 2, 166, 42, 3, 2, 2, 2, 167, 168, 7, 119, 2, 2, 168, 169, 7, 112, 2, 2, 169, 170, 7, 118, 2, 2, 170, 171, 7, 107, 2, 2, 171, 172, 7, 110, 2, 2, 172, 44, 3, 2, 2, 2, 173, 174, 7, 102, 2, 2, 174, 175, 7, 113, 2, 2, 175, 46, 3, 2, 2, 2, 176, 177, 7, 125, 2, 2, 177, 48, 3, 2, 2, 2, 178, 179, 7, 127, 2, 2, 179, 50, 3, 2, 2, 2, 180, 181, 7, 42, 2, 2, 181, 52, 3, 2, 2, 2, 182, 183, 7, 43, 2, 2, 183, 54, 3, 2, 2, 2, 184, 185, 7, 93, 2, 2, 185, 56, 3, 2, 2, 2, 186, 187, 7, 95, 2, 2, 187, 58, 3, 2, 2, 2, 188, 189, 7, 48, 2, 2, 189, 60, 3, 2, 2, 2, 190, 191, 7, 128, 2, 2, 191, 62, 3, 2, 2, 2, 192, 193, 7, 63, 2, 2, 193, 194, 7, 63, 2, 2, 194, 64, 3, 2, 2, 2, 195, 196, 7, 35, 2, 2, 196, 197, 7, 63, 2, 2, 197, 66, 3, 2, 2, 2, 198, 199, 7, 62, 2, 2, 199, 68, 3, 2, 2, 2, 200, 201, 7, 62, 2, 2, 201, 202, 7, 63, 2, 2, 202, 70, 3, 2, 2, 2, 203, 204, 7, 64, 2, 2, 204, 72, 3, 2, 2, 2, 205, 206, 7, 64, 2, 2, 206, 207, 7, 63, 2, 2, 207, 74, 3, 2, 2, 2, 208, 209, 7, 112, 2, 2, 209, 210, 7, 113, 2, 2, 210, 211, 7, 118, 2, 2, 211, 76, 3, 2, 2, 2, 212, 213, 7, 99, 2, 2, 213, 214, 7, 112, 2, 2, 214, 215, 7, 102, 2, 2, 215, 78, 3, 2, 2, 2, 216, 217, 7, 113, 2, 2, 217, 218, 7, 116, 2, 2, 218, 80, 3, 2, 2, 2, 219, 220, 7, 65, 2, 2, 220, 82, 3, 2, 2, 2, 221, 222, 7, 60, 2, 2, 222, 84, 3, 2, 2, 2, 223, 224, 7, 118, 2, 2, 224, 225, 7, 116, 2, 2, 225, 226, 7, 119, 2, 2, 226, 227, 7, 103, 2, 2, 227, 86, 3, 2, 2, 2, 228, 229, 7, 104, 2, 2, 229, 230, 7, 99, 2, 2, 230, 231, 7, 110, 2, 2, 231, 232, 7, 117, 2, 2, 232, 233, 7, 103, 2, 2, 233, 88, 3, 2, 2, 2, 234, 236, 5, 97, 49, 2, 235, 234, 3, 2, 2, 2, 236, 237, 3, 2, 2, 2, 237, 235, 3, 2, 2, 2, 237, 238, 3, 2, 2, 2, 238, 90, 3, 2, 2, 2, 239, 245, 7, 41, 2, 2, 240, 244, 10, 2, 2, 2, 241, 242, 7, 94, 2, 2, 242, 244, 9, 3, 2, 2, 243, 240, 3, 2, 2, 2, 243, 241, 3, 2, 2, 2, 244, 247, 3, 2, 2, 2, 245, 243, 3, 2, 2, 2, 245, 246, 3, 2, 2, 2, 246, 248, 3, 2, 2, 2, 247, 245, 3, 2, 2, 2, 248, 249, 7, 41, 2, 2, 249, 92, 3, 2, 2, 2, 250, 256, 7, 36, 2, 2, 251, 255, 10, 4, 2, 2, 252, 253, 7, 94, 2, 2, 253, 255, 9, 5, 2, 2, 254, 251, 3, 2, 2, 2, 254, 252, 3, 2, 2, 2, 255, 258, 3, 2, 2, 2, 256, 254, 3, 2, 2, 2, 256, 257, 3, 2, 2, 2, 257, 259, 3, 2, 2, 2, 258, 256, 3, 2, 2, 2, 259, 260, 7, 36, 2, 2, 260, 94, 3, 2, 2, 2, 261, 265, 5, 99, 50, 2, 262, 264, 5, 101, 51, 2, 263, 262, 3, 2, 2, 2, 264, 267, 3, 2, 2, 2, 265, 263, 3, 2, 2, 2, 265, 266, 3, 2, 2, 2, 266, 96, 3, 2, 2, 2, 267, 265, 3, 2, 2, 2, 268, 269, 9, 6, 2, 2, 269, 98, 3, 2, 2, 2, 270, 271, 9, 7, 2, 2, 271, 100, 3, 2, 2, 2, 272, 276, 5, 99, 50, 2, 273, 276, 5, 97, 49, 2, 274, 276, 9, 8, 2, 2, 275, 272, 3, 2, 2, 2, 275, 273, 3, 2, 2, 2, 275, 274, 3, 2, 2, 2, 276, 102, 3, 2, 2, 2, 277, 279, 9, 9, 2, 2, 278, 277, 3, 2, 2, 2, 279, 280, 3, 2, 2, 2, 280, 278, 3, 2, 2, 2, 280, 281, 3, 2, 2, 2, 281, 282, 3, 2, 2, 2, 282, 283, 8, 52, 2, 2, 283, 104, 3, 2, 2, 2, 284, 285, 11, 2, 2, 2, 285, 106, 3, 2, 2, 2, 11, 2, 237, 243, 245, 254, 256, 265, 275, 280, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py index 056a61fb..625f1614 100644 --- a/src/antlr/PyxellLexer.py +++ b/src/antlr/PyxellLexer.py @@ -8,35 +8,36 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\61") - buf.write("\u0116\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\63") + buf.write("\u011e\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") buf.write("\4\31\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36") buf.write("\t\36\4\37\t\37\4 \t \4!\t!\4\"\t\"\4#\t#\4$\t$\4%\t%") buf.write("\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4,\t,\4-\t-\4.") - buf.write("\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\3\2") - buf.write("\3\2\3\3\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\4\3\5\3") - buf.write("\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\n\3\n\3\13\3\13\3") - buf.write("\f\3\f\3\f\3\r\3\r\3\r\3\16\3\16\3\17\3\17\3\20\3\20\3") - buf.write("\21\3\21\3\22\3\22\3\22\3\23\3\23\3\23\3\23\3\23\3\24") - buf.write("\3\24\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3\25\3\25\3\26") - buf.write("\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\30\3\30\3\31") - buf.write("\3\31\3\32\3\32\3\33\3\33\3\34\3\34\3\35\3\35\3\36\3\36") - buf.write("\3\37\3\37\3 \3 \3 \3!\3!\3!\3\"\3\"\3#\3#\3#\3$\3$\3") - buf.write("%\3%\3%\3&\3&\3&\3&\3\'\3\'\3\'\3\'\3(\3(\3(\3)\3)\3)") - buf.write("\3)\3)\3*\3*\3*\3*\3*\3*\3+\6+\u00e4\n+\r+\16+\u00e5\3") - buf.write(",\3,\3,\3,\7,\u00ec\n,\f,\16,\u00ef\13,\3,\3,\3-\3-\3") - buf.write("-\3-\7-\u00f7\n-\f-\16-\u00fa\13-\3-\3-\3.\3.\7.\u0100") - buf.write("\n.\f.\16.\u0103\13.\3/\3/\3\60\3\60\3\61\3\61\3\61\5") - buf.write("\61\u010c\n\61\3\62\6\62\u010f\n\62\r\62\16\62\u0110\3") - buf.write("\62\3\62\3\63\3\63\2\2\64\3\3\5\4\7\5\t\6\13\7\r\b\17") - buf.write("\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23") - buf.write("%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34\67\359\36") - buf.write(";\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\2_\2a\2c\60e\61") + buf.write("\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64") + buf.write("\t\64\4\65\t\65\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\4\3\4\3") + buf.write("\4\3\4\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t") + buf.write("\3\n\3\n\3\13\3\13\3\f\3\f\3\f\3\r\3\r\3\r\3\16\3\16\3") + buf.write("\17\3\17\3\20\3\20\3\21\3\21\3\22\3\22\3\22\3\23\3\23") + buf.write("\3\23\3\23\3\23\3\24\3\24\3\24\3\24\3\24\3\25\3\25\3\25") + buf.write("\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\26\3\27\3\27") + buf.write("\3\27\3\30\3\30\3\31\3\31\3\32\3\32\3\33\3\33\3\34\3\34") + buf.write("\3\35\3\35\3\36\3\36\3\37\3\37\3 \3 \3 \3!\3!\3!\3\"\3") + buf.write("\"\3#\3#\3#\3$\3$\3%\3%\3%\3&\3&\3&\3&\3\'\3\'\3\'\3\'") + buf.write("\3(\3(\3(\3)\3)\3*\3*\3+\3+\3+\3+\3+\3,\3,\3,\3,\3,\3") + buf.write(",\3-\6-\u00ec\n-\r-\16-\u00ed\3.\3.\3.\3.\7.\u00f4\n.") + buf.write("\f.\16.\u00f7\13.\3.\3.\3/\3/\3/\3/\7/\u00ff\n/\f/\16") + buf.write("/\u0102\13/\3/\3/\3\60\3\60\7\60\u0108\n\60\f\60\16\60") + buf.write("\u010b\13\60\3\61\3\61\3\62\3\62\3\63\3\63\3\63\5\63\u0114") + buf.write("\n\63\3\64\6\64\u0117\n\64\r\64\16\64\u0118\3\64\3\64") + buf.write("\3\65\3\65\2\2\66\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23") + buf.write("\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25") + buf.write(")\26+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A") + buf.write("\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\2c\2e\2g\62i\63") buf.write("\3\2\n\4\2))^^\6\2))^^ppvv\4\2$$^^\6\2$$^^ppvv\3\2\62") - buf.write(";\5\2C\\aac|\4\2))aa\5\2\13\f\17\17\"\"\2\u011b\2\3\3") + buf.write(";\5\2C\\aac|\4\2))aa\5\2\13\f\17\17\"\"\2\u0123\2\3\3") buf.write("\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2") buf.write("\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2") buf.write("\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2") @@ -46,81 +47,84 @@ def serializedATN(): buf.write("\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3") buf.write("\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K") buf.write("\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2") - buf.write("U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2c\3\2\2\2") - buf.write("\2e\3\2\2\2\3g\3\2\2\2\5i\3\2\2\2\7n\3\2\2\2\tt\3\2\2") - buf.write("\2\13v\3\2\2\2\rx\3\2\2\2\17z\3\2\2\2\21|\3\2\2\2\23~") - buf.write("\3\2\2\2\25\u0080\3\2\2\2\27\u0082\3\2\2\2\31\u0085\3") - buf.write("\2\2\2\33\u0088\3\2\2\2\35\u008a\3\2\2\2\37\u008c\3\2") - buf.write("\2\2!\u008e\3\2\2\2#\u0090\3\2\2\2%\u0093\3\2\2\2\'\u0098") - buf.write("\3\2\2\2)\u009d\3\2\2\2+\u00a3\3\2\2\2-\u00a9\3\2\2\2") - buf.write("/\u00ac\3\2\2\2\61\u00ae\3\2\2\2\63\u00b0\3\2\2\2\65\u00b2") - buf.write("\3\2\2\2\67\u00b4\3\2\2\29\u00b6\3\2\2\2;\u00b8\3\2\2") - buf.write("\2=\u00ba\3\2\2\2?\u00bc\3\2\2\2A\u00bf\3\2\2\2C\u00c2") - buf.write("\3\2\2\2E\u00c4\3\2\2\2G\u00c7\3\2\2\2I\u00c9\3\2\2\2") - buf.write("K\u00cc\3\2\2\2M\u00d0\3\2\2\2O\u00d4\3\2\2\2Q\u00d7\3") - buf.write("\2\2\2S\u00dc\3\2\2\2U\u00e3\3\2\2\2W\u00e7\3\2\2\2Y\u00f2") - buf.write("\3\2\2\2[\u00fd\3\2\2\2]\u0104\3\2\2\2_\u0106\3\2\2\2") - buf.write("a\u010b\3\2\2\2c\u010e\3\2\2\2e\u0114\3\2\2\2gh\7=\2\2") - buf.write("h\4\3\2\2\2ij\7u\2\2jk\7m\2\2kl\7k\2\2lm\7r\2\2m\6\3\2") - buf.write("\2\2no\7r\2\2op\7t\2\2pq\7k\2\2qr\7p\2\2rs\7v\2\2s\b\3") - buf.write("\2\2\2tu\7?\2\2u\n\3\2\2\2vw\7`\2\2w\f\3\2\2\2xy\7,\2") - buf.write("\2y\16\3\2\2\2z{\7\61\2\2{\20\3\2\2\2|}\7\'\2\2}\22\3") - buf.write("\2\2\2~\177\7-\2\2\177\24\3\2\2\2\u0080\u0081\7/\2\2\u0081") - buf.write("\26\3\2\2\2\u0082\u0083\7>\2\2\u0083\u0084\7>\2\2\u0084") - buf.write("\30\3\2\2\2\u0085\u0086\7@\2\2\u0086\u0087\7@\2\2\u0087") - buf.write("\32\3\2\2\2\u0088\u0089\7(\2\2\u0089\34\3\2\2\2\u008a") - buf.write("\u008b\7&\2\2\u008b\36\3\2\2\2\u008c\u008d\7~\2\2\u008d") - buf.write(" \3\2\2\2\u008e\u008f\7.\2\2\u008f\"\3\2\2\2\u0090\u0091") - buf.write("\7k\2\2\u0091\u0092\7h\2\2\u0092$\3\2\2\2\u0093\u0094") - buf.write("\7g\2\2\u0094\u0095\7n\2\2\u0095\u0096\7k\2\2\u0096\u0097") - buf.write("\7h\2\2\u0097&\3\2\2\2\u0098\u0099\7g\2\2\u0099\u009a") - buf.write("\7n\2\2\u009a\u009b\7u\2\2\u009b\u009c\7g\2\2\u009c(\3") - buf.write("\2\2\2\u009d\u009e\7y\2\2\u009e\u009f\7j\2\2\u009f\u00a0") - buf.write("\7k\2\2\u00a0\u00a1\7n\2\2\u00a1\u00a2\7g\2\2\u00a2*\3") - buf.write("\2\2\2\u00a3\u00a4\7w\2\2\u00a4\u00a5\7p\2\2\u00a5\u00a6") - buf.write("\7v\2\2\u00a6\u00a7\7k\2\2\u00a7\u00a8\7n\2\2\u00a8,\3") - buf.write("\2\2\2\u00a9\u00aa\7f\2\2\u00aa\u00ab\7q\2\2\u00ab.\3") - buf.write("\2\2\2\u00ac\u00ad\7}\2\2\u00ad\60\3\2\2\2\u00ae\u00af") - buf.write("\7\177\2\2\u00af\62\3\2\2\2\u00b0\u00b1\7*\2\2\u00b1\64") - buf.write("\3\2\2\2\u00b2\u00b3\7+\2\2\u00b3\66\3\2\2\2\u00b4\u00b5") - buf.write("\7]\2\2\u00b58\3\2\2\2\u00b6\u00b7\7_\2\2\u00b7:\3\2\2") - buf.write("\2\u00b8\u00b9\7\60\2\2\u00b9<\3\2\2\2\u00ba\u00bb\7\u0080") - buf.write("\2\2\u00bb>\3\2\2\2\u00bc\u00bd\7?\2\2\u00bd\u00be\7?") - buf.write("\2\2\u00be@\3\2\2\2\u00bf\u00c0\7#\2\2\u00c0\u00c1\7?") - buf.write("\2\2\u00c1B\3\2\2\2\u00c2\u00c3\7>\2\2\u00c3D\3\2\2\2") - buf.write("\u00c4\u00c5\7>\2\2\u00c5\u00c6\7?\2\2\u00c6F\3\2\2\2") - buf.write("\u00c7\u00c8\7@\2\2\u00c8H\3\2\2\2\u00c9\u00ca\7@\2\2") - buf.write("\u00ca\u00cb\7?\2\2\u00cbJ\3\2\2\2\u00cc\u00cd\7p\2\2") - buf.write("\u00cd\u00ce\7q\2\2\u00ce\u00cf\7v\2\2\u00cfL\3\2\2\2") - buf.write("\u00d0\u00d1\7c\2\2\u00d1\u00d2\7p\2\2\u00d2\u00d3\7f") - buf.write("\2\2\u00d3N\3\2\2\2\u00d4\u00d5\7q\2\2\u00d5\u00d6\7t") - buf.write("\2\2\u00d6P\3\2\2\2\u00d7\u00d8\7v\2\2\u00d8\u00d9\7t") - buf.write("\2\2\u00d9\u00da\7w\2\2\u00da\u00db\7g\2\2\u00dbR\3\2") - buf.write("\2\2\u00dc\u00dd\7h\2\2\u00dd\u00de\7c\2\2\u00de\u00df") - buf.write("\7n\2\2\u00df\u00e0\7u\2\2\u00e0\u00e1\7g\2\2\u00e1T\3") - buf.write("\2\2\2\u00e2\u00e4\5]/\2\u00e3\u00e2\3\2\2\2\u00e4\u00e5") - buf.write("\3\2\2\2\u00e5\u00e3\3\2\2\2\u00e5\u00e6\3\2\2\2\u00e6") - buf.write("V\3\2\2\2\u00e7\u00ed\7)\2\2\u00e8\u00ec\n\2\2\2\u00e9") - buf.write("\u00ea\7^\2\2\u00ea\u00ec\t\3\2\2\u00eb\u00e8\3\2\2\2") - buf.write("\u00eb\u00e9\3\2\2\2\u00ec\u00ef\3\2\2\2\u00ed\u00eb\3") - buf.write("\2\2\2\u00ed\u00ee\3\2\2\2\u00ee\u00f0\3\2\2\2\u00ef\u00ed") - buf.write("\3\2\2\2\u00f0\u00f1\7)\2\2\u00f1X\3\2\2\2\u00f2\u00f8") - buf.write("\7$\2\2\u00f3\u00f7\n\4\2\2\u00f4\u00f5\7^\2\2\u00f5\u00f7") - buf.write("\t\5\2\2\u00f6\u00f3\3\2\2\2\u00f6\u00f4\3\2\2\2\u00f7") - buf.write("\u00fa\3\2\2\2\u00f8\u00f6\3\2\2\2\u00f8\u00f9\3\2\2\2") - buf.write("\u00f9\u00fb\3\2\2\2\u00fa\u00f8\3\2\2\2\u00fb\u00fc\7") - buf.write("$\2\2\u00fcZ\3\2\2\2\u00fd\u0101\5_\60\2\u00fe\u0100\5") - buf.write("a\61\2\u00ff\u00fe\3\2\2\2\u0100\u0103\3\2\2\2\u0101\u00ff") - buf.write("\3\2\2\2\u0101\u0102\3\2\2\2\u0102\\\3\2\2\2\u0103\u0101") - buf.write("\3\2\2\2\u0104\u0105\t\6\2\2\u0105^\3\2\2\2\u0106\u0107") - buf.write("\t\7\2\2\u0107`\3\2\2\2\u0108\u010c\5_\60\2\u0109\u010c") - buf.write("\5]/\2\u010a\u010c\t\b\2\2\u010b\u0108\3\2\2\2\u010b\u0109") - buf.write("\3\2\2\2\u010b\u010a\3\2\2\2\u010cb\3\2\2\2\u010d\u010f") - buf.write("\t\t\2\2\u010e\u010d\3\2\2\2\u010f\u0110\3\2\2\2\u0110") - buf.write("\u010e\3\2\2\2\u0110\u0111\3\2\2\2\u0111\u0112\3\2\2\2") - buf.write("\u0112\u0113\b\62\2\2\u0113d\3\2\2\2\u0114\u0115\13\2") - buf.write("\2\2\u0115f\3\2\2\2\13\2\u00e5\u00eb\u00ed\u00f6\u00f8") - buf.write("\u0101\u010b\u0110\3\b\2\2") + buf.write("U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2") + buf.write("\2_\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\3k\3\2\2\2\5m\3\2\2") + buf.write("\2\7r\3\2\2\2\tx\3\2\2\2\13z\3\2\2\2\r|\3\2\2\2\17~\3") + buf.write("\2\2\2\21\u0080\3\2\2\2\23\u0082\3\2\2\2\25\u0084\3\2") + buf.write("\2\2\27\u0086\3\2\2\2\31\u0089\3\2\2\2\33\u008c\3\2\2") + buf.write("\2\35\u008e\3\2\2\2\37\u0090\3\2\2\2!\u0092\3\2\2\2#\u0094") + buf.write("\3\2\2\2%\u0097\3\2\2\2\'\u009c\3\2\2\2)\u00a1\3\2\2\2") + buf.write("+\u00a7\3\2\2\2-\u00ad\3\2\2\2/\u00b0\3\2\2\2\61\u00b2") + buf.write("\3\2\2\2\63\u00b4\3\2\2\2\65\u00b6\3\2\2\2\67\u00b8\3") + buf.write("\2\2\29\u00ba\3\2\2\2;\u00bc\3\2\2\2=\u00be\3\2\2\2?\u00c0") + buf.write("\3\2\2\2A\u00c3\3\2\2\2C\u00c6\3\2\2\2E\u00c8\3\2\2\2") + buf.write("G\u00cb\3\2\2\2I\u00cd\3\2\2\2K\u00d0\3\2\2\2M\u00d4\3") + buf.write("\2\2\2O\u00d8\3\2\2\2Q\u00db\3\2\2\2S\u00dd\3\2\2\2U\u00df") + buf.write("\3\2\2\2W\u00e4\3\2\2\2Y\u00eb\3\2\2\2[\u00ef\3\2\2\2") + buf.write("]\u00fa\3\2\2\2_\u0105\3\2\2\2a\u010c\3\2\2\2c\u010e\3") + buf.write("\2\2\2e\u0113\3\2\2\2g\u0116\3\2\2\2i\u011c\3\2\2\2kl") + buf.write("\7=\2\2l\4\3\2\2\2mn\7u\2\2no\7m\2\2op\7k\2\2pq\7r\2\2") + buf.write("q\6\3\2\2\2rs\7r\2\2st\7t\2\2tu\7k\2\2uv\7p\2\2vw\7v\2") + buf.write("\2w\b\3\2\2\2xy\7?\2\2y\n\3\2\2\2z{\7`\2\2{\f\3\2\2\2") + buf.write("|}\7,\2\2}\16\3\2\2\2~\177\7\61\2\2\177\20\3\2\2\2\u0080") + buf.write("\u0081\7\'\2\2\u0081\22\3\2\2\2\u0082\u0083\7-\2\2\u0083") + buf.write("\24\3\2\2\2\u0084\u0085\7/\2\2\u0085\26\3\2\2\2\u0086") + buf.write("\u0087\7>\2\2\u0087\u0088\7>\2\2\u0088\30\3\2\2\2\u0089") + buf.write("\u008a\7@\2\2\u008a\u008b\7@\2\2\u008b\32\3\2\2\2\u008c") + buf.write("\u008d\7(\2\2\u008d\34\3\2\2\2\u008e\u008f\7&\2\2\u008f") + buf.write("\36\3\2\2\2\u0090\u0091\7~\2\2\u0091 \3\2\2\2\u0092\u0093") + buf.write("\7.\2\2\u0093\"\3\2\2\2\u0094\u0095\7k\2\2\u0095\u0096") + buf.write("\7h\2\2\u0096$\3\2\2\2\u0097\u0098\7g\2\2\u0098\u0099") + buf.write("\7n\2\2\u0099\u009a\7k\2\2\u009a\u009b\7h\2\2\u009b&\3") + buf.write("\2\2\2\u009c\u009d\7g\2\2\u009d\u009e\7n\2\2\u009e\u009f") + buf.write("\7u\2\2\u009f\u00a0\7g\2\2\u00a0(\3\2\2\2\u00a1\u00a2") + buf.write("\7y\2\2\u00a2\u00a3\7j\2\2\u00a3\u00a4\7k\2\2\u00a4\u00a5") + buf.write("\7n\2\2\u00a5\u00a6\7g\2\2\u00a6*\3\2\2\2\u00a7\u00a8") + buf.write("\7w\2\2\u00a8\u00a9\7p\2\2\u00a9\u00aa\7v\2\2\u00aa\u00ab") + buf.write("\7k\2\2\u00ab\u00ac\7n\2\2\u00ac,\3\2\2\2\u00ad\u00ae") + buf.write("\7f\2\2\u00ae\u00af\7q\2\2\u00af.\3\2\2\2\u00b0\u00b1") + buf.write("\7}\2\2\u00b1\60\3\2\2\2\u00b2\u00b3\7\177\2\2\u00b3\62") + buf.write("\3\2\2\2\u00b4\u00b5\7*\2\2\u00b5\64\3\2\2\2\u00b6\u00b7") + buf.write("\7+\2\2\u00b7\66\3\2\2\2\u00b8\u00b9\7]\2\2\u00b98\3\2") + buf.write("\2\2\u00ba\u00bb\7_\2\2\u00bb:\3\2\2\2\u00bc\u00bd\7\60") + buf.write("\2\2\u00bd<\3\2\2\2\u00be\u00bf\7\u0080\2\2\u00bf>\3\2") + buf.write("\2\2\u00c0\u00c1\7?\2\2\u00c1\u00c2\7?\2\2\u00c2@\3\2") + buf.write("\2\2\u00c3\u00c4\7#\2\2\u00c4\u00c5\7?\2\2\u00c5B\3\2") + buf.write("\2\2\u00c6\u00c7\7>\2\2\u00c7D\3\2\2\2\u00c8\u00c9\7>") + buf.write("\2\2\u00c9\u00ca\7?\2\2\u00caF\3\2\2\2\u00cb\u00cc\7@") + buf.write("\2\2\u00ccH\3\2\2\2\u00cd\u00ce\7@\2\2\u00ce\u00cf\7?") + buf.write("\2\2\u00cfJ\3\2\2\2\u00d0\u00d1\7p\2\2\u00d1\u00d2\7q") + buf.write("\2\2\u00d2\u00d3\7v\2\2\u00d3L\3\2\2\2\u00d4\u00d5\7c") + buf.write("\2\2\u00d5\u00d6\7p\2\2\u00d6\u00d7\7f\2\2\u00d7N\3\2") + buf.write("\2\2\u00d8\u00d9\7q\2\2\u00d9\u00da\7t\2\2\u00daP\3\2") + buf.write("\2\2\u00db\u00dc\7A\2\2\u00dcR\3\2\2\2\u00dd\u00de\7<") + buf.write("\2\2\u00deT\3\2\2\2\u00df\u00e0\7v\2\2\u00e0\u00e1\7t") + buf.write("\2\2\u00e1\u00e2\7w\2\2\u00e2\u00e3\7g\2\2\u00e3V\3\2") + buf.write("\2\2\u00e4\u00e5\7h\2\2\u00e5\u00e6\7c\2\2\u00e6\u00e7") + buf.write("\7n\2\2\u00e7\u00e8\7u\2\2\u00e8\u00e9\7g\2\2\u00e9X\3") + buf.write("\2\2\2\u00ea\u00ec\5a\61\2\u00eb\u00ea\3\2\2\2\u00ec\u00ed") + buf.write("\3\2\2\2\u00ed\u00eb\3\2\2\2\u00ed\u00ee\3\2\2\2\u00ee") + buf.write("Z\3\2\2\2\u00ef\u00f5\7)\2\2\u00f0\u00f4\n\2\2\2\u00f1") + buf.write("\u00f2\7^\2\2\u00f2\u00f4\t\3\2\2\u00f3\u00f0\3\2\2\2") + buf.write("\u00f3\u00f1\3\2\2\2\u00f4\u00f7\3\2\2\2\u00f5\u00f3\3") + buf.write("\2\2\2\u00f5\u00f6\3\2\2\2\u00f6\u00f8\3\2\2\2\u00f7\u00f5") + buf.write("\3\2\2\2\u00f8\u00f9\7)\2\2\u00f9\\\3\2\2\2\u00fa\u0100") + buf.write("\7$\2\2\u00fb\u00ff\n\4\2\2\u00fc\u00fd\7^\2\2\u00fd\u00ff") + buf.write("\t\5\2\2\u00fe\u00fb\3\2\2\2\u00fe\u00fc\3\2\2\2\u00ff") + buf.write("\u0102\3\2\2\2\u0100\u00fe\3\2\2\2\u0100\u0101\3\2\2\2") + buf.write("\u0101\u0103\3\2\2\2\u0102\u0100\3\2\2\2\u0103\u0104\7") + buf.write("$\2\2\u0104^\3\2\2\2\u0105\u0109\5c\62\2\u0106\u0108\5") + buf.write("e\63\2\u0107\u0106\3\2\2\2\u0108\u010b\3\2\2\2\u0109\u0107") + buf.write("\3\2\2\2\u0109\u010a\3\2\2\2\u010a`\3\2\2\2\u010b\u0109") + buf.write("\3\2\2\2\u010c\u010d\t\6\2\2\u010db\3\2\2\2\u010e\u010f") + buf.write("\t\7\2\2\u010fd\3\2\2\2\u0110\u0114\5c\62\2\u0111\u0114") + buf.write("\5a\61\2\u0112\u0114\t\b\2\2\u0113\u0110\3\2\2\2\u0113") + buf.write("\u0111\3\2\2\2\u0113\u0112\3\2\2\2\u0114f\3\2\2\2\u0115") + buf.write("\u0117\t\t\2\2\u0116\u0115\3\2\2\2\u0117\u0118\3\2\2\2") + buf.write("\u0118\u0116\3\2\2\2\u0118\u0119\3\2\2\2\u0119\u011a\3") + buf.write("\2\2\2\u011a\u011b\b\64\2\2\u011bh\3\2\2\2\u011c\u011d") + buf.write("\13\2\2\2\u011dj\3\2\2\2\13\2\u00ed\u00f3\u00f5\u00fe") + buf.write("\u0100\u0109\u0113\u0118\3\b\2\2") return buf.getvalue() @@ -171,12 +175,14 @@ class PyxellLexer(Lexer): T__38 = 39 T__39 = 40 T__40 = 41 - INT = 42 - CHAR = 43 - STRING = 44 - ID = 45 - WS = 46 - ERR = 47 + T__41 = 42 + T__42 = 43 + INT = 44 + CHAR = 45 + STRING = 46 + ID = 47 + WS = 48 + ERR = 49 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -187,7 +193,8 @@ class PyxellLexer(Lexer): "'+'", "'-'", "'<<'", "'>>'", "'&'", "'$'", "'|'", "','", "'if'", "'elif'", "'else'", "'while'", "'until'", "'do'", "'{'", "'}'", "'('", "')'", "'['", "']'", "'.'", "'~'", "'=='", "'!='", "'<'", - "'<='", "'>'", "'>='", "'not'", "'and'", "'or'", "'true'", "'false'" ] + "'<='", "'>'", "'>='", "'not'", "'and'", "'or'", "'?'", "':'", + "'true'", "'false'" ] symbolicNames = [ "", "INT", "CHAR", "STRING", "ID", "WS", "ERR" ] @@ -198,8 +205,9 @@ class PyxellLexer(Lexer): "T__20", "T__21", "T__22", "T__23", "T__24", "T__25", "T__26", "T__27", "T__28", "T__29", "T__30", "T__31", "T__32", "T__33", "T__34", "T__35", "T__36", "T__37", - "T__38", "T__39", "T__40", "INT", "CHAR", "STRING", "ID", - "DIGIT", "ID_START", "ID_CONT", "WS", "ERR" ] + "T__38", "T__39", "T__40", "T__41", "T__42", "INT", "CHAR", + "STRING", "ID", "DIGIT", "ID_START", "ID_CONT", "WS", + "ERR" ] grammarFileName = "Pyxell.g4" diff --git a/src/antlr/PyxellLexer.tokens b/src/antlr/PyxellLexer.tokens index 096724f7..1c16cb39 100644 --- a/src/antlr/PyxellLexer.tokens +++ b/src/antlr/PyxellLexer.tokens @@ -39,12 +39,14 @@ T__37=38 T__38=39 T__39=40 T__40=41 -INT=42 -CHAR=43 -STRING=44 -ID=45 -WS=46 -ERR=47 +T__41=42 +T__42=43 +INT=44 +CHAR=45 +STRING=46 +ID=47 +WS=48 +ERR=49 ';'=1 'skip'=2 'print'=3 @@ -84,5 +86,7 @@ ERR=47 'not'=37 'and'=38 'or'=39 -'true'=40 -'false'=41 +'?'=40 +':'=41 +'true'=42 +'false'=43 diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index 73d07163..5b4782e9 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -8,8 +8,8 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\61") - buf.write("\u00a1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\63") + buf.write("\u00a7\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") buf.write("\4\b\t\b\4\t\t\t\3\2\7\2\24\n\2\f\2\16\2\27\13\2\3\2\3") buf.write("\2\3\3\3\3\3\3\3\3\5\3\37\n\3\3\4\3\4\3\4\5\4$\n\4\3\4") buf.write("\3\4\3\4\7\4)\n\4\f\4\16\4,\13\4\3\4\3\4\3\4\3\4\3\4\5") @@ -20,57 +20,60 @@ def serializedATN(): buf.write("\3\b\3\b\3\b\3\b\3\b\5\bj\n\b\3\b\3\b\3\b\3\b\3\b\3\b") buf.write("\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3") buf.write("\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b") - buf.write("\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\7\b\u0095\n\b\f\b\16") - buf.write("\b\u0098\13\b\3\t\3\t\3\t\3\t\3\t\5\t\u009f\n\t\3\t\2") - buf.write("\3\16\n\2\4\6\b\n\f\16\20\2\t\3\2\7\21\4\2\13\f \3\2") - buf.write("\b\n\3\2\13\f\3\2\r\16\3\2!&\3\2*+\2\u00b9\2\25\3\2\2") - buf.write("\2\4\36\3\2\2\2\6\62\3\2\2\2\b\64\3\2\2\2\nT\3\2\2\2\f") - buf.write("V\3\2\2\2\16i\3\2\2\2\20\u009e\3\2\2\2\22\24\5\4\3\2\23") - buf.write("\22\3\2\2\2\24\27\3\2\2\2\25\23\3\2\2\2\25\26\3\2\2\2") - buf.write("\26\30\3\2\2\2\27\25\3\2\2\2\30\31\7\2\2\3\31\3\3\2\2") - buf.write("\2\32\33\5\6\4\2\33\34\7\3\2\2\34\37\3\2\2\2\35\37\5\n") - buf.write("\6\2\36\32\3\2\2\2\36\35\3\2\2\2\37\5\3\2\2\2 \63\7\4") - buf.write("\2\2!#\7\5\2\2\"$\5\16\b\2#\"\3\2\2\2#$\3\2\2\2$\63\3") - buf.write("\2\2\2%&\5\b\5\2&\'\7\6\2\2\')\3\2\2\2(%\3\2\2\2),\3\2") - buf.write("\2\2*(\3\2\2\2*+\3\2\2\2+-\3\2\2\2,*\3\2\2\2-\63\5\16") - buf.write("\b\2./\7/\2\2/\60\t\2\2\2\60\61\7\6\2\2\61\63\5\16\b\2") - buf.write("\62 \3\2\2\2\62!\3\2\2\2\62*\3\2\2\2\62.\3\2\2\2\63\7") - buf.write("\3\2\2\2\649\7/\2\2\65\66\7\22\2\2\668\7/\2\2\67\65\3") - buf.write("\2\2\28;\3\2\2\29\67\3\2\2\29:\3\2\2\2:\t\3\2\2\2;9\3") - buf.write("\2\2\2<=\7\23\2\2=>\5\16\b\2>E\5\f\7\2?@\7\24\2\2@A\5") - buf.write("\16\b\2AB\5\f\7\2BD\3\2\2\2C?\3\2\2\2DG\3\2\2\2EC\3\2") - buf.write("\2\2EF\3\2\2\2FJ\3\2\2\2GE\3\2\2\2HI\7\25\2\2IK\5\f\7") - buf.write("\2JH\3\2\2\2JK\3\2\2\2KU\3\2\2\2LM\7\26\2\2MN\5\16\b\2") - buf.write("NO\5\f\7\2OU\3\2\2\2PQ\7\27\2\2QR\5\16\b\2RS\5\f\7\2S") - buf.write("U\3\2\2\2T<\3\2\2\2TL\3\2\2\2TP\3\2\2\2U\13\3\2\2\2VW") - buf.write("\7\30\2\2WY\7\31\2\2XZ\5\4\3\2YX\3\2\2\2Z[\3\2\2\2[Y\3") - buf.write("\2\2\2[\\\3\2\2\2\\]\3\2\2\2]^\7\32\2\2^\r\3\2\2\2_`\b") - buf.write("\b\1\2`j\5\20\t\2ab\7\33\2\2bc\5\16\b\2cd\7\34\2\2dj\3") - buf.write("\2\2\2ef\t\3\2\2fj\5\16\b\16gh\7\'\2\2hj\5\16\b\6i_\3") - buf.write("\2\2\2ia\3\2\2\2ie\3\2\2\2ig\3\2\2\2j\u0096\3\2\2\2kl") - buf.write("\f\17\2\2lm\7\7\2\2m\u0095\5\16\b\17no\f\r\2\2op\t\4\2") - buf.write("\2p\u0095\5\16\b\16qr\f\f\2\2rs\t\5\2\2s\u0095\5\16\b") - buf.write("\rtu\f\13\2\2uv\t\6\2\2v\u0095\5\16\b\fwx\f\n\2\2xy\7") - buf.write("\17\2\2y\u0095\5\16\b\13z{\f\t\2\2{|\7\20\2\2|\u0095\5") - buf.write("\16\b\n}~\f\b\2\2~\177\7\21\2\2\177\u0095\5\16\b\t\u0080") - buf.write("\u0081\f\7\2\2\u0081\u0082\t\7\2\2\u0082\u0095\5\16\b") - buf.write("\7\u0083\u0084\f\5\2\2\u0084\u0085\7(\2\2\u0085\u0095") - buf.write("\5\16\b\5\u0086\u0087\f\4\2\2\u0087\u0088\7)\2\2\u0088") - buf.write("\u0095\5\16\b\4\u0089\u008a\f\3\2\2\u008a\u008b\7\22\2") - buf.write("\2\u008b\u0095\5\16\b\3\u008c\u008d\f\21\2\2\u008d\u008e") - buf.write("\7\35\2\2\u008e\u008f\5\16\b\2\u008f\u0090\7\36\2\2\u0090") - buf.write("\u0095\3\2\2\2\u0091\u0092\f\20\2\2\u0092\u0093\7\37\2") - buf.write("\2\u0093\u0095\7/\2\2\u0094k\3\2\2\2\u0094n\3\2\2\2\u0094") - buf.write("q\3\2\2\2\u0094t\3\2\2\2\u0094w\3\2\2\2\u0094z\3\2\2\2") - buf.write("\u0094}\3\2\2\2\u0094\u0080\3\2\2\2\u0094\u0083\3\2\2") - buf.write("\2\u0094\u0086\3\2\2\2\u0094\u0089\3\2\2\2\u0094\u008c") - buf.write("\3\2\2\2\u0094\u0091\3\2\2\2\u0095\u0098\3\2\2\2\u0096") - buf.write("\u0094\3\2\2\2\u0096\u0097\3\2\2\2\u0097\17\3\2\2\2\u0098") - buf.write("\u0096\3\2\2\2\u0099\u009f\7,\2\2\u009a\u009f\t\b\2\2") - buf.write("\u009b\u009f\7-\2\2\u009c\u009f\7.\2\2\u009d\u009f\7/") - buf.write("\2\2\u009e\u0099\3\2\2\2\u009e\u009a\3\2\2\2\u009e\u009b") - buf.write("\3\2\2\2\u009e\u009c\3\2\2\2\u009e\u009d\3\2\2\2\u009f") - buf.write("\21\3\2\2\2\20\25\36#*\629EJT[i\u0094\u0096\u009e") + buf.write("\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3") + buf.write("\b\7\b\u009b\n\b\f\b\16\b\u009e\13\b\3\t\3\t\3\t\3\t\3") + buf.write("\t\5\t\u00a5\n\t\3\t\2\3\16\n\2\4\6\b\n\f\16\20\2\t\3") + buf.write("\2\7\21\4\2\13\f \3\2\b\n\3\2\13\f\3\2\r\16\3\2!&\3\2") + buf.write(",-\2\u00c0\2\25\3\2\2\2\4\36\3\2\2\2\6\62\3\2\2\2\b\64") + buf.write("\3\2\2\2\nT\3\2\2\2\fV\3\2\2\2\16i\3\2\2\2\20\u00a4\3") + buf.write("\2\2\2\22\24\5\4\3\2\23\22\3\2\2\2\24\27\3\2\2\2\25\23") + buf.write("\3\2\2\2\25\26\3\2\2\2\26\30\3\2\2\2\27\25\3\2\2\2\30") + buf.write("\31\7\2\2\3\31\3\3\2\2\2\32\33\5\6\4\2\33\34\7\3\2\2\34") + buf.write("\37\3\2\2\2\35\37\5\n\6\2\36\32\3\2\2\2\36\35\3\2\2\2") + buf.write("\37\5\3\2\2\2 \63\7\4\2\2!#\7\5\2\2\"$\5\16\b\2#\"\3\2") + buf.write("\2\2#$\3\2\2\2$\63\3\2\2\2%&\5\b\5\2&\'\7\6\2\2\')\3\2") + buf.write("\2\2(%\3\2\2\2),\3\2\2\2*(\3\2\2\2*+\3\2\2\2+-\3\2\2\2") + buf.write(",*\3\2\2\2-\63\5\16\b\2./\7\61\2\2/\60\t\2\2\2\60\61\7") + buf.write("\6\2\2\61\63\5\16\b\2\62 \3\2\2\2\62!\3\2\2\2\62*\3\2") + buf.write("\2\2\62.\3\2\2\2\63\7\3\2\2\2\649\7\61\2\2\65\66\7\22") + buf.write("\2\2\668\7\61\2\2\67\65\3\2\2\28;\3\2\2\29\67\3\2\2\2") + buf.write("9:\3\2\2\2:\t\3\2\2\2;9\3\2\2\2<=\7\23\2\2=>\5\16\b\2") + buf.write(">E\5\f\7\2?@\7\24\2\2@A\5\16\b\2AB\5\f\7\2BD\3\2\2\2C") + buf.write("?\3\2\2\2DG\3\2\2\2EC\3\2\2\2EF\3\2\2\2FJ\3\2\2\2GE\3") + buf.write("\2\2\2HI\7\25\2\2IK\5\f\7\2JH\3\2\2\2JK\3\2\2\2KU\3\2") + buf.write("\2\2LM\7\26\2\2MN\5\16\b\2NO\5\f\7\2OU\3\2\2\2PQ\7\27") + buf.write("\2\2QR\5\16\b\2RS\5\f\7\2SU\3\2\2\2T<\3\2\2\2TL\3\2\2") + buf.write("\2TP\3\2\2\2U\13\3\2\2\2VW\7\30\2\2WY\7\31\2\2XZ\5\4\3") + buf.write("\2YX\3\2\2\2Z[\3\2\2\2[Y\3\2\2\2[\\\3\2\2\2\\]\3\2\2\2") + buf.write("]^\7\32\2\2^\r\3\2\2\2_`\b\b\1\2`j\5\20\t\2ab\7\33\2\2") + buf.write("bc\5\16\b\2cd\7\34\2\2dj\3\2\2\2ef\t\3\2\2fj\5\16\b\17") + buf.write("gh\7\'\2\2hj\5\16\b\7i_\3\2\2\2ia\3\2\2\2ie\3\2\2\2ig") + buf.write("\3\2\2\2j\u009c\3\2\2\2kl\f\20\2\2lm\7\7\2\2m\u009b\5") + buf.write("\16\b\20no\f\16\2\2op\t\4\2\2p\u009b\5\16\b\17qr\f\r\2") + buf.write("\2rs\t\5\2\2s\u009b\5\16\b\16tu\f\f\2\2uv\t\6\2\2v\u009b") + buf.write("\5\16\b\rwx\f\13\2\2xy\7\17\2\2y\u009b\5\16\b\fz{\f\n") + buf.write("\2\2{|\7\20\2\2|\u009b\5\16\b\13}~\f\t\2\2~\177\7\21\2") + buf.write("\2\177\u009b\5\16\b\n\u0080\u0081\f\b\2\2\u0081\u0082") + buf.write("\t\7\2\2\u0082\u009b\5\16\b\b\u0083\u0084\f\6\2\2\u0084") + buf.write("\u0085\7(\2\2\u0085\u009b\5\16\b\6\u0086\u0087\f\5\2\2") + buf.write("\u0087\u0088\7)\2\2\u0088\u009b\5\16\b\5\u0089\u008a\f") + buf.write("\4\2\2\u008a\u008b\7*\2\2\u008b\u008c\5\16\b\2\u008c\u008d") + buf.write("\7+\2\2\u008d\u008e\5\16\b\4\u008e\u009b\3\2\2\2\u008f") + buf.write("\u0090\f\3\2\2\u0090\u0091\7\22\2\2\u0091\u009b\5\16\b") + buf.write("\3\u0092\u0093\f\22\2\2\u0093\u0094\7\35\2\2\u0094\u0095") + buf.write("\5\16\b\2\u0095\u0096\7\36\2\2\u0096\u009b\3\2\2\2\u0097") + buf.write("\u0098\f\21\2\2\u0098\u0099\7\37\2\2\u0099\u009b\7\61") + buf.write("\2\2\u009ak\3\2\2\2\u009an\3\2\2\2\u009aq\3\2\2\2\u009a") + buf.write("t\3\2\2\2\u009aw\3\2\2\2\u009az\3\2\2\2\u009a}\3\2\2\2") + buf.write("\u009a\u0080\3\2\2\2\u009a\u0083\3\2\2\2\u009a\u0086\3") + buf.write("\2\2\2\u009a\u0089\3\2\2\2\u009a\u008f\3\2\2\2\u009a\u0092") + buf.write("\3\2\2\2\u009a\u0097\3\2\2\2\u009b\u009e\3\2\2\2\u009c") + buf.write("\u009a\3\2\2\2\u009c\u009d\3\2\2\2\u009d\17\3\2\2\2\u009e") + buf.write("\u009c\3\2\2\2\u009f\u00a5\7.\2\2\u00a0\u00a5\t\b\2\2") + buf.write("\u00a1\u00a5\7/\2\2\u00a2\u00a5\7\60\2\2\u00a3\u00a5\7") + buf.write("\61\2\2\u00a4\u009f\3\2\2\2\u00a4\u00a0\3\2\2\2\u00a4") + buf.write("\u00a1\3\2\2\2\u00a4\u00a2\3\2\2\2\u00a4\u00a3\3\2\2\2") + buf.write("\u00a5\21\3\2\2\2\20\25\36#*\629EJT[i\u009a\u009c\u00a4") return buf.getvalue() @@ -90,7 +93,7 @@ class PyxellParser ( Parser ): "'while'", "'until'", "'do'", "'{'", "'}'", "'('", "')'", "'['", "']'", "'.'", "'~'", "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", "'not'", "'and'", "'or'", - "'true'", "'false'" ] + "'?'", "':'", "'true'", "'false'" ] symbolicNames = [ "", "", "", "", "", "", "", "", @@ -102,8 +105,8 @@ class PyxellParser ( Parser ): "", "", "", "", "", "", "", "", "", "", "", "", - "", "", "INT", "CHAR", "STRING", - "ID", "WS", "ERR" ] + "", "", "", "", + "INT", "CHAR", "STRING", "ID", "WS", "ERR" ] RULE_program = 0 RULE_stmt = 1 @@ -159,12 +162,14 @@ class PyxellParser ( Parser ): T__38=39 T__39=40 T__40=41 - INT=42 - CHAR=43 - STRING=44 - ID=45 - WS=46 - ERR=47 + T__41=42 + T__42=43 + INT=44 + CHAR=45 + STRING=46 + ID=47 + WS=48 + ERR=49 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -213,7 +218,7 @@ def program(self): self.state = 19 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__39) | (1 << PyxellParser.T__40) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__42) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): self.state = 16 self.stmt() self.state = 21 @@ -265,7 +270,7 @@ def stmt(self): self.state = 28 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__24, PyxellParser.T__29, PyxellParser.T__36, PyxellParser.T__39, PyxellParser.T__40, PyxellParser.INT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: + if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__24, PyxellParser.T__29, PyxellParser.T__36, PyxellParser.T__41, PyxellParser.T__42, PyxellParser.INT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: self.enterOuterAlt(localctx, 1) self.state = 24 self.simple_stmt() @@ -404,7 +409,7 @@ def simple_stmt(self): self.state = 33 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__39) | (1 << PyxellParser.T__40) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__42) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): self.state = 32 self.expr(0) @@ -717,7 +722,7 @@ def block(self): self.state = 89 self._errHandler.sync(self) _la = self._input.LA(1) - if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__39) | (1 << PyxellParser.T__40) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0)): + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__42) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0)): break self.state = 91 @@ -825,6 +830,26 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) + class ExprCondContext(ExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext + super().__init__(parser) + self.copyFrom(ctx) + + def expr(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(PyxellParser.ExprContext) + else: + return self.getTypedRuleContext(PyxellParser.ExprContext,i) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExprCond" ): + return visitor.visitExprCond(self) + else: + return visitor.visitChildren(self) + + class ExprAtomContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext @@ -934,7 +959,7 @@ def expr(self, _p:int=0): self.state = 103 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__39, PyxellParser.T__40, PyxellParser.INT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: + if token in [PyxellParser.T__41, PyxellParser.T__42, PyxellParser.INT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: localctx = PyxellParser.ExprAtomContext(self, localctx) self._ctx = localctx _prevctx = localctx @@ -966,7 +991,7 @@ def expr(self, _p:int=0): self._errHandler.reportMatch(self) self.consume() self.state = 100 - self.expr(12) + self.expr(13) pass elif token in [PyxellParser.T__36]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) @@ -975,13 +1000,13 @@ def expr(self, _p:int=0): self.state = 101 localctx.op = self.match(PyxellParser.T__36) self.state = 102 - self.expr(4) + self.expr(5) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 148 + self.state = 154 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,12,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: @@ -989,29 +1014,29 @@ def expr(self, _p:int=0): if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 146 + self.state = 152 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,11,self._ctx) if la_ == 1: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 105 - if not self.precpred(self._ctx, 13): + if not self.precpred(self._ctx, 14): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 14)") self.state = 106 localctx.op = self.match(PyxellParser.T__4) self.state = 107 - self.expr(13) + self.expr(14) pass elif la_ == 2: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 108 - if not self.precpred(self._ctx, 11): + if not self.precpred(self._ctx, 12): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 12)") self.state = 109 localctx.op = self._input.LT(1) _la = self._input.LA(1) @@ -1021,16 +1046,16 @@ def expr(self, _p:int=0): self._errHandler.reportMatch(self) self.consume() self.state = 110 - self.expr(12) + self.expr(13) pass elif la_ == 3: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 111 - if not self.precpred(self._ctx, 10): + if not self.precpred(self._ctx, 11): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") self.state = 112 localctx.op = self._input.LT(1) _la = self._input.LA(1) @@ -1040,16 +1065,16 @@ def expr(self, _p:int=0): self._errHandler.reportMatch(self) self.consume() self.state = 113 - self.expr(11) + self.expr(12) pass elif la_ == 4: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 114 - if not self.precpred(self._ctx, 9): + if not self.precpred(self._ctx, 10): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") self.state = 115 localctx.op = self._input.LT(1) _la = self._input.LA(1) @@ -1059,55 +1084,55 @@ def expr(self, _p:int=0): self._errHandler.reportMatch(self) self.consume() self.state = 116 - self.expr(10) + self.expr(11) pass elif la_ == 5: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 117 - if not self.precpred(self._ctx, 8): + if not self.precpred(self._ctx, 9): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") self.state = 118 localctx.op = self.match(PyxellParser.T__12) self.state = 119 - self.expr(9) + self.expr(10) pass elif la_ == 6: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 120 - if not self.precpred(self._ctx, 7): + if not self.precpred(self._ctx, 8): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") self.state = 121 localctx.op = self.match(PyxellParser.T__13) self.state = 122 - self.expr(8) + self.expr(9) pass elif la_ == 7: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 123 - if not self.precpred(self._ctx, 6): + if not self.precpred(self._ctx, 7): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") self.state = 124 localctx.op = self.match(PyxellParser.T__14) self.state = 125 - self.expr(7) + self.expr(8) pass elif la_ == 8: localctx = PyxellParser.ExprCmpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 126 - if not self.precpred(self._ctx, 5): + if not self.precpred(self._ctx, 6): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") self.state = 127 localctx.op = self._input.LT(1) _la = self._input.LA(1) @@ -1117,78 +1142,95 @@ def expr(self, _p:int=0): self._errHandler.reportMatch(self) self.consume() self.state = 128 - self.expr(5) + self.expr(6) pass elif la_ == 9: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 129 - if not self.precpred(self._ctx, 3): + if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") self.state = 130 localctx.op = self.match(PyxellParser.T__37) self.state = 131 - self.expr(3) + self.expr(4) pass elif la_ == 10: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 132 - if not self.precpred(self._ctx, 2): + if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") self.state = 133 localctx.op = self.match(PyxellParser.T__38) self.state = 134 - self.expr(2) + self.expr(3) pass elif la_ == 11: - localctx = PyxellParser.ExprTupleContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + localctx = PyxellParser.ExprCondContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 135 + if not self.precpred(self._ctx, 2): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") + self.state = 136 + self.match(PyxellParser.T__39) + self.state = 137 + self.expr(0) + self.state = 138 + self.match(PyxellParser.T__40) + self.state = 139 + self.expr(2) + pass + + elif la_ == 12: + localctx = PyxellParser.ExprTupleContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) + self.state = 141 if not self.precpred(self._ctx, 1): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") - self.state = 136 + self.state = 142 self.match(PyxellParser.T__15) - self.state = 137 + self.state = 143 self.expr(1) pass - elif la_ == 12: + elif la_ == 13: localctx = PyxellParser.ExprIndexContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 138 - if not self.precpred(self._ctx, 15): + self.state = 144 + if not self.precpred(self._ctx, 16): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 15)") - self.state = 139 + raise FailedPredicateException(self, "self.precpred(self._ctx, 16)") + self.state = 145 self.match(PyxellParser.T__26) - self.state = 140 + self.state = 146 self.expr(0) - self.state = 141 + self.state = 147 self.match(PyxellParser.T__27) pass - elif la_ == 13: + elif la_ == 14: localctx = PyxellParser.ExprAttrContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 143 - if not self.precpred(self._ctx, 14): + self.state = 149 + if not self.precpred(self._ctx, 15): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 14)") - self.state = 144 + raise FailedPredicateException(self, "self.precpred(self._ctx, 15)") + self.state = 150 self.match(PyxellParser.T__28) - self.state = 145 + self.state = 151 self.match(PyxellParser.ID) pass - self.state = 150 + self.state = 156 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,12,self._ctx) @@ -1302,21 +1344,21 @@ def atom(self): self.enterRule(localctx, 14, self.RULE_atom) self._la = 0 # Token type try: - self.state = 156 + self.state = 162 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: localctx = PyxellParser.AtomIntContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 151 + self.state = 157 self.match(PyxellParser.INT) pass - elif token in [PyxellParser.T__39, PyxellParser.T__40]: + elif token in [PyxellParser.T__41, PyxellParser.T__42]: localctx = PyxellParser.AtomBoolContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 152 + self.state = 158 _la = self._input.LA(1) - if not(_la==PyxellParser.T__39 or _la==PyxellParser.T__40): + if not(_la==PyxellParser.T__41 or _la==PyxellParser.T__42): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -1325,19 +1367,19 @@ def atom(self): elif token in [PyxellParser.CHAR]: localctx = PyxellParser.AtomCharContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 153 + self.state = 159 self.match(PyxellParser.CHAR) pass elif token in [PyxellParser.STRING]: localctx = PyxellParser.AtomStringContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 154 + self.state = 160 self.match(PyxellParser.STRING) pass elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 155 + self.state = 161 self.match(PyxellParser.ID) pass else: @@ -1365,55 +1407,59 @@ def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): def expr_sempred(self, localctx:ExprContext, predIndex:int): if predIndex == 0: - return self.precpred(self._ctx, 13) + return self.precpred(self._ctx, 14) if predIndex == 1: - return self.precpred(self._ctx, 11) + return self.precpred(self._ctx, 12) if predIndex == 2: - return self.precpred(self._ctx, 10) + return self.precpred(self._ctx, 11) if predIndex == 3: - return self.precpred(self._ctx, 9) + return self.precpred(self._ctx, 10) if predIndex == 4: - return self.precpred(self._ctx, 8) + return self.precpred(self._ctx, 9) if predIndex == 5: - return self.precpred(self._ctx, 7) + return self.precpred(self._ctx, 8) if predIndex == 6: - return self.precpred(self._ctx, 6) + return self.precpred(self._ctx, 7) if predIndex == 7: - return self.precpred(self._ctx, 5) + return self.precpred(self._ctx, 6) if predIndex == 8: - return self.precpred(self._ctx, 3) + return self.precpred(self._ctx, 4) if predIndex == 9: - return self.precpred(self._ctx, 2) + return self.precpred(self._ctx, 3) if predIndex == 10: - return self.precpred(self._ctx, 1) + return self.precpred(self._ctx, 2) if predIndex == 11: - return self.precpred(self._ctx, 15) + return self.precpred(self._ctx, 1) if predIndex == 12: - return self.precpred(self._ctx, 14) + return self.precpred(self._ctx, 16) + + + if predIndex == 13: + return self.precpred(self._ctx, 15) diff --git a/src/antlr/PyxellVisitor.py b/src/antlr/PyxellVisitor.py index b4c2cb03..809feb7a 100644 --- a/src/antlr/PyxellVisitor.py +++ b/src/antlr/PyxellVisitor.py @@ -84,6 +84,11 @@ def visitExprIndex(self, ctx:PyxellParser.ExprIndexContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#ExprCond. + def visitExprCond(self, ctx:PyxellParser.ExprCondContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#ExprAtom. def visitExprAtom(self, ctx:PyxellParser.ExprAtomContext): return self.visitChildren(ctx) diff --git a/src/compiler.py b/src/compiler.py index e8cb6bde..72806c1f 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -44,10 +44,16 @@ def get(self, ctx, id): def cast(self, ctx, value, type): if value.type != type: - raise self.throw(ctx, err.IllegalAssignment(value.type, type)) + self.throw(ctx, err.IllegalAssignment(value.type, type)) return value + def unify(self, ctx, *values): + if not all(values[0].type == value.type for value in values): + self.throw(ctx, err.UnknownType()) + + return values + def assign(self, ctx, id, value): id = str(id) @@ -211,9 +217,7 @@ def emitIfElse(index): return expr = exprs[index] - cond = self.visit(expr) - if cond.type != tBool: - self.throw(expr, err.IllegalAssignment(cond.type, tBool)) + cond = self.cast(expr, self.visit(expr), tBool) bbif = self.builder.append_basic_block() bbelse = self.builder.append_basic_block() @@ -237,9 +241,7 @@ def visitStmtWhile(self, ctx): self.builder.position_at_end(bbstart) expr = ctx.expr() - cond = self.visit(expr) - if cond.type != tBool: - self.throw(expr, err.IllegalAssignment(cond.type, tBool)) + cond = self.cast(expr, self.visit(expr), tBool) bbwhile = self.builder.append_basic_block() bbend = ll.Block(self.builder.function) @@ -263,9 +265,7 @@ def visitStmtUntil(self, ctx): self.visit(ctx.block()) expr = ctx.expr() - cond = self.visit(expr) - if cond.type != tBool: - self.throw(expr, err.IllegalAssignment(cond.type, tBool)) + cond = self.cast(expr, self.visit(expr), tBool) self.builder.cbranch(cond, bbend, bbuntil) @@ -280,11 +280,7 @@ def visitExprParentheses(self, ctx): def visitExprIndex(self, ctx): exprs = ctx.expr() - - index = self.visit(exprs[1]) - if index.type != tInt: - self.throw(exprs[1], err.IllegalAssignment(index.type, tInt)) - + index = self.cast(exprs[1], self.visit(exprs[1]), tInt) value = self.visit(exprs[0]) if value.type.isString(): @@ -393,6 +389,15 @@ def visitExprLogicalOp(self, ctx): return phi + def visitExprCond(self, ctx): + exprs = ctx.expr() + cond, *values = [self.visit(expr) for expr in exprs] + + cond = self.cast(exprs[0], cond, tBool) + values = self.unify(ctx, *values) + + return self.builder.select(cond, *values) + def visitExprTuple(self, ctx): exprs = [] while True: diff --git a/src/errors.py b/src/errors.py index a7de7f49..0bbfe009 100644 --- a/src/errors.py +++ b/src/errors.py @@ -21,6 +21,7 @@ class PyxellError(Exception): NotIndexable = lambda t: f"Type `{t.show()}` is not indexable" NotPrintable = lambda t: f"Variable of type `{t.show()}` cannot be printed" UndeclaredIdentifier = lambda id: f"Undeclared identifier `{id}`" + UnknownType = lambda: f"Cannot settle type of the expression" def __init__(self, msg, line, column=None): text = f"Line {line}" From 4a83a70ccb5169cd1e18a3fce11c227f6c2ba209 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Fri, 11 Oct 2019 20:19:39 +0200 Subject: [PATCH 018/100] Arrays --- src/Pyxell.g4 | 17 +- src/antlr/Pyxell.interp | 4 +- src/antlr/PyxellParser.py | 746 +++++++++++++++++++++-------------- src/antlr/PyxellVisitor.py | 20 +- src/compiler.py | 61 +-- src/types.py | 36 +- test/bad/arrays/cmp01.err | 1 + test/bad/arrays/cmp01.px | 2 + test/good/arrays/array05.out | 1 + test/good/arrays/array05.px | 2 + 10 files changed, 560 insertions(+), 330 deletions(-) create mode 100644 test/bad/arrays/cmp01.err create mode 100644 test/bad/arrays/cmp01.px create mode 100644 test/good/arrays/array05.out create mode 100644 test/good/arrays/array05.px diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index 19b174a3..fb11f8e4 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -11,8 +11,8 @@ stmt simple_stmt : 'skip' # StmtSkip - | 'print' expr? # StmtPrint - | (lvalue '=')* expr # StmtAssg + | 'print' any_expr? # StmtPrint + | (lvalue '=')* any_expr # StmtAssg | ID op=('^' | '*' | '/' | '%' | '+' | '-' | '<<' | '>>' | '&' | '$' | '|') '=' expr # StmtAssgExpr ; @@ -30,9 +30,14 @@ block : 'do' '{' stmt+ '}' ; +any_expr + : expr + | tuple_expr + ; + expr : atom # ExprAtom - | '(' expr ')' # ExprParentheses + | '(' any_expr ')' # ExprParentheses | expr '[' expr ']' # ExprIndex | expr '.' ID # ExprAttr | expr op='^' expr # ExprBinaryOp @@ -48,7 +53,10 @@ expr | expr op='and' expr # ExprLogicalOp | expr op='or' expr # ExprLogicalOp | expr '?' expr ':' expr # ExprCond - | expr ',' expr # ExprTuple + ; + +tuple_expr + : (expr ',')+ expr? # ExprTuple ; atom @@ -56,6 +64,7 @@ atom | ('true' | 'false') # AtomBool | CHAR # AtomChar | STRING # AtomString + | '[' (expr ',')* expr? ']' # AtomArray | ID # AtomId ; diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index 63a499d6..7d54210a 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -109,9 +109,11 @@ simple_stmt lvalue compound_stmt block +any_expr expr +tuple_expr atom atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 51, 167, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 3, 2, 7, 2, 20, 10, 2, 12, 2, 14, 2, 23, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 31, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 36, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 41, 10, 4, 12, 4, 14, 4, 44, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 51, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 56, 10, 5, 12, 5, 14, 5, 59, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 68, 10, 6, 12, 6, 14, 6, 71, 11, 6, 3, 6, 3, 6, 5, 6, 75, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 85, 10, 6, 3, 7, 3, 7, 3, 7, 6, 7, 90, 10, 7, 13, 7, 14, 7, 91, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 106, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 155, 10, 8, 12, 8, 14, 8, 158, 11, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 165, 10, 9, 3, 9, 2, 3, 14, 10, 2, 4, 6, 8, 10, 12, 14, 16, 2, 9, 3, 2, 7, 17, 4, 2, 11, 12, 32, 32, 3, 2, 8, 10, 3, 2, 11, 12, 3, 2, 13, 14, 3, 2, 33, 38, 3, 2, 44, 45, 2, 192, 2, 21, 3, 2, 2, 2, 4, 30, 3, 2, 2, 2, 6, 50, 3, 2, 2, 2, 8, 52, 3, 2, 2, 2, 10, 84, 3, 2, 2, 2, 12, 86, 3, 2, 2, 2, 14, 105, 3, 2, 2, 2, 16, 164, 3, 2, 2, 2, 18, 20, 5, 4, 3, 2, 19, 18, 3, 2, 2, 2, 20, 23, 3, 2, 2, 2, 21, 19, 3, 2, 2, 2, 21, 22, 3, 2, 2, 2, 22, 24, 3, 2, 2, 2, 23, 21, 3, 2, 2, 2, 24, 25, 7, 2, 2, 3, 25, 3, 3, 2, 2, 2, 26, 27, 5, 6, 4, 2, 27, 28, 7, 3, 2, 2, 28, 31, 3, 2, 2, 2, 29, 31, 5, 10, 6, 2, 30, 26, 3, 2, 2, 2, 30, 29, 3, 2, 2, 2, 31, 5, 3, 2, 2, 2, 32, 51, 7, 4, 2, 2, 33, 35, 7, 5, 2, 2, 34, 36, 5, 14, 8, 2, 35, 34, 3, 2, 2, 2, 35, 36, 3, 2, 2, 2, 36, 51, 3, 2, 2, 2, 37, 38, 5, 8, 5, 2, 38, 39, 7, 6, 2, 2, 39, 41, 3, 2, 2, 2, 40, 37, 3, 2, 2, 2, 41, 44, 3, 2, 2, 2, 42, 40, 3, 2, 2, 2, 42, 43, 3, 2, 2, 2, 43, 45, 3, 2, 2, 2, 44, 42, 3, 2, 2, 2, 45, 51, 5, 14, 8, 2, 46, 47, 7, 49, 2, 2, 47, 48, 9, 2, 2, 2, 48, 49, 7, 6, 2, 2, 49, 51, 5, 14, 8, 2, 50, 32, 3, 2, 2, 2, 50, 33, 3, 2, 2, 2, 50, 42, 3, 2, 2, 2, 50, 46, 3, 2, 2, 2, 51, 7, 3, 2, 2, 2, 52, 57, 7, 49, 2, 2, 53, 54, 7, 18, 2, 2, 54, 56, 7, 49, 2, 2, 55, 53, 3, 2, 2, 2, 56, 59, 3, 2, 2, 2, 57, 55, 3, 2, 2, 2, 57, 58, 3, 2, 2, 2, 58, 9, 3, 2, 2, 2, 59, 57, 3, 2, 2, 2, 60, 61, 7, 19, 2, 2, 61, 62, 5, 14, 8, 2, 62, 69, 5, 12, 7, 2, 63, 64, 7, 20, 2, 2, 64, 65, 5, 14, 8, 2, 65, 66, 5, 12, 7, 2, 66, 68, 3, 2, 2, 2, 67, 63, 3, 2, 2, 2, 68, 71, 3, 2, 2, 2, 69, 67, 3, 2, 2, 2, 69, 70, 3, 2, 2, 2, 70, 74, 3, 2, 2, 2, 71, 69, 3, 2, 2, 2, 72, 73, 7, 21, 2, 2, 73, 75, 5, 12, 7, 2, 74, 72, 3, 2, 2, 2, 74, 75, 3, 2, 2, 2, 75, 85, 3, 2, 2, 2, 76, 77, 7, 22, 2, 2, 77, 78, 5, 14, 8, 2, 78, 79, 5, 12, 7, 2, 79, 85, 3, 2, 2, 2, 80, 81, 7, 23, 2, 2, 81, 82, 5, 14, 8, 2, 82, 83, 5, 12, 7, 2, 83, 85, 3, 2, 2, 2, 84, 60, 3, 2, 2, 2, 84, 76, 3, 2, 2, 2, 84, 80, 3, 2, 2, 2, 85, 11, 3, 2, 2, 2, 86, 87, 7, 24, 2, 2, 87, 89, 7, 25, 2, 2, 88, 90, 5, 4, 3, 2, 89, 88, 3, 2, 2, 2, 90, 91, 3, 2, 2, 2, 91, 89, 3, 2, 2, 2, 91, 92, 3, 2, 2, 2, 92, 93, 3, 2, 2, 2, 93, 94, 7, 26, 2, 2, 94, 13, 3, 2, 2, 2, 95, 96, 8, 8, 1, 2, 96, 106, 5, 16, 9, 2, 97, 98, 7, 27, 2, 2, 98, 99, 5, 14, 8, 2, 99, 100, 7, 28, 2, 2, 100, 106, 3, 2, 2, 2, 101, 102, 9, 3, 2, 2, 102, 106, 5, 14, 8, 15, 103, 104, 7, 39, 2, 2, 104, 106, 5, 14, 8, 7, 105, 95, 3, 2, 2, 2, 105, 97, 3, 2, 2, 2, 105, 101, 3, 2, 2, 2, 105, 103, 3, 2, 2, 2, 106, 156, 3, 2, 2, 2, 107, 108, 12, 16, 2, 2, 108, 109, 7, 7, 2, 2, 109, 155, 5, 14, 8, 16, 110, 111, 12, 14, 2, 2, 111, 112, 9, 4, 2, 2, 112, 155, 5, 14, 8, 15, 113, 114, 12, 13, 2, 2, 114, 115, 9, 5, 2, 2, 115, 155, 5, 14, 8, 14, 116, 117, 12, 12, 2, 2, 117, 118, 9, 6, 2, 2, 118, 155, 5, 14, 8, 13, 119, 120, 12, 11, 2, 2, 120, 121, 7, 15, 2, 2, 121, 155, 5, 14, 8, 12, 122, 123, 12, 10, 2, 2, 123, 124, 7, 16, 2, 2, 124, 155, 5, 14, 8, 11, 125, 126, 12, 9, 2, 2, 126, 127, 7, 17, 2, 2, 127, 155, 5, 14, 8, 10, 128, 129, 12, 8, 2, 2, 129, 130, 9, 7, 2, 2, 130, 155, 5, 14, 8, 8, 131, 132, 12, 6, 2, 2, 132, 133, 7, 40, 2, 2, 133, 155, 5, 14, 8, 6, 134, 135, 12, 5, 2, 2, 135, 136, 7, 41, 2, 2, 136, 155, 5, 14, 8, 5, 137, 138, 12, 4, 2, 2, 138, 139, 7, 42, 2, 2, 139, 140, 5, 14, 8, 2, 140, 141, 7, 43, 2, 2, 141, 142, 5, 14, 8, 4, 142, 155, 3, 2, 2, 2, 143, 144, 12, 3, 2, 2, 144, 145, 7, 18, 2, 2, 145, 155, 5, 14, 8, 3, 146, 147, 12, 18, 2, 2, 147, 148, 7, 29, 2, 2, 148, 149, 5, 14, 8, 2, 149, 150, 7, 30, 2, 2, 150, 155, 3, 2, 2, 2, 151, 152, 12, 17, 2, 2, 152, 153, 7, 31, 2, 2, 153, 155, 7, 49, 2, 2, 154, 107, 3, 2, 2, 2, 154, 110, 3, 2, 2, 2, 154, 113, 3, 2, 2, 2, 154, 116, 3, 2, 2, 2, 154, 119, 3, 2, 2, 2, 154, 122, 3, 2, 2, 2, 154, 125, 3, 2, 2, 2, 154, 128, 3, 2, 2, 2, 154, 131, 3, 2, 2, 2, 154, 134, 3, 2, 2, 2, 154, 137, 3, 2, 2, 2, 154, 143, 3, 2, 2, 2, 154, 146, 3, 2, 2, 2, 154, 151, 3, 2, 2, 2, 155, 158, 3, 2, 2, 2, 156, 154, 3, 2, 2, 2, 156, 157, 3, 2, 2, 2, 157, 15, 3, 2, 2, 2, 158, 156, 3, 2, 2, 2, 159, 165, 7, 46, 2, 2, 160, 165, 9, 8, 2, 2, 161, 165, 7, 47, 2, 2, 162, 165, 7, 48, 2, 2, 163, 165, 7, 49, 2, 2, 164, 159, 3, 2, 2, 2, 164, 160, 3, 2, 2, 2, 164, 161, 3, 2, 2, 2, 164, 162, 3, 2, 2, 2, 164, 163, 3, 2, 2, 2, 165, 17, 3, 2, 2, 2, 16, 21, 30, 35, 42, 50, 57, 69, 74, 84, 91, 105, 154, 156, 164] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 51, 195, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 3, 2, 7, 2, 24, 10, 2, 12, 2, 14, 2, 27, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 35, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 40, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 45, 10, 4, 12, 4, 14, 4, 48, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 55, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 60, 10, 5, 12, 5, 14, 5, 63, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 72, 10, 6, 12, 6, 14, 6, 75, 11, 6, 3, 6, 3, 6, 5, 6, 79, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 89, 10, 6, 3, 7, 3, 7, 3, 7, 6, 7, 94, 10, 7, 13, 7, 14, 7, 95, 3, 7, 3, 7, 3, 8, 3, 8, 5, 8, 102, 10, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 114, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 160, 10, 9, 12, 9, 14, 9, 163, 11, 9, 3, 10, 3, 10, 3, 10, 6, 10, 168, 10, 10, 13, 10, 14, 10, 169, 3, 10, 5, 10, 173, 10, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 183, 10, 11, 12, 11, 14, 11, 186, 11, 11, 3, 11, 5, 11, 189, 10, 11, 3, 11, 3, 11, 5, 11, 193, 10, 11, 3, 11, 2, 3, 16, 12, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 2, 9, 3, 2, 7, 17, 4, 2, 11, 12, 32, 32, 3, 2, 8, 10, 3, 2, 11, 12, 3, 2, 13, 14, 3, 2, 33, 38, 3, 2, 44, 45, 2, 223, 2, 25, 3, 2, 2, 2, 4, 34, 3, 2, 2, 2, 6, 54, 3, 2, 2, 2, 8, 56, 3, 2, 2, 2, 10, 88, 3, 2, 2, 2, 12, 90, 3, 2, 2, 2, 14, 101, 3, 2, 2, 2, 16, 113, 3, 2, 2, 2, 18, 167, 3, 2, 2, 2, 20, 192, 3, 2, 2, 2, 22, 24, 5, 4, 3, 2, 23, 22, 3, 2, 2, 2, 24, 27, 3, 2, 2, 2, 25, 23, 3, 2, 2, 2, 25, 26, 3, 2, 2, 2, 26, 28, 3, 2, 2, 2, 27, 25, 3, 2, 2, 2, 28, 29, 7, 2, 2, 3, 29, 3, 3, 2, 2, 2, 30, 31, 5, 6, 4, 2, 31, 32, 7, 3, 2, 2, 32, 35, 3, 2, 2, 2, 33, 35, 5, 10, 6, 2, 34, 30, 3, 2, 2, 2, 34, 33, 3, 2, 2, 2, 35, 5, 3, 2, 2, 2, 36, 55, 7, 4, 2, 2, 37, 39, 7, 5, 2, 2, 38, 40, 5, 14, 8, 2, 39, 38, 3, 2, 2, 2, 39, 40, 3, 2, 2, 2, 40, 55, 3, 2, 2, 2, 41, 42, 5, 8, 5, 2, 42, 43, 7, 6, 2, 2, 43, 45, 3, 2, 2, 2, 44, 41, 3, 2, 2, 2, 45, 48, 3, 2, 2, 2, 46, 44, 3, 2, 2, 2, 46, 47, 3, 2, 2, 2, 47, 49, 3, 2, 2, 2, 48, 46, 3, 2, 2, 2, 49, 55, 5, 14, 8, 2, 50, 51, 7, 49, 2, 2, 51, 52, 9, 2, 2, 2, 52, 53, 7, 6, 2, 2, 53, 55, 5, 16, 9, 2, 54, 36, 3, 2, 2, 2, 54, 37, 3, 2, 2, 2, 54, 46, 3, 2, 2, 2, 54, 50, 3, 2, 2, 2, 55, 7, 3, 2, 2, 2, 56, 61, 7, 49, 2, 2, 57, 58, 7, 18, 2, 2, 58, 60, 7, 49, 2, 2, 59, 57, 3, 2, 2, 2, 60, 63, 3, 2, 2, 2, 61, 59, 3, 2, 2, 2, 61, 62, 3, 2, 2, 2, 62, 9, 3, 2, 2, 2, 63, 61, 3, 2, 2, 2, 64, 65, 7, 19, 2, 2, 65, 66, 5, 16, 9, 2, 66, 73, 5, 12, 7, 2, 67, 68, 7, 20, 2, 2, 68, 69, 5, 16, 9, 2, 69, 70, 5, 12, 7, 2, 70, 72, 3, 2, 2, 2, 71, 67, 3, 2, 2, 2, 72, 75, 3, 2, 2, 2, 73, 71, 3, 2, 2, 2, 73, 74, 3, 2, 2, 2, 74, 78, 3, 2, 2, 2, 75, 73, 3, 2, 2, 2, 76, 77, 7, 21, 2, 2, 77, 79, 5, 12, 7, 2, 78, 76, 3, 2, 2, 2, 78, 79, 3, 2, 2, 2, 79, 89, 3, 2, 2, 2, 80, 81, 7, 22, 2, 2, 81, 82, 5, 16, 9, 2, 82, 83, 5, 12, 7, 2, 83, 89, 3, 2, 2, 2, 84, 85, 7, 23, 2, 2, 85, 86, 5, 16, 9, 2, 86, 87, 5, 12, 7, 2, 87, 89, 3, 2, 2, 2, 88, 64, 3, 2, 2, 2, 88, 80, 3, 2, 2, 2, 88, 84, 3, 2, 2, 2, 89, 11, 3, 2, 2, 2, 90, 91, 7, 24, 2, 2, 91, 93, 7, 25, 2, 2, 92, 94, 5, 4, 3, 2, 93, 92, 3, 2, 2, 2, 94, 95, 3, 2, 2, 2, 95, 93, 3, 2, 2, 2, 95, 96, 3, 2, 2, 2, 96, 97, 3, 2, 2, 2, 97, 98, 7, 26, 2, 2, 98, 13, 3, 2, 2, 2, 99, 102, 5, 16, 9, 2, 100, 102, 5, 18, 10, 2, 101, 99, 3, 2, 2, 2, 101, 100, 3, 2, 2, 2, 102, 15, 3, 2, 2, 2, 103, 104, 8, 9, 1, 2, 104, 114, 5, 20, 11, 2, 105, 106, 7, 27, 2, 2, 106, 107, 5, 14, 8, 2, 107, 108, 7, 28, 2, 2, 108, 114, 3, 2, 2, 2, 109, 110, 9, 3, 2, 2, 110, 114, 5, 16, 9, 14, 111, 112, 7, 39, 2, 2, 112, 114, 5, 16, 9, 6, 113, 103, 3, 2, 2, 2, 113, 105, 3, 2, 2, 2, 113, 109, 3, 2, 2, 2, 113, 111, 3, 2, 2, 2, 114, 161, 3, 2, 2, 2, 115, 116, 12, 15, 2, 2, 116, 117, 7, 7, 2, 2, 117, 160, 5, 16, 9, 15, 118, 119, 12, 13, 2, 2, 119, 120, 9, 4, 2, 2, 120, 160, 5, 16, 9, 14, 121, 122, 12, 12, 2, 2, 122, 123, 9, 5, 2, 2, 123, 160, 5, 16, 9, 13, 124, 125, 12, 11, 2, 2, 125, 126, 9, 6, 2, 2, 126, 160, 5, 16, 9, 12, 127, 128, 12, 10, 2, 2, 128, 129, 7, 15, 2, 2, 129, 160, 5, 16, 9, 11, 130, 131, 12, 9, 2, 2, 131, 132, 7, 16, 2, 2, 132, 160, 5, 16, 9, 10, 133, 134, 12, 8, 2, 2, 134, 135, 7, 17, 2, 2, 135, 160, 5, 16, 9, 9, 136, 137, 12, 7, 2, 2, 137, 138, 9, 7, 2, 2, 138, 160, 5, 16, 9, 7, 139, 140, 12, 5, 2, 2, 140, 141, 7, 40, 2, 2, 141, 160, 5, 16, 9, 5, 142, 143, 12, 4, 2, 2, 143, 144, 7, 41, 2, 2, 144, 160, 5, 16, 9, 4, 145, 146, 12, 3, 2, 2, 146, 147, 7, 42, 2, 2, 147, 148, 5, 16, 9, 2, 148, 149, 7, 43, 2, 2, 149, 150, 5, 16, 9, 3, 150, 160, 3, 2, 2, 2, 151, 152, 12, 17, 2, 2, 152, 153, 7, 29, 2, 2, 153, 154, 5, 16, 9, 2, 154, 155, 7, 30, 2, 2, 155, 160, 3, 2, 2, 2, 156, 157, 12, 16, 2, 2, 157, 158, 7, 31, 2, 2, 158, 160, 7, 49, 2, 2, 159, 115, 3, 2, 2, 2, 159, 118, 3, 2, 2, 2, 159, 121, 3, 2, 2, 2, 159, 124, 3, 2, 2, 2, 159, 127, 3, 2, 2, 2, 159, 130, 3, 2, 2, 2, 159, 133, 3, 2, 2, 2, 159, 136, 3, 2, 2, 2, 159, 139, 3, 2, 2, 2, 159, 142, 3, 2, 2, 2, 159, 145, 3, 2, 2, 2, 159, 151, 3, 2, 2, 2, 159, 156, 3, 2, 2, 2, 160, 163, 3, 2, 2, 2, 161, 159, 3, 2, 2, 2, 161, 162, 3, 2, 2, 2, 162, 17, 3, 2, 2, 2, 163, 161, 3, 2, 2, 2, 164, 165, 5, 16, 9, 2, 165, 166, 7, 18, 2, 2, 166, 168, 3, 2, 2, 2, 167, 164, 3, 2, 2, 2, 168, 169, 3, 2, 2, 2, 169, 167, 3, 2, 2, 2, 169, 170, 3, 2, 2, 2, 170, 172, 3, 2, 2, 2, 171, 173, 5, 16, 9, 2, 172, 171, 3, 2, 2, 2, 172, 173, 3, 2, 2, 2, 173, 19, 3, 2, 2, 2, 174, 193, 7, 46, 2, 2, 175, 193, 9, 8, 2, 2, 176, 193, 7, 47, 2, 2, 177, 193, 7, 48, 2, 2, 178, 184, 7, 29, 2, 2, 179, 180, 5, 16, 9, 2, 180, 181, 7, 18, 2, 2, 181, 183, 3, 2, 2, 2, 182, 179, 3, 2, 2, 2, 183, 186, 3, 2, 2, 2, 184, 182, 3, 2, 2, 2, 184, 185, 3, 2, 2, 2, 185, 188, 3, 2, 2, 2, 186, 184, 3, 2, 2, 2, 187, 189, 5, 16, 9, 2, 188, 187, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 190, 3, 2, 2, 2, 190, 193, 7, 30, 2, 2, 191, 193, 7, 49, 2, 2, 192, 174, 3, 2, 2, 2, 192, 175, 3, 2, 2, 2, 192, 176, 3, 2, 2, 2, 192, 177, 3, 2, 2, 2, 192, 178, 3, 2, 2, 2, 192, 191, 3, 2, 2, 2, 193, 21, 3, 2, 2, 2, 21, 25, 34, 39, 46, 54, 61, 73, 78, 88, 95, 101, 113, 159, 161, 169, 172, 184, 188, 192] \ No newline at end of file diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index 5b4782e9..edeed0b4 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -9,71 +9,87 @@ def serializedATN(): with StringIO() as buf: buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\63") - buf.write("\u00a7\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") - buf.write("\4\b\t\b\4\t\t\t\3\2\7\2\24\n\2\f\2\16\2\27\13\2\3\2\3") - buf.write("\2\3\3\3\3\3\3\3\3\5\3\37\n\3\3\4\3\4\3\4\5\4$\n\4\3\4") - buf.write("\3\4\3\4\7\4)\n\4\f\4\16\4,\13\4\3\4\3\4\3\4\3\4\3\4\5") - buf.write("\4\63\n\4\3\5\3\5\3\5\7\58\n\5\f\5\16\5;\13\5\3\6\3\6") - buf.write("\3\6\3\6\3\6\3\6\3\6\7\6D\n\6\f\6\16\6G\13\6\3\6\3\6\5") - buf.write("\6K\n\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\5\6U\n\6\3\7\3") - buf.write("\7\3\7\6\7Z\n\7\r\7\16\7[\3\7\3\7\3\b\3\b\3\b\3\b\3\b") - buf.write("\3\b\3\b\3\b\3\b\3\b\5\bj\n\b\3\b\3\b\3\b\3\b\3\b\3\b") - buf.write("\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3") - buf.write("\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b") - buf.write("\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3") - buf.write("\b\7\b\u009b\n\b\f\b\16\b\u009e\13\b\3\t\3\t\3\t\3\t\3") - buf.write("\t\5\t\u00a5\n\t\3\t\2\3\16\n\2\4\6\b\n\f\16\20\2\t\3") - buf.write("\2\7\21\4\2\13\f \3\2\b\n\3\2\13\f\3\2\r\16\3\2!&\3\2") - buf.write(",-\2\u00c0\2\25\3\2\2\2\4\36\3\2\2\2\6\62\3\2\2\2\b\64") - buf.write("\3\2\2\2\nT\3\2\2\2\fV\3\2\2\2\16i\3\2\2\2\20\u00a4\3") - buf.write("\2\2\2\22\24\5\4\3\2\23\22\3\2\2\2\24\27\3\2\2\2\25\23") - buf.write("\3\2\2\2\25\26\3\2\2\2\26\30\3\2\2\2\27\25\3\2\2\2\30") - buf.write("\31\7\2\2\3\31\3\3\2\2\2\32\33\5\6\4\2\33\34\7\3\2\2\34") - buf.write("\37\3\2\2\2\35\37\5\n\6\2\36\32\3\2\2\2\36\35\3\2\2\2") - buf.write("\37\5\3\2\2\2 \63\7\4\2\2!#\7\5\2\2\"$\5\16\b\2#\"\3\2") - buf.write("\2\2#$\3\2\2\2$\63\3\2\2\2%&\5\b\5\2&\'\7\6\2\2\')\3\2") - buf.write("\2\2(%\3\2\2\2),\3\2\2\2*(\3\2\2\2*+\3\2\2\2+-\3\2\2\2") - buf.write(",*\3\2\2\2-\63\5\16\b\2./\7\61\2\2/\60\t\2\2\2\60\61\7") - buf.write("\6\2\2\61\63\5\16\b\2\62 \3\2\2\2\62!\3\2\2\2\62*\3\2") - buf.write("\2\2\62.\3\2\2\2\63\7\3\2\2\2\649\7\61\2\2\65\66\7\22") - buf.write("\2\2\668\7\61\2\2\67\65\3\2\2\28;\3\2\2\29\67\3\2\2\2") - buf.write("9:\3\2\2\2:\t\3\2\2\2;9\3\2\2\2<=\7\23\2\2=>\5\16\b\2") - buf.write(">E\5\f\7\2?@\7\24\2\2@A\5\16\b\2AB\5\f\7\2BD\3\2\2\2C") - buf.write("?\3\2\2\2DG\3\2\2\2EC\3\2\2\2EF\3\2\2\2FJ\3\2\2\2GE\3") - buf.write("\2\2\2HI\7\25\2\2IK\5\f\7\2JH\3\2\2\2JK\3\2\2\2KU\3\2") - buf.write("\2\2LM\7\26\2\2MN\5\16\b\2NO\5\f\7\2OU\3\2\2\2PQ\7\27") - buf.write("\2\2QR\5\16\b\2RS\5\f\7\2SU\3\2\2\2T<\3\2\2\2TL\3\2\2") - buf.write("\2TP\3\2\2\2U\13\3\2\2\2VW\7\30\2\2WY\7\31\2\2XZ\5\4\3") - buf.write("\2YX\3\2\2\2Z[\3\2\2\2[Y\3\2\2\2[\\\3\2\2\2\\]\3\2\2\2") - buf.write("]^\7\32\2\2^\r\3\2\2\2_`\b\b\1\2`j\5\20\t\2ab\7\33\2\2") - buf.write("bc\5\16\b\2cd\7\34\2\2dj\3\2\2\2ef\t\3\2\2fj\5\16\b\17") - buf.write("gh\7\'\2\2hj\5\16\b\7i_\3\2\2\2ia\3\2\2\2ie\3\2\2\2ig") - buf.write("\3\2\2\2j\u009c\3\2\2\2kl\f\20\2\2lm\7\7\2\2m\u009b\5") - buf.write("\16\b\20no\f\16\2\2op\t\4\2\2p\u009b\5\16\b\17qr\f\r\2") - buf.write("\2rs\t\5\2\2s\u009b\5\16\b\16tu\f\f\2\2uv\t\6\2\2v\u009b") - buf.write("\5\16\b\rwx\f\13\2\2xy\7\17\2\2y\u009b\5\16\b\fz{\f\n") - buf.write("\2\2{|\7\20\2\2|\u009b\5\16\b\13}~\f\t\2\2~\177\7\21\2") - buf.write("\2\177\u009b\5\16\b\n\u0080\u0081\f\b\2\2\u0081\u0082") - buf.write("\t\7\2\2\u0082\u009b\5\16\b\b\u0083\u0084\f\6\2\2\u0084") - buf.write("\u0085\7(\2\2\u0085\u009b\5\16\b\6\u0086\u0087\f\5\2\2") - buf.write("\u0087\u0088\7)\2\2\u0088\u009b\5\16\b\5\u0089\u008a\f") - buf.write("\4\2\2\u008a\u008b\7*\2\2\u008b\u008c\5\16\b\2\u008c\u008d") - buf.write("\7+\2\2\u008d\u008e\5\16\b\4\u008e\u009b\3\2\2\2\u008f") - buf.write("\u0090\f\3\2\2\u0090\u0091\7\22\2\2\u0091\u009b\5\16\b") - buf.write("\3\u0092\u0093\f\22\2\2\u0093\u0094\7\35\2\2\u0094\u0095") - buf.write("\5\16\b\2\u0095\u0096\7\36\2\2\u0096\u009b\3\2\2\2\u0097") - buf.write("\u0098\f\21\2\2\u0098\u0099\7\37\2\2\u0099\u009b\7\61") - buf.write("\2\2\u009ak\3\2\2\2\u009an\3\2\2\2\u009aq\3\2\2\2\u009a") - buf.write("t\3\2\2\2\u009aw\3\2\2\2\u009az\3\2\2\2\u009a}\3\2\2\2") - buf.write("\u009a\u0080\3\2\2\2\u009a\u0083\3\2\2\2\u009a\u0086\3") - buf.write("\2\2\2\u009a\u0089\3\2\2\2\u009a\u008f\3\2\2\2\u009a\u0092") - buf.write("\3\2\2\2\u009a\u0097\3\2\2\2\u009b\u009e\3\2\2\2\u009c") - buf.write("\u009a\3\2\2\2\u009c\u009d\3\2\2\2\u009d\17\3\2\2\2\u009e") - buf.write("\u009c\3\2\2\2\u009f\u00a5\7.\2\2\u00a0\u00a5\t\b\2\2") - buf.write("\u00a1\u00a5\7/\2\2\u00a2\u00a5\7\60\2\2\u00a3\u00a5\7") - buf.write("\61\2\2\u00a4\u009f\3\2\2\2\u00a4\u00a0\3\2\2\2\u00a4") - buf.write("\u00a1\3\2\2\2\u00a4\u00a2\3\2\2\2\u00a4\u00a3\3\2\2\2") - buf.write("\u00a5\21\3\2\2\2\20\25\36#*\629EJT[i\u009a\u009c\u00a4") + buf.write("\u00c3\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\3\2\7\2\30\n\2\f\2") + buf.write("\16\2\33\13\2\3\2\3\2\3\3\3\3\3\3\3\3\5\3#\n\3\3\4\3\4") + buf.write("\3\4\5\4(\n\4\3\4\3\4\3\4\7\4-\n\4\f\4\16\4\60\13\4\3") + buf.write("\4\3\4\3\4\3\4\3\4\5\4\67\n\4\3\5\3\5\3\5\7\5<\n\5\f\5") + buf.write("\16\5?\13\5\3\6\3\6\3\6\3\6\3\6\3\6\3\6\7\6H\n\6\f\6\16") + buf.write("\6K\13\6\3\6\3\6\5\6O\n\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6") + buf.write("\3\6\5\6Y\n\6\3\7\3\7\3\7\6\7^\n\7\r\7\16\7_\3\7\3\7\3") + buf.write("\b\3\b\5\bf\n\b\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") + buf.write("\t\5\tr\n\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") + buf.write("\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") + buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") + buf.write("\t\3\t\3\t\3\t\3\t\3\t\3\t\7\t\u00a0\n\t\f\t\16\t\u00a3") + buf.write("\13\t\3\n\3\n\3\n\6\n\u00a8\n\n\r\n\16\n\u00a9\3\n\5\n") + buf.write("\u00ad\n\n\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\7\13") + buf.write("\u00b7\n\13\f\13\16\13\u00ba\13\13\3\13\5\13\u00bd\n\13") + buf.write("\3\13\3\13\5\13\u00c1\n\13\3\13\2\3\20\f\2\4\6\b\n\f\16") + buf.write("\20\22\24\2\t\3\2\7\21\4\2\13\f \3\2\b\n\3\2\13\f\3\2") + buf.write("\r\16\3\2!&\3\2,-\2\u00df\2\31\3\2\2\2\4\"\3\2\2\2\6\66") + buf.write("\3\2\2\2\b8\3\2\2\2\nX\3\2\2\2\fZ\3\2\2\2\16e\3\2\2\2") + buf.write("\20q\3\2\2\2\22\u00a7\3\2\2\2\24\u00c0\3\2\2\2\26\30\5") + buf.write("\4\3\2\27\26\3\2\2\2\30\33\3\2\2\2\31\27\3\2\2\2\31\32") + buf.write("\3\2\2\2\32\34\3\2\2\2\33\31\3\2\2\2\34\35\7\2\2\3\35") + buf.write("\3\3\2\2\2\36\37\5\6\4\2\37 \7\3\2\2 #\3\2\2\2!#\5\n\6") + buf.write("\2\"\36\3\2\2\2\"!\3\2\2\2#\5\3\2\2\2$\67\7\4\2\2%\'\7") + buf.write("\5\2\2&(\5\16\b\2\'&\3\2\2\2\'(\3\2\2\2(\67\3\2\2\2)*") + buf.write("\5\b\5\2*+\7\6\2\2+-\3\2\2\2,)\3\2\2\2-\60\3\2\2\2.,\3") + buf.write("\2\2\2./\3\2\2\2/\61\3\2\2\2\60.\3\2\2\2\61\67\5\16\b") + buf.write("\2\62\63\7\61\2\2\63\64\t\2\2\2\64\65\7\6\2\2\65\67\5") + buf.write("\20\t\2\66$\3\2\2\2\66%\3\2\2\2\66.\3\2\2\2\66\62\3\2") + buf.write("\2\2\67\7\3\2\2\28=\7\61\2\29:\7\22\2\2:<\7\61\2\2;9\3") + buf.write("\2\2\2\3\2\2\2>\t\3\2\2\2?=\3\2") + buf.write("\2\2@A\7\23\2\2AB\5\20\t\2BI\5\f\7\2CD\7\24\2\2DE\5\20") + buf.write("\t\2EF\5\f\7\2FH\3\2\2\2GC\3\2\2\2HK\3\2\2\2IG\3\2\2\2") + buf.write("IJ\3\2\2\2JN\3\2\2\2KI\3\2\2\2LM\7\25\2\2MO\5\f\7\2NL") + buf.write("\3\2\2\2NO\3\2\2\2OY\3\2\2\2PQ\7\26\2\2QR\5\20\t\2RS\5") + buf.write("\f\7\2SY\3\2\2\2TU\7\27\2\2UV\5\20\t\2VW\5\f\7\2WY\3\2") + buf.write("\2\2X@\3\2\2\2XP\3\2\2\2XT\3\2\2\2Y\13\3\2\2\2Z[\7\30") + buf.write("\2\2[]\7\31\2\2\\^\5\4\3\2]\\\3\2\2\2^_\3\2\2\2_]\3\2") + buf.write("\2\2_`\3\2\2\2`a\3\2\2\2ab\7\32\2\2b\r\3\2\2\2cf\5\20") + buf.write("\t\2df\5\22\n\2ec\3\2\2\2ed\3\2\2\2f\17\3\2\2\2gh\b\t") + buf.write("\1\2hr\5\24\13\2ij\7\33\2\2jk\5\16\b\2kl\7\34\2\2lr\3") + buf.write("\2\2\2mn\t\3\2\2nr\5\20\t\16op\7\'\2\2pr\5\20\t\6qg\3") + buf.write("\2\2\2qi\3\2\2\2qm\3\2\2\2qo\3\2\2\2r\u00a1\3\2\2\2st") + buf.write("\f\17\2\2tu\7\7\2\2u\u00a0\5\20\t\17vw\f\r\2\2wx\t\4\2") + buf.write("\2x\u00a0\5\20\t\16yz\f\f\2\2z{\t\5\2\2{\u00a0\5\20\t") + buf.write("\r|}\f\13\2\2}~\t\6\2\2~\u00a0\5\20\t\f\177\u0080\f\n") + buf.write("\2\2\u0080\u0081\7\17\2\2\u0081\u00a0\5\20\t\13\u0082") + buf.write("\u0083\f\t\2\2\u0083\u0084\7\20\2\2\u0084\u00a0\5\20\t") + buf.write("\n\u0085\u0086\f\b\2\2\u0086\u0087\7\21\2\2\u0087\u00a0") + buf.write("\5\20\t\t\u0088\u0089\f\7\2\2\u0089\u008a\t\7\2\2\u008a") + buf.write("\u00a0\5\20\t\7\u008b\u008c\f\5\2\2\u008c\u008d\7(\2\2") + buf.write("\u008d\u00a0\5\20\t\5\u008e\u008f\f\4\2\2\u008f\u0090") + buf.write("\7)\2\2\u0090\u00a0\5\20\t\4\u0091\u0092\f\3\2\2\u0092") + buf.write("\u0093\7*\2\2\u0093\u0094\5\20\t\2\u0094\u0095\7+\2\2") + buf.write("\u0095\u0096\5\20\t\3\u0096\u00a0\3\2\2\2\u0097\u0098") + buf.write("\f\21\2\2\u0098\u0099\7\35\2\2\u0099\u009a\5\20\t\2\u009a") + buf.write("\u009b\7\36\2\2\u009b\u00a0\3\2\2\2\u009c\u009d\f\20\2") + buf.write("\2\u009d\u009e\7\37\2\2\u009e\u00a0\7\61\2\2\u009fs\3") + buf.write("\2\2\2\u009fv\3\2\2\2\u009fy\3\2\2\2\u009f|\3\2\2\2\u009f") + buf.write("\177\3\2\2\2\u009f\u0082\3\2\2\2\u009f\u0085\3\2\2\2\u009f") + buf.write("\u0088\3\2\2\2\u009f\u008b\3\2\2\2\u009f\u008e\3\2\2\2") + buf.write("\u009f\u0091\3\2\2\2\u009f\u0097\3\2\2\2\u009f\u009c\3") + buf.write("\2\2\2\u00a0\u00a3\3\2\2\2\u00a1\u009f\3\2\2\2\u00a1\u00a2") + buf.write("\3\2\2\2\u00a2\21\3\2\2\2\u00a3\u00a1\3\2\2\2\u00a4\u00a5") + buf.write("\5\20\t\2\u00a5\u00a6\7\22\2\2\u00a6\u00a8\3\2\2\2\u00a7") + buf.write("\u00a4\3\2\2\2\u00a8\u00a9\3\2\2\2\u00a9\u00a7\3\2\2\2") + buf.write("\u00a9\u00aa\3\2\2\2\u00aa\u00ac\3\2\2\2\u00ab\u00ad\5") + buf.write("\20\t\2\u00ac\u00ab\3\2\2\2\u00ac\u00ad\3\2\2\2\u00ad") + buf.write("\23\3\2\2\2\u00ae\u00c1\7.\2\2\u00af\u00c1\t\b\2\2\u00b0") + buf.write("\u00c1\7/\2\2\u00b1\u00c1\7\60\2\2\u00b2\u00b8\7\35\2") + buf.write("\2\u00b3\u00b4\5\20\t\2\u00b4\u00b5\7\22\2\2\u00b5\u00b7") + buf.write("\3\2\2\2\u00b6\u00b3\3\2\2\2\u00b7\u00ba\3\2\2\2\u00b8") + buf.write("\u00b6\3\2\2\2\u00b8\u00b9\3\2\2\2\u00b9\u00bc\3\2\2\2") + buf.write("\u00ba\u00b8\3\2\2\2\u00bb\u00bd\5\20\t\2\u00bc\u00bb") + buf.write("\3\2\2\2\u00bc\u00bd\3\2\2\2\u00bd\u00be\3\2\2\2\u00be") + buf.write("\u00c1\7\36\2\2\u00bf\u00c1\7\61\2\2\u00c0\u00ae\3\2\2") + buf.write("\2\u00c0\u00af\3\2\2\2\u00c0\u00b0\3\2\2\2\u00c0\u00b1") + buf.write("\3\2\2\2\u00c0\u00b2\3\2\2\2\u00c0\u00bf\3\2\2\2\u00c1") + buf.write("\25\3\2\2\2\25\31\"\'.\66=INX_eq\u009f\u00a1\u00a9\u00ac") + buf.write("\u00b8\u00bc\u00c0") return buf.getvalue() @@ -114,11 +130,13 @@ class PyxellParser ( Parser ): RULE_lvalue = 3 RULE_compound_stmt = 4 RULE_block = 5 - RULE_expr = 6 - RULE_atom = 7 + RULE_any_expr = 6 + RULE_expr = 7 + RULE_tuple_expr = 8 + RULE_atom = 9 ruleNames = [ "program", "stmt", "simple_stmt", "lvalue", "compound_stmt", - "block", "expr", "atom" ] + "block", "any_expr", "expr", "tuple_expr", "atom" ] EOF = Token.EOF T__0=1 @@ -215,17 +233,17 @@ def program(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 19 + self.state = 23 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__42) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): - self.state = 16 + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__26) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__42) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): + self.state = 20 self.stmt() - self.state = 21 + self.state = 25 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 22 + self.state = 26 self.match(PyxellParser.EOF) except RecognitionException as re: localctx.exception = re @@ -267,19 +285,19 @@ def stmt(self): localctx = PyxellParser.StmtContext(self, self._ctx, self.state) self.enterRule(localctx, 2, self.RULE_stmt) try: - self.state = 28 + self.state = 32 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__24, PyxellParser.T__29, PyxellParser.T__36, PyxellParser.T__41, PyxellParser.T__42, PyxellParser.INT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: + if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__24, PyxellParser.T__26, PyxellParser.T__29, PyxellParser.T__36, PyxellParser.T__41, PyxellParser.T__42, PyxellParser.INT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: self.enterOuterAlt(localctx, 1) - self.state = 24 + self.state = 28 self.simple_stmt() - self.state = 25 + self.state = 29 self.match(PyxellParser.T__0) pass elif token in [PyxellParser.T__16, PyxellParser.T__19, PyxellParser.T__20]: self.enterOuterAlt(localctx, 2) - self.state = 27 + self.state = 31 self.compound_stmt() pass else: @@ -336,8 +354,8 @@ def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Sim super().__init__(parser) self.copyFrom(ctx) - def expr(self): - return self.getTypedRuleContext(PyxellParser.ExprContext,0) + def any_expr(self): + return self.getTypedRuleContext(PyxellParser.Any_exprContext,0) def lvalue(self, i:int=None): if i is None: @@ -373,8 +391,8 @@ def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Sim super().__init__(parser) self.copyFrom(ctx) - def expr(self): - return self.getTypedRuleContext(PyxellParser.ExprContext,0) + def any_expr(self): + return self.getTypedRuleContext(PyxellParser.Any_exprContext,0) def accept(self, visitor:ParseTreeVisitor): @@ -391,27 +409,27 @@ def simple_stmt(self): self.enterRule(localctx, 4, self.RULE_simple_stmt) self._la = 0 # Token type try: - self.state = 48 + self.state = 52 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,4,self._ctx) if la_ == 1: localctx = PyxellParser.StmtSkipContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 30 + self.state = 34 self.match(PyxellParser.T__1) pass elif la_ == 2: localctx = PyxellParser.StmtPrintContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 31 + self.state = 35 self.match(PyxellParser.T__2) - self.state = 33 + self.state = 37 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__42) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): - self.state = 32 - self.expr(0) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__26) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__42) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): + self.state = 36 + self.any_expr() pass @@ -419,29 +437,29 @@ def simple_stmt(self): elif la_ == 3: localctx = PyxellParser.StmtAssgContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 40 + self.state = 44 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,3,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 35 + self.state = 39 self.lvalue() - self.state = 36 + self.state = 40 self.match(PyxellParser.T__3) - self.state = 42 + self.state = 46 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,3,self._ctx) - self.state = 43 - self.expr(0) + self.state = 47 + self.any_expr() pass elif la_ == 4: localctx = PyxellParser.StmtAssgExprContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 44 + self.state = 48 self.match(PyxellParser.ID) - self.state = 45 + self.state = 49 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__4) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__7) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__11) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__14))) != 0)): @@ -449,9 +467,9 @@ def simple_stmt(self): else: self._errHandler.reportMatch(self) self.consume() - self.state = 46 + self.state = 50 self.match(PyxellParser.T__3) - self.state = 47 + self.state = 51 self.expr(0) pass @@ -496,17 +514,17 @@ def lvalue(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 50 + self.state = 54 self.match(PyxellParser.ID) - self.state = 55 + self.state = 59 self._errHandler.sync(self) _la = self._input.LA(1) while _la==PyxellParser.T__15: - self.state = 51 + self.state = 55 self.match(PyxellParser.T__15) - self.state = 52 + self.state = 56 self.match(PyxellParser.ID) - self.state = 57 + self.state = 61 self._errHandler.sync(self) _la = self._input.LA(1) @@ -608,39 +626,39 @@ def compound_stmt(self): self.enterRule(localctx, 8, self.RULE_compound_stmt) self._la = 0 # Token type try: - self.state = 82 + self.state = 86 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__16]: localctx = PyxellParser.StmtIfContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 58 + self.state = 62 self.match(PyxellParser.T__16) - self.state = 59 + self.state = 63 self.expr(0) - self.state = 60 + self.state = 64 self.block() - self.state = 67 + self.state = 71 self._errHandler.sync(self) _la = self._input.LA(1) while _la==PyxellParser.T__17: - self.state = 61 + self.state = 65 self.match(PyxellParser.T__17) - self.state = 62 + self.state = 66 self.expr(0) - self.state = 63 + self.state = 67 self.block() - self.state = 69 + self.state = 73 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 72 + self.state = 76 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__18: - self.state = 70 + self.state = 74 self.match(PyxellParser.T__18) - self.state = 71 + self.state = 75 self.block() @@ -648,21 +666,21 @@ def compound_stmt(self): elif token in [PyxellParser.T__19]: localctx = PyxellParser.StmtWhileContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 74 + self.state = 78 self.match(PyxellParser.T__19) - self.state = 75 + self.state = 79 self.expr(0) - self.state = 76 + self.state = 80 self.block() pass elif token in [PyxellParser.T__20]: localctx = PyxellParser.StmtUntilContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 78 + self.state = 82 self.match(PyxellParser.T__20) - self.state = 79 + self.state = 83 self.expr(0) - self.state = 80 + self.state = 84 self.block() pass else: @@ -709,23 +727,23 @@ def block(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 84 + self.state = 88 self.match(PyxellParser.T__21) - self.state = 85 + self.state = 89 self.match(PyxellParser.T__22) - self.state = 87 + self.state = 91 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 86 + self.state = 90 self.stmt() - self.state = 89 + self.state = 93 self._errHandler.sync(self) _la = self._input.LA(1) - if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__42) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0)): + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__26) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__42) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0)): break - self.state = 91 + self.state = 95 self.match(PyxellParser.T__23) except RecognitionException as re: localctx.exception = re @@ -736,6 +754,62 @@ def block(self): return localctx + class Any_exprContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def expr(self): + return self.getTypedRuleContext(PyxellParser.ExprContext,0) + + + def tuple_expr(self): + return self.getTypedRuleContext(PyxellParser.Tuple_exprContext,0) + + + def getRuleIndex(self): + return PyxellParser.RULE_any_expr + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAny_expr" ): + return visitor.visitAny_expr(self) + else: + return visitor.visitChildren(self) + + + + + def any_expr(self): + + localctx = PyxellParser.Any_exprContext(self, self._ctx, self.state) + self.enterRule(localctx, 12, self.RULE_any_expr) + try: + self.state = 99 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,10,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 97 + self.expr(0) + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 98 + self.tuple_expr() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ExprContext(ParserRuleContext): def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): @@ -790,26 +864,6 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) - class ExprTupleContext(ExprContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(PyxellParser.ExprContext) - else: - return self.getTypedRuleContext(PyxellParser.ExprContext,i) - - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExprTuple" ): - return visitor.visitExprTuple(self) - else: - return visitor.visitChildren(self) - - class ExprIndexContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext @@ -892,8 +946,8 @@ def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Exp super().__init__(parser) self.copyFrom(ctx) - def expr(self): - return self.getTypedRuleContext(PyxellParser.ExprContext,0) + def any_expr(self): + return self.getTypedRuleContext(PyxellParser.Any_exprContext,0) def accept(self, visitor:ParseTreeVisitor): @@ -951,38 +1005,38 @@ def expr(self, _p:int=0): _parentState = self.state localctx = PyxellParser.ExprContext(self, self._ctx, _parentState) _prevctx = localctx - _startState = 12 - self.enterRecursionRule(localctx, 12, self.RULE_expr, _p) + _startState = 14 + self.enterRecursionRule(localctx, 14, self.RULE_expr, _p) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 103 + self.state = 111 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__41, PyxellParser.T__42, PyxellParser.INT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: + if token in [PyxellParser.T__26, PyxellParser.T__41, PyxellParser.T__42, PyxellParser.INT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: localctx = PyxellParser.ExprAtomContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 94 + self.state = 102 self.atom() pass elif token in [PyxellParser.T__24]: localctx = PyxellParser.ExprParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 95 + self.state = 103 self.match(PyxellParser.T__24) - self.state = 96 - self.expr(0) - self.state = 97 + self.state = 104 + self.any_expr() + self.state = 105 self.match(PyxellParser.T__25) pass elif token in [PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__29]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 99 + self.state = 107 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__29))) != 0)): @@ -990,54 +1044,54 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 100 - self.expr(13) + self.state = 108 + self.expr(12) pass elif token in [PyxellParser.T__36]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 101 + self.state = 109 localctx.op = self.match(PyxellParser.T__36) - self.state = 102 - self.expr(5) + self.state = 110 + self.expr(4) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 154 + self.state = 159 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,12,self._ctx) + _alt = self._interp.adaptivePredict(self._input,13,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 152 + self.state = 157 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,11,self._ctx) + la_ = self._interp.adaptivePredict(self._input,12,self._ctx) if la_ == 1: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 105 - if not self.precpred(self._ctx, 14): + self.state = 113 + if not self.precpred(self._ctx, 13): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 14)") - self.state = 106 + raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") + self.state = 114 localctx.op = self.match(PyxellParser.T__4) - self.state = 107 - self.expr(14) + self.state = 115 + self.expr(13) pass elif la_ == 2: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 108 - if not self.precpred(self._ctx, 12): + self.state = 116 + if not self.precpred(self._ctx, 11): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 12)") - self.state = 109 + raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") + self.state = 117 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__7))) != 0)): @@ -1045,18 +1099,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 110 - self.expr(13) + self.state = 118 + self.expr(12) pass elif la_ == 3: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 111 - if not self.precpred(self._ctx, 11): + self.state = 119 + if not self.precpred(self._ctx, 10): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") - self.state = 112 + raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") + self.state = 120 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__8 or _la==PyxellParser.T__9): @@ -1064,18 +1118,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 113 - self.expr(12) + self.state = 121 + self.expr(11) pass elif la_ == 4: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 114 - if not self.precpred(self._ctx, 10): + self.state = 122 + if not self.precpred(self._ctx, 9): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") - self.state = 115 + raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") + self.state = 123 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__10 or _la==PyxellParser.T__11): @@ -1083,57 +1137,57 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 116 - self.expr(11) + self.state = 124 + self.expr(10) pass elif la_ == 5: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 117 - if not self.precpred(self._ctx, 9): + self.state = 125 + if not self.precpred(self._ctx, 8): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") - self.state = 118 + raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") + self.state = 126 localctx.op = self.match(PyxellParser.T__12) - self.state = 119 - self.expr(10) + self.state = 127 + self.expr(9) pass elif la_ == 6: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 120 - if not self.precpred(self._ctx, 8): + self.state = 128 + if not self.precpred(self._ctx, 7): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") - self.state = 121 + raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") + self.state = 129 localctx.op = self.match(PyxellParser.T__13) - self.state = 122 - self.expr(9) + self.state = 130 + self.expr(8) pass elif la_ == 7: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 123 - if not self.precpred(self._ctx, 7): + self.state = 131 + if not self.precpred(self._ctx, 6): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") - self.state = 124 + raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") + self.state = 132 localctx.op = self.match(PyxellParser.T__14) - self.state = 125 - self.expr(8) + self.state = 133 + self.expr(7) pass elif la_ == 8: localctx = PyxellParser.ExprCmpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 126 - if not self.precpred(self._ctx, 6): + self.state = 134 + if not self.precpred(self._ctx, 5): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") - self.state = 127 + raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") + self.state = 135 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__30) | (1 << PyxellParser.T__31) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__35))) != 0)): @@ -1141,98 +1195,85 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 128 - self.expr(6) + self.state = 136 + self.expr(5) pass elif la_ == 9: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 129 - if not self.precpred(self._ctx, 4): + self.state = 137 + if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") - self.state = 130 + raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") + self.state = 138 localctx.op = self.match(PyxellParser.T__37) - self.state = 131 - self.expr(4) + self.state = 139 + self.expr(3) pass elif la_ == 10: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 132 - if not self.precpred(self._ctx, 3): + self.state = 140 + if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 133 + raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") + self.state = 141 localctx.op = self.match(PyxellParser.T__38) - self.state = 134 - self.expr(3) + self.state = 142 + self.expr(2) pass elif la_ == 11: localctx = PyxellParser.ExprCondContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 135 - if not self.precpred(self._ctx, 2): + self.state = 143 + if not self.precpred(self._ctx, 1): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 136 + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 144 self.match(PyxellParser.T__39) - self.state = 137 + self.state = 145 self.expr(0) - self.state = 138 + self.state = 146 self.match(PyxellParser.T__40) - self.state = 139 - self.expr(2) - pass - - elif la_ == 12: - localctx = PyxellParser.ExprTupleContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) - self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 141 - if not self.precpred(self._ctx, 1): - from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") - self.state = 142 - self.match(PyxellParser.T__15) - self.state = 143 + self.state = 147 self.expr(1) pass - elif la_ == 13: + elif la_ == 12: localctx = PyxellParser.ExprIndexContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 144 - if not self.precpred(self._ctx, 16): + self.state = 149 + if not self.precpred(self._ctx, 15): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 16)") - self.state = 145 + raise FailedPredicateException(self, "self.precpred(self._ctx, 15)") + self.state = 150 self.match(PyxellParser.T__26) - self.state = 146 + self.state = 151 self.expr(0) - self.state = 147 + self.state = 152 self.match(PyxellParser.T__27) pass - elif la_ == 14: + elif la_ == 13: localctx = PyxellParser.ExprAttrContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 149 - if not self.precpred(self._ctx, 15): + self.state = 154 + if not self.precpred(self._ctx, 14): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 15)") - self.state = 150 + raise FailedPredicateException(self, "self.precpred(self._ctx, 14)") + self.state = 155 self.match(PyxellParser.T__28) - self.state = 151 + self.state = 156 self.match(PyxellParser.ID) pass - self.state = 156 + self.state = 161 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,12,self._ctx) + _alt = self._interp.adaptivePredict(self._input,13,self._ctx) except RecognitionException as re: localctx.exception = re @@ -1243,6 +1284,84 @@ def expr(self, _p:int=0): return localctx + class Tuple_exprContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + + def getRuleIndex(self): + return PyxellParser.RULE_tuple_expr + + + def copyFrom(self, ctx:ParserRuleContext): + super().copyFrom(ctx) + + + + class ExprTupleContext(Tuple_exprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Tuple_exprContext + super().__init__(parser) + self.copyFrom(ctx) + + def expr(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(PyxellParser.ExprContext) + else: + return self.getTypedRuleContext(PyxellParser.ExprContext,i) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExprTuple" ): + return visitor.visitExprTuple(self) + else: + return visitor.visitChildren(self) + + + + def tuple_expr(self): + + localctx = PyxellParser.Tuple_exprContext(self, self._ctx, self.state) + self.enterRule(localctx, 16, self.RULE_tuple_expr) + self._la = 0 # Token type + try: + localctx = PyxellParser.ExprTupleContext(self, localctx) + self.enterOuterAlt(localctx, 1) + self.state = 165 + self._errHandler.sync(self) + _alt = 1 + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 162 + self.expr(0) + self.state = 163 + self.match(PyxellParser.T__15) + + else: + raise NoViableAltException(self) + self.state = 167 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,14,self._ctx) + + self.state = 170 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__26) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__42) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): + self.state = 169 + self.expr(0) + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class AtomContext(ParserRuleContext): def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): @@ -1289,6 +1408,26 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) + class AtomArrayContext(AtomContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.AtomContext + super().__init__(parser) + self.copyFrom(ctx) + + def expr(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(PyxellParser.ExprContext) + else: + return self.getTypedRuleContext(PyxellParser.ExprContext,i) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAtomArray" ): + return visitor.visitAtomArray(self) + else: + return visitor.visitChildren(self) + + class AtomIdContext(AtomContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.AtomContext @@ -1341,22 +1480,22 @@ def accept(self, visitor:ParseTreeVisitor): def atom(self): localctx = PyxellParser.AtomContext(self, self._ctx, self.state) - self.enterRule(localctx, 14, self.RULE_atom) + self.enterRule(localctx, 18, self.RULE_atom) self._la = 0 # Token type try: - self.state = 162 + self.state = 190 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: localctx = PyxellParser.AtomIntContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 157 + self.state = 172 self.match(PyxellParser.INT) pass elif token in [PyxellParser.T__41, PyxellParser.T__42]: localctx = PyxellParser.AtomBoolContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 158 + self.state = 173 _la = self._input.LA(1) if not(_la==PyxellParser.T__41 or _la==PyxellParser.T__42): self._errHandler.recoverInline(self) @@ -1367,19 +1506,48 @@ def atom(self): elif token in [PyxellParser.CHAR]: localctx = PyxellParser.AtomCharContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 159 + self.state = 174 self.match(PyxellParser.CHAR) pass elif token in [PyxellParser.STRING]: localctx = PyxellParser.AtomStringContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 160 + self.state = 175 self.match(PyxellParser.STRING) pass + elif token in [PyxellParser.T__26]: + localctx = PyxellParser.AtomArrayContext(self, localctx) + self.enterOuterAlt(localctx, 5) + self.state = 176 + self.match(PyxellParser.T__26) + self.state = 182 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,16,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 177 + self.expr(0) + self.state = 178 + self.match(PyxellParser.T__15) + self.state = 184 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,16,self._ctx) + + self.state = 186 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__26) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__42) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): + self.state = 185 + self.expr(0) + + + self.state = 188 + self.match(PyxellParser.T__27) + pass elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) - self.enterOuterAlt(localctx, 5) - self.state = 161 + self.enterOuterAlt(localctx, 6) + self.state = 189 self.match(PyxellParser.ID) pass else: @@ -1398,7 +1566,7 @@ def atom(self): def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): if self._predicates == None: self._predicates = dict() - self._predicates[6] = self.expr_sempred + self._predicates[7] = self.expr_sempred pred = self._predicates.get(ruleIndex, None) if pred is None: raise Exception("No predicate with index:" + str(ruleIndex)) @@ -1407,59 +1575,55 @@ def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): def expr_sempred(self, localctx:ExprContext, predIndex:int): if predIndex == 0: - return self.precpred(self._ctx, 14) + return self.precpred(self._ctx, 13) if predIndex == 1: - return self.precpred(self._ctx, 12) + return self.precpred(self._ctx, 11) if predIndex == 2: - return self.precpred(self._ctx, 11) + return self.precpred(self._ctx, 10) if predIndex == 3: - return self.precpred(self._ctx, 10) + return self.precpred(self._ctx, 9) if predIndex == 4: - return self.precpred(self._ctx, 9) + return self.precpred(self._ctx, 8) if predIndex == 5: - return self.precpred(self._ctx, 8) + return self.precpred(self._ctx, 7) if predIndex == 6: - return self.precpred(self._ctx, 7) + return self.precpred(self._ctx, 6) if predIndex == 7: - return self.precpred(self._ctx, 6) + return self.precpred(self._ctx, 5) if predIndex == 8: - return self.precpred(self._ctx, 4) + return self.precpred(self._ctx, 3) if predIndex == 9: - return self.precpred(self._ctx, 3) + return self.precpred(self._ctx, 2) if predIndex == 10: - return self.precpred(self._ctx, 2) + return self.precpred(self._ctx, 1) if predIndex == 11: - return self.precpred(self._ctx, 1) + return self.precpred(self._ctx, 15) if predIndex == 12: - return self.precpred(self._ctx, 16) - - - if predIndex == 13: - return self.precpred(self._ctx, 15) + return self.precpred(self._ctx, 14) diff --git a/src/antlr/PyxellVisitor.py b/src/antlr/PyxellVisitor.py index 809feb7a..670c32b8 100644 --- a/src/antlr/PyxellVisitor.py +++ b/src/antlr/PyxellVisitor.py @@ -64,6 +64,11 @@ def visitBlock(self, ctx:PyxellParser.BlockContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#any_expr. + def visitAny_expr(self, ctx:PyxellParser.Any_exprContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#ExprUnaryOp. def visitExprUnaryOp(self, ctx:PyxellParser.ExprUnaryOpContext): return self.visitChildren(ctx) @@ -74,11 +79,6 @@ def visitExprCmp(self, ctx:PyxellParser.ExprCmpContext): return self.visitChildren(ctx) - # Visit a parse tree produced by PyxellParser#ExprTuple. - def visitExprTuple(self, ctx:PyxellParser.ExprTupleContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by PyxellParser#ExprIndex. def visitExprIndex(self, ctx:PyxellParser.ExprIndexContext): return self.visitChildren(ctx) @@ -114,6 +114,11 @@ def visitExprLogicalOp(self, ctx:PyxellParser.ExprLogicalOpContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#ExprTuple. + def visitExprTuple(self, ctx:PyxellParser.ExprTupleContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#AtomInt. def visitAtomInt(self, ctx:PyxellParser.AtomIntContext): return self.visitChildren(ctx) @@ -134,6 +139,11 @@ def visitAtomString(self, ctx:PyxellParser.AtomStringContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#AtomArray. + def visitAtomArray(self, ctx:PyxellParser.AtomArrayContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#AtomId. def visitAtomId(self, ctx:PyxellParser.AtomIdContext): return self.visitChildren(ctx) diff --git a/src/compiler.py b/src/compiler.py index 72806c1f..0301fb25 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -147,8 +147,8 @@ def print(self, ctx, value): else: self.throw(ctx, err.NotPrintable(value.type)) - def malloc(self, type): - size = self.builder.gep(vNull(type), [vIndex(1)]) + def malloc(self, type, n=1): + size = self.builder.gep(vNull(type), [vIndex(n)]) size = self.builder.ptrtoint(size, tInt) ptr = self.builder.call(self.builtins['malloc'], [size]) return self.builder.bitcast(ptr, tPtr(type)) @@ -168,7 +168,7 @@ def visitProgram(self, ctx): ### Statements ### def visitStmtPrint(self, ctx): - expr = ctx.expr() + expr = ctx.any_expr() if expr: value = self.visit(expr) self.print(expr, value) @@ -176,7 +176,7 @@ def visitStmtPrint(self, ctx): self.builder.call(self.builtins['putchar'], [vChar('\n')]) def visitStmtAssg(self, ctx): - value = self.visit(ctx.expr()) + value = self.visit(ctx.any_expr()) for lvalue in ctx.lvalue(): ids = self.visit(lvalue) @@ -276,14 +276,14 @@ def visitStmtUntil(self, ctx): ### Expressions ### def visitExprParentheses(self, ctx): - return self.visit(ctx.expr()) + return self.visit(ctx.any_expr()) def visitExprIndex(self, ctx): exprs = ctx.expr() index = self.cast(exprs[1], self.visit(exprs[1]), tInt) value = self.visit(exprs[0]) - if value.type.isString(): + if value.type.isString() or value.type.isArray(): return self.builder.load(self.builder.gep(self.builder.extract_value(value, [0]), [index])) self.throw(ctx, err.NotIndexable(value.type)) @@ -292,7 +292,7 @@ def visitExprAttr(self, ctx): value = self.visit(ctx.expr()) id = str(ctx.ID()) - if value.type.isString(): + if value.type.isString() or value.type.isArray(): if id != "length": self.throw(ctx, err.NoAttribute(value.type, id)) @@ -399,21 +399,14 @@ def visitExprCond(self, ctx): return self.builder.select(cond, *values) def visitExprTuple(self, ctx): - exprs = [] - while True: - exprs.append(ctx.expr(0)) - if not isinstance(ctx.expr(1), PyxellParser.ExprTupleContext): - break - ctx = ctx.expr(1) - exprs.append(ctx.expr(1)) - + exprs = ctx.expr() values = [self.visit(expr) for expr in exprs] - type = tTuple(value.type for value in values) + type = tTuple(value.type for value in values) tuple = self.malloc(type) for i, value in enumerate(values): - ptr = self.builder.gep(tuple, [vIndex(0), vIndex(i)]) + ptr = self.builder.gep(tuple, [vInt(0), vIndex(i)]) self.builder.store(value, ptr) return self.builder.load(tuple) @@ -433,20 +426,40 @@ def visitAtomChar(self, ctx): def visitAtomString(self, ctx): lit = ast.literal_eval(str(ctx.STRING())) - value = ll.Constant(ll.ArrayType(tChar, len(lit)), [vChar(c) for c in lit]) + values = [vChar(c) for c in lit] + const = ll.Constant(ll.ArrayType(tChar, len(lit)), values) string = self.malloc(tString) - pointer = self.builder.gep(string, [vIndex(0), vIndex(0)]) - array = ll.GlobalVariable(self.module, value.type, self.module.get_unique_name('str')) + pointer = self.builder.gep(string, [vInt(0), vIndex(0)]) + array = ll.GlobalVariable(self.module, const.type, self.module.get_unique_name('str')) array.global_constant = True - array.initializer = value - self.builder.store(self.builder.gep(array, [vIndex(0), vIndex(0)]), pointer) + array.initializer = const + self.builder.store(self.builder.gep(array, [vInt(0), vInt(0)]), pointer) - length = self.builder.gep(string, [vIndex(0), vIndex(1)]) - self.builder.store(vInt(value.type.count), length) + length = self.builder.gep(string, [vInt(0), vIndex(1)]) + self.builder.store(vInt(const.type.count), length) return self.builder.load(string) + def visitAtomArray(self, ctx): + exprs = ctx.expr() + values = self.unify(ctx, *[self.visit(expr) for expr in exprs]) + + subtype = values[0].type + type = tArray(subtype) + array = self.malloc(type) + + pointer = self.builder.gep(array, [vInt(0), vIndex(0)]) + memory = self.malloc(subtype, len(values)) + for i, value in enumerate(values): + self.builder.store(value, self.builder.gep(memory, [vInt(i)])) + self.builder.store(memory, pointer) + + length = self.builder.gep(array, [vInt(0), vIndex(1)]) + self.builder.store(vInt(len(values)), length) + + return self.builder.load(array) + def visitAtomId(self, ctx): return self.builder.load(self.get(ctx, ctx.ID())) diff --git a/src/types.py b/src/types.py index 5f4f4015..1a58b116 100644 --- a/src/types.py +++ b/src/types.py @@ -2,32 +2,56 @@ import llvmlite.ir as ll +class CustomStructType(ll.LiteralStructType): + + def __init__(self, elements, kind): + super().__init__(elements) + self.kind = kind + + def __eq__(self, other): + if not super().__eq__(other): + return False + return self.kind == other.kind + + tVoid = ll.VoidType() tInt = ll.IntType(64) tBool = ll.IntType(1) tChar = ll.IntType(8) + def tPtr(type=tChar): return type.as_pointer() -tString = ll.LiteralStructType([tPtr(), tInt]) -tString.kind = 'string' + +tString = CustomStructType([tPtr(), tInt], 'string') def isString(type): return getattr(type, 'kind', None) == 'string' ll.Type.isString = isString -def tTuple(elements): - type = ll.LiteralStructType(elements) - type.kind = 'tuple' + +def tArray(subtype): + type = CustomStructType([tPtr(subtype), tInt], 'array') + type.subtype = subtype return type +def isArray(type): + return getattr(type, 'kind', None) == 'array' + +ll.Type.isArray = isArray + + +def tTuple(elements): + return CustomStructType(elements, 'tuple') + def isTuple(type): return getattr(type, 'kind', None) == 'tuple' ll.Type.isTuple = isTuple + def tFunc(args, ret=tVoid): return ll.FunctionType(ret, args) @@ -43,6 +67,8 @@ def showType(type): return 'Char' if type.isString(): return 'String' + if type.isArray(): + return f'[{type.subtype.show()}]' if type.isTuple(): return '*'.join(t.show() for t in type.elements) return str(type) diff --git a/test/bad/arrays/cmp01.err b/test/bad/arrays/cmp01.err new file mode 100644 index 00000000..4c5f2ec1 --- /dev/null +++ b/test/bad/arrays/cmp01.err @@ -0,0 +1 @@ +Cannot compare `[Char]` with `String`. \ No newline at end of file diff --git a/test/bad/arrays/cmp01.px b/test/bad/arrays/cmp01.px new file mode 100644 index 00000000..b74ad509 --- /dev/null +++ b/test/bad/arrays/cmp01.px @@ -0,0 +1,2 @@ + +['a'] == "a" diff --git a/test/good/arrays/array05.out b/test/good/arrays/array05.out new file mode 100644 index 00000000..d00491fd --- /dev/null +++ b/test/good/arrays/array05.out @@ -0,0 +1 @@ +1 diff --git a/test/good/arrays/array05.px b/test/good/arrays/array05.px new file mode 100644 index 00000000..aa800297 --- /dev/null +++ b/test/good/arrays/array05.px @@ -0,0 +1,2 @@ + +print [1,].length From 2b883b93103c858b556fd3ab898d4943e51ca265 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Fri, 11 Oct 2019 22:04:44 +0200 Subject: [PATCH 019/100] Expressions as lvalues --- src/Pyxell.g4 | 4 +- src/antlr/Pyxell.interp | 2 +- src/antlr/PyxellParser.py | 382 +++++++++++++++++++------------------- src/compiler.py | 66 ++++--- src/errors.py | 1 + 5 files changed, 232 insertions(+), 223 deletions(-) diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index fb11f8e4..85afd926 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -13,11 +13,11 @@ simple_stmt : 'skip' # StmtSkip | 'print' any_expr? # StmtPrint | (lvalue '=')* any_expr # StmtAssg - | ID op=('^' | '*' | '/' | '%' | '+' | '-' | '<<' | '>>' | '&' | '$' | '|') '=' expr # StmtAssgExpr + | expr op=('^' | '*' | '/' | '%' | '+' | '-' | '<<' | '>>' | '&' | '$' | '|') '=' expr # StmtAssgExpr ; lvalue - : ID (',' ID)* + : expr (',' expr)* ; compound_stmt diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index 7d54210a..2d3f9510 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -116,4 +116,4 @@ atom atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 51, 195, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 3, 2, 7, 2, 24, 10, 2, 12, 2, 14, 2, 27, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 35, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 40, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 45, 10, 4, 12, 4, 14, 4, 48, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 55, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 60, 10, 5, 12, 5, 14, 5, 63, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 72, 10, 6, 12, 6, 14, 6, 75, 11, 6, 3, 6, 3, 6, 5, 6, 79, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 89, 10, 6, 3, 7, 3, 7, 3, 7, 6, 7, 94, 10, 7, 13, 7, 14, 7, 95, 3, 7, 3, 7, 3, 8, 3, 8, 5, 8, 102, 10, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 114, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 160, 10, 9, 12, 9, 14, 9, 163, 11, 9, 3, 10, 3, 10, 3, 10, 6, 10, 168, 10, 10, 13, 10, 14, 10, 169, 3, 10, 5, 10, 173, 10, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 183, 10, 11, 12, 11, 14, 11, 186, 11, 11, 3, 11, 5, 11, 189, 10, 11, 3, 11, 3, 11, 5, 11, 193, 10, 11, 3, 11, 2, 3, 16, 12, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 2, 9, 3, 2, 7, 17, 4, 2, 11, 12, 32, 32, 3, 2, 8, 10, 3, 2, 11, 12, 3, 2, 13, 14, 3, 2, 33, 38, 3, 2, 44, 45, 2, 223, 2, 25, 3, 2, 2, 2, 4, 34, 3, 2, 2, 2, 6, 54, 3, 2, 2, 2, 8, 56, 3, 2, 2, 2, 10, 88, 3, 2, 2, 2, 12, 90, 3, 2, 2, 2, 14, 101, 3, 2, 2, 2, 16, 113, 3, 2, 2, 2, 18, 167, 3, 2, 2, 2, 20, 192, 3, 2, 2, 2, 22, 24, 5, 4, 3, 2, 23, 22, 3, 2, 2, 2, 24, 27, 3, 2, 2, 2, 25, 23, 3, 2, 2, 2, 25, 26, 3, 2, 2, 2, 26, 28, 3, 2, 2, 2, 27, 25, 3, 2, 2, 2, 28, 29, 7, 2, 2, 3, 29, 3, 3, 2, 2, 2, 30, 31, 5, 6, 4, 2, 31, 32, 7, 3, 2, 2, 32, 35, 3, 2, 2, 2, 33, 35, 5, 10, 6, 2, 34, 30, 3, 2, 2, 2, 34, 33, 3, 2, 2, 2, 35, 5, 3, 2, 2, 2, 36, 55, 7, 4, 2, 2, 37, 39, 7, 5, 2, 2, 38, 40, 5, 14, 8, 2, 39, 38, 3, 2, 2, 2, 39, 40, 3, 2, 2, 2, 40, 55, 3, 2, 2, 2, 41, 42, 5, 8, 5, 2, 42, 43, 7, 6, 2, 2, 43, 45, 3, 2, 2, 2, 44, 41, 3, 2, 2, 2, 45, 48, 3, 2, 2, 2, 46, 44, 3, 2, 2, 2, 46, 47, 3, 2, 2, 2, 47, 49, 3, 2, 2, 2, 48, 46, 3, 2, 2, 2, 49, 55, 5, 14, 8, 2, 50, 51, 7, 49, 2, 2, 51, 52, 9, 2, 2, 2, 52, 53, 7, 6, 2, 2, 53, 55, 5, 16, 9, 2, 54, 36, 3, 2, 2, 2, 54, 37, 3, 2, 2, 2, 54, 46, 3, 2, 2, 2, 54, 50, 3, 2, 2, 2, 55, 7, 3, 2, 2, 2, 56, 61, 7, 49, 2, 2, 57, 58, 7, 18, 2, 2, 58, 60, 7, 49, 2, 2, 59, 57, 3, 2, 2, 2, 60, 63, 3, 2, 2, 2, 61, 59, 3, 2, 2, 2, 61, 62, 3, 2, 2, 2, 62, 9, 3, 2, 2, 2, 63, 61, 3, 2, 2, 2, 64, 65, 7, 19, 2, 2, 65, 66, 5, 16, 9, 2, 66, 73, 5, 12, 7, 2, 67, 68, 7, 20, 2, 2, 68, 69, 5, 16, 9, 2, 69, 70, 5, 12, 7, 2, 70, 72, 3, 2, 2, 2, 71, 67, 3, 2, 2, 2, 72, 75, 3, 2, 2, 2, 73, 71, 3, 2, 2, 2, 73, 74, 3, 2, 2, 2, 74, 78, 3, 2, 2, 2, 75, 73, 3, 2, 2, 2, 76, 77, 7, 21, 2, 2, 77, 79, 5, 12, 7, 2, 78, 76, 3, 2, 2, 2, 78, 79, 3, 2, 2, 2, 79, 89, 3, 2, 2, 2, 80, 81, 7, 22, 2, 2, 81, 82, 5, 16, 9, 2, 82, 83, 5, 12, 7, 2, 83, 89, 3, 2, 2, 2, 84, 85, 7, 23, 2, 2, 85, 86, 5, 16, 9, 2, 86, 87, 5, 12, 7, 2, 87, 89, 3, 2, 2, 2, 88, 64, 3, 2, 2, 2, 88, 80, 3, 2, 2, 2, 88, 84, 3, 2, 2, 2, 89, 11, 3, 2, 2, 2, 90, 91, 7, 24, 2, 2, 91, 93, 7, 25, 2, 2, 92, 94, 5, 4, 3, 2, 93, 92, 3, 2, 2, 2, 94, 95, 3, 2, 2, 2, 95, 93, 3, 2, 2, 2, 95, 96, 3, 2, 2, 2, 96, 97, 3, 2, 2, 2, 97, 98, 7, 26, 2, 2, 98, 13, 3, 2, 2, 2, 99, 102, 5, 16, 9, 2, 100, 102, 5, 18, 10, 2, 101, 99, 3, 2, 2, 2, 101, 100, 3, 2, 2, 2, 102, 15, 3, 2, 2, 2, 103, 104, 8, 9, 1, 2, 104, 114, 5, 20, 11, 2, 105, 106, 7, 27, 2, 2, 106, 107, 5, 14, 8, 2, 107, 108, 7, 28, 2, 2, 108, 114, 3, 2, 2, 2, 109, 110, 9, 3, 2, 2, 110, 114, 5, 16, 9, 14, 111, 112, 7, 39, 2, 2, 112, 114, 5, 16, 9, 6, 113, 103, 3, 2, 2, 2, 113, 105, 3, 2, 2, 2, 113, 109, 3, 2, 2, 2, 113, 111, 3, 2, 2, 2, 114, 161, 3, 2, 2, 2, 115, 116, 12, 15, 2, 2, 116, 117, 7, 7, 2, 2, 117, 160, 5, 16, 9, 15, 118, 119, 12, 13, 2, 2, 119, 120, 9, 4, 2, 2, 120, 160, 5, 16, 9, 14, 121, 122, 12, 12, 2, 2, 122, 123, 9, 5, 2, 2, 123, 160, 5, 16, 9, 13, 124, 125, 12, 11, 2, 2, 125, 126, 9, 6, 2, 2, 126, 160, 5, 16, 9, 12, 127, 128, 12, 10, 2, 2, 128, 129, 7, 15, 2, 2, 129, 160, 5, 16, 9, 11, 130, 131, 12, 9, 2, 2, 131, 132, 7, 16, 2, 2, 132, 160, 5, 16, 9, 10, 133, 134, 12, 8, 2, 2, 134, 135, 7, 17, 2, 2, 135, 160, 5, 16, 9, 9, 136, 137, 12, 7, 2, 2, 137, 138, 9, 7, 2, 2, 138, 160, 5, 16, 9, 7, 139, 140, 12, 5, 2, 2, 140, 141, 7, 40, 2, 2, 141, 160, 5, 16, 9, 5, 142, 143, 12, 4, 2, 2, 143, 144, 7, 41, 2, 2, 144, 160, 5, 16, 9, 4, 145, 146, 12, 3, 2, 2, 146, 147, 7, 42, 2, 2, 147, 148, 5, 16, 9, 2, 148, 149, 7, 43, 2, 2, 149, 150, 5, 16, 9, 3, 150, 160, 3, 2, 2, 2, 151, 152, 12, 17, 2, 2, 152, 153, 7, 29, 2, 2, 153, 154, 5, 16, 9, 2, 154, 155, 7, 30, 2, 2, 155, 160, 3, 2, 2, 2, 156, 157, 12, 16, 2, 2, 157, 158, 7, 31, 2, 2, 158, 160, 7, 49, 2, 2, 159, 115, 3, 2, 2, 2, 159, 118, 3, 2, 2, 2, 159, 121, 3, 2, 2, 2, 159, 124, 3, 2, 2, 2, 159, 127, 3, 2, 2, 2, 159, 130, 3, 2, 2, 2, 159, 133, 3, 2, 2, 2, 159, 136, 3, 2, 2, 2, 159, 139, 3, 2, 2, 2, 159, 142, 3, 2, 2, 2, 159, 145, 3, 2, 2, 2, 159, 151, 3, 2, 2, 2, 159, 156, 3, 2, 2, 2, 160, 163, 3, 2, 2, 2, 161, 159, 3, 2, 2, 2, 161, 162, 3, 2, 2, 2, 162, 17, 3, 2, 2, 2, 163, 161, 3, 2, 2, 2, 164, 165, 5, 16, 9, 2, 165, 166, 7, 18, 2, 2, 166, 168, 3, 2, 2, 2, 167, 164, 3, 2, 2, 2, 168, 169, 3, 2, 2, 2, 169, 167, 3, 2, 2, 2, 169, 170, 3, 2, 2, 2, 170, 172, 3, 2, 2, 2, 171, 173, 5, 16, 9, 2, 172, 171, 3, 2, 2, 2, 172, 173, 3, 2, 2, 2, 173, 19, 3, 2, 2, 2, 174, 193, 7, 46, 2, 2, 175, 193, 9, 8, 2, 2, 176, 193, 7, 47, 2, 2, 177, 193, 7, 48, 2, 2, 178, 184, 7, 29, 2, 2, 179, 180, 5, 16, 9, 2, 180, 181, 7, 18, 2, 2, 181, 183, 3, 2, 2, 2, 182, 179, 3, 2, 2, 2, 183, 186, 3, 2, 2, 2, 184, 182, 3, 2, 2, 2, 184, 185, 3, 2, 2, 2, 185, 188, 3, 2, 2, 2, 186, 184, 3, 2, 2, 2, 187, 189, 5, 16, 9, 2, 188, 187, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 190, 3, 2, 2, 2, 190, 193, 7, 30, 2, 2, 191, 193, 7, 49, 2, 2, 192, 174, 3, 2, 2, 2, 192, 175, 3, 2, 2, 2, 192, 176, 3, 2, 2, 2, 192, 177, 3, 2, 2, 2, 192, 178, 3, 2, 2, 2, 192, 191, 3, 2, 2, 2, 193, 21, 3, 2, 2, 2, 21, 25, 34, 39, 46, 54, 61, 73, 78, 88, 95, 101, 113, 159, 161, 169, 172, 184, 188, 192] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 51, 196, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 3, 2, 7, 2, 24, 10, 2, 12, 2, 14, 2, 27, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 35, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 40, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 45, 10, 4, 12, 4, 14, 4, 48, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 56, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 61, 10, 5, 12, 5, 14, 5, 64, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 73, 10, 6, 12, 6, 14, 6, 76, 11, 6, 3, 6, 3, 6, 5, 6, 80, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 90, 10, 6, 3, 7, 3, 7, 3, 7, 6, 7, 95, 10, 7, 13, 7, 14, 7, 96, 3, 7, 3, 7, 3, 8, 3, 8, 5, 8, 103, 10, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 115, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 161, 10, 9, 12, 9, 14, 9, 164, 11, 9, 3, 10, 3, 10, 3, 10, 6, 10, 169, 10, 10, 13, 10, 14, 10, 170, 3, 10, 5, 10, 174, 10, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 184, 10, 11, 12, 11, 14, 11, 187, 11, 11, 3, 11, 5, 11, 190, 10, 11, 3, 11, 3, 11, 5, 11, 194, 10, 11, 3, 11, 2, 3, 16, 12, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 2, 9, 3, 2, 7, 17, 4, 2, 11, 12, 32, 32, 3, 2, 8, 10, 3, 2, 11, 12, 3, 2, 13, 14, 3, 2, 33, 38, 3, 2, 44, 45, 2, 224, 2, 25, 3, 2, 2, 2, 4, 34, 3, 2, 2, 2, 6, 55, 3, 2, 2, 2, 8, 57, 3, 2, 2, 2, 10, 89, 3, 2, 2, 2, 12, 91, 3, 2, 2, 2, 14, 102, 3, 2, 2, 2, 16, 114, 3, 2, 2, 2, 18, 168, 3, 2, 2, 2, 20, 193, 3, 2, 2, 2, 22, 24, 5, 4, 3, 2, 23, 22, 3, 2, 2, 2, 24, 27, 3, 2, 2, 2, 25, 23, 3, 2, 2, 2, 25, 26, 3, 2, 2, 2, 26, 28, 3, 2, 2, 2, 27, 25, 3, 2, 2, 2, 28, 29, 7, 2, 2, 3, 29, 3, 3, 2, 2, 2, 30, 31, 5, 6, 4, 2, 31, 32, 7, 3, 2, 2, 32, 35, 3, 2, 2, 2, 33, 35, 5, 10, 6, 2, 34, 30, 3, 2, 2, 2, 34, 33, 3, 2, 2, 2, 35, 5, 3, 2, 2, 2, 36, 56, 7, 4, 2, 2, 37, 39, 7, 5, 2, 2, 38, 40, 5, 14, 8, 2, 39, 38, 3, 2, 2, 2, 39, 40, 3, 2, 2, 2, 40, 56, 3, 2, 2, 2, 41, 42, 5, 8, 5, 2, 42, 43, 7, 6, 2, 2, 43, 45, 3, 2, 2, 2, 44, 41, 3, 2, 2, 2, 45, 48, 3, 2, 2, 2, 46, 44, 3, 2, 2, 2, 46, 47, 3, 2, 2, 2, 47, 49, 3, 2, 2, 2, 48, 46, 3, 2, 2, 2, 49, 56, 5, 14, 8, 2, 50, 51, 5, 16, 9, 2, 51, 52, 9, 2, 2, 2, 52, 53, 7, 6, 2, 2, 53, 54, 5, 16, 9, 2, 54, 56, 3, 2, 2, 2, 55, 36, 3, 2, 2, 2, 55, 37, 3, 2, 2, 2, 55, 46, 3, 2, 2, 2, 55, 50, 3, 2, 2, 2, 56, 7, 3, 2, 2, 2, 57, 62, 5, 16, 9, 2, 58, 59, 7, 18, 2, 2, 59, 61, 5, 16, 9, 2, 60, 58, 3, 2, 2, 2, 61, 64, 3, 2, 2, 2, 62, 60, 3, 2, 2, 2, 62, 63, 3, 2, 2, 2, 63, 9, 3, 2, 2, 2, 64, 62, 3, 2, 2, 2, 65, 66, 7, 19, 2, 2, 66, 67, 5, 16, 9, 2, 67, 74, 5, 12, 7, 2, 68, 69, 7, 20, 2, 2, 69, 70, 5, 16, 9, 2, 70, 71, 5, 12, 7, 2, 71, 73, 3, 2, 2, 2, 72, 68, 3, 2, 2, 2, 73, 76, 3, 2, 2, 2, 74, 72, 3, 2, 2, 2, 74, 75, 3, 2, 2, 2, 75, 79, 3, 2, 2, 2, 76, 74, 3, 2, 2, 2, 77, 78, 7, 21, 2, 2, 78, 80, 5, 12, 7, 2, 79, 77, 3, 2, 2, 2, 79, 80, 3, 2, 2, 2, 80, 90, 3, 2, 2, 2, 81, 82, 7, 22, 2, 2, 82, 83, 5, 16, 9, 2, 83, 84, 5, 12, 7, 2, 84, 90, 3, 2, 2, 2, 85, 86, 7, 23, 2, 2, 86, 87, 5, 16, 9, 2, 87, 88, 5, 12, 7, 2, 88, 90, 3, 2, 2, 2, 89, 65, 3, 2, 2, 2, 89, 81, 3, 2, 2, 2, 89, 85, 3, 2, 2, 2, 90, 11, 3, 2, 2, 2, 91, 92, 7, 24, 2, 2, 92, 94, 7, 25, 2, 2, 93, 95, 5, 4, 3, 2, 94, 93, 3, 2, 2, 2, 95, 96, 3, 2, 2, 2, 96, 94, 3, 2, 2, 2, 96, 97, 3, 2, 2, 2, 97, 98, 3, 2, 2, 2, 98, 99, 7, 26, 2, 2, 99, 13, 3, 2, 2, 2, 100, 103, 5, 16, 9, 2, 101, 103, 5, 18, 10, 2, 102, 100, 3, 2, 2, 2, 102, 101, 3, 2, 2, 2, 103, 15, 3, 2, 2, 2, 104, 105, 8, 9, 1, 2, 105, 115, 5, 20, 11, 2, 106, 107, 7, 27, 2, 2, 107, 108, 5, 14, 8, 2, 108, 109, 7, 28, 2, 2, 109, 115, 3, 2, 2, 2, 110, 111, 9, 3, 2, 2, 111, 115, 5, 16, 9, 14, 112, 113, 7, 39, 2, 2, 113, 115, 5, 16, 9, 6, 114, 104, 3, 2, 2, 2, 114, 106, 3, 2, 2, 2, 114, 110, 3, 2, 2, 2, 114, 112, 3, 2, 2, 2, 115, 162, 3, 2, 2, 2, 116, 117, 12, 15, 2, 2, 117, 118, 7, 7, 2, 2, 118, 161, 5, 16, 9, 15, 119, 120, 12, 13, 2, 2, 120, 121, 9, 4, 2, 2, 121, 161, 5, 16, 9, 14, 122, 123, 12, 12, 2, 2, 123, 124, 9, 5, 2, 2, 124, 161, 5, 16, 9, 13, 125, 126, 12, 11, 2, 2, 126, 127, 9, 6, 2, 2, 127, 161, 5, 16, 9, 12, 128, 129, 12, 10, 2, 2, 129, 130, 7, 15, 2, 2, 130, 161, 5, 16, 9, 11, 131, 132, 12, 9, 2, 2, 132, 133, 7, 16, 2, 2, 133, 161, 5, 16, 9, 10, 134, 135, 12, 8, 2, 2, 135, 136, 7, 17, 2, 2, 136, 161, 5, 16, 9, 9, 137, 138, 12, 7, 2, 2, 138, 139, 9, 7, 2, 2, 139, 161, 5, 16, 9, 7, 140, 141, 12, 5, 2, 2, 141, 142, 7, 40, 2, 2, 142, 161, 5, 16, 9, 5, 143, 144, 12, 4, 2, 2, 144, 145, 7, 41, 2, 2, 145, 161, 5, 16, 9, 4, 146, 147, 12, 3, 2, 2, 147, 148, 7, 42, 2, 2, 148, 149, 5, 16, 9, 2, 149, 150, 7, 43, 2, 2, 150, 151, 5, 16, 9, 3, 151, 161, 3, 2, 2, 2, 152, 153, 12, 17, 2, 2, 153, 154, 7, 29, 2, 2, 154, 155, 5, 16, 9, 2, 155, 156, 7, 30, 2, 2, 156, 161, 3, 2, 2, 2, 157, 158, 12, 16, 2, 2, 158, 159, 7, 31, 2, 2, 159, 161, 7, 49, 2, 2, 160, 116, 3, 2, 2, 2, 160, 119, 3, 2, 2, 2, 160, 122, 3, 2, 2, 2, 160, 125, 3, 2, 2, 2, 160, 128, 3, 2, 2, 2, 160, 131, 3, 2, 2, 2, 160, 134, 3, 2, 2, 2, 160, 137, 3, 2, 2, 2, 160, 140, 3, 2, 2, 2, 160, 143, 3, 2, 2, 2, 160, 146, 3, 2, 2, 2, 160, 152, 3, 2, 2, 2, 160, 157, 3, 2, 2, 2, 161, 164, 3, 2, 2, 2, 162, 160, 3, 2, 2, 2, 162, 163, 3, 2, 2, 2, 163, 17, 3, 2, 2, 2, 164, 162, 3, 2, 2, 2, 165, 166, 5, 16, 9, 2, 166, 167, 7, 18, 2, 2, 167, 169, 3, 2, 2, 2, 168, 165, 3, 2, 2, 2, 169, 170, 3, 2, 2, 2, 170, 168, 3, 2, 2, 2, 170, 171, 3, 2, 2, 2, 171, 173, 3, 2, 2, 2, 172, 174, 5, 16, 9, 2, 173, 172, 3, 2, 2, 2, 173, 174, 3, 2, 2, 2, 174, 19, 3, 2, 2, 2, 175, 194, 7, 46, 2, 2, 176, 194, 9, 8, 2, 2, 177, 194, 7, 47, 2, 2, 178, 194, 7, 48, 2, 2, 179, 185, 7, 29, 2, 2, 180, 181, 5, 16, 9, 2, 181, 182, 7, 18, 2, 2, 182, 184, 3, 2, 2, 2, 183, 180, 3, 2, 2, 2, 184, 187, 3, 2, 2, 2, 185, 183, 3, 2, 2, 2, 185, 186, 3, 2, 2, 2, 186, 189, 3, 2, 2, 2, 187, 185, 3, 2, 2, 2, 188, 190, 5, 16, 9, 2, 189, 188, 3, 2, 2, 2, 189, 190, 3, 2, 2, 2, 190, 191, 3, 2, 2, 2, 191, 194, 7, 30, 2, 2, 192, 194, 7, 49, 2, 2, 193, 175, 3, 2, 2, 2, 193, 176, 3, 2, 2, 2, 193, 177, 3, 2, 2, 2, 193, 178, 3, 2, 2, 2, 193, 179, 3, 2, 2, 2, 193, 192, 3, 2, 2, 2, 194, 21, 3, 2, 2, 2, 21, 25, 34, 39, 46, 55, 62, 74, 79, 89, 96, 102, 114, 160, 162, 170, 173, 185, 189, 193] \ No newline at end of file diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index edeed0b4..a132d1ee 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -9,87 +9,87 @@ def serializedATN(): with StringIO() as buf: buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\63") - buf.write("\u00c3\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\u00c4\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\3\2\7\2\30\n\2\f\2") buf.write("\16\2\33\13\2\3\2\3\2\3\3\3\3\3\3\3\3\5\3#\n\3\3\4\3\4") buf.write("\3\4\5\4(\n\4\3\4\3\4\3\4\7\4-\n\4\f\4\16\4\60\13\4\3") - buf.write("\4\3\4\3\4\3\4\3\4\5\4\67\n\4\3\5\3\5\3\5\7\5<\n\5\f\5") - buf.write("\16\5?\13\5\3\6\3\6\3\6\3\6\3\6\3\6\3\6\7\6H\n\6\f\6\16") - buf.write("\6K\13\6\3\6\3\6\5\6O\n\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6") - buf.write("\3\6\5\6Y\n\6\3\7\3\7\3\7\6\7^\n\7\r\7\16\7_\3\7\3\7\3") - buf.write("\b\3\b\5\bf\n\b\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") - buf.write("\t\5\tr\n\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") - buf.write("\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") + buf.write("\4\3\4\3\4\3\4\3\4\3\4\5\48\n\4\3\5\3\5\3\5\7\5=\n\5\f") + buf.write("\5\16\5@\13\5\3\6\3\6\3\6\3\6\3\6\3\6\3\6\7\6I\n\6\f\6") + buf.write("\16\6L\13\6\3\6\3\6\5\6P\n\6\3\6\3\6\3\6\3\6\3\6\3\6\3") + buf.write("\6\3\6\5\6Z\n\6\3\7\3\7\3\7\6\7_\n\7\r\7\16\7`\3\7\3\7") + buf.write("\3\b\3\b\5\bg\n\b\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") + buf.write("\3\t\5\ts\n\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") - buf.write("\t\3\t\3\t\3\t\3\t\3\t\3\t\7\t\u00a0\n\t\f\t\16\t\u00a3") - buf.write("\13\t\3\n\3\n\3\n\6\n\u00a8\n\n\r\n\16\n\u00a9\3\n\5\n") - buf.write("\u00ad\n\n\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\7\13") - buf.write("\u00b7\n\13\f\13\16\13\u00ba\13\13\3\13\5\13\u00bd\n\13") - buf.write("\3\13\3\13\5\13\u00c1\n\13\3\13\2\3\20\f\2\4\6\b\n\f\16") + buf.write("\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") + buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\7\t\u00a1\n\t\f\t\16\t\u00a4") + buf.write("\13\t\3\n\3\n\3\n\6\n\u00a9\n\n\r\n\16\n\u00aa\3\n\5\n") + buf.write("\u00ae\n\n\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\7\13") + buf.write("\u00b8\n\13\f\13\16\13\u00bb\13\13\3\13\5\13\u00be\n\13") + buf.write("\3\13\3\13\5\13\u00c2\n\13\3\13\2\3\20\f\2\4\6\b\n\f\16") buf.write("\20\22\24\2\t\3\2\7\21\4\2\13\f \3\2\b\n\3\2\13\f\3\2") - buf.write("\r\16\3\2!&\3\2,-\2\u00df\2\31\3\2\2\2\4\"\3\2\2\2\6\66") - buf.write("\3\2\2\2\b8\3\2\2\2\nX\3\2\2\2\fZ\3\2\2\2\16e\3\2\2\2") - buf.write("\20q\3\2\2\2\22\u00a7\3\2\2\2\24\u00c0\3\2\2\2\26\30\5") + buf.write("\r\16\3\2!&\3\2,-\2\u00e0\2\31\3\2\2\2\4\"\3\2\2\2\6\67") + buf.write("\3\2\2\2\b9\3\2\2\2\nY\3\2\2\2\f[\3\2\2\2\16f\3\2\2\2") + buf.write("\20r\3\2\2\2\22\u00a8\3\2\2\2\24\u00c1\3\2\2\2\26\30\5") buf.write("\4\3\2\27\26\3\2\2\2\30\33\3\2\2\2\31\27\3\2\2\2\31\32") buf.write("\3\2\2\2\32\34\3\2\2\2\33\31\3\2\2\2\34\35\7\2\2\3\35") buf.write("\3\3\2\2\2\36\37\5\6\4\2\37 \7\3\2\2 #\3\2\2\2!#\5\n\6") - buf.write("\2\"\36\3\2\2\2\"!\3\2\2\2#\5\3\2\2\2$\67\7\4\2\2%\'\7") - buf.write("\5\2\2&(\5\16\b\2\'&\3\2\2\2\'(\3\2\2\2(\67\3\2\2\2)*") - buf.write("\5\b\5\2*+\7\6\2\2+-\3\2\2\2,)\3\2\2\2-\60\3\2\2\2.,\3") - buf.write("\2\2\2./\3\2\2\2/\61\3\2\2\2\60.\3\2\2\2\61\67\5\16\b") - buf.write("\2\62\63\7\61\2\2\63\64\t\2\2\2\64\65\7\6\2\2\65\67\5") - buf.write("\20\t\2\66$\3\2\2\2\66%\3\2\2\2\66.\3\2\2\2\66\62\3\2") - buf.write("\2\2\67\7\3\2\2\28=\7\61\2\29:\7\22\2\2:<\7\61\2\2;9\3") - buf.write("\2\2\2\3\2\2\2>\t\3\2\2\2?=\3\2") - buf.write("\2\2@A\7\23\2\2AB\5\20\t\2BI\5\f\7\2CD\7\24\2\2DE\5\20") - buf.write("\t\2EF\5\f\7\2FH\3\2\2\2GC\3\2\2\2HK\3\2\2\2IG\3\2\2\2") - buf.write("IJ\3\2\2\2JN\3\2\2\2KI\3\2\2\2LM\7\25\2\2MO\5\f\7\2NL") - buf.write("\3\2\2\2NO\3\2\2\2OY\3\2\2\2PQ\7\26\2\2QR\5\20\t\2RS\5") - buf.write("\f\7\2SY\3\2\2\2TU\7\27\2\2UV\5\20\t\2VW\5\f\7\2WY\3\2") - buf.write("\2\2X@\3\2\2\2XP\3\2\2\2XT\3\2\2\2Y\13\3\2\2\2Z[\7\30") - buf.write("\2\2[]\7\31\2\2\\^\5\4\3\2]\\\3\2\2\2^_\3\2\2\2_]\3\2") - buf.write("\2\2_`\3\2\2\2`a\3\2\2\2ab\7\32\2\2b\r\3\2\2\2cf\5\20") - buf.write("\t\2df\5\22\n\2ec\3\2\2\2ed\3\2\2\2f\17\3\2\2\2gh\b\t") - buf.write("\1\2hr\5\24\13\2ij\7\33\2\2jk\5\16\b\2kl\7\34\2\2lr\3") - buf.write("\2\2\2mn\t\3\2\2nr\5\20\t\16op\7\'\2\2pr\5\20\t\6qg\3") - buf.write("\2\2\2qi\3\2\2\2qm\3\2\2\2qo\3\2\2\2r\u00a1\3\2\2\2st") - buf.write("\f\17\2\2tu\7\7\2\2u\u00a0\5\20\t\17vw\f\r\2\2wx\t\4\2") - buf.write("\2x\u00a0\5\20\t\16yz\f\f\2\2z{\t\5\2\2{\u00a0\5\20\t") - buf.write("\r|}\f\13\2\2}~\t\6\2\2~\u00a0\5\20\t\f\177\u0080\f\n") - buf.write("\2\2\u0080\u0081\7\17\2\2\u0081\u00a0\5\20\t\13\u0082") - buf.write("\u0083\f\t\2\2\u0083\u0084\7\20\2\2\u0084\u00a0\5\20\t") - buf.write("\n\u0085\u0086\f\b\2\2\u0086\u0087\7\21\2\2\u0087\u00a0") - buf.write("\5\20\t\t\u0088\u0089\f\7\2\2\u0089\u008a\t\7\2\2\u008a") - buf.write("\u00a0\5\20\t\7\u008b\u008c\f\5\2\2\u008c\u008d\7(\2\2") - buf.write("\u008d\u00a0\5\20\t\5\u008e\u008f\f\4\2\2\u008f\u0090") - buf.write("\7)\2\2\u0090\u00a0\5\20\t\4\u0091\u0092\f\3\2\2\u0092") - buf.write("\u0093\7*\2\2\u0093\u0094\5\20\t\2\u0094\u0095\7+\2\2") - buf.write("\u0095\u0096\5\20\t\3\u0096\u00a0\3\2\2\2\u0097\u0098") - buf.write("\f\21\2\2\u0098\u0099\7\35\2\2\u0099\u009a\5\20\t\2\u009a") - buf.write("\u009b\7\36\2\2\u009b\u00a0\3\2\2\2\u009c\u009d\f\20\2") - buf.write("\2\u009d\u009e\7\37\2\2\u009e\u00a0\7\61\2\2\u009fs\3") - buf.write("\2\2\2\u009fv\3\2\2\2\u009fy\3\2\2\2\u009f|\3\2\2\2\u009f") - buf.write("\177\3\2\2\2\u009f\u0082\3\2\2\2\u009f\u0085\3\2\2\2\u009f") - buf.write("\u0088\3\2\2\2\u009f\u008b\3\2\2\2\u009f\u008e\3\2\2\2") - buf.write("\u009f\u0091\3\2\2\2\u009f\u0097\3\2\2\2\u009f\u009c\3") - buf.write("\2\2\2\u00a0\u00a3\3\2\2\2\u00a1\u009f\3\2\2\2\u00a1\u00a2") - buf.write("\3\2\2\2\u00a2\21\3\2\2\2\u00a3\u00a1\3\2\2\2\u00a4\u00a5") - buf.write("\5\20\t\2\u00a5\u00a6\7\22\2\2\u00a6\u00a8\3\2\2\2\u00a7") - buf.write("\u00a4\3\2\2\2\u00a8\u00a9\3\2\2\2\u00a9\u00a7\3\2\2\2") - buf.write("\u00a9\u00aa\3\2\2\2\u00aa\u00ac\3\2\2\2\u00ab\u00ad\5") - buf.write("\20\t\2\u00ac\u00ab\3\2\2\2\u00ac\u00ad\3\2\2\2\u00ad") - buf.write("\23\3\2\2\2\u00ae\u00c1\7.\2\2\u00af\u00c1\t\b\2\2\u00b0") - buf.write("\u00c1\7/\2\2\u00b1\u00c1\7\60\2\2\u00b2\u00b8\7\35\2") - buf.write("\2\u00b3\u00b4\5\20\t\2\u00b4\u00b5\7\22\2\2\u00b5\u00b7") - buf.write("\3\2\2\2\u00b6\u00b3\3\2\2\2\u00b7\u00ba\3\2\2\2\u00b8") - buf.write("\u00b6\3\2\2\2\u00b8\u00b9\3\2\2\2\u00b9\u00bc\3\2\2\2") - buf.write("\u00ba\u00b8\3\2\2\2\u00bb\u00bd\5\20\t\2\u00bc\u00bb") - buf.write("\3\2\2\2\u00bc\u00bd\3\2\2\2\u00bd\u00be\3\2\2\2\u00be") - buf.write("\u00c1\7\36\2\2\u00bf\u00c1\7\61\2\2\u00c0\u00ae\3\2\2") - buf.write("\2\u00c0\u00af\3\2\2\2\u00c0\u00b0\3\2\2\2\u00c0\u00b1") - buf.write("\3\2\2\2\u00c0\u00b2\3\2\2\2\u00c0\u00bf\3\2\2\2\u00c1") - buf.write("\25\3\2\2\2\25\31\"\'.\66=INX_eq\u009f\u00a1\u00a9\u00ac") - buf.write("\u00b8\u00bc\u00c0") + buf.write("\2\"\36\3\2\2\2\"!\3\2\2\2#\5\3\2\2\2$8\7\4\2\2%\'\7\5") + buf.write("\2\2&(\5\16\b\2\'&\3\2\2\2\'(\3\2\2\2(8\3\2\2\2)*\5\b") + buf.write("\5\2*+\7\6\2\2+-\3\2\2\2,)\3\2\2\2-\60\3\2\2\2.,\3\2\2") + buf.write("\2./\3\2\2\2/\61\3\2\2\2\60.\3\2\2\2\618\5\16\b\2\62\63") + buf.write("\5\20\t\2\63\64\t\2\2\2\64\65\7\6\2\2\65\66\5\20\t\2\66") + buf.write("8\3\2\2\2\67$\3\2\2\2\67%\3\2\2\2\67.\3\2\2\2\67\62\3") + buf.write("\2\2\28\7\3\2\2\29>\5\20\t\2:;\7\22\2\2;=\5\20\t\2<:\3") + buf.write("\2\2\2=@\3\2\2\2><\3\2\2\2>?\3\2\2\2?\t\3\2\2\2@>\3\2") + buf.write("\2\2AB\7\23\2\2BC\5\20\t\2CJ\5\f\7\2DE\7\24\2\2EF\5\20") + buf.write("\t\2FG\5\f\7\2GI\3\2\2\2HD\3\2\2\2IL\3\2\2\2JH\3\2\2\2") + buf.write("JK\3\2\2\2KO\3\2\2\2LJ\3\2\2\2MN\7\25\2\2NP\5\f\7\2OM") + buf.write("\3\2\2\2OP\3\2\2\2PZ\3\2\2\2QR\7\26\2\2RS\5\20\t\2ST\5") + buf.write("\f\7\2TZ\3\2\2\2UV\7\27\2\2VW\5\20\t\2WX\5\f\7\2XZ\3\2") + buf.write("\2\2YA\3\2\2\2YQ\3\2\2\2YU\3\2\2\2Z\13\3\2\2\2[\\\7\30") + buf.write("\2\2\\^\7\31\2\2]_\5\4\3\2^]\3\2\2\2_`\3\2\2\2`^\3\2\2") + buf.write("\2`a\3\2\2\2ab\3\2\2\2bc\7\32\2\2c\r\3\2\2\2dg\5\20\t") + buf.write("\2eg\5\22\n\2fd\3\2\2\2fe\3\2\2\2g\17\3\2\2\2hi\b\t\1") + buf.write("\2is\5\24\13\2jk\7\33\2\2kl\5\16\b\2lm\7\34\2\2ms\3\2") + buf.write("\2\2no\t\3\2\2os\5\20\t\16pq\7\'\2\2qs\5\20\t\6rh\3\2") + buf.write("\2\2rj\3\2\2\2rn\3\2\2\2rp\3\2\2\2s\u00a2\3\2\2\2tu\f") + buf.write("\17\2\2uv\7\7\2\2v\u00a1\5\20\t\17wx\f\r\2\2xy\t\4\2\2") + buf.write("y\u00a1\5\20\t\16z{\f\f\2\2{|\t\5\2\2|\u00a1\5\20\t\r") + buf.write("}~\f\13\2\2~\177\t\6\2\2\177\u00a1\5\20\t\f\u0080\u0081") + buf.write("\f\n\2\2\u0081\u0082\7\17\2\2\u0082\u00a1\5\20\t\13\u0083") + buf.write("\u0084\f\t\2\2\u0084\u0085\7\20\2\2\u0085\u00a1\5\20\t") + buf.write("\n\u0086\u0087\f\b\2\2\u0087\u0088\7\21\2\2\u0088\u00a1") + buf.write("\5\20\t\t\u0089\u008a\f\7\2\2\u008a\u008b\t\7\2\2\u008b") + buf.write("\u00a1\5\20\t\7\u008c\u008d\f\5\2\2\u008d\u008e\7(\2\2") + buf.write("\u008e\u00a1\5\20\t\5\u008f\u0090\f\4\2\2\u0090\u0091") + buf.write("\7)\2\2\u0091\u00a1\5\20\t\4\u0092\u0093\f\3\2\2\u0093") + buf.write("\u0094\7*\2\2\u0094\u0095\5\20\t\2\u0095\u0096\7+\2\2") + buf.write("\u0096\u0097\5\20\t\3\u0097\u00a1\3\2\2\2\u0098\u0099") + buf.write("\f\21\2\2\u0099\u009a\7\35\2\2\u009a\u009b\5\20\t\2\u009b") + buf.write("\u009c\7\36\2\2\u009c\u00a1\3\2\2\2\u009d\u009e\f\20\2") + buf.write("\2\u009e\u009f\7\37\2\2\u009f\u00a1\7\61\2\2\u00a0t\3") + buf.write("\2\2\2\u00a0w\3\2\2\2\u00a0z\3\2\2\2\u00a0}\3\2\2\2\u00a0") + buf.write("\u0080\3\2\2\2\u00a0\u0083\3\2\2\2\u00a0\u0086\3\2\2\2") + buf.write("\u00a0\u0089\3\2\2\2\u00a0\u008c\3\2\2\2\u00a0\u008f\3") + buf.write("\2\2\2\u00a0\u0092\3\2\2\2\u00a0\u0098\3\2\2\2\u00a0\u009d") + buf.write("\3\2\2\2\u00a1\u00a4\3\2\2\2\u00a2\u00a0\3\2\2\2\u00a2") + buf.write("\u00a3\3\2\2\2\u00a3\21\3\2\2\2\u00a4\u00a2\3\2\2\2\u00a5") + buf.write("\u00a6\5\20\t\2\u00a6\u00a7\7\22\2\2\u00a7\u00a9\3\2\2") + buf.write("\2\u00a8\u00a5\3\2\2\2\u00a9\u00aa\3\2\2\2\u00aa\u00a8") + buf.write("\3\2\2\2\u00aa\u00ab\3\2\2\2\u00ab\u00ad\3\2\2\2\u00ac") + buf.write("\u00ae\5\20\t\2\u00ad\u00ac\3\2\2\2\u00ad\u00ae\3\2\2") + buf.write("\2\u00ae\23\3\2\2\2\u00af\u00c2\7.\2\2\u00b0\u00c2\t\b") + buf.write("\2\2\u00b1\u00c2\7/\2\2\u00b2\u00c2\7\60\2\2\u00b3\u00b9") + buf.write("\7\35\2\2\u00b4\u00b5\5\20\t\2\u00b5\u00b6\7\22\2\2\u00b6") + buf.write("\u00b8\3\2\2\2\u00b7\u00b4\3\2\2\2\u00b8\u00bb\3\2\2\2") + buf.write("\u00b9\u00b7\3\2\2\2\u00b9\u00ba\3\2\2\2\u00ba\u00bd\3") + buf.write("\2\2\2\u00bb\u00b9\3\2\2\2\u00bc\u00be\5\20\t\2\u00bd") + buf.write("\u00bc\3\2\2\2\u00bd\u00be\3\2\2\2\u00be\u00bf\3\2\2\2") + buf.write("\u00bf\u00c2\7\36\2\2\u00c0\u00c2\7\61\2\2\u00c1\u00af") + buf.write("\3\2\2\2\u00c1\u00b0\3\2\2\2\u00c1\u00b1\3\2\2\2\u00c1") + buf.write("\u00b2\3\2\2\2\u00c1\u00b3\3\2\2\2\u00c1\u00c0\3\2\2\2") + buf.write("\u00c2\25\3\2\2\2\25\31\"\'.\67>JOY`fr\u00a0\u00a2\u00aa") + buf.write("\u00ad\u00b9\u00bd\u00c1") return buf.getvalue() @@ -335,10 +335,11 @@ def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Sim self.op = None # Token self.copyFrom(ctx) - def ID(self): - return self.getToken(PyxellParser.ID, 0) - def expr(self): - return self.getTypedRuleContext(PyxellParser.ExprContext,0) + def expr(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(PyxellParser.ExprContext) + else: + return self.getTypedRuleContext(PyxellParser.ExprContext,i) def accept(self, visitor:ParseTreeVisitor): @@ -409,7 +410,7 @@ def simple_stmt(self): self.enterRule(localctx, 4, self.RULE_simple_stmt) self._la = 0 # Token type try: - self.state = 52 + self.state = 53 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,4,self._ctx) if la_ == 1: @@ -458,7 +459,7 @@ def simple_stmt(self): localctx = PyxellParser.StmtAssgExprContext(self, localctx) self.enterOuterAlt(localctx, 4) self.state = 48 - self.match(PyxellParser.ID) + self.expr(0) self.state = 49 localctx.op = self._input.LT(1) _la = self._input.LA(1) @@ -489,11 +490,12 @@ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) self.parser = parser - def ID(self, i:int=None): + def expr(self, i:int=None): if i is None: - return self.getTokens(PyxellParser.ID) + return self.getTypedRuleContexts(PyxellParser.ExprContext) else: - return self.getToken(PyxellParser.ID, i) + return self.getTypedRuleContext(PyxellParser.ExprContext,i) + def getRuleIndex(self): return PyxellParser.RULE_lvalue @@ -514,17 +516,17 @@ def lvalue(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 54 - self.match(PyxellParser.ID) - self.state = 59 + self.state = 55 + self.expr(0) + self.state = 60 self._errHandler.sync(self) _la = self._input.LA(1) while _la==PyxellParser.T__15: - self.state = 55 - self.match(PyxellParser.T__15) self.state = 56 - self.match(PyxellParser.ID) - self.state = 61 + self.match(PyxellParser.T__15) + self.state = 57 + self.expr(0) + self.state = 62 self._errHandler.sync(self) _la = self._input.LA(1) @@ -626,39 +628,39 @@ def compound_stmt(self): self.enterRule(localctx, 8, self.RULE_compound_stmt) self._la = 0 # Token type try: - self.state = 86 + self.state = 87 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__16]: localctx = PyxellParser.StmtIfContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 62 - self.match(PyxellParser.T__16) self.state = 63 - self.expr(0) + self.match(PyxellParser.T__16) self.state = 64 + self.expr(0) + self.state = 65 self.block() - self.state = 71 + self.state = 72 self._errHandler.sync(self) _la = self._input.LA(1) while _la==PyxellParser.T__17: - self.state = 65 - self.match(PyxellParser.T__17) self.state = 66 - self.expr(0) + self.match(PyxellParser.T__17) self.state = 67 + self.expr(0) + self.state = 68 self.block() - self.state = 73 + self.state = 74 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 76 + self.state = 77 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__18: - self.state = 74 - self.match(PyxellParser.T__18) self.state = 75 + self.match(PyxellParser.T__18) + self.state = 76 self.block() @@ -666,21 +668,21 @@ def compound_stmt(self): elif token in [PyxellParser.T__19]: localctx = PyxellParser.StmtWhileContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 78 - self.match(PyxellParser.T__19) self.state = 79 - self.expr(0) + self.match(PyxellParser.T__19) self.state = 80 + self.expr(0) + self.state = 81 self.block() pass elif token in [PyxellParser.T__20]: localctx = PyxellParser.StmtUntilContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 82 - self.match(PyxellParser.T__20) self.state = 83 - self.expr(0) + self.match(PyxellParser.T__20) self.state = 84 + self.expr(0) + self.state = 85 self.block() pass else: @@ -727,23 +729,23 @@ def block(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 88 - self.match(PyxellParser.T__21) self.state = 89 + self.match(PyxellParser.T__21) + self.state = 90 self.match(PyxellParser.T__22) - self.state = 91 + self.state = 92 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 90 + self.state = 91 self.stmt() - self.state = 93 + self.state = 94 self._errHandler.sync(self) _la = self._input.LA(1) if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__26) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__42) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0)): break - self.state = 95 + self.state = 96 self.match(PyxellParser.T__23) except RecognitionException as re: localctx.exception = re @@ -785,18 +787,18 @@ def any_expr(self): localctx = PyxellParser.Any_exprContext(self, self._ctx, self.state) self.enterRule(localctx, 12, self.RULE_any_expr) try: - self.state = 99 + self.state = 100 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,10,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 97 + self.state = 98 self.expr(0) pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 98 + self.state = 99 self.tuple_expr() pass @@ -1010,7 +1012,7 @@ def expr(self, _p:int=0): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 111 + self.state = 112 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__26, PyxellParser.T__41, PyxellParser.T__42, PyxellParser.INT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: @@ -1018,25 +1020,25 @@ def expr(self, _p:int=0): self._ctx = localctx _prevctx = localctx - self.state = 102 + self.state = 103 self.atom() pass elif token in [PyxellParser.T__24]: localctx = PyxellParser.ExprParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 103 - self.match(PyxellParser.T__24) self.state = 104 - self.any_expr() + self.match(PyxellParser.T__24) self.state = 105 + self.any_expr() + self.state = 106 self.match(PyxellParser.T__25) pass elif token in [PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__29]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 107 + self.state = 108 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__29))) != 0)): @@ -1044,23 +1046,23 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 108 + self.state = 109 self.expr(12) pass elif token in [PyxellParser.T__36]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 109 - localctx.op = self.match(PyxellParser.T__36) self.state = 110 + localctx.op = self.match(PyxellParser.T__36) + self.state = 111 self.expr(4) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 159 + self.state = 160 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,13,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: @@ -1068,30 +1070,30 @@ def expr(self, _p:int=0): if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 157 + self.state = 158 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,12,self._ctx) if la_ == 1: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 113 + self.state = 114 if not self.precpred(self._ctx, 13): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") - self.state = 114 - localctx.op = self.match(PyxellParser.T__4) self.state = 115 + localctx.op = self.match(PyxellParser.T__4) + self.state = 116 self.expr(13) pass elif la_ == 2: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 116 + self.state = 117 if not self.precpred(self._ctx, 11): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") - self.state = 117 + self.state = 118 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__7))) != 0)): @@ -1099,18 +1101,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 118 + self.state = 119 self.expr(12) pass elif la_ == 3: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 119 + self.state = 120 if not self.precpred(self._ctx, 10): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") - self.state = 120 + self.state = 121 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__8 or _la==PyxellParser.T__9): @@ -1118,18 +1120,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 121 + self.state = 122 self.expr(11) pass elif la_ == 4: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 122 + self.state = 123 if not self.precpred(self._ctx, 9): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") - self.state = 123 + self.state = 124 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__10 or _la==PyxellParser.T__11): @@ -1137,57 +1139,57 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 124 + self.state = 125 self.expr(10) pass elif la_ == 5: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 125 + self.state = 126 if not self.precpred(self._ctx, 8): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") - self.state = 126 - localctx.op = self.match(PyxellParser.T__12) self.state = 127 + localctx.op = self.match(PyxellParser.T__12) + self.state = 128 self.expr(9) pass elif la_ == 6: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 128 + self.state = 129 if not self.precpred(self._ctx, 7): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") - self.state = 129 - localctx.op = self.match(PyxellParser.T__13) self.state = 130 + localctx.op = self.match(PyxellParser.T__13) + self.state = 131 self.expr(8) pass elif la_ == 7: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 131 + self.state = 132 if not self.precpred(self._ctx, 6): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") - self.state = 132 - localctx.op = self.match(PyxellParser.T__14) self.state = 133 + localctx.op = self.match(PyxellParser.T__14) + self.state = 134 self.expr(7) pass elif la_ == 8: localctx = PyxellParser.ExprCmpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 134 + self.state = 135 if not self.precpred(self._ctx, 5): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") - self.state = 135 + self.state = 136 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__30) | (1 << PyxellParser.T__31) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__35))) != 0)): @@ -1195,83 +1197,83 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 136 + self.state = 137 self.expr(5) pass elif la_ == 9: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 137 + self.state = 138 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 138 - localctx.op = self.match(PyxellParser.T__37) self.state = 139 + localctx.op = self.match(PyxellParser.T__37) + self.state = 140 self.expr(3) pass elif la_ == 10: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 140 + self.state = 141 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 141 - localctx.op = self.match(PyxellParser.T__38) self.state = 142 + localctx.op = self.match(PyxellParser.T__38) + self.state = 143 self.expr(2) pass elif la_ == 11: localctx = PyxellParser.ExprCondContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 143 + self.state = 144 if not self.precpred(self._ctx, 1): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") - self.state = 144 - self.match(PyxellParser.T__39) self.state = 145 - self.expr(0) + self.match(PyxellParser.T__39) self.state = 146 - self.match(PyxellParser.T__40) + self.expr(0) self.state = 147 + self.match(PyxellParser.T__40) + self.state = 148 self.expr(1) pass elif la_ == 12: localctx = PyxellParser.ExprIndexContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 149 + self.state = 150 if not self.precpred(self._ctx, 15): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 15)") - self.state = 150 - self.match(PyxellParser.T__26) self.state = 151 - self.expr(0) + self.match(PyxellParser.T__26) self.state = 152 + self.expr(0) + self.state = 153 self.match(PyxellParser.T__27) pass elif la_ == 13: localctx = PyxellParser.ExprAttrContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 154 + self.state = 155 if not self.precpred(self._ctx, 14): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 14)") - self.state = 155 - self.match(PyxellParser.T__28) self.state = 156 + self.match(PyxellParser.T__28) + self.state = 157 self.match(PyxellParser.ID) pass - self.state = 161 + self.state = 162 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,13,self._ctx) @@ -1329,27 +1331,27 @@ def tuple_expr(self): try: localctx = PyxellParser.ExprTupleContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 165 + self.state = 166 self._errHandler.sync(self) _alt = 1 while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt == 1: - self.state = 162 - self.expr(0) self.state = 163 + self.expr(0) + self.state = 164 self.match(PyxellParser.T__15) else: raise NoViableAltException(self) - self.state = 167 + self.state = 168 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,14,self._ctx) - self.state = 170 + self.state = 171 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__26) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__42) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): - self.state = 169 + self.state = 170 self.expr(0) @@ -1483,19 +1485,19 @@ def atom(self): self.enterRule(localctx, 18, self.RULE_atom) self._la = 0 # Token type try: - self.state = 190 + self.state = 191 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: localctx = PyxellParser.AtomIntContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 172 + self.state = 173 self.match(PyxellParser.INT) pass elif token in [PyxellParser.T__41, PyxellParser.T__42]: localctx = PyxellParser.AtomBoolContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 173 + self.state = 174 _la = self._input.LA(1) if not(_la==PyxellParser.T__41 or _la==PyxellParser.T__42): self._errHandler.recoverInline(self) @@ -1506,48 +1508,48 @@ def atom(self): elif token in [PyxellParser.CHAR]: localctx = PyxellParser.AtomCharContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 174 + self.state = 175 self.match(PyxellParser.CHAR) pass elif token in [PyxellParser.STRING]: localctx = PyxellParser.AtomStringContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 175 + self.state = 176 self.match(PyxellParser.STRING) pass elif token in [PyxellParser.T__26]: localctx = PyxellParser.AtomArrayContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 176 + self.state = 177 self.match(PyxellParser.T__26) - self.state = 182 + self.state = 183 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,16,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 177 - self.expr(0) self.state = 178 + self.expr(0) + self.state = 179 self.match(PyxellParser.T__15) - self.state = 184 + self.state = 185 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,16,self._ctx) - self.state = 186 + self.state = 187 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__26) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__42) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): - self.state = 185 + self.state = 186 self.expr(0) - self.state = 188 + self.state = 189 self.match(PyxellParser.T__27) pass elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) self.enterOuterAlt(localctx, 6) - self.state = 189 + self.state = 190 self.match(PyxellParser.ID) pass else: diff --git a/src/compiler.py b/src/compiler.py index 0301fb25..ecf123d6 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -42,29 +42,45 @@ def get(self, ctx, id): except KeyError: self.throw(ctx, err.UndeclaredIdentifier(id)) + def index(self, ctx, *exprs): + collection, index = [self.visit(expr) for expr in exprs] + + if collection.type.isString() or collection.type.isArray(): + index = self.cast(exprs[1], index, tInt) + return self.builder.gep(self.builder.extract_value(collection, [0]), [index]) + else: + self.throw(ctx, err.NotIndexable(collection.type)) + def cast(self, ctx, value, type): if value.type != type: self.throw(ctx, err.IllegalAssignment(value.type, type)) - return value def unify(self, ctx, *values): if not all(values[0].type == value.type for value in values): self.throw(ctx, err.UnknownType()) - return values - def assign(self, ctx, id, value): - id = str(id) - - try: - var = self.env[id] - except KeyError: - var = self.env[id] = self.builder.alloca(value.type) + def lvalue(self, ctx, expr, declare=None): + if isinstance(expr, PyxellParser.ExprAtomContext): + atom = expr.atom() + if not isinstance(atom, PyxellParser.AtomIdContext): + self.throw(ctx, err.NotLvalue()) + id = str(atom.ID()) + if id not in self.env: + if declare is None: + self.throw(ctx, err.UndeclaredIdentifier(id)) + self.env[id] = self.builder.alloca(declare) + return self.env[id] + elif isinstance(expr, PyxellParser.ExprIndexContext): + return self.index(ctx, *expr.expr()) else: - value = self.cast(ctx, value, var.type.pointee) + self.throw(ctx, err.NotLvalue()) - self.builder.store(value, var) + def assign(self, ctx, expr, value): + ptr = self.lvalue(ctx, expr, declare=value.type) + value = self.cast(ctx, value, ptr.type.pointee) + self.builder.store(value, ptr) def unaryop(self, ctx, op, value): if op in ('+', '-', '~'): @@ -179,8 +195,8 @@ def visitStmtAssg(self, ctx): value = self.visit(ctx.any_expr()) for lvalue in ctx.lvalue(): - ids = self.visit(lvalue) - len1 = len(ids) + exprs = lvalue.expr() + len1 = len(exprs) if value.type.isTuple(): len2 = len(value.type.elements) @@ -190,18 +206,15 @@ def visitStmtAssg(self, ctx): self.throw(ctx, err.CannotUnpack(value.type, len1)) if len1 == 1: - self.assign(ctx, ids[0], value) + self.assign(lvalue, exprs[0], value) else: - for i, id in enumerate(ids): - self.assign(ctx, id, self.builder.extract_value(value, [i])) - - def visitLvalue(self, ctx): - return ctx.ID() + for i, expr in enumerate(exprs): + self.assign(lvalue, expr, self.builder.extract_value(value, [i])) def visitStmtAssgExpr(self, ctx): - var = self.get(ctx, ctx.ID()) - value = self.binaryop(ctx, ctx.op.text, self.builder.load(var), self.visit(ctx.expr())) - self.builder.store(value, var) + ptr = self.lvalue(ctx, ctx.expr(0)) + value = self.binaryop(ctx, ctx.op.text, self.builder.load(ptr), self.visit(ctx.expr(1))) + self.builder.store(value, ptr) def visitStmtIf(self, ctx): exprs = ctx.expr() @@ -279,14 +292,7 @@ def visitExprParentheses(self, ctx): return self.visit(ctx.any_expr()) def visitExprIndex(self, ctx): - exprs = ctx.expr() - index = self.cast(exprs[1], self.visit(exprs[1]), tInt) - value = self.visit(exprs[0]) - - if value.type.isString() or value.type.isArray(): - return self.builder.load(self.builder.gep(self.builder.extract_value(value, [0]), [index])) - - self.throw(ctx, err.NotIndexable(value.type)) + return self.builder.load(self.index(ctx, *ctx.expr())) def visitExprAttr(self, ctx): value = self.visit(ctx.expr()) diff --git a/src/errors.py b/src/errors.py index 0bbfe009..b03122d6 100644 --- a/src/errors.py +++ b/src/errors.py @@ -19,6 +19,7 @@ class PyxellError(Exception): NoUnaryOperator = lambda op, t: f"No unary operator `{op}` defined for `{t.show()}`" NotComparable = lambda t1, t2: f"Cannot compare `{t1.show()}` with `{t2.show()}`" NotIndexable = lambda t: f"Type `{t.show()}` is not indexable" + NotLvalue = lambda: f"Expression cannot be assigned to" NotPrintable = lambda t: f"Variable of type `{t.show()}` cannot be printed" UndeclaredIdentifier = lambda id: f"Undeclared identifier `{id}`" UnknownType = lambda: f"Cannot settle type of the expression" From e21b8cf3cef86fd2798be3fee6dc7976e071862c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Fri, 11 Oct 2019 22:13:25 +0200 Subject: [PATCH 020/100] Negative indexing --- src/compiler.py | 3 +++ test/good/strings/{length02.out => string04.out} | 0 test/good/strings/{length02.px => string04.px} | 0 3 files changed, 3 insertions(+) rename test/good/strings/{length02.out => string04.out} (100%) rename test/good/strings/{length02.px => string04.px} (100%) diff --git a/src/compiler.py b/src/compiler.py index ecf123d6..07dc2c19 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -47,6 +47,9 @@ def index(self, ctx, *exprs): if collection.type.isString() or collection.type.isArray(): index = self.cast(exprs[1], index, tInt) + length = self.builder.extract_value(collection, [1]) + cmp = self.builder.icmp_signed('>=', index, vInt(0)) + index = self.builder.select(cmp, index, self.builder.add(index, length)) return self.builder.gep(self.builder.extract_value(collection, [0]), [index]) else: self.throw(ctx, err.NotIndexable(collection.type)) diff --git a/test/good/strings/length02.out b/test/good/strings/string04.out similarity index 100% rename from test/good/strings/length02.out rename to test/good/strings/string04.out diff --git a/test/good/strings/length02.px b/test/good/strings/string04.px similarity index 100% rename from test/good/strings/length02.px rename to test/good/strings/string04.px From 33d02b0d0b37f281579471775fc78c82b8b8dd37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sun, 13 Oct 2019 17:08:56 +0200 Subject: [PATCH 021/100] 'for' loop Loop variables now won't be accessible outside of the loop body (unless declared earlier). --- src/Pyxell.g4 | 19 +- src/antlr/Pyxell.interp | 15 +- src/antlr/Pyxell.tokens | 66 +-- src/antlr/PyxellLexer.interp | 17 +- src/antlr/PyxellLexer.py | 265 ++++++----- src/antlr/PyxellLexer.tokens | 66 +-- src/antlr/PyxellParser.py | 879 +++++++++++++++++++---------------- src/antlr/PyxellVisitor.py | 17 +- src/compiler.py | 138 +++++- src/errors.py | 1 + src/types.py | 2 + test/bad/loops/for14.err | 2 +- test/bad/loops/for16.err | 1 + test/bad/loops/for16.px | 4 + test/good/arrays/for01.px | 2 +- test/good/arrays/for03.px | 2 +- test/good/loops/for01.px | 1 + test/good/loops/for02.px | 1 + test/good/loops/for03.px | 1 + 19 files changed, 878 insertions(+), 621 deletions(-) create mode 100644 test/bad/loops/for16.err create mode 100644 test/bad/loops/for16.px diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index 85afd926..a7c69350 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -11,8 +11,8 @@ stmt simple_stmt : 'skip' # StmtSkip - | 'print' any_expr? # StmtPrint - | (lvalue '=')* any_expr # StmtAssg + | 'print' tuple_expr? # StmtPrint + | (lvalue '=')* tuple_expr # StmtAssg | expr op=('^' | '*' | '/' | '%' | '+' | '-' | '<<' | '>>' | '&' | '$' | '|') '=' expr # StmtAssgExpr ; @@ -24,20 +24,20 @@ compound_stmt : 'if' expr block ('elif' expr block)* ('else' block)? # StmtIf | 'while' expr block # StmtWhile | 'until' expr block # StmtUntil + | 'for' tuple_expr 'in' tuple_expr ('step' step=tuple_expr)? block # StmtFor ; block : 'do' '{' stmt+ '}' ; -any_expr - : expr - | tuple_expr +tuple_expr + : (expr ',')* expr # ExprTuple ; expr : atom # ExprAtom - | '(' any_expr ')' # ExprParentheses + | '(' tuple_expr ')' # ExprParentheses | expr '[' expr ']' # ExprIndex | expr '.' ID # ExprAttr | expr op='^' expr # ExprBinaryOp @@ -48,6 +48,9 @@ expr | expr op='&' expr # ExprBinaryOp | expr op='$' expr # ExprBinaryOp | expr op='|' expr # ExprBinaryOp + | expr dots='..' expr # ExprRange + | expr dots='...' expr # ExprRange + | expr dots='...' # ExprRange | expr op=('==' | '!=' | '<' | '<=' | '>' | '>=') expr # ExprCmp | op='not' expr # ExprUnaryOp | expr op='and' expr # ExprLogicalOp @@ -55,10 +58,6 @@ expr | expr '?' expr ':' expr # ExprCond ; -tuple_expr - : (expr ',')+ expr? # ExprTuple - ; - atom : INT # AtomInt | ('true' | 'false') # AtomBool diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index 2d3f9510..dcddb556 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -21,6 +21,9 @@ null 'else' 'while' 'until' +'for' +'in' +'step' 'do' '{' '}' @@ -30,6 +33,8 @@ null ']' '.' '~' +'..' +'...' '==' '!=' '<' @@ -95,6 +100,11 @@ null null null null +null +null +null +null +null INT CHAR STRING @@ -109,11 +119,10 @@ simple_stmt lvalue compound_stmt block -any_expr -expr tuple_expr +expr atom atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 51, 196, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 3, 2, 7, 2, 24, 10, 2, 12, 2, 14, 2, 27, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 35, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 40, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 45, 10, 4, 12, 4, 14, 4, 48, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 56, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 61, 10, 5, 12, 5, 14, 5, 64, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 73, 10, 6, 12, 6, 14, 6, 76, 11, 6, 3, 6, 3, 6, 5, 6, 80, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 90, 10, 6, 3, 7, 3, 7, 3, 7, 6, 7, 95, 10, 7, 13, 7, 14, 7, 96, 3, 7, 3, 7, 3, 8, 3, 8, 5, 8, 103, 10, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 115, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 161, 10, 9, 12, 9, 14, 9, 164, 11, 9, 3, 10, 3, 10, 3, 10, 6, 10, 169, 10, 10, 13, 10, 14, 10, 170, 3, 10, 5, 10, 174, 10, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 184, 10, 11, 12, 11, 14, 11, 187, 11, 11, 3, 11, 5, 11, 190, 10, 11, 3, 11, 3, 11, 5, 11, 194, 10, 11, 3, 11, 2, 3, 16, 12, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 2, 9, 3, 2, 7, 17, 4, 2, 11, 12, 32, 32, 3, 2, 8, 10, 3, 2, 11, 12, 3, 2, 13, 14, 3, 2, 33, 38, 3, 2, 44, 45, 2, 224, 2, 25, 3, 2, 2, 2, 4, 34, 3, 2, 2, 2, 6, 55, 3, 2, 2, 2, 8, 57, 3, 2, 2, 2, 10, 89, 3, 2, 2, 2, 12, 91, 3, 2, 2, 2, 14, 102, 3, 2, 2, 2, 16, 114, 3, 2, 2, 2, 18, 168, 3, 2, 2, 2, 20, 193, 3, 2, 2, 2, 22, 24, 5, 4, 3, 2, 23, 22, 3, 2, 2, 2, 24, 27, 3, 2, 2, 2, 25, 23, 3, 2, 2, 2, 25, 26, 3, 2, 2, 2, 26, 28, 3, 2, 2, 2, 27, 25, 3, 2, 2, 2, 28, 29, 7, 2, 2, 3, 29, 3, 3, 2, 2, 2, 30, 31, 5, 6, 4, 2, 31, 32, 7, 3, 2, 2, 32, 35, 3, 2, 2, 2, 33, 35, 5, 10, 6, 2, 34, 30, 3, 2, 2, 2, 34, 33, 3, 2, 2, 2, 35, 5, 3, 2, 2, 2, 36, 56, 7, 4, 2, 2, 37, 39, 7, 5, 2, 2, 38, 40, 5, 14, 8, 2, 39, 38, 3, 2, 2, 2, 39, 40, 3, 2, 2, 2, 40, 56, 3, 2, 2, 2, 41, 42, 5, 8, 5, 2, 42, 43, 7, 6, 2, 2, 43, 45, 3, 2, 2, 2, 44, 41, 3, 2, 2, 2, 45, 48, 3, 2, 2, 2, 46, 44, 3, 2, 2, 2, 46, 47, 3, 2, 2, 2, 47, 49, 3, 2, 2, 2, 48, 46, 3, 2, 2, 2, 49, 56, 5, 14, 8, 2, 50, 51, 5, 16, 9, 2, 51, 52, 9, 2, 2, 2, 52, 53, 7, 6, 2, 2, 53, 54, 5, 16, 9, 2, 54, 56, 3, 2, 2, 2, 55, 36, 3, 2, 2, 2, 55, 37, 3, 2, 2, 2, 55, 46, 3, 2, 2, 2, 55, 50, 3, 2, 2, 2, 56, 7, 3, 2, 2, 2, 57, 62, 5, 16, 9, 2, 58, 59, 7, 18, 2, 2, 59, 61, 5, 16, 9, 2, 60, 58, 3, 2, 2, 2, 61, 64, 3, 2, 2, 2, 62, 60, 3, 2, 2, 2, 62, 63, 3, 2, 2, 2, 63, 9, 3, 2, 2, 2, 64, 62, 3, 2, 2, 2, 65, 66, 7, 19, 2, 2, 66, 67, 5, 16, 9, 2, 67, 74, 5, 12, 7, 2, 68, 69, 7, 20, 2, 2, 69, 70, 5, 16, 9, 2, 70, 71, 5, 12, 7, 2, 71, 73, 3, 2, 2, 2, 72, 68, 3, 2, 2, 2, 73, 76, 3, 2, 2, 2, 74, 72, 3, 2, 2, 2, 74, 75, 3, 2, 2, 2, 75, 79, 3, 2, 2, 2, 76, 74, 3, 2, 2, 2, 77, 78, 7, 21, 2, 2, 78, 80, 5, 12, 7, 2, 79, 77, 3, 2, 2, 2, 79, 80, 3, 2, 2, 2, 80, 90, 3, 2, 2, 2, 81, 82, 7, 22, 2, 2, 82, 83, 5, 16, 9, 2, 83, 84, 5, 12, 7, 2, 84, 90, 3, 2, 2, 2, 85, 86, 7, 23, 2, 2, 86, 87, 5, 16, 9, 2, 87, 88, 5, 12, 7, 2, 88, 90, 3, 2, 2, 2, 89, 65, 3, 2, 2, 2, 89, 81, 3, 2, 2, 2, 89, 85, 3, 2, 2, 2, 90, 11, 3, 2, 2, 2, 91, 92, 7, 24, 2, 2, 92, 94, 7, 25, 2, 2, 93, 95, 5, 4, 3, 2, 94, 93, 3, 2, 2, 2, 95, 96, 3, 2, 2, 2, 96, 94, 3, 2, 2, 2, 96, 97, 3, 2, 2, 2, 97, 98, 3, 2, 2, 2, 98, 99, 7, 26, 2, 2, 99, 13, 3, 2, 2, 2, 100, 103, 5, 16, 9, 2, 101, 103, 5, 18, 10, 2, 102, 100, 3, 2, 2, 2, 102, 101, 3, 2, 2, 2, 103, 15, 3, 2, 2, 2, 104, 105, 8, 9, 1, 2, 105, 115, 5, 20, 11, 2, 106, 107, 7, 27, 2, 2, 107, 108, 5, 14, 8, 2, 108, 109, 7, 28, 2, 2, 109, 115, 3, 2, 2, 2, 110, 111, 9, 3, 2, 2, 111, 115, 5, 16, 9, 14, 112, 113, 7, 39, 2, 2, 113, 115, 5, 16, 9, 6, 114, 104, 3, 2, 2, 2, 114, 106, 3, 2, 2, 2, 114, 110, 3, 2, 2, 2, 114, 112, 3, 2, 2, 2, 115, 162, 3, 2, 2, 2, 116, 117, 12, 15, 2, 2, 117, 118, 7, 7, 2, 2, 118, 161, 5, 16, 9, 15, 119, 120, 12, 13, 2, 2, 120, 121, 9, 4, 2, 2, 121, 161, 5, 16, 9, 14, 122, 123, 12, 12, 2, 2, 123, 124, 9, 5, 2, 2, 124, 161, 5, 16, 9, 13, 125, 126, 12, 11, 2, 2, 126, 127, 9, 6, 2, 2, 127, 161, 5, 16, 9, 12, 128, 129, 12, 10, 2, 2, 129, 130, 7, 15, 2, 2, 130, 161, 5, 16, 9, 11, 131, 132, 12, 9, 2, 2, 132, 133, 7, 16, 2, 2, 133, 161, 5, 16, 9, 10, 134, 135, 12, 8, 2, 2, 135, 136, 7, 17, 2, 2, 136, 161, 5, 16, 9, 9, 137, 138, 12, 7, 2, 2, 138, 139, 9, 7, 2, 2, 139, 161, 5, 16, 9, 7, 140, 141, 12, 5, 2, 2, 141, 142, 7, 40, 2, 2, 142, 161, 5, 16, 9, 5, 143, 144, 12, 4, 2, 2, 144, 145, 7, 41, 2, 2, 145, 161, 5, 16, 9, 4, 146, 147, 12, 3, 2, 2, 147, 148, 7, 42, 2, 2, 148, 149, 5, 16, 9, 2, 149, 150, 7, 43, 2, 2, 150, 151, 5, 16, 9, 3, 151, 161, 3, 2, 2, 2, 152, 153, 12, 17, 2, 2, 153, 154, 7, 29, 2, 2, 154, 155, 5, 16, 9, 2, 155, 156, 7, 30, 2, 2, 156, 161, 3, 2, 2, 2, 157, 158, 12, 16, 2, 2, 158, 159, 7, 31, 2, 2, 159, 161, 7, 49, 2, 2, 160, 116, 3, 2, 2, 2, 160, 119, 3, 2, 2, 2, 160, 122, 3, 2, 2, 2, 160, 125, 3, 2, 2, 2, 160, 128, 3, 2, 2, 2, 160, 131, 3, 2, 2, 2, 160, 134, 3, 2, 2, 2, 160, 137, 3, 2, 2, 2, 160, 140, 3, 2, 2, 2, 160, 143, 3, 2, 2, 2, 160, 146, 3, 2, 2, 2, 160, 152, 3, 2, 2, 2, 160, 157, 3, 2, 2, 2, 161, 164, 3, 2, 2, 2, 162, 160, 3, 2, 2, 2, 162, 163, 3, 2, 2, 2, 163, 17, 3, 2, 2, 2, 164, 162, 3, 2, 2, 2, 165, 166, 5, 16, 9, 2, 166, 167, 7, 18, 2, 2, 167, 169, 3, 2, 2, 2, 168, 165, 3, 2, 2, 2, 169, 170, 3, 2, 2, 2, 170, 168, 3, 2, 2, 2, 170, 171, 3, 2, 2, 2, 171, 173, 3, 2, 2, 2, 172, 174, 5, 16, 9, 2, 173, 172, 3, 2, 2, 2, 173, 174, 3, 2, 2, 2, 174, 19, 3, 2, 2, 2, 175, 194, 7, 46, 2, 2, 176, 194, 9, 8, 2, 2, 177, 194, 7, 47, 2, 2, 178, 194, 7, 48, 2, 2, 179, 185, 7, 29, 2, 2, 180, 181, 5, 16, 9, 2, 181, 182, 7, 18, 2, 2, 182, 184, 3, 2, 2, 2, 183, 180, 3, 2, 2, 2, 184, 187, 3, 2, 2, 2, 185, 183, 3, 2, 2, 2, 185, 186, 3, 2, 2, 2, 186, 189, 3, 2, 2, 2, 187, 185, 3, 2, 2, 2, 188, 190, 5, 16, 9, 2, 189, 188, 3, 2, 2, 2, 189, 190, 3, 2, 2, 2, 190, 191, 3, 2, 2, 2, 191, 194, 7, 30, 2, 2, 192, 194, 7, 49, 2, 2, 193, 175, 3, 2, 2, 2, 193, 176, 3, 2, 2, 2, 193, 177, 3, 2, 2, 2, 193, 178, 3, 2, 2, 2, 193, 179, 3, 2, 2, 2, 193, 192, 3, 2, 2, 2, 194, 21, 3, 2, 2, 2, 21, 25, 34, 39, 46, 55, 62, 74, 79, 89, 96, 102, 114, 160, 162, 170, 173, 185, 189, 193] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 56, 208, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 3, 2, 7, 2, 22, 10, 2, 12, 2, 14, 2, 25, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 33, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 38, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 43, 10, 4, 12, 4, 14, 4, 46, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 54, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 59, 10, 5, 12, 5, 14, 5, 62, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 71, 10, 6, 12, 6, 14, 6, 74, 11, 6, 3, 6, 3, 6, 5, 6, 78, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 94, 10, 6, 3, 6, 3, 6, 5, 6, 98, 10, 6, 3, 7, 3, 7, 3, 7, 6, 7, 103, 10, 7, 13, 7, 14, 7, 104, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 7, 8, 112, 10, 8, 12, 8, 14, 8, 115, 11, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 129, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 183, 10, 9, 12, 9, 14, 9, 186, 11, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 196, 10, 10, 12, 10, 14, 10, 199, 11, 10, 3, 10, 5, 10, 202, 10, 10, 3, 10, 3, 10, 5, 10, 206, 10, 10, 3, 10, 2, 3, 16, 11, 2, 4, 6, 8, 10, 12, 14, 16, 18, 2, 9, 3, 2, 7, 17, 4, 2, 11, 12, 35, 35, 3, 2, 8, 10, 3, 2, 11, 12, 3, 2, 13, 14, 3, 2, 38, 43, 3, 2, 49, 50, 2, 240, 2, 23, 3, 2, 2, 2, 4, 32, 3, 2, 2, 2, 6, 53, 3, 2, 2, 2, 8, 55, 3, 2, 2, 2, 10, 97, 3, 2, 2, 2, 12, 99, 3, 2, 2, 2, 14, 113, 3, 2, 2, 2, 16, 128, 3, 2, 2, 2, 18, 205, 3, 2, 2, 2, 20, 22, 5, 4, 3, 2, 21, 20, 3, 2, 2, 2, 22, 25, 3, 2, 2, 2, 23, 21, 3, 2, 2, 2, 23, 24, 3, 2, 2, 2, 24, 26, 3, 2, 2, 2, 25, 23, 3, 2, 2, 2, 26, 27, 7, 2, 2, 3, 27, 3, 3, 2, 2, 2, 28, 29, 5, 6, 4, 2, 29, 30, 7, 3, 2, 2, 30, 33, 3, 2, 2, 2, 31, 33, 5, 10, 6, 2, 32, 28, 3, 2, 2, 2, 32, 31, 3, 2, 2, 2, 33, 5, 3, 2, 2, 2, 34, 54, 7, 4, 2, 2, 35, 37, 7, 5, 2, 2, 36, 38, 5, 14, 8, 2, 37, 36, 3, 2, 2, 2, 37, 38, 3, 2, 2, 2, 38, 54, 3, 2, 2, 2, 39, 40, 5, 8, 5, 2, 40, 41, 7, 6, 2, 2, 41, 43, 3, 2, 2, 2, 42, 39, 3, 2, 2, 2, 43, 46, 3, 2, 2, 2, 44, 42, 3, 2, 2, 2, 44, 45, 3, 2, 2, 2, 45, 47, 3, 2, 2, 2, 46, 44, 3, 2, 2, 2, 47, 54, 5, 14, 8, 2, 48, 49, 5, 16, 9, 2, 49, 50, 9, 2, 2, 2, 50, 51, 7, 6, 2, 2, 51, 52, 5, 16, 9, 2, 52, 54, 3, 2, 2, 2, 53, 34, 3, 2, 2, 2, 53, 35, 3, 2, 2, 2, 53, 44, 3, 2, 2, 2, 53, 48, 3, 2, 2, 2, 54, 7, 3, 2, 2, 2, 55, 60, 5, 16, 9, 2, 56, 57, 7, 18, 2, 2, 57, 59, 5, 16, 9, 2, 58, 56, 3, 2, 2, 2, 59, 62, 3, 2, 2, 2, 60, 58, 3, 2, 2, 2, 60, 61, 3, 2, 2, 2, 61, 9, 3, 2, 2, 2, 62, 60, 3, 2, 2, 2, 63, 64, 7, 19, 2, 2, 64, 65, 5, 16, 9, 2, 65, 72, 5, 12, 7, 2, 66, 67, 7, 20, 2, 2, 67, 68, 5, 16, 9, 2, 68, 69, 5, 12, 7, 2, 69, 71, 3, 2, 2, 2, 70, 66, 3, 2, 2, 2, 71, 74, 3, 2, 2, 2, 72, 70, 3, 2, 2, 2, 72, 73, 3, 2, 2, 2, 73, 77, 3, 2, 2, 2, 74, 72, 3, 2, 2, 2, 75, 76, 7, 21, 2, 2, 76, 78, 5, 12, 7, 2, 77, 75, 3, 2, 2, 2, 77, 78, 3, 2, 2, 2, 78, 98, 3, 2, 2, 2, 79, 80, 7, 22, 2, 2, 80, 81, 5, 16, 9, 2, 81, 82, 5, 12, 7, 2, 82, 98, 3, 2, 2, 2, 83, 84, 7, 23, 2, 2, 84, 85, 5, 16, 9, 2, 85, 86, 5, 12, 7, 2, 86, 98, 3, 2, 2, 2, 87, 88, 7, 24, 2, 2, 88, 89, 5, 14, 8, 2, 89, 90, 7, 25, 2, 2, 90, 93, 5, 14, 8, 2, 91, 92, 7, 26, 2, 2, 92, 94, 5, 14, 8, 2, 93, 91, 3, 2, 2, 2, 93, 94, 3, 2, 2, 2, 94, 95, 3, 2, 2, 2, 95, 96, 5, 12, 7, 2, 96, 98, 3, 2, 2, 2, 97, 63, 3, 2, 2, 2, 97, 79, 3, 2, 2, 2, 97, 83, 3, 2, 2, 2, 97, 87, 3, 2, 2, 2, 98, 11, 3, 2, 2, 2, 99, 100, 7, 27, 2, 2, 100, 102, 7, 28, 2, 2, 101, 103, 5, 4, 3, 2, 102, 101, 3, 2, 2, 2, 103, 104, 3, 2, 2, 2, 104, 102, 3, 2, 2, 2, 104, 105, 3, 2, 2, 2, 105, 106, 3, 2, 2, 2, 106, 107, 7, 29, 2, 2, 107, 13, 3, 2, 2, 2, 108, 109, 5, 16, 9, 2, 109, 110, 7, 18, 2, 2, 110, 112, 3, 2, 2, 2, 111, 108, 3, 2, 2, 2, 112, 115, 3, 2, 2, 2, 113, 111, 3, 2, 2, 2, 113, 114, 3, 2, 2, 2, 114, 116, 3, 2, 2, 2, 115, 113, 3, 2, 2, 2, 116, 117, 5, 16, 9, 2, 117, 15, 3, 2, 2, 2, 118, 119, 8, 9, 1, 2, 119, 129, 5, 18, 10, 2, 120, 121, 7, 30, 2, 2, 121, 122, 5, 14, 8, 2, 122, 123, 7, 31, 2, 2, 123, 129, 3, 2, 2, 2, 124, 125, 9, 3, 2, 2, 125, 129, 5, 16, 9, 17, 126, 127, 7, 44, 2, 2, 127, 129, 5, 16, 9, 6, 128, 118, 3, 2, 2, 2, 128, 120, 3, 2, 2, 2, 128, 124, 3, 2, 2, 2, 128, 126, 3, 2, 2, 2, 129, 184, 3, 2, 2, 2, 130, 131, 12, 18, 2, 2, 131, 132, 7, 7, 2, 2, 132, 183, 5, 16, 9, 18, 133, 134, 12, 16, 2, 2, 134, 135, 9, 4, 2, 2, 135, 183, 5, 16, 9, 17, 136, 137, 12, 15, 2, 2, 137, 138, 9, 5, 2, 2, 138, 183, 5, 16, 9, 16, 139, 140, 12, 14, 2, 2, 140, 141, 9, 6, 2, 2, 141, 183, 5, 16, 9, 15, 142, 143, 12, 13, 2, 2, 143, 144, 7, 15, 2, 2, 144, 183, 5, 16, 9, 14, 145, 146, 12, 12, 2, 2, 146, 147, 7, 16, 2, 2, 147, 183, 5, 16, 9, 13, 148, 149, 12, 11, 2, 2, 149, 150, 7, 17, 2, 2, 150, 183, 5, 16, 9, 12, 151, 152, 12, 10, 2, 2, 152, 153, 7, 36, 2, 2, 153, 183, 5, 16, 9, 11, 154, 155, 12, 9, 2, 2, 155, 156, 7, 37, 2, 2, 156, 183, 5, 16, 9, 10, 157, 158, 12, 7, 2, 2, 158, 159, 9, 7, 2, 2, 159, 183, 5, 16, 9, 7, 160, 161, 12, 5, 2, 2, 161, 162, 7, 45, 2, 2, 162, 183, 5, 16, 9, 5, 163, 164, 12, 4, 2, 2, 164, 165, 7, 46, 2, 2, 165, 183, 5, 16, 9, 4, 166, 167, 12, 3, 2, 2, 167, 168, 7, 47, 2, 2, 168, 169, 5, 16, 9, 2, 169, 170, 7, 48, 2, 2, 170, 171, 5, 16, 9, 3, 171, 183, 3, 2, 2, 2, 172, 173, 12, 20, 2, 2, 173, 174, 7, 32, 2, 2, 174, 175, 5, 16, 9, 2, 175, 176, 7, 33, 2, 2, 176, 183, 3, 2, 2, 2, 177, 178, 12, 19, 2, 2, 178, 179, 7, 34, 2, 2, 179, 183, 7, 54, 2, 2, 180, 181, 12, 8, 2, 2, 181, 183, 7, 37, 2, 2, 182, 130, 3, 2, 2, 2, 182, 133, 3, 2, 2, 2, 182, 136, 3, 2, 2, 2, 182, 139, 3, 2, 2, 2, 182, 142, 3, 2, 2, 2, 182, 145, 3, 2, 2, 2, 182, 148, 3, 2, 2, 2, 182, 151, 3, 2, 2, 2, 182, 154, 3, 2, 2, 2, 182, 157, 3, 2, 2, 2, 182, 160, 3, 2, 2, 2, 182, 163, 3, 2, 2, 2, 182, 166, 3, 2, 2, 2, 182, 172, 3, 2, 2, 2, 182, 177, 3, 2, 2, 2, 182, 180, 3, 2, 2, 2, 183, 186, 3, 2, 2, 2, 184, 182, 3, 2, 2, 2, 184, 185, 3, 2, 2, 2, 185, 17, 3, 2, 2, 2, 186, 184, 3, 2, 2, 2, 187, 206, 7, 51, 2, 2, 188, 206, 9, 8, 2, 2, 189, 206, 7, 52, 2, 2, 190, 206, 7, 53, 2, 2, 191, 197, 7, 32, 2, 2, 192, 193, 5, 16, 9, 2, 193, 194, 7, 18, 2, 2, 194, 196, 3, 2, 2, 2, 195, 192, 3, 2, 2, 2, 196, 199, 3, 2, 2, 2, 197, 195, 3, 2, 2, 2, 197, 198, 3, 2, 2, 2, 198, 201, 3, 2, 2, 2, 199, 197, 3, 2, 2, 2, 200, 202, 5, 16, 9, 2, 201, 200, 3, 2, 2, 2, 201, 202, 3, 2, 2, 2, 202, 203, 3, 2, 2, 2, 203, 206, 7, 33, 2, 2, 204, 206, 7, 54, 2, 2, 205, 187, 3, 2, 2, 2, 205, 188, 3, 2, 2, 2, 205, 189, 3, 2, 2, 2, 205, 190, 3, 2, 2, 2, 205, 191, 3, 2, 2, 2, 205, 204, 3, 2, 2, 2, 206, 19, 3, 2, 2, 2, 20, 23, 32, 37, 44, 53, 60, 72, 77, 93, 97, 104, 113, 128, 182, 184, 197, 201, 205] \ No newline at end of file diff --git a/src/antlr/Pyxell.tokens b/src/antlr/Pyxell.tokens index 1c16cb39..7e3283ca 100644 --- a/src/antlr/Pyxell.tokens +++ b/src/antlr/Pyxell.tokens @@ -41,12 +41,17 @@ T__39=40 T__40=41 T__41=42 T__42=43 -INT=44 -CHAR=45 -STRING=46 -ID=47 -WS=48 -ERR=49 +T__43=44 +T__44=45 +T__45=46 +T__46=47 +T__47=48 +INT=49 +CHAR=50 +STRING=51 +ID=52 +WS=53 +ERR=54 ';'=1 'skip'=2 'print'=3 @@ -68,25 +73,30 @@ ERR=49 'else'=19 'while'=20 'until'=21 -'do'=22 -'{'=23 -'}'=24 -'('=25 -')'=26 -'['=27 -']'=28 -'.'=29 -'~'=30 -'=='=31 -'!='=32 -'<'=33 -'<='=34 -'>'=35 -'>='=36 -'not'=37 -'and'=38 -'or'=39 -'?'=40 -':'=41 -'true'=42 -'false'=43 +'for'=22 +'in'=23 +'step'=24 +'do'=25 +'{'=26 +'}'=27 +'('=28 +')'=29 +'['=30 +']'=31 +'.'=32 +'~'=33 +'..'=34 +'...'=35 +'=='=36 +'!='=37 +'<'=38 +'<='=39 +'>'=40 +'>='=41 +'not'=42 +'and'=43 +'or'=44 +'?'=45 +':'=46 +'true'=47 +'false'=48 diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp index 1ffa5121..ffc9f4fb 100644 --- a/src/antlr/PyxellLexer.interp +++ b/src/antlr/PyxellLexer.interp @@ -21,6 +21,9 @@ null 'else' 'while' 'until' +'for' +'in' +'step' 'do' '{' '}' @@ -30,6 +33,8 @@ null ']' '.' '~' +'..' +'...' '==' '!=' '<' @@ -95,6 +100,11 @@ null null null null +null +null +null +null +null INT CHAR STRING @@ -146,6 +156,11 @@ T__39 T__40 T__41 T__42 +T__43 +T__44 +T__45 +T__46 +T__47 INT CHAR STRING @@ -164,4 +179,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 51, 286, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 45, 6, 45, 236, 10, 45, 13, 45, 14, 45, 237, 3, 46, 3, 46, 3, 46, 3, 46, 7, 46, 244, 10, 46, 12, 46, 14, 46, 247, 11, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 7, 47, 255, 10, 47, 12, 47, 14, 47, 258, 11, 47, 3, 47, 3, 47, 3, 48, 3, 48, 7, 48, 264, 10, 48, 12, 48, 14, 48, 267, 11, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 5, 51, 276, 10, 51, 3, 52, 6, 52, 279, 10, 52, 13, 52, 14, 52, 280, 3, 52, 3, 52, 3, 53, 3, 53, 2, 2, 54, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 2, 99, 2, 101, 2, 103, 50, 105, 51, 3, 2, 10, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 291, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 3, 107, 3, 2, 2, 2, 5, 109, 3, 2, 2, 2, 7, 114, 3, 2, 2, 2, 9, 120, 3, 2, 2, 2, 11, 122, 3, 2, 2, 2, 13, 124, 3, 2, 2, 2, 15, 126, 3, 2, 2, 2, 17, 128, 3, 2, 2, 2, 19, 130, 3, 2, 2, 2, 21, 132, 3, 2, 2, 2, 23, 134, 3, 2, 2, 2, 25, 137, 3, 2, 2, 2, 27, 140, 3, 2, 2, 2, 29, 142, 3, 2, 2, 2, 31, 144, 3, 2, 2, 2, 33, 146, 3, 2, 2, 2, 35, 148, 3, 2, 2, 2, 37, 151, 3, 2, 2, 2, 39, 156, 3, 2, 2, 2, 41, 161, 3, 2, 2, 2, 43, 167, 3, 2, 2, 2, 45, 173, 3, 2, 2, 2, 47, 176, 3, 2, 2, 2, 49, 178, 3, 2, 2, 2, 51, 180, 3, 2, 2, 2, 53, 182, 3, 2, 2, 2, 55, 184, 3, 2, 2, 2, 57, 186, 3, 2, 2, 2, 59, 188, 3, 2, 2, 2, 61, 190, 3, 2, 2, 2, 63, 192, 3, 2, 2, 2, 65, 195, 3, 2, 2, 2, 67, 198, 3, 2, 2, 2, 69, 200, 3, 2, 2, 2, 71, 203, 3, 2, 2, 2, 73, 205, 3, 2, 2, 2, 75, 208, 3, 2, 2, 2, 77, 212, 3, 2, 2, 2, 79, 216, 3, 2, 2, 2, 81, 219, 3, 2, 2, 2, 83, 221, 3, 2, 2, 2, 85, 223, 3, 2, 2, 2, 87, 228, 3, 2, 2, 2, 89, 235, 3, 2, 2, 2, 91, 239, 3, 2, 2, 2, 93, 250, 3, 2, 2, 2, 95, 261, 3, 2, 2, 2, 97, 268, 3, 2, 2, 2, 99, 270, 3, 2, 2, 2, 101, 275, 3, 2, 2, 2, 103, 278, 3, 2, 2, 2, 105, 284, 3, 2, 2, 2, 107, 108, 7, 61, 2, 2, 108, 4, 3, 2, 2, 2, 109, 110, 7, 117, 2, 2, 110, 111, 7, 109, 2, 2, 111, 112, 7, 107, 2, 2, 112, 113, 7, 114, 2, 2, 113, 6, 3, 2, 2, 2, 114, 115, 7, 114, 2, 2, 115, 116, 7, 116, 2, 2, 116, 117, 7, 107, 2, 2, 117, 118, 7, 112, 2, 2, 118, 119, 7, 118, 2, 2, 119, 8, 3, 2, 2, 2, 120, 121, 7, 63, 2, 2, 121, 10, 3, 2, 2, 2, 122, 123, 7, 96, 2, 2, 123, 12, 3, 2, 2, 2, 124, 125, 7, 44, 2, 2, 125, 14, 3, 2, 2, 2, 126, 127, 7, 49, 2, 2, 127, 16, 3, 2, 2, 2, 128, 129, 7, 39, 2, 2, 129, 18, 3, 2, 2, 2, 130, 131, 7, 45, 2, 2, 131, 20, 3, 2, 2, 2, 132, 133, 7, 47, 2, 2, 133, 22, 3, 2, 2, 2, 134, 135, 7, 62, 2, 2, 135, 136, 7, 62, 2, 2, 136, 24, 3, 2, 2, 2, 137, 138, 7, 64, 2, 2, 138, 139, 7, 64, 2, 2, 139, 26, 3, 2, 2, 2, 140, 141, 7, 40, 2, 2, 141, 28, 3, 2, 2, 2, 142, 143, 7, 38, 2, 2, 143, 30, 3, 2, 2, 2, 144, 145, 7, 126, 2, 2, 145, 32, 3, 2, 2, 2, 146, 147, 7, 46, 2, 2, 147, 34, 3, 2, 2, 2, 148, 149, 7, 107, 2, 2, 149, 150, 7, 104, 2, 2, 150, 36, 3, 2, 2, 2, 151, 152, 7, 103, 2, 2, 152, 153, 7, 110, 2, 2, 153, 154, 7, 107, 2, 2, 154, 155, 7, 104, 2, 2, 155, 38, 3, 2, 2, 2, 156, 157, 7, 103, 2, 2, 157, 158, 7, 110, 2, 2, 158, 159, 7, 117, 2, 2, 159, 160, 7, 103, 2, 2, 160, 40, 3, 2, 2, 2, 161, 162, 7, 121, 2, 2, 162, 163, 7, 106, 2, 2, 163, 164, 7, 107, 2, 2, 164, 165, 7, 110, 2, 2, 165, 166, 7, 103, 2, 2, 166, 42, 3, 2, 2, 2, 167, 168, 7, 119, 2, 2, 168, 169, 7, 112, 2, 2, 169, 170, 7, 118, 2, 2, 170, 171, 7, 107, 2, 2, 171, 172, 7, 110, 2, 2, 172, 44, 3, 2, 2, 2, 173, 174, 7, 102, 2, 2, 174, 175, 7, 113, 2, 2, 175, 46, 3, 2, 2, 2, 176, 177, 7, 125, 2, 2, 177, 48, 3, 2, 2, 2, 178, 179, 7, 127, 2, 2, 179, 50, 3, 2, 2, 2, 180, 181, 7, 42, 2, 2, 181, 52, 3, 2, 2, 2, 182, 183, 7, 43, 2, 2, 183, 54, 3, 2, 2, 2, 184, 185, 7, 93, 2, 2, 185, 56, 3, 2, 2, 2, 186, 187, 7, 95, 2, 2, 187, 58, 3, 2, 2, 2, 188, 189, 7, 48, 2, 2, 189, 60, 3, 2, 2, 2, 190, 191, 7, 128, 2, 2, 191, 62, 3, 2, 2, 2, 192, 193, 7, 63, 2, 2, 193, 194, 7, 63, 2, 2, 194, 64, 3, 2, 2, 2, 195, 196, 7, 35, 2, 2, 196, 197, 7, 63, 2, 2, 197, 66, 3, 2, 2, 2, 198, 199, 7, 62, 2, 2, 199, 68, 3, 2, 2, 2, 200, 201, 7, 62, 2, 2, 201, 202, 7, 63, 2, 2, 202, 70, 3, 2, 2, 2, 203, 204, 7, 64, 2, 2, 204, 72, 3, 2, 2, 2, 205, 206, 7, 64, 2, 2, 206, 207, 7, 63, 2, 2, 207, 74, 3, 2, 2, 2, 208, 209, 7, 112, 2, 2, 209, 210, 7, 113, 2, 2, 210, 211, 7, 118, 2, 2, 211, 76, 3, 2, 2, 2, 212, 213, 7, 99, 2, 2, 213, 214, 7, 112, 2, 2, 214, 215, 7, 102, 2, 2, 215, 78, 3, 2, 2, 2, 216, 217, 7, 113, 2, 2, 217, 218, 7, 116, 2, 2, 218, 80, 3, 2, 2, 2, 219, 220, 7, 65, 2, 2, 220, 82, 3, 2, 2, 2, 221, 222, 7, 60, 2, 2, 222, 84, 3, 2, 2, 2, 223, 224, 7, 118, 2, 2, 224, 225, 7, 116, 2, 2, 225, 226, 7, 119, 2, 2, 226, 227, 7, 103, 2, 2, 227, 86, 3, 2, 2, 2, 228, 229, 7, 104, 2, 2, 229, 230, 7, 99, 2, 2, 230, 231, 7, 110, 2, 2, 231, 232, 7, 117, 2, 2, 232, 233, 7, 103, 2, 2, 233, 88, 3, 2, 2, 2, 234, 236, 5, 97, 49, 2, 235, 234, 3, 2, 2, 2, 236, 237, 3, 2, 2, 2, 237, 235, 3, 2, 2, 2, 237, 238, 3, 2, 2, 2, 238, 90, 3, 2, 2, 2, 239, 245, 7, 41, 2, 2, 240, 244, 10, 2, 2, 2, 241, 242, 7, 94, 2, 2, 242, 244, 9, 3, 2, 2, 243, 240, 3, 2, 2, 2, 243, 241, 3, 2, 2, 2, 244, 247, 3, 2, 2, 2, 245, 243, 3, 2, 2, 2, 245, 246, 3, 2, 2, 2, 246, 248, 3, 2, 2, 2, 247, 245, 3, 2, 2, 2, 248, 249, 7, 41, 2, 2, 249, 92, 3, 2, 2, 2, 250, 256, 7, 36, 2, 2, 251, 255, 10, 4, 2, 2, 252, 253, 7, 94, 2, 2, 253, 255, 9, 5, 2, 2, 254, 251, 3, 2, 2, 2, 254, 252, 3, 2, 2, 2, 255, 258, 3, 2, 2, 2, 256, 254, 3, 2, 2, 2, 256, 257, 3, 2, 2, 2, 257, 259, 3, 2, 2, 2, 258, 256, 3, 2, 2, 2, 259, 260, 7, 36, 2, 2, 260, 94, 3, 2, 2, 2, 261, 265, 5, 99, 50, 2, 262, 264, 5, 101, 51, 2, 263, 262, 3, 2, 2, 2, 264, 267, 3, 2, 2, 2, 265, 263, 3, 2, 2, 2, 265, 266, 3, 2, 2, 2, 266, 96, 3, 2, 2, 2, 267, 265, 3, 2, 2, 2, 268, 269, 9, 6, 2, 2, 269, 98, 3, 2, 2, 2, 270, 271, 9, 7, 2, 2, 271, 100, 3, 2, 2, 2, 272, 276, 5, 99, 50, 2, 273, 276, 5, 97, 49, 2, 274, 276, 9, 8, 2, 2, 275, 272, 3, 2, 2, 2, 275, 273, 3, 2, 2, 2, 275, 274, 3, 2, 2, 2, 276, 102, 3, 2, 2, 2, 277, 279, 9, 9, 2, 2, 278, 277, 3, 2, 2, 2, 279, 280, 3, 2, 2, 2, 280, 278, 3, 2, 2, 2, 280, 281, 3, 2, 2, 2, 281, 282, 3, 2, 2, 2, 282, 283, 8, 52, 2, 2, 283, 104, 3, 2, 2, 2, 284, 285, 11, 2, 2, 2, 285, 106, 3, 2, 2, 2, 11, 2, 237, 243, 245, 254, 256, 265, 275, 280, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 56, 315, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 50, 6, 50, 265, 10, 50, 13, 50, 14, 50, 266, 3, 51, 3, 51, 3, 51, 3, 51, 7, 51, 273, 10, 51, 12, 51, 14, 51, 276, 11, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 7, 52, 284, 10, 52, 12, 52, 14, 52, 287, 11, 52, 3, 52, 3, 52, 3, 53, 3, 53, 7, 53, 293, 10, 53, 12, 53, 14, 53, 296, 11, 53, 3, 54, 3, 54, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 5, 56, 305, 10, 56, 3, 57, 6, 57, 308, 10, 57, 13, 57, 14, 57, 309, 3, 57, 3, 57, 3, 58, 3, 58, 2, 2, 59, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 2, 109, 2, 111, 2, 113, 55, 115, 56, 3, 2, 10, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 320, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 3, 117, 3, 2, 2, 2, 5, 119, 3, 2, 2, 2, 7, 124, 3, 2, 2, 2, 9, 130, 3, 2, 2, 2, 11, 132, 3, 2, 2, 2, 13, 134, 3, 2, 2, 2, 15, 136, 3, 2, 2, 2, 17, 138, 3, 2, 2, 2, 19, 140, 3, 2, 2, 2, 21, 142, 3, 2, 2, 2, 23, 144, 3, 2, 2, 2, 25, 147, 3, 2, 2, 2, 27, 150, 3, 2, 2, 2, 29, 152, 3, 2, 2, 2, 31, 154, 3, 2, 2, 2, 33, 156, 3, 2, 2, 2, 35, 158, 3, 2, 2, 2, 37, 161, 3, 2, 2, 2, 39, 166, 3, 2, 2, 2, 41, 171, 3, 2, 2, 2, 43, 177, 3, 2, 2, 2, 45, 183, 3, 2, 2, 2, 47, 187, 3, 2, 2, 2, 49, 190, 3, 2, 2, 2, 51, 195, 3, 2, 2, 2, 53, 198, 3, 2, 2, 2, 55, 200, 3, 2, 2, 2, 57, 202, 3, 2, 2, 2, 59, 204, 3, 2, 2, 2, 61, 206, 3, 2, 2, 2, 63, 208, 3, 2, 2, 2, 65, 210, 3, 2, 2, 2, 67, 212, 3, 2, 2, 2, 69, 214, 3, 2, 2, 2, 71, 217, 3, 2, 2, 2, 73, 221, 3, 2, 2, 2, 75, 224, 3, 2, 2, 2, 77, 227, 3, 2, 2, 2, 79, 229, 3, 2, 2, 2, 81, 232, 3, 2, 2, 2, 83, 234, 3, 2, 2, 2, 85, 237, 3, 2, 2, 2, 87, 241, 3, 2, 2, 2, 89, 245, 3, 2, 2, 2, 91, 248, 3, 2, 2, 2, 93, 250, 3, 2, 2, 2, 95, 252, 3, 2, 2, 2, 97, 257, 3, 2, 2, 2, 99, 264, 3, 2, 2, 2, 101, 268, 3, 2, 2, 2, 103, 279, 3, 2, 2, 2, 105, 290, 3, 2, 2, 2, 107, 297, 3, 2, 2, 2, 109, 299, 3, 2, 2, 2, 111, 304, 3, 2, 2, 2, 113, 307, 3, 2, 2, 2, 115, 313, 3, 2, 2, 2, 117, 118, 7, 61, 2, 2, 118, 4, 3, 2, 2, 2, 119, 120, 7, 117, 2, 2, 120, 121, 7, 109, 2, 2, 121, 122, 7, 107, 2, 2, 122, 123, 7, 114, 2, 2, 123, 6, 3, 2, 2, 2, 124, 125, 7, 114, 2, 2, 125, 126, 7, 116, 2, 2, 126, 127, 7, 107, 2, 2, 127, 128, 7, 112, 2, 2, 128, 129, 7, 118, 2, 2, 129, 8, 3, 2, 2, 2, 130, 131, 7, 63, 2, 2, 131, 10, 3, 2, 2, 2, 132, 133, 7, 96, 2, 2, 133, 12, 3, 2, 2, 2, 134, 135, 7, 44, 2, 2, 135, 14, 3, 2, 2, 2, 136, 137, 7, 49, 2, 2, 137, 16, 3, 2, 2, 2, 138, 139, 7, 39, 2, 2, 139, 18, 3, 2, 2, 2, 140, 141, 7, 45, 2, 2, 141, 20, 3, 2, 2, 2, 142, 143, 7, 47, 2, 2, 143, 22, 3, 2, 2, 2, 144, 145, 7, 62, 2, 2, 145, 146, 7, 62, 2, 2, 146, 24, 3, 2, 2, 2, 147, 148, 7, 64, 2, 2, 148, 149, 7, 64, 2, 2, 149, 26, 3, 2, 2, 2, 150, 151, 7, 40, 2, 2, 151, 28, 3, 2, 2, 2, 152, 153, 7, 38, 2, 2, 153, 30, 3, 2, 2, 2, 154, 155, 7, 126, 2, 2, 155, 32, 3, 2, 2, 2, 156, 157, 7, 46, 2, 2, 157, 34, 3, 2, 2, 2, 158, 159, 7, 107, 2, 2, 159, 160, 7, 104, 2, 2, 160, 36, 3, 2, 2, 2, 161, 162, 7, 103, 2, 2, 162, 163, 7, 110, 2, 2, 163, 164, 7, 107, 2, 2, 164, 165, 7, 104, 2, 2, 165, 38, 3, 2, 2, 2, 166, 167, 7, 103, 2, 2, 167, 168, 7, 110, 2, 2, 168, 169, 7, 117, 2, 2, 169, 170, 7, 103, 2, 2, 170, 40, 3, 2, 2, 2, 171, 172, 7, 121, 2, 2, 172, 173, 7, 106, 2, 2, 173, 174, 7, 107, 2, 2, 174, 175, 7, 110, 2, 2, 175, 176, 7, 103, 2, 2, 176, 42, 3, 2, 2, 2, 177, 178, 7, 119, 2, 2, 178, 179, 7, 112, 2, 2, 179, 180, 7, 118, 2, 2, 180, 181, 7, 107, 2, 2, 181, 182, 7, 110, 2, 2, 182, 44, 3, 2, 2, 2, 183, 184, 7, 104, 2, 2, 184, 185, 7, 113, 2, 2, 185, 186, 7, 116, 2, 2, 186, 46, 3, 2, 2, 2, 187, 188, 7, 107, 2, 2, 188, 189, 7, 112, 2, 2, 189, 48, 3, 2, 2, 2, 190, 191, 7, 117, 2, 2, 191, 192, 7, 118, 2, 2, 192, 193, 7, 103, 2, 2, 193, 194, 7, 114, 2, 2, 194, 50, 3, 2, 2, 2, 195, 196, 7, 102, 2, 2, 196, 197, 7, 113, 2, 2, 197, 52, 3, 2, 2, 2, 198, 199, 7, 125, 2, 2, 199, 54, 3, 2, 2, 2, 200, 201, 7, 127, 2, 2, 201, 56, 3, 2, 2, 2, 202, 203, 7, 42, 2, 2, 203, 58, 3, 2, 2, 2, 204, 205, 7, 43, 2, 2, 205, 60, 3, 2, 2, 2, 206, 207, 7, 93, 2, 2, 207, 62, 3, 2, 2, 2, 208, 209, 7, 95, 2, 2, 209, 64, 3, 2, 2, 2, 210, 211, 7, 48, 2, 2, 211, 66, 3, 2, 2, 2, 212, 213, 7, 128, 2, 2, 213, 68, 3, 2, 2, 2, 214, 215, 7, 48, 2, 2, 215, 216, 7, 48, 2, 2, 216, 70, 3, 2, 2, 2, 217, 218, 7, 48, 2, 2, 218, 219, 7, 48, 2, 2, 219, 220, 7, 48, 2, 2, 220, 72, 3, 2, 2, 2, 221, 222, 7, 63, 2, 2, 222, 223, 7, 63, 2, 2, 223, 74, 3, 2, 2, 2, 224, 225, 7, 35, 2, 2, 225, 226, 7, 63, 2, 2, 226, 76, 3, 2, 2, 2, 227, 228, 7, 62, 2, 2, 228, 78, 3, 2, 2, 2, 229, 230, 7, 62, 2, 2, 230, 231, 7, 63, 2, 2, 231, 80, 3, 2, 2, 2, 232, 233, 7, 64, 2, 2, 233, 82, 3, 2, 2, 2, 234, 235, 7, 64, 2, 2, 235, 236, 7, 63, 2, 2, 236, 84, 3, 2, 2, 2, 237, 238, 7, 112, 2, 2, 238, 239, 7, 113, 2, 2, 239, 240, 7, 118, 2, 2, 240, 86, 3, 2, 2, 2, 241, 242, 7, 99, 2, 2, 242, 243, 7, 112, 2, 2, 243, 244, 7, 102, 2, 2, 244, 88, 3, 2, 2, 2, 245, 246, 7, 113, 2, 2, 246, 247, 7, 116, 2, 2, 247, 90, 3, 2, 2, 2, 248, 249, 7, 65, 2, 2, 249, 92, 3, 2, 2, 2, 250, 251, 7, 60, 2, 2, 251, 94, 3, 2, 2, 2, 252, 253, 7, 118, 2, 2, 253, 254, 7, 116, 2, 2, 254, 255, 7, 119, 2, 2, 255, 256, 7, 103, 2, 2, 256, 96, 3, 2, 2, 2, 257, 258, 7, 104, 2, 2, 258, 259, 7, 99, 2, 2, 259, 260, 7, 110, 2, 2, 260, 261, 7, 117, 2, 2, 261, 262, 7, 103, 2, 2, 262, 98, 3, 2, 2, 2, 263, 265, 5, 107, 54, 2, 264, 263, 3, 2, 2, 2, 265, 266, 3, 2, 2, 2, 266, 264, 3, 2, 2, 2, 266, 267, 3, 2, 2, 2, 267, 100, 3, 2, 2, 2, 268, 274, 7, 41, 2, 2, 269, 273, 10, 2, 2, 2, 270, 271, 7, 94, 2, 2, 271, 273, 9, 3, 2, 2, 272, 269, 3, 2, 2, 2, 272, 270, 3, 2, 2, 2, 273, 276, 3, 2, 2, 2, 274, 272, 3, 2, 2, 2, 274, 275, 3, 2, 2, 2, 275, 277, 3, 2, 2, 2, 276, 274, 3, 2, 2, 2, 277, 278, 7, 41, 2, 2, 278, 102, 3, 2, 2, 2, 279, 285, 7, 36, 2, 2, 280, 284, 10, 4, 2, 2, 281, 282, 7, 94, 2, 2, 282, 284, 9, 5, 2, 2, 283, 280, 3, 2, 2, 2, 283, 281, 3, 2, 2, 2, 284, 287, 3, 2, 2, 2, 285, 283, 3, 2, 2, 2, 285, 286, 3, 2, 2, 2, 286, 288, 3, 2, 2, 2, 287, 285, 3, 2, 2, 2, 288, 289, 7, 36, 2, 2, 289, 104, 3, 2, 2, 2, 290, 294, 5, 109, 55, 2, 291, 293, 5, 111, 56, 2, 292, 291, 3, 2, 2, 2, 293, 296, 3, 2, 2, 2, 294, 292, 3, 2, 2, 2, 294, 295, 3, 2, 2, 2, 295, 106, 3, 2, 2, 2, 296, 294, 3, 2, 2, 2, 297, 298, 9, 6, 2, 2, 298, 108, 3, 2, 2, 2, 299, 300, 9, 7, 2, 2, 300, 110, 3, 2, 2, 2, 301, 305, 5, 109, 55, 2, 302, 305, 5, 107, 54, 2, 303, 305, 9, 8, 2, 2, 304, 301, 3, 2, 2, 2, 304, 302, 3, 2, 2, 2, 304, 303, 3, 2, 2, 2, 305, 112, 3, 2, 2, 2, 306, 308, 9, 9, 2, 2, 307, 306, 3, 2, 2, 2, 308, 309, 3, 2, 2, 2, 309, 307, 3, 2, 2, 2, 309, 310, 3, 2, 2, 2, 310, 311, 3, 2, 2, 2, 311, 312, 8, 57, 2, 2, 312, 114, 3, 2, 2, 2, 313, 314, 11, 2, 2, 2, 314, 116, 3, 2, 2, 2, 11, 2, 266, 272, 274, 283, 285, 294, 304, 309, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py index 625f1614..8fe73e30 100644 --- a/src/antlr/PyxellLexer.py +++ b/src/antlr/PyxellLexer.py @@ -8,8 +8,8 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\63") - buf.write("\u011e\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\28") + buf.write("\u013b\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") @@ -17,114 +17,128 @@ def serializedATN(): buf.write("\t\36\4\37\t\37\4 \t \4!\t!\4\"\t\"\4#\t#\4$\t$\4%\t%") buf.write("\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4,\t,\4-\t-\4.") buf.write("\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64") - buf.write("\t\64\4\65\t\65\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\4\3\4\3") - buf.write("\4\3\4\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t") - buf.write("\3\n\3\n\3\13\3\13\3\f\3\f\3\f\3\r\3\r\3\r\3\16\3\16\3") - buf.write("\17\3\17\3\20\3\20\3\21\3\21\3\22\3\22\3\22\3\23\3\23") - buf.write("\3\23\3\23\3\23\3\24\3\24\3\24\3\24\3\24\3\25\3\25\3\25") - buf.write("\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\26\3\27\3\27") - buf.write("\3\27\3\30\3\30\3\31\3\31\3\32\3\32\3\33\3\33\3\34\3\34") - buf.write("\3\35\3\35\3\36\3\36\3\37\3\37\3 \3 \3 \3!\3!\3!\3\"\3") - buf.write("\"\3#\3#\3#\3$\3$\3%\3%\3%\3&\3&\3&\3&\3\'\3\'\3\'\3\'") - buf.write("\3(\3(\3(\3)\3)\3*\3*\3+\3+\3+\3+\3+\3,\3,\3,\3,\3,\3") - buf.write(",\3-\6-\u00ec\n-\r-\16-\u00ed\3.\3.\3.\3.\7.\u00f4\n.") - buf.write("\f.\16.\u00f7\13.\3.\3.\3/\3/\3/\3/\7/\u00ff\n/\f/\16") - buf.write("/\u0102\13/\3/\3/\3\60\3\60\7\60\u0108\n\60\f\60\16\60") - buf.write("\u010b\13\60\3\61\3\61\3\62\3\62\3\63\3\63\3\63\5\63\u0114") - buf.write("\n\63\3\64\6\64\u0117\n\64\r\64\16\64\u0118\3\64\3\64") - buf.write("\3\65\3\65\2\2\66\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23") - buf.write("\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25") - buf.write(")\26+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A") - buf.write("\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\2c\2e\2g\62i\63") - buf.write("\3\2\n\4\2))^^\6\2))^^ppvv\4\2$$^^\6\2$$^^ppvv\3\2\62") - buf.write(";\5\2C\\aac|\4\2))aa\5\2\13\f\17\17\"\"\2\u0123\2\3\3") - buf.write("\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2") - buf.write("\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2") - buf.write("\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2") - buf.write("\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2") - buf.write("\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3") - buf.write("\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2") - buf.write("\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3") - buf.write("\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K") - buf.write("\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2") - buf.write("U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2") - buf.write("\2_\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\3k\3\2\2\2\5m\3\2\2") - buf.write("\2\7r\3\2\2\2\tx\3\2\2\2\13z\3\2\2\2\r|\3\2\2\2\17~\3") - buf.write("\2\2\2\21\u0080\3\2\2\2\23\u0082\3\2\2\2\25\u0084\3\2") - buf.write("\2\2\27\u0086\3\2\2\2\31\u0089\3\2\2\2\33\u008c\3\2\2") - buf.write("\2\35\u008e\3\2\2\2\37\u0090\3\2\2\2!\u0092\3\2\2\2#\u0094") - buf.write("\3\2\2\2%\u0097\3\2\2\2\'\u009c\3\2\2\2)\u00a1\3\2\2\2") - buf.write("+\u00a7\3\2\2\2-\u00ad\3\2\2\2/\u00b0\3\2\2\2\61\u00b2") - buf.write("\3\2\2\2\63\u00b4\3\2\2\2\65\u00b6\3\2\2\2\67\u00b8\3") - buf.write("\2\2\29\u00ba\3\2\2\2;\u00bc\3\2\2\2=\u00be\3\2\2\2?\u00c0") - buf.write("\3\2\2\2A\u00c3\3\2\2\2C\u00c6\3\2\2\2E\u00c8\3\2\2\2") - buf.write("G\u00cb\3\2\2\2I\u00cd\3\2\2\2K\u00d0\3\2\2\2M\u00d4\3") - buf.write("\2\2\2O\u00d8\3\2\2\2Q\u00db\3\2\2\2S\u00dd\3\2\2\2U\u00df") - buf.write("\3\2\2\2W\u00e4\3\2\2\2Y\u00eb\3\2\2\2[\u00ef\3\2\2\2") - buf.write("]\u00fa\3\2\2\2_\u0105\3\2\2\2a\u010c\3\2\2\2c\u010e\3") - buf.write("\2\2\2e\u0113\3\2\2\2g\u0116\3\2\2\2i\u011c\3\2\2\2kl") - buf.write("\7=\2\2l\4\3\2\2\2mn\7u\2\2no\7m\2\2op\7k\2\2pq\7r\2\2") - buf.write("q\6\3\2\2\2rs\7r\2\2st\7t\2\2tu\7k\2\2uv\7p\2\2vw\7v\2") - buf.write("\2w\b\3\2\2\2xy\7?\2\2y\n\3\2\2\2z{\7`\2\2{\f\3\2\2\2") - buf.write("|}\7,\2\2}\16\3\2\2\2~\177\7\61\2\2\177\20\3\2\2\2\u0080") - buf.write("\u0081\7\'\2\2\u0081\22\3\2\2\2\u0082\u0083\7-\2\2\u0083") - buf.write("\24\3\2\2\2\u0084\u0085\7/\2\2\u0085\26\3\2\2\2\u0086") - buf.write("\u0087\7>\2\2\u0087\u0088\7>\2\2\u0088\30\3\2\2\2\u0089") - buf.write("\u008a\7@\2\2\u008a\u008b\7@\2\2\u008b\32\3\2\2\2\u008c") - buf.write("\u008d\7(\2\2\u008d\34\3\2\2\2\u008e\u008f\7&\2\2\u008f") - buf.write("\36\3\2\2\2\u0090\u0091\7~\2\2\u0091 \3\2\2\2\u0092\u0093") - buf.write("\7.\2\2\u0093\"\3\2\2\2\u0094\u0095\7k\2\2\u0095\u0096") - buf.write("\7h\2\2\u0096$\3\2\2\2\u0097\u0098\7g\2\2\u0098\u0099") - buf.write("\7n\2\2\u0099\u009a\7k\2\2\u009a\u009b\7h\2\2\u009b&\3") - buf.write("\2\2\2\u009c\u009d\7g\2\2\u009d\u009e\7n\2\2\u009e\u009f") - buf.write("\7u\2\2\u009f\u00a0\7g\2\2\u00a0(\3\2\2\2\u00a1\u00a2") - buf.write("\7y\2\2\u00a2\u00a3\7j\2\2\u00a3\u00a4\7k\2\2\u00a4\u00a5") - buf.write("\7n\2\2\u00a5\u00a6\7g\2\2\u00a6*\3\2\2\2\u00a7\u00a8") - buf.write("\7w\2\2\u00a8\u00a9\7p\2\2\u00a9\u00aa\7v\2\2\u00aa\u00ab") - buf.write("\7k\2\2\u00ab\u00ac\7n\2\2\u00ac,\3\2\2\2\u00ad\u00ae") - buf.write("\7f\2\2\u00ae\u00af\7q\2\2\u00af.\3\2\2\2\u00b0\u00b1") - buf.write("\7}\2\2\u00b1\60\3\2\2\2\u00b2\u00b3\7\177\2\2\u00b3\62") - buf.write("\3\2\2\2\u00b4\u00b5\7*\2\2\u00b5\64\3\2\2\2\u00b6\u00b7") - buf.write("\7+\2\2\u00b7\66\3\2\2\2\u00b8\u00b9\7]\2\2\u00b98\3\2") - buf.write("\2\2\u00ba\u00bb\7_\2\2\u00bb:\3\2\2\2\u00bc\u00bd\7\60") - buf.write("\2\2\u00bd<\3\2\2\2\u00be\u00bf\7\u0080\2\2\u00bf>\3\2") - buf.write("\2\2\u00c0\u00c1\7?\2\2\u00c1\u00c2\7?\2\2\u00c2@\3\2") - buf.write("\2\2\u00c3\u00c4\7#\2\2\u00c4\u00c5\7?\2\2\u00c5B\3\2") - buf.write("\2\2\u00c6\u00c7\7>\2\2\u00c7D\3\2\2\2\u00c8\u00c9\7>") - buf.write("\2\2\u00c9\u00ca\7?\2\2\u00caF\3\2\2\2\u00cb\u00cc\7@") - buf.write("\2\2\u00ccH\3\2\2\2\u00cd\u00ce\7@\2\2\u00ce\u00cf\7?") - buf.write("\2\2\u00cfJ\3\2\2\2\u00d0\u00d1\7p\2\2\u00d1\u00d2\7q") - buf.write("\2\2\u00d2\u00d3\7v\2\2\u00d3L\3\2\2\2\u00d4\u00d5\7c") - buf.write("\2\2\u00d5\u00d6\7p\2\2\u00d6\u00d7\7f\2\2\u00d7N\3\2") - buf.write("\2\2\u00d8\u00d9\7q\2\2\u00d9\u00da\7t\2\2\u00daP\3\2") - buf.write("\2\2\u00db\u00dc\7A\2\2\u00dcR\3\2\2\2\u00dd\u00de\7<") - buf.write("\2\2\u00deT\3\2\2\2\u00df\u00e0\7v\2\2\u00e0\u00e1\7t") - buf.write("\2\2\u00e1\u00e2\7w\2\2\u00e2\u00e3\7g\2\2\u00e3V\3\2") - buf.write("\2\2\u00e4\u00e5\7h\2\2\u00e5\u00e6\7c\2\2\u00e6\u00e7") - buf.write("\7n\2\2\u00e7\u00e8\7u\2\2\u00e8\u00e9\7g\2\2\u00e9X\3") - buf.write("\2\2\2\u00ea\u00ec\5a\61\2\u00eb\u00ea\3\2\2\2\u00ec\u00ed") - buf.write("\3\2\2\2\u00ed\u00eb\3\2\2\2\u00ed\u00ee\3\2\2\2\u00ee") - buf.write("Z\3\2\2\2\u00ef\u00f5\7)\2\2\u00f0\u00f4\n\2\2\2\u00f1") - buf.write("\u00f2\7^\2\2\u00f2\u00f4\t\3\2\2\u00f3\u00f0\3\2\2\2") - buf.write("\u00f3\u00f1\3\2\2\2\u00f4\u00f7\3\2\2\2\u00f5\u00f3\3") - buf.write("\2\2\2\u00f5\u00f6\3\2\2\2\u00f6\u00f8\3\2\2\2\u00f7\u00f5") - buf.write("\3\2\2\2\u00f8\u00f9\7)\2\2\u00f9\\\3\2\2\2\u00fa\u0100") - buf.write("\7$\2\2\u00fb\u00ff\n\4\2\2\u00fc\u00fd\7^\2\2\u00fd\u00ff") - buf.write("\t\5\2\2\u00fe\u00fb\3\2\2\2\u00fe\u00fc\3\2\2\2\u00ff") - buf.write("\u0102\3\2\2\2\u0100\u00fe\3\2\2\2\u0100\u0101\3\2\2\2") - buf.write("\u0101\u0103\3\2\2\2\u0102\u0100\3\2\2\2\u0103\u0104\7") - buf.write("$\2\2\u0104^\3\2\2\2\u0105\u0109\5c\62\2\u0106\u0108\5") - buf.write("e\63\2\u0107\u0106\3\2\2\2\u0108\u010b\3\2\2\2\u0109\u0107") - buf.write("\3\2\2\2\u0109\u010a\3\2\2\2\u010a`\3\2\2\2\u010b\u0109") - buf.write("\3\2\2\2\u010c\u010d\t\6\2\2\u010db\3\2\2\2\u010e\u010f") - buf.write("\t\7\2\2\u010fd\3\2\2\2\u0110\u0114\5c\62\2\u0111\u0114") - buf.write("\5a\61\2\u0112\u0114\t\b\2\2\u0113\u0110\3\2\2\2\u0113") - buf.write("\u0111\3\2\2\2\u0113\u0112\3\2\2\2\u0114f\3\2\2\2\u0115") - buf.write("\u0117\t\t\2\2\u0116\u0115\3\2\2\2\u0117\u0118\3\2\2\2") - buf.write("\u0118\u0116\3\2\2\2\u0118\u0119\3\2\2\2\u0119\u011a\3") - buf.write("\2\2\2\u011a\u011b\b\64\2\2\u011bh\3\2\2\2\u011c\u011d") - buf.write("\13\2\2\2\u011dj\3\2\2\2\13\2\u00ed\u00f3\u00f5\u00fe") - buf.write("\u0100\u0109\u0113\u0118\3\b\2\2") + buf.write("\t\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:") + buf.write("\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\4\3") + buf.write("\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\n\3\n\3\13\3") + buf.write("\13\3\f\3\f\3\f\3\r\3\r\3\r\3\16\3\16\3\17\3\17\3\20\3") + buf.write("\20\3\21\3\21\3\22\3\22\3\22\3\23\3\23\3\23\3\23\3\23") + buf.write("\3\24\3\24\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3\25\3\25") + buf.write("\3\26\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27\3\30") + buf.write("\3\30\3\30\3\31\3\31\3\31\3\31\3\31\3\32\3\32\3\32\3\33") + buf.write("\3\33\3\34\3\34\3\35\3\35\3\36\3\36\3\37\3\37\3 \3 \3") + buf.write("!\3!\3\"\3\"\3#\3#\3#\3$\3$\3$\3$\3%\3%\3%\3&\3&\3&\3") + buf.write("\'\3\'\3(\3(\3(\3)\3)\3*\3*\3*\3+\3+\3+\3+\3,\3,\3,\3") + buf.write(",\3-\3-\3-\3.\3.\3/\3/\3\60\3\60\3\60\3\60\3\60\3\61\3") + buf.write("\61\3\61\3\61\3\61\3\61\3\62\6\62\u0109\n\62\r\62\16\62") + buf.write("\u010a\3\63\3\63\3\63\3\63\7\63\u0111\n\63\f\63\16\63") + buf.write("\u0114\13\63\3\63\3\63\3\64\3\64\3\64\3\64\7\64\u011c") + buf.write("\n\64\f\64\16\64\u011f\13\64\3\64\3\64\3\65\3\65\7\65") + buf.write("\u0125\n\65\f\65\16\65\u0128\13\65\3\66\3\66\3\67\3\67") + buf.write("\38\38\38\58\u0131\n8\39\69\u0134\n9\r9\169\u0135\39\3") + buf.write("9\3:\3:\2\2;\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13") + buf.write("\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26") + buf.write("+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#") + buf.write("E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66") + buf.write("k\2m\2o\2q\67s8\3\2\n\4\2))^^\6\2))^^ppvv\4\2$$^^\6\2") + buf.write("$$^^ppvv\3\2\62;\5\2C\\aac|\4\2))aa\5\2\13\f\17\17\"\"") + buf.write("\2\u0140\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2") + buf.write("\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2") + buf.write("\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2") + buf.write("\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3") + buf.write("\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2") + buf.write("-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3") + buf.write("\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2") + buf.write("?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2") + buf.write("\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2") + buf.write("\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2") + buf.write("\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3") + buf.write("\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\3u") + buf.write("\3\2\2\2\5w\3\2\2\2\7|\3\2\2\2\t\u0082\3\2\2\2\13\u0084") + buf.write("\3\2\2\2\r\u0086\3\2\2\2\17\u0088\3\2\2\2\21\u008a\3\2") + buf.write("\2\2\23\u008c\3\2\2\2\25\u008e\3\2\2\2\27\u0090\3\2\2") + buf.write("\2\31\u0093\3\2\2\2\33\u0096\3\2\2\2\35\u0098\3\2\2\2") + buf.write("\37\u009a\3\2\2\2!\u009c\3\2\2\2#\u009e\3\2\2\2%\u00a1") + buf.write("\3\2\2\2\'\u00a6\3\2\2\2)\u00ab\3\2\2\2+\u00b1\3\2\2\2") + buf.write("-\u00b7\3\2\2\2/\u00bb\3\2\2\2\61\u00be\3\2\2\2\63\u00c3") + buf.write("\3\2\2\2\65\u00c6\3\2\2\2\67\u00c8\3\2\2\29\u00ca\3\2") + buf.write("\2\2;\u00cc\3\2\2\2=\u00ce\3\2\2\2?\u00d0\3\2\2\2A\u00d2") + buf.write("\3\2\2\2C\u00d4\3\2\2\2E\u00d6\3\2\2\2G\u00d9\3\2\2\2") + buf.write("I\u00dd\3\2\2\2K\u00e0\3\2\2\2M\u00e3\3\2\2\2O\u00e5\3") + buf.write("\2\2\2Q\u00e8\3\2\2\2S\u00ea\3\2\2\2U\u00ed\3\2\2\2W\u00f1") + buf.write("\3\2\2\2Y\u00f5\3\2\2\2[\u00f8\3\2\2\2]\u00fa\3\2\2\2") + buf.write("_\u00fc\3\2\2\2a\u0101\3\2\2\2c\u0108\3\2\2\2e\u010c\3") + buf.write("\2\2\2g\u0117\3\2\2\2i\u0122\3\2\2\2k\u0129\3\2\2\2m\u012b") + buf.write("\3\2\2\2o\u0130\3\2\2\2q\u0133\3\2\2\2s\u0139\3\2\2\2") + buf.write("uv\7=\2\2v\4\3\2\2\2wx\7u\2\2xy\7m\2\2yz\7k\2\2z{\7r\2") + buf.write("\2{\6\3\2\2\2|}\7r\2\2}~\7t\2\2~\177\7k\2\2\177\u0080") + buf.write("\7p\2\2\u0080\u0081\7v\2\2\u0081\b\3\2\2\2\u0082\u0083") + buf.write("\7?\2\2\u0083\n\3\2\2\2\u0084\u0085\7`\2\2\u0085\f\3\2") + buf.write("\2\2\u0086\u0087\7,\2\2\u0087\16\3\2\2\2\u0088\u0089\7") + buf.write("\61\2\2\u0089\20\3\2\2\2\u008a\u008b\7\'\2\2\u008b\22") + buf.write("\3\2\2\2\u008c\u008d\7-\2\2\u008d\24\3\2\2\2\u008e\u008f") + buf.write("\7/\2\2\u008f\26\3\2\2\2\u0090\u0091\7>\2\2\u0091\u0092") + buf.write("\7>\2\2\u0092\30\3\2\2\2\u0093\u0094\7@\2\2\u0094\u0095") + buf.write("\7@\2\2\u0095\32\3\2\2\2\u0096\u0097\7(\2\2\u0097\34\3") + buf.write("\2\2\2\u0098\u0099\7&\2\2\u0099\36\3\2\2\2\u009a\u009b") + buf.write("\7~\2\2\u009b \3\2\2\2\u009c\u009d\7.\2\2\u009d\"\3\2") + buf.write("\2\2\u009e\u009f\7k\2\2\u009f\u00a0\7h\2\2\u00a0$\3\2") + buf.write("\2\2\u00a1\u00a2\7g\2\2\u00a2\u00a3\7n\2\2\u00a3\u00a4") + buf.write("\7k\2\2\u00a4\u00a5\7h\2\2\u00a5&\3\2\2\2\u00a6\u00a7") + buf.write("\7g\2\2\u00a7\u00a8\7n\2\2\u00a8\u00a9\7u\2\2\u00a9\u00aa") + buf.write("\7g\2\2\u00aa(\3\2\2\2\u00ab\u00ac\7y\2\2\u00ac\u00ad") + buf.write("\7j\2\2\u00ad\u00ae\7k\2\2\u00ae\u00af\7n\2\2\u00af\u00b0") + buf.write("\7g\2\2\u00b0*\3\2\2\2\u00b1\u00b2\7w\2\2\u00b2\u00b3") + buf.write("\7p\2\2\u00b3\u00b4\7v\2\2\u00b4\u00b5\7k\2\2\u00b5\u00b6") + buf.write("\7n\2\2\u00b6,\3\2\2\2\u00b7\u00b8\7h\2\2\u00b8\u00b9") + buf.write("\7q\2\2\u00b9\u00ba\7t\2\2\u00ba.\3\2\2\2\u00bb\u00bc") + buf.write("\7k\2\2\u00bc\u00bd\7p\2\2\u00bd\60\3\2\2\2\u00be\u00bf") + buf.write("\7u\2\2\u00bf\u00c0\7v\2\2\u00c0\u00c1\7g\2\2\u00c1\u00c2") + buf.write("\7r\2\2\u00c2\62\3\2\2\2\u00c3\u00c4\7f\2\2\u00c4\u00c5") + buf.write("\7q\2\2\u00c5\64\3\2\2\2\u00c6\u00c7\7}\2\2\u00c7\66\3") + buf.write("\2\2\2\u00c8\u00c9\7\177\2\2\u00c98\3\2\2\2\u00ca\u00cb") + buf.write("\7*\2\2\u00cb:\3\2\2\2\u00cc\u00cd\7+\2\2\u00cd<\3\2\2") + buf.write("\2\u00ce\u00cf\7]\2\2\u00cf>\3\2\2\2\u00d0\u00d1\7_\2") + buf.write("\2\u00d1@\3\2\2\2\u00d2\u00d3\7\60\2\2\u00d3B\3\2\2\2") + buf.write("\u00d4\u00d5\7\u0080\2\2\u00d5D\3\2\2\2\u00d6\u00d7\7") + buf.write("\60\2\2\u00d7\u00d8\7\60\2\2\u00d8F\3\2\2\2\u00d9\u00da") + buf.write("\7\60\2\2\u00da\u00db\7\60\2\2\u00db\u00dc\7\60\2\2\u00dc") + buf.write("H\3\2\2\2\u00dd\u00de\7?\2\2\u00de\u00df\7?\2\2\u00df") + buf.write("J\3\2\2\2\u00e0\u00e1\7#\2\2\u00e1\u00e2\7?\2\2\u00e2") + buf.write("L\3\2\2\2\u00e3\u00e4\7>\2\2\u00e4N\3\2\2\2\u00e5\u00e6") + buf.write("\7>\2\2\u00e6\u00e7\7?\2\2\u00e7P\3\2\2\2\u00e8\u00e9") + buf.write("\7@\2\2\u00e9R\3\2\2\2\u00ea\u00eb\7@\2\2\u00eb\u00ec") + buf.write("\7?\2\2\u00ecT\3\2\2\2\u00ed\u00ee\7p\2\2\u00ee\u00ef") + buf.write("\7q\2\2\u00ef\u00f0\7v\2\2\u00f0V\3\2\2\2\u00f1\u00f2") + buf.write("\7c\2\2\u00f2\u00f3\7p\2\2\u00f3\u00f4\7f\2\2\u00f4X\3") + buf.write("\2\2\2\u00f5\u00f6\7q\2\2\u00f6\u00f7\7t\2\2\u00f7Z\3") + buf.write("\2\2\2\u00f8\u00f9\7A\2\2\u00f9\\\3\2\2\2\u00fa\u00fb") + buf.write("\7<\2\2\u00fb^\3\2\2\2\u00fc\u00fd\7v\2\2\u00fd\u00fe") + buf.write("\7t\2\2\u00fe\u00ff\7w\2\2\u00ff\u0100\7g\2\2\u0100`\3") + buf.write("\2\2\2\u0101\u0102\7h\2\2\u0102\u0103\7c\2\2\u0103\u0104") + buf.write("\7n\2\2\u0104\u0105\7u\2\2\u0105\u0106\7g\2\2\u0106b\3") + buf.write("\2\2\2\u0107\u0109\5k\66\2\u0108\u0107\3\2\2\2\u0109\u010a") + buf.write("\3\2\2\2\u010a\u0108\3\2\2\2\u010a\u010b\3\2\2\2\u010b") + buf.write("d\3\2\2\2\u010c\u0112\7)\2\2\u010d\u0111\n\2\2\2\u010e") + buf.write("\u010f\7^\2\2\u010f\u0111\t\3\2\2\u0110\u010d\3\2\2\2") + buf.write("\u0110\u010e\3\2\2\2\u0111\u0114\3\2\2\2\u0112\u0110\3") + buf.write("\2\2\2\u0112\u0113\3\2\2\2\u0113\u0115\3\2\2\2\u0114\u0112") + buf.write("\3\2\2\2\u0115\u0116\7)\2\2\u0116f\3\2\2\2\u0117\u011d") + buf.write("\7$\2\2\u0118\u011c\n\4\2\2\u0119\u011a\7^\2\2\u011a\u011c") + buf.write("\t\5\2\2\u011b\u0118\3\2\2\2\u011b\u0119\3\2\2\2\u011c") + buf.write("\u011f\3\2\2\2\u011d\u011b\3\2\2\2\u011d\u011e\3\2\2\2") + buf.write("\u011e\u0120\3\2\2\2\u011f\u011d\3\2\2\2\u0120\u0121\7") + buf.write("$\2\2\u0121h\3\2\2\2\u0122\u0126\5m\67\2\u0123\u0125\5") + buf.write("o8\2\u0124\u0123\3\2\2\2\u0125\u0128\3\2\2\2\u0126\u0124") + buf.write("\3\2\2\2\u0126\u0127\3\2\2\2\u0127j\3\2\2\2\u0128\u0126") + buf.write("\3\2\2\2\u0129\u012a\t\6\2\2\u012al\3\2\2\2\u012b\u012c") + buf.write("\t\7\2\2\u012cn\3\2\2\2\u012d\u0131\5m\67\2\u012e\u0131") + buf.write("\5k\66\2\u012f\u0131\t\b\2\2\u0130\u012d\3\2\2\2\u0130") + buf.write("\u012e\3\2\2\2\u0130\u012f\3\2\2\2\u0131p\3\2\2\2\u0132") + buf.write("\u0134\t\t\2\2\u0133\u0132\3\2\2\2\u0134\u0135\3\2\2\2") + buf.write("\u0135\u0133\3\2\2\2\u0135\u0136\3\2\2\2\u0136\u0137\3") + buf.write("\2\2\2\u0137\u0138\b9\2\2\u0138r\3\2\2\2\u0139\u013a\13") + buf.write("\2\2\2\u013at\3\2\2\2\13\2\u010a\u0110\u0112\u011b\u011d") + buf.write("\u0126\u0130\u0135\3\b\2\2") return buf.getvalue() @@ -177,12 +191,17 @@ class PyxellLexer(Lexer): T__40 = 41 T__41 = 42 T__42 = 43 - INT = 44 - CHAR = 45 - STRING = 46 - ID = 47 - WS = 48 - ERR = 49 + T__43 = 44 + T__44 = 45 + T__45 = 46 + T__46 = 47 + T__47 = 48 + INT = 49 + CHAR = 50 + STRING = 51 + ID = 52 + WS = 53 + ERR = 54 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -191,10 +210,10 @@ class PyxellLexer(Lexer): literalNames = [ "", "';'", "'skip'", "'print'", "'='", "'^'", "'*'", "'/'", "'%'", "'+'", "'-'", "'<<'", "'>>'", "'&'", "'$'", "'|'", "','", "'if'", - "'elif'", "'else'", "'while'", "'until'", "'do'", "'{'", "'}'", - "'('", "')'", "'['", "']'", "'.'", "'~'", "'=='", "'!='", "'<'", - "'<='", "'>'", "'>='", "'not'", "'and'", "'or'", "'?'", "':'", - "'true'", "'false'" ] + "'elif'", "'else'", "'while'", "'until'", "'for'", "'in'", "'step'", + "'do'", "'{'", "'}'", "'('", "')'", "'['", "']'", "'.'", "'~'", + "'..'", "'...'", "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", + "'not'", "'and'", "'or'", "'?'", "':'", "'true'", "'false'" ] symbolicNames = [ "", "INT", "CHAR", "STRING", "ID", "WS", "ERR" ] @@ -205,9 +224,9 @@ class PyxellLexer(Lexer): "T__20", "T__21", "T__22", "T__23", "T__24", "T__25", "T__26", "T__27", "T__28", "T__29", "T__30", "T__31", "T__32", "T__33", "T__34", "T__35", "T__36", "T__37", - "T__38", "T__39", "T__40", "T__41", "T__42", "INT", "CHAR", - "STRING", "ID", "DIGIT", "ID_START", "ID_CONT", "WS", - "ERR" ] + "T__38", "T__39", "T__40", "T__41", "T__42", "T__43", + "T__44", "T__45", "T__46", "T__47", "INT", "CHAR", "STRING", + "ID", "DIGIT", "ID_START", "ID_CONT", "WS", "ERR" ] grammarFileName = "Pyxell.g4" diff --git a/src/antlr/PyxellLexer.tokens b/src/antlr/PyxellLexer.tokens index 1c16cb39..7e3283ca 100644 --- a/src/antlr/PyxellLexer.tokens +++ b/src/antlr/PyxellLexer.tokens @@ -41,12 +41,17 @@ T__39=40 T__40=41 T__41=42 T__42=43 -INT=44 -CHAR=45 -STRING=46 -ID=47 -WS=48 -ERR=49 +T__43=44 +T__44=45 +T__45=46 +T__46=47 +T__47=48 +INT=49 +CHAR=50 +STRING=51 +ID=52 +WS=53 +ERR=54 ';'=1 'skip'=2 'print'=3 @@ -68,25 +73,30 @@ ERR=49 'else'=19 'while'=20 'until'=21 -'do'=22 -'{'=23 -'}'=24 -'('=25 -')'=26 -'['=27 -']'=28 -'.'=29 -'~'=30 -'=='=31 -'!='=32 -'<'=33 -'<='=34 -'>'=35 -'>='=36 -'not'=37 -'and'=38 -'or'=39 -'?'=40 -':'=41 -'true'=42 -'false'=43 +'for'=22 +'in'=23 +'step'=24 +'do'=25 +'{'=26 +'}'=27 +'('=28 +')'=29 +'['=30 +']'=31 +'.'=32 +'~'=33 +'..'=34 +'...'=35 +'=='=36 +'!='=37 +'<'=38 +'<='=39 +'>'=40 +'>='=41 +'not'=42 +'and'=43 +'or'=44 +'?'=45 +':'=46 +'true'=47 +'false'=48 diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index a132d1ee..e42fcc46 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -8,88 +8,94 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\63") - buf.write("\u00c4\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") - buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\3\2\7\2\30\n\2\f\2") - buf.write("\16\2\33\13\2\3\2\3\2\3\3\3\3\3\3\3\3\5\3#\n\3\3\4\3\4") - buf.write("\3\4\5\4(\n\4\3\4\3\4\3\4\7\4-\n\4\f\4\16\4\60\13\4\3") - buf.write("\4\3\4\3\4\3\4\3\4\3\4\5\48\n\4\3\5\3\5\3\5\7\5=\n\5\f") - buf.write("\5\16\5@\13\5\3\6\3\6\3\6\3\6\3\6\3\6\3\6\7\6I\n\6\f\6") - buf.write("\16\6L\13\6\3\6\3\6\5\6P\n\6\3\6\3\6\3\6\3\6\3\6\3\6\3") - buf.write("\6\3\6\5\6Z\n\6\3\7\3\7\3\7\6\7_\n\7\r\7\16\7`\3\7\3\7") - buf.write("\3\b\3\b\5\bg\n\b\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") - buf.write("\3\t\5\ts\n\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\38") + buf.write("\u00d0\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\3\2\7\2\26\n\2\f\2\16\2\31\13") + buf.write("\2\3\2\3\2\3\3\3\3\3\3\3\3\5\3!\n\3\3\4\3\4\3\4\5\4&\n") + buf.write("\4\3\4\3\4\3\4\7\4+\n\4\f\4\16\4.\13\4\3\4\3\4\3\4\3\4") + buf.write("\3\4\3\4\5\4\66\n\4\3\5\3\5\3\5\7\5;\n\5\f\5\16\5>\13") + buf.write("\5\3\6\3\6\3\6\3\6\3\6\3\6\3\6\7\6G\n\6\f\6\16\6J\13\6") + buf.write("\3\6\3\6\5\6N\n\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6") + buf.write("\3\6\3\6\3\6\3\6\3\6\5\6^\n\6\3\6\3\6\5\6b\n\6\3\7\3\7") + buf.write("\3\7\6\7g\n\7\r\7\16\7h\3\7\3\7\3\b\3\b\3\b\7\bp\n\b\f") + buf.write("\b\16\bs\13\b\3\b\3\b\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") + buf.write("\3\t\3\t\5\t\u0081\n\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") buf.write("\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") - buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\7\t\u00a1\n\t\f\t\16\t\u00a4") - buf.write("\13\t\3\n\3\n\3\n\6\n\u00a9\n\n\r\n\16\n\u00aa\3\n\5\n") - buf.write("\u00ae\n\n\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\7\13") - buf.write("\u00b8\n\13\f\13\16\13\u00bb\13\13\3\13\5\13\u00be\n\13") - buf.write("\3\13\3\13\5\13\u00c2\n\13\3\13\2\3\20\f\2\4\6\b\n\f\16") - buf.write("\20\22\24\2\t\3\2\7\21\4\2\13\f \3\2\b\n\3\2\13\f\3\2") - buf.write("\r\16\3\2!&\3\2,-\2\u00e0\2\31\3\2\2\2\4\"\3\2\2\2\6\67") - buf.write("\3\2\2\2\b9\3\2\2\2\nY\3\2\2\2\f[\3\2\2\2\16f\3\2\2\2") - buf.write("\20r\3\2\2\2\22\u00a8\3\2\2\2\24\u00c1\3\2\2\2\26\30\5") - buf.write("\4\3\2\27\26\3\2\2\2\30\33\3\2\2\2\31\27\3\2\2\2\31\32") - buf.write("\3\2\2\2\32\34\3\2\2\2\33\31\3\2\2\2\34\35\7\2\2\3\35") - buf.write("\3\3\2\2\2\36\37\5\6\4\2\37 \7\3\2\2 #\3\2\2\2!#\5\n\6") - buf.write("\2\"\36\3\2\2\2\"!\3\2\2\2#\5\3\2\2\2$8\7\4\2\2%\'\7\5") - buf.write("\2\2&(\5\16\b\2\'&\3\2\2\2\'(\3\2\2\2(8\3\2\2\2)*\5\b") - buf.write("\5\2*+\7\6\2\2+-\3\2\2\2,)\3\2\2\2-\60\3\2\2\2.,\3\2\2") - buf.write("\2./\3\2\2\2/\61\3\2\2\2\60.\3\2\2\2\618\5\16\b\2\62\63") - buf.write("\5\20\t\2\63\64\t\2\2\2\64\65\7\6\2\2\65\66\5\20\t\2\66") - buf.write("8\3\2\2\2\67$\3\2\2\2\67%\3\2\2\2\67.\3\2\2\2\67\62\3") - buf.write("\2\2\28\7\3\2\2\29>\5\20\t\2:;\7\22\2\2;=\5\20\t\2<:\3") - buf.write("\2\2\2=@\3\2\2\2><\3\2\2\2>?\3\2\2\2?\t\3\2\2\2@>\3\2") - buf.write("\2\2AB\7\23\2\2BC\5\20\t\2CJ\5\f\7\2DE\7\24\2\2EF\5\20") - buf.write("\t\2FG\5\f\7\2GI\3\2\2\2HD\3\2\2\2IL\3\2\2\2JH\3\2\2\2") - buf.write("JK\3\2\2\2KO\3\2\2\2LJ\3\2\2\2MN\7\25\2\2NP\5\f\7\2OM") - buf.write("\3\2\2\2OP\3\2\2\2PZ\3\2\2\2QR\7\26\2\2RS\5\20\t\2ST\5") - buf.write("\f\7\2TZ\3\2\2\2UV\7\27\2\2VW\5\20\t\2WX\5\f\7\2XZ\3\2") - buf.write("\2\2YA\3\2\2\2YQ\3\2\2\2YU\3\2\2\2Z\13\3\2\2\2[\\\7\30") - buf.write("\2\2\\^\7\31\2\2]_\5\4\3\2^]\3\2\2\2_`\3\2\2\2`^\3\2\2") - buf.write("\2`a\3\2\2\2ab\3\2\2\2bc\7\32\2\2c\r\3\2\2\2dg\5\20\t") - buf.write("\2eg\5\22\n\2fd\3\2\2\2fe\3\2\2\2g\17\3\2\2\2hi\b\t\1") - buf.write("\2is\5\24\13\2jk\7\33\2\2kl\5\16\b\2lm\7\34\2\2ms\3\2") - buf.write("\2\2no\t\3\2\2os\5\20\t\16pq\7\'\2\2qs\5\20\t\6rh\3\2") - buf.write("\2\2rj\3\2\2\2rn\3\2\2\2rp\3\2\2\2s\u00a2\3\2\2\2tu\f") - buf.write("\17\2\2uv\7\7\2\2v\u00a1\5\20\t\17wx\f\r\2\2xy\t\4\2\2") - buf.write("y\u00a1\5\20\t\16z{\f\f\2\2{|\t\5\2\2|\u00a1\5\20\t\r") - buf.write("}~\f\13\2\2~\177\t\6\2\2\177\u00a1\5\20\t\f\u0080\u0081") - buf.write("\f\n\2\2\u0081\u0082\7\17\2\2\u0082\u00a1\5\20\t\13\u0083") - buf.write("\u0084\f\t\2\2\u0084\u0085\7\20\2\2\u0085\u00a1\5\20\t") - buf.write("\n\u0086\u0087\f\b\2\2\u0087\u0088\7\21\2\2\u0088\u00a1") - buf.write("\5\20\t\t\u0089\u008a\f\7\2\2\u008a\u008b\t\7\2\2\u008b") - buf.write("\u00a1\5\20\t\7\u008c\u008d\f\5\2\2\u008d\u008e\7(\2\2") - buf.write("\u008e\u00a1\5\20\t\5\u008f\u0090\f\4\2\2\u0090\u0091") - buf.write("\7)\2\2\u0091\u00a1\5\20\t\4\u0092\u0093\f\3\2\2\u0093") - buf.write("\u0094\7*\2\2\u0094\u0095\5\20\t\2\u0095\u0096\7+\2\2") - buf.write("\u0096\u0097\5\20\t\3\u0097\u00a1\3\2\2\2\u0098\u0099") - buf.write("\f\21\2\2\u0099\u009a\7\35\2\2\u009a\u009b\5\20\t\2\u009b") - buf.write("\u009c\7\36\2\2\u009c\u00a1\3\2\2\2\u009d\u009e\f\20\2") - buf.write("\2\u009e\u009f\7\37\2\2\u009f\u00a1\7\61\2\2\u00a0t\3") - buf.write("\2\2\2\u00a0w\3\2\2\2\u00a0z\3\2\2\2\u00a0}\3\2\2\2\u00a0") - buf.write("\u0080\3\2\2\2\u00a0\u0083\3\2\2\2\u00a0\u0086\3\2\2\2") - buf.write("\u00a0\u0089\3\2\2\2\u00a0\u008c\3\2\2\2\u00a0\u008f\3") - buf.write("\2\2\2\u00a0\u0092\3\2\2\2\u00a0\u0098\3\2\2\2\u00a0\u009d") - buf.write("\3\2\2\2\u00a1\u00a4\3\2\2\2\u00a2\u00a0\3\2\2\2\u00a2") - buf.write("\u00a3\3\2\2\2\u00a3\21\3\2\2\2\u00a4\u00a2\3\2\2\2\u00a5") - buf.write("\u00a6\5\20\t\2\u00a6\u00a7\7\22\2\2\u00a7\u00a9\3\2\2") - buf.write("\2\u00a8\u00a5\3\2\2\2\u00a9\u00aa\3\2\2\2\u00aa\u00a8") - buf.write("\3\2\2\2\u00aa\u00ab\3\2\2\2\u00ab\u00ad\3\2\2\2\u00ac") - buf.write("\u00ae\5\20\t\2\u00ad\u00ac\3\2\2\2\u00ad\u00ae\3\2\2") - buf.write("\2\u00ae\23\3\2\2\2\u00af\u00c2\7.\2\2\u00b0\u00c2\t\b") - buf.write("\2\2\u00b1\u00c2\7/\2\2\u00b2\u00c2\7\60\2\2\u00b3\u00b9") - buf.write("\7\35\2\2\u00b4\u00b5\5\20\t\2\u00b5\u00b6\7\22\2\2\u00b6") - buf.write("\u00b8\3\2\2\2\u00b7\u00b4\3\2\2\2\u00b8\u00bb\3\2\2\2") - buf.write("\u00b9\u00b7\3\2\2\2\u00b9\u00ba\3\2\2\2\u00ba\u00bd\3") - buf.write("\2\2\2\u00bb\u00b9\3\2\2\2\u00bc\u00be\5\20\t\2\u00bd") - buf.write("\u00bc\3\2\2\2\u00bd\u00be\3\2\2\2\u00be\u00bf\3\2\2\2") - buf.write("\u00bf\u00c2\7\36\2\2\u00c0\u00c2\7\61\2\2\u00c1\u00af") - buf.write("\3\2\2\2\u00c1\u00b0\3\2\2\2\u00c1\u00b1\3\2\2\2\u00c1") - buf.write("\u00b2\3\2\2\2\u00c1\u00b3\3\2\2\2\u00c1\u00c0\3\2\2\2") - buf.write("\u00c2\25\3\2\2\2\25\31\"\'.\67>JOY`fr\u00a0\u00a2\u00aa") - buf.write("\u00ad\u00b9\u00bd\u00c1") + buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") + buf.write("\t\3\t\3\t\3\t\7\t\u00b7\n\t\f\t\16\t\u00ba\13\t\3\n\3") + buf.write("\n\3\n\3\n\3\n\3\n\3\n\3\n\7\n\u00c4\n\n\f\n\16\n\u00c7") + buf.write("\13\n\3\n\5\n\u00ca\n\n\3\n\3\n\5\n\u00ce\n\n\3\n\2\3") + buf.write("\20\13\2\4\6\b\n\f\16\20\22\2\t\3\2\7\21\4\2\13\f##\3") + buf.write("\2\b\n\3\2\13\f\3\2\r\16\3\2&+\3\2\61\62\2\u00f0\2\27") + buf.write("\3\2\2\2\4 \3\2\2\2\6\65\3\2\2\2\b\67\3\2\2\2\na\3\2\2") + buf.write("\2\fc\3\2\2\2\16q\3\2\2\2\20\u0080\3\2\2\2\22\u00cd\3") + buf.write("\2\2\2\24\26\5\4\3\2\25\24\3\2\2\2\26\31\3\2\2\2\27\25") + buf.write("\3\2\2\2\27\30\3\2\2\2\30\32\3\2\2\2\31\27\3\2\2\2\32") + buf.write("\33\7\2\2\3\33\3\3\2\2\2\34\35\5\6\4\2\35\36\7\3\2\2\36") + buf.write("!\3\2\2\2\37!\5\n\6\2 \34\3\2\2\2 \37\3\2\2\2!\5\3\2\2") + buf.write("\2\"\66\7\4\2\2#%\7\5\2\2$&\5\16\b\2%$\3\2\2\2%&\3\2\2") + buf.write("\2&\66\3\2\2\2\'(\5\b\5\2()\7\6\2\2)+\3\2\2\2*\'\3\2\2") + buf.write("\2+.\3\2\2\2,*\3\2\2\2,-\3\2\2\2-/\3\2\2\2.,\3\2\2\2/") + buf.write("\66\5\16\b\2\60\61\5\20\t\2\61\62\t\2\2\2\62\63\7\6\2") + buf.write("\2\63\64\5\20\t\2\64\66\3\2\2\2\65\"\3\2\2\2\65#\3\2\2") + buf.write("\2\65,\3\2\2\2\65\60\3\2\2\2\66\7\3\2\2\2\67<\5\20\t\2") + buf.write("89\7\22\2\29;\5\20\t\2:8\3\2\2\2;>\3\2\2\2<:\3\2\2\2<") + buf.write("=\3\2\2\2=\t\3\2\2\2><\3\2\2\2?@\7\23\2\2@A\5\20\t\2A") + buf.write("H\5\f\7\2BC\7\24\2\2CD\5\20\t\2DE\5\f\7\2EG\3\2\2\2FB") + buf.write("\3\2\2\2GJ\3\2\2\2HF\3\2\2\2HI\3\2\2\2IM\3\2\2\2JH\3\2") + buf.write("\2\2KL\7\25\2\2LN\5\f\7\2MK\3\2\2\2MN\3\2\2\2Nb\3\2\2") + buf.write("\2OP\7\26\2\2PQ\5\20\t\2QR\5\f\7\2Rb\3\2\2\2ST\7\27\2") + buf.write("\2TU\5\20\t\2UV\5\f\7\2Vb\3\2\2\2WX\7\30\2\2XY\5\16\b") + buf.write("\2YZ\7\31\2\2Z]\5\16\b\2[\\\7\32\2\2\\^\5\16\b\2][\3\2") + buf.write("\2\2]^\3\2\2\2^_\3\2\2\2_`\5\f\7\2`b\3\2\2\2a?\3\2\2\2") + buf.write("aO\3\2\2\2aS\3\2\2\2aW\3\2\2\2b\13\3\2\2\2cd\7\33\2\2") + buf.write("df\7\34\2\2eg\5\4\3\2fe\3\2\2\2gh\3\2\2\2hf\3\2\2\2hi") + buf.write("\3\2\2\2ij\3\2\2\2jk\7\35\2\2k\r\3\2\2\2lm\5\20\t\2mn") + buf.write("\7\22\2\2np\3\2\2\2ol\3\2\2\2ps\3\2\2\2qo\3\2\2\2qr\3") + buf.write("\2\2\2rt\3\2\2\2sq\3\2\2\2tu\5\20\t\2u\17\3\2\2\2vw\b") + buf.write("\t\1\2w\u0081\5\22\n\2xy\7\36\2\2yz\5\16\b\2z{\7\37\2") + buf.write("\2{\u0081\3\2\2\2|}\t\3\2\2}\u0081\5\20\t\21~\177\7,\2") + buf.write("\2\177\u0081\5\20\t\6\u0080v\3\2\2\2\u0080x\3\2\2\2\u0080") + buf.write("|\3\2\2\2\u0080~\3\2\2\2\u0081\u00b8\3\2\2\2\u0082\u0083") + buf.write("\f\22\2\2\u0083\u0084\7\7\2\2\u0084\u00b7\5\20\t\22\u0085") + buf.write("\u0086\f\20\2\2\u0086\u0087\t\4\2\2\u0087\u00b7\5\20\t") + buf.write("\21\u0088\u0089\f\17\2\2\u0089\u008a\t\5\2\2\u008a\u00b7") + buf.write("\5\20\t\20\u008b\u008c\f\16\2\2\u008c\u008d\t\6\2\2\u008d") + buf.write("\u00b7\5\20\t\17\u008e\u008f\f\r\2\2\u008f\u0090\7\17") + buf.write("\2\2\u0090\u00b7\5\20\t\16\u0091\u0092\f\f\2\2\u0092\u0093") + buf.write("\7\20\2\2\u0093\u00b7\5\20\t\r\u0094\u0095\f\13\2\2\u0095") + buf.write("\u0096\7\21\2\2\u0096\u00b7\5\20\t\f\u0097\u0098\f\n\2") + buf.write("\2\u0098\u0099\7$\2\2\u0099\u00b7\5\20\t\13\u009a\u009b") + buf.write("\f\t\2\2\u009b\u009c\7%\2\2\u009c\u00b7\5\20\t\n\u009d") + buf.write("\u009e\f\7\2\2\u009e\u009f\t\7\2\2\u009f\u00b7\5\20\t") + buf.write("\7\u00a0\u00a1\f\5\2\2\u00a1\u00a2\7-\2\2\u00a2\u00b7") + buf.write("\5\20\t\5\u00a3\u00a4\f\4\2\2\u00a4\u00a5\7.\2\2\u00a5") + buf.write("\u00b7\5\20\t\4\u00a6\u00a7\f\3\2\2\u00a7\u00a8\7/\2\2") + buf.write("\u00a8\u00a9\5\20\t\2\u00a9\u00aa\7\60\2\2\u00aa\u00ab") + buf.write("\5\20\t\3\u00ab\u00b7\3\2\2\2\u00ac\u00ad\f\24\2\2\u00ad") + buf.write("\u00ae\7 \2\2\u00ae\u00af\5\20\t\2\u00af\u00b0\7!\2\2") + buf.write("\u00b0\u00b7\3\2\2\2\u00b1\u00b2\f\23\2\2\u00b2\u00b3") + buf.write("\7\"\2\2\u00b3\u00b7\7\66\2\2\u00b4\u00b5\f\b\2\2\u00b5") + buf.write("\u00b7\7%\2\2\u00b6\u0082\3\2\2\2\u00b6\u0085\3\2\2\2") + buf.write("\u00b6\u0088\3\2\2\2\u00b6\u008b\3\2\2\2\u00b6\u008e\3") + buf.write("\2\2\2\u00b6\u0091\3\2\2\2\u00b6\u0094\3\2\2\2\u00b6\u0097") + buf.write("\3\2\2\2\u00b6\u009a\3\2\2\2\u00b6\u009d\3\2\2\2\u00b6") + buf.write("\u00a0\3\2\2\2\u00b6\u00a3\3\2\2\2\u00b6\u00a6\3\2\2\2") + buf.write("\u00b6\u00ac\3\2\2\2\u00b6\u00b1\3\2\2\2\u00b6\u00b4\3") + buf.write("\2\2\2\u00b7\u00ba\3\2\2\2\u00b8\u00b6\3\2\2\2\u00b8\u00b9") + buf.write("\3\2\2\2\u00b9\21\3\2\2\2\u00ba\u00b8\3\2\2\2\u00bb\u00ce") + buf.write("\7\63\2\2\u00bc\u00ce\t\b\2\2\u00bd\u00ce\7\64\2\2\u00be") + buf.write("\u00ce\7\65\2\2\u00bf\u00c5\7 \2\2\u00c0\u00c1\5\20\t") + buf.write("\2\u00c1\u00c2\7\22\2\2\u00c2\u00c4\3\2\2\2\u00c3\u00c0") + buf.write("\3\2\2\2\u00c4\u00c7\3\2\2\2\u00c5\u00c3\3\2\2\2\u00c5") + buf.write("\u00c6\3\2\2\2\u00c6\u00c9\3\2\2\2\u00c7\u00c5\3\2\2\2") + buf.write("\u00c8\u00ca\5\20\t\2\u00c9\u00c8\3\2\2\2\u00c9\u00ca") + buf.write("\3\2\2\2\u00ca\u00cb\3\2\2\2\u00cb\u00ce\7!\2\2\u00cc") + buf.write("\u00ce\7\66\2\2\u00cd\u00bb\3\2\2\2\u00cd\u00bc\3\2\2") + buf.write("\2\u00cd\u00bd\3\2\2\2\u00cd\u00be\3\2\2\2\u00cd\u00bf") + buf.write("\3\2\2\2\u00cd\u00cc\3\2\2\2\u00ce\23\3\2\2\2\24\27 %") + buf.write(",\65", "';'", "'skip'", "'print'", "'='", "'^'", "'*'", "'/'", "'%'", "'+'", "'-'", "'<<'", "'>>'", "'&'", "'$'", "'|'", "','", "'if'", "'elif'", "'else'", - "'while'", "'until'", "'do'", "'{'", "'}'", "'('", - "')'", "'['", "']'", "'.'", "'~'", "'=='", "'!='", - "'<'", "'<='", "'>'", "'>='", "'not'", "'and'", "'or'", - "'?'", "':'", "'true'", "'false'" ] + "'while'", "'until'", "'for'", "'in'", "'step'", "'do'", + "'{'", "'}'", "'('", "')'", "'['", "']'", "'.'", "'~'", + "'..'", "'...'", "'=='", "'!='", "'<'", "'<='", "'>'", + "'>='", "'not'", "'and'", "'or'", "'?'", "':'", "'true'", + "'false'" ] symbolicNames = [ "", "", "", "", "", "", "", "", @@ -122,7 +129,9 @@ class PyxellParser ( Parser ): "", "", "", "", "", "", "", "", "", "", "", "", - "INT", "CHAR", "STRING", "ID", "WS", "ERR" ] + "", "", "", "", + "", "INT", "CHAR", "STRING", "ID", "WS", + "ERR" ] RULE_program = 0 RULE_stmt = 1 @@ -130,13 +139,12 @@ class PyxellParser ( Parser ): RULE_lvalue = 3 RULE_compound_stmt = 4 RULE_block = 5 - RULE_any_expr = 6 + RULE_tuple_expr = 6 RULE_expr = 7 - RULE_tuple_expr = 8 - RULE_atom = 9 + RULE_atom = 8 ruleNames = [ "program", "stmt", "simple_stmt", "lvalue", "compound_stmt", - "block", "any_expr", "expr", "tuple_expr", "atom" ] + "block", "tuple_expr", "expr", "atom" ] EOF = Token.EOF T__0=1 @@ -182,12 +190,17 @@ class PyxellParser ( Parser ): T__40=41 T__41=42 T__42=43 - INT=44 - CHAR=45 - STRING=46 - ID=47 - WS=48 - ERR=49 + T__43=44 + T__44=45 + T__45=46 + T__46=47 + T__47=48 + INT=49 + CHAR=50 + STRING=51 + ID=52 + WS=53 + ERR=54 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -233,17 +246,17 @@ def program(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 23 + self.state = 21 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__26) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__42) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): - self.state = 20 + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__46) | (1 << PyxellParser.T__47) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): + self.state = 18 self.stmt() - self.state = 25 + self.state = 23 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 26 + self.state = 24 self.match(PyxellParser.EOF) except RecognitionException as re: localctx.exception = re @@ -285,19 +298,19 @@ def stmt(self): localctx = PyxellParser.StmtContext(self, self._ctx, self.state) self.enterRule(localctx, 2, self.RULE_stmt) try: - self.state = 32 + self.state = 30 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__24, PyxellParser.T__26, PyxellParser.T__29, PyxellParser.T__36, PyxellParser.T__41, PyxellParser.T__42, PyxellParser.INT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: + if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__27, PyxellParser.T__29, PyxellParser.T__32, PyxellParser.T__41, PyxellParser.T__46, PyxellParser.T__47, PyxellParser.INT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: self.enterOuterAlt(localctx, 1) - self.state = 28 + self.state = 26 self.simple_stmt() - self.state = 29 + self.state = 27 self.match(PyxellParser.T__0) pass - elif token in [PyxellParser.T__16, PyxellParser.T__19, PyxellParser.T__20]: + elif token in [PyxellParser.T__16, PyxellParser.T__19, PyxellParser.T__20, PyxellParser.T__21]: self.enterOuterAlt(localctx, 2) - self.state = 31 + self.state = 29 self.compound_stmt() pass else: @@ -355,8 +368,8 @@ def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Sim super().__init__(parser) self.copyFrom(ctx) - def any_expr(self): - return self.getTypedRuleContext(PyxellParser.Any_exprContext,0) + def tuple_expr(self): + return self.getTypedRuleContext(PyxellParser.Tuple_exprContext,0) def lvalue(self, i:int=None): if i is None: @@ -392,8 +405,8 @@ def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Sim super().__init__(parser) self.copyFrom(ctx) - def any_expr(self): - return self.getTypedRuleContext(PyxellParser.Any_exprContext,0) + def tuple_expr(self): + return self.getTypedRuleContext(PyxellParser.Tuple_exprContext,0) def accept(self, visitor:ParseTreeVisitor): @@ -410,27 +423,27 @@ def simple_stmt(self): self.enterRule(localctx, 4, self.RULE_simple_stmt) self._la = 0 # Token type try: - self.state = 53 + self.state = 51 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,4,self._ctx) if la_ == 1: localctx = PyxellParser.StmtSkipContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 34 + self.state = 32 self.match(PyxellParser.T__1) pass elif la_ == 2: localctx = PyxellParser.StmtPrintContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 35 + self.state = 33 self.match(PyxellParser.T__2) - self.state = 37 + self.state = 35 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__26) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__42) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): - self.state = 36 - self.any_expr() + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__46) | (1 << PyxellParser.T__47) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): + self.state = 34 + self.tuple_expr() pass @@ -438,29 +451,29 @@ def simple_stmt(self): elif la_ == 3: localctx = PyxellParser.StmtAssgContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 44 + self.state = 42 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,3,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 39 + self.state = 37 self.lvalue() - self.state = 40 + self.state = 38 self.match(PyxellParser.T__3) - self.state = 46 + self.state = 44 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,3,self._ctx) - self.state = 47 - self.any_expr() + self.state = 45 + self.tuple_expr() pass elif la_ == 4: localctx = PyxellParser.StmtAssgExprContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 48 + self.state = 46 self.expr(0) - self.state = 49 + self.state = 47 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__4) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__7) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__11) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__14))) != 0)): @@ -468,9 +481,9 @@ def simple_stmt(self): else: self._errHandler.reportMatch(self) self.consume() - self.state = 50 + self.state = 48 self.match(PyxellParser.T__3) - self.state = 51 + self.state = 49 self.expr(0) pass @@ -516,17 +529,17 @@ def lvalue(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 55 + self.state = 53 self.expr(0) - self.state = 60 + self.state = 58 self._errHandler.sync(self) _la = self._input.LA(1) while _la==PyxellParser.T__15: - self.state = 56 + self.state = 54 self.match(PyxellParser.T__15) - self.state = 57 + self.state = 55 self.expr(0) - self.state = 62 + self.state = 60 self._errHandler.sync(self) _la = self._input.LA(1) @@ -595,6 +608,30 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) + class StmtForContext(Compound_stmtContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Compound_stmtContext + super().__init__(parser) + self.step = None # Tuple_exprContext + self.copyFrom(ctx) + + def tuple_expr(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(PyxellParser.Tuple_exprContext) + else: + return self.getTypedRuleContext(PyxellParser.Tuple_exprContext,i) + + def block(self): + return self.getTypedRuleContext(PyxellParser.BlockContext,0) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStmtFor" ): + return visitor.visitStmtFor(self) + else: + return visitor.visitChildren(self) + + class StmtIfContext(Compound_stmtContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Compound_stmtContext @@ -628,39 +665,39 @@ def compound_stmt(self): self.enterRule(localctx, 8, self.RULE_compound_stmt) self._la = 0 # Token type try: - self.state = 87 + self.state = 95 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__16]: localctx = PyxellParser.StmtIfContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 63 + self.state = 61 self.match(PyxellParser.T__16) - self.state = 64 + self.state = 62 self.expr(0) - self.state = 65 + self.state = 63 self.block() - self.state = 72 + self.state = 70 self._errHandler.sync(self) _la = self._input.LA(1) while _la==PyxellParser.T__17: - self.state = 66 + self.state = 64 self.match(PyxellParser.T__17) - self.state = 67 + self.state = 65 self.expr(0) - self.state = 68 + self.state = 66 self.block() - self.state = 74 + self.state = 72 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 77 + self.state = 75 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__18: - self.state = 75 + self.state = 73 self.match(PyxellParser.T__18) - self.state = 76 + self.state = 74 self.block() @@ -668,21 +705,45 @@ def compound_stmt(self): elif token in [PyxellParser.T__19]: localctx = PyxellParser.StmtWhileContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 79 + self.state = 77 self.match(PyxellParser.T__19) - self.state = 80 + self.state = 78 self.expr(0) - self.state = 81 + self.state = 79 self.block() pass elif token in [PyxellParser.T__20]: localctx = PyxellParser.StmtUntilContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 83 + self.state = 81 self.match(PyxellParser.T__20) - self.state = 84 + self.state = 82 self.expr(0) + self.state = 83 + self.block() + pass + elif token in [PyxellParser.T__21]: + localctx = PyxellParser.StmtForContext(self, localctx) + self.enterOuterAlt(localctx, 4) self.state = 85 + self.match(PyxellParser.T__21) + self.state = 86 + self.tuple_expr() + self.state = 87 + self.match(PyxellParser.T__22) + self.state = 88 + self.tuple_expr() + self.state = 91 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==PyxellParser.T__23: + self.state = 89 + self.match(PyxellParser.T__23) + self.state = 90 + localctx.step = self.tuple_expr() + + + self.state = 93 self.block() pass else: @@ -729,24 +790,24 @@ def block(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 89 - self.match(PyxellParser.T__21) - self.state = 90 - self.match(PyxellParser.T__22) - self.state = 92 + self.state = 97 + self.match(PyxellParser.T__24) + self.state = 98 + self.match(PyxellParser.T__25) + self.state = 100 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 91 + self.state = 99 self.stmt() - self.state = 94 + self.state = 102 self._errHandler.sync(self) _la = self._input.LA(1) - if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__26) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__42) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0)): + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__46) | (1 << PyxellParser.T__47) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0)): break - self.state = 96 - self.match(PyxellParser.T__23) + self.state = 104 + self.match(PyxellParser.T__26) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -756,53 +817,65 @@ def block(self): return localctx - class Any_exprContext(ParserRuleContext): + class Tuple_exprContext(ParserRuleContext): def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) self.parser = parser - def expr(self): - return self.getTypedRuleContext(PyxellParser.ExprContext,0) + def getRuleIndex(self): + return PyxellParser.RULE_tuple_expr - def tuple_expr(self): - return self.getTypedRuleContext(PyxellParser.Tuple_exprContext,0) + + def copyFrom(self, ctx:ParserRuleContext): + super().copyFrom(ctx) - def getRuleIndex(self): - return PyxellParser.RULE_any_expr + + class ExprTupleContext(Tuple_exprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Tuple_exprContext + super().__init__(parser) + self.copyFrom(ctx) + + def expr(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(PyxellParser.ExprContext) + else: + return self.getTypedRuleContext(PyxellParser.ExprContext,i) + def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitAny_expr" ): - return visitor.visitAny_expr(self) + if hasattr( visitor, "visitExprTuple" ): + return visitor.visitExprTuple(self) else: return visitor.visitChildren(self) + def tuple_expr(self): - def any_expr(self): - - localctx = PyxellParser.Any_exprContext(self, self._ctx, self.state) - self.enterRule(localctx, 12, self.RULE_any_expr) + localctx = PyxellParser.Tuple_exprContext(self, self._ctx, self.state) + self.enterRule(localctx, 12, self.RULE_tuple_expr) try: - self.state = 100 + localctx = PyxellParser.ExprTupleContext(self, localctx) + self.enterOuterAlt(localctx, 1) + self.state = 111 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,10,self._ctx) - if la_ == 1: - self.enterOuterAlt(localctx, 1) - self.state = 98 - self.expr(0) - pass - - elif la_ == 2: - self.enterOuterAlt(localctx, 2) - self.state = 99 - self.tuple_expr() - pass - + _alt = self._interp.adaptivePredict(self._input,11,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 106 + self.expr(0) + self.state = 107 + self.match(PyxellParser.T__15) + self.state = 113 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,11,self._ctx) + self.state = 114 + self.expr(0) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -948,8 +1021,8 @@ def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Exp super().__init__(parser) self.copyFrom(ctx) - def any_expr(self): - return self.getTypedRuleContext(PyxellParser.Any_exprContext,0) + def tuple_expr(self): + return self.getTypedRuleContext(PyxellParser.Tuple_exprContext,0) def accept(self, visitor:ParseTreeVisitor): @@ -980,6 +1053,27 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) + class ExprRangeContext(ExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext + super().__init__(parser) + self.dots = None # Token + self.copyFrom(ctx) + + def expr(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(PyxellParser.ExprContext) + else: + return self.getTypedRuleContext(PyxellParser.ExprContext,i) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExprRange" ): + return visitor.visitExprRange(self) + else: + return visitor.visitChildren(self) + + class ExprLogicalOpContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext @@ -1012,88 +1106,88 @@ def expr(self, _p:int=0): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 112 + self.state = 126 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__26, PyxellParser.T__41, PyxellParser.T__42, PyxellParser.INT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: + if token in [PyxellParser.T__29, PyxellParser.T__46, PyxellParser.T__47, PyxellParser.INT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: localctx = PyxellParser.ExprAtomContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 103 + self.state = 117 self.atom() pass - elif token in [PyxellParser.T__24]: + elif token in [PyxellParser.T__27]: localctx = PyxellParser.ExprParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 104 - self.match(PyxellParser.T__24) - self.state = 105 - self.any_expr() - self.state = 106 - self.match(PyxellParser.T__25) + self.state = 118 + self.match(PyxellParser.T__27) + self.state = 119 + self.tuple_expr() + self.state = 120 + self.match(PyxellParser.T__28) pass - elif token in [PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__29]: + elif token in [PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__32]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 108 + self.state = 122 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__29))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__32))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 109 - self.expr(12) + self.state = 123 + self.expr(15) pass - elif token in [PyxellParser.T__36]: + elif token in [PyxellParser.T__41]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 110 - localctx.op = self.match(PyxellParser.T__36) - self.state = 111 + self.state = 124 + localctx.op = self.match(PyxellParser.T__41) + self.state = 125 self.expr(4) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 160 + self.state = 182 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,13,self._ctx) + _alt = self._interp.adaptivePredict(self._input,14,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 158 + self.state = 180 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,12,self._ctx) + la_ = self._interp.adaptivePredict(self._input,13,self._ctx) if la_ == 1: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 114 - if not self.precpred(self._ctx, 13): + self.state = 128 + if not self.precpred(self._ctx, 16): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") - self.state = 115 + raise FailedPredicateException(self, "self.precpred(self._ctx, 16)") + self.state = 129 localctx.op = self.match(PyxellParser.T__4) - self.state = 116 - self.expr(13) + self.state = 130 + self.expr(16) pass elif la_ == 2: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 117 - if not self.precpred(self._ctx, 11): + self.state = 131 + if not self.precpred(self._ctx, 14): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") - self.state = 118 + raise FailedPredicateException(self, "self.precpred(self._ctx, 14)") + self.state = 132 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__7))) != 0)): @@ -1101,18 +1195,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 119 - self.expr(12) + self.state = 133 + self.expr(15) pass elif la_ == 3: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 120 - if not self.precpred(self._ctx, 10): + self.state = 134 + if not self.precpred(self._ctx, 13): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") - self.state = 121 + raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") + self.state = 135 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__8 or _la==PyxellParser.T__9): @@ -1120,18 +1214,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 122 - self.expr(11) + self.state = 136 + self.expr(14) pass elif la_ == 4: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 123 - if not self.precpred(self._ctx, 9): + self.state = 137 + if not self.precpred(self._ctx, 12): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") - self.state = 124 + raise FailedPredicateException(self, "self.precpred(self._ctx, 12)") + self.state = 138 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__10 or _la==PyxellParser.T__11): @@ -1139,228 +1233,187 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 125 - self.expr(10) + self.state = 139 + self.expr(13) pass elif la_ == 5: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 126 - if not self.precpred(self._ctx, 8): + self.state = 140 + if not self.precpred(self._ctx, 11): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") - self.state = 127 + raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") + self.state = 141 localctx.op = self.match(PyxellParser.T__12) - self.state = 128 - self.expr(9) + self.state = 142 + self.expr(12) pass elif la_ == 6: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 129 - if not self.precpred(self._ctx, 7): + self.state = 143 + if not self.precpred(self._ctx, 10): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") - self.state = 130 + raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") + self.state = 144 localctx.op = self.match(PyxellParser.T__13) - self.state = 131 - self.expr(8) + self.state = 145 + self.expr(11) pass elif la_ == 7: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 132 - if not self.precpred(self._ctx, 6): + self.state = 146 + if not self.precpred(self._ctx, 9): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") - self.state = 133 + raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") + self.state = 147 localctx.op = self.match(PyxellParser.T__14) - self.state = 134 - self.expr(7) + self.state = 148 + self.expr(10) pass elif la_ == 8: + localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) + self.state = 149 + if not self.precpred(self._ctx, 8): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") + self.state = 150 + localctx.dots = self.match(PyxellParser.T__33) + self.state = 151 + self.expr(9) + pass + + elif la_ == 9: + localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) + self.state = 152 + if not self.precpred(self._ctx, 7): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") + self.state = 153 + localctx.dots = self.match(PyxellParser.T__34) + self.state = 154 + self.expr(8) + pass + + elif la_ == 10: localctx = PyxellParser.ExprCmpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 135 + self.state = 155 if not self.precpred(self._ctx, 5): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") - self.state = 136 + self.state = 156 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__30) | (1 << PyxellParser.T__31) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__35))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__35) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__37) | (1 << PyxellParser.T__38) | (1 << PyxellParser.T__39) | (1 << PyxellParser.T__40))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 137 + self.state = 157 self.expr(5) pass - elif la_ == 9: + elif la_ == 11: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 138 + self.state = 158 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 139 - localctx.op = self.match(PyxellParser.T__37) - self.state = 140 + self.state = 159 + localctx.op = self.match(PyxellParser.T__42) + self.state = 160 self.expr(3) pass - elif la_ == 10: + elif la_ == 12: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 141 + self.state = 161 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 142 - localctx.op = self.match(PyxellParser.T__38) - self.state = 143 + self.state = 162 + localctx.op = self.match(PyxellParser.T__43) + self.state = 163 self.expr(2) pass - elif la_ == 11: + elif la_ == 13: localctx = PyxellParser.ExprCondContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 144 + self.state = 164 if not self.precpred(self._ctx, 1): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") - self.state = 145 - self.match(PyxellParser.T__39) - self.state = 146 + self.state = 165 + self.match(PyxellParser.T__44) + self.state = 166 self.expr(0) - self.state = 147 - self.match(PyxellParser.T__40) - self.state = 148 + self.state = 167 + self.match(PyxellParser.T__45) + self.state = 168 self.expr(1) pass - elif la_ == 12: + elif la_ == 14: localctx = PyxellParser.ExprIndexContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 150 - if not self.precpred(self._ctx, 15): + self.state = 170 + if not self.precpred(self._ctx, 18): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 15)") - self.state = 151 - self.match(PyxellParser.T__26) - self.state = 152 + raise FailedPredicateException(self, "self.precpred(self._ctx, 18)") + self.state = 171 + self.match(PyxellParser.T__29) + self.state = 172 self.expr(0) - self.state = 153 - self.match(PyxellParser.T__27) + self.state = 173 + self.match(PyxellParser.T__30) pass - elif la_ == 13: + elif la_ == 15: localctx = PyxellParser.ExprAttrContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 155 - if not self.precpred(self._ctx, 14): + self.state = 175 + if not self.precpred(self._ctx, 17): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 14)") - self.state = 156 - self.match(PyxellParser.T__28) - self.state = 157 + raise FailedPredicateException(self, "self.precpred(self._ctx, 17)") + self.state = 176 + self.match(PyxellParser.T__31) + self.state = 177 self.match(PyxellParser.ID) pass - - self.state = 162 - self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,13,self._ctx) - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.unrollRecursionContexts(_parentctx) - return localctx - - - class Tuple_exprContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - - def getRuleIndex(self): - return PyxellParser.RULE_tuple_expr - - - def copyFrom(self, ctx:ParserRuleContext): - super().copyFrom(ctx) - - - - class ExprTupleContext(Tuple_exprContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Tuple_exprContext - super().__init__(parser) - self.copyFrom(ctx) - - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(PyxellParser.ExprContext) - else: - return self.getTypedRuleContext(PyxellParser.ExprContext,i) - - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExprTuple" ): - return visitor.visitExprTuple(self) - else: - return visitor.visitChildren(self) - - - - def tuple_expr(self): - - localctx = PyxellParser.Tuple_exprContext(self, self._ctx, self.state) - self.enterRule(localctx, 16, self.RULE_tuple_expr) - self._la = 0 # Token type - try: - localctx = PyxellParser.ExprTupleContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 166 - self._errHandler.sync(self) - _alt = 1 - while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: - if _alt == 1: - self.state = 163 - self.expr(0) - self.state = 164 - self.match(PyxellParser.T__15) + elif la_ == 16: + localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) + self.state = 178 + if not self.precpred(self._ctx, 6): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") + self.state = 179 + localctx.dots = self.match(PyxellParser.T__34) + pass - else: - raise NoViableAltException(self) - self.state = 168 + + self.state = 184 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,14,self._ctx) - self.state = 171 - self._errHandler.sync(self) - _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__26) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__42) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): - self.state = 170 - self.expr(0) - - except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) self._errHandler.recover(self, re) finally: - self.exitRule() + self.unrollRecursionContexts(_parentctx) return localctx @@ -1482,24 +1535,24 @@ def accept(self, visitor:ParseTreeVisitor): def atom(self): localctx = PyxellParser.AtomContext(self, self._ctx, self.state) - self.enterRule(localctx, 18, self.RULE_atom) + self.enterRule(localctx, 16, self.RULE_atom) self._la = 0 # Token type try: - self.state = 191 + self.state = 203 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: localctx = PyxellParser.AtomIntContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 173 + self.state = 185 self.match(PyxellParser.INT) pass - elif token in [PyxellParser.T__41, PyxellParser.T__42]: + elif token in [PyxellParser.T__46, PyxellParser.T__47]: localctx = PyxellParser.AtomBoolContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 174 + self.state = 186 _la = self._input.LA(1) - if not(_la==PyxellParser.T__41 or _la==PyxellParser.T__42): + if not(_la==PyxellParser.T__46 or _la==PyxellParser.T__47): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -1508,48 +1561,48 @@ def atom(self): elif token in [PyxellParser.CHAR]: localctx = PyxellParser.AtomCharContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 175 + self.state = 187 self.match(PyxellParser.CHAR) pass elif token in [PyxellParser.STRING]: localctx = PyxellParser.AtomStringContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 176 + self.state = 188 self.match(PyxellParser.STRING) pass - elif token in [PyxellParser.T__26]: + elif token in [PyxellParser.T__29]: localctx = PyxellParser.AtomArrayContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 177 - self.match(PyxellParser.T__26) - self.state = 183 + self.state = 189 + self.match(PyxellParser.T__29) + self.state = 195 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,16,self._ctx) + _alt = self._interp.adaptivePredict(self._input,15,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 178 + self.state = 190 self.expr(0) - self.state = 179 + self.state = 191 self.match(PyxellParser.T__15) - self.state = 185 + self.state = 197 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,16,self._ctx) + _alt = self._interp.adaptivePredict(self._input,15,self._ctx) - self.state = 187 + self.state = 199 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__26) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__42) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): - self.state = 186 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__46) | (1 << PyxellParser.T__47) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): + self.state = 198 self.expr(0) - self.state = 189 - self.match(PyxellParser.T__27) + self.state = 201 + self.match(PyxellParser.T__30) pass elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) self.enterOuterAlt(localctx, 6) - self.state = 190 + self.state = 202 self.match(PyxellParser.ID) pass else: @@ -1577,55 +1630,67 @@ def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): def expr_sempred(self, localctx:ExprContext, predIndex:int): if predIndex == 0: - return self.precpred(self._ctx, 13) + return self.precpred(self._ctx, 16) if predIndex == 1: - return self.precpred(self._ctx, 11) + return self.precpred(self._ctx, 14) if predIndex == 2: - return self.precpred(self._ctx, 10) + return self.precpred(self._ctx, 13) if predIndex == 3: - return self.precpred(self._ctx, 9) + return self.precpred(self._ctx, 12) if predIndex == 4: - return self.precpred(self._ctx, 8) + return self.precpred(self._ctx, 11) if predIndex == 5: - return self.precpred(self._ctx, 7) + return self.precpred(self._ctx, 10) if predIndex == 6: - return self.precpred(self._ctx, 6) + return self.precpred(self._ctx, 9) if predIndex == 7: - return self.precpred(self._ctx, 5) + return self.precpred(self._ctx, 8) if predIndex == 8: - return self.precpred(self._ctx, 3) + return self.precpred(self._ctx, 7) if predIndex == 9: - return self.precpred(self._ctx, 2) + return self.precpred(self._ctx, 5) if predIndex == 10: - return self.precpred(self._ctx, 1) + return self.precpred(self._ctx, 3) if predIndex == 11: - return self.precpred(self._ctx, 15) + return self.precpred(self._ctx, 2) if predIndex == 12: - return self.precpred(self._ctx, 14) + return self.precpred(self._ctx, 1) + + + if predIndex == 13: + return self.precpred(self._ctx, 18) + + + if predIndex == 14: + return self.precpred(self._ctx, 17) + + + if predIndex == 15: + return self.precpred(self._ctx, 6) diff --git a/src/antlr/PyxellVisitor.py b/src/antlr/PyxellVisitor.py index 670c32b8..9b2c1cc1 100644 --- a/src/antlr/PyxellVisitor.py +++ b/src/antlr/PyxellVisitor.py @@ -59,13 +59,18 @@ def visitStmtUntil(self, ctx:PyxellParser.StmtUntilContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#StmtFor. + def visitStmtFor(self, ctx:PyxellParser.StmtForContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#block. def visitBlock(self, ctx:PyxellParser.BlockContext): return self.visitChildren(ctx) - # Visit a parse tree produced by PyxellParser#any_expr. - def visitAny_expr(self, ctx:PyxellParser.Any_exprContext): + # Visit a parse tree produced by PyxellParser#ExprTuple. + def visitExprTuple(self, ctx:PyxellParser.ExprTupleContext): return self.visitChildren(ctx) @@ -109,13 +114,13 @@ def visitExprBinaryOp(self, ctx:PyxellParser.ExprBinaryOpContext): return self.visitChildren(ctx) - # Visit a parse tree produced by PyxellParser#ExprLogicalOp. - def visitExprLogicalOp(self, ctx:PyxellParser.ExprLogicalOpContext): + # Visit a parse tree produced by PyxellParser#ExprRange. + def visitExprRange(self, ctx:PyxellParser.ExprRangeContext): return self.visitChildren(ctx) - # Visit a parse tree produced by PyxellParser#ExprTuple. - def visitExprTuple(self, ctx:PyxellParser.ExprTupleContext): + # Visit a parse tree produced by PyxellParser#ExprLogicalOp. + def visitExprLogicalOp(self, ctx:PyxellParser.ExprLogicalOpContext): return self.visitChildren(ctx) diff --git a/src/compiler.py b/src/compiler.py index 07dc2c19..3ab70fec 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -172,6 +172,19 @@ def malloc(self, type, n=1): ptr = self.builder.call(self.builtins['malloc'], [size]) return self.builder.bitcast(ptr, tPtr(type)) + def tuple(self, values): + if len(values) == 1: + return values[0] + + type = tTuple([value.type for value in values]) + tuple = self.malloc(type) + + for i, value in enumerate(values): + ptr = self.builder.gep(tuple, [vInt(0), vIndex(i)]) + self.builder.store(value, ptr) + + return self.builder.load(tuple) + ### Program ### @@ -187,7 +200,7 @@ def visitProgram(self, ctx): ### Statements ### def visitStmtPrint(self, ctx): - expr = ctx.any_expr() + expr = ctx.tuple_expr() if expr: value = self.visit(expr) self.print(expr, value) @@ -195,7 +208,7 @@ def visitStmtPrint(self, ctx): self.builder.call(self.builtins['putchar'], [vChar('\n')]) def visitStmtAssg(self, ctx): - value = self.visit(ctx.any_expr()) + value = self.visit(ctx.tuple_expr()) for lvalue in ctx.lvalue(): exprs = lvalue.expr() @@ -288,11 +301,117 @@ def visitStmtUntil(self, ctx): self.builder.function.blocks.append(bbend) self.builder.position_at_end(bbend) + def visitStmtFor(self, ctx): + exprs = ctx.tuple_expr() + vars = exprs[0].expr() + iterables = exprs[1].expr() + + types = [] + steps = [] + indices = [] + conditions = [] + getters = [] + + def prepare(iterable, step): # must be a function so that lambdas work properly + desc = self.builder.icmp_signed('<', step, vInt(0)) + + if isinstance(iterable, PyxellParser.ExprRangeContext): + values = [self.visit(expr) for expr in iterable.expr()] + type = values[0].type + types.append(type) + if type not in (tInt, tChar): + self.throw(iterable, err.UnknownType()) + if len(values) > 1: + values[1] = self.cast(iterable, values[1], type) + if type != tInt: + step = self.builder.trunc(step, type) + index = self.builder.alloca(type) + start = values[0] + if len(values) == 1: + cond = lambda v: vTrue + elif iterable.dots.text == '..': + cond = lambda v: self.builder.select(desc, self.builder.icmp_signed('>=', v, values[1]), self.builder.icmp_signed('<=', v, values[1])) + elif iterable.dots.text == '...': + cond = lambda v: self.builder.select(desc, self.builder.icmp_signed('>', v, values[1]), self.builder.icmp_signed('<', v, values[1])) + getter = lambda v: v + else: + value = self.visit(iterable) + if value.type.isString(): + types.append(tChar) + elif value.type.isArray(): + types.append(value.type.subtype) + else: + self.throw(ctx, err.NotIterable(value.type)) + index = self.builder.alloca(tInt) + array = self.builder.extract_value(value, [0]) + length = self.builder.extract_value(value, [1]) + end1 = self.builder.sub(length, vInt(1)) + end2 = vInt(0) + start = self.builder.select(desc, end1, end2) + cond = lambda v: self.builder.select(desc, self.builder.icmp_signed('>=', v, end2), self.builder.icmp_signed('<=', v, end1)) + getter = lambda v: self.builder.load(self.builder.gep(array, [v])) + + self.builder.store(start, index) + steps.append(step) + indices.append(index) + conditions.append(cond) + getters.append(getter) + + _steps = [vInt(1)] + if len(exprs) > 2: + _steps = [self.visit(expr) for expr in exprs[2].expr()] + if len(_steps) == 1: + _steps *= len(iterables) + if len(exprs) > 2: + t1 = tTuple([step.type for step in _steps]) + t2 = tTuple([tInt] * len(iterables)) + if t1 != t2: + self.throw(ctx, err.IllegalAssignment(t1, t2)) + + for iterable, step in zip(iterables, _steps): + prepare(iterable, step) + + label_start = self.builder.append_basic_block() + self.builder.branch(label_start) + self.builder.position_at_end(label_start) + label_end = ll.Block(self.builder.function) + + for index, cond in zip(indices, conditions): + label = ll.Block(self.builder.function) + self.builder.cbranch(cond(self.builder.load(index)), label, label_end) + self.builder.function.blocks.append(label) + self.builder.position_at_end(label) + + with self.local(): + if len(vars) == 1 and len(types) > 1: + tuple = self.tuple([getters[i](self.builder.load(index)) for i, index in enumerate(indices)]) + self.assign(exprs[0], vars[0], tuple) + elif len(vars) > 1 and len(types) == 1: + for i, var in enumerate(vars): + tuple = getters[0](self.builder.load(indices[0])) + self.assign(exprs[0], var, self.builder.extract_value(tuple, [i])) + elif len(vars) == len(types): + for var, index, getter in zip(vars, indices, getters): + self.assign(exprs[0], var, getter(self.builder.load(index))) + else: + self.throw(exprs[0], err.CannotUnpack(tTuple(types), len(vars))) + + self.visit(ctx.block()) + + for index, step, type in zip(indices, steps, types): + value = self.builder.add(self.builder.load(index), step) + self.builder.store(value, index) + + self.builder.branch(label_start) + + self.builder.function.blocks.append(label_end) + self.builder.position_at_end(label_end) + ### Expressions ### def visitExprParentheses(self, ctx): - return self.visit(ctx.any_expr()) + return self.visit(ctx.tuple_expr()) def visitExprIndex(self, ctx): return self.builder.load(self.index(ctx, *ctx.expr())) @@ -325,6 +444,9 @@ def visitExprUnaryOp(self, ctx): def visitExprBinaryOp(self, ctx): return self.binaryop(ctx, ctx.op.text, self.visit(ctx.expr(0)), self.visit(ctx.expr(1))) + def visitExprRange(self, ctx): + self.throw(ctx, err.UnknownType()) + def visitExprCmp(self, ctx): exprs = [] ops = [] @@ -410,15 +532,7 @@ def visitExprCond(self, ctx): def visitExprTuple(self, ctx): exprs = ctx.expr() values = [self.visit(expr) for expr in exprs] - - type = tTuple(value.type for value in values) - tuple = self.malloc(type) - - for i, value in enumerate(values): - ptr = self.builder.gep(tuple, [vInt(0), vIndex(i)]) - self.builder.store(value, ptr) - - return self.builder.load(tuple) + return self.tuple(values) ### Atoms ### diff --git a/src/errors.py b/src/errors.py index b03122d6..5dafd799 100644 --- a/src/errors.py +++ b/src/errors.py @@ -19,6 +19,7 @@ class PyxellError(Exception): NoUnaryOperator = lambda op, t: f"No unary operator `{op}` defined for `{t.show()}`" NotComparable = lambda t1, t2: f"Cannot compare `{t1.show()}` with `{t2.show()}`" NotIndexable = lambda t: f"Type `{t.show()}` is not indexable" + NotIterable = lambda t: f"Type `{t.show()}` is not iterable" NotLvalue = lambda: f"Expression cannot be assigned to" NotPrintable = lambda t: f"Variable of type `{t.show()}` cannot be printed" UndeclaredIdentifier = lambda id: f"Undeclared identifier `{id}`" diff --git a/src/types.py b/src/types.py index 1a58b116..664676e7 100644 --- a/src/types.py +++ b/src/types.py @@ -44,6 +44,8 @@ def isArray(type): def tTuple(elements): + if len(elements) == 1: + return elements[0] return CustomStructType(elements, 'tuple') def isTuple(type): diff --git a/test/bad/loops/for14.err b/test/bad/loops/for14.err index 1ef8cc1d..5b32dcd9 100644 --- a/test/bad/loops/for14.err +++ b/test/bad/loops/for14.err @@ -1 +1 @@ -Cannot unpack value of type `Int*Int` into 3 values. \ No newline at end of file +Illegal assignment from `Int*Int` to `Int*Int*Int`. \ No newline at end of file diff --git a/test/bad/loops/for16.err b/test/bad/loops/for16.err new file mode 100644 index 00000000..560724bc --- /dev/null +++ b/test/bad/loops/for16.err @@ -0,0 +1 @@ +Undeclared identifier `x`. \ No newline at end of file diff --git a/test/bad/loops/for16.px b/test/bad/loops/for16.px new file mode 100644 index 00000000..26f226fd --- /dev/null +++ b/test/bad/loops/for16.px @@ -0,0 +1,4 @@ + +for x in [1] do + skip +print x diff --git a/test/good/arrays/for01.px b/test/good/arrays/for01.px index aee97a34..c209311a 100644 --- a/test/good/arrays/for01.px +++ b/test/good/arrays/for01.px @@ -1,6 +1,6 @@ a = [1, 3, 6, 7, 9] -y = 0 +x = y = 0 for x in a do if x % 2 > 0 do print x diff --git a/test/good/arrays/for03.px b/test/good/arrays/for03.px index 02cd3c6e..1647452c 100644 --- a/test/good/arrays/for03.px +++ b/test/good/arrays/for03.px @@ -1,6 +1,6 @@ +x = 0 for x in [-2, 3, 5] step -1 do skip - for n in [5, 6, 7] * 3 step x do print n diff --git a/test/good/loops/for01.px b/test/good/loops/for01.px index b1f3a1ba..264a57bc 100644 --- a/test/good/loops/for01.px +++ b/test/good/loops/for01.px @@ -1,6 +1,7 @@ for a in 1..0 do print false +i = 0 for i in 3..6 do if i % 4 > 0 do print i diff --git a/test/good/loops/for02.px b/test/good/loops/for02.px index 5a558123..b8faf268 100644 --- a/test/good/loops/for02.px +++ b/test/good/loops/for02.px @@ -1,6 +1,7 @@ n = 4 a = [0, 7, -2, 1] +i = 0 for i in n-1..a[3] step -a[3] do i *= 2 a[i/2] += i - 3 diff --git a/test/good/loops/for03.px b/test/good/loops/for03.px index f0c3e8f9..d850136a 100644 --- a/test/good/loops/for03.px +++ b/test/good/loops/for03.px @@ -1,4 +1,5 @@ +a = 0 for a in 1...2 do print a for b in a*4...0 step -2 do From 144111b5bc677c9130624434ef0d44a247e05410 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Mon, 14 Oct 2019 19:45:46 +0200 Subject: [PATCH 022/100] 'break' and 'continue' --- src/Pyxell.g4 | 1 + src/antlr/Pyxell.interp | 6 +- src/antlr/Pyxell.tokens | 82 +++--- src/antlr/PyxellLexer.interp | 8 +- src/antlr/PyxellLexer.py | 284 +++++++++--------- src/antlr/PyxellLexer.tokens | 82 +++--- src/antlr/PyxellParser.py | 525 ++++++++++++++++++---------------- src/antlr/PyxellVisitor.py | 5 + src/compiler.py | 96 ++++--- src/errors.py | 1 + test/good/loops/break02.px | 1 + test/good/loops/continue02.px | 1 + 12 files changed, 593 insertions(+), 499 deletions(-) diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index a7c69350..55f1419d 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -14,6 +14,7 @@ simple_stmt | 'print' tuple_expr? # StmtPrint | (lvalue '=')* tuple_expr # StmtAssg | expr op=('^' | '*' | '/' | '%' | '+' | '-' | '<<' | '>>' | '&' | '$' | '|') '=' expr # StmtAssgExpr + | s=('break' | 'continue') # StmtLoopControl ; lvalue diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index dcddb556..826cc9d1 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -15,6 +15,8 @@ null '&' '$' '|' +'continue' +'break' ',' 'if' 'elif' @@ -105,6 +107,8 @@ null null null null +null +null INT CHAR STRING @@ -125,4 +129,4 @@ atom atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 56, 208, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 3, 2, 7, 2, 22, 10, 2, 12, 2, 14, 2, 25, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 33, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 38, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 43, 10, 4, 12, 4, 14, 4, 46, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 54, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 59, 10, 5, 12, 5, 14, 5, 62, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 71, 10, 6, 12, 6, 14, 6, 74, 11, 6, 3, 6, 3, 6, 5, 6, 78, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 94, 10, 6, 3, 6, 3, 6, 5, 6, 98, 10, 6, 3, 7, 3, 7, 3, 7, 6, 7, 103, 10, 7, 13, 7, 14, 7, 104, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 7, 8, 112, 10, 8, 12, 8, 14, 8, 115, 11, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 129, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 183, 10, 9, 12, 9, 14, 9, 186, 11, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 196, 10, 10, 12, 10, 14, 10, 199, 11, 10, 3, 10, 5, 10, 202, 10, 10, 3, 10, 3, 10, 5, 10, 206, 10, 10, 3, 10, 2, 3, 16, 11, 2, 4, 6, 8, 10, 12, 14, 16, 18, 2, 9, 3, 2, 7, 17, 4, 2, 11, 12, 35, 35, 3, 2, 8, 10, 3, 2, 11, 12, 3, 2, 13, 14, 3, 2, 38, 43, 3, 2, 49, 50, 2, 240, 2, 23, 3, 2, 2, 2, 4, 32, 3, 2, 2, 2, 6, 53, 3, 2, 2, 2, 8, 55, 3, 2, 2, 2, 10, 97, 3, 2, 2, 2, 12, 99, 3, 2, 2, 2, 14, 113, 3, 2, 2, 2, 16, 128, 3, 2, 2, 2, 18, 205, 3, 2, 2, 2, 20, 22, 5, 4, 3, 2, 21, 20, 3, 2, 2, 2, 22, 25, 3, 2, 2, 2, 23, 21, 3, 2, 2, 2, 23, 24, 3, 2, 2, 2, 24, 26, 3, 2, 2, 2, 25, 23, 3, 2, 2, 2, 26, 27, 7, 2, 2, 3, 27, 3, 3, 2, 2, 2, 28, 29, 5, 6, 4, 2, 29, 30, 7, 3, 2, 2, 30, 33, 3, 2, 2, 2, 31, 33, 5, 10, 6, 2, 32, 28, 3, 2, 2, 2, 32, 31, 3, 2, 2, 2, 33, 5, 3, 2, 2, 2, 34, 54, 7, 4, 2, 2, 35, 37, 7, 5, 2, 2, 36, 38, 5, 14, 8, 2, 37, 36, 3, 2, 2, 2, 37, 38, 3, 2, 2, 2, 38, 54, 3, 2, 2, 2, 39, 40, 5, 8, 5, 2, 40, 41, 7, 6, 2, 2, 41, 43, 3, 2, 2, 2, 42, 39, 3, 2, 2, 2, 43, 46, 3, 2, 2, 2, 44, 42, 3, 2, 2, 2, 44, 45, 3, 2, 2, 2, 45, 47, 3, 2, 2, 2, 46, 44, 3, 2, 2, 2, 47, 54, 5, 14, 8, 2, 48, 49, 5, 16, 9, 2, 49, 50, 9, 2, 2, 2, 50, 51, 7, 6, 2, 2, 51, 52, 5, 16, 9, 2, 52, 54, 3, 2, 2, 2, 53, 34, 3, 2, 2, 2, 53, 35, 3, 2, 2, 2, 53, 44, 3, 2, 2, 2, 53, 48, 3, 2, 2, 2, 54, 7, 3, 2, 2, 2, 55, 60, 5, 16, 9, 2, 56, 57, 7, 18, 2, 2, 57, 59, 5, 16, 9, 2, 58, 56, 3, 2, 2, 2, 59, 62, 3, 2, 2, 2, 60, 58, 3, 2, 2, 2, 60, 61, 3, 2, 2, 2, 61, 9, 3, 2, 2, 2, 62, 60, 3, 2, 2, 2, 63, 64, 7, 19, 2, 2, 64, 65, 5, 16, 9, 2, 65, 72, 5, 12, 7, 2, 66, 67, 7, 20, 2, 2, 67, 68, 5, 16, 9, 2, 68, 69, 5, 12, 7, 2, 69, 71, 3, 2, 2, 2, 70, 66, 3, 2, 2, 2, 71, 74, 3, 2, 2, 2, 72, 70, 3, 2, 2, 2, 72, 73, 3, 2, 2, 2, 73, 77, 3, 2, 2, 2, 74, 72, 3, 2, 2, 2, 75, 76, 7, 21, 2, 2, 76, 78, 5, 12, 7, 2, 77, 75, 3, 2, 2, 2, 77, 78, 3, 2, 2, 2, 78, 98, 3, 2, 2, 2, 79, 80, 7, 22, 2, 2, 80, 81, 5, 16, 9, 2, 81, 82, 5, 12, 7, 2, 82, 98, 3, 2, 2, 2, 83, 84, 7, 23, 2, 2, 84, 85, 5, 16, 9, 2, 85, 86, 5, 12, 7, 2, 86, 98, 3, 2, 2, 2, 87, 88, 7, 24, 2, 2, 88, 89, 5, 14, 8, 2, 89, 90, 7, 25, 2, 2, 90, 93, 5, 14, 8, 2, 91, 92, 7, 26, 2, 2, 92, 94, 5, 14, 8, 2, 93, 91, 3, 2, 2, 2, 93, 94, 3, 2, 2, 2, 94, 95, 3, 2, 2, 2, 95, 96, 5, 12, 7, 2, 96, 98, 3, 2, 2, 2, 97, 63, 3, 2, 2, 2, 97, 79, 3, 2, 2, 2, 97, 83, 3, 2, 2, 2, 97, 87, 3, 2, 2, 2, 98, 11, 3, 2, 2, 2, 99, 100, 7, 27, 2, 2, 100, 102, 7, 28, 2, 2, 101, 103, 5, 4, 3, 2, 102, 101, 3, 2, 2, 2, 103, 104, 3, 2, 2, 2, 104, 102, 3, 2, 2, 2, 104, 105, 3, 2, 2, 2, 105, 106, 3, 2, 2, 2, 106, 107, 7, 29, 2, 2, 107, 13, 3, 2, 2, 2, 108, 109, 5, 16, 9, 2, 109, 110, 7, 18, 2, 2, 110, 112, 3, 2, 2, 2, 111, 108, 3, 2, 2, 2, 112, 115, 3, 2, 2, 2, 113, 111, 3, 2, 2, 2, 113, 114, 3, 2, 2, 2, 114, 116, 3, 2, 2, 2, 115, 113, 3, 2, 2, 2, 116, 117, 5, 16, 9, 2, 117, 15, 3, 2, 2, 2, 118, 119, 8, 9, 1, 2, 119, 129, 5, 18, 10, 2, 120, 121, 7, 30, 2, 2, 121, 122, 5, 14, 8, 2, 122, 123, 7, 31, 2, 2, 123, 129, 3, 2, 2, 2, 124, 125, 9, 3, 2, 2, 125, 129, 5, 16, 9, 17, 126, 127, 7, 44, 2, 2, 127, 129, 5, 16, 9, 6, 128, 118, 3, 2, 2, 2, 128, 120, 3, 2, 2, 2, 128, 124, 3, 2, 2, 2, 128, 126, 3, 2, 2, 2, 129, 184, 3, 2, 2, 2, 130, 131, 12, 18, 2, 2, 131, 132, 7, 7, 2, 2, 132, 183, 5, 16, 9, 18, 133, 134, 12, 16, 2, 2, 134, 135, 9, 4, 2, 2, 135, 183, 5, 16, 9, 17, 136, 137, 12, 15, 2, 2, 137, 138, 9, 5, 2, 2, 138, 183, 5, 16, 9, 16, 139, 140, 12, 14, 2, 2, 140, 141, 9, 6, 2, 2, 141, 183, 5, 16, 9, 15, 142, 143, 12, 13, 2, 2, 143, 144, 7, 15, 2, 2, 144, 183, 5, 16, 9, 14, 145, 146, 12, 12, 2, 2, 146, 147, 7, 16, 2, 2, 147, 183, 5, 16, 9, 13, 148, 149, 12, 11, 2, 2, 149, 150, 7, 17, 2, 2, 150, 183, 5, 16, 9, 12, 151, 152, 12, 10, 2, 2, 152, 153, 7, 36, 2, 2, 153, 183, 5, 16, 9, 11, 154, 155, 12, 9, 2, 2, 155, 156, 7, 37, 2, 2, 156, 183, 5, 16, 9, 10, 157, 158, 12, 7, 2, 2, 158, 159, 9, 7, 2, 2, 159, 183, 5, 16, 9, 7, 160, 161, 12, 5, 2, 2, 161, 162, 7, 45, 2, 2, 162, 183, 5, 16, 9, 5, 163, 164, 12, 4, 2, 2, 164, 165, 7, 46, 2, 2, 165, 183, 5, 16, 9, 4, 166, 167, 12, 3, 2, 2, 167, 168, 7, 47, 2, 2, 168, 169, 5, 16, 9, 2, 169, 170, 7, 48, 2, 2, 170, 171, 5, 16, 9, 3, 171, 183, 3, 2, 2, 2, 172, 173, 12, 20, 2, 2, 173, 174, 7, 32, 2, 2, 174, 175, 5, 16, 9, 2, 175, 176, 7, 33, 2, 2, 176, 183, 3, 2, 2, 2, 177, 178, 12, 19, 2, 2, 178, 179, 7, 34, 2, 2, 179, 183, 7, 54, 2, 2, 180, 181, 12, 8, 2, 2, 181, 183, 7, 37, 2, 2, 182, 130, 3, 2, 2, 2, 182, 133, 3, 2, 2, 2, 182, 136, 3, 2, 2, 2, 182, 139, 3, 2, 2, 2, 182, 142, 3, 2, 2, 2, 182, 145, 3, 2, 2, 2, 182, 148, 3, 2, 2, 2, 182, 151, 3, 2, 2, 2, 182, 154, 3, 2, 2, 2, 182, 157, 3, 2, 2, 2, 182, 160, 3, 2, 2, 2, 182, 163, 3, 2, 2, 2, 182, 166, 3, 2, 2, 2, 182, 172, 3, 2, 2, 2, 182, 177, 3, 2, 2, 2, 182, 180, 3, 2, 2, 2, 183, 186, 3, 2, 2, 2, 184, 182, 3, 2, 2, 2, 184, 185, 3, 2, 2, 2, 185, 17, 3, 2, 2, 2, 186, 184, 3, 2, 2, 2, 187, 206, 7, 51, 2, 2, 188, 206, 9, 8, 2, 2, 189, 206, 7, 52, 2, 2, 190, 206, 7, 53, 2, 2, 191, 197, 7, 32, 2, 2, 192, 193, 5, 16, 9, 2, 193, 194, 7, 18, 2, 2, 194, 196, 3, 2, 2, 2, 195, 192, 3, 2, 2, 2, 196, 199, 3, 2, 2, 2, 197, 195, 3, 2, 2, 2, 197, 198, 3, 2, 2, 2, 198, 201, 3, 2, 2, 2, 199, 197, 3, 2, 2, 2, 200, 202, 5, 16, 9, 2, 201, 200, 3, 2, 2, 2, 201, 202, 3, 2, 2, 2, 202, 203, 3, 2, 2, 2, 203, 206, 7, 33, 2, 2, 204, 206, 7, 54, 2, 2, 205, 187, 3, 2, 2, 2, 205, 188, 3, 2, 2, 2, 205, 189, 3, 2, 2, 2, 205, 190, 3, 2, 2, 2, 205, 191, 3, 2, 2, 2, 205, 204, 3, 2, 2, 2, 206, 19, 3, 2, 2, 2, 20, 23, 32, 37, 44, 53, 60, 72, 77, 93, 97, 104, 113, 128, 182, 184, 197, 201, 205] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 58, 209, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 3, 2, 7, 2, 22, 10, 2, 12, 2, 14, 2, 25, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 33, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 38, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 43, 10, 4, 12, 4, 14, 4, 46, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 55, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 60, 10, 5, 12, 5, 14, 5, 63, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 72, 10, 6, 12, 6, 14, 6, 75, 11, 6, 3, 6, 3, 6, 5, 6, 79, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 95, 10, 6, 3, 6, 3, 6, 5, 6, 99, 10, 6, 3, 7, 3, 7, 3, 7, 6, 7, 104, 10, 7, 13, 7, 14, 7, 105, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 7, 8, 113, 10, 8, 12, 8, 14, 8, 116, 11, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 130, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 184, 10, 9, 12, 9, 14, 9, 187, 11, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 197, 10, 10, 12, 10, 14, 10, 200, 11, 10, 3, 10, 5, 10, 203, 10, 10, 3, 10, 3, 10, 5, 10, 207, 10, 10, 3, 10, 2, 3, 16, 11, 2, 4, 6, 8, 10, 12, 14, 16, 18, 2, 10, 3, 2, 7, 17, 3, 2, 18, 19, 4, 2, 11, 12, 37, 37, 3, 2, 8, 10, 3, 2, 11, 12, 3, 2, 13, 14, 3, 2, 40, 45, 3, 2, 51, 52, 2, 242, 2, 23, 3, 2, 2, 2, 4, 32, 3, 2, 2, 2, 6, 54, 3, 2, 2, 2, 8, 56, 3, 2, 2, 2, 10, 98, 3, 2, 2, 2, 12, 100, 3, 2, 2, 2, 14, 114, 3, 2, 2, 2, 16, 129, 3, 2, 2, 2, 18, 206, 3, 2, 2, 2, 20, 22, 5, 4, 3, 2, 21, 20, 3, 2, 2, 2, 22, 25, 3, 2, 2, 2, 23, 21, 3, 2, 2, 2, 23, 24, 3, 2, 2, 2, 24, 26, 3, 2, 2, 2, 25, 23, 3, 2, 2, 2, 26, 27, 7, 2, 2, 3, 27, 3, 3, 2, 2, 2, 28, 29, 5, 6, 4, 2, 29, 30, 7, 3, 2, 2, 30, 33, 3, 2, 2, 2, 31, 33, 5, 10, 6, 2, 32, 28, 3, 2, 2, 2, 32, 31, 3, 2, 2, 2, 33, 5, 3, 2, 2, 2, 34, 55, 7, 4, 2, 2, 35, 37, 7, 5, 2, 2, 36, 38, 5, 14, 8, 2, 37, 36, 3, 2, 2, 2, 37, 38, 3, 2, 2, 2, 38, 55, 3, 2, 2, 2, 39, 40, 5, 8, 5, 2, 40, 41, 7, 6, 2, 2, 41, 43, 3, 2, 2, 2, 42, 39, 3, 2, 2, 2, 43, 46, 3, 2, 2, 2, 44, 42, 3, 2, 2, 2, 44, 45, 3, 2, 2, 2, 45, 47, 3, 2, 2, 2, 46, 44, 3, 2, 2, 2, 47, 55, 5, 14, 8, 2, 48, 49, 5, 16, 9, 2, 49, 50, 9, 2, 2, 2, 50, 51, 7, 6, 2, 2, 51, 52, 5, 16, 9, 2, 52, 55, 3, 2, 2, 2, 53, 55, 9, 3, 2, 2, 54, 34, 3, 2, 2, 2, 54, 35, 3, 2, 2, 2, 54, 44, 3, 2, 2, 2, 54, 48, 3, 2, 2, 2, 54, 53, 3, 2, 2, 2, 55, 7, 3, 2, 2, 2, 56, 61, 5, 16, 9, 2, 57, 58, 7, 20, 2, 2, 58, 60, 5, 16, 9, 2, 59, 57, 3, 2, 2, 2, 60, 63, 3, 2, 2, 2, 61, 59, 3, 2, 2, 2, 61, 62, 3, 2, 2, 2, 62, 9, 3, 2, 2, 2, 63, 61, 3, 2, 2, 2, 64, 65, 7, 21, 2, 2, 65, 66, 5, 16, 9, 2, 66, 73, 5, 12, 7, 2, 67, 68, 7, 22, 2, 2, 68, 69, 5, 16, 9, 2, 69, 70, 5, 12, 7, 2, 70, 72, 3, 2, 2, 2, 71, 67, 3, 2, 2, 2, 72, 75, 3, 2, 2, 2, 73, 71, 3, 2, 2, 2, 73, 74, 3, 2, 2, 2, 74, 78, 3, 2, 2, 2, 75, 73, 3, 2, 2, 2, 76, 77, 7, 23, 2, 2, 77, 79, 5, 12, 7, 2, 78, 76, 3, 2, 2, 2, 78, 79, 3, 2, 2, 2, 79, 99, 3, 2, 2, 2, 80, 81, 7, 24, 2, 2, 81, 82, 5, 16, 9, 2, 82, 83, 5, 12, 7, 2, 83, 99, 3, 2, 2, 2, 84, 85, 7, 25, 2, 2, 85, 86, 5, 16, 9, 2, 86, 87, 5, 12, 7, 2, 87, 99, 3, 2, 2, 2, 88, 89, 7, 26, 2, 2, 89, 90, 5, 14, 8, 2, 90, 91, 7, 27, 2, 2, 91, 94, 5, 14, 8, 2, 92, 93, 7, 28, 2, 2, 93, 95, 5, 14, 8, 2, 94, 92, 3, 2, 2, 2, 94, 95, 3, 2, 2, 2, 95, 96, 3, 2, 2, 2, 96, 97, 5, 12, 7, 2, 97, 99, 3, 2, 2, 2, 98, 64, 3, 2, 2, 2, 98, 80, 3, 2, 2, 2, 98, 84, 3, 2, 2, 2, 98, 88, 3, 2, 2, 2, 99, 11, 3, 2, 2, 2, 100, 101, 7, 29, 2, 2, 101, 103, 7, 30, 2, 2, 102, 104, 5, 4, 3, 2, 103, 102, 3, 2, 2, 2, 104, 105, 3, 2, 2, 2, 105, 103, 3, 2, 2, 2, 105, 106, 3, 2, 2, 2, 106, 107, 3, 2, 2, 2, 107, 108, 7, 31, 2, 2, 108, 13, 3, 2, 2, 2, 109, 110, 5, 16, 9, 2, 110, 111, 7, 20, 2, 2, 111, 113, 3, 2, 2, 2, 112, 109, 3, 2, 2, 2, 113, 116, 3, 2, 2, 2, 114, 112, 3, 2, 2, 2, 114, 115, 3, 2, 2, 2, 115, 117, 3, 2, 2, 2, 116, 114, 3, 2, 2, 2, 117, 118, 5, 16, 9, 2, 118, 15, 3, 2, 2, 2, 119, 120, 8, 9, 1, 2, 120, 130, 5, 18, 10, 2, 121, 122, 7, 32, 2, 2, 122, 123, 5, 14, 8, 2, 123, 124, 7, 33, 2, 2, 124, 130, 3, 2, 2, 2, 125, 126, 9, 4, 2, 2, 126, 130, 5, 16, 9, 17, 127, 128, 7, 46, 2, 2, 128, 130, 5, 16, 9, 6, 129, 119, 3, 2, 2, 2, 129, 121, 3, 2, 2, 2, 129, 125, 3, 2, 2, 2, 129, 127, 3, 2, 2, 2, 130, 185, 3, 2, 2, 2, 131, 132, 12, 18, 2, 2, 132, 133, 7, 7, 2, 2, 133, 184, 5, 16, 9, 18, 134, 135, 12, 16, 2, 2, 135, 136, 9, 5, 2, 2, 136, 184, 5, 16, 9, 17, 137, 138, 12, 15, 2, 2, 138, 139, 9, 6, 2, 2, 139, 184, 5, 16, 9, 16, 140, 141, 12, 14, 2, 2, 141, 142, 9, 7, 2, 2, 142, 184, 5, 16, 9, 15, 143, 144, 12, 13, 2, 2, 144, 145, 7, 15, 2, 2, 145, 184, 5, 16, 9, 14, 146, 147, 12, 12, 2, 2, 147, 148, 7, 16, 2, 2, 148, 184, 5, 16, 9, 13, 149, 150, 12, 11, 2, 2, 150, 151, 7, 17, 2, 2, 151, 184, 5, 16, 9, 12, 152, 153, 12, 10, 2, 2, 153, 154, 7, 38, 2, 2, 154, 184, 5, 16, 9, 11, 155, 156, 12, 9, 2, 2, 156, 157, 7, 39, 2, 2, 157, 184, 5, 16, 9, 10, 158, 159, 12, 7, 2, 2, 159, 160, 9, 8, 2, 2, 160, 184, 5, 16, 9, 7, 161, 162, 12, 5, 2, 2, 162, 163, 7, 47, 2, 2, 163, 184, 5, 16, 9, 5, 164, 165, 12, 4, 2, 2, 165, 166, 7, 48, 2, 2, 166, 184, 5, 16, 9, 4, 167, 168, 12, 3, 2, 2, 168, 169, 7, 49, 2, 2, 169, 170, 5, 16, 9, 2, 170, 171, 7, 50, 2, 2, 171, 172, 5, 16, 9, 3, 172, 184, 3, 2, 2, 2, 173, 174, 12, 20, 2, 2, 174, 175, 7, 34, 2, 2, 175, 176, 5, 16, 9, 2, 176, 177, 7, 35, 2, 2, 177, 184, 3, 2, 2, 2, 178, 179, 12, 19, 2, 2, 179, 180, 7, 36, 2, 2, 180, 184, 7, 56, 2, 2, 181, 182, 12, 8, 2, 2, 182, 184, 7, 39, 2, 2, 183, 131, 3, 2, 2, 2, 183, 134, 3, 2, 2, 2, 183, 137, 3, 2, 2, 2, 183, 140, 3, 2, 2, 2, 183, 143, 3, 2, 2, 2, 183, 146, 3, 2, 2, 2, 183, 149, 3, 2, 2, 2, 183, 152, 3, 2, 2, 2, 183, 155, 3, 2, 2, 2, 183, 158, 3, 2, 2, 2, 183, 161, 3, 2, 2, 2, 183, 164, 3, 2, 2, 2, 183, 167, 3, 2, 2, 2, 183, 173, 3, 2, 2, 2, 183, 178, 3, 2, 2, 2, 183, 181, 3, 2, 2, 2, 184, 187, 3, 2, 2, 2, 185, 183, 3, 2, 2, 2, 185, 186, 3, 2, 2, 2, 186, 17, 3, 2, 2, 2, 187, 185, 3, 2, 2, 2, 188, 207, 7, 53, 2, 2, 189, 207, 9, 9, 2, 2, 190, 207, 7, 54, 2, 2, 191, 207, 7, 55, 2, 2, 192, 198, 7, 34, 2, 2, 193, 194, 5, 16, 9, 2, 194, 195, 7, 20, 2, 2, 195, 197, 3, 2, 2, 2, 196, 193, 3, 2, 2, 2, 197, 200, 3, 2, 2, 2, 198, 196, 3, 2, 2, 2, 198, 199, 3, 2, 2, 2, 199, 202, 3, 2, 2, 2, 200, 198, 3, 2, 2, 2, 201, 203, 5, 16, 9, 2, 202, 201, 3, 2, 2, 2, 202, 203, 3, 2, 2, 2, 203, 204, 3, 2, 2, 2, 204, 207, 7, 35, 2, 2, 205, 207, 7, 56, 2, 2, 206, 188, 3, 2, 2, 2, 206, 189, 3, 2, 2, 2, 206, 190, 3, 2, 2, 2, 206, 191, 3, 2, 2, 2, 206, 192, 3, 2, 2, 2, 206, 205, 3, 2, 2, 2, 207, 19, 3, 2, 2, 2, 20, 23, 32, 37, 44, 54, 61, 73, 78, 94, 98, 105, 114, 129, 183, 185, 198, 202, 206] \ No newline at end of file diff --git a/src/antlr/Pyxell.tokens b/src/antlr/Pyxell.tokens index 7e3283ca..fd632bc1 100644 --- a/src/antlr/Pyxell.tokens +++ b/src/antlr/Pyxell.tokens @@ -46,12 +46,14 @@ T__44=45 T__45=46 T__46=47 T__47=48 -INT=49 -CHAR=50 -STRING=51 -ID=52 -WS=53 -ERR=54 +T__48=49 +T__49=50 +INT=51 +CHAR=52 +STRING=53 +ID=54 +WS=55 +ERR=56 ';'=1 'skip'=2 'print'=3 @@ -67,36 +69,38 @@ ERR=54 '&'=13 '$'=14 '|'=15 -','=16 -'if'=17 -'elif'=18 -'else'=19 -'while'=20 -'until'=21 -'for'=22 -'in'=23 -'step'=24 -'do'=25 -'{'=26 -'}'=27 -'('=28 -')'=29 -'['=30 -']'=31 -'.'=32 -'~'=33 -'..'=34 -'...'=35 -'=='=36 -'!='=37 -'<'=38 -'<='=39 -'>'=40 -'>='=41 -'not'=42 -'and'=43 -'or'=44 -'?'=45 -':'=46 -'true'=47 -'false'=48 +'continue'=16 +'break'=17 +','=18 +'if'=19 +'elif'=20 +'else'=21 +'while'=22 +'until'=23 +'for'=24 +'in'=25 +'step'=26 +'do'=27 +'{'=28 +'}'=29 +'('=30 +')'=31 +'['=32 +']'=33 +'.'=34 +'~'=35 +'..'=36 +'...'=37 +'=='=38 +'!='=39 +'<'=40 +'<='=41 +'>'=42 +'>='=43 +'not'=44 +'and'=45 +'or'=46 +'?'=47 +':'=48 +'true'=49 +'false'=50 diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp index ffc9f4fb..fb4a4d8b 100644 --- a/src/antlr/PyxellLexer.interp +++ b/src/antlr/PyxellLexer.interp @@ -15,6 +15,8 @@ null '&' '$' '|' +'continue' +'break' ',' 'if' 'elif' @@ -105,6 +107,8 @@ null null null null +null +null INT CHAR STRING @@ -161,6 +165,8 @@ T__44 T__45 T__46 T__47 +T__48 +T__49 INT CHAR STRING @@ -179,4 +185,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 56, 315, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 50, 6, 50, 265, 10, 50, 13, 50, 14, 50, 266, 3, 51, 3, 51, 3, 51, 3, 51, 7, 51, 273, 10, 51, 12, 51, 14, 51, 276, 11, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 7, 52, 284, 10, 52, 12, 52, 14, 52, 287, 11, 52, 3, 52, 3, 52, 3, 53, 3, 53, 7, 53, 293, 10, 53, 12, 53, 14, 53, 296, 11, 53, 3, 54, 3, 54, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 5, 56, 305, 10, 56, 3, 57, 6, 57, 308, 10, 57, 13, 57, 14, 57, 309, 3, 57, 3, 57, 3, 58, 3, 58, 2, 2, 59, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 2, 109, 2, 111, 2, 113, 55, 115, 56, 3, 2, 10, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 320, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 3, 117, 3, 2, 2, 2, 5, 119, 3, 2, 2, 2, 7, 124, 3, 2, 2, 2, 9, 130, 3, 2, 2, 2, 11, 132, 3, 2, 2, 2, 13, 134, 3, 2, 2, 2, 15, 136, 3, 2, 2, 2, 17, 138, 3, 2, 2, 2, 19, 140, 3, 2, 2, 2, 21, 142, 3, 2, 2, 2, 23, 144, 3, 2, 2, 2, 25, 147, 3, 2, 2, 2, 27, 150, 3, 2, 2, 2, 29, 152, 3, 2, 2, 2, 31, 154, 3, 2, 2, 2, 33, 156, 3, 2, 2, 2, 35, 158, 3, 2, 2, 2, 37, 161, 3, 2, 2, 2, 39, 166, 3, 2, 2, 2, 41, 171, 3, 2, 2, 2, 43, 177, 3, 2, 2, 2, 45, 183, 3, 2, 2, 2, 47, 187, 3, 2, 2, 2, 49, 190, 3, 2, 2, 2, 51, 195, 3, 2, 2, 2, 53, 198, 3, 2, 2, 2, 55, 200, 3, 2, 2, 2, 57, 202, 3, 2, 2, 2, 59, 204, 3, 2, 2, 2, 61, 206, 3, 2, 2, 2, 63, 208, 3, 2, 2, 2, 65, 210, 3, 2, 2, 2, 67, 212, 3, 2, 2, 2, 69, 214, 3, 2, 2, 2, 71, 217, 3, 2, 2, 2, 73, 221, 3, 2, 2, 2, 75, 224, 3, 2, 2, 2, 77, 227, 3, 2, 2, 2, 79, 229, 3, 2, 2, 2, 81, 232, 3, 2, 2, 2, 83, 234, 3, 2, 2, 2, 85, 237, 3, 2, 2, 2, 87, 241, 3, 2, 2, 2, 89, 245, 3, 2, 2, 2, 91, 248, 3, 2, 2, 2, 93, 250, 3, 2, 2, 2, 95, 252, 3, 2, 2, 2, 97, 257, 3, 2, 2, 2, 99, 264, 3, 2, 2, 2, 101, 268, 3, 2, 2, 2, 103, 279, 3, 2, 2, 2, 105, 290, 3, 2, 2, 2, 107, 297, 3, 2, 2, 2, 109, 299, 3, 2, 2, 2, 111, 304, 3, 2, 2, 2, 113, 307, 3, 2, 2, 2, 115, 313, 3, 2, 2, 2, 117, 118, 7, 61, 2, 2, 118, 4, 3, 2, 2, 2, 119, 120, 7, 117, 2, 2, 120, 121, 7, 109, 2, 2, 121, 122, 7, 107, 2, 2, 122, 123, 7, 114, 2, 2, 123, 6, 3, 2, 2, 2, 124, 125, 7, 114, 2, 2, 125, 126, 7, 116, 2, 2, 126, 127, 7, 107, 2, 2, 127, 128, 7, 112, 2, 2, 128, 129, 7, 118, 2, 2, 129, 8, 3, 2, 2, 2, 130, 131, 7, 63, 2, 2, 131, 10, 3, 2, 2, 2, 132, 133, 7, 96, 2, 2, 133, 12, 3, 2, 2, 2, 134, 135, 7, 44, 2, 2, 135, 14, 3, 2, 2, 2, 136, 137, 7, 49, 2, 2, 137, 16, 3, 2, 2, 2, 138, 139, 7, 39, 2, 2, 139, 18, 3, 2, 2, 2, 140, 141, 7, 45, 2, 2, 141, 20, 3, 2, 2, 2, 142, 143, 7, 47, 2, 2, 143, 22, 3, 2, 2, 2, 144, 145, 7, 62, 2, 2, 145, 146, 7, 62, 2, 2, 146, 24, 3, 2, 2, 2, 147, 148, 7, 64, 2, 2, 148, 149, 7, 64, 2, 2, 149, 26, 3, 2, 2, 2, 150, 151, 7, 40, 2, 2, 151, 28, 3, 2, 2, 2, 152, 153, 7, 38, 2, 2, 153, 30, 3, 2, 2, 2, 154, 155, 7, 126, 2, 2, 155, 32, 3, 2, 2, 2, 156, 157, 7, 46, 2, 2, 157, 34, 3, 2, 2, 2, 158, 159, 7, 107, 2, 2, 159, 160, 7, 104, 2, 2, 160, 36, 3, 2, 2, 2, 161, 162, 7, 103, 2, 2, 162, 163, 7, 110, 2, 2, 163, 164, 7, 107, 2, 2, 164, 165, 7, 104, 2, 2, 165, 38, 3, 2, 2, 2, 166, 167, 7, 103, 2, 2, 167, 168, 7, 110, 2, 2, 168, 169, 7, 117, 2, 2, 169, 170, 7, 103, 2, 2, 170, 40, 3, 2, 2, 2, 171, 172, 7, 121, 2, 2, 172, 173, 7, 106, 2, 2, 173, 174, 7, 107, 2, 2, 174, 175, 7, 110, 2, 2, 175, 176, 7, 103, 2, 2, 176, 42, 3, 2, 2, 2, 177, 178, 7, 119, 2, 2, 178, 179, 7, 112, 2, 2, 179, 180, 7, 118, 2, 2, 180, 181, 7, 107, 2, 2, 181, 182, 7, 110, 2, 2, 182, 44, 3, 2, 2, 2, 183, 184, 7, 104, 2, 2, 184, 185, 7, 113, 2, 2, 185, 186, 7, 116, 2, 2, 186, 46, 3, 2, 2, 2, 187, 188, 7, 107, 2, 2, 188, 189, 7, 112, 2, 2, 189, 48, 3, 2, 2, 2, 190, 191, 7, 117, 2, 2, 191, 192, 7, 118, 2, 2, 192, 193, 7, 103, 2, 2, 193, 194, 7, 114, 2, 2, 194, 50, 3, 2, 2, 2, 195, 196, 7, 102, 2, 2, 196, 197, 7, 113, 2, 2, 197, 52, 3, 2, 2, 2, 198, 199, 7, 125, 2, 2, 199, 54, 3, 2, 2, 2, 200, 201, 7, 127, 2, 2, 201, 56, 3, 2, 2, 2, 202, 203, 7, 42, 2, 2, 203, 58, 3, 2, 2, 2, 204, 205, 7, 43, 2, 2, 205, 60, 3, 2, 2, 2, 206, 207, 7, 93, 2, 2, 207, 62, 3, 2, 2, 2, 208, 209, 7, 95, 2, 2, 209, 64, 3, 2, 2, 2, 210, 211, 7, 48, 2, 2, 211, 66, 3, 2, 2, 2, 212, 213, 7, 128, 2, 2, 213, 68, 3, 2, 2, 2, 214, 215, 7, 48, 2, 2, 215, 216, 7, 48, 2, 2, 216, 70, 3, 2, 2, 2, 217, 218, 7, 48, 2, 2, 218, 219, 7, 48, 2, 2, 219, 220, 7, 48, 2, 2, 220, 72, 3, 2, 2, 2, 221, 222, 7, 63, 2, 2, 222, 223, 7, 63, 2, 2, 223, 74, 3, 2, 2, 2, 224, 225, 7, 35, 2, 2, 225, 226, 7, 63, 2, 2, 226, 76, 3, 2, 2, 2, 227, 228, 7, 62, 2, 2, 228, 78, 3, 2, 2, 2, 229, 230, 7, 62, 2, 2, 230, 231, 7, 63, 2, 2, 231, 80, 3, 2, 2, 2, 232, 233, 7, 64, 2, 2, 233, 82, 3, 2, 2, 2, 234, 235, 7, 64, 2, 2, 235, 236, 7, 63, 2, 2, 236, 84, 3, 2, 2, 2, 237, 238, 7, 112, 2, 2, 238, 239, 7, 113, 2, 2, 239, 240, 7, 118, 2, 2, 240, 86, 3, 2, 2, 2, 241, 242, 7, 99, 2, 2, 242, 243, 7, 112, 2, 2, 243, 244, 7, 102, 2, 2, 244, 88, 3, 2, 2, 2, 245, 246, 7, 113, 2, 2, 246, 247, 7, 116, 2, 2, 247, 90, 3, 2, 2, 2, 248, 249, 7, 65, 2, 2, 249, 92, 3, 2, 2, 2, 250, 251, 7, 60, 2, 2, 251, 94, 3, 2, 2, 2, 252, 253, 7, 118, 2, 2, 253, 254, 7, 116, 2, 2, 254, 255, 7, 119, 2, 2, 255, 256, 7, 103, 2, 2, 256, 96, 3, 2, 2, 2, 257, 258, 7, 104, 2, 2, 258, 259, 7, 99, 2, 2, 259, 260, 7, 110, 2, 2, 260, 261, 7, 117, 2, 2, 261, 262, 7, 103, 2, 2, 262, 98, 3, 2, 2, 2, 263, 265, 5, 107, 54, 2, 264, 263, 3, 2, 2, 2, 265, 266, 3, 2, 2, 2, 266, 264, 3, 2, 2, 2, 266, 267, 3, 2, 2, 2, 267, 100, 3, 2, 2, 2, 268, 274, 7, 41, 2, 2, 269, 273, 10, 2, 2, 2, 270, 271, 7, 94, 2, 2, 271, 273, 9, 3, 2, 2, 272, 269, 3, 2, 2, 2, 272, 270, 3, 2, 2, 2, 273, 276, 3, 2, 2, 2, 274, 272, 3, 2, 2, 2, 274, 275, 3, 2, 2, 2, 275, 277, 3, 2, 2, 2, 276, 274, 3, 2, 2, 2, 277, 278, 7, 41, 2, 2, 278, 102, 3, 2, 2, 2, 279, 285, 7, 36, 2, 2, 280, 284, 10, 4, 2, 2, 281, 282, 7, 94, 2, 2, 282, 284, 9, 5, 2, 2, 283, 280, 3, 2, 2, 2, 283, 281, 3, 2, 2, 2, 284, 287, 3, 2, 2, 2, 285, 283, 3, 2, 2, 2, 285, 286, 3, 2, 2, 2, 286, 288, 3, 2, 2, 2, 287, 285, 3, 2, 2, 2, 288, 289, 7, 36, 2, 2, 289, 104, 3, 2, 2, 2, 290, 294, 5, 109, 55, 2, 291, 293, 5, 111, 56, 2, 292, 291, 3, 2, 2, 2, 293, 296, 3, 2, 2, 2, 294, 292, 3, 2, 2, 2, 294, 295, 3, 2, 2, 2, 295, 106, 3, 2, 2, 2, 296, 294, 3, 2, 2, 2, 297, 298, 9, 6, 2, 2, 298, 108, 3, 2, 2, 2, 299, 300, 9, 7, 2, 2, 300, 110, 3, 2, 2, 2, 301, 305, 5, 109, 55, 2, 302, 305, 5, 107, 54, 2, 303, 305, 9, 8, 2, 2, 304, 301, 3, 2, 2, 2, 304, 302, 3, 2, 2, 2, 304, 303, 3, 2, 2, 2, 305, 112, 3, 2, 2, 2, 306, 308, 9, 9, 2, 2, 307, 306, 3, 2, 2, 2, 308, 309, 3, 2, 2, 2, 309, 307, 3, 2, 2, 2, 309, 310, 3, 2, 2, 2, 310, 311, 3, 2, 2, 2, 311, 312, 8, 57, 2, 2, 312, 114, 3, 2, 2, 2, 313, 314, 11, 2, 2, 2, 314, 116, 3, 2, 2, 2, 11, 2, 266, 272, 274, 283, 285, 294, 304, 309, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 58, 334, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 6, 52, 284, 10, 52, 13, 52, 14, 52, 285, 3, 53, 3, 53, 3, 53, 3, 53, 7, 53, 292, 10, 53, 12, 53, 14, 53, 295, 11, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 7, 54, 303, 10, 54, 12, 54, 14, 54, 306, 11, 54, 3, 54, 3, 54, 3, 55, 3, 55, 7, 55, 312, 10, 55, 12, 55, 14, 55, 315, 11, 55, 3, 56, 3, 56, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 5, 58, 324, 10, 58, 3, 59, 6, 59, 327, 10, 59, 13, 59, 14, 59, 328, 3, 59, 3, 59, 3, 60, 3, 60, 2, 2, 61, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 2, 113, 2, 115, 2, 117, 57, 119, 58, 3, 2, 10, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 339, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 3, 121, 3, 2, 2, 2, 5, 123, 3, 2, 2, 2, 7, 128, 3, 2, 2, 2, 9, 134, 3, 2, 2, 2, 11, 136, 3, 2, 2, 2, 13, 138, 3, 2, 2, 2, 15, 140, 3, 2, 2, 2, 17, 142, 3, 2, 2, 2, 19, 144, 3, 2, 2, 2, 21, 146, 3, 2, 2, 2, 23, 148, 3, 2, 2, 2, 25, 151, 3, 2, 2, 2, 27, 154, 3, 2, 2, 2, 29, 156, 3, 2, 2, 2, 31, 158, 3, 2, 2, 2, 33, 160, 3, 2, 2, 2, 35, 169, 3, 2, 2, 2, 37, 175, 3, 2, 2, 2, 39, 177, 3, 2, 2, 2, 41, 180, 3, 2, 2, 2, 43, 185, 3, 2, 2, 2, 45, 190, 3, 2, 2, 2, 47, 196, 3, 2, 2, 2, 49, 202, 3, 2, 2, 2, 51, 206, 3, 2, 2, 2, 53, 209, 3, 2, 2, 2, 55, 214, 3, 2, 2, 2, 57, 217, 3, 2, 2, 2, 59, 219, 3, 2, 2, 2, 61, 221, 3, 2, 2, 2, 63, 223, 3, 2, 2, 2, 65, 225, 3, 2, 2, 2, 67, 227, 3, 2, 2, 2, 69, 229, 3, 2, 2, 2, 71, 231, 3, 2, 2, 2, 73, 233, 3, 2, 2, 2, 75, 236, 3, 2, 2, 2, 77, 240, 3, 2, 2, 2, 79, 243, 3, 2, 2, 2, 81, 246, 3, 2, 2, 2, 83, 248, 3, 2, 2, 2, 85, 251, 3, 2, 2, 2, 87, 253, 3, 2, 2, 2, 89, 256, 3, 2, 2, 2, 91, 260, 3, 2, 2, 2, 93, 264, 3, 2, 2, 2, 95, 267, 3, 2, 2, 2, 97, 269, 3, 2, 2, 2, 99, 271, 3, 2, 2, 2, 101, 276, 3, 2, 2, 2, 103, 283, 3, 2, 2, 2, 105, 287, 3, 2, 2, 2, 107, 298, 3, 2, 2, 2, 109, 309, 3, 2, 2, 2, 111, 316, 3, 2, 2, 2, 113, 318, 3, 2, 2, 2, 115, 323, 3, 2, 2, 2, 117, 326, 3, 2, 2, 2, 119, 332, 3, 2, 2, 2, 121, 122, 7, 61, 2, 2, 122, 4, 3, 2, 2, 2, 123, 124, 7, 117, 2, 2, 124, 125, 7, 109, 2, 2, 125, 126, 7, 107, 2, 2, 126, 127, 7, 114, 2, 2, 127, 6, 3, 2, 2, 2, 128, 129, 7, 114, 2, 2, 129, 130, 7, 116, 2, 2, 130, 131, 7, 107, 2, 2, 131, 132, 7, 112, 2, 2, 132, 133, 7, 118, 2, 2, 133, 8, 3, 2, 2, 2, 134, 135, 7, 63, 2, 2, 135, 10, 3, 2, 2, 2, 136, 137, 7, 96, 2, 2, 137, 12, 3, 2, 2, 2, 138, 139, 7, 44, 2, 2, 139, 14, 3, 2, 2, 2, 140, 141, 7, 49, 2, 2, 141, 16, 3, 2, 2, 2, 142, 143, 7, 39, 2, 2, 143, 18, 3, 2, 2, 2, 144, 145, 7, 45, 2, 2, 145, 20, 3, 2, 2, 2, 146, 147, 7, 47, 2, 2, 147, 22, 3, 2, 2, 2, 148, 149, 7, 62, 2, 2, 149, 150, 7, 62, 2, 2, 150, 24, 3, 2, 2, 2, 151, 152, 7, 64, 2, 2, 152, 153, 7, 64, 2, 2, 153, 26, 3, 2, 2, 2, 154, 155, 7, 40, 2, 2, 155, 28, 3, 2, 2, 2, 156, 157, 7, 38, 2, 2, 157, 30, 3, 2, 2, 2, 158, 159, 7, 126, 2, 2, 159, 32, 3, 2, 2, 2, 160, 161, 7, 101, 2, 2, 161, 162, 7, 113, 2, 2, 162, 163, 7, 112, 2, 2, 163, 164, 7, 118, 2, 2, 164, 165, 7, 107, 2, 2, 165, 166, 7, 112, 2, 2, 166, 167, 7, 119, 2, 2, 167, 168, 7, 103, 2, 2, 168, 34, 3, 2, 2, 2, 169, 170, 7, 100, 2, 2, 170, 171, 7, 116, 2, 2, 171, 172, 7, 103, 2, 2, 172, 173, 7, 99, 2, 2, 173, 174, 7, 109, 2, 2, 174, 36, 3, 2, 2, 2, 175, 176, 7, 46, 2, 2, 176, 38, 3, 2, 2, 2, 177, 178, 7, 107, 2, 2, 178, 179, 7, 104, 2, 2, 179, 40, 3, 2, 2, 2, 180, 181, 7, 103, 2, 2, 181, 182, 7, 110, 2, 2, 182, 183, 7, 107, 2, 2, 183, 184, 7, 104, 2, 2, 184, 42, 3, 2, 2, 2, 185, 186, 7, 103, 2, 2, 186, 187, 7, 110, 2, 2, 187, 188, 7, 117, 2, 2, 188, 189, 7, 103, 2, 2, 189, 44, 3, 2, 2, 2, 190, 191, 7, 121, 2, 2, 191, 192, 7, 106, 2, 2, 192, 193, 7, 107, 2, 2, 193, 194, 7, 110, 2, 2, 194, 195, 7, 103, 2, 2, 195, 46, 3, 2, 2, 2, 196, 197, 7, 119, 2, 2, 197, 198, 7, 112, 2, 2, 198, 199, 7, 118, 2, 2, 199, 200, 7, 107, 2, 2, 200, 201, 7, 110, 2, 2, 201, 48, 3, 2, 2, 2, 202, 203, 7, 104, 2, 2, 203, 204, 7, 113, 2, 2, 204, 205, 7, 116, 2, 2, 205, 50, 3, 2, 2, 2, 206, 207, 7, 107, 2, 2, 207, 208, 7, 112, 2, 2, 208, 52, 3, 2, 2, 2, 209, 210, 7, 117, 2, 2, 210, 211, 7, 118, 2, 2, 211, 212, 7, 103, 2, 2, 212, 213, 7, 114, 2, 2, 213, 54, 3, 2, 2, 2, 214, 215, 7, 102, 2, 2, 215, 216, 7, 113, 2, 2, 216, 56, 3, 2, 2, 2, 217, 218, 7, 125, 2, 2, 218, 58, 3, 2, 2, 2, 219, 220, 7, 127, 2, 2, 220, 60, 3, 2, 2, 2, 221, 222, 7, 42, 2, 2, 222, 62, 3, 2, 2, 2, 223, 224, 7, 43, 2, 2, 224, 64, 3, 2, 2, 2, 225, 226, 7, 93, 2, 2, 226, 66, 3, 2, 2, 2, 227, 228, 7, 95, 2, 2, 228, 68, 3, 2, 2, 2, 229, 230, 7, 48, 2, 2, 230, 70, 3, 2, 2, 2, 231, 232, 7, 128, 2, 2, 232, 72, 3, 2, 2, 2, 233, 234, 7, 48, 2, 2, 234, 235, 7, 48, 2, 2, 235, 74, 3, 2, 2, 2, 236, 237, 7, 48, 2, 2, 237, 238, 7, 48, 2, 2, 238, 239, 7, 48, 2, 2, 239, 76, 3, 2, 2, 2, 240, 241, 7, 63, 2, 2, 241, 242, 7, 63, 2, 2, 242, 78, 3, 2, 2, 2, 243, 244, 7, 35, 2, 2, 244, 245, 7, 63, 2, 2, 245, 80, 3, 2, 2, 2, 246, 247, 7, 62, 2, 2, 247, 82, 3, 2, 2, 2, 248, 249, 7, 62, 2, 2, 249, 250, 7, 63, 2, 2, 250, 84, 3, 2, 2, 2, 251, 252, 7, 64, 2, 2, 252, 86, 3, 2, 2, 2, 253, 254, 7, 64, 2, 2, 254, 255, 7, 63, 2, 2, 255, 88, 3, 2, 2, 2, 256, 257, 7, 112, 2, 2, 257, 258, 7, 113, 2, 2, 258, 259, 7, 118, 2, 2, 259, 90, 3, 2, 2, 2, 260, 261, 7, 99, 2, 2, 261, 262, 7, 112, 2, 2, 262, 263, 7, 102, 2, 2, 263, 92, 3, 2, 2, 2, 264, 265, 7, 113, 2, 2, 265, 266, 7, 116, 2, 2, 266, 94, 3, 2, 2, 2, 267, 268, 7, 65, 2, 2, 268, 96, 3, 2, 2, 2, 269, 270, 7, 60, 2, 2, 270, 98, 3, 2, 2, 2, 271, 272, 7, 118, 2, 2, 272, 273, 7, 116, 2, 2, 273, 274, 7, 119, 2, 2, 274, 275, 7, 103, 2, 2, 275, 100, 3, 2, 2, 2, 276, 277, 7, 104, 2, 2, 277, 278, 7, 99, 2, 2, 278, 279, 7, 110, 2, 2, 279, 280, 7, 117, 2, 2, 280, 281, 7, 103, 2, 2, 281, 102, 3, 2, 2, 2, 282, 284, 5, 111, 56, 2, 283, 282, 3, 2, 2, 2, 284, 285, 3, 2, 2, 2, 285, 283, 3, 2, 2, 2, 285, 286, 3, 2, 2, 2, 286, 104, 3, 2, 2, 2, 287, 293, 7, 41, 2, 2, 288, 292, 10, 2, 2, 2, 289, 290, 7, 94, 2, 2, 290, 292, 9, 3, 2, 2, 291, 288, 3, 2, 2, 2, 291, 289, 3, 2, 2, 2, 292, 295, 3, 2, 2, 2, 293, 291, 3, 2, 2, 2, 293, 294, 3, 2, 2, 2, 294, 296, 3, 2, 2, 2, 295, 293, 3, 2, 2, 2, 296, 297, 7, 41, 2, 2, 297, 106, 3, 2, 2, 2, 298, 304, 7, 36, 2, 2, 299, 303, 10, 4, 2, 2, 300, 301, 7, 94, 2, 2, 301, 303, 9, 5, 2, 2, 302, 299, 3, 2, 2, 2, 302, 300, 3, 2, 2, 2, 303, 306, 3, 2, 2, 2, 304, 302, 3, 2, 2, 2, 304, 305, 3, 2, 2, 2, 305, 307, 3, 2, 2, 2, 306, 304, 3, 2, 2, 2, 307, 308, 7, 36, 2, 2, 308, 108, 3, 2, 2, 2, 309, 313, 5, 113, 57, 2, 310, 312, 5, 115, 58, 2, 311, 310, 3, 2, 2, 2, 312, 315, 3, 2, 2, 2, 313, 311, 3, 2, 2, 2, 313, 314, 3, 2, 2, 2, 314, 110, 3, 2, 2, 2, 315, 313, 3, 2, 2, 2, 316, 317, 9, 6, 2, 2, 317, 112, 3, 2, 2, 2, 318, 319, 9, 7, 2, 2, 319, 114, 3, 2, 2, 2, 320, 324, 5, 113, 57, 2, 321, 324, 5, 111, 56, 2, 322, 324, 9, 8, 2, 2, 323, 320, 3, 2, 2, 2, 323, 321, 3, 2, 2, 2, 323, 322, 3, 2, 2, 2, 324, 116, 3, 2, 2, 2, 325, 327, 9, 9, 2, 2, 326, 325, 3, 2, 2, 2, 327, 328, 3, 2, 2, 2, 328, 326, 3, 2, 2, 2, 328, 329, 3, 2, 2, 2, 329, 330, 3, 2, 2, 2, 330, 331, 8, 59, 2, 2, 331, 118, 3, 2, 2, 2, 332, 333, 11, 2, 2, 2, 333, 120, 3, 2, 2, 2, 11, 2, 285, 291, 293, 302, 304, 313, 323, 328, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py index 8fe73e30..aa9cd86c 100644 --- a/src/antlr/PyxellLexer.py +++ b/src/antlr/PyxellLexer.py @@ -8,8 +8,8 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\28") - buf.write("\u013b\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2:") + buf.write("\u014e\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") @@ -18,127 +18,135 @@ def serializedATN(): buf.write("\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4,\t,\4-\t-\4.") buf.write("\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64") buf.write("\t\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:") - buf.write("\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\4\3") - buf.write("\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\n\3\n\3\13\3") - buf.write("\13\3\f\3\f\3\f\3\r\3\r\3\r\3\16\3\16\3\17\3\17\3\20\3") - buf.write("\20\3\21\3\21\3\22\3\22\3\22\3\23\3\23\3\23\3\23\3\23") - buf.write("\3\24\3\24\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3\25\3\25") - buf.write("\3\26\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27\3\30") - buf.write("\3\30\3\30\3\31\3\31\3\31\3\31\3\31\3\32\3\32\3\32\3\33") - buf.write("\3\33\3\34\3\34\3\35\3\35\3\36\3\36\3\37\3\37\3 \3 \3") - buf.write("!\3!\3\"\3\"\3#\3#\3#\3$\3$\3$\3$\3%\3%\3%\3&\3&\3&\3") - buf.write("\'\3\'\3(\3(\3(\3)\3)\3*\3*\3*\3+\3+\3+\3+\3,\3,\3,\3") - buf.write(",\3-\3-\3-\3.\3.\3/\3/\3\60\3\60\3\60\3\60\3\60\3\61\3") - buf.write("\61\3\61\3\61\3\61\3\61\3\62\6\62\u0109\n\62\r\62\16\62") - buf.write("\u010a\3\63\3\63\3\63\3\63\7\63\u0111\n\63\f\63\16\63") - buf.write("\u0114\13\63\3\63\3\63\3\64\3\64\3\64\3\64\7\64\u011c") - buf.write("\n\64\f\64\16\64\u011f\13\64\3\64\3\64\3\65\3\65\7\65") - buf.write("\u0125\n\65\f\65\16\65\u0128\13\65\3\66\3\66\3\67\3\67") - buf.write("\38\38\38\58\u0131\n8\39\69\u0134\n9\r9\169\u0135\39\3") - buf.write("9\3:\3:\2\2;\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13") - buf.write("\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26") - buf.write("+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#") - buf.write("E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66") - buf.write("k\2m\2o\2q\67s8\3\2\n\4\2))^^\6\2))^^ppvv\4\2$$^^\6\2") - buf.write("$$^^ppvv\3\2\62;\5\2C\\aac|\4\2))aa\5\2\13\f\17\17\"\"") - buf.write("\2\u0140\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2") - buf.write("\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2") - buf.write("\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2") - buf.write("\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3") - buf.write("\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2") - buf.write("-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3") - buf.write("\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2") - buf.write("?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2") - buf.write("\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2") - buf.write("\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2") - buf.write("\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3") - buf.write("\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\3u") - buf.write("\3\2\2\2\5w\3\2\2\2\7|\3\2\2\2\t\u0082\3\2\2\2\13\u0084") - buf.write("\3\2\2\2\r\u0086\3\2\2\2\17\u0088\3\2\2\2\21\u008a\3\2") - buf.write("\2\2\23\u008c\3\2\2\2\25\u008e\3\2\2\2\27\u0090\3\2\2") - buf.write("\2\31\u0093\3\2\2\2\33\u0096\3\2\2\2\35\u0098\3\2\2\2") - buf.write("\37\u009a\3\2\2\2!\u009c\3\2\2\2#\u009e\3\2\2\2%\u00a1") - buf.write("\3\2\2\2\'\u00a6\3\2\2\2)\u00ab\3\2\2\2+\u00b1\3\2\2\2") - buf.write("-\u00b7\3\2\2\2/\u00bb\3\2\2\2\61\u00be\3\2\2\2\63\u00c3") - buf.write("\3\2\2\2\65\u00c6\3\2\2\2\67\u00c8\3\2\2\29\u00ca\3\2") - buf.write("\2\2;\u00cc\3\2\2\2=\u00ce\3\2\2\2?\u00d0\3\2\2\2A\u00d2") - buf.write("\3\2\2\2C\u00d4\3\2\2\2E\u00d6\3\2\2\2G\u00d9\3\2\2\2") - buf.write("I\u00dd\3\2\2\2K\u00e0\3\2\2\2M\u00e3\3\2\2\2O\u00e5\3") - buf.write("\2\2\2Q\u00e8\3\2\2\2S\u00ea\3\2\2\2U\u00ed\3\2\2\2W\u00f1") - buf.write("\3\2\2\2Y\u00f5\3\2\2\2[\u00f8\3\2\2\2]\u00fa\3\2\2\2") - buf.write("_\u00fc\3\2\2\2a\u0101\3\2\2\2c\u0108\3\2\2\2e\u010c\3") - buf.write("\2\2\2g\u0117\3\2\2\2i\u0122\3\2\2\2k\u0129\3\2\2\2m\u012b") - buf.write("\3\2\2\2o\u0130\3\2\2\2q\u0133\3\2\2\2s\u0139\3\2\2\2") - buf.write("uv\7=\2\2v\4\3\2\2\2wx\7u\2\2xy\7m\2\2yz\7k\2\2z{\7r\2") - buf.write("\2{\6\3\2\2\2|}\7r\2\2}~\7t\2\2~\177\7k\2\2\177\u0080") - buf.write("\7p\2\2\u0080\u0081\7v\2\2\u0081\b\3\2\2\2\u0082\u0083") - buf.write("\7?\2\2\u0083\n\3\2\2\2\u0084\u0085\7`\2\2\u0085\f\3\2") - buf.write("\2\2\u0086\u0087\7,\2\2\u0087\16\3\2\2\2\u0088\u0089\7") - buf.write("\61\2\2\u0089\20\3\2\2\2\u008a\u008b\7\'\2\2\u008b\22") - buf.write("\3\2\2\2\u008c\u008d\7-\2\2\u008d\24\3\2\2\2\u008e\u008f") - buf.write("\7/\2\2\u008f\26\3\2\2\2\u0090\u0091\7>\2\2\u0091\u0092") - buf.write("\7>\2\2\u0092\30\3\2\2\2\u0093\u0094\7@\2\2\u0094\u0095") - buf.write("\7@\2\2\u0095\32\3\2\2\2\u0096\u0097\7(\2\2\u0097\34\3") - buf.write("\2\2\2\u0098\u0099\7&\2\2\u0099\36\3\2\2\2\u009a\u009b") - buf.write("\7~\2\2\u009b \3\2\2\2\u009c\u009d\7.\2\2\u009d\"\3\2") - buf.write("\2\2\u009e\u009f\7k\2\2\u009f\u00a0\7h\2\2\u00a0$\3\2") - buf.write("\2\2\u00a1\u00a2\7g\2\2\u00a2\u00a3\7n\2\2\u00a3\u00a4") - buf.write("\7k\2\2\u00a4\u00a5\7h\2\2\u00a5&\3\2\2\2\u00a6\u00a7") - buf.write("\7g\2\2\u00a7\u00a8\7n\2\2\u00a8\u00a9\7u\2\2\u00a9\u00aa") - buf.write("\7g\2\2\u00aa(\3\2\2\2\u00ab\u00ac\7y\2\2\u00ac\u00ad") - buf.write("\7j\2\2\u00ad\u00ae\7k\2\2\u00ae\u00af\7n\2\2\u00af\u00b0") - buf.write("\7g\2\2\u00b0*\3\2\2\2\u00b1\u00b2\7w\2\2\u00b2\u00b3") - buf.write("\7p\2\2\u00b3\u00b4\7v\2\2\u00b4\u00b5\7k\2\2\u00b5\u00b6") - buf.write("\7n\2\2\u00b6,\3\2\2\2\u00b7\u00b8\7h\2\2\u00b8\u00b9") - buf.write("\7q\2\2\u00b9\u00ba\7t\2\2\u00ba.\3\2\2\2\u00bb\u00bc") - buf.write("\7k\2\2\u00bc\u00bd\7p\2\2\u00bd\60\3\2\2\2\u00be\u00bf") - buf.write("\7u\2\2\u00bf\u00c0\7v\2\2\u00c0\u00c1\7g\2\2\u00c1\u00c2") - buf.write("\7r\2\2\u00c2\62\3\2\2\2\u00c3\u00c4\7f\2\2\u00c4\u00c5") - buf.write("\7q\2\2\u00c5\64\3\2\2\2\u00c6\u00c7\7}\2\2\u00c7\66\3") - buf.write("\2\2\2\u00c8\u00c9\7\177\2\2\u00c98\3\2\2\2\u00ca\u00cb") - buf.write("\7*\2\2\u00cb:\3\2\2\2\u00cc\u00cd\7+\2\2\u00cd<\3\2\2") - buf.write("\2\u00ce\u00cf\7]\2\2\u00cf>\3\2\2\2\u00d0\u00d1\7_\2") - buf.write("\2\u00d1@\3\2\2\2\u00d2\u00d3\7\60\2\2\u00d3B\3\2\2\2") - buf.write("\u00d4\u00d5\7\u0080\2\2\u00d5D\3\2\2\2\u00d6\u00d7\7") - buf.write("\60\2\2\u00d7\u00d8\7\60\2\2\u00d8F\3\2\2\2\u00d9\u00da") - buf.write("\7\60\2\2\u00da\u00db\7\60\2\2\u00db\u00dc\7\60\2\2\u00dc") - buf.write("H\3\2\2\2\u00dd\u00de\7?\2\2\u00de\u00df\7?\2\2\u00df") - buf.write("J\3\2\2\2\u00e0\u00e1\7#\2\2\u00e1\u00e2\7?\2\2\u00e2") - buf.write("L\3\2\2\2\u00e3\u00e4\7>\2\2\u00e4N\3\2\2\2\u00e5\u00e6") - buf.write("\7>\2\2\u00e6\u00e7\7?\2\2\u00e7P\3\2\2\2\u00e8\u00e9") - buf.write("\7@\2\2\u00e9R\3\2\2\2\u00ea\u00eb\7@\2\2\u00eb\u00ec") - buf.write("\7?\2\2\u00ecT\3\2\2\2\u00ed\u00ee\7p\2\2\u00ee\u00ef") - buf.write("\7q\2\2\u00ef\u00f0\7v\2\2\u00f0V\3\2\2\2\u00f1\u00f2") - buf.write("\7c\2\2\u00f2\u00f3\7p\2\2\u00f3\u00f4\7f\2\2\u00f4X\3") - buf.write("\2\2\2\u00f5\u00f6\7q\2\2\u00f6\u00f7\7t\2\2\u00f7Z\3") - buf.write("\2\2\2\u00f8\u00f9\7A\2\2\u00f9\\\3\2\2\2\u00fa\u00fb") - buf.write("\7<\2\2\u00fb^\3\2\2\2\u00fc\u00fd\7v\2\2\u00fd\u00fe") - buf.write("\7t\2\2\u00fe\u00ff\7w\2\2\u00ff\u0100\7g\2\2\u0100`\3") - buf.write("\2\2\2\u0101\u0102\7h\2\2\u0102\u0103\7c\2\2\u0103\u0104") - buf.write("\7n\2\2\u0104\u0105\7u\2\2\u0105\u0106\7g\2\2\u0106b\3") - buf.write("\2\2\2\u0107\u0109\5k\66\2\u0108\u0107\3\2\2\2\u0109\u010a") - buf.write("\3\2\2\2\u010a\u0108\3\2\2\2\u010a\u010b\3\2\2\2\u010b") - buf.write("d\3\2\2\2\u010c\u0112\7)\2\2\u010d\u0111\n\2\2\2\u010e") - buf.write("\u010f\7^\2\2\u010f\u0111\t\3\2\2\u0110\u010d\3\2\2\2") - buf.write("\u0110\u010e\3\2\2\2\u0111\u0114\3\2\2\2\u0112\u0110\3") - buf.write("\2\2\2\u0112\u0113\3\2\2\2\u0113\u0115\3\2\2\2\u0114\u0112") - buf.write("\3\2\2\2\u0115\u0116\7)\2\2\u0116f\3\2\2\2\u0117\u011d") - buf.write("\7$\2\2\u0118\u011c\n\4\2\2\u0119\u011a\7^\2\2\u011a\u011c") - buf.write("\t\5\2\2\u011b\u0118\3\2\2\2\u011b\u0119\3\2\2\2\u011c") - buf.write("\u011f\3\2\2\2\u011d\u011b\3\2\2\2\u011d\u011e\3\2\2\2") - buf.write("\u011e\u0120\3\2\2\2\u011f\u011d\3\2\2\2\u0120\u0121\7") - buf.write("$\2\2\u0121h\3\2\2\2\u0122\u0126\5m\67\2\u0123\u0125\5") - buf.write("o8\2\u0124\u0123\3\2\2\2\u0125\u0128\3\2\2\2\u0126\u0124") - buf.write("\3\2\2\2\u0126\u0127\3\2\2\2\u0127j\3\2\2\2\u0128\u0126") - buf.write("\3\2\2\2\u0129\u012a\t\6\2\2\u012al\3\2\2\2\u012b\u012c") - buf.write("\t\7\2\2\u012cn\3\2\2\2\u012d\u0131\5m\67\2\u012e\u0131") - buf.write("\5k\66\2\u012f\u0131\t\b\2\2\u0130\u012d\3\2\2\2\u0130") - buf.write("\u012e\3\2\2\2\u0130\u012f\3\2\2\2\u0131p\3\2\2\2\u0132") - buf.write("\u0134\t\t\2\2\u0133\u0132\3\2\2\2\u0134\u0135\3\2\2\2") - buf.write("\u0135\u0133\3\2\2\2\u0135\u0136\3\2\2\2\u0136\u0137\3") - buf.write("\2\2\2\u0137\u0138\b9\2\2\u0138r\3\2\2\2\u0139\u013a\13") - buf.write("\2\2\2\u013at\3\2\2\2\13\2\u010a\u0110\u0112\u011b\u011d") - buf.write("\u0126\u0130\u0135\3\b\2\2") + buf.write("\4;\t;\4<\t<\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3") + buf.write("\4\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\n") + buf.write("\3\n\3\13\3\13\3\f\3\f\3\f\3\r\3\r\3\r\3\16\3\16\3\17") + buf.write("\3\17\3\20\3\20\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21") + buf.write("\3\21\3\22\3\22\3\22\3\22\3\22\3\22\3\23\3\23\3\24\3\24") + buf.write("\3\24\3\25\3\25\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26") + buf.write("\3\27\3\27\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\30\3\30") + buf.write("\3\30\3\31\3\31\3\31\3\31\3\32\3\32\3\32\3\33\3\33\3\33") + buf.write("\3\33\3\33\3\34\3\34\3\34\3\35\3\35\3\36\3\36\3\37\3\37") + buf.write("\3 \3 \3!\3!\3\"\3\"\3#\3#\3$\3$\3%\3%\3%\3&\3&\3&\3&") + buf.write("\3\'\3\'\3\'\3(\3(\3(\3)\3)\3*\3*\3*\3+\3+\3,\3,\3,\3") + buf.write("-\3-\3-\3-\3.\3.\3.\3.\3/\3/\3/\3\60\3\60\3\61\3\61\3") + buf.write("\62\3\62\3\62\3\62\3\62\3\63\3\63\3\63\3\63\3\63\3\63") + buf.write("\3\64\6\64\u011c\n\64\r\64\16\64\u011d\3\65\3\65\3\65") + buf.write("\3\65\7\65\u0124\n\65\f\65\16\65\u0127\13\65\3\65\3\65") + buf.write("\3\66\3\66\3\66\3\66\7\66\u012f\n\66\f\66\16\66\u0132") + buf.write("\13\66\3\66\3\66\3\67\3\67\7\67\u0138\n\67\f\67\16\67") + buf.write("\u013b\13\67\38\38\39\39\3:\3:\3:\5:\u0144\n:\3;\6;\u0147") + buf.write("\n;\r;\16;\u0148\3;\3;\3<\3<\2\2=\3\3\5\4\7\5\t\6\13\7") + buf.write("\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21") + buf.write("!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34\67") + buf.write("\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61") + buf.write("a\62c\63e\64g\65i\66k\67m8o\2q\2s\2u9w:\3\2\n\4\2))^^") + buf.write("\6\2))^^ppvv\4\2$$^^\6\2$$^^ppvv\3\2\62;\5\2C\\aac|\4") + buf.write("\2))aa\5\2\13\f\17\17\"\"\2\u0153\2\3\3\2\2\2\2\5\3\2") + buf.write("\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2") + buf.write("\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2") + buf.write("\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37") + buf.write("\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2") + buf.write("\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2") + buf.write("\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2") + buf.write("\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2") + buf.write("\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2") + buf.write("\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3") + buf.write("\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a") + buf.write("\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2") + buf.write("k\3\2\2\2\2m\3\2\2\2\2u\3\2\2\2\2w\3\2\2\2\3y\3\2\2\2") + buf.write("\5{\3\2\2\2\7\u0080\3\2\2\2\t\u0086\3\2\2\2\13\u0088\3") + buf.write("\2\2\2\r\u008a\3\2\2\2\17\u008c\3\2\2\2\21\u008e\3\2\2") + buf.write("\2\23\u0090\3\2\2\2\25\u0092\3\2\2\2\27\u0094\3\2\2\2") + buf.write("\31\u0097\3\2\2\2\33\u009a\3\2\2\2\35\u009c\3\2\2\2\37") + buf.write("\u009e\3\2\2\2!\u00a0\3\2\2\2#\u00a9\3\2\2\2%\u00af\3") + buf.write("\2\2\2\'\u00b1\3\2\2\2)\u00b4\3\2\2\2+\u00b9\3\2\2\2-") + buf.write("\u00be\3\2\2\2/\u00c4\3\2\2\2\61\u00ca\3\2\2\2\63\u00ce") + buf.write("\3\2\2\2\65\u00d1\3\2\2\2\67\u00d6\3\2\2\29\u00d9\3\2") + buf.write("\2\2;\u00db\3\2\2\2=\u00dd\3\2\2\2?\u00df\3\2\2\2A\u00e1") + buf.write("\3\2\2\2C\u00e3\3\2\2\2E\u00e5\3\2\2\2G\u00e7\3\2\2\2") + buf.write("I\u00e9\3\2\2\2K\u00ec\3\2\2\2M\u00f0\3\2\2\2O\u00f3\3") + buf.write("\2\2\2Q\u00f6\3\2\2\2S\u00f8\3\2\2\2U\u00fb\3\2\2\2W\u00fd") + buf.write("\3\2\2\2Y\u0100\3\2\2\2[\u0104\3\2\2\2]\u0108\3\2\2\2") + buf.write("_\u010b\3\2\2\2a\u010d\3\2\2\2c\u010f\3\2\2\2e\u0114\3") + buf.write("\2\2\2g\u011b\3\2\2\2i\u011f\3\2\2\2k\u012a\3\2\2\2m\u0135") + buf.write("\3\2\2\2o\u013c\3\2\2\2q\u013e\3\2\2\2s\u0143\3\2\2\2") + buf.write("u\u0146\3\2\2\2w\u014c\3\2\2\2yz\7=\2\2z\4\3\2\2\2{|\7") + buf.write("u\2\2|}\7m\2\2}~\7k\2\2~\177\7r\2\2\177\6\3\2\2\2\u0080") + buf.write("\u0081\7r\2\2\u0081\u0082\7t\2\2\u0082\u0083\7k\2\2\u0083") + buf.write("\u0084\7p\2\2\u0084\u0085\7v\2\2\u0085\b\3\2\2\2\u0086") + buf.write("\u0087\7?\2\2\u0087\n\3\2\2\2\u0088\u0089\7`\2\2\u0089") + buf.write("\f\3\2\2\2\u008a\u008b\7,\2\2\u008b\16\3\2\2\2\u008c\u008d") + buf.write("\7\61\2\2\u008d\20\3\2\2\2\u008e\u008f\7\'\2\2\u008f\22") + buf.write("\3\2\2\2\u0090\u0091\7-\2\2\u0091\24\3\2\2\2\u0092\u0093") + buf.write("\7/\2\2\u0093\26\3\2\2\2\u0094\u0095\7>\2\2\u0095\u0096") + buf.write("\7>\2\2\u0096\30\3\2\2\2\u0097\u0098\7@\2\2\u0098\u0099") + buf.write("\7@\2\2\u0099\32\3\2\2\2\u009a\u009b\7(\2\2\u009b\34\3") + buf.write("\2\2\2\u009c\u009d\7&\2\2\u009d\36\3\2\2\2\u009e\u009f") + buf.write("\7~\2\2\u009f \3\2\2\2\u00a0\u00a1\7e\2\2\u00a1\u00a2") + buf.write("\7q\2\2\u00a2\u00a3\7p\2\2\u00a3\u00a4\7v\2\2\u00a4\u00a5") + buf.write("\7k\2\2\u00a5\u00a6\7p\2\2\u00a6\u00a7\7w\2\2\u00a7\u00a8") + buf.write("\7g\2\2\u00a8\"\3\2\2\2\u00a9\u00aa\7d\2\2\u00aa\u00ab") + buf.write("\7t\2\2\u00ab\u00ac\7g\2\2\u00ac\u00ad\7c\2\2\u00ad\u00ae") + buf.write("\7m\2\2\u00ae$\3\2\2\2\u00af\u00b0\7.\2\2\u00b0&\3\2\2") + buf.write("\2\u00b1\u00b2\7k\2\2\u00b2\u00b3\7h\2\2\u00b3(\3\2\2") + buf.write("\2\u00b4\u00b5\7g\2\2\u00b5\u00b6\7n\2\2\u00b6\u00b7\7") + buf.write("k\2\2\u00b7\u00b8\7h\2\2\u00b8*\3\2\2\2\u00b9\u00ba\7") + buf.write("g\2\2\u00ba\u00bb\7n\2\2\u00bb\u00bc\7u\2\2\u00bc\u00bd") + buf.write("\7g\2\2\u00bd,\3\2\2\2\u00be\u00bf\7y\2\2\u00bf\u00c0") + buf.write("\7j\2\2\u00c0\u00c1\7k\2\2\u00c1\u00c2\7n\2\2\u00c2\u00c3") + buf.write("\7g\2\2\u00c3.\3\2\2\2\u00c4\u00c5\7w\2\2\u00c5\u00c6") + buf.write("\7p\2\2\u00c6\u00c7\7v\2\2\u00c7\u00c8\7k\2\2\u00c8\u00c9") + buf.write("\7n\2\2\u00c9\60\3\2\2\2\u00ca\u00cb\7h\2\2\u00cb\u00cc") + buf.write("\7q\2\2\u00cc\u00cd\7t\2\2\u00cd\62\3\2\2\2\u00ce\u00cf") + buf.write("\7k\2\2\u00cf\u00d0\7p\2\2\u00d0\64\3\2\2\2\u00d1\u00d2") + buf.write("\7u\2\2\u00d2\u00d3\7v\2\2\u00d3\u00d4\7g\2\2\u00d4\u00d5") + buf.write("\7r\2\2\u00d5\66\3\2\2\2\u00d6\u00d7\7f\2\2\u00d7\u00d8") + buf.write("\7q\2\2\u00d88\3\2\2\2\u00d9\u00da\7}\2\2\u00da:\3\2\2") + buf.write("\2\u00db\u00dc\7\177\2\2\u00dc<\3\2\2\2\u00dd\u00de\7") + buf.write("*\2\2\u00de>\3\2\2\2\u00df\u00e0\7+\2\2\u00e0@\3\2\2\2") + buf.write("\u00e1\u00e2\7]\2\2\u00e2B\3\2\2\2\u00e3\u00e4\7_\2\2") + buf.write("\u00e4D\3\2\2\2\u00e5\u00e6\7\60\2\2\u00e6F\3\2\2\2\u00e7") + buf.write("\u00e8\7\u0080\2\2\u00e8H\3\2\2\2\u00e9\u00ea\7\60\2\2") + buf.write("\u00ea\u00eb\7\60\2\2\u00ebJ\3\2\2\2\u00ec\u00ed\7\60") + buf.write("\2\2\u00ed\u00ee\7\60\2\2\u00ee\u00ef\7\60\2\2\u00efL") + buf.write("\3\2\2\2\u00f0\u00f1\7?\2\2\u00f1\u00f2\7?\2\2\u00f2N") + buf.write("\3\2\2\2\u00f3\u00f4\7#\2\2\u00f4\u00f5\7?\2\2\u00f5P") + buf.write("\3\2\2\2\u00f6\u00f7\7>\2\2\u00f7R\3\2\2\2\u00f8\u00f9") + buf.write("\7>\2\2\u00f9\u00fa\7?\2\2\u00faT\3\2\2\2\u00fb\u00fc") + buf.write("\7@\2\2\u00fcV\3\2\2\2\u00fd\u00fe\7@\2\2\u00fe\u00ff") + buf.write("\7?\2\2\u00ffX\3\2\2\2\u0100\u0101\7p\2\2\u0101\u0102") + buf.write("\7q\2\2\u0102\u0103\7v\2\2\u0103Z\3\2\2\2\u0104\u0105") + buf.write("\7c\2\2\u0105\u0106\7p\2\2\u0106\u0107\7f\2\2\u0107\\") + buf.write("\3\2\2\2\u0108\u0109\7q\2\2\u0109\u010a\7t\2\2\u010a^") + buf.write("\3\2\2\2\u010b\u010c\7A\2\2\u010c`\3\2\2\2\u010d\u010e") + buf.write("\7<\2\2\u010eb\3\2\2\2\u010f\u0110\7v\2\2\u0110\u0111") + buf.write("\7t\2\2\u0111\u0112\7w\2\2\u0112\u0113\7g\2\2\u0113d\3") + buf.write("\2\2\2\u0114\u0115\7h\2\2\u0115\u0116\7c\2\2\u0116\u0117") + buf.write("\7n\2\2\u0117\u0118\7u\2\2\u0118\u0119\7g\2\2\u0119f\3") + buf.write("\2\2\2\u011a\u011c\5o8\2\u011b\u011a\3\2\2\2\u011c\u011d") + buf.write("\3\2\2\2\u011d\u011b\3\2\2\2\u011d\u011e\3\2\2\2\u011e") + buf.write("h\3\2\2\2\u011f\u0125\7)\2\2\u0120\u0124\n\2\2\2\u0121") + buf.write("\u0122\7^\2\2\u0122\u0124\t\3\2\2\u0123\u0120\3\2\2\2") + buf.write("\u0123\u0121\3\2\2\2\u0124\u0127\3\2\2\2\u0125\u0123\3") + buf.write("\2\2\2\u0125\u0126\3\2\2\2\u0126\u0128\3\2\2\2\u0127\u0125") + buf.write("\3\2\2\2\u0128\u0129\7)\2\2\u0129j\3\2\2\2\u012a\u0130") + buf.write("\7$\2\2\u012b\u012f\n\4\2\2\u012c\u012d\7^\2\2\u012d\u012f") + buf.write("\t\5\2\2\u012e\u012b\3\2\2\2\u012e\u012c\3\2\2\2\u012f") + buf.write("\u0132\3\2\2\2\u0130\u012e\3\2\2\2\u0130\u0131\3\2\2\2") + buf.write("\u0131\u0133\3\2\2\2\u0132\u0130\3\2\2\2\u0133\u0134\7") + buf.write("$\2\2\u0134l\3\2\2\2\u0135\u0139\5q9\2\u0136\u0138\5s") + buf.write(":\2\u0137\u0136\3\2\2\2\u0138\u013b\3\2\2\2\u0139\u0137") + buf.write("\3\2\2\2\u0139\u013a\3\2\2\2\u013an\3\2\2\2\u013b\u0139") + buf.write("\3\2\2\2\u013c\u013d\t\6\2\2\u013dp\3\2\2\2\u013e\u013f") + buf.write("\t\7\2\2\u013fr\3\2\2\2\u0140\u0144\5q9\2\u0141\u0144") + buf.write("\5o8\2\u0142\u0144\t\b\2\2\u0143\u0140\3\2\2\2\u0143\u0141") + buf.write("\3\2\2\2\u0143\u0142\3\2\2\2\u0144t\3\2\2\2\u0145\u0147") + buf.write("\t\t\2\2\u0146\u0145\3\2\2\2\u0147\u0148\3\2\2\2\u0148") + buf.write("\u0146\3\2\2\2\u0148\u0149\3\2\2\2\u0149\u014a\3\2\2\2") + buf.write("\u014a\u014b\b;\2\2\u014bv\3\2\2\2\u014c\u014d\13\2\2") + buf.write("\2\u014dx\3\2\2\2\13\2\u011d\u0123\u0125\u012e\u0130\u0139") + buf.write("\u0143\u0148\3\b\2\2") return buf.getvalue() @@ -196,12 +204,14 @@ class PyxellLexer(Lexer): T__45 = 46 T__46 = 47 T__47 = 48 - INT = 49 - CHAR = 50 - STRING = 51 - ID = 52 - WS = 53 - ERR = 54 + T__48 = 49 + T__49 = 50 + INT = 51 + CHAR = 52 + STRING = 53 + ID = 54 + WS = 55 + ERR = 56 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -209,11 +219,12 @@ class PyxellLexer(Lexer): literalNames = [ "", "';'", "'skip'", "'print'", "'='", "'^'", "'*'", "'/'", "'%'", - "'+'", "'-'", "'<<'", "'>>'", "'&'", "'$'", "'|'", "','", "'if'", - "'elif'", "'else'", "'while'", "'until'", "'for'", "'in'", "'step'", - "'do'", "'{'", "'}'", "'('", "')'", "'['", "']'", "'.'", "'~'", - "'..'", "'...'", "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", - "'not'", "'and'", "'or'", "'?'", "':'", "'true'", "'false'" ] + "'+'", "'-'", "'<<'", "'>>'", "'&'", "'$'", "'|'", "'continue'", + "'break'", "','", "'if'", "'elif'", "'else'", "'while'", "'until'", + "'for'", "'in'", "'step'", "'do'", "'{'", "'}'", "'('", "')'", + "'['", "']'", "'.'", "'~'", "'..'", "'...'", "'=='", "'!='", + "'<'", "'<='", "'>'", "'>='", "'not'", "'and'", "'or'", "'?'", + "':'", "'true'", "'false'" ] symbolicNames = [ "", "INT", "CHAR", "STRING", "ID", "WS", "ERR" ] @@ -225,8 +236,9 @@ class PyxellLexer(Lexer): "T__26", "T__27", "T__28", "T__29", "T__30", "T__31", "T__32", "T__33", "T__34", "T__35", "T__36", "T__37", "T__38", "T__39", "T__40", "T__41", "T__42", "T__43", - "T__44", "T__45", "T__46", "T__47", "INT", "CHAR", "STRING", - "ID", "DIGIT", "ID_START", "ID_CONT", "WS", "ERR" ] + "T__44", "T__45", "T__46", "T__47", "T__48", "T__49", + "INT", "CHAR", "STRING", "ID", "DIGIT", "ID_START", "ID_CONT", + "WS", "ERR" ] grammarFileName = "Pyxell.g4" diff --git a/src/antlr/PyxellLexer.tokens b/src/antlr/PyxellLexer.tokens index 7e3283ca..fd632bc1 100644 --- a/src/antlr/PyxellLexer.tokens +++ b/src/antlr/PyxellLexer.tokens @@ -46,12 +46,14 @@ T__44=45 T__45=46 T__46=47 T__47=48 -INT=49 -CHAR=50 -STRING=51 -ID=52 -WS=53 -ERR=54 +T__48=49 +T__49=50 +INT=51 +CHAR=52 +STRING=53 +ID=54 +WS=55 +ERR=56 ';'=1 'skip'=2 'print'=3 @@ -67,36 +69,38 @@ ERR=54 '&'=13 '$'=14 '|'=15 -','=16 -'if'=17 -'elif'=18 -'else'=19 -'while'=20 -'until'=21 -'for'=22 -'in'=23 -'step'=24 -'do'=25 -'{'=26 -'}'=27 -'('=28 -')'=29 -'['=30 -']'=31 -'.'=32 -'~'=33 -'..'=34 -'...'=35 -'=='=36 -'!='=37 -'<'=38 -'<='=39 -'>'=40 -'>='=41 -'not'=42 -'and'=43 -'or'=44 -'?'=45 -':'=46 -'true'=47 -'false'=48 +'continue'=16 +'break'=17 +','=18 +'if'=19 +'elif'=20 +'else'=21 +'while'=22 +'until'=23 +'for'=24 +'in'=25 +'step'=26 +'do'=27 +'{'=28 +'}'=29 +'('=30 +')'=31 +'['=32 +']'=33 +'.'=34 +'~'=35 +'..'=36 +'...'=37 +'=='=38 +'!='=39 +'<'=40 +'<='=41 +'>'=42 +'>='=43 +'not'=44 +'and'=45 +'or'=46 +'?'=47 +':'=48 +'true'=49 +'false'=50 diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index e42fcc46..b0edf99a 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -8,94 +8,95 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\38") - buf.write("\u00d0\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3:") + buf.write("\u00d1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\3\2\7\2\26\n\2\f\2\16\2\31\13") buf.write("\2\3\2\3\2\3\3\3\3\3\3\3\3\5\3!\n\3\3\4\3\4\3\4\5\4&\n") buf.write("\4\3\4\3\4\3\4\7\4+\n\4\f\4\16\4.\13\4\3\4\3\4\3\4\3\4") - buf.write("\3\4\3\4\5\4\66\n\4\3\5\3\5\3\5\7\5;\n\5\f\5\16\5>\13") - buf.write("\5\3\6\3\6\3\6\3\6\3\6\3\6\3\6\7\6G\n\6\f\6\16\6J\13\6") - buf.write("\3\6\3\6\5\6N\n\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6") - buf.write("\3\6\3\6\3\6\3\6\3\6\5\6^\n\6\3\6\3\6\5\6b\n\6\3\7\3\7") - buf.write("\3\7\6\7g\n\7\r\7\16\7h\3\7\3\7\3\b\3\b\3\b\7\bp\n\b\f") - buf.write("\b\16\bs\13\b\3\b\3\b\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") - buf.write("\3\t\3\t\5\t\u0081\n\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") + buf.write("\3\4\3\4\3\4\5\4\67\n\4\3\5\3\5\3\5\7\5<\n\5\f\5\16\5") + buf.write("?\13\5\3\6\3\6\3\6\3\6\3\6\3\6\3\6\7\6H\n\6\f\6\16\6K") + buf.write("\13\6\3\6\3\6\5\6O\n\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6") + buf.write("\3\6\3\6\3\6\3\6\3\6\3\6\5\6_\n\6\3\6\3\6\5\6c\n\6\3\7") + buf.write("\3\7\3\7\6\7h\n\7\r\7\16\7i\3\7\3\7\3\b\3\b\3\b\7\bq\n") + buf.write("\b\f\b\16\bt\13\b\3\b\3\b\3\t\3\t\3\t\3\t\3\t\3\t\3\t") + buf.write("\3\t\3\t\3\t\5\t\u0082\n\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") buf.write("\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") - buf.write("\t\3\t\3\t\3\t\7\t\u00b7\n\t\f\t\16\t\u00ba\13\t\3\n\3") - buf.write("\n\3\n\3\n\3\n\3\n\3\n\3\n\7\n\u00c4\n\n\f\n\16\n\u00c7") - buf.write("\13\n\3\n\5\n\u00ca\n\n\3\n\3\n\5\n\u00ce\n\n\3\n\2\3") - buf.write("\20\13\2\4\6\b\n\f\16\20\22\2\t\3\2\7\21\4\2\13\f##\3") - buf.write("\2\b\n\3\2\13\f\3\2\r\16\3\2&+\3\2\61\62\2\u00f0\2\27") - buf.write("\3\2\2\2\4 \3\2\2\2\6\65\3\2\2\2\b\67\3\2\2\2\na\3\2\2") - buf.write("\2\fc\3\2\2\2\16q\3\2\2\2\20\u0080\3\2\2\2\22\u00cd\3") - buf.write("\2\2\2\24\26\5\4\3\2\25\24\3\2\2\2\26\31\3\2\2\2\27\25") - buf.write("\3\2\2\2\27\30\3\2\2\2\30\32\3\2\2\2\31\27\3\2\2\2\32") - buf.write("\33\7\2\2\3\33\3\3\2\2\2\34\35\5\6\4\2\35\36\7\3\2\2\36") - buf.write("!\3\2\2\2\37!\5\n\6\2 \34\3\2\2\2 \37\3\2\2\2!\5\3\2\2") - buf.write("\2\"\66\7\4\2\2#%\7\5\2\2$&\5\16\b\2%$\3\2\2\2%&\3\2\2") - buf.write("\2&\66\3\2\2\2\'(\5\b\5\2()\7\6\2\2)+\3\2\2\2*\'\3\2\2") - buf.write("\2+.\3\2\2\2,*\3\2\2\2,-\3\2\2\2-/\3\2\2\2.,\3\2\2\2/") - buf.write("\66\5\16\b\2\60\61\5\20\t\2\61\62\t\2\2\2\62\63\7\6\2") - buf.write("\2\63\64\5\20\t\2\64\66\3\2\2\2\65\"\3\2\2\2\65#\3\2\2") - buf.write("\2\65,\3\2\2\2\65\60\3\2\2\2\66\7\3\2\2\2\67<\5\20\t\2") - buf.write("89\7\22\2\29;\5\20\t\2:8\3\2\2\2;>\3\2\2\2<:\3\2\2\2<") - buf.write("=\3\2\2\2=\t\3\2\2\2><\3\2\2\2?@\7\23\2\2@A\5\20\t\2A") - buf.write("H\5\f\7\2BC\7\24\2\2CD\5\20\t\2DE\5\f\7\2EG\3\2\2\2FB") - buf.write("\3\2\2\2GJ\3\2\2\2HF\3\2\2\2HI\3\2\2\2IM\3\2\2\2JH\3\2") - buf.write("\2\2KL\7\25\2\2LN\5\f\7\2MK\3\2\2\2MN\3\2\2\2Nb\3\2\2") - buf.write("\2OP\7\26\2\2PQ\5\20\t\2QR\5\f\7\2Rb\3\2\2\2ST\7\27\2") - buf.write("\2TU\5\20\t\2UV\5\f\7\2Vb\3\2\2\2WX\7\30\2\2XY\5\16\b") - buf.write("\2YZ\7\31\2\2Z]\5\16\b\2[\\\7\32\2\2\\^\5\16\b\2][\3\2") - buf.write("\2\2]^\3\2\2\2^_\3\2\2\2_`\5\f\7\2`b\3\2\2\2a?\3\2\2\2") - buf.write("aO\3\2\2\2aS\3\2\2\2aW\3\2\2\2b\13\3\2\2\2cd\7\33\2\2") - buf.write("df\7\34\2\2eg\5\4\3\2fe\3\2\2\2gh\3\2\2\2hf\3\2\2\2hi") - buf.write("\3\2\2\2ij\3\2\2\2jk\7\35\2\2k\r\3\2\2\2lm\5\20\t\2mn") - buf.write("\7\22\2\2np\3\2\2\2ol\3\2\2\2ps\3\2\2\2qo\3\2\2\2qr\3") - buf.write("\2\2\2rt\3\2\2\2sq\3\2\2\2tu\5\20\t\2u\17\3\2\2\2vw\b") - buf.write("\t\1\2w\u0081\5\22\n\2xy\7\36\2\2yz\5\16\b\2z{\7\37\2") - buf.write("\2{\u0081\3\2\2\2|}\t\3\2\2}\u0081\5\20\t\21~\177\7,\2") - buf.write("\2\177\u0081\5\20\t\6\u0080v\3\2\2\2\u0080x\3\2\2\2\u0080") - buf.write("|\3\2\2\2\u0080~\3\2\2\2\u0081\u00b8\3\2\2\2\u0082\u0083") - buf.write("\f\22\2\2\u0083\u0084\7\7\2\2\u0084\u00b7\5\20\t\22\u0085") - buf.write("\u0086\f\20\2\2\u0086\u0087\t\4\2\2\u0087\u00b7\5\20\t") - buf.write("\21\u0088\u0089\f\17\2\2\u0089\u008a\t\5\2\2\u008a\u00b7") - buf.write("\5\20\t\20\u008b\u008c\f\16\2\2\u008c\u008d\t\6\2\2\u008d") - buf.write("\u00b7\5\20\t\17\u008e\u008f\f\r\2\2\u008f\u0090\7\17") - buf.write("\2\2\u0090\u00b7\5\20\t\16\u0091\u0092\f\f\2\2\u0092\u0093") - buf.write("\7\20\2\2\u0093\u00b7\5\20\t\r\u0094\u0095\f\13\2\2\u0095") - buf.write("\u0096\7\21\2\2\u0096\u00b7\5\20\t\f\u0097\u0098\f\n\2") - buf.write("\2\u0098\u0099\7$\2\2\u0099\u00b7\5\20\t\13\u009a\u009b") - buf.write("\f\t\2\2\u009b\u009c\7%\2\2\u009c\u00b7\5\20\t\n\u009d") - buf.write("\u009e\f\7\2\2\u009e\u009f\t\7\2\2\u009f\u00b7\5\20\t") - buf.write("\7\u00a0\u00a1\f\5\2\2\u00a1\u00a2\7-\2\2\u00a2\u00b7") - buf.write("\5\20\t\5\u00a3\u00a4\f\4\2\2\u00a4\u00a5\7.\2\2\u00a5") - buf.write("\u00b7\5\20\t\4\u00a6\u00a7\f\3\2\2\u00a7\u00a8\7/\2\2") - buf.write("\u00a8\u00a9\5\20\t\2\u00a9\u00aa\7\60\2\2\u00aa\u00ab") - buf.write("\5\20\t\3\u00ab\u00b7\3\2\2\2\u00ac\u00ad\f\24\2\2\u00ad") - buf.write("\u00ae\7 \2\2\u00ae\u00af\5\20\t\2\u00af\u00b0\7!\2\2") - buf.write("\u00b0\u00b7\3\2\2\2\u00b1\u00b2\f\23\2\2\u00b2\u00b3") - buf.write("\7\"\2\2\u00b3\u00b7\7\66\2\2\u00b4\u00b5\f\b\2\2\u00b5") - buf.write("\u00b7\7%\2\2\u00b6\u0082\3\2\2\2\u00b6\u0085\3\2\2\2") - buf.write("\u00b6\u0088\3\2\2\2\u00b6\u008b\3\2\2\2\u00b6\u008e\3") - buf.write("\2\2\2\u00b6\u0091\3\2\2\2\u00b6\u0094\3\2\2\2\u00b6\u0097") - buf.write("\3\2\2\2\u00b6\u009a\3\2\2\2\u00b6\u009d\3\2\2\2\u00b6") - buf.write("\u00a0\3\2\2\2\u00b6\u00a3\3\2\2\2\u00b6\u00a6\3\2\2\2") - buf.write("\u00b6\u00ac\3\2\2\2\u00b6\u00b1\3\2\2\2\u00b6\u00b4\3") - buf.write("\2\2\2\u00b7\u00ba\3\2\2\2\u00b8\u00b6\3\2\2\2\u00b8\u00b9") - buf.write("\3\2\2\2\u00b9\21\3\2\2\2\u00ba\u00b8\3\2\2\2\u00bb\u00ce") - buf.write("\7\63\2\2\u00bc\u00ce\t\b\2\2\u00bd\u00ce\7\64\2\2\u00be") - buf.write("\u00ce\7\65\2\2\u00bf\u00c5\7 \2\2\u00c0\u00c1\5\20\t") - buf.write("\2\u00c1\u00c2\7\22\2\2\u00c2\u00c4\3\2\2\2\u00c3\u00c0") - buf.write("\3\2\2\2\u00c4\u00c7\3\2\2\2\u00c5\u00c3\3\2\2\2\u00c5") - buf.write("\u00c6\3\2\2\2\u00c6\u00c9\3\2\2\2\u00c7\u00c5\3\2\2\2") - buf.write("\u00c8\u00ca\5\20\t\2\u00c9\u00c8\3\2\2\2\u00c9\u00ca") - buf.write("\3\2\2\2\u00ca\u00cb\3\2\2\2\u00cb\u00ce\7!\2\2\u00cc") - buf.write("\u00ce\7\66\2\2\u00cd\u00bb\3\2\2\2\u00cd\u00bc\3\2\2") - buf.write("\2\u00cd\u00bd\3\2\2\2\u00cd\u00be\3\2\2\2\u00cd\u00bf") - buf.write("\3\2\2\2\u00cd\u00cc\3\2\2\2\u00ce\23\3\2\2\2\24\27 %") - buf.write(",\65\3\2\2\2") + buf.write(">\t\3\2\2\2?=\3\2\2\2@A\7\25\2\2AB\5\20\t\2BI\5\f\7\2") + buf.write("CD\7\26\2\2DE\5\20\t\2EF\5\f\7\2FH\3\2\2\2GC\3\2\2\2H") + buf.write("K\3\2\2\2IG\3\2\2\2IJ\3\2\2\2JN\3\2\2\2KI\3\2\2\2LM\7") + buf.write("\27\2\2MO\5\f\7\2NL\3\2\2\2NO\3\2\2\2Oc\3\2\2\2PQ\7\30") + buf.write("\2\2QR\5\20\t\2RS\5\f\7\2Sc\3\2\2\2TU\7\31\2\2UV\5\20") + buf.write("\t\2VW\5\f\7\2Wc\3\2\2\2XY\7\32\2\2YZ\5\16\b\2Z[\7\33") + buf.write("\2\2[^\5\16\b\2\\]\7\34\2\2]_\5\16\b\2^\\\3\2\2\2^_\3") + buf.write("\2\2\2_`\3\2\2\2`a\5\f\7\2ac\3\2\2\2b@\3\2\2\2bP\3\2\2") + buf.write("\2bT\3\2\2\2bX\3\2\2\2c\13\3\2\2\2de\7\35\2\2eg\7\36\2") + buf.write("\2fh\5\4\3\2gf\3\2\2\2hi\3\2\2\2ig\3\2\2\2ij\3\2\2\2j") + buf.write("k\3\2\2\2kl\7\37\2\2l\r\3\2\2\2mn\5\20\t\2no\7\24\2\2") + buf.write("oq\3\2\2\2pm\3\2\2\2qt\3\2\2\2rp\3\2\2\2rs\3\2\2\2su\3") + buf.write("\2\2\2tr\3\2\2\2uv\5\20\t\2v\17\3\2\2\2wx\b\t\1\2x\u0082") + buf.write("\5\22\n\2yz\7 \2\2z{\5\16\b\2{|\7!\2\2|\u0082\3\2\2\2") + buf.write("}~\t\4\2\2~\u0082\5\20\t\21\177\u0080\7.\2\2\u0080\u0082") + buf.write("\5\20\t\6\u0081w\3\2\2\2\u0081y\3\2\2\2\u0081}\3\2\2\2") + buf.write("\u0081\177\3\2\2\2\u0082\u00b9\3\2\2\2\u0083\u0084\f\22") + buf.write("\2\2\u0084\u0085\7\7\2\2\u0085\u00b8\5\20\t\22\u0086\u0087") + buf.write("\f\20\2\2\u0087\u0088\t\5\2\2\u0088\u00b8\5\20\t\21\u0089") + buf.write("\u008a\f\17\2\2\u008a\u008b\t\6\2\2\u008b\u00b8\5\20\t") + buf.write("\20\u008c\u008d\f\16\2\2\u008d\u008e\t\7\2\2\u008e\u00b8") + buf.write("\5\20\t\17\u008f\u0090\f\r\2\2\u0090\u0091\7\17\2\2\u0091") + buf.write("\u00b8\5\20\t\16\u0092\u0093\f\f\2\2\u0093\u0094\7\20") + buf.write("\2\2\u0094\u00b8\5\20\t\r\u0095\u0096\f\13\2\2\u0096\u0097") + buf.write("\7\21\2\2\u0097\u00b8\5\20\t\f\u0098\u0099\f\n\2\2\u0099") + buf.write("\u009a\7&\2\2\u009a\u00b8\5\20\t\13\u009b\u009c\f\t\2") + buf.write("\2\u009c\u009d\7\'\2\2\u009d\u00b8\5\20\t\n\u009e\u009f") + buf.write("\f\7\2\2\u009f\u00a0\t\b\2\2\u00a0\u00b8\5\20\t\7\u00a1") + buf.write("\u00a2\f\5\2\2\u00a2\u00a3\7/\2\2\u00a3\u00b8\5\20\t\5") + buf.write("\u00a4\u00a5\f\4\2\2\u00a5\u00a6\7\60\2\2\u00a6\u00b8") + buf.write("\5\20\t\4\u00a7\u00a8\f\3\2\2\u00a8\u00a9\7\61\2\2\u00a9") + buf.write("\u00aa\5\20\t\2\u00aa\u00ab\7\62\2\2\u00ab\u00ac\5\20") + buf.write("\t\3\u00ac\u00b8\3\2\2\2\u00ad\u00ae\f\24\2\2\u00ae\u00af") + buf.write("\7\"\2\2\u00af\u00b0\5\20\t\2\u00b0\u00b1\7#\2\2\u00b1") + buf.write("\u00b8\3\2\2\2\u00b2\u00b3\f\23\2\2\u00b3\u00b4\7$\2\2") + buf.write("\u00b4\u00b8\78\2\2\u00b5\u00b6\f\b\2\2\u00b6\u00b8\7") + buf.write("\'\2\2\u00b7\u0083\3\2\2\2\u00b7\u0086\3\2\2\2\u00b7\u0089") + buf.write("\3\2\2\2\u00b7\u008c\3\2\2\2\u00b7\u008f\3\2\2\2\u00b7") + buf.write("\u0092\3\2\2\2\u00b7\u0095\3\2\2\2\u00b7\u0098\3\2\2\2") + buf.write("\u00b7\u009b\3\2\2\2\u00b7\u009e\3\2\2\2\u00b7\u00a1\3") + buf.write("\2\2\2\u00b7\u00a4\3\2\2\2\u00b7\u00a7\3\2\2\2\u00b7\u00ad") + buf.write("\3\2\2\2\u00b7\u00b2\3\2\2\2\u00b7\u00b5\3\2\2\2\u00b8") + buf.write("\u00bb\3\2\2\2\u00b9\u00b7\3\2\2\2\u00b9\u00ba\3\2\2\2") + buf.write("\u00ba\21\3\2\2\2\u00bb\u00b9\3\2\2\2\u00bc\u00cf\7\65") + buf.write("\2\2\u00bd\u00cf\t\t\2\2\u00be\u00cf\7\66\2\2\u00bf\u00cf") + buf.write("\7\67\2\2\u00c0\u00c6\7\"\2\2\u00c1\u00c2\5\20\t\2\u00c2") + buf.write("\u00c3\7\24\2\2\u00c3\u00c5\3\2\2\2\u00c4\u00c1\3\2\2") + buf.write("\2\u00c5\u00c8\3\2\2\2\u00c6\u00c4\3\2\2\2\u00c6\u00c7") + buf.write("\3\2\2\2\u00c7\u00ca\3\2\2\2\u00c8\u00c6\3\2\2\2\u00c9") + buf.write("\u00cb\5\20\t\2\u00ca\u00c9\3\2\2\2\u00ca\u00cb\3\2\2") + buf.write("\2\u00cb\u00cc\3\2\2\2\u00cc\u00cf\7#\2\2\u00cd\u00cf") + buf.write("\78\2\2\u00ce\u00bc\3\2\2\2\u00ce\u00bd\3\2\2\2\u00ce") + buf.write("\u00be\3\2\2\2\u00ce\u00bf\3\2\2\2\u00ce\u00c0\3\2\2\2") + buf.write("\u00ce\u00cd\3\2\2\2\u00cf\23\3\2\2\2\24\27 %,\66=IN^") + buf.write("bir\u0081\u00b7\u00b9\u00c6\u00ca\u00ce") return buf.getvalue() @@ -111,12 +112,12 @@ class PyxellParser ( Parser ): literalNames = [ "", "';'", "'skip'", "'print'", "'='", "'^'", "'*'", "'/'", "'%'", "'+'", "'-'", "'<<'", "'>>'", - "'&'", "'$'", "'|'", "','", "'if'", "'elif'", "'else'", - "'while'", "'until'", "'for'", "'in'", "'step'", "'do'", - "'{'", "'}'", "'('", "')'", "'['", "']'", "'.'", "'~'", - "'..'", "'...'", "'=='", "'!='", "'<'", "'<='", "'>'", - "'>='", "'not'", "'and'", "'or'", "'?'", "':'", "'true'", - "'false'" ] + "'&'", "'$'", "'|'", "'continue'", "'break'", "','", + "'if'", "'elif'", "'else'", "'while'", "'until'", "'for'", + "'in'", "'step'", "'do'", "'{'", "'}'", "'('", "')'", + "'['", "']'", "'.'", "'~'", "'..'", "'...'", "'=='", + "'!='", "'<'", "'<='", "'>'", "'>='", "'not'", "'and'", + "'or'", "'?'", "':'", "'true'", "'false'" ] symbolicNames = [ "", "", "", "", "", "", "", "", @@ -130,8 +131,8 @@ class PyxellParser ( Parser ): "", "", "", "", "", "", "", "", "", "", "", "", - "", "INT", "CHAR", "STRING", "ID", "WS", - "ERR" ] + "", "", "", "INT", "CHAR", + "STRING", "ID", "WS", "ERR" ] RULE_program = 0 RULE_stmt = 1 @@ -195,12 +196,14 @@ class PyxellParser ( Parser ): T__45=46 T__46=47 T__47=48 - INT=49 - CHAR=50 - STRING=51 - ID=52 - WS=53 - ERR=54 + T__48=49 + T__49=50 + INT=51 + CHAR=52 + STRING=53 + ID=54 + WS=55 + ERR=56 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -249,7 +252,7 @@ def program(self): self.state = 21 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__46) | (1 << PyxellParser.T__47) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__18) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__31) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__49) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): self.state = 18 self.stmt() self.state = 23 @@ -301,14 +304,14 @@ def stmt(self): self.state = 30 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__27, PyxellParser.T__29, PyxellParser.T__32, PyxellParser.T__41, PyxellParser.T__46, PyxellParser.T__47, PyxellParser.INT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: + if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__15, PyxellParser.T__16, PyxellParser.T__29, PyxellParser.T__31, PyxellParser.T__34, PyxellParser.T__43, PyxellParser.T__48, PyxellParser.T__49, PyxellParser.INT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: self.enterOuterAlt(localctx, 1) self.state = 26 self.simple_stmt() self.state = 27 self.match(PyxellParser.T__0) pass - elif token in [PyxellParser.T__16, PyxellParser.T__19, PyxellParser.T__20, PyxellParser.T__21]: + elif token in [PyxellParser.T__18, PyxellParser.T__21, PyxellParser.T__22, PyxellParser.T__23]: self.enterOuterAlt(localctx, 2) self.state = 29 self.compound_stmt() @@ -399,6 +402,21 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) + class StmtLoopControlContext(Simple_stmtContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Simple_stmtContext + super().__init__(parser) + self.s = None # Token + self.copyFrom(ctx) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStmtLoopControl" ): + return visitor.visitStmtLoopControl(self) + else: + return visitor.visitChildren(self) + + class StmtPrintContext(Simple_stmtContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Simple_stmtContext @@ -423,7 +441,7 @@ def simple_stmt(self): self.enterRule(localctx, 4, self.RULE_simple_stmt) self._la = 0 # Token type try: - self.state = 51 + self.state = 52 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,4,self._ctx) if la_ == 1: @@ -441,7 +459,7 @@ def simple_stmt(self): self.state = 35 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__46) | (1 << PyxellParser.T__47) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__31) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__49) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): self.state = 34 self.tuple_expr() @@ -487,6 +505,19 @@ def simple_stmt(self): self.expr(0) pass + elif la_ == 5: + localctx = PyxellParser.StmtLoopControlContext(self, localctx) + self.enterOuterAlt(localctx, 5) + self.state = 51 + localctx.s = self._input.LT(1) + _la = self._input.LA(1) + if not(_la==PyxellParser.T__15 or _la==PyxellParser.T__16): + localctx.s = self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + pass + except RecognitionException as re: localctx.exception = re @@ -529,17 +560,17 @@ def lvalue(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 53 + self.state = 54 self.expr(0) - self.state = 58 + self.state = 59 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==PyxellParser.T__15: - self.state = 54 - self.match(PyxellParser.T__15) + while _la==PyxellParser.T__17: self.state = 55 + self.match(PyxellParser.T__17) + self.state = 56 self.expr(0) - self.state = 60 + self.state = 61 self._errHandler.sync(self) _la = self._input.LA(1) @@ -665,85 +696,85 @@ def compound_stmt(self): self.enterRule(localctx, 8, self.RULE_compound_stmt) self._la = 0 # Token type try: - self.state = 95 + self.state = 96 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__16]: + if token in [PyxellParser.T__18]: localctx = PyxellParser.StmtIfContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 61 - self.match(PyxellParser.T__16) self.state = 62 - self.expr(0) + self.match(PyxellParser.T__18) self.state = 63 + self.expr(0) + self.state = 64 self.block() - self.state = 70 + self.state = 71 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==PyxellParser.T__17: - self.state = 64 - self.match(PyxellParser.T__17) + while _la==PyxellParser.T__19: self.state = 65 - self.expr(0) + self.match(PyxellParser.T__19) self.state = 66 + self.expr(0) + self.state = 67 self.block() - self.state = 72 + self.state = 73 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 75 + self.state = 76 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__18: - self.state = 73 - self.match(PyxellParser.T__18) + if _la==PyxellParser.T__20: self.state = 74 + self.match(PyxellParser.T__20) + self.state = 75 self.block() pass - elif token in [PyxellParser.T__19]: + elif token in [PyxellParser.T__21]: localctx = PyxellParser.StmtWhileContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 77 - self.match(PyxellParser.T__19) self.state = 78 - self.expr(0) + self.match(PyxellParser.T__21) self.state = 79 + self.expr(0) + self.state = 80 self.block() pass - elif token in [PyxellParser.T__20]: + elif token in [PyxellParser.T__22]: localctx = PyxellParser.StmtUntilContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 81 - self.match(PyxellParser.T__20) self.state = 82 - self.expr(0) + self.match(PyxellParser.T__22) self.state = 83 + self.expr(0) + self.state = 84 self.block() pass - elif token in [PyxellParser.T__21]: + elif token in [PyxellParser.T__23]: localctx = PyxellParser.StmtForContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 85 - self.match(PyxellParser.T__21) self.state = 86 - self.tuple_expr() + self.match(PyxellParser.T__23) self.state = 87 - self.match(PyxellParser.T__22) + self.tuple_expr() self.state = 88 + self.match(PyxellParser.T__24) + self.state = 89 self.tuple_expr() - self.state = 91 + self.state = 92 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__23: - self.state = 89 - self.match(PyxellParser.T__23) + if _la==PyxellParser.T__25: self.state = 90 + self.match(PyxellParser.T__25) + self.state = 91 localctx.step = self.tuple_expr() - self.state = 93 + self.state = 94 self.block() pass else: @@ -790,24 +821,24 @@ def block(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 97 - self.match(PyxellParser.T__24) self.state = 98 - self.match(PyxellParser.T__25) - self.state = 100 + self.match(PyxellParser.T__26) + self.state = 99 + self.match(PyxellParser.T__27) + self.state = 101 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 99 + self.state = 100 self.stmt() - self.state = 102 + self.state = 103 self._errHandler.sync(self) _la = self._input.LA(1) - if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__46) | (1 << PyxellParser.T__47) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0)): + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__18) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__31) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__49) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0)): break - self.state = 104 - self.match(PyxellParser.T__26) + self.state = 105 + self.match(PyxellParser.T__28) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -861,20 +892,20 @@ def tuple_expr(self): try: localctx = PyxellParser.ExprTupleContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 111 + self.state = 112 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,11,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 106 - self.expr(0) self.state = 107 - self.match(PyxellParser.T__15) - self.state = 113 + self.expr(0) + self.state = 108 + self.match(PyxellParser.T__17) + self.state = 114 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,11,self._ctx) - self.state = 114 + self.state = 115 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -1106,57 +1137,57 @@ def expr(self, _p:int=0): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 126 + self.state = 127 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__29, PyxellParser.T__46, PyxellParser.T__47, PyxellParser.INT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: + if token in [PyxellParser.T__31, PyxellParser.T__48, PyxellParser.T__49, PyxellParser.INT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: localctx = PyxellParser.ExprAtomContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 117 + self.state = 118 self.atom() pass - elif token in [PyxellParser.T__27]: + elif token in [PyxellParser.T__29]: localctx = PyxellParser.ExprParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 118 - self.match(PyxellParser.T__27) self.state = 119 - self.tuple_expr() + self.match(PyxellParser.T__29) self.state = 120 - self.match(PyxellParser.T__28) + self.tuple_expr() + self.state = 121 + self.match(PyxellParser.T__30) pass - elif token in [PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__32]: + elif token in [PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__34]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 122 + self.state = 123 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__32))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__34))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 123 + self.state = 124 self.expr(15) pass - elif token in [PyxellParser.T__41]: + elif token in [PyxellParser.T__43]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 124 - localctx.op = self.match(PyxellParser.T__41) self.state = 125 + localctx.op = self.match(PyxellParser.T__43) + self.state = 126 self.expr(4) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 182 + self.state = 183 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,14,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: @@ -1164,30 +1195,30 @@ def expr(self, _p:int=0): if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 180 + self.state = 181 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,13,self._ctx) if la_ == 1: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 128 + self.state = 129 if not self.precpred(self._ctx, 16): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 16)") - self.state = 129 - localctx.op = self.match(PyxellParser.T__4) self.state = 130 + localctx.op = self.match(PyxellParser.T__4) + self.state = 131 self.expr(16) pass elif la_ == 2: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 131 + self.state = 132 if not self.precpred(self._ctx, 14): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 14)") - self.state = 132 + self.state = 133 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__7))) != 0)): @@ -1195,18 +1226,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 133 + self.state = 134 self.expr(15) pass elif la_ == 3: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 134 + self.state = 135 if not self.precpred(self._ctx, 13): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") - self.state = 135 + self.state = 136 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__8 or _la==PyxellParser.T__9): @@ -1214,18 +1245,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 136 + self.state = 137 self.expr(14) pass elif la_ == 4: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 137 + self.state = 138 if not self.precpred(self._ctx, 12): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 12)") - self.state = 138 + self.state = 139 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__10 or _la==PyxellParser.T__11): @@ -1233,178 +1264,178 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 139 + self.state = 140 self.expr(13) pass elif la_ == 5: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 140 + self.state = 141 if not self.precpred(self._ctx, 11): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") - self.state = 141 - localctx.op = self.match(PyxellParser.T__12) self.state = 142 + localctx.op = self.match(PyxellParser.T__12) + self.state = 143 self.expr(12) pass elif la_ == 6: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 143 + self.state = 144 if not self.precpred(self._ctx, 10): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") - self.state = 144 - localctx.op = self.match(PyxellParser.T__13) self.state = 145 + localctx.op = self.match(PyxellParser.T__13) + self.state = 146 self.expr(11) pass elif la_ == 7: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 146 + self.state = 147 if not self.precpred(self._ctx, 9): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") - self.state = 147 - localctx.op = self.match(PyxellParser.T__14) self.state = 148 + localctx.op = self.match(PyxellParser.T__14) + self.state = 149 self.expr(10) pass elif la_ == 8: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 149 + self.state = 150 if not self.precpred(self._ctx, 8): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") - self.state = 150 - localctx.dots = self.match(PyxellParser.T__33) self.state = 151 + localctx.dots = self.match(PyxellParser.T__35) + self.state = 152 self.expr(9) pass elif la_ == 9: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 152 + self.state = 153 if not self.precpred(self._ctx, 7): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") - self.state = 153 - localctx.dots = self.match(PyxellParser.T__34) self.state = 154 + localctx.dots = self.match(PyxellParser.T__36) + self.state = 155 self.expr(8) pass elif la_ == 10: localctx = PyxellParser.ExprCmpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 155 + self.state = 156 if not self.precpred(self._ctx, 5): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") - self.state = 156 + self.state = 157 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__35) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__37) | (1 << PyxellParser.T__38) | (1 << PyxellParser.T__39) | (1 << PyxellParser.T__40))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__37) | (1 << PyxellParser.T__38) | (1 << PyxellParser.T__39) | (1 << PyxellParser.T__40) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__42))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 157 + self.state = 158 self.expr(5) pass elif la_ == 11: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 158 + self.state = 159 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 159 - localctx.op = self.match(PyxellParser.T__42) self.state = 160 + localctx.op = self.match(PyxellParser.T__44) + self.state = 161 self.expr(3) pass elif la_ == 12: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 161 + self.state = 162 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 162 - localctx.op = self.match(PyxellParser.T__43) self.state = 163 + localctx.op = self.match(PyxellParser.T__45) + self.state = 164 self.expr(2) pass elif la_ == 13: localctx = PyxellParser.ExprCondContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 164 + self.state = 165 if not self.precpred(self._ctx, 1): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") - self.state = 165 - self.match(PyxellParser.T__44) self.state = 166 - self.expr(0) + self.match(PyxellParser.T__46) self.state = 167 - self.match(PyxellParser.T__45) + self.expr(0) self.state = 168 + self.match(PyxellParser.T__47) + self.state = 169 self.expr(1) pass elif la_ == 14: localctx = PyxellParser.ExprIndexContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 170 + self.state = 171 if not self.precpred(self._ctx, 18): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 18)") - self.state = 171 - self.match(PyxellParser.T__29) self.state = 172 - self.expr(0) + self.match(PyxellParser.T__31) self.state = 173 - self.match(PyxellParser.T__30) + self.expr(0) + self.state = 174 + self.match(PyxellParser.T__32) pass elif la_ == 15: localctx = PyxellParser.ExprAttrContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 175 + self.state = 176 if not self.precpred(self._ctx, 17): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 17)") - self.state = 176 - self.match(PyxellParser.T__31) self.state = 177 + self.match(PyxellParser.T__33) + self.state = 178 self.match(PyxellParser.ID) pass elif la_ == 16: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 178 + self.state = 179 if not self.precpred(self._ctx, 6): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") - self.state = 179 - localctx.dots = self.match(PyxellParser.T__34) + self.state = 180 + localctx.dots = self.match(PyxellParser.T__36) pass - self.state = 184 + self.state = 185 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,14,self._ctx) @@ -1538,21 +1569,21 @@ def atom(self): self.enterRule(localctx, 16, self.RULE_atom) self._la = 0 # Token type try: - self.state = 203 + self.state = 204 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: localctx = PyxellParser.AtomIntContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 185 + self.state = 186 self.match(PyxellParser.INT) pass - elif token in [PyxellParser.T__46, PyxellParser.T__47]: + elif token in [PyxellParser.T__48, PyxellParser.T__49]: localctx = PyxellParser.AtomBoolContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 186 + self.state = 187 _la = self._input.LA(1) - if not(_la==PyxellParser.T__46 or _la==PyxellParser.T__47): + if not(_la==PyxellParser.T__48 or _la==PyxellParser.T__49): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -1561,48 +1592,48 @@ def atom(self): elif token in [PyxellParser.CHAR]: localctx = PyxellParser.AtomCharContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 187 + self.state = 188 self.match(PyxellParser.CHAR) pass elif token in [PyxellParser.STRING]: localctx = PyxellParser.AtomStringContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 188 + self.state = 189 self.match(PyxellParser.STRING) pass - elif token in [PyxellParser.T__29]: + elif token in [PyxellParser.T__31]: localctx = PyxellParser.AtomArrayContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 189 - self.match(PyxellParser.T__29) - self.state = 195 + self.state = 190 + self.match(PyxellParser.T__31) + self.state = 196 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,15,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 190 - self.expr(0) self.state = 191 - self.match(PyxellParser.T__15) - self.state = 197 + self.expr(0) + self.state = 192 + self.match(PyxellParser.T__17) + self.state = 198 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,15,self._ctx) - self.state = 199 + self.state = 200 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__46) | (1 << PyxellParser.T__47) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): - self.state = 198 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__31) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__49) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): + self.state = 199 self.expr(0) - self.state = 201 - self.match(PyxellParser.T__30) + self.state = 202 + self.match(PyxellParser.T__32) pass elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) self.enterOuterAlt(localctx, 6) - self.state = 202 + self.state = 203 self.match(PyxellParser.ID) pass else: diff --git a/src/antlr/PyxellVisitor.py b/src/antlr/PyxellVisitor.py index 9b2c1cc1..ba3c69ac 100644 --- a/src/antlr/PyxellVisitor.py +++ b/src/antlr/PyxellVisitor.py @@ -39,6 +39,11 @@ def visitStmtAssgExpr(self, ctx:PyxellParser.StmtAssgExprContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#StmtLoopControl. + def visitStmtLoopControl(self, ctx:PyxellParser.StmtLoopControlContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#lvalue. def visitLvalue(self, ctx:PyxellParser.LvalueContext): return self.visitChildren(ctx) diff --git a/src/compiler.py b/src/compiler.py index 3ab70fec..5be4a308 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -236,7 +236,7 @@ def visitStmtIf(self, ctx): exprs = ctx.expr() blocks = ctx.block() - bbend = ll.Block(self.builder.function) + label_end = ll.Block(self.builder.function) def emitIfElse(index): if len(exprs) == index: @@ -248,58 +248,65 @@ def emitIfElse(index): expr = exprs[index] cond = self.cast(expr, self.visit(expr), tBool) - bbif = self.builder.append_basic_block() - bbelse = self.builder.append_basic_block() - self.builder.cbranch(cond, bbif, bbelse) + label_if = self.builder.append_basic_block() + label_else = self.builder.append_basic_block() + self.builder.cbranch(cond, label_if, label_else) - with self.builder._branch_helper(bbif, bbend): + with self.builder._branch_helper(label_if, label_end): with self.local(): self.visit(blocks[index]) - with self.builder._branch_helper(bbelse, bbend): + with self.builder._branch_helper(label_else, label_end): emitIfElse(index+1) emitIfElse(0) - self.builder.function.blocks.append(bbend) - self.builder.position_at_end(bbend) + self.builder.function.blocks.append(label_end) + self.builder.position_at_end(label_end) def visitStmtWhile(self, ctx): - bbstart = self.builder.append_basic_block() - self.builder.branch(bbstart) - self.builder.position_at_end(bbstart) + label_start = self.builder.append_basic_block() + self.builder.branch(label_start) + self.builder.position_at_end(label_start) + label_end = ll.Block(self.builder.function) expr = ctx.expr() cond = self.cast(expr, self.visit(expr), tBool) - bbwhile = self.builder.append_basic_block() - bbend = ll.Block(self.builder.function) - self.builder.cbranch(cond, bbwhile, bbend) + label_while = self.builder.append_basic_block() + self.builder.cbranch(cond, label_while, label_end) + self.builder.position_at_end(label_while) - self.builder.position_at_end(bbwhile) with self.local(): + self.env['#continue'] = label_start + self.env['#break'] = label_end + self.visit(ctx.block()) - self.builder.branch(bbstart) - self.builder.function.blocks.append(bbend) - self.builder.position_at_end(bbend) + self.builder.branch(label_start) + + self.builder.function.blocks.append(label_end) + self.builder.position_at_end(label_end) def visitStmtUntil(self, ctx): - bbuntil = self.builder.append_basic_block() - self.builder.branch(bbuntil) - bbend = ll.Block(self.builder.function) + label_start = self.builder.append_basic_block() + self.builder.branch(label_start) + self.builder.position_at_end(label_start) + label_end = ll.Block(self.builder.function) - self.builder.position_at_end(bbuntil) with self.local(): + self.env['#continue'] = label_start + self.env['#break'] = label_end + self.visit(ctx.block()) expr = ctx.expr() cond = self.cast(expr, self.visit(expr), tBool) - self.builder.cbranch(cond, bbend, bbuntil) + self.builder.cbranch(cond, label_end, label_start) - self.builder.function.blocks.append(bbend) - self.builder.position_at_end(bbend) + self.builder.function.blocks.append(label_end) + self.builder.position_at_end(label_end) def visitStmtFor(self, ctx): exprs = ctx.tuple_expr() @@ -373,7 +380,8 @@ def prepare(iterable, step): # must be a function so that lambdas work properly label_start = self.builder.append_basic_block() self.builder.branch(label_start) - self.builder.position_at_end(label_start) + self.builder.position_at_end(label_start) + label_cont = ll.Block(self.builder.function) label_end = ll.Block(self.builder.function) for index, cond in zip(indices, conditions): @@ -383,6 +391,9 @@ def prepare(iterable, step): # must be a function so that lambdas work properly self.builder.position_at_end(label) with self.local(): + self.env['#continue'] = label_cont + self.env['#break'] = label_end + if len(vars) == 1 and len(types) > 1: tuple = self.tuple([getters[i](self.builder.load(index)) for i, index in enumerate(indices)]) self.assign(exprs[0], vars[0], tuple) @@ -398,6 +409,10 @@ def prepare(iterable, step): # must be a function so that lambdas work properly self.visit(ctx.block()) + self.builder.function.blocks.append(label_cont) + self.builder.branch(label_cont) + self.builder.position_at_end(label_cont) + for index, step, type in zip(indices, steps, types): value = self.builder.add(self.builder.load(index), step) self.builder.store(value, index) @@ -407,6 +422,15 @@ def prepare(iterable, step): # must be a function so that lambdas work properly self.builder.function.blocks.append(label_end) self.builder.position_at_end(label_end) + def visitStmtLoopControl(self, ctx): + stmt = ctx.s.text # 'break' / 'continue' + try: + label = self.env[f'#{stmt}'] + except KeyError: + self.throw(ctx, err.UnexpectedStatement(stmt)) + else: + self.builder.branch(label) + ### Expressions ### @@ -460,11 +484,11 @@ def visitExprCmp(self, ctx): values = [self.visit(exprs[0])] - bbstart = self.builder.basic_block - bbend = ll.Block(self.builder.function) - self.builder.position_at_end(bbend) + label_start = self.builder.basic_block + label_end = ll.Block(self.builder.function) + self.builder.position_at_end(label_end) phi = self.builder.phi(tBool) - self.builder.position_at_end(bbstart) + self.builder.position_at_end(label_start) def emitIf(index): values.append(self.visit(exprs[index+1])) @@ -472,20 +496,20 @@ def emitIf(index): if len(exprs) == index+2: phi.add_incoming(cond, self.builder.basic_block) - self.builder.branch(bbend) + self.builder.branch(label_end) return phi.add_incoming(vFalse, self.builder.basic_block) - bbif = self.builder.function.append_basic_block() - self.builder.cbranch(cond, bbif, bbend) + label_if = self.builder.function.append_basic_block() + self.builder.cbranch(cond, label_if, label_end) - with self.builder._branch_helper(bbif, bbend): + with self.builder._branch_helper(label_if, label_end): emitIf(index+1) emitIf(0) - self.builder.function.blocks.append(bbend) - self.builder.position_at_end(bbend) + self.builder.function.blocks.append(label_end) + self.builder.position_at_end(label_end) return phi diff --git a/src/errors.py b/src/errors.py index 5dafd799..66aa4e84 100644 --- a/src/errors.py +++ b/src/errors.py @@ -23,6 +23,7 @@ class PyxellError(Exception): NotLvalue = lambda: f"Expression cannot be assigned to" NotPrintable = lambda t: f"Variable of type `{t.show()}` cannot be printed" UndeclaredIdentifier = lambda id: f"Undeclared identifier `{id}`" + UnexpectedStatement = lambda s: f"Unexpected `{s}` statement" UnknownType = lambda: f"Cannot settle type of the expression" def __init__(self, msg, line, column=None): diff --git a/test/good/loops/break02.px b/test/good/loops/break02.px index fcd57503..415576bd 100644 --- a/test/good/loops/break02.px +++ b/test/good/loops/break02.px @@ -1,6 +1,7 @@ n = x = 0 for i in 1..10 do + j = 0 for j in 7..5 step -1 do if i % j == 0 do break diff --git a/test/good/loops/continue02.px b/test/good/loops/continue02.px index 372de305..6704a19f 100644 --- a/test/good/loops/continue02.px +++ b/test/good/loops/continue02.px @@ -1,5 +1,6 @@ s = 0 +i = 0 for i in 1..10 do if i % 2 == 0 do continue From 902eb01e0bce55791fea0363513c22f3d29907f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Mon, 14 Oct 2019 20:21:59 +0200 Subject: [PATCH 023/100] Printing arrays --- src/compiler.py | 41 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/src/compiler.py b/src/compiler.py index 5be4a308..eaae6ca5 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -148,21 +148,57 @@ def cmp(self, ctx, op, left, right): else: self.throw(ctx, err.NotComparable(left.type, right.type)) + def write(self, str): + for char in str: + self.builder.call(self.builtins['putchar'], [vChar(char)]) + def print(self, ctx, value): if value.type == tInt: self.builder.call(self.builtins['writeInt'], [value]) + elif value.type == tBool: self.builder.call(self.builtins['writeBool'], [value]) + elif value.type == tChar: self.builder.call(self.builtins['writeChar'], [value]) + elif value.type.isString(): self.builder.call(self.builtins['write'], [value]) + + elif value.type.isArray(): + self.write('[') + + length = self.builder.extract_value(value, [1]) + index = self.builder.alloca(tInt) + self.builder.store(vInt(0), index) + + label_start = self.builder.append_basic_block() + self.builder.branch(label_start) + self.builder.position_at_end(label_start) + label_end = ll.Block(self.builder.function) + + with self.builder.if_then(self.builder.icmp_signed('>', self.builder.load(index), vInt(0))): + self.write(', ') + + elem = self.builder.gep(self.builder.extract_value(value, [0]), [self.builder.load(index)]) + self.print(ctx, self.builder.load(elem)) + + self.builder.store(self.builder.add(self.builder.load(index), vInt(1)), index) + cond = self.builder.icmp_signed('<', self.builder.load(index), length) + self.builder.cbranch(cond, label_start, label_end) + + self.builder.function.blocks.append(label_end) + self.builder.position_at_end(label_end) + + self.write(']') + elif value.type.isTuple(): for i in range(len(value.type.elements)): if i > 0: - self.builder.call(self.builtins['putchar'], [vChar(' ')]) + self.write(' ') elem = self.builder.extract_value(value, [i]) self.print(ctx, elem) + else: self.throw(ctx, err.NotPrintable(value.type)) @@ -204,8 +240,7 @@ def visitStmtPrint(self, ctx): if expr: value = self.visit(expr) self.print(expr, value) - - self.builder.call(self.builtins['putchar'], [vChar('\n')]) + self.write('\n') def visitStmtAssg(self, ctx): value = self.visit(ctx.tuple_expr()) From c54eebf7530b9be4778dff9bf8ba376d5aebca86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Tue, 15 Oct 2019 22:10:49 +0200 Subject: [PATCH 024/100] Concatenating strings and arrays --- src/compiler.py | 122 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 85 insertions(+), 37 deletions(-) diff --git a/src/compiler.py b/src/compiler.py index eaae6ca5..1b58434e 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -16,6 +16,7 @@ def __init__(self): self.module = ll.Module() self.builtins = { 'malloc': ll.Function(self.module, tFunc([tInt], tPtr()), 'malloc'), + 'memcpy': ll.Function(self.module, tFunc([tPtr(), tPtr(), tInt]), 'memcpy'), 'write': ll.Function(self.module, tFunc([tString]), 'func.write'), 'writeInt': ll.Function(self.module, tFunc([tInt]), 'func.writeInt'), 'writeBool': ll.Function(self.module, tFunc([tBool]), 'func.writeBool'), @@ -85,6 +86,21 @@ def assign(self, ctx, expr, value): value = self.cast(ctx, value, ptr.type.pointee) self.builder.store(value, ptr) + def sizeof(self, type, length=vInt(1)): + return self.builder.ptrtoint(self.builder.gep(vNull(type), [length]), tInt) + + def malloc(self, type, length=vInt(1)): + size = self.sizeof(type, length) + ptr = self.builder.call(self.builtins['malloc'], [size]) + return self.builder.bitcast(ptr, tPtr(type)) + + def memcpy(self, dest, src, length): + type = dest.type + dest = self.builder.bitcast(dest, tPtr()) + src = self.builder.bitcast(src, tPtr()) + size = self.sizeof(type.pointee, length) + return self.builder.call(self.builtins['memcpy'], [dest, src, size]) + def unaryop(self, ctx, op, value): if op in ('+', '-', '~'): type = tInt @@ -102,40 +118,78 @@ def unaryop(self, ctx, op, value): return self.builder.not_(value) def binaryop(self, ctx, op, left, right): - if not left.type == right.type == tInt: - self.throw(ctx, err.NoBinaryOperator(op, left.type, right.type)) - if op == '^': - return self.builder.call(self.builtins['Int_pow'], [left, right]) + if left.type == right.type == tInt: + return self.builder.call(self.builtins['Int_pow'], [left, right]) + else: + self.throw(ctx, err.NoBinaryOperator(op, left.type, right.type)) + elif op == '/': - v1 = self.builder.sdiv(left, right) - v2 = self.builder.sub(v1, vInt(1)) - v3 = self.builder.xor(left, right) - v4 = self.builder.icmp_signed('<', v3, vInt(0)) - v5 = self.builder.select(v4, v2, v1) - v6 = self.builder.mul(v1, right) - v7 = self.builder.icmp_signed('!=', v6, left) - return self.builder.select(v7, v5, v1) + if left.type == right.type == tInt: + v1 = self.builder.sdiv(left, right) + v2 = self.builder.sub(v1, vInt(1)) + v3 = self.builder.xor(left, right) + v4 = self.builder.icmp_signed('<', v3, vInt(0)) + v5 = self.builder.select(v4, v2, v1) + v6 = self.builder.mul(v1, right) + v7 = self.builder.icmp_signed('!=', v6, left) + return self.builder.select(v7, v5, v1) + else: + self.throw(ctx, err.NoBinaryOperator(op, left.type, right.type)) + elif op == '%': - v1 = self.builder.srem(left, right) - v2 = self.builder.add(v1, right) - v3 = self.builder.xor(left, right) - v4 = self.builder.icmp_signed('<', v3, vInt(0)) - v5 = self.builder.select(v4, v2, v1) - v6 = self.builder.icmp_signed('==', v1, vInt(0)) - return self.builder.select(v6, v1, v5) + if left.type == right.type == tInt: + v1 = self.builder.srem(left, right) + v2 = self.builder.add(v1, right) + v3 = self.builder.xor(left, right) + v4 = self.builder.icmp_signed('<', v3, vInt(0)) + v5 = self.builder.select(v4, v2, v1) + v6 = self.builder.icmp_signed('==', v1, vInt(0)) + return self.builder.select(v6, v1, v5) + else: + self.throw(ctx, err.NoBinaryOperator(op, left.type, right.type)) + + elif op == '+': + if left.type == right.type == tInt: + return self.builder.add(left, right) + + elif left.type == right.type and (left.type == tString or left.type.isArray()): + type = left.type + subtype = type.subtype if type.isArray() else tChar + + length1 = self.builder.extract_value(left, [1]) + length2 = self.builder.extract_value(right, [1]) + length = self.builder.add(length1, length2) + + array1 = self.builder.extract_value(left, [0]) + array2 = self.builder.extract_value(right, [0]) + array = self.malloc(subtype, length) + + self.memcpy(array, array1, length1) + self.memcpy(self.builder.gep(array, [length1]), array2, length2) + + value = self.malloc(type) + self.builder.store(array, self.builder.gep(value, [vInt(0), vIndex(0)])) + self.builder.store(length, self.builder.gep(value, [vInt(0), vIndex(1)])) + return self.builder.load(value) + + else: + self.throw(ctx, err.NoBinaryOperator(op, left.type, right.type)) + else: - instruction = { - '*': self.builder.mul, - '+': self.builder.add, - '-': self.builder.sub, - '<<': self.builder.shl, - '>>': self.builder.ashr, - '&': self.builder.and_, - '$': self.builder.xor, - '|': self.builder.or_, - }[op] - return instruction(left, right) + if left.type == right.type == tInt: + instruction = { + '*': self.builder.mul, + '-': self.builder.sub, + '<<': self.builder.shl, + '>>': self.builder.ashr, + '&': self.builder.and_, + '$': self.builder.xor, + '|': self.builder.or_, + }[op] + return instruction(left, right) + else: + self.throw(ctx, err.NoBinaryOperator(op, left.type, right.type)) def cmp(self, ctx, op, left, right): if left.type != right.type: @@ -202,12 +256,6 @@ def print(self, ctx, value): else: self.throw(ctx, err.NotPrintable(value.type)) - def malloc(self, type, n=1): - size = self.builder.gep(vNull(type), [vIndex(n)]) - size = self.builder.ptrtoint(size, tInt) - ptr = self.builder.call(self.builtins['malloc'], [size]) - return self.builder.bitcast(ptr, tPtr(type)) - def tuple(self, values): if len(values) == 1: return values[0] @@ -633,7 +681,7 @@ def visitAtomArray(self, ctx): array = self.malloc(type) pointer = self.builder.gep(array, [vInt(0), vIndex(0)]) - memory = self.malloc(subtype, len(values)) + memory = self.malloc(subtype, vInt(len(values))) for i, value in enumerate(values): self.builder.store(value, self.builder.gep(memory, [vInt(i)])) self.builder.store(memory, pointer) From ef37b4f6993c36688b82879136303641525b0299 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Fri, 18 Oct 2019 21:51:03 +0200 Subject: [PATCH 025/100] Extending arrays and strings --- src/compiler.py | 50 ++++++++++++++++++++++++++++++++++++++++++++----- src/types.py | 10 ++++++---- 2 files changed, 51 insertions(+), 9 deletions(-) diff --git a/src/compiler.py b/src/compiler.py index 1b58434e..6c47e219 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -46,7 +46,7 @@ def get(self, ctx, id): def index(self, ctx, *exprs): collection, index = [self.visit(expr) for expr in exprs] - if collection.type.isString() or collection.type.isArray(): + if collection.type.isIndexable(): index = self.cast(exprs[1], index, tInt) length = self.builder.extract_value(collection, [1]) cmp = self.builder.icmp_signed('>=', index, vInt(0)) @@ -124,6 +124,47 @@ def binaryop(self, ctx, op, left, right): else: self.throw(ctx, err.NoBinaryOperator(op, left.type, right.type)) + elif op == '*': + if left.type == right.type == tInt: + return self.builder.mul(left, right) + + elif left.type.isIndexable() and right.type == tInt: + type = left.type + subtype = type.subtype + + src = self.builder.extract_value(left, [0]) + src_length = self.builder.extract_value(left, [1]) + length = self.builder.mul(src_length, right) + dest = self.malloc(subtype, length) + + index = self.builder.alloca(tInt) + self.builder.store(vInt(0), index) + + label_start = self.builder.append_basic_block() + self.builder.branch(label_start) + self.builder.position_at_end(label_start) + label_end = ll.Block(self.builder.function) + + self.memcpy(self.builder.gep(dest, [self.builder.load(index)]), src, src_length) + + self.builder.store(self.builder.add(self.builder.load(index), src_length), index) + cond = self.builder.icmp_signed('<', self.builder.load(index), length) + self.builder.cbranch(cond, label_start, label_end) + + self.builder.function.blocks.append(label_end) + self.builder.position_at_end(label_end) + + value = self.malloc(type) + self.builder.store(dest, self.builder.gep(value, [vInt(0), vIndex(0)])) + self.builder.store(length, self.builder.gep(value, [vInt(0), vIndex(1)])) + return self.builder.load(value) + + elif left.type == tInt and right.type.isIndexable(): + return self.binaryop(ctx, op, right, left) + + else: + self.throw(ctx, err.NoBinaryOperator(op, left.type, right.type)) + elif op == '/': if left.type == right.type == tInt: v1 = self.builder.sdiv(left, right) @@ -153,9 +194,9 @@ def binaryop(self, ctx, op, left, right): if left.type == right.type == tInt: return self.builder.add(left, right) - elif left.type == right.type and (left.type == tString or left.type.isArray()): + elif left.type == right.type and left.type.isIndexable(): type = left.type - subtype = type.subtype if type.isArray() else tChar + subtype = type.subtype length1 = self.builder.extract_value(left, [1]) length2 = self.builder.extract_value(right, [1]) @@ -179,7 +220,6 @@ def binaryop(self, ctx, op, left, right): else: if left.type == right.type == tInt: instruction = { - '*': self.builder.mul, '-': self.builder.sub, '<<': self.builder.shl, '>>': self.builder.ashr, @@ -527,7 +567,7 @@ def visitExprAttr(self, ctx): value = self.visit(ctx.expr()) id = str(ctx.ID()) - if value.type.isString() or value.type.isArray(): + if value.type.isIndexable(): if id != "length": self.throw(ctx, err.NoAttribute(value.type, id)) diff --git a/src/types.py b/src/types.py index 664676e7..37335750 100644 --- a/src/types.py +++ b/src/types.py @@ -25,10 +25,10 @@ def tPtr(type=tChar): tString = CustomStructType([tPtr(), tInt], 'string') +tString.subtype = tChar def isString(type): return getattr(type, 'kind', None) == 'string' - ll.Type.isString = isString @@ -39,7 +39,6 @@ def tArray(subtype): def isArray(type): return getattr(type, 'kind', None) == 'array' - ll.Type.isArray = isArray @@ -50,7 +49,6 @@ def tTuple(elements): def isTuple(type): return getattr(type, 'kind', None) == 'tuple' - ll.Type.isTuple = isTuple @@ -58,6 +56,11 @@ def tFunc(args, ret=tVoid): return ll.FunctionType(ret, args) +def isIndexable(type): + return type == tString or type.isArray() +ll.Type.isIndexable = isIndexable + + def showType(type): if type == tVoid: return 'Void' @@ -74,7 +77,6 @@ def showType(type): if type.isTuple(): return '*'.join(t.show() for t in type.elements) return str(type) - ll.Type.show = showType From 1833c815314b59f70acafe2ff66fd5d2a54d9ade Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sat, 19 Oct 2019 20:36:23 +0200 Subject: [PATCH 026/100] Code refactoring --- src/compiler.py | 304 ++++++++++++++++++++++-------------------------- src/types.py | 16 +-- src/utils.py | 6 + 3 files changed, 151 insertions(+), 175 deletions(-) create mode 100644 src/utils.py diff --git a/src/compiler.py b/src/compiler.py index 6c47e219..abccc7cc 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -34,6 +34,16 @@ def local(self): yield self.env = tmp + @contextmanager + def block(self): + label_start = self.builder.append_basic_block() + self.builder.branch(label_start) + self.builder.position_at_end(label_start) + label_end = ll.Block(self.builder.function) + yield label_start, label_end + self.builder.function.blocks.append(label_end) + self.builder.position_at_end(label_end) + def throw(self, ctx, msg): raise err(msg, ctx.start.line, ctx.start.column+1) @@ -46,7 +56,7 @@ def get(self, ctx, id): def index(self, ctx, *exprs): collection, index = [self.visit(expr) for expr in exprs] - if collection.type.isIndexable(): + if collection.type.isCollection(): index = self.cast(exprs[1], index, tInt) length = self.builder.extract_value(collection, [1]) cmp = self.builder.icmp_signed('>=', index, vInt(0)) @@ -128,7 +138,7 @@ def binaryop(self, ctx, op, left, right): if left.type == right.type == tInt: return self.builder.mul(left, right) - elif left.type.isIndexable() and right.type == tInt: + elif left.type.isCollection() and right.type == tInt: type = left.type subtype = type.subtype @@ -140,26 +150,21 @@ def binaryop(self, ctx, op, left, right): index = self.builder.alloca(tInt) self.builder.store(vInt(0), index) - label_start = self.builder.append_basic_block() - self.builder.branch(label_start) - self.builder.position_at_end(label_start) - label_end = ll.Block(self.builder.function) - - self.memcpy(self.builder.gep(dest, [self.builder.load(index)]), src, src_length) + with self.block() as (label_start, label_end): - self.builder.store(self.builder.add(self.builder.load(index), src_length), index) - cond = self.builder.icmp_signed('<', self.builder.load(index), length) - self.builder.cbranch(cond, label_start, label_end) + i = self.builder.load(index) + self.memcpy(self.builder.gep(dest, [i]), src, src_length) + self.builder.store(self.builder.add(i, src_length), index) - self.builder.function.blocks.append(label_end) - self.builder.position_at_end(label_end) + cond = self.builder.icmp_signed('<', self.builder.load(index), length) + self.builder.cbranch(cond, label_start, label_end) value = self.malloc(type) self.builder.store(dest, self.builder.gep(value, [vInt(0), vIndex(0)])) self.builder.store(length, self.builder.gep(value, [vInt(0), vIndex(1)])) return self.builder.load(value) - elif left.type == tInt and right.type.isIndexable(): + elif left.type == tInt and right.type.isCollection(): return self.binaryop(ctx, op, right, left) else: @@ -194,7 +199,7 @@ def binaryop(self, ctx, op, left, right): if left.type == right.type == tInt: return self.builder.add(left, right) - elif left.type == right.type and left.type.isIndexable(): + elif left.type == right.type and left.type.isCollection(): type = left.type subtype = type.subtype @@ -266,23 +271,16 @@ def print(self, ctx, value): index = self.builder.alloca(tInt) self.builder.store(vInt(0), index) - label_start = self.builder.append_basic_block() - self.builder.branch(label_start) - self.builder.position_at_end(label_start) - label_end = ll.Block(self.builder.function) - - with self.builder.if_then(self.builder.icmp_signed('>', self.builder.load(index), vInt(0))): - self.write(', ') + with self.block() as (label_start, label_end): + with self.builder.if_then(self.builder.icmp_signed('>', self.builder.load(index), vInt(0))): + self.write(', ') - elem = self.builder.gep(self.builder.extract_value(value, [0]), [self.builder.load(index)]) - self.print(ctx, self.builder.load(elem)) + elem = self.builder.gep(self.builder.extract_value(value, [0]), [self.builder.load(index)]) + self.print(ctx, self.builder.load(elem)) - self.builder.store(self.builder.add(self.builder.load(index), vInt(1)), index) - cond = self.builder.icmp_signed('<', self.builder.load(index), length) - self.builder.cbranch(cond, label_start, label_end) - - self.builder.function.blocks.append(label_end) - self.builder.position_at_end(label_end) + self.builder.store(self.builder.add(self.builder.load(index), vInt(1)), index) + cond = self.builder.icmp_signed('<', self.builder.load(index), length) + self.builder.cbranch(cond, label_start, label_end) self.write(']') @@ -359,77 +357,60 @@ def visitStmtIf(self, ctx): exprs = ctx.expr() blocks = ctx.block() - label_end = ll.Block(self.builder.function) + with self.block() as (label_start, label_end): - def emitIfElse(index): - if len(exprs) == index: - if len(blocks) > index: - with self.local(): - self.visit(blocks[index]) - return + def emitIfElse(index): + if len(exprs) == index: + if len(blocks) > index: + with self.local(): + self.visit(blocks[index]) + return - expr = exprs[index] - cond = self.cast(expr, self.visit(expr), tBool) + expr = exprs[index] + cond = self.cast(expr, self.visit(expr), tBool) - label_if = self.builder.append_basic_block() - label_else = self.builder.append_basic_block() - self.builder.cbranch(cond, label_if, label_else) + label_if = self.builder.append_basic_block() + label_else = self.builder.append_basic_block() + self.builder.cbranch(cond, label_if, label_else) - with self.builder._branch_helper(label_if, label_end): - with self.local(): - self.visit(blocks[index]) - - with self.builder._branch_helper(label_else, label_end): - emitIfElse(index+1) + with self.builder._branch_helper(label_if, label_end): + with self.local(): + self.visit(blocks[index]) - emitIfElse(0) + with self.builder._branch_helper(label_else, label_end): + emitIfElse(index+1) - self.builder.function.blocks.append(label_end) - self.builder.position_at_end(label_end) + emitIfElse(0) def visitStmtWhile(self, ctx): - label_start = self.builder.append_basic_block() - self.builder.branch(label_start) - self.builder.position_at_end(label_start) - label_end = ll.Block(self.builder.function) - - expr = ctx.expr() - cond = self.cast(expr, self.visit(expr), tBool) - - label_while = self.builder.append_basic_block() - self.builder.cbranch(cond, label_while, label_end) - self.builder.position_at_end(label_while) + with self.block() as (label_start, label_end): + expr = ctx.expr() + cond = self.cast(expr, self.visit(expr), tBool) - with self.local(): - self.env['#continue'] = label_start - self.env['#break'] = label_end + label_while = self.builder.append_basic_block() + self.builder.cbranch(cond, label_while, label_end) + self.builder.position_at_end(label_while) - self.visit(ctx.block()) + with self.local(): + self.env['#continue'] = label_start + self.env['#break'] = label_end - self.builder.branch(label_start) + self.visit(ctx.block()) - self.builder.function.blocks.append(label_end) - self.builder.position_at_end(label_end) + self.builder.branch(label_start) def visitStmtUntil(self, ctx): - label_start = self.builder.append_basic_block() - self.builder.branch(label_start) - self.builder.position_at_end(label_start) - label_end = ll.Block(self.builder.function) - - with self.local(): - self.env['#continue'] = label_start - self.env['#break'] = label_end - - self.visit(ctx.block()) + with self.block() as (label_start, label_end): + with self.local(): + self.env['#continue'] = label_start + self.env['#break'] = label_end - expr = ctx.expr() - cond = self.cast(expr, self.visit(expr), tBool) + self.visit(ctx.block()) - self.builder.cbranch(cond, label_end, label_start) + expr = ctx.expr() + cond = self.cast(expr, self.visit(expr), tBool) - self.builder.function.blocks.append(label_end) - self.builder.position_at_end(label_end) + self.builder.cbranch(cond, label_end, label_start) def visitStmtFor(self, ctx): exprs = ctx.tuple_expr() @@ -501,49 +482,43 @@ def prepare(iterable, step): # must be a function so that lambdas work properly for iterable, step in zip(iterables, _steps): prepare(iterable, step) - label_start = self.builder.append_basic_block() - self.builder.branch(label_start) - self.builder.position_at_end(label_start) - label_cont = ll.Block(self.builder.function) - label_end = ll.Block(self.builder.function) + with self.block() as (label_start, label_end): + label_cont = ll.Block(self.builder.function) - for index, cond in zip(indices, conditions): - label = ll.Block(self.builder.function) - self.builder.cbranch(cond(self.builder.load(index)), label, label_end) - self.builder.function.blocks.append(label) - self.builder.position_at_end(label) - - with self.local(): - self.env['#continue'] = label_cont - self.env['#break'] = label_end - - if len(vars) == 1 and len(types) > 1: - tuple = self.tuple([getters[i](self.builder.load(index)) for i, index in enumerate(indices)]) - self.assign(exprs[0], vars[0], tuple) - elif len(vars) > 1 and len(types) == 1: - for i, var in enumerate(vars): - tuple = getters[0](self.builder.load(indices[0])) - self.assign(exprs[0], var, self.builder.extract_value(tuple, [i])) - elif len(vars) == len(types): - for var, index, getter in zip(vars, indices, getters): - self.assign(exprs[0], var, getter(self.builder.load(index))) - else: - self.throw(exprs[0], err.CannotUnpack(tTuple(types), len(vars))) + for index, cond in zip(indices, conditions): + label = ll.Block(self.builder.function) + self.builder.cbranch(cond(self.builder.load(index)), label, label_end) + self.builder.function.blocks.append(label) + self.builder.position_at_end(label) + + with self.local(): + self.env['#continue'] = label_cont + self.env['#break'] = label_end + + if len(vars) == 1 and len(types) > 1: + tuple = self.tuple([getters[i](self.builder.load(index)) for i, index in enumerate(indices)]) + self.assign(exprs[0], vars[0], tuple) + elif len(vars) > 1 and len(types) == 1: + for i, var in enumerate(vars): + tuple = getters[0](self.builder.load(indices[0])) + self.assign(exprs[0], var, self.builder.extract_value(tuple, [i])) + elif len(vars) == len(types): + for var, index, getter in zip(vars, indices, getters): + self.assign(exprs[0], var, getter(self.builder.load(index))) + else: + self.throw(exprs[0], err.CannotUnpack(tTuple(types), len(vars))) - self.visit(ctx.block()) + self.visit(ctx.block()) - self.builder.function.blocks.append(label_cont) - self.builder.branch(label_cont) - self.builder.position_at_end(label_cont) + self.builder.function.blocks.append(label_cont) + self.builder.branch(label_cont) + self.builder.position_at_end(label_cont) - for index, step, type in zip(indices, steps, types): - value = self.builder.add(self.builder.load(index), step) - self.builder.store(value, index) + for index, step, type in zip(indices, steps, types): + value = self.builder.add(self.builder.load(index), step) + self.builder.store(value, index) - self.builder.branch(label_start) - - self.builder.function.blocks.append(label_end) - self.builder.position_at_end(label_end) + self.builder.branch(label_start) def visitStmtLoopControl(self, ctx): stmt = ctx.s.text # 'break' / 'continue' @@ -567,7 +542,7 @@ def visitExprAttr(self, ctx): value = self.visit(ctx.expr()) id = str(ctx.ID()) - if value.type.isIndexable(): + if value.type.isCollection(): if id != "length": self.throw(ctx, err.NoAttribute(value.type, id)) @@ -607,32 +582,28 @@ def visitExprCmp(self, ctx): values = [self.visit(exprs[0])] - label_start = self.builder.basic_block - label_end = ll.Block(self.builder.function) - self.builder.position_at_end(label_end) - phi = self.builder.phi(tBool) - self.builder.position_at_end(label_start) - - def emitIf(index): - values.append(self.visit(exprs[index+1])) - cond = self.cmp(ctx, ops[index], values[index], values[index+1]) + with self.block() as (label_start, label_end): + self.builder.position_at_end(label_end) + phi = self.builder.phi(tBool) + self.builder.position_at_end(label_start) - if len(exprs) == index+2: - phi.add_incoming(cond, self.builder.basic_block) - self.builder.branch(label_end) - return + def emitIf(index): + values.append(self.visit(exprs[index+1])) + cond = self.cmp(ctx, ops[index], values[index], values[index+1]) - phi.add_incoming(vFalse, self.builder.basic_block) - label_if = self.builder.function.append_basic_block() - self.builder.cbranch(cond, label_if, label_end) + if len(exprs) == index+2: + phi.add_incoming(cond, self.builder.basic_block) + self.builder.branch(label_end) + return - with self.builder._branch_helper(label_if, label_end): - emitIf(index+1) + phi.add_incoming(vFalse, self.builder.basic_block) + label_if = self.builder.function.append_basic_block() + self.builder.cbranch(cond, label_if, label_end) - emitIf(0) + with self.builder._branch_helper(label_if, label_end): + emitIf(index+1) - self.builder.function.blocks.append(label_end) - self.builder.position_at_end(label_end) + emitIf(0) return phi @@ -640,30 +611,27 @@ def visitExprLogicalOp(self, ctx): op = ctx.op.text cond1 = self.visit(ctx.expr(0)) - bbstart = self.builder.basic_block - bbif = self.builder.function.append_basic_block() - bbend = ll.Block(self.builder.function) - - if op == 'and': - self.builder.cbranch(cond1, bbif, bbend) - elif op == 'or': - self.builder.cbranch(cond1, bbend, bbif) - - self.builder.position_at_end(bbend) - phi = self.builder.phi(tBool) - if op == 'and': - phi.add_incoming(vFalse, bbstart) - elif op == 'or': - phi.add_incoming(vTrue, bbstart) - - with self.builder._branch_helper(bbif, bbend): - cond2 = self.visit(ctx.expr(1)) - if not cond1.type == cond2.type == tBool: - self.throw(ctx, err.NoBinaryOperator(op, cond1.type, cond2.type)) - phi.add_incoming(cond2, self.builder.basic_block) - - self.builder.function.blocks.append(bbend) - self.builder.position_at_end(bbend) + + with self.block() as (label_start, label_end): + label_if = self.builder.function.append_basic_block() + + if op == 'and': + self.builder.cbranch(cond1, label_if, label_end) + elif op == 'or': + self.builder.cbranch(cond1, label_end, label_if) + + self.builder.position_at_end(label_end) + phi = self.builder.phi(tBool) + if op == 'and': + phi.add_incoming(vFalse, label_start) + elif op == 'or': + phi.add_incoming(vTrue, label_start) + + with self.builder._branch_helper(label_if, label_end): + cond2 = self.visit(ctx.expr(1)) + if not cond1.type == cond2.type == tBool: + self.throw(ctx, err.NoBinaryOperator(op, cond1.type, cond2.type)) + phi.add_incoming(cond2, self.builder.basic_block) return phi diff --git a/src/types.py b/src/types.py index 37335750..5229e51e 100644 --- a/src/types.py +++ b/src/types.py @@ -1,6 +1,8 @@ import llvmlite.ir as ll +from .utils import extend_class + class CustomStructType(ll.LiteralStructType): @@ -27,9 +29,9 @@ def tPtr(type=tChar): tString = CustomStructType([tPtr(), tInt], 'string') tString.subtype = tChar +@extend_class(ll.Type) def isString(type): return getattr(type, 'kind', None) == 'string' -ll.Type.isString = isString def tArray(subtype): @@ -37,9 +39,9 @@ def tArray(subtype): type.subtype = subtype return type +@extend_class(ll.Type) def isArray(type): return getattr(type, 'kind', None) == 'array' -ll.Type.isArray = isArray def tTuple(elements): @@ -47,21 +49,22 @@ def tTuple(elements): return elements[0] return CustomStructType(elements, 'tuple') +@extend_class(ll.Type) def isTuple(type): return getattr(type, 'kind', None) == 'tuple' -ll.Type.isTuple = isTuple def tFunc(args, ret=tVoid): return ll.FunctionType(ret, args) -def isIndexable(type): +@extend_class(ll.Type) +def isCollection(type): return type == tString or type.isArray() -ll.Type.isIndexable = isIndexable -def showType(type): +@extend_class(ll.Type) +def show(type): if type == tVoid: return 'Void' if type == tInt: @@ -77,7 +80,6 @@ def showType(type): if type.isTuple(): return '*'.join(t.show() for t in type.elements) return str(type) -ll.Type.show = showType def vInt(n): diff --git a/src/utils.py b/src/utils.py new file mode 100644 index 00000000..2d1ce0a0 --- /dev/null +++ b/src/utils.py @@ -0,0 +1,6 @@ + +def extend_class(cls): + def decorator(func): + setattr(cls, func.__name__, func) + return func + return decorator From 3e9a8bef2bb2c21913f651fc19cc26d72631c235 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sun, 20 Oct 2019 00:27:08 +0200 Subject: [PATCH 027/100] Comparing tuples There was a bug in the previous implementation of <= and >= operators. --- src/compiler.py | 46 ++++++++++++++++++++++++++++++++++++++ test/good/tuples/cmp01.px | 2 +- test/good/tuples/cmp03.out | 8 +++++++ test/good/tuples/cmp03.px | 10 +++++++++ 4 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 test/good/tuples/cmp03.out create mode 100644 test/good/tuples/cmp03.px diff --git a/src/compiler.py b/src/compiler.py index abccc7cc..28bc43d2 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -242,8 +242,54 @@ def cmp(self, ctx, op, left, right): if left.type in (tInt, tChar): return self.builder.icmp_signed(op, left, right) + elif left.type == tBool: return self.builder.icmp_unsigned(op, left, right) + + elif left.type.isTuple(): + with self.block() as (label_start, label_end): + label_true = ll.Block(self.builder.function) + label_false = ll.Block(self.builder.function) + + for i in range(len(left.type.elements)): + label_cont = ll.Block(self.builder.function) + + values = self.builder.extract_value(left, i), self.builder.extract_value(right, i) + cond = self.cmp(ctx, op + '=' if op in ('<', '>') else op, *values) + + if op == '!=': + self.builder.cbranch(cond, label_true, label_cont) + else: + self.builder.cbranch(cond, label_cont, label_false) + + self.builder.function.blocks.append(label_cont) + self.builder.position_at_end(label_cont) + + if op in ('<=', '>=', '<', '>'): + label_cont = ll.Block(self.builder.function) + + cond2 = self.cmp(ctx, '!=', *values) + self.builder.cbranch(cond2, label_true, label_cont) + + if op in ('<', '>'): + cond = cond2 + + self.builder.function.blocks.append(label_cont) + self.builder.position_at_end(label_cont) + + self.builder.branch(label_end) + + for label in [label_true, label_false]: + self.builder.function.blocks.append(label) + self.builder.position_at_end(label) + self.builder.branch(label_end) + + phi = self.builder.phi(tBool) + phi.add_incoming(vTrue, label_true) + phi.add_incoming(vFalse, label_false) + phi.add_incoming(cond, label_cont) + return phi + else: self.throw(ctx, err.NotComparable(left.type, right.type)) diff --git a/test/good/tuples/cmp01.px b/test/good/tuples/cmp01.px index a2feedb4..16e1bc7c 100644 --- a/test/good/tuples/cmp01.px +++ b/test/good/tuples/cmp01.px @@ -1,6 +1,6 @@ t = (1, 2) == (1, 2) -v = ("a", "b", "c"), ("a", "b", "d") +v = ('a', 'b', 'c'), ('a', 'b', 'd') f = v.b == v.a if t and not f do print "OK" diff --git a/test/good/tuples/cmp03.out b/test/good/tuples/cmp03.out new file mode 100644 index 00000000..41ac1b72 --- /dev/null +++ b/test/good/tuples/cmp03.out @@ -0,0 +1,8 @@ +false +true +false +true +false +false +true +false diff --git a/test/good/tuples/cmp03.px b/test/good/tuples/cmp03.px new file mode 100644 index 00000000..5e75455f --- /dev/null +++ b/test/good/tuples/cmp03.px @@ -0,0 +1,10 @@ + +print (1, 2) <= (1, 1) +print (1, 2, 3) <= (1, 2, 4) +print (false, true, 'b') >= (false, true, 'c') +print ('a', 'b') <= ('b', 'a') +print ('a', 'b') >= ('b', 'a') + +print (5, 6) > (5, 6) +print (5, 6) < (5, 7) +print (5, 7, 8) < (5, 6, 9) From 45b266be33f7d176eaed73e9decc4f1e03278c06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sun, 20 Oct 2019 21:22:10 +0200 Subject: [PATCH 028/100] Comparing strings and arrays --- src/compiler.py | 80 +++++++++++++++++++++++++++++++++---- test/good/strings/cmp02.out | 4 +- test/good/strings/cmp02.px | 7 ++-- 3 files changed, 78 insertions(+), 13 deletions(-) diff --git a/src/compiler.py b/src/compiler.py index 28bc43d2..fd03459c 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -96,6 +96,9 @@ def assign(self, ctx, expr, value): value = self.cast(ctx, value, ptr.type.pointee) self.builder.store(value, ptr) + def inc(self, ptr, step=vInt(1)): + self.builder.store(self.builder.add(self.builder.load(ptr), step), ptr) + def sizeof(self, type, length=vInt(1)): return self.builder.ptrtoint(self.builder.gep(vNull(type), [length]), tInt) @@ -246,6 +249,70 @@ def cmp(self, ctx, op, left, right): elif left.type == tBool: return self.builder.icmp_unsigned(op, left, right) + elif left.type.isCollection(): + array1 = self.builder.extract_value(left, [0]) + array2 = self.builder.extract_value(right, [0]) + length1 = self.builder.extract_value(left, [1]) + length2 = self.builder.extract_value(right, [1]) + + index = self.builder.alloca(tInt) + self.builder.store(vInt(0), index) + + with self.block() as (label_start, label_end): + label_true = ll.Block(self.builder.function) + label_false = ll.Block(self.builder.function) + label_cont = ll.Block(self.builder.function) + label_length = ll.Block(self.builder.function) + + i = self.builder.load(index) + + for length in [length1, length2]: + label = ll.Block(self.builder.function) + self.builder.cbranch(self.builder.icmp_signed('<', i, length), label, label_length) + self.builder.function.blocks.append(label) + self.builder.position_at_end(label) + + values = [self.builder.load(self.builder.gep(array, [i])) for array in [array1, array2]] + cond = self.cmp(ctx, op + '=' if op in ('<', '>') else op, *values) + + if op == '!=': + self.builder.cbranch(cond, label_true, label_cont) + else: + self.builder.cbranch(cond, label_cont, label_false) + + self.builder.function.blocks.append(label_cont) + self.builder.position_at_end(label_cont) + + if op in ('<=', '>=', '<', '>'): + label_cont = ll.Block(self.builder.function) + + cond2 = self.cmp(ctx, '!=', *values) + self.builder.cbranch(cond2, label_true, label_cont) + + self.builder.function.blocks.append(label_cont) + self.builder.position_at_end(label_cont) + + self.inc(index) + + self.builder.branch(label_start) + + for label in [label_true, label_false]: + self.builder.function.blocks.append(label) + self.builder.position_at_end(label) + self.builder.branch(label_end) + + self.builder.function.blocks.append(label_length) + self.builder.position_at_end(label_length) + + length_cond = self.builder.icmp_signed(op, length1, length2) + self.builder.branch(label_end) + + phi = self.builder.phi(tBool) + phi.add_incoming(vTrue, label_true) + phi.add_incoming(vFalse, label_false) + phi.add_incoming(length_cond, label_length) + return phi + elif left.type.isTuple(): with self.block() as (label_start, label_end): label_true = ll.Block(self.builder.function) @@ -254,7 +321,7 @@ def cmp(self, ctx, op, left, right): for i in range(len(left.type.elements)): label_cont = ll.Block(self.builder.function) - values = self.builder.extract_value(left, i), self.builder.extract_value(right, i) + values = [self.builder.extract_value(tuple, i) for tuple in [left, right]] cond = self.cmp(ctx, op + '=' if op in ('<', '>') else op, *values) if op == '!=': @@ -271,9 +338,6 @@ def cmp(self, ctx, op, left, right): cond2 = self.cmp(ctx, '!=', *values) self.builder.cbranch(cond2, label_true, label_cont) - if op in ('<', '>'): - cond = cond2 - self.builder.function.blocks.append(label_cont) self.builder.position_at_end(label_cont) @@ -287,7 +351,7 @@ def cmp(self, ctx, op, left, right): phi = self.builder.phi(tBool) phi.add_incoming(vTrue, label_true) phi.add_incoming(vFalse, label_false) - phi.add_incoming(cond, label_cont) + phi.add_incoming(vBool(op not in ('!=', '<', '>')), label_cont) return phi else: @@ -324,7 +388,8 @@ def print(self, ctx, value): elem = self.builder.gep(self.builder.extract_value(value, [0]), [self.builder.load(index)]) self.print(ctx, self.builder.load(elem)) - self.builder.store(self.builder.add(self.builder.load(index), vInt(1)), index) + self.inc(index) + cond = self.builder.icmp_signed('<', self.builder.load(index), length) self.builder.cbranch(cond, label_start, label_end) @@ -561,8 +626,7 @@ def prepare(iterable, step): # must be a function so that lambdas work properly self.builder.position_at_end(label_cont) for index, step, type in zip(indices, steps, types): - value = self.builder.add(self.builder.load(index), step) - self.builder.store(value, index) + self.inc(index, step) self.builder.branch(label_start) diff --git a/test/good/strings/cmp02.out b/test/good/strings/cmp02.out index 9766475a..dac32ecf 100644 --- a/test/good/strings/cmp02.out +++ b/test/good/strings/cmp02.out @@ -1 +1,3 @@ -ok +false +true +true diff --git a/test/good/strings/cmp02.px b/test/good/strings/cmp02.px index 459c04cf..2ae994b1 100644 --- a/test/good/strings/cmp02.px +++ b/test/good/strings/cmp02.px @@ -2,7 +2,6 @@ x = "y" x = "x" y = "y" -if x > y or x == y do - print 2 -elif x <= y and x != y and "abc" > "ab" do - print "ok" +print x > y or y <= x or x == y +print x < y >= x != y +print "abc" > "ab" and "" <= "a" From 2a3daaf85f3ec4e7c2c81c02263c53b921e01fff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Mon, 21 Oct 2019 21:30:30 +0200 Subject: [PATCH 029/100] Floating point numbers --- src/Pyxell.g4 | 2 + src/antlr/Pyxell.interp | 6 +- src/antlr/Pyxell.tokens | 15 +- src/antlr/PyxellLexer.interp | 7 +- src/antlr/PyxellLexer.py | 305 ++++++++++++++++++----------------- src/antlr/PyxellLexer.tokens | 15 +- src/antlr/PyxellParser.py | 128 +++++++++------ src/antlr/PyxellVisitor.py | 5 + src/compiler.py | 65 ++++++-- src/types.py | 8 +- 10 files changed, 331 insertions(+), 225 deletions(-) diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index 55f1419d..09fd2373 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -61,6 +61,7 @@ expr atom : INT # AtomInt + | FLOAT # AtomFloat | ('true' | 'false') # AtomBool | CHAR # AtomChar | STRING # AtomString @@ -69,6 +70,7 @@ atom ; INT : DIGIT+ ; +FLOAT : DIGIT+ '.' DIGIT+ ('e' '-'? DIGIT+)? ; CHAR : '\'' (~[\\'] | ('\\' ['\\nt]))* '\'' ; STRING : '"' (~[\\"] | ('\\' ["\\nt]))* '"' ; ID : ID_START ID_CONT* ; diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index 826cc9d1..b83eba0b 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -15,8 +15,8 @@ null '&' '$' '|' -'continue' 'break' +'continue' ',' 'if' 'elif' @@ -56,6 +56,7 @@ null null null null +null token symbolic names: null @@ -110,6 +111,7 @@ null null null INT +FLOAT CHAR STRING ID @@ -129,4 +131,4 @@ atom atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 58, 209, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 3, 2, 7, 2, 22, 10, 2, 12, 2, 14, 2, 25, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 33, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 38, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 43, 10, 4, 12, 4, 14, 4, 46, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 55, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 60, 10, 5, 12, 5, 14, 5, 63, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 72, 10, 6, 12, 6, 14, 6, 75, 11, 6, 3, 6, 3, 6, 5, 6, 79, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 95, 10, 6, 3, 6, 3, 6, 5, 6, 99, 10, 6, 3, 7, 3, 7, 3, 7, 6, 7, 104, 10, 7, 13, 7, 14, 7, 105, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 7, 8, 113, 10, 8, 12, 8, 14, 8, 116, 11, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 130, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 184, 10, 9, 12, 9, 14, 9, 187, 11, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 197, 10, 10, 12, 10, 14, 10, 200, 11, 10, 3, 10, 5, 10, 203, 10, 10, 3, 10, 3, 10, 5, 10, 207, 10, 10, 3, 10, 2, 3, 16, 11, 2, 4, 6, 8, 10, 12, 14, 16, 18, 2, 10, 3, 2, 7, 17, 3, 2, 18, 19, 4, 2, 11, 12, 37, 37, 3, 2, 8, 10, 3, 2, 11, 12, 3, 2, 13, 14, 3, 2, 40, 45, 3, 2, 51, 52, 2, 242, 2, 23, 3, 2, 2, 2, 4, 32, 3, 2, 2, 2, 6, 54, 3, 2, 2, 2, 8, 56, 3, 2, 2, 2, 10, 98, 3, 2, 2, 2, 12, 100, 3, 2, 2, 2, 14, 114, 3, 2, 2, 2, 16, 129, 3, 2, 2, 2, 18, 206, 3, 2, 2, 2, 20, 22, 5, 4, 3, 2, 21, 20, 3, 2, 2, 2, 22, 25, 3, 2, 2, 2, 23, 21, 3, 2, 2, 2, 23, 24, 3, 2, 2, 2, 24, 26, 3, 2, 2, 2, 25, 23, 3, 2, 2, 2, 26, 27, 7, 2, 2, 3, 27, 3, 3, 2, 2, 2, 28, 29, 5, 6, 4, 2, 29, 30, 7, 3, 2, 2, 30, 33, 3, 2, 2, 2, 31, 33, 5, 10, 6, 2, 32, 28, 3, 2, 2, 2, 32, 31, 3, 2, 2, 2, 33, 5, 3, 2, 2, 2, 34, 55, 7, 4, 2, 2, 35, 37, 7, 5, 2, 2, 36, 38, 5, 14, 8, 2, 37, 36, 3, 2, 2, 2, 37, 38, 3, 2, 2, 2, 38, 55, 3, 2, 2, 2, 39, 40, 5, 8, 5, 2, 40, 41, 7, 6, 2, 2, 41, 43, 3, 2, 2, 2, 42, 39, 3, 2, 2, 2, 43, 46, 3, 2, 2, 2, 44, 42, 3, 2, 2, 2, 44, 45, 3, 2, 2, 2, 45, 47, 3, 2, 2, 2, 46, 44, 3, 2, 2, 2, 47, 55, 5, 14, 8, 2, 48, 49, 5, 16, 9, 2, 49, 50, 9, 2, 2, 2, 50, 51, 7, 6, 2, 2, 51, 52, 5, 16, 9, 2, 52, 55, 3, 2, 2, 2, 53, 55, 9, 3, 2, 2, 54, 34, 3, 2, 2, 2, 54, 35, 3, 2, 2, 2, 54, 44, 3, 2, 2, 2, 54, 48, 3, 2, 2, 2, 54, 53, 3, 2, 2, 2, 55, 7, 3, 2, 2, 2, 56, 61, 5, 16, 9, 2, 57, 58, 7, 20, 2, 2, 58, 60, 5, 16, 9, 2, 59, 57, 3, 2, 2, 2, 60, 63, 3, 2, 2, 2, 61, 59, 3, 2, 2, 2, 61, 62, 3, 2, 2, 2, 62, 9, 3, 2, 2, 2, 63, 61, 3, 2, 2, 2, 64, 65, 7, 21, 2, 2, 65, 66, 5, 16, 9, 2, 66, 73, 5, 12, 7, 2, 67, 68, 7, 22, 2, 2, 68, 69, 5, 16, 9, 2, 69, 70, 5, 12, 7, 2, 70, 72, 3, 2, 2, 2, 71, 67, 3, 2, 2, 2, 72, 75, 3, 2, 2, 2, 73, 71, 3, 2, 2, 2, 73, 74, 3, 2, 2, 2, 74, 78, 3, 2, 2, 2, 75, 73, 3, 2, 2, 2, 76, 77, 7, 23, 2, 2, 77, 79, 5, 12, 7, 2, 78, 76, 3, 2, 2, 2, 78, 79, 3, 2, 2, 2, 79, 99, 3, 2, 2, 2, 80, 81, 7, 24, 2, 2, 81, 82, 5, 16, 9, 2, 82, 83, 5, 12, 7, 2, 83, 99, 3, 2, 2, 2, 84, 85, 7, 25, 2, 2, 85, 86, 5, 16, 9, 2, 86, 87, 5, 12, 7, 2, 87, 99, 3, 2, 2, 2, 88, 89, 7, 26, 2, 2, 89, 90, 5, 14, 8, 2, 90, 91, 7, 27, 2, 2, 91, 94, 5, 14, 8, 2, 92, 93, 7, 28, 2, 2, 93, 95, 5, 14, 8, 2, 94, 92, 3, 2, 2, 2, 94, 95, 3, 2, 2, 2, 95, 96, 3, 2, 2, 2, 96, 97, 5, 12, 7, 2, 97, 99, 3, 2, 2, 2, 98, 64, 3, 2, 2, 2, 98, 80, 3, 2, 2, 2, 98, 84, 3, 2, 2, 2, 98, 88, 3, 2, 2, 2, 99, 11, 3, 2, 2, 2, 100, 101, 7, 29, 2, 2, 101, 103, 7, 30, 2, 2, 102, 104, 5, 4, 3, 2, 103, 102, 3, 2, 2, 2, 104, 105, 3, 2, 2, 2, 105, 103, 3, 2, 2, 2, 105, 106, 3, 2, 2, 2, 106, 107, 3, 2, 2, 2, 107, 108, 7, 31, 2, 2, 108, 13, 3, 2, 2, 2, 109, 110, 5, 16, 9, 2, 110, 111, 7, 20, 2, 2, 111, 113, 3, 2, 2, 2, 112, 109, 3, 2, 2, 2, 113, 116, 3, 2, 2, 2, 114, 112, 3, 2, 2, 2, 114, 115, 3, 2, 2, 2, 115, 117, 3, 2, 2, 2, 116, 114, 3, 2, 2, 2, 117, 118, 5, 16, 9, 2, 118, 15, 3, 2, 2, 2, 119, 120, 8, 9, 1, 2, 120, 130, 5, 18, 10, 2, 121, 122, 7, 32, 2, 2, 122, 123, 5, 14, 8, 2, 123, 124, 7, 33, 2, 2, 124, 130, 3, 2, 2, 2, 125, 126, 9, 4, 2, 2, 126, 130, 5, 16, 9, 17, 127, 128, 7, 46, 2, 2, 128, 130, 5, 16, 9, 6, 129, 119, 3, 2, 2, 2, 129, 121, 3, 2, 2, 2, 129, 125, 3, 2, 2, 2, 129, 127, 3, 2, 2, 2, 130, 185, 3, 2, 2, 2, 131, 132, 12, 18, 2, 2, 132, 133, 7, 7, 2, 2, 133, 184, 5, 16, 9, 18, 134, 135, 12, 16, 2, 2, 135, 136, 9, 5, 2, 2, 136, 184, 5, 16, 9, 17, 137, 138, 12, 15, 2, 2, 138, 139, 9, 6, 2, 2, 139, 184, 5, 16, 9, 16, 140, 141, 12, 14, 2, 2, 141, 142, 9, 7, 2, 2, 142, 184, 5, 16, 9, 15, 143, 144, 12, 13, 2, 2, 144, 145, 7, 15, 2, 2, 145, 184, 5, 16, 9, 14, 146, 147, 12, 12, 2, 2, 147, 148, 7, 16, 2, 2, 148, 184, 5, 16, 9, 13, 149, 150, 12, 11, 2, 2, 150, 151, 7, 17, 2, 2, 151, 184, 5, 16, 9, 12, 152, 153, 12, 10, 2, 2, 153, 154, 7, 38, 2, 2, 154, 184, 5, 16, 9, 11, 155, 156, 12, 9, 2, 2, 156, 157, 7, 39, 2, 2, 157, 184, 5, 16, 9, 10, 158, 159, 12, 7, 2, 2, 159, 160, 9, 8, 2, 2, 160, 184, 5, 16, 9, 7, 161, 162, 12, 5, 2, 2, 162, 163, 7, 47, 2, 2, 163, 184, 5, 16, 9, 5, 164, 165, 12, 4, 2, 2, 165, 166, 7, 48, 2, 2, 166, 184, 5, 16, 9, 4, 167, 168, 12, 3, 2, 2, 168, 169, 7, 49, 2, 2, 169, 170, 5, 16, 9, 2, 170, 171, 7, 50, 2, 2, 171, 172, 5, 16, 9, 3, 172, 184, 3, 2, 2, 2, 173, 174, 12, 20, 2, 2, 174, 175, 7, 34, 2, 2, 175, 176, 5, 16, 9, 2, 176, 177, 7, 35, 2, 2, 177, 184, 3, 2, 2, 2, 178, 179, 12, 19, 2, 2, 179, 180, 7, 36, 2, 2, 180, 184, 7, 56, 2, 2, 181, 182, 12, 8, 2, 2, 182, 184, 7, 39, 2, 2, 183, 131, 3, 2, 2, 2, 183, 134, 3, 2, 2, 2, 183, 137, 3, 2, 2, 2, 183, 140, 3, 2, 2, 2, 183, 143, 3, 2, 2, 2, 183, 146, 3, 2, 2, 2, 183, 149, 3, 2, 2, 2, 183, 152, 3, 2, 2, 2, 183, 155, 3, 2, 2, 2, 183, 158, 3, 2, 2, 2, 183, 161, 3, 2, 2, 2, 183, 164, 3, 2, 2, 2, 183, 167, 3, 2, 2, 2, 183, 173, 3, 2, 2, 2, 183, 178, 3, 2, 2, 2, 183, 181, 3, 2, 2, 2, 184, 187, 3, 2, 2, 2, 185, 183, 3, 2, 2, 2, 185, 186, 3, 2, 2, 2, 186, 17, 3, 2, 2, 2, 187, 185, 3, 2, 2, 2, 188, 207, 7, 53, 2, 2, 189, 207, 9, 9, 2, 2, 190, 207, 7, 54, 2, 2, 191, 207, 7, 55, 2, 2, 192, 198, 7, 34, 2, 2, 193, 194, 5, 16, 9, 2, 194, 195, 7, 20, 2, 2, 195, 197, 3, 2, 2, 2, 196, 193, 3, 2, 2, 2, 197, 200, 3, 2, 2, 2, 198, 196, 3, 2, 2, 2, 198, 199, 3, 2, 2, 2, 199, 202, 3, 2, 2, 2, 200, 198, 3, 2, 2, 2, 201, 203, 5, 16, 9, 2, 202, 201, 3, 2, 2, 2, 202, 203, 3, 2, 2, 2, 203, 204, 3, 2, 2, 2, 204, 207, 7, 35, 2, 2, 205, 207, 7, 56, 2, 2, 206, 188, 3, 2, 2, 2, 206, 189, 3, 2, 2, 2, 206, 190, 3, 2, 2, 2, 206, 191, 3, 2, 2, 2, 206, 192, 3, 2, 2, 2, 206, 205, 3, 2, 2, 2, 207, 19, 3, 2, 2, 2, 20, 23, 32, 37, 44, 54, 61, 73, 78, 94, 98, 105, 114, 129, 183, 185, 198, 202, 206] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 59, 210, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 3, 2, 7, 2, 22, 10, 2, 12, 2, 14, 2, 25, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 33, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 38, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 43, 10, 4, 12, 4, 14, 4, 46, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 55, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 60, 10, 5, 12, 5, 14, 5, 63, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 72, 10, 6, 12, 6, 14, 6, 75, 11, 6, 3, 6, 3, 6, 5, 6, 79, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 95, 10, 6, 3, 6, 3, 6, 5, 6, 99, 10, 6, 3, 7, 3, 7, 3, 7, 6, 7, 104, 10, 7, 13, 7, 14, 7, 105, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 7, 8, 113, 10, 8, 12, 8, 14, 8, 116, 11, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 130, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 184, 10, 9, 12, 9, 14, 9, 187, 11, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 198, 10, 10, 12, 10, 14, 10, 201, 11, 10, 3, 10, 5, 10, 204, 10, 10, 3, 10, 3, 10, 5, 10, 208, 10, 10, 3, 10, 2, 3, 16, 11, 2, 4, 6, 8, 10, 12, 14, 16, 18, 2, 10, 3, 2, 7, 17, 3, 2, 18, 19, 4, 2, 11, 12, 37, 37, 3, 2, 8, 10, 3, 2, 11, 12, 3, 2, 13, 14, 3, 2, 40, 45, 3, 2, 51, 52, 2, 244, 2, 23, 3, 2, 2, 2, 4, 32, 3, 2, 2, 2, 6, 54, 3, 2, 2, 2, 8, 56, 3, 2, 2, 2, 10, 98, 3, 2, 2, 2, 12, 100, 3, 2, 2, 2, 14, 114, 3, 2, 2, 2, 16, 129, 3, 2, 2, 2, 18, 207, 3, 2, 2, 2, 20, 22, 5, 4, 3, 2, 21, 20, 3, 2, 2, 2, 22, 25, 3, 2, 2, 2, 23, 21, 3, 2, 2, 2, 23, 24, 3, 2, 2, 2, 24, 26, 3, 2, 2, 2, 25, 23, 3, 2, 2, 2, 26, 27, 7, 2, 2, 3, 27, 3, 3, 2, 2, 2, 28, 29, 5, 6, 4, 2, 29, 30, 7, 3, 2, 2, 30, 33, 3, 2, 2, 2, 31, 33, 5, 10, 6, 2, 32, 28, 3, 2, 2, 2, 32, 31, 3, 2, 2, 2, 33, 5, 3, 2, 2, 2, 34, 55, 7, 4, 2, 2, 35, 37, 7, 5, 2, 2, 36, 38, 5, 14, 8, 2, 37, 36, 3, 2, 2, 2, 37, 38, 3, 2, 2, 2, 38, 55, 3, 2, 2, 2, 39, 40, 5, 8, 5, 2, 40, 41, 7, 6, 2, 2, 41, 43, 3, 2, 2, 2, 42, 39, 3, 2, 2, 2, 43, 46, 3, 2, 2, 2, 44, 42, 3, 2, 2, 2, 44, 45, 3, 2, 2, 2, 45, 47, 3, 2, 2, 2, 46, 44, 3, 2, 2, 2, 47, 55, 5, 14, 8, 2, 48, 49, 5, 16, 9, 2, 49, 50, 9, 2, 2, 2, 50, 51, 7, 6, 2, 2, 51, 52, 5, 16, 9, 2, 52, 55, 3, 2, 2, 2, 53, 55, 9, 3, 2, 2, 54, 34, 3, 2, 2, 2, 54, 35, 3, 2, 2, 2, 54, 44, 3, 2, 2, 2, 54, 48, 3, 2, 2, 2, 54, 53, 3, 2, 2, 2, 55, 7, 3, 2, 2, 2, 56, 61, 5, 16, 9, 2, 57, 58, 7, 20, 2, 2, 58, 60, 5, 16, 9, 2, 59, 57, 3, 2, 2, 2, 60, 63, 3, 2, 2, 2, 61, 59, 3, 2, 2, 2, 61, 62, 3, 2, 2, 2, 62, 9, 3, 2, 2, 2, 63, 61, 3, 2, 2, 2, 64, 65, 7, 21, 2, 2, 65, 66, 5, 16, 9, 2, 66, 73, 5, 12, 7, 2, 67, 68, 7, 22, 2, 2, 68, 69, 5, 16, 9, 2, 69, 70, 5, 12, 7, 2, 70, 72, 3, 2, 2, 2, 71, 67, 3, 2, 2, 2, 72, 75, 3, 2, 2, 2, 73, 71, 3, 2, 2, 2, 73, 74, 3, 2, 2, 2, 74, 78, 3, 2, 2, 2, 75, 73, 3, 2, 2, 2, 76, 77, 7, 23, 2, 2, 77, 79, 5, 12, 7, 2, 78, 76, 3, 2, 2, 2, 78, 79, 3, 2, 2, 2, 79, 99, 3, 2, 2, 2, 80, 81, 7, 24, 2, 2, 81, 82, 5, 16, 9, 2, 82, 83, 5, 12, 7, 2, 83, 99, 3, 2, 2, 2, 84, 85, 7, 25, 2, 2, 85, 86, 5, 16, 9, 2, 86, 87, 5, 12, 7, 2, 87, 99, 3, 2, 2, 2, 88, 89, 7, 26, 2, 2, 89, 90, 5, 14, 8, 2, 90, 91, 7, 27, 2, 2, 91, 94, 5, 14, 8, 2, 92, 93, 7, 28, 2, 2, 93, 95, 5, 14, 8, 2, 94, 92, 3, 2, 2, 2, 94, 95, 3, 2, 2, 2, 95, 96, 3, 2, 2, 2, 96, 97, 5, 12, 7, 2, 97, 99, 3, 2, 2, 2, 98, 64, 3, 2, 2, 2, 98, 80, 3, 2, 2, 2, 98, 84, 3, 2, 2, 2, 98, 88, 3, 2, 2, 2, 99, 11, 3, 2, 2, 2, 100, 101, 7, 29, 2, 2, 101, 103, 7, 30, 2, 2, 102, 104, 5, 4, 3, 2, 103, 102, 3, 2, 2, 2, 104, 105, 3, 2, 2, 2, 105, 103, 3, 2, 2, 2, 105, 106, 3, 2, 2, 2, 106, 107, 3, 2, 2, 2, 107, 108, 7, 31, 2, 2, 108, 13, 3, 2, 2, 2, 109, 110, 5, 16, 9, 2, 110, 111, 7, 20, 2, 2, 111, 113, 3, 2, 2, 2, 112, 109, 3, 2, 2, 2, 113, 116, 3, 2, 2, 2, 114, 112, 3, 2, 2, 2, 114, 115, 3, 2, 2, 2, 115, 117, 3, 2, 2, 2, 116, 114, 3, 2, 2, 2, 117, 118, 5, 16, 9, 2, 118, 15, 3, 2, 2, 2, 119, 120, 8, 9, 1, 2, 120, 130, 5, 18, 10, 2, 121, 122, 7, 32, 2, 2, 122, 123, 5, 14, 8, 2, 123, 124, 7, 33, 2, 2, 124, 130, 3, 2, 2, 2, 125, 126, 9, 4, 2, 2, 126, 130, 5, 16, 9, 17, 127, 128, 7, 46, 2, 2, 128, 130, 5, 16, 9, 6, 129, 119, 3, 2, 2, 2, 129, 121, 3, 2, 2, 2, 129, 125, 3, 2, 2, 2, 129, 127, 3, 2, 2, 2, 130, 185, 3, 2, 2, 2, 131, 132, 12, 18, 2, 2, 132, 133, 7, 7, 2, 2, 133, 184, 5, 16, 9, 18, 134, 135, 12, 16, 2, 2, 135, 136, 9, 5, 2, 2, 136, 184, 5, 16, 9, 17, 137, 138, 12, 15, 2, 2, 138, 139, 9, 6, 2, 2, 139, 184, 5, 16, 9, 16, 140, 141, 12, 14, 2, 2, 141, 142, 9, 7, 2, 2, 142, 184, 5, 16, 9, 15, 143, 144, 12, 13, 2, 2, 144, 145, 7, 15, 2, 2, 145, 184, 5, 16, 9, 14, 146, 147, 12, 12, 2, 2, 147, 148, 7, 16, 2, 2, 148, 184, 5, 16, 9, 13, 149, 150, 12, 11, 2, 2, 150, 151, 7, 17, 2, 2, 151, 184, 5, 16, 9, 12, 152, 153, 12, 10, 2, 2, 153, 154, 7, 38, 2, 2, 154, 184, 5, 16, 9, 11, 155, 156, 12, 9, 2, 2, 156, 157, 7, 39, 2, 2, 157, 184, 5, 16, 9, 10, 158, 159, 12, 7, 2, 2, 159, 160, 9, 8, 2, 2, 160, 184, 5, 16, 9, 7, 161, 162, 12, 5, 2, 2, 162, 163, 7, 47, 2, 2, 163, 184, 5, 16, 9, 5, 164, 165, 12, 4, 2, 2, 165, 166, 7, 48, 2, 2, 166, 184, 5, 16, 9, 4, 167, 168, 12, 3, 2, 2, 168, 169, 7, 49, 2, 2, 169, 170, 5, 16, 9, 2, 170, 171, 7, 50, 2, 2, 171, 172, 5, 16, 9, 3, 172, 184, 3, 2, 2, 2, 173, 174, 12, 20, 2, 2, 174, 175, 7, 34, 2, 2, 175, 176, 5, 16, 9, 2, 176, 177, 7, 35, 2, 2, 177, 184, 3, 2, 2, 2, 178, 179, 12, 19, 2, 2, 179, 180, 7, 36, 2, 2, 180, 184, 7, 57, 2, 2, 181, 182, 12, 8, 2, 2, 182, 184, 7, 39, 2, 2, 183, 131, 3, 2, 2, 2, 183, 134, 3, 2, 2, 2, 183, 137, 3, 2, 2, 2, 183, 140, 3, 2, 2, 2, 183, 143, 3, 2, 2, 2, 183, 146, 3, 2, 2, 2, 183, 149, 3, 2, 2, 2, 183, 152, 3, 2, 2, 2, 183, 155, 3, 2, 2, 2, 183, 158, 3, 2, 2, 2, 183, 161, 3, 2, 2, 2, 183, 164, 3, 2, 2, 2, 183, 167, 3, 2, 2, 2, 183, 173, 3, 2, 2, 2, 183, 178, 3, 2, 2, 2, 183, 181, 3, 2, 2, 2, 184, 187, 3, 2, 2, 2, 185, 183, 3, 2, 2, 2, 185, 186, 3, 2, 2, 2, 186, 17, 3, 2, 2, 2, 187, 185, 3, 2, 2, 2, 188, 208, 7, 53, 2, 2, 189, 208, 7, 54, 2, 2, 190, 208, 9, 9, 2, 2, 191, 208, 7, 55, 2, 2, 192, 208, 7, 56, 2, 2, 193, 199, 7, 34, 2, 2, 194, 195, 5, 16, 9, 2, 195, 196, 7, 20, 2, 2, 196, 198, 3, 2, 2, 2, 197, 194, 3, 2, 2, 2, 198, 201, 3, 2, 2, 2, 199, 197, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 203, 3, 2, 2, 2, 201, 199, 3, 2, 2, 2, 202, 204, 5, 16, 9, 2, 203, 202, 3, 2, 2, 2, 203, 204, 3, 2, 2, 2, 204, 205, 3, 2, 2, 2, 205, 208, 7, 35, 2, 2, 206, 208, 7, 57, 2, 2, 207, 188, 3, 2, 2, 2, 207, 189, 3, 2, 2, 2, 207, 190, 3, 2, 2, 2, 207, 191, 3, 2, 2, 2, 207, 192, 3, 2, 2, 2, 207, 193, 3, 2, 2, 2, 207, 206, 3, 2, 2, 2, 208, 19, 3, 2, 2, 2, 20, 23, 32, 37, 44, 54, 61, 73, 78, 94, 98, 105, 114, 129, 183, 185, 199, 203, 207] \ No newline at end of file diff --git a/src/antlr/Pyxell.tokens b/src/antlr/Pyxell.tokens index fd632bc1..eb81542a 100644 --- a/src/antlr/Pyxell.tokens +++ b/src/antlr/Pyxell.tokens @@ -49,11 +49,12 @@ T__47=48 T__48=49 T__49=50 INT=51 -CHAR=52 -STRING=53 -ID=54 -WS=55 -ERR=56 +FLOAT=52 +CHAR=53 +STRING=54 +ID=55 +WS=56 +ERR=57 ';'=1 'skip'=2 'print'=3 @@ -69,8 +70,8 @@ ERR=56 '&'=13 '$'=14 '|'=15 -'continue'=16 -'break'=17 +'break'=16 +'continue'=17 ','=18 'if'=19 'elif'=20 diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp index fb4a4d8b..ec7beede 100644 --- a/src/antlr/PyxellLexer.interp +++ b/src/antlr/PyxellLexer.interp @@ -15,8 +15,8 @@ null '&' '$' '|' -'continue' 'break' +'continue' ',' 'if' 'elif' @@ -56,6 +56,7 @@ null null null null +null token symbolic names: null @@ -110,6 +111,7 @@ null null null INT +FLOAT CHAR STRING ID @@ -168,6 +170,7 @@ T__47 T__48 T__49 INT +FLOAT CHAR STRING ID @@ -185,4 +188,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 58, 334, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 6, 52, 284, 10, 52, 13, 52, 14, 52, 285, 3, 53, 3, 53, 3, 53, 3, 53, 7, 53, 292, 10, 53, 12, 53, 14, 53, 295, 11, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 7, 54, 303, 10, 54, 12, 54, 14, 54, 306, 11, 54, 3, 54, 3, 54, 3, 55, 3, 55, 7, 55, 312, 10, 55, 12, 55, 14, 55, 315, 11, 55, 3, 56, 3, 56, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 5, 58, 324, 10, 58, 3, 59, 6, 59, 327, 10, 59, 13, 59, 14, 59, 328, 3, 59, 3, 59, 3, 60, 3, 60, 2, 2, 61, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 2, 113, 2, 115, 2, 117, 57, 119, 58, 3, 2, 10, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 339, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 3, 121, 3, 2, 2, 2, 5, 123, 3, 2, 2, 2, 7, 128, 3, 2, 2, 2, 9, 134, 3, 2, 2, 2, 11, 136, 3, 2, 2, 2, 13, 138, 3, 2, 2, 2, 15, 140, 3, 2, 2, 2, 17, 142, 3, 2, 2, 2, 19, 144, 3, 2, 2, 2, 21, 146, 3, 2, 2, 2, 23, 148, 3, 2, 2, 2, 25, 151, 3, 2, 2, 2, 27, 154, 3, 2, 2, 2, 29, 156, 3, 2, 2, 2, 31, 158, 3, 2, 2, 2, 33, 160, 3, 2, 2, 2, 35, 169, 3, 2, 2, 2, 37, 175, 3, 2, 2, 2, 39, 177, 3, 2, 2, 2, 41, 180, 3, 2, 2, 2, 43, 185, 3, 2, 2, 2, 45, 190, 3, 2, 2, 2, 47, 196, 3, 2, 2, 2, 49, 202, 3, 2, 2, 2, 51, 206, 3, 2, 2, 2, 53, 209, 3, 2, 2, 2, 55, 214, 3, 2, 2, 2, 57, 217, 3, 2, 2, 2, 59, 219, 3, 2, 2, 2, 61, 221, 3, 2, 2, 2, 63, 223, 3, 2, 2, 2, 65, 225, 3, 2, 2, 2, 67, 227, 3, 2, 2, 2, 69, 229, 3, 2, 2, 2, 71, 231, 3, 2, 2, 2, 73, 233, 3, 2, 2, 2, 75, 236, 3, 2, 2, 2, 77, 240, 3, 2, 2, 2, 79, 243, 3, 2, 2, 2, 81, 246, 3, 2, 2, 2, 83, 248, 3, 2, 2, 2, 85, 251, 3, 2, 2, 2, 87, 253, 3, 2, 2, 2, 89, 256, 3, 2, 2, 2, 91, 260, 3, 2, 2, 2, 93, 264, 3, 2, 2, 2, 95, 267, 3, 2, 2, 2, 97, 269, 3, 2, 2, 2, 99, 271, 3, 2, 2, 2, 101, 276, 3, 2, 2, 2, 103, 283, 3, 2, 2, 2, 105, 287, 3, 2, 2, 2, 107, 298, 3, 2, 2, 2, 109, 309, 3, 2, 2, 2, 111, 316, 3, 2, 2, 2, 113, 318, 3, 2, 2, 2, 115, 323, 3, 2, 2, 2, 117, 326, 3, 2, 2, 2, 119, 332, 3, 2, 2, 2, 121, 122, 7, 61, 2, 2, 122, 4, 3, 2, 2, 2, 123, 124, 7, 117, 2, 2, 124, 125, 7, 109, 2, 2, 125, 126, 7, 107, 2, 2, 126, 127, 7, 114, 2, 2, 127, 6, 3, 2, 2, 2, 128, 129, 7, 114, 2, 2, 129, 130, 7, 116, 2, 2, 130, 131, 7, 107, 2, 2, 131, 132, 7, 112, 2, 2, 132, 133, 7, 118, 2, 2, 133, 8, 3, 2, 2, 2, 134, 135, 7, 63, 2, 2, 135, 10, 3, 2, 2, 2, 136, 137, 7, 96, 2, 2, 137, 12, 3, 2, 2, 2, 138, 139, 7, 44, 2, 2, 139, 14, 3, 2, 2, 2, 140, 141, 7, 49, 2, 2, 141, 16, 3, 2, 2, 2, 142, 143, 7, 39, 2, 2, 143, 18, 3, 2, 2, 2, 144, 145, 7, 45, 2, 2, 145, 20, 3, 2, 2, 2, 146, 147, 7, 47, 2, 2, 147, 22, 3, 2, 2, 2, 148, 149, 7, 62, 2, 2, 149, 150, 7, 62, 2, 2, 150, 24, 3, 2, 2, 2, 151, 152, 7, 64, 2, 2, 152, 153, 7, 64, 2, 2, 153, 26, 3, 2, 2, 2, 154, 155, 7, 40, 2, 2, 155, 28, 3, 2, 2, 2, 156, 157, 7, 38, 2, 2, 157, 30, 3, 2, 2, 2, 158, 159, 7, 126, 2, 2, 159, 32, 3, 2, 2, 2, 160, 161, 7, 101, 2, 2, 161, 162, 7, 113, 2, 2, 162, 163, 7, 112, 2, 2, 163, 164, 7, 118, 2, 2, 164, 165, 7, 107, 2, 2, 165, 166, 7, 112, 2, 2, 166, 167, 7, 119, 2, 2, 167, 168, 7, 103, 2, 2, 168, 34, 3, 2, 2, 2, 169, 170, 7, 100, 2, 2, 170, 171, 7, 116, 2, 2, 171, 172, 7, 103, 2, 2, 172, 173, 7, 99, 2, 2, 173, 174, 7, 109, 2, 2, 174, 36, 3, 2, 2, 2, 175, 176, 7, 46, 2, 2, 176, 38, 3, 2, 2, 2, 177, 178, 7, 107, 2, 2, 178, 179, 7, 104, 2, 2, 179, 40, 3, 2, 2, 2, 180, 181, 7, 103, 2, 2, 181, 182, 7, 110, 2, 2, 182, 183, 7, 107, 2, 2, 183, 184, 7, 104, 2, 2, 184, 42, 3, 2, 2, 2, 185, 186, 7, 103, 2, 2, 186, 187, 7, 110, 2, 2, 187, 188, 7, 117, 2, 2, 188, 189, 7, 103, 2, 2, 189, 44, 3, 2, 2, 2, 190, 191, 7, 121, 2, 2, 191, 192, 7, 106, 2, 2, 192, 193, 7, 107, 2, 2, 193, 194, 7, 110, 2, 2, 194, 195, 7, 103, 2, 2, 195, 46, 3, 2, 2, 2, 196, 197, 7, 119, 2, 2, 197, 198, 7, 112, 2, 2, 198, 199, 7, 118, 2, 2, 199, 200, 7, 107, 2, 2, 200, 201, 7, 110, 2, 2, 201, 48, 3, 2, 2, 2, 202, 203, 7, 104, 2, 2, 203, 204, 7, 113, 2, 2, 204, 205, 7, 116, 2, 2, 205, 50, 3, 2, 2, 2, 206, 207, 7, 107, 2, 2, 207, 208, 7, 112, 2, 2, 208, 52, 3, 2, 2, 2, 209, 210, 7, 117, 2, 2, 210, 211, 7, 118, 2, 2, 211, 212, 7, 103, 2, 2, 212, 213, 7, 114, 2, 2, 213, 54, 3, 2, 2, 2, 214, 215, 7, 102, 2, 2, 215, 216, 7, 113, 2, 2, 216, 56, 3, 2, 2, 2, 217, 218, 7, 125, 2, 2, 218, 58, 3, 2, 2, 2, 219, 220, 7, 127, 2, 2, 220, 60, 3, 2, 2, 2, 221, 222, 7, 42, 2, 2, 222, 62, 3, 2, 2, 2, 223, 224, 7, 43, 2, 2, 224, 64, 3, 2, 2, 2, 225, 226, 7, 93, 2, 2, 226, 66, 3, 2, 2, 2, 227, 228, 7, 95, 2, 2, 228, 68, 3, 2, 2, 2, 229, 230, 7, 48, 2, 2, 230, 70, 3, 2, 2, 2, 231, 232, 7, 128, 2, 2, 232, 72, 3, 2, 2, 2, 233, 234, 7, 48, 2, 2, 234, 235, 7, 48, 2, 2, 235, 74, 3, 2, 2, 2, 236, 237, 7, 48, 2, 2, 237, 238, 7, 48, 2, 2, 238, 239, 7, 48, 2, 2, 239, 76, 3, 2, 2, 2, 240, 241, 7, 63, 2, 2, 241, 242, 7, 63, 2, 2, 242, 78, 3, 2, 2, 2, 243, 244, 7, 35, 2, 2, 244, 245, 7, 63, 2, 2, 245, 80, 3, 2, 2, 2, 246, 247, 7, 62, 2, 2, 247, 82, 3, 2, 2, 2, 248, 249, 7, 62, 2, 2, 249, 250, 7, 63, 2, 2, 250, 84, 3, 2, 2, 2, 251, 252, 7, 64, 2, 2, 252, 86, 3, 2, 2, 2, 253, 254, 7, 64, 2, 2, 254, 255, 7, 63, 2, 2, 255, 88, 3, 2, 2, 2, 256, 257, 7, 112, 2, 2, 257, 258, 7, 113, 2, 2, 258, 259, 7, 118, 2, 2, 259, 90, 3, 2, 2, 2, 260, 261, 7, 99, 2, 2, 261, 262, 7, 112, 2, 2, 262, 263, 7, 102, 2, 2, 263, 92, 3, 2, 2, 2, 264, 265, 7, 113, 2, 2, 265, 266, 7, 116, 2, 2, 266, 94, 3, 2, 2, 2, 267, 268, 7, 65, 2, 2, 268, 96, 3, 2, 2, 2, 269, 270, 7, 60, 2, 2, 270, 98, 3, 2, 2, 2, 271, 272, 7, 118, 2, 2, 272, 273, 7, 116, 2, 2, 273, 274, 7, 119, 2, 2, 274, 275, 7, 103, 2, 2, 275, 100, 3, 2, 2, 2, 276, 277, 7, 104, 2, 2, 277, 278, 7, 99, 2, 2, 278, 279, 7, 110, 2, 2, 279, 280, 7, 117, 2, 2, 280, 281, 7, 103, 2, 2, 281, 102, 3, 2, 2, 2, 282, 284, 5, 111, 56, 2, 283, 282, 3, 2, 2, 2, 284, 285, 3, 2, 2, 2, 285, 283, 3, 2, 2, 2, 285, 286, 3, 2, 2, 2, 286, 104, 3, 2, 2, 2, 287, 293, 7, 41, 2, 2, 288, 292, 10, 2, 2, 2, 289, 290, 7, 94, 2, 2, 290, 292, 9, 3, 2, 2, 291, 288, 3, 2, 2, 2, 291, 289, 3, 2, 2, 2, 292, 295, 3, 2, 2, 2, 293, 291, 3, 2, 2, 2, 293, 294, 3, 2, 2, 2, 294, 296, 3, 2, 2, 2, 295, 293, 3, 2, 2, 2, 296, 297, 7, 41, 2, 2, 297, 106, 3, 2, 2, 2, 298, 304, 7, 36, 2, 2, 299, 303, 10, 4, 2, 2, 300, 301, 7, 94, 2, 2, 301, 303, 9, 5, 2, 2, 302, 299, 3, 2, 2, 2, 302, 300, 3, 2, 2, 2, 303, 306, 3, 2, 2, 2, 304, 302, 3, 2, 2, 2, 304, 305, 3, 2, 2, 2, 305, 307, 3, 2, 2, 2, 306, 304, 3, 2, 2, 2, 307, 308, 7, 36, 2, 2, 308, 108, 3, 2, 2, 2, 309, 313, 5, 113, 57, 2, 310, 312, 5, 115, 58, 2, 311, 310, 3, 2, 2, 2, 312, 315, 3, 2, 2, 2, 313, 311, 3, 2, 2, 2, 313, 314, 3, 2, 2, 2, 314, 110, 3, 2, 2, 2, 315, 313, 3, 2, 2, 2, 316, 317, 9, 6, 2, 2, 317, 112, 3, 2, 2, 2, 318, 319, 9, 7, 2, 2, 319, 114, 3, 2, 2, 2, 320, 324, 5, 113, 57, 2, 321, 324, 5, 111, 56, 2, 322, 324, 9, 8, 2, 2, 323, 320, 3, 2, 2, 2, 323, 321, 3, 2, 2, 2, 323, 322, 3, 2, 2, 2, 324, 116, 3, 2, 2, 2, 325, 327, 9, 9, 2, 2, 326, 325, 3, 2, 2, 2, 327, 328, 3, 2, 2, 2, 328, 326, 3, 2, 2, 2, 328, 329, 3, 2, 2, 2, 329, 330, 3, 2, 2, 2, 330, 331, 8, 59, 2, 2, 331, 118, 3, 2, 2, 2, 332, 333, 11, 2, 2, 2, 333, 120, 3, 2, 2, 2, 11, 2, 285, 291, 293, 302, 304, 313, 323, 328, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 59, 358, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 6, 52, 286, 10, 52, 13, 52, 14, 52, 287, 3, 53, 6, 53, 291, 10, 53, 13, 53, 14, 53, 292, 3, 53, 3, 53, 6, 53, 297, 10, 53, 13, 53, 14, 53, 298, 3, 53, 3, 53, 5, 53, 303, 10, 53, 3, 53, 6, 53, 306, 10, 53, 13, 53, 14, 53, 307, 5, 53, 310, 10, 53, 3, 54, 3, 54, 3, 54, 3, 54, 7, 54, 316, 10, 54, 12, 54, 14, 54, 319, 11, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 7, 55, 327, 10, 55, 12, 55, 14, 55, 330, 11, 55, 3, 55, 3, 55, 3, 56, 3, 56, 7, 56, 336, 10, 56, 12, 56, 14, 56, 339, 11, 56, 3, 57, 3, 57, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 5, 59, 348, 10, 59, 3, 60, 6, 60, 351, 10, 60, 13, 60, 14, 60, 352, 3, 60, 3, 60, 3, 61, 3, 61, 2, 2, 62, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 2, 115, 2, 117, 2, 119, 58, 121, 59, 3, 2, 10, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 368, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 3, 123, 3, 2, 2, 2, 5, 125, 3, 2, 2, 2, 7, 130, 3, 2, 2, 2, 9, 136, 3, 2, 2, 2, 11, 138, 3, 2, 2, 2, 13, 140, 3, 2, 2, 2, 15, 142, 3, 2, 2, 2, 17, 144, 3, 2, 2, 2, 19, 146, 3, 2, 2, 2, 21, 148, 3, 2, 2, 2, 23, 150, 3, 2, 2, 2, 25, 153, 3, 2, 2, 2, 27, 156, 3, 2, 2, 2, 29, 158, 3, 2, 2, 2, 31, 160, 3, 2, 2, 2, 33, 162, 3, 2, 2, 2, 35, 168, 3, 2, 2, 2, 37, 177, 3, 2, 2, 2, 39, 179, 3, 2, 2, 2, 41, 182, 3, 2, 2, 2, 43, 187, 3, 2, 2, 2, 45, 192, 3, 2, 2, 2, 47, 198, 3, 2, 2, 2, 49, 204, 3, 2, 2, 2, 51, 208, 3, 2, 2, 2, 53, 211, 3, 2, 2, 2, 55, 216, 3, 2, 2, 2, 57, 219, 3, 2, 2, 2, 59, 221, 3, 2, 2, 2, 61, 223, 3, 2, 2, 2, 63, 225, 3, 2, 2, 2, 65, 227, 3, 2, 2, 2, 67, 229, 3, 2, 2, 2, 69, 231, 3, 2, 2, 2, 71, 233, 3, 2, 2, 2, 73, 235, 3, 2, 2, 2, 75, 238, 3, 2, 2, 2, 77, 242, 3, 2, 2, 2, 79, 245, 3, 2, 2, 2, 81, 248, 3, 2, 2, 2, 83, 250, 3, 2, 2, 2, 85, 253, 3, 2, 2, 2, 87, 255, 3, 2, 2, 2, 89, 258, 3, 2, 2, 2, 91, 262, 3, 2, 2, 2, 93, 266, 3, 2, 2, 2, 95, 269, 3, 2, 2, 2, 97, 271, 3, 2, 2, 2, 99, 273, 3, 2, 2, 2, 101, 278, 3, 2, 2, 2, 103, 285, 3, 2, 2, 2, 105, 290, 3, 2, 2, 2, 107, 311, 3, 2, 2, 2, 109, 322, 3, 2, 2, 2, 111, 333, 3, 2, 2, 2, 113, 340, 3, 2, 2, 2, 115, 342, 3, 2, 2, 2, 117, 347, 3, 2, 2, 2, 119, 350, 3, 2, 2, 2, 121, 356, 3, 2, 2, 2, 123, 124, 7, 61, 2, 2, 124, 4, 3, 2, 2, 2, 125, 126, 7, 117, 2, 2, 126, 127, 7, 109, 2, 2, 127, 128, 7, 107, 2, 2, 128, 129, 7, 114, 2, 2, 129, 6, 3, 2, 2, 2, 130, 131, 7, 114, 2, 2, 131, 132, 7, 116, 2, 2, 132, 133, 7, 107, 2, 2, 133, 134, 7, 112, 2, 2, 134, 135, 7, 118, 2, 2, 135, 8, 3, 2, 2, 2, 136, 137, 7, 63, 2, 2, 137, 10, 3, 2, 2, 2, 138, 139, 7, 96, 2, 2, 139, 12, 3, 2, 2, 2, 140, 141, 7, 44, 2, 2, 141, 14, 3, 2, 2, 2, 142, 143, 7, 49, 2, 2, 143, 16, 3, 2, 2, 2, 144, 145, 7, 39, 2, 2, 145, 18, 3, 2, 2, 2, 146, 147, 7, 45, 2, 2, 147, 20, 3, 2, 2, 2, 148, 149, 7, 47, 2, 2, 149, 22, 3, 2, 2, 2, 150, 151, 7, 62, 2, 2, 151, 152, 7, 62, 2, 2, 152, 24, 3, 2, 2, 2, 153, 154, 7, 64, 2, 2, 154, 155, 7, 64, 2, 2, 155, 26, 3, 2, 2, 2, 156, 157, 7, 40, 2, 2, 157, 28, 3, 2, 2, 2, 158, 159, 7, 38, 2, 2, 159, 30, 3, 2, 2, 2, 160, 161, 7, 126, 2, 2, 161, 32, 3, 2, 2, 2, 162, 163, 7, 100, 2, 2, 163, 164, 7, 116, 2, 2, 164, 165, 7, 103, 2, 2, 165, 166, 7, 99, 2, 2, 166, 167, 7, 109, 2, 2, 167, 34, 3, 2, 2, 2, 168, 169, 7, 101, 2, 2, 169, 170, 7, 113, 2, 2, 170, 171, 7, 112, 2, 2, 171, 172, 7, 118, 2, 2, 172, 173, 7, 107, 2, 2, 173, 174, 7, 112, 2, 2, 174, 175, 7, 119, 2, 2, 175, 176, 7, 103, 2, 2, 176, 36, 3, 2, 2, 2, 177, 178, 7, 46, 2, 2, 178, 38, 3, 2, 2, 2, 179, 180, 7, 107, 2, 2, 180, 181, 7, 104, 2, 2, 181, 40, 3, 2, 2, 2, 182, 183, 7, 103, 2, 2, 183, 184, 7, 110, 2, 2, 184, 185, 7, 107, 2, 2, 185, 186, 7, 104, 2, 2, 186, 42, 3, 2, 2, 2, 187, 188, 7, 103, 2, 2, 188, 189, 7, 110, 2, 2, 189, 190, 7, 117, 2, 2, 190, 191, 7, 103, 2, 2, 191, 44, 3, 2, 2, 2, 192, 193, 7, 121, 2, 2, 193, 194, 7, 106, 2, 2, 194, 195, 7, 107, 2, 2, 195, 196, 7, 110, 2, 2, 196, 197, 7, 103, 2, 2, 197, 46, 3, 2, 2, 2, 198, 199, 7, 119, 2, 2, 199, 200, 7, 112, 2, 2, 200, 201, 7, 118, 2, 2, 201, 202, 7, 107, 2, 2, 202, 203, 7, 110, 2, 2, 203, 48, 3, 2, 2, 2, 204, 205, 7, 104, 2, 2, 205, 206, 7, 113, 2, 2, 206, 207, 7, 116, 2, 2, 207, 50, 3, 2, 2, 2, 208, 209, 7, 107, 2, 2, 209, 210, 7, 112, 2, 2, 210, 52, 3, 2, 2, 2, 211, 212, 7, 117, 2, 2, 212, 213, 7, 118, 2, 2, 213, 214, 7, 103, 2, 2, 214, 215, 7, 114, 2, 2, 215, 54, 3, 2, 2, 2, 216, 217, 7, 102, 2, 2, 217, 218, 7, 113, 2, 2, 218, 56, 3, 2, 2, 2, 219, 220, 7, 125, 2, 2, 220, 58, 3, 2, 2, 2, 221, 222, 7, 127, 2, 2, 222, 60, 3, 2, 2, 2, 223, 224, 7, 42, 2, 2, 224, 62, 3, 2, 2, 2, 225, 226, 7, 43, 2, 2, 226, 64, 3, 2, 2, 2, 227, 228, 7, 93, 2, 2, 228, 66, 3, 2, 2, 2, 229, 230, 7, 95, 2, 2, 230, 68, 3, 2, 2, 2, 231, 232, 7, 48, 2, 2, 232, 70, 3, 2, 2, 2, 233, 234, 7, 128, 2, 2, 234, 72, 3, 2, 2, 2, 235, 236, 7, 48, 2, 2, 236, 237, 7, 48, 2, 2, 237, 74, 3, 2, 2, 2, 238, 239, 7, 48, 2, 2, 239, 240, 7, 48, 2, 2, 240, 241, 7, 48, 2, 2, 241, 76, 3, 2, 2, 2, 242, 243, 7, 63, 2, 2, 243, 244, 7, 63, 2, 2, 244, 78, 3, 2, 2, 2, 245, 246, 7, 35, 2, 2, 246, 247, 7, 63, 2, 2, 247, 80, 3, 2, 2, 2, 248, 249, 7, 62, 2, 2, 249, 82, 3, 2, 2, 2, 250, 251, 7, 62, 2, 2, 251, 252, 7, 63, 2, 2, 252, 84, 3, 2, 2, 2, 253, 254, 7, 64, 2, 2, 254, 86, 3, 2, 2, 2, 255, 256, 7, 64, 2, 2, 256, 257, 7, 63, 2, 2, 257, 88, 3, 2, 2, 2, 258, 259, 7, 112, 2, 2, 259, 260, 7, 113, 2, 2, 260, 261, 7, 118, 2, 2, 261, 90, 3, 2, 2, 2, 262, 263, 7, 99, 2, 2, 263, 264, 7, 112, 2, 2, 264, 265, 7, 102, 2, 2, 265, 92, 3, 2, 2, 2, 266, 267, 7, 113, 2, 2, 267, 268, 7, 116, 2, 2, 268, 94, 3, 2, 2, 2, 269, 270, 7, 65, 2, 2, 270, 96, 3, 2, 2, 2, 271, 272, 7, 60, 2, 2, 272, 98, 3, 2, 2, 2, 273, 274, 7, 118, 2, 2, 274, 275, 7, 116, 2, 2, 275, 276, 7, 119, 2, 2, 276, 277, 7, 103, 2, 2, 277, 100, 3, 2, 2, 2, 278, 279, 7, 104, 2, 2, 279, 280, 7, 99, 2, 2, 280, 281, 7, 110, 2, 2, 281, 282, 7, 117, 2, 2, 282, 283, 7, 103, 2, 2, 283, 102, 3, 2, 2, 2, 284, 286, 5, 113, 57, 2, 285, 284, 3, 2, 2, 2, 286, 287, 3, 2, 2, 2, 287, 285, 3, 2, 2, 2, 287, 288, 3, 2, 2, 2, 288, 104, 3, 2, 2, 2, 289, 291, 5, 113, 57, 2, 290, 289, 3, 2, 2, 2, 291, 292, 3, 2, 2, 2, 292, 290, 3, 2, 2, 2, 292, 293, 3, 2, 2, 2, 293, 294, 3, 2, 2, 2, 294, 296, 7, 48, 2, 2, 295, 297, 5, 113, 57, 2, 296, 295, 3, 2, 2, 2, 297, 298, 3, 2, 2, 2, 298, 296, 3, 2, 2, 2, 298, 299, 3, 2, 2, 2, 299, 309, 3, 2, 2, 2, 300, 302, 7, 103, 2, 2, 301, 303, 7, 47, 2, 2, 302, 301, 3, 2, 2, 2, 302, 303, 3, 2, 2, 2, 303, 305, 3, 2, 2, 2, 304, 306, 5, 113, 57, 2, 305, 304, 3, 2, 2, 2, 306, 307, 3, 2, 2, 2, 307, 305, 3, 2, 2, 2, 307, 308, 3, 2, 2, 2, 308, 310, 3, 2, 2, 2, 309, 300, 3, 2, 2, 2, 309, 310, 3, 2, 2, 2, 310, 106, 3, 2, 2, 2, 311, 317, 7, 41, 2, 2, 312, 316, 10, 2, 2, 2, 313, 314, 7, 94, 2, 2, 314, 316, 9, 3, 2, 2, 315, 312, 3, 2, 2, 2, 315, 313, 3, 2, 2, 2, 316, 319, 3, 2, 2, 2, 317, 315, 3, 2, 2, 2, 317, 318, 3, 2, 2, 2, 318, 320, 3, 2, 2, 2, 319, 317, 3, 2, 2, 2, 320, 321, 7, 41, 2, 2, 321, 108, 3, 2, 2, 2, 322, 328, 7, 36, 2, 2, 323, 327, 10, 4, 2, 2, 324, 325, 7, 94, 2, 2, 325, 327, 9, 5, 2, 2, 326, 323, 3, 2, 2, 2, 326, 324, 3, 2, 2, 2, 327, 330, 3, 2, 2, 2, 328, 326, 3, 2, 2, 2, 328, 329, 3, 2, 2, 2, 329, 331, 3, 2, 2, 2, 330, 328, 3, 2, 2, 2, 331, 332, 7, 36, 2, 2, 332, 110, 3, 2, 2, 2, 333, 337, 5, 115, 58, 2, 334, 336, 5, 117, 59, 2, 335, 334, 3, 2, 2, 2, 336, 339, 3, 2, 2, 2, 337, 335, 3, 2, 2, 2, 337, 338, 3, 2, 2, 2, 338, 112, 3, 2, 2, 2, 339, 337, 3, 2, 2, 2, 340, 341, 9, 6, 2, 2, 341, 114, 3, 2, 2, 2, 342, 343, 9, 7, 2, 2, 343, 116, 3, 2, 2, 2, 344, 348, 5, 115, 58, 2, 345, 348, 5, 113, 57, 2, 346, 348, 9, 8, 2, 2, 347, 344, 3, 2, 2, 2, 347, 345, 3, 2, 2, 2, 347, 346, 3, 2, 2, 2, 348, 118, 3, 2, 2, 2, 349, 351, 9, 9, 2, 2, 350, 349, 3, 2, 2, 2, 351, 352, 3, 2, 2, 2, 352, 350, 3, 2, 2, 2, 352, 353, 3, 2, 2, 2, 353, 354, 3, 2, 2, 2, 354, 355, 8, 60, 2, 2, 355, 120, 3, 2, 2, 2, 356, 357, 11, 2, 2, 2, 357, 122, 3, 2, 2, 2, 16, 2, 287, 292, 298, 302, 307, 309, 315, 317, 326, 328, 337, 347, 352, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py index aa9cd86c..52474217 100644 --- a/src/antlr/PyxellLexer.py +++ b/src/antlr/PyxellLexer.py @@ -8,8 +8,8 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2:") - buf.write("\u014e\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2;") + buf.write("\u0166\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") @@ -18,135 +18,149 @@ def serializedATN(): buf.write("\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4,\t,\4-\t-\4.") buf.write("\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64") buf.write("\t\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:") - buf.write("\4;\t;\4<\t<\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3") - buf.write("\4\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\n") - buf.write("\3\n\3\13\3\13\3\f\3\f\3\f\3\r\3\r\3\r\3\16\3\16\3\17") - buf.write("\3\17\3\20\3\20\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21") - buf.write("\3\21\3\22\3\22\3\22\3\22\3\22\3\22\3\23\3\23\3\24\3\24") - buf.write("\3\24\3\25\3\25\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26") - buf.write("\3\27\3\27\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\30\3\30") - buf.write("\3\30\3\31\3\31\3\31\3\31\3\32\3\32\3\32\3\33\3\33\3\33") - buf.write("\3\33\3\33\3\34\3\34\3\34\3\35\3\35\3\36\3\36\3\37\3\37") - buf.write("\3 \3 \3!\3!\3\"\3\"\3#\3#\3$\3$\3%\3%\3%\3&\3&\3&\3&") - buf.write("\3\'\3\'\3\'\3(\3(\3(\3)\3)\3*\3*\3*\3+\3+\3,\3,\3,\3") - buf.write("-\3-\3-\3-\3.\3.\3.\3.\3/\3/\3/\3\60\3\60\3\61\3\61\3") - buf.write("\62\3\62\3\62\3\62\3\62\3\63\3\63\3\63\3\63\3\63\3\63") - buf.write("\3\64\6\64\u011c\n\64\r\64\16\64\u011d\3\65\3\65\3\65") - buf.write("\3\65\7\65\u0124\n\65\f\65\16\65\u0127\13\65\3\65\3\65") - buf.write("\3\66\3\66\3\66\3\66\7\66\u012f\n\66\f\66\16\66\u0132") - buf.write("\13\66\3\66\3\66\3\67\3\67\7\67\u0138\n\67\f\67\16\67") - buf.write("\u013b\13\67\38\38\39\39\3:\3:\3:\5:\u0144\n:\3;\6;\u0147") - buf.write("\n;\r;\16;\u0148\3;\3;\3<\3<\2\2=\3\3\5\4\7\5\t\6\13\7") - buf.write("\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21") - buf.write("!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34\67") - buf.write("\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61") - buf.write("a\62c\63e\64g\65i\66k\67m8o\2q\2s\2u9w:\3\2\n\4\2))^^") - buf.write("\6\2))^^ppvv\4\2$$^^\6\2$$^^ppvv\3\2\62;\5\2C\\aac|\4") - buf.write("\2))aa\5\2\13\f\17\17\"\"\2\u0153\2\3\3\2\2\2\2\5\3\2") - buf.write("\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2") - buf.write("\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2") - buf.write("\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37") - buf.write("\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2") - buf.write("\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2") - buf.write("\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2") - buf.write("\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2") - buf.write("\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2") - buf.write("\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3") - buf.write("\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a") - buf.write("\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2") - buf.write("k\3\2\2\2\2m\3\2\2\2\2u\3\2\2\2\2w\3\2\2\2\3y\3\2\2\2") - buf.write("\5{\3\2\2\2\7\u0080\3\2\2\2\t\u0086\3\2\2\2\13\u0088\3") - buf.write("\2\2\2\r\u008a\3\2\2\2\17\u008c\3\2\2\2\21\u008e\3\2\2") - buf.write("\2\23\u0090\3\2\2\2\25\u0092\3\2\2\2\27\u0094\3\2\2\2") - buf.write("\31\u0097\3\2\2\2\33\u009a\3\2\2\2\35\u009c\3\2\2\2\37") - buf.write("\u009e\3\2\2\2!\u00a0\3\2\2\2#\u00a9\3\2\2\2%\u00af\3") - buf.write("\2\2\2\'\u00b1\3\2\2\2)\u00b4\3\2\2\2+\u00b9\3\2\2\2-") - buf.write("\u00be\3\2\2\2/\u00c4\3\2\2\2\61\u00ca\3\2\2\2\63\u00ce") - buf.write("\3\2\2\2\65\u00d1\3\2\2\2\67\u00d6\3\2\2\29\u00d9\3\2") - buf.write("\2\2;\u00db\3\2\2\2=\u00dd\3\2\2\2?\u00df\3\2\2\2A\u00e1") - buf.write("\3\2\2\2C\u00e3\3\2\2\2E\u00e5\3\2\2\2G\u00e7\3\2\2\2") - buf.write("I\u00e9\3\2\2\2K\u00ec\3\2\2\2M\u00f0\3\2\2\2O\u00f3\3") - buf.write("\2\2\2Q\u00f6\3\2\2\2S\u00f8\3\2\2\2U\u00fb\3\2\2\2W\u00fd") - buf.write("\3\2\2\2Y\u0100\3\2\2\2[\u0104\3\2\2\2]\u0108\3\2\2\2") - buf.write("_\u010b\3\2\2\2a\u010d\3\2\2\2c\u010f\3\2\2\2e\u0114\3") - buf.write("\2\2\2g\u011b\3\2\2\2i\u011f\3\2\2\2k\u012a\3\2\2\2m\u0135") - buf.write("\3\2\2\2o\u013c\3\2\2\2q\u013e\3\2\2\2s\u0143\3\2\2\2") - buf.write("u\u0146\3\2\2\2w\u014c\3\2\2\2yz\7=\2\2z\4\3\2\2\2{|\7") - buf.write("u\2\2|}\7m\2\2}~\7k\2\2~\177\7r\2\2\177\6\3\2\2\2\u0080") - buf.write("\u0081\7r\2\2\u0081\u0082\7t\2\2\u0082\u0083\7k\2\2\u0083") - buf.write("\u0084\7p\2\2\u0084\u0085\7v\2\2\u0085\b\3\2\2\2\u0086") - buf.write("\u0087\7?\2\2\u0087\n\3\2\2\2\u0088\u0089\7`\2\2\u0089") - buf.write("\f\3\2\2\2\u008a\u008b\7,\2\2\u008b\16\3\2\2\2\u008c\u008d") - buf.write("\7\61\2\2\u008d\20\3\2\2\2\u008e\u008f\7\'\2\2\u008f\22") - buf.write("\3\2\2\2\u0090\u0091\7-\2\2\u0091\24\3\2\2\2\u0092\u0093") - buf.write("\7/\2\2\u0093\26\3\2\2\2\u0094\u0095\7>\2\2\u0095\u0096") - buf.write("\7>\2\2\u0096\30\3\2\2\2\u0097\u0098\7@\2\2\u0098\u0099") - buf.write("\7@\2\2\u0099\32\3\2\2\2\u009a\u009b\7(\2\2\u009b\34\3") - buf.write("\2\2\2\u009c\u009d\7&\2\2\u009d\36\3\2\2\2\u009e\u009f") - buf.write("\7~\2\2\u009f \3\2\2\2\u00a0\u00a1\7e\2\2\u00a1\u00a2") - buf.write("\7q\2\2\u00a2\u00a3\7p\2\2\u00a3\u00a4\7v\2\2\u00a4\u00a5") - buf.write("\7k\2\2\u00a5\u00a6\7p\2\2\u00a6\u00a7\7w\2\2\u00a7\u00a8") - buf.write("\7g\2\2\u00a8\"\3\2\2\2\u00a9\u00aa\7d\2\2\u00aa\u00ab") - buf.write("\7t\2\2\u00ab\u00ac\7g\2\2\u00ac\u00ad\7c\2\2\u00ad\u00ae") - buf.write("\7m\2\2\u00ae$\3\2\2\2\u00af\u00b0\7.\2\2\u00b0&\3\2\2") - buf.write("\2\u00b1\u00b2\7k\2\2\u00b2\u00b3\7h\2\2\u00b3(\3\2\2") - buf.write("\2\u00b4\u00b5\7g\2\2\u00b5\u00b6\7n\2\2\u00b6\u00b7\7") - buf.write("k\2\2\u00b7\u00b8\7h\2\2\u00b8*\3\2\2\2\u00b9\u00ba\7") - buf.write("g\2\2\u00ba\u00bb\7n\2\2\u00bb\u00bc\7u\2\2\u00bc\u00bd") - buf.write("\7g\2\2\u00bd,\3\2\2\2\u00be\u00bf\7y\2\2\u00bf\u00c0") - buf.write("\7j\2\2\u00c0\u00c1\7k\2\2\u00c1\u00c2\7n\2\2\u00c2\u00c3") - buf.write("\7g\2\2\u00c3.\3\2\2\2\u00c4\u00c5\7w\2\2\u00c5\u00c6") - buf.write("\7p\2\2\u00c6\u00c7\7v\2\2\u00c7\u00c8\7k\2\2\u00c8\u00c9") - buf.write("\7n\2\2\u00c9\60\3\2\2\2\u00ca\u00cb\7h\2\2\u00cb\u00cc") - buf.write("\7q\2\2\u00cc\u00cd\7t\2\2\u00cd\62\3\2\2\2\u00ce\u00cf") - buf.write("\7k\2\2\u00cf\u00d0\7p\2\2\u00d0\64\3\2\2\2\u00d1\u00d2") - buf.write("\7u\2\2\u00d2\u00d3\7v\2\2\u00d3\u00d4\7g\2\2\u00d4\u00d5") - buf.write("\7r\2\2\u00d5\66\3\2\2\2\u00d6\u00d7\7f\2\2\u00d7\u00d8") - buf.write("\7q\2\2\u00d88\3\2\2\2\u00d9\u00da\7}\2\2\u00da:\3\2\2") - buf.write("\2\u00db\u00dc\7\177\2\2\u00dc<\3\2\2\2\u00dd\u00de\7") - buf.write("*\2\2\u00de>\3\2\2\2\u00df\u00e0\7+\2\2\u00e0@\3\2\2\2") - buf.write("\u00e1\u00e2\7]\2\2\u00e2B\3\2\2\2\u00e3\u00e4\7_\2\2") - buf.write("\u00e4D\3\2\2\2\u00e5\u00e6\7\60\2\2\u00e6F\3\2\2\2\u00e7") - buf.write("\u00e8\7\u0080\2\2\u00e8H\3\2\2\2\u00e9\u00ea\7\60\2\2") - buf.write("\u00ea\u00eb\7\60\2\2\u00ebJ\3\2\2\2\u00ec\u00ed\7\60") - buf.write("\2\2\u00ed\u00ee\7\60\2\2\u00ee\u00ef\7\60\2\2\u00efL") - buf.write("\3\2\2\2\u00f0\u00f1\7?\2\2\u00f1\u00f2\7?\2\2\u00f2N") - buf.write("\3\2\2\2\u00f3\u00f4\7#\2\2\u00f4\u00f5\7?\2\2\u00f5P") - buf.write("\3\2\2\2\u00f6\u00f7\7>\2\2\u00f7R\3\2\2\2\u00f8\u00f9") - buf.write("\7>\2\2\u00f9\u00fa\7?\2\2\u00faT\3\2\2\2\u00fb\u00fc") - buf.write("\7@\2\2\u00fcV\3\2\2\2\u00fd\u00fe\7@\2\2\u00fe\u00ff") - buf.write("\7?\2\2\u00ffX\3\2\2\2\u0100\u0101\7p\2\2\u0101\u0102") - buf.write("\7q\2\2\u0102\u0103\7v\2\2\u0103Z\3\2\2\2\u0104\u0105") - buf.write("\7c\2\2\u0105\u0106\7p\2\2\u0106\u0107\7f\2\2\u0107\\") - buf.write("\3\2\2\2\u0108\u0109\7q\2\2\u0109\u010a\7t\2\2\u010a^") - buf.write("\3\2\2\2\u010b\u010c\7A\2\2\u010c`\3\2\2\2\u010d\u010e") - buf.write("\7<\2\2\u010eb\3\2\2\2\u010f\u0110\7v\2\2\u0110\u0111") - buf.write("\7t\2\2\u0111\u0112\7w\2\2\u0112\u0113\7g\2\2\u0113d\3") - buf.write("\2\2\2\u0114\u0115\7h\2\2\u0115\u0116\7c\2\2\u0116\u0117") - buf.write("\7n\2\2\u0117\u0118\7u\2\2\u0118\u0119\7g\2\2\u0119f\3") - buf.write("\2\2\2\u011a\u011c\5o8\2\u011b\u011a\3\2\2\2\u011c\u011d") - buf.write("\3\2\2\2\u011d\u011b\3\2\2\2\u011d\u011e\3\2\2\2\u011e") - buf.write("h\3\2\2\2\u011f\u0125\7)\2\2\u0120\u0124\n\2\2\2\u0121") - buf.write("\u0122\7^\2\2\u0122\u0124\t\3\2\2\u0123\u0120\3\2\2\2") - buf.write("\u0123\u0121\3\2\2\2\u0124\u0127\3\2\2\2\u0125\u0123\3") - buf.write("\2\2\2\u0125\u0126\3\2\2\2\u0126\u0128\3\2\2\2\u0127\u0125") - buf.write("\3\2\2\2\u0128\u0129\7)\2\2\u0129j\3\2\2\2\u012a\u0130") - buf.write("\7$\2\2\u012b\u012f\n\4\2\2\u012c\u012d\7^\2\2\u012d\u012f") - buf.write("\t\5\2\2\u012e\u012b\3\2\2\2\u012e\u012c\3\2\2\2\u012f") - buf.write("\u0132\3\2\2\2\u0130\u012e\3\2\2\2\u0130\u0131\3\2\2\2") - buf.write("\u0131\u0133\3\2\2\2\u0132\u0130\3\2\2\2\u0133\u0134\7") - buf.write("$\2\2\u0134l\3\2\2\2\u0135\u0139\5q9\2\u0136\u0138\5s") - buf.write(":\2\u0137\u0136\3\2\2\2\u0138\u013b\3\2\2\2\u0139\u0137") - buf.write("\3\2\2\2\u0139\u013a\3\2\2\2\u013an\3\2\2\2\u013b\u0139") - buf.write("\3\2\2\2\u013c\u013d\t\6\2\2\u013dp\3\2\2\2\u013e\u013f") - buf.write("\t\7\2\2\u013fr\3\2\2\2\u0140\u0144\5q9\2\u0141\u0144") - buf.write("\5o8\2\u0142\u0144\t\b\2\2\u0143\u0140\3\2\2\2\u0143\u0141") - buf.write("\3\2\2\2\u0143\u0142\3\2\2\2\u0144t\3\2\2\2\u0145\u0147") - buf.write("\t\t\2\2\u0146\u0145\3\2\2\2\u0147\u0148\3\2\2\2\u0148") - buf.write("\u0146\3\2\2\2\u0148\u0149\3\2\2\2\u0149\u014a\3\2\2\2") - buf.write("\u014a\u014b\b;\2\2\u014bv\3\2\2\2\u014c\u014d\13\2\2") - buf.write("\2\u014dx\3\2\2\2\13\2\u011d\u0123\u0125\u012e\u0130\u0139") - buf.write("\u0143\u0148\3\b\2\2") + buf.write("\4;\t;\4<\t<\4=\t=\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\4\3\4") + buf.write("\3\4\3\4\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3") + buf.write("\t\3\n\3\n\3\13\3\13\3\f\3\f\3\f\3\r\3\r\3\r\3\16\3\16") + buf.write("\3\17\3\17\3\20\3\20\3\21\3\21\3\21\3\21\3\21\3\21\3\22") + buf.write("\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\23\3\23\3\24") + buf.write("\3\24\3\24\3\25\3\25\3\25\3\25\3\25\3\26\3\26\3\26\3\26") + buf.write("\3\26\3\27\3\27\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\30") + buf.write("\3\30\3\30\3\31\3\31\3\31\3\31\3\32\3\32\3\32\3\33\3\33") + buf.write("\3\33\3\33\3\33\3\34\3\34\3\34\3\35\3\35\3\36\3\36\3\37") + buf.write("\3\37\3 \3 \3!\3!\3\"\3\"\3#\3#\3$\3$\3%\3%\3%\3&\3&\3") + buf.write("&\3&\3\'\3\'\3\'\3(\3(\3(\3)\3)\3*\3*\3*\3+\3+\3,\3,\3") + buf.write(",\3-\3-\3-\3-\3.\3.\3.\3.\3/\3/\3/\3\60\3\60\3\61\3\61") + buf.write("\3\62\3\62\3\62\3\62\3\62\3\63\3\63\3\63\3\63\3\63\3\63") + buf.write("\3\64\6\64\u011e\n\64\r\64\16\64\u011f\3\65\6\65\u0123") + buf.write("\n\65\r\65\16\65\u0124\3\65\3\65\6\65\u0129\n\65\r\65") + buf.write("\16\65\u012a\3\65\3\65\5\65\u012f\n\65\3\65\6\65\u0132") + buf.write("\n\65\r\65\16\65\u0133\5\65\u0136\n\65\3\66\3\66\3\66") + buf.write("\3\66\7\66\u013c\n\66\f\66\16\66\u013f\13\66\3\66\3\66") + buf.write("\3\67\3\67\3\67\3\67\7\67\u0147\n\67\f\67\16\67\u014a") + buf.write("\13\67\3\67\3\67\38\38\78\u0150\n8\f8\168\u0153\138\3") + buf.write("9\39\3:\3:\3;\3;\3;\5;\u015c\n;\3<\6<\u015f\n<\r<\16<") + buf.write("\u0160\3<\3<\3=\3=\2\2>\3\3\5\4\7\5\t\6\13\7\r\b\17\t") + buf.write("\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23") + buf.write("%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34\67\359\36") + buf.write(";\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63") + buf.write("e\64g\65i\66k\67m8o9q\2s\2u\2w:y;\3\2\n\4\2))^^\6\2))") + buf.write("^^ppvv\4\2$$^^\6\2$$^^ppvv\3\2\62;\5\2C\\aac|\4\2))aa") + buf.write("\5\2\13\f\17\17\"\"\2\u0170\2\3\3\2\2\2\2\5\3\2\2\2\2") + buf.write("\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3") + buf.write("\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2") + buf.write("\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2") + buf.write("\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2") + buf.write("\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63") + buf.write("\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2") + buf.write("\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2") + buf.write("\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3") + buf.write("\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y") + buf.write("\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2") + buf.write("c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2") + buf.write("\2m\3\2\2\2\2o\3\2\2\2\2w\3\2\2\2\2y\3\2\2\2\3{\3\2\2") + buf.write("\2\5}\3\2\2\2\7\u0082\3\2\2\2\t\u0088\3\2\2\2\13\u008a") + buf.write("\3\2\2\2\r\u008c\3\2\2\2\17\u008e\3\2\2\2\21\u0090\3\2") + buf.write("\2\2\23\u0092\3\2\2\2\25\u0094\3\2\2\2\27\u0096\3\2\2") + buf.write("\2\31\u0099\3\2\2\2\33\u009c\3\2\2\2\35\u009e\3\2\2\2") + buf.write("\37\u00a0\3\2\2\2!\u00a2\3\2\2\2#\u00a8\3\2\2\2%\u00b1") + buf.write("\3\2\2\2\'\u00b3\3\2\2\2)\u00b6\3\2\2\2+\u00bb\3\2\2\2") + buf.write("-\u00c0\3\2\2\2/\u00c6\3\2\2\2\61\u00cc\3\2\2\2\63\u00d0") + buf.write("\3\2\2\2\65\u00d3\3\2\2\2\67\u00d8\3\2\2\29\u00db\3\2") + buf.write("\2\2;\u00dd\3\2\2\2=\u00df\3\2\2\2?\u00e1\3\2\2\2A\u00e3") + buf.write("\3\2\2\2C\u00e5\3\2\2\2E\u00e7\3\2\2\2G\u00e9\3\2\2\2") + buf.write("I\u00eb\3\2\2\2K\u00ee\3\2\2\2M\u00f2\3\2\2\2O\u00f5\3") + buf.write("\2\2\2Q\u00f8\3\2\2\2S\u00fa\3\2\2\2U\u00fd\3\2\2\2W\u00ff") + buf.write("\3\2\2\2Y\u0102\3\2\2\2[\u0106\3\2\2\2]\u010a\3\2\2\2") + buf.write("_\u010d\3\2\2\2a\u010f\3\2\2\2c\u0111\3\2\2\2e\u0116\3") + buf.write("\2\2\2g\u011d\3\2\2\2i\u0122\3\2\2\2k\u0137\3\2\2\2m\u0142") + buf.write("\3\2\2\2o\u014d\3\2\2\2q\u0154\3\2\2\2s\u0156\3\2\2\2") + buf.write("u\u015b\3\2\2\2w\u015e\3\2\2\2y\u0164\3\2\2\2{|\7=\2\2") + buf.write("|\4\3\2\2\2}~\7u\2\2~\177\7m\2\2\177\u0080\7k\2\2\u0080") + buf.write("\u0081\7r\2\2\u0081\6\3\2\2\2\u0082\u0083\7r\2\2\u0083") + buf.write("\u0084\7t\2\2\u0084\u0085\7k\2\2\u0085\u0086\7p\2\2\u0086") + buf.write("\u0087\7v\2\2\u0087\b\3\2\2\2\u0088\u0089\7?\2\2\u0089") + buf.write("\n\3\2\2\2\u008a\u008b\7`\2\2\u008b\f\3\2\2\2\u008c\u008d") + buf.write("\7,\2\2\u008d\16\3\2\2\2\u008e\u008f\7\61\2\2\u008f\20") + buf.write("\3\2\2\2\u0090\u0091\7\'\2\2\u0091\22\3\2\2\2\u0092\u0093") + buf.write("\7-\2\2\u0093\24\3\2\2\2\u0094\u0095\7/\2\2\u0095\26\3") + buf.write("\2\2\2\u0096\u0097\7>\2\2\u0097\u0098\7>\2\2\u0098\30") + buf.write("\3\2\2\2\u0099\u009a\7@\2\2\u009a\u009b\7@\2\2\u009b\32") + buf.write("\3\2\2\2\u009c\u009d\7(\2\2\u009d\34\3\2\2\2\u009e\u009f") + buf.write("\7&\2\2\u009f\36\3\2\2\2\u00a0\u00a1\7~\2\2\u00a1 \3\2") + buf.write("\2\2\u00a2\u00a3\7d\2\2\u00a3\u00a4\7t\2\2\u00a4\u00a5") + buf.write("\7g\2\2\u00a5\u00a6\7c\2\2\u00a6\u00a7\7m\2\2\u00a7\"") + buf.write("\3\2\2\2\u00a8\u00a9\7e\2\2\u00a9\u00aa\7q\2\2\u00aa\u00ab") + buf.write("\7p\2\2\u00ab\u00ac\7v\2\2\u00ac\u00ad\7k\2\2\u00ad\u00ae") + buf.write("\7p\2\2\u00ae\u00af\7w\2\2\u00af\u00b0\7g\2\2\u00b0$\3") + buf.write("\2\2\2\u00b1\u00b2\7.\2\2\u00b2&\3\2\2\2\u00b3\u00b4\7") + buf.write("k\2\2\u00b4\u00b5\7h\2\2\u00b5(\3\2\2\2\u00b6\u00b7\7") + buf.write("g\2\2\u00b7\u00b8\7n\2\2\u00b8\u00b9\7k\2\2\u00b9\u00ba") + buf.write("\7h\2\2\u00ba*\3\2\2\2\u00bb\u00bc\7g\2\2\u00bc\u00bd") + buf.write("\7n\2\2\u00bd\u00be\7u\2\2\u00be\u00bf\7g\2\2\u00bf,\3") + buf.write("\2\2\2\u00c0\u00c1\7y\2\2\u00c1\u00c2\7j\2\2\u00c2\u00c3") + buf.write("\7k\2\2\u00c3\u00c4\7n\2\2\u00c4\u00c5\7g\2\2\u00c5.\3") + buf.write("\2\2\2\u00c6\u00c7\7w\2\2\u00c7\u00c8\7p\2\2\u00c8\u00c9") + buf.write("\7v\2\2\u00c9\u00ca\7k\2\2\u00ca\u00cb\7n\2\2\u00cb\60") + buf.write("\3\2\2\2\u00cc\u00cd\7h\2\2\u00cd\u00ce\7q\2\2\u00ce\u00cf") + buf.write("\7t\2\2\u00cf\62\3\2\2\2\u00d0\u00d1\7k\2\2\u00d1\u00d2") + buf.write("\7p\2\2\u00d2\64\3\2\2\2\u00d3\u00d4\7u\2\2\u00d4\u00d5") + buf.write("\7v\2\2\u00d5\u00d6\7g\2\2\u00d6\u00d7\7r\2\2\u00d7\66") + buf.write("\3\2\2\2\u00d8\u00d9\7f\2\2\u00d9\u00da\7q\2\2\u00da8") + buf.write("\3\2\2\2\u00db\u00dc\7}\2\2\u00dc:\3\2\2\2\u00dd\u00de") + buf.write("\7\177\2\2\u00de<\3\2\2\2\u00df\u00e0\7*\2\2\u00e0>\3") + buf.write("\2\2\2\u00e1\u00e2\7+\2\2\u00e2@\3\2\2\2\u00e3\u00e4\7") + buf.write("]\2\2\u00e4B\3\2\2\2\u00e5\u00e6\7_\2\2\u00e6D\3\2\2\2") + buf.write("\u00e7\u00e8\7\60\2\2\u00e8F\3\2\2\2\u00e9\u00ea\7\u0080") + buf.write("\2\2\u00eaH\3\2\2\2\u00eb\u00ec\7\60\2\2\u00ec\u00ed\7") + buf.write("\60\2\2\u00edJ\3\2\2\2\u00ee\u00ef\7\60\2\2\u00ef\u00f0") + buf.write("\7\60\2\2\u00f0\u00f1\7\60\2\2\u00f1L\3\2\2\2\u00f2\u00f3") + buf.write("\7?\2\2\u00f3\u00f4\7?\2\2\u00f4N\3\2\2\2\u00f5\u00f6") + buf.write("\7#\2\2\u00f6\u00f7\7?\2\2\u00f7P\3\2\2\2\u00f8\u00f9") + buf.write("\7>\2\2\u00f9R\3\2\2\2\u00fa\u00fb\7>\2\2\u00fb\u00fc") + buf.write("\7?\2\2\u00fcT\3\2\2\2\u00fd\u00fe\7@\2\2\u00feV\3\2\2") + buf.write("\2\u00ff\u0100\7@\2\2\u0100\u0101\7?\2\2\u0101X\3\2\2") + buf.write("\2\u0102\u0103\7p\2\2\u0103\u0104\7q\2\2\u0104\u0105\7") + buf.write("v\2\2\u0105Z\3\2\2\2\u0106\u0107\7c\2\2\u0107\u0108\7") + buf.write("p\2\2\u0108\u0109\7f\2\2\u0109\\\3\2\2\2\u010a\u010b\7") + buf.write("q\2\2\u010b\u010c\7t\2\2\u010c^\3\2\2\2\u010d\u010e\7") + buf.write("A\2\2\u010e`\3\2\2\2\u010f\u0110\7<\2\2\u0110b\3\2\2\2") + buf.write("\u0111\u0112\7v\2\2\u0112\u0113\7t\2\2\u0113\u0114\7w") + buf.write("\2\2\u0114\u0115\7g\2\2\u0115d\3\2\2\2\u0116\u0117\7h") + buf.write("\2\2\u0117\u0118\7c\2\2\u0118\u0119\7n\2\2\u0119\u011a") + buf.write("\7u\2\2\u011a\u011b\7g\2\2\u011bf\3\2\2\2\u011c\u011e") + buf.write("\5q9\2\u011d\u011c\3\2\2\2\u011e\u011f\3\2\2\2\u011f\u011d") + buf.write("\3\2\2\2\u011f\u0120\3\2\2\2\u0120h\3\2\2\2\u0121\u0123") + buf.write("\5q9\2\u0122\u0121\3\2\2\2\u0123\u0124\3\2\2\2\u0124\u0122") + buf.write("\3\2\2\2\u0124\u0125\3\2\2\2\u0125\u0126\3\2\2\2\u0126") + buf.write("\u0128\7\60\2\2\u0127\u0129\5q9\2\u0128\u0127\3\2\2\2") + buf.write("\u0129\u012a\3\2\2\2\u012a\u0128\3\2\2\2\u012a\u012b\3") + buf.write("\2\2\2\u012b\u0135\3\2\2\2\u012c\u012e\7g\2\2\u012d\u012f") + buf.write("\7/\2\2\u012e\u012d\3\2\2\2\u012e\u012f\3\2\2\2\u012f") + buf.write("\u0131\3\2\2\2\u0130\u0132\5q9\2\u0131\u0130\3\2\2\2\u0132") + buf.write("\u0133\3\2\2\2\u0133\u0131\3\2\2\2\u0133\u0134\3\2\2\2") + buf.write("\u0134\u0136\3\2\2\2\u0135\u012c\3\2\2\2\u0135\u0136\3") + buf.write("\2\2\2\u0136j\3\2\2\2\u0137\u013d\7)\2\2\u0138\u013c\n") + buf.write("\2\2\2\u0139\u013a\7^\2\2\u013a\u013c\t\3\2\2\u013b\u0138") + buf.write("\3\2\2\2\u013b\u0139\3\2\2\2\u013c\u013f\3\2\2\2\u013d") + buf.write("\u013b\3\2\2\2\u013d\u013e\3\2\2\2\u013e\u0140\3\2\2\2") + buf.write("\u013f\u013d\3\2\2\2\u0140\u0141\7)\2\2\u0141l\3\2\2\2") + buf.write("\u0142\u0148\7$\2\2\u0143\u0147\n\4\2\2\u0144\u0145\7") + buf.write("^\2\2\u0145\u0147\t\5\2\2\u0146\u0143\3\2\2\2\u0146\u0144") + buf.write("\3\2\2\2\u0147\u014a\3\2\2\2\u0148\u0146\3\2\2\2\u0148") + buf.write("\u0149\3\2\2\2\u0149\u014b\3\2\2\2\u014a\u0148\3\2\2\2") + buf.write("\u014b\u014c\7$\2\2\u014cn\3\2\2\2\u014d\u0151\5s:\2\u014e") + buf.write("\u0150\5u;\2\u014f\u014e\3\2\2\2\u0150\u0153\3\2\2\2\u0151") + buf.write("\u014f\3\2\2\2\u0151\u0152\3\2\2\2\u0152p\3\2\2\2\u0153") + buf.write("\u0151\3\2\2\2\u0154\u0155\t\6\2\2\u0155r\3\2\2\2\u0156") + buf.write("\u0157\t\7\2\2\u0157t\3\2\2\2\u0158\u015c\5s:\2\u0159") + buf.write("\u015c\5q9\2\u015a\u015c\t\b\2\2\u015b\u0158\3\2\2\2\u015b") + buf.write("\u0159\3\2\2\2\u015b\u015a\3\2\2\2\u015cv\3\2\2\2\u015d") + buf.write("\u015f\t\t\2\2\u015e\u015d\3\2\2\2\u015f\u0160\3\2\2\2") + buf.write("\u0160\u015e\3\2\2\2\u0160\u0161\3\2\2\2\u0161\u0162\3") + buf.write("\2\2\2\u0162\u0163\b<\2\2\u0163x\3\2\2\2\u0164\u0165\13") + buf.write("\2\2\2\u0165z\3\2\2\2\20\2\u011f\u0124\u012a\u012e\u0133") + buf.write("\u0135\u013b\u013d\u0146\u0148\u0151\u015b\u0160\3\b\2") + buf.write("\2") return buf.getvalue() @@ -207,11 +221,12 @@ class PyxellLexer(Lexer): T__48 = 49 T__49 = 50 INT = 51 - CHAR = 52 - STRING = 53 - ID = 54 - WS = 55 - ERR = 56 + FLOAT = 52 + CHAR = 53 + STRING = 54 + ID = 55 + WS = 56 + ERR = 57 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -219,15 +234,15 @@ class PyxellLexer(Lexer): literalNames = [ "", "';'", "'skip'", "'print'", "'='", "'^'", "'*'", "'/'", "'%'", - "'+'", "'-'", "'<<'", "'>>'", "'&'", "'$'", "'|'", "'continue'", - "'break'", "','", "'if'", "'elif'", "'else'", "'while'", "'until'", - "'for'", "'in'", "'step'", "'do'", "'{'", "'}'", "'('", "')'", - "'['", "']'", "'.'", "'~'", "'..'", "'...'", "'=='", "'!='", - "'<'", "'<='", "'>'", "'>='", "'not'", "'and'", "'or'", "'?'", - "':'", "'true'", "'false'" ] + "'+'", "'-'", "'<<'", "'>>'", "'&'", "'$'", "'|'", "'break'", + "'continue'", "','", "'if'", "'elif'", "'else'", "'while'", + "'until'", "'for'", "'in'", "'step'", "'do'", "'{'", "'}'", + "'('", "')'", "'['", "']'", "'.'", "'~'", "'..'", "'...'", "'=='", + "'!='", "'<'", "'<='", "'>'", "'>='", "'not'", "'and'", "'or'", + "'?'", "':'", "'true'", "'false'" ] symbolicNames = [ "", - "INT", "CHAR", "STRING", "ID", "WS", "ERR" ] + "INT", "FLOAT", "CHAR", "STRING", "ID", "WS", "ERR" ] ruleNames = [ "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8", "T__9", "T__10", "T__11", "T__12", "T__13", @@ -237,8 +252,8 @@ class PyxellLexer(Lexer): "T__32", "T__33", "T__34", "T__35", "T__36", "T__37", "T__38", "T__39", "T__40", "T__41", "T__42", "T__43", "T__44", "T__45", "T__46", "T__47", "T__48", "T__49", - "INT", "CHAR", "STRING", "ID", "DIGIT", "ID_START", "ID_CONT", - "WS", "ERR" ] + "INT", "FLOAT", "CHAR", "STRING", "ID", "DIGIT", "ID_START", + "ID_CONT", "WS", "ERR" ] grammarFileName = "Pyxell.g4" diff --git a/src/antlr/PyxellLexer.tokens b/src/antlr/PyxellLexer.tokens index fd632bc1..eb81542a 100644 --- a/src/antlr/PyxellLexer.tokens +++ b/src/antlr/PyxellLexer.tokens @@ -49,11 +49,12 @@ T__47=48 T__48=49 T__49=50 INT=51 -CHAR=52 -STRING=53 -ID=54 -WS=55 -ERR=56 +FLOAT=52 +CHAR=53 +STRING=54 +ID=55 +WS=56 +ERR=57 ';'=1 'skip'=2 'print'=3 @@ -69,8 +70,8 @@ ERR=56 '&'=13 '$'=14 '|'=15 -'continue'=16 -'break'=17 +'break'=16 +'continue'=17 ','=18 'if'=19 'elif'=20 diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index b0edf99a..a332921e 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -8,8 +8,8 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3:") - buf.write("\u00d1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3;") + buf.write("\u00d2\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\3\2\7\2\26\n\2\f\2\16\2\31\13") buf.write("\2\3\2\3\2\3\3\3\3\3\3\3\3\5\3!\n\3\3\4\3\4\3\4\5\4&\n") buf.write("\4\3\4\3\4\3\4\7\4+\n\4\f\4\16\4.\13\4\3\4\3\4\3\4\3\4") @@ -24,13 +24,13 @@ def serializedATN(): buf.write("\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") buf.write("\t\3\t\3\t\3\t\3\t\7\t\u00b8\n\t\f\t\16\t\u00bb\13\t\3") - buf.write("\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\7\n\u00c5\n\n\f\n\16\n") - buf.write("\u00c8\13\n\3\n\5\n\u00cb\n\n\3\n\3\n\5\n\u00cf\n\n\3") - buf.write("\n\2\3\20\13\2\4\6\b\n\f\16\20\22\2\n\3\2\7\21\3\2\22") + buf.write("\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\7\n\u00c6\n\n\f\n\16") + buf.write("\n\u00c9\13\n\3\n\5\n\u00cc\n\n\3\n\3\n\5\n\u00d0\n\n") + buf.write("\3\n\2\3\20\13\2\4\6\b\n\f\16\20\22\2\n\3\2\7\21\3\2\22") buf.write("\23\4\2\13\f%%\3\2\b\n\3\2\13\f\3\2\r\16\3\2(-\3\2\63") - buf.write("\64\2\u00f2\2\27\3\2\2\2\4 \3\2\2\2\6\66\3\2\2\2\b8\3") + buf.write("\64\2\u00f4\2\27\3\2\2\2\4 \3\2\2\2\6\66\3\2\2\2\b8\3") buf.write("\2\2\2\nb\3\2\2\2\fd\3\2\2\2\16r\3\2\2\2\20\u0081\3\2") - buf.write("\2\2\22\u00ce\3\2\2\2\24\26\5\4\3\2\25\24\3\2\2\2\26\31") + buf.write("\2\2\22\u00cf\3\2\2\2\24\26\5\4\3\2\25\24\3\2\2\2\26\31") buf.write("\3\2\2\2\27\25\3\2\2\2\27\30\3\2\2\2\30\32\3\2\2\2\31") buf.write("\27\3\2\2\2\32\33\7\2\2\3\33\3\3\2\2\2\34\35\5\6\4\2\35") buf.write("\36\7\3\2\2\36!\3\2\2\2\37!\5\n\6\2 \34\3\2\2\2 \37\3") @@ -77,7 +77,7 @@ def serializedATN(): buf.write("\t\3\u00ac\u00b8\3\2\2\2\u00ad\u00ae\f\24\2\2\u00ae\u00af") buf.write("\7\"\2\2\u00af\u00b0\5\20\t\2\u00b0\u00b1\7#\2\2\u00b1") buf.write("\u00b8\3\2\2\2\u00b2\u00b3\f\23\2\2\u00b3\u00b4\7$\2\2") - buf.write("\u00b4\u00b8\78\2\2\u00b5\u00b6\f\b\2\2\u00b6\u00b8\7") + buf.write("\u00b4\u00b8\79\2\2\u00b5\u00b6\f\b\2\2\u00b6\u00b8\7") buf.write("\'\2\2\u00b7\u0083\3\2\2\2\u00b7\u0086\3\2\2\2\u00b7\u0089") buf.write("\3\2\2\2\u00b7\u008c\3\2\2\2\u00b7\u008f\3\2\2\2\u00b7") buf.write("\u0092\3\2\2\2\u00b7\u0095\3\2\2\2\u00b7\u0098\3\2\2\2") @@ -85,18 +85,19 @@ def serializedATN(): buf.write("\2\2\2\u00b7\u00a4\3\2\2\2\u00b7\u00a7\3\2\2\2\u00b7\u00ad") buf.write("\3\2\2\2\u00b7\u00b2\3\2\2\2\u00b7\u00b5\3\2\2\2\u00b8") buf.write("\u00bb\3\2\2\2\u00b9\u00b7\3\2\2\2\u00b9\u00ba\3\2\2\2") - buf.write("\u00ba\21\3\2\2\2\u00bb\u00b9\3\2\2\2\u00bc\u00cf\7\65") - buf.write("\2\2\u00bd\u00cf\t\t\2\2\u00be\u00cf\7\66\2\2\u00bf\u00cf") - buf.write("\7\67\2\2\u00c0\u00c6\7\"\2\2\u00c1\u00c2\5\20\t\2\u00c2") - buf.write("\u00c3\7\24\2\2\u00c3\u00c5\3\2\2\2\u00c4\u00c1\3\2\2") - buf.write("\2\u00c5\u00c8\3\2\2\2\u00c6\u00c4\3\2\2\2\u00c6\u00c7") - buf.write("\3\2\2\2\u00c7\u00ca\3\2\2\2\u00c8\u00c6\3\2\2\2\u00c9") - buf.write("\u00cb\5\20\t\2\u00ca\u00c9\3\2\2\2\u00ca\u00cb\3\2\2") - buf.write("\2\u00cb\u00cc\3\2\2\2\u00cc\u00cf\7#\2\2\u00cd\u00cf") - buf.write("\78\2\2\u00ce\u00bc\3\2\2\2\u00ce\u00bd\3\2\2\2\u00ce") - buf.write("\u00be\3\2\2\2\u00ce\u00bf\3\2\2\2\u00ce\u00c0\3\2\2\2") - buf.write("\u00ce\u00cd\3\2\2\2\u00cf\23\3\2\2\2\24\27 %,\66=IN^") - buf.write("bir\u0081\u00b7\u00b9\u00c6\u00ca\u00ce") + buf.write("\u00ba\21\3\2\2\2\u00bb\u00b9\3\2\2\2\u00bc\u00d0\7\65") + buf.write("\2\2\u00bd\u00d0\7\66\2\2\u00be\u00d0\t\t\2\2\u00bf\u00d0") + buf.write("\7\67\2\2\u00c0\u00d0\78\2\2\u00c1\u00c7\7\"\2\2\u00c2") + buf.write("\u00c3\5\20\t\2\u00c3\u00c4\7\24\2\2\u00c4\u00c6\3\2\2") + buf.write("\2\u00c5\u00c2\3\2\2\2\u00c6\u00c9\3\2\2\2\u00c7\u00c5") + buf.write("\3\2\2\2\u00c7\u00c8\3\2\2\2\u00c8\u00cb\3\2\2\2\u00c9") + buf.write("\u00c7\3\2\2\2\u00ca\u00cc\5\20\t\2\u00cb\u00ca\3\2\2") + buf.write("\2\u00cb\u00cc\3\2\2\2\u00cc\u00cd\3\2\2\2\u00cd\u00d0") + buf.write("\7#\2\2\u00ce\u00d0\79\2\2\u00cf\u00bc\3\2\2\2\u00cf\u00bd") + buf.write("\3\2\2\2\u00cf\u00be\3\2\2\2\u00cf\u00bf\3\2\2\2\u00cf") + buf.write("\u00c0\3\2\2\2\u00cf\u00c1\3\2\2\2\u00cf\u00ce\3\2\2\2") + buf.write("\u00d0\23\3\2\2\2\24\27 %,\66=IN^bir\u0081\u00b7\u00b9") + buf.write("\u00c7\u00cb\u00cf") return buf.getvalue() @@ -112,7 +113,7 @@ class PyxellParser ( Parser ): literalNames = [ "", "';'", "'skip'", "'print'", "'='", "'^'", "'*'", "'/'", "'%'", "'+'", "'-'", "'<<'", "'>>'", - "'&'", "'$'", "'|'", "'continue'", "'break'", "','", + "'&'", "'$'", "'|'", "'break'", "'continue'", "','", "'if'", "'elif'", "'else'", "'while'", "'until'", "'for'", "'in'", "'step'", "'do'", "'{'", "'}'", "'('", "')'", "'['", "']'", "'.'", "'~'", "'..'", "'...'", "'=='", @@ -131,8 +132,8 @@ class PyxellParser ( Parser ): "", "", "", "", "", "", "", "", "", "", "", "", - "", "", "", "INT", "CHAR", - "STRING", "ID", "WS", "ERR" ] + "", "", "", "INT", "FLOAT", + "CHAR", "STRING", "ID", "WS", "ERR" ] RULE_program = 0 RULE_stmt = 1 @@ -199,11 +200,12 @@ class PyxellParser ( Parser ): T__48=49 T__49=50 INT=51 - CHAR=52 - STRING=53 - ID=54 - WS=55 - ERR=56 + FLOAT=52 + CHAR=53 + STRING=54 + ID=55 + WS=56 + ERR=57 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -252,7 +254,7 @@ def program(self): self.state = 21 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__18) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__31) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__49) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__18) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__31) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__49) | (1 << PyxellParser.INT) | (1 << PyxellParser.FLOAT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): self.state = 18 self.stmt() self.state = 23 @@ -304,7 +306,7 @@ def stmt(self): self.state = 30 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__15, PyxellParser.T__16, PyxellParser.T__29, PyxellParser.T__31, PyxellParser.T__34, PyxellParser.T__43, PyxellParser.T__48, PyxellParser.T__49, PyxellParser.INT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: + if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__15, PyxellParser.T__16, PyxellParser.T__29, PyxellParser.T__31, PyxellParser.T__34, PyxellParser.T__43, PyxellParser.T__48, PyxellParser.T__49, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: self.enterOuterAlt(localctx, 1) self.state = 26 self.simple_stmt() @@ -459,7 +461,7 @@ def simple_stmt(self): self.state = 35 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__31) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__49) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__31) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__49) | (1 << PyxellParser.INT) | (1 << PyxellParser.FLOAT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): self.state = 34 self.tuple_expr() @@ -834,7 +836,7 @@ def block(self): self.state = 103 self._errHandler.sync(self) _la = self._input.LA(1) - if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__18) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__31) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__49) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0)): + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__18) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__31) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__49) | (1 << PyxellParser.INT) | (1 << PyxellParser.FLOAT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0)): break self.state = 105 @@ -1140,7 +1142,7 @@ def expr(self, _p:int=0): self.state = 127 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__31, PyxellParser.T__48, PyxellParser.T__49, PyxellParser.INT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: + if token in [PyxellParser.T__31, PyxellParser.T__48, PyxellParser.T__49, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: localctx = PyxellParser.ExprAtomContext(self, localctx) self._ctx = localctx _prevctx = localctx @@ -1464,6 +1466,22 @@ def copyFrom(self, ctx:ParserRuleContext): + class AtomFloatContext(AtomContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.AtomContext + super().__init__(parser) + self.copyFrom(ctx) + + def FLOAT(self): + return self.getToken(PyxellParser.FLOAT, 0) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAtomFloat" ): + return visitor.visitAtomFloat(self) + else: + return visitor.visitChildren(self) + + class AtomBoolContext(AtomContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.AtomContext @@ -1569,7 +1587,7 @@ def atom(self): self.enterRule(localctx, 16, self.RULE_atom) self._la = 0 # Token type try: - self.state = 204 + self.state = 205 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: @@ -1578,10 +1596,16 @@ def atom(self): self.state = 186 self.match(PyxellParser.INT) pass - elif token in [PyxellParser.T__48, PyxellParser.T__49]: - localctx = PyxellParser.AtomBoolContext(self, localctx) + elif token in [PyxellParser.FLOAT]: + localctx = PyxellParser.AtomFloatContext(self, localctx) self.enterOuterAlt(localctx, 2) self.state = 187 + self.match(PyxellParser.FLOAT) + pass + elif token in [PyxellParser.T__48, PyxellParser.T__49]: + localctx = PyxellParser.AtomBoolContext(self, localctx) + self.enterOuterAlt(localctx, 3) + self.state = 188 _la = self._input.LA(1) if not(_la==PyxellParser.T__48 or _la==PyxellParser.T__49): self._errHandler.recoverInline(self) @@ -1591,49 +1615,49 @@ def atom(self): pass elif token in [PyxellParser.CHAR]: localctx = PyxellParser.AtomCharContext(self, localctx) - self.enterOuterAlt(localctx, 3) - self.state = 188 + self.enterOuterAlt(localctx, 4) + self.state = 189 self.match(PyxellParser.CHAR) pass elif token in [PyxellParser.STRING]: localctx = PyxellParser.AtomStringContext(self, localctx) - self.enterOuterAlt(localctx, 4) - self.state = 189 + self.enterOuterAlt(localctx, 5) + self.state = 190 self.match(PyxellParser.STRING) pass elif token in [PyxellParser.T__31]: localctx = PyxellParser.AtomArrayContext(self, localctx) - self.enterOuterAlt(localctx, 5) - self.state = 190 + self.enterOuterAlt(localctx, 6) + self.state = 191 self.match(PyxellParser.T__31) - self.state = 196 + self.state = 197 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,15,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 191 - self.expr(0) self.state = 192 + self.expr(0) + self.state = 193 self.match(PyxellParser.T__17) - self.state = 198 + self.state = 199 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,15,self._ctx) - self.state = 200 + self.state = 201 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__31) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__49) | (1 << PyxellParser.INT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): - self.state = 199 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__31) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__49) | (1 << PyxellParser.INT) | (1 << PyxellParser.FLOAT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): + self.state = 200 self.expr(0) - self.state = 202 + self.state = 203 self.match(PyxellParser.T__32) pass elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) - self.enterOuterAlt(localctx, 6) - self.state = 203 + self.enterOuterAlt(localctx, 7) + self.state = 204 self.match(PyxellParser.ID) pass else: diff --git a/src/antlr/PyxellVisitor.py b/src/antlr/PyxellVisitor.py index ba3c69ac..a572ab30 100644 --- a/src/antlr/PyxellVisitor.py +++ b/src/antlr/PyxellVisitor.py @@ -134,6 +134,11 @@ def visitAtomInt(self, ctx:PyxellParser.AtomIntContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#AtomFloat. + def visitAtomFloat(self, ctx:PyxellParser.AtomFloatContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#AtomBool. def visitAtomBool(self, ctx:PyxellParser.AtomBoolContext): return self.visitChildren(ctx) diff --git a/src/compiler.py b/src/compiler.py index fd03459c..be1dd32f 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -19,10 +19,12 @@ def __init__(self): 'memcpy': ll.Function(self.module, tFunc([tPtr(), tPtr(), tInt]), 'memcpy'), 'write': ll.Function(self.module, tFunc([tString]), 'func.write'), 'writeInt': ll.Function(self.module, tFunc([tInt]), 'func.writeInt'), + 'writeFloat': ll.Function(self.module, tFunc([tFloat]), 'func.writeFloat'), 'writeBool': ll.Function(self.module, tFunc([tBool]), 'func.writeBool'), 'writeChar': ll.Function(self.module, tFunc([tChar]), 'func.writeChar'), 'putchar': ll.Function(self.module, tFunc([tChar]), 'putchar'), 'Int_pow': ll.Function(self.module, tFunc([tInt, tInt], tInt), 'func.Int_pow'), + 'Float_pow': ll.Function(self.module, tFunc([tFloat, tFloat], tFloat), 'func.Float_pow'), } @@ -71,9 +73,12 @@ def cast(self, ctx, value, type): return value def unify(self, ctx, *values): - if not all(values[0].type == value.type for value in values): + if all(value.type == values[0].type for value in values): + return values + elif all(value.type in (tInt, tFloat) for value in values): + return [(self.builder.sitofp(value, tFloat) if value.type == tInt else value) for value in values] + else: self.throw(ctx, err.UnknownType()) - return values def lvalue(self, ctx, expr, declare=None): if isinstance(expr, PyxellParser.ExprAtomContext): @@ -115,25 +120,37 @@ def memcpy(self, dest, src, length): return self.builder.call(self.builtins['memcpy'], [dest, src, size]) def unaryop(self, ctx, op, value): - if op in ('+', '-', '~'): - type = tInt + if op in ('+', '-'): + types = [tInt, tFloat] + elif op == '~': + types = [tInt] elif op == 'not': - type = tBool + types = [tBool] - if value.type != type: + if value.type not in types: self.throw(ctx, err.NoUnaryOperator(op, value.type)) if op == '+': return value elif op == '-': - return self.builder.neg(value) + if value.type == tInt: + return self.builder.sub(vInt(0), value) + elif value.type == tFloat: + return self.builder.fsub(vFloat(0), value) elif op in ('~', 'not'): return self.builder.not_(value) def binaryop(self, ctx, op, left, right): + if left.type in (tInt, tFloat) and right.type in (tInt, tFloat): + left, right = self.unify(ctx, left, right) + if op == '^': if left.type == right.type == tInt: return self.builder.call(self.builtins['Int_pow'], [left, right]) + + elif left.type == right.type == tFloat: + return self.builder.call(self.builtins['Float_pow'], [left, right]) + else: self.throw(ctx, err.NoBinaryOperator(op, left.type, right.type)) @@ -141,6 +158,9 @@ def binaryop(self, ctx, op, left, right): if left.type == right.type == tInt: return self.builder.mul(left, right) + elif left.type == right.type == tFloat: + return self.builder.fmul(left, right) + elif left.type.isCollection() and right.type == tInt: type = left.type subtype = type.subtype @@ -154,7 +174,6 @@ def binaryop(self, ctx, op, left, right): self.builder.store(vInt(0), index) with self.block() as (label_start, label_end): - i = self.builder.load(index) self.memcpy(self.builder.gep(dest, [i]), src, src_length) self.builder.store(self.builder.add(i, src_length), index) @@ -183,6 +202,10 @@ def binaryop(self, ctx, op, left, right): v6 = self.builder.mul(v1, right) v7 = self.builder.icmp_signed('!=', v6, left) return self.builder.select(v7, v5, v1) + + elif left.type == right.type == tFloat: + return self.builder.fdiv(left, right) + else: self.throw(ctx, err.NoBinaryOperator(op, left.type, right.type)) @@ -202,6 +225,9 @@ def binaryop(self, ctx, op, left, right): if left.type == right.type == tInt: return self.builder.add(left, right) + elif left.type == right.type == tFloat: + return self.builder.fadd(left, right) + elif left.type == right.type and left.type.isCollection(): type = left.type subtype = type.subtype @@ -225,10 +251,19 @@ def binaryop(self, ctx, op, left, right): else: self.throw(ctx, err.NoBinaryOperator(op, left.type, right.type)) + elif op == '-': + if left.type == right.type == tInt: + return self.builder.sub(left, right) + + elif left.type == right.type == tFloat: + return self.builder.fsub(left, right) + + else: + self.throw(ctx, err.NoBinaryOperator(op, left.type, right.type)) + else: if left.type == right.type == tInt: instruction = { - '-': self.builder.sub, '<<': self.builder.shl, '>>': self.builder.ashr, '&': self.builder.and_, @@ -240,12 +275,18 @@ def binaryop(self, ctx, op, left, right): self.throw(ctx, err.NoBinaryOperator(op, left.type, right.type)) def cmp(self, ctx, op, left, right): + if left.type in (tInt, tFloat) and right.type in (tInt, tFloat): + left, right = self.unify(ctx, left, right) + if left.type != right.type: self.throw(ctx, err.NotComparable(left.type, right.type)) if left.type in (tInt, tChar): return self.builder.icmp_signed(op, left, right) + elif left.type == tFloat: + return self.builder.fcmp_ordered(op, left, right) + elif left.type == tBool: return self.builder.icmp_unsigned(op, left, right) @@ -365,6 +406,9 @@ def print(self, ctx, value): if value.type == tInt: self.builder.call(self.builtins['writeInt'], [value]) + elif value.type == tFloat: + self.builder.call(self.builtins['writeFloat'], [value]) + elif value.type == tBool: self.builder.call(self.builtins['writeBool'], [value]) @@ -765,6 +809,9 @@ def visitExprTuple(self, ctx): def visitAtomInt(self, ctx): return vInt(ctx.INT()) + def visitAtomFloat(self, ctx): + return vFloat(ctx.FLOAT()) + def visitAtomBool(self, ctx): return vBool(ctx.getText() == 'true') diff --git a/src/types.py b/src/types.py index 5229e51e..6657d3d4 100644 --- a/src/types.py +++ b/src/types.py @@ -18,6 +18,7 @@ def __eq__(self, other): tVoid = ll.VoidType() tInt = ll.IntType(64) +tFloat = ll.DoubleType() tBool = ll.IntType(1) tChar = ll.IntType(8) @@ -69,6 +70,8 @@ def show(type): return 'Void' if type == tInt: return 'Int' + if type == tFloat: + return 'Float' if type == tBool: return 'Bool' if type == tChar: @@ -83,7 +86,10 @@ def show(type): def vInt(n): - return ll.Constant(tInt, n) + return ll.Constant(tInt, str(n)) + +def vFloat(f): + return ll.Constant(tFloat, str(f)) def vBool(b): return ll.Constant(tBool, int(b)) From b516360843fcb149e3f6c6915d8ba2a6d5131f51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Wed, 23 Oct 2019 22:13:10 +0200 Subject: [PATCH 030/100] Ranges with floating point numbers --- src/compiler.py | 33 +++++++++++++++++++++------------ src/errors.py | 6 ++++-- test/bad/loops/for13.err | 2 +- test/bad/loops/for14.err | 2 +- 4 files changed, 27 insertions(+), 16 deletions(-) diff --git a/src/compiler.py b/src/compiler.py index be1dd32f..e482a3d9 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -102,7 +102,8 @@ def assign(self, ctx, expr, value): self.builder.store(value, ptr) def inc(self, ptr, step=vInt(1)): - self.builder.store(self.builder.add(self.builder.load(ptr), step), ptr) + add = self.builder.fadd if ptr.type.pointee == tFloat else self.builder.add + self.builder.store(add(self.builder.load(ptr), step), ptr) def sizeof(self, type, length=vInt(1)): return self.builder.ptrtoint(self.builder.gep(vNull(type), [length]), tInt) @@ -579,26 +580,36 @@ def visitStmtFor(self, ctx): getters = [] def prepare(iterable, step): # must be a function so that lambdas work properly - desc = self.builder.icmp_signed('<', step, vInt(0)) if isinstance(iterable, PyxellParser.ExprRangeContext): values = [self.visit(expr) for expr in iterable.expr()] type = values[0].type types.append(type) - if type not in (tInt, tChar): + if type not in (tInt, tFloat, tChar): self.throw(iterable, err.UnknownType()) if len(values) > 1: values[1] = self.cast(iterable, values[1], type) - if type != tInt: - step = self.builder.trunc(step, type) + if step.type != type: + if type == tFloat: + step = self.builder.sitofp(step, type) + else: + self.cast(iterable, step, tInt) + if type == tChar: + step = self.builder.trunc(step, type) + if type == tFloat: + cmp = self.builder.fcmp_ordered + desc = cmp('<', step, vFloat(0)) + else: + cmp = self.builder.icmp_signed + desc = cmp('<', step, vInt(0)) index = self.builder.alloca(type) start = values[0] if len(values) == 1: cond = lambda v: vTrue elif iterable.dots.text == '..': - cond = lambda v: self.builder.select(desc, self.builder.icmp_signed('>=', v, values[1]), self.builder.icmp_signed('<=', v, values[1])) + cond = lambda v: self.builder.select(desc, cmp('>=', v, values[1]), cmp('<=', v, values[1])) elif iterable.dots.text == '...': - cond = lambda v: self.builder.select(desc, self.builder.icmp_signed('>', v, values[1]), self.builder.icmp_signed('<', v, values[1])) + cond = lambda v: self.builder.select(desc, cmp('>', v, values[1]), cmp('<', v, values[1])) getter = lambda v: v else: value = self.visit(iterable) @@ -608,6 +619,7 @@ def prepare(iterable, step): # must be a function so that lambdas work properly types.append(value.type.subtype) else: self.throw(ctx, err.NotIterable(value.type)) + desc = self.builder.icmp_signed('<', step, vInt(0)) index = self.builder.alloca(tInt) array = self.builder.extract_value(value, [0]) length = self.builder.extract_value(value, [1]) @@ -628,11 +640,8 @@ def prepare(iterable, step): # must be a function so that lambdas work properly _steps = [self.visit(expr) for expr in exprs[2].expr()] if len(_steps) == 1: _steps *= len(iterables) - if len(exprs) > 2: - t1 = tTuple([step.type for step in _steps]) - t2 = tTuple([tInt] * len(iterables)) - if t1 != t2: - self.throw(ctx, err.IllegalAssignment(t1, t2)) + if len(exprs) > 2 and len(_steps) != len(iterables): + self.throw(ctx, err.InvalidLoopStep()) for iterable, step in zip(iterables, _steps): prepare(iterable, step) diff --git a/src/errors.py b/src/errors.py index 66aa4e84..b3e6441c 100644 --- a/src/errors.py +++ b/src/errors.py @@ -10,10 +10,12 @@ def syntaxError(self, recognizer, offendingSymbol, line, column, msg, e): class PyxellError(Exception): - CannotUnpack = lambda t, n: f"Cannot unpack value of type `{t.show()}` into {n} values" - IllegalAssignment = lambda t1, t2: f"Illegal assignment from `{t1.show()}` to `{t2.show()}`" InvalidIndentation = lambda: f"Indentation error" InvalidSyntax = lambda: f"Syntax error" + + CannotUnpack = lambda t, n: f"Cannot unpack value of type `{t.show()}` into {n} values" + IllegalAssignment = lambda t1, t2: f"Illegal assignment from `{t1.show()}` to `{t2.show()}`" + InvalidLoopStep = lambda: f"Incompatible number of loop variables and step expressions" NoAttribute = lambda t, id: f"Type `{t.show()}` has no attribute `{id}`" NoBinaryOperator = lambda op, t1, t2: f"No binary operator `{op}` defined for `{t1.show()}` and `{t2.show()}`" NoUnaryOperator = lambda op, t: f"No unary operator `{op}` defined for `{t.show()}`" diff --git a/test/bad/loops/for13.err b/test/bad/loops/for13.err index 54d94efe..8778865b 100644 --- a/test/bad/loops/for13.err +++ b/test/bad/loops/for13.err @@ -1 +1 @@ -Illegal assignment from `Int*Int` to `Int`. \ No newline at end of file +Incompatible number of loop variables and step expressions. \ No newline at end of file diff --git a/test/bad/loops/for14.err b/test/bad/loops/for14.err index 5b32dcd9..8778865b 100644 --- a/test/bad/loops/for14.err +++ b/test/bad/loops/for14.err @@ -1 +1 @@ -Illegal assignment from `Int*Int` to `Int*Int*Int`. \ No newline at end of file +Incompatible number of loop variables and step expressions. \ No newline at end of file From 5add7a0c3cfcdd2fd460fb6464ac0aa3033b3cbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Thu, 24 Oct 2019 22:38:09 +0200 Subject: [PATCH 031/100] Declaring types for variables --- src/Pyxell.g4 | 11 + src/antlr/Pyxell.interp | 13 +- src/antlr/Pyxell.tokens | 24 +- src/antlr/PyxellLexer.interp | 17 +- src/antlr/PyxellLexer.py | 331 ++++++++-------- src/antlr/PyxellLexer.tokens | 24 +- src/antlr/PyxellParser.py | 747 +++++++++++++++++++++++------------ src/antlr/PyxellVisitor.py | 20 + src/compiler.py | 45 ++- src/errors.py | 1 + test/bad/arrays/decl01.err | 1 + test/bad/arrays/decl01.px | 3 + test/bad/tuples/decl01.err | 1 + test/bad/tuples/decl01.px | 2 + test/good/tuples/decl01.out | 1 + test/good/tuples/decl01.px | 3 + test/good/tuples/decl02.out | 1 + test/good/tuples/decl02.px | 4 + 18 files changed, 819 insertions(+), 430 deletions(-) create mode 100644 test/bad/arrays/decl01.err create mode 100644 test/bad/arrays/decl01.px create mode 100644 test/bad/tuples/decl01.err create mode 100644 test/bad/tuples/decl01.px create mode 100644 test/good/tuples/decl01.out create mode 100644 test/good/tuples/decl01.px create mode 100644 test/good/tuples/decl02.out create mode 100644 test/good/tuples/decl02.px diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index 09fd2373..87c10d11 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -12,6 +12,7 @@ stmt simple_stmt : 'skip' # StmtSkip | 'print' tuple_expr? # StmtPrint + | typ ID ('=' tuple_expr)? # StmtDecl | (lvalue '=')* tuple_expr # StmtAssg | expr op=('^' | '*' | '/' | '%' | '+' | '-' | '<<' | '>>' | '&' | '$' | '|') '=' expr # StmtAssgExpr | s=('break' | 'continue') # StmtLoopControl @@ -69,6 +70,16 @@ atom | ID # AtomId ; +typ + : 'Int' # TypePrimitive + | 'Float' # TypePrimitive + | 'Bool' # TypePrimitive + | 'Char' # TypePrimitive + | 'String' # TypePrimitive + | '[' typ ']' # TypeArray + | typ '*' typ # TypeTuple + ; + INT : DIGIT+ ; FLOAT : DIGIT+ '.' DIGIT+ ('e' '-'? DIGIT+)? ; CHAR : '\'' (~[\\'] | ('\\' ['\\nt]))* '\'' ; diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index b83eba0b..f61c84d2 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -50,6 +50,11 @@ null ':' 'true' 'false' +'Int' +'Float' +'Bool' +'Char' +'String' null null null @@ -110,6 +115,11 @@ null null null null +null +null +null +null +null INT FLOAT CHAR @@ -128,7 +138,8 @@ block tuple_expr expr atom +typ atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 59, 210, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 3, 2, 7, 2, 22, 10, 2, 12, 2, 14, 2, 25, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 33, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 38, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 43, 10, 4, 12, 4, 14, 4, 46, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 55, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 60, 10, 5, 12, 5, 14, 5, 63, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 72, 10, 6, 12, 6, 14, 6, 75, 11, 6, 3, 6, 3, 6, 5, 6, 79, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 95, 10, 6, 3, 6, 3, 6, 5, 6, 99, 10, 6, 3, 7, 3, 7, 3, 7, 6, 7, 104, 10, 7, 13, 7, 14, 7, 105, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 7, 8, 113, 10, 8, 12, 8, 14, 8, 116, 11, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 130, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 184, 10, 9, 12, 9, 14, 9, 187, 11, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 198, 10, 10, 12, 10, 14, 10, 201, 11, 10, 3, 10, 5, 10, 204, 10, 10, 3, 10, 3, 10, 5, 10, 208, 10, 10, 3, 10, 2, 3, 16, 11, 2, 4, 6, 8, 10, 12, 14, 16, 18, 2, 10, 3, 2, 7, 17, 3, 2, 18, 19, 4, 2, 11, 12, 37, 37, 3, 2, 8, 10, 3, 2, 11, 12, 3, 2, 13, 14, 3, 2, 40, 45, 3, 2, 51, 52, 2, 244, 2, 23, 3, 2, 2, 2, 4, 32, 3, 2, 2, 2, 6, 54, 3, 2, 2, 2, 8, 56, 3, 2, 2, 2, 10, 98, 3, 2, 2, 2, 12, 100, 3, 2, 2, 2, 14, 114, 3, 2, 2, 2, 16, 129, 3, 2, 2, 2, 18, 207, 3, 2, 2, 2, 20, 22, 5, 4, 3, 2, 21, 20, 3, 2, 2, 2, 22, 25, 3, 2, 2, 2, 23, 21, 3, 2, 2, 2, 23, 24, 3, 2, 2, 2, 24, 26, 3, 2, 2, 2, 25, 23, 3, 2, 2, 2, 26, 27, 7, 2, 2, 3, 27, 3, 3, 2, 2, 2, 28, 29, 5, 6, 4, 2, 29, 30, 7, 3, 2, 2, 30, 33, 3, 2, 2, 2, 31, 33, 5, 10, 6, 2, 32, 28, 3, 2, 2, 2, 32, 31, 3, 2, 2, 2, 33, 5, 3, 2, 2, 2, 34, 55, 7, 4, 2, 2, 35, 37, 7, 5, 2, 2, 36, 38, 5, 14, 8, 2, 37, 36, 3, 2, 2, 2, 37, 38, 3, 2, 2, 2, 38, 55, 3, 2, 2, 2, 39, 40, 5, 8, 5, 2, 40, 41, 7, 6, 2, 2, 41, 43, 3, 2, 2, 2, 42, 39, 3, 2, 2, 2, 43, 46, 3, 2, 2, 2, 44, 42, 3, 2, 2, 2, 44, 45, 3, 2, 2, 2, 45, 47, 3, 2, 2, 2, 46, 44, 3, 2, 2, 2, 47, 55, 5, 14, 8, 2, 48, 49, 5, 16, 9, 2, 49, 50, 9, 2, 2, 2, 50, 51, 7, 6, 2, 2, 51, 52, 5, 16, 9, 2, 52, 55, 3, 2, 2, 2, 53, 55, 9, 3, 2, 2, 54, 34, 3, 2, 2, 2, 54, 35, 3, 2, 2, 2, 54, 44, 3, 2, 2, 2, 54, 48, 3, 2, 2, 2, 54, 53, 3, 2, 2, 2, 55, 7, 3, 2, 2, 2, 56, 61, 5, 16, 9, 2, 57, 58, 7, 20, 2, 2, 58, 60, 5, 16, 9, 2, 59, 57, 3, 2, 2, 2, 60, 63, 3, 2, 2, 2, 61, 59, 3, 2, 2, 2, 61, 62, 3, 2, 2, 2, 62, 9, 3, 2, 2, 2, 63, 61, 3, 2, 2, 2, 64, 65, 7, 21, 2, 2, 65, 66, 5, 16, 9, 2, 66, 73, 5, 12, 7, 2, 67, 68, 7, 22, 2, 2, 68, 69, 5, 16, 9, 2, 69, 70, 5, 12, 7, 2, 70, 72, 3, 2, 2, 2, 71, 67, 3, 2, 2, 2, 72, 75, 3, 2, 2, 2, 73, 71, 3, 2, 2, 2, 73, 74, 3, 2, 2, 2, 74, 78, 3, 2, 2, 2, 75, 73, 3, 2, 2, 2, 76, 77, 7, 23, 2, 2, 77, 79, 5, 12, 7, 2, 78, 76, 3, 2, 2, 2, 78, 79, 3, 2, 2, 2, 79, 99, 3, 2, 2, 2, 80, 81, 7, 24, 2, 2, 81, 82, 5, 16, 9, 2, 82, 83, 5, 12, 7, 2, 83, 99, 3, 2, 2, 2, 84, 85, 7, 25, 2, 2, 85, 86, 5, 16, 9, 2, 86, 87, 5, 12, 7, 2, 87, 99, 3, 2, 2, 2, 88, 89, 7, 26, 2, 2, 89, 90, 5, 14, 8, 2, 90, 91, 7, 27, 2, 2, 91, 94, 5, 14, 8, 2, 92, 93, 7, 28, 2, 2, 93, 95, 5, 14, 8, 2, 94, 92, 3, 2, 2, 2, 94, 95, 3, 2, 2, 2, 95, 96, 3, 2, 2, 2, 96, 97, 5, 12, 7, 2, 97, 99, 3, 2, 2, 2, 98, 64, 3, 2, 2, 2, 98, 80, 3, 2, 2, 2, 98, 84, 3, 2, 2, 2, 98, 88, 3, 2, 2, 2, 99, 11, 3, 2, 2, 2, 100, 101, 7, 29, 2, 2, 101, 103, 7, 30, 2, 2, 102, 104, 5, 4, 3, 2, 103, 102, 3, 2, 2, 2, 104, 105, 3, 2, 2, 2, 105, 103, 3, 2, 2, 2, 105, 106, 3, 2, 2, 2, 106, 107, 3, 2, 2, 2, 107, 108, 7, 31, 2, 2, 108, 13, 3, 2, 2, 2, 109, 110, 5, 16, 9, 2, 110, 111, 7, 20, 2, 2, 111, 113, 3, 2, 2, 2, 112, 109, 3, 2, 2, 2, 113, 116, 3, 2, 2, 2, 114, 112, 3, 2, 2, 2, 114, 115, 3, 2, 2, 2, 115, 117, 3, 2, 2, 2, 116, 114, 3, 2, 2, 2, 117, 118, 5, 16, 9, 2, 118, 15, 3, 2, 2, 2, 119, 120, 8, 9, 1, 2, 120, 130, 5, 18, 10, 2, 121, 122, 7, 32, 2, 2, 122, 123, 5, 14, 8, 2, 123, 124, 7, 33, 2, 2, 124, 130, 3, 2, 2, 2, 125, 126, 9, 4, 2, 2, 126, 130, 5, 16, 9, 17, 127, 128, 7, 46, 2, 2, 128, 130, 5, 16, 9, 6, 129, 119, 3, 2, 2, 2, 129, 121, 3, 2, 2, 2, 129, 125, 3, 2, 2, 2, 129, 127, 3, 2, 2, 2, 130, 185, 3, 2, 2, 2, 131, 132, 12, 18, 2, 2, 132, 133, 7, 7, 2, 2, 133, 184, 5, 16, 9, 18, 134, 135, 12, 16, 2, 2, 135, 136, 9, 5, 2, 2, 136, 184, 5, 16, 9, 17, 137, 138, 12, 15, 2, 2, 138, 139, 9, 6, 2, 2, 139, 184, 5, 16, 9, 16, 140, 141, 12, 14, 2, 2, 141, 142, 9, 7, 2, 2, 142, 184, 5, 16, 9, 15, 143, 144, 12, 13, 2, 2, 144, 145, 7, 15, 2, 2, 145, 184, 5, 16, 9, 14, 146, 147, 12, 12, 2, 2, 147, 148, 7, 16, 2, 2, 148, 184, 5, 16, 9, 13, 149, 150, 12, 11, 2, 2, 150, 151, 7, 17, 2, 2, 151, 184, 5, 16, 9, 12, 152, 153, 12, 10, 2, 2, 153, 154, 7, 38, 2, 2, 154, 184, 5, 16, 9, 11, 155, 156, 12, 9, 2, 2, 156, 157, 7, 39, 2, 2, 157, 184, 5, 16, 9, 10, 158, 159, 12, 7, 2, 2, 159, 160, 9, 8, 2, 2, 160, 184, 5, 16, 9, 7, 161, 162, 12, 5, 2, 2, 162, 163, 7, 47, 2, 2, 163, 184, 5, 16, 9, 5, 164, 165, 12, 4, 2, 2, 165, 166, 7, 48, 2, 2, 166, 184, 5, 16, 9, 4, 167, 168, 12, 3, 2, 2, 168, 169, 7, 49, 2, 2, 169, 170, 5, 16, 9, 2, 170, 171, 7, 50, 2, 2, 171, 172, 5, 16, 9, 3, 172, 184, 3, 2, 2, 2, 173, 174, 12, 20, 2, 2, 174, 175, 7, 34, 2, 2, 175, 176, 5, 16, 9, 2, 176, 177, 7, 35, 2, 2, 177, 184, 3, 2, 2, 2, 178, 179, 12, 19, 2, 2, 179, 180, 7, 36, 2, 2, 180, 184, 7, 57, 2, 2, 181, 182, 12, 8, 2, 2, 182, 184, 7, 39, 2, 2, 183, 131, 3, 2, 2, 2, 183, 134, 3, 2, 2, 2, 183, 137, 3, 2, 2, 2, 183, 140, 3, 2, 2, 2, 183, 143, 3, 2, 2, 2, 183, 146, 3, 2, 2, 2, 183, 149, 3, 2, 2, 2, 183, 152, 3, 2, 2, 2, 183, 155, 3, 2, 2, 2, 183, 158, 3, 2, 2, 2, 183, 161, 3, 2, 2, 2, 183, 164, 3, 2, 2, 2, 183, 167, 3, 2, 2, 2, 183, 173, 3, 2, 2, 2, 183, 178, 3, 2, 2, 2, 183, 181, 3, 2, 2, 2, 184, 187, 3, 2, 2, 2, 185, 183, 3, 2, 2, 2, 185, 186, 3, 2, 2, 2, 186, 17, 3, 2, 2, 2, 187, 185, 3, 2, 2, 2, 188, 208, 7, 53, 2, 2, 189, 208, 7, 54, 2, 2, 190, 208, 9, 9, 2, 2, 191, 208, 7, 55, 2, 2, 192, 208, 7, 56, 2, 2, 193, 199, 7, 34, 2, 2, 194, 195, 5, 16, 9, 2, 195, 196, 7, 20, 2, 2, 196, 198, 3, 2, 2, 2, 197, 194, 3, 2, 2, 2, 198, 201, 3, 2, 2, 2, 199, 197, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 203, 3, 2, 2, 2, 201, 199, 3, 2, 2, 2, 202, 204, 5, 16, 9, 2, 203, 202, 3, 2, 2, 2, 203, 204, 3, 2, 2, 2, 204, 205, 3, 2, 2, 2, 205, 208, 7, 35, 2, 2, 206, 208, 7, 57, 2, 2, 207, 188, 3, 2, 2, 2, 207, 189, 3, 2, 2, 2, 207, 190, 3, 2, 2, 2, 207, 191, 3, 2, 2, 2, 207, 192, 3, 2, 2, 2, 207, 193, 3, 2, 2, 2, 207, 206, 3, 2, 2, 2, 208, 19, 3, 2, 2, 2, 20, 23, 32, 37, 44, 54, 61, 73, 78, 94, 98, 105, 114, 129, 183, 185, 199, 203, 207] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 64, 238, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 3, 2, 7, 2, 24, 10, 2, 12, 2, 14, 2, 27, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 35, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 40, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 46, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 51, 10, 4, 12, 4, 14, 4, 54, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 63, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 68, 10, 5, 12, 5, 14, 5, 71, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 80, 10, 6, 12, 6, 14, 6, 83, 11, 6, 3, 6, 3, 6, 5, 6, 87, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 103, 10, 6, 3, 6, 3, 6, 5, 6, 107, 10, 6, 3, 7, 3, 7, 3, 7, 6, 7, 112, 10, 7, 13, 7, 14, 7, 113, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 7, 8, 121, 10, 8, 12, 8, 14, 8, 124, 11, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 138, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 192, 10, 9, 12, 9, 14, 9, 195, 11, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 206, 10, 10, 12, 10, 14, 10, 209, 11, 10, 3, 10, 5, 10, 212, 10, 10, 3, 10, 3, 10, 5, 10, 216, 10, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 228, 10, 11, 3, 11, 3, 11, 3, 11, 7, 11, 233, 10, 11, 12, 11, 14, 11, 236, 11, 11, 3, 11, 2, 4, 16, 20, 12, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 2, 10, 3, 2, 7, 17, 3, 2, 18, 19, 4, 2, 11, 12, 37, 37, 3, 2, 8, 10, 3, 2, 11, 12, 3, 2, 13, 14, 3, 2, 40, 45, 3, 2, 51, 52, 2, 279, 2, 25, 3, 2, 2, 2, 4, 34, 3, 2, 2, 2, 6, 62, 3, 2, 2, 2, 8, 64, 3, 2, 2, 2, 10, 106, 3, 2, 2, 2, 12, 108, 3, 2, 2, 2, 14, 122, 3, 2, 2, 2, 16, 137, 3, 2, 2, 2, 18, 215, 3, 2, 2, 2, 20, 227, 3, 2, 2, 2, 22, 24, 5, 4, 3, 2, 23, 22, 3, 2, 2, 2, 24, 27, 3, 2, 2, 2, 25, 23, 3, 2, 2, 2, 25, 26, 3, 2, 2, 2, 26, 28, 3, 2, 2, 2, 27, 25, 3, 2, 2, 2, 28, 29, 7, 2, 2, 3, 29, 3, 3, 2, 2, 2, 30, 31, 5, 6, 4, 2, 31, 32, 7, 3, 2, 2, 32, 35, 3, 2, 2, 2, 33, 35, 5, 10, 6, 2, 34, 30, 3, 2, 2, 2, 34, 33, 3, 2, 2, 2, 35, 5, 3, 2, 2, 2, 36, 63, 7, 4, 2, 2, 37, 39, 7, 5, 2, 2, 38, 40, 5, 14, 8, 2, 39, 38, 3, 2, 2, 2, 39, 40, 3, 2, 2, 2, 40, 63, 3, 2, 2, 2, 41, 42, 5, 20, 11, 2, 42, 45, 7, 62, 2, 2, 43, 44, 7, 6, 2, 2, 44, 46, 5, 14, 8, 2, 45, 43, 3, 2, 2, 2, 45, 46, 3, 2, 2, 2, 46, 63, 3, 2, 2, 2, 47, 48, 5, 8, 5, 2, 48, 49, 7, 6, 2, 2, 49, 51, 3, 2, 2, 2, 50, 47, 3, 2, 2, 2, 51, 54, 3, 2, 2, 2, 52, 50, 3, 2, 2, 2, 52, 53, 3, 2, 2, 2, 53, 55, 3, 2, 2, 2, 54, 52, 3, 2, 2, 2, 55, 63, 5, 14, 8, 2, 56, 57, 5, 16, 9, 2, 57, 58, 9, 2, 2, 2, 58, 59, 7, 6, 2, 2, 59, 60, 5, 16, 9, 2, 60, 63, 3, 2, 2, 2, 61, 63, 9, 3, 2, 2, 62, 36, 3, 2, 2, 2, 62, 37, 3, 2, 2, 2, 62, 41, 3, 2, 2, 2, 62, 52, 3, 2, 2, 2, 62, 56, 3, 2, 2, 2, 62, 61, 3, 2, 2, 2, 63, 7, 3, 2, 2, 2, 64, 69, 5, 16, 9, 2, 65, 66, 7, 20, 2, 2, 66, 68, 5, 16, 9, 2, 67, 65, 3, 2, 2, 2, 68, 71, 3, 2, 2, 2, 69, 67, 3, 2, 2, 2, 69, 70, 3, 2, 2, 2, 70, 9, 3, 2, 2, 2, 71, 69, 3, 2, 2, 2, 72, 73, 7, 21, 2, 2, 73, 74, 5, 16, 9, 2, 74, 81, 5, 12, 7, 2, 75, 76, 7, 22, 2, 2, 76, 77, 5, 16, 9, 2, 77, 78, 5, 12, 7, 2, 78, 80, 3, 2, 2, 2, 79, 75, 3, 2, 2, 2, 80, 83, 3, 2, 2, 2, 81, 79, 3, 2, 2, 2, 81, 82, 3, 2, 2, 2, 82, 86, 3, 2, 2, 2, 83, 81, 3, 2, 2, 2, 84, 85, 7, 23, 2, 2, 85, 87, 5, 12, 7, 2, 86, 84, 3, 2, 2, 2, 86, 87, 3, 2, 2, 2, 87, 107, 3, 2, 2, 2, 88, 89, 7, 24, 2, 2, 89, 90, 5, 16, 9, 2, 90, 91, 5, 12, 7, 2, 91, 107, 3, 2, 2, 2, 92, 93, 7, 25, 2, 2, 93, 94, 5, 16, 9, 2, 94, 95, 5, 12, 7, 2, 95, 107, 3, 2, 2, 2, 96, 97, 7, 26, 2, 2, 97, 98, 5, 14, 8, 2, 98, 99, 7, 27, 2, 2, 99, 102, 5, 14, 8, 2, 100, 101, 7, 28, 2, 2, 101, 103, 5, 14, 8, 2, 102, 100, 3, 2, 2, 2, 102, 103, 3, 2, 2, 2, 103, 104, 3, 2, 2, 2, 104, 105, 5, 12, 7, 2, 105, 107, 3, 2, 2, 2, 106, 72, 3, 2, 2, 2, 106, 88, 3, 2, 2, 2, 106, 92, 3, 2, 2, 2, 106, 96, 3, 2, 2, 2, 107, 11, 3, 2, 2, 2, 108, 109, 7, 29, 2, 2, 109, 111, 7, 30, 2, 2, 110, 112, 5, 4, 3, 2, 111, 110, 3, 2, 2, 2, 112, 113, 3, 2, 2, 2, 113, 111, 3, 2, 2, 2, 113, 114, 3, 2, 2, 2, 114, 115, 3, 2, 2, 2, 115, 116, 7, 31, 2, 2, 116, 13, 3, 2, 2, 2, 117, 118, 5, 16, 9, 2, 118, 119, 7, 20, 2, 2, 119, 121, 3, 2, 2, 2, 120, 117, 3, 2, 2, 2, 121, 124, 3, 2, 2, 2, 122, 120, 3, 2, 2, 2, 122, 123, 3, 2, 2, 2, 123, 125, 3, 2, 2, 2, 124, 122, 3, 2, 2, 2, 125, 126, 5, 16, 9, 2, 126, 15, 3, 2, 2, 2, 127, 128, 8, 9, 1, 2, 128, 138, 5, 18, 10, 2, 129, 130, 7, 32, 2, 2, 130, 131, 5, 14, 8, 2, 131, 132, 7, 33, 2, 2, 132, 138, 3, 2, 2, 2, 133, 134, 9, 4, 2, 2, 134, 138, 5, 16, 9, 17, 135, 136, 7, 46, 2, 2, 136, 138, 5, 16, 9, 6, 137, 127, 3, 2, 2, 2, 137, 129, 3, 2, 2, 2, 137, 133, 3, 2, 2, 2, 137, 135, 3, 2, 2, 2, 138, 193, 3, 2, 2, 2, 139, 140, 12, 18, 2, 2, 140, 141, 7, 7, 2, 2, 141, 192, 5, 16, 9, 18, 142, 143, 12, 16, 2, 2, 143, 144, 9, 5, 2, 2, 144, 192, 5, 16, 9, 17, 145, 146, 12, 15, 2, 2, 146, 147, 9, 6, 2, 2, 147, 192, 5, 16, 9, 16, 148, 149, 12, 14, 2, 2, 149, 150, 9, 7, 2, 2, 150, 192, 5, 16, 9, 15, 151, 152, 12, 13, 2, 2, 152, 153, 7, 15, 2, 2, 153, 192, 5, 16, 9, 14, 154, 155, 12, 12, 2, 2, 155, 156, 7, 16, 2, 2, 156, 192, 5, 16, 9, 13, 157, 158, 12, 11, 2, 2, 158, 159, 7, 17, 2, 2, 159, 192, 5, 16, 9, 12, 160, 161, 12, 10, 2, 2, 161, 162, 7, 38, 2, 2, 162, 192, 5, 16, 9, 11, 163, 164, 12, 9, 2, 2, 164, 165, 7, 39, 2, 2, 165, 192, 5, 16, 9, 10, 166, 167, 12, 7, 2, 2, 167, 168, 9, 8, 2, 2, 168, 192, 5, 16, 9, 7, 169, 170, 12, 5, 2, 2, 170, 171, 7, 47, 2, 2, 171, 192, 5, 16, 9, 5, 172, 173, 12, 4, 2, 2, 173, 174, 7, 48, 2, 2, 174, 192, 5, 16, 9, 4, 175, 176, 12, 3, 2, 2, 176, 177, 7, 49, 2, 2, 177, 178, 5, 16, 9, 2, 178, 179, 7, 50, 2, 2, 179, 180, 5, 16, 9, 3, 180, 192, 3, 2, 2, 2, 181, 182, 12, 20, 2, 2, 182, 183, 7, 34, 2, 2, 183, 184, 5, 16, 9, 2, 184, 185, 7, 35, 2, 2, 185, 192, 3, 2, 2, 2, 186, 187, 12, 19, 2, 2, 187, 188, 7, 36, 2, 2, 188, 192, 7, 62, 2, 2, 189, 190, 12, 8, 2, 2, 190, 192, 7, 39, 2, 2, 191, 139, 3, 2, 2, 2, 191, 142, 3, 2, 2, 2, 191, 145, 3, 2, 2, 2, 191, 148, 3, 2, 2, 2, 191, 151, 3, 2, 2, 2, 191, 154, 3, 2, 2, 2, 191, 157, 3, 2, 2, 2, 191, 160, 3, 2, 2, 2, 191, 163, 3, 2, 2, 2, 191, 166, 3, 2, 2, 2, 191, 169, 3, 2, 2, 2, 191, 172, 3, 2, 2, 2, 191, 175, 3, 2, 2, 2, 191, 181, 3, 2, 2, 2, 191, 186, 3, 2, 2, 2, 191, 189, 3, 2, 2, 2, 192, 195, 3, 2, 2, 2, 193, 191, 3, 2, 2, 2, 193, 194, 3, 2, 2, 2, 194, 17, 3, 2, 2, 2, 195, 193, 3, 2, 2, 2, 196, 216, 7, 58, 2, 2, 197, 216, 7, 59, 2, 2, 198, 216, 9, 9, 2, 2, 199, 216, 7, 60, 2, 2, 200, 216, 7, 61, 2, 2, 201, 207, 7, 34, 2, 2, 202, 203, 5, 16, 9, 2, 203, 204, 7, 20, 2, 2, 204, 206, 3, 2, 2, 2, 205, 202, 3, 2, 2, 2, 206, 209, 3, 2, 2, 2, 207, 205, 3, 2, 2, 2, 207, 208, 3, 2, 2, 2, 208, 211, 3, 2, 2, 2, 209, 207, 3, 2, 2, 2, 210, 212, 5, 16, 9, 2, 211, 210, 3, 2, 2, 2, 211, 212, 3, 2, 2, 2, 212, 213, 3, 2, 2, 2, 213, 216, 7, 35, 2, 2, 214, 216, 7, 62, 2, 2, 215, 196, 3, 2, 2, 2, 215, 197, 3, 2, 2, 2, 215, 198, 3, 2, 2, 2, 215, 199, 3, 2, 2, 2, 215, 200, 3, 2, 2, 2, 215, 201, 3, 2, 2, 2, 215, 214, 3, 2, 2, 2, 216, 19, 3, 2, 2, 2, 217, 218, 8, 11, 1, 2, 218, 228, 7, 53, 2, 2, 219, 228, 7, 54, 2, 2, 220, 228, 7, 55, 2, 2, 221, 228, 7, 56, 2, 2, 222, 228, 7, 57, 2, 2, 223, 224, 7, 34, 2, 2, 224, 225, 5, 20, 11, 2, 225, 226, 7, 35, 2, 2, 226, 228, 3, 2, 2, 2, 227, 217, 3, 2, 2, 2, 227, 219, 3, 2, 2, 2, 227, 220, 3, 2, 2, 2, 227, 221, 3, 2, 2, 2, 227, 222, 3, 2, 2, 2, 227, 223, 3, 2, 2, 2, 228, 234, 3, 2, 2, 2, 229, 230, 12, 3, 2, 2, 230, 231, 7, 8, 2, 2, 231, 233, 5, 20, 11, 3, 232, 229, 3, 2, 2, 2, 233, 236, 3, 2, 2, 2, 234, 232, 3, 2, 2, 2, 234, 235, 3, 2, 2, 2, 235, 21, 3, 2, 2, 2, 236, 234, 3, 2, 2, 2, 23, 25, 34, 39, 45, 52, 62, 69, 81, 86, 102, 106, 113, 122, 137, 191, 193, 207, 211, 215, 227, 234] \ No newline at end of file diff --git a/src/antlr/Pyxell.tokens b/src/antlr/Pyxell.tokens index eb81542a..df59214a 100644 --- a/src/antlr/Pyxell.tokens +++ b/src/antlr/Pyxell.tokens @@ -48,13 +48,18 @@ T__46=47 T__47=48 T__48=49 T__49=50 -INT=51 -FLOAT=52 -CHAR=53 -STRING=54 -ID=55 -WS=56 -ERR=57 +T__50=51 +T__51=52 +T__52=53 +T__53=54 +T__54=55 +INT=56 +FLOAT=57 +CHAR=58 +STRING=59 +ID=60 +WS=61 +ERR=62 ';'=1 'skip'=2 'print'=3 @@ -105,3 +110,8 @@ ERR=57 ':'=48 'true'=49 'false'=50 +'Int'=51 +'Float'=52 +'Bool'=53 +'Char'=54 +'String'=55 diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp index ec7beede..f0611a39 100644 --- a/src/antlr/PyxellLexer.interp +++ b/src/antlr/PyxellLexer.interp @@ -50,6 +50,11 @@ null ':' 'true' 'false' +'Int' +'Float' +'Bool' +'Char' +'String' null null null @@ -110,6 +115,11 @@ null null null null +null +null +null +null +null INT FLOAT CHAR @@ -169,6 +179,11 @@ T__46 T__47 T__48 T__49 +T__50 +T__51 +T__52 +T__53 +T__54 INT FLOAT CHAR @@ -188,4 +203,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 59, 358, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 6, 52, 286, 10, 52, 13, 52, 14, 52, 287, 3, 53, 6, 53, 291, 10, 53, 13, 53, 14, 53, 292, 3, 53, 3, 53, 6, 53, 297, 10, 53, 13, 53, 14, 53, 298, 3, 53, 3, 53, 5, 53, 303, 10, 53, 3, 53, 6, 53, 306, 10, 53, 13, 53, 14, 53, 307, 5, 53, 310, 10, 53, 3, 54, 3, 54, 3, 54, 3, 54, 7, 54, 316, 10, 54, 12, 54, 14, 54, 319, 11, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 7, 55, 327, 10, 55, 12, 55, 14, 55, 330, 11, 55, 3, 55, 3, 55, 3, 56, 3, 56, 7, 56, 336, 10, 56, 12, 56, 14, 56, 339, 11, 56, 3, 57, 3, 57, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 5, 59, 348, 10, 59, 3, 60, 6, 60, 351, 10, 60, 13, 60, 14, 60, 352, 3, 60, 3, 60, 3, 61, 3, 61, 2, 2, 62, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 2, 115, 2, 117, 2, 119, 58, 121, 59, 3, 2, 10, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 368, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 3, 123, 3, 2, 2, 2, 5, 125, 3, 2, 2, 2, 7, 130, 3, 2, 2, 2, 9, 136, 3, 2, 2, 2, 11, 138, 3, 2, 2, 2, 13, 140, 3, 2, 2, 2, 15, 142, 3, 2, 2, 2, 17, 144, 3, 2, 2, 2, 19, 146, 3, 2, 2, 2, 21, 148, 3, 2, 2, 2, 23, 150, 3, 2, 2, 2, 25, 153, 3, 2, 2, 2, 27, 156, 3, 2, 2, 2, 29, 158, 3, 2, 2, 2, 31, 160, 3, 2, 2, 2, 33, 162, 3, 2, 2, 2, 35, 168, 3, 2, 2, 2, 37, 177, 3, 2, 2, 2, 39, 179, 3, 2, 2, 2, 41, 182, 3, 2, 2, 2, 43, 187, 3, 2, 2, 2, 45, 192, 3, 2, 2, 2, 47, 198, 3, 2, 2, 2, 49, 204, 3, 2, 2, 2, 51, 208, 3, 2, 2, 2, 53, 211, 3, 2, 2, 2, 55, 216, 3, 2, 2, 2, 57, 219, 3, 2, 2, 2, 59, 221, 3, 2, 2, 2, 61, 223, 3, 2, 2, 2, 63, 225, 3, 2, 2, 2, 65, 227, 3, 2, 2, 2, 67, 229, 3, 2, 2, 2, 69, 231, 3, 2, 2, 2, 71, 233, 3, 2, 2, 2, 73, 235, 3, 2, 2, 2, 75, 238, 3, 2, 2, 2, 77, 242, 3, 2, 2, 2, 79, 245, 3, 2, 2, 2, 81, 248, 3, 2, 2, 2, 83, 250, 3, 2, 2, 2, 85, 253, 3, 2, 2, 2, 87, 255, 3, 2, 2, 2, 89, 258, 3, 2, 2, 2, 91, 262, 3, 2, 2, 2, 93, 266, 3, 2, 2, 2, 95, 269, 3, 2, 2, 2, 97, 271, 3, 2, 2, 2, 99, 273, 3, 2, 2, 2, 101, 278, 3, 2, 2, 2, 103, 285, 3, 2, 2, 2, 105, 290, 3, 2, 2, 2, 107, 311, 3, 2, 2, 2, 109, 322, 3, 2, 2, 2, 111, 333, 3, 2, 2, 2, 113, 340, 3, 2, 2, 2, 115, 342, 3, 2, 2, 2, 117, 347, 3, 2, 2, 2, 119, 350, 3, 2, 2, 2, 121, 356, 3, 2, 2, 2, 123, 124, 7, 61, 2, 2, 124, 4, 3, 2, 2, 2, 125, 126, 7, 117, 2, 2, 126, 127, 7, 109, 2, 2, 127, 128, 7, 107, 2, 2, 128, 129, 7, 114, 2, 2, 129, 6, 3, 2, 2, 2, 130, 131, 7, 114, 2, 2, 131, 132, 7, 116, 2, 2, 132, 133, 7, 107, 2, 2, 133, 134, 7, 112, 2, 2, 134, 135, 7, 118, 2, 2, 135, 8, 3, 2, 2, 2, 136, 137, 7, 63, 2, 2, 137, 10, 3, 2, 2, 2, 138, 139, 7, 96, 2, 2, 139, 12, 3, 2, 2, 2, 140, 141, 7, 44, 2, 2, 141, 14, 3, 2, 2, 2, 142, 143, 7, 49, 2, 2, 143, 16, 3, 2, 2, 2, 144, 145, 7, 39, 2, 2, 145, 18, 3, 2, 2, 2, 146, 147, 7, 45, 2, 2, 147, 20, 3, 2, 2, 2, 148, 149, 7, 47, 2, 2, 149, 22, 3, 2, 2, 2, 150, 151, 7, 62, 2, 2, 151, 152, 7, 62, 2, 2, 152, 24, 3, 2, 2, 2, 153, 154, 7, 64, 2, 2, 154, 155, 7, 64, 2, 2, 155, 26, 3, 2, 2, 2, 156, 157, 7, 40, 2, 2, 157, 28, 3, 2, 2, 2, 158, 159, 7, 38, 2, 2, 159, 30, 3, 2, 2, 2, 160, 161, 7, 126, 2, 2, 161, 32, 3, 2, 2, 2, 162, 163, 7, 100, 2, 2, 163, 164, 7, 116, 2, 2, 164, 165, 7, 103, 2, 2, 165, 166, 7, 99, 2, 2, 166, 167, 7, 109, 2, 2, 167, 34, 3, 2, 2, 2, 168, 169, 7, 101, 2, 2, 169, 170, 7, 113, 2, 2, 170, 171, 7, 112, 2, 2, 171, 172, 7, 118, 2, 2, 172, 173, 7, 107, 2, 2, 173, 174, 7, 112, 2, 2, 174, 175, 7, 119, 2, 2, 175, 176, 7, 103, 2, 2, 176, 36, 3, 2, 2, 2, 177, 178, 7, 46, 2, 2, 178, 38, 3, 2, 2, 2, 179, 180, 7, 107, 2, 2, 180, 181, 7, 104, 2, 2, 181, 40, 3, 2, 2, 2, 182, 183, 7, 103, 2, 2, 183, 184, 7, 110, 2, 2, 184, 185, 7, 107, 2, 2, 185, 186, 7, 104, 2, 2, 186, 42, 3, 2, 2, 2, 187, 188, 7, 103, 2, 2, 188, 189, 7, 110, 2, 2, 189, 190, 7, 117, 2, 2, 190, 191, 7, 103, 2, 2, 191, 44, 3, 2, 2, 2, 192, 193, 7, 121, 2, 2, 193, 194, 7, 106, 2, 2, 194, 195, 7, 107, 2, 2, 195, 196, 7, 110, 2, 2, 196, 197, 7, 103, 2, 2, 197, 46, 3, 2, 2, 2, 198, 199, 7, 119, 2, 2, 199, 200, 7, 112, 2, 2, 200, 201, 7, 118, 2, 2, 201, 202, 7, 107, 2, 2, 202, 203, 7, 110, 2, 2, 203, 48, 3, 2, 2, 2, 204, 205, 7, 104, 2, 2, 205, 206, 7, 113, 2, 2, 206, 207, 7, 116, 2, 2, 207, 50, 3, 2, 2, 2, 208, 209, 7, 107, 2, 2, 209, 210, 7, 112, 2, 2, 210, 52, 3, 2, 2, 2, 211, 212, 7, 117, 2, 2, 212, 213, 7, 118, 2, 2, 213, 214, 7, 103, 2, 2, 214, 215, 7, 114, 2, 2, 215, 54, 3, 2, 2, 2, 216, 217, 7, 102, 2, 2, 217, 218, 7, 113, 2, 2, 218, 56, 3, 2, 2, 2, 219, 220, 7, 125, 2, 2, 220, 58, 3, 2, 2, 2, 221, 222, 7, 127, 2, 2, 222, 60, 3, 2, 2, 2, 223, 224, 7, 42, 2, 2, 224, 62, 3, 2, 2, 2, 225, 226, 7, 43, 2, 2, 226, 64, 3, 2, 2, 2, 227, 228, 7, 93, 2, 2, 228, 66, 3, 2, 2, 2, 229, 230, 7, 95, 2, 2, 230, 68, 3, 2, 2, 2, 231, 232, 7, 48, 2, 2, 232, 70, 3, 2, 2, 2, 233, 234, 7, 128, 2, 2, 234, 72, 3, 2, 2, 2, 235, 236, 7, 48, 2, 2, 236, 237, 7, 48, 2, 2, 237, 74, 3, 2, 2, 2, 238, 239, 7, 48, 2, 2, 239, 240, 7, 48, 2, 2, 240, 241, 7, 48, 2, 2, 241, 76, 3, 2, 2, 2, 242, 243, 7, 63, 2, 2, 243, 244, 7, 63, 2, 2, 244, 78, 3, 2, 2, 2, 245, 246, 7, 35, 2, 2, 246, 247, 7, 63, 2, 2, 247, 80, 3, 2, 2, 2, 248, 249, 7, 62, 2, 2, 249, 82, 3, 2, 2, 2, 250, 251, 7, 62, 2, 2, 251, 252, 7, 63, 2, 2, 252, 84, 3, 2, 2, 2, 253, 254, 7, 64, 2, 2, 254, 86, 3, 2, 2, 2, 255, 256, 7, 64, 2, 2, 256, 257, 7, 63, 2, 2, 257, 88, 3, 2, 2, 2, 258, 259, 7, 112, 2, 2, 259, 260, 7, 113, 2, 2, 260, 261, 7, 118, 2, 2, 261, 90, 3, 2, 2, 2, 262, 263, 7, 99, 2, 2, 263, 264, 7, 112, 2, 2, 264, 265, 7, 102, 2, 2, 265, 92, 3, 2, 2, 2, 266, 267, 7, 113, 2, 2, 267, 268, 7, 116, 2, 2, 268, 94, 3, 2, 2, 2, 269, 270, 7, 65, 2, 2, 270, 96, 3, 2, 2, 2, 271, 272, 7, 60, 2, 2, 272, 98, 3, 2, 2, 2, 273, 274, 7, 118, 2, 2, 274, 275, 7, 116, 2, 2, 275, 276, 7, 119, 2, 2, 276, 277, 7, 103, 2, 2, 277, 100, 3, 2, 2, 2, 278, 279, 7, 104, 2, 2, 279, 280, 7, 99, 2, 2, 280, 281, 7, 110, 2, 2, 281, 282, 7, 117, 2, 2, 282, 283, 7, 103, 2, 2, 283, 102, 3, 2, 2, 2, 284, 286, 5, 113, 57, 2, 285, 284, 3, 2, 2, 2, 286, 287, 3, 2, 2, 2, 287, 285, 3, 2, 2, 2, 287, 288, 3, 2, 2, 2, 288, 104, 3, 2, 2, 2, 289, 291, 5, 113, 57, 2, 290, 289, 3, 2, 2, 2, 291, 292, 3, 2, 2, 2, 292, 290, 3, 2, 2, 2, 292, 293, 3, 2, 2, 2, 293, 294, 3, 2, 2, 2, 294, 296, 7, 48, 2, 2, 295, 297, 5, 113, 57, 2, 296, 295, 3, 2, 2, 2, 297, 298, 3, 2, 2, 2, 298, 296, 3, 2, 2, 2, 298, 299, 3, 2, 2, 2, 299, 309, 3, 2, 2, 2, 300, 302, 7, 103, 2, 2, 301, 303, 7, 47, 2, 2, 302, 301, 3, 2, 2, 2, 302, 303, 3, 2, 2, 2, 303, 305, 3, 2, 2, 2, 304, 306, 5, 113, 57, 2, 305, 304, 3, 2, 2, 2, 306, 307, 3, 2, 2, 2, 307, 305, 3, 2, 2, 2, 307, 308, 3, 2, 2, 2, 308, 310, 3, 2, 2, 2, 309, 300, 3, 2, 2, 2, 309, 310, 3, 2, 2, 2, 310, 106, 3, 2, 2, 2, 311, 317, 7, 41, 2, 2, 312, 316, 10, 2, 2, 2, 313, 314, 7, 94, 2, 2, 314, 316, 9, 3, 2, 2, 315, 312, 3, 2, 2, 2, 315, 313, 3, 2, 2, 2, 316, 319, 3, 2, 2, 2, 317, 315, 3, 2, 2, 2, 317, 318, 3, 2, 2, 2, 318, 320, 3, 2, 2, 2, 319, 317, 3, 2, 2, 2, 320, 321, 7, 41, 2, 2, 321, 108, 3, 2, 2, 2, 322, 328, 7, 36, 2, 2, 323, 327, 10, 4, 2, 2, 324, 325, 7, 94, 2, 2, 325, 327, 9, 5, 2, 2, 326, 323, 3, 2, 2, 2, 326, 324, 3, 2, 2, 2, 327, 330, 3, 2, 2, 2, 328, 326, 3, 2, 2, 2, 328, 329, 3, 2, 2, 2, 329, 331, 3, 2, 2, 2, 330, 328, 3, 2, 2, 2, 331, 332, 7, 36, 2, 2, 332, 110, 3, 2, 2, 2, 333, 337, 5, 115, 58, 2, 334, 336, 5, 117, 59, 2, 335, 334, 3, 2, 2, 2, 336, 339, 3, 2, 2, 2, 337, 335, 3, 2, 2, 2, 337, 338, 3, 2, 2, 2, 338, 112, 3, 2, 2, 2, 339, 337, 3, 2, 2, 2, 340, 341, 9, 6, 2, 2, 341, 114, 3, 2, 2, 2, 342, 343, 9, 7, 2, 2, 343, 116, 3, 2, 2, 2, 344, 348, 5, 115, 58, 2, 345, 348, 5, 113, 57, 2, 346, 348, 9, 8, 2, 2, 347, 344, 3, 2, 2, 2, 347, 345, 3, 2, 2, 2, 347, 346, 3, 2, 2, 2, 348, 118, 3, 2, 2, 2, 349, 351, 9, 9, 2, 2, 350, 349, 3, 2, 2, 2, 351, 352, 3, 2, 2, 2, 352, 350, 3, 2, 2, 2, 352, 353, 3, 2, 2, 2, 353, 354, 3, 2, 2, 2, 354, 355, 8, 60, 2, 2, 355, 120, 3, 2, 2, 2, 356, 357, 11, 2, 2, 2, 357, 122, 3, 2, 2, 2, 16, 2, 287, 292, 298, 302, 307, 309, 315, 317, 326, 328, 337, 347, 352, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 64, 395, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 6, 57, 323, 10, 57, 13, 57, 14, 57, 324, 3, 58, 6, 58, 328, 10, 58, 13, 58, 14, 58, 329, 3, 58, 3, 58, 6, 58, 334, 10, 58, 13, 58, 14, 58, 335, 3, 58, 3, 58, 5, 58, 340, 10, 58, 3, 58, 6, 58, 343, 10, 58, 13, 58, 14, 58, 344, 5, 58, 347, 10, 58, 3, 59, 3, 59, 3, 59, 3, 59, 7, 59, 353, 10, 59, 12, 59, 14, 59, 356, 11, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 7, 60, 364, 10, 60, 12, 60, 14, 60, 367, 11, 60, 3, 60, 3, 60, 3, 61, 3, 61, 7, 61, 373, 10, 61, 12, 61, 14, 61, 376, 11, 61, 3, 62, 3, 62, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 5, 64, 385, 10, 64, 3, 65, 6, 65, 388, 10, 65, 13, 65, 14, 65, 389, 3, 65, 3, 65, 3, 66, 3, 66, 2, 2, 67, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 2, 125, 2, 127, 2, 129, 63, 131, 64, 3, 2, 10, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 405, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 3, 133, 3, 2, 2, 2, 5, 135, 3, 2, 2, 2, 7, 140, 3, 2, 2, 2, 9, 146, 3, 2, 2, 2, 11, 148, 3, 2, 2, 2, 13, 150, 3, 2, 2, 2, 15, 152, 3, 2, 2, 2, 17, 154, 3, 2, 2, 2, 19, 156, 3, 2, 2, 2, 21, 158, 3, 2, 2, 2, 23, 160, 3, 2, 2, 2, 25, 163, 3, 2, 2, 2, 27, 166, 3, 2, 2, 2, 29, 168, 3, 2, 2, 2, 31, 170, 3, 2, 2, 2, 33, 172, 3, 2, 2, 2, 35, 178, 3, 2, 2, 2, 37, 187, 3, 2, 2, 2, 39, 189, 3, 2, 2, 2, 41, 192, 3, 2, 2, 2, 43, 197, 3, 2, 2, 2, 45, 202, 3, 2, 2, 2, 47, 208, 3, 2, 2, 2, 49, 214, 3, 2, 2, 2, 51, 218, 3, 2, 2, 2, 53, 221, 3, 2, 2, 2, 55, 226, 3, 2, 2, 2, 57, 229, 3, 2, 2, 2, 59, 231, 3, 2, 2, 2, 61, 233, 3, 2, 2, 2, 63, 235, 3, 2, 2, 2, 65, 237, 3, 2, 2, 2, 67, 239, 3, 2, 2, 2, 69, 241, 3, 2, 2, 2, 71, 243, 3, 2, 2, 2, 73, 245, 3, 2, 2, 2, 75, 248, 3, 2, 2, 2, 77, 252, 3, 2, 2, 2, 79, 255, 3, 2, 2, 2, 81, 258, 3, 2, 2, 2, 83, 260, 3, 2, 2, 2, 85, 263, 3, 2, 2, 2, 87, 265, 3, 2, 2, 2, 89, 268, 3, 2, 2, 2, 91, 272, 3, 2, 2, 2, 93, 276, 3, 2, 2, 2, 95, 279, 3, 2, 2, 2, 97, 281, 3, 2, 2, 2, 99, 283, 3, 2, 2, 2, 101, 288, 3, 2, 2, 2, 103, 294, 3, 2, 2, 2, 105, 298, 3, 2, 2, 2, 107, 304, 3, 2, 2, 2, 109, 309, 3, 2, 2, 2, 111, 314, 3, 2, 2, 2, 113, 322, 3, 2, 2, 2, 115, 327, 3, 2, 2, 2, 117, 348, 3, 2, 2, 2, 119, 359, 3, 2, 2, 2, 121, 370, 3, 2, 2, 2, 123, 377, 3, 2, 2, 2, 125, 379, 3, 2, 2, 2, 127, 384, 3, 2, 2, 2, 129, 387, 3, 2, 2, 2, 131, 393, 3, 2, 2, 2, 133, 134, 7, 61, 2, 2, 134, 4, 3, 2, 2, 2, 135, 136, 7, 117, 2, 2, 136, 137, 7, 109, 2, 2, 137, 138, 7, 107, 2, 2, 138, 139, 7, 114, 2, 2, 139, 6, 3, 2, 2, 2, 140, 141, 7, 114, 2, 2, 141, 142, 7, 116, 2, 2, 142, 143, 7, 107, 2, 2, 143, 144, 7, 112, 2, 2, 144, 145, 7, 118, 2, 2, 145, 8, 3, 2, 2, 2, 146, 147, 7, 63, 2, 2, 147, 10, 3, 2, 2, 2, 148, 149, 7, 96, 2, 2, 149, 12, 3, 2, 2, 2, 150, 151, 7, 44, 2, 2, 151, 14, 3, 2, 2, 2, 152, 153, 7, 49, 2, 2, 153, 16, 3, 2, 2, 2, 154, 155, 7, 39, 2, 2, 155, 18, 3, 2, 2, 2, 156, 157, 7, 45, 2, 2, 157, 20, 3, 2, 2, 2, 158, 159, 7, 47, 2, 2, 159, 22, 3, 2, 2, 2, 160, 161, 7, 62, 2, 2, 161, 162, 7, 62, 2, 2, 162, 24, 3, 2, 2, 2, 163, 164, 7, 64, 2, 2, 164, 165, 7, 64, 2, 2, 165, 26, 3, 2, 2, 2, 166, 167, 7, 40, 2, 2, 167, 28, 3, 2, 2, 2, 168, 169, 7, 38, 2, 2, 169, 30, 3, 2, 2, 2, 170, 171, 7, 126, 2, 2, 171, 32, 3, 2, 2, 2, 172, 173, 7, 100, 2, 2, 173, 174, 7, 116, 2, 2, 174, 175, 7, 103, 2, 2, 175, 176, 7, 99, 2, 2, 176, 177, 7, 109, 2, 2, 177, 34, 3, 2, 2, 2, 178, 179, 7, 101, 2, 2, 179, 180, 7, 113, 2, 2, 180, 181, 7, 112, 2, 2, 181, 182, 7, 118, 2, 2, 182, 183, 7, 107, 2, 2, 183, 184, 7, 112, 2, 2, 184, 185, 7, 119, 2, 2, 185, 186, 7, 103, 2, 2, 186, 36, 3, 2, 2, 2, 187, 188, 7, 46, 2, 2, 188, 38, 3, 2, 2, 2, 189, 190, 7, 107, 2, 2, 190, 191, 7, 104, 2, 2, 191, 40, 3, 2, 2, 2, 192, 193, 7, 103, 2, 2, 193, 194, 7, 110, 2, 2, 194, 195, 7, 107, 2, 2, 195, 196, 7, 104, 2, 2, 196, 42, 3, 2, 2, 2, 197, 198, 7, 103, 2, 2, 198, 199, 7, 110, 2, 2, 199, 200, 7, 117, 2, 2, 200, 201, 7, 103, 2, 2, 201, 44, 3, 2, 2, 2, 202, 203, 7, 121, 2, 2, 203, 204, 7, 106, 2, 2, 204, 205, 7, 107, 2, 2, 205, 206, 7, 110, 2, 2, 206, 207, 7, 103, 2, 2, 207, 46, 3, 2, 2, 2, 208, 209, 7, 119, 2, 2, 209, 210, 7, 112, 2, 2, 210, 211, 7, 118, 2, 2, 211, 212, 7, 107, 2, 2, 212, 213, 7, 110, 2, 2, 213, 48, 3, 2, 2, 2, 214, 215, 7, 104, 2, 2, 215, 216, 7, 113, 2, 2, 216, 217, 7, 116, 2, 2, 217, 50, 3, 2, 2, 2, 218, 219, 7, 107, 2, 2, 219, 220, 7, 112, 2, 2, 220, 52, 3, 2, 2, 2, 221, 222, 7, 117, 2, 2, 222, 223, 7, 118, 2, 2, 223, 224, 7, 103, 2, 2, 224, 225, 7, 114, 2, 2, 225, 54, 3, 2, 2, 2, 226, 227, 7, 102, 2, 2, 227, 228, 7, 113, 2, 2, 228, 56, 3, 2, 2, 2, 229, 230, 7, 125, 2, 2, 230, 58, 3, 2, 2, 2, 231, 232, 7, 127, 2, 2, 232, 60, 3, 2, 2, 2, 233, 234, 7, 42, 2, 2, 234, 62, 3, 2, 2, 2, 235, 236, 7, 43, 2, 2, 236, 64, 3, 2, 2, 2, 237, 238, 7, 93, 2, 2, 238, 66, 3, 2, 2, 2, 239, 240, 7, 95, 2, 2, 240, 68, 3, 2, 2, 2, 241, 242, 7, 48, 2, 2, 242, 70, 3, 2, 2, 2, 243, 244, 7, 128, 2, 2, 244, 72, 3, 2, 2, 2, 245, 246, 7, 48, 2, 2, 246, 247, 7, 48, 2, 2, 247, 74, 3, 2, 2, 2, 248, 249, 7, 48, 2, 2, 249, 250, 7, 48, 2, 2, 250, 251, 7, 48, 2, 2, 251, 76, 3, 2, 2, 2, 252, 253, 7, 63, 2, 2, 253, 254, 7, 63, 2, 2, 254, 78, 3, 2, 2, 2, 255, 256, 7, 35, 2, 2, 256, 257, 7, 63, 2, 2, 257, 80, 3, 2, 2, 2, 258, 259, 7, 62, 2, 2, 259, 82, 3, 2, 2, 2, 260, 261, 7, 62, 2, 2, 261, 262, 7, 63, 2, 2, 262, 84, 3, 2, 2, 2, 263, 264, 7, 64, 2, 2, 264, 86, 3, 2, 2, 2, 265, 266, 7, 64, 2, 2, 266, 267, 7, 63, 2, 2, 267, 88, 3, 2, 2, 2, 268, 269, 7, 112, 2, 2, 269, 270, 7, 113, 2, 2, 270, 271, 7, 118, 2, 2, 271, 90, 3, 2, 2, 2, 272, 273, 7, 99, 2, 2, 273, 274, 7, 112, 2, 2, 274, 275, 7, 102, 2, 2, 275, 92, 3, 2, 2, 2, 276, 277, 7, 113, 2, 2, 277, 278, 7, 116, 2, 2, 278, 94, 3, 2, 2, 2, 279, 280, 7, 65, 2, 2, 280, 96, 3, 2, 2, 2, 281, 282, 7, 60, 2, 2, 282, 98, 3, 2, 2, 2, 283, 284, 7, 118, 2, 2, 284, 285, 7, 116, 2, 2, 285, 286, 7, 119, 2, 2, 286, 287, 7, 103, 2, 2, 287, 100, 3, 2, 2, 2, 288, 289, 7, 104, 2, 2, 289, 290, 7, 99, 2, 2, 290, 291, 7, 110, 2, 2, 291, 292, 7, 117, 2, 2, 292, 293, 7, 103, 2, 2, 293, 102, 3, 2, 2, 2, 294, 295, 7, 75, 2, 2, 295, 296, 7, 112, 2, 2, 296, 297, 7, 118, 2, 2, 297, 104, 3, 2, 2, 2, 298, 299, 7, 72, 2, 2, 299, 300, 7, 110, 2, 2, 300, 301, 7, 113, 2, 2, 301, 302, 7, 99, 2, 2, 302, 303, 7, 118, 2, 2, 303, 106, 3, 2, 2, 2, 304, 305, 7, 68, 2, 2, 305, 306, 7, 113, 2, 2, 306, 307, 7, 113, 2, 2, 307, 308, 7, 110, 2, 2, 308, 108, 3, 2, 2, 2, 309, 310, 7, 69, 2, 2, 310, 311, 7, 106, 2, 2, 311, 312, 7, 99, 2, 2, 312, 313, 7, 116, 2, 2, 313, 110, 3, 2, 2, 2, 314, 315, 7, 85, 2, 2, 315, 316, 7, 118, 2, 2, 316, 317, 7, 116, 2, 2, 317, 318, 7, 107, 2, 2, 318, 319, 7, 112, 2, 2, 319, 320, 7, 105, 2, 2, 320, 112, 3, 2, 2, 2, 321, 323, 5, 123, 62, 2, 322, 321, 3, 2, 2, 2, 323, 324, 3, 2, 2, 2, 324, 322, 3, 2, 2, 2, 324, 325, 3, 2, 2, 2, 325, 114, 3, 2, 2, 2, 326, 328, 5, 123, 62, 2, 327, 326, 3, 2, 2, 2, 328, 329, 3, 2, 2, 2, 329, 327, 3, 2, 2, 2, 329, 330, 3, 2, 2, 2, 330, 331, 3, 2, 2, 2, 331, 333, 7, 48, 2, 2, 332, 334, 5, 123, 62, 2, 333, 332, 3, 2, 2, 2, 334, 335, 3, 2, 2, 2, 335, 333, 3, 2, 2, 2, 335, 336, 3, 2, 2, 2, 336, 346, 3, 2, 2, 2, 337, 339, 7, 103, 2, 2, 338, 340, 7, 47, 2, 2, 339, 338, 3, 2, 2, 2, 339, 340, 3, 2, 2, 2, 340, 342, 3, 2, 2, 2, 341, 343, 5, 123, 62, 2, 342, 341, 3, 2, 2, 2, 343, 344, 3, 2, 2, 2, 344, 342, 3, 2, 2, 2, 344, 345, 3, 2, 2, 2, 345, 347, 3, 2, 2, 2, 346, 337, 3, 2, 2, 2, 346, 347, 3, 2, 2, 2, 347, 116, 3, 2, 2, 2, 348, 354, 7, 41, 2, 2, 349, 353, 10, 2, 2, 2, 350, 351, 7, 94, 2, 2, 351, 353, 9, 3, 2, 2, 352, 349, 3, 2, 2, 2, 352, 350, 3, 2, 2, 2, 353, 356, 3, 2, 2, 2, 354, 352, 3, 2, 2, 2, 354, 355, 3, 2, 2, 2, 355, 357, 3, 2, 2, 2, 356, 354, 3, 2, 2, 2, 357, 358, 7, 41, 2, 2, 358, 118, 3, 2, 2, 2, 359, 365, 7, 36, 2, 2, 360, 364, 10, 4, 2, 2, 361, 362, 7, 94, 2, 2, 362, 364, 9, 5, 2, 2, 363, 360, 3, 2, 2, 2, 363, 361, 3, 2, 2, 2, 364, 367, 3, 2, 2, 2, 365, 363, 3, 2, 2, 2, 365, 366, 3, 2, 2, 2, 366, 368, 3, 2, 2, 2, 367, 365, 3, 2, 2, 2, 368, 369, 7, 36, 2, 2, 369, 120, 3, 2, 2, 2, 370, 374, 5, 125, 63, 2, 371, 373, 5, 127, 64, 2, 372, 371, 3, 2, 2, 2, 373, 376, 3, 2, 2, 2, 374, 372, 3, 2, 2, 2, 374, 375, 3, 2, 2, 2, 375, 122, 3, 2, 2, 2, 376, 374, 3, 2, 2, 2, 377, 378, 9, 6, 2, 2, 378, 124, 3, 2, 2, 2, 379, 380, 9, 7, 2, 2, 380, 126, 3, 2, 2, 2, 381, 385, 5, 125, 63, 2, 382, 385, 5, 123, 62, 2, 383, 385, 9, 8, 2, 2, 384, 381, 3, 2, 2, 2, 384, 382, 3, 2, 2, 2, 384, 383, 3, 2, 2, 2, 385, 128, 3, 2, 2, 2, 386, 388, 9, 9, 2, 2, 387, 386, 3, 2, 2, 2, 388, 389, 3, 2, 2, 2, 389, 387, 3, 2, 2, 2, 389, 390, 3, 2, 2, 2, 390, 391, 3, 2, 2, 2, 391, 392, 8, 65, 2, 2, 392, 130, 3, 2, 2, 2, 393, 394, 11, 2, 2, 2, 394, 132, 3, 2, 2, 2, 16, 2, 324, 329, 335, 339, 344, 346, 352, 354, 363, 365, 374, 384, 389, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py index 52474217..4f0025ad 100644 --- a/src/antlr/PyxellLexer.py +++ b/src/antlr/PyxellLexer.py @@ -8,8 +8,8 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2;") - buf.write("\u0166\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2@") + buf.write("\u018b\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") @@ -18,149 +18,163 @@ def serializedATN(): buf.write("\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4,\t,\4-\t-\4.") buf.write("\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64") buf.write("\t\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:") - buf.write("\4;\t;\4<\t<\4=\t=\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\4\3\4") - buf.write("\3\4\3\4\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3") - buf.write("\t\3\n\3\n\3\13\3\13\3\f\3\f\3\f\3\r\3\r\3\r\3\16\3\16") - buf.write("\3\17\3\17\3\20\3\20\3\21\3\21\3\21\3\21\3\21\3\21\3\22") - buf.write("\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\23\3\23\3\24") - buf.write("\3\24\3\24\3\25\3\25\3\25\3\25\3\25\3\26\3\26\3\26\3\26") - buf.write("\3\26\3\27\3\27\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\30") - buf.write("\3\30\3\30\3\31\3\31\3\31\3\31\3\32\3\32\3\32\3\33\3\33") - buf.write("\3\33\3\33\3\33\3\34\3\34\3\34\3\35\3\35\3\36\3\36\3\37") - buf.write("\3\37\3 \3 \3!\3!\3\"\3\"\3#\3#\3$\3$\3%\3%\3%\3&\3&\3") - buf.write("&\3&\3\'\3\'\3\'\3(\3(\3(\3)\3)\3*\3*\3*\3+\3+\3,\3,\3") - buf.write(",\3-\3-\3-\3-\3.\3.\3.\3.\3/\3/\3/\3\60\3\60\3\61\3\61") - buf.write("\3\62\3\62\3\62\3\62\3\62\3\63\3\63\3\63\3\63\3\63\3\63") - buf.write("\3\64\6\64\u011e\n\64\r\64\16\64\u011f\3\65\6\65\u0123") - buf.write("\n\65\r\65\16\65\u0124\3\65\3\65\6\65\u0129\n\65\r\65") - buf.write("\16\65\u012a\3\65\3\65\5\65\u012f\n\65\3\65\6\65\u0132") - buf.write("\n\65\r\65\16\65\u0133\5\65\u0136\n\65\3\66\3\66\3\66") - buf.write("\3\66\7\66\u013c\n\66\f\66\16\66\u013f\13\66\3\66\3\66") - buf.write("\3\67\3\67\3\67\3\67\7\67\u0147\n\67\f\67\16\67\u014a") - buf.write("\13\67\3\67\3\67\38\38\78\u0150\n8\f8\168\u0153\138\3") - buf.write("9\39\3:\3:\3;\3;\3;\5;\u015c\n;\3<\6<\u015f\n<\r<\16<") - buf.write("\u0160\3<\3<\3=\3=\2\2>\3\3\5\4\7\5\t\6\13\7\r\b\17\t") - buf.write("\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23") - buf.write("%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34\67\359\36") - buf.write(";\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63") - buf.write("e\64g\65i\66k\67m8o9q\2s\2u\2w:y;\3\2\n\4\2))^^\6\2))") - buf.write("^^ppvv\4\2$$^^\6\2$$^^ppvv\3\2\62;\5\2C\\aac|\4\2))aa") - buf.write("\5\2\13\f\17\17\"\"\2\u0170\2\3\3\2\2\2\2\5\3\2\2\2\2") - buf.write("\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3") - buf.write("\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2") - buf.write("\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2") - buf.write("\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2") - buf.write("\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63") - buf.write("\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2") - buf.write("\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2") - buf.write("\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3") - buf.write("\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y") - buf.write("\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2") - buf.write("c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2") - buf.write("\2m\3\2\2\2\2o\3\2\2\2\2w\3\2\2\2\2y\3\2\2\2\3{\3\2\2") - buf.write("\2\5}\3\2\2\2\7\u0082\3\2\2\2\t\u0088\3\2\2\2\13\u008a") - buf.write("\3\2\2\2\r\u008c\3\2\2\2\17\u008e\3\2\2\2\21\u0090\3\2") - buf.write("\2\2\23\u0092\3\2\2\2\25\u0094\3\2\2\2\27\u0096\3\2\2") - buf.write("\2\31\u0099\3\2\2\2\33\u009c\3\2\2\2\35\u009e\3\2\2\2") - buf.write("\37\u00a0\3\2\2\2!\u00a2\3\2\2\2#\u00a8\3\2\2\2%\u00b1") - buf.write("\3\2\2\2\'\u00b3\3\2\2\2)\u00b6\3\2\2\2+\u00bb\3\2\2\2") - buf.write("-\u00c0\3\2\2\2/\u00c6\3\2\2\2\61\u00cc\3\2\2\2\63\u00d0") - buf.write("\3\2\2\2\65\u00d3\3\2\2\2\67\u00d8\3\2\2\29\u00db\3\2") - buf.write("\2\2;\u00dd\3\2\2\2=\u00df\3\2\2\2?\u00e1\3\2\2\2A\u00e3") - buf.write("\3\2\2\2C\u00e5\3\2\2\2E\u00e7\3\2\2\2G\u00e9\3\2\2\2") - buf.write("I\u00eb\3\2\2\2K\u00ee\3\2\2\2M\u00f2\3\2\2\2O\u00f5\3") - buf.write("\2\2\2Q\u00f8\3\2\2\2S\u00fa\3\2\2\2U\u00fd\3\2\2\2W\u00ff") - buf.write("\3\2\2\2Y\u0102\3\2\2\2[\u0106\3\2\2\2]\u010a\3\2\2\2") - buf.write("_\u010d\3\2\2\2a\u010f\3\2\2\2c\u0111\3\2\2\2e\u0116\3") - buf.write("\2\2\2g\u011d\3\2\2\2i\u0122\3\2\2\2k\u0137\3\2\2\2m\u0142") - buf.write("\3\2\2\2o\u014d\3\2\2\2q\u0154\3\2\2\2s\u0156\3\2\2\2") - buf.write("u\u015b\3\2\2\2w\u015e\3\2\2\2y\u0164\3\2\2\2{|\7=\2\2") - buf.write("|\4\3\2\2\2}~\7u\2\2~\177\7m\2\2\177\u0080\7k\2\2\u0080") - buf.write("\u0081\7r\2\2\u0081\6\3\2\2\2\u0082\u0083\7r\2\2\u0083") - buf.write("\u0084\7t\2\2\u0084\u0085\7k\2\2\u0085\u0086\7p\2\2\u0086") - buf.write("\u0087\7v\2\2\u0087\b\3\2\2\2\u0088\u0089\7?\2\2\u0089") - buf.write("\n\3\2\2\2\u008a\u008b\7`\2\2\u008b\f\3\2\2\2\u008c\u008d") - buf.write("\7,\2\2\u008d\16\3\2\2\2\u008e\u008f\7\61\2\2\u008f\20") - buf.write("\3\2\2\2\u0090\u0091\7\'\2\2\u0091\22\3\2\2\2\u0092\u0093") - buf.write("\7-\2\2\u0093\24\3\2\2\2\u0094\u0095\7/\2\2\u0095\26\3") - buf.write("\2\2\2\u0096\u0097\7>\2\2\u0097\u0098\7>\2\2\u0098\30") - buf.write("\3\2\2\2\u0099\u009a\7@\2\2\u009a\u009b\7@\2\2\u009b\32") - buf.write("\3\2\2\2\u009c\u009d\7(\2\2\u009d\34\3\2\2\2\u009e\u009f") - buf.write("\7&\2\2\u009f\36\3\2\2\2\u00a0\u00a1\7~\2\2\u00a1 \3\2") - buf.write("\2\2\u00a2\u00a3\7d\2\2\u00a3\u00a4\7t\2\2\u00a4\u00a5") - buf.write("\7g\2\2\u00a5\u00a6\7c\2\2\u00a6\u00a7\7m\2\2\u00a7\"") - buf.write("\3\2\2\2\u00a8\u00a9\7e\2\2\u00a9\u00aa\7q\2\2\u00aa\u00ab") - buf.write("\7p\2\2\u00ab\u00ac\7v\2\2\u00ac\u00ad\7k\2\2\u00ad\u00ae") - buf.write("\7p\2\2\u00ae\u00af\7w\2\2\u00af\u00b0\7g\2\2\u00b0$\3") - buf.write("\2\2\2\u00b1\u00b2\7.\2\2\u00b2&\3\2\2\2\u00b3\u00b4\7") - buf.write("k\2\2\u00b4\u00b5\7h\2\2\u00b5(\3\2\2\2\u00b6\u00b7\7") - buf.write("g\2\2\u00b7\u00b8\7n\2\2\u00b8\u00b9\7k\2\2\u00b9\u00ba") - buf.write("\7h\2\2\u00ba*\3\2\2\2\u00bb\u00bc\7g\2\2\u00bc\u00bd") - buf.write("\7n\2\2\u00bd\u00be\7u\2\2\u00be\u00bf\7g\2\2\u00bf,\3") - buf.write("\2\2\2\u00c0\u00c1\7y\2\2\u00c1\u00c2\7j\2\2\u00c2\u00c3") - buf.write("\7k\2\2\u00c3\u00c4\7n\2\2\u00c4\u00c5\7g\2\2\u00c5.\3") - buf.write("\2\2\2\u00c6\u00c7\7w\2\2\u00c7\u00c8\7p\2\2\u00c8\u00c9") - buf.write("\7v\2\2\u00c9\u00ca\7k\2\2\u00ca\u00cb\7n\2\2\u00cb\60") - buf.write("\3\2\2\2\u00cc\u00cd\7h\2\2\u00cd\u00ce\7q\2\2\u00ce\u00cf") - buf.write("\7t\2\2\u00cf\62\3\2\2\2\u00d0\u00d1\7k\2\2\u00d1\u00d2") - buf.write("\7p\2\2\u00d2\64\3\2\2\2\u00d3\u00d4\7u\2\2\u00d4\u00d5") - buf.write("\7v\2\2\u00d5\u00d6\7g\2\2\u00d6\u00d7\7r\2\2\u00d7\66") - buf.write("\3\2\2\2\u00d8\u00d9\7f\2\2\u00d9\u00da\7q\2\2\u00da8") - buf.write("\3\2\2\2\u00db\u00dc\7}\2\2\u00dc:\3\2\2\2\u00dd\u00de") - buf.write("\7\177\2\2\u00de<\3\2\2\2\u00df\u00e0\7*\2\2\u00e0>\3") - buf.write("\2\2\2\u00e1\u00e2\7+\2\2\u00e2@\3\2\2\2\u00e3\u00e4\7") - buf.write("]\2\2\u00e4B\3\2\2\2\u00e5\u00e6\7_\2\2\u00e6D\3\2\2\2") - buf.write("\u00e7\u00e8\7\60\2\2\u00e8F\3\2\2\2\u00e9\u00ea\7\u0080") - buf.write("\2\2\u00eaH\3\2\2\2\u00eb\u00ec\7\60\2\2\u00ec\u00ed\7") - buf.write("\60\2\2\u00edJ\3\2\2\2\u00ee\u00ef\7\60\2\2\u00ef\u00f0") - buf.write("\7\60\2\2\u00f0\u00f1\7\60\2\2\u00f1L\3\2\2\2\u00f2\u00f3") - buf.write("\7?\2\2\u00f3\u00f4\7?\2\2\u00f4N\3\2\2\2\u00f5\u00f6") - buf.write("\7#\2\2\u00f6\u00f7\7?\2\2\u00f7P\3\2\2\2\u00f8\u00f9") - buf.write("\7>\2\2\u00f9R\3\2\2\2\u00fa\u00fb\7>\2\2\u00fb\u00fc") - buf.write("\7?\2\2\u00fcT\3\2\2\2\u00fd\u00fe\7@\2\2\u00feV\3\2\2") - buf.write("\2\u00ff\u0100\7@\2\2\u0100\u0101\7?\2\2\u0101X\3\2\2") - buf.write("\2\u0102\u0103\7p\2\2\u0103\u0104\7q\2\2\u0104\u0105\7") - buf.write("v\2\2\u0105Z\3\2\2\2\u0106\u0107\7c\2\2\u0107\u0108\7") - buf.write("p\2\2\u0108\u0109\7f\2\2\u0109\\\3\2\2\2\u010a\u010b\7") - buf.write("q\2\2\u010b\u010c\7t\2\2\u010c^\3\2\2\2\u010d\u010e\7") - buf.write("A\2\2\u010e`\3\2\2\2\u010f\u0110\7<\2\2\u0110b\3\2\2\2") - buf.write("\u0111\u0112\7v\2\2\u0112\u0113\7t\2\2\u0113\u0114\7w") - buf.write("\2\2\u0114\u0115\7g\2\2\u0115d\3\2\2\2\u0116\u0117\7h") - buf.write("\2\2\u0117\u0118\7c\2\2\u0118\u0119\7n\2\2\u0119\u011a") - buf.write("\7u\2\2\u011a\u011b\7g\2\2\u011bf\3\2\2\2\u011c\u011e") - buf.write("\5q9\2\u011d\u011c\3\2\2\2\u011e\u011f\3\2\2\2\u011f\u011d") - buf.write("\3\2\2\2\u011f\u0120\3\2\2\2\u0120h\3\2\2\2\u0121\u0123") - buf.write("\5q9\2\u0122\u0121\3\2\2\2\u0123\u0124\3\2\2\2\u0124\u0122") - buf.write("\3\2\2\2\u0124\u0125\3\2\2\2\u0125\u0126\3\2\2\2\u0126") - buf.write("\u0128\7\60\2\2\u0127\u0129\5q9\2\u0128\u0127\3\2\2\2") - buf.write("\u0129\u012a\3\2\2\2\u012a\u0128\3\2\2\2\u012a\u012b\3") - buf.write("\2\2\2\u012b\u0135\3\2\2\2\u012c\u012e\7g\2\2\u012d\u012f") - buf.write("\7/\2\2\u012e\u012d\3\2\2\2\u012e\u012f\3\2\2\2\u012f") - buf.write("\u0131\3\2\2\2\u0130\u0132\5q9\2\u0131\u0130\3\2\2\2\u0132") - buf.write("\u0133\3\2\2\2\u0133\u0131\3\2\2\2\u0133\u0134\3\2\2\2") - buf.write("\u0134\u0136\3\2\2\2\u0135\u012c\3\2\2\2\u0135\u0136\3") - buf.write("\2\2\2\u0136j\3\2\2\2\u0137\u013d\7)\2\2\u0138\u013c\n") - buf.write("\2\2\2\u0139\u013a\7^\2\2\u013a\u013c\t\3\2\2\u013b\u0138") - buf.write("\3\2\2\2\u013b\u0139\3\2\2\2\u013c\u013f\3\2\2\2\u013d") - buf.write("\u013b\3\2\2\2\u013d\u013e\3\2\2\2\u013e\u0140\3\2\2\2") - buf.write("\u013f\u013d\3\2\2\2\u0140\u0141\7)\2\2\u0141l\3\2\2\2") - buf.write("\u0142\u0148\7$\2\2\u0143\u0147\n\4\2\2\u0144\u0145\7") - buf.write("^\2\2\u0145\u0147\t\5\2\2\u0146\u0143\3\2\2\2\u0146\u0144") - buf.write("\3\2\2\2\u0147\u014a\3\2\2\2\u0148\u0146\3\2\2\2\u0148") - buf.write("\u0149\3\2\2\2\u0149\u014b\3\2\2\2\u014a\u0148\3\2\2\2") - buf.write("\u014b\u014c\7$\2\2\u014cn\3\2\2\2\u014d\u0151\5s:\2\u014e") - buf.write("\u0150\5u;\2\u014f\u014e\3\2\2\2\u0150\u0153\3\2\2\2\u0151") - buf.write("\u014f\3\2\2\2\u0151\u0152\3\2\2\2\u0152p\3\2\2\2\u0153") - buf.write("\u0151\3\2\2\2\u0154\u0155\t\6\2\2\u0155r\3\2\2\2\u0156") - buf.write("\u0157\t\7\2\2\u0157t\3\2\2\2\u0158\u015c\5s:\2\u0159") - buf.write("\u015c\5q9\2\u015a\u015c\t\b\2\2\u015b\u0158\3\2\2\2\u015b") - buf.write("\u0159\3\2\2\2\u015b\u015a\3\2\2\2\u015cv\3\2\2\2\u015d") - buf.write("\u015f\t\t\2\2\u015e\u015d\3\2\2\2\u015f\u0160\3\2\2\2") - buf.write("\u0160\u015e\3\2\2\2\u0160\u0161\3\2\2\2\u0161\u0162\3") - buf.write("\2\2\2\u0162\u0163\b<\2\2\u0163x\3\2\2\2\u0164\u0165\13") - buf.write("\2\2\2\u0165z\3\2\2\2\20\2\u011f\u0124\u012a\u012e\u0133") - buf.write("\u0135\u013b\u013d\u0146\u0148\u0151\u015b\u0160\3\b\2") - buf.write("\2") + buf.write("\4;\t;\4<\t<\4=\t=\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\3\2\3") + buf.write("\2\3\3\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\4\3\5\3\5") + buf.write("\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\n\3\n\3\13\3\13\3\f") + buf.write("\3\f\3\f\3\r\3\r\3\r\3\16\3\16\3\17\3\17\3\20\3\20\3\21") + buf.write("\3\21\3\21\3\21\3\21\3\21\3\22\3\22\3\22\3\22\3\22\3\22") + buf.write("\3\22\3\22\3\22\3\23\3\23\3\24\3\24\3\24\3\25\3\25\3\25") + buf.write("\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27") + buf.write("\3\27\3\27\3\30\3\30\3\30\3\30\3\30\3\30\3\31\3\31\3\31") + buf.write("\3\31\3\32\3\32\3\32\3\33\3\33\3\33\3\33\3\33\3\34\3\34") + buf.write("\3\34\3\35\3\35\3\36\3\36\3\37\3\37\3 \3 \3!\3!\3\"\3") + buf.write("\"\3#\3#\3$\3$\3%\3%\3%\3&\3&\3&\3&\3\'\3\'\3\'\3(\3(") + buf.write("\3(\3)\3)\3*\3*\3*\3+\3+\3,\3,\3,\3-\3-\3-\3-\3.\3.\3") + buf.write(".\3.\3/\3/\3/\3\60\3\60\3\61\3\61\3\62\3\62\3\62\3\62") + buf.write("\3\62\3\63\3\63\3\63\3\63\3\63\3\63\3\64\3\64\3\64\3\64") + buf.write("\3\65\3\65\3\65\3\65\3\65\3\65\3\66\3\66\3\66\3\66\3\66") + buf.write("\3\67\3\67\3\67\3\67\3\67\38\38\38\38\38\38\38\39\69\u0143") + buf.write("\n9\r9\169\u0144\3:\6:\u0148\n:\r:\16:\u0149\3:\3:\6:") + buf.write("\u014e\n:\r:\16:\u014f\3:\3:\5:\u0154\n:\3:\6:\u0157\n") + buf.write(":\r:\16:\u0158\5:\u015b\n:\3;\3;\3;\3;\7;\u0161\n;\f;") + buf.write("\16;\u0164\13;\3;\3;\3<\3<\3<\3<\7<\u016c\n<\f<\16<\u016f") + buf.write("\13<\3<\3<\3=\3=\7=\u0175\n=\f=\16=\u0178\13=\3>\3>\3") + buf.write("?\3?\3@\3@\3@\5@\u0181\n@\3A\6A\u0184\nA\rA\16A\u0185") + buf.write("\3A\3A\3B\3B\2\2C\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23") + buf.write("\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25") + buf.write(")\26+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A") + buf.write("\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65") + buf.write("i\66k\67m8o9q:s;u{\2}\2\177\2\u0081?\u0083@\3\2\n") + buf.write("\4\2))^^\6\2))^^ppvv\4\2$$^^\6\2$$^^ppvv\3\2\62;\5\2C") + buf.write("\\aac|\4\2))aa\5\2\13\f\17\17\"\"\2\u0195\2\3\3\2\2\2") + buf.write("\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r") + buf.write("\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3") + buf.write("\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2") + buf.write("\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'") + buf.write("\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2") + buf.write("\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29") + buf.write("\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2") + buf.write("C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2") + buf.write("\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2") + buf.write("\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2") + buf.write("\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3") + buf.write("\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2\2s") + buf.write("\3\2\2\2\2u\3\2\2\2\2w\3\2\2\2\2y\3\2\2\2\2\u0081\3\2") + buf.write("\2\2\2\u0083\3\2\2\2\3\u0085\3\2\2\2\5\u0087\3\2\2\2\7") + buf.write("\u008c\3\2\2\2\t\u0092\3\2\2\2\13\u0094\3\2\2\2\r\u0096") + buf.write("\3\2\2\2\17\u0098\3\2\2\2\21\u009a\3\2\2\2\23\u009c\3") + buf.write("\2\2\2\25\u009e\3\2\2\2\27\u00a0\3\2\2\2\31\u00a3\3\2") + buf.write("\2\2\33\u00a6\3\2\2\2\35\u00a8\3\2\2\2\37\u00aa\3\2\2") + buf.write("\2!\u00ac\3\2\2\2#\u00b2\3\2\2\2%\u00bb\3\2\2\2\'\u00bd") + buf.write("\3\2\2\2)\u00c0\3\2\2\2+\u00c5\3\2\2\2-\u00ca\3\2\2\2") + buf.write("/\u00d0\3\2\2\2\61\u00d6\3\2\2\2\63\u00da\3\2\2\2\65\u00dd") + buf.write("\3\2\2\2\67\u00e2\3\2\2\29\u00e5\3\2\2\2;\u00e7\3\2\2") + buf.write("\2=\u00e9\3\2\2\2?\u00eb\3\2\2\2A\u00ed\3\2\2\2C\u00ef") + buf.write("\3\2\2\2E\u00f1\3\2\2\2G\u00f3\3\2\2\2I\u00f5\3\2\2\2") + buf.write("K\u00f8\3\2\2\2M\u00fc\3\2\2\2O\u00ff\3\2\2\2Q\u0102\3") + buf.write("\2\2\2S\u0104\3\2\2\2U\u0107\3\2\2\2W\u0109\3\2\2\2Y\u010c") + buf.write("\3\2\2\2[\u0110\3\2\2\2]\u0114\3\2\2\2_\u0117\3\2\2\2") + buf.write("a\u0119\3\2\2\2c\u011b\3\2\2\2e\u0120\3\2\2\2g\u0126\3") + buf.write("\2\2\2i\u012a\3\2\2\2k\u0130\3\2\2\2m\u0135\3\2\2\2o\u013a") + buf.write("\3\2\2\2q\u0142\3\2\2\2s\u0147\3\2\2\2u\u015c\3\2\2\2") + buf.write("w\u0167\3\2\2\2y\u0172\3\2\2\2{\u0179\3\2\2\2}\u017b\3") + buf.write("\2\2\2\177\u0180\3\2\2\2\u0081\u0183\3\2\2\2\u0083\u0189") + buf.write("\3\2\2\2\u0085\u0086\7=\2\2\u0086\4\3\2\2\2\u0087\u0088") + buf.write("\7u\2\2\u0088\u0089\7m\2\2\u0089\u008a\7k\2\2\u008a\u008b") + buf.write("\7r\2\2\u008b\6\3\2\2\2\u008c\u008d\7r\2\2\u008d\u008e") + buf.write("\7t\2\2\u008e\u008f\7k\2\2\u008f\u0090\7p\2\2\u0090\u0091") + buf.write("\7v\2\2\u0091\b\3\2\2\2\u0092\u0093\7?\2\2\u0093\n\3\2") + buf.write("\2\2\u0094\u0095\7`\2\2\u0095\f\3\2\2\2\u0096\u0097\7") + buf.write(",\2\2\u0097\16\3\2\2\2\u0098\u0099\7\61\2\2\u0099\20\3") + buf.write("\2\2\2\u009a\u009b\7\'\2\2\u009b\22\3\2\2\2\u009c\u009d") + buf.write("\7-\2\2\u009d\24\3\2\2\2\u009e\u009f\7/\2\2\u009f\26\3") + buf.write("\2\2\2\u00a0\u00a1\7>\2\2\u00a1\u00a2\7>\2\2\u00a2\30") + buf.write("\3\2\2\2\u00a3\u00a4\7@\2\2\u00a4\u00a5\7@\2\2\u00a5\32") + buf.write("\3\2\2\2\u00a6\u00a7\7(\2\2\u00a7\34\3\2\2\2\u00a8\u00a9") + buf.write("\7&\2\2\u00a9\36\3\2\2\2\u00aa\u00ab\7~\2\2\u00ab \3\2") + buf.write("\2\2\u00ac\u00ad\7d\2\2\u00ad\u00ae\7t\2\2\u00ae\u00af") + buf.write("\7g\2\2\u00af\u00b0\7c\2\2\u00b0\u00b1\7m\2\2\u00b1\"") + buf.write("\3\2\2\2\u00b2\u00b3\7e\2\2\u00b3\u00b4\7q\2\2\u00b4\u00b5") + buf.write("\7p\2\2\u00b5\u00b6\7v\2\2\u00b6\u00b7\7k\2\2\u00b7\u00b8") + buf.write("\7p\2\2\u00b8\u00b9\7w\2\2\u00b9\u00ba\7g\2\2\u00ba$\3") + buf.write("\2\2\2\u00bb\u00bc\7.\2\2\u00bc&\3\2\2\2\u00bd\u00be\7") + buf.write("k\2\2\u00be\u00bf\7h\2\2\u00bf(\3\2\2\2\u00c0\u00c1\7") + buf.write("g\2\2\u00c1\u00c2\7n\2\2\u00c2\u00c3\7k\2\2\u00c3\u00c4") + buf.write("\7h\2\2\u00c4*\3\2\2\2\u00c5\u00c6\7g\2\2\u00c6\u00c7") + buf.write("\7n\2\2\u00c7\u00c8\7u\2\2\u00c8\u00c9\7g\2\2\u00c9,\3") + buf.write("\2\2\2\u00ca\u00cb\7y\2\2\u00cb\u00cc\7j\2\2\u00cc\u00cd") + buf.write("\7k\2\2\u00cd\u00ce\7n\2\2\u00ce\u00cf\7g\2\2\u00cf.\3") + buf.write("\2\2\2\u00d0\u00d1\7w\2\2\u00d1\u00d2\7p\2\2\u00d2\u00d3") + buf.write("\7v\2\2\u00d3\u00d4\7k\2\2\u00d4\u00d5\7n\2\2\u00d5\60") + buf.write("\3\2\2\2\u00d6\u00d7\7h\2\2\u00d7\u00d8\7q\2\2\u00d8\u00d9") + buf.write("\7t\2\2\u00d9\62\3\2\2\2\u00da\u00db\7k\2\2\u00db\u00dc") + buf.write("\7p\2\2\u00dc\64\3\2\2\2\u00dd\u00de\7u\2\2\u00de\u00df") + buf.write("\7v\2\2\u00df\u00e0\7g\2\2\u00e0\u00e1\7r\2\2\u00e1\66") + buf.write("\3\2\2\2\u00e2\u00e3\7f\2\2\u00e3\u00e4\7q\2\2\u00e48") + buf.write("\3\2\2\2\u00e5\u00e6\7}\2\2\u00e6:\3\2\2\2\u00e7\u00e8") + buf.write("\7\177\2\2\u00e8<\3\2\2\2\u00e9\u00ea\7*\2\2\u00ea>\3") + buf.write("\2\2\2\u00eb\u00ec\7+\2\2\u00ec@\3\2\2\2\u00ed\u00ee\7") + buf.write("]\2\2\u00eeB\3\2\2\2\u00ef\u00f0\7_\2\2\u00f0D\3\2\2\2") + buf.write("\u00f1\u00f2\7\60\2\2\u00f2F\3\2\2\2\u00f3\u00f4\7\u0080") + buf.write("\2\2\u00f4H\3\2\2\2\u00f5\u00f6\7\60\2\2\u00f6\u00f7\7") + buf.write("\60\2\2\u00f7J\3\2\2\2\u00f8\u00f9\7\60\2\2\u00f9\u00fa") + buf.write("\7\60\2\2\u00fa\u00fb\7\60\2\2\u00fbL\3\2\2\2\u00fc\u00fd") + buf.write("\7?\2\2\u00fd\u00fe\7?\2\2\u00feN\3\2\2\2\u00ff\u0100") + buf.write("\7#\2\2\u0100\u0101\7?\2\2\u0101P\3\2\2\2\u0102\u0103") + buf.write("\7>\2\2\u0103R\3\2\2\2\u0104\u0105\7>\2\2\u0105\u0106") + buf.write("\7?\2\2\u0106T\3\2\2\2\u0107\u0108\7@\2\2\u0108V\3\2\2") + buf.write("\2\u0109\u010a\7@\2\2\u010a\u010b\7?\2\2\u010bX\3\2\2") + buf.write("\2\u010c\u010d\7p\2\2\u010d\u010e\7q\2\2\u010e\u010f\7") + buf.write("v\2\2\u010fZ\3\2\2\2\u0110\u0111\7c\2\2\u0111\u0112\7") + buf.write("p\2\2\u0112\u0113\7f\2\2\u0113\\\3\2\2\2\u0114\u0115\7") + buf.write("q\2\2\u0115\u0116\7t\2\2\u0116^\3\2\2\2\u0117\u0118\7") + buf.write("A\2\2\u0118`\3\2\2\2\u0119\u011a\7<\2\2\u011ab\3\2\2\2") + buf.write("\u011b\u011c\7v\2\2\u011c\u011d\7t\2\2\u011d\u011e\7w") + buf.write("\2\2\u011e\u011f\7g\2\2\u011fd\3\2\2\2\u0120\u0121\7h") + buf.write("\2\2\u0121\u0122\7c\2\2\u0122\u0123\7n\2\2\u0123\u0124") + buf.write("\7u\2\2\u0124\u0125\7g\2\2\u0125f\3\2\2\2\u0126\u0127") + buf.write("\7K\2\2\u0127\u0128\7p\2\2\u0128\u0129\7v\2\2\u0129h\3") + buf.write("\2\2\2\u012a\u012b\7H\2\2\u012b\u012c\7n\2\2\u012c\u012d") + buf.write("\7q\2\2\u012d\u012e\7c\2\2\u012e\u012f\7v\2\2\u012fj\3") + buf.write("\2\2\2\u0130\u0131\7D\2\2\u0131\u0132\7q\2\2\u0132\u0133") + buf.write("\7q\2\2\u0133\u0134\7n\2\2\u0134l\3\2\2\2\u0135\u0136") + buf.write("\7E\2\2\u0136\u0137\7j\2\2\u0137\u0138\7c\2\2\u0138\u0139") + buf.write("\7t\2\2\u0139n\3\2\2\2\u013a\u013b\7U\2\2\u013b\u013c") + buf.write("\7v\2\2\u013c\u013d\7t\2\2\u013d\u013e\7k\2\2\u013e\u013f") + buf.write("\7p\2\2\u013f\u0140\7i\2\2\u0140p\3\2\2\2\u0141\u0143") + buf.write("\5{>\2\u0142\u0141\3\2\2\2\u0143\u0144\3\2\2\2\u0144\u0142") + buf.write("\3\2\2\2\u0144\u0145\3\2\2\2\u0145r\3\2\2\2\u0146\u0148") + buf.write("\5{>\2\u0147\u0146\3\2\2\2\u0148\u0149\3\2\2\2\u0149\u0147") + buf.write("\3\2\2\2\u0149\u014a\3\2\2\2\u014a\u014b\3\2\2\2\u014b") + buf.write("\u014d\7\60\2\2\u014c\u014e\5{>\2\u014d\u014c\3\2\2\2") + buf.write("\u014e\u014f\3\2\2\2\u014f\u014d\3\2\2\2\u014f\u0150\3") + buf.write("\2\2\2\u0150\u015a\3\2\2\2\u0151\u0153\7g\2\2\u0152\u0154") + buf.write("\7/\2\2\u0153\u0152\3\2\2\2\u0153\u0154\3\2\2\2\u0154") + buf.write("\u0156\3\2\2\2\u0155\u0157\5{>\2\u0156\u0155\3\2\2\2\u0157") + buf.write("\u0158\3\2\2\2\u0158\u0156\3\2\2\2\u0158\u0159\3\2\2\2") + buf.write("\u0159\u015b\3\2\2\2\u015a\u0151\3\2\2\2\u015a\u015b\3") + buf.write("\2\2\2\u015bt\3\2\2\2\u015c\u0162\7)\2\2\u015d\u0161\n") + buf.write("\2\2\2\u015e\u015f\7^\2\2\u015f\u0161\t\3\2\2\u0160\u015d") + buf.write("\3\2\2\2\u0160\u015e\3\2\2\2\u0161\u0164\3\2\2\2\u0162") + buf.write("\u0160\3\2\2\2\u0162\u0163\3\2\2\2\u0163\u0165\3\2\2\2") + buf.write("\u0164\u0162\3\2\2\2\u0165\u0166\7)\2\2\u0166v\3\2\2\2") + buf.write("\u0167\u016d\7$\2\2\u0168\u016c\n\4\2\2\u0169\u016a\7") + buf.write("^\2\2\u016a\u016c\t\5\2\2\u016b\u0168\3\2\2\2\u016b\u0169") + buf.write("\3\2\2\2\u016c\u016f\3\2\2\2\u016d\u016b\3\2\2\2\u016d") + buf.write("\u016e\3\2\2\2\u016e\u0170\3\2\2\2\u016f\u016d\3\2\2\2") + buf.write("\u0170\u0171\7$\2\2\u0171x\3\2\2\2\u0172\u0176\5}?\2\u0173") + buf.write("\u0175\5\177@\2\u0174\u0173\3\2\2\2\u0175\u0178\3\2\2") + buf.write("\2\u0176\u0174\3\2\2\2\u0176\u0177\3\2\2\2\u0177z\3\2") + buf.write("\2\2\u0178\u0176\3\2\2\2\u0179\u017a\t\6\2\2\u017a|\3") + buf.write("\2\2\2\u017b\u017c\t\7\2\2\u017c~\3\2\2\2\u017d\u0181") + buf.write("\5}?\2\u017e\u0181\5{>\2\u017f\u0181\t\b\2\2\u0180\u017d") + buf.write("\3\2\2\2\u0180\u017e\3\2\2\2\u0180\u017f\3\2\2\2\u0181") + buf.write("\u0080\3\2\2\2\u0182\u0184\t\t\2\2\u0183\u0182\3\2\2\2") + buf.write("\u0184\u0185\3\2\2\2\u0185\u0183\3\2\2\2\u0185\u0186\3") + buf.write("\2\2\2\u0186\u0187\3\2\2\2\u0187\u0188\bA\2\2\u0188\u0082") + buf.write("\3\2\2\2\u0189\u018a\13\2\2\2\u018a\u0084\3\2\2\2\20\2") + buf.write("\u0144\u0149\u014f\u0153\u0158\u015a\u0160\u0162\u016b") + buf.write("\u016d\u0176\u0180\u0185\3\b\2\2") return buf.getvalue() @@ -220,13 +234,18 @@ class PyxellLexer(Lexer): T__47 = 48 T__48 = 49 T__49 = 50 - INT = 51 - FLOAT = 52 - CHAR = 53 - STRING = 54 - ID = 55 - WS = 56 - ERR = 57 + T__50 = 51 + T__51 = 52 + T__52 = 53 + T__53 = 54 + T__54 = 55 + INT = 56 + FLOAT = 57 + CHAR = 58 + STRING = 59 + ID = 60 + WS = 61 + ERR = 62 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -239,7 +258,8 @@ class PyxellLexer(Lexer): "'until'", "'for'", "'in'", "'step'", "'do'", "'{'", "'}'", "'('", "')'", "'['", "']'", "'.'", "'~'", "'..'", "'...'", "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", "'not'", "'and'", "'or'", - "'?'", "':'", "'true'", "'false'" ] + "'?'", "':'", "'true'", "'false'", "'Int'", "'Float'", "'Bool'", + "'Char'", "'String'" ] symbolicNames = [ "", "INT", "FLOAT", "CHAR", "STRING", "ID", "WS", "ERR" ] @@ -252,8 +272,9 @@ class PyxellLexer(Lexer): "T__32", "T__33", "T__34", "T__35", "T__36", "T__37", "T__38", "T__39", "T__40", "T__41", "T__42", "T__43", "T__44", "T__45", "T__46", "T__47", "T__48", "T__49", - "INT", "FLOAT", "CHAR", "STRING", "ID", "DIGIT", "ID_START", - "ID_CONT", "WS", "ERR" ] + "T__50", "T__51", "T__52", "T__53", "T__54", "INT", "FLOAT", + "CHAR", "STRING", "ID", "DIGIT", "ID_START", "ID_CONT", + "WS", "ERR" ] grammarFileName = "Pyxell.g4" diff --git a/src/antlr/PyxellLexer.tokens b/src/antlr/PyxellLexer.tokens index eb81542a..df59214a 100644 --- a/src/antlr/PyxellLexer.tokens +++ b/src/antlr/PyxellLexer.tokens @@ -48,13 +48,18 @@ T__46=47 T__47=48 T__48=49 T__49=50 -INT=51 -FLOAT=52 -CHAR=53 -STRING=54 -ID=55 -WS=56 -ERR=57 +T__50=51 +T__51=52 +T__52=53 +T__53=54 +T__54=55 +INT=56 +FLOAT=57 +CHAR=58 +STRING=59 +ID=60 +WS=61 +ERR=62 ';'=1 'skip'=2 'print'=3 @@ -105,3 +110,8 @@ ERR=57 ':'=48 'true'=49 'false'=50 +'Int'=51 +'Float'=52 +'Bool'=53 +'Char'=54 +'String'=55 diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index a332921e..f46531bc 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -8,96 +8,111 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3;") - buf.write("\u00d2\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") - buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\3\2\7\2\26\n\2\f\2\16\2\31\13") - buf.write("\2\3\2\3\2\3\3\3\3\3\3\3\3\5\3!\n\3\3\4\3\4\3\4\5\4&\n") - buf.write("\4\3\4\3\4\3\4\7\4+\n\4\f\4\16\4.\13\4\3\4\3\4\3\4\3\4") - buf.write("\3\4\3\4\3\4\5\4\67\n\4\3\5\3\5\3\5\7\5<\n\5\f\5\16\5") - buf.write("?\13\5\3\6\3\6\3\6\3\6\3\6\3\6\3\6\7\6H\n\6\f\6\16\6K") - buf.write("\13\6\3\6\3\6\5\6O\n\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6") - buf.write("\3\6\3\6\3\6\3\6\3\6\3\6\5\6_\n\6\3\6\3\6\5\6c\n\6\3\7") - buf.write("\3\7\3\7\6\7h\n\7\r\7\16\7i\3\7\3\7\3\b\3\b\3\b\7\bq\n") - buf.write("\b\f\b\16\bt\13\b\3\b\3\b\3\t\3\t\3\t\3\t\3\t\3\t\3\t") - buf.write("\3\t\3\t\3\t\5\t\u0082\n\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3@") + buf.write("\u00ee\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\3\2\7\2\30\n\2\f\2") + buf.write("\16\2\33\13\2\3\2\3\2\3\3\3\3\3\3\3\3\5\3#\n\3\3\4\3\4") + buf.write("\3\4\5\4(\n\4\3\4\3\4\3\4\3\4\5\4.\n\4\3\4\3\4\3\4\7\4") + buf.write("\63\n\4\f\4\16\4\66\13\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\5") + buf.write("\4?\n\4\3\5\3\5\3\5\7\5D\n\5\f\5\16\5G\13\5\3\6\3\6\3") + buf.write("\6\3\6\3\6\3\6\3\6\7\6P\n\6\f\6\16\6S\13\6\3\6\3\6\5\6") + buf.write("W\n\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6") + buf.write("\3\6\3\6\5\6g\n\6\3\6\3\6\5\6k\n\6\3\7\3\7\3\7\6\7p\n") + buf.write("\7\r\7\16\7q\3\7\3\7\3\b\3\b\3\b\7\by\n\b\f\b\16\b|\13") + buf.write("\b\3\b\3\b\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\5\t") + buf.write("\u008a\n\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") buf.write("\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") - buf.write("\t\3\t\3\t\3\t\3\t\7\t\u00b8\n\t\f\t\16\t\u00bb\13\t\3") - buf.write("\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\7\n\u00c6\n\n\f\n\16") - buf.write("\n\u00c9\13\n\3\n\5\n\u00cc\n\n\3\n\3\n\5\n\u00d0\n\n") - buf.write("\3\n\2\3\20\13\2\4\6\b\n\f\16\20\22\2\n\3\2\7\21\3\2\22") - buf.write("\23\4\2\13\f%%\3\2\b\n\3\2\13\f\3\2\r\16\3\2(-\3\2\63") - buf.write("\64\2\u00f4\2\27\3\2\2\2\4 \3\2\2\2\6\66\3\2\2\2\b8\3") - buf.write("\2\2\2\nb\3\2\2\2\fd\3\2\2\2\16r\3\2\2\2\20\u0081\3\2") - buf.write("\2\2\22\u00cf\3\2\2\2\24\26\5\4\3\2\25\24\3\2\2\2\26\31") - buf.write("\3\2\2\2\27\25\3\2\2\2\27\30\3\2\2\2\30\32\3\2\2\2\31") - buf.write("\27\3\2\2\2\32\33\7\2\2\3\33\3\3\2\2\2\34\35\5\6\4\2\35") - buf.write("\36\7\3\2\2\36!\3\2\2\2\37!\5\n\6\2 \34\3\2\2\2 \37\3") - buf.write("\2\2\2!\5\3\2\2\2\"\67\7\4\2\2#%\7\5\2\2$&\5\16\b\2%$") - buf.write("\3\2\2\2%&\3\2\2\2&\67\3\2\2\2\'(\5\b\5\2()\7\6\2\2)+") - buf.write("\3\2\2\2*\'\3\2\2\2+.\3\2\2\2,*\3\2\2\2,-\3\2\2\2-/\3") - buf.write("\2\2\2.,\3\2\2\2/\67\5\16\b\2\60\61\5\20\t\2\61\62\t\2") - buf.write("\2\2\62\63\7\6\2\2\63\64\5\20\t\2\64\67\3\2\2\2\65\67") - buf.write("\t\3\2\2\66\"\3\2\2\2\66#\3\2\2\2\66,\3\2\2\2\66\60\3") - buf.write("\2\2\2\66\65\3\2\2\2\67\7\3\2\2\28=\5\20\t\29:\7\24\2") - buf.write("\2:<\5\20\t\2;9\3\2\2\2\3\2\2\2") - buf.write(">\t\3\2\2\2?=\3\2\2\2@A\7\25\2\2AB\5\20\t\2BI\5\f\7\2") - buf.write("CD\7\26\2\2DE\5\20\t\2EF\5\f\7\2FH\3\2\2\2GC\3\2\2\2H") - buf.write("K\3\2\2\2IG\3\2\2\2IJ\3\2\2\2JN\3\2\2\2KI\3\2\2\2LM\7") - buf.write("\27\2\2MO\5\f\7\2NL\3\2\2\2NO\3\2\2\2Oc\3\2\2\2PQ\7\30") - buf.write("\2\2QR\5\20\t\2RS\5\f\7\2Sc\3\2\2\2TU\7\31\2\2UV\5\20") - buf.write("\t\2VW\5\f\7\2Wc\3\2\2\2XY\7\32\2\2YZ\5\16\b\2Z[\7\33") - buf.write("\2\2[^\5\16\b\2\\]\7\34\2\2]_\5\16\b\2^\\\3\2\2\2^_\3") - buf.write("\2\2\2_`\3\2\2\2`a\5\f\7\2ac\3\2\2\2b@\3\2\2\2bP\3\2\2") - buf.write("\2bT\3\2\2\2bX\3\2\2\2c\13\3\2\2\2de\7\35\2\2eg\7\36\2") - buf.write("\2fh\5\4\3\2gf\3\2\2\2hi\3\2\2\2ig\3\2\2\2ij\3\2\2\2j") - buf.write("k\3\2\2\2kl\7\37\2\2l\r\3\2\2\2mn\5\20\t\2no\7\24\2\2") - buf.write("oq\3\2\2\2pm\3\2\2\2qt\3\2\2\2rp\3\2\2\2rs\3\2\2\2su\3") - buf.write("\2\2\2tr\3\2\2\2uv\5\20\t\2v\17\3\2\2\2wx\b\t\1\2x\u0082") - buf.write("\5\22\n\2yz\7 \2\2z{\5\16\b\2{|\7!\2\2|\u0082\3\2\2\2") - buf.write("}~\t\4\2\2~\u0082\5\20\t\21\177\u0080\7.\2\2\u0080\u0082") - buf.write("\5\20\t\6\u0081w\3\2\2\2\u0081y\3\2\2\2\u0081}\3\2\2\2") - buf.write("\u0081\177\3\2\2\2\u0082\u00b9\3\2\2\2\u0083\u0084\f\22") - buf.write("\2\2\u0084\u0085\7\7\2\2\u0085\u00b8\5\20\t\22\u0086\u0087") - buf.write("\f\20\2\2\u0087\u0088\t\5\2\2\u0088\u00b8\5\20\t\21\u0089") - buf.write("\u008a\f\17\2\2\u008a\u008b\t\6\2\2\u008b\u00b8\5\20\t") - buf.write("\20\u008c\u008d\f\16\2\2\u008d\u008e\t\7\2\2\u008e\u00b8") - buf.write("\5\20\t\17\u008f\u0090\f\r\2\2\u0090\u0091\7\17\2\2\u0091") - buf.write("\u00b8\5\20\t\16\u0092\u0093\f\f\2\2\u0093\u0094\7\20") - buf.write("\2\2\u0094\u00b8\5\20\t\r\u0095\u0096\f\13\2\2\u0096\u0097") - buf.write("\7\21\2\2\u0097\u00b8\5\20\t\f\u0098\u0099\f\n\2\2\u0099") - buf.write("\u009a\7&\2\2\u009a\u00b8\5\20\t\13\u009b\u009c\f\t\2") - buf.write("\2\u009c\u009d\7\'\2\2\u009d\u00b8\5\20\t\n\u009e\u009f") - buf.write("\f\7\2\2\u009f\u00a0\t\b\2\2\u00a0\u00b8\5\20\t\7\u00a1") - buf.write("\u00a2\f\5\2\2\u00a2\u00a3\7/\2\2\u00a3\u00b8\5\20\t\5") - buf.write("\u00a4\u00a5\f\4\2\2\u00a5\u00a6\7\60\2\2\u00a6\u00b8") - buf.write("\5\20\t\4\u00a7\u00a8\f\3\2\2\u00a8\u00a9\7\61\2\2\u00a9") - buf.write("\u00aa\5\20\t\2\u00aa\u00ab\7\62\2\2\u00ab\u00ac\5\20") - buf.write("\t\3\u00ac\u00b8\3\2\2\2\u00ad\u00ae\f\24\2\2\u00ae\u00af") - buf.write("\7\"\2\2\u00af\u00b0\5\20\t\2\u00b0\u00b1\7#\2\2\u00b1") - buf.write("\u00b8\3\2\2\2\u00b2\u00b3\f\23\2\2\u00b3\u00b4\7$\2\2") - buf.write("\u00b4\u00b8\79\2\2\u00b5\u00b6\f\b\2\2\u00b6\u00b8\7") - buf.write("\'\2\2\u00b7\u0083\3\2\2\2\u00b7\u0086\3\2\2\2\u00b7\u0089") - buf.write("\3\2\2\2\u00b7\u008c\3\2\2\2\u00b7\u008f\3\2\2\2\u00b7") - buf.write("\u0092\3\2\2\2\u00b7\u0095\3\2\2\2\u00b7\u0098\3\2\2\2") - buf.write("\u00b7\u009b\3\2\2\2\u00b7\u009e\3\2\2\2\u00b7\u00a1\3") - buf.write("\2\2\2\u00b7\u00a4\3\2\2\2\u00b7\u00a7\3\2\2\2\u00b7\u00ad") - buf.write("\3\2\2\2\u00b7\u00b2\3\2\2\2\u00b7\u00b5\3\2\2\2\u00b8") - buf.write("\u00bb\3\2\2\2\u00b9\u00b7\3\2\2\2\u00b9\u00ba\3\2\2\2") - buf.write("\u00ba\21\3\2\2\2\u00bb\u00b9\3\2\2\2\u00bc\u00d0\7\65") - buf.write("\2\2\u00bd\u00d0\7\66\2\2\u00be\u00d0\t\t\2\2\u00bf\u00d0") - buf.write("\7\67\2\2\u00c0\u00d0\78\2\2\u00c1\u00c7\7\"\2\2\u00c2") - buf.write("\u00c3\5\20\t\2\u00c3\u00c4\7\24\2\2\u00c4\u00c6\3\2\2") - buf.write("\2\u00c5\u00c2\3\2\2\2\u00c6\u00c9\3\2\2\2\u00c7\u00c5") - buf.write("\3\2\2\2\u00c7\u00c8\3\2\2\2\u00c8\u00cb\3\2\2\2\u00c9") - buf.write("\u00c7\3\2\2\2\u00ca\u00cc\5\20\t\2\u00cb\u00ca\3\2\2") - buf.write("\2\u00cb\u00cc\3\2\2\2\u00cc\u00cd\3\2\2\2\u00cd\u00d0") - buf.write("\7#\2\2\u00ce\u00d0\79\2\2\u00cf\u00bc\3\2\2\2\u00cf\u00bd") - buf.write("\3\2\2\2\u00cf\u00be\3\2\2\2\u00cf\u00bf\3\2\2\2\u00cf") - buf.write("\u00c0\3\2\2\2\u00cf\u00c1\3\2\2\2\u00cf\u00ce\3\2\2\2") - buf.write("\u00d0\23\3\2\2\2\24\27 %,\66=IN^bir\u0081\u00b7\u00b9") - buf.write("\u00c7\u00cb\u00cf") + buf.write("\t\7\t\u00c0\n\t\f\t\16\t\u00c3\13\t\3\n\3\n\3\n\3\n\3") + buf.write("\n\3\n\3\n\3\n\3\n\7\n\u00ce\n\n\f\n\16\n\u00d1\13\n\3") + buf.write("\n\5\n\u00d4\n\n\3\n\3\n\5\n\u00d8\n\n\3\13\3\13\3\13") + buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\3\13\5\13\u00e4\n\13\3") + buf.write("\13\3\13\3\13\7\13\u00e9\n\13\f\13\16\13\u00ec\13\13\3") + buf.write("\13\2\4\20\24\f\2\4\6\b\n\f\16\20\22\24\2\n\3\2\7\21\3") + buf.write("\2\22\23\4\2\13\f%%\3\2\b\n\3\2\13\f\3\2\r\16\3\2(-\3") + buf.write("\2\63\64\2\u0117\2\31\3\2\2\2\4\"\3\2\2\2\6>\3\2\2\2\b") + buf.write("@\3\2\2\2\nj\3\2\2\2\fl\3\2\2\2\16z\3\2\2\2\20\u0089\3") + buf.write("\2\2\2\22\u00d7\3\2\2\2\24\u00e3\3\2\2\2\26\30\5\4\3\2") + buf.write("\27\26\3\2\2\2\30\33\3\2\2\2\31\27\3\2\2\2\31\32\3\2\2") + buf.write("\2\32\34\3\2\2\2\33\31\3\2\2\2\34\35\7\2\2\3\35\3\3\2") + buf.write("\2\2\36\37\5\6\4\2\37 \7\3\2\2 #\3\2\2\2!#\5\n\6\2\"\36") + buf.write("\3\2\2\2\"!\3\2\2\2#\5\3\2\2\2$?\7\4\2\2%\'\7\5\2\2&(") + buf.write("\5\16\b\2\'&\3\2\2\2\'(\3\2\2\2(?\3\2\2\2)*\5\24\13\2") + buf.write("*-\7>\2\2+,\7\6\2\2,.\5\16\b\2-+\3\2\2\2-.\3\2\2\2.?\3") + buf.write("\2\2\2/\60\5\b\5\2\60\61\7\6\2\2\61\63\3\2\2\2\62/\3\2") + buf.write("\2\2\63\66\3\2\2\2\64\62\3\2\2\2\64\65\3\2\2\2\65\67\3") + buf.write("\2\2\2\66\64\3\2\2\2\67?\5\16\b\289\5\20\t\29:\t\2\2\2") + buf.write(":;\7\6\2\2;<\5\20\t\2$\3\2\2\2>%") + buf.write("\3\2\2\2>)\3\2\2\2>\64\3\2\2\2>8\3\2\2\2>=\3\2\2\2?\7") + buf.write("\3\2\2\2@E\5\20\t\2AB\7\24\2\2BD\5\20\t\2CA\3\2\2\2DG") + buf.write("\3\2\2\2EC\3\2\2\2EF\3\2\2\2F\t\3\2\2\2GE\3\2\2\2HI\7") + buf.write("\25\2\2IJ\5\20\t\2JQ\5\f\7\2KL\7\26\2\2LM\5\20\t\2MN\5") + buf.write("\f\7\2NP\3\2\2\2OK\3\2\2\2PS\3\2\2\2QO\3\2\2\2QR\3\2\2") + buf.write("\2RV\3\2\2\2SQ\3\2\2\2TU\7\27\2\2UW\5\f\7\2VT\3\2\2\2") + buf.write("VW\3\2\2\2Wk\3\2\2\2XY\7\30\2\2YZ\5\20\t\2Z[\5\f\7\2[") + buf.write("k\3\2\2\2\\]\7\31\2\2]^\5\20\t\2^_\5\f\7\2_k\3\2\2\2`") + buf.write("a\7\32\2\2ab\5\16\b\2bc\7\33\2\2cf\5\16\b\2de\7\34\2\2") + buf.write("eg\5\16\b\2fd\3\2\2\2fg\3\2\2\2gh\3\2\2\2hi\5\f\7\2ik") + buf.write("\3\2\2\2jH\3\2\2\2jX\3\2\2\2j\\\3\2\2\2j`\3\2\2\2k\13") + buf.write("\3\2\2\2lm\7\35\2\2mo\7\36\2\2np\5\4\3\2on\3\2\2\2pq\3") + buf.write("\2\2\2qo\3\2\2\2qr\3\2\2\2rs\3\2\2\2st\7\37\2\2t\r\3\2") + buf.write("\2\2uv\5\20\t\2vw\7\24\2\2wy\3\2\2\2xu\3\2\2\2y|\3\2\2") + buf.write("\2zx\3\2\2\2z{\3\2\2\2{}\3\2\2\2|z\3\2\2\2}~\5\20\t\2") + buf.write("~\17\3\2\2\2\177\u0080\b\t\1\2\u0080\u008a\5\22\n\2\u0081") + buf.write("\u0082\7 \2\2\u0082\u0083\5\16\b\2\u0083\u0084\7!\2\2") + buf.write("\u0084\u008a\3\2\2\2\u0085\u0086\t\4\2\2\u0086\u008a\5") + buf.write("\20\t\21\u0087\u0088\7.\2\2\u0088\u008a\5\20\t\6\u0089") + buf.write("\177\3\2\2\2\u0089\u0081\3\2\2\2\u0089\u0085\3\2\2\2\u0089") + buf.write("\u0087\3\2\2\2\u008a\u00c1\3\2\2\2\u008b\u008c\f\22\2") + buf.write("\2\u008c\u008d\7\7\2\2\u008d\u00c0\5\20\t\22\u008e\u008f") + buf.write("\f\20\2\2\u008f\u0090\t\5\2\2\u0090\u00c0\5\20\t\21\u0091") + buf.write("\u0092\f\17\2\2\u0092\u0093\t\6\2\2\u0093\u00c0\5\20\t") + buf.write("\20\u0094\u0095\f\16\2\2\u0095\u0096\t\7\2\2\u0096\u00c0") + buf.write("\5\20\t\17\u0097\u0098\f\r\2\2\u0098\u0099\7\17\2\2\u0099") + buf.write("\u00c0\5\20\t\16\u009a\u009b\f\f\2\2\u009b\u009c\7\20") + buf.write("\2\2\u009c\u00c0\5\20\t\r\u009d\u009e\f\13\2\2\u009e\u009f") + buf.write("\7\21\2\2\u009f\u00c0\5\20\t\f\u00a0\u00a1\f\n\2\2\u00a1") + buf.write("\u00a2\7&\2\2\u00a2\u00c0\5\20\t\13\u00a3\u00a4\f\t\2") + buf.write("\2\u00a4\u00a5\7\'\2\2\u00a5\u00c0\5\20\t\n\u00a6\u00a7") + buf.write("\f\7\2\2\u00a7\u00a8\t\b\2\2\u00a8\u00c0\5\20\t\7\u00a9") + buf.write("\u00aa\f\5\2\2\u00aa\u00ab\7/\2\2\u00ab\u00c0\5\20\t\5") + buf.write("\u00ac\u00ad\f\4\2\2\u00ad\u00ae\7\60\2\2\u00ae\u00c0") + buf.write("\5\20\t\4\u00af\u00b0\f\3\2\2\u00b0\u00b1\7\61\2\2\u00b1") + buf.write("\u00b2\5\20\t\2\u00b2\u00b3\7\62\2\2\u00b3\u00b4\5\20") + buf.write("\t\3\u00b4\u00c0\3\2\2\2\u00b5\u00b6\f\24\2\2\u00b6\u00b7") + buf.write("\7\"\2\2\u00b7\u00b8\5\20\t\2\u00b8\u00b9\7#\2\2\u00b9") + buf.write("\u00c0\3\2\2\2\u00ba\u00bb\f\23\2\2\u00bb\u00bc\7$\2\2") + buf.write("\u00bc\u00c0\7>\2\2\u00bd\u00be\f\b\2\2\u00be\u00c0\7") + buf.write("\'\2\2\u00bf\u008b\3\2\2\2\u00bf\u008e\3\2\2\2\u00bf\u0091") + buf.write("\3\2\2\2\u00bf\u0094\3\2\2\2\u00bf\u0097\3\2\2\2\u00bf") + buf.write("\u009a\3\2\2\2\u00bf\u009d\3\2\2\2\u00bf\u00a0\3\2\2\2") + buf.write("\u00bf\u00a3\3\2\2\2\u00bf\u00a6\3\2\2\2\u00bf\u00a9\3") + buf.write("\2\2\2\u00bf\u00ac\3\2\2\2\u00bf\u00af\3\2\2\2\u00bf\u00b5") + buf.write("\3\2\2\2\u00bf\u00ba\3\2\2\2\u00bf\u00bd\3\2\2\2\u00c0") + buf.write("\u00c3\3\2\2\2\u00c1\u00bf\3\2\2\2\u00c1\u00c2\3\2\2\2") + buf.write("\u00c2\21\3\2\2\2\u00c3\u00c1\3\2\2\2\u00c4\u00d8\7:\2") + buf.write("\2\u00c5\u00d8\7;\2\2\u00c6\u00d8\t\t\2\2\u00c7\u00d8") + buf.write("\7<\2\2\u00c8\u00d8\7=\2\2\u00c9\u00cf\7\"\2\2\u00ca\u00cb") + buf.write("\5\20\t\2\u00cb\u00cc\7\24\2\2\u00cc\u00ce\3\2\2\2\u00cd") + buf.write("\u00ca\3\2\2\2\u00ce\u00d1\3\2\2\2\u00cf\u00cd\3\2\2\2") + buf.write("\u00cf\u00d0\3\2\2\2\u00d0\u00d3\3\2\2\2\u00d1\u00cf\3") + buf.write("\2\2\2\u00d2\u00d4\5\20\t\2\u00d3\u00d2\3\2\2\2\u00d3") + buf.write("\u00d4\3\2\2\2\u00d4\u00d5\3\2\2\2\u00d5\u00d8\7#\2\2") + buf.write("\u00d6\u00d8\7>\2\2\u00d7\u00c4\3\2\2\2\u00d7\u00c5\3") + buf.write("\2\2\2\u00d7\u00c6\3\2\2\2\u00d7\u00c7\3\2\2\2\u00d7\u00c8") + buf.write("\3\2\2\2\u00d7\u00c9\3\2\2\2\u00d7\u00d6\3\2\2\2\u00d8") + buf.write("\23\3\2\2\2\u00d9\u00da\b\13\1\2\u00da\u00e4\7\65\2\2") + buf.write("\u00db\u00e4\7\66\2\2\u00dc\u00e4\7\67\2\2\u00dd\u00e4") + buf.write("\78\2\2\u00de\u00e4\79\2\2\u00df\u00e0\7\"\2\2\u00e0\u00e1") + buf.write("\5\24\13\2\u00e1\u00e2\7#\2\2\u00e2\u00e4\3\2\2\2\u00e3") + buf.write("\u00d9\3\2\2\2\u00e3\u00db\3\2\2\2\u00e3\u00dc\3\2\2\2") + buf.write("\u00e3\u00dd\3\2\2\2\u00e3\u00de\3\2\2\2\u00e3\u00df\3") + buf.write("\2\2\2\u00e4\u00ea\3\2\2\2\u00e5\u00e6\f\3\2\2\u00e6\u00e7") + buf.write("\7\b\2\2\u00e7\u00e9\5\24\13\3\u00e8\u00e5\3\2\2\2\u00e9") + buf.write("\u00ec\3\2\2\2\u00ea\u00e8\3\2\2\2\u00ea\u00eb\3\2\2\2") + buf.write("\u00eb\25\3\2\2\2\u00ec\u00ea\3\2\2\2\27\31\"\'-\64>E") + buf.write("QVfjqz\u0089\u00bf\u00c1\u00cf\u00d3\u00d7\u00e3\u00ea") return buf.getvalue() @@ -118,7 +133,8 @@ class PyxellParser ( Parser ): "'in'", "'step'", "'do'", "'{'", "'}'", "'('", "')'", "'['", "']'", "'.'", "'~'", "'..'", "'...'", "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", "'not'", "'and'", - "'or'", "'?'", "':'", "'true'", "'false'" ] + "'or'", "'?'", "':'", "'true'", "'false'", "'Int'", + "'Float'", "'Bool'", "'Char'", "'String'" ] symbolicNames = [ "", "", "", "", "", "", "", "", @@ -132,8 +148,9 @@ class PyxellParser ( Parser ): "", "", "", "", "", "", "", "", "", "", "", "", - "", "", "", "INT", "FLOAT", - "CHAR", "STRING", "ID", "WS", "ERR" ] + "", "", "", "", + "", "", "", "", + "INT", "FLOAT", "CHAR", "STRING", "ID", "WS", "ERR" ] RULE_program = 0 RULE_stmt = 1 @@ -144,9 +161,10 @@ class PyxellParser ( Parser ): RULE_tuple_expr = 6 RULE_expr = 7 RULE_atom = 8 + RULE_typ = 9 ruleNames = [ "program", "stmt", "simple_stmt", "lvalue", "compound_stmt", - "block", "tuple_expr", "expr", "atom" ] + "block", "tuple_expr", "expr", "atom", "typ" ] EOF = Token.EOF T__0=1 @@ -199,13 +217,18 @@ class PyxellParser ( Parser ): T__47=48 T__48=49 T__49=50 - INT=51 - FLOAT=52 - CHAR=53 - STRING=54 - ID=55 - WS=56 - ERR=57 + T__50=51 + T__51=52 + T__52=53 + T__53=54 + T__54=55 + INT=56 + FLOAT=57 + CHAR=58 + STRING=59 + ID=60 + WS=61 + ERR=62 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -251,17 +274,17 @@ def program(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 21 + self.state = 23 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__18) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__31) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__49) | (1 << PyxellParser.INT) | (1 << PyxellParser.FLOAT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): - self.state = 18 + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__18) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__31) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__49) | (1 << PyxellParser.T__50) | (1 << PyxellParser.T__51) | (1 << PyxellParser.T__52) | (1 << PyxellParser.T__53) | (1 << PyxellParser.T__54) | (1 << PyxellParser.INT) | (1 << PyxellParser.FLOAT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): + self.state = 20 self.stmt() - self.state = 23 + self.state = 25 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 24 + self.state = 26 self.match(PyxellParser.EOF) except RecognitionException as re: localctx.exception = re @@ -303,19 +326,19 @@ def stmt(self): localctx = PyxellParser.StmtContext(self, self._ctx, self.state) self.enterRule(localctx, 2, self.RULE_stmt) try: - self.state = 30 + self.state = 32 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__15, PyxellParser.T__16, PyxellParser.T__29, PyxellParser.T__31, PyxellParser.T__34, PyxellParser.T__43, PyxellParser.T__48, PyxellParser.T__49, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: + if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__15, PyxellParser.T__16, PyxellParser.T__29, PyxellParser.T__31, PyxellParser.T__34, PyxellParser.T__43, PyxellParser.T__48, PyxellParser.T__49, PyxellParser.T__50, PyxellParser.T__51, PyxellParser.T__52, PyxellParser.T__53, PyxellParser.T__54, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: self.enterOuterAlt(localctx, 1) - self.state = 26 + self.state = 28 self.simple_stmt() - self.state = 27 + self.state = 29 self.match(PyxellParser.T__0) pass elif token in [PyxellParser.T__18, PyxellParser.T__21, PyxellParser.T__22, PyxellParser.T__23]: self.enterOuterAlt(localctx, 2) - self.state = 29 + self.state = 31 self.compound_stmt() pass else: @@ -346,6 +369,28 @@ def copyFrom(self, ctx:ParserRuleContext): + class StmtDeclContext(Simple_stmtContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Simple_stmtContext + super().__init__(parser) + self.copyFrom(ctx) + + def typ(self): + return self.getTypedRuleContext(PyxellParser.TypContext,0) + + def ID(self): + return self.getToken(PyxellParser.ID, 0) + def tuple_expr(self): + return self.getTypedRuleContext(PyxellParser.Tuple_exprContext,0) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStmtDecl" ): + return visitor.visitStmtDecl(self) + else: + return visitor.visitChildren(self) + + class StmtAssgExprContext(Simple_stmtContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Simple_stmtContext @@ -443,57 +488,76 @@ def simple_stmt(self): self.enterRule(localctx, 4, self.RULE_simple_stmt) self._la = 0 # Token type try: - self.state = 52 + self.state = 60 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,4,self._ctx) + la_ = self._interp.adaptivePredict(self._input,5,self._ctx) if la_ == 1: localctx = PyxellParser.StmtSkipContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 32 + self.state = 34 self.match(PyxellParser.T__1) pass elif la_ == 2: localctx = PyxellParser.StmtPrintContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 33 - self.match(PyxellParser.T__2) self.state = 35 + self.match(PyxellParser.T__2) + self.state = 37 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__31) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__49) | (1 << PyxellParser.INT) | (1 << PyxellParser.FLOAT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): - self.state = 34 + self.state = 36 self.tuple_expr() pass elif la_ == 3: - localctx = PyxellParser.StmtAssgContext(self, localctx) + localctx = PyxellParser.StmtDeclContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 42 + self.state = 39 + self.typ(0) + self.state = 40 + self.match(PyxellParser.ID) + self.state = 43 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==PyxellParser.T__3: + self.state = 41 + self.match(PyxellParser.T__3) + self.state = 42 + self.tuple_expr() + + + pass + + elif la_ == 4: + localctx = PyxellParser.StmtAssgContext(self, localctx) + self.enterOuterAlt(localctx, 4) + self.state = 50 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,3,self._ctx) + _alt = self._interp.adaptivePredict(self._input,4,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 37 + self.state = 45 self.lvalue() - self.state = 38 + self.state = 46 self.match(PyxellParser.T__3) - self.state = 44 + self.state = 52 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,3,self._ctx) + _alt = self._interp.adaptivePredict(self._input,4,self._ctx) - self.state = 45 + self.state = 53 self.tuple_expr() pass - elif la_ == 4: + elif la_ == 5: localctx = PyxellParser.StmtAssgExprContext(self, localctx) - self.enterOuterAlt(localctx, 4) - self.state = 46 + self.enterOuterAlt(localctx, 5) + self.state = 54 self.expr(0) - self.state = 47 + self.state = 55 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__4) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__7) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__11) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__14))) != 0)): @@ -501,16 +565,16 @@ def simple_stmt(self): else: self._errHandler.reportMatch(self) self.consume() - self.state = 48 + self.state = 56 self.match(PyxellParser.T__3) - self.state = 49 + self.state = 57 self.expr(0) pass - elif la_ == 5: + elif la_ == 6: localctx = PyxellParser.StmtLoopControlContext(self, localctx) - self.enterOuterAlt(localctx, 5) - self.state = 51 + self.enterOuterAlt(localctx, 6) + self.state = 59 localctx.s = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__15 or _la==PyxellParser.T__16): @@ -562,17 +626,17 @@ def lvalue(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 54 + self.state = 62 self.expr(0) - self.state = 59 + self.state = 67 self._errHandler.sync(self) _la = self._input.LA(1) while _la==PyxellParser.T__17: - self.state = 55 + self.state = 63 self.match(PyxellParser.T__17) - self.state = 56 + self.state = 64 self.expr(0) - self.state = 61 + self.state = 69 self._errHandler.sync(self) _la = self._input.LA(1) @@ -698,39 +762,39 @@ def compound_stmt(self): self.enterRule(localctx, 8, self.RULE_compound_stmt) self._la = 0 # Token type try: - self.state = 96 + self.state = 104 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__18]: localctx = PyxellParser.StmtIfContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 62 + self.state = 70 self.match(PyxellParser.T__18) - self.state = 63 + self.state = 71 self.expr(0) - self.state = 64 + self.state = 72 self.block() - self.state = 71 + self.state = 79 self._errHandler.sync(self) _la = self._input.LA(1) while _la==PyxellParser.T__19: - self.state = 65 + self.state = 73 self.match(PyxellParser.T__19) - self.state = 66 + self.state = 74 self.expr(0) - self.state = 67 + self.state = 75 self.block() - self.state = 73 + self.state = 81 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 76 + self.state = 84 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__20: - self.state = 74 + self.state = 82 self.match(PyxellParser.T__20) - self.state = 75 + self.state = 83 self.block() @@ -738,45 +802,45 @@ def compound_stmt(self): elif token in [PyxellParser.T__21]: localctx = PyxellParser.StmtWhileContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 78 + self.state = 86 self.match(PyxellParser.T__21) - self.state = 79 + self.state = 87 self.expr(0) - self.state = 80 + self.state = 88 self.block() pass elif token in [PyxellParser.T__22]: localctx = PyxellParser.StmtUntilContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 82 + self.state = 90 self.match(PyxellParser.T__22) - self.state = 83 + self.state = 91 self.expr(0) - self.state = 84 + self.state = 92 self.block() pass elif token in [PyxellParser.T__23]: localctx = PyxellParser.StmtForContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 86 + self.state = 94 self.match(PyxellParser.T__23) - self.state = 87 + self.state = 95 self.tuple_expr() - self.state = 88 + self.state = 96 self.match(PyxellParser.T__24) - self.state = 89 + self.state = 97 self.tuple_expr() - self.state = 92 + self.state = 100 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__25: - self.state = 90 + self.state = 98 self.match(PyxellParser.T__25) - self.state = 91 + self.state = 99 localctx.step = self.tuple_expr() - self.state = 94 + self.state = 102 self.block() pass else: @@ -823,23 +887,23 @@ def block(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 98 + self.state = 106 self.match(PyxellParser.T__26) - self.state = 99 + self.state = 107 self.match(PyxellParser.T__27) - self.state = 101 + self.state = 109 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 100 + self.state = 108 self.stmt() - self.state = 103 + self.state = 111 self._errHandler.sync(self) _la = self._input.LA(1) - if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__18) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__31) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__49) | (1 << PyxellParser.INT) | (1 << PyxellParser.FLOAT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0)): + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__18) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__31) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__49) | (1 << PyxellParser.T__50) | (1 << PyxellParser.T__51) | (1 << PyxellParser.T__52) | (1 << PyxellParser.T__53) | (1 << PyxellParser.T__54) | (1 << PyxellParser.INT) | (1 << PyxellParser.FLOAT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0)): break - self.state = 105 + self.state = 113 self.match(PyxellParser.T__28) except RecognitionException as re: localctx.exception = re @@ -894,20 +958,20 @@ def tuple_expr(self): try: localctx = PyxellParser.ExprTupleContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 112 + self.state = 120 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,11,self._ctx) + _alt = self._interp.adaptivePredict(self._input,12,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 107 + self.state = 115 self.expr(0) - self.state = 108 + self.state = 116 self.match(PyxellParser.T__17) - self.state = 114 + self.state = 122 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,11,self._ctx) + _alt = self._interp.adaptivePredict(self._input,12,self._ctx) - self.state = 115 + self.state = 123 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -1139,7 +1203,7 @@ def expr(self, _p:int=0): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 127 + self.state = 135 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__31, PyxellParser.T__48, PyxellParser.T__49, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: @@ -1147,25 +1211,25 @@ def expr(self, _p:int=0): self._ctx = localctx _prevctx = localctx - self.state = 118 + self.state = 126 self.atom() pass elif token in [PyxellParser.T__29]: localctx = PyxellParser.ExprParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 119 + self.state = 127 self.match(PyxellParser.T__29) - self.state = 120 + self.state = 128 self.tuple_expr() - self.state = 121 + self.state = 129 self.match(PyxellParser.T__30) pass elif token in [PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__34]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 123 + self.state = 131 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__34))) != 0)): @@ -1173,54 +1237,54 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 124 + self.state = 132 self.expr(15) pass elif token in [PyxellParser.T__43]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 125 + self.state = 133 localctx.op = self.match(PyxellParser.T__43) - self.state = 126 + self.state = 134 self.expr(4) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 183 + self.state = 191 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,14,self._ctx) + _alt = self._interp.adaptivePredict(self._input,15,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 181 + self.state = 189 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,13,self._ctx) + la_ = self._interp.adaptivePredict(self._input,14,self._ctx) if la_ == 1: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 129 + self.state = 137 if not self.precpred(self._ctx, 16): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 16)") - self.state = 130 + self.state = 138 localctx.op = self.match(PyxellParser.T__4) - self.state = 131 + self.state = 139 self.expr(16) pass elif la_ == 2: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 132 + self.state = 140 if not self.precpred(self._ctx, 14): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 14)") - self.state = 133 + self.state = 141 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__7))) != 0)): @@ -1228,18 +1292,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 134 + self.state = 142 self.expr(15) pass elif la_ == 3: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 135 + self.state = 143 if not self.precpred(self._ctx, 13): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") - self.state = 136 + self.state = 144 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__8 or _la==PyxellParser.T__9): @@ -1247,18 +1311,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 137 + self.state = 145 self.expr(14) pass elif la_ == 4: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 138 + self.state = 146 if not self.precpred(self._ctx, 12): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 12)") - self.state = 139 + self.state = 147 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__10 or _la==PyxellParser.T__11): @@ -1266,83 +1330,83 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 140 + self.state = 148 self.expr(13) pass elif la_ == 5: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 141 + self.state = 149 if not self.precpred(self._ctx, 11): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") - self.state = 142 + self.state = 150 localctx.op = self.match(PyxellParser.T__12) - self.state = 143 + self.state = 151 self.expr(12) pass elif la_ == 6: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 144 + self.state = 152 if not self.precpred(self._ctx, 10): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") - self.state = 145 + self.state = 153 localctx.op = self.match(PyxellParser.T__13) - self.state = 146 + self.state = 154 self.expr(11) pass elif la_ == 7: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 147 + self.state = 155 if not self.precpred(self._ctx, 9): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") - self.state = 148 + self.state = 156 localctx.op = self.match(PyxellParser.T__14) - self.state = 149 + self.state = 157 self.expr(10) pass elif la_ == 8: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 150 + self.state = 158 if not self.precpred(self._ctx, 8): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") - self.state = 151 + self.state = 159 localctx.dots = self.match(PyxellParser.T__35) - self.state = 152 + self.state = 160 self.expr(9) pass elif la_ == 9: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 153 + self.state = 161 if not self.precpred(self._ctx, 7): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") - self.state = 154 + self.state = 162 localctx.dots = self.match(PyxellParser.T__36) - self.state = 155 + self.state = 163 self.expr(8) pass elif la_ == 10: localctx = PyxellParser.ExprCmpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 156 + self.state = 164 if not self.precpred(self._ctx, 5): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") - self.state = 157 + self.state = 165 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__37) | (1 << PyxellParser.T__38) | (1 << PyxellParser.T__39) | (1 << PyxellParser.T__40) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__42))) != 0)): @@ -1350,96 +1414,96 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 158 + self.state = 166 self.expr(5) pass elif la_ == 11: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 159 + self.state = 167 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 160 + self.state = 168 localctx.op = self.match(PyxellParser.T__44) - self.state = 161 + self.state = 169 self.expr(3) pass elif la_ == 12: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 162 + self.state = 170 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 163 + self.state = 171 localctx.op = self.match(PyxellParser.T__45) - self.state = 164 + self.state = 172 self.expr(2) pass elif la_ == 13: localctx = PyxellParser.ExprCondContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 165 + self.state = 173 if not self.precpred(self._ctx, 1): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") - self.state = 166 + self.state = 174 self.match(PyxellParser.T__46) - self.state = 167 + self.state = 175 self.expr(0) - self.state = 168 + self.state = 176 self.match(PyxellParser.T__47) - self.state = 169 + self.state = 177 self.expr(1) pass elif la_ == 14: localctx = PyxellParser.ExprIndexContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 171 + self.state = 179 if not self.precpred(self._ctx, 18): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 18)") - self.state = 172 + self.state = 180 self.match(PyxellParser.T__31) - self.state = 173 + self.state = 181 self.expr(0) - self.state = 174 + self.state = 182 self.match(PyxellParser.T__32) pass elif la_ == 15: localctx = PyxellParser.ExprAttrContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 176 + self.state = 184 if not self.precpred(self._ctx, 17): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 17)") - self.state = 177 + self.state = 185 self.match(PyxellParser.T__33) - self.state = 178 + self.state = 186 self.match(PyxellParser.ID) pass elif la_ == 16: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 179 + self.state = 187 if not self.precpred(self._ctx, 6): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") - self.state = 180 + self.state = 188 localctx.dots = self.match(PyxellParser.T__36) pass - self.state = 185 + self.state = 193 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,14,self._ctx) + _alt = self._interp.adaptivePredict(self._input,15,self._ctx) except RecognitionException as re: localctx.exception = re @@ -1587,25 +1651,25 @@ def atom(self): self.enterRule(localctx, 16, self.RULE_atom) self._la = 0 # Token type try: - self.state = 205 + self.state = 213 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: localctx = PyxellParser.AtomIntContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 186 + self.state = 194 self.match(PyxellParser.INT) pass elif token in [PyxellParser.FLOAT]: localctx = PyxellParser.AtomFloatContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 187 + self.state = 195 self.match(PyxellParser.FLOAT) pass elif token in [PyxellParser.T__48, PyxellParser.T__49]: localctx = PyxellParser.AtomBoolContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 188 + self.state = 196 _la = self._input.LA(1) if not(_la==PyxellParser.T__48 or _la==PyxellParser.T__49): self._errHandler.recoverInline(self) @@ -1616,48 +1680,48 @@ def atom(self): elif token in [PyxellParser.CHAR]: localctx = PyxellParser.AtomCharContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 189 + self.state = 197 self.match(PyxellParser.CHAR) pass elif token in [PyxellParser.STRING]: localctx = PyxellParser.AtomStringContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 190 + self.state = 198 self.match(PyxellParser.STRING) pass elif token in [PyxellParser.T__31]: localctx = PyxellParser.AtomArrayContext(self, localctx) self.enterOuterAlt(localctx, 6) - self.state = 191 + self.state = 199 self.match(PyxellParser.T__31) - self.state = 197 + self.state = 205 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,15,self._ctx) + _alt = self._interp.adaptivePredict(self._input,16,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 192 + self.state = 200 self.expr(0) - self.state = 193 + self.state = 201 self.match(PyxellParser.T__17) - self.state = 199 + self.state = 207 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,15,self._ctx) + _alt = self._interp.adaptivePredict(self._input,16,self._ctx) - self.state = 201 + self.state = 209 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__31) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__49) | (1 << PyxellParser.INT) | (1 << PyxellParser.FLOAT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): - self.state = 200 + self.state = 208 self.expr(0) - self.state = 203 + self.state = 211 self.match(PyxellParser.T__32) pass elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) self.enterOuterAlt(localctx, 7) - self.state = 204 + self.state = 212 self.match(PyxellParser.ID) pass else: @@ -1672,11 +1736,173 @@ def atom(self): return localctx + class TypContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + + def getRuleIndex(self): + return PyxellParser.RULE_typ + + + def copyFrom(self, ctx:ParserRuleContext): + super().copyFrom(ctx) + + + class TypeArrayContext(TypContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.TypContext + super().__init__(parser) + self.copyFrom(ctx) + + def typ(self): + return self.getTypedRuleContext(PyxellParser.TypContext,0) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeArray" ): + return visitor.visitTypeArray(self) + else: + return visitor.visitChildren(self) + + + class TypeTupleContext(TypContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.TypContext + super().__init__(parser) + self.copyFrom(ctx) + + def typ(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(PyxellParser.TypContext) + else: + return self.getTypedRuleContext(PyxellParser.TypContext,i) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeTuple" ): + return visitor.visitTypeTuple(self) + else: + return visitor.visitChildren(self) + + + class TypePrimitiveContext(TypContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.TypContext + super().__init__(parser) + self.copyFrom(ctx) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypePrimitive" ): + return visitor.visitTypePrimitive(self) + else: + return visitor.visitChildren(self) + + + + def typ(self, _p:int=0): + _parentctx = self._ctx + _parentState = self.state + localctx = PyxellParser.TypContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 18 + self.enterRecursionRule(localctx, 18, self.RULE_typ, _p) + try: + self.enterOuterAlt(localctx, 1) + self.state = 225 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [PyxellParser.T__50]: + localctx = PyxellParser.TypePrimitiveContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + + self.state = 216 + self.match(PyxellParser.T__50) + pass + elif token in [PyxellParser.T__51]: + localctx = PyxellParser.TypePrimitiveContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 217 + self.match(PyxellParser.T__51) + pass + elif token in [PyxellParser.T__52]: + localctx = PyxellParser.TypePrimitiveContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 218 + self.match(PyxellParser.T__52) + pass + elif token in [PyxellParser.T__53]: + localctx = PyxellParser.TypePrimitiveContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 219 + self.match(PyxellParser.T__53) + pass + elif token in [PyxellParser.T__54]: + localctx = PyxellParser.TypePrimitiveContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 220 + self.match(PyxellParser.T__54) + pass + elif token in [PyxellParser.T__31]: + localctx = PyxellParser.TypeArrayContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 221 + self.match(PyxellParser.T__31) + self.state = 222 + self.typ(0) + self.state = 223 + self.match(PyxellParser.T__32) + pass + else: + raise NoViableAltException(self) + + self._ctx.stop = self._input.LT(-1) + self.state = 232 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,20,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + localctx = PyxellParser.TypeTupleContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) + self.state = 227 + if not self.precpred(self._ctx, 1): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 228 + self.match(PyxellParser.T__5) + self.state = 229 + self.typ(1) + self.state = 234 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,20,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.unrollRecursionContexts(_parentctx) + return localctx + + def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): if self._predicates == None: self._predicates = dict() self._predicates[7] = self.expr_sempred + self._predicates[9] = self.typ_sempred pred = self._predicates.get(ruleIndex, None) if pred is None: raise Exception("No predicate with index:" + str(ruleIndex)) @@ -1748,6 +1974,11 @@ def expr_sempred(self, localctx:ExprContext, predIndex:int): return self.precpred(self._ctx, 6) + def typ_sempred(self, localctx:TypContext, predIndex:int): + if predIndex == 16: + return self.precpred(self._ctx, 1) + + diff --git a/src/antlr/PyxellVisitor.py b/src/antlr/PyxellVisitor.py index a572ab30..e3a31722 100644 --- a/src/antlr/PyxellVisitor.py +++ b/src/antlr/PyxellVisitor.py @@ -29,6 +29,11 @@ def visitStmtPrint(self, ctx:PyxellParser.StmtPrintContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#StmtDecl. + def visitStmtDecl(self, ctx:PyxellParser.StmtDeclContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#StmtAssg. def visitStmtAssg(self, ctx:PyxellParser.StmtAssgContext): return self.visitChildren(ctx) @@ -164,5 +169,20 @@ def visitAtomId(self, ctx:PyxellParser.AtomIdContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#TypeArray. + def visitTypeArray(self, ctx:PyxellParser.TypeArrayContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by PyxellParser#TypeTuple. + def visitTypeTuple(self, ctx:PyxellParser.TypeTupleContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by PyxellParser#TypePrimitive. + def visitTypePrimitive(self, ctx:PyxellParser.TypePrimitiveContext): + return self.visitChildren(ctx) + + del PyxellParser \ No newline at end of file diff --git a/src/compiler.py b/src/compiler.py index e482a3d9..6dfbb831 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -80,6 +80,14 @@ def unify(self, ctx, *values): else: self.throw(ctx, err.UnknownType()) + def declare(self, ctx, type, id): + id = str(id) + if id in self.env: + self.throw(ctx, err.RedeclaredIdentifier(id)) + ptr = self.builder.alloca(type) + self.env[id] = ptr + return ptr + def lvalue(self, ctx, expr, declare=None): if isinstance(expr, PyxellParser.ExprAtomContext): atom = expr.atom() @@ -89,7 +97,7 @@ def lvalue(self, ctx, expr, declare=None): if id not in self.env: if declare is None: self.throw(ctx, err.UndeclaredIdentifier(id)) - self.env[id] = self.builder.alloca(declare) + self.declare(ctx, declare, id) return self.env[id] elif isinstance(expr, PyxellParser.ExprIndexContext): return self.index(ctx, *expr.expr()) @@ -484,6 +492,16 @@ def visitStmtPrint(self, ctx): self.print(expr, value) self.write('\n') + def visitStmtDecl(self, ctx): + type = self.visit(ctx.typ()) + id = ctx.ID() + ptr = self.declare(ctx, type, id) + + expr = ctx.tuple_expr() + if expr: + value = self.cast(ctx, self.visit(expr), type) + self.builder.store(value, ptr) + def visitStmtAssg(self, ctx): value = self.visit(ctx.tuple_expr()) @@ -867,3 +885,28 @@ def visitAtomArray(self, ctx): def visitAtomId(self, ctx): return self.builder.load(self.get(ctx, ctx.ID())) + + + ### Types ### + + def visitTypePrimitive(self, ctx): + return { + 'Int': tInt, + 'Float': tFloat, + 'Bool': tBool, + 'Char': tChar, + 'String': tString, + }[ctx.getText()] + + def visitTypeArray(self, ctx): + return tArray(self.visit(ctx.typ())) + + def visitTypeTuple(self, ctx): + types = [] + while True: + types.append(self.visit(ctx.typ(0))) + if not isinstance(ctx.typ(1), PyxellParser.TypeTupleContext): + break + ctx = ctx.typ(1) + types.append(self.visit(ctx.typ(1))) + return tTuple(types) diff --git a/src/errors.py b/src/errors.py index b3e6441c..e805d8b9 100644 --- a/src/errors.py +++ b/src/errors.py @@ -24,6 +24,7 @@ class PyxellError(Exception): NotIterable = lambda t: f"Type `{t.show()}` is not iterable" NotLvalue = lambda: f"Expression cannot be assigned to" NotPrintable = lambda t: f"Variable of type `{t.show()}` cannot be printed" + RedeclaredIdentifier = lambda id: f"Identifier `{id}` is already declared" UndeclaredIdentifier = lambda id: f"Undeclared identifier `{id}`" UnexpectedStatement = lambda s: f"Unexpected `{s}` statement" UnknownType = lambda: f"Cannot settle type of the expression" diff --git a/test/bad/arrays/decl01.err b/test/bad/arrays/decl01.err new file mode 100644 index 00000000..d43f30b6 --- /dev/null +++ b/test/bad/arrays/decl01.err @@ -0,0 +1 @@ +Illegal assignment from `[Char]` to `[Int]`. \ No newline at end of file diff --git a/test/bad/arrays/decl01.px b/test/bad/arrays/decl01.px new file mode 100644 index 00000000..0d3258cf --- /dev/null +++ b/test/bad/arrays/decl01.px @@ -0,0 +1,3 @@ + +[Int] a +a = ['a'] diff --git a/test/bad/tuples/decl01.err b/test/bad/tuples/decl01.err new file mode 100644 index 00000000..53a66839 --- /dev/null +++ b/test/bad/tuples/decl01.err @@ -0,0 +1 @@ +Illegal assignment from `Float*Float` to `Float*Int`. \ No newline at end of file diff --git a/test/bad/tuples/decl01.px b/test/bad/tuples/decl01.px new file mode 100644 index 00000000..ea553922 --- /dev/null +++ b/test/bad/tuples/decl01.px @@ -0,0 +1,2 @@ + +Float*Int t = 0.1, 0.2 diff --git a/test/good/tuples/decl01.out b/test/good/tuples/decl01.out new file mode 100644 index 00000000..017be165 --- /dev/null +++ b/test/good/tuples/decl01.out @@ -0,0 +1 @@ +1 abc diff --git a/test/good/tuples/decl01.px b/test/good/tuples/decl01.px new file mode 100644 index 00000000..99a397e8 --- /dev/null +++ b/test/good/tuples/decl01.px @@ -0,0 +1,3 @@ + +Int*String t = 1, "abc" +print t diff --git a/test/good/tuples/decl02.out b/test/good/tuples/decl02.out new file mode 100644 index 00000000..55007534 --- /dev/null +++ b/test/good/tuples/decl02.out @@ -0,0 +1 @@ +0 x x diff --git a/test/good/tuples/decl02.px b/test/good/tuples/decl02.px new file mode 100644 index 00000000..03f894d8 --- /dev/null +++ b/test/good/tuples/decl02.px @@ -0,0 +1,4 @@ + +String*Char*Float x +x = "x", 'x', 0.0 +print x.c, x.b, x.a[0] From 871f442018866af8da61943d25aa75d88a5aef7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sun, 27 Oct 2019 00:23:53 +0200 Subject: [PATCH 032/100] Require initialization of variables --- src/compiler.py | 33 +++++++++++++++++++++++---------- src/errors.py | 1 + 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/compiler.py b/src/compiler.py index 6dfbb831..3eb32ea4 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -12,6 +12,7 @@ class PyxellCompiler(PyxellVisitor): def __init__(self): self.env = {} + self.initialized = set() self.builder = ll.IRBuilder() self.module = ll.Module() self.builtins = { @@ -32,9 +33,11 @@ def __init__(self): @contextmanager def local(self): - tmp = self.env.copy() + env = self.env.copy() + initialized = self.initialized.copy() yield - self.env = tmp + self.env = env + self.initialized = initialized @contextmanager def block(self): @@ -50,10 +53,12 @@ def throw(self, ctx, msg): raise err(msg, ctx.start.line, ctx.start.column+1) def get(self, ctx, id): - try: - return self.env[str(id)] - except KeyError: + id = str(id) + if id not in self.env: self.throw(ctx, err.UndeclaredIdentifier(id)) + if id not in self.initialized: + self.throw(ctx, err.UninitializedIdentifier(id)) + return self.env[id] def index(self, ctx, *exprs): collection, index = [self.visit(expr) for expr in exprs] @@ -80,15 +85,17 @@ def unify(self, ctx, *values): else: self.throw(ctx, err.UnknownType()) - def declare(self, ctx, type, id): + def declare(self, ctx, type, id, initialize=False): id = str(id) if id in self.env: self.throw(ctx, err.RedeclaredIdentifier(id)) ptr = self.builder.alloca(type) self.env[id] = ptr + if initialize: + self.initialized.add(id) return ptr - def lvalue(self, ctx, expr, declare=None): + def lvalue(self, ctx, expr, declare=None, initialize=False): if isinstance(expr, PyxellParser.ExprAtomContext): atom = expr.atom() if not isinstance(atom, PyxellParser.AtomIdContext): @@ -98,6 +105,8 @@ def lvalue(self, ctx, expr, declare=None): if declare is None: self.throw(ctx, err.UndeclaredIdentifier(id)) self.declare(ctx, declare, id) + if initialize: + self.initialized.add(id) return self.env[id] elif isinstance(expr, PyxellParser.ExprIndexContext): return self.index(ctx, *expr.expr()) @@ -105,7 +114,7 @@ def lvalue(self, ctx, expr, declare=None): self.throw(ctx, err.NotLvalue()) def assign(self, ctx, expr, value): - ptr = self.lvalue(ctx, expr, declare=value.type) + ptr = self.lvalue(ctx, expr, declare=value.type, initialize=True) value = self.cast(ctx, value, ptr.type.pointee) self.builder.store(value, ptr) @@ -495,9 +504,8 @@ def visitStmtPrint(self, ctx): def visitStmtDecl(self, ctx): type = self.visit(ctx.typ()) id = ctx.ID() - ptr = self.declare(ctx, type, id) - expr = ctx.tuple_expr() + ptr = self.declare(ctx, type, id, initialize=bool(expr)) if expr: value = self.cast(ctx, self.visit(expr), type) self.builder.store(value, ptr) @@ -532,6 +540,7 @@ def visitStmtIf(self, ctx): blocks = ctx.block() with self.block() as (label_start, label_end): + initialized_vars = [] def emitIfElse(index): if len(exprs) == index: @@ -550,12 +559,16 @@ def emitIfElse(index): with self.builder._branch_helper(label_if, label_end): with self.local(): self.visit(blocks[index]) + initialized_vars.append(self.initialized) with self.builder._branch_helper(label_else, label_end): emitIfElse(index+1) emitIfElse(0) + if len(blocks) > len(exprs): # there is an `else` statement + self.initialized.update(set.intersection(*initialized_vars)) + def visitStmtWhile(self, ctx): with self.block() as (label_start, label_end): expr = ctx.expr() diff --git a/src/errors.py b/src/errors.py index e805d8b9..5e6f6b4f 100644 --- a/src/errors.py +++ b/src/errors.py @@ -26,6 +26,7 @@ class PyxellError(Exception): NotPrintable = lambda t: f"Variable of type `{t.show()}` cannot be printed" RedeclaredIdentifier = lambda id: f"Identifier `{id}` is already declared" UndeclaredIdentifier = lambda id: f"Undeclared identifier `{id}`" + UninitializedIdentifier = lambda id: f"Identifier `{id}` might not have been initialized" UnexpectedStatement = lambda s: f"Unexpected `{s}` statement" UnknownType = lambda: f"Cannot settle type of the expression" From e7f1ad1c141b8ee44f12869ee928546a52a75b84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sun, 27 Oct 2019 18:09:08 +0100 Subject: [PATCH 033/100] Functions --- src/Pyxell.g4 | 27 +- src/antlr/Pyxell.interp | 18 +- src/antlr/Pyxell.tokens | 98 +-- src/antlr/PyxellLexer.interp | 18 +- src/antlr/PyxellLexer.py | 367 +++++----- src/antlr/PyxellLexer.tokens | 98 +-- src/antlr/PyxellParser.py | 1182 +++++++++++++++++++++------------ src/antlr/PyxellVisitor.py | 29 +- src/compiler.py | 117 +++- src/errors.py | 5 + src/types.py | 17 +- test/bad/functions/type06.err | 2 +- test/bad/functions/type06.px | 4 +- test/bad/functions/type07.err | 2 +- test/bad/functions/type07.px | 4 +- test/bad/functions/type10.err | 2 +- 16 files changed, 1239 insertions(+), 751 deletions(-) diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index 87c10d11..7bfab921 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -16,6 +16,7 @@ simple_stmt | (lvalue '=')* tuple_expr # StmtAssg | expr op=('^' | '*' | '/' | '%' | '+' | '-' | '<<' | '>>' | '&' | '$' | '|') '=' expr # StmtAssgExpr | s=('break' | 'continue') # StmtLoopControl + | 'return' tuple_expr? # StmtReturn ; lvalue @@ -23,16 +24,25 @@ lvalue ; compound_stmt - : 'if' expr block ('elif' expr block)* ('else' block)? # StmtIf - | 'while' expr block # StmtWhile - | 'until' expr block # StmtUntil - | 'for' tuple_expr 'in' tuple_expr ('step' step=tuple_expr)? block # StmtFor + : 'if' expr do_block ('elif' expr do_block)* ('else' do_block)? # StmtIf + | 'while' expr do_block # StmtWhile + | 'until' expr do_block # StmtUntil + | 'for' tuple_expr 'in' tuple_expr ('step' step=tuple_expr)? do_block # StmtFor + | 'func' ID '(' (arg ',')* arg? ')' ret=typ? def_block # StmtFunc ; -block +arg + : typ ID + ; + +do_block : 'do' '{' stmt+ '}' ; +def_block + : 'def' '{' stmt+ '}' + ; + tuple_expr : (expr ',')* expr # ExprTuple ; @@ -42,6 +52,7 @@ expr | '(' tuple_expr ')' # ExprParentheses | expr '[' expr ']' # ExprIndex | expr '.' ID # ExprAttr + | expr '(' (expr ',')* expr? ')' # ExprCall | expr op='^' expr # ExprBinaryOp | op=('+' | '-' | '~') expr # ExprUnaryOp | expr op=('*' | '/' | '%') expr # ExprBinaryOp @@ -50,8 +61,7 @@ expr | expr op='&' expr # ExprBinaryOp | expr op='$' expr # ExprBinaryOp | expr op='|' expr # ExprBinaryOp - | expr dots='..' expr # ExprRange - | expr dots='...' expr # ExprRange + | expr dots=('..' | '...') expr # ExprRange | expr dots='...' # ExprRange | expr op=('==' | '!=' | '<' | '<=' | '>' | '>=') expr # ExprCmp | op='not' expr # ExprUnaryOp @@ -71,7 +81,8 @@ atom ; typ - : 'Int' # TypePrimitive + : 'Void' # TypePrimitive + | 'Int' # TypePrimitive | 'Float' # TypePrimitive | 'Bool' # TypePrimitive | 'Char' # TypePrimitive diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index f61c84d2..348f14da 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -17,6 +17,7 @@ null '|' 'break' 'continue' +'return' ',' 'if' 'elif' @@ -26,11 +27,13 @@ null 'for' 'in' 'step' +'func' +'(' +')' 'do' '{' '}' -'(' -')' +'def' '[' ']' '.' @@ -50,6 +53,7 @@ null ':' 'true' 'false' +'Void' 'Int' 'Float' 'Bool' @@ -120,6 +124,10 @@ null null null null +null +null +null +null INT FLOAT CHAR @@ -134,7 +142,9 @@ stmt simple_stmt lvalue compound_stmt -block +arg +do_block +def_block tuple_expr expr atom @@ -142,4 +152,4 @@ typ atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 64, 238, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 3, 2, 7, 2, 24, 10, 2, 12, 2, 14, 2, 27, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 35, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 40, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 46, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 51, 10, 4, 12, 4, 14, 4, 54, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 63, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 68, 10, 5, 12, 5, 14, 5, 71, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 80, 10, 6, 12, 6, 14, 6, 83, 11, 6, 3, 6, 3, 6, 5, 6, 87, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 103, 10, 6, 3, 6, 3, 6, 5, 6, 107, 10, 6, 3, 7, 3, 7, 3, 7, 6, 7, 112, 10, 7, 13, 7, 14, 7, 113, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 7, 8, 121, 10, 8, 12, 8, 14, 8, 124, 11, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 138, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 192, 10, 9, 12, 9, 14, 9, 195, 11, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 206, 10, 10, 12, 10, 14, 10, 209, 11, 10, 3, 10, 5, 10, 212, 10, 10, 3, 10, 3, 10, 5, 10, 216, 10, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 228, 10, 11, 3, 11, 3, 11, 3, 11, 7, 11, 233, 10, 11, 12, 11, 14, 11, 236, 11, 11, 3, 11, 2, 4, 16, 20, 12, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 2, 10, 3, 2, 7, 17, 3, 2, 18, 19, 4, 2, 11, 12, 37, 37, 3, 2, 8, 10, 3, 2, 11, 12, 3, 2, 13, 14, 3, 2, 40, 45, 3, 2, 51, 52, 2, 279, 2, 25, 3, 2, 2, 2, 4, 34, 3, 2, 2, 2, 6, 62, 3, 2, 2, 2, 8, 64, 3, 2, 2, 2, 10, 106, 3, 2, 2, 2, 12, 108, 3, 2, 2, 2, 14, 122, 3, 2, 2, 2, 16, 137, 3, 2, 2, 2, 18, 215, 3, 2, 2, 2, 20, 227, 3, 2, 2, 2, 22, 24, 5, 4, 3, 2, 23, 22, 3, 2, 2, 2, 24, 27, 3, 2, 2, 2, 25, 23, 3, 2, 2, 2, 25, 26, 3, 2, 2, 2, 26, 28, 3, 2, 2, 2, 27, 25, 3, 2, 2, 2, 28, 29, 7, 2, 2, 3, 29, 3, 3, 2, 2, 2, 30, 31, 5, 6, 4, 2, 31, 32, 7, 3, 2, 2, 32, 35, 3, 2, 2, 2, 33, 35, 5, 10, 6, 2, 34, 30, 3, 2, 2, 2, 34, 33, 3, 2, 2, 2, 35, 5, 3, 2, 2, 2, 36, 63, 7, 4, 2, 2, 37, 39, 7, 5, 2, 2, 38, 40, 5, 14, 8, 2, 39, 38, 3, 2, 2, 2, 39, 40, 3, 2, 2, 2, 40, 63, 3, 2, 2, 2, 41, 42, 5, 20, 11, 2, 42, 45, 7, 62, 2, 2, 43, 44, 7, 6, 2, 2, 44, 46, 5, 14, 8, 2, 45, 43, 3, 2, 2, 2, 45, 46, 3, 2, 2, 2, 46, 63, 3, 2, 2, 2, 47, 48, 5, 8, 5, 2, 48, 49, 7, 6, 2, 2, 49, 51, 3, 2, 2, 2, 50, 47, 3, 2, 2, 2, 51, 54, 3, 2, 2, 2, 52, 50, 3, 2, 2, 2, 52, 53, 3, 2, 2, 2, 53, 55, 3, 2, 2, 2, 54, 52, 3, 2, 2, 2, 55, 63, 5, 14, 8, 2, 56, 57, 5, 16, 9, 2, 57, 58, 9, 2, 2, 2, 58, 59, 7, 6, 2, 2, 59, 60, 5, 16, 9, 2, 60, 63, 3, 2, 2, 2, 61, 63, 9, 3, 2, 2, 62, 36, 3, 2, 2, 2, 62, 37, 3, 2, 2, 2, 62, 41, 3, 2, 2, 2, 62, 52, 3, 2, 2, 2, 62, 56, 3, 2, 2, 2, 62, 61, 3, 2, 2, 2, 63, 7, 3, 2, 2, 2, 64, 69, 5, 16, 9, 2, 65, 66, 7, 20, 2, 2, 66, 68, 5, 16, 9, 2, 67, 65, 3, 2, 2, 2, 68, 71, 3, 2, 2, 2, 69, 67, 3, 2, 2, 2, 69, 70, 3, 2, 2, 2, 70, 9, 3, 2, 2, 2, 71, 69, 3, 2, 2, 2, 72, 73, 7, 21, 2, 2, 73, 74, 5, 16, 9, 2, 74, 81, 5, 12, 7, 2, 75, 76, 7, 22, 2, 2, 76, 77, 5, 16, 9, 2, 77, 78, 5, 12, 7, 2, 78, 80, 3, 2, 2, 2, 79, 75, 3, 2, 2, 2, 80, 83, 3, 2, 2, 2, 81, 79, 3, 2, 2, 2, 81, 82, 3, 2, 2, 2, 82, 86, 3, 2, 2, 2, 83, 81, 3, 2, 2, 2, 84, 85, 7, 23, 2, 2, 85, 87, 5, 12, 7, 2, 86, 84, 3, 2, 2, 2, 86, 87, 3, 2, 2, 2, 87, 107, 3, 2, 2, 2, 88, 89, 7, 24, 2, 2, 89, 90, 5, 16, 9, 2, 90, 91, 5, 12, 7, 2, 91, 107, 3, 2, 2, 2, 92, 93, 7, 25, 2, 2, 93, 94, 5, 16, 9, 2, 94, 95, 5, 12, 7, 2, 95, 107, 3, 2, 2, 2, 96, 97, 7, 26, 2, 2, 97, 98, 5, 14, 8, 2, 98, 99, 7, 27, 2, 2, 99, 102, 5, 14, 8, 2, 100, 101, 7, 28, 2, 2, 101, 103, 5, 14, 8, 2, 102, 100, 3, 2, 2, 2, 102, 103, 3, 2, 2, 2, 103, 104, 3, 2, 2, 2, 104, 105, 5, 12, 7, 2, 105, 107, 3, 2, 2, 2, 106, 72, 3, 2, 2, 2, 106, 88, 3, 2, 2, 2, 106, 92, 3, 2, 2, 2, 106, 96, 3, 2, 2, 2, 107, 11, 3, 2, 2, 2, 108, 109, 7, 29, 2, 2, 109, 111, 7, 30, 2, 2, 110, 112, 5, 4, 3, 2, 111, 110, 3, 2, 2, 2, 112, 113, 3, 2, 2, 2, 113, 111, 3, 2, 2, 2, 113, 114, 3, 2, 2, 2, 114, 115, 3, 2, 2, 2, 115, 116, 7, 31, 2, 2, 116, 13, 3, 2, 2, 2, 117, 118, 5, 16, 9, 2, 118, 119, 7, 20, 2, 2, 119, 121, 3, 2, 2, 2, 120, 117, 3, 2, 2, 2, 121, 124, 3, 2, 2, 2, 122, 120, 3, 2, 2, 2, 122, 123, 3, 2, 2, 2, 123, 125, 3, 2, 2, 2, 124, 122, 3, 2, 2, 2, 125, 126, 5, 16, 9, 2, 126, 15, 3, 2, 2, 2, 127, 128, 8, 9, 1, 2, 128, 138, 5, 18, 10, 2, 129, 130, 7, 32, 2, 2, 130, 131, 5, 14, 8, 2, 131, 132, 7, 33, 2, 2, 132, 138, 3, 2, 2, 2, 133, 134, 9, 4, 2, 2, 134, 138, 5, 16, 9, 17, 135, 136, 7, 46, 2, 2, 136, 138, 5, 16, 9, 6, 137, 127, 3, 2, 2, 2, 137, 129, 3, 2, 2, 2, 137, 133, 3, 2, 2, 2, 137, 135, 3, 2, 2, 2, 138, 193, 3, 2, 2, 2, 139, 140, 12, 18, 2, 2, 140, 141, 7, 7, 2, 2, 141, 192, 5, 16, 9, 18, 142, 143, 12, 16, 2, 2, 143, 144, 9, 5, 2, 2, 144, 192, 5, 16, 9, 17, 145, 146, 12, 15, 2, 2, 146, 147, 9, 6, 2, 2, 147, 192, 5, 16, 9, 16, 148, 149, 12, 14, 2, 2, 149, 150, 9, 7, 2, 2, 150, 192, 5, 16, 9, 15, 151, 152, 12, 13, 2, 2, 152, 153, 7, 15, 2, 2, 153, 192, 5, 16, 9, 14, 154, 155, 12, 12, 2, 2, 155, 156, 7, 16, 2, 2, 156, 192, 5, 16, 9, 13, 157, 158, 12, 11, 2, 2, 158, 159, 7, 17, 2, 2, 159, 192, 5, 16, 9, 12, 160, 161, 12, 10, 2, 2, 161, 162, 7, 38, 2, 2, 162, 192, 5, 16, 9, 11, 163, 164, 12, 9, 2, 2, 164, 165, 7, 39, 2, 2, 165, 192, 5, 16, 9, 10, 166, 167, 12, 7, 2, 2, 167, 168, 9, 8, 2, 2, 168, 192, 5, 16, 9, 7, 169, 170, 12, 5, 2, 2, 170, 171, 7, 47, 2, 2, 171, 192, 5, 16, 9, 5, 172, 173, 12, 4, 2, 2, 173, 174, 7, 48, 2, 2, 174, 192, 5, 16, 9, 4, 175, 176, 12, 3, 2, 2, 176, 177, 7, 49, 2, 2, 177, 178, 5, 16, 9, 2, 178, 179, 7, 50, 2, 2, 179, 180, 5, 16, 9, 3, 180, 192, 3, 2, 2, 2, 181, 182, 12, 20, 2, 2, 182, 183, 7, 34, 2, 2, 183, 184, 5, 16, 9, 2, 184, 185, 7, 35, 2, 2, 185, 192, 3, 2, 2, 2, 186, 187, 12, 19, 2, 2, 187, 188, 7, 36, 2, 2, 188, 192, 7, 62, 2, 2, 189, 190, 12, 8, 2, 2, 190, 192, 7, 39, 2, 2, 191, 139, 3, 2, 2, 2, 191, 142, 3, 2, 2, 2, 191, 145, 3, 2, 2, 2, 191, 148, 3, 2, 2, 2, 191, 151, 3, 2, 2, 2, 191, 154, 3, 2, 2, 2, 191, 157, 3, 2, 2, 2, 191, 160, 3, 2, 2, 2, 191, 163, 3, 2, 2, 2, 191, 166, 3, 2, 2, 2, 191, 169, 3, 2, 2, 2, 191, 172, 3, 2, 2, 2, 191, 175, 3, 2, 2, 2, 191, 181, 3, 2, 2, 2, 191, 186, 3, 2, 2, 2, 191, 189, 3, 2, 2, 2, 192, 195, 3, 2, 2, 2, 193, 191, 3, 2, 2, 2, 193, 194, 3, 2, 2, 2, 194, 17, 3, 2, 2, 2, 195, 193, 3, 2, 2, 2, 196, 216, 7, 58, 2, 2, 197, 216, 7, 59, 2, 2, 198, 216, 9, 9, 2, 2, 199, 216, 7, 60, 2, 2, 200, 216, 7, 61, 2, 2, 201, 207, 7, 34, 2, 2, 202, 203, 5, 16, 9, 2, 203, 204, 7, 20, 2, 2, 204, 206, 3, 2, 2, 2, 205, 202, 3, 2, 2, 2, 206, 209, 3, 2, 2, 2, 207, 205, 3, 2, 2, 2, 207, 208, 3, 2, 2, 2, 208, 211, 3, 2, 2, 2, 209, 207, 3, 2, 2, 2, 210, 212, 5, 16, 9, 2, 211, 210, 3, 2, 2, 2, 211, 212, 3, 2, 2, 2, 212, 213, 3, 2, 2, 2, 213, 216, 7, 35, 2, 2, 214, 216, 7, 62, 2, 2, 215, 196, 3, 2, 2, 2, 215, 197, 3, 2, 2, 2, 215, 198, 3, 2, 2, 2, 215, 199, 3, 2, 2, 2, 215, 200, 3, 2, 2, 2, 215, 201, 3, 2, 2, 2, 215, 214, 3, 2, 2, 2, 216, 19, 3, 2, 2, 2, 217, 218, 8, 11, 1, 2, 218, 228, 7, 53, 2, 2, 219, 228, 7, 54, 2, 2, 220, 228, 7, 55, 2, 2, 221, 228, 7, 56, 2, 2, 222, 228, 7, 57, 2, 2, 223, 224, 7, 34, 2, 2, 224, 225, 5, 20, 11, 2, 225, 226, 7, 35, 2, 2, 226, 228, 3, 2, 2, 2, 227, 217, 3, 2, 2, 2, 227, 219, 3, 2, 2, 2, 227, 220, 3, 2, 2, 2, 227, 221, 3, 2, 2, 2, 227, 222, 3, 2, 2, 2, 227, 223, 3, 2, 2, 2, 228, 234, 3, 2, 2, 2, 229, 230, 12, 3, 2, 2, 230, 231, 7, 8, 2, 2, 231, 233, 5, 20, 11, 3, 232, 229, 3, 2, 2, 2, 233, 236, 3, 2, 2, 2, 234, 232, 3, 2, 2, 2, 234, 235, 3, 2, 2, 2, 235, 21, 3, 2, 2, 2, 236, 234, 3, 2, 2, 2, 23, 25, 34, 39, 45, 52, 62, 69, 81, 86, 102, 106, 113, 122, 137, 191, 193, 207, 211, 215, 227, 234] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 68, 289, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 3, 2, 7, 2, 28, 10, 2, 12, 2, 14, 2, 31, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 39, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 44, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 50, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 55, 10, 4, 12, 4, 14, 4, 58, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 69, 10, 4, 5, 4, 71, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 76, 10, 5, 12, 5, 14, 5, 79, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 88, 10, 6, 12, 6, 14, 6, 91, 11, 6, 3, 6, 3, 6, 5, 6, 95, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 111, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 121, 10, 6, 12, 6, 14, 6, 124, 11, 6, 3, 6, 5, 6, 127, 10, 6, 3, 6, 3, 6, 5, 6, 131, 10, 6, 3, 6, 5, 6, 134, 10, 6, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 6, 8, 142, 10, 8, 13, 8, 14, 8, 143, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 6, 9, 151, 10, 9, 13, 9, 14, 9, 152, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 7, 10, 160, 10, 10, 12, 10, 14, 10, 163, 11, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 177, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 231, 10, 11, 12, 11, 14, 11, 234, 11, 11, 3, 11, 5, 11, 237, 10, 11, 3, 11, 3, 11, 3, 11, 7, 11, 242, 10, 11, 12, 11, 14, 11, 245, 11, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 7, 12, 256, 10, 12, 12, 12, 14, 12, 259, 11, 12, 3, 12, 5, 12, 262, 10, 12, 3, 12, 3, 12, 5, 12, 266, 10, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 279, 10, 13, 3, 13, 3, 13, 3, 13, 7, 13, 284, 10, 13, 12, 13, 14, 13, 287, 11, 13, 3, 13, 2, 4, 20, 24, 14, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 2, 11, 3, 2, 7, 17, 3, 2, 18, 19, 4, 2, 11, 12, 40, 40, 3, 2, 8, 10, 3, 2, 11, 12, 3, 2, 13, 14, 3, 2, 41, 42, 3, 2, 43, 48, 3, 2, 54, 55, 2, 338, 2, 29, 3, 2, 2, 2, 4, 38, 3, 2, 2, 2, 6, 70, 3, 2, 2, 2, 8, 72, 3, 2, 2, 2, 10, 133, 3, 2, 2, 2, 12, 135, 3, 2, 2, 2, 14, 138, 3, 2, 2, 2, 16, 147, 3, 2, 2, 2, 18, 161, 3, 2, 2, 2, 20, 176, 3, 2, 2, 2, 22, 265, 3, 2, 2, 2, 24, 278, 3, 2, 2, 2, 26, 28, 5, 4, 3, 2, 27, 26, 3, 2, 2, 2, 28, 31, 3, 2, 2, 2, 29, 27, 3, 2, 2, 2, 29, 30, 3, 2, 2, 2, 30, 32, 3, 2, 2, 2, 31, 29, 3, 2, 2, 2, 32, 33, 7, 2, 2, 3, 33, 3, 3, 2, 2, 2, 34, 35, 5, 6, 4, 2, 35, 36, 7, 3, 2, 2, 36, 39, 3, 2, 2, 2, 37, 39, 5, 10, 6, 2, 38, 34, 3, 2, 2, 2, 38, 37, 3, 2, 2, 2, 39, 5, 3, 2, 2, 2, 40, 71, 7, 4, 2, 2, 41, 43, 7, 5, 2, 2, 42, 44, 5, 18, 10, 2, 43, 42, 3, 2, 2, 2, 43, 44, 3, 2, 2, 2, 44, 71, 3, 2, 2, 2, 45, 46, 5, 24, 13, 2, 46, 49, 7, 66, 2, 2, 47, 48, 7, 6, 2, 2, 48, 50, 5, 18, 10, 2, 49, 47, 3, 2, 2, 2, 49, 50, 3, 2, 2, 2, 50, 71, 3, 2, 2, 2, 51, 52, 5, 8, 5, 2, 52, 53, 7, 6, 2, 2, 53, 55, 3, 2, 2, 2, 54, 51, 3, 2, 2, 2, 55, 58, 3, 2, 2, 2, 56, 54, 3, 2, 2, 2, 56, 57, 3, 2, 2, 2, 57, 59, 3, 2, 2, 2, 58, 56, 3, 2, 2, 2, 59, 71, 5, 18, 10, 2, 60, 61, 5, 20, 11, 2, 61, 62, 9, 2, 2, 2, 62, 63, 7, 6, 2, 2, 63, 64, 5, 20, 11, 2, 64, 71, 3, 2, 2, 2, 65, 71, 9, 3, 2, 2, 66, 68, 7, 20, 2, 2, 67, 69, 5, 18, 10, 2, 68, 67, 3, 2, 2, 2, 68, 69, 3, 2, 2, 2, 69, 71, 3, 2, 2, 2, 70, 40, 3, 2, 2, 2, 70, 41, 3, 2, 2, 2, 70, 45, 3, 2, 2, 2, 70, 56, 3, 2, 2, 2, 70, 60, 3, 2, 2, 2, 70, 65, 3, 2, 2, 2, 70, 66, 3, 2, 2, 2, 71, 7, 3, 2, 2, 2, 72, 77, 5, 20, 11, 2, 73, 74, 7, 21, 2, 2, 74, 76, 5, 20, 11, 2, 75, 73, 3, 2, 2, 2, 76, 79, 3, 2, 2, 2, 77, 75, 3, 2, 2, 2, 77, 78, 3, 2, 2, 2, 78, 9, 3, 2, 2, 2, 79, 77, 3, 2, 2, 2, 80, 81, 7, 22, 2, 2, 81, 82, 5, 20, 11, 2, 82, 89, 5, 14, 8, 2, 83, 84, 7, 23, 2, 2, 84, 85, 5, 20, 11, 2, 85, 86, 5, 14, 8, 2, 86, 88, 3, 2, 2, 2, 87, 83, 3, 2, 2, 2, 88, 91, 3, 2, 2, 2, 89, 87, 3, 2, 2, 2, 89, 90, 3, 2, 2, 2, 90, 94, 3, 2, 2, 2, 91, 89, 3, 2, 2, 2, 92, 93, 7, 24, 2, 2, 93, 95, 5, 14, 8, 2, 94, 92, 3, 2, 2, 2, 94, 95, 3, 2, 2, 2, 95, 134, 3, 2, 2, 2, 96, 97, 7, 25, 2, 2, 97, 98, 5, 20, 11, 2, 98, 99, 5, 14, 8, 2, 99, 134, 3, 2, 2, 2, 100, 101, 7, 26, 2, 2, 101, 102, 5, 20, 11, 2, 102, 103, 5, 14, 8, 2, 103, 134, 3, 2, 2, 2, 104, 105, 7, 27, 2, 2, 105, 106, 5, 18, 10, 2, 106, 107, 7, 28, 2, 2, 107, 110, 5, 18, 10, 2, 108, 109, 7, 29, 2, 2, 109, 111, 5, 18, 10, 2, 110, 108, 3, 2, 2, 2, 110, 111, 3, 2, 2, 2, 111, 112, 3, 2, 2, 2, 112, 113, 5, 14, 8, 2, 113, 134, 3, 2, 2, 2, 114, 115, 7, 30, 2, 2, 115, 116, 7, 66, 2, 2, 116, 122, 7, 31, 2, 2, 117, 118, 5, 12, 7, 2, 118, 119, 7, 21, 2, 2, 119, 121, 3, 2, 2, 2, 120, 117, 3, 2, 2, 2, 121, 124, 3, 2, 2, 2, 122, 120, 3, 2, 2, 2, 122, 123, 3, 2, 2, 2, 123, 126, 3, 2, 2, 2, 124, 122, 3, 2, 2, 2, 125, 127, 5, 12, 7, 2, 126, 125, 3, 2, 2, 2, 126, 127, 3, 2, 2, 2, 127, 128, 3, 2, 2, 2, 128, 130, 7, 32, 2, 2, 129, 131, 5, 24, 13, 2, 130, 129, 3, 2, 2, 2, 130, 131, 3, 2, 2, 2, 131, 132, 3, 2, 2, 2, 132, 134, 5, 16, 9, 2, 133, 80, 3, 2, 2, 2, 133, 96, 3, 2, 2, 2, 133, 100, 3, 2, 2, 2, 133, 104, 3, 2, 2, 2, 133, 114, 3, 2, 2, 2, 134, 11, 3, 2, 2, 2, 135, 136, 5, 24, 13, 2, 136, 137, 7, 66, 2, 2, 137, 13, 3, 2, 2, 2, 138, 139, 7, 33, 2, 2, 139, 141, 7, 34, 2, 2, 140, 142, 5, 4, 3, 2, 141, 140, 3, 2, 2, 2, 142, 143, 3, 2, 2, 2, 143, 141, 3, 2, 2, 2, 143, 144, 3, 2, 2, 2, 144, 145, 3, 2, 2, 2, 145, 146, 7, 35, 2, 2, 146, 15, 3, 2, 2, 2, 147, 148, 7, 36, 2, 2, 148, 150, 7, 34, 2, 2, 149, 151, 5, 4, 3, 2, 150, 149, 3, 2, 2, 2, 151, 152, 3, 2, 2, 2, 152, 150, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 154, 3, 2, 2, 2, 154, 155, 7, 35, 2, 2, 155, 17, 3, 2, 2, 2, 156, 157, 5, 20, 11, 2, 157, 158, 7, 21, 2, 2, 158, 160, 3, 2, 2, 2, 159, 156, 3, 2, 2, 2, 160, 163, 3, 2, 2, 2, 161, 159, 3, 2, 2, 2, 161, 162, 3, 2, 2, 2, 162, 164, 3, 2, 2, 2, 163, 161, 3, 2, 2, 2, 164, 165, 5, 20, 11, 2, 165, 19, 3, 2, 2, 2, 166, 167, 8, 11, 1, 2, 167, 177, 5, 22, 12, 2, 168, 169, 7, 31, 2, 2, 169, 170, 5, 18, 10, 2, 170, 171, 7, 32, 2, 2, 171, 177, 3, 2, 2, 2, 172, 173, 9, 4, 2, 2, 173, 177, 5, 20, 11, 16, 174, 175, 7, 49, 2, 2, 175, 177, 5, 20, 11, 6, 176, 166, 3, 2, 2, 2, 176, 168, 3, 2, 2, 2, 176, 172, 3, 2, 2, 2, 176, 174, 3, 2, 2, 2, 177, 243, 3, 2, 2, 2, 178, 179, 12, 17, 2, 2, 179, 180, 7, 7, 2, 2, 180, 242, 5, 20, 11, 17, 181, 182, 12, 15, 2, 2, 182, 183, 9, 5, 2, 2, 183, 242, 5, 20, 11, 16, 184, 185, 12, 14, 2, 2, 185, 186, 9, 6, 2, 2, 186, 242, 5, 20, 11, 15, 187, 188, 12, 13, 2, 2, 188, 189, 9, 7, 2, 2, 189, 242, 5, 20, 11, 14, 190, 191, 12, 12, 2, 2, 191, 192, 7, 15, 2, 2, 192, 242, 5, 20, 11, 13, 193, 194, 12, 11, 2, 2, 194, 195, 7, 16, 2, 2, 195, 242, 5, 20, 11, 12, 196, 197, 12, 10, 2, 2, 197, 198, 7, 17, 2, 2, 198, 242, 5, 20, 11, 11, 199, 200, 12, 9, 2, 2, 200, 201, 9, 8, 2, 2, 201, 242, 5, 20, 11, 10, 202, 203, 12, 7, 2, 2, 203, 204, 9, 9, 2, 2, 204, 242, 5, 20, 11, 7, 205, 206, 12, 5, 2, 2, 206, 207, 7, 50, 2, 2, 207, 242, 5, 20, 11, 5, 208, 209, 12, 4, 2, 2, 209, 210, 7, 51, 2, 2, 210, 242, 5, 20, 11, 4, 211, 212, 12, 3, 2, 2, 212, 213, 7, 52, 2, 2, 213, 214, 5, 20, 11, 2, 214, 215, 7, 53, 2, 2, 215, 216, 5, 20, 11, 3, 216, 242, 3, 2, 2, 2, 217, 218, 12, 20, 2, 2, 218, 219, 7, 37, 2, 2, 219, 220, 5, 20, 11, 2, 220, 221, 7, 38, 2, 2, 221, 242, 3, 2, 2, 2, 222, 223, 12, 19, 2, 2, 223, 224, 7, 39, 2, 2, 224, 242, 7, 66, 2, 2, 225, 226, 12, 18, 2, 2, 226, 232, 7, 31, 2, 2, 227, 228, 5, 20, 11, 2, 228, 229, 7, 21, 2, 2, 229, 231, 3, 2, 2, 2, 230, 227, 3, 2, 2, 2, 231, 234, 3, 2, 2, 2, 232, 230, 3, 2, 2, 2, 232, 233, 3, 2, 2, 2, 233, 236, 3, 2, 2, 2, 234, 232, 3, 2, 2, 2, 235, 237, 5, 20, 11, 2, 236, 235, 3, 2, 2, 2, 236, 237, 3, 2, 2, 2, 237, 238, 3, 2, 2, 2, 238, 242, 7, 32, 2, 2, 239, 240, 12, 8, 2, 2, 240, 242, 7, 42, 2, 2, 241, 178, 3, 2, 2, 2, 241, 181, 3, 2, 2, 2, 241, 184, 3, 2, 2, 2, 241, 187, 3, 2, 2, 2, 241, 190, 3, 2, 2, 2, 241, 193, 3, 2, 2, 2, 241, 196, 3, 2, 2, 2, 241, 199, 3, 2, 2, 2, 241, 202, 3, 2, 2, 2, 241, 205, 3, 2, 2, 2, 241, 208, 3, 2, 2, 2, 241, 211, 3, 2, 2, 2, 241, 217, 3, 2, 2, 2, 241, 222, 3, 2, 2, 2, 241, 225, 3, 2, 2, 2, 241, 239, 3, 2, 2, 2, 242, 245, 3, 2, 2, 2, 243, 241, 3, 2, 2, 2, 243, 244, 3, 2, 2, 2, 244, 21, 3, 2, 2, 2, 245, 243, 3, 2, 2, 2, 246, 266, 7, 62, 2, 2, 247, 266, 7, 63, 2, 2, 248, 266, 9, 10, 2, 2, 249, 266, 7, 64, 2, 2, 250, 266, 7, 65, 2, 2, 251, 257, 7, 37, 2, 2, 252, 253, 5, 20, 11, 2, 253, 254, 7, 21, 2, 2, 254, 256, 3, 2, 2, 2, 255, 252, 3, 2, 2, 2, 256, 259, 3, 2, 2, 2, 257, 255, 3, 2, 2, 2, 257, 258, 3, 2, 2, 2, 258, 261, 3, 2, 2, 2, 259, 257, 3, 2, 2, 2, 260, 262, 5, 20, 11, 2, 261, 260, 3, 2, 2, 2, 261, 262, 3, 2, 2, 2, 262, 263, 3, 2, 2, 2, 263, 266, 7, 38, 2, 2, 264, 266, 7, 66, 2, 2, 265, 246, 3, 2, 2, 2, 265, 247, 3, 2, 2, 2, 265, 248, 3, 2, 2, 2, 265, 249, 3, 2, 2, 2, 265, 250, 3, 2, 2, 2, 265, 251, 3, 2, 2, 2, 265, 264, 3, 2, 2, 2, 266, 23, 3, 2, 2, 2, 267, 268, 8, 13, 1, 2, 268, 279, 7, 56, 2, 2, 269, 279, 7, 57, 2, 2, 270, 279, 7, 58, 2, 2, 271, 279, 7, 59, 2, 2, 272, 279, 7, 60, 2, 2, 273, 279, 7, 61, 2, 2, 274, 275, 7, 37, 2, 2, 275, 276, 5, 24, 13, 2, 276, 277, 7, 38, 2, 2, 277, 279, 3, 2, 2, 2, 278, 267, 3, 2, 2, 2, 278, 269, 3, 2, 2, 2, 278, 270, 3, 2, 2, 2, 278, 271, 3, 2, 2, 2, 278, 272, 3, 2, 2, 2, 278, 273, 3, 2, 2, 2, 278, 274, 3, 2, 2, 2, 279, 285, 3, 2, 2, 2, 280, 281, 12, 3, 2, 2, 281, 282, 7, 8, 2, 2, 282, 284, 5, 24, 13, 3, 283, 280, 3, 2, 2, 2, 284, 287, 3, 2, 2, 2, 285, 283, 3, 2, 2, 2, 285, 286, 3, 2, 2, 2, 286, 25, 3, 2, 2, 2, 287, 285, 3, 2, 2, 2, 30, 29, 38, 43, 49, 56, 68, 70, 77, 89, 94, 110, 122, 126, 130, 133, 143, 152, 161, 176, 232, 236, 241, 243, 257, 261, 265, 278, 285] \ No newline at end of file diff --git a/src/antlr/Pyxell.tokens b/src/antlr/Pyxell.tokens index df59214a..262e49a2 100644 --- a/src/antlr/Pyxell.tokens +++ b/src/antlr/Pyxell.tokens @@ -53,13 +53,17 @@ T__51=52 T__52=53 T__53=54 T__54=55 -INT=56 -FLOAT=57 -CHAR=58 -STRING=59 -ID=60 -WS=61 -ERR=62 +T__55=56 +T__56=57 +T__57=58 +T__58=59 +INT=60 +FLOAT=61 +CHAR=62 +STRING=63 +ID=64 +WS=65 +ERR=66 ';'=1 'skip'=2 'print'=3 @@ -77,41 +81,45 @@ ERR=62 '|'=15 'break'=16 'continue'=17 -','=18 -'if'=19 -'elif'=20 -'else'=21 -'while'=22 -'until'=23 -'for'=24 -'in'=25 -'step'=26 -'do'=27 -'{'=28 -'}'=29 -'('=30 -')'=31 -'['=32 -']'=33 -'.'=34 -'~'=35 -'..'=36 -'...'=37 -'=='=38 -'!='=39 -'<'=40 -'<='=41 -'>'=42 -'>='=43 -'not'=44 -'and'=45 -'or'=46 -'?'=47 -':'=48 -'true'=49 -'false'=50 -'Int'=51 -'Float'=52 -'Bool'=53 -'Char'=54 -'String'=55 +'return'=18 +','=19 +'if'=20 +'elif'=21 +'else'=22 +'while'=23 +'until'=24 +'for'=25 +'in'=26 +'step'=27 +'func'=28 +'('=29 +')'=30 +'do'=31 +'{'=32 +'}'=33 +'def'=34 +'['=35 +']'=36 +'.'=37 +'~'=38 +'..'=39 +'...'=40 +'=='=41 +'!='=42 +'<'=43 +'<='=44 +'>'=45 +'>='=46 +'not'=47 +'and'=48 +'or'=49 +'?'=50 +':'=51 +'true'=52 +'false'=53 +'Void'=54 +'Int'=55 +'Float'=56 +'Bool'=57 +'Char'=58 +'String'=59 diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp index f0611a39..cdbcf29a 100644 --- a/src/antlr/PyxellLexer.interp +++ b/src/antlr/PyxellLexer.interp @@ -17,6 +17,7 @@ null '|' 'break' 'continue' +'return' ',' 'if' 'elif' @@ -26,11 +27,13 @@ null 'for' 'in' 'step' +'func' +'(' +')' 'do' '{' '}' -'(' -')' +'def' '[' ']' '.' @@ -50,6 +53,7 @@ null ':' 'true' 'false' +'Void' 'Int' 'Float' 'Bool' @@ -120,6 +124,10 @@ null null null null +null +null +null +null INT FLOAT CHAR @@ -184,6 +192,10 @@ T__51 T__52 T__53 T__54 +T__55 +T__56 +T__57 +T__58 INT FLOAT CHAR @@ -203,4 +215,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 64, 395, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 6, 57, 323, 10, 57, 13, 57, 14, 57, 324, 3, 58, 6, 58, 328, 10, 58, 13, 58, 14, 58, 329, 3, 58, 3, 58, 6, 58, 334, 10, 58, 13, 58, 14, 58, 335, 3, 58, 3, 58, 5, 58, 340, 10, 58, 3, 58, 6, 58, 343, 10, 58, 13, 58, 14, 58, 344, 5, 58, 347, 10, 58, 3, 59, 3, 59, 3, 59, 3, 59, 7, 59, 353, 10, 59, 12, 59, 14, 59, 356, 11, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 7, 60, 364, 10, 60, 12, 60, 14, 60, 367, 11, 60, 3, 60, 3, 60, 3, 61, 3, 61, 7, 61, 373, 10, 61, 12, 61, 14, 61, 376, 11, 61, 3, 62, 3, 62, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 5, 64, 385, 10, 64, 3, 65, 6, 65, 388, 10, 65, 13, 65, 14, 65, 389, 3, 65, 3, 65, 3, 66, 3, 66, 2, 2, 67, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 2, 125, 2, 127, 2, 129, 63, 131, 64, 3, 2, 10, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 405, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 3, 133, 3, 2, 2, 2, 5, 135, 3, 2, 2, 2, 7, 140, 3, 2, 2, 2, 9, 146, 3, 2, 2, 2, 11, 148, 3, 2, 2, 2, 13, 150, 3, 2, 2, 2, 15, 152, 3, 2, 2, 2, 17, 154, 3, 2, 2, 2, 19, 156, 3, 2, 2, 2, 21, 158, 3, 2, 2, 2, 23, 160, 3, 2, 2, 2, 25, 163, 3, 2, 2, 2, 27, 166, 3, 2, 2, 2, 29, 168, 3, 2, 2, 2, 31, 170, 3, 2, 2, 2, 33, 172, 3, 2, 2, 2, 35, 178, 3, 2, 2, 2, 37, 187, 3, 2, 2, 2, 39, 189, 3, 2, 2, 2, 41, 192, 3, 2, 2, 2, 43, 197, 3, 2, 2, 2, 45, 202, 3, 2, 2, 2, 47, 208, 3, 2, 2, 2, 49, 214, 3, 2, 2, 2, 51, 218, 3, 2, 2, 2, 53, 221, 3, 2, 2, 2, 55, 226, 3, 2, 2, 2, 57, 229, 3, 2, 2, 2, 59, 231, 3, 2, 2, 2, 61, 233, 3, 2, 2, 2, 63, 235, 3, 2, 2, 2, 65, 237, 3, 2, 2, 2, 67, 239, 3, 2, 2, 2, 69, 241, 3, 2, 2, 2, 71, 243, 3, 2, 2, 2, 73, 245, 3, 2, 2, 2, 75, 248, 3, 2, 2, 2, 77, 252, 3, 2, 2, 2, 79, 255, 3, 2, 2, 2, 81, 258, 3, 2, 2, 2, 83, 260, 3, 2, 2, 2, 85, 263, 3, 2, 2, 2, 87, 265, 3, 2, 2, 2, 89, 268, 3, 2, 2, 2, 91, 272, 3, 2, 2, 2, 93, 276, 3, 2, 2, 2, 95, 279, 3, 2, 2, 2, 97, 281, 3, 2, 2, 2, 99, 283, 3, 2, 2, 2, 101, 288, 3, 2, 2, 2, 103, 294, 3, 2, 2, 2, 105, 298, 3, 2, 2, 2, 107, 304, 3, 2, 2, 2, 109, 309, 3, 2, 2, 2, 111, 314, 3, 2, 2, 2, 113, 322, 3, 2, 2, 2, 115, 327, 3, 2, 2, 2, 117, 348, 3, 2, 2, 2, 119, 359, 3, 2, 2, 2, 121, 370, 3, 2, 2, 2, 123, 377, 3, 2, 2, 2, 125, 379, 3, 2, 2, 2, 127, 384, 3, 2, 2, 2, 129, 387, 3, 2, 2, 2, 131, 393, 3, 2, 2, 2, 133, 134, 7, 61, 2, 2, 134, 4, 3, 2, 2, 2, 135, 136, 7, 117, 2, 2, 136, 137, 7, 109, 2, 2, 137, 138, 7, 107, 2, 2, 138, 139, 7, 114, 2, 2, 139, 6, 3, 2, 2, 2, 140, 141, 7, 114, 2, 2, 141, 142, 7, 116, 2, 2, 142, 143, 7, 107, 2, 2, 143, 144, 7, 112, 2, 2, 144, 145, 7, 118, 2, 2, 145, 8, 3, 2, 2, 2, 146, 147, 7, 63, 2, 2, 147, 10, 3, 2, 2, 2, 148, 149, 7, 96, 2, 2, 149, 12, 3, 2, 2, 2, 150, 151, 7, 44, 2, 2, 151, 14, 3, 2, 2, 2, 152, 153, 7, 49, 2, 2, 153, 16, 3, 2, 2, 2, 154, 155, 7, 39, 2, 2, 155, 18, 3, 2, 2, 2, 156, 157, 7, 45, 2, 2, 157, 20, 3, 2, 2, 2, 158, 159, 7, 47, 2, 2, 159, 22, 3, 2, 2, 2, 160, 161, 7, 62, 2, 2, 161, 162, 7, 62, 2, 2, 162, 24, 3, 2, 2, 2, 163, 164, 7, 64, 2, 2, 164, 165, 7, 64, 2, 2, 165, 26, 3, 2, 2, 2, 166, 167, 7, 40, 2, 2, 167, 28, 3, 2, 2, 2, 168, 169, 7, 38, 2, 2, 169, 30, 3, 2, 2, 2, 170, 171, 7, 126, 2, 2, 171, 32, 3, 2, 2, 2, 172, 173, 7, 100, 2, 2, 173, 174, 7, 116, 2, 2, 174, 175, 7, 103, 2, 2, 175, 176, 7, 99, 2, 2, 176, 177, 7, 109, 2, 2, 177, 34, 3, 2, 2, 2, 178, 179, 7, 101, 2, 2, 179, 180, 7, 113, 2, 2, 180, 181, 7, 112, 2, 2, 181, 182, 7, 118, 2, 2, 182, 183, 7, 107, 2, 2, 183, 184, 7, 112, 2, 2, 184, 185, 7, 119, 2, 2, 185, 186, 7, 103, 2, 2, 186, 36, 3, 2, 2, 2, 187, 188, 7, 46, 2, 2, 188, 38, 3, 2, 2, 2, 189, 190, 7, 107, 2, 2, 190, 191, 7, 104, 2, 2, 191, 40, 3, 2, 2, 2, 192, 193, 7, 103, 2, 2, 193, 194, 7, 110, 2, 2, 194, 195, 7, 107, 2, 2, 195, 196, 7, 104, 2, 2, 196, 42, 3, 2, 2, 2, 197, 198, 7, 103, 2, 2, 198, 199, 7, 110, 2, 2, 199, 200, 7, 117, 2, 2, 200, 201, 7, 103, 2, 2, 201, 44, 3, 2, 2, 2, 202, 203, 7, 121, 2, 2, 203, 204, 7, 106, 2, 2, 204, 205, 7, 107, 2, 2, 205, 206, 7, 110, 2, 2, 206, 207, 7, 103, 2, 2, 207, 46, 3, 2, 2, 2, 208, 209, 7, 119, 2, 2, 209, 210, 7, 112, 2, 2, 210, 211, 7, 118, 2, 2, 211, 212, 7, 107, 2, 2, 212, 213, 7, 110, 2, 2, 213, 48, 3, 2, 2, 2, 214, 215, 7, 104, 2, 2, 215, 216, 7, 113, 2, 2, 216, 217, 7, 116, 2, 2, 217, 50, 3, 2, 2, 2, 218, 219, 7, 107, 2, 2, 219, 220, 7, 112, 2, 2, 220, 52, 3, 2, 2, 2, 221, 222, 7, 117, 2, 2, 222, 223, 7, 118, 2, 2, 223, 224, 7, 103, 2, 2, 224, 225, 7, 114, 2, 2, 225, 54, 3, 2, 2, 2, 226, 227, 7, 102, 2, 2, 227, 228, 7, 113, 2, 2, 228, 56, 3, 2, 2, 2, 229, 230, 7, 125, 2, 2, 230, 58, 3, 2, 2, 2, 231, 232, 7, 127, 2, 2, 232, 60, 3, 2, 2, 2, 233, 234, 7, 42, 2, 2, 234, 62, 3, 2, 2, 2, 235, 236, 7, 43, 2, 2, 236, 64, 3, 2, 2, 2, 237, 238, 7, 93, 2, 2, 238, 66, 3, 2, 2, 2, 239, 240, 7, 95, 2, 2, 240, 68, 3, 2, 2, 2, 241, 242, 7, 48, 2, 2, 242, 70, 3, 2, 2, 2, 243, 244, 7, 128, 2, 2, 244, 72, 3, 2, 2, 2, 245, 246, 7, 48, 2, 2, 246, 247, 7, 48, 2, 2, 247, 74, 3, 2, 2, 2, 248, 249, 7, 48, 2, 2, 249, 250, 7, 48, 2, 2, 250, 251, 7, 48, 2, 2, 251, 76, 3, 2, 2, 2, 252, 253, 7, 63, 2, 2, 253, 254, 7, 63, 2, 2, 254, 78, 3, 2, 2, 2, 255, 256, 7, 35, 2, 2, 256, 257, 7, 63, 2, 2, 257, 80, 3, 2, 2, 2, 258, 259, 7, 62, 2, 2, 259, 82, 3, 2, 2, 2, 260, 261, 7, 62, 2, 2, 261, 262, 7, 63, 2, 2, 262, 84, 3, 2, 2, 2, 263, 264, 7, 64, 2, 2, 264, 86, 3, 2, 2, 2, 265, 266, 7, 64, 2, 2, 266, 267, 7, 63, 2, 2, 267, 88, 3, 2, 2, 2, 268, 269, 7, 112, 2, 2, 269, 270, 7, 113, 2, 2, 270, 271, 7, 118, 2, 2, 271, 90, 3, 2, 2, 2, 272, 273, 7, 99, 2, 2, 273, 274, 7, 112, 2, 2, 274, 275, 7, 102, 2, 2, 275, 92, 3, 2, 2, 2, 276, 277, 7, 113, 2, 2, 277, 278, 7, 116, 2, 2, 278, 94, 3, 2, 2, 2, 279, 280, 7, 65, 2, 2, 280, 96, 3, 2, 2, 2, 281, 282, 7, 60, 2, 2, 282, 98, 3, 2, 2, 2, 283, 284, 7, 118, 2, 2, 284, 285, 7, 116, 2, 2, 285, 286, 7, 119, 2, 2, 286, 287, 7, 103, 2, 2, 287, 100, 3, 2, 2, 2, 288, 289, 7, 104, 2, 2, 289, 290, 7, 99, 2, 2, 290, 291, 7, 110, 2, 2, 291, 292, 7, 117, 2, 2, 292, 293, 7, 103, 2, 2, 293, 102, 3, 2, 2, 2, 294, 295, 7, 75, 2, 2, 295, 296, 7, 112, 2, 2, 296, 297, 7, 118, 2, 2, 297, 104, 3, 2, 2, 2, 298, 299, 7, 72, 2, 2, 299, 300, 7, 110, 2, 2, 300, 301, 7, 113, 2, 2, 301, 302, 7, 99, 2, 2, 302, 303, 7, 118, 2, 2, 303, 106, 3, 2, 2, 2, 304, 305, 7, 68, 2, 2, 305, 306, 7, 113, 2, 2, 306, 307, 7, 113, 2, 2, 307, 308, 7, 110, 2, 2, 308, 108, 3, 2, 2, 2, 309, 310, 7, 69, 2, 2, 310, 311, 7, 106, 2, 2, 311, 312, 7, 99, 2, 2, 312, 313, 7, 116, 2, 2, 313, 110, 3, 2, 2, 2, 314, 315, 7, 85, 2, 2, 315, 316, 7, 118, 2, 2, 316, 317, 7, 116, 2, 2, 317, 318, 7, 107, 2, 2, 318, 319, 7, 112, 2, 2, 319, 320, 7, 105, 2, 2, 320, 112, 3, 2, 2, 2, 321, 323, 5, 123, 62, 2, 322, 321, 3, 2, 2, 2, 323, 324, 3, 2, 2, 2, 324, 322, 3, 2, 2, 2, 324, 325, 3, 2, 2, 2, 325, 114, 3, 2, 2, 2, 326, 328, 5, 123, 62, 2, 327, 326, 3, 2, 2, 2, 328, 329, 3, 2, 2, 2, 329, 327, 3, 2, 2, 2, 329, 330, 3, 2, 2, 2, 330, 331, 3, 2, 2, 2, 331, 333, 7, 48, 2, 2, 332, 334, 5, 123, 62, 2, 333, 332, 3, 2, 2, 2, 334, 335, 3, 2, 2, 2, 335, 333, 3, 2, 2, 2, 335, 336, 3, 2, 2, 2, 336, 346, 3, 2, 2, 2, 337, 339, 7, 103, 2, 2, 338, 340, 7, 47, 2, 2, 339, 338, 3, 2, 2, 2, 339, 340, 3, 2, 2, 2, 340, 342, 3, 2, 2, 2, 341, 343, 5, 123, 62, 2, 342, 341, 3, 2, 2, 2, 343, 344, 3, 2, 2, 2, 344, 342, 3, 2, 2, 2, 344, 345, 3, 2, 2, 2, 345, 347, 3, 2, 2, 2, 346, 337, 3, 2, 2, 2, 346, 347, 3, 2, 2, 2, 347, 116, 3, 2, 2, 2, 348, 354, 7, 41, 2, 2, 349, 353, 10, 2, 2, 2, 350, 351, 7, 94, 2, 2, 351, 353, 9, 3, 2, 2, 352, 349, 3, 2, 2, 2, 352, 350, 3, 2, 2, 2, 353, 356, 3, 2, 2, 2, 354, 352, 3, 2, 2, 2, 354, 355, 3, 2, 2, 2, 355, 357, 3, 2, 2, 2, 356, 354, 3, 2, 2, 2, 357, 358, 7, 41, 2, 2, 358, 118, 3, 2, 2, 2, 359, 365, 7, 36, 2, 2, 360, 364, 10, 4, 2, 2, 361, 362, 7, 94, 2, 2, 362, 364, 9, 5, 2, 2, 363, 360, 3, 2, 2, 2, 363, 361, 3, 2, 2, 2, 364, 367, 3, 2, 2, 2, 365, 363, 3, 2, 2, 2, 365, 366, 3, 2, 2, 2, 366, 368, 3, 2, 2, 2, 367, 365, 3, 2, 2, 2, 368, 369, 7, 36, 2, 2, 369, 120, 3, 2, 2, 2, 370, 374, 5, 125, 63, 2, 371, 373, 5, 127, 64, 2, 372, 371, 3, 2, 2, 2, 373, 376, 3, 2, 2, 2, 374, 372, 3, 2, 2, 2, 374, 375, 3, 2, 2, 2, 375, 122, 3, 2, 2, 2, 376, 374, 3, 2, 2, 2, 377, 378, 9, 6, 2, 2, 378, 124, 3, 2, 2, 2, 379, 380, 9, 7, 2, 2, 380, 126, 3, 2, 2, 2, 381, 385, 5, 125, 63, 2, 382, 385, 5, 123, 62, 2, 383, 385, 9, 8, 2, 2, 384, 381, 3, 2, 2, 2, 384, 382, 3, 2, 2, 2, 384, 383, 3, 2, 2, 2, 385, 128, 3, 2, 2, 2, 386, 388, 9, 9, 2, 2, 387, 386, 3, 2, 2, 2, 388, 389, 3, 2, 2, 2, 389, 387, 3, 2, 2, 2, 389, 390, 3, 2, 2, 2, 390, 391, 3, 2, 2, 2, 391, 392, 8, 65, 2, 2, 392, 130, 3, 2, 2, 2, 393, 394, 11, 2, 2, 2, 394, 132, 3, 2, 2, 2, 16, 2, 324, 329, 335, 339, 344, 346, 352, 354, 363, 365, 374, 384, 389, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 68, 424, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 6, 61, 352, 10, 61, 13, 61, 14, 61, 353, 3, 62, 6, 62, 357, 10, 62, 13, 62, 14, 62, 358, 3, 62, 3, 62, 6, 62, 363, 10, 62, 13, 62, 14, 62, 364, 3, 62, 3, 62, 5, 62, 369, 10, 62, 3, 62, 6, 62, 372, 10, 62, 13, 62, 14, 62, 373, 5, 62, 376, 10, 62, 3, 63, 3, 63, 3, 63, 3, 63, 7, 63, 382, 10, 63, 12, 63, 14, 63, 385, 11, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 7, 64, 393, 10, 64, 12, 64, 14, 64, 396, 11, 64, 3, 64, 3, 64, 3, 65, 3, 65, 7, 65, 402, 10, 65, 12, 65, 14, 65, 405, 11, 65, 3, 66, 3, 66, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 5, 68, 414, 10, 68, 3, 69, 6, 69, 417, 10, 69, 13, 69, 14, 69, 418, 3, 69, 3, 69, 3, 70, 3, 70, 2, 2, 71, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 2, 133, 2, 135, 2, 137, 67, 139, 68, 3, 2, 10, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 434, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 3, 141, 3, 2, 2, 2, 5, 143, 3, 2, 2, 2, 7, 148, 3, 2, 2, 2, 9, 154, 3, 2, 2, 2, 11, 156, 3, 2, 2, 2, 13, 158, 3, 2, 2, 2, 15, 160, 3, 2, 2, 2, 17, 162, 3, 2, 2, 2, 19, 164, 3, 2, 2, 2, 21, 166, 3, 2, 2, 2, 23, 168, 3, 2, 2, 2, 25, 171, 3, 2, 2, 2, 27, 174, 3, 2, 2, 2, 29, 176, 3, 2, 2, 2, 31, 178, 3, 2, 2, 2, 33, 180, 3, 2, 2, 2, 35, 186, 3, 2, 2, 2, 37, 195, 3, 2, 2, 2, 39, 202, 3, 2, 2, 2, 41, 204, 3, 2, 2, 2, 43, 207, 3, 2, 2, 2, 45, 212, 3, 2, 2, 2, 47, 217, 3, 2, 2, 2, 49, 223, 3, 2, 2, 2, 51, 229, 3, 2, 2, 2, 53, 233, 3, 2, 2, 2, 55, 236, 3, 2, 2, 2, 57, 241, 3, 2, 2, 2, 59, 246, 3, 2, 2, 2, 61, 248, 3, 2, 2, 2, 63, 250, 3, 2, 2, 2, 65, 253, 3, 2, 2, 2, 67, 255, 3, 2, 2, 2, 69, 257, 3, 2, 2, 2, 71, 261, 3, 2, 2, 2, 73, 263, 3, 2, 2, 2, 75, 265, 3, 2, 2, 2, 77, 267, 3, 2, 2, 2, 79, 269, 3, 2, 2, 2, 81, 272, 3, 2, 2, 2, 83, 276, 3, 2, 2, 2, 85, 279, 3, 2, 2, 2, 87, 282, 3, 2, 2, 2, 89, 284, 3, 2, 2, 2, 91, 287, 3, 2, 2, 2, 93, 289, 3, 2, 2, 2, 95, 292, 3, 2, 2, 2, 97, 296, 3, 2, 2, 2, 99, 300, 3, 2, 2, 2, 101, 303, 3, 2, 2, 2, 103, 305, 3, 2, 2, 2, 105, 307, 3, 2, 2, 2, 107, 312, 3, 2, 2, 2, 109, 318, 3, 2, 2, 2, 111, 323, 3, 2, 2, 2, 113, 327, 3, 2, 2, 2, 115, 333, 3, 2, 2, 2, 117, 338, 3, 2, 2, 2, 119, 343, 3, 2, 2, 2, 121, 351, 3, 2, 2, 2, 123, 356, 3, 2, 2, 2, 125, 377, 3, 2, 2, 2, 127, 388, 3, 2, 2, 2, 129, 399, 3, 2, 2, 2, 131, 406, 3, 2, 2, 2, 133, 408, 3, 2, 2, 2, 135, 413, 3, 2, 2, 2, 137, 416, 3, 2, 2, 2, 139, 422, 3, 2, 2, 2, 141, 142, 7, 61, 2, 2, 142, 4, 3, 2, 2, 2, 143, 144, 7, 117, 2, 2, 144, 145, 7, 109, 2, 2, 145, 146, 7, 107, 2, 2, 146, 147, 7, 114, 2, 2, 147, 6, 3, 2, 2, 2, 148, 149, 7, 114, 2, 2, 149, 150, 7, 116, 2, 2, 150, 151, 7, 107, 2, 2, 151, 152, 7, 112, 2, 2, 152, 153, 7, 118, 2, 2, 153, 8, 3, 2, 2, 2, 154, 155, 7, 63, 2, 2, 155, 10, 3, 2, 2, 2, 156, 157, 7, 96, 2, 2, 157, 12, 3, 2, 2, 2, 158, 159, 7, 44, 2, 2, 159, 14, 3, 2, 2, 2, 160, 161, 7, 49, 2, 2, 161, 16, 3, 2, 2, 2, 162, 163, 7, 39, 2, 2, 163, 18, 3, 2, 2, 2, 164, 165, 7, 45, 2, 2, 165, 20, 3, 2, 2, 2, 166, 167, 7, 47, 2, 2, 167, 22, 3, 2, 2, 2, 168, 169, 7, 62, 2, 2, 169, 170, 7, 62, 2, 2, 170, 24, 3, 2, 2, 2, 171, 172, 7, 64, 2, 2, 172, 173, 7, 64, 2, 2, 173, 26, 3, 2, 2, 2, 174, 175, 7, 40, 2, 2, 175, 28, 3, 2, 2, 2, 176, 177, 7, 38, 2, 2, 177, 30, 3, 2, 2, 2, 178, 179, 7, 126, 2, 2, 179, 32, 3, 2, 2, 2, 180, 181, 7, 100, 2, 2, 181, 182, 7, 116, 2, 2, 182, 183, 7, 103, 2, 2, 183, 184, 7, 99, 2, 2, 184, 185, 7, 109, 2, 2, 185, 34, 3, 2, 2, 2, 186, 187, 7, 101, 2, 2, 187, 188, 7, 113, 2, 2, 188, 189, 7, 112, 2, 2, 189, 190, 7, 118, 2, 2, 190, 191, 7, 107, 2, 2, 191, 192, 7, 112, 2, 2, 192, 193, 7, 119, 2, 2, 193, 194, 7, 103, 2, 2, 194, 36, 3, 2, 2, 2, 195, 196, 7, 116, 2, 2, 196, 197, 7, 103, 2, 2, 197, 198, 7, 118, 2, 2, 198, 199, 7, 119, 2, 2, 199, 200, 7, 116, 2, 2, 200, 201, 7, 112, 2, 2, 201, 38, 3, 2, 2, 2, 202, 203, 7, 46, 2, 2, 203, 40, 3, 2, 2, 2, 204, 205, 7, 107, 2, 2, 205, 206, 7, 104, 2, 2, 206, 42, 3, 2, 2, 2, 207, 208, 7, 103, 2, 2, 208, 209, 7, 110, 2, 2, 209, 210, 7, 107, 2, 2, 210, 211, 7, 104, 2, 2, 211, 44, 3, 2, 2, 2, 212, 213, 7, 103, 2, 2, 213, 214, 7, 110, 2, 2, 214, 215, 7, 117, 2, 2, 215, 216, 7, 103, 2, 2, 216, 46, 3, 2, 2, 2, 217, 218, 7, 121, 2, 2, 218, 219, 7, 106, 2, 2, 219, 220, 7, 107, 2, 2, 220, 221, 7, 110, 2, 2, 221, 222, 7, 103, 2, 2, 222, 48, 3, 2, 2, 2, 223, 224, 7, 119, 2, 2, 224, 225, 7, 112, 2, 2, 225, 226, 7, 118, 2, 2, 226, 227, 7, 107, 2, 2, 227, 228, 7, 110, 2, 2, 228, 50, 3, 2, 2, 2, 229, 230, 7, 104, 2, 2, 230, 231, 7, 113, 2, 2, 231, 232, 7, 116, 2, 2, 232, 52, 3, 2, 2, 2, 233, 234, 7, 107, 2, 2, 234, 235, 7, 112, 2, 2, 235, 54, 3, 2, 2, 2, 236, 237, 7, 117, 2, 2, 237, 238, 7, 118, 2, 2, 238, 239, 7, 103, 2, 2, 239, 240, 7, 114, 2, 2, 240, 56, 3, 2, 2, 2, 241, 242, 7, 104, 2, 2, 242, 243, 7, 119, 2, 2, 243, 244, 7, 112, 2, 2, 244, 245, 7, 101, 2, 2, 245, 58, 3, 2, 2, 2, 246, 247, 7, 42, 2, 2, 247, 60, 3, 2, 2, 2, 248, 249, 7, 43, 2, 2, 249, 62, 3, 2, 2, 2, 250, 251, 7, 102, 2, 2, 251, 252, 7, 113, 2, 2, 252, 64, 3, 2, 2, 2, 253, 254, 7, 125, 2, 2, 254, 66, 3, 2, 2, 2, 255, 256, 7, 127, 2, 2, 256, 68, 3, 2, 2, 2, 257, 258, 7, 102, 2, 2, 258, 259, 7, 103, 2, 2, 259, 260, 7, 104, 2, 2, 260, 70, 3, 2, 2, 2, 261, 262, 7, 93, 2, 2, 262, 72, 3, 2, 2, 2, 263, 264, 7, 95, 2, 2, 264, 74, 3, 2, 2, 2, 265, 266, 7, 48, 2, 2, 266, 76, 3, 2, 2, 2, 267, 268, 7, 128, 2, 2, 268, 78, 3, 2, 2, 2, 269, 270, 7, 48, 2, 2, 270, 271, 7, 48, 2, 2, 271, 80, 3, 2, 2, 2, 272, 273, 7, 48, 2, 2, 273, 274, 7, 48, 2, 2, 274, 275, 7, 48, 2, 2, 275, 82, 3, 2, 2, 2, 276, 277, 7, 63, 2, 2, 277, 278, 7, 63, 2, 2, 278, 84, 3, 2, 2, 2, 279, 280, 7, 35, 2, 2, 280, 281, 7, 63, 2, 2, 281, 86, 3, 2, 2, 2, 282, 283, 7, 62, 2, 2, 283, 88, 3, 2, 2, 2, 284, 285, 7, 62, 2, 2, 285, 286, 7, 63, 2, 2, 286, 90, 3, 2, 2, 2, 287, 288, 7, 64, 2, 2, 288, 92, 3, 2, 2, 2, 289, 290, 7, 64, 2, 2, 290, 291, 7, 63, 2, 2, 291, 94, 3, 2, 2, 2, 292, 293, 7, 112, 2, 2, 293, 294, 7, 113, 2, 2, 294, 295, 7, 118, 2, 2, 295, 96, 3, 2, 2, 2, 296, 297, 7, 99, 2, 2, 297, 298, 7, 112, 2, 2, 298, 299, 7, 102, 2, 2, 299, 98, 3, 2, 2, 2, 300, 301, 7, 113, 2, 2, 301, 302, 7, 116, 2, 2, 302, 100, 3, 2, 2, 2, 303, 304, 7, 65, 2, 2, 304, 102, 3, 2, 2, 2, 305, 306, 7, 60, 2, 2, 306, 104, 3, 2, 2, 2, 307, 308, 7, 118, 2, 2, 308, 309, 7, 116, 2, 2, 309, 310, 7, 119, 2, 2, 310, 311, 7, 103, 2, 2, 311, 106, 3, 2, 2, 2, 312, 313, 7, 104, 2, 2, 313, 314, 7, 99, 2, 2, 314, 315, 7, 110, 2, 2, 315, 316, 7, 117, 2, 2, 316, 317, 7, 103, 2, 2, 317, 108, 3, 2, 2, 2, 318, 319, 7, 88, 2, 2, 319, 320, 7, 113, 2, 2, 320, 321, 7, 107, 2, 2, 321, 322, 7, 102, 2, 2, 322, 110, 3, 2, 2, 2, 323, 324, 7, 75, 2, 2, 324, 325, 7, 112, 2, 2, 325, 326, 7, 118, 2, 2, 326, 112, 3, 2, 2, 2, 327, 328, 7, 72, 2, 2, 328, 329, 7, 110, 2, 2, 329, 330, 7, 113, 2, 2, 330, 331, 7, 99, 2, 2, 331, 332, 7, 118, 2, 2, 332, 114, 3, 2, 2, 2, 333, 334, 7, 68, 2, 2, 334, 335, 7, 113, 2, 2, 335, 336, 7, 113, 2, 2, 336, 337, 7, 110, 2, 2, 337, 116, 3, 2, 2, 2, 338, 339, 7, 69, 2, 2, 339, 340, 7, 106, 2, 2, 340, 341, 7, 99, 2, 2, 341, 342, 7, 116, 2, 2, 342, 118, 3, 2, 2, 2, 343, 344, 7, 85, 2, 2, 344, 345, 7, 118, 2, 2, 345, 346, 7, 116, 2, 2, 346, 347, 7, 107, 2, 2, 347, 348, 7, 112, 2, 2, 348, 349, 7, 105, 2, 2, 349, 120, 3, 2, 2, 2, 350, 352, 5, 131, 66, 2, 351, 350, 3, 2, 2, 2, 352, 353, 3, 2, 2, 2, 353, 351, 3, 2, 2, 2, 353, 354, 3, 2, 2, 2, 354, 122, 3, 2, 2, 2, 355, 357, 5, 131, 66, 2, 356, 355, 3, 2, 2, 2, 357, 358, 3, 2, 2, 2, 358, 356, 3, 2, 2, 2, 358, 359, 3, 2, 2, 2, 359, 360, 3, 2, 2, 2, 360, 362, 7, 48, 2, 2, 361, 363, 5, 131, 66, 2, 362, 361, 3, 2, 2, 2, 363, 364, 3, 2, 2, 2, 364, 362, 3, 2, 2, 2, 364, 365, 3, 2, 2, 2, 365, 375, 3, 2, 2, 2, 366, 368, 7, 103, 2, 2, 367, 369, 7, 47, 2, 2, 368, 367, 3, 2, 2, 2, 368, 369, 3, 2, 2, 2, 369, 371, 3, 2, 2, 2, 370, 372, 5, 131, 66, 2, 371, 370, 3, 2, 2, 2, 372, 373, 3, 2, 2, 2, 373, 371, 3, 2, 2, 2, 373, 374, 3, 2, 2, 2, 374, 376, 3, 2, 2, 2, 375, 366, 3, 2, 2, 2, 375, 376, 3, 2, 2, 2, 376, 124, 3, 2, 2, 2, 377, 383, 7, 41, 2, 2, 378, 382, 10, 2, 2, 2, 379, 380, 7, 94, 2, 2, 380, 382, 9, 3, 2, 2, 381, 378, 3, 2, 2, 2, 381, 379, 3, 2, 2, 2, 382, 385, 3, 2, 2, 2, 383, 381, 3, 2, 2, 2, 383, 384, 3, 2, 2, 2, 384, 386, 3, 2, 2, 2, 385, 383, 3, 2, 2, 2, 386, 387, 7, 41, 2, 2, 387, 126, 3, 2, 2, 2, 388, 394, 7, 36, 2, 2, 389, 393, 10, 4, 2, 2, 390, 391, 7, 94, 2, 2, 391, 393, 9, 5, 2, 2, 392, 389, 3, 2, 2, 2, 392, 390, 3, 2, 2, 2, 393, 396, 3, 2, 2, 2, 394, 392, 3, 2, 2, 2, 394, 395, 3, 2, 2, 2, 395, 397, 3, 2, 2, 2, 396, 394, 3, 2, 2, 2, 397, 398, 7, 36, 2, 2, 398, 128, 3, 2, 2, 2, 399, 403, 5, 133, 67, 2, 400, 402, 5, 135, 68, 2, 401, 400, 3, 2, 2, 2, 402, 405, 3, 2, 2, 2, 403, 401, 3, 2, 2, 2, 403, 404, 3, 2, 2, 2, 404, 130, 3, 2, 2, 2, 405, 403, 3, 2, 2, 2, 406, 407, 9, 6, 2, 2, 407, 132, 3, 2, 2, 2, 408, 409, 9, 7, 2, 2, 409, 134, 3, 2, 2, 2, 410, 414, 5, 133, 67, 2, 411, 414, 5, 131, 66, 2, 412, 414, 9, 8, 2, 2, 413, 410, 3, 2, 2, 2, 413, 411, 3, 2, 2, 2, 413, 412, 3, 2, 2, 2, 414, 136, 3, 2, 2, 2, 415, 417, 9, 9, 2, 2, 416, 415, 3, 2, 2, 2, 417, 418, 3, 2, 2, 2, 418, 416, 3, 2, 2, 2, 418, 419, 3, 2, 2, 2, 419, 420, 3, 2, 2, 2, 420, 421, 8, 69, 2, 2, 421, 138, 3, 2, 2, 2, 422, 423, 11, 2, 2, 2, 423, 140, 3, 2, 2, 2, 16, 2, 353, 358, 364, 368, 373, 375, 381, 383, 392, 394, 403, 413, 418, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py index 4f0025ad..2ce9e02f 100644 --- a/src/antlr/PyxellLexer.py +++ b/src/antlr/PyxellLexer.py @@ -8,8 +8,8 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2@") - buf.write("\u018b\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2D") + buf.write("\u01a8\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") @@ -18,163 +18,176 @@ def serializedATN(): buf.write("\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4,\t,\4-\t-\4.") buf.write("\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64") buf.write("\t\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:") - buf.write("\4;\t;\4<\t<\4=\t=\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\3\2\3") - buf.write("\2\3\3\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\4\3\5\3\5") - buf.write("\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\n\3\n\3\13\3\13\3\f") - buf.write("\3\f\3\f\3\r\3\r\3\r\3\16\3\16\3\17\3\17\3\20\3\20\3\21") - buf.write("\3\21\3\21\3\21\3\21\3\21\3\22\3\22\3\22\3\22\3\22\3\22") - buf.write("\3\22\3\22\3\22\3\23\3\23\3\24\3\24\3\24\3\25\3\25\3\25") - buf.write("\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27") - buf.write("\3\27\3\27\3\30\3\30\3\30\3\30\3\30\3\30\3\31\3\31\3\31") - buf.write("\3\31\3\32\3\32\3\32\3\33\3\33\3\33\3\33\3\33\3\34\3\34") - buf.write("\3\34\3\35\3\35\3\36\3\36\3\37\3\37\3 \3 \3!\3!\3\"\3") - buf.write("\"\3#\3#\3$\3$\3%\3%\3%\3&\3&\3&\3&\3\'\3\'\3\'\3(\3(") - buf.write("\3(\3)\3)\3*\3*\3*\3+\3+\3,\3,\3,\3-\3-\3-\3-\3.\3.\3") - buf.write(".\3.\3/\3/\3/\3\60\3\60\3\61\3\61\3\62\3\62\3\62\3\62") - buf.write("\3\62\3\63\3\63\3\63\3\63\3\63\3\63\3\64\3\64\3\64\3\64") - buf.write("\3\65\3\65\3\65\3\65\3\65\3\65\3\66\3\66\3\66\3\66\3\66") - buf.write("\3\67\3\67\3\67\3\67\3\67\38\38\38\38\38\38\38\39\69\u0143") - buf.write("\n9\r9\169\u0144\3:\6:\u0148\n:\r:\16:\u0149\3:\3:\6:") - buf.write("\u014e\n:\r:\16:\u014f\3:\3:\5:\u0154\n:\3:\6:\u0157\n") - buf.write(":\r:\16:\u0158\5:\u015b\n:\3;\3;\3;\3;\7;\u0161\n;\f;") - buf.write("\16;\u0164\13;\3;\3;\3<\3<\3<\3<\7<\u016c\n<\f<\16<\u016f") - buf.write("\13<\3<\3<\3=\3=\7=\u0175\n=\f=\16=\u0178\13=\3>\3>\3") - buf.write("?\3?\3@\3@\3@\5@\u0181\n@\3A\6A\u0184\nA\rA\16A\u0185") - buf.write("\3A\3A\3B\3B\2\2C\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23") - buf.write("\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25") - buf.write(")\26+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A") - buf.write("\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65") - buf.write("i\66k\67m8o9q:s;u{\2}\2\177\2\u0081?\u0083@\3\2\n") - buf.write("\4\2))^^\6\2))^^ppvv\4\2$$^^\6\2$$^^ppvv\3\2\62;\5\2C") - buf.write("\\aac|\4\2))aa\5\2\13\f\17\17\"\"\2\u0195\2\3\3\2\2\2") - buf.write("\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r") - buf.write("\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3") - buf.write("\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2") - buf.write("\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'") - buf.write("\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2") - buf.write("\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29") - buf.write("\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2") - buf.write("C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2") - buf.write("\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2") - buf.write("\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2") - buf.write("\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3") - buf.write("\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2\2s") - buf.write("\3\2\2\2\2u\3\2\2\2\2w\3\2\2\2\2y\3\2\2\2\2\u0081\3\2") - buf.write("\2\2\2\u0083\3\2\2\2\3\u0085\3\2\2\2\5\u0087\3\2\2\2\7") - buf.write("\u008c\3\2\2\2\t\u0092\3\2\2\2\13\u0094\3\2\2\2\r\u0096") - buf.write("\3\2\2\2\17\u0098\3\2\2\2\21\u009a\3\2\2\2\23\u009c\3") - buf.write("\2\2\2\25\u009e\3\2\2\2\27\u00a0\3\2\2\2\31\u00a3\3\2") - buf.write("\2\2\33\u00a6\3\2\2\2\35\u00a8\3\2\2\2\37\u00aa\3\2\2") - buf.write("\2!\u00ac\3\2\2\2#\u00b2\3\2\2\2%\u00bb\3\2\2\2\'\u00bd") - buf.write("\3\2\2\2)\u00c0\3\2\2\2+\u00c5\3\2\2\2-\u00ca\3\2\2\2") - buf.write("/\u00d0\3\2\2\2\61\u00d6\3\2\2\2\63\u00da\3\2\2\2\65\u00dd") - buf.write("\3\2\2\2\67\u00e2\3\2\2\29\u00e5\3\2\2\2;\u00e7\3\2\2") - buf.write("\2=\u00e9\3\2\2\2?\u00eb\3\2\2\2A\u00ed\3\2\2\2C\u00ef") - buf.write("\3\2\2\2E\u00f1\3\2\2\2G\u00f3\3\2\2\2I\u00f5\3\2\2\2") - buf.write("K\u00f8\3\2\2\2M\u00fc\3\2\2\2O\u00ff\3\2\2\2Q\u0102\3") - buf.write("\2\2\2S\u0104\3\2\2\2U\u0107\3\2\2\2W\u0109\3\2\2\2Y\u010c") - buf.write("\3\2\2\2[\u0110\3\2\2\2]\u0114\3\2\2\2_\u0117\3\2\2\2") - buf.write("a\u0119\3\2\2\2c\u011b\3\2\2\2e\u0120\3\2\2\2g\u0126\3") - buf.write("\2\2\2i\u012a\3\2\2\2k\u0130\3\2\2\2m\u0135\3\2\2\2o\u013a") - buf.write("\3\2\2\2q\u0142\3\2\2\2s\u0147\3\2\2\2u\u015c\3\2\2\2") - buf.write("w\u0167\3\2\2\2y\u0172\3\2\2\2{\u0179\3\2\2\2}\u017b\3") - buf.write("\2\2\2\177\u0180\3\2\2\2\u0081\u0183\3\2\2\2\u0083\u0189") - buf.write("\3\2\2\2\u0085\u0086\7=\2\2\u0086\4\3\2\2\2\u0087\u0088") - buf.write("\7u\2\2\u0088\u0089\7m\2\2\u0089\u008a\7k\2\2\u008a\u008b") - buf.write("\7r\2\2\u008b\6\3\2\2\2\u008c\u008d\7r\2\2\u008d\u008e") - buf.write("\7t\2\2\u008e\u008f\7k\2\2\u008f\u0090\7p\2\2\u0090\u0091") - buf.write("\7v\2\2\u0091\b\3\2\2\2\u0092\u0093\7?\2\2\u0093\n\3\2") - buf.write("\2\2\u0094\u0095\7`\2\2\u0095\f\3\2\2\2\u0096\u0097\7") - buf.write(",\2\2\u0097\16\3\2\2\2\u0098\u0099\7\61\2\2\u0099\20\3") - buf.write("\2\2\2\u009a\u009b\7\'\2\2\u009b\22\3\2\2\2\u009c\u009d") - buf.write("\7-\2\2\u009d\24\3\2\2\2\u009e\u009f\7/\2\2\u009f\26\3") - buf.write("\2\2\2\u00a0\u00a1\7>\2\2\u00a1\u00a2\7>\2\2\u00a2\30") - buf.write("\3\2\2\2\u00a3\u00a4\7@\2\2\u00a4\u00a5\7@\2\2\u00a5\32") - buf.write("\3\2\2\2\u00a6\u00a7\7(\2\2\u00a7\34\3\2\2\2\u00a8\u00a9") - buf.write("\7&\2\2\u00a9\36\3\2\2\2\u00aa\u00ab\7~\2\2\u00ab \3\2") - buf.write("\2\2\u00ac\u00ad\7d\2\2\u00ad\u00ae\7t\2\2\u00ae\u00af") - buf.write("\7g\2\2\u00af\u00b0\7c\2\2\u00b0\u00b1\7m\2\2\u00b1\"") - buf.write("\3\2\2\2\u00b2\u00b3\7e\2\2\u00b3\u00b4\7q\2\2\u00b4\u00b5") - buf.write("\7p\2\2\u00b5\u00b6\7v\2\2\u00b6\u00b7\7k\2\2\u00b7\u00b8") - buf.write("\7p\2\2\u00b8\u00b9\7w\2\2\u00b9\u00ba\7g\2\2\u00ba$\3") - buf.write("\2\2\2\u00bb\u00bc\7.\2\2\u00bc&\3\2\2\2\u00bd\u00be\7") - buf.write("k\2\2\u00be\u00bf\7h\2\2\u00bf(\3\2\2\2\u00c0\u00c1\7") - buf.write("g\2\2\u00c1\u00c2\7n\2\2\u00c2\u00c3\7k\2\2\u00c3\u00c4") - buf.write("\7h\2\2\u00c4*\3\2\2\2\u00c5\u00c6\7g\2\2\u00c6\u00c7") - buf.write("\7n\2\2\u00c7\u00c8\7u\2\2\u00c8\u00c9\7g\2\2\u00c9,\3") - buf.write("\2\2\2\u00ca\u00cb\7y\2\2\u00cb\u00cc\7j\2\2\u00cc\u00cd") - buf.write("\7k\2\2\u00cd\u00ce\7n\2\2\u00ce\u00cf\7g\2\2\u00cf.\3") - buf.write("\2\2\2\u00d0\u00d1\7w\2\2\u00d1\u00d2\7p\2\2\u00d2\u00d3") - buf.write("\7v\2\2\u00d3\u00d4\7k\2\2\u00d4\u00d5\7n\2\2\u00d5\60") - buf.write("\3\2\2\2\u00d6\u00d7\7h\2\2\u00d7\u00d8\7q\2\2\u00d8\u00d9") - buf.write("\7t\2\2\u00d9\62\3\2\2\2\u00da\u00db\7k\2\2\u00db\u00dc") - buf.write("\7p\2\2\u00dc\64\3\2\2\2\u00dd\u00de\7u\2\2\u00de\u00df") - buf.write("\7v\2\2\u00df\u00e0\7g\2\2\u00e0\u00e1\7r\2\2\u00e1\66") - buf.write("\3\2\2\2\u00e2\u00e3\7f\2\2\u00e3\u00e4\7q\2\2\u00e48") - buf.write("\3\2\2\2\u00e5\u00e6\7}\2\2\u00e6:\3\2\2\2\u00e7\u00e8") - buf.write("\7\177\2\2\u00e8<\3\2\2\2\u00e9\u00ea\7*\2\2\u00ea>\3") - buf.write("\2\2\2\u00eb\u00ec\7+\2\2\u00ec@\3\2\2\2\u00ed\u00ee\7") - buf.write("]\2\2\u00eeB\3\2\2\2\u00ef\u00f0\7_\2\2\u00f0D\3\2\2\2") - buf.write("\u00f1\u00f2\7\60\2\2\u00f2F\3\2\2\2\u00f3\u00f4\7\u0080") - buf.write("\2\2\u00f4H\3\2\2\2\u00f5\u00f6\7\60\2\2\u00f6\u00f7\7") - buf.write("\60\2\2\u00f7J\3\2\2\2\u00f8\u00f9\7\60\2\2\u00f9\u00fa") - buf.write("\7\60\2\2\u00fa\u00fb\7\60\2\2\u00fbL\3\2\2\2\u00fc\u00fd") - buf.write("\7?\2\2\u00fd\u00fe\7?\2\2\u00feN\3\2\2\2\u00ff\u0100") - buf.write("\7#\2\2\u0100\u0101\7?\2\2\u0101P\3\2\2\2\u0102\u0103") - buf.write("\7>\2\2\u0103R\3\2\2\2\u0104\u0105\7>\2\2\u0105\u0106") - buf.write("\7?\2\2\u0106T\3\2\2\2\u0107\u0108\7@\2\2\u0108V\3\2\2") - buf.write("\2\u0109\u010a\7@\2\2\u010a\u010b\7?\2\2\u010bX\3\2\2") - buf.write("\2\u010c\u010d\7p\2\2\u010d\u010e\7q\2\2\u010e\u010f\7") - buf.write("v\2\2\u010fZ\3\2\2\2\u0110\u0111\7c\2\2\u0111\u0112\7") - buf.write("p\2\2\u0112\u0113\7f\2\2\u0113\\\3\2\2\2\u0114\u0115\7") - buf.write("q\2\2\u0115\u0116\7t\2\2\u0116^\3\2\2\2\u0117\u0118\7") - buf.write("A\2\2\u0118`\3\2\2\2\u0119\u011a\7<\2\2\u011ab\3\2\2\2") - buf.write("\u011b\u011c\7v\2\2\u011c\u011d\7t\2\2\u011d\u011e\7w") - buf.write("\2\2\u011e\u011f\7g\2\2\u011fd\3\2\2\2\u0120\u0121\7h") - buf.write("\2\2\u0121\u0122\7c\2\2\u0122\u0123\7n\2\2\u0123\u0124") - buf.write("\7u\2\2\u0124\u0125\7g\2\2\u0125f\3\2\2\2\u0126\u0127") - buf.write("\7K\2\2\u0127\u0128\7p\2\2\u0128\u0129\7v\2\2\u0129h\3") - buf.write("\2\2\2\u012a\u012b\7H\2\2\u012b\u012c\7n\2\2\u012c\u012d") - buf.write("\7q\2\2\u012d\u012e\7c\2\2\u012e\u012f\7v\2\2\u012fj\3") - buf.write("\2\2\2\u0130\u0131\7D\2\2\u0131\u0132\7q\2\2\u0132\u0133") - buf.write("\7q\2\2\u0133\u0134\7n\2\2\u0134l\3\2\2\2\u0135\u0136") - buf.write("\7E\2\2\u0136\u0137\7j\2\2\u0137\u0138\7c\2\2\u0138\u0139") - buf.write("\7t\2\2\u0139n\3\2\2\2\u013a\u013b\7U\2\2\u013b\u013c") - buf.write("\7v\2\2\u013c\u013d\7t\2\2\u013d\u013e\7k\2\2\u013e\u013f") - buf.write("\7p\2\2\u013f\u0140\7i\2\2\u0140p\3\2\2\2\u0141\u0143") - buf.write("\5{>\2\u0142\u0141\3\2\2\2\u0143\u0144\3\2\2\2\u0144\u0142") - buf.write("\3\2\2\2\u0144\u0145\3\2\2\2\u0145r\3\2\2\2\u0146\u0148") - buf.write("\5{>\2\u0147\u0146\3\2\2\2\u0148\u0149\3\2\2\2\u0149\u0147") - buf.write("\3\2\2\2\u0149\u014a\3\2\2\2\u014a\u014b\3\2\2\2\u014b") - buf.write("\u014d\7\60\2\2\u014c\u014e\5{>\2\u014d\u014c\3\2\2\2") - buf.write("\u014e\u014f\3\2\2\2\u014f\u014d\3\2\2\2\u014f\u0150\3") - buf.write("\2\2\2\u0150\u015a\3\2\2\2\u0151\u0153\7g\2\2\u0152\u0154") - buf.write("\7/\2\2\u0153\u0152\3\2\2\2\u0153\u0154\3\2\2\2\u0154") - buf.write("\u0156\3\2\2\2\u0155\u0157\5{>\2\u0156\u0155\3\2\2\2\u0157") - buf.write("\u0158\3\2\2\2\u0158\u0156\3\2\2\2\u0158\u0159\3\2\2\2") - buf.write("\u0159\u015b\3\2\2\2\u015a\u0151\3\2\2\2\u015a\u015b\3") - buf.write("\2\2\2\u015bt\3\2\2\2\u015c\u0162\7)\2\2\u015d\u0161\n") - buf.write("\2\2\2\u015e\u015f\7^\2\2\u015f\u0161\t\3\2\2\u0160\u015d") - buf.write("\3\2\2\2\u0160\u015e\3\2\2\2\u0161\u0164\3\2\2\2\u0162") - buf.write("\u0160\3\2\2\2\u0162\u0163\3\2\2\2\u0163\u0165\3\2\2\2") - buf.write("\u0164\u0162\3\2\2\2\u0165\u0166\7)\2\2\u0166v\3\2\2\2") - buf.write("\u0167\u016d\7$\2\2\u0168\u016c\n\4\2\2\u0169\u016a\7") - buf.write("^\2\2\u016a\u016c\t\5\2\2\u016b\u0168\3\2\2\2\u016b\u0169") - buf.write("\3\2\2\2\u016c\u016f\3\2\2\2\u016d\u016b\3\2\2\2\u016d") - buf.write("\u016e\3\2\2\2\u016e\u0170\3\2\2\2\u016f\u016d\3\2\2\2") - buf.write("\u0170\u0171\7$\2\2\u0171x\3\2\2\2\u0172\u0176\5}?\2\u0173") - buf.write("\u0175\5\177@\2\u0174\u0173\3\2\2\2\u0175\u0178\3\2\2") - buf.write("\2\u0176\u0174\3\2\2\2\u0176\u0177\3\2\2\2\u0177z\3\2") - buf.write("\2\2\u0178\u0176\3\2\2\2\u0179\u017a\t\6\2\2\u017a|\3") - buf.write("\2\2\2\u017b\u017c\t\7\2\2\u017c~\3\2\2\2\u017d\u0181") - buf.write("\5}?\2\u017e\u0181\5{>\2\u017f\u0181\t\b\2\2\u0180\u017d") - buf.write("\3\2\2\2\u0180\u017e\3\2\2\2\u0180\u017f\3\2\2\2\u0181") - buf.write("\u0080\3\2\2\2\u0182\u0184\t\t\2\2\u0183\u0182\3\2\2\2") - buf.write("\u0184\u0185\3\2\2\2\u0185\u0183\3\2\2\2\u0185\u0186\3") - buf.write("\2\2\2\u0186\u0187\3\2\2\2\u0187\u0188\bA\2\2\u0188\u0082") - buf.write("\3\2\2\2\u0189\u018a\13\2\2\2\u018a\u0084\3\2\2\2\20\2") - buf.write("\u0144\u0149\u014f\u0153\u0158\u015a\u0160\u0162\u016b") - buf.write("\u016d\u0176\u0180\u0185\3\b\2\2") + buf.write("\4;\t;\4<\t<\4=\t=\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\t") + buf.write("C\4D\tD\4E\tE\4F\tF\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\4\3") + buf.write("\4\3\4\3\4\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t") + buf.write("\3\t\3\n\3\n\3\13\3\13\3\f\3\f\3\f\3\r\3\r\3\r\3\16\3") + buf.write("\16\3\17\3\17\3\20\3\20\3\21\3\21\3\21\3\21\3\21\3\21") + buf.write("\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\23\3\23") + buf.write("\3\23\3\23\3\23\3\23\3\23\3\24\3\24\3\25\3\25\3\25\3\26") + buf.write("\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27\3\27\3\30\3\30") + buf.write("\3\30\3\30\3\30\3\30\3\31\3\31\3\31\3\31\3\31\3\31\3\32") + buf.write("\3\32\3\32\3\32\3\33\3\33\3\33\3\34\3\34\3\34\3\34\3\34") + buf.write("\3\35\3\35\3\35\3\35\3\35\3\36\3\36\3\37\3\37\3 \3 \3") + buf.write(" \3!\3!\3\"\3\"\3#\3#\3#\3#\3$\3$\3%\3%\3&\3&\3\'\3\'") + buf.write("\3(\3(\3(\3)\3)\3)\3)\3*\3*\3*\3+\3+\3+\3,\3,\3-\3-\3") + buf.write("-\3.\3.\3/\3/\3/\3\60\3\60\3\60\3\60\3\61\3\61\3\61\3") + buf.write("\61\3\62\3\62\3\62\3\63\3\63\3\64\3\64\3\65\3\65\3\65") + buf.write("\3\65\3\65\3\66\3\66\3\66\3\66\3\66\3\66\3\67\3\67\3\67") + buf.write("\3\67\3\67\38\38\38\38\39\39\39\39\39\39\3:\3:\3:\3:\3") + buf.write(":\3;\3;\3;\3;\3;\3<\3<\3<\3<\3<\3<\3<\3=\6=\u0160\n=\r") + buf.write("=\16=\u0161\3>\6>\u0165\n>\r>\16>\u0166\3>\3>\6>\u016b") + buf.write("\n>\r>\16>\u016c\3>\3>\5>\u0171\n>\3>\6>\u0174\n>\r>\16") + buf.write(">\u0175\5>\u0178\n>\3?\3?\3?\3?\7?\u017e\n?\f?\16?\u0181") + buf.write("\13?\3?\3?\3@\3@\3@\3@\7@\u0189\n@\f@\16@\u018c\13@\3") + buf.write("@\3@\3A\3A\7A\u0192\nA\fA\16A\u0195\13A\3B\3B\3C\3C\3") + buf.write("D\3D\3D\5D\u019e\nD\3E\6E\u01a1\nE\rE\16E\u01a2\3E\3E") + buf.write("\3F\3F\2\2G\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25") + buf.write("\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+") + buf.write("\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#E") + buf.write("$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k") + buf.write("\67m8o9q:s;u{?}@\177A\u0081B\u0083\2\u0085\2\u0087") + buf.write("\2\u0089C\u008bD\3\2\n\4\2))^^\6\2))^^ppvv\4\2$$^^\6\2") + buf.write("$$^^ppvv\3\2\62;\5\2C\\aac|\4\2))aa\5\2\13\f\17\17\"\"") + buf.write("\2\u01b2\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2") + buf.write("\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2") + buf.write("\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2") + buf.write("\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3") + buf.write("\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2") + buf.write("-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3") + buf.write("\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2") + buf.write("?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2") + buf.write("\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2") + buf.write("\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2") + buf.write("\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3") + buf.write("\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2o") + buf.write("\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2u\3\2\2\2\2w\3\2\2\2\2") + buf.write("y\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177\3\2\2\2\2\u0081") + buf.write("\3\2\2\2\2\u0089\3\2\2\2\2\u008b\3\2\2\2\3\u008d\3\2\2") + buf.write("\2\5\u008f\3\2\2\2\7\u0094\3\2\2\2\t\u009a\3\2\2\2\13") + buf.write("\u009c\3\2\2\2\r\u009e\3\2\2\2\17\u00a0\3\2\2\2\21\u00a2") + buf.write("\3\2\2\2\23\u00a4\3\2\2\2\25\u00a6\3\2\2\2\27\u00a8\3") + buf.write("\2\2\2\31\u00ab\3\2\2\2\33\u00ae\3\2\2\2\35\u00b0\3\2") + buf.write("\2\2\37\u00b2\3\2\2\2!\u00b4\3\2\2\2#\u00ba\3\2\2\2%\u00c3") + buf.write("\3\2\2\2\'\u00ca\3\2\2\2)\u00cc\3\2\2\2+\u00cf\3\2\2\2") + buf.write("-\u00d4\3\2\2\2/\u00d9\3\2\2\2\61\u00df\3\2\2\2\63\u00e5") + buf.write("\3\2\2\2\65\u00e9\3\2\2\2\67\u00ec\3\2\2\29\u00f1\3\2") + buf.write("\2\2;\u00f6\3\2\2\2=\u00f8\3\2\2\2?\u00fa\3\2\2\2A\u00fd") + buf.write("\3\2\2\2C\u00ff\3\2\2\2E\u0101\3\2\2\2G\u0105\3\2\2\2") + buf.write("I\u0107\3\2\2\2K\u0109\3\2\2\2M\u010b\3\2\2\2O\u010d\3") + buf.write("\2\2\2Q\u0110\3\2\2\2S\u0114\3\2\2\2U\u0117\3\2\2\2W\u011a") + buf.write("\3\2\2\2Y\u011c\3\2\2\2[\u011f\3\2\2\2]\u0121\3\2\2\2") + buf.write("_\u0124\3\2\2\2a\u0128\3\2\2\2c\u012c\3\2\2\2e\u012f\3") + buf.write("\2\2\2g\u0131\3\2\2\2i\u0133\3\2\2\2k\u0138\3\2\2\2m\u013e") + buf.write("\3\2\2\2o\u0143\3\2\2\2q\u0147\3\2\2\2s\u014d\3\2\2\2") + buf.write("u\u0152\3\2\2\2w\u0157\3\2\2\2y\u015f\3\2\2\2{\u0164\3") + buf.write("\2\2\2}\u0179\3\2\2\2\177\u0184\3\2\2\2\u0081\u018f\3") + buf.write("\2\2\2\u0083\u0196\3\2\2\2\u0085\u0198\3\2\2\2\u0087\u019d") + buf.write("\3\2\2\2\u0089\u01a0\3\2\2\2\u008b\u01a6\3\2\2\2\u008d") + buf.write("\u008e\7=\2\2\u008e\4\3\2\2\2\u008f\u0090\7u\2\2\u0090") + buf.write("\u0091\7m\2\2\u0091\u0092\7k\2\2\u0092\u0093\7r\2\2\u0093") + buf.write("\6\3\2\2\2\u0094\u0095\7r\2\2\u0095\u0096\7t\2\2\u0096") + buf.write("\u0097\7k\2\2\u0097\u0098\7p\2\2\u0098\u0099\7v\2\2\u0099") + buf.write("\b\3\2\2\2\u009a\u009b\7?\2\2\u009b\n\3\2\2\2\u009c\u009d") + buf.write("\7`\2\2\u009d\f\3\2\2\2\u009e\u009f\7,\2\2\u009f\16\3") + buf.write("\2\2\2\u00a0\u00a1\7\61\2\2\u00a1\20\3\2\2\2\u00a2\u00a3") + buf.write("\7\'\2\2\u00a3\22\3\2\2\2\u00a4\u00a5\7-\2\2\u00a5\24") + buf.write("\3\2\2\2\u00a6\u00a7\7/\2\2\u00a7\26\3\2\2\2\u00a8\u00a9") + buf.write("\7>\2\2\u00a9\u00aa\7>\2\2\u00aa\30\3\2\2\2\u00ab\u00ac") + buf.write("\7@\2\2\u00ac\u00ad\7@\2\2\u00ad\32\3\2\2\2\u00ae\u00af") + buf.write("\7(\2\2\u00af\34\3\2\2\2\u00b0\u00b1\7&\2\2\u00b1\36\3") + buf.write("\2\2\2\u00b2\u00b3\7~\2\2\u00b3 \3\2\2\2\u00b4\u00b5\7") + buf.write("d\2\2\u00b5\u00b6\7t\2\2\u00b6\u00b7\7g\2\2\u00b7\u00b8") + buf.write("\7c\2\2\u00b8\u00b9\7m\2\2\u00b9\"\3\2\2\2\u00ba\u00bb") + buf.write("\7e\2\2\u00bb\u00bc\7q\2\2\u00bc\u00bd\7p\2\2\u00bd\u00be") + buf.write("\7v\2\2\u00be\u00bf\7k\2\2\u00bf\u00c0\7p\2\2\u00c0\u00c1") + buf.write("\7w\2\2\u00c1\u00c2\7g\2\2\u00c2$\3\2\2\2\u00c3\u00c4") + buf.write("\7t\2\2\u00c4\u00c5\7g\2\2\u00c5\u00c6\7v\2\2\u00c6\u00c7") + buf.write("\7w\2\2\u00c7\u00c8\7t\2\2\u00c8\u00c9\7p\2\2\u00c9&\3") + buf.write("\2\2\2\u00ca\u00cb\7.\2\2\u00cb(\3\2\2\2\u00cc\u00cd\7") + buf.write("k\2\2\u00cd\u00ce\7h\2\2\u00ce*\3\2\2\2\u00cf\u00d0\7") + buf.write("g\2\2\u00d0\u00d1\7n\2\2\u00d1\u00d2\7k\2\2\u00d2\u00d3") + buf.write("\7h\2\2\u00d3,\3\2\2\2\u00d4\u00d5\7g\2\2\u00d5\u00d6") + buf.write("\7n\2\2\u00d6\u00d7\7u\2\2\u00d7\u00d8\7g\2\2\u00d8.\3") + buf.write("\2\2\2\u00d9\u00da\7y\2\2\u00da\u00db\7j\2\2\u00db\u00dc") + buf.write("\7k\2\2\u00dc\u00dd\7n\2\2\u00dd\u00de\7g\2\2\u00de\60") + buf.write("\3\2\2\2\u00df\u00e0\7w\2\2\u00e0\u00e1\7p\2\2\u00e1\u00e2") + buf.write("\7v\2\2\u00e2\u00e3\7k\2\2\u00e3\u00e4\7n\2\2\u00e4\62") + buf.write("\3\2\2\2\u00e5\u00e6\7h\2\2\u00e6\u00e7\7q\2\2\u00e7\u00e8") + buf.write("\7t\2\2\u00e8\64\3\2\2\2\u00e9\u00ea\7k\2\2\u00ea\u00eb") + buf.write("\7p\2\2\u00eb\66\3\2\2\2\u00ec\u00ed\7u\2\2\u00ed\u00ee") + buf.write("\7v\2\2\u00ee\u00ef\7g\2\2\u00ef\u00f0\7r\2\2\u00f08\3") + buf.write("\2\2\2\u00f1\u00f2\7h\2\2\u00f2\u00f3\7w\2\2\u00f3\u00f4") + buf.write("\7p\2\2\u00f4\u00f5\7e\2\2\u00f5:\3\2\2\2\u00f6\u00f7") + buf.write("\7*\2\2\u00f7<\3\2\2\2\u00f8\u00f9\7+\2\2\u00f9>\3\2\2") + buf.write("\2\u00fa\u00fb\7f\2\2\u00fb\u00fc\7q\2\2\u00fc@\3\2\2") + buf.write("\2\u00fd\u00fe\7}\2\2\u00feB\3\2\2\2\u00ff\u0100\7\177") + buf.write("\2\2\u0100D\3\2\2\2\u0101\u0102\7f\2\2\u0102\u0103\7g") + buf.write("\2\2\u0103\u0104\7h\2\2\u0104F\3\2\2\2\u0105\u0106\7]") + buf.write("\2\2\u0106H\3\2\2\2\u0107\u0108\7_\2\2\u0108J\3\2\2\2") + buf.write("\u0109\u010a\7\60\2\2\u010aL\3\2\2\2\u010b\u010c\7\u0080") + buf.write("\2\2\u010cN\3\2\2\2\u010d\u010e\7\60\2\2\u010e\u010f\7") + buf.write("\60\2\2\u010fP\3\2\2\2\u0110\u0111\7\60\2\2\u0111\u0112") + buf.write("\7\60\2\2\u0112\u0113\7\60\2\2\u0113R\3\2\2\2\u0114\u0115") + buf.write("\7?\2\2\u0115\u0116\7?\2\2\u0116T\3\2\2\2\u0117\u0118") + buf.write("\7#\2\2\u0118\u0119\7?\2\2\u0119V\3\2\2\2\u011a\u011b") + buf.write("\7>\2\2\u011bX\3\2\2\2\u011c\u011d\7>\2\2\u011d\u011e") + buf.write("\7?\2\2\u011eZ\3\2\2\2\u011f\u0120\7@\2\2\u0120\\\3\2") + buf.write("\2\2\u0121\u0122\7@\2\2\u0122\u0123\7?\2\2\u0123^\3\2") + buf.write("\2\2\u0124\u0125\7p\2\2\u0125\u0126\7q\2\2\u0126\u0127") + buf.write("\7v\2\2\u0127`\3\2\2\2\u0128\u0129\7c\2\2\u0129\u012a") + buf.write("\7p\2\2\u012a\u012b\7f\2\2\u012bb\3\2\2\2\u012c\u012d") + buf.write("\7q\2\2\u012d\u012e\7t\2\2\u012ed\3\2\2\2\u012f\u0130") + buf.write("\7A\2\2\u0130f\3\2\2\2\u0131\u0132\7<\2\2\u0132h\3\2\2") + buf.write("\2\u0133\u0134\7v\2\2\u0134\u0135\7t\2\2\u0135\u0136\7") + buf.write("w\2\2\u0136\u0137\7g\2\2\u0137j\3\2\2\2\u0138\u0139\7") + buf.write("h\2\2\u0139\u013a\7c\2\2\u013a\u013b\7n\2\2\u013b\u013c") + buf.write("\7u\2\2\u013c\u013d\7g\2\2\u013dl\3\2\2\2\u013e\u013f") + buf.write("\7X\2\2\u013f\u0140\7q\2\2\u0140\u0141\7k\2\2\u0141\u0142") + buf.write("\7f\2\2\u0142n\3\2\2\2\u0143\u0144\7K\2\2\u0144\u0145") + buf.write("\7p\2\2\u0145\u0146\7v\2\2\u0146p\3\2\2\2\u0147\u0148") + buf.write("\7H\2\2\u0148\u0149\7n\2\2\u0149\u014a\7q\2\2\u014a\u014b") + buf.write("\7c\2\2\u014b\u014c\7v\2\2\u014cr\3\2\2\2\u014d\u014e") + buf.write("\7D\2\2\u014e\u014f\7q\2\2\u014f\u0150\7q\2\2\u0150\u0151") + buf.write("\7n\2\2\u0151t\3\2\2\2\u0152\u0153\7E\2\2\u0153\u0154") + buf.write("\7j\2\2\u0154\u0155\7c\2\2\u0155\u0156\7t\2\2\u0156v\3") + buf.write("\2\2\2\u0157\u0158\7U\2\2\u0158\u0159\7v\2\2\u0159\u015a") + buf.write("\7t\2\2\u015a\u015b\7k\2\2\u015b\u015c\7p\2\2\u015c\u015d") + buf.write("\7i\2\2\u015dx\3\2\2\2\u015e\u0160\5\u0083B\2\u015f\u015e") + buf.write("\3\2\2\2\u0160\u0161\3\2\2\2\u0161\u015f\3\2\2\2\u0161") + buf.write("\u0162\3\2\2\2\u0162z\3\2\2\2\u0163\u0165\5\u0083B\2\u0164") + buf.write("\u0163\3\2\2\2\u0165\u0166\3\2\2\2\u0166\u0164\3\2\2\2") + buf.write("\u0166\u0167\3\2\2\2\u0167\u0168\3\2\2\2\u0168\u016a\7") + buf.write("\60\2\2\u0169\u016b\5\u0083B\2\u016a\u0169\3\2\2\2\u016b") + buf.write("\u016c\3\2\2\2\u016c\u016a\3\2\2\2\u016c\u016d\3\2\2\2") + buf.write("\u016d\u0177\3\2\2\2\u016e\u0170\7g\2\2\u016f\u0171\7") + buf.write("/\2\2\u0170\u016f\3\2\2\2\u0170\u0171\3\2\2\2\u0171\u0173") + buf.write("\3\2\2\2\u0172\u0174\5\u0083B\2\u0173\u0172\3\2\2\2\u0174") + buf.write("\u0175\3\2\2\2\u0175\u0173\3\2\2\2\u0175\u0176\3\2\2\2") + buf.write("\u0176\u0178\3\2\2\2\u0177\u016e\3\2\2\2\u0177\u0178\3") + buf.write("\2\2\2\u0178|\3\2\2\2\u0179\u017f\7)\2\2\u017a\u017e\n") + buf.write("\2\2\2\u017b\u017c\7^\2\2\u017c\u017e\t\3\2\2\u017d\u017a") + buf.write("\3\2\2\2\u017d\u017b\3\2\2\2\u017e\u0181\3\2\2\2\u017f") + buf.write("\u017d\3\2\2\2\u017f\u0180\3\2\2\2\u0180\u0182\3\2\2\2") + buf.write("\u0181\u017f\3\2\2\2\u0182\u0183\7)\2\2\u0183~\3\2\2\2") + buf.write("\u0184\u018a\7$\2\2\u0185\u0189\n\4\2\2\u0186\u0187\7") + buf.write("^\2\2\u0187\u0189\t\5\2\2\u0188\u0185\3\2\2\2\u0188\u0186") + buf.write("\3\2\2\2\u0189\u018c\3\2\2\2\u018a\u0188\3\2\2\2\u018a") + buf.write("\u018b\3\2\2\2\u018b\u018d\3\2\2\2\u018c\u018a\3\2\2\2") + buf.write("\u018d\u018e\7$\2\2\u018e\u0080\3\2\2\2\u018f\u0193\5") + buf.write("\u0085C\2\u0190\u0192\5\u0087D\2\u0191\u0190\3\2\2\2\u0192") + buf.write("\u0195\3\2\2\2\u0193\u0191\3\2\2\2\u0193\u0194\3\2\2\2") + buf.write("\u0194\u0082\3\2\2\2\u0195\u0193\3\2\2\2\u0196\u0197\t") + buf.write("\6\2\2\u0197\u0084\3\2\2\2\u0198\u0199\t\7\2\2\u0199\u0086") + buf.write("\3\2\2\2\u019a\u019e\5\u0085C\2\u019b\u019e\5\u0083B\2") + buf.write("\u019c\u019e\t\b\2\2\u019d\u019a\3\2\2\2\u019d\u019b\3") + buf.write("\2\2\2\u019d\u019c\3\2\2\2\u019e\u0088\3\2\2\2\u019f\u01a1") + buf.write("\t\t\2\2\u01a0\u019f\3\2\2\2\u01a1\u01a2\3\2\2\2\u01a2") + buf.write("\u01a0\3\2\2\2\u01a2\u01a3\3\2\2\2\u01a3\u01a4\3\2\2\2") + buf.write("\u01a4\u01a5\bE\2\2\u01a5\u008a\3\2\2\2\u01a6\u01a7\13") + buf.write("\2\2\2\u01a7\u008c\3\2\2\2\20\2\u0161\u0166\u016c\u0170") + buf.write("\u0175\u0177\u017d\u017f\u0188\u018a\u0193\u019d\u01a2") + buf.write("\3\b\2\2") return buf.getvalue() @@ -239,13 +252,17 @@ class PyxellLexer(Lexer): T__52 = 53 T__53 = 54 T__54 = 55 - INT = 56 - FLOAT = 57 - CHAR = 58 - STRING = 59 - ID = 60 - WS = 61 - ERR = 62 + T__55 = 56 + T__56 = 57 + T__57 = 58 + T__58 = 59 + INT = 60 + FLOAT = 61 + CHAR = 62 + STRING = 63 + ID = 64 + WS = 65 + ERR = 66 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -254,12 +271,12 @@ class PyxellLexer(Lexer): literalNames = [ "", "';'", "'skip'", "'print'", "'='", "'^'", "'*'", "'/'", "'%'", "'+'", "'-'", "'<<'", "'>>'", "'&'", "'$'", "'|'", "'break'", - "'continue'", "','", "'if'", "'elif'", "'else'", "'while'", - "'until'", "'for'", "'in'", "'step'", "'do'", "'{'", "'}'", - "'('", "')'", "'['", "']'", "'.'", "'~'", "'..'", "'...'", "'=='", - "'!='", "'<'", "'<='", "'>'", "'>='", "'not'", "'and'", "'or'", - "'?'", "':'", "'true'", "'false'", "'Int'", "'Float'", "'Bool'", - "'Char'", "'String'" ] + "'continue'", "'return'", "','", "'if'", "'elif'", "'else'", + "'while'", "'until'", "'for'", "'in'", "'step'", "'func'", "'('", + "')'", "'do'", "'{'", "'}'", "'def'", "'['", "']'", "'.'", "'~'", + "'..'", "'...'", "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", + "'not'", "'and'", "'or'", "'?'", "':'", "'true'", "'false'", + "'Void'", "'Int'", "'Float'", "'Bool'", "'Char'", "'String'" ] symbolicNames = [ "", "INT", "FLOAT", "CHAR", "STRING", "ID", "WS", "ERR" ] @@ -272,9 +289,9 @@ class PyxellLexer(Lexer): "T__32", "T__33", "T__34", "T__35", "T__36", "T__37", "T__38", "T__39", "T__40", "T__41", "T__42", "T__43", "T__44", "T__45", "T__46", "T__47", "T__48", "T__49", - "T__50", "T__51", "T__52", "T__53", "T__54", "INT", "FLOAT", - "CHAR", "STRING", "ID", "DIGIT", "ID_START", "ID_CONT", - "WS", "ERR" ] + "T__50", "T__51", "T__52", "T__53", "T__54", "T__55", + "T__56", "T__57", "T__58", "INT", "FLOAT", "CHAR", "STRING", + "ID", "DIGIT", "ID_START", "ID_CONT", "WS", "ERR" ] grammarFileName = "Pyxell.g4" diff --git a/src/antlr/PyxellLexer.tokens b/src/antlr/PyxellLexer.tokens index df59214a..262e49a2 100644 --- a/src/antlr/PyxellLexer.tokens +++ b/src/antlr/PyxellLexer.tokens @@ -53,13 +53,17 @@ T__51=52 T__52=53 T__53=54 T__54=55 -INT=56 -FLOAT=57 -CHAR=58 -STRING=59 -ID=60 -WS=61 -ERR=62 +T__55=56 +T__56=57 +T__57=58 +T__58=59 +INT=60 +FLOAT=61 +CHAR=62 +STRING=63 +ID=64 +WS=65 +ERR=66 ';'=1 'skip'=2 'print'=3 @@ -77,41 +81,45 @@ ERR=62 '|'=15 'break'=16 'continue'=17 -','=18 -'if'=19 -'elif'=20 -'else'=21 -'while'=22 -'until'=23 -'for'=24 -'in'=25 -'step'=26 -'do'=27 -'{'=28 -'}'=29 -'('=30 -')'=31 -'['=32 -']'=33 -'.'=34 -'~'=35 -'..'=36 -'...'=37 -'=='=38 -'!='=39 -'<'=40 -'<='=41 -'>'=42 -'>='=43 -'not'=44 -'and'=45 -'or'=46 -'?'=47 -':'=48 -'true'=49 -'false'=50 -'Int'=51 -'Float'=52 -'Bool'=53 -'Char'=54 -'String'=55 +'return'=18 +','=19 +'if'=20 +'elif'=21 +'else'=22 +'while'=23 +'until'=24 +'for'=25 +'in'=26 +'step'=27 +'func'=28 +'('=29 +')'=30 +'do'=31 +'{'=32 +'}'=33 +'def'=34 +'['=35 +']'=36 +'.'=37 +'~'=38 +'..'=39 +'...'=40 +'=='=41 +'!='=42 +'<'=43 +'<='=44 +'>'=45 +'>='=46 +'not'=47 +'and'=48 +'or'=49 +'?'=50 +':'=51 +'true'=52 +'false'=53 +'Void'=54 +'Int'=55 +'Float'=56 +'Bool'=57 +'Char'=58 +'String'=59 diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index f46531bc..79e74fe8 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -8,111 +8,141 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3@") - buf.write("\u00ee\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") - buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\3\2\7\2\30\n\2\f\2") - buf.write("\16\2\33\13\2\3\2\3\2\3\3\3\3\3\3\3\3\5\3#\n\3\3\4\3\4") - buf.write("\3\4\5\4(\n\4\3\4\3\4\3\4\3\4\5\4.\n\4\3\4\3\4\3\4\7\4") - buf.write("\63\n\4\f\4\16\4\66\13\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\5") - buf.write("\4?\n\4\3\5\3\5\3\5\7\5D\n\5\f\5\16\5G\13\5\3\6\3\6\3") - buf.write("\6\3\6\3\6\3\6\3\6\7\6P\n\6\f\6\16\6S\13\6\3\6\3\6\5\6") - buf.write("W\n\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6") - buf.write("\3\6\3\6\5\6g\n\6\3\6\3\6\5\6k\n\6\3\7\3\7\3\7\6\7p\n") - buf.write("\7\r\7\16\7q\3\7\3\7\3\b\3\b\3\b\7\by\n\b\f\b\16\b|\13") - buf.write("\b\3\b\3\b\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\5\t") - buf.write("\u008a\n\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") - buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") - buf.write("\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") - buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") - buf.write("\t\7\t\u00c0\n\t\f\t\16\t\u00c3\13\t\3\n\3\n\3\n\3\n\3") - buf.write("\n\3\n\3\n\3\n\3\n\7\n\u00ce\n\n\f\n\16\n\u00d1\13\n\3") - buf.write("\n\5\n\u00d4\n\n\3\n\3\n\5\n\u00d8\n\n\3\13\3\13\3\13") - buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\3\13\5\13\u00e4\n\13\3") - buf.write("\13\3\13\3\13\7\13\u00e9\n\13\f\13\16\13\u00ec\13\13\3") - buf.write("\13\2\4\20\24\f\2\4\6\b\n\f\16\20\22\24\2\n\3\2\7\21\3") - buf.write("\2\22\23\4\2\13\f%%\3\2\b\n\3\2\13\f\3\2\r\16\3\2(-\3") - buf.write("\2\63\64\2\u0117\2\31\3\2\2\2\4\"\3\2\2\2\6>\3\2\2\2\b") - buf.write("@\3\2\2\2\nj\3\2\2\2\fl\3\2\2\2\16z\3\2\2\2\20\u0089\3") - buf.write("\2\2\2\22\u00d7\3\2\2\2\24\u00e3\3\2\2\2\26\30\5\4\3\2") - buf.write("\27\26\3\2\2\2\30\33\3\2\2\2\31\27\3\2\2\2\31\32\3\2\2") - buf.write("\2\32\34\3\2\2\2\33\31\3\2\2\2\34\35\7\2\2\3\35\3\3\2") - buf.write("\2\2\36\37\5\6\4\2\37 \7\3\2\2 #\3\2\2\2!#\5\n\6\2\"\36") - buf.write("\3\2\2\2\"!\3\2\2\2#\5\3\2\2\2$?\7\4\2\2%\'\7\5\2\2&(") - buf.write("\5\16\b\2\'&\3\2\2\2\'(\3\2\2\2(?\3\2\2\2)*\5\24\13\2") - buf.write("*-\7>\2\2+,\7\6\2\2,.\5\16\b\2-+\3\2\2\2-.\3\2\2\2.?\3") - buf.write("\2\2\2/\60\5\b\5\2\60\61\7\6\2\2\61\63\3\2\2\2\62/\3\2") - buf.write("\2\2\63\66\3\2\2\2\64\62\3\2\2\2\64\65\3\2\2\2\65\67\3") - buf.write("\2\2\2\66\64\3\2\2\2\67?\5\16\b\289\5\20\t\29:\t\2\2\2") - buf.write(":;\7\6\2\2;<\5\20\t\2$\3\2\2\2>%") - buf.write("\3\2\2\2>)\3\2\2\2>\64\3\2\2\2>8\3\2\2\2>=\3\2\2\2?\7") - buf.write("\3\2\2\2@E\5\20\t\2AB\7\24\2\2BD\5\20\t\2CA\3\2\2\2DG") - buf.write("\3\2\2\2EC\3\2\2\2EF\3\2\2\2F\t\3\2\2\2GE\3\2\2\2HI\7") - buf.write("\25\2\2IJ\5\20\t\2JQ\5\f\7\2KL\7\26\2\2LM\5\20\t\2MN\5") - buf.write("\f\7\2NP\3\2\2\2OK\3\2\2\2PS\3\2\2\2QO\3\2\2\2QR\3\2\2") - buf.write("\2RV\3\2\2\2SQ\3\2\2\2TU\7\27\2\2UW\5\f\7\2VT\3\2\2\2") - buf.write("VW\3\2\2\2Wk\3\2\2\2XY\7\30\2\2YZ\5\20\t\2Z[\5\f\7\2[") - buf.write("k\3\2\2\2\\]\7\31\2\2]^\5\20\t\2^_\5\f\7\2_k\3\2\2\2`") - buf.write("a\7\32\2\2ab\5\16\b\2bc\7\33\2\2cf\5\16\b\2de\7\34\2\2") - buf.write("eg\5\16\b\2fd\3\2\2\2fg\3\2\2\2gh\3\2\2\2hi\5\f\7\2ik") - buf.write("\3\2\2\2jH\3\2\2\2jX\3\2\2\2j\\\3\2\2\2j`\3\2\2\2k\13") - buf.write("\3\2\2\2lm\7\35\2\2mo\7\36\2\2np\5\4\3\2on\3\2\2\2pq\3") - buf.write("\2\2\2qo\3\2\2\2qr\3\2\2\2rs\3\2\2\2st\7\37\2\2t\r\3\2") - buf.write("\2\2uv\5\20\t\2vw\7\24\2\2wy\3\2\2\2xu\3\2\2\2y|\3\2\2") - buf.write("\2zx\3\2\2\2z{\3\2\2\2{}\3\2\2\2|z\3\2\2\2}~\5\20\t\2") - buf.write("~\17\3\2\2\2\177\u0080\b\t\1\2\u0080\u008a\5\22\n\2\u0081") - buf.write("\u0082\7 \2\2\u0082\u0083\5\16\b\2\u0083\u0084\7!\2\2") - buf.write("\u0084\u008a\3\2\2\2\u0085\u0086\t\4\2\2\u0086\u008a\5") - buf.write("\20\t\21\u0087\u0088\7.\2\2\u0088\u008a\5\20\t\6\u0089") - buf.write("\177\3\2\2\2\u0089\u0081\3\2\2\2\u0089\u0085\3\2\2\2\u0089") - buf.write("\u0087\3\2\2\2\u008a\u00c1\3\2\2\2\u008b\u008c\f\22\2") - buf.write("\2\u008c\u008d\7\7\2\2\u008d\u00c0\5\20\t\22\u008e\u008f") - buf.write("\f\20\2\2\u008f\u0090\t\5\2\2\u0090\u00c0\5\20\t\21\u0091") - buf.write("\u0092\f\17\2\2\u0092\u0093\t\6\2\2\u0093\u00c0\5\20\t") - buf.write("\20\u0094\u0095\f\16\2\2\u0095\u0096\t\7\2\2\u0096\u00c0") - buf.write("\5\20\t\17\u0097\u0098\f\r\2\2\u0098\u0099\7\17\2\2\u0099") - buf.write("\u00c0\5\20\t\16\u009a\u009b\f\f\2\2\u009b\u009c\7\20") - buf.write("\2\2\u009c\u00c0\5\20\t\r\u009d\u009e\f\13\2\2\u009e\u009f") - buf.write("\7\21\2\2\u009f\u00c0\5\20\t\f\u00a0\u00a1\f\n\2\2\u00a1") - buf.write("\u00a2\7&\2\2\u00a2\u00c0\5\20\t\13\u00a3\u00a4\f\t\2") - buf.write("\2\u00a4\u00a5\7\'\2\2\u00a5\u00c0\5\20\t\n\u00a6\u00a7") - buf.write("\f\7\2\2\u00a7\u00a8\t\b\2\2\u00a8\u00c0\5\20\t\7\u00a9") - buf.write("\u00aa\f\5\2\2\u00aa\u00ab\7/\2\2\u00ab\u00c0\5\20\t\5") - buf.write("\u00ac\u00ad\f\4\2\2\u00ad\u00ae\7\60\2\2\u00ae\u00c0") - buf.write("\5\20\t\4\u00af\u00b0\f\3\2\2\u00b0\u00b1\7\61\2\2\u00b1") - buf.write("\u00b2\5\20\t\2\u00b2\u00b3\7\62\2\2\u00b3\u00b4\5\20") - buf.write("\t\3\u00b4\u00c0\3\2\2\2\u00b5\u00b6\f\24\2\2\u00b6\u00b7") - buf.write("\7\"\2\2\u00b7\u00b8\5\20\t\2\u00b8\u00b9\7#\2\2\u00b9") - buf.write("\u00c0\3\2\2\2\u00ba\u00bb\f\23\2\2\u00bb\u00bc\7$\2\2") - buf.write("\u00bc\u00c0\7>\2\2\u00bd\u00be\f\b\2\2\u00be\u00c0\7") - buf.write("\'\2\2\u00bf\u008b\3\2\2\2\u00bf\u008e\3\2\2\2\u00bf\u0091") - buf.write("\3\2\2\2\u00bf\u0094\3\2\2\2\u00bf\u0097\3\2\2\2\u00bf") - buf.write("\u009a\3\2\2\2\u00bf\u009d\3\2\2\2\u00bf\u00a0\3\2\2\2") - buf.write("\u00bf\u00a3\3\2\2\2\u00bf\u00a6\3\2\2\2\u00bf\u00a9\3") - buf.write("\2\2\2\u00bf\u00ac\3\2\2\2\u00bf\u00af\3\2\2\2\u00bf\u00b5") - buf.write("\3\2\2\2\u00bf\u00ba\3\2\2\2\u00bf\u00bd\3\2\2\2\u00c0") - buf.write("\u00c3\3\2\2\2\u00c1\u00bf\3\2\2\2\u00c1\u00c2\3\2\2\2") - buf.write("\u00c2\21\3\2\2\2\u00c3\u00c1\3\2\2\2\u00c4\u00d8\7:\2") - buf.write("\2\u00c5\u00d8\7;\2\2\u00c6\u00d8\t\t\2\2\u00c7\u00d8") - buf.write("\7<\2\2\u00c8\u00d8\7=\2\2\u00c9\u00cf\7\"\2\2\u00ca\u00cb") - buf.write("\5\20\t\2\u00cb\u00cc\7\24\2\2\u00cc\u00ce\3\2\2\2\u00cd") - buf.write("\u00ca\3\2\2\2\u00ce\u00d1\3\2\2\2\u00cf\u00cd\3\2\2\2") - buf.write("\u00cf\u00d0\3\2\2\2\u00d0\u00d3\3\2\2\2\u00d1\u00cf\3") - buf.write("\2\2\2\u00d2\u00d4\5\20\t\2\u00d3\u00d2\3\2\2\2\u00d3") - buf.write("\u00d4\3\2\2\2\u00d4\u00d5\3\2\2\2\u00d5\u00d8\7#\2\2") - buf.write("\u00d6\u00d8\7>\2\2\u00d7\u00c4\3\2\2\2\u00d7\u00c5\3") - buf.write("\2\2\2\u00d7\u00c6\3\2\2\2\u00d7\u00c7\3\2\2\2\u00d7\u00c8") - buf.write("\3\2\2\2\u00d7\u00c9\3\2\2\2\u00d7\u00d6\3\2\2\2\u00d8") - buf.write("\23\3\2\2\2\u00d9\u00da\b\13\1\2\u00da\u00e4\7\65\2\2") - buf.write("\u00db\u00e4\7\66\2\2\u00dc\u00e4\7\67\2\2\u00dd\u00e4") - buf.write("\78\2\2\u00de\u00e4\79\2\2\u00df\u00e0\7\"\2\2\u00e0\u00e1") - buf.write("\5\24\13\2\u00e1\u00e2\7#\2\2\u00e2\u00e4\3\2\2\2\u00e3") - buf.write("\u00d9\3\2\2\2\u00e3\u00db\3\2\2\2\u00e3\u00dc\3\2\2\2") - buf.write("\u00e3\u00dd\3\2\2\2\u00e3\u00de\3\2\2\2\u00e3\u00df\3") - buf.write("\2\2\2\u00e4\u00ea\3\2\2\2\u00e5\u00e6\f\3\2\2\u00e6\u00e7") - buf.write("\7\b\2\2\u00e7\u00e9\5\24\13\3\u00e8\u00e5\3\2\2\2\u00e9") - buf.write("\u00ec\3\2\2\2\u00ea\u00e8\3\2\2\2\u00ea\u00eb\3\2\2\2") - buf.write("\u00eb\25\3\2\2\2\u00ec\u00ea\3\2\2\2\27\31\"\'-\64>E") - buf.write("QVfjqz\u0089\u00bf\u00c1\u00cf\u00d3\u00d7\u00e3\u00ea") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3D") + buf.write("\u0121\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\3\2") + buf.write("\7\2\34\n\2\f\2\16\2\37\13\2\3\2\3\2\3\3\3\3\3\3\3\3\5") + buf.write("\3\'\n\3\3\4\3\4\3\4\5\4,\n\4\3\4\3\4\3\4\3\4\5\4\62\n") + buf.write("\4\3\4\3\4\3\4\7\4\67\n\4\f\4\16\4:\13\4\3\4\3\4\3\4\3") + buf.write("\4\3\4\3\4\3\4\3\4\3\4\5\4E\n\4\5\4G\n\4\3\5\3\5\3\5\7") + buf.write("\5L\n\5\f\5\16\5O\13\5\3\6\3\6\3\6\3\6\3\6\3\6\3\6\7\6") + buf.write("X\n\6\f\6\16\6[\13\6\3\6\3\6\5\6_\n\6\3\6\3\6\3\6\3\6") + buf.write("\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\5\6o\n\6\3\6") + buf.write("\3\6\3\6\3\6\3\6\3\6\3\6\3\6\7\6y\n\6\f\6\16\6|\13\6\3") + buf.write("\6\5\6\177\n\6\3\6\3\6\5\6\u0083\n\6\3\6\5\6\u0086\n\6") + buf.write("\3\7\3\7\3\7\3\b\3\b\3\b\6\b\u008e\n\b\r\b\16\b\u008f") + buf.write("\3\b\3\b\3\t\3\t\3\t\6\t\u0097\n\t\r\t\16\t\u0098\3\t") + buf.write("\3\t\3\n\3\n\3\n\7\n\u00a0\n\n\f\n\16\n\u00a3\13\n\3\n") + buf.write("\3\n\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") + buf.write("\5\13\u00b1\n\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3") + buf.write("\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") + buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") + buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") + buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") + buf.write("\3\13\7\13\u00e7\n\13\f\13\16\13\u00ea\13\13\3\13\5\13") + buf.write("\u00ed\n\13\3\13\3\13\3\13\7\13\u00f2\n\13\f\13\16\13") + buf.write("\u00f5\13\13\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\7\f\u0100") + buf.write("\n\f\f\f\16\f\u0103\13\f\3\f\5\f\u0106\n\f\3\f\3\f\5\f") + buf.write("\u010a\n\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r") + buf.write("\5\r\u0117\n\r\3\r\3\r\3\r\7\r\u011c\n\r\f\r\16\r\u011f") + buf.write("\13\r\3\r\2\4\24\30\16\2\4\6\b\n\f\16\20\22\24\26\30\2") + buf.write("\13\3\2\7\21\3\2\22\23\4\2\13\f((\3\2\b\n\3\2\13\f\3\2") + buf.write("\r\16\3\2)*\3\2+\60\3\2\66\67\2\u0152\2\35\3\2\2\2\4&") + buf.write("\3\2\2\2\6F\3\2\2\2\bH\3\2\2\2\n\u0085\3\2\2\2\f\u0087") + buf.write("\3\2\2\2\16\u008a\3\2\2\2\20\u0093\3\2\2\2\22\u00a1\3") + buf.write("\2\2\2\24\u00b0\3\2\2\2\26\u0109\3\2\2\2\30\u0116\3\2") + buf.write("\2\2\32\34\5\4\3\2\33\32\3\2\2\2\34\37\3\2\2\2\35\33\3") + buf.write("\2\2\2\35\36\3\2\2\2\36 \3\2\2\2\37\35\3\2\2\2 !\7\2\2") + buf.write("\3!\3\3\2\2\2\"#\5\6\4\2#$\7\3\2\2$\'\3\2\2\2%\'\5\n\6") + buf.write("\2&\"\3\2\2\2&%\3\2\2\2\'\5\3\2\2\2(G\7\4\2\2)+\7\5\2") + buf.write("\2*,\5\22\n\2+*\3\2\2\2+,\3\2\2\2,G\3\2\2\2-.\5\30\r\2") + buf.write(".\61\7B\2\2/\60\7\6\2\2\60\62\5\22\n\2\61/\3\2\2\2\61") + buf.write("\62\3\2\2\2\62G\3\2\2\2\63\64\5\b\5\2\64\65\7\6\2\2\65") + buf.write("\67\3\2\2\2\66\63\3\2\2\2\67:\3\2\2\28\66\3\2\2\289\3") + buf.write("\2\2\29;\3\2\2\2:8\3\2\2\2;G\5\22\n\2<=\5\24\13\2=>\t") + buf.write("\2\2\2>?\7\6\2\2?@\5\24\13\2@G\3\2\2\2AG\t\3\2\2BD\7\24") + buf.write("\2\2CE\5\22\n\2DC\3\2\2\2DE\3\2\2\2EG\3\2\2\2F(\3\2\2") + buf.write("\2F)\3\2\2\2F-\3\2\2\2F8\3\2\2\2F<\3\2\2\2FA\3\2\2\2F") + buf.write("B\3\2\2\2G\7\3\2\2\2HM\5\24\13\2IJ\7\25\2\2JL\5\24\13") + buf.write("\2KI\3\2\2\2LO\3\2\2\2MK\3\2\2\2MN\3\2\2\2N\t\3\2\2\2") + buf.write("OM\3\2\2\2PQ\7\26\2\2QR\5\24\13\2RY\5\16\b\2ST\7\27\2") + buf.write("\2TU\5\24\13\2UV\5\16\b\2VX\3\2\2\2WS\3\2\2\2X[\3\2\2") + buf.write("\2YW\3\2\2\2YZ\3\2\2\2Z^\3\2\2\2[Y\3\2\2\2\\]\7\30\2\2") + buf.write("]_\5\16\b\2^\\\3\2\2\2^_\3\2\2\2_\u0086\3\2\2\2`a\7\31") + buf.write("\2\2ab\5\24\13\2bc\5\16\b\2c\u0086\3\2\2\2de\7\32\2\2") + buf.write("ef\5\24\13\2fg\5\16\b\2g\u0086\3\2\2\2hi\7\33\2\2ij\5") + buf.write("\22\n\2jk\7\34\2\2kn\5\22\n\2lm\7\35\2\2mo\5\22\n\2nl") + buf.write("\3\2\2\2no\3\2\2\2op\3\2\2\2pq\5\16\b\2q\u0086\3\2\2\2") + buf.write("rs\7\36\2\2st\7B\2\2tz\7\37\2\2uv\5\f\7\2vw\7\25\2\2w") + buf.write("y\3\2\2\2xu\3\2\2\2y|\3\2\2\2zx\3\2\2\2z{\3\2\2\2{~\3") + buf.write("\2\2\2|z\3\2\2\2}\177\5\f\7\2~}\3\2\2\2~\177\3\2\2\2\177") + buf.write("\u0080\3\2\2\2\u0080\u0082\7 \2\2\u0081\u0083\5\30\r\2") + buf.write("\u0082\u0081\3\2\2\2\u0082\u0083\3\2\2\2\u0083\u0084\3") + buf.write("\2\2\2\u0084\u0086\5\20\t\2\u0085P\3\2\2\2\u0085`\3\2") + buf.write("\2\2\u0085d\3\2\2\2\u0085h\3\2\2\2\u0085r\3\2\2\2\u0086") + buf.write("\13\3\2\2\2\u0087\u0088\5\30\r\2\u0088\u0089\7B\2\2\u0089") + buf.write("\r\3\2\2\2\u008a\u008b\7!\2\2\u008b\u008d\7\"\2\2\u008c") + buf.write("\u008e\5\4\3\2\u008d\u008c\3\2\2\2\u008e\u008f\3\2\2\2") + buf.write("\u008f\u008d\3\2\2\2\u008f\u0090\3\2\2\2\u0090\u0091\3") + buf.write("\2\2\2\u0091\u0092\7#\2\2\u0092\17\3\2\2\2\u0093\u0094") + buf.write("\7$\2\2\u0094\u0096\7\"\2\2\u0095\u0097\5\4\3\2\u0096") + buf.write("\u0095\3\2\2\2\u0097\u0098\3\2\2\2\u0098\u0096\3\2\2\2") + buf.write("\u0098\u0099\3\2\2\2\u0099\u009a\3\2\2\2\u009a\u009b\7") + buf.write("#\2\2\u009b\21\3\2\2\2\u009c\u009d\5\24\13\2\u009d\u009e") + buf.write("\7\25\2\2\u009e\u00a0\3\2\2\2\u009f\u009c\3\2\2\2\u00a0") + buf.write("\u00a3\3\2\2\2\u00a1\u009f\3\2\2\2\u00a1\u00a2\3\2\2\2") + buf.write("\u00a2\u00a4\3\2\2\2\u00a3\u00a1\3\2\2\2\u00a4\u00a5\5") + buf.write("\24\13\2\u00a5\23\3\2\2\2\u00a6\u00a7\b\13\1\2\u00a7\u00b1") + buf.write("\5\26\f\2\u00a8\u00a9\7\37\2\2\u00a9\u00aa\5\22\n\2\u00aa") + buf.write("\u00ab\7 \2\2\u00ab\u00b1\3\2\2\2\u00ac\u00ad\t\4\2\2") + buf.write("\u00ad\u00b1\5\24\13\20\u00ae\u00af\7\61\2\2\u00af\u00b1") + buf.write("\5\24\13\6\u00b0\u00a6\3\2\2\2\u00b0\u00a8\3\2\2\2\u00b0") + buf.write("\u00ac\3\2\2\2\u00b0\u00ae\3\2\2\2\u00b1\u00f3\3\2\2\2") + buf.write("\u00b2\u00b3\f\21\2\2\u00b3\u00b4\7\7\2\2\u00b4\u00f2") + buf.write("\5\24\13\21\u00b5\u00b6\f\17\2\2\u00b6\u00b7\t\5\2\2\u00b7") + buf.write("\u00f2\5\24\13\20\u00b8\u00b9\f\16\2\2\u00b9\u00ba\t\6") + buf.write("\2\2\u00ba\u00f2\5\24\13\17\u00bb\u00bc\f\r\2\2\u00bc") + buf.write("\u00bd\t\7\2\2\u00bd\u00f2\5\24\13\16\u00be\u00bf\f\f") + buf.write("\2\2\u00bf\u00c0\7\17\2\2\u00c0\u00f2\5\24\13\r\u00c1") + buf.write("\u00c2\f\13\2\2\u00c2\u00c3\7\20\2\2\u00c3\u00f2\5\24") + buf.write("\13\f\u00c4\u00c5\f\n\2\2\u00c5\u00c6\7\21\2\2\u00c6\u00f2") + buf.write("\5\24\13\13\u00c7\u00c8\f\t\2\2\u00c8\u00c9\t\b\2\2\u00c9") + buf.write("\u00f2\5\24\13\n\u00ca\u00cb\f\7\2\2\u00cb\u00cc\t\t\2") + buf.write("\2\u00cc\u00f2\5\24\13\7\u00cd\u00ce\f\5\2\2\u00ce\u00cf") + buf.write("\7\62\2\2\u00cf\u00f2\5\24\13\5\u00d0\u00d1\f\4\2\2\u00d1") + buf.write("\u00d2\7\63\2\2\u00d2\u00f2\5\24\13\4\u00d3\u00d4\f\3") + buf.write("\2\2\u00d4\u00d5\7\64\2\2\u00d5\u00d6\5\24\13\2\u00d6") + buf.write("\u00d7\7\65\2\2\u00d7\u00d8\5\24\13\3\u00d8\u00f2\3\2") + buf.write("\2\2\u00d9\u00da\f\24\2\2\u00da\u00db\7%\2\2\u00db\u00dc") + buf.write("\5\24\13\2\u00dc\u00dd\7&\2\2\u00dd\u00f2\3\2\2\2\u00de") + buf.write("\u00df\f\23\2\2\u00df\u00e0\7\'\2\2\u00e0\u00f2\7B\2\2") + buf.write("\u00e1\u00e2\f\22\2\2\u00e2\u00e8\7\37\2\2\u00e3\u00e4") + buf.write("\5\24\13\2\u00e4\u00e5\7\25\2\2\u00e5\u00e7\3\2\2\2\u00e6") + buf.write("\u00e3\3\2\2\2\u00e7\u00ea\3\2\2\2\u00e8\u00e6\3\2\2\2") + buf.write("\u00e8\u00e9\3\2\2\2\u00e9\u00ec\3\2\2\2\u00ea\u00e8\3") + buf.write("\2\2\2\u00eb\u00ed\5\24\13\2\u00ec\u00eb\3\2\2\2\u00ec") + buf.write("\u00ed\3\2\2\2\u00ed\u00ee\3\2\2\2\u00ee\u00f2\7 \2\2") + buf.write("\u00ef\u00f0\f\b\2\2\u00f0\u00f2\7*\2\2\u00f1\u00b2\3") + buf.write("\2\2\2\u00f1\u00b5\3\2\2\2\u00f1\u00b8\3\2\2\2\u00f1\u00bb") + buf.write("\3\2\2\2\u00f1\u00be\3\2\2\2\u00f1\u00c1\3\2\2\2\u00f1") + buf.write("\u00c4\3\2\2\2\u00f1\u00c7\3\2\2\2\u00f1\u00ca\3\2\2\2") + buf.write("\u00f1\u00cd\3\2\2\2\u00f1\u00d0\3\2\2\2\u00f1\u00d3\3") + buf.write("\2\2\2\u00f1\u00d9\3\2\2\2\u00f1\u00de\3\2\2\2\u00f1\u00e1") + buf.write("\3\2\2\2\u00f1\u00ef\3\2\2\2\u00f2\u00f5\3\2\2\2\u00f3") + buf.write("\u00f1\3\2\2\2\u00f3\u00f4\3\2\2\2\u00f4\25\3\2\2\2\u00f5") + buf.write("\u00f3\3\2\2\2\u00f6\u010a\7>\2\2\u00f7\u010a\7?\2\2\u00f8") + buf.write("\u010a\t\n\2\2\u00f9\u010a\7@\2\2\u00fa\u010a\7A\2\2\u00fb") + buf.write("\u0101\7%\2\2\u00fc\u00fd\5\24\13\2\u00fd\u00fe\7\25\2") + buf.write("\2\u00fe\u0100\3\2\2\2\u00ff\u00fc\3\2\2\2\u0100\u0103") + buf.write("\3\2\2\2\u0101\u00ff\3\2\2\2\u0101\u0102\3\2\2\2\u0102") + buf.write("\u0105\3\2\2\2\u0103\u0101\3\2\2\2\u0104\u0106\5\24\13") + buf.write("\2\u0105\u0104\3\2\2\2\u0105\u0106\3\2\2\2\u0106\u0107") + buf.write("\3\2\2\2\u0107\u010a\7&\2\2\u0108\u010a\7B\2\2\u0109\u00f6") + buf.write("\3\2\2\2\u0109\u00f7\3\2\2\2\u0109\u00f8\3\2\2\2\u0109") + buf.write("\u00f9\3\2\2\2\u0109\u00fa\3\2\2\2\u0109\u00fb\3\2\2\2") + buf.write("\u0109\u0108\3\2\2\2\u010a\27\3\2\2\2\u010b\u010c\b\r") + buf.write("\1\2\u010c\u0117\78\2\2\u010d\u0117\79\2\2\u010e\u0117") + buf.write("\7:\2\2\u010f\u0117\7;\2\2\u0110\u0117\7<\2\2\u0111\u0117") + buf.write("\7=\2\2\u0112\u0113\7%\2\2\u0113\u0114\5\30\r\2\u0114") + buf.write("\u0115\7&\2\2\u0115\u0117\3\2\2\2\u0116\u010b\3\2\2\2") + buf.write("\u0116\u010d\3\2\2\2\u0116\u010e\3\2\2\2\u0116\u010f\3") + buf.write("\2\2\2\u0116\u0110\3\2\2\2\u0116\u0111\3\2\2\2\u0116\u0112") + buf.write("\3\2\2\2\u0117\u011d\3\2\2\2\u0118\u0119\f\3\2\2\u0119") + buf.write("\u011a\7\b\2\2\u011a\u011c\5\30\r\3\u011b\u0118\3\2\2") + buf.write("\2\u011c\u011f\3\2\2\2\u011d\u011b\3\2\2\2\u011d\u011e") + buf.write("\3\2\2\2\u011e\31\3\2\2\2\u011f\u011d\3\2\2\2\36\35&+") + buf.write("\618DFMY^nz~\u0082\u0085\u008f\u0098\u00a1\u00b0\u00e8") + buf.write("\u00ec\u00f1\u00f3\u0101\u0105\u0109\u0116\u011d") return buf.getvalue() @@ -128,13 +158,14 @@ class PyxellParser ( Parser ): literalNames = [ "", "';'", "'skip'", "'print'", "'='", "'^'", "'*'", "'/'", "'%'", "'+'", "'-'", "'<<'", "'>>'", - "'&'", "'$'", "'|'", "'break'", "'continue'", "','", - "'if'", "'elif'", "'else'", "'while'", "'until'", "'for'", - "'in'", "'step'", "'do'", "'{'", "'}'", "'('", "')'", - "'['", "']'", "'.'", "'~'", "'..'", "'...'", "'=='", - "'!='", "'<'", "'<='", "'>'", "'>='", "'not'", "'and'", - "'or'", "'?'", "':'", "'true'", "'false'", "'Int'", - "'Float'", "'Bool'", "'Char'", "'String'" ] + "'&'", "'$'", "'|'", "'break'", "'continue'", "'return'", + "','", "'if'", "'elif'", "'else'", "'while'", "'until'", + "'for'", "'in'", "'step'", "'func'", "'('", "')'", + "'do'", "'{'", "'}'", "'def'", "'['", "']'", "'.'", + "'~'", "'..'", "'...'", "'=='", "'!='", "'<'", "'<='", + "'>'", "'>='", "'not'", "'and'", "'or'", "'?'", "':'", + "'true'", "'false'", "'Void'", "'Int'", "'Float'", + "'Bool'", "'Char'", "'String'" ] symbolicNames = [ "", "", "", "", "", "", "", "", @@ -150,6 +181,7 @@ class PyxellParser ( Parser ): "", "", "", "", "", "", "", "", "", "", "", "", + "", "", "", "", "INT", "FLOAT", "CHAR", "STRING", "ID", "WS", "ERR" ] RULE_program = 0 @@ -157,14 +189,17 @@ class PyxellParser ( Parser ): RULE_simple_stmt = 2 RULE_lvalue = 3 RULE_compound_stmt = 4 - RULE_block = 5 - RULE_tuple_expr = 6 - RULE_expr = 7 - RULE_atom = 8 - RULE_typ = 9 + RULE_arg = 5 + RULE_do_block = 6 + RULE_def_block = 7 + RULE_tuple_expr = 8 + RULE_expr = 9 + RULE_atom = 10 + RULE_typ = 11 ruleNames = [ "program", "stmt", "simple_stmt", "lvalue", "compound_stmt", - "block", "tuple_expr", "expr", "atom", "typ" ] + "arg", "do_block", "def_block", "tuple_expr", "expr", + "atom", "typ" ] EOF = Token.EOF T__0=1 @@ -222,13 +257,17 @@ class PyxellParser ( Parser ): T__52=53 T__53=54 T__54=55 - INT=56 - FLOAT=57 - CHAR=58 - STRING=59 - ID=60 - WS=61 - ERR=62 + T__55=56 + T__56=57 + T__57=58 + T__58=59 + INT=60 + FLOAT=61 + CHAR=62 + STRING=63 + ID=64 + WS=65 + ERR=66 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -274,17 +313,17 @@ def program(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 23 + self.state = 27 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__18) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__31) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__49) | (1 << PyxellParser.T__50) | (1 << PyxellParser.T__51) | (1 << PyxellParser.T__52) | (1 << PyxellParser.T__53) | (1 << PyxellParser.T__54) | (1 << PyxellParser.INT) | (1 << PyxellParser.FLOAT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): - self.state = 20 + while ((((_la - 2)) & ~0x3f) == 0 and ((1 << (_la - 2)) & ((1 << (PyxellParser.T__1 - 2)) | (1 << (PyxellParser.T__2 - 2)) | (1 << (PyxellParser.T__8 - 2)) | (1 << (PyxellParser.T__9 - 2)) | (1 << (PyxellParser.T__15 - 2)) | (1 << (PyxellParser.T__16 - 2)) | (1 << (PyxellParser.T__17 - 2)) | (1 << (PyxellParser.T__19 - 2)) | (1 << (PyxellParser.T__22 - 2)) | (1 << (PyxellParser.T__23 - 2)) | (1 << (PyxellParser.T__24 - 2)) | (1 << (PyxellParser.T__27 - 2)) | (1 << (PyxellParser.T__28 - 2)) | (1 << (PyxellParser.T__34 - 2)) | (1 << (PyxellParser.T__37 - 2)) | (1 << (PyxellParser.T__46 - 2)) | (1 << (PyxellParser.T__51 - 2)) | (1 << (PyxellParser.T__52 - 2)) | (1 << (PyxellParser.T__53 - 2)) | (1 << (PyxellParser.T__54 - 2)) | (1 << (PyxellParser.T__55 - 2)) | (1 << (PyxellParser.T__56 - 2)) | (1 << (PyxellParser.T__57 - 2)) | (1 << (PyxellParser.T__58 - 2)) | (1 << (PyxellParser.INT - 2)) | (1 << (PyxellParser.FLOAT - 2)) | (1 << (PyxellParser.CHAR - 2)) | (1 << (PyxellParser.STRING - 2)) | (1 << (PyxellParser.ID - 2)))) != 0): + self.state = 24 self.stmt() - self.state = 25 + self.state = 29 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 26 + self.state = 30 self.match(PyxellParser.EOF) except RecognitionException as re: localctx.exception = re @@ -326,19 +365,19 @@ def stmt(self): localctx = PyxellParser.StmtContext(self, self._ctx, self.state) self.enterRule(localctx, 2, self.RULE_stmt) try: - self.state = 32 + self.state = 36 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__15, PyxellParser.T__16, PyxellParser.T__29, PyxellParser.T__31, PyxellParser.T__34, PyxellParser.T__43, PyxellParser.T__48, PyxellParser.T__49, PyxellParser.T__50, PyxellParser.T__51, PyxellParser.T__52, PyxellParser.T__53, PyxellParser.T__54, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: + if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__15, PyxellParser.T__16, PyxellParser.T__17, PyxellParser.T__28, PyxellParser.T__34, PyxellParser.T__37, PyxellParser.T__46, PyxellParser.T__51, PyxellParser.T__52, PyxellParser.T__53, PyxellParser.T__54, PyxellParser.T__55, PyxellParser.T__56, PyxellParser.T__57, PyxellParser.T__58, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: self.enterOuterAlt(localctx, 1) - self.state = 28 + self.state = 32 self.simple_stmt() - self.state = 29 + self.state = 33 self.match(PyxellParser.T__0) pass - elif token in [PyxellParser.T__18, PyxellParser.T__21, PyxellParser.T__22, PyxellParser.T__23]: + elif token in [PyxellParser.T__19, PyxellParser.T__22, PyxellParser.T__23, PyxellParser.T__24, PyxellParser.T__27]: self.enterOuterAlt(localctx, 2) - self.state = 31 + self.state = 35 self.compound_stmt() pass else: @@ -369,6 +408,23 @@ def copyFrom(self, ctx:ParserRuleContext): + class StmtReturnContext(Simple_stmtContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Simple_stmtContext + super().__init__(parser) + self.copyFrom(ctx) + + def tuple_expr(self): + return self.getTypedRuleContext(PyxellParser.Tuple_exprContext,0) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStmtReturn" ): + return visitor.visitStmtReturn(self) + else: + return visitor.visitChildren(self) + + class StmtDeclContext(Simple_stmtContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Simple_stmtContext @@ -488,26 +544,26 @@ def simple_stmt(self): self.enterRule(localctx, 4, self.RULE_simple_stmt) self._la = 0 # Token type try: - self.state = 60 + self.state = 68 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,5,self._ctx) + la_ = self._interp.adaptivePredict(self._input,6,self._ctx) if la_ == 1: localctx = PyxellParser.StmtSkipContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 34 + self.state = 38 self.match(PyxellParser.T__1) pass elif la_ == 2: localctx = PyxellParser.StmtPrintContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 35 + self.state = 39 self.match(PyxellParser.T__2) - self.state = 37 + self.state = 41 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__31) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__49) | (1 << PyxellParser.INT) | (1 << PyxellParser.FLOAT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): - self.state = 36 + if ((((_la - 9)) & ~0x3f) == 0 and ((1 << (_la - 9)) & ((1 << (PyxellParser.T__8 - 9)) | (1 << (PyxellParser.T__9 - 9)) | (1 << (PyxellParser.T__28 - 9)) | (1 << (PyxellParser.T__34 - 9)) | (1 << (PyxellParser.T__37 - 9)) | (1 << (PyxellParser.T__46 - 9)) | (1 << (PyxellParser.T__51 - 9)) | (1 << (PyxellParser.T__52 - 9)) | (1 << (PyxellParser.INT - 9)) | (1 << (PyxellParser.FLOAT - 9)) | (1 << (PyxellParser.CHAR - 9)) | (1 << (PyxellParser.STRING - 9)) | (1 << (PyxellParser.ID - 9)))) != 0): + self.state = 40 self.tuple_expr() @@ -516,17 +572,17 @@ def simple_stmt(self): elif la_ == 3: localctx = PyxellParser.StmtDeclContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 39 + self.state = 43 self.typ(0) - self.state = 40 + self.state = 44 self.match(PyxellParser.ID) - self.state = 43 + self.state = 47 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__3: - self.state = 41 + self.state = 45 self.match(PyxellParser.T__3) - self.state = 42 + self.state = 46 self.tuple_expr() @@ -535,29 +591,29 @@ def simple_stmt(self): elif la_ == 4: localctx = PyxellParser.StmtAssgContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 50 + self.state = 54 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,4,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 45 + self.state = 49 self.lvalue() - self.state = 46 + self.state = 50 self.match(PyxellParser.T__3) - self.state = 52 + self.state = 56 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,4,self._ctx) - self.state = 53 + self.state = 57 self.tuple_expr() pass elif la_ == 5: localctx = PyxellParser.StmtAssgExprContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 54 + self.state = 58 self.expr(0) - self.state = 55 + self.state = 59 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__4) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__7) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__11) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__14))) != 0)): @@ -565,16 +621,16 @@ def simple_stmt(self): else: self._errHandler.reportMatch(self) self.consume() - self.state = 56 + self.state = 60 self.match(PyxellParser.T__3) - self.state = 57 + self.state = 61 self.expr(0) pass elif la_ == 6: localctx = PyxellParser.StmtLoopControlContext(self, localctx) self.enterOuterAlt(localctx, 6) - self.state = 59 + self.state = 63 localctx.s = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__15 or _la==PyxellParser.T__16): @@ -584,6 +640,21 @@ def simple_stmt(self): self.consume() pass + elif la_ == 7: + localctx = PyxellParser.StmtReturnContext(self, localctx) + self.enterOuterAlt(localctx, 7) + self.state = 64 + self.match(PyxellParser.T__17) + self.state = 66 + self._errHandler.sync(self) + _la = self._input.LA(1) + if ((((_la - 9)) & ~0x3f) == 0 and ((1 << (_la - 9)) & ((1 << (PyxellParser.T__8 - 9)) | (1 << (PyxellParser.T__9 - 9)) | (1 << (PyxellParser.T__28 - 9)) | (1 << (PyxellParser.T__34 - 9)) | (1 << (PyxellParser.T__37 - 9)) | (1 << (PyxellParser.T__46 - 9)) | (1 << (PyxellParser.T__51 - 9)) | (1 << (PyxellParser.T__52 - 9)) | (1 << (PyxellParser.INT - 9)) | (1 << (PyxellParser.FLOAT - 9)) | (1 << (PyxellParser.CHAR - 9)) | (1 << (PyxellParser.STRING - 9)) | (1 << (PyxellParser.ID - 9)))) != 0): + self.state = 65 + self.tuple_expr() + + + pass + except RecognitionException as re: localctx.exception = re @@ -626,17 +697,17 @@ def lvalue(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 62 + self.state = 70 self.expr(0) - self.state = 67 + self.state = 75 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==PyxellParser.T__17: - self.state = 63 - self.match(PyxellParser.T__17) - self.state = 64 + while _la==PyxellParser.T__18: + self.state = 71 + self.match(PyxellParser.T__18) + self.state = 72 self.expr(0) - self.state = 69 + self.state = 77 self._errHandler.sync(self) _la = self._input.LA(1) @@ -665,6 +736,35 @@ def copyFrom(self, ctx:ParserRuleContext): + class StmtFuncContext(Compound_stmtContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Compound_stmtContext + super().__init__(parser) + self.ret = None # TypContext + self.copyFrom(ctx) + + def ID(self): + return self.getToken(PyxellParser.ID, 0) + def def_block(self): + return self.getTypedRuleContext(PyxellParser.Def_blockContext,0) + + def arg(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(PyxellParser.ArgContext) + else: + return self.getTypedRuleContext(PyxellParser.ArgContext,i) + + def typ(self): + return self.getTypedRuleContext(PyxellParser.TypContext,0) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStmtFunc" ): + return visitor.visitStmtFunc(self) + else: + return visitor.visitChildren(self) + + class StmtWhileContext(Compound_stmtContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Compound_stmtContext @@ -674,8 +774,8 @@ def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Com def expr(self): return self.getTypedRuleContext(PyxellParser.ExprContext,0) - def block(self): - return self.getTypedRuleContext(PyxellParser.BlockContext,0) + def do_block(self): + return self.getTypedRuleContext(PyxellParser.Do_blockContext,0) def accept(self, visitor:ParseTreeVisitor): @@ -694,8 +794,8 @@ def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Com def expr(self): return self.getTypedRuleContext(PyxellParser.ExprContext,0) - def block(self): - return self.getTypedRuleContext(PyxellParser.BlockContext,0) + def do_block(self): + return self.getTypedRuleContext(PyxellParser.Do_blockContext,0) def accept(self, visitor:ParseTreeVisitor): @@ -718,8 +818,8 @@ def tuple_expr(self, i:int=None): else: return self.getTypedRuleContext(PyxellParser.Tuple_exprContext,i) - def block(self): - return self.getTypedRuleContext(PyxellParser.BlockContext,0) + def do_block(self): + return self.getTypedRuleContext(PyxellParser.Do_blockContext,0) def accept(self, visitor:ParseTreeVisitor): @@ -741,11 +841,11 @@ def expr(self, i:int=None): else: return self.getTypedRuleContext(PyxellParser.ExprContext,i) - def block(self, i:int=None): + def do_block(self, i:int=None): if i is None: - return self.getTypedRuleContexts(PyxellParser.BlockContext) + return self.getTypedRuleContexts(PyxellParser.Do_blockContext) else: - return self.getTypedRuleContext(PyxellParser.BlockContext,i) + return self.getTypedRuleContext(PyxellParser.Do_blockContext,i) def accept(self, visitor:ParseTreeVisitor): @@ -762,86 +862,129 @@ def compound_stmt(self): self.enterRule(localctx, 8, self.RULE_compound_stmt) self._la = 0 # Token type try: - self.state = 104 + self.state = 131 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__18]: + if token in [PyxellParser.T__19]: localctx = PyxellParser.StmtIfContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 70 - self.match(PyxellParser.T__18) - self.state = 71 - self.expr(0) - self.state = 72 - self.block() + self.state = 78 + self.match(PyxellParser.T__19) self.state = 79 + self.expr(0) + self.state = 80 + self.do_block() + self.state = 87 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==PyxellParser.T__19: - self.state = 73 - self.match(PyxellParser.T__19) - self.state = 74 - self.expr(0) - self.state = 75 - self.block() + while _la==PyxellParser.T__20: self.state = 81 + self.match(PyxellParser.T__20) + self.state = 82 + self.expr(0) + self.state = 83 + self.do_block() + self.state = 89 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 84 + self.state = 92 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__20: - self.state = 82 - self.match(PyxellParser.T__20) - self.state = 83 - self.block() + if _la==PyxellParser.T__21: + self.state = 90 + self.match(PyxellParser.T__21) + self.state = 91 + self.do_block() pass - elif token in [PyxellParser.T__21]: + elif token in [PyxellParser.T__22]: localctx = PyxellParser.StmtWhileContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 86 - self.match(PyxellParser.T__21) - self.state = 87 + self.state = 94 + self.match(PyxellParser.T__22) + self.state = 95 self.expr(0) - self.state = 88 - self.block() + self.state = 96 + self.do_block() pass - elif token in [PyxellParser.T__22]: + elif token in [PyxellParser.T__23]: localctx = PyxellParser.StmtUntilContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 90 - self.match(PyxellParser.T__22) - self.state = 91 + self.state = 98 + self.match(PyxellParser.T__23) + self.state = 99 self.expr(0) - self.state = 92 - self.block() + self.state = 100 + self.do_block() pass - elif token in [PyxellParser.T__23]: + elif token in [PyxellParser.T__24]: localctx = PyxellParser.StmtForContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 94 - self.match(PyxellParser.T__23) - self.state = 95 - self.tuple_expr() - self.state = 96 + self.state = 102 self.match(PyxellParser.T__24) - self.state = 97 + self.state = 103 self.tuple_expr() - self.state = 100 + self.state = 104 + self.match(PyxellParser.T__25) + self.state = 105 + self.tuple_expr() + self.state = 108 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__25: - self.state = 98 - self.match(PyxellParser.T__25) - self.state = 99 + if _la==PyxellParser.T__26: + self.state = 106 + self.match(PyxellParser.T__26) + self.state = 107 localctx.step = self.tuple_expr() - self.state = 102 - self.block() + self.state = 110 + self.do_block() + pass + elif token in [PyxellParser.T__27]: + localctx = PyxellParser.StmtFuncContext(self, localctx) + self.enterOuterAlt(localctx, 5) + self.state = 112 + self.match(PyxellParser.T__27) + self.state = 113 + self.match(PyxellParser.ID) + self.state = 114 + self.match(PyxellParser.T__28) + self.state = 120 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,11,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 115 + self.arg() + self.state = 116 + self.match(PyxellParser.T__18) + self.state = 122 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,11,self._ctx) + + self.state = 124 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__34) | (1 << PyxellParser.T__53) | (1 << PyxellParser.T__54) | (1 << PyxellParser.T__55) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58))) != 0): + self.state = 123 + self.arg() + + + self.state = 126 + self.match(PyxellParser.T__29) + self.state = 128 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__34) | (1 << PyxellParser.T__53) | (1 << PyxellParser.T__54) | (1 << PyxellParser.T__55) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58))) != 0): + self.state = 127 + localctx.ret = self.typ(0) + + + self.state = 130 + self.def_block() pass else: raise NoViableAltException(self) @@ -855,7 +998,51 @@ def compound_stmt(self): return localctx - class BlockContext(ParserRuleContext): + class ArgContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def typ(self): + return self.getTypedRuleContext(PyxellParser.TypContext,0) + + + def ID(self): + return self.getToken(PyxellParser.ID, 0) + + def getRuleIndex(self): + return PyxellParser.RULE_arg + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitArg" ): + return visitor.visitArg(self) + else: + return visitor.visitChildren(self) + + + + + def arg(self): + + localctx = PyxellParser.ArgContext(self, self._ctx, self.state) + self.enterRule(localctx, 10, self.RULE_arg) + try: + self.enterOuterAlt(localctx, 1) + self.state = 133 + self.typ(0) + self.state = 134 + self.match(PyxellParser.ID) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class Do_blockContext(ParserRuleContext): def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -869,42 +1056,101 @@ def stmt(self, i:int=None): def getRuleIndex(self): - return PyxellParser.RULE_block + return PyxellParser.RULE_do_block def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitBlock" ): - return visitor.visitBlock(self) + if hasattr( visitor, "visitDo_block" ): + return visitor.visitDo_block(self) else: return visitor.visitChildren(self) - def block(self): + def do_block(self): - localctx = PyxellParser.BlockContext(self, self._ctx, self.state) - self.enterRule(localctx, 10, self.RULE_block) + localctx = PyxellParser.Do_blockContext(self, self._ctx, self.state) + self.enterRule(localctx, 12, self.RULE_do_block) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 106 - self.match(PyxellParser.T__26) - self.state = 107 - self.match(PyxellParser.T__27) - self.state = 109 + self.state = 136 + self.match(PyxellParser.T__30) + self.state = 137 + self.match(PyxellParser.T__31) + self.state = 139 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 108 + self.state = 138 + self.stmt() + self.state = 141 + self._errHandler.sync(self) + _la = self._input.LA(1) + if not (((((_la - 2)) & ~0x3f) == 0 and ((1 << (_la - 2)) & ((1 << (PyxellParser.T__1 - 2)) | (1 << (PyxellParser.T__2 - 2)) | (1 << (PyxellParser.T__8 - 2)) | (1 << (PyxellParser.T__9 - 2)) | (1 << (PyxellParser.T__15 - 2)) | (1 << (PyxellParser.T__16 - 2)) | (1 << (PyxellParser.T__17 - 2)) | (1 << (PyxellParser.T__19 - 2)) | (1 << (PyxellParser.T__22 - 2)) | (1 << (PyxellParser.T__23 - 2)) | (1 << (PyxellParser.T__24 - 2)) | (1 << (PyxellParser.T__27 - 2)) | (1 << (PyxellParser.T__28 - 2)) | (1 << (PyxellParser.T__34 - 2)) | (1 << (PyxellParser.T__37 - 2)) | (1 << (PyxellParser.T__46 - 2)) | (1 << (PyxellParser.T__51 - 2)) | (1 << (PyxellParser.T__52 - 2)) | (1 << (PyxellParser.T__53 - 2)) | (1 << (PyxellParser.T__54 - 2)) | (1 << (PyxellParser.T__55 - 2)) | (1 << (PyxellParser.T__56 - 2)) | (1 << (PyxellParser.T__57 - 2)) | (1 << (PyxellParser.T__58 - 2)) | (1 << (PyxellParser.INT - 2)) | (1 << (PyxellParser.FLOAT - 2)) | (1 << (PyxellParser.CHAR - 2)) | (1 << (PyxellParser.STRING - 2)) | (1 << (PyxellParser.ID - 2)))) != 0)): + break + + self.state = 143 + self.match(PyxellParser.T__32) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class Def_blockContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def stmt(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(PyxellParser.StmtContext) + else: + return self.getTypedRuleContext(PyxellParser.StmtContext,i) + + + def getRuleIndex(self): + return PyxellParser.RULE_def_block + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitDef_block" ): + return visitor.visitDef_block(self) + else: + return visitor.visitChildren(self) + + + + + def def_block(self): + + localctx = PyxellParser.Def_blockContext(self, self._ctx, self.state) + self.enterRule(localctx, 14, self.RULE_def_block) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 145 + self.match(PyxellParser.T__33) + self.state = 146 + self.match(PyxellParser.T__31) + self.state = 148 + self._errHandler.sync(self) + _la = self._input.LA(1) + while True: + self.state = 147 self.stmt() - self.state = 111 + self.state = 150 self._errHandler.sync(self) _la = self._input.LA(1) - if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__18) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__31) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__49) | (1 << PyxellParser.T__50) | (1 << PyxellParser.T__51) | (1 << PyxellParser.T__52) | (1 << PyxellParser.T__53) | (1 << PyxellParser.T__54) | (1 << PyxellParser.INT) | (1 << PyxellParser.FLOAT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0)): + if not (((((_la - 2)) & ~0x3f) == 0 and ((1 << (_la - 2)) & ((1 << (PyxellParser.T__1 - 2)) | (1 << (PyxellParser.T__2 - 2)) | (1 << (PyxellParser.T__8 - 2)) | (1 << (PyxellParser.T__9 - 2)) | (1 << (PyxellParser.T__15 - 2)) | (1 << (PyxellParser.T__16 - 2)) | (1 << (PyxellParser.T__17 - 2)) | (1 << (PyxellParser.T__19 - 2)) | (1 << (PyxellParser.T__22 - 2)) | (1 << (PyxellParser.T__23 - 2)) | (1 << (PyxellParser.T__24 - 2)) | (1 << (PyxellParser.T__27 - 2)) | (1 << (PyxellParser.T__28 - 2)) | (1 << (PyxellParser.T__34 - 2)) | (1 << (PyxellParser.T__37 - 2)) | (1 << (PyxellParser.T__46 - 2)) | (1 << (PyxellParser.T__51 - 2)) | (1 << (PyxellParser.T__52 - 2)) | (1 << (PyxellParser.T__53 - 2)) | (1 << (PyxellParser.T__54 - 2)) | (1 << (PyxellParser.T__55 - 2)) | (1 << (PyxellParser.T__56 - 2)) | (1 << (PyxellParser.T__57 - 2)) | (1 << (PyxellParser.T__58 - 2)) | (1 << (PyxellParser.INT - 2)) | (1 << (PyxellParser.FLOAT - 2)) | (1 << (PyxellParser.CHAR - 2)) | (1 << (PyxellParser.STRING - 2)) | (1 << (PyxellParser.ID - 2)))) != 0)): break - self.state = 113 - self.match(PyxellParser.T__28) + self.state = 152 + self.match(PyxellParser.T__32) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -954,24 +1200,24 @@ def accept(self, visitor:ParseTreeVisitor): def tuple_expr(self): localctx = PyxellParser.Tuple_exprContext(self, self._ctx, self.state) - self.enterRule(localctx, 12, self.RULE_tuple_expr) + self.enterRule(localctx, 16, self.RULE_tuple_expr) try: localctx = PyxellParser.ExprTupleContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 120 + self.state = 159 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,12,self._ctx) + _alt = self._interp.adaptivePredict(self._input,17,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 115 + self.state = 154 self.expr(0) - self.state = 116 - self.match(PyxellParser.T__17) - self.state = 122 + self.state = 155 + self.match(PyxellParser.T__18) + self.state = 161 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,12,self._ctx) + _alt = self._interp.adaptivePredict(self._input,17,self._ctx) - self.state = 123 + self.state = 162 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -1015,6 +1261,26 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) + class ExprCallContext(ExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext + super().__init__(parser) + self.copyFrom(ctx) + + def expr(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(PyxellParser.ExprContext) + else: + return self.getTypedRuleContext(PyxellParser.ExprContext,i) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExprCall" ): + return visitor.visitExprCall(self) + else: + return visitor.visitChildren(self) + + class ExprCmpContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext @@ -1198,93 +1464,93 @@ def expr(self, _p:int=0): _parentState = self.state localctx = PyxellParser.ExprContext(self, self._ctx, _parentState) _prevctx = localctx - _startState = 14 - self.enterRecursionRule(localctx, 14, self.RULE_expr, _p) + _startState = 18 + self.enterRecursionRule(localctx, 18, self.RULE_expr, _p) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 135 + self.state = 174 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__31, PyxellParser.T__48, PyxellParser.T__49, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: + if token in [PyxellParser.T__34, PyxellParser.T__51, PyxellParser.T__52, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: localctx = PyxellParser.ExprAtomContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 126 + self.state = 165 self.atom() pass - elif token in [PyxellParser.T__29]: + elif token in [PyxellParser.T__28]: localctx = PyxellParser.ExprParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 127 - self.match(PyxellParser.T__29) - self.state = 128 + self.state = 166 + self.match(PyxellParser.T__28) + self.state = 167 self.tuple_expr() - self.state = 129 - self.match(PyxellParser.T__30) + self.state = 168 + self.match(PyxellParser.T__29) pass - elif token in [PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__34]: + elif token in [PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__37]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 131 + self.state = 170 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__34))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__37))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 132 - self.expr(15) + self.state = 171 + self.expr(14) pass - elif token in [PyxellParser.T__43]: + elif token in [PyxellParser.T__46]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 133 - localctx.op = self.match(PyxellParser.T__43) - self.state = 134 + self.state = 172 + localctx.op = self.match(PyxellParser.T__46) + self.state = 173 self.expr(4) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 191 + self.state = 241 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,15,self._ctx) + _alt = self._interp.adaptivePredict(self._input,22,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 189 + self.state = 239 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,14,self._ctx) + la_ = self._interp.adaptivePredict(self._input,21,self._ctx) if la_ == 1: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 137 - if not self.precpred(self._ctx, 16): + self.state = 176 + if not self.precpred(self._ctx, 15): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 16)") - self.state = 138 + raise FailedPredicateException(self, "self.precpred(self._ctx, 15)") + self.state = 177 localctx.op = self.match(PyxellParser.T__4) - self.state = 139 - self.expr(16) + self.state = 178 + self.expr(15) pass elif la_ == 2: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 140 - if not self.precpred(self._ctx, 14): + self.state = 179 + if not self.precpred(self._ctx, 13): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 14)") - self.state = 141 + raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") + self.state = 180 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__7))) != 0)): @@ -1292,18 +1558,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 142 - self.expr(15) + self.state = 181 + self.expr(14) pass elif la_ == 3: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 143 - if not self.precpred(self._ctx, 13): + self.state = 182 + if not self.precpred(self._ctx, 12): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") - self.state = 144 + raise FailedPredicateException(self, "self.precpred(self._ctx, 12)") + self.state = 183 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__8 or _la==PyxellParser.T__9): @@ -1311,18 +1577,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 145 - self.expr(14) + self.state = 184 + self.expr(13) pass elif la_ == 4: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 146 - if not self.precpred(self._ctx, 12): + self.state = 185 + if not self.precpred(self._ctx, 11): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 12)") - self.state = 147 + raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") + self.state = 186 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__10 or _la==PyxellParser.T__11): @@ -1330,180 +1596,207 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 148 - self.expr(13) - pass - - elif la_ == 5: - localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) - self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 149 - if not self.precpred(self._ctx, 11): - from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") - self.state = 150 - localctx.op = self.match(PyxellParser.T__12) - self.state = 151 + self.state = 187 self.expr(12) pass - elif la_ == 6: + elif la_ == 5: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 152 + self.state = 188 if not self.precpred(self._ctx, 10): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") - self.state = 153 - localctx.op = self.match(PyxellParser.T__13) - self.state = 154 + self.state = 189 + localctx.op = self.match(PyxellParser.T__12) + self.state = 190 self.expr(11) pass - elif la_ == 7: + elif la_ == 6: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 155 + self.state = 191 if not self.precpred(self._ctx, 9): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") - self.state = 156 - localctx.op = self.match(PyxellParser.T__14) - self.state = 157 + self.state = 192 + localctx.op = self.match(PyxellParser.T__13) + self.state = 193 self.expr(10) pass - elif la_ == 8: - localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + elif la_ == 7: + localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 158 + self.state = 194 if not self.precpred(self._ctx, 8): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") - self.state = 159 - localctx.dots = self.match(PyxellParser.T__35) - self.state = 160 + self.state = 195 + localctx.op = self.match(PyxellParser.T__14) + self.state = 196 self.expr(9) pass - elif la_ == 9: + elif la_ == 8: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 161 + self.state = 197 if not self.precpred(self._ctx, 7): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") - self.state = 162 - localctx.dots = self.match(PyxellParser.T__36) - self.state = 163 + self.state = 198 + localctx.dots = self._input.LT(1) + _la = self._input.LA(1) + if not(_la==PyxellParser.T__38 or _la==PyxellParser.T__39): + localctx.dots = self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + self.state = 199 self.expr(8) pass - elif la_ == 10: + elif la_ == 9: localctx = PyxellParser.ExprCmpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 164 + self.state = 200 if not self.precpred(self._ctx, 5): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") - self.state = 165 + self.state = 201 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__37) | (1 << PyxellParser.T__38) | (1 << PyxellParser.T__39) | (1 << PyxellParser.T__40) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__42))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__40) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__42) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__44) | (1 << PyxellParser.T__45))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 166 + self.state = 202 self.expr(5) pass - elif la_ == 11: + elif la_ == 10: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 167 + self.state = 203 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 168 - localctx.op = self.match(PyxellParser.T__44) - self.state = 169 + self.state = 204 + localctx.op = self.match(PyxellParser.T__47) + self.state = 205 self.expr(3) pass - elif la_ == 12: + elif la_ == 11: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 170 + self.state = 206 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 171 - localctx.op = self.match(PyxellParser.T__45) - self.state = 172 + self.state = 207 + localctx.op = self.match(PyxellParser.T__48) + self.state = 208 self.expr(2) pass - elif la_ == 13: + elif la_ == 12: localctx = PyxellParser.ExprCondContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 173 + self.state = 209 if not self.precpred(self._ctx, 1): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") - self.state = 174 - self.match(PyxellParser.T__46) - self.state = 175 + self.state = 210 + self.match(PyxellParser.T__49) + self.state = 211 self.expr(0) - self.state = 176 - self.match(PyxellParser.T__47) - self.state = 177 + self.state = 212 + self.match(PyxellParser.T__50) + self.state = 213 self.expr(1) pass - elif la_ == 14: + elif la_ == 13: localctx = PyxellParser.ExprIndexContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 179 + self.state = 215 if not self.precpred(self._ctx, 18): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 18)") - self.state = 180 - self.match(PyxellParser.T__31) - self.state = 181 + self.state = 216 + self.match(PyxellParser.T__34) + self.state = 217 self.expr(0) - self.state = 182 - self.match(PyxellParser.T__32) + self.state = 218 + self.match(PyxellParser.T__35) pass - elif la_ == 15: + elif la_ == 14: localctx = PyxellParser.ExprAttrContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 184 + self.state = 220 if not self.precpred(self._ctx, 17): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 17)") - self.state = 185 - self.match(PyxellParser.T__33) - self.state = 186 + self.state = 221 + self.match(PyxellParser.T__36) + self.state = 222 self.match(PyxellParser.ID) pass + elif la_ == 15: + localctx = PyxellParser.ExprCallContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) + self.state = 223 + if not self.precpred(self._ctx, 16): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 16)") + self.state = 224 + self.match(PyxellParser.T__28) + self.state = 230 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,19,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 225 + self.expr(0) + self.state = 226 + self.match(PyxellParser.T__18) + self.state = 232 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,19,self._ctx) + + self.state = 234 + self._errHandler.sync(self) + _la = self._input.LA(1) + if ((((_la - 9)) & ~0x3f) == 0 and ((1 << (_la - 9)) & ((1 << (PyxellParser.T__8 - 9)) | (1 << (PyxellParser.T__9 - 9)) | (1 << (PyxellParser.T__28 - 9)) | (1 << (PyxellParser.T__34 - 9)) | (1 << (PyxellParser.T__37 - 9)) | (1 << (PyxellParser.T__46 - 9)) | (1 << (PyxellParser.T__51 - 9)) | (1 << (PyxellParser.T__52 - 9)) | (1 << (PyxellParser.INT - 9)) | (1 << (PyxellParser.FLOAT - 9)) | (1 << (PyxellParser.CHAR - 9)) | (1 << (PyxellParser.STRING - 9)) | (1 << (PyxellParser.ID - 9)))) != 0): + self.state = 233 + self.expr(0) + + + self.state = 236 + self.match(PyxellParser.T__29) + pass + elif la_ == 16: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 187 + self.state = 237 if not self.precpred(self._ctx, 6): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") - self.state = 188 - localctx.dots = self.match(PyxellParser.T__36) + self.state = 238 + localctx.dots = self.match(PyxellParser.T__39) pass - self.state = 193 + self.state = 243 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,15,self._ctx) + _alt = self._interp.adaptivePredict(self._input,22,self._ctx) except RecognitionException as re: localctx.exception = re @@ -1648,30 +1941,30 @@ def accept(self, visitor:ParseTreeVisitor): def atom(self): localctx = PyxellParser.AtomContext(self, self._ctx, self.state) - self.enterRule(localctx, 16, self.RULE_atom) + self.enterRule(localctx, 20, self.RULE_atom) self._la = 0 # Token type try: - self.state = 213 + self.state = 263 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: localctx = PyxellParser.AtomIntContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 194 + self.state = 244 self.match(PyxellParser.INT) pass elif token in [PyxellParser.FLOAT]: localctx = PyxellParser.AtomFloatContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 195 + self.state = 245 self.match(PyxellParser.FLOAT) pass - elif token in [PyxellParser.T__48, PyxellParser.T__49]: + elif token in [PyxellParser.T__51, PyxellParser.T__52]: localctx = PyxellParser.AtomBoolContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 196 + self.state = 246 _la = self._input.LA(1) - if not(_la==PyxellParser.T__48 or _la==PyxellParser.T__49): + if not(_la==PyxellParser.T__51 or _la==PyxellParser.T__52): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -1680,48 +1973,48 @@ def atom(self): elif token in [PyxellParser.CHAR]: localctx = PyxellParser.AtomCharContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 197 + self.state = 247 self.match(PyxellParser.CHAR) pass elif token in [PyxellParser.STRING]: localctx = PyxellParser.AtomStringContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 198 + self.state = 248 self.match(PyxellParser.STRING) pass - elif token in [PyxellParser.T__31]: + elif token in [PyxellParser.T__34]: localctx = PyxellParser.AtomArrayContext(self, localctx) self.enterOuterAlt(localctx, 6) - self.state = 199 - self.match(PyxellParser.T__31) - self.state = 205 + self.state = 249 + self.match(PyxellParser.T__34) + self.state = 255 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,16,self._ctx) + _alt = self._interp.adaptivePredict(self._input,23,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 200 + self.state = 250 self.expr(0) - self.state = 201 - self.match(PyxellParser.T__17) - self.state = 207 + self.state = 251 + self.match(PyxellParser.T__18) + self.state = 257 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,16,self._ctx) + _alt = self._interp.adaptivePredict(self._input,23,self._ctx) - self.state = 209 + self.state = 259 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__31) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__49) | (1 << PyxellParser.INT) | (1 << PyxellParser.FLOAT) | (1 << PyxellParser.CHAR) | (1 << PyxellParser.STRING) | (1 << PyxellParser.ID))) != 0): - self.state = 208 + if ((((_la - 9)) & ~0x3f) == 0 and ((1 << (_la - 9)) & ((1 << (PyxellParser.T__8 - 9)) | (1 << (PyxellParser.T__9 - 9)) | (1 << (PyxellParser.T__28 - 9)) | (1 << (PyxellParser.T__34 - 9)) | (1 << (PyxellParser.T__37 - 9)) | (1 << (PyxellParser.T__46 - 9)) | (1 << (PyxellParser.T__51 - 9)) | (1 << (PyxellParser.T__52 - 9)) | (1 << (PyxellParser.INT - 9)) | (1 << (PyxellParser.FLOAT - 9)) | (1 << (PyxellParser.CHAR - 9)) | (1 << (PyxellParser.STRING - 9)) | (1 << (PyxellParser.ID - 9)))) != 0): + self.state = 258 self.expr(0) - self.state = 211 - self.match(PyxellParser.T__32) + self.state = 261 + self.match(PyxellParser.T__35) pass elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) self.enterOuterAlt(localctx, 7) - self.state = 212 + self.state = 262 self.match(PyxellParser.ID) pass else: @@ -1808,67 +2101,74 @@ def typ(self, _p:int=0): _parentState = self.state localctx = PyxellParser.TypContext(self, self._ctx, _parentState) _prevctx = localctx - _startState = 18 - self.enterRecursionRule(localctx, 18, self.RULE_typ, _p) + _startState = 22 + self.enterRecursionRule(localctx, 22, self.RULE_typ, _p) try: self.enterOuterAlt(localctx, 1) - self.state = 225 + self.state = 276 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__50]: + if token in [PyxellParser.T__53]: localctx = PyxellParser.TypePrimitiveContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 216 - self.match(PyxellParser.T__50) + self.state = 266 + self.match(PyxellParser.T__53) pass - elif token in [PyxellParser.T__51]: + elif token in [PyxellParser.T__54]: localctx = PyxellParser.TypePrimitiveContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 217 - self.match(PyxellParser.T__51) + self.state = 267 + self.match(PyxellParser.T__54) pass - elif token in [PyxellParser.T__52]: + elif token in [PyxellParser.T__55]: localctx = PyxellParser.TypePrimitiveContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 218 - self.match(PyxellParser.T__52) + self.state = 268 + self.match(PyxellParser.T__55) pass - elif token in [PyxellParser.T__53]: + elif token in [PyxellParser.T__56]: localctx = PyxellParser.TypePrimitiveContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 219 - self.match(PyxellParser.T__53) + self.state = 269 + self.match(PyxellParser.T__56) pass - elif token in [PyxellParser.T__54]: + elif token in [PyxellParser.T__57]: localctx = PyxellParser.TypePrimitiveContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 220 - self.match(PyxellParser.T__54) + self.state = 270 + self.match(PyxellParser.T__57) + pass + elif token in [PyxellParser.T__58]: + localctx = PyxellParser.TypePrimitiveContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 271 + self.match(PyxellParser.T__58) pass - elif token in [PyxellParser.T__31]: + elif token in [PyxellParser.T__34]: localctx = PyxellParser.TypeArrayContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 221 - self.match(PyxellParser.T__31) - self.state = 222 + self.state = 272 + self.match(PyxellParser.T__34) + self.state = 273 self.typ(0) - self.state = 223 - self.match(PyxellParser.T__32) + self.state = 274 + self.match(PyxellParser.T__35) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 232 + self.state = 283 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,20,self._ctx) + _alt = self._interp.adaptivePredict(self._input,27,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: @@ -1876,17 +2176,17 @@ def typ(self, _p:int=0): _prevctx = localctx localctx = PyxellParser.TypeTupleContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 227 + self.state = 278 if not self.precpred(self._ctx, 1): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") - self.state = 228 + self.state = 279 self.match(PyxellParser.T__5) - self.state = 229 + self.state = 280 self.typ(1) - self.state = 234 + self.state = 285 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,20,self._ctx) + _alt = self._interp.adaptivePredict(self._input,27,self._ctx) except RecognitionException as re: localctx.exception = re @@ -1901,8 +2201,8 @@ def typ(self, _p:int=0): def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): if self._predicates == None: self._predicates = dict() - self._predicates[7] = self.expr_sempred - self._predicates[9] = self.typ_sempred + self._predicates[9] = self.expr_sempred + self._predicates[11] = self.typ_sempred pred = self._predicates.get(ruleIndex, None) if pred is None: raise Exception("No predicate with index:" + str(ruleIndex)) @@ -1911,63 +2211,63 @@ def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): def expr_sempred(self, localctx:ExprContext, predIndex:int): if predIndex == 0: - return self.precpred(self._ctx, 16) + return self.precpred(self._ctx, 15) if predIndex == 1: - return self.precpred(self._ctx, 14) + return self.precpred(self._ctx, 13) if predIndex == 2: - return self.precpred(self._ctx, 13) + return self.precpred(self._ctx, 12) if predIndex == 3: - return self.precpred(self._ctx, 12) + return self.precpred(self._ctx, 11) if predIndex == 4: - return self.precpred(self._ctx, 11) + return self.precpred(self._ctx, 10) if predIndex == 5: - return self.precpred(self._ctx, 10) + return self.precpred(self._ctx, 9) if predIndex == 6: - return self.precpred(self._ctx, 9) + return self.precpred(self._ctx, 8) if predIndex == 7: - return self.precpred(self._ctx, 8) + return self.precpred(self._ctx, 7) if predIndex == 8: - return self.precpred(self._ctx, 7) + return self.precpred(self._ctx, 5) if predIndex == 9: - return self.precpred(self._ctx, 5) + return self.precpred(self._ctx, 3) if predIndex == 10: - return self.precpred(self._ctx, 3) + return self.precpred(self._ctx, 2) if predIndex == 11: - return self.precpred(self._ctx, 2) + return self.precpred(self._ctx, 1) if predIndex == 12: - return self.precpred(self._ctx, 1) + return self.precpred(self._ctx, 18) if predIndex == 13: - return self.precpred(self._ctx, 18) + return self.precpred(self._ctx, 17) if predIndex == 14: - return self.precpred(self._ctx, 17) + return self.precpred(self._ctx, 16) if predIndex == 15: diff --git a/src/antlr/PyxellVisitor.py b/src/antlr/PyxellVisitor.py index e3a31722..56749fec 100644 --- a/src/antlr/PyxellVisitor.py +++ b/src/antlr/PyxellVisitor.py @@ -49,6 +49,11 @@ def visitStmtLoopControl(self, ctx:PyxellParser.StmtLoopControlContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#StmtReturn. + def visitStmtReturn(self, ctx:PyxellParser.StmtReturnContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#lvalue. def visitLvalue(self, ctx:PyxellParser.LvalueContext): return self.visitChildren(ctx) @@ -74,8 +79,23 @@ def visitStmtFor(self, ctx:PyxellParser.StmtForContext): return self.visitChildren(ctx) - # Visit a parse tree produced by PyxellParser#block. - def visitBlock(self, ctx:PyxellParser.BlockContext): + # Visit a parse tree produced by PyxellParser#StmtFunc. + def visitStmtFunc(self, ctx:PyxellParser.StmtFuncContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by PyxellParser#arg. + def visitArg(self, ctx:PyxellParser.ArgContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by PyxellParser#do_block. + def visitDo_block(self, ctx:PyxellParser.Do_blockContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by PyxellParser#def_block. + def visitDef_block(self, ctx:PyxellParser.Def_blockContext): return self.visitChildren(ctx) @@ -89,6 +109,11 @@ def visitExprUnaryOp(self, ctx:PyxellParser.ExprUnaryOpContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#ExprCall. + def visitExprCall(self, ctx:PyxellParser.ExprCallContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#ExprCmp. def visitExprCmp(self, ctx:PyxellParser.ExprCmpContext): return self.visitChildren(ctx) diff --git a/src/compiler.py b/src/compiler.py index 3eb32ea4..5ea59d9a 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -16,16 +16,16 @@ def __init__(self): self.builder = ll.IRBuilder() self.module = ll.Module() self.builtins = { - 'malloc': ll.Function(self.module, tFunc([tInt], tPtr()), 'malloc'), - 'memcpy': ll.Function(self.module, tFunc([tPtr(), tPtr(), tInt]), 'memcpy'), - 'write': ll.Function(self.module, tFunc([tString]), 'func.write'), - 'writeInt': ll.Function(self.module, tFunc([tInt]), 'func.writeInt'), - 'writeFloat': ll.Function(self.module, tFunc([tFloat]), 'func.writeFloat'), - 'writeBool': ll.Function(self.module, tFunc([tBool]), 'func.writeBool'), - 'writeChar': ll.Function(self.module, tFunc([tChar]), 'func.writeChar'), - 'putchar': ll.Function(self.module, tFunc([tChar]), 'putchar'), - 'Int_pow': ll.Function(self.module, tFunc([tInt, tInt], tInt), 'func.Int_pow'), - 'Float_pow': ll.Function(self.module, tFunc([tFloat, tFloat], tFloat), 'func.Float_pow'), + 'malloc': ll.Function(self.module, tFunc([tInt], tPtr()).pointee, 'malloc'), + 'memcpy': ll.Function(self.module, tFunc([tPtr(), tPtr(), tInt]).pointee, 'memcpy'), + 'write': ll.Function(self.module, tFunc([tString]).pointee, 'func.write'), + 'writeInt': ll.Function(self.module, tFunc([tInt]).pointee, 'func.writeInt'), + 'writeFloat': ll.Function(self.module, tFunc([tFloat]).pointee, 'func.writeFloat'), + 'writeBool': ll.Function(self.module, tFunc([tBool]).pointee, 'func.writeBool'), + 'writeChar': ll.Function(self.module, tFunc([tChar]).pointee, 'func.writeChar'), + 'putchar': ll.Function(self.module, tFunc([tChar]).pointee, 'putchar'), + 'Int_pow': ll.Function(self.module, tFunc([tInt, tInt], tInt).pointee, 'func.Int_pow'), + 'Float_pow': ll.Function(self.module, tFunc([tFloat, tFloat], tFloat).pointee, 'func.Float_pow'), } @@ -85,9 +85,11 @@ def unify(self, ctx, *values): else: self.throw(ctx, err.UnknownType()) - def declare(self, ctx, type, id, initialize=False): + def declare(self, ctx, type, id, redeclare=False, initialize=False): + if type == tVoid: + self.throw(ctx, err.InvalidDeclaration(type)) id = str(id) - if id in self.env: + if id in self.env and not redeclare: self.throw(ctx, err.RedeclaredIdentifier(id)) ptr = self.builder.alloca(type) self.env[id] = ptr @@ -484,8 +486,8 @@ def tuple(self, values): ### Program ### def visitProgram(self, ctx): - func = ll.Function(self.module, tFunc([], tInt), 'main') - entry = func.append_basic_block() + func = ll.Function(self.module, tFunc([], tInt).pointee, 'main') + entry = func.append_basic_block('entry') self.builder.position_at_end(entry) self.visitChildren(ctx) self.builder.position_at_end(func.blocks[-1]) @@ -537,7 +539,7 @@ def visitStmtAssgExpr(self, ctx): def visitStmtIf(self, ctx): exprs = ctx.expr() - blocks = ctx.block() + blocks = ctx.do_block() with self.block() as (label_start, label_end): initialized_vars = [] @@ -582,7 +584,7 @@ def visitStmtWhile(self, ctx): self.env['#continue'] = label_start self.env['#break'] = label_end - self.visit(ctx.block()) + self.visit(ctx.do_block()) self.builder.branch(label_start) @@ -592,7 +594,7 @@ def visitStmtUntil(self, ctx): self.env['#continue'] = label_start self.env['#break'] = label_end - self.visit(ctx.block()) + self.visit(ctx.do_block()) expr = ctx.expr() cond = self.cast(expr, self.visit(expr), tBool) @@ -703,7 +705,7 @@ def prepare(iterable, step): # must be a function so that lambdas work properly else: self.throw(exprs[0], err.CannotUnpack(tTuple(types), len(vars))) - self.visit(ctx.block()) + self.visit(ctx.do_block()) self.builder.function.blocks.append(label_cont) self.builder.branch(label_cont) @@ -715,13 +717,71 @@ def prepare(iterable, step): # must be a function so that lambdas work properly self.builder.branch(label_start) def visitStmtLoopControl(self, ctx): - stmt = ctx.s.text # 'break' / 'continue' + stmt = ctx.s.text # `break` / `continue` + try: label = self.env[f'#{stmt}'] except KeyError: self.throw(ctx, err.UnexpectedStatement(stmt)) + + self.builder.branch(label) + + def visitStmtFunc(self, ctx): + id = str(ctx.ID()) + + args = [(self.visit(arg.typ()), arg.ID()) for arg in ctx.arg()] + arg_types = [arg[0] for arg in args] + + ret_type = self.visit(ctx.ret) if ctx.ret else tVoid + + func_type = tFunc(arg_types, ret_type) + func = ll.Function(self.module, func_type.pointee, self.module.get_unique_name('def.'+id)) + func_ptr = ll.GlobalVariable(self.module, func_type, self.module.get_unique_name(id)) + func_ptr.initializer = func + self.env[id] = func_ptr + self.initialized.add(id) + + prev_label = self.builder.basic_block + entry = func.append_basic_block('entry') + self.builder.position_at_end(entry) + + with self.local(): + self.env['#return'] = ret_type + self.env.pop('#continue', None) + self.env.pop('#break', None) + + for (type, id), value in zip(args, func.args): + ptr = self.declare(ctx, type, id, redeclare=True, initialize=True) + self.env[id] = ptr + self.builder.store(value, ptr) + + self.visit(ctx.def_block()) + + if ret_type == tVoid: + self.builder.ret_void() + else: + if '#return' not in self.initialized: + self.throw(ctx, err.MissingReturn(id)) + self.builder.ret(ret_type.default()) + + self.builder.position_at_end(prev_label) + + def visitStmtReturn(self, ctx): + try: + type = self.env['#return'] + except KeyError: + self.throw(ctx, err.UnexpectedStatement('return')) + + self.initialized.add('#return') + + expr = ctx.tuple_expr() + if expr: + value = self.cast(ctx, self.visit(expr), type) + self.builder.ret(value) else: - self.builder.branch(label) + if type != tVoid: + self.throw(ctx, err.IllegalAssignment(tVoid, type)) + self.builder.ret_void() ### Expressions ### @@ -754,6 +814,22 @@ def visitExprAttr(self, ctx): self.throw(ctx, err.NoAttribute(value.type, id)) + def visitExprCall(self, ctx): + exprs = ctx.expr() + + func = self.visit(exprs[0]) + if not func.type.isFunc(): + self.throw(ctx, err.NotFunction(func.type)) + + exprs = exprs[1:] + if len(exprs) < len(func.type.args): + self.throw(ctx, err.TooFewArguments(func.type)) + if len(exprs) > len(func.type.args): + self.throw(ctx, err.TooManyArguments(func.type)) + args = [self.cast(expr, self.visit(expr), type) for expr, type in zip(exprs, func.type.args)] + + return self.builder.call(func, args) + def visitExprUnaryOp(self, ctx): return self.unaryop(ctx, ctx.op.text, self.visit(ctx.expr())) @@ -904,6 +980,7 @@ def visitAtomId(self, ctx): def visitTypePrimitive(self, ctx): return { + 'Void': tVoid, 'Int': tInt, 'Float': tFloat, 'Bool': tBool, diff --git a/src/errors.py b/src/errors.py index 5e6f6b4f..f2938396 100644 --- a/src/errors.py +++ b/src/errors.py @@ -15,7 +15,9 @@ class PyxellError(Exception): CannotUnpack = lambda t, n: f"Cannot unpack value of type `{t.show()}` into {n} values" IllegalAssignment = lambda t1, t2: f"Illegal assignment from `{t1.show()}` to `{t2.show()}`" + InvalidDeclaration = lambda t: f"Cannot declare variable of type `{t.show()}`" InvalidLoopStep = lambda: f"Incompatible number of loop variables and step expressions" + MissingReturn = lambda id: f"Not all code paths return a value in function `{id}`" NoAttribute = lambda t, id: f"Type `{t.show()}` has no attribute `{id}`" NoBinaryOperator = lambda op, t1, t2: f"No binary operator `{op}` defined for `{t1.show()}` and `{t2.show()}`" NoUnaryOperator = lambda op, t: f"No unary operator `{op}` defined for `{t.show()}`" @@ -23,8 +25,11 @@ class PyxellError(Exception): NotIndexable = lambda t: f"Type `{t.show()}` is not indexable" NotIterable = lambda t: f"Type `{t.show()}` is not iterable" NotLvalue = lambda: f"Expression cannot be assigned to" + NotFunction = lambda t: f"Type `{t.show()}` is not a function" NotPrintable = lambda t: f"Variable of type `{t.show()}` cannot be printed" RedeclaredIdentifier = lambda id: f"Identifier `{id}` is already declared" + TooFewArguments = lambda t: f"Too few arguments for function `{t.show()}`" + TooManyArguments = lambda t: f"Too many arguments for function `{t.show()}`" UndeclaredIdentifier = lambda id: f"Undeclared identifier `{id}`" UninitializedIdentifier = lambda id: f"Identifier `{id}` might not have been initialized" UnexpectedStatement = lambda s: f"Unexpected `{s}` statement" diff --git a/src/types.py b/src/types.py index 6657d3d4..87d8fe47 100644 --- a/src/types.py +++ b/src/types.py @@ -56,7 +56,15 @@ def isTuple(type): def tFunc(args, ret=tVoid): - return ll.FunctionType(ret, args) + type = tPtr(ll.FunctionType(ret, args)) + type.args = args + type.ret = ret + type.kind = 'function' + return type + +@extend_class(ll.Type) +def isFunc(type): + return getattr(type, 'kind', None) == 'function' @extend_class(ll.Type) @@ -82,9 +90,16 @@ def show(type): return f'[{type.subtype.show()}]' if type.isTuple(): return '*'.join(t.show() for t in type.elements) + if type.isFunc(): + return ','.join(t.show() for t in type.args) + '->' + type.ret.show() return str(type) +@extend_class(ll.Type) +def default(type): + return ll.Constant(type, 0) + + def vInt(n): return ll.Constant(tInt, str(n)) diff --git a/test/bad/functions/type06.err b/test/bad/functions/type06.err index 9b7667bd..c81ce63c 100644 --- a/test/bad/functions/type06.err +++ b/test/bad/functions/type06.err @@ -1 +1 @@ -Illegal redefinition of function `Int->Void`. \ No newline at end of file +Too few arguments for function `Int->Void`. \ No newline at end of file diff --git a/test/bad/functions/type06.px b/test/bad/functions/type06.px index d42fb0e2..9ddd3209 100644 --- a/test/bad/functions/type06.px +++ b/test/bad/functions/type06.px @@ -5,5 +5,5 @@ func f(Int x) def func f'(Int y: 0) def return -f = f' -f() +g = f' +g() diff --git a/test/bad/functions/type07.err b/test/bad/functions/type07.err index 9b7667bd..166f1ae2 100644 --- a/test/bad/functions/type07.err +++ b/test/bad/functions/type07.err @@ -1 +1 @@ -Illegal redefinition of function `Int->Void`. \ No newline at end of file +Unexpected argument `y`. \ No newline at end of file diff --git a/test/bad/functions/type07.px b/test/bad/functions/type07.px index ab2b4a2b..8474526f 100644 --- a/test/bad/functions/type07.px +++ b/test/bad/functions/type07.px @@ -5,5 +5,5 @@ func f(Int x) def func f'(Int y: 0) def return -f = f' -f(y=1) +g = f' +g(y=1) diff --git a/test/bad/functions/type10.err b/test/bad/functions/type10.err index fc0a50ef..d1d1ffe6 100644 --- a/test/bad/functions/type10.err +++ b/test/bad/functions/type10.err @@ -1 +1 @@ -Illegal redefinition of function `Int->Int`. \ No newline at end of file +Illegal redefinition of function `f`. \ No newline at end of file From 712e242d0d36b1c41fc97eef3fb8c15fa469ba8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sun, 27 Oct 2019 19:22:21 +0100 Subject: [PATCH 034/100] Function type Changed syntax from `A,B->C` to `A->B->C`. --- lib/std.px | 2 +- src/Pyxell.g4 | 3 + src/antlr/Pyxell.interp | 4 +- src/antlr/Pyxell.tokens | 16 +- src/antlr/PyxellLexer.interp | 5 +- src/antlr/PyxellLexer.py | 361 ++++++++++++++--------------- src/antlr/PyxellLexer.tokens | 16 +- src/antlr/PyxellParser.py | 393 ++++++++++++++++++++------------ src/antlr/PyxellVisitor.py | 15 ++ src/compiler.py | 16 ++ src/types.py | 4 +- test/bad/functions/call05.err | 2 +- test/bad/functions/call08.err | 2 +- test/bad/functions/lambda02.px | 2 +- test/bad/functions/lambda07.px | 2 +- test/bad/functions/lambda08.px | 2 +- test/bad/functions/lambda09.err | 2 +- test/bad/functions/lambda09.px | 2 +- test/bad/functions/lambda10.err | 2 +- test/bad/functions/lambda10.px | 2 +- test/bad/generics/type09.err | 2 +- test/bad/generics/type09.px | 2 +- test/good/functions/lambda02.px | 2 +- test/good/functions/lambda04.px | 2 +- test/good/functions/lambda05.px | 2 +- test/good/functions/lambda06.px | 2 +- test/good/functions/lambda07.px | 2 +- test/good/functions/var03.px | 2 +- test/good/functions/var07.px | 4 +- test/good/generics/complex03.px | 2 +- 30 files changed, 514 insertions(+), 361 deletions(-) diff --git a/lib/std.px b/lib/std.px index cd04a195..450b2f41 100644 --- a/lib/std.px +++ b/lib/std.px @@ -169,7 +169,7 @@ func filter(A->Bool f, [A] a) [A] def func map(A->B f, [A] a) [B] def return [f(x) for x in a] -func reduce(A,B->B f, B r, [A] a) B def +func reduce(A->B->B f, B r, [A] a) B def for x in a do r = f(x, r) return r diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index 7bfab921..b69dfb51 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -87,8 +87,11 @@ typ | 'Bool' # TypePrimitive | 'Char' # TypePrimitive | 'String' # TypePrimitive + | '(' typ ')' # TypeParentheses | '[' typ ']' # TypeArray | typ '*' typ # TypeTuple + | typ '->' typ # TypeFunc + | '->' typ # TypeFunc0 ; INT : DIGIT+ ; diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index 348f14da..92a132c1 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -59,6 +59,7 @@ null 'Bool' 'Char' 'String' +'->' null null null @@ -128,6 +129,7 @@ null null null null +null INT FLOAT CHAR @@ -152,4 +154,4 @@ typ atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 68, 289, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 3, 2, 7, 2, 28, 10, 2, 12, 2, 14, 2, 31, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 39, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 44, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 50, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 55, 10, 4, 12, 4, 14, 4, 58, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 69, 10, 4, 5, 4, 71, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 76, 10, 5, 12, 5, 14, 5, 79, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 88, 10, 6, 12, 6, 14, 6, 91, 11, 6, 3, 6, 3, 6, 5, 6, 95, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 111, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 121, 10, 6, 12, 6, 14, 6, 124, 11, 6, 3, 6, 5, 6, 127, 10, 6, 3, 6, 3, 6, 5, 6, 131, 10, 6, 3, 6, 5, 6, 134, 10, 6, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 6, 8, 142, 10, 8, 13, 8, 14, 8, 143, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 6, 9, 151, 10, 9, 13, 9, 14, 9, 152, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 7, 10, 160, 10, 10, 12, 10, 14, 10, 163, 11, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 177, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 231, 10, 11, 12, 11, 14, 11, 234, 11, 11, 3, 11, 5, 11, 237, 10, 11, 3, 11, 3, 11, 3, 11, 7, 11, 242, 10, 11, 12, 11, 14, 11, 245, 11, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 7, 12, 256, 10, 12, 12, 12, 14, 12, 259, 11, 12, 3, 12, 5, 12, 262, 10, 12, 3, 12, 3, 12, 5, 12, 266, 10, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 279, 10, 13, 3, 13, 3, 13, 3, 13, 7, 13, 284, 10, 13, 12, 13, 14, 13, 287, 11, 13, 3, 13, 2, 4, 20, 24, 14, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 2, 11, 3, 2, 7, 17, 3, 2, 18, 19, 4, 2, 11, 12, 40, 40, 3, 2, 8, 10, 3, 2, 11, 12, 3, 2, 13, 14, 3, 2, 41, 42, 3, 2, 43, 48, 3, 2, 54, 55, 2, 338, 2, 29, 3, 2, 2, 2, 4, 38, 3, 2, 2, 2, 6, 70, 3, 2, 2, 2, 8, 72, 3, 2, 2, 2, 10, 133, 3, 2, 2, 2, 12, 135, 3, 2, 2, 2, 14, 138, 3, 2, 2, 2, 16, 147, 3, 2, 2, 2, 18, 161, 3, 2, 2, 2, 20, 176, 3, 2, 2, 2, 22, 265, 3, 2, 2, 2, 24, 278, 3, 2, 2, 2, 26, 28, 5, 4, 3, 2, 27, 26, 3, 2, 2, 2, 28, 31, 3, 2, 2, 2, 29, 27, 3, 2, 2, 2, 29, 30, 3, 2, 2, 2, 30, 32, 3, 2, 2, 2, 31, 29, 3, 2, 2, 2, 32, 33, 7, 2, 2, 3, 33, 3, 3, 2, 2, 2, 34, 35, 5, 6, 4, 2, 35, 36, 7, 3, 2, 2, 36, 39, 3, 2, 2, 2, 37, 39, 5, 10, 6, 2, 38, 34, 3, 2, 2, 2, 38, 37, 3, 2, 2, 2, 39, 5, 3, 2, 2, 2, 40, 71, 7, 4, 2, 2, 41, 43, 7, 5, 2, 2, 42, 44, 5, 18, 10, 2, 43, 42, 3, 2, 2, 2, 43, 44, 3, 2, 2, 2, 44, 71, 3, 2, 2, 2, 45, 46, 5, 24, 13, 2, 46, 49, 7, 66, 2, 2, 47, 48, 7, 6, 2, 2, 48, 50, 5, 18, 10, 2, 49, 47, 3, 2, 2, 2, 49, 50, 3, 2, 2, 2, 50, 71, 3, 2, 2, 2, 51, 52, 5, 8, 5, 2, 52, 53, 7, 6, 2, 2, 53, 55, 3, 2, 2, 2, 54, 51, 3, 2, 2, 2, 55, 58, 3, 2, 2, 2, 56, 54, 3, 2, 2, 2, 56, 57, 3, 2, 2, 2, 57, 59, 3, 2, 2, 2, 58, 56, 3, 2, 2, 2, 59, 71, 5, 18, 10, 2, 60, 61, 5, 20, 11, 2, 61, 62, 9, 2, 2, 2, 62, 63, 7, 6, 2, 2, 63, 64, 5, 20, 11, 2, 64, 71, 3, 2, 2, 2, 65, 71, 9, 3, 2, 2, 66, 68, 7, 20, 2, 2, 67, 69, 5, 18, 10, 2, 68, 67, 3, 2, 2, 2, 68, 69, 3, 2, 2, 2, 69, 71, 3, 2, 2, 2, 70, 40, 3, 2, 2, 2, 70, 41, 3, 2, 2, 2, 70, 45, 3, 2, 2, 2, 70, 56, 3, 2, 2, 2, 70, 60, 3, 2, 2, 2, 70, 65, 3, 2, 2, 2, 70, 66, 3, 2, 2, 2, 71, 7, 3, 2, 2, 2, 72, 77, 5, 20, 11, 2, 73, 74, 7, 21, 2, 2, 74, 76, 5, 20, 11, 2, 75, 73, 3, 2, 2, 2, 76, 79, 3, 2, 2, 2, 77, 75, 3, 2, 2, 2, 77, 78, 3, 2, 2, 2, 78, 9, 3, 2, 2, 2, 79, 77, 3, 2, 2, 2, 80, 81, 7, 22, 2, 2, 81, 82, 5, 20, 11, 2, 82, 89, 5, 14, 8, 2, 83, 84, 7, 23, 2, 2, 84, 85, 5, 20, 11, 2, 85, 86, 5, 14, 8, 2, 86, 88, 3, 2, 2, 2, 87, 83, 3, 2, 2, 2, 88, 91, 3, 2, 2, 2, 89, 87, 3, 2, 2, 2, 89, 90, 3, 2, 2, 2, 90, 94, 3, 2, 2, 2, 91, 89, 3, 2, 2, 2, 92, 93, 7, 24, 2, 2, 93, 95, 5, 14, 8, 2, 94, 92, 3, 2, 2, 2, 94, 95, 3, 2, 2, 2, 95, 134, 3, 2, 2, 2, 96, 97, 7, 25, 2, 2, 97, 98, 5, 20, 11, 2, 98, 99, 5, 14, 8, 2, 99, 134, 3, 2, 2, 2, 100, 101, 7, 26, 2, 2, 101, 102, 5, 20, 11, 2, 102, 103, 5, 14, 8, 2, 103, 134, 3, 2, 2, 2, 104, 105, 7, 27, 2, 2, 105, 106, 5, 18, 10, 2, 106, 107, 7, 28, 2, 2, 107, 110, 5, 18, 10, 2, 108, 109, 7, 29, 2, 2, 109, 111, 5, 18, 10, 2, 110, 108, 3, 2, 2, 2, 110, 111, 3, 2, 2, 2, 111, 112, 3, 2, 2, 2, 112, 113, 5, 14, 8, 2, 113, 134, 3, 2, 2, 2, 114, 115, 7, 30, 2, 2, 115, 116, 7, 66, 2, 2, 116, 122, 7, 31, 2, 2, 117, 118, 5, 12, 7, 2, 118, 119, 7, 21, 2, 2, 119, 121, 3, 2, 2, 2, 120, 117, 3, 2, 2, 2, 121, 124, 3, 2, 2, 2, 122, 120, 3, 2, 2, 2, 122, 123, 3, 2, 2, 2, 123, 126, 3, 2, 2, 2, 124, 122, 3, 2, 2, 2, 125, 127, 5, 12, 7, 2, 126, 125, 3, 2, 2, 2, 126, 127, 3, 2, 2, 2, 127, 128, 3, 2, 2, 2, 128, 130, 7, 32, 2, 2, 129, 131, 5, 24, 13, 2, 130, 129, 3, 2, 2, 2, 130, 131, 3, 2, 2, 2, 131, 132, 3, 2, 2, 2, 132, 134, 5, 16, 9, 2, 133, 80, 3, 2, 2, 2, 133, 96, 3, 2, 2, 2, 133, 100, 3, 2, 2, 2, 133, 104, 3, 2, 2, 2, 133, 114, 3, 2, 2, 2, 134, 11, 3, 2, 2, 2, 135, 136, 5, 24, 13, 2, 136, 137, 7, 66, 2, 2, 137, 13, 3, 2, 2, 2, 138, 139, 7, 33, 2, 2, 139, 141, 7, 34, 2, 2, 140, 142, 5, 4, 3, 2, 141, 140, 3, 2, 2, 2, 142, 143, 3, 2, 2, 2, 143, 141, 3, 2, 2, 2, 143, 144, 3, 2, 2, 2, 144, 145, 3, 2, 2, 2, 145, 146, 7, 35, 2, 2, 146, 15, 3, 2, 2, 2, 147, 148, 7, 36, 2, 2, 148, 150, 7, 34, 2, 2, 149, 151, 5, 4, 3, 2, 150, 149, 3, 2, 2, 2, 151, 152, 3, 2, 2, 2, 152, 150, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 154, 3, 2, 2, 2, 154, 155, 7, 35, 2, 2, 155, 17, 3, 2, 2, 2, 156, 157, 5, 20, 11, 2, 157, 158, 7, 21, 2, 2, 158, 160, 3, 2, 2, 2, 159, 156, 3, 2, 2, 2, 160, 163, 3, 2, 2, 2, 161, 159, 3, 2, 2, 2, 161, 162, 3, 2, 2, 2, 162, 164, 3, 2, 2, 2, 163, 161, 3, 2, 2, 2, 164, 165, 5, 20, 11, 2, 165, 19, 3, 2, 2, 2, 166, 167, 8, 11, 1, 2, 167, 177, 5, 22, 12, 2, 168, 169, 7, 31, 2, 2, 169, 170, 5, 18, 10, 2, 170, 171, 7, 32, 2, 2, 171, 177, 3, 2, 2, 2, 172, 173, 9, 4, 2, 2, 173, 177, 5, 20, 11, 16, 174, 175, 7, 49, 2, 2, 175, 177, 5, 20, 11, 6, 176, 166, 3, 2, 2, 2, 176, 168, 3, 2, 2, 2, 176, 172, 3, 2, 2, 2, 176, 174, 3, 2, 2, 2, 177, 243, 3, 2, 2, 2, 178, 179, 12, 17, 2, 2, 179, 180, 7, 7, 2, 2, 180, 242, 5, 20, 11, 17, 181, 182, 12, 15, 2, 2, 182, 183, 9, 5, 2, 2, 183, 242, 5, 20, 11, 16, 184, 185, 12, 14, 2, 2, 185, 186, 9, 6, 2, 2, 186, 242, 5, 20, 11, 15, 187, 188, 12, 13, 2, 2, 188, 189, 9, 7, 2, 2, 189, 242, 5, 20, 11, 14, 190, 191, 12, 12, 2, 2, 191, 192, 7, 15, 2, 2, 192, 242, 5, 20, 11, 13, 193, 194, 12, 11, 2, 2, 194, 195, 7, 16, 2, 2, 195, 242, 5, 20, 11, 12, 196, 197, 12, 10, 2, 2, 197, 198, 7, 17, 2, 2, 198, 242, 5, 20, 11, 11, 199, 200, 12, 9, 2, 2, 200, 201, 9, 8, 2, 2, 201, 242, 5, 20, 11, 10, 202, 203, 12, 7, 2, 2, 203, 204, 9, 9, 2, 2, 204, 242, 5, 20, 11, 7, 205, 206, 12, 5, 2, 2, 206, 207, 7, 50, 2, 2, 207, 242, 5, 20, 11, 5, 208, 209, 12, 4, 2, 2, 209, 210, 7, 51, 2, 2, 210, 242, 5, 20, 11, 4, 211, 212, 12, 3, 2, 2, 212, 213, 7, 52, 2, 2, 213, 214, 5, 20, 11, 2, 214, 215, 7, 53, 2, 2, 215, 216, 5, 20, 11, 3, 216, 242, 3, 2, 2, 2, 217, 218, 12, 20, 2, 2, 218, 219, 7, 37, 2, 2, 219, 220, 5, 20, 11, 2, 220, 221, 7, 38, 2, 2, 221, 242, 3, 2, 2, 2, 222, 223, 12, 19, 2, 2, 223, 224, 7, 39, 2, 2, 224, 242, 7, 66, 2, 2, 225, 226, 12, 18, 2, 2, 226, 232, 7, 31, 2, 2, 227, 228, 5, 20, 11, 2, 228, 229, 7, 21, 2, 2, 229, 231, 3, 2, 2, 2, 230, 227, 3, 2, 2, 2, 231, 234, 3, 2, 2, 2, 232, 230, 3, 2, 2, 2, 232, 233, 3, 2, 2, 2, 233, 236, 3, 2, 2, 2, 234, 232, 3, 2, 2, 2, 235, 237, 5, 20, 11, 2, 236, 235, 3, 2, 2, 2, 236, 237, 3, 2, 2, 2, 237, 238, 3, 2, 2, 2, 238, 242, 7, 32, 2, 2, 239, 240, 12, 8, 2, 2, 240, 242, 7, 42, 2, 2, 241, 178, 3, 2, 2, 2, 241, 181, 3, 2, 2, 2, 241, 184, 3, 2, 2, 2, 241, 187, 3, 2, 2, 2, 241, 190, 3, 2, 2, 2, 241, 193, 3, 2, 2, 2, 241, 196, 3, 2, 2, 2, 241, 199, 3, 2, 2, 2, 241, 202, 3, 2, 2, 2, 241, 205, 3, 2, 2, 2, 241, 208, 3, 2, 2, 2, 241, 211, 3, 2, 2, 2, 241, 217, 3, 2, 2, 2, 241, 222, 3, 2, 2, 2, 241, 225, 3, 2, 2, 2, 241, 239, 3, 2, 2, 2, 242, 245, 3, 2, 2, 2, 243, 241, 3, 2, 2, 2, 243, 244, 3, 2, 2, 2, 244, 21, 3, 2, 2, 2, 245, 243, 3, 2, 2, 2, 246, 266, 7, 62, 2, 2, 247, 266, 7, 63, 2, 2, 248, 266, 9, 10, 2, 2, 249, 266, 7, 64, 2, 2, 250, 266, 7, 65, 2, 2, 251, 257, 7, 37, 2, 2, 252, 253, 5, 20, 11, 2, 253, 254, 7, 21, 2, 2, 254, 256, 3, 2, 2, 2, 255, 252, 3, 2, 2, 2, 256, 259, 3, 2, 2, 2, 257, 255, 3, 2, 2, 2, 257, 258, 3, 2, 2, 2, 258, 261, 3, 2, 2, 2, 259, 257, 3, 2, 2, 2, 260, 262, 5, 20, 11, 2, 261, 260, 3, 2, 2, 2, 261, 262, 3, 2, 2, 2, 262, 263, 3, 2, 2, 2, 263, 266, 7, 38, 2, 2, 264, 266, 7, 66, 2, 2, 265, 246, 3, 2, 2, 2, 265, 247, 3, 2, 2, 2, 265, 248, 3, 2, 2, 2, 265, 249, 3, 2, 2, 2, 265, 250, 3, 2, 2, 2, 265, 251, 3, 2, 2, 2, 265, 264, 3, 2, 2, 2, 266, 23, 3, 2, 2, 2, 267, 268, 8, 13, 1, 2, 268, 279, 7, 56, 2, 2, 269, 279, 7, 57, 2, 2, 270, 279, 7, 58, 2, 2, 271, 279, 7, 59, 2, 2, 272, 279, 7, 60, 2, 2, 273, 279, 7, 61, 2, 2, 274, 275, 7, 37, 2, 2, 275, 276, 5, 24, 13, 2, 276, 277, 7, 38, 2, 2, 277, 279, 3, 2, 2, 2, 278, 267, 3, 2, 2, 2, 278, 269, 3, 2, 2, 2, 278, 270, 3, 2, 2, 2, 278, 271, 3, 2, 2, 2, 278, 272, 3, 2, 2, 2, 278, 273, 3, 2, 2, 2, 278, 274, 3, 2, 2, 2, 279, 285, 3, 2, 2, 2, 280, 281, 12, 3, 2, 2, 281, 282, 7, 8, 2, 2, 282, 284, 5, 24, 13, 3, 283, 280, 3, 2, 2, 2, 284, 287, 3, 2, 2, 2, 285, 283, 3, 2, 2, 2, 285, 286, 3, 2, 2, 2, 286, 25, 3, 2, 2, 2, 287, 285, 3, 2, 2, 2, 30, 29, 38, 43, 49, 56, 68, 70, 77, 89, 94, 110, 122, 126, 130, 133, 143, 152, 161, 176, 232, 236, 241, 243, 257, 261, 265, 278, 285] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 69, 298, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 3, 2, 7, 2, 28, 10, 2, 12, 2, 14, 2, 31, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 39, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 44, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 50, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 55, 10, 4, 12, 4, 14, 4, 58, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 69, 10, 4, 5, 4, 71, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 76, 10, 5, 12, 5, 14, 5, 79, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 88, 10, 6, 12, 6, 14, 6, 91, 11, 6, 3, 6, 3, 6, 5, 6, 95, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 111, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 121, 10, 6, 12, 6, 14, 6, 124, 11, 6, 3, 6, 5, 6, 127, 10, 6, 3, 6, 3, 6, 5, 6, 131, 10, 6, 3, 6, 5, 6, 134, 10, 6, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 6, 8, 142, 10, 8, 13, 8, 14, 8, 143, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 6, 9, 151, 10, 9, 13, 9, 14, 9, 152, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 7, 10, 160, 10, 10, 12, 10, 14, 10, 163, 11, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 177, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 231, 10, 11, 12, 11, 14, 11, 234, 11, 11, 3, 11, 5, 11, 237, 10, 11, 3, 11, 3, 11, 3, 11, 7, 11, 242, 10, 11, 12, 11, 14, 11, 245, 11, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 7, 12, 256, 10, 12, 12, 12, 14, 12, 259, 11, 12, 3, 12, 5, 12, 262, 10, 12, 3, 12, 3, 12, 5, 12, 266, 10, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 285, 10, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 7, 13, 293, 10, 13, 12, 13, 14, 13, 296, 11, 13, 3, 13, 2, 4, 20, 24, 14, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 2, 11, 3, 2, 7, 17, 3, 2, 18, 19, 4, 2, 11, 12, 40, 40, 3, 2, 8, 10, 3, 2, 11, 12, 3, 2, 13, 14, 3, 2, 41, 42, 3, 2, 43, 48, 3, 2, 54, 55, 2, 350, 2, 29, 3, 2, 2, 2, 4, 38, 3, 2, 2, 2, 6, 70, 3, 2, 2, 2, 8, 72, 3, 2, 2, 2, 10, 133, 3, 2, 2, 2, 12, 135, 3, 2, 2, 2, 14, 138, 3, 2, 2, 2, 16, 147, 3, 2, 2, 2, 18, 161, 3, 2, 2, 2, 20, 176, 3, 2, 2, 2, 22, 265, 3, 2, 2, 2, 24, 284, 3, 2, 2, 2, 26, 28, 5, 4, 3, 2, 27, 26, 3, 2, 2, 2, 28, 31, 3, 2, 2, 2, 29, 27, 3, 2, 2, 2, 29, 30, 3, 2, 2, 2, 30, 32, 3, 2, 2, 2, 31, 29, 3, 2, 2, 2, 32, 33, 7, 2, 2, 3, 33, 3, 3, 2, 2, 2, 34, 35, 5, 6, 4, 2, 35, 36, 7, 3, 2, 2, 36, 39, 3, 2, 2, 2, 37, 39, 5, 10, 6, 2, 38, 34, 3, 2, 2, 2, 38, 37, 3, 2, 2, 2, 39, 5, 3, 2, 2, 2, 40, 71, 7, 4, 2, 2, 41, 43, 7, 5, 2, 2, 42, 44, 5, 18, 10, 2, 43, 42, 3, 2, 2, 2, 43, 44, 3, 2, 2, 2, 44, 71, 3, 2, 2, 2, 45, 46, 5, 24, 13, 2, 46, 49, 7, 67, 2, 2, 47, 48, 7, 6, 2, 2, 48, 50, 5, 18, 10, 2, 49, 47, 3, 2, 2, 2, 49, 50, 3, 2, 2, 2, 50, 71, 3, 2, 2, 2, 51, 52, 5, 8, 5, 2, 52, 53, 7, 6, 2, 2, 53, 55, 3, 2, 2, 2, 54, 51, 3, 2, 2, 2, 55, 58, 3, 2, 2, 2, 56, 54, 3, 2, 2, 2, 56, 57, 3, 2, 2, 2, 57, 59, 3, 2, 2, 2, 58, 56, 3, 2, 2, 2, 59, 71, 5, 18, 10, 2, 60, 61, 5, 20, 11, 2, 61, 62, 9, 2, 2, 2, 62, 63, 7, 6, 2, 2, 63, 64, 5, 20, 11, 2, 64, 71, 3, 2, 2, 2, 65, 71, 9, 3, 2, 2, 66, 68, 7, 20, 2, 2, 67, 69, 5, 18, 10, 2, 68, 67, 3, 2, 2, 2, 68, 69, 3, 2, 2, 2, 69, 71, 3, 2, 2, 2, 70, 40, 3, 2, 2, 2, 70, 41, 3, 2, 2, 2, 70, 45, 3, 2, 2, 2, 70, 56, 3, 2, 2, 2, 70, 60, 3, 2, 2, 2, 70, 65, 3, 2, 2, 2, 70, 66, 3, 2, 2, 2, 71, 7, 3, 2, 2, 2, 72, 77, 5, 20, 11, 2, 73, 74, 7, 21, 2, 2, 74, 76, 5, 20, 11, 2, 75, 73, 3, 2, 2, 2, 76, 79, 3, 2, 2, 2, 77, 75, 3, 2, 2, 2, 77, 78, 3, 2, 2, 2, 78, 9, 3, 2, 2, 2, 79, 77, 3, 2, 2, 2, 80, 81, 7, 22, 2, 2, 81, 82, 5, 20, 11, 2, 82, 89, 5, 14, 8, 2, 83, 84, 7, 23, 2, 2, 84, 85, 5, 20, 11, 2, 85, 86, 5, 14, 8, 2, 86, 88, 3, 2, 2, 2, 87, 83, 3, 2, 2, 2, 88, 91, 3, 2, 2, 2, 89, 87, 3, 2, 2, 2, 89, 90, 3, 2, 2, 2, 90, 94, 3, 2, 2, 2, 91, 89, 3, 2, 2, 2, 92, 93, 7, 24, 2, 2, 93, 95, 5, 14, 8, 2, 94, 92, 3, 2, 2, 2, 94, 95, 3, 2, 2, 2, 95, 134, 3, 2, 2, 2, 96, 97, 7, 25, 2, 2, 97, 98, 5, 20, 11, 2, 98, 99, 5, 14, 8, 2, 99, 134, 3, 2, 2, 2, 100, 101, 7, 26, 2, 2, 101, 102, 5, 20, 11, 2, 102, 103, 5, 14, 8, 2, 103, 134, 3, 2, 2, 2, 104, 105, 7, 27, 2, 2, 105, 106, 5, 18, 10, 2, 106, 107, 7, 28, 2, 2, 107, 110, 5, 18, 10, 2, 108, 109, 7, 29, 2, 2, 109, 111, 5, 18, 10, 2, 110, 108, 3, 2, 2, 2, 110, 111, 3, 2, 2, 2, 111, 112, 3, 2, 2, 2, 112, 113, 5, 14, 8, 2, 113, 134, 3, 2, 2, 2, 114, 115, 7, 30, 2, 2, 115, 116, 7, 67, 2, 2, 116, 122, 7, 31, 2, 2, 117, 118, 5, 12, 7, 2, 118, 119, 7, 21, 2, 2, 119, 121, 3, 2, 2, 2, 120, 117, 3, 2, 2, 2, 121, 124, 3, 2, 2, 2, 122, 120, 3, 2, 2, 2, 122, 123, 3, 2, 2, 2, 123, 126, 3, 2, 2, 2, 124, 122, 3, 2, 2, 2, 125, 127, 5, 12, 7, 2, 126, 125, 3, 2, 2, 2, 126, 127, 3, 2, 2, 2, 127, 128, 3, 2, 2, 2, 128, 130, 7, 32, 2, 2, 129, 131, 5, 24, 13, 2, 130, 129, 3, 2, 2, 2, 130, 131, 3, 2, 2, 2, 131, 132, 3, 2, 2, 2, 132, 134, 5, 16, 9, 2, 133, 80, 3, 2, 2, 2, 133, 96, 3, 2, 2, 2, 133, 100, 3, 2, 2, 2, 133, 104, 3, 2, 2, 2, 133, 114, 3, 2, 2, 2, 134, 11, 3, 2, 2, 2, 135, 136, 5, 24, 13, 2, 136, 137, 7, 67, 2, 2, 137, 13, 3, 2, 2, 2, 138, 139, 7, 33, 2, 2, 139, 141, 7, 34, 2, 2, 140, 142, 5, 4, 3, 2, 141, 140, 3, 2, 2, 2, 142, 143, 3, 2, 2, 2, 143, 141, 3, 2, 2, 2, 143, 144, 3, 2, 2, 2, 144, 145, 3, 2, 2, 2, 145, 146, 7, 35, 2, 2, 146, 15, 3, 2, 2, 2, 147, 148, 7, 36, 2, 2, 148, 150, 7, 34, 2, 2, 149, 151, 5, 4, 3, 2, 150, 149, 3, 2, 2, 2, 151, 152, 3, 2, 2, 2, 152, 150, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 154, 3, 2, 2, 2, 154, 155, 7, 35, 2, 2, 155, 17, 3, 2, 2, 2, 156, 157, 5, 20, 11, 2, 157, 158, 7, 21, 2, 2, 158, 160, 3, 2, 2, 2, 159, 156, 3, 2, 2, 2, 160, 163, 3, 2, 2, 2, 161, 159, 3, 2, 2, 2, 161, 162, 3, 2, 2, 2, 162, 164, 3, 2, 2, 2, 163, 161, 3, 2, 2, 2, 164, 165, 5, 20, 11, 2, 165, 19, 3, 2, 2, 2, 166, 167, 8, 11, 1, 2, 167, 177, 5, 22, 12, 2, 168, 169, 7, 31, 2, 2, 169, 170, 5, 18, 10, 2, 170, 171, 7, 32, 2, 2, 171, 177, 3, 2, 2, 2, 172, 173, 9, 4, 2, 2, 173, 177, 5, 20, 11, 16, 174, 175, 7, 49, 2, 2, 175, 177, 5, 20, 11, 6, 176, 166, 3, 2, 2, 2, 176, 168, 3, 2, 2, 2, 176, 172, 3, 2, 2, 2, 176, 174, 3, 2, 2, 2, 177, 243, 3, 2, 2, 2, 178, 179, 12, 17, 2, 2, 179, 180, 7, 7, 2, 2, 180, 242, 5, 20, 11, 17, 181, 182, 12, 15, 2, 2, 182, 183, 9, 5, 2, 2, 183, 242, 5, 20, 11, 16, 184, 185, 12, 14, 2, 2, 185, 186, 9, 6, 2, 2, 186, 242, 5, 20, 11, 15, 187, 188, 12, 13, 2, 2, 188, 189, 9, 7, 2, 2, 189, 242, 5, 20, 11, 14, 190, 191, 12, 12, 2, 2, 191, 192, 7, 15, 2, 2, 192, 242, 5, 20, 11, 13, 193, 194, 12, 11, 2, 2, 194, 195, 7, 16, 2, 2, 195, 242, 5, 20, 11, 12, 196, 197, 12, 10, 2, 2, 197, 198, 7, 17, 2, 2, 198, 242, 5, 20, 11, 11, 199, 200, 12, 9, 2, 2, 200, 201, 9, 8, 2, 2, 201, 242, 5, 20, 11, 10, 202, 203, 12, 7, 2, 2, 203, 204, 9, 9, 2, 2, 204, 242, 5, 20, 11, 7, 205, 206, 12, 5, 2, 2, 206, 207, 7, 50, 2, 2, 207, 242, 5, 20, 11, 5, 208, 209, 12, 4, 2, 2, 209, 210, 7, 51, 2, 2, 210, 242, 5, 20, 11, 4, 211, 212, 12, 3, 2, 2, 212, 213, 7, 52, 2, 2, 213, 214, 5, 20, 11, 2, 214, 215, 7, 53, 2, 2, 215, 216, 5, 20, 11, 3, 216, 242, 3, 2, 2, 2, 217, 218, 12, 20, 2, 2, 218, 219, 7, 37, 2, 2, 219, 220, 5, 20, 11, 2, 220, 221, 7, 38, 2, 2, 221, 242, 3, 2, 2, 2, 222, 223, 12, 19, 2, 2, 223, 224, 7, 39, 2, 2, 224, 242, 7, 67, 2, 2, 225, 226, 12, 18, 2, 2, 226, 232, 7, 31, 2, 2, 227, 228, 5, 20, 11, 2, 228, 229, 7, 21, 2, 2, 229, 231, 3, 2, 2, 2, 230, 227, 3, 2, 2, 2, 231, 234, 3, 2, 2, 2, 232, 230, 3, 2, 2, 2, 232, 233, 3, 2, 2, 2, 233, 236, 3, 2, 2, 2, 234, 232, 3, 2, 2, 2, 235, 237, 5, 20, 11, 2, 236, 235, 3, 2, 2, 2, 236, 237, 3, 2, 2, 2, 237, 238, 3, 2, 2, 2, 238, 242, 7, 32, 2, 2, 239, 240, 12, 8, 2, 2, 240, 242, 7, 42, 2, 2, 241, 178, 3, 2, 2, 2, 241, 181, 3, 2, 2, 2, 241, 184, 3, 2, 2, 2, 241, 187, 3, 2, 2, 2, 241, 190, 3, 2, 2, 2, 241, 193, 3, 2, 2, 2, 241, 196, 3, 2, 2, 2, 241, 199, 3, 2, 2, 2, 241, 202, 3, 2, 2, 2, 241, 205, 3, 2, 2, 2, 241, 208, 3, 2, 2, 2, 241, 211, 3, 2, 2, 2, 241, 217, 3, 2, 2, 2, 241, 222, 3, 2, 2, 2, 241, 225, 3, 2, 2, 2, 241, 239, 3, 2, 2, 2, 242, 245, 3, 2, 2, 2, 243, 241, 3, 2, 2, 2, 243, 244, 3, 2, 2, 2, 244, 21, 3, 2, 2, 2, 245, 243, 3, 2, 2, 2, 246, 266, 7, 63, 2, 2, 247, 266, 7, 64, 2, 2, 248, 266, 9, 10, 2, 2, 249, 266, 7, 65, 2, 2, 250, 266, 7, 66, 2, 2, 251, 257, 7, 37, 2, 2, 252, 253, 5, 20, 11, 2, 253, 254, 7, 21, 2, 2, 254, 256, 3, 2, 2, 2, 255, 252, 3, 2, 2, 2, 256, 259, 3, 2, 2, 2, 257, 255, 3, 2, 2, 2, 257, 258, 3, 2, 2, 2, 258, 261, 3, 2, 2, 2, 259, 257, 3, 2, 2, 2, 260, 262, 5, 20, 11, 2, 261, 260, 3, 2, 2, 2, 261, 262, 3, 2, 2, 2, 262, 263, 3, 2, 2, 2, 263, 266, 7, 38, 2, 2, 264, 266, 7, 67, 2, 2, 265, 246, 3, 2, 2, 2, 265, 247, 3, 2, 2, 2, 265, 248, 3, 2, 2, 2, 265, 249, 3, 2, 2, 2, 265, 250, 3, 2, 2, 2, 265, 251, 3, 2, 2, 2, 265, 264, 3, 2, 2, 2, 266, 23, 3, 2, 2, 2, 267, 268, 8, 13, 1, 2, 268, 285, 7, 56, 2, 2, 269, 285, 7, 57, 2, 2, 270, 285, 7, 58, 2, 2, 271, 285, 7, 59, 2, 2, 272, 285, 7, 60, 2, 2, 273, 285, 7, 61, 2, 2, 274, 275, 7, 31, 2, 2, 275, 276, 5, 24, 13, 2, 276, 277, 7, 32, 2, 2, 277, 285, 3, 2, 2, 2, 278, 279, 7, 37, 2, 2, 279, 280, 5, 24, 13, 2, 280, 281, 7, 38, 2, 2, 281, 285, 3, 2, 2, 2, 282, 283, 7, 62, 2, 2, 283, 285, 5, 24, 13, 3, 284, 267, 3, 2, 2, 2, 284, 269, 3, 2, 2, 2, 284, 270, 3, 2, 2, 2, 284, 271, 3, 2, 2, 2, 284, 272, 3, 2, 2, 2, 284, 273, 3, 2, 2, 2, 284, 274, 3, 2, 2, 2, 284, 278, 3, 2, 2, 2, 284, 282, 3, 2, 2, 2, 285, 294, 3, 2, 2, 2, 286, 287, 12, 5, 2, 2, 287, 288, 7, 8, 2, 2, 288, 293, 5, 24, 13, 5, 289, 290, 12, 4, 2, 2, 290, 291, 7, 62, 2, 2, 291, 293, 5, 24, 13, 4, 292, 286, 3, 2, 2, 2, 292, 289, 3, 2, 2, 2, 293, 296, 3, 2, 2, 2, 294, 292, 3, 2, 2, 2, 294, 295, 3, 2, 2, 2, 295, 25, 3, 2, 2, 2, 296, 294, 3, 2, 2, 2, 31, 29, 38, 43, 49, 56, 68, 70, 77, 89, 94, 110, 122, 126, 130, 133, 143, 152, 161, 176, 232, 236, 241, 243, 257, 261, 265, 284, 292, 294] \ No newline at end of file diff --git a/src/antlr/Pyxell.tokens b/src/antlr/Pyxell.tokens index 262e49a2..0d26b5ca 100644 --- a/src/antlr/Pyxell.tokens +++ b/src/antlr/Pyxell.tokens @@ -57,13 +57,14 @@ T__55=56 T__56=57 T__57=58 T__58=59 -INT=60 -FLOAT=61 -CHAR=62 -STRING=63 -ID=64 -WS=65 -ERR=66 +T__59=60 +INT=61 +FLOAT=62 +CHAR=63 +STRING=64 +ID=65 +WS=66 +ERR=67 ';'=1 'skip'=2 'print'=3 @@ -123,3 +124,4 @@ ERR=66 'Bool'=57 'Char'=58 'String'=59 +'->'=60 diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp index cdbcf29a..39cee566 100644 --- a/src/antlr/PyxellLexer.interp +++ b/src/antlr/PyxellLexer.interp @@ -59,6 +59,7 @@ null 'Bool' 'Char' 'String' +'->' null null null @@ -128,6 +129,7 @@ null null null null +null INT FLOAT CHAR @@ -196,6 +198,7 @@ T__55 T__56 T__57 T__58 +T__59 INT FLOAT CHAR @@ -215,4 +218,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 68, 424, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 6, 61, 352, 10, 61, 13, 61, 14, 61, 353, 3, 62, 6, 62, 357, 10, 62, 13, 62, 14, 62, 358, 3, 62, 3, 62, 6, 62, 363, 10, 62, 13, 62, 14, 62, 364, 3, 62, 3, 62, 5, 62, 369, 10, 62, 3, 62, 6, 62, 372, 10, 62, 13, 62, 14, 62, 373, 5, 62, 376, 10, 62, 3, 63, 3, 63, 3, 63, 3, 63, 7, 63, 382, 10, 63, 12, 63, 14, 63, 385, 11, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 7, 64, 393, 10, 64, 12, 64, 14, 64, 396, 11, 64, 3, 64, 3, 64, 3, 65, 3, 65, 7, 65, 402, 10, 65, 12, 65, 14, 65, 405, 11, 65, 3, 66, 3, 66, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 5, 68, 414, 10, 68, 3, 69, 6, 69, 417, 10, 69, 13, 69, 14, 69, 418, 3, 69, 3, 69, 3, 70, 3, 70, 2, 2, 71, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 2, 133, 2, 135, 2, 137, 67, 139, 68, 3, 2, 10, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 434, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 3, 141, 3, 2, 2, 2, 5, 143, 3, 2, 2, 2, 7, 148, 3, 2, 2, 2, 9, 154, 3, 2, 2, 2, 11, 156, 3, 2, 2, 2, 13, 158, 3, 2, 2, 2, 15, 160, 3, 2, 2, 2, 17, 162, 3, 2, 2, 2, 19, 164, 3, 2, 2, 2, 21, 166, 3, 2, 2, 2, 23, 168, 3, 2, 2, 2, 25, 171, 3, 2, 2, 2, 27, 174, 3, 2, 2, 2, 29, 176, 3, 2, 2, 2, 31, 178, 3, 2, 2, 2, 33, 180, 3, 2, 2, 2, 35, 186, 3, 2, 2, 2, 37, 195, 3, 2, 2, 2, 39, 202, 3, 2, 2, 2, 41, 204, 3, 2, 2, 2, 43, 207, 3, 2, 2, 2, 45, 212, 3, 2, 2, 2, 47, 217, 3, 2, 2, 2, 49, 223, 3, 2, 2, 2, 51, 229, 3, 2, 2, 2, 53, 233, 3, 2, 2, 2, 55, 236, 3, 2, 2, 2, 57, 241, 3, 2, 2, 2, 59, 246, 3, 2, 2, 2, 61, 248, 3, 2, 2, 2, 63, 250, 3, 2, 2, 2, 65, 253, 3, 2, 2, 2, 67, 255, 3, 2, 2, 2, 69, 257, 3, 2, 2, 2, 71, 261, 3, 2, 2, 2, 73, 263, 3, 2, 2, 2, 75, 265, 3, 2, 2, 2, 77, 267, 3, 2, 2, 2, 79, 269, 3, 2, 2, 2, 81, 272, 3, 2, 2, 2, 83, 276, 3, 2, 2, 2, 85, 279, 3, 2, 2, 2, 87, 282, 3, 2, 2, 2, 89, 284, 3, 2, 2, 2, 91, 287, 3, 2, 2, 2, 93, 289, 3, 2, 2, 2, 95, 292, 3, 2, 2, 2, 97, 296, 3, 2, 2, 2, 99, 300, 3, 2, 2, 2, 101, 303, 3, 2, 2, 2, 103, 305, 3, 2, 2, 2, 105, 307, 3, 2, 2, 2, 107, 312, 3, 2, 2, 2, 109, 318, 3, 2, 2, 2, 111, 323, 3, 2, 2, 2, 113, 327, 3, 2, 2, 2, 115, 333, 3, 2, 2, 2, 117, 338, 3, 2, 2, 2, 119, 343, 3, 2, 2, 2, 121, 351, 3, 2, 2, 2, 123, 356, 3, 2, 2, 2, 125, 377, 3, 2, 2, 2, 127, 388, 3, 2, 2, 2, 129, 399, 3, 2, 2, 2, 131, 406, 3, 2, 2, 2, 133, 408, 3, 2, 2, 2, 135, 413, 3, 2, 2, 2, 137, 416, 3, 2, 2, 2, 139, 422, 3, 2, 2, 2, 141, 142, 7, 61, 2, 2, 142, 4, 3, 2, 2, 2, 143, 144, 7, 117, 2, 2, 144, 145, 7, 109, 2, 2, 145, 146, 7, 107, 2, 2, 146, 147, 7, 114, 2, 2, 147, 6, 3, 2, 2, 2, 148, 149, 7, 114, 2, 2, 149, 150, 7, 116, 2, 2, 150, 151, 7, 107, 2, 2, 151, 152, 7, 112, 2, 2, 152, 153, 7, 118, 2, 2, 153, 8, 3, 2, 2, 2, 154, 155, 7, 63, 2, 2, 155, 10, 3, 2, 2, 2, 156, 157, 7, 96, 2, 2, 157, 12, 3, 2, 2, 2, 158, 159, 7, 44, 2, 2, 159, 14, 3, 2, 2, 2, 160, 161, 7, 49, 2, 2, 161, 16, 3, 2, 2, 2, 162, 163, 7, 39, 2, 2, 163, 18, 3, 2, 2, 2, 164, 165, 7, 45, 2, 2, 165, 20, 3, 2, 2, 2, 166, 167, 7, 47, 2, 2, 167, 22, 3, 2, 2, 2, 168, 169, 7, 62, 2, 2, 169, 170, 7, 62, 2, 2, 170, 24, 3, 2, 2, 2, 171, 172, 7, 64, 2, 2, 172, 173, 7, 64, 2, 2, 173, 26, 3, 2, 2, 2, 174, 175, 7, 40, 2, 2, 175, 28, 3, 2, 2, 2, 176, 177, 7, 38, 2, 2, 177, 30, 3, 2, 2, 2, 178, 179, 7, 126, 2, 2, 179, 32, 3, 2, 2, 2, 180, 181, 7, 100, 2, 2, 181, 182, 7, 116, 2, 2, 182, 183, 7, 103, 2, 2, 183, 184, 7, 99, 2, 2, 184, 185, 7, 109, 2, 2, 185, 34, 3, 2, 2, 2, 186, 187, 7, 101, 2, 2, 187, 188, 7, 113, 2, 2, 188, 189, 7, 112, 2, 2, 189, 190, 7, 118, 2, 2, 190, 191, 7, 107, 2, 2, 191, 192, 7, 112, 2, 2, 192, 193, 7, 119, 2, 2, 193, 194, 7, 103, 2, 2, 194, 36, 3, 2, 2, 2, 195, 196, 7, 116, 2, 2, 196, 197, 7, 103, 2, 2, 197, 198, 7, 118, 2, 2, 198, 199, 7, 119, 2, 2, 199, 200, 7, 116, 2, 2, 200, 201, 7, 112, 2, 2, 201, 38, 3, 2, 2, 2, 202, 203, 7, 46, 2, 2, 203, 40, 3, 2, 2, 2, 204, 205, 7, 107, 2, 2, 205, 206, 7, 104, 2, 2, 206, 42, 3, 2, 2, 2, 207, 208, 7, 103, 2, 2, 208, 209, 7, 110, 2, 2, 209, 210, 7, 107, 2, 2, 210, 211, 7, 104, 2, 2, 211, 44, 3, 2, 2, 2, 212, 213, 7, 103, 2, 2, 213, 214, 7, 110, 2, 2, 214, 215, 7, 117, 2, 2, 215, 216, 7, 103, 2, 2, 216, 46, 3, 2, 2, 2, 217, 218, 7, 121, 2, 2, 218, 219, 7, 106, 2, 2, 219, 220, 7, 107, 2, 2, 220, 221, 7, 110, 2, 2, 221, 222, 7, 103, 2, 2, 222, 48, 3, 2, 2, 2, 223, 224, 7, 119, 2, 2, 224, 225, 7, 112, 2, 2, 225, 226, 7, 118, 2, 2, 226, 227, 7, 107, 2, 2, 227, 228, 7, 110, 2, 2, 228, 50, 3, 2, 2, 2, 229, 230, 7, 104, 2, 2, 230, 231, 7, 113, 2, 2, 231, 232, 7, 116, 2, 2, 232, 52, 3, 2, 2, 2, 233, 234, 7, 107, 2, 2, 234, 235, 7, 112, 2, 2, 235, 54, 3, 2, 2, 2, 236, 237, 7, 117, 2, 2, 237, 238, 7, 118, 2, 2, 238, 239, 7, 103, 2, 2, 239, 240, 7, 114, 2, 2, 240, 56, 3, 2, 2, 2, 241, 242, 7, 104, 2, 2, 242, 243, 7, 119, 2, 2, 243, 244, 7, 112, 2, 2, 244, 245, 7, 101, 2, 2, 245, 58, 3, 2, 2, 2, 246, 247, 7, 42, 2, 2, 247, 60, 3, 2, 2, 2, 248, 249, 7, 43, 2, 2, 249, 62, 3, 2, 2, 2, 250, 251, 7, 102, 2, 2, 251, 252, 7, 113, 2, 2, 252, 64, 3, 2, 2, 2, 253, 254, 7, 125, 2, 2, 254, 66, 3, 2, 2, 2, 255, 256, 7, 127, 2, 2, 256, 68, 3, 2, 2, 2, 257, 258, 7, 102, 2, 2, 258, 259, 7, 103, 2, 2, 259, 260, 7, 104, 2, 2, 260, 70, 3, 2, 2, 2, 261, 262, 7, 93, 2, 2, 262, 72, 3, 2, 2, 2, 263, 264, 7, 95, 2, 2, 264, 74, 3, 2, 2, 2, 265, 266, 7, 48, 2, 2, 266, 76, 3, 2, 2, 2, 267, 268, 7, 128, 2, 2, 268, 78, 3, 2, 2, 2, 269, 270, 7, 48, 2, 2, 270, 271, 7, 48, 2, 2, 271, 80, 3, 2, 2, 2, 272, 273, 7, 48, 2, 2, 273, 274, 7, 48, 2, 2, 274, 275, 7, 48, 2, 2, 275, 82, 3, 2, 2, 2, 276, 277, 7, 63, 2, 2, 277, 278, 7, 63, 2, 2, 278, 84, 3, 2, 2, 2, 279, 280, 7, 35, 2, 2, 280, 281, 7, 63, 2, 2, 281, 86, 3, 2, 2, 2, 282, 283, 7, 62, 2, 2, 283, 88, 3, 2, 2, 2, 284, 285, 7, 62, 2, 2, 285, 286, 7, 63, 2, 2, 286, 90, 3, 2, 2, 2, 287, 288, 7, 64, 2, 2, 288, 92, 3, 2, 2, 2, 289, 290, 7, 64, 2, 2, 290, 291, 7, 63, 2, 2, 291, 94, 3, 2, 2, 2, 292, 293, 7, 112, 2, 2, 293, 294, 7, 113, 2, 2, 294, 295, 7, 118, 2, 2, 295, 96, 3, 2, 2, 2, 296, 297, 7, 99, 2, 2, 297, 298, 7, 112, 2, 2, 298, 299, 7, 102, 2, 2, 299, 98, 3, 2, 2, 2, 300, 301, 7, 113, 2, 2, 301, 302, 7, 116, 2, 2, 302, 100, 3, 2, 2, 2, 303, 304, 7, 65, 2, 2, 304, 102, 3, 2, 2, 2, 305, 306, 7, 60, 2, 2, 306, 104, 3, 2, 2, 2, 307, 308, 7, 118, 2, 2, 308, 309, 7, 116, 2, 2, 309, 310, 7, 119, 2, 2, 310, 311, 7, 103, 2, 2, 311, 106, 3, 2, 2, 2, 312, 313, 7, 104, 2, 2, 313, 314, 7, 99, 2, 2, 314, 315, 7, 110, 2, 2, 315, 316, 7, 117, 2, 2, 316, 317, 7, 103, 2, 2, 317, 108, 3, 2, 2, 2, 318, 319, 7, 88, 2, 2, 319, 320, 7, 113, 2, 2, 320, 321, 7, 107, 2, 2, 321, 322, 7, 102, 2, 2, 322, 110, 3, 2, 2, 2, 323, 324, 7, 75, 2, 2, 324, 325, 7, 112, 2, 2, 325, 326, 7, 118, 2, 2, 326, 112, 3, 2, 2, 2, 327, 328, 7, 72, 2, 2, 328, 329, 7, 110, 2, 2, 329, 330, 7, 113, 2, 2, 330, 331, 7, 99, 2, 2, 331, 332, 7, 118, 2, 2, 332, 114, 3, 2, 2, 2, 333, 334, 7, 68, 2, 2, 334, 335, 7, 113, 2, 2, 335, 336, 7, 113, 2, 2, 336, 337, 7, 110, 2, 2, 337, 116, 3, 2, 2, 2, 338, 339, 7, 69, 2, 2, 339, 340, 7, 106, 2, 2, 340, 341, 7, 99, 2, 2, 341, 342, 7, 116, 2, 2, 342, 118, 3, 2, 2, 2, 343, 344, 7, 85, 2, 2, 344, 345, 7, 118, 2, 2, 345, 346, 7, 116, 2, 2, 346, 347, 7, 107, 2, 2, 347, 348, 7, 112, 2, 2, 348, 349, 7, 105, 2, 2, 349, 120, 3, 2, 2, 2, 350, 352, 5, 131, 66, 2, 351, 350, 3, 2, 2, 2, 352, 353, 3, 2, 2, 2, 353, 351, 3, 2, 2, 2, 353, 354, 3, 2, 2, 2, 354, 122, 3, 2, 2, 2, 355, 357, 5, 131, 66, 2, 356, 355, 3, 2, 2, 2, 357, 358, 3, 2, 2, 2, 358, 356, 3, 2, 2, 2, 358, 359, 3, 2, 2, 2, 359, 360, 3, 2, 2, 2, 360, 362, 7, 48, 2, 2, 361, 363, 5, 131, 66, 2, 362, 361, 3, 2, 2, 2, 363, 364, 3, 2, 2, 2, 364, 362, 3, 2, 2, 2, 364, 365, 3, 2, 2, 2, 365, 375, 3, 2, 2, 2, 366, 368, 7, 103, 2, 2, 367, 369, 7, 47, 2, 2, 368, 367, 3, 2, 2, 2, 368, 369, 3, 2, 2, 2, 369, 371, 3, 2, 2, 2, 370, 372, 5, 131, 66, 2, 371, 370, 3, 2, 2, 2, 372, 373, 3, 2, 2, 2, 373, 371, 3, 2, 2, 2, 373, 374, 3, 2, 2, 2, 374, 376, 3, 2, 2, 2, 375, 366, 3, 2, 2, 2, 375, 376, 3, 2, 2, 2, 376, 124, 3, 2, 2, 2, 377, 383, 7, 41, 2, 2, 378, 382, 10, 2, 2, 2, 379, 380, 7, 94, 2, 2, 380, 382, 9, 3, 2, 2, 381, 378, 3, 2, 2, 2, 381, 379, 3, 2, 2, 2, 382, 385, 3, 2, 2, 2, 383, 381, 3, 2, 2, 2, 383, 384, 3, 2, 2, 2, 384, 386, 3, 2, 2, 2, 385, 383, 3, 2, 2, 2, 386, 387, 7, 41, 2, 2, 387, 126, 3, 2, 2, 2, 388, 394, 7, 36, 2, 2, 389, 393, 10, 4, 2, 2, 390, 391, 7, 94, 2, 2, 391, 393, 9, 5, 2, 2, 392, 389, 3, 2, 2, 2, 392, 390, 3, 2, 2, 2, 393, 396, 3, 2, 2, 2, 394, 392, 3, 2, 2, 2, 394, 395, 3, 2, 2, 2, 395, 397, 3, 2, 2, 2, 396, 394, 3, 2, 2, 2, 397, 398, 7, 36, 2, 2, 398, 128, 3, 2, 2, 2, 399, 403, 5, 133, 67, 2, 400, 402, 5, 135, 68, 2, 401, 400, 3, 2, 2, 2, 402, 405, 3, 2, 2, 2, 403, 401, 3, 2, 2, 2, 403, 404, 3, 2, 2, 2, 404, 130, 3, 2, 2, 2, 405, 403, 3, 2, 2, 2, 406, 407, 9, 6, 2, 2, 407, 132, 3, 2, 2, 2, 408, 409, 9, 7, 2, 2, 409, 134, 3, 2, 2, 2, 410, 414, 5, 133, 67, 2, 411, 414, 5, 131, 66, 2, 412, 414, 9, 8, 2, 2, 413, 410, 3, 2, 2, 2, 413, 411, 3, 2, 2, 2, 413, 412, 3, 2, 2, 2, 414, 136, 3, 2, 2, 2, 415, 417, 9, 9, 2, 2, 416, 415, 3, 2, 2, 2, 417, 418, 3, 2, 2, 2, 418, 416, 3, 2, 2, 2, 418, 419, 3, 2, 2, 2, 419, 420, 3, 2, 2, 2, 420, 421, 8, 69, 2, 2, 421, 138, 3, 2, 2, 2, 422, 423, 11, 2, 2, 2, 423, 140, 3, 2, 2, 2, 16, 2, 353, 358, 364, 368, 373, 375, 381, 383, 392, 394, 403, 413, 418, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 69, 429, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 62, 6, 62, 357, 10, 62, 13, 62, 14, 62, 358, 3, 63, 6, 63, 362, 10, 63, 13, 63, 14, 63, 363, 3, 63, 3, 63, 6, 63, 368, 10, 63, 13, 63, 14, 63, 369, 3, 63, 3, 63, 5, 63, 374, 10, 63, 3, 63, 6, 63, 377, 10, 63, 13, 63, 14, 63, 378, 5, 63, 381, 10, 63, 3, 64, 3, 64, 3, 64, 3, 64, 7, 64, 387, 10, 64, 12, 64, 14, 64, 390, 11, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 7, 65, 398, 10, 65, 12, 65, 14, 65, 401, 11, 65, 3, 65, 3, 65, 3, 66, 3, 66, 7, 66, 407, 10, 66, 12, 66, 14, 66, 410, 11, 66, 3, 67, 3, 67, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 5, 69, 419, 10, 69, 3, 70, 6, 70, 422, 10, 70, 13, 70, 14, 70, 423, 3, 70, 3, 70, 3, 71, 3, 71, 2, 2, 72, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 2, 135, 2, 137, 2, 139, 68, 141, 69, 3, 2, 10, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 439, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 3, 143, 3, 2, 2, 2, 5, 145, 3, 2, 2, 2, 7, 150, 3, 2, 2, 2, 9, 156, 3, 2, 2, 2, 11, 158, 3, 2, 2, 2, 13, 160, 3, 2, 2, 2, 15, 162, 3, 2, 2, 2, 17, 164, 3, 2, 2, 2, 19, 166, 3, 2, 2, 2, 21, 168, 3, 2, 2, 2, 23, 170, 3, 2, 2, 2, 25, 173, 3, 2, 2, 2, 27, 176, 3, 2, 2, 2, 29, 178, 3, 2, 2, 2, 31, 180, 3, 2, 2, 2, 33, 182, 3, 2, 2, 2, 35, 188, 3, 2, 2, 2, 37, 197, 3, 2, 2, 2, 39, 204, 3, 2, 2, 2, 41, 206, 3, 2, 2, 2, 43, 209, 3, 2, 2, 2, 45, 214, 3, 2, 2, 2, 47, 219, 3, 2, 2, 2, 49, 225, 3, 2, 2, 2, 51, 231, 3, 2, 2, 2, 53, 235, 3, 2, 2, 2, 55, 238, 3, 2, 2, 2, 57, 243, 3, 2, 2, 2, 59, 248, 3, 2, 2, 2, 61, 250, 3, 2, 2, 2, 63, 252, 3, 2, 2, 2, 65, 255, 3, 2, 2, 2, 67, 257, 3, 2, 2, 2, 69, 259, 3, 2, 2, 2, 71, 263, 3, 2, 2, 2, 73, 265, 3, 2, 2, 2, 75, 267, 3, 2, 2, 2, 77, 269, 3, 2, 2, 2, 79, 271, 3, 2, 2, 2, 81, 274, 3, 2, 2, 2, 83, 278, 3, 2, 2, 2, 85, 281, 3, 2, 2, 2, 87, 284, 3, 2, 2, 2, 89, 286, 3, 2, 2, 2, 91, 289, 3, 2, 2, 2, 93, 291, 3, 2, 2, 2, 95, 294, 3, 2, 2, 2, 97, 298, 3, 2, 2, 2, 99, 302, 3, 2, 2, 2, 101, 305, 3, 2, 2, 2, 103, 307, 3, 2, 2, 2, 105, 309, 3, 2, 2, 2, 107, 314, 3, 2, 2, 2, 109, 320, 3, 2, 2, 2, 111, 325, 3, 2, 2, 2, 113, 329, 3, 2, 2, 2, 115, 335, 3, 2, 2, 2, 117, 340, 3, 2, 2, 2, 119, 345, 3, 2, 2, 2, 121, 352, 3, 2, 2, 2, 123, 356, 3, 2, 2, 2, 125, 361, 3, 2, 2, 2, 127, 382, 3, 2, 2, 2, 129, 393, 3, 2, 2, 2, 131, 404, 3, 2, 2, 2, 133, 411, 3, 2, 2, 2, 135, 413, 3, 2, 2, 2, 137, 418, 3, 2, 2, 2, 139, 421, 3, 2, 2, 2, 141, 427, 3, 2, 2, 2, 143, 144, 7, 61, 2, 2, 144, 4, 3, 2, 2, 2, 145, 146, 7, 117, 2, 2, 146, 147, 7, 109, 2, 2, 147, 148, 7, 107, 2, 2, 148, 149, 7, 114, 2, 2, 149, 6, 3, 2, 2, 2, 150, 151, 7, 114, 2, 2, 151, 152, 7, 116, 2, 2, 152, 153, 7, 107, 2, 2, 153, 154, 7, 112, 2, 2, 154, 155, 7, 118, 2, 2, 155, 8, 3, 2, 2, 2, 156, 157, 7, 63, 2, 2, 157, 10, 3, 2, 2, 2, 158, 159, 7, 96, 2, 2, 159, 12, 3, 2, 2, 2, 160, 161, 7, 44, 2, 2, 161, 14, 3, 2, 2, 2, 162, 163, 7, 49, 2, 2, 163, 16, 3, 2, 2, 2, 164, 165, 7, 39, 2, 2, 165, 18, 3, 2, 2, 2, 166, 167, 7, 45, 2, 2, 167, 20, 3, 2, 2, 2, 168, 169, 7, 47, 2, 2, 169, 22, 3, 2, 2, 2, 170, 171, 7, 62, 2, 2, 171, 172, 7, 62, 2, 2, 172, 24, 3, 2, 2, 2, 173, 174, 7, 64, 2, 2, 174, 175, 7, 64, 2, 2, 175, 26, 3, 2, 2, 2, 176, 177, 7, 40, 2, 2, 177, 28, 3, 2, 2, 2, 178, 179, 7, 38, 2, 2, 179, 30, 3, 2, 2, 2, 180, 181, 7, 126, 2, 2, 181, 32, 3, 2, 2, 2, 182, 183, 7, 100, 2, 2, 183, 184, 7, 116, 2, 2, 184, 185, 7, 103, 2, 2, 185, 186, 7, 99, 2, 2, 186, 187, 7, 109, 2, 2, 187, 34, 3, 2, 2, 2, 188, 189, 7, 101, 2, 2, 189, 190, 7, 113, 2, 2, 190, 191, 7, 112, 2, 2, 191, 192, 7, 118, 2, 2, 192, 193, 7, 107, 2, 2, 193, 194, 7, 112, 2, 2, 194, 195, 7, 119, 2, 2, 195, 196, 7, 103, 2, 2, 196, 36, 3, 2, 2, 2, 197, 198, 7, 116, 2, 2, 198, 199, 7, 103, 2, 2, 199, 200, 7, 118, 2, 2, 200, 201, 7, 119, 2, 2, 201, 202, 7, 116, 2, 2, 202, 203, 7, 112, 2, 2, 203, 38, 3, 2, 2, 2, 204, 205, 7, 46, 2, 2, 205, 40, 3, 2, 2, 2, 206, 207, 7, 107, 2, 2, 207, 208, 7, 104, 2, 2, 208, 42, 3, 2, 2, 2, 209, 210, 7, 103, 2, 2, 210, 211, 7, 110, 2, 2, 211, 212, 7, 107, 2, 2, 212, 213, 7, 104, 2, 2, 213, 44, 3, 2, 2, 2, 214, 215, 7, 103, 2, 2, 215, 216, 7, 110, 2, 2, 216, 217, 7, 117, 2, 2, 217, 218, 7, 103, 2, 2, 218, 46, 3, 2, 2, 2, 219, 220, 7, 121, 2, 2, 220, 221, 7, 106, 2, 2, 221, 222, 7, 107, 2, 2, 222, 223, 7, 110, 2, 2, 223, 224, 7, 103, 2, 2, 224, 48, 3, 2, 2, 2, 225, 226, 7, 119, 2, 2, 226, 227, 7, 112, 2, 2, 227, 228, 7, 118, 2, 2, 228, 229, 7, 107, 2, 2, 229, 230, 7, 110, 2, 2, 230, 50, 3, 2, 2, 2, 231, 232, 7, 104, 2, 2, 232, 233, 7, 113, 2, 2, 233, 234, 7, 116, 2, 2, 234, 52, 3, 2, 2, 2, 235, 236, 7, 107, 2, 2, 236, 237, 7, 112, 2, 2, 237, 54, 3, 2, 2, 2, 238, 239, 7, 117, 2, 2, 239, 240, 7, 118, 2, 2, 240, 241, 7, 103, 2, 2, 241, 242, 7, 114, 2, 2, 242, 56, 3, 2, 2, 2, 243, 244, 7, 104, 2, 2, 244, 245, 7, 119, 2, 2, 245, 246, 7, 112, 2, 2, 246, 247, 7, 101, 2, 2, 247, 58, 3, 2, 2, 2, 248, 249, 7, 42, 2, 2, 249, 60, 3, 2, 2, 2, 250, 251, 7, 43, 2, 2, 251, 62, 3, 2, 2, 2, 252, 253, 7, 102, 2, 2, 253, 254, 7, 113, 2, 2, 254, 64, 3, 2, 2, 2, 255, 256, 7, 125, 2, 2, 256, 66, 3, 2, 2, 2, 257, 258, 7, 127, 2, 2, 258, 68, 3, 2, 2, 2, 259, 260, 7, 102, 2, 2, 260, 261, 7, 103, 2, 2, 261, 262, 7, 104, 2, 2, 262, 70, 3, 2, 2, 2, 263, 264, 7, 93, 2, 2, 264, 72, 3, 2, 2, 2, 265, 266, 7, 95, 2, 2, 266, 74, 3, 2, 2, 2, 267, 268, 7, 48, 2, 2, 268, 76, 3, 2, 2, 2, 269, 270, 7, 128, 2, 2, 270, 78, 3, 2, 2, 2, 271, 272, 7, 48, 2, 2, 272, 273, 7, 48, 2, 2, 273, 80, 3, 2, 2, 2, 274, 275, 7, 48, 2, 2, 275, 276, 7, 48, 2, 2, 276, 277, 7, 48, 2, 2, 277, 82, 3, 2, 2, 2, 278, 279, 7, 63, 2, 2, 279, 280, 7, 63, 2, 2, 280, 84, 3, 2, 2, 2, 281, 282, 7, 35, 2, 2, 282, 283, 7, 63, 2, 2, 283, 86, 3, 2, 2, 2, 284, 285, 7, 62, 2, 2, 285, 88, 3, 2, 2, 2, 286, 287, 7, 62, 2, 2, 287, 288, 7, 63, 2, 2, 288, 90, 3, 2, 2, 2, 289, 290, 7, 64, 2, 2, 290, 92, 3, 2, 2, 2, 291, 292, 7, 64, 2, 2, 292, 293, 7, 63, 2, 2, 293, 94, 3, 2, 2, 2, 294, 295, 7, 112, 2, 2, 295, 296, 7, 113, 2, 2, 296, 297, 7, 118, 2, 2, 297, 96, 3, 2, 2, 2, 298, 299, 7, 99, 2, 2, 299, 300, 7, 112, 2, 2, 300, 301, 7, 102, 2, 2, 301, 98, 3, 2, 2, 2, 302, 303, 7, 113, 2, 2, 303, 304, 7, 116, 2, 2, 304, 100, 3, 2, 2, 2, 305, 306, 7, 65, 2, 2, 306, 102, 3, 2, 2, 2, 307, 308, 7, 60, 2, 2, 308, 104, 3, 2, 2, 2, 309, 310, 7, 118, 2, 2, 310, 311, 7, 116, 2, 2, 311, 312, 7, 119, 2, 2, 312, 313, 7, 103, 2, 2, 313, 106, 3, 2, 2, 2, 314, 315, 7, 104, 2, 2, 315, 316, 7, 99, 2, 2, 316, 317, 7, 110, 2, 2, 317, 318, 7, 117, 2, 2, 318, 319, 7, 103, 2, 2, 319, 108, 3, 2, 2, 2, 320, 321, 7, 88, 2, 2, 321, 322, 7, 113, 2, 2, 322, 323, 7, 107, 2, 2, 323, 324, 7, 102, 2, 2, 324, 110, 3, 2, 2, 2, 325, 326, 7, 75, 2, 2, 326, 327, 7, 112, 2, 2, 327, 328, 7, 118, 2, 2, 328, 112, 3, 2, 2, 2, 329, 330, 7, 72, 2, 2, 330, 331, 7, 110, 2, 2, 331, 332, 7, 113, 2, 2, 332, 333, 7, 99, 2, 2, 333, 334, 7, 118, 2, 2, 334, 114, 3, 2, 2, 2, 335, 336, 7, 68, 2, 2, 336, 337, 7, 113, 2, 2, 337, 338, 7, 113, 2, 2, 338, 339, 7, 110, 2, 2, 339, 116, 3, 2, 2, 2, 340, 341, 7, 69, 2, 2, 341, 342, 7, 106, 2, 2, 342, 343, 7, 99, 2, 2, 343, 344, 7, 116, 2, 2, 344, 118, 3, 2, 2, 2, 345, 346, 7, 85, 2, 2, 346, 347, 7, 118, 2, 2, 347, 348, 7, 116, 2, 2, 348, 349, 7, 107, 2, 2, 349, 350, 7, 112, 2, 2, 350, 351, 7, 105, 2, 2, 351, 120, 3, 2, 2, 2, 352, 353, 7, 47, 2, 2, 353, 354, 7, 64, 2, 2, 354, 122, 3, 2, 2, 2, 355, 357, 5, 133, 67, 2, 356, 355, 3, 2, 2, 2, 357, 358, 3, 2, 2, 2, 358, 356, 3, 2, 2, 2, 358, 359, 3, 2, 2, 2, 359, 124, 3, 2, 2, 2, 360, 362, 5, 133, 67, 2, 361, 360, 3, 2, 2, 2, 362, 363, 3, 2, 2, 2, 363, 361, 3, 2, 2, 2, 363, 364, 3, 2, 2, 2, 364, 365, 3, 2, 2, 2, 365, 367, 7, 48, 2, 2, 366, 368, 5, 133, 67, 2, 367, 366, 3, 2, 2, 2, 368, 369, 3, 2, 2, 2, 369, 367, 3, 2, 2, 2, 369, 370, 3, 2, 2, 2, 370, 380, 3, 2, 2, 2, 371, 373, 7, 103, 2, 2, 372, 374, 7, 47, 2, 2, 373, 372, 3, 2, 2, 2, 373, 374, 3, 2, 2, 2, 374, 376, 3, 2, 2, 2, 375, 377, 5, 133, 67, 2, 376, 375, 3, 2, 2, 2, 377, 378, 3, 2, 2, 2, 378, 376, 3, 2, 2, 2, 378, 379, 3, 2, 2, 2, 379, 381, 3, 2, 2, 2, 380, 371, 3, 2, 2, 2, 380, 381, 3, 2, 2, 2, 381, 126, 3, 2, 2, 2, 382, 388, 7, 41, 2, 2, 383, 387, 10, 2, 2, 2, 384, 385, 7, 94, 2, 2, 385, 387, 9, 3, 2, 2, 386, 383, 3, 2, 2, 2, 386, 384, 3, 2, 2, 2, 387, 390, 3, 2, 2, 2, 388, 386, 3, 2, 2, 2, 388, 389, 3, 2, 2, 2, 389, 391, 3, 2, 2, 2, 390, 388, 3, 2, 2, 2, 391, 392, 7, 41, 2, 2, 392, 128, 3, 2, 2, 2, 393, 399, 7, 36, 2, 2, 394, 398, 10, 4, 2, 2, 395, 396, 7, 94, 2, 2, 396, 398, 9, 5, 2, 2, 397, 394, 3, 2, 2, 2, 397, 395, 3, 2, 2, 2, 398, 401, 3, 2, 2, 2, 399, 397, 3, 2, 2, 2, 399, 400, 3, 2, 2, 2, 400, 402, 3, 2, 2, 2, 401, 399, 3, 2, 2, 2, 402, 403, 7, 36, 2, 2, 403, 130, 3, 2, 2, 2, 404, 408, 5, 135, 68, 2, 405, 407, 5, 137, 69, 2, 406, 405, 3, 2, 2, 2, 407, 410, 3, 2, 2, 2, 408, 406, 3, 2, 2, 2, 408, 409, 3, 2, 2, 2, 409, 132, 3, 2, 2, 2, 410, 408, 3, 2, 2, 2, 411, 412, 9, 6, 2, 2, 412, 134, 3, 2, 2, 2, 413, 414, 9, 7, 2, 2, 414, 136, 3, 2, 2, 2, 415, 419, 5, 135, 68, 2, 416, 419, 5, 133, 67, 2, 417, 419, 9, 8, 2, 2, 418, 415, 3, 2, 2, 2, 418, 416, 3, 2, 2, 2, 418, 417, 3, 2, 2, 2, 419, 138, 3, 2, 2, 2, 420, 422, 9, 9, 2, 2, 421, 420, 3, 2, 2, 2, 422, 423, 3, 2, 2, 2, 423, 421, 3, 2, 2, 2, 423, 424, 3, 2, 2, 2, 424, 425, 3, 2, 2, 2, 425, 426, 8, 70, 2, 2, 426, 140, 3, 2, 2, 2, 427, 428, 11, 2, 2, 2, 428, 142, 3, 2, 2, 2, 16, 2, 358, 363, 369, 373, 378, 380, 386, 388, 397, 399, 408, 418, 423, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py index 2ce9e02f..5f5a9d15 100644 --- a/src/antlr/PyxellLexer.py +++ b/src/antlr/PyxellLexer.py @@ -8,8 +8,8 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2D") - buf.write("\u01a8\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2E") + buf.write("\u01ad\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") @@ -19,174 +19,176 @@ def serializedATN(): buf.write("\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64") buf.write("\t\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:") buf.write("\4;\t;\4<\t<\4=\t=\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\t") - buf.write("C\4D\tD\4E\tE\4F\tF\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\4\3") - buf.write("\4\3\4\3\4\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t") - buf.write("\3\t\3\n\3\n\3\13\3\13\3\f\3\f\3\f\3\r\3\r\3\r\3\16\3") - buf.write("\16\3\17\3\17\3\20\3\20\3\21\3\21\3\21\3\21\3\21\3\21") - buf.write("\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\23\3\23") - buf.write("\3\23\3\23\3\23\3\23\3\23\3\24\3\24\3\25\3\25\3\25\3\26") - buf.write("\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27\3\27\3\30\3\30") - buf.write("\3\30\3\30\3\30\3\30\3\31\3\31\3\31\3\31\3\31\3\31\3\32") - buf.write("\3\32\3\32\3\32\3\33\3\33\3\33\3\34\3\34\3\34\3\34\3\34") - buf.write("\3\35\3\35\3\35\3\35\3\35\3\36\3\36\3\37\3\37\3 \3 \3") - buf.write(" \3!\3!\3\"\3\"\3#\3#\3#\3#\3$\3$\3%\3%\3&\3&\3\'\3\'") - buf.write("\3(\3(\3(\3)\3)\3)\3)\3*\3*\3*\3+\3+\3+\3,\3,\3-\3-\3") - buf.write("-\3.\3.\3/\3/\3/\3\60\3\60\3\60\3\60\3\61\3\61\3\61\3") - buf.write("\61\3\62\3\62\3\62\3\63\3\63\3\64\3\64\3\65\3\65\3\65") + buf.write("C\4D\tD\4E\tE\4F\tF\4G\tG\3\2\3\2\3\3\3\3\3\3\3\3\3\3") + buf.write("\3\4\3\4\3\4\3\4\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3") + buf.write("\b\3\t\3\t\3\n\3\n\3\13\3\13\3\f\3\f\3\f\3\r\3\r\3\r\3") + buf.write("\16\3\16\3\17\3\17\3\20\3\20\3\21\3\21\3\21\3\21\3\21") + buf.write("\3\21\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\23") + buf.write("\3\23\3\23\3\23\3\23\3\23\3\23\3\24\3\24\3\25\3\25\3\25") + buf.write("\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27\3\27\3\30") + buf.write("\3\30\3\30\3\30\3\30\3\30\3\31\3\31\3\31\3\31\3\31\3\31") + buf.write("\3\32\3\32\3\32\3\32\3\33\3\33\3\33\3\34\3\34\3\34\3\34") + buf.write("\3\34\3\35\3\35\3\35\3\35\3\35\3\36\3\36\3\37\3\37\3 ") + buf.write("\3 \3 \3!\3!\3\"\3\"\3#\3#\3#\3#\3$\3$\3%\3%\3&\3&\3\'") + buf.write("\3\'\3(\3(\3(\3)\3)\3)\3)\3*\3*\3*\3+\3+\3+\3,\3,\3-\3") + buf.write("-\3-\3.\3.\3/\3/\3/\3\60\3\60\3\60\3\60\3\61\3\61\3\61") + buf.write("\3\61\3\62\3\62\3\62\3\63\3\63\3\64\3\64\3\65\3\65\3\65") buf.write("\3\65\3\65\3\66\3\66\3\66\3\66\3\66\3\66\3\67\3\67\3\67") buf.write("\3\67\3\67\38\38\38\38\39\39\39\39\39\39\3:\3:\3:\3:\3") - buf.write(":\3;\3;\3;\3;\3;\3<\3<\3<\3<\3<\3<\3<\3=\6=\u0160\n=\r") - buf.write("=\16=\u0161\3>\6>\u0165\n>\r>\16>\u0166\3>\3>\6>\u016b") - buf.write("\n>\r>\16>\u016c\3>\3>\5>\u0171\n>\3>\6>\u0174\n>\r>\16") - buf.write(">\u0175\5>\u0178\n>\3?\3?\3?\3?\7?\u017e\n?\f?\16?\u0181") - buf.write("\13?\3?\3?\3@\3@\3@\3@\7@\u0189\n@\f@\16@\u018c\13@\3") - buf.write("@\3@\3A\3A\7A\u0192\nA\fA\16A\u0195\13A\3B\3B\3C\3C\3") - buf.write("D\3D\3D\5D\u019e\nD\3E\6E\u01a1\nE\rE\16E\u01a2\3E\3E") - buf.write("\3F\3F\2\2G\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25") - buf.write("\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+") - buf.write("\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#E") - buf.write("$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k") - buf.write("\67m8o9q:s;u{?}@\177A\u0081B\u0083\2\u0085\2\u0087") - buf.write("\2\u0089C\u008bD\3\2\n\4\2))^^\6\2))^^ppvv\4\2$$^^\6\2") - buf.write("$$^^ppvv\3\2\62;\5\2C\\aac|\4\2))aa\5\2\13\f\17\17\"\"") - buf.write("\2\u01b2\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2") - buf.write("\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2") - buf.write("\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2") - buf.write("\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3") - buf.write("\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2") - buf.write("-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3") - buf.write("\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2") - buf.write("?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2") - buf.write("\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2") - buf.write("\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2") - buf.write("\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3") - buf.write("\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2o") - buf.write("\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2u\3\2\2\2\2w\3\2\2\2\2") - buf.write("y\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177\3\2\2\2\2\u0081") - buf.write("\3\2\2\2\2\u0089\3\2\2\2\2\u008b\3\2\2\2\3\u008d\3\2\2") - buf.write("\2\5\u008f\3\2\2\2\7\u0094\3\2\2\2\t\u009a\3\2\2\2\13") - buf.write("\u009c\3\2\2\2\r\u009e\3\2\2\2\17\u00a0\3\2\2\2\21\u00a2") - buf.write("\3\2\2\2\23\u00a4\3\2\2\2\25\u00a6\3\2\2\2\27\u00a8\3") - buf.write("\2\2\2\31\u00ab\3\2\2\2\33\u00ae\3\2\2\2\35\u00b0\3\2") - buf.write("\2\2\37\u00b2\3\2\2\2!\u00b4\3\2\2\2#\u00ba\3\2\2\2%\u00c3") - buf.write("\3\2\2\2\'\u00ca\3\2\2\2)\u00cc\3\2\2\2+\u00cf\3\2\2\2") - buf.write("-\u00d4\3\2\2\2/\u00d9\3\2\2\2\61\u00df\3\2\2\2\63\u00e5") - buf.write("\3\2\2\2\65\u00e9\3\2\2\2\67\u00ec\3\2\2\29\u00f1\3\2") - buf.write("\2\2;\u00f6\3\2\2\2=\u00f8\3\2\2\2?\u00fa\3\2\2\2A\u00fd") - buf.write("\3\2\2\2C\u00ff\3\2\2\2E\u0101\3\2\2\2G\u0105\3\2\2\2") - buf.write("I\u0107\3\2\2\2K\u0109\3\2\2\2M\u010b\3\2\2\2O\u010d\3") - buf.write("\2\2\2Q\u0110\3\2\2\2S\u0114\3\2\2\2U\u0117\3\2\2\2W\u011a") - buf.write("\3\2\2\2Y\u011c\3\2\2\2[\u011f\3\2\2\2]\u0121\3\2\2\2") - buf.write("_\u0124\3\2\2\2a\u0128\3\2\2\2c\u012c\3\2\2\2e\u012f\3") - buf.write("\2\2\2g\u0131\3\2\2\2i\u0133\3\2\2\2k\u0138\3\2\2\2m\u013e") - buf.write("\3\2\2\2o\u0143\3\2\2\2q\u0147\3\2\2\2s\u014d\3\2\2\2") - buf.write("u\u0152\3\2\2\2w\u0157\3\2\2\2y\u015f\3\2\2\2{\u0164\3") - buf.write("\2\2\2}\u0179\3\2\2\2\177\u0184\3\2\2\2\u0081\u018f\3") - buf.write("\2\2\2\u0083\u0196\3\2\2\2\u0085\u0198\3\2\2\2\u0087\u019d") - buf.write("\3\2\2\2\u0089\u01a0\3\2\2\2\u008b\u01a6\3\2\2\2\u008d") - buf.write("\u008e\7=\2\2\u008e\4\3\2\2\2\u008f\u0090\7u\2\2\u0090") - buf.write("\u0091\7m\2\2\u0091\u0092\7k\2\2\u0092\u0093\7r\2\2\u0093") - buf.write("\6\3\2\2\2\u0094\u0095\7r\2\2\u0095\u0096\7t\2\2\u0096") - buf.write("\u0097\7k\2\2\u0097\u0098\7p\2\2\u0098\u0099\7v\2\2\u0099") - buf.write("\b\3\2\2\2\u009a\u009b\7?\2\2\u009b\n\3\2\2\2\u009c\u009d") - buf.write("\7`\2\2\u009d\f\3\2\2\2\u009e\u009f\7,\2\2\u009f\16\3") - buf.write("\2\2\2\u00a0\u00a1\7\61\2\2\u00a1\20\3\2\2\2\u00a2\u00a3") - buf.write("\7\'\2\2\u00a3\22\3\2\2\2\u00a4\u00a5\7-\2\2\u00a5\24") - buf.write("\3\2\2\2\u00a6\u00a7\7/\2\2\u00a7\26\3\2\2\2\u00a8\u00a9") - buf.write("\7>\2\2\u00a9\u00aa\7>\2\2\u00aa\30\3\2\2\2\u00ab\u00ac") - buf.write("\7@\2\2\u00ac\u00ad\7@\2\2\u00ad\32\3\2\2\2\u00ae\u00af") - buf.write("\7(\2\2\u00af\34\3\2\2\2\u00b0\u00b1\7&\2\2\u00b1\36\3") - buf.write("\2\2\2\u00b2\u00b3\7~\2\2\u00b3 \3\2\2\2\u00b4\u00b5\7") - buf.write("d\2\2\u00b5\u00b6\7t\2\2\u00b6\u00b7\7g\2\2\u00b7\u00b8") - buf.write("\7c\2\2\u00b8\u00b9\7m\2\2\u00b9\"\3\2\2\2\u00ba\u00bb") - buf.write("\7e\2\2\u00bb\u00bc\7q\2\2\u00bc\u00bd\7p\2\2\u00bd\u00be") - buf.write("\7v\2\2\u00be\u00bf\7k\2\2\u00bf\u00c0\7p\2\2\u00c0\u00c1") - buf.write("\7w\2\2\u00c1\u00c2\7g\2\2\u00c2$\3\2\2\2\u00c3\u00c4") - buf.write("\7t\2\2\u00c4\u00c5\7g\2\2\u00c5\u00c6\7v\2\2\u00c6\u00c7") - buf.write("\7w\2\2\u00c7\u00c8\7t\2\2\u00c8\u00c9\7p\2\2\u00c9&\3") - buf.write("\2\2\2\u00ca\u00cb\7.\2\2\u00cb(\3\2\2\2\u00cc\u00cd\7") - buf.write("k\2\2\u00cd\u00ce\7h\2\2\u00ce*\3\2\2\2\u00cf\u00d0\7") - buf.write("g\2\2\u00d0\u00d1\7n\2\2\u00d1\u00d2\7k\2\2\u00d2\u00d3") - buf.write("\7h\2\2\u00d3,\3\2\2\2\u00d4\u00d5\7g\2\2\u00d5\u00d6") - buf.write("\7n\2\2\u00d6\u00d7\7u\2\2\u00d7\u00d8\7g\2\2\u00d8.\3") - buf.write("\2\2\2\u00d9\u00da\7y\2\2\u00da\u00db\7j\2\2\u00db\u00dc") - buf.write("\7k\2\2\u00dc\u00dd\7n\2\2\u00dd\u00de\7g\2\2\u00de\60") - buf.write("\3\2\2\2\u00df\u00e0\7w\2\2\u00e0\u00e1\7p\2\2\u00e1\u00e2") - buf.write("\7v\2\2\u00e2\u00e3\7k\2\2\u00e3\u00e4\7n\2\2\u00e4\62") - buf.write("\3\2\2\2\u00e5\u00e6\7h\2\2\u00e6\u00e7\7q\2\2\u00e7\u00e8") - buf.write("\7t\2\2\u00e8\64\3\2\2\2\u00e9\u00ea\7k\2\2\u00ea\u00eb") - buf.write("\7p\2\2\u00eb\66\3\2\2\2\u00ec\u00ed\7u\2\2\u00ed\u00ee") - buf.write("\7v\2\2\u00ee\u00ef\7g\2\2\u00ef\u00f0\7r\2\2\u00f08\3") - buf.write("\2\2\2\u00f1\u00f2\7h\2\2\u00f2\u00f3\7w\2\2\u00f3\u00f4") - buf.write("\7p\2\2\u00f4\u00f5\7e\2\2\u00f5:\3\2\2\2\u00f6\u00f7") - buf.write("\7*\2\2\u00f7<\3\2\2\2\u00f8\u00f9\7+\2\2\u00f9>\3\2\2") - buf.write("\2\u00fa\u00fb\7f\2\2\u00fb\u00fc\7q\2\2\u00fc@\3\2\2") - buf.write("\2\u00fd\u00fe\7}\2\2\u00feB\3\2\2\2\u00ff\u0100\7\177") - buf.write("\2\2\u0100D\3\2\2\2\u0101\u0102\7f\2\2\u0102\u0103\7g") - buf.write("\2\2\u0103\u0104\7h\2\2\u0104F\3\2\2\2\u0105\u0106\7]") - buf.write("\2\2\u0106H\3\2\2\2\u0107\u0108\7_\2\2\u0108J\3\2\2\2") - buf.write("\u0109\u010a\7\60\2\2\u010aL\3\2\2\2\u010b\u010c\7\u0080") - buf.write("\2\2\u010cN\3\2\2\2\u010d\u010e\7\60\2\2\u010e\u010f\7") - buf.write("\60\2\2\u010fP\3\2\2\2\u0110\u0111\7\60\2\2\u0111\u0112") - buf.write("\7\60\2\2\u0112\u0113\7\60\2\2\u0113R\3\2\2\2\u0114\u0115") - buf.write("\7?\2\2\u0115\u0116\7?\2\2\u0116T\3\2\2\2\u0117\u0118") - buf.write("\7#\2\2\u0118\u0119\7?\2\2\u0119V\3\2\2\2\u011a\u011b") - buf.write("\7>\2\2\u011bX\3\2\2\2\u011c\u011d\7>\2\2\u011d\u011e") - buf.write("\7?\2\2\u011eZ\3\2\2\2\u011f\u0120\7@\2\2\u0120\\\3\2") - buf.write("\2\2\u0121\u0122\7@\2\2\u0122\u0123\7?\2\2\u0123^\3\2") - buf.write("\2\2\u0124\u0125\7p\2\2\u0125\u0126\7q\2\2\u0126\u0127") - buf.write("\7v\2\2\u0127`\3\2\2\2\u0128\u0129\7c\2\2\u0129\u012a") - buf.write("\7p\2\2\u012a\u012b\7f\2\2\u012bb\3\2\2\2\u012c\u012d") - buf.write("\7q\2\2\u012d\u012e\7t\2\2\u012ed\3\2\2\2\u012f\u0130") - buf.write("\7A\2\2\u0130f\3\2\2\2\u0131\u0132\7<\2\2\u0132h\3\2\2") - buf.write("\2\u0133\u0134\7v\2\2\u0134\u0135\7t\2\2\u0135\u0136\7") - buf.write("w\2\2\u0136\u0137\7g\2\2\u0137j\3\2\2\2\u0138\u0139\7") - buf.write("h\2\2\u0139\u013a\7c\2\2\u013a\u013b\7n\2\2\u013b\u013c") - buf.write("\7u\2\2\u013c\u013d\7g\2\2\u013dl\3\2\2\2\u013e\u013f") - buf.write("\7X\2\2\u013f\u0140\7q\2\2\u0140\u0141\7k\2\2\u0141\u0142") - buf.write("\7f\2\2\u0142n\3\2\2\2\u0143\u0144\7K\2\2\u0144\u0145") - buf.write("\7p\2\2\u0145\u0146\7v\2\2\u0146p\3\2\2\2\u0147\u0148") - buf.write("\7H\2\2\u0148\u0149\7n\2\2\u0149\u014a\7q\2\2\u014a\u014b") - buf.write("\7c\2\2\u014b\u014c\7v\2\2\u014cr\3\2\2\2\u014d\u014e") - buf.write("\7D\2\2\u014e\u014f\7q\2\2\u014f\u0150\7q\2\2\u0150\u0151") - buf.write("\7n\2\2\u0151t\3\2\2\2\u0152\u0153\7E\2\2\u0153\u0154") - buf.write("\7j\2\2\u0154\u0155\7c\2\2\u0155\u0156\7t\2\2\u0156v\3") - buf.write("\2\2\2\u0157\u0158\7U\2\2\u0158\u0159\7v\2\2\u0159\u015a") - buf.write("\7t\2\2\u015a\u015b\7k\2\2\u015b\u015c\7p\2\2\u015c\u015d") - buf.write("\7i\2\2\u015dx\3\2\2\2\u015e\u0160\5\u0083B\2\u015f\u015e") - buf.write("\3\2\2\2\u0160\u0161\3\2\2\2\u0161\u015f\3\2\2\2\u0161") - buf.write("\u0162\3\2\2\2\u0162z\3\2\2\2\u0163\u0165\5\u0083B\2\u0164") - buf.write("\u0163\3\2\2\2\u0165\u0166\3\2\2\2\u0166\u0164\3\2\2\2") - buf.write("\u0166\u0167\3\2\2\2\u0167\u0168\3\2\2\2\u0168\u016a\7") - buf.write("\60\2\2\u0169\u016b\5\u0083B\2\u016a\u0169\3\2\2\2\u016b") - buf.write("\u016c\3\2\2\2\u016c\u016a\3\2\2\2\u016c\u016d\3\2\2\2") - buf.write("\u016d\u0177\3\2\2\2\u016e\u0170\7g\2\2\u016f\u0171\7") - buf.write("/\2\2\u0170\u016f\3\2\2\2\u0170\u0171\3\2\2\2\u0171\u0173") - buf.write("\3\2\2\2\u0172\u0174\5\u0083B\2\u0173\u0172\3\2\2\2\u0174") - buf.write("\u0175\3\2\2\2\u0175\u0173\3\2\2\2\u0175\u0176\3\2\2\2") - buf.write("\u0176\u0178\3\2\2\2\u0177\u016e\3\2\2\2\u0177\u0178\3") - buf.write("\2\2\2\u0178|\3\2\2\2\u0179\u017f\7)\2\2\u017a\u017e\n") - buf.write("\2\2\2\u017b\u017c\7^\2\2\u017c\u017e\t\3\2\2\u017d\u017a") - buf.write("\3\2\2\2\u017d\u017b\3\2\2\2\u017e\u0181\3\2\2\2\u017f") - buf.write("\u017d\3\2\2\2\u017f\u0180\3\2\2\2\u0180\u0182\3\2\2\2") - buf.write("\u0181\u017f\3\2\2\2\u0182\u0183\7)\2\2\u0183~\3\2\2\2") - buf.write("\u0184\u018a\7$\2\2\u0185\u0189\n\4\2\2\u0186\u0187\7") - buf.write("^\2\2\u0187\u0189\t\5\2\2\u0188\u0185\3\2\2\2\u0188\u0186") - buf.write("\3\2\2\2\u0189\u018c\3\2\2\2\u018a\u0188\3\2\2\2\u018a") - buf.write("\u018b\3\2\2\2\u018b\u018d\3\2\2\2\u018c\u018a\3\2\2\2") - buf.write("\u018d\u018e\7$\2\2\u018e\u0080\3\2\2\2\u018f\u0193\5") - buf.write("\u0085C\2\u0190\u0192\5\u0087D\2\u0191\u0190\3\2\2\2\u0192") - buf.write("\u0195\3\2\2\2\u0193\u0191\3\2\2\2\u0193\u0194\3\2\2\2") - buf.write("\u0194\u0082\3\2\2\2\u0195\u0193\3\2\2\2\u0196\u0197\t") - buf.write("\6\2\2\u0197\u0084\3\2\2\2\u0198\u0199\t\7\2\2\u0199\u0086") - buf.write("\3\2\2\2\u019a\u019e\5\u0085C\2\u019b\u019e\5\u0083B\2") - buf.write("\u019c\u019e\t\b\2\2\u019d\u019a\3\2\2\2\u019d\u019b\3") - buf.write("\2\2\2\u019d\u019c\3\2\2\2\u019e\u0088\3\2\2\2\u019f\u01a1") - buf.write("\t\t\2\2\u01a0\u019f\3\2\2\2\u01a1\u01a2\3\2\2\2\u01a2") - buf.write("\u01a0\3\2\2\2\u01a2\u01a3\3\2\2\2\u01a3\u01a4\3\2\2\2") - buf.write("\u01a4\u01a5\bE\2\2\u01a5\u008a\3\2\2\2\u01a6\u01a7\13") - buf.write("\2\2\2\u01a7\u008c\3\2\2\2\20\2\u0161\u0166\u016c\u0170") - buf.write("\u0175\u0177\u017d\u017f\u0188\u018a\u0193\u019d\u01a2") + buf.write(":\3;\3;\3;\3;\3;\3<\3<\3<\3<\3<\3<\3<\3=\3=\3=\3>\6>\u0165") + buf.write("\n>\r>\16>\u0166\3?\6?\u016a\n?\r?\16?\u016b\3?\3?\6?") + buf.write("\u0170\n?\r?\16?\u0171\3?\3?\5?\u0176\n?\3?\6?\u0179\n") + buf.write("?\r?\16?\u017a\5?\u017d\n?\3@\3@\3@\3@\7@\u0183\n@\f@") + buf.write("\16@\u0186\13@\3@\3@\3A\3A\3A\3A\7A\u018e\nA\fA\16A\u0191") + buf.write("\13A\3A\3A\3B\3B\7B\u0197\nB\fB\16B\u019a\13B\3C\3C\3") + buf.write("D\3D\3E\3E\3E\5E\u01a3\nE\3F\6F\u01a6\nF\rF\16F\u01a7") + buf.write("\3F\3F\3G\3G\2\2H\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23") + buf.write("\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25") + buf.write(")\26+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A") + buf.write("\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65") + buf.write("i\66k\67m8o9q:s;u{?}@\177A\u0081B\u0083C\u0085\2") + buf.write("\u0087\2\u0089\2\u008bD\u008dE\3\2\n\4\2))^^\6\2))^^p") + buf.write("pvv\4\2$$^^\6\2$$^^ppvv\3\2\62;\5\2C\\aac|\4\2))aa\5\2") + buf.write("\13\f\17\17\"\"\2\u01b7\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3") + buf.write("\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2") + buf.write("\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2") + buf.write("\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2") + buf.write("!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2") + buf.write("\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3") + buf.write("\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2") + buf.write("\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2") + buf.write("\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2") + buf.write("\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3") + buf.write("\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c") + buf.write("\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2") + buf.write("m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2u\3\2\2\2") + buf.write("\2w\3\2\2\2\2y\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177\3\2") + buf.write("\2\2\2\u0081\3\2\2\2\2\u0083\3\2\2\2\2\u008b\3\2\2\2\2") + buf.write("\u008d\3\2\2\2\3\u008f\3\2\2\2\5\u0091\3\2\2\2\7\u0096") + buf.write("\3\2\2\2\t\u009c\3\2\2\2\13\u009e\3\2\2\2\r\u00a0\3\2") + buf.write("\2\2\17\u00a2\3\2\2\2\21\u00a4\3\2\2\2\23\u00a6\3\2\2") + buf.write("\2\25\u00a8\3\2\2\2\27\u00aa\3\2\2\2\31\u00ad\3\2\2\2") + buf.write("\33\u00b0\3\2\2\2\35\u00b2\3\2\2\2\37\u00b4\3\2\2\2!\u00b6") + buf.write("\3\2\2\2#\u00bc\3\2\2\2%\u00c5\3\2\2\2\'\u00cc\3\2\2\2") + buf.write(")\u00ce\3\2\2\2+\u00d1\3\2\2\2-\u00d6\3\2\2\2/\u00db\3") + buf.write("\2\2\2\61\u00e1\3\2\2\2\63\u00e7\3\2\2\2\65\u00eb\3\2") + buf.write("\2\2\67\u00ee\3\2\2\29\u00f3\3\2\2\2;\u00f8\3\2\2\2=\u00fa") + buf.write("\3\2\2\2?\u00fc\3\2\2\2A\u00ff\3\2\2\2C\u0101\3\2\2\2") + buf.write("E\u0103\3\2\2\2G\u0107\3\2\2\2I\u0109\3\2\2\2K\u010b\3") + buf.write("\2\2\2M\u010d\3\2\2\2O\u010f\3\2\2\2Q\u0112\3\2\2\2S\u0116") + buf.write("\3\2\2\2U\u0119\3\2\2\2W\u011c\3\2\2\2Y\u011e\3\2\2\2") + buf.write("[\u0121\3\2\2\2]\u0123\3\2\2\2_\u0126\3\2\2\2a\u012a\3") + buf.write("\2\2\2c\u012e\3\2\2\2e\u0131\3\2\2\2g\u0133\3\2\2\2i\u0135") + buf.write("\3\2\2\2k\u013a\3\2\2\2m\u0140\3\2\2\2o\u0145\3\2\2\2") + buf.write("q\u0149\3\2\2\2s\u014f\3\2\2\2u\u0154\3\2\2\2w\u0159\3") + buf.write("\2\2\2y\u0160\3\2\2\2{\u0164\3\2\2\2}\u0169\3\2\2\2\177") + buf.write("\u017e\3\2\2\2\u0081\u0189\3\2\2\2\u0083\u0194\3\2\2\2") + buf.write("\u0085\u019b\3\2\2\2\u0087\u019d\3\2\2\2\u0089\u01a2\3") + buf.write("\2\2\2\u008b\u01a5\3\2\2\2\u008d\u01ab\3\2\2\2\u008f\u0090") + buf.write("\7=\2\2\u0090\4\3\2\2\2\u0091\u0092\7u\2\2\u0092\u0093") + buf.write("\7m\2\2\u0093\u0094\7k\2\2\u0094\u0095\7r\2\2\u0095\6") + buf.write("\3\2\2\2\u0096\u0097\7r\2\2\u0097\u0098\7t\2\2\u0098\u0099") + buf.write("\7k\2\2\u0099\u009a\7p\2\2\u009a\u009b\7v\2\2\u009b\b") + buf.write("\3\2\2\2\u009c\u009d\7?\2\2\u009d\n\3\2\2\2\u009e\u009f") + buf.write("\7`\2\2\u009f\f\3\2\2\2\u00a0\u00a1\7,\2\2\u00a1\16\3") + buf.write("\2\2\2\u00a2\u00a3\7\61\2\2\u00a3\20\3\2\2\2\u00a4\u00a5") + buf.write("\7\'\2\2\u00a5\22\3\2\2\2\u00a6\u00a7\7-\2\2\u00a7\24") + buf.write("\3\2\2\2\u00a8\u00a9\7/\2\2\u00a9\26\3\2\2\2\u00aa\u00ab") + buf.write("\7>\2\2\u00ab\u00ac\7>\2\2\u00ac\30\3\2\2\2\u00ad\u00ae") + buf.write("\7@\2\2\u00ae\u00af\7@\2\2\u00af\32\3\2\2\2\u00b0\u00b1") + buf.write("\7(\2\2\u00b1\34\3\2\2\2\u00b2\u00b3\7&\2\2\u00b3\36\3") + buf.write("\2\2\2\u00b4\u00b5\7~\2\2\u00b5 \3\2\2\2\u00b6\u00b7\7") + buf.write("d\2\2\u00b7\u00b8\7t\2\2\u00b8\u00b9\7g\2\2\u00b9\u00ba") + buf.write("\7c\2\2\u00ba\u00bb\7m\2\2\u00bb\"\3\2\2\2\u00bc\u00bd") + buf.write("\7e\2\2\u00bd\u00be\7q\2\2\u00be\u00bf\7p\2\2\u00bf\u00c0") + buf.write("\7v\2\2\u00c0\u00c1\7k\2\2\u00c1\u00c2\7p\2\2\u00c2\u00c3") + buf.write("\7w\2\2\u00c3\u00c4\7g\2\2\u00c4$\3\2\2\2\u00c5\u00c6") + buf.write("\7t\2\2\u00c6\u00c7\7g\2\2\u00c7\u00c8\7v\2\2\u00c8\u00c9") + buf.write("\7w\2\2\u00c9\u00ca\7t\2\2\u00ca\u00cb\7p\2\2\u00cb&\3") + buf.write("\2\2\2\u00cc\u00cd\7.\2\2\u00cd(\3\2\2\2\u00ce\u00cf\7") + buf.write("k\2\2\u00cf\u00d0\7h\2\2\u00d0*\3\2\2\2\u00d1\u00d2\7") + buf.write("g\2\2\u00d2\u00d3\7n\2\2\u00d3\u00d4\7k\2\2\u00d4\u00d5") + buf.write("\7h\2\2\u00d5,\3\2\2\2\u00d6\u00d7\7g\2\2\u00d7\u00d8") + buf.write("\7n\2\2\u00d8\u00d9\7u\2\2\u00d9\u00da\7g\2\2\u00da.\3") + buf.write("\2\2\2\u00db\u00dc\7y\2\2\u00dc\u00dd\7j\2\2\u00dd\u00de") + buf.write("\7k\2\2\u00de\u00df\7n\2\2\u00df\u00e0\7g\2\2\u00e0\60") + buf.write("\3\2\2\2\u00e1\u00e2\7w\2\2\u00e2\u00e3\7p\2\2\u00e3\u00e4") + buf.write("\7v\2\2\u00e4\u00e5\7k\2\2\u00e5\u00e6\7n\2\2\u00e6\62") + buf.write("\3\2\2\2\u00e7\u00e8\7h\2\2\u00e8\u00e9\7q\2\2\u00e9\u00ea") + buf.write("\7t\2\2\u00ea\64\3\2\2\2\u00eb\u00ec\7k\2\2\u00ec\u00ed") + buf.write("\7p\2\2\u00ed\66\3\2\2\2\u00ee\u00ef\7u\2\2\u00ef\u00f0") + buf.write("\7v\2\2\u00f0\u00f1\7g\2\2\u00f1\u00f2\7r\2\2\u00f28\3") + buf.write("\2\2\2\u00f3\u00f4\7h\2\2\u00f4\u00f5\7w\2\2\u00f5\u00f6") + buf.write("\7p\2\2\u00f6\u00f7\7e\2\2\u00f7:\3\2\2\2\u00f8\u00f9") + buf.write("\7*\2\2\u00f9<\3\2\2\2\u00fa\u00fb\7+\2\2\u00fb>\3\2\2") + buf.write("\2\u00fc\u00fd\7f\2\2\u00fd\u00fe\7q\2\2\u00fe@\3\2\2") + buf.write("\2\u00ff\u0100\7}\2\2\u0100B\3\2\2\2\u0101\u0102\7\177") + buf.write("\2\2\u0102D\3\2\2\2\u0103\u0104\7f\2\2\u0104\u0105\7g") + buf.write("\2\2\u0105\u0106\7h\2\2\u0106F\3\2\2\2\u0107\u0108\7]") + buf.write("\2\2\u0108H\3\2\2\2\u0109\u010a\7_\2\2\u010aJ\3\2\2\2") + buf.write("\u010b\u010c\7\60\2\2\u010cL\3\2\2\2\u010d\u010e\7\u0080") + buf.write("\2\2\u010eN\3\2\2\2\u010f\u0110\7\60\2\2\u0110\u0111\7") + buf.write("\60\2\2\u0111P\3\2\2\2\u0112\u0113\7\60\2\2\u0113\u0114") + buf.write("\7\60\2\2\u0114\u0115\7\60\2\2\u0115R\3\2\2\2\u0116\u0117") + buf.write("\7?\2\2\u0117\u0118\7?\2\2\u0118T\3\2\2\2\u0119\u011a") + buf.write("\7#\2\2\u011a\u011b\7?\2\2\u011bV\3\2\2\2\u011c\u011d") + buf.write("\7>\2\2\u011dX\3\2\2\2\u011e\u011f\7>\2\2\u011f\u0120") + buf.write("\7?\2\2\u0120Z\3\2\2\2\u0121\u0122\7@\2\2\u0122\\\3\2") + buf.write("\2\2\u0123\u0124\7@\2\2\u0124\u0125\7?\2\2\u0125^\3\2") + buf.write("\2\2\u0126\u0127\7p\2\2\u0127\u0128\7q\2\2\u0128\u0129") + buf.write("\7v\2\2\u0129`\3\2\2\2\u012a\u012b\7c\2\2\u012b\u012c") + buf.write("\7p\2\2\u012c\u012d\7f\2\2\u012db\3\2\2\2\u012e\u012f") + buf.write("\7q\2\2\u012f\u0130\7t\2\2\u0130d\3\2\2\2\u0131\u0132") + buf.write("\7A\2\2\u0132f\3\2\2\2\u0133\u0134\7<\2\2\u0134h\3\2\2") + buf.write("\2\u0135\u0136\7v\2\2\u0136\u0137\7t\2\2\u0137\u0138\7") + buf.write("w\2\2\u0138\u0139\7g\2\2\u0139j\3\2\2\2\u013a\u013b\7") + buf.write("h\2\2\u013b\u013c\7c\2\2\u013c\u013d\7n\2\2\u013d\u013e") + buf.write("\7u\2\2\u013e\u013f\7g\2\2\u013fl\3\2\2\2\u0140\u0141") + buf.write("\7X\2\2\u0141\u0142\7q\2\2\u0142\u0143\7k\2\2\u0143\u0144") + buf.write("\7f\2\2\u0144n\3\2\2\2\u0145\u0146\7K\2\2\u0146\u0147") + buf.write("\7p\2\2\u0147\u0148\7v\2\2\u0148p\3\2\2\2\u0149\u014a") + buf.write("\7H\2\2\u014a\u014b\7n\2\2\u014b\u014c\7q\2\2\u014c\u014d") + buf.write("\7c\2\2\u014d\u014e\7v\2\2\u014er\3\2\2\2\u014f\u0150") + buf.write("\7D\2\2\u0150\u0151\7q\2\2\u0151\u0152\7q\2\2\u0152\u0153") + buf.write("\7n\2\2\u0153t\3\2\2\2\u0154\u0155\7E\2\2\u0155\u0156") + buf.write("\7j\2\2\u0156\u0157\7c\2\2\u0157\u0158\7t\2\2\u0158v\3") + buf.write("\2\2\2\u0159\u015a\7U\2\2\u015a\u015b\7v\2\2\u015b\u015c") + buf.write("\7t\2\2\u015c\u015d\7k\2\2\u015d\u015e\7p\2\2\u015e\u015f") + buf.write("\7i\2\2\u015fx\3\2\2\2\u0160\u0161\7/\2\2\u0161\u0162") + buf.write("\7@\2\2\u0162z\3\2\2\2\u0163\u0165\5\u0085C\2\u0164\u0163") + buf.write("\3\2\2\2\u0165\u0166\3\2\2\2\u0166\u0164\3\2\2\2\u0166") + buf.write("\u0167\3\2\2\2\u0167|\3\2\2\2\u0168\u016a\5\u0085C\2\u0169") + buf.write("\u0168\3\2\2\2\u016a\u016b\3\2\2\2\u016b\u0169\3\2\2\2") + buf.write("\u016b\u016c\3\2\2\2\u016c\u016d\3\2\2\2\u016d\u016f\7") + buf.write("\60\2\2\u016e\u0170\5\u0085C\2\u016f\u016e\3\2\2\2\u0170") + buf.write("\u0171\3\2\2\2\u0171\u016f\3\2\2\2\u0171\u0172\3\2\2\2") + buf.write("\u0172\u017c\3\2\2\2\u0173\u0175\7g\2\2\u0174\u0176\7") + buf.write("/\2\2\u0175\u0174\3\2\2\2\u0175\u0176\3\2\2\2\u0176\u0178") + buf.write("\3\2\2\2\u0177\u0179\5\u0085C\2\u0178\u0177\3\2\2\2\u0179") + buf.write("\u017a\3\2\2\2\u017a\u0178\3\2\2\2\u017a\u017b\3\2\2\2") + buf.write("\u017b\u017d\3\2\2\2\u017c\u0173\3\2\2\2\u017c\u017d\3") + buf.write("\2\2\2\u017d~\3\2\2\2\u017e\u0184\7)\2\2\u017f\u0183\n") + buf.write("\2\2\2\u0180\u0181\7^\2\2\u0181\u0183\t\3\2\2\u0182\u017f") + buf.write("\3\2\2\2\u0182\u0180\3\2\2\2\u0183\u0186\3\2\2\2\u0184") + buf.write("\u0182\3\2\2\2\u0184\u0185\3\2\2\2\u0185\u0187\3\2\2\2") + buf.write("\u0186\u0184\3\2\2\2\u0187\u0188\7)\2\2\u0188\u0080\3") + buf.write("\2\2\2\u0189\u018f\7$\2\2\u018a\u018e\n\4\2\2\u018b\u018c") + buf.write("\7^\2\2\u018c\u018e\t\5\2\2\u018d\u018a\3\2\2\2\u018d") + buf.write("\u018b\3\2\2\2\u018e\u0191\3\2\2\2\u018f\u018d\3\2\2\2") + buf.write("\u018f\u0190\3\2\2\2\u0190\u0192\3\2\2\2\u0191\u018f\3") + buf.write("\2\2\2\u0192\u0193\7$\2\2\u0193\u0082\3\2\2\2\u0194\u0198") + buf.write("\5\u0087D\2\u0195\u0197\5\u0089E\2\u0196\u0195\3\2\2\2") + buf.write("\u0197\u019a\3\2\2\2\u0198\u0196\3\2\2\2\u0198\u0199\3") + buf.write("\2\2\2\u0199\u0084\3\2\2\2\u019a\u0198\3\2\2\2\u019b\u019c") + buf.write("\t\6\2\2\u019c\u0086\3\2\2\2\u019d\u019e\t\7\2\2\u019e") + buf.write("\u0088\3\2\2\2\u019f\u01a3\5\u0087D\2\u01a0\u01a3\5\u0085") + buf.write("C\2\u01a1\u01a3\t\b\2\2\u01a2\u019f\3\2\2\2\u01a2\u01a0") + buf.write("\3\2\2\2\u01a2\u01a1\3\2\2\2\u01a3\u008a\3\2\2\2\u01a4") + buf.write("\u01a6\t\t\2\2\u01a5\u01a4\3\2\2\2\u01a6\u01a7\3\2\2\2") + buf.write("\u01a7\u01a5\3\2\2\2\u01a7\u01a8\3\2\2\2\u01a8\u01a9\3") + buf.write("\2\2\2\u01a9\u01aa\bF\2\2\u01aa\u008c\3\2\2\2\u01ab\u01ac") + buf.write("\13\2\2\2\u01ac\u008e\3\2\2\2\20\2\u0166\u016b\u0171\u0175") + buf.write("\u017a\u017c\u0182\u0184\u018d\u018f\u0198\u01a2\u01a7") buf.write("\3\b\2\2") return buf.getvalue() @@ -256,13 +258,14 @@ class PyxellLexer(Lexer): T__56 = 57 T__57 = 58 T__58 = 59 - INT = 60 - FLOAT = 61 - CHAR = 62 - STRING = 63 - ID = 64 - WS = 65 - ERR = 66 + T__59 = 60 + INT = 61 + FLOAT = 62 + CHAR = 63 + STRING = 64 + ID = 65 + WS = 66 + ERR = 67 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -276,7 +279,8 @@ class PyxellLexer(Lexer): "')'", "'do'", "'{'", "'}'", "'def'", "'['", "']'", "'.'", "'~'", "'..'", "'...'", "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", "'not'", "'and'", "'or'", "'?'", "':'", "'true'", "'false'", - "'Void'", "'Int'", "'Float'", "'Bool'", "'Char'", "'String'" ] + "'Void'", "'Int'", "'Float'", "'Bool'", "'Char'", "'String'", + "'->'" ] symbolicNames = [ "", "INT", "FLOAT", "CHAR", "STRING", "ID", "WS", "ERR" ] @@ -290,8 +294,9 @@ class PyxellLexer(Lexer): "T__38", "T__39", "T__40", "T__41", "T__42", "T__43", "T__44", "T__45", "T__46", "T__47", "T__48", "T__49", "T__50", "T__51", "T__52", "T__53", "T__54", "T__55", - "T__56", "T__57", "T__58", "INT", "FLOAT", "CHAR", "STRING", - "ID", "DIGIT", "ID_START", "ID_CONT", "WS", "ERR" ] + "T__56", "T__57", "T__58", "T__59", "INT", "FLOAT", "CHAR", + "STRING", "ID", "DIGIT", "ID_START", "ID_CONT", "WS", + "ERR" ] grammarFileName = "Pyxell.g4" diff --git a/src/antlr/PyxellLexer.tokens b/src/antlr/PyxellLexer.tokens index 262e49a2..0d26b5ca 100644 --- a/src/antlr/PyxellLexer.tokens +++ b/src/antlr/PyxellLexer.tokens @@ -57,13 +57,14 @@ T__55=56 T__56=57 T__57=58 T__58=59 -INT=60 -FLOAT=61 -CHAR=62 -STRING=63 -ID=64 -WS=65 -ERR=66 +T__59=60 +INT=61 +FLOAT=62 +CHAR=63 +STRING=64 +ID=65 +WS=66 +ERR=67 ';'=1 'skip'=2 'print'=3 @@ -123,3 +124,4 @@ ERR=66 'Bool'=57 'Char'=58 'String'=59 +'->'=60 diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index 79e74fe8..0c6ea085 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -8,8 +8,8 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3D") - buf.write("\u0121\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3E") + buf.write("\u012a\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\3\2") buf.write("\7\2\34\n\2\f\2\16\2\37\13\2\3\2\3\2\3\3\3\3\3\3\3\3\5") buf.write("\3\'\n\3\3\4\3\4\3\4\5\4,\n\4\3\4\3\4\3\4\3\4\5\4\62\n") @@ -34,115 +34,120 @@ def serializedATN(): buf.write("\u00f5\13\13\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\7\f\u0100") buf.write("\n\f\f\f\16\f\u0103\13\f\3\f\5\f\u0106\n\f\3\f\3\f\5\f") buf.write("\u010a\n\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r") - buf.write("\5\r\u0117\n\r\3\r\3\r\3\r\7\r\u011c\n\r\f\r\16\r\u011f") - buf.write("\13\r\3\r\2\4\24\30\16\2\4\6\b\n\f\16\20\22\24\26\30\2") - buf.write("\13\3\2\7\21\3\2\22\23\4\2\13\f((\3\2\b\n\3\2\13\f\3\2") - buf.write("\r\16\3\2)*\3\2+\60\3\2\66\67\2\u0152\2\35\3\2\2\2\4&") - buf.write("\3\2\2\2\6F\3\2\2\2\bH\3\2\2\2\n\u0085\3\2\2\2\f\u0087") - buf.write("\3\2\2\2\16\u008a\3\2\2\2\20\u0093\3\2\2\2\22\u00a1\3") - buf.write("\2\2\2\24\u00b0\3\2\2\2\26\u0109\3\2\2\2\30\u0116\3\2") - buf.write("\2\2\32\34\5\4\3\2\33\32\3\2\2\2\34\37\3\2\2\2\35\33\3") - buf.write("\2\2\2\35\36\3\2\2\2\36 \3\2\2\2\37\35\3\2\2\2 !\7\2\2") - buf.write("\3!\3\3\2\2\2\"#\5\6\4\2#$\7\3\2\2$\'\3\2\2\2%\'\5\n\6") - buf.write("\2&\"\3\2\2\2&%\3\2\2\2\'\5\3\2\2\2(G\7\4\2\2)+\7\5\2") - buf.write("\2*,\5\22\n\2+*\3\2\2\2+,\3\2\2\2,G\3\2\2\2-.\5\30\r\2") - buf.write(".\61\7B\2\2/\60\7\6\2\2\60\62\5\22\n\2\61/\3\2\2\2\61") - buf.write("\62\3\2\2\2\62G\3\2\2\2\63\64\5\b\5\2\64\65\7\6\2\2\65") - buf.write("\67\3\2\2\2\66\63\3\2\2\2\67:\3\2\2\28\66\3\2\2\289\3") - buf.write("\2\2\29;\3\2\2\2:8\3\2\2\2;G\5\22\n\2<=\5\24\13\2=>\t") - buf.write("\2\2\2>?\7\6\2\2?@\5\24\13\2@G\3\2\2\2AG\t\3\2\2BD\7\24") - buf.write("\2\2CE\5\22\n\2DC\3\2\2\2DE\3\2\2\2EG\3\2\2\2F(\3\2\2") - buf.write("\2F)\3\2\2\2F-\3\2\2\2F8\3\2\2\2F<\3\2\2\2FA\3\2\2\2F") - buf.write("B\3\2\2\2G\7\3\2\2\2HM\5\24\13\2IJ\7\25\2\2JL\5\24\13") - buf.write("\2KI\3\2\2\2LO\3\2\2\2MK\3\2\2\2MN\3\2\2\2N\t\3\2\2\2") - buf.write("OM\3\2\2\2PQ\7\26\2\2QR\5\24\13\2RY\5\16\b\2ST\7\27\2") - buf.write("\2TU\5\24\13\2UV\5\16\b\2VX\3\2\2\2WS\3\2\2\2X[\3\2\2") - buf.write("\2YW\3\2\2\2YZ\3\2\2\2Z^\3\2\2\2[Y\3\2\2\2\\]\7\30\2\2") - buf.write("]_\5\16\b\2^\\\3\2\2\2^_\3\2\2\2_\u0086\3\2\2\2`a\7\31") - buf.write("\2\2ab\5\24\13\2bc\5\16\b\2c\u0086\3\2\2\2de\7\32\2\2") - buf.write("ef\5\24\13\2fg\5\16\b\2g\u0086\3\2\2\2hi\7\33\2\2ij\5") - buf.write("\22\n\2jk\7\34\2\2kn\5\22\n\2lm\7\35\2\2mo\5\22\n\2nl") - buf.write("\3\2\2\2no\3\2\2\2op\3\2\2\2pq\5\16\b\2q\u0086\3\2\2\2") - buf.write("rs\7\36\2\2st\7B\2\2tz\7\37\2\2uv\5\f\7\2vw\7\25\2\2w") - buf.write("y\3\2\2\2xu\3\2\2\2y|\3\2\2\2zx\3\2\2\2z{\3\2\2\2{~\3") - buf.write("\2\2\2|z\3\2\2\2}\177\5\f\7\2~}\3\2\2\2~\177\3\2\2\2\177") - buf.write("\u0080\3\2\2\2\u0080\u0082\7 \2\2\u0081\u0083\5\30\r\2") - buf.write("\u0082\u0081\3\2\2\2\u0082\u0083\3\2\2\2\u0083\u0084\3") - buf.write("\2\2\2\u0084\u0086\5\20\t\2\u0085P\3\2\2\2\u0085`\3\2") - buf.write("\2\2\u0085d\3\2\2\2\u0085h\3\2\2\2\u0085r\3\2\2\2\u0086") - buf.write("\13\3\2\2\2\u0087\u0088\5\30\r\2\u0088\u0089\7B\2\2\u0089") - buf.write("\r\3\2\2\2\u008a\u008b\7!\2\2\u008b\u008d\7\"\2\2\u008c") - buf.write("\u008e\5\4\3\2\u008d\u008c\3\2\2\2\u008e\u008f\3\2\2\2") - buf.write("\u008f\u008d\3\2\2\2\u008f\u0090\3\2\2\2\u0090\u0091\3") - buf.write("\2\2\2\u0091\u0092\7#\2\2\u0092\17\3\2\2\2\u0093\u0094") - buf.write("\7$\2\2\u0094\u0096\7\"\2\2\u0095\u0097\5\4\3\2\u0096") - buf.write("\u0095\3\2\2\2\u0097\u0098\3\2\2\2\u0098\u0096\3\2\2\2") - buf.write("\u0098\u0099\3\2\2\2\u0099\u009a\3\2\2\2\u009a\u009b\7") - buf.write("#\2\2\u009b\21\3\2\2\2\u009c\u009d\5\24\13\2\u009d\u009e") - buf.write("\7\25\2\2\u009e\u00a0\3\2\2\2\u009f\u009c\3\2\2\2\u00a0") - buf.write("\u00a3\3\2\2\2\u00a1\u009f\3\2\2\2\u00a1\u00a2\3\2\2\2") - buf.write("\u00a2\u00a4\3\2\2\2\u00a3\u00a1\3\2\2\2\u00a4\u00a5\5") - buf.write("\24\13\2\u00a5\23\3\2\2\2\u00a6\u00a7\b\13\1\2\u00a7\u00b1") - buf.write("\5\26\f\2\u00a8\u00a9\7\37\2\2\u00a9\u00aa\5\22\n\2\u00aa") - buf.write("\u00ab\7 \2\2\u00ab\u00b1\3\2\2\2\u00ac\u00ad\t\4\2\2") - buf.write("\u00ad\u00b1\5\24\13\20\u00ae\u00af\7\61\2\2\u00af\u00b1") - buf.write("\5\24\13\6\u00b0\u00a6\3\2\2\2\u00b0\u00a8\3\2\2\2\u00b0") - buf.write("\u00ac\3\2\2\2\u00b0\u00ae\3\2\2\2\u00b1\u00f3\3\2\2\2") - buf.write("\u00b2\u00b3\f\21\2\2\u00b3\u00b4\7\7\2\2\u00b4\u00f2") - buf.write("\5\24\13\21\u00b5\u00b6\f\17\2\2\u00b6\u00b7\t\5\2\2\u00b7") - buf.write("\u00f2\5\24\13\20\u00b8\u00b9\f\16\2\2\u00b9\u00ba\t\6") - buf.write("\2\2\u00ba\u00f2\5\24\13\17\u00bb\u00bc\f\r\2\2\u00bc") - buf.write("\u00bd\t\7\2\2\u00bd\u00f2\5\24\13\16\u00be\u00bf\f\f") - buf.write("\2\2\u00bf\u00c0\7\17\2\2\u00c0\u00f2\5\24\13\r\u00c1") - buf.write("\u00c2\f\13\2\2\u00c2\u00c3\7\20\2\2\u00c3\u00f2\5\24") - buf.write("\13\f\u00c4\u00c5\f\n\2\2\u00c5\u00c6\7\21\2\2\u00c6\u00f2") - buf.write("\5\24\13\13\u00c7\u00c8\f\t\2\2\u00c8\u00c9\t\b\2\2\u00c9") - buf.write("\u00f2\5\24\13\n\u00ca\u00cb\f\7\2\2\u00cb\u00cc\t\t\2") - buf.write("\2\u00cc\u00f2\5\24\13\7\u00cd\u00ce\f\5\2\2\u00ce\u00cf") - buf.write("\7\62\2\2\u00cf\u00f2\5\24\13\5\u00d0\u00d1\f\4\2\2\u00d1") - buf.write("\u00d2\7\63\2\2\u00d2\u00f2\5\24\13\4\u00d3\u00d4\f\3") - buf.write("\2\2\u00d4\u00d5\7\64\2\2\u00d5\u00d6\5\24\13\2\u00d6") - buf.write("\u00d7\7\65\2\2\u00d7\u00d8\5\24\13\3\u00d8\u00f2\3\2") - buf.write("\2\2\u00d9\u00da\f\24\2\2\u00da\u00db\7%\2\2\u00db\u00dc") - buf.write("\5\24\13\2\u00dc\u00dd\7&\2\2\u00dd\u00f2\3\2\2\2\u00de") - buf.write("\u00df\f\23\2\2\u00df\u00e0\7\'\2\2\u00e0\u00f2\7B\2\2") - buf.write("\u00e1\u00e2\f\22\2\2\u00e2\u00e8\7\37\2\2\u00e3\u00e4") - buf.write("\5\24\13\2\u00e4\u00e5\7\25\2\2\u00e5\u00e7\3\2\2\2\u00e6") - buf.write("\u00e3\3\2\2\2\u00e7\u00ea\3\2\2\2\u00e8\u00e6\3\2\2\2") - buf.write("\u00e8\u00e9\3\2\2\2\u00e9\u00ec\3\2\2\2\u00ea\u00e8\3") - buf.write("\2\2\2\u00eb\u00ed\5\24\13\2\u00ec\u00eb\3\2\2\2\u00ec") - buf.write("\u00ed\3\2\2\2\u00ed\u00ee\3\2\2\2\u00ee\u00f2\7 \2\2") - buf.write("\u00ef\u00f0\f\b\2\2\u00f0\u00f2\7*\2\2\u00f1\u00b2\3") - buf.write("\2\2\2\u00f1\u00b5\3\2\2\2\u00f1\u00b8\3\2\2\2\u00f1\u00bb") - buf.write("\3\2\2\2\u00f1\u00be\3\2\2\2\u00f1\u00c1\3\2\2\2\u00f1") - buf.write("\u00c4\3\2\2\2\u00f1\u00c7\3\2\2\2\u00f1\u00ca\3\2\2\2") - buf.write("\u00f1\u00cd\3\2\2\2\u00f1\u00d0\3\2\2\2\u00f1\u00d3\3") - buf.write("\2\2\2\u00f1\u00d9\3\2\2\2\u00f1\u00de\3\2\2\2\u00f1\u00e1") - buf.write("\3\2\2\2\u00f1\u00ef\3\2\2\2\u00f2\u00f5\3\2\2\2\u00f3") - buf.write("\u00f1\3\2\2\2\u00f3\u00f4\3\2\2\2\u00f4\25\3\2\2\2\u00f5") - buf.write("\u00f3\3\2\2\2\u00f6\u010a\7>\2\2\u00f7\u010a\7?\2\2\u00f8") - buf.write("\u010a\t\n\2\2\u00f9\u010a\7@\2\2\u00fa\u010a\7A\2\2\u00fb") - buf.write("\u0101\7%\2\2\u00fc\u00fd\5\24\13\2\u00fd\u00fe\7\25\2") - buf.write("\2\u00fe\u0100\3\2\2\2\u00ff\u00fc\3\2\2\2\u0100\u0103") - buf.write("\3\2\2\2\u0101\u00ff\3\2\2\2\u0101\u0102\3\2\2\2\u0102") - buf.write("\u0105\3\2\2\2\u0103\u0101\3\2\2\2\u0104\u0106\5\24\13") - buf.write("\2\u0105\u0104\3\2\2\2\u0105\u0106\3\2\2\2\u0106\u0107") - buf.write("\3\2\2\2\u0107\u010a\7&\2\2\u0108\u010a\7B\2\2\u0109\u00f6") - buf.write("\3\2\2\2\u0109\u00f7\3\2\2\2\u0109\u00f8\3\2\2\2\u0109") - buf.write("\u00f9\3\2\2\2\u0109\u00fa\3\2\2\2\u0109\u00fb\3\2\2\2") - buf.write("\u0109\u0108\3\2\2\2\u010a\27\3\2\2\2\u010b\u010c\b\r") - buf.write("\1\2\u010c\u0117\78\2\2\u010d\u0117\79\2\2\u010e\u0117") - buf.write("\7:\2\2\u010f\u0117\7;\2\2\u0110\u0117\7<\2\2\u0111\u0117") - buf.write("\7=\2\2\u0112\u0113\7%\2\2\u0113\u0114\5\30\r\2\u0114") - buf.write("\u0115\7&\2\2\u0115\u0117\3\2\2\2\u0116\u010b\3\2\2\2") - buf.write("\u0116\u010d\3\2\2\2\u0116\u010e\3\2\2\2\u0116\u010f\3") - buf.write("\2\2\2\u0116\u0110\3\2\2\2\u0116\u0111\3\2\2\2\u0116\u0112") - buf.write("\3\2\2\2\u0117\u011d\3\2\2\2\u0118\u0119\f\3\2\2\u0119") - buf.write("\u011a\7\b\2\2\u011a\u011c\5\30\r\3\u011b\u0118\3\2\2") - buf.write("\2\u011c\u011f\3\2\2\2\u011d\u011b\3\2\2\2\u011d\u011e") - buf.write("\3\2\2\2\u011e\31\3\2\2\2\u011f\u011d\3\2\2\2\36\35&+") + buf.write("\3\r\3\r\3\r\3\r\3\r\3\r\5\r\u011d\n\r\3\r\3\r\3\r\3\r") + buf.write("\3\r\3\r\7\r\u0125\n\r\f\r\16\r\u0128\13\r\3\r\2\4\24") + buf.write("\30\16\2\4\6\b\n\f\16\20\22\24\26\30\2\13\3\2\7\21\3\2") + buf.write("\22\23\4\2\13\f((\3\2\b\n\3\2\13\f\3\2\r\16\3\2)*\3\2") + buf.write("+\60\3\2\66\67\2\u015e\2\35\3\2\2\2\4&\3\2\2\2\6F\3\2") + buf.write("\2\2\bH\3\2\2\2\n\u0085\3\2\2\2\f\u0087\3\2\2\2\16\u008a") + buf.write("\3\2\2\2\20\u0093\3\2\2\2\22\u00a1\3\2\2\2\24\u00b0\3") + buf.write("\2\2\2\26\u0109\3\2\2\2\30\u011c\3\2\2\2\32\34\5\4\3\2") + buf.write("\33\32\3\2\2\2\34\37\3\2\2\2\35\33\3\2\2\2\35\36\3\2\2") + buf.write("\2\36 \3\2\2\2\37\35\3\2\2\2 !\7\2\2\3!\3\3\2\2\2\"#\5") + buf.write("\6\4\2#$\7\3\2\2$\'\3\2\2\2%\'\5\n\6\2&\"\3\2\2\2&%\3") + buf.write("\2\2\2\'\5\3\2\2\2(G\7\4\2\2)+\7\5\2\2*,\5\22\n\2+*\3") + buf.write("\2\2\2+,\3\2\2\2,G\3\2\2\2-.\5\30\r\2.\61\7C\2\2/\60\7") + buf.write("\6\2\2\60\62\5\22\n\2\61/\3\2\2\2\61\62\3\2\2\2\62G\3") + buf.write("\2\2\2\63\64\5\b\5\2\64\65\7\6\2\2\65\67\3\2\2\2\66\63") + buf.write("\3\2\2\2\67:\3\2\2\28\66\3\2\2\289\3\2\2\29;\3\2\2\2:") + buf.write("8\3\2\2\2;G\5\22\n\2<=\5\24\13\2=>\t\2\2\2>?\7\6\2\2?") + buf.write("@\5\24\13\2@G\3\2\2\2AG\t\3\2\2BD\7\24\2\2CE\5\22\n\2") + buf.write("DC\3\2\2\2DE\3\2\2\2EG\3\2\2\2F(\3\2\2\2F)\3\2\2\2F-\3") + buf.write("\2\2\2F8\3\2\2\2F<\3\2\2\2FA\3\2\2\2FB\3\2\2\2G\7\3\2") + buf.write("\2\2HM\5\24\13\2IJ\7\25\2\2JL\5\24\13\2KI\3\2\2\2LO\3") + buf.write("\2\2\2MK\3\2\2\2MN\3\2\2\2N\t\3\2\2\2OM\3\2\2\2PQ\7\26") + buf.write("\2\2QR\5\24\13\2RY\5\16\b\2ST\7\27\2\2TU\5\24\13\2UV\5") + buf.write("\16\b\2VX\3\2\2\2WS\3\2\2\2X[\3\2\2\2YW\3\2\2\2YZ\3\2") + buf.write("\2\2Z^\3\2\2\2[Y\3\2\2\2\\]\7\30\2\2]_\5\16\b\2^\\\3\2") + buf.write("\2\2^_\3\2\2\2_\u0086\3\2\2\2`a\7\31\2\2ab\5\24\13\2b") + buf.write("c\5\16\b\2c\u0086\3\2\2\2de\7\32\2\2ef\5\24\13\2fg\5\16") + buf.write("\b\2g\u0086\3\2\2\2hi\7\33\2\2ij\5\22\n\2jk\7\34\2\2k") + buf.write("n\5\22\n\2lm\7\35\2\2mo\5\22\n\2nl\3\2\2\2no\3\2\2\2o") + buf.write("p\3\2\2\2pq\5\16\b\2q\u0086\3\2\2\2rs\7\36\2\2st\7C\2") + buf.write("\2tz\7\37\2\2uv\5\f\7\2vw\7\25\2\2wy\3\2\2\2xu\3\2\2\2") + buf.write("y|\3\2\2\2zx\3\2\2\2z{\3\2\2\2{~\3\2\2\2|z\3\2\2\2}\177") + buf.write("\5\f\7\2~}\3\2\2\2~\177\3\2\2\2\177\u0080\3\2\2\2\u0080") + buf.write("\u0082\7 \2\2\u0081\u0083\5\30\r\2\u0082\u0081\3\2\2\2") + buf.write("\u0082\u0083\3\2\2\2\u0083\u0084\3\2\2\2\u0084\u0086\5") + buf.write("\20\t\2\u0085P\3\2\2\2\u0085`\3\2\2\2\u0085d\3\2\2\2\u0085") + buf.write("h\3\2\2\2\u0085r\3\2\2\2\u0086\13\3\2\2\2\u0087\u0088") + buf.write("\5\30\r\2\u0088\u0089\7C\2\2\u0089\r\3\2\2\2\u008a\u008b") + buf.write("\7!\2\2\u008b\u008d\7\"\2\2\u008c\u008e\5\4\3\2\u008d") + buf.write("\u008c\3\2\2\2\u008e\u008f\3\2\2\2\u008f\u008d\3\2\2\2") + buf.write("\u008f\u0090\3\2\2\2\u0090\u0091\3\2\2\2\u0091\u0092\7") + buf.write("#\2\2\u0092\17\3\2\2\2\u0093\u0094\7$\2\2\u0094\u0096") + buf.write("\7\"\2\2\u0095\u0097\5\4\3\2\u0096\u0095\3\2\2\2\u0097") + buf.write("\u0098\3\2\2\2\u0098\u0096\3\2\2\2\u0098\u0099\3\2\2\2") + buf.write("\u0099\u009a\3\2\2\2\u009a\u009b\7#\2\2\u009b\21\3\2\2") + buf.write("\2\u009c\u009d\5\24\13\2\u009d\u009e\7\25\2\2\u009e\u00a0") + buf.write("\3\2\2\2\u009f\u009c\3\2\2\2\u00a0\u00a3\3\2\2\2\u00a1") + buf.write("\u009f\3\2\2\2\u00a1\u00a2\3\2\2\2\u00a2\u00a4\3\2\2\2") + buf.write("\u00a3\u00a1\3\2\2\2\u00a4\u00a5\5\24\13\2\u00a5\23\3") + buf.write("\2\2\2\u00a6\u00a7\b\13\1\2\u00a7\u00b1\5\26\f\2\u00a8") + buf.write("\u00a9\7\37\2\2\u00a9\u00aa\5\22\n\2\u00aa\u00ab\7 \2") + buf.write("\2\u00ab\u00b1\3\2\2\2\u00ac\u00ad\t\4\2\2\u00ad\u00b1") + buf.write("\5\24\13\20\u00ae\u00af\7\61\2\2\u00af\u00b1\5\24\13\6") + buf.write("\u00b0\u00a6\3\2\2\2\u00b0\u00a8\3\2\2\2\u00b0\u00ac\3") + buf.write("\2\2\2\u00b0\u00ae\3\2\2\2\u00b1\u00f3\3\2\2\2\u00b2\u00b3") + buf.write("\f\21\2\2\u00b3\u00b4\7\7\2\2\u00b4\u00f2\5\24\13\21\u00b5") + buf.write("\u00b6\f\17\2\2\u00b6\u00b7\t\5\2\2\u00b7\u00f2\5\24\13") + buf.write("\20\u00b8\u00b9\f\16\2\2\u00b9\u00ba\t\6\2\2\u00ba\u00f2") + buf.write("\5\24\13\17\u00bb\u00bc\f\r\2\2\u00bc\u00bd\t\7\2\2\u00bd") + buf.write("\u00f2\5\24\13\16\u00be\u00bf\f\f\2\2\u00bf\u00c0\7\17") + buf.write("\2\2\u00c0\u00f2\5\24\13\r\u00c1\u00c2\f\13\2\2\u00c2") + buf.write("\u00c3\7\20\2\2\u00c3\u00f2\5\24\13\f\u00c4\u00c5\f\n") + buf.write("\2\2\u00c5\u00c6\7\21\2\2\u00c6\u00f2\5\24\13\13\u00c7") + buf.write("\u00c8\f\t\2\2\u00c8\u00c9\t\b\2\2\u00c9\u00f2\5\24\13") + buf.write("\n\u00ca\u00cb\f\7\2\2\u00cb\u00cc\t\t\2\2\u00cc\u00f2") + buf.write("\5\24\13\7\u00cd\u00ce\f\5\2\2\u00ce\u00cf\7\62\2\2\u00cf") + buf.write("\u00f2\5\24\13\5\u00d0\u00d1\f\4\2\2\u00d1\u00d2\7\63") + buf.write("\2\2\u00d2\u00f2\5\24\13\4\u00d3\u00d4\f\3\2\2\u00d4\u00d5") + buf.write("\7\64\2\2\u00d5\u00d6\5\24\13\2\u00d6\u00d7\7\65\2\2\u00d7") + buf.write("\u00d8\5\24\13\3\u00d8\u00f2\3\2\2\2\u00d9\u00da\f\24") + buf.write("\2\2\u00da\u00db\7%\2\2\u00db\u00dc\5\24\13\2\u00dc\u00dd") + buf.write("\7&\2\2\u00dd\u00f2\3\2\2\2\u00de\u00df\f\23\2\2\u00df") + buf.write("\u00e0\7\'\2\2\u00e0\u00f2\7C\2\2\u00e1\u00e2\f\22\2\2") + buf.write("\u00e2\u00e8\7\37\2\2\u00e3\u00e4\5\24\13\2\u00e4\u00e5") + buf.write("\7\25\2\2\u00e5\u00e7\3\2\2\2\u00e6\u00e3\3\2\2\2\u00e7") + buf.write("\u00ea\3\2\2\2\u00e8\u00e6\3\2\2\2\u00e8\u00e9\3\2\2\2") + buf.write("\u00e9\u00ec\3\2\2\2\u00ea\u00e8\3\2\2\2\u00eb\u00ed\5") + buf.write("\24\13\2\u00ec\u00eb\3\2\2\2\u00ec\u00ed\3\2\2\2\u00ed") + buf.write("\u00ee\3\2\2\2\u00ee\u00f2\7 \2\2\u00ef\u00f0\f\b\2\2") + buf.write("\u00f0\u00f2\7*\2\2\u00f1\u00b2\3\2\2\2\u00f1\u00b5\3") + buf.write("\2\2\2\u00f1\u00b8\3\2\2\2\u00f1\u00bb\3\2\2\2\u00f1\u00be") + buf.write("\3\2\2\2\u00f1\u00c1\3\2\2\2\u00f1\u00c4\3\2\2\2\u00f1") + buf.write("\u00c7\3\2\2\2\u00f1\u00ca\3\2\2\2\u00f1\u00cd\3\2\2\2") + buf.write("\u00f1\u00d0\3\2\2\2\u00f1\u00d3\3\2\2\2\u00f1\u00d9\3") + buf.write("\2\2\2\u00f1\u00de\3\2\2\2\u00f1\u00e1\3\2\2\2\u00f1\u00ef") + buf.write("\3\2\2\2\u00f2\u00f5\3\2\2\2\u00f3\u00f1\3\2\2\2\u00f3") + buf.write("\u00f4\3\2\2\2\u00f4\25\3\2\2\2\u00f5\u00f3\3\2\2\2\u00f6") + buf.write("\u010a\7?\2\2\u00f7\u010a\7@\2\2\u00f8\u010a\t\n\2\2\u00f9") + buf.write("\u010a\7A\2\2\u00fa\u010a\7B\2\2\u00fb\u0101\7%\2\2\u00fc") + buf.write("\u00fd\5\24\13\2\u00fd\u00fe\7\25\2\2\u00fe\u0100\3\2") + buf.write("\2\2\u00ff\u00fc\3\2\2\2\u0100\u0103\3\2\2\2\u0101\u00ff") + buf.write("\3\2\2\2\u0101\u0102\3\2\2\2\u0102\u0105\3\2\2\2\u0103") + buf.write("\u0101\3\2\2\2\u0104\u0106\5\24\13\2\u0105\u0104\3\2\2") + buf.write("\2\u0105\u0106\3\2\2\2\u0106\u0107\3\2\2\2\u0107\u010a") + buf.write("\7&\2\2\u0108\u010a\7C\2\2\u0109\u00f6\3\2\2\2\u0109\u00f7") + buf.write("\3\2\2\2\u0109\u00f8\3\2\2\2\u0109\u00f9\3\2\2\2\u0109") + buf.write("\u00fa\3\2\2\2\u0109\u00fb\3\2\2\2\u0109\u0108\3\2\2\2") + buf.write("\u010a\27\3\2\2\2\u010b\u010c\b\r\1\2\u010c\u011d\78\2") + buf.write("\2\u010d\u011d\79\2\2\u010e\u011d\7:\2\2\u010f\u011d\7") + buf.write(";\2\2\u0110\u011d\7<\2\2\u0111\u011d\7=\2\2\u0112\u0113") + buf.write("\7\37\2\2\u0113\u0114\5\30\r\2\u0114\u0115\7 \2\2\u0115") + buf.write("\u011d\3\2\2\2\u0116\u0117\7%\2\2\u0117\u0118\5\30\r\2") + buf.write("\u0118\u0119\7&\2\2\u0119\u011d\3\2\2\2\u011a\u011b\7") + buf.write(">\2\2\u011b\u011d\5\30\r\3\u011c\u010b\3\2\2\2\u011c\u010d") + buf.write("\3\2\2\2\u011c\u010e\3\2\2\2\u011c\u010f\3\2\2\2\u011c") + buf.write("\u0110\3\2\2\2\u011c\u0111\3\2\2\2\u011c\u0112\3\2\2\2") + buf.write("\u011c\u0116\3\2\2\2\u011c\u011a\3\2\2\2\u011d\u0126\3") + buf.write("\2\2\2\u011e\u011f\f\5\2\2\u011f\u0120\7\b\2\2\u0120\u0125") + buf.write("\5\30\r\5\u0121\u0122\f\4\2\2\u0122\u0123\7>\2\2\u0123") + buf.write("\u0125\5\30\r\4\u0124\u011e\3\2\2\2\u0124\u0121\3\2\2") + buf.write("\2\u0125\u0128\3\2\2\2\u0126\u0124\3\2\2\2\u0126\u0127") + buf.write("\3\2\2\2\u0127\31\3\2\2\2\u0128\u0126\3\2\2\2\37\35&+") buf.write("\618DFMY^nz~\u0082\u0085\u008f\u0098\u00a1\u00b0\u00e8") - buf.write("\u00ec\u00f1\u00f3\u0101\u0105\u0109\u0116\u011d") + buf.write("\u00ec\u00f1\u00f3\u0101\u0105\u0109\u011c\u0124\u0126") return buf.getvalue() @@ -165,7 +170,7 @@ class PyxellParser ( Parser ): "'~'", "'..'", "'...'", "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", "'not'", "'and'", "'or'", "'?'", "':'", "'true'", "'false'", "'Void'", "'Int'", "'Float'", - "'Bool'", "'Char'", "'String'" ] + "'Bool'", "'Char'", "'String'", "'->'" ] symbolicNames = [ "", "", "", "", "", "", "", "", @@ -182,7 +187,8 @@ class PyxellParser ( Parser ): "", "", "", "", "", "", "", "", "", "", "", "", - "INT", "FLOAT", "CHAR", "STRING", "ID", "WS", "ERR" ] + "", "INT", "FLOAT", "CHAR", "STRING", "ID", + "WS", "ERR" ] RULE_program = 0 RULE_stmt = 1 @@ -261,13 +267,14 @@ class PyxellParser ( Parser ): T__56=57 T__57=58 T__58=59 - INT=60 - FLOAT=61 - CHAR=62 - STRING=63 - ID=64 - WS=65 - ERR=66 + T__59=60 + INT=61 + FLOAT=62 + CHAR=63 + STRING=64 + ID=65 + WS=66 + ERR=67 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -316,7 +323,7 @@ def program(self): self.state = 27 self._errHandler.sync(self) _la = self._input.LA(1) - while ((((_la - 2)) & ~0x3f) == 0 and ((1 << (_la - 2)) & ((1 << (PyxellParser.T__1 - 2)) | (1 << (PyxellParser.T__2 - 2)) | (1 << (PyxellParser.T__8 - 2)) | (1 << (PyxellParser.T__9 - 2)) | (1 << (PyxellParser.T__15 - 2)) | (1 << (PyxellParser.T__16 - 2)) | (1 << (PyxellParser.T__17 - 2)) | (1 << (PyxellParser.T__19 - 2)) | (1 << (PyxellParser.T__22 - 2)) | (1 << (PyxellParser.T__23 - 2)) | (1 << (PyxellParser.T__24 - 2)) | (1 << (PyxellParser.T__27 - 2)) | (1 << (PyxellParser.T__28 - 2)) | (1 << (PyxellParser.T__34 - 2)) | (1 << (PyxellParser.T__37 - 2)) | (1 << (PyxellParser.T__46 - 2)) | (1 << (PyxellParser.T__51 - 2)) | (1 << (PyxellParser.T__52 - 2)) | (1 << (PyxellParser.T__53 - 2)) | (1 << (PyxellParser.T__54 - 2)) | (1 << (PyxellParser.T__55 - 2)) | (1 << (PyxellParser.T__56 - 2)) | (1 << (PyxellParser.T__57 - 2)) | (1 << (PyxellParser.T__58 - 2)) | (1 << (PyxellParser.INT - 2)) | (1 << (PyxellParser.FLOAT - 2)) | (1 << (PyxellParser.CHAR - 2)) | (1 << (PyxellParser.STRING - 2)) | (1 << (PyxellParser.ID - 2)))) != 0): + while ((((_la - 2)) & ~0x3f) == 0 and ((1 << (_la - 2)) & ((1 << (PyxellParser.T__1 - 2)) | (1 << (PyxellParser.T__2 - 2)) | (1 << (PyxellParser.T__8 - 2)) | (1 << (PyxellParser.T__9 - 2)) | (1 << (PyxellParser.T__15 - 2)) | (1 << (PyxellParser.T__16 - 2)) | (1 << (PyxellParser.T__17 - 2)) | (1 << (PyxellParser.T__19 - 2)) | (1 << (PyxellParser.T__22 - 2)) | (1 << (PyxellParser.T__23 - 2)) | (1 << (PyxellParser.T__24 - 2)) | (1 << (PyxellParser.T__27 - 2)) | (1 << (PyxellParser.T__28 - 2)) | (1 << (PyxellParser.T__34 - 2)) | (1 << (PyxellParser.T__37 - 2)) | (1 << (PyxellParser.T__46 - 2)) | (1 << (PyxellParser.T__51 - 2)) | (1 << (PyxellParser.T__52 - 2)) | (1 << (PyxellParser.T__53 - 2)) | (1 << (PyxellParser.T__54 - 2)) | (1 << (PyxellParser.T__55 - 2)) | (1 << (PyxellParser.T__56 - 2)) | (1 << (PyxellParser.T__57 - 2)) | (1 << (PyxellParser.T__58 - 2)) | (1 << (PyxellParser.T__59 - 2)) | (1 << (PyxellParser.INT - 2)) | (1 << (PyxellParser.FLOAT - 2)) | (1 << (PyxellParser.CHAR - 2)) | (1 << (PyxellParser.STRING - 2)) | (1 << (PyxellParser.ID - 2)))) != 0): self.state = 24 self.stmt() self.state = 29 @@ -368,7 +375,7 @@ def stmt(self): self.state = 36 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__15, PyxellParser.T__16, PyxellParser.T__17, PyxellParser.T__28, PyxellParser.T__34, PyxellParser.T__37, PyxellParser.T__46, PyxellParser.T__51, PyxellParser.T__52, PyxellParser.T__53, PyxellParser.T__54, PyxellParser.T__55, PyxellParser.T__56, PyxellParser.T__57, PyxellParser.T__58, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: + if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__15, PyxellParser.T__16, PyxellParser.T__17, PyxellParser.T__28, PyxellParser.T__34, PyxellParser.T__37, PyxellParser.T__46, PyxellParser.T__51, PyxellParser.T__52, PyxellParser.T__53, PyxellParser.T__54, PyxellParser.T__55, PyxellParser.T__56, PyxellParser.T__57, PyxellParser.T__58, PyxellParser.T__59, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: self.enterOuterAlt(localctx, 1) self.state = 32 self.simple_stmt() @@ -968,7 +975,7 @@ def compound_stmt(self): self.state = 124 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__34) | (1 << PyxellParser.T__53) | (1 << PyxellParser.T__54) | (1 << PyxellParser.T__55) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58))) != 0): + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__28) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__53) | (1 << PyxellParser.T__54) | (1 << PyxellParser.T__55) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59))) != 0): self.state = 123 self.arg() @@ -978,7 +985,7 @@ def compound_stmt(self): self.state = 128 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__34) | (1 << PyxellParser.T__53) | (1 << PyxellParser.T__54) | (1 << PyxellParser.T__55) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58))) != 0): + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__28) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__53) | (1 << PyxellParser.T__54) | (1 << PyxellParser.T__55) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59))) != 0): self.state = 127 localctx.ret = self.typ(0) @@ -1087,7 +1094,7 @@ def do_block(self): self.state = 141 self._errHandler.sync(self) _la = self._input.LA(1) - if not (((((_la - 2)) & ~0x3f) == 0 and ((1 << (_la - 2)) & ((1 << (PyxellParser.T__1 - 2)) | (1 << (PyxellParser.T__2 - 2)) | (1 << (PyxellParser.T__8 - 2)) | (1 << (PyxellParser.T__9 - 2)) | (1 << (PyxellParser.T__15 - 2)) | (1 << (PyxellParser.T__16 - 2)) | (1 << (PyxellParser.T__17 - 2)) | (1 << (PyxellParser.T__19 - 2)) | (1 << (PyxellParser.T__22 - 2)) | (1 << (PyxellParser.T__23 - 2)) | (1 << (PyxellParser.T__24 - 2)) | (1 << (PyxellParser.T__27 - 2)) | (1 << (PyxellParser.T__28 - 2)) | (1 << (PyxellParser.T__34 - 2)) | (1 << (PyxellParser.T__37 - 2)) | (1 << (PyxellParser.T__46 - 2)) | (1 << (PyxellParser.T__51 - 2)) | (1 << (PyxellParser.T__52 - 2)) | (1 << (PyxellParser.T__53 - 2)) | (1 << (PyxellParser.T__54 - 2)) | (1 << (PyxellParser.T__55 - 2)) | (1 << (PyxellParser.T__56 - 2)) | (1 << (PyxellParser.T__57 - 2)) | (1 << (PyxellParser.T__58 - 2)) | (1 << (PyxellParser.INT - 2)) | (1 << (PyxellParser.FLOAT - 2)) | (1 << (PyxellParser.CHAR - 2)) | (1 << (PyxellParser.STRING - 2)) | (1 << (PyxellParser.ID - 2)))) != 0)): + if not (((((_la - 2)) & ~0x3f) == 0 and ((1 << (_la - 2)) & ((1 << (PyxellParser.T__1 - 2)) | (1 << (PyxellParser.T__2 - 2)) | (1 << (PyxellParser.T__8 - 2)) | (1 << (PyxellParser.T__9 - 2)) | (1 << (PyxellParser.T__15 - 2)) | (1 << (PyxellParser.T__16 - 2)) | (1 << (PyxellParser.T__17 - 2)) | (1 << (PyxellParser.T__19 - 2)) | (1 << (PyxellParser.T__22 - 2)) | (1 << (PyxellParser.T__23 - 2)) | (1 << (PyxellParser.T__24 - 2)) | (1 << (PyxellParser.T__27 - 2)) | (1 << (PyxellParser.T__28 - 2)) | (1 << (PyxellParser.T__34 - 2)) | (1 << (PyxellParser.T__37 - 2)) | (1 << (PyxellParser.T__46 - 2)) | (1 << (PyxellParser.T__51 - 2)) | (1 << (PyxellParser.T__52 - 2)) | (1 << (PyxellParser.T__53 - 2)) | (1 << (PyxellParser.T__54 - 2)) | (1 << (PyxellParser.T__55 - 2)) | (1 << (PyxellParser.T__56 - 2)) | (1 << (PyxellParser.T__57 - 2)) | (1 << (PyxellParser.T__58 - 2)) | (1 << (PyxellParser.T__59 - 2)) | (1 << (PyxellParser.INT - 2)) | (1 << (PyxellParser.FLOAT - 2)) | (1 << (PyxellParser.CHAR - 2)) | (1 << (PyxellParser.STRING - 2)) | (1 << (PyxellParser.ID - 2)))) != 0)): break self.state = 143 @@ -1146,7 +1153,7 @@ def def_block(self): self.state = 150 self._errHandler.sync(self) _la = self._input.LA(1) - if not (((((_la - 2)) & ~0x3f) == 0 and ((1 << (_la - 2)) & ((1 << (PyxellParser.T__1 - 2)) | (1 << (PyxellParser.T__2 - 2)) | (1 << (PyxellParser.T__8 - 2)) | (1 << (PyxellParser.T__9 - 2)) | (1 << (PyxellParser.T__15 - 2)) | (1 << (PyxellParser.T__16 - 2)) | (1 << (PyxellParser.T__17 - 2)) | (1 << (PyxellParser.T__19 - 2)) | (1 << (PyxellParser.T__22 - 2)) | (1 << (PyxellParser.T__23 - 2)) | (1 << (PyxellParser.T__24 - 2)) | (1 << (PyxellParser.T__27 - 2)) | (1 << (PyxellParser.T__28 - 2)) | (1 << (PyxellParser.T__34 - 2)) | (1 << (PyxellParser.T__37 - 2)) | (1 << (PyxellParser.T__46 - 2)) | (1 << (PyxellParser.T__51 - 2)) | (1 << (PyxellParser.T__52 - 2)) | (1 << (PyxellParser.T__53 - 2)) | (1 << (PyxellParser.T__54 - 2)) | (1 << (PyxellParser.T__55 - 2)) | (1 << (PyxellParser.T__56 - 2)) | (1 << (PyxellParser.T__57 - 2)) | (1 << (PyxellParser.T__58 - 2)) | (1 << (PyxellParser.INT - 2)) | (1 << (PyxellParser.FLOAT - 2)) | (1 << (PyxellParser.CHAR - 2)) | (1 << (PyxellParser.STRING - 2)) | (1 << (PyxellParser.ID - 2)))) != 0)): + if not (((((_la - 2)) & ~0x3f) == 0 and ((1 << (_la - 2)) & ((1 << (PyxellParser.T__1 - 2)) | (1 << (PyxellParser.T__2 - 2)) | (1 << (PyxellParser.T__8 - 2)) | (1 << (PyxellParser.T__9 - 2)) | (1 << (PyxellParser.T__15 - 2)) | (1 << (PyxellParser.T__16 - 2)) | (1 << (PyxellParser.T__17 - 2)) | (1 << (PyxellParser.T__19 - 2)) | (1 << (PyxellParser.T__22 - 2)) | (1 << (PyxellParser.T__23 - 2)) | (1 << (PyxellParser.T__24 - 2)) | (1 << (PyxellParser.T__27 - 2)) | (1 << (PyxellParser.T__28 - 2)) | (1 << (PyxellParser.T__34 - 2)) | (1 << (PyxellParser.T__37 - 2)) | (1 << (PyxellParser.T__46 - 2)) | (1 << (PyxellParser.T__51 - 2)) | (1 << (PyxellParser.T__52 - 2)) | (1 << (PyxellParser.T__53 - 2)) | (1 << (PyxellParser.T__54 - 2)) | (1 << (PyxellParser.T__55 - 2)) | (1 << (PyxellParser.T__56 - 2)) | (1 << (PyxellParser.T__57 - 2)) | (1 << (PyxellParser.T__58 - 2)) | (1 << (PyxellParser.T__59 - 2)) | (1 << (PyxellParser.INT - 2)) | (1 << (PyxellParser.FLOAT - 2)) | (1 << (PyxellParser.CHAR - 2)) | (1 << (PyxellParser.STRING - 2)) | (1 << (PyxellParser.ID - 2)))) != 0)): break self.state = 152 @@ -2044,6 +2051,23 @@ def copyFrom(self, ctx:ParserRuleContext): super().copyFrom(ctx) + class TypeParenthesesContext(TypContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.TypContext + super().__init__(parser) + self.copyFrom(ctx) + + def typ(self): + return self.getTypedRuleContext(PyxellParser.TypContext,0) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeParentheses" ): + return visitor.visitTypeParentheses(self) + else: + return visitor.visitChildren(self) + + class TypeArrayContext(TypContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.TypContext @@ -2081,6 +2105,43 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) + class TypeFunc0Context(TypContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.TypContext + super().__init__(parser) + self.copyFrom(ctx) + + def typ(self): + return self.getTypedRuleContext(PyxellParser.TypContext,0) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeFunc0" ): + return visitor.visitTypeFunc0(self) + else: + return visitor.visitChildren(self) + + + class TypeFuncContext(TypContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.TypContext + super().__init__(parser) + self.copyFrom(ctx) + + def typ(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(PyxellParser.TypContext) + else: + return self.getTypedRuleContext(PyxellParser.TypContext,i) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeFunc" ): + return visitor.visitTypeFunc(self) + else: + return visitor.visitChildren(self) + + class TypePrimitiveContext(TypContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.TypContext @@ -2105,7 +2166,7 @@ def typ(self, _p:int=0): self.enterRecursionRule(localctx, 22, self.RULE_typ, _p) try: self.enterOuterAlt(localctx, 1) - self.state = 276 + self.state = 282 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__53]: @@ -2151,42 +2212,82 @@ def typ(self, _p:int=0): self.state = 271 self.match(PyxellParser.T__58) pass - elif token in [PyxellParser.T__34]: - localctx = PyxellParser.TypeArrayContext(self, localctx) + elif token in [PyxellParser.T__28]: + localctx = PyxellParser.TypeParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx self.state = 272 - self.match(PyxellParser.T__34) + self.match(PyxellParser.T__28) self.state = 273 self.typ(0) self.state = 274 + self.match(PyxellParser.T__29) + pass + elif token in [PyxellParser.T__34]: + localctx = PyxellParser.TypeArrayContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 276 + self.match(PyxellParser.T__34) + self.state = 277 + self.typ(0) + self.state = 278 self.match(PyxellParser.T__35) pass + elif token in [PyxellParser.T__59]: + localctx = PyxellParser.TypeFunc0Context(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 280 + self.match(PyxellParser.T__59) + self.state = 281 + self.typ(1) + pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 283 + self.state = 292 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,27,self._ctx) + _alt = self._interp.adaptivePredict(self._input,28,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - localctx = PyxellParser.TypeTupleContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) - self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 278 - if not self.precpred(self._ctx, 1): - from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") - self.state = 279 - self.match(PyxellParser.T__5) - self.state = 280 - self.typ(1) - self.state = 285 + self.state = 290 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,27,self._ctx) + if la_ == 1: + localctx = PyxellParser.TypeTupleContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) + self.state = 284 + if not self.precpred(self._ctx, 3): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") + self.state = 285 + self.match(PyxellParser.T__5) + self.state = 286 + self.typ(3) + pass + + elif la_ == 2: + localctx = PyxellParser.TypeFuncContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) + self.state = 287 + if not self.precpred(self._ctx, 2): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") + self.state = 288 + self.match(PyxellParser.T__59) + self.state = 289 + self.typ(2) + pass + + + self.state = 294 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,27,self._ctx) + _alt = self._interp.adaptivePredict(self._input,28,self._ctx) except RecognitionException as re: localctx.exception = re @@ -2276,7 +2377,11 @@ def expr_sempred(self, localctx:ExprContext, predIndex:int): def typ_sempred(self, localctx:TypContext, predIndex:int): if predIndex == 16: - return self.precpred(self._ctx, 1) + return self.precpred(self._ctx, 3) + + + if predIndex == 17: + return self.precpred(self._ctx, 2) diff --git a/src/antlr/PyxellVisitor.py b/src/antlr/PyxellVisitor.py index 56749fec..e24ef6f1 100644 --- a/src/antlr/PyxellVisitor.py +++ b/src/antlr/PyxellVisitor.py @@ -194,6 +194,11 @@ def visitAtomId(self, ctx:PyxellParser.AtomIdContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#TypeParentheses. + def visitTypeParentheses(self, ctx:PyxellParser.TypeParenthesesContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#TypeArray. def visitTypeArray(self, ctx:PyxellParser.TypeArrayContext): return self.visitChildren(ctx) @@ -204,6 +209,16 @@ def visitTypeTuple(self, ctx:PyxellParser.TypeTupleContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#TypeFunc0. + def visitTypeFunc0(self, ctx:PyxellParser.TypeFunc0Context): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by PyxellParser#TypeFunc. + def visitTypeFunc(self, ctx:PyxellParser.TypeFuncContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#TypePrimitive. def visitTypePrimitive(self, ctx:PyxellParser.TypePrimitiveContext): return self.visitChildren(ctx) diff --git a/src/compiler.py b/src/compiler.py index 5ea59d9a..dd4d6746 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -988,6 +988,9 @@ def visitTypePrimitive(self, ctx): 'String': tString, }[ctx.getText()] + def visitTypeParentheses(self, ctx): + return self.visit(ctx.typ()) + def visitTypeArray(self, ctx): return tArray(self.visit(ctx.typ())) @@ -1000,3 +1003,16 @@ def visitTypeTuple(self, ctx): ctx = ctx.typ(1) types.append(self.visit(ctx.typ(1))) return tTuple(types) + + def visitTypeFunc(self, ctx): + types = [] + while True: + types.append(self.visit(ctx.typ(0))) + if not isinstance(ctx.typ(1), PyxellParser.TypeFuncContext): + break + ctx = ctx.typ(1) + types.append(self.visit(ctx.typ(1))) + return tFunc(types[:-1], types[-1]) + + def visitTypeFunc0(self, ctx): + return tFunc([], self.visit(ctx.typ())) diff --git a/src/types.py b/src/types.py index 87d8fe47..cbf20932 100644 --- a/src/types.py +++ b/src/types.py @@ -91,13 +91,13 @@ def show(type): if type.isTuple(): return '*'.join(t.show() for t in type.elements) if type.isFunc(): - return ','.join(t.show() for t in type.args) + '->' + type.ret.show() + return '->'.join(t.show() for t in type.args) + '->' + type.ret.show() return str(type) @extend_class(ll.Type) def default(type): - return ll.Constant(type, 0) + return ll.Constant(type, 0 if type in (tInt, tFloat, tBool, tChar) else 'null') def vInt(n): diff --git a/test/bad/functions/call05.err b/test/bad/functions/call05.err index 5bc6e0ab..7561f513 100644 --- a/test/bad/functions/call05.err +++ b/test/bad/functions/call05.err @@ -1 +1 @@ -Too few arguments for function `Int,Bool,Char->Void`. \ No newline at end of file +Too few arguments for function `Int->Bool->Char->Void`. \ No newline at end of file diff --git a/test/bad/functions/call08.err b/test/bad/functions/call08.err index 89736e72..b49848e4 100644 --- a/test/bad/functions/call08.err +++ b/test/bad/functions/call08.err @@ -1 +1 @@ -Too few arguments for function `Int,Bool,Char,String->Void`. \ No newline at end of file +Too few arguments for function `Int->Bool->Char->String->Void`. \ No newline at end of file diff --git a/test/bad/functions/lambda02.px b/test/bad/functions/lambda02.px index 0580bcb7..7725920f 100644 --- a/test/bad/functions/lambda02.px +++ b/test/bad/functions/lambda02.px @@ -1,5 +1,5 @@ -func f(String,Int->String g) String def +func f(String->Int->String g) String def return g("abc", 2) f(lambda x, y -> x - y) diff --git a/test/bad/functions/lambda07.px b/test/bad/functions/lambda07.px index cace0404..3ecb005d 100644 --- a/test/bad/functions/lambda07.px +++ b/test/bad/functions/lambda07.px @@ -1,5 +1,5 @@ -func f(Int,Int->Char g) def +func f(Int->Int->Char g) def return f(_*_) diff --git a/test/bad/functions/lambda08.px b/test/bad/functions/lambda08.px index a4fe1138..7914db7b 100644 --- a/test/bad/functions/lambda08.px +++ b/test/bad/functions/lambda08.px @@ -1,5 +1,5 @@ -func f(Int,Char->Int g) def +func f(Int->Char->Int g) def return f(_+_) diff --git a/test/bad/functions/lambda09.err b/test/bad/functions/lambda09.err index 5e5b23d5..ed4e7f5d 100644 --- a/test/bad/functions/lambda09.err +++ b/test/bad/functions/lambda09.err @@ -1 +1 @@ -Too few arguments for function `Int,Int->Int`. \ No newline at end of file +Too few arguments for function `Int->Int->Int`. \ No newline at end of file diff --git a/test/bad/functions/lambda09.px b/test/bad/functions/lambda09.px index 7bfc0814..898202d4 100644 --- a/test/bad/functions/lambda09.px +++ b/test/bad/functions/lambda09.px @@ -1,5 +1,5 @@ -func f(Int,Int->Int g) def +func f(Int->Int->Int g) def return f(_) diff --git a/test/bad/functions/lambda10.err b/test/bad/functions/lambda10.err index 1999901f..efa23944 100644 --- a/test/bad/functions/lambda10.err +++ b/test/bad/functions/lambda10.err @@ -1 +1 @@ -Too many arguments for function `Int,Int->Int`. \ No newline at end of file +Too many arguments for function `Int->Int->Int`. \ No newline at end of file diff --git a/test/bad/functions/lambda10.px b/test/bad/functions/lambda10.px index 1be4f114..b4194fe2 100644 --- a/test/bad/functions/lambda10.px +++ b/test/bad/functions/lambda10.px @@ -1,5 +1,5 @@ -func f(Int,Int->Int g) def +func f(Int->Int->Int g) def return f(_+_-_) diff --git a/test/bad/generics/type09.err b/test/bad/generics/type09.err index b8e9efb6..49316234 100644 --- a/test/bad/generics/type09.err +++ b/test/bad/generics/type09.err @@ -1 +1 @@ -Illegal assignment from `Int->Bool` to `A,B->C`. \ No newline at end of file +Illegal assignment from `Int->Bool` to `A->B->C`. \ No newline at end of file diff --git a/test/bad/generics/type09.px b/test/bad/generics/type09.px index a11f1044..ecfbd2df 100644 --- a/test/bad/generics/type09.px +++ b/test/bad/generics/type09.px @@ -1,5 +1,5 @@ -func f(A,B->C p) def +func f(A->B->C p) def return func g(Int x) Bool def diff --git a/test/good/functions/lambda02.px b/test/good/functions/lambda02.px index 637879cc..54af5037 100644 --- a/test/good/functions/lambda02.px +++ b/test/good/functions/lambda02.px @@ -1,5 +1,5 @@ -func f(Int,Int->Int g, String,Char,Int->Char h) Int def +func f(Int->Int->Int g, String->Char->Int->Char h) Int def c = h("ABC", 'Z', 2) return g(ord(c), 42) diff --git a/test/good/functions/lambda04.px b/test/good/functions/lambda04.px index 36484959..36131bea 100644 --- a/test/good/functions/lambda04.px +++ b/test/good/functions/lambda04.px @@ -1,5 +1,5 @@ -func fold(Int,Int->Int f, Int a, [Int] t) Int def +func fold(Int->Int->Int f, Int a, [Int] t) Int def for x in t do a = f(a, x) return a diff --git a/test/good/functions/lambda05.px b/test/good/functions/lambda05.px index 0085d409..f1c9ae16 100644 --- a/test/good/functions/lambda05.px +++ b/test/good/functions/lambda05.px @@ -1,5 +1,5 @@ -func fold(Bool,Bool->Bool f, Bool a, [Bool] t) Bool def +func fold(Bool->Bool->Bool f, Bool a, [Bool] t) Bool def for x in t do a = f(a, x) return a diff --git a/test/good/functions/lambda06.px b/test/good/functions/lambda06.px index c3b31c3c..d951699d 100644 --- a/test/good/functions/lambda06.px +++ b/test/good/functions/lambda06.px @@ -1,5 +1,5 @@ -func call(Bool,String->Void f) def +func call(Bool->String->Void f) def f(true, "$") func f(Int a, Bool b, Char c, String d: "---") def diff --git a/test/good/functions/lambda07.px b/test/good/functions/lambda07.px index 1072ee48..47f4d755 100644 --- a/test/good/functions/lambda07.px +++ b/test/good/functions/lambda07.px @@ -1,5 +1,5 @@ -func tuple(Int,Char->Int*Char f, Int n, Char c) def +func tuple(Int->Char->Int*Char f, Int n, Char c) def print f(n, c) tuple(lambda a, b -> (a, b), 2, 'x') diff --git a/test/good/functions/var03.px b/test/good/functions/var03.px index 5c007567..c407c0ce 100644 --- a/test/good/functions/var03.px +++ b/test/good/functions/var03.px @@ -2,7 +2,7 @@ func concat(String a, String b) String def return a + b -func id(String,String->String f) String,String->String def +func id(String->String->String f) String->String->String def return f f = id(id(concat)) diff --git a/test/good/functions/var07.px b/test/good/functions/var07.px index 34fdbc01..7a2ed822 100644 --- a/test/good/functions/var07.px +++ b/test/good/functions/var07.px @@ -2,11 +2,11 @@ func div(Int x, Int y) Int def return x / y -func get(String s) Int,Int->Int def +func get(String s) Int->Int->Int def print s return div -func f(String->Int,Int->Int g, String s, Int b) Int def +func f(String->(Int->Int->Int) g, String s, Int b) Int def h = g(s) print h(b, 1) return h(b, 4) diff --git a/test/good/generics/complex03.px b/test/good/generics/complex03.px index 8b7fa026..70223b94 100644 --- a/test/good/generics/complex03.px +++ b/test/good/generics/complex03.px @@ -1,5 +1,5 @@ -func fold(T,T->T f, T a, [T] t) T def +func fold(T->T->T f, T a, [T] t) T def for x in t do a = f(a, x) return a From 69463e51c12d3b155225296ac84196da4df89273 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Mon, 28 Oct 2019 21:30:04 +0100 Subject: [PATCH 035/100] Default arguments --- src/Pyxell.g4 | 4 +- src/antlr/Pyxell.interp | 4 +- src/antlr/Pyxell.tokens | 42 +-- src/antlr/PyxellLexer.interp | 4 +- src/antlr/PyxellLexer.py | 328 +++++++++--------- src/antlr/PyxellLexer.tokens | 42 +-- src/antlr/PyxellParser.py | 620 ++++++++++++++++++----------------- src/compiler.py | 47 ++- src/errors.py | 1 + src/types.py | 9 +- 10 files changed, 579 insertions(+), 522 deletions(-) diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index b69dfb51..9fab2b3a 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -28,11 +28,11 @@ compound_stmt | 'while' expr do_block # StmtWhile | 'until' expr do_block # StmtUntil | 'for' tuple_expr 'in' tuple_expr ('step' step=tuple_expr)? do_block # StmtFor - | 'func' ID '(' (arg ',')* arg? ')' ret=typ? def_block # StmtFunc + | 'func' ID '(' (arg ',')* arg? ')' (ret=typ)? def_block # StmtFunc ; arg - : typ ID + : typ ID (':' default=expr)? ; do_block diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index 92a132c1..5ceead3a 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -30,6 +30,7 @@ null 'func' '(' ')' +':' 'do' '{' '}' @@ -50,7 +51,6 @@ null 'and' 'or' '?' -':' 'true' 'false' 'Void' @@ -154,4 +154,4 @@ typ atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 69, 298, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 3, 2, 7, 2, 28, 10, 2, 12, 2, 14, 2, 31, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 39, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 44, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 50, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 55, 10, 4, 12, 4, 14, 4, 58, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 69, 10, 4, 5, 4, 71, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 76, 10, 5, 12, 5, 14, 5, 79, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 88, 10, 6, 12, 6, 14, 6, 91, 11, 6, 3, 6, 3, 6, 5, 6, 95, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 111, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 121, 10, 6, 12, 6, 14, 6, 124, 11, 6, 3, 6, 5, 6, 127, 10, 6, 3, 6, 3, 6, 5, 6, 131, 10, 6, 3, 6, 5, 6, 134, 10, 6, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 6, 8, 142, 10, 8, 13, 8, 14, 8, 143, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 6, 9, 151, 10, 9, 13, 9, 14, 9, 152, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 7, 10, 160, 10, 10, 12, 10, 14, 10, 163, 11, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 177, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 231, 10, 11, 12, 11, 14, 11, 234, 11, 11, 3, 11, 5, 11, 237, 10, 11, 3, 11, 3, 11, 3, 11, 7, 11, 242, 10, 11, 12, 11, 14, 11, 245, 11, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 7, 12, 256, 10, 12, 12, 12, 14, 12, 259, 11, 12, 3, 12, 5, 12, 262, 10, 12, 3, 12, 3, 12, 5, 12, 266, 10, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 285, 10, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 7, 13, 293, 10, 13, 12, 13, 14, 13, 296, 11, 13, 3, 13, 2, 4, 20, 24, 14, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 2, 11, 3, 2, 7, 17, 3, 2, 18, 19, 4, 2, 11, 12, 40, 40, 3, 2, 8, 10, 3, 2, 11, 12, 3, 2, 13, 14, 3, 2, 41, 42, 3, 2, 43, 48, 3, 2, 54, 55, 2, 350, 2, 29, 3, 2, 2, 2, 4, 38, 3, 2, 2, 2, 6, 70, 3, 2, 2, 2, 8, 72, 3, 2, 2, 2, 10, 133, 3, 2, 2, 2, 12, 135, 3, 2, 2, 2, 14, 138, 3, 2, 2, 2, 16, 147, 3, 2, 2, 2, 18, 161, 3, 2, 2, 2, 20, 176, 3, 2, 2, 2, 22, 265, 3, 2, 2, 2, 24, 284, 3, 2, 2, 2, 26, 28, 5, 4, 3, 2, 27, 26, 3, 2, 2, 2, 28, 31, 3, 2, 2, 2, 29, 27, 3, 2, 2, 2, 29, 30, 3, 2, 2, 2, 30, 32, 3, 2, 2, 2, 31, 29, 3, 2, 2, 2, 32, 33, 7, 2, 2, 3, 33, 3, 3, 2, 2, 2, 34, 35, 5, 6, 4, 2, 35, 36, 7, 3, 2, 2, 36, 39, 3, 2, 2, 2, 37, 39, 5, 10, 6, 2, 38, 34, 3, 2, 2, 2, 38, 37, 3, 2, 2, 2, 39, 5, 3, 2, 2, 2, 40, 71, 7, 4, 2, 2, 41, 43, 7, 5, 2, 2, 42, 44, 5, 18, 10, 2, 43, 42, 3, 2, 2, 2, 43, 44, 3, 2, 2, 2, 44, 71, 3, 2, 2, 2, 45, 46, 5, 24, 13, 2, 46, 49, 7, 67, 2, 2, 47, 48, 7, 6, 2, 2, 48, 50, 5, 18, 10, 2, 49, 47, 3, 2, 2, 2, 49, 50, 3, 2, 2, 2, 50, 71, 3, 2, 2, 2, 51, 52, 5, 8, 5, 2, 52, 53, 7, 6, 2, 2, 53, 55, 3, 2, 2, 2, 54, 51, 3, 2, 2, 2, 55, 58, 3, 2, 2, 2, 56, 54, 3, 2, 2, 2, 56, 57, 3, 2, 2, 2, 57, 59, 3, 2, 2, 2, 58, 56, 3, 2, 2, 2, 59, 71, 5, 18, 10, 2, 60, 61, 5, 20, 11, 2, 61, 62, 9, 2, 2, 2, 62, 63, 7, 6, 2, 2, 63, 64, 5, 20, 11, 2, 64, 71, 3, 2, 2, 2, 65, 71, 9, 3, 2, 2, 66, 68, 7, 20, 2, 2, 67, 69, 5, 18, 10, 2, 68, 67, 3, 2, 2, 2, 68, 69, 3, 2, 2, 2, 69, 71, 3, 2, 2, 2, 70, 40, 3, 2, 2, 2, 70, 41, 3, 2, 2, 2, 70, 45, 3, 2, 2, 2, 70, 56, 3, 2, 2, 2, 70, 60, 3, 2, 2, 2, 70, 65, 3, 2, 2, 2, 70, 66, 3, 2, 2, 2, 71, 7, 3, 2, 2, 2, 72, 77, 5, 20, 11, 2, 73, 74, 7, 21, 2, 2, 74, 76, 5, 20, 11, 2, 75, 73, 3, 2, 2, 2, 76, 79, 3, 2, 2, 2, 77, 75, 3, 2, 2, 2, 77, 78, 3, 2, 2, 2, 78, 9, 3, 2, 2, 2, 79, 77, 3, 2, 2, 2, 80, 81, 7, 22, 2, 2, 81, 82, 5, 20, 11, 2, 82, 89, 5, 14, 8, 2, 83, 84, 7, 23, 2, 2, 84, 85, 5, 20, 11, 2, 85, 86, 5, 14, 8, 2, 86, 88, 3, 2, 2, 2, 87, 83, 3, 2, 2, 2, 88, 91, 3, 2, 2, 2, 89, 87, 3, 2, 2, 2, 89, 90, 3, 2, 2, 2, 90, 94, 3, 2, 2, 2, 91, 89, 3, 2, 2, 2, 92, 93, 7, 24, 2, 2, 93, 95, 5, 14, 8, 2, 94, 92, 3, 2, 2, 2, 94, 95, 3, 2, 2, 2, 95, 134, 3, 2, 2, 2, 96, 97, 7, 25, 2, 2, 97, 98, 5, 20, 11, 2, 98, 99, 5, 14, 8, 2, 99, 134, 3, 2, 2, 2, 100, 101, 7, 26, 2, 2, 101, 102, 5, 20, 11, 2, 102, 103, 5, 14, 8, 2, 103, 134, 3, 2, 2, 2, 104, 105, 7, 27, 2, 2, 105, 106, 5, 18, 10, 2, 106, 107, 7, 28, 2, 2, 107, 110, 5, 18, 10, 2, 108, 109, 7, 29, 2, 2, 109, 111, 5, 18, 10, 2, 110, 108, 3, 2, 2, 2, 110, 111, 3, 2, 2, 2, 111, 112, 3, 2, 2, 2, 112, 113, 5, 14, 8, 2, 113, 134, 3, 2, 2, 2, 114, 115, 7, 30, 2, 2, 115, 116, 7, 67, 2, 2, 116, 122, 7, 31, 2, 2, 117, 118, 5, 12, 7, 2, 118, 119, 7, 21, 2, 2, 119, 121, 3, 2, 2, 2, 120, 117, 3, 2, 2, 2, 121, 124, 3, 2, 2, 2, 122, 120, 3, 2, 2, 2, 122, 123, 3, 2, 2, 2, 123, 126, 3, 2, 2, 2, 124, 122, 3, 2, 2, 2, 125, 127, 5, 12, 7, 2, 126, 125, 3, 2, 2, 2, 126, 127, 3, 2, 2, 2, 127, 128, 3, 2, 2, 2, 128, 130, 7, 32, 2, 2, 129, 131, 5, 24, 13, 2, 130, 129, 3, 2, 2, 2, 130, 131, 3, 2, 2, 2, 131, 132, 3, 2, 2, 2, 132, 134, 5, 16, 9, 2, 133, 80, 3, 2, 2, 2, 133, 96, 3, 2, 2, 2, 133, 100, 3, 2, 2, 2, 133, 104, 3, 2, 2, 2, 133, 114, 3, 2, 2, 2, 134, 11, 3, 2, 2, 2, 135, 136, 5, 24, 13, 2, 136, 137, 7, 67, 2, 2, 137, 13, 3, 2, 2, 2, 138, 139, 7, 33, 2, 2, 139, 141, 7, 34, 2, 2, 140, 142, 5, 4, 3, 2, 141, 140, 3, 2, 2, 2, 142, 143, 3, 2, 2, 2, 143, 141, 3, 2, 2, 2, 143, 144, 3, 2, 2, 2, 144, 145, 3, 2, 2, 2, 145, 146, 7, 35, 2, 2, 146, 15, 3, 2, 2, 2, 147, 148, 7, 36, 2, 2, 148, 150, 7, 34, 2, 2, 149, 151, 5, 4, 3, 2, 150, 149, 3, 2, 2, 2, 151, 152, 3, 2, 2, 2, 152, 150, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 154, 3, 2, 2, 2, 154, 155, 7, 35, 2, 2, 155, 17, 3, 2, 2, 2, 156, 157, 5, 20, 11, 2, 157, 158, 7, 21, 2, 2, 158, 160, 3, 2, 2, 2, 159, 156, 3, 2, 2, 2, 160, 163, 3, 2, 2, 2, 161, 159, 3, 2, 2, 2, 161, 162, 3, 2, 2, 2, 162, 164, 3, 2, 2, 2, 163, 161, 3, 2, 2, 2, 164, 165, 5, 20, 11, 2, 165, 19, 3, 2, 2, 2, 166, 167, 8, 11, 1, 2, 167, 177, 5, 22, 12, 2, 168, 169, 7, 31, 2, 2, 169, 170, 5, 18, 10, 2, 170, 171, 7, 32, 2, 2, 171, 177, 3, 2, 2, 2, 172, 173, 9, 4, 2, 2, 173, 177, 5, 20, 11, 16, 174, 175, 7, 49, 2, 2, 175, 177, 5, 20, 11, 6, 176, 166, 3, 2, 2, 2, 176, 168, 3, 2, 2, 2, 176, 172, 3, 2, 2, 2, 176, 174, 3, 2, 2, 2, 177, 243, 3, 2, 2, 2, 178, 179, 12, 17, 2, 2, 179, 180, 7, 7, 2, 2, 180, 242, 5, 20, 11, 17, 181, 182, 12, 15, 2, 2, 182, 183, 9, 5, 2, 2, 183, 242, 5, 20, 11, 16, 184, 185, 12, 14, 2, 2, 185, 186, 9, 6, 2, 2, 186, 242, 5, 20, 11, 15, 187, 188, 12, 13, 2, 2, 188, 189, 9, 7, 2, 2, 189, 242, 5, 20, 11, 14, 190, 191, 12, 12, 2, 2, 191, 192, 7, 15, 2, 2, 192, 242, 5, 20, 11, 13, 193, 194, 12, 11, 2, 2, 194, 195, 7, 16, 2, 2, 195, 242, 5, 20, 11, 12, 196, 197, 12, 10, 2, 2, 197, 198, 7, 17, 2, 2, 198, 242, 5, 20, 11, 11, 199, 200, 12, 9, 2, 2, 200, 201, 9, 8, 2, 2, 201, 242, 5, 20, 11, 10, 202, 203, 12, 7, 2, 2, 203, 204, 9, 9, 2, 2, 204, 242, 5, 20, 11, 7, 205, 206, 12, 5, 2, 2, 206, 207, 7, 50, 2, 2, 207, 242, 5, 20, 11, 5, 208, 209, 12, 4, 2, 2, 209, 210, 7, 51, 2, 2, 210, 242, 5, 20, 11, 4, 211, 212, 12, 3, 2, 2, 212, 213, 7, 52, 2, 2, 213, 214, 5, 20, 11, 2, 214, 215, 7, 53, 2, 2, 215, 216, 5, 20, 11, 3, 216, 242, 3, 2, 2, 2, 217, 218, 12, 20, 2, 2, 218, 219, 7, 37, 2, 2, 219, 220, 5, 20, 11, 2, 220, 221, 7, 38, 2, 2, 221, 242, 3, 2, 2, 2, 222, 223, 12, 19, 2, 2, 223, 224, 7, 39, 2, 2, 224, 242, 7, 67, 2, 2, 225, 226, 12, 18, 2, 2, 226, 232, 7, 31, 2, 2, 227, 228, 5, 20, 11, 2, 228, 229, 7, 21, 2, 2, 229, 231, 3, 2, 2, 2, 230, 227, 3, 2, 2, 2, 231, 234, 3, 2, 2, 2, 232, 230, 3, 2, 2, 2, 232, 233, 3, 2, 2, 2, 233, 236, 3, 2, 2, 2, 234, 232, 3, 2, 2, 2, 235, 237, 5, 20, 11, 2, 236, 235, 3, 2, 2, 2, 236, 237, 3, 2, 2, 2, 237, 238, 3, 2, 2, 2, 238, 242, 7, 32, 2, 2, 239, 240, 12, 8, 2, 2, 240, 242, 7, 42, 2, 2, 241, 178, 3, 2, 2, 2, 241, 181, 3, 2, 2, 2, 241, 184, 3, 2, 2, 2, 241, 187, 3, 2, 2, 2, 241, 190, 3, 2, 2, 2, 241, 193, 3, 2, 2, 2, 241, 196, 3, 2, 2, 2, 241, 199, 3, 2, 2, 2, 241, 202, 3, 2, 2, 2, 241, 205, 3, 2, 2, 2, 241, 208, 3, 2, 2, 2, 241, 211, 3, 2, 2, 2, 241, 217, 3, 2, 2, 2, 241, 222, 3, 2, 2, 2, 241, 225, 3, 2, 2, 2, 241, 239, 3, 2, 2, 2, 242, 245, 3, 2, 2, 2, 243, 241, 3, 2, 2, 2, 243, 244, 3, 2, 2, 2, 244, 21, 3, 2, 2, 2, 245, 243, 3, 2, 2, 2, 246, 266, 7, 63, 2, 2, 247, 266, 7, 64, 2, 2, 248, 266, 9, 10, 2, 2, 249, 266, 7, 65, 2, 2, 250, 266, 7, 66, 2, 2, 251, 257, 7, 37, 2, 2, 252, 253, 5, 20, 11, 2, 253, 254, 7, 21, 2, 2, 254, 256, 3, 2, 2, 2, 255, 252, 3, 2, 2, 2, 256, 259, 3, 2, 2, 2, 257, 255, 3, 2, 2, 2, 257, 258, 3, 2, 2, 2, 258, 261, 3, 2, 2, 2, 259, 257, 3, 2, 2, 2, 260, 262, 5, 20, 11, 2, 261, 260, 3, 2, 2, 2, 261, 262, 3, 2, 2, 2, 262, 263, 3, 2, 2, 2, 263, 266, 7, 38, 2, 2, 264, 266, 7, 67, 2, 2, 265, 246, 3, 2, 2, 2, 265, 247, 3, 2, 2, 2, 265, 248, 3, 2, 2, 2, 265, 249, 3, 2, 2, 2, 265, 250, 3, 2, 2, 2, 265, 251, 3, 2, 2, 2, 265, 264, 3, 2, 2, 2, 266, 23, 3, 2, 2, 2, 267, 268, 8, 13, 1, 2, 268, 285, 7, 56, 2, 2, 269, 285, 7, 57, 2, 2, 270, 285, 7, 58, 2, 2, 271, 285, 7, 59, 2, 2, 272, 285, 7, 60, 2, 2, 273, 285, 7, 61, 2, 2, 274, 275, 7, 31, 2, 2, 275, 276, 5, 24, 13, 2, 276, 277, 7, 32, 2, 2, 277, 285, 3, 2, 2, 2, 278, 279, 7, 37, 2, 2, 279, 280, 5, 24, 13, 2, 280, 281, 7, 38, 2, 2, 281, 285, 3, 2, 2, 2, 282, 283, 7, 62, 2, 2, 283, 285, 5, 24, 13, 3, 284, 267, 3, 2, 2, 2, 284, 269, 3, 2, 2, 2, 284, 270, 3, 2, 2, 2, 284, 271, 3, 2, 2, 2, 284, 272, 3, 2, 2, 2, 284, 273, 3, 2, 2, 2, 284, 274, 3, 2, 2, 2, 284, 278, 3, 2, 2, 2, 284, 282, 3, 2, 2, 2, 285, 294, 3, 2, 2, 2, 286, 287, 12, 5, 2, 2, 287, 288, 7, 8, 2, 2, 288, 293, 5, 24, 13, 5, 289, 290, 12, 4, 2, 2, 290, 291, 7, 62, 2, 2, 291, 293, 5, 24, 13, 4, 292, 286, 3, 2, 2, 2, 292, 289, 3, 2, 2, 2, 293, 296, 3, 2, 2, 2, 294, 292, 3, 2, 2, 2, 294, 295, 3, 2, 2, 2, 295, 25, 3, 2, 2, 2, 296, 294, 3, 2, 2, 2, 31, 29, 38, 43, 49, 56, 68, 70, 77, 89, 94, 110, 122, 126, 130, 133, 143, 152, 161, 176, 232, 236, 241, 243, 257, 261, 265, 284, 292, 294] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 69, 301, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 3, 2, 7, 2, 28, 10, 2, 12, 2, 14, 2, 31, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 39, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 44, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 50, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 55, 10, 4, 12, 4, 14, 4, 58, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 69, 10, 4, 5, 4, 71, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 76, 10, 5, 12, 5, 14, 5, 79, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 88, 10, 6, 12, 6, 14, 6, 91, 11, 6, 3, 6, 3, 6, 5, 6, 95, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 111, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 121, 10, 6, 12, 6, 14, 6, 124, 11, 6, 3, 6, 5, 6, 127, 10, 6, 3, 6, 3, 6, 5, 6, 131, 10, 6, 3, 6, 5, 6, 134, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 140, 10, 7, 3, 8, 3, 8, 3, 8, 6, 8, 145, 10, 8, 13, 8, 14, 8, 146, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 6, 9, 154, 10, 9, 13, 9, 14, 9, 155, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 7, 10, 163, 10, 10, 12, 10, 14, 10, 166, 11, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 180, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 234, 10, 11, 12, 11, 14, 11, 237, 11, 11, 3, 11, 5, 11, 240, 10, 11, 3, 11, 3, 11, 3, 11, 7, 11, 245, 10, 11, 12, 11, 14, 11, 248, 11, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 7, 12, 259, 10, 12, 12, 12, 14, 12, 262, 11, 12, 3, 12, 5, 12, 265, 10, 12, 3, 12, 3, 12, 5, 12, 269, 10, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 288, 10, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 7, 13, 296, 10, 13, 12, 13, 14, 13, 299, 11, 13, 3, 13, 2, 4, 20, 24, 14, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 2, 11, 3, 2, 7, 17, 3, 2, 18, 19, 4, 2, 11, 12, 41, 41, 3, 2, 8, 10, 3, 2, 11, 12, 3, 2, 13, 14, 3, 2, 42, 43, 3, 2, 44, 49, 3, 2, 54, 55, 2, 354, 2, 29, 3, 2, 2, 2, 4, 38, 3, 2, 2, 2, 6, 70, 3, 2, 2, 2, 8, 72, 3, 2, 2, 2, 10, 133, 3, 2, 2, 2, 12, 135, 3, 2, 2, 2, 14, 141, 3, 2, 2, 2, 16, 150, 3, 2, 2, 2, 18, 164, 3, 2, 2, 2, 20, 179, 3, 2, 2, 2, 22, 268, 3, 2, 2, 2, 24, 287, 3, 2, 2, 2, 26, 28, 5, 4, 3, 2, 27, 26, 3, 2, 2, 2, 28, 31, 3, 2, 2, 2, 29, 27, 3, 2, 2, 2, 29, 30, 3, 2, 2, 2, 30, 32, 3, 2, 2, 2, 31, 29, 3, 2, 2, 2, 32, 33, 7, 2, 2, 3, 33, 3, 3, 2, 2, 2, 34, 35, 5, 6, 4, 2, 35, 36, 7, 3, 2, 2, 36, 39, 3, 2, 2, 2, 37, 39, 5, 10, 6, 2, 38, 34, 3, 2, 2, 2, 38, 37, 3, 2, 2, 2, 39, 5, 3, 2, 2, 2, 40, 71, 7, 4, 2, 2, 41, 43, 7, 5, 2, 2, 42, 44, 5, 18, 10, 2, 43, 42, 3, 2, 2, 2, 43, 44, 3, 2, 2, 2, 44, 71, 3, 2, 2, 2, 45, 46, 5, 24, 13, 2, 46, 49, 7, 67, 2, 2, 47, 48, 7, 6, 2, 2, 48, 50, 5, 18, 10, 2, 49, 47, 3, 2, 2, 2, 49, 50, 3, 2, 2, 2, 50, 71, 3, 2, 2, 2, 51, 52, 5, 8, 5, 2, 52, 53, 7, 6, 2, 2, 53, 55, 3, 2, 2, 2, 54, 51, 3, 2, 2, 2, 55, 58, 3, 2, 2, 2, 56, 54, 3, 2, 2, 2, 56, 57, 3, 2, 2, 2, 57, 59, 3, 2, 2, 2, 58, 56, 3, 2, 2, 2, 59, 71, 5, 18, 10, 2, 60, 61, 5, 20, 11, 2, 61, 62, 9, 2, 2, 2, 62, 63, 7, 6, 2, 2, 63, 64, 5, 20, 11, 2, 64, 71, 3, 2, 2, 2, 65, 71, 9, 3, 2, 2, 66, 68, 7, 20, 2, 2, 67, 69, 5, 18, 10, 2, 68, 67, 3, 2, 2, 2, 68, 69, 3, 2, 2, 2, 69, 71, 3, 2, 2, 2, 70, 40, 3, 2, 2, 2, 70, 41, 3, 2, 2, 2, 70, 45, 3, 2, 2, 2, 70, 56, 3, 2, 2, 2, 70, 60, 3, 2, 2, 2, 70, 65, 3, 2, 2, 2, 70, 66, 3, 2, 2, 2, 71, 7, 3, 2, 2, 2, 72, 77, 5, 20, 11, 2, 73, 74, 7, 21, 2, 2, 74, 76, 5, 20, 11, 2, 75, 73, 3, 2, 2, 2, 76, 79, 3, 2, 2, 2, 77, 75, 3, 2, 2, 2, 77, 78, 3, 2, 2, 2, 78, 9, 3, 2, 2, 2, 79, 77, 3, 2, 2, 2, 80, 81, 7, 22, 2, 2, 81, 82, 5, 20, 11, 2, 82, 89, 5, 14, 8, 2, 83, 84, 7, 23, 2, 2, 84, 85, 5, 20, 11, 2, 85, 86, 5, 14, 8, 2, 86, 88, 3, 2, 2, 2, 87, 83, 3, 2, 2, 2, 88, 91, 3, 2, 2, 2, 89, 87, 3, 2, 2, 2, 89, 90, 3, 2, 2, 2, 90, 94, 3, 2, 2, 2, 91, 89, 3, 2, 2, 2, 92, 93, 7, 24, 2, 2, 93, 95, 5, 14, 8, 2, 94, 92, 3, 2, 2, 2, 94, 95, 3, 2, 2, 2, 95, 134, 3, 2, 2, 2, 96, 97, 7, 25, 2, 2, 97, 98, 5, 20, 11, 2, 98, 99, 5, 14, 8, 2, 99, 134, 3, 2, 2, 2, 100, 101, 7, 26, 2, 2, 101, 102, 5, 20, 11, 2, 102, 103, 5, 14, 8, 2, 103, 134, 3, 2, 2, 2, 104, 105, 7, 27, 2, 2, 105, 106, 5, 18, 10, 2, 106, 107, 7, 28, 2, 2, 107, 110, 5, 18, 10, 2, 108, 109, 7, 29, 2, 2, 109, 111, 5, 18, 10, 2, 110, 108, 3, 2, 2, 2, 110, 111, 3, 2, 2, 2, 111, 112, 3, 2, 2, 2, 112, 113, 5, 14, 8, 2, 113, 134, 3, 2, 2, 2, 114, 115, 7, 30, 2, 2, 115, 116, 7, 67, 2, 2, 116, 122, 7, 31, 2, 2, 117, 118, 5, 12, 7, 2, 118, 119, 7, 21, 2, 2, 119, 121, 3, 2, 2, 2, 120, 117, 3, 2, 2, 2, 121, 124, 3, 2, 2, 2, 122, 120, 3, 2, 2, 2, 122, 123, 3, 2, 2, 2, 123, 126, 3, 2, 2, 2, 124, 122, 3, 2, 2, 2, 125, 127, 5, 12, 7, 2, 126, 125, 3, 2, 2, 2, 126, 127, 3, 2, 2, 2, 127, 128, 3, 2, 2, 2, 128, 130, 7, 32, 2, 2, 129, 131, 5, 24, 13, 2, 130, 129, 3, 2, 2, 2, 130, 131, 3, 2, 2, 2, 131, 132, 3, 2, 2, 2, 132, 134, 5, 16, 9, 2, 133, 80, 3, 2, 2, 2, 133, 96, 3, 2, 2, 2, 133, 100, 3, 2, 2, 2, 133, 104, 3, 2, 2, 2, 133, 114, 3, 2, 2, 2, 134, 11, 3, 2, 2, 2, 135, 136, 5, 24, 13, 2, 136, 139, 7, 67, 2, 2, 137, 138, 7, 33, 2, 2, 138, 140, 5, 20, 11, 2, 139, 137, 3, 2, 2, 2, 139, 140, 3, 2, 2, 2, 140, 13, 3, 2, 2, 2, 141, 142, 7, 34, 2, 2, 142, 144, 7, 35, 2, 2, 143, 145, 5, 4, 3, 2, 144, 143, 3, 2, 2, 2, 145, 146, 3, 2, 2, 2, 146, 144, 3, 2, 2, 2, 146, 147, 3, 2, 2, 2, 147, 148, 3, 2, 2, 2, 148, 149, 7, 36, 2, 2, 149, 15, 3, 2, 2, 2, 150, 151, 7, 37, 2, 2, 151, 153, 7, 35, 2, 2, 152, 154, 5, 4, 3, 2, 153, 152, 3, 2, 2, 2, 154, 155, 3, 2, 2, 2, 155, 153, 3, 2, 2, 2, 155, 156, 3, 2, 2, 2, 156, 157, 3, 2, 2, 2, 157, 158, 7, 36, 2, 2, 158, 17, 3, 2, 2, 2, 159, 160, 5, 20, 11, 2, 160, 161, 7, 21, 2, 2, 161, 163, 3, 2, 2, 2, 162, 159, 3, 2, 2, 2, 163, 166, 3, 2, 2, 2, 164, 162, 3, 2, 2, 2, 164, 165, 3, 2, 2, 2, 165, 167, 3, 2, 2, 2, 166, 164, 3, 2, 2, 2, 167, 168, 5, 20, 11, 2, 168, 19, 3, 2, 2, 2, 169, 170, 8, 11, 1, 2, 170, 180, 5, 22, 12, 2, 171, 172, 7, 31, 2, 2, 172, 173, 5, 18, 10, 2, 173, 174, 7, 32, 2, 2, 174, 180, 3, 2, 2, 2, 175, 176, 9, 4, 2, 2, 176, 180, 5, 20, 11, 16, 177, 178, 7, 50, 2, 2, 178, 180, 5, 20, 11, 6, 179, 169, 3, 2, 2, 2, 179, 171, 3, 2, 2, 2, 179, 175, 3, 2, 2, 2, 179, 177, 3, 2, 2, 2, 180, 246, 3, 2, 2, 2, 181, 182, 12, 17, 2, 2, 182, 183, 7, 7, 2, 2, 183, 245, 5, 20, 11, 17, 184, 185, 12, 15, 2, 2, 185, 186, 9, 5, 2, 2, 186, 245, 5, 20, 11, 16, 187, 188, 12, 14, 2, 2, 188, 189, 9, 6, 2, 2, 189, 245, 5, 20, 11, 15, 190, 191, 12, 13, 2, 2, 191, 192, 9, 7, 2, 2, 192, 245, 5, 20, 11, 14, 193, 194, 12, 12, 2, 2, 194, 195, 7, 15, 2, 2, 195, 245, 5, 20, 11, 13, 196, 197, 12, 11, 2, 2, 197, 198, 7, 16, 2, 2, 198, 245, 5, 20, 11, 12, 199, 200, 12, 10, 2, 2, 200, 201, 7, 17, 2, 2, 201, 245, 5, 20, 11, 11, 202, 203, 12, 9, 2, 2, 203, 204, 9, 8, 2, 2, 204, 245, 5, 20, 11, 10, 205, 206, 12, 7, 2, 2, 206, 207, 9, 9, 2, 2, 207, 245, 5, 20, 11, 7, 208, 209, 12, 5, 2, 2, 209, 210, 7, 51, 2, 2, 210, 245, 5, 20, 11, 5, 211, 212, 12, 4, 2, 2, 212, 213, 7, 52, 2, 2, 213, 245, 5, 20, 11, 4, 214, 215, 12, 3, 2, 2, 215, 216, 7, 53, 2, 2, 216, 217, 5, 20, 11, 2, 217, 218, 7, 33, 2, 2, 218, 219, 5, 20, 11, 3, 219, 245, 3, 2, 2, 2, 220, 221, 12, 20, 2, 2, 221, 222, 7, 38, 2, 2, 222, 223, 5, 20, 11, 2, 223, 224, 7, 39, 2, 2, 224, 245, 3, 2, 2, 2, 225, 226, 12, 19, 2, 2, 226, 227, 7, 40, 2, 2, 227, 245, 7, 67, 2, 2, 228, 229, 12, 18, 2, 2, 229, 235, 7, 31, 2, 2, 230, 231, 5, 20, 11, 2, 231, 232, 7, 21, 2, 2, 232, 234, 3, 2, 2, 2, 233, 230, 3, 2, 2, 2, 234, 237, 3, 2, 2, 2, 235, 233, 3, 2, 2, 2, 235, 236, 3, 2, 2, 2, 236, 239, 3, 2, 2, 2, 237, 235, 3, 2, 2, 2, 238, 240, 5, 20, 11, 2, 239, 238, 3, 2, 2, 2, 239, 240, 3, 2, 2, 2, 240, 241, 3, 2, 2, 2, 241, 245, 7, 32, 2, 2, 242, 243, 12, 8, 2, 2, 243, 245, 7, 43, 2, 2, 244, 181, 3, 2, 2, 2, 244, 184, 3, 2, 2, 2, 244, 187, 3, 2, 2, 2, 244, 190, 3, 2, 2, 2, 244, 193, 3, 2, 2, 2, 244, 196, 3, 2, 2, 2, 244, 199, 3, 2, 2, 2, 244, 202, 3, 2, 2, 2, 244, 205, 3, 2, 2, 2, 244, 208, 3, 2, 2, 2, 244, 211, 3, 2, 2, 2, 244, 214, 3, 2, 2, 2, 244, 220, 3, 2, 2, 2, 244, 225, 3, 2, 2, 2, 244, 228, 3, 2, 2, 2, 244, 242, 3, 2, 2, 2, 245, 248, 3, 2, 2, 2, 246, 244, 3, 2, 2, 2, 246, 247, 3, 2, 2, 2, 247, 21, 3, 2, 2, 2, 248, 246, 3, 2, 2, 2, 249, 269, 7, 63, 2, 2, 250, 269, 7, 64, 2, 2, 251, 269, 9, 10, 2, 2, 252, 269, 7, 65, 2, 2, 253, 269, 7, 66, 2, 2, 254, 260, 7, 38, 2, 2, 255, 256, 5, 20, 11, 2, 256, 257, 7, 21, 2, 2, 257, 259, 3, 2, 2, 2, 258, 255, 3, 2, 2, 2, 259, 262, 3, 2, 2, 2, 260, 258, 3, 2, 2, 2, 260, 261, 3, 2, 2, 2, 261, 264, 3, 2, 2, 2, 262, 260, 3, 2, 2, 2, 263, 265, 5, 20, 11, 2, 264, 263, 3, 2, 2, 2, 264, 265, 3, 2, 2, 2, 265, 266, 3, 2, 2, 2, 266, 269, 7, 39, 2, 2, 267, 269, 7, 67, 2, 2, 268, 249, 3, 2, 2, 2, 268, 250, 3, 2, 2, 2, 268, 251, 3, 2, 2, 2, 268, 252, 3, 2, 2, 2, 268, 253, 3, 2, 2, 2, 268, 254, 3, 2, 2, 2, 268, 267, 3, 2, 2, 2, 269, 23, 3, 2, 2, 2, 270, 271, 8, 13, 1, 2, 271, 288, 7, 56, 2, 2, 272, 288, 7, 57, 2, 2, 273, 288, 7, 58, 2, 2, 274, 288, 7, 59, 2, 2, 275, 288, 7, 60, 2, 2, 276, 288, 7, 61, 2, 2, 277, 278, 7, 31, 2, 2, 278, 279, 5, 24, 13, 2, 279, 280, 7, 32, 2, 2, 280, 288, 3, 2, 2, 2, 281, 282, 7, 38, 2, 2, 282, 283, 5, 24, 13, 2, 283, 284, 7, 39, 2, 2, 284, 288, 3, 2, 2, 2, 285, 286, 7, 62, 2, 2, 286, 288, 5, 24, 13, 3, 287, 270, 3, 2, 2, 2, 287, 272, 3, 2, 2, 2, 287, 273, 3, 2, 2, 2, 287, 274, 3, 2, 2, 2, 287, 275, 3, 2, 2, 2, 287, 276, 3, 2, 2, 2, 287, 277, 3, 2, 2, 2, 287, 281, 3, 2, 2, 2, 287, 285, 3, 2, 2, 2, 288, 297, 3, 2, 2, 2, 289, 290, 12, 5, 2, 2, 290, 291, 7, 8, 2, 2, 291, 296, 5, 24, 13, 5, 292, 293, 12, 4, 2, 2, 293, 294, 7, 62, 2, 2, 294, 296, 5, 24, 13, 4, 295, 289, 3, 2, 2, 2, 295, 292, 3, 2, 2, 2, 296, 299, 3, 2, 2, 2, 297, 295, 3, 2, 2, 2, 297, 298, 3, 2, 2, 2, 298, 25, 3, 2, 2, 2, 299, 297, 3, 2, 2, 2, 32, 29, 38, 43, 49, 56, 68, 70, 77, 89, 94, 110, 122, 126, 130, 133, 139, 146, 155, 164, 179, 235, 239, 244, 246, 260, 264, 268, 287, 295, 297] \ No newline at end of file diff --git a/src/antlr/Pyxell.tokens b/src/antlr/Pyxell.tokens index 0d26b5ca..41299c04 100644 --- a/src/antlr/Pyxell.tokens +++ b/src/antlr/Pyxell.tokens @@ -95,27 +95,27 @@ ERR=67 'func'=28 '('=29 ')'=30 -'do'=31 -'{'=32 -'}'=33 -'def'=34 -'['=35 -']'=36 -'.'=37 -'~'=38 -'..'=39 -'...'=40 -'=='=41 -'!='=42 -'<'=43 -'<='=44 -'>'=45 -'>='=46 -'not'=47 -'and'=48 -'or'=49 -'?'=50 -':'=51 +':'=31 +'do'=32 +'{'=33 +'}'=34 +'def'=35 +'['=36 +']'=37 +'.'=38 +'~'=39 +'..'=40 +'...'=41 +'=='=42 +'!='=43 +'<'=44 +'<='=45 +'>'=46 +'>='=47 +'not'=48 +'and'=49 +'or'=50 +'?'=51 'true'=52 'false'=53 'Void'=54 diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp index 39cee566..c40eaaa5 100644 --- a/src/antlr/PyxellLexer.interp +++ b/src/antlr/PyxellLexer.interp @@ -30,6 +30,7 @@ null 'func' '(' ')' +':' 'do' '{' '}' @@ -50,7 +51,6 @@ null 'and' 'or' '?' -':' 'true' 'false' 'Void' @@ -218,4 +218,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 69, 429, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 62, 6, 62, 357, 10, 62, 13, 62, 14, 62, 358, 3, 63, 6, 63, 362, 10, 63, 13, 63, 14, 63, 363, 3, 63, 3, 63, 6, 63, 368, 10, 63, 13, 63, 14, 63, 369, 3, 63, 3, 63, 5, 63, 374, 10, 63, 3, 63, 6, 63, 377, 10, 63, 13, 63, 14, 63, 378, 5, 63, 381, 10, 63, 3, 64, 3, 64, 3, 64, 3, 64, 7, 64, 387, 10, 64, 12, 64, 14, 64, 390, 11, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 7, 65, 398, 10, 65, 12, 65, 14, 65, 401, 11, 65, 3, 65, 3, 65, 3, 66, 3, 66, 7, 66, 407, 10, 66, 12, 66, 14, 66, 410, 11, 66, 3, 67, 3, 67, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 5, 69, 419, 10, 69, 3, 70, 6, 70, 422, 10, 70, 13, 70, 14, 70, 423, 3, 70, 3, 70, 3, 71, 3, 71, 2, 2, 72, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 2, 135, 2, 137, 2, 139, 68, 141, 69, 3, 2, 10, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 439, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 3, 143, 3, 2, 2, 2, 5, 145, 3, 2, 2, 2, 7, 150, 3, 2, 2, 2, 9, 156, 3, 2, 2, 2, 11, 158, 3, 2, 2, 2, 13, 160, 3, 2, 2, 2, 15, 162, 3, 2, 2, 2, 17, 164, 3, 2, 2, 2, 19, 166, 3, 2, 2, 2, 21, 168, 3, 2, 2, 2, 23, 170, 3, 2, 2, 2, 25, 173, 3, 2, 2, 2, 27, 176, 3, 2, 2, 2, 29, 178, 3, 2, 2, 2, 31, 180, 3, 2, 2, 2, 33, 182, 3, 2, 2, 2, 35, 188, 3, 2, 2, 2, 37, 197, 3, 2, 2, 2, 39, 204, 3, 2, 2, 2, 41, 206, 3, 2, 2, 2, 43, 209, 3, 2, 2, 2, 45, 214, 3, 2, 2, 2, 47, 219, 3, 2, 2, 2, 49, 225, 3, 2, 2, 2, 51, 231, 3, 2, 2, 2, 53, 235, 3, 2, 2, 2, 55, 238, 3, 2, 2, 2, 57, 243, 3, 2, 2, 2, 59, 248, 3, 2, 2, 2, 61, 250, 3, 2, 2, 2, 63, 252, 3, 2, 2, 2, 65, 255, 3, 2, 2, 2, 67, 257, 3, 2, 2, 2, 69, 259, 3, 2, 2, 2, 71, 263, 3, 2, 2, 2, 73, 265, 3, 2, 2, 2, 75, 267, 3, 2, 2, 2, 77, 269, 3, 2, 2, 2, 79, 271, 3, 2, 2, 2, 81, 274, 3, 2, 2, 2, 83, 278, 3, 2, 2, 2, 85, 281, 3, 2, 2, 2, 87, 284, 3, 2, 2, 2, 89, 286, 3, 2, 2, 2, 91, 289, 3, 2, 2, 2, 93, 291, 3, 2, 2, 2, 95, 294, 3, 2, 2, 2, 97, 298, 3, 2, 2, 2, 99, 302, 3, 2, 2, 2, 101, 305, 3, 2, 2, 2, 103, 307, 3, 2, 2, 2, 105, 309, 3, 2, 2, 2, 107, 314, 3, 2, 2, 2, 109, 320, 3, 2, 2, 2, 111, 325, 3, 2, 2, 2, 113, 329, 3, 2, 2, 2, 115, 335, 3, 2, 2, 2, 117, 340, 3, 2, 2, 2, 119, 345, 3, 2, 2, 2, 121, 352, 3, 2, 2, 2, 123, 356, 3, 2, 2, 2, 125, 361, 3, 2, 2, 2, 127, 382, 3, 2, 2, 2, 129, 393, 3, 2, 2, 2, 131, 404, 3, 2, 2, 2, 133, 411, 3, 2, 2, 2, 135, 413, 3, 2, 2, 2, 137, 418, 3, 2, 2, 2, 139, 421, 3, 2, 2, 2, 141, 427, 3, 2, 2, 2, 143, 144, 7, 61, 2, 2, 144, 4, 3, 2, 2, 2, 145, 146, 7, 117, 2, 2, 146, 147, 7, 109, 2, 2, 147, 148, 7, 107, 2, 2, 148, 149, 7, 114, 2, 2, 149, 6, 3, 2, 2, 2, 150, 151, 7, 114, 2, 2, 151, 152, 7, 116, 2, 2, 152, 153, 7, 107, 2, 2, 153, 154, 7, 112, 2, 2, 154, 155, 7, 118, 2, 2, 155, 8, 3, 2, 2, 2, 156, 157, 7, 63, 2, 2, 157, 10, 3, 2, 2, 2, 158, 159, 7, 96, 2, 2, 159, 12, 3, 2, 2, 2, 160, 161, 7, 44, 2, 2, 161, 14, 3, 2, 2, 2, 162, 163, 7, 49, 2, 2, 163, 16, 3, 2, 2, 2, 164, 165, 7, 39, 2, 2, 165, 18, 3, 2, 2, 2, 166, 167, 7, 45, 2, 2, 167, 20, 3, 2, 2, 2, 168, 169, 7, 47, 2, 2, 169, 22, 3, 2, 2, 2, 170, 171, 7, 62, 2, 2, 171, 172, 7, 62, 2, 2, 172, 24, 3, 2, 2, 2, 173, 174, 7, 64, 2, 2, 174, 175, 7, 64, 2, 2, 175, 26, 3, 2, 2, 2, 176, 177, 7, 40, 2, 2, 177, 28, 3, 2, 2, 2, 178, 179, 7, 38, 2, 2, 179, 30, 3, 2, 2, 2, 180, 181, 7, 126, 2, 2, 181, 32, 3, 2, 2, 2, 182, 183, 7, 100, 2, 2, 183, 184, 7, 116, 2, 2, 184, 185, 7, 103, 2, 2, 185, 186, 7, 99, 2, 2, 186, 187, 7, 109, 2, 2, 187, 34, 3, 2, 2, 2, 188, 189, 7, 101, 2, 2, 189, 190, 7, 113, 2, 2, 190, 191, 7, 112, 2, 2, 191, 192, 7, 118, 2, 2, 192, 193, 7, 107, 2, 2, 193, 194, 7, 112, 2, 2, 194, 195, 7, 119, 2, 2, 195, 196, 7, 103, 2, 2, 196, 36, 3, 2, 2, 2, 197, 198, 7, 116, 2, 2, 198, 199, 7, 103, 2, 2, 199, 200, 7, 118, 2, 2, 200, 201, 7, 119, 2, 2, 201, 202, 7, 116, 2, 2, 202, 203, 7, 112, 2, 2, 203, 38, 3, 2, 2, 2, 204, 205, 7, 46, 2, 2, 205, 40, 3, 2, 2, 2, 206, 207, 7, 107, 2, 2, 207, 208, 7, 104, 2, 2, 208, 42, 3, 2, 2, 2, 209, 210, 7, 103, 2, 2, 210, 211, 7, 110, 2, 2, 211, 212, 7, 107, 2, 2, 212, 213, 7, 104, 2, 2, 213, 44, 3, 2, 2, 2, 214, 215, 7, 103, 2, 2, 215, 216, 7, 110, 2, 2, 216, 217, 7, 117, 2, 2, 217, 218, 7, 103, 2, 2, 218, 46, 3, 2, 2, 2, 219, 220, 7, 121, 2, 2, 220, 221, 7, 106, 2, 2, 221, 222, 7, 107, 2, 2, 222, 223, 7, 110, 2, 2, 223, 224, 7, 103, 2, 2, 224, 48, 3, 2, 2, 2, 225, 226, 7, 119, 2, 2, 226, 227, 7, 112, 2, 2, 227, 228, 7, 118, 2, 2, 228, 229, 7, 107, 2, 2, 229, 230, 7, 110, 2, 2, 230, 50, 3, 2, 2, 2, 231, 232, 7, 104, 2, 2, 232, 233, 7, 113, 2, 2, 233, 234, 7, 116, 2, 2, 234, 52, 3, 2, 2, 2, 235, 236, 7, 107, 2, 2, 236, 237, 7, 112, 2, 2, 237, 54, 3, 2, 2, 2, 238, 239, 7, 117, 2, 2, 239, 240, 7, 118, 2, 2, 240, 241, 7, 103, 2, 2, 241, 242, 7, 114, 2, 2, 242, 56, 3, 2, 2, 2, 243, 244, 7, 104, 2, 2, 244, 245, 7, 119, 2, 2, 245, 246, 7, 112, 2, 2, 246, 247, 7, 101, 2, 2, 247, 58, 3, 2, 2, 2, 248, 249, 7, 42, 2, 2, 249, 60, 3, 2, 2, 2, 250, 251, 7, 43, 2, 2, 251, 62, 3, 2, 2, 2, 252, 253, 7, 102, 2, 2, 253, 254, 7, 113, 2, 2, 254, 64, 3, 2, 2, 2, 255, 256, 7, 125, 2, 2, 256, 66, 3, 2, 2, 2, 257, 258, 7, 127, 2, 2, 258, 68, 3, 2, 2, 2, 259, 260, 7, 102, 2, 2, 260, 261, 7, 103, 2, 2, 261, 262, 7, 104, 2, 2, 262, 70, 3, 2, 2, 2, 263, 264, 7, 93, 2, 2, 264, 72, 3, 2, 2, 2, 265, 266, 7, 95, 2, 2, 266, 74, 3, 2, 2, 2, 267, 268, 7, 48, 2, 2, 268, 76, 3, 2, 2, 2, 269, 270, 7, 128, 2, 2, 270, 78, 3, 2, 2, 2, 271, 272, 7, 48, 2, 2, 272, 273, 7, 48, 2, 2, 273, 80, 3, 2, 2, 2, 274, 275, 7, 48, 2, 2, 275, 276, 7, 48, 2, 2, 276, 277, 7, 48, 2, 2, 277, 82, 3, 2, 2, 2, 278, 279, 7, 63, 2, 2, 279, 280, 7, 63, 2, 2, 280, 84, 3, 2, 2, 2, 281, 282, 7, 35, 2, 2, 282, 283, 7, 63, 2, 2, 283, 86, 3, 2, 2, 2, 284, 285, 7, 62, 2, 2, 285, 88, 3, 2, 2, 2, 286, 287, 7, 62, 2, 2, 287, 288, 7, 63, 2, 2, 288, 90, 3, 2, 2, 2, 289, 290, 7, 64, 2, 2, 290, 92, 3, 2, 2, 2, 291, 292, 7, 64, 2, 2, 292, 293, 7, 63, 2, 2, 293, 94, 3, 2, 2, 2, 294, 295, 7, 112, 2, 2, 295, 296, 7, 113, 2, 2, 296, 297, 7, 118, 2, 2, 297, 96, 3, 2, 2, 2, 298, 299, 7, 99, 2, 2, 299, 300, 7, 112, 2, 2, 300, 301, 7, 102, 2, 2, 301, 98, 3, 2, 2, 2, 302, 303, 7, 113, 2, 2, 303, 304, 7, 116, 2, 2, 304, 100, 3, 2, 2, 2, 305, 306, 7, 65, 2, 2, 306, 102, 3, 2, 2, 2, 307, 308, 7, 60, 2, 2, 308, 104, 3, 2, 2, 2, 309, 310, 7, 118, 2, 2, 310, 311, 7, 116, 2, 2, 311, 312, 7, 119, 2, 2, 312, 313, 7, 103, 2, 2, 313, 106, 3, 2, 2, 2, 314, 315, 7, 104, 2, 2, 315, 316, 7, 99, 2, 2, 316, 317, 7, 110, 2, 2, 317, 318, 7, 117, 2, 2, 318, 319, 7, 103, 2, 2, 319, 108, 3, 2, 2, 2, 320, 321, 7, 88, 2, 2, 321, 322, 7, 113, 2, 2, 322, 323, 7, 107, 2, 2, 323, 324, 7, 102, 2, 2, 324, 110, 3, 2, 2, 2, 325, 326, 7, 75, 2, 2, 326, 327, 7, 112, 2, 2, 327, 328, 7, 118, 2, 2, 328, 112, 3, 2, 2, 2, 329, 330, 7, 72, 2, 2, 330, 331, 7, 110, 2, 2, 331, 332, 7, 113, 2, 2, 332, 333, 7, 99, 2, 2, 333, 334, 7, 118, 2, 2, 334, 114, 3, 2, 2, 2, 335, 336, 7, 68, 2, 2, 336, 337, 7, 113, 2, 2, 337, 338, 7, 113, 2, 2, 338, 339, 7, 110, 2, 2, 339, 116, 3, 2, 2, 2, 340, 341, 7, 69, 2, 2, 341, 342, 7, 106, 2, 2, 342, 343, 7, 99, 2, 2, 343, 344, 7, 116, 2, 2, 344, 118, 3, 2, 2, 2, 345, 346, 7, 85, 2, 2, 346, 347, 7, 118, 2, 2, 347, 348, 7, 116, 2, 2, 348, 349, 7, 107, 2, 2, 349, 350, 7, 112, 2, 2, 350, 351, 7, 105, 2, 2, 351, 120, 3, 2, 2, 2, 352, 353, 7, 47, 2, 2, 353, 354, 7, 64, 2, 2, 354, 122, 3, 2, 2, 2, 355, 357, 5, 133, 67, 2, 356, 355, 3, 2, 2, 2, 357, 358, 3, 2, 2, 2, 358, 356, 3, 2, 2, 2, 358, 359, 3, 2, 2, 2, 359, 124, 3, 2, 2, 2, 360, 362, 5, 133, 67, 2, 361, 360, 3, 2, 2, 2, 362, 363, 3, 2, 2, 2, 363, 361, 3, 2, 2, 2, 363, 364, 3, 2, 2, 2, 364, 365, 3, 2, 2, 2, 365, 367, 7, 48, 2, 2, 366, 368, 5, 133, 67, 2, 367, 366, 3, 2, 2, 2, 368, 369, 3, 2, 2, 2, 369, 367, 3, 2, 2, 2, 369, 370, 3, 2, 2, 2, 370, 380, 3, 2, 2, 2, 371, 373, 7, 103, 2, 2, 372, 374, 7, 47, 2, 2, 373, 372, 3, 2, 2, 2, 373, 374, 3, 2, 2, 2, 374, 376, 3, 2, 2, 2, 375, 377, 5, 133, 67, 2, 376, 375, 3, 2, 2, 2, 377, 378, 3, 2, 2, 2, 378, 376, 3, 2, 2, 2, 378, 379, 3, 2, 2, 2, 379, 381, 3, 2, 2, 2, 380, 371, 3, 2, 2, 2, 380, 381, 3, 2, 2, 2, 381, 126, 3, 2, 2, 2, 382, 388, 7, 41, 2, 2, 383, 387, 10, 2, 2, 2, 384, 385, 7, 94, 2, 2, 385, 387, 9, 3, 2, 2, 386, 383, 3, 2, 2, 2, 386, 384, 3, 2, 2, 2, 387, 390, 3, 2, 2, 2, 388, 386, 3, 2, 2, 2, 388, 389, 3, 2, 2, 2, 389, 391, 3, 2, 2, 2, 390, 388, 3, 2, 2, 2, 391, 392, 7, 41, 2, 2, 392, 128, 3, 2, 2, 2, 393, 399, 7, 36, 2, 2, 394, 398, 10, 4, 2, 2, 395, 396, 7, 94, 2, 2, 396, 398, 9, 5, 2, 2, 397, 394, 3, 2, 2, 2, 397, 395, 3, 2, 2, 2, 398, 401, 3, 2, 2, 2, 399, 397, 3, 2, 2, 2, 399, 400, 3, 2, 2, 2, 400, 402, 3, 2, 2, 2, 401, 399, 3, 2, 2, 2, 402, 403, 7, 36, 2, 2, 403, 130, 3, 2, 2, 2, 404, 408, 5, 135, 68, 2, 405, 407, 5, 137, 69, 2, 406, 405, 3, 2, 2, 2, 407, 410, 3, 2, 2, 2, 408, 406, 3, 2, 2, 2, 408, 409, 3, 2, 2, 2, 409, 132, 3, 2, 2, 2, 410, 408, 3, 2, 2, 2, 411, 412, 9, 6, 2, 2, 412, 134, 3, 2, 2, 2, 413, 414, 9, 7, 2, 2, 414, 136, 3, 2, 2, 2, 415, 419, 5, 135, 68, 2, 416, 419, 5, 133, 67, 2, 417, 419, 9, 8, 2, 2, 418, 415, 3, 2, 2, 2, 418, 416, 3, 2, 2, 2, 418, 417, 3, 2, 2, 2, 419, 138, 3, 2, 2, 2, 420, 422, 9, 9, 2, 2, 421, 420, 3, 2, 2, 2, 422, 423, 3, 2, 2, 2, 423, 421, 3, 2, 2, 2, 423, 424, 3, 2, 2, 2, 424, 425, 3, 2, 2, 2, 425, 426, 8, 70, 2, 2, 426, 140, 3, 2, 2, 2, 427, 428, 11, 2, 2, 2, 428, 142, 3, 2, 2, 2, 16, 2, 358, 363, 369, 373, 378, 380, 386, 388, 397, 399, 408, 418, 423, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 69, 429, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 62, 6, 62, 357, 10, 62, 13, 62, 14, 62, 358, 3, 63, 6, 63, 362, 10, 63, 13, 63, 14, 63, 363, 3, 63, 3, 63, 6, 63, 368, 10, 63, 13, 63, 14, 63, 369, 3, 63, 3, 63, 5, 63, 374, 10, 63, 3, 63, 6, 63, 377, 10, 63, 13, 63, 14, 63, 378, 5, 63, 381, 10, 63, 3, 64, 3, 64, 3, 64, 3, 64, 7, 64, 387, 10, 64, 12, 64, 14, 64, 390, 11, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 7, 65, 398, 10, 65, 12, 65, 14, 65, 401, 11, 65, 3, 65, 3, 65, 3, 66, 3, 66, 7, 66, 407, 10, 66, 12, 66, 14, 66, 410, 11, 66, 3, 67, 3, 67, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 5, 69, 419, 10, 69, 3, 70, 6, 70, 422, 10, 70, 13, 70, 14, 70, 423, 3, 70, 3, 70, 3, 71, 3, 71, 2, 2, 72, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 2, 135, 2, 137, 2, 139, 68, 141, 69, 3, 2, 10, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 439, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 3, 143, 3, 2, 2, 2, 5, 145, 3, 2, 2, 2, 7, 150, 3, 2, 2, 2, 9, 156, 3, 2, 2, 2, 11, 158, 3, 2, 2, 2, 13, 160, 3, 2, 2, 2, 15, 162, 3, 2, 2, 2, 17, 164, 3, 2, 2, 2, 19, 166, 3, 2, 2, 2, 21, 168, 3, 2, 2, 2, 23, 170, 3, 2, 2, 2, 25, 173, 3, 2, 2, 2, 27, 176, 3, 2, 2, 2, 29, 178, 3, 2, 2, 2, 31, 180, 3, 2, 2, 2, 33, 182, 3, 2, 2, 2, 35, 188, 3, 2, 2, 2, 37, 197, 3, 2, 2, 2, 39, 204, 3, 2, 2, 2, 41, 206, 3, 2, 2, 2, 43, 209, 3, 2, 2, 2, 45, 214, 3, 2, 2, 2, 47, 219, 3, 2, 2, 2, 49, 225, 3, 2, 2, 2, 51, 231, 3, 2, 2, 2, 53, 235, 3, 2, 2, 2, 55, 238, 3, 2, 2, 2, 57, 243, 3, 2, 2, 2, 59, 248, 3, 2, 2, 2, 61, 250, 3, 2, 2, 2, 63, 252, 3, 2, 2, 2, 65, 254, 3, 2, 2, 2, 67, 257, 3, 2, 2, 2, 69, 259, 3, 2, 2, 2, 71, 261, 3, 2, 2, 2, 73, 265, 3, 2, 2, 2, 75, 267, 3, 2, 2, 2, 77, 269, 3, 2, 2, 2, 79, 271, 3, 2, 2, 2, 81, 273, 3, 2, 2, 2, 83, 276, 3, 2, 2, 2, 85, 280, 3, 2, 2, 2, 87, 283, 3, 2, 2, 2, 89, 286, 3, 2, 2, 2, 91, 288, 3, 2, 2, 2, 93, 291, 3, 2, 2, 2, 95, 293, 3, 2, 2, 2, 97, 296, 3, 2, 2, 2, 99, 300, 3, 2, 2, 2, 101, 304, 3, 2, 2, 2, 103, 307, 3, 2, 2, 2, 105, 309, 3, 2, 2, 2, 107, 314, 3, 2, 2, 2, 109, 320, 3, 2, 2, 2, 111, 325, 3, 2, 2, 2, 113, 329, 3, 2, 2, 2, 115, 335, 3, 2, 2, 2, 117, 340, 3, 2, 2, 2, 119, 345, 3, 2, 2, 2, 121, 352, 3, 2, 2, 2, 123, 356, 3, 2, 2, 2, 125, 361, 3, 2, 2, 2, 127, 382, 3, 2, 2, 2, 129, 393, 3, 2, 2, 2, 131, 404, 3, 2, 2, 2, 133, 411, 3, 2, 2, 2, 135, 413, 3, 2, 2, 2, 137, 418, 3, 2, 2, 2, 139, 421, 3, 2, 2, 2, 141, 427, 3, 2, 2, 2, 143, 144, 7, 61, 2, 2, 144, 4, 3, 2, 2, 2, 145, 146, 7, 117, 2, 2, 146, 147, 7, 109, 2, 2, 147, 148, 7, 107, 2, 2, 148, 149, 7, 114, 2, 2, 149, 6, 3, 2, 2, 2, 150, 151, 7, 114, 2, 2, 151, 152, 7, 116, 2, 2, 152, 153, 7, 107, 2, 2, 153, 154, 7, 112, 2, 2, 154, 155, 7, 118, 2, 2, 155, 8, 3, 2, 2, 2, 156, 157, 7, 63, 2, 2, 157, 10, 3, 2, 2, 2, 158, 159, 7, 96, 2, 2, 159, 12, 3, 2, 2, 2, 160, 161, 7, 44, 2, 2, 161, 14, 3, 2, 2, 2, 162, 163, 7, 49, 2, 2, 163, 16, 3, 2, 2, 2, 164, 165, 7, 39, 2, 2, 165, 18, 3, 2, 2, 2, 166, 167, 7, 45, 2, 2, 167, 20, 3, 2, 2, 2, 168, 169, 7, 47, 2, 2, 169, 22, 3, 2, 2, 2, 170, 171, 7, 62, 2, 2, 171, 172, 7, 62, 2, 2, 172, 24, 3, 2, 2, 2, 173, 174, 7, 64, 2, 2, 174, 175, 7, 64, 2, 2, 175, 26, 3, 2, 2, 2, 176, 177, 7, 40, 2, 2, 177, 28, 3, 2, 2, 2, 178, 179, 7, 38, 2, 2, 179, 30, 3, 2, 2, 2, 180, 181, 7, 126, 2, 2, 181, 32, 3, 2, 2, 2, 182, 183, 7, 100, 2, 2, 183, 184, 7, 116, 2, 2, 184, 185, 7, 103, 2, 2, 185, 186, 7, 99, 2, 2, 186, 187, 7, 109, 2, 2, 187, 34, 3, 2, 2, 2, 188, 189, 7, 101, 2, 2, 189, 190, 7, 113, 2, 2, 190, 191, 7, 112, 2, 2, 191, 192, 7, 118, 2, 2, 192, 193, 7, 107, 2, 2, 193, 194, 7, 112, 2, 2, 194, 195, 7, 119, 2, 2, 195, 196, 7, 103, 2, 2, 196, 36, 3, 2, 2, 2, 197, 198, 7, 116, 2, 2, 198, 199, 7, 103, 2, 2, 199, 200, 7, 118, 2, 2, 200, 201, 7, 119, 2, 2, 201, 202, 7, 116, 2, 2, 202, 203, 7, 112, 2, 2, 203, 38, 3, 2, 2, 2, 204, 205, 7, 46, 2, 2, 205, 40, 3, 2, 2, 2, 206, 207, 7, 107, 2, 2, 207, 208, 7, 104, 2, 2, 208, 42, 3, 2, 2, 2, 209, 210, 7, 103, 2, 2, 210, 211, 7, 110, 2, 2, 211, 212, 7, 107, 2, 2, 212, 213, 7, 104, 2, 2, 213, 44, 3, 2, 2, 2, 214, 215, 7, 103, 2, 2, 215, 216, 7, 110, 2, 2, 216, 217, 7, 117, 2, 2, 217, 218, 7, 103, 2, 2, 218, 46, 3, 2, 2, 2, 219, 220, 7, 121, 2, 2, 220, 221, 7, 106, 2, 2, 221, 222, 7, 107, 2, 2, 222, 223, 7, 110, 2, 2, 223, 224, 7, 103, 2, 2, 224, 48, 3, 2, 2, 2, 225, 226, 7, 119, 2, 2, 226, 227, 7, 112, 2, 2, 227, 228, 7, 118, 2, 2, 228, 229, 7, 107, 2, 2, 229, 230, 7, 110, 2, 2, 230, 50, 3, 2, 2, 2, 231, 232, 7, 104, 2, 2, 232, 233, 7, 113, 2, 2, 233, 234, 7, 116, 2, 2, 234, 52, 3, 2, 2, 2, 235, 236, 7, 107, 2, 2, 236, 237, 7, 112, 2, 2, 237, 54, 3, 2, 2, 2, 238, 239, 7, 117, 2, 2, 239, 240, 7, 118, 2, 2, 240, 241, 7, 103, 2, 2, 241, 242, 7, 114, 2, 2, 242, 56, 3, 2, 2, 2, 243, 244, 7, 104, 2, 2, 244, 245, 7, 119, 2, 2, 245, 246, 7, 112, 2, 2, 246, 247, 7, 101, 2, 2, 247, 58, 3, 2, 2, 2, 248, 249, 7, 42, 2, 2, 249, 60, 3, 2, 2, 2, 250, 251, 7, 43, 2, 2, 251, 62, 3, 2, 2, 2, 252, 253, 7, 60, 2, 2, 253, 64, 3, 2, 2, 2, 254, 255, 7, 102, 2, 2, 255, 256, 7, 113, 2, 2, 256, 66, 3, 2, 2, 2, 257, 258, 7, 125, 2, 2, 258, 68, 3, 2, 2, 2, 259, 260, 7, 127, 2, 2, 260, 70, 3, 2, 2, 2, 261, 262, 7, 102, 2, 2, 262, 263, 7, 103, 2, 2, 263, 264, 7, 104, 2, 2, 264, 72, 3, 2, 2, 2, 265, 266, 7, 93, 2, 2, 266, 74, 3, 2, 2, 2, 267, 268, 7, 95, 2, 2, 268, 76, 3, 2, 2, 2, 269, 270, 7, 48, 2, 2, 270, 78, 3, 2, 2, 2, 271, 272, 7, 128, 2, 2, 272, 80, 3, 2, 2, 2, 273, 274, 7, 48, 2, 2, 274, 275, 7, 48, 2, 2, 275, 82, 3, 2, 2, 2, 276, 277, 7, 48, 2, 2, 277, 278, 7, 48, 2, 2, 278, 279, 7, 48, 2, 2, 279, 84, 3, 2, 2, 2, 280, 281, 7, 63, 2, 2, 281, 282, 7, 63, 2, 2, 282, 86, 3, 2, 2, 2, 283, 284, 7, 35, 2, 2, 284, 285, 7, 63, 2, 2, 285, 88, 3, 2, 2, 2, 286, 287, 7, 62, 2, 2, 287, 90, 3, 2, 2, 2, 288, 289, 7, 62, 2, 2, 289, 290, 7, 63, 2, 2, 290, 92, 3, 2, 2, 2, 291, 292, 7, 64, 2, 2, 292, 94, 3, 2, 2, 2, 293, 294, 7, 64, 2, 2, 294, 295, 7, 63, 2, 2, 295, 96, 3, 2, 2, 2, 296, 297, 7, 112, 2, 2, 297, 298, 7, 113, 2, 2, 298, 299, 7, 118, 2, 2, 299, 98, 3, 2, 2, 2, 300, 301, 7, 99, 2, 2, 301, 302, 7, 112, 2, 2, 302, 303, 7, 102, 2, 2, 303, 100, 3, 2, 2, 2, 304, 305, 7, 113, 2, 2, 305, 306, 7, 116, 2, 2, 306, 102, 3, 2, 2, 2, 307, 308, 7, 65, 2, 2, 308, 104, 3, 2, 2, 2, 309, 310, 7, 118, 2, 2, 310, 311, 7, 116, 2, 2, 311, 312, 7, 119, 2, 2, 312, 313, 7, 103, 2, 2, 313, 106, 3, 2, 2, 2, 314, 315, 7, 104, 2, 2, 315, 316, 7, 99, 2, 2, 316, 317, 7, 110, 2, 2, 317, 318, 7, 117, 2, 2, 318, 319, 7, 103, 2, 2, 319, 108, 3, 2, 2, 2, 320, 321, 7, 88, 2, 2, 321, 322, 7, 113, 2, 2, 322, 323, 7, 107, 2, 2, 323, 324, 7, 102, 2, 2, 324, 110, 3, 2, 2, 2, 325, 326, 7, 75, 2, 2, 326, 327, 7, 112, 2, 2, 327, 328, 7, 118, 2, 2, 328, 112, 3, 2, 2, 2, 329, 330, 7, 72, 2, 2, 330, 331, 7, 110, 2, 2, 331, 332, 7, 113, 2, 2, 332, 333, 7, 99, 2, 2, 333, 334, 7, 118, 2, 2, 334, 114, 3, 2, 2, 2, 335, 336, 7, 68, 2, 2, 336, 337, 7, 113, 2, 2, 337, 338, 7, 113, 2, 2, 338, 339, 7, 110, 2, 2, 339, 116, 3, 2, 2, 2, 340, 341, 7, 69, 2, 2, 341, 342, 7, 106, 2, 2, 342, 343, 7, 99, 2, 2, 343, 344, 7, 116, 2, 2, 344, 118, 3, 2, 2, 2, 345, 346, 7, 85, 2, 2, 346, 347, 7, 118, 2, 2, 347, 348, 7, 116, 2, 2, 348, 349, 7, 107, 2, 2, 349, 350, 7, 112, 2, 2, 350, 351, 7, 105, 2, 2, 351, 120, 3, 2, 2, 2, 352, 353, 7, 47, 2, 2, 353, 354, 7, 64, 2, 2, 354, 122, 3, 2, 2, 2, 355, 357, 5, 133, 67, 2, 356, 355, 3, 2, 2, 2, 357, 358, 3, 2, 2, 2, 358, 356, 3, 2, 2, 2, 358, 359, 3, 2, 2, 2, 359, 124, 3, 2, 2, 2, 360, 362, 5, 133, 67, 2, 361, 360, 3, 2, 2, 2, 362, 363, 3, 2, 2, 2, 363, 361, 3, 2, 2, 2, 363, 364, 3, 2, 2, 2, 364, 365, 3, 2, 2, 2, 365, 367, 7, 48, 2, 2, 366, 368, 5, 133, 67, 2, 367, 366, 3, 2, 2, 2, 368, 369, 3, 2, 2, 2, 369, 367, 3, 2, 2, 2, 369, 370, 3, 2, 2, 2, 370, 380, 3, 2, 2, 2, 371, 373, 7, 103, 2, 2, 372, 374, 7, 47, 2, 2, 373, 372, 3, 2, 2, 2, 373, 374, 3, 2, 2, 2, 374, 376, 3, 2, 2, 2, 375, 377, 5, 133, 67, 2, 376, 375, 3, 2, 2, 2, 377, 378, 3, 2, 2, 2, 378, 376, 3, 2, 2, 2, 378, 379, 3, 2, 2, 2, 379, 381, 3, 2, 2, 2, 380, 371, 3, 2, 2, 2, 380, 381, 3, 2, 2, 2, 381, 126, 3, 2, 2, 2, 382, 388, 7, 41, 2, 2, 383, 387, 10, 2, 2, 2, 384, 385, 7, 94, 2, 2, 385, 387, 9, 3, 2, 2, 386, 383, 3, 2, 2, 2, 386, 384, 3, 2, 2, 2, 387, 390, 3, 2, 2, 2, 388, 386, 3, 2, 2, 2, 388, 389, 3, 2, 2, 2, 389, 391, 3, 2, 2, 2, 390, 388, 3, 2, 2, 2, 391, 392, 7, 41, 2, 2, 392, 128, 3, 2, 2, 2, 393, 399, 7, 36, 2, 2, 394, 398, 10, 4, 2, 2, 395, 396, 7, 94, 2, 2, 396, 398, 9, 5, 2, 2, 397, 394, 3, 2, 2, 2, 397, 395, 3, 2, 2, 2, 398, 401, 3, 2, 2, 2, 399, 397, 3, 2, 2, 2, 399, 400, 3, 2, 2, 2, 400, 402, 3, 2, 2, 2, 401, 399, 3, 2, 2, 2, 402, 403, 7, 36, 2, 2, 403, 130, 3, 2, 2, 2, 404, 408, 5, 135, 68, 2, 405, 407, 5, 137, 69, 2, 406, 405, 3, 2, 2, 2, 407, 410, 3, 2, 2, 2, 408, 406, 3, 2, 2, 2, 408, 409, 3, 2, 2, 2, 409, 132, 3, 2, 2, 2, 410, 408, 3, 2, 2, 2, 411, 412, 9, 6, 2, 2, 412, 134, 3, 2, 2, 2, 413, 414, 9, 7, 2, 2, 414, 136, 3, 2, 2, 2, 415, 419, 5, 135, 68, 2, 416, 419, 5, 133, 67, 2, 417, 419, 9, 8, 2, 2, 418, 415, 3, 2, 2, 2, 418, 416, 3, 2, 2, 2, 418, 417, 3, 2, 2, 2, 419, 138, 3, 2, 2, 2, 420, 422, 9, 9, 2, 2, 421, 420, 3, 2, 2, 2, 422, 423, 3, 2, 2, 2, 423, 421, 3, 2, 2, 2, 423, 424, 3, 2, 2, 2, 424, 425, 3, 2, 2, 2, 425, 426, 8, 70, 2, 2, 426, 140, 3, 2, 2, 2, 427, 428, 11, 2, 2, 2, 428, 142, 3, 2, 2, 2, 16, 2, 358, 363, 369, 373, 378, 380, 386, 388, 397, 399, 408, 418, 423, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py index 5f5a9d15..0c49bf1c 100644 --- a/src/antlr/PyxellLexer.py +++ b/src/antlr/PyxellLexer.py @@ -29,167 +29,167 @@ def serializedATN(): buf.write("\3\30\3\30\3\30\3\30\3\30\3\31\3\31\3\31\3\31\3\31\3\31") buf.write("\3\32\3\32\3\32\3\32\3\33\3\33\3\33\3\34\3\34\3\34\3\34") buf.write("\3\34\3\35\3\35\3\35\3\35\3\35\3\36\3\36\3\37\3\37\3 ") - buf.write("\3 \3 \3!\3!\3\"\3\"\3#\3#\3#\3#\3$\3$\3%\3%\3&\3&\3\'") - buf.write("\3\'\3(\3(\3(\3)\3)\3)\3)\3*\3*\3*\3+\3+\3+\3,\3,\3-\3") - buf.write("-\3-\3.\3.\3/\3/\3/\3\60\3\60\3\60\3\60\3\61\3\61\3\61") - buf.write("\3\61\3\62\3\62\3\62\3\63\3\63\3\64\3\64\3\65\3\65\3\65") - buf.write("\3\65\3\65\3\66\3\66\3\66\3\66\3\66\3\66\3\67\3\67\3\67") - buf.write("\3\67\3\67\38\38\38\38\39\39\39\39\39\39\3:\3:\3:\3:\3") - buf.write(":\3;\3;\3;\3;\3;\3<\3<\3<\3<\3<\3<\3<\3=\3=\3=\3>\6>\u0165") - buf.write("\n>\r>\16>\u0166\3?\6?\u016a\n?\r?\16?\u016b\3?\3?\6?") - buf.write("\u0170\n?\r?\16?\u0171\3?\3?\5?\u0176\n?\3?\6?\u0179\n") - buf.write("?\r?\16?\u017a\5?\u017d\n?\3@\3@\3@\3@\7@\u0183\n@\f@") - buf.write("\16@\u0186\13@\3@\3@\3A\3A\3A\3A\7A\u018e\nA\fA\16A\u0191") - buf.write("\13A\3A\3A\3B\3B\7B\u0197\nB\fB\16B\u019a\13B\3C\3C\3") - buf.write("D\3D\3E\3E\3E\5E\u01a3\nE\3F\6F\u01a6\nF\rF\16F\u01a7") - buf.write("\3F\3F\3G\3G\2\2H\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23") - buf.write("\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25") - buf.write(")\26+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A") - buf.write("\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65") - buf.write("i\66k\67m8o9q:s;u{?}@\177A\u0081B\u0083C\u0085\2") - buf.write("\u0087\2\u0089\2\u008bD\u008dE\3\2\n\4\2))^^\6\2))^^p") - buf.write("pvv\4\2$$^^\6\2$$^^ppvv\3\2\62;\5\2C\\aac|\4\2))aa\5\2") - buf.write("\13\f\17\17\"\"\2\u01b7\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3") - buf.write("\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2") - buf.write("\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2") - buf.write("\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2") - buf.write("!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2") - buf.write("\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3") - buf.write("\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2") - buf.write("\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2") - buf.write("\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2") - buf.write("\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3") - buf.write("\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c") - buf.write("\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2") - buf.write("m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2u\3\2\2\2") - buf.write("\2w\3\2\2\2\2y\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177\3\2") - buf.write("\2\2\2\u0081\3\2\2\2\2\u0083\3\2\2\2\2\u008b\3\2\2\2\2") - buf.write("\u008d\3\2\2\2\3\u008f\3\2\2\2\5\u0091\3\2\2\2\7\u0096") - buf.write("\3\2\2\2\t\u009c\3\2\2\2\13\u009e\3\2\2\2\r\u00a0\3\2") - buf.write("\2\2\17\u00a2\3\2\2\2\21\u00a4\3\2\2\2\23\u00a6\3\2\2") - buf.write("\2\25\u00a8\3\2\2\2\27\u00aa\3\2\2\2\31\u00ad\3\2\2\2") - buf.write("\33\u00b0\3\2\2\2\35\u00b2\3\2\2\2\37\u00b4\3\2\2\2!\u00b6") - buf.write("\3\2\2\2#\u00bc\3\2\2\2%\u00c5\3\2\2\2\'\u00cc\3\2\2\2") - buf.write(")\u00ce\3\2\2\2+\u00d1\3\2\2\2-\u00d6\3\2\2\2/\u00db\3") - buf.write("\2\2\2\61\u00e1\3\2\2\2\63\u00e7\3\2\2\2\65\u00eb\3\2") - buf.write("\2\2\67\u00ee\3\2\2\29\u00f3\3\2\2\2;\u00f8\3\2\2\2=\u00fa") - buf.write("\3\2\2\2?\u00fc\3\2\2\2A\u00ff\3\2\2\2C\u0101\3\2\2\2") - buf.write("E\u0103\3\2\2\2G\u0107\3\2\2\2I\u0109\3\2\2\2K\u010b\3") - buf.write("\2\2\2M\u010d\3\2\2\2O\u010f\3\2\2\2Q\u0112\3\2\2\2S\u0116") - buf.write("\3\2\2\2U\u0119\3\2\2\2W\u011c\3\2\2\2Y\u011e\3\2\2\2") - buf.write("[\u0121\3\2\2\2]\u0123\3\2\2\2_\u0126\3\2\2\2a\u012a\3") - buf.write("\2\2\2c\u012e\3\2\2\2e\u0131\3\2\2\2g\u0133\3\2\2\2i\u0135") - buf.write("\3\2\2\2k\u013a\3\2\2\2m\u0140\3\2\2\2o\u0145\3\2\2\2") - buf.write("q\u0149\3\2\2\2s\u014f\3\2\2\2u\u0154\3\2\2\2w\u0159\3") - buf.write("\2\2\2y\u0160\3\2\2\2{\u0164\3\2\2\2}\u0169\3\2\2\2\177") - buf.write("\u017e\3\2\2\2\u0081\u0189\3\2\2\2\u0083\u0194\3\2\2\2") - buf.write("\u0085\u019b\3\2\2\2\u0087\u019d\3\2\2\2\u0089\u01a2\3") - buf.write("\2\2\2\u008b\u01a5\3\2\2\2\u008d\u01ab\3\2\2\2\u008f\u0090") - buf.write("\7=\2\2\u0090\4\3\2\2\2\u0091\u0092\7u\2\2\u0092\u0093") - buf.write("\7m\2\2\u0093\u0094\7k\2\2\u0094\u0095\7r\2\2\u0095\6") - buf.write("\3\2\2\2\u0096\u0097\7r\2\2\u0097\u0098\7t\2\2\u0098\u0099") - buf.write("\7k\2\2\u0099\u009a\7p\2\2\u009a\u009b\7v\2\2\u009b\b") - buf.write("\3\2\2\2\u009c\u009d\7?\2\2\u009d\n\3\2\2\2\u009e\u009f") - buf.write("\7`\2\2\u009f\f\3\2\2\2\u00a0\u00a1\7,\2\2\u00a1\16\3") - buf.write("\2\2\2\u00a2\u00a3\7\61\2\2\u00a3\20\3\2\2\2\u00a4\u00a5") - buf.write("\7\'\2\2\u00a5\22\3\2\2\2\u00a6\u00a7\7-\2\2\u00a7\24") - buf.write("\3\2\2\2\u00a8\u00a9\7/\2\2\u00a9\26\3\2\2\2\u00aa\u00ab") - buf.write("\7>\2\2\u00ab\u00ac\7>\2\2\u00ac\30\3\2\2\2\u00ad\u00ae") - buf.write("\7@\2\2\u00ae\u00af\7@\2\2\u00af\32\3\2\2\2\u00b0\u00b1") - buf.write("\7(\2\2\u00b1\34\3\2\2\2\u00b2\u00b3\7&\2\2\u00b3\36\3") - buf.write("\2\2\2\u00b4\u00b5\7~\2\2\u00b5 \3\2\2\2\u00b6\u00b7\7") - buf.write("d\2\2\u00b7\u00b8\7t\2\2\u00b8\u00b9\7g\2\2\u00b9\u00ba") - buf.write("\7c\2\2\u00ba\u00bb\7m\2\2\u00bb\"\3\2\2\2\u00bc\u00bd") - buf.write("\7e\2\2\u00bd\u00be\7q\2\2\u00be\u00bf\7p\2\2\u00bf\u00c0") - buf.write("\7v\2\2\u00c0\u00c1\7k\2\2\u00c1\u00c2\7p\2\2\u00c2\u00c3") - buf.write("\7w\2\2\u00c3\u00c4\7g\2\2\u00c4$\3\2\2\2\u00c5\u00c6") - buf.write("\7t\2\2\u00c6\u00c7\7g\2\2\u00c7\u00c8\7v\2\2\u00c8\u00c9") - buf.write("\7w\2\2\u00c9\u00ca\7t\2\2\u00ca\u00cb\7p\2\2\u00cb&\3") - buf.write("\2\2\2\u00cc\u00cd\7.\2\2\u00cd(\3\2\2\2\u00ce\u00cf\7") - buf.write("k\2\2\u00cf\u00d0\7h\2\2\u00d0*\3\2\2\2\u00d1\u00d2\7") - buf.write("g\2\2\u00d2\u00d3\7n\2\2\u00d3\u00d4\7k\2\2\u00d4\u00d5") - buf.write("\7h\2\2\u00d5,\3\2\2\2\u00d6\u00d7\7g\2\2\u00d7\u00d8") - buf.write("\7n\2\2\u00d8\u00d9\7u\2\2\u00d9\u00da\7g\2\2\u00da.\3") - buf.write("\2\2\2\u00db\u00dc\7y\2\2\u00dc\u00dd\7j\2\2\u00dd\u00de") - buf.write("\7k\2\2\u00de\u00df\7n\2\2\u00df\u00e0\7g\2\2\u00e0\60") - buf.write("\3\2\2\2\u00e1\u00e2\7w\2\2\u00e2\u00e3\7p\2\2\u00e3\u00e4") - buf.write("\7v\2\2\u00e4\u00e5\7k\2\2\u00e5\u00e6\7n\2\2\u00e6\62") - buf.write("\3\2\2\2\u00e7\u00e8\7h\2\2\u00e8\u00e9\7q\2\2\u00e9\u00ea") - buf.write("\7t\2\2\u00ea\64\3\2\2\2\u00eb\u00ec\7k\2\2\u00ec\u00ed") - buf.write("\7p\2\2\u00ed\66\3\2\2\2\u00ee\u00ef\7u\2\2\u00ef\u00f0") - buf.write("\7v\2\2\u00f0\u00f1\7g\2\2\u00f1\u00f2\7r\2\2\u00f28\3") - buf.write("\2\2\2\u00f3\u00f4\7h\2\2\u00f4\u00f5\7w\2\2\u00f5\u00f6") - buf.write("\7p\2\2\u00f6\u00f7\7e\2\2\u00f7:\3\2\2\2\u00f8\u00f9") - buf.write("\7*\2\2\u00f9<\3\2\2\2\u00fa\u00fb\7+\2\2\u00fb>\3\2\2") - buf.write("\2\u00fc\u00fd\7f\2\2\u00fd\u00fe\7q\2\2\u00fe@\3\2\2") - buf.write("\2\u00ff\u0100\7}\2\2\u0100B\3\2\2\2\u0101\u0102\7\177") - buf.write("\2\2\u0102D\3\2\2\2\u0103\u0104\7f\2\2\u0104\u0105\7g") - buf.write("\2\2\u0105\u0106\7h\2\2\u0106F\3\2\2\2\u0107\u0108\7]") - buf.write("\2\2\u0108H\3\2\2\2\u0109\u010a\7_\2\2\u010aJ\3\2\2\2") - buf.write("\u010b\u010c\7\60\2\2\u010cL\3\2\2\2\u010d\u010e\7\u0080") - buf.write("\2\2\u010eN\3\2\2\2\u010f\u0110\7\60\2\2\u0110\u0111\7") - buf.write("\60\2\2\u0111P\3\2\2\2\u0112\u0113\7\60\2\2\u0113\u0114") - buf.write("\7\60\2\2\u0114\u0115\7\60\2\2\u0115R\3\2\2\2\u0116\u0117") - buf.write("\7?\2\2\u0117\u0118\7?\2\2\u0118T\3\2\2\2\u0119\u011a") - buf.write("\7#\2\2\u011a\u011b\7?\2\2\u011bV\3\2\2\2\u011c\u011d") - buf.write("\7>\2\2\u011dX\3\2\2\2\u011e\u011f\7>\2\2\u011f\u0120") - buf.write("\7?\2\2\u0120Z\3\2\2\2\u0121\u0122\7@\2\2\u0122\\\3\2") - buf.write("\2\2\u0123\u0124\7@\2\2\u0124\u0125\7?\2\2\u0125^\3\2") - buf.write("\2\2\u0126\u0127\7p\2\2\u0127\u0128\7q\2\2\u0128\u0129") - buf.write("\7v\2\2\u0129`\3\2\2\2\u012a\u012b\7c\2\2\u012b\u012c") - buf.write("\7p\2\2\u012c\u012d\7f\2\2\u012db\3\2\2\2\u012e\u012f") - buf.write("\7q\2\2\u012f\u0130\7t\2\2\u0130d\3\2\2\2\u0131\u0132") - buf.write("\7A\2\2\u0132f\3\2\2\2\u0133\u0134\7<\2\2\u0134h\3\2\2") - buf.write("\2\u0135\u0136\7v\2\2\u0136\u0137\7t\2\2\u0137\u0138\7") - buf.write("w\2\2\u0138\u0139\7g\2\2\u0139j\3\2\2\2\u013a\u013b\7") - buf.write("h\2\2\u013b\u013c\7c\2\2\u013c\u013d\7n\2\2\u013d\u013e") - buf.write("\7u\2\2\u013e\u013f\7g\2\2\u013fl\3\2\2\2\u0140\u0141") - buf.write("\7X\2\2\u0141\u0142\7q\2\2\u0142\u0143\7k\2\2\u0143\u0144") - buf.write("\7f\2\2\u0144n\3\2\2\2\u0145\u0146\7K\2\2\u0146\u0147") - buf.write("\7p\2\2\u0147\u0148\7v\2\2\u0148p\3\2\2\2\u0149\u014a") - buf.write("\7H\2\2\u014a\u014b\7n\2\2\u014b\u014c\7q\2\2\u014c\u014d") - buf.write("\7c\2\2\u014d\u014e\7v\2\2\u014er\3\2\2\2\u014f\u0150") - buf.write("\7D\2\2\u0150\u0151\7q\2\2\u0151\u0152\7q\2\2\u0152\u0153") - buf.write("\7n\2\2\u0153t\3\2\2\2\u0154\u0155\7E\2\2\u0155\u0156") - buf.write("\7j\2\2\u0156\u0157\7c\2\2\u0157\u0158\7t\2\2\u0158v\3") - buf.write("\2\2\2\u0159\u015a\7U\2\2\u015a\u015b\7v\2\2\u015b\u015c") - buf.write("\7t\2\2\u015c\u015d\7k\2\2\u015d\u015e\7p\2\2\u015e\u015f") - buf.write("\7i\2\2\u015fx\3\2\2\2\u0160\u0161\7/\2\2\u0161\u0162") - buf.write("\7@\2\2\u0162z\3\2\2\2\u0163\u0165\5\u0085C\2\u0164\u0163") - buf.write("\3\2\2\2\u0165\u0166\3\2\2\2\u0166\u0164\3\2\2\2\u0166") - buf.write("\u0167\3\2\2\2\u0167|\3\2\2\2\u0168\u016a\5\u0085C\2\u0169") - buf.write("\u0168\3\2\2\2\u016a\u016b\3\2\2\2\u016b\u0169\3\2\2\2") - buf.write("\u016b\u016c\3\2\2\2\u016c\u016d\3\2\2\2\u016d\u016f\7") - buf.write("\60\2\2\u016e\u0170\5\u0085C\2\u016f\u016e\3\2\2\2\u0170") - buf.write("\u0171\3\2\2\2\u0171\u016f\3\2\2\2\u0171\u0172\3\2\2\2") - buf.write("\u0172\u017c\3\2\2\2\u0173\u0175\7g\2\2\u0174\u0176\7") - buf.write("/\2\2\u0175\u0174\3\2\2\2\u0175\u0176\3\2\2\2\u0176\u0178") - buf.write("\3\2\2\2\u0177\u0179\5\u0085C\2\u0178\u0177\3\2\2\2\u0179") - buf.write("\u017a\3\2\2\2\u017a\u0178\3\2\2\2\u017a\u017b\3\2\2\2") - buf.write("\u017b\u017d\3\2\2\2\u017c\u0173\3\2\2\2\u017c\u017d\3") - buf.write("\2\2\2\u017d~\3\2\2\2\u017e\u0184\7)\2\2\u017f\u0183\n") - buf.write("\2\2\2\u0180\u0181\7^\2\2\u0181\u0183\t\3\2\2\u0182\u017f") - buf.write("\3\2\2\2\u0182\u0180\3\2\2\2\u0183\u0186\3\2\2\2\u0184") - buf.write("\u0182\3\2\2\2\u0184\u0185\3\2\2\2\u0185\u0187\3\2\2\2") - buf.write("\u0186\u0184\3\2\2\2\u0187\u0188\7)\2\2\u0188\u0080\3") - buf.write("\2\2\2\u0189\u018f\7$\2\2\u018a\u018e\n\4\2\2\u018b\u018c") - buf.write("\7^\2\2\u018c\u018e\t\5\2\2\u018d\u018a\3\2\2\2\u018d") - buf.write("\u018b\3\2\2\2\u018e\u0191\3\2\2\2\u018f\u018d\3\2\2\2") - buf.write("\u018f\u0190\3\2\2\2\u0190\u0192\3\2\2\2\u0191\u018f\3") - buf.write("\2\2\2\u0192\u0193\7$\2\2\u0193\u0082\3\2\2\2\u0194\u0198") - buf.write("\5\u0087D\2\u0195\u0197\5\u0089E\2\u0196\u0195\3\2\2\2") - buf.write("\u0197\u019a\3\2\2\2\u0198\u0196\3\2\2\2\u0198\u0199\3") - buf.write("\2\2\2\u0199\u0084\3\2\2\2\u019a\u0198\3\2\2\2\u019b\u019c") - buf.write("\t\6\2\2\u019c\u0086\3\2\2\2\u019d\u019e\t\7\2\2\u019e") - buf.write("\u0088\3\2\2\2\u019f\u01a3\5\u0087D\2\u01a0\u01a3\5\u0085") - buf.write("C\2\u01a1\u01a3\t\b\2\2\u01a2\u019f\3\2\2\2\u01a2\u01a0") - buf.write("\3\2\2\2\u01a2\u01a1\3\2\2\2\u01a3\u008a\3\2\2\2\u01a4") - buf.write("\u01a6\t\t\2\2\u01a5\u01a4\3\2\2\2\u01a6\u01a7\3\2\2\2") - buf.write("\u01a7\u01a5\3\2\2\2\u01a7\u01a8\3\2\2\2\u01a8\u01a9\3") - buf.write("\2\2\2\u01a9\u01aa\bF\2\2\u01aa\u008c\3\2\2\2\u01ab\u01ac") - buf.write("\13\2\2\2\u01ac\u008e\3\2\2\2\20\2\u0166\u016b\u0171\u0175") - buf.write("\u017a\u017c\u0182\u0184\u018d\u018f\u0198\u01a2\u01a7") - buf.write("\3\b\2\2") + buf.write("\3 \3!\3!\3!\3\"\3\"\3#\3#\3$\3$\3$\3$\3%\3%\3&\3&\3\'") + buf.write("\3\'\3(\3(\3)\3)\3)\3*\3*\3*\3*\3+\3+\3+\3,\3,\3,\3-\3") + buf.write("-\3.\3.\3.\3/\3/\3\60\3\60\3\60\3\61\3\61\3\61\3\61\3") + buf.write("\62\3\62\3\62\3\62\3\63\3\63\3\63\3\64\3\64\3\65\3\65") + buf.write("\3\65\3\65\3\65\3\66\3\66\3\66\3\66\3\66\3\66\3\67\3\67") + buf.write("\3\67\3\67\3\67\38\38\38\38\39\39\39\39\39\39\3:\3:\3") + buf.write(":\3:\3:\3;\3;\3;\3;\3;\3<\3<\3<\3<\3<\3<\3<\3=\3=\3=\3") + buf.write(">\6>\u0165\n>\r>\16>\u0166\3?\6?\u016a\n?\r?\16?\u016b") + buf.write("\3?\3?\6?\u0170\n?\r?\16?\u0171\3?\3?\5?\u0176\n?\3?\6") + buf.write("?\u0179\n?\r?\16?\u017a\5?\u017d\n?\3@\3@\3@\3@\7@\u0183") + buf.write("\n@\f@\16@\u0186\13@\3@\3@\3A\3A\3A\3A\7A\u018e\nA\fA") + buf.write("\16A\u0191\13A\3A\3A\3B\3B\7B\u0197\nB\fB\16B\u019a\13") + buf.write("B\3C\3C\3D\3D\3E\3E\3E\5E\u01a3\nE\3F\6F\u01a6\nF\rF\16") + buf.write("F\u01a7\3F\3F\3G\3G\2\2H\3\3\5\4\7\5\t\6\13\7\r\b\17\t") + buf.write("\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23") + buf.write("%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34\67\359\36") + buf.write(";\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63") + buf.write("e\64g\65i\66k\67m8o9q:s;u{?}@\177A\u0081B\u0083C") + buf.write("\u0085\2\u0087\2\u0089\2\u008bD\u008dE\3\2\n\4\2))^^\6") + buf.write("\2))^^ppvv\4\2$$^^\6\2$$^^ppvv\3\2\62;\5\2C\\aac|\4\2") + buf.write("))aa\5\2\13\f\17\17\"\"\2\u01b7\2\3\3\2\2\2\2\5\3\2\2") + buf.write("\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2") + buf.write("\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27") + buf.write("\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3") + buf.write("\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2") + buf.write(")\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2") + buf.write("\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2") + buf.write(";\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2") + buf.write("\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2") + buf.write("\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2") + buf.write("\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3") + buf.write("\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k") + buf.write("\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2") + buf.write("u\3\2\2\2\2w\3\2\2\2\2y\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2") + buf.write("\2\177\3\2\2\2\2\u0081\3\2\2\2\2\u0083\3\2\2\2\2\u008b") + buf.write("\3\2\2\2\2\u008d\3\2\2\2\3\u008f\3\2\2\2\5\u0091\3\2\2") + buf.write("\2\7\u0096\3\2\2\2\t\u009c\3\2\2\2\13\u009e\3\2\2\2\r") + buf.write("\u00a0\3\2\2\2\17\u00a2\3\2\2\2\21\u00a4\3\2\2\2\23\u00a6") + buf.write("\3\2\2\2\25\u00a8\3\2\2\2\27\u00aa\3\2\2\2\31\u00ad\3") + buf.write("\2\2\2\33\u00b0\3\2\2\2\35\u00b2\3\2\2\2\37\u00b4\3\2") + buf.write("\2\2!\u00b6\3\2\2\2#\u00bc\3\2\2\2%\u00c5\3\2\2\2\'\u00cc") + buf.write("\3\2\2\2)\u00ce\3\2\2\2+\u00d1\3\2\2\2-\u00d6\3\2\2\2") + buf.write("/\u00db\3\2\2\2\61\u00e1\3\2\2\2\63\u00e7\3\2\2\2\65\u00eb") + buf.write("\3\2\2\2\67\u00ee\3\2\2\29\u00f3\3\2\2\2;\u00f8\3\2\2") + buf.write("\2=\u00fa\3\2\2\2?\u00fc\3\2\2\2A\u00fe\3\2\2\2C\u0101") + buf.write("\3\2\2\2E\u0103\3\2\2\2G\u0105\3\2\2\2I\u0109\3\2\2\2") + buf.write("K\u010b\3\2\2\2M\u010d\3\2\2\2O\u010f\3\2\2\2Q\u0111\3") + buf.write("\2\2\2S\u0114\3\2\2\2U\u0118\3\2\2\2W\u011b\3\2\2\2Y\u011e") + buf.write("\3\2\2\2[\u0120\3\2\2\2]\u0123\3\2\2\2_\u0125\3\2\2\2") + buf.write("a\u0128\3\2\2\2c\u012c\3\2\2\2e\u0130\3\2\2\2g\u0133\3") + buf.write("\2\2\2i\u0135\3\2\2\2k\u013a\3\2\2\2m\u0140\3\2\2\2o\u0145") + buf.write("\3\2\2\2q\u0149\3\2\2\2s\u014f\3\2\2\2u\u0154\3\2\2\2") + buf.write("w\u0159\3\2\2\2y\u0160\3\2\2\2{\u0164\3\2\2\2}\u0169\3") + buf.write("\2\2\2\177\u017e\3\2\2\2\u0081\u0189\3\2\2\2\u0083\u0194") + buf.write("\3\2\2\2\u0085\u019b\3\2\2\2\u0087\u019d\3\2\2\2\u0089") + buf.write("\u01a2\3\2\2\2\u008b\u01a5\3\2\2\2\u008d\u01ab\3\2\2\2") + buf.write("\u008f\u0090\7=\2\2\u0090\4\3\2\2\2\u0091\u0092\7u\2\2") + buf.write("\u0092\u0093\7m\2\2\u0093\u0094\7k\2\2\u0094\u0095\7r") + buf.write("\2\2\u0095\6\3\2\2\2\u0096\u0097\7r\2\2\u0097\u0098\7") + buf.write("t\2\2\u0098\u0099\7k\2\2\u0099\u009a\7p\2\2\u009a\u009b") + buf.write("\7v\2\2\u009b\b\3\2\2\2\u009c\u009d\7?\2\2\u009d\n\3\2") + buf.write("\2\2\u009e\u009f\7`\2\2\u009f\f\3\2\2\2\u00a0\u00a1\7") + buf.write(",\2\2\u00a1\16\3\2\2\2\u00a2\u00a3\7\61\2\2\u00a3\20\3") + buf.write("\2\2\2\u00a4\u00a5\7\'\2\2\u00a5\22\3\2\2\2\u00a6\u00a7") + buf.write("\7-\2\2\u00a7\24\3\2\2\2\u00a8\u00a9\7/\2\2\u00a9\26\3") + buf.write("\2\2\2\u00aa\u00ab\7>\2\2\u00ab\u00ac\7>\2\2\u00ac\30") + buf.write("\3\2\2\2\u00ad\u00ae\7@\2\2\u00ae\u00af\7@\2\2\u00af\32") + buf.write("\3\2\2\2\u00b0\u00b1\7(\2\2\u00b1\34\3\2\2\2\u00b2\u00b3") + buf.write("\7&\2\2\u00b3\36\3\2\2\2\u00b4\u00b5\7~\2\2\u00b5 \3\2") + buf.write("\2\2\u00b6\u00b7\7d\2\2\u00b7\u00b8\7t\2\2\u00b8\u00b9") + buf.write("\7g\2\2\u00b9\u00ba\7c\2\2\u00ba\u00bb\7m\2\2\u00bb\"") + buf.write("\3\2\2\2\u00bc\u00bd\7e\2\2\u00bd\u00be\7q\2\2\u00be\u00bf") + buf.write("\7p\2\2\u00bf\u00c0\7v\2\2\u00c0\u00c1\7k\2\2\u00c1\u00c2") + buf.write("\7p\2\2\u00c2\u00c3\7w\2\2\u00c3\u00c4\7g\2\2\u00c4$\3") + buf.write("\2\2\2\u00c5\u00c6\7t\2\2\u00c6\u00c7\7g\2\2\u00c7\u00c8") + buf.write("\7v\2\2\u00c8\u00c9\7w\2\2\u00c9\u00ca\7t\2\2\u00ca\u00cb") + buf.write("\7p\2\2\u00cb&\3\2\2\2\u00cc\u00cd\7.\2\2\u00cd(\3\2\2") + buf.write("\2\u00ce\u00cf\7k\2\2\u00cf\u00d0\7h\2\2\u00d0*\3\2\2") + buf.write("\2\u00d1\u00d2\7g\2\2\u00d2\u00d3\7n\2\2\u00d3\u00d4\7") + buf.write("k\2\2\u00d4\u00d5\7h\2\2\u00d5,\3\2\2\2\u00d6\u00d7\7") + buf.write("g\2\2\u00d7\u00d8\7n\2\2\u00d8\u00d9\7u\2\2\u00d9\u00da") + buf.write("\7g\2\2\u00da.\3\2\2\2\u00db\u00dc\7y\2\2\u00dc\u00dd") + buf.write("\7j\2\2\u00dd\u00de\7k\2\2\u00de\u00df\7n\2\2\u00df\u00e0") + buf.write("\7g\2\2\u00e0\60\3\2\2\2\u00e1\u00e2\7w\2\2\u00e2\u00e3") + buf.write("\7p\2\2\u00e3\u00e4\7v\2\2\u00e4\u00e5\7k\2\2\u00e5\u00e6") + buf.write("\7n\2\2\u00e6\62\3\2\2\2\u00e7\u00e8\7h\2\2\u00e8\u00e9") + buf.write("\7q\2\2\u00e9\u00ea\7t\2\2\u00ea\64\3\2\2\2\u00eb\u00ec") + buf.write("\7k\2\2\u00ec\u00ed\7p\2\2\u00ed\66\3\2\2\2\u00ee\u00ef") + buf.write("\7u\2\2\u00ef\u00f0\7v\2\2\u00f0\u00f1\7g\2\2\u00f1\u00f2") + buf.write("\7r\2\2\u00f28\3\2\2\2\u00f3\u00f4\7h\2\2\u00f4\u00f5") + buf.write("\7w\2\2\u00f5\u00f6\7p\2\2\u00f6\u00f7\7e\2\2\u00f7:\3") + buf.write("\2\2\2\u00f8\u00f9\7*\2\2\u00f9<\3\2\2\2\u00fa\u00fb\7") + buf.write("+\2\2\u00fb>\3\2\2\2\u00fc\u00fd\7<\2\2\u00fd@\3\2\2\2") + buf.write("\u00fe\u00ff\7f\2\2\u00ff\u0100\7q\2\2\u0100B\3\2\2\2") + buf.write("\u0101\u0102\7}\2\2\u0102D\3\2\2\2\u0103\u0104\7\177\2") + buf.write("\2\u0104F\3\2\2\2\u0105\u0106\7f\2\2\u0106\u0107\7g\2") + buf.write("\2\u0107\u0108\7h\2\2\u0108H\3\2\2\2\u0109\u010a\7]\2") + buf.write("\2\u010aJ\3\2\2\2\u010b\u010c\7_\2\2\u010cL\3\2\2\2\u010d") + buf.write("\u010e\7\60\2\2\u010eN\3\2\2\2\u010f\u0110\7\u0080\2\2") + buf.write("\u0110P\3\2\2\2\u0111\u0112\7\60\2\2\u0112\u0113\7\60") + buf.write("\2\2\u0113R\3\2\2\2\u0114\u0115\7\60\2\2\u0115\u0116\7") + buf.write("\60\2\2\u0116\u0117\7\60\2\2\u0117T\3\2\2\2\u0118\u0119") + buf.write("\7?\2\2\u0119\u011a\7?\2\2\u011aV\3\2\2\2\u011b\u011c") + buf.write("\7#\2\2\u011c\u011d\7?\2\2\u011dX\3\2\2\2\u011e\u011f") + buf.write("\7>\2\2\u011fZ\3\2\2\2\u0120\u0121\7>\2\2\u0121\u0122") + buf.write("\7?\2\2\u0122\\\3\2\2\2\u0123\u0124\7@\2\2\u0124^\3\2") + buf.write("\2\2\u0125\u0126\7@\2\2\u0126\u0127\7?\2\2\u0127`\3\2") + buf.write("\2\2\u0128\u0129\7p\2\2\u0129\u012a\7q\2\2\u012a\u012b") + buf.write("\7v\2\2\u012bb\3\2\2\2\u012c\u012d\7c\2\2\u012d\u012e") + buf.write("\7p\2\2\u012e\u012f\7f\2\2\u012fd\3\2\2\2\u0130\u0131") + buf.write("\7q\2\2\u0131\u0132\7t\2\2\u0132f\3\2\2\2\u0133\u0134") + buf.write("\7A\2\2\u0134h\3\2\2\2\u0135\u0136\7v\2\2\u0136\u0137") + buf.write("\7t\2\2\u0137\u0138\7w\2\2\u0138\u0139\7g\2\2\u0139j\3") + buf.write("\2\2\2\u013a\u013b\7h\2\2\u013b\u013c\7c\2\2\u013c\u013d") + buf.write("\7n\2\2\u013d\u013e\7u\2\2\u013e\u013f\7g\2\2\u013fl\3") + buf.write("\2\2\2\u0140\u0141\7X\2\2\u0141\u0142\7q\2\2\u0142\u0143") + buf.write("\7k\2\2\u0143\u0144\7f\2\2\u0144n\3\2\2\2\u0145\u0146") + buf.write("\7K\2\2\u0146\u0147\7p\2\2\u0147\u0148\7v\2\2\u0148p\3") + buf.write("\2\2\2\u0149\u014a\7H\2\2\u014a\u014b\7n\2\2\u014b\u014c") + buf.write("\7q\2\2\u014c\u014d\7c\2\2\u014d\u014e\7v\2\2\u014er\3") + buf.write("\2\2\2\u014f\u0150\7D\2\2\u0150\u0151\7q\2\2\u0151\u0152") + buf.write("\7q\2\2\u0152\u0153\7n\2\2\u0153t\3\2\2\2\u0154\u0155") + buf.write("\7E\2\2\u0155\u0156\7j\2\2\u0156\u0157\7c\2\2\u0157\u0158") + buf.write("\7t\2\2\u0158v\3\2\2\2\u0159\u015a\7U\2\2\u015a\u015b") + buf.write("\7v\2\2\u015b\u015c\7t\2\2\u015c\u015d\7k\2\2\u015d\u015e") + buf.write("\7p\2\2\u015e\u015f\7i\2\2\u015fx\3\2\2\2\u0160\u0161") + buf.write("\7/\2\2\u0161\u0162\7@\2\2\u0162z\3\2\2\2\u0163\u0165") + buf.write("\5\u0085C\2\u0164\u0163\3\2\2\2\u0165\u0166\3\2\2\2\u0166") + buf.write("\u0164\3\2\2\2\u0166\u0167\3\2\2\2\u0167|\3\2\2\2\u0168") + buf.write("\u016a\5\u0085C\2\u0169\u0168\3\2\2\2\u016a\u016b\3\2") + buf.write("\2\2\u016b\u0169\3\2\2\2\u016b\u016c\3\2\2\2\u016c\u016d") + buf.write("\3\2\2\2\u016d\u016f\7\60\2\2\u016e\u0170\5\u0085C\2\u016f") + buf.write("\u016e\3\2\2\2\u0170\u0171\3\2\2\2\u0171\u016f\3\2\2\2") + buf.write("\u0171\u0172\3\2\2\2\u0172\u017c\3\2\2\2\u0173\u0175\7") + buf.write("g\2\2\u0174\u0176\7/\2\2\u0175\u0174\3\2\2\2\u0175\u0176") + buf.write("\3\2\2\2\u0176\u0178\3\2\2\2\u0177\u0179\5\u0085C\2\u0178") + buf.write("\u0177\3\2\2\2\u0179\u017a\3\2\2\2\u017a\u0178\3\2\2\2") + buf.write("\u017a\u017b\3\2\2\2\u017b\u017d\3\2\2\2\u017c\u0173\3") + buf.write("\2\2\2\u017c\u017d\3\2\2\2\u017d~\3\2\2\2\u017e\u0184") + buf.write("\7)\2\2\u017f\u0183\n\2\2\2\u0180\u0181\7^\2\2\u0181\u0183") + buf.write("\t\3\2\2\u0182\u017f\3\2\2\2\u0182\u0180\3\2\2\2\u0183") + buf.write("\u0186\3\2\2\2\u0184\u0182\3\2\2\2\u0184\u0185\3\2\2\2") + buf.write("\u0185\u0187\3\2\2\2\u0186\u0184\3\2\2\2\u0187\u0188\7") + buf.write(")\2\2\u0188\u0080\3\2\2\2\u0189\u018f\7$\2\2\u018a\u018e") + buf.write("\n\4\2\2\u018b\u018c\7^\2\2\u018c\u018e\t\5\2\2\u018d") + buf.write("\u018a\3\2\2\2\u018d\u018b\3\2\2\2\u018e\u0191\3\2\2\2") + buf.write("\u018f\u018d\3\2\2\2\u018f\u0190\3\2\2\2\u0190\u0192\3") + buf.write("\2\2\2\u0191\u018f\3\2\2\2\u0192\u0193\7$\2\2\u0193\u0082") + buf.write("\3\2\2\2\u0194\u0198\5\u0087D\2\u0195\u0197\5\u0089E\2") + buf.write("\u0196\u0195\3\2\2\2\u0197\u019a\3\2\2\2\u0198\u0196\3") + buf.write("\2\2\2\u0198\u0199\3\2\2\2\u0199\u0084\3\2\2\2\u019a\u0198") + buf.write("\3\2\2\2\u019b\u019c\t\6\2\2\u019c\u0086\3\2\2\2\u019d") + buf.write("\u019e\t\7\2\2\u019e\u0088\3\2\2\2\u019f\u01a3\5\u0087") + buf.write("D\2\u01a0\u01a3\5\u0085C\2\u01a1\u01a3\t\b\2\2\u01a2\u019f") + buf.write("\3\2\2\2\u01a2\u01a0\3\2\2\2\u01a2\u01a1\3\2\2\2\u01a3") + buf.write("\u008a\3\2\2\2\u01a4\u01a6\t\t\2\2\u01a5\u01a4\3\2\2\2") + buf.write("\u01a6\u01a7\3\2\2\2\u01a7\u01a5\3\2\2\2\u01a7\u01a8\3") + buf.write("\2\2\2\u01a8\u01a9\3\2\2\2\u01a9\u01aa\bF\2\2\u01aa\u008c") + buf.write("\3\2\2\2\u01ab\u01ac\13\2\2\2\u01ac\u008e\3\2\2\2\20\2") + buf.write("\u0166\u016b\u0171\u0175\u017a\u017c\u0182\u0184\u018d") + buf.write("\u018f\u0198\u01a2\u01a7\3\b\2\2") return buf.getvalue() @@ -276,9 +276,9 @@ class PyxellLexer(Lexer): "'+'", "'-'", "'<<'", "'>>'", "'&'", "'$'", "'|'", "'break'", "'continue'", "'return'", "','", "'if'", "'elif'", "'else'", "'while'", "'until'", "'for'", "'in'", "'step'", "'func'", "'('", - "')'", "'do'", "'{'", "'}'", "'def'", "'['", "']'", "'.'", "'~'", - "'..'", "'...'", "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", - "'not'", "'and'", "'or'", "'?'", "':'", "'true'", "'false'", + "')'", "':'", "'do'", "'{'", "'}'", "'def'", "'['", "']'", "'.'", + "'~'", "'..'", "'...'", "'=='", "'!='", "'<'", "'<='", "'>'", + "'>='", "'not'", "'and'", "'or'", "'?'", "'true'", "'false'", "'Void'", "'Int'", "'Float'", "'Bool'", "'Char'", "'String'", "'->'" ] diff --git a/src/antlr/PyxellLexer.tokens b/src/antlr/PyxellLexer.tokens index 0d26b5ca..41299c04 100644 --- a/src/antlr/PyxellLexer.tokens +++ b/src/antlr/PyxellLexer.tokens @@ -95,27 +95,27 @@ ERR=67 'func'=28 '('=29 ')'=30 -'do'=31 -'{'=32 -'}'=33 -'def'=34 -'['=35 -']'=36 -'.'=37 -'~'=38 -'..'=39 -'...'=40 -'=='=41 -'!='=42 -'<'=43 -'<='=44 -'>'=45 -'>='=46 -'not'=47 -'and'=48 -'or'=49 -'?'=50 -':'=51 +':'=31 +'do'=32 +'{'=33 +'}'=34 +'def'=35 +'['=36 +']'=37 +'.'=38 +'~'=39 +'..'=40 +'...'=41 +'=='=42 +'!='=43 +'<'=44 +'<='=45 +'>'=46 +'>='=47 +'not'=48 +'and'=49 +'or'=50 +'?'=51 'true'=52 'false'=53 'Void'=54 diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index 0c6ea085..2f2eae2d 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -9,7 +9,7 @@ def serializedATN(): with StringIO() as buf: buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3E") - buf.write("\u012a\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\u012d\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\3\2") buf.write("\7\2\34\n\2\f\2\16\2\37\13\2\3\2\3\2\3\3\3\3\3\3\3\3\5") buf.write("\3\'\n\3\3\4\3\4\3\4\5\4,\n\4\3\4\3\4\3\4\3\4\5\4\62\n") @@ -20,134 +20,136 @@ def serializedATN(): buf.write("\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\5\6o\n\6\3\6") buf.write("\3\6\3\6\3\6\3\6\3\6\3\6\3\6\7\6y\n\6\f\6\16\6|\13\6\3") buf.write("\6\5\6\177\n\6\3\6\3\6\5\6\u0083\n\6\3\6\5\6\u0086\n\6") - buf.write("\3\7\3\7\3\7\3\b\3\b\3\b\6\b\u008e\n\b\r\b\16\b\u008f") - buf.write("\3\b\3\b\3\t\3\t\3\t\6\t\u0097\n\t\r\t\16\t\u0098\3\t") - buf.write("\3\t\3\n\3\n\3\n\7\n\u00a0\n\n\f\n\16\n\u00a3\13\n\3\n") - buf.write("\3\n\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") - buf.write("\5\13\u00b1\n\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3") - buf.write("\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") + buf.write("\3\7\3\7\3\7\3\7\5\7\u008c\n\7\3\b\3\b\3\b\6\b\u0091\n") + buf.write("\b\r\b\16\b\u0092\3\b\3\b\3\t\3\t\3\t\6\t\u009a\n\t\r") + buf.write("\t\16\t\u009b\3\t\3\t\3\n\3\n\3\n\7\n\u00a3\n\n\f\n\16") + buf.write("\n\u00a6\13\n\3\n\3\n\3\13\3\13\3\13\3\13\3\13\3\13\3") + buf.write("\13\3\13\3\13\3\13\5\13\u00b4\n\13\3\13\3\13\3\13\3\13") buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") - buf.write("\3\13\7\13\u00e7\n\13\f\13\16\13\u00ea\13\13\3\13\5\13") - buf.write("\u00ed\n\13\3\13\3\13\3\13\7\13\u00f2\n\13\f\13\16\13") - buf.write("\u00f5\13\13\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\7\f\u0100") - buf.write("\n\f\f\f\16\f\u0103\13\f\3\f\5\f\u0106\n\f\3\f\3\f\5\f") - buf.write("\u010a\n\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r") - buf.write("\3\r\3\r\3\r\3\r\3\r\3\r\5\r\u011d\n\r\3\r\3\r\3\r\3\r") - buf.write("\3\r\3\r\7\r\u0125\n\r\f\r\16\r\u0128\13\r\3\r\2\4\24") - buf.write("\30\16\2\4\6\b\n\f\16\20\22\24\26\30\2\13\3\2\7\21\3\2") - buf.write("\22\23\4\2\13\f((\3\2\b\n\3\2\13\f\3\2\r\16\3\2)*\3\2") - buf.write("+\60\3\2\66\67\2\u015e\2\35\3\2\2\2\4&\3\2\2\2\6F\3\2") - buf.write("\2\2\bH\3\2\2\2\n\u0085\3\2\2\2\f\u0087\3\2\2\2\16\u008a") - buf.write("\3\2\2\2\20\u0093\3\2\2\2\22\u00a1\3\2\2\2\24\u00b0\3") - buf.write("\2\2\2\26\u0109\3\2\2\2\30\u011c\3\2\2\2\32\34\5\4\3\2") - buf.write("\33\32\3\2\2\2\34\37\3\2\2\2\35\33\3\2\2\2\35\36\3\2\2") - buf.write("\2\36 \3\2\2\2\37\35\3\2\2\2 !\7\2\2\3!\3\3\2\2\2\"#\5") - buf.write("\6\4\2#$\7\3\2\2$\'\3\2\2\2%\'\5\n\6\2&\"\3\2\2\2&%\3") - buf.write("\2\2\2\'\5\3\2\2\2(G\7\4\2\2)+\7\5\2\2*,\5\22\n\2+*\3") - buf.write("\2\2\2+,\3\2\2\2,G\3\2\2\2-.\5\30\r\2.\61\7C\2\2/\60\7") - buf.write("\6\2\2\60\62\5\22\n\2\61/\3\2\2\2\61\62\3\2\2\2\62G\3") - buf.write("\2\2\2\63\64\5\b\5\2\64\65\7\6\2\2\65\67\3\2\2\2\66\63") - buf.write("\3\2\2\2\67:\3\2\2\28\66\3\2\2\289\3\2\2\29;\3\2\2\2:") - buf.write("8\3\2\2\2;G\5\22\n\2<=\5\24\13\2=>\t\2\2\2>?\7\6\2\2?") - buf.write("@\5\24\13\2@G\3\2\2\2AG\t\3\2\2BD\7\24\2\2CE\5\22\n\2") - buf.write("DC\3\2\2\2DE\3\2\2\2EG\3\2\2\2F(\3\2\2\2F)\3\2\2\2F-\3") - buf.write("\2\2\2F8\3\2\2\2F<\3\2\2\2FA\3\2\2\2FB\3\2\2\2G\7\3\2") - buf.write("\2\2HM\5\24\13\2IJ\7\25\2\2JL\5\24\13\2KI\3\2\2\2LO\3") - buf.write("\2\2\2MK\3\2\2\2MN\3\2\2\2N\t\3\2\2\2OM\3\2\2\2PQ\7\26") - buf.write("\2\2QR\5\24\13\2RY\5\16\b\2ST\7\27\2\2TU\5\24\13\2UV\5") - buf.write("\16\b\2VX\3\2\2\2WS\3\2\2\2X[\3\2\2\2YW\3\2\2\2YZ\3\2") - buf.write("\2\2Z^\3\2\2\2[Y\3\2\2\2\\]\7\30\2\2]_\5\16\b\2^\\\3\2") - buf.write("\2\2^_\3\2\2\2_\u0086\3\2\2\2`a\7\31\2\2ab\5\24\13\2b") - buf.write("c\5\16\b\2c\u0086\3\2\2\2de\7\32\2\2ef\5\24\13\2fg\5\16") - buf.write("\b\2g\u0086\3\2\2\2hi\7\33\2\2ij\5\22\n\2jk\7\34\2\2k") - buf.write("n\5\22\n\2lm\7\35\2\2mo\5\22\n\2nl\3\2\2\2no\3\2\2\2o") - buf.write("p\3\2\2\2pq\5\16\b\2q\u0086\3\2\2\2rs\7\36\2\2st\7C\2") - buf.write("\2tz\7\37\2\2uv\5\f\7\2vw\7\25\2\2wy\3\2\2\2xu\3\2\2\2") - buf.write("y|\3\2\2\2zx\3\2\2\2z{\3\2\2\2{~\3\2\2\2|z\3\2\2\2}\177") - buf.write("\5\f\7\2~}\3\2\2\2~\177\3\2\2\2\177\u0080\3\2\2\2\u0080") - buf.write("\u0082\7 \2\2\u0081\u0083\5\30\r\2\u0082\u0081\3\2\2\2") - buf.write("\u0082\u0083\3\2\2\2\u0083\u0084\3\2\2\2\u0084\u0086\5") - buf.write("\20\t\2\u0085P\3\2\2\2\u0085`\3\2\2\2\u0085d\3\2\2\2\u0085") - buf.write("h\3\2\2\2\u0085r\3\2\2\2\u0086\13\3\2\2\2\u0087\u0088") - buf.write("\5\30\r\2\u0088\u0089\7C\2\2\u0089\r\3\2\2\2\u008a\u008b") - buf.write("\7!\2\2\u008b\u008d\7\"\2\2\u008c\u008e\5\4\3\2\u008d") - buf.write("\u008c\3\2\2\2\u008e\u008f\3\2\2\2\u008f\u008d\3\2\2\2") - buf.write("\u008f\u0090\3\2\2\2\u0090\u0091\3\2\2\2\u0091\u0092\7") - buf.write("#\2\2\u0092\17\3\2\2\2\u0093\u0094\7$\2\2\u0094\u0096") - buf.write("\7\"\2\2\u0095\u0097\5\4\3\2\u0096\u0095\3\2\2\2\u0097") - buf.write("\u0098\3\2\2\2\u0098\u0096\3\2\2\2\u0098\u0099\3\2\2\2") - buf.write("\u0099\u009a\3\2\2\2\u009a\u009b\7#\2\2\u009b\21\3\2\2") - buf.write("\2\u009c\u009d\5\24\13\2\u009d\u009e\7\25\2\2\u009e\u00a0") - buf.write("\3\2\2\2\u009f\u009c\3\2\2\2\u00a0\u00a3\3\2\2\2\u00a1") - buf.write("\u009f\3\2\2\2\u00a1\u00a2\3\2\2\2\u00a2\u00a4\3\2\2\2") - buf.write("\u00a3\u00a1\3\2\2\2\u00a4\u00a5\5\24\13\2\u00a5\23\3") - buf.write("\2\2\2\u00a6\u00a7\b\13\1\2\u00a7\u00b1\5\26\f\2\u00a8") - buf.write("\u00a9\7\37\2\2\u00a9\u00aa\5\22\n\2\u00aa\u00ab\7 \2") - buf.write("\2\u00ab\u00b1\3\2\2\2\u00ac\u00ad\t\4\2\2\u00ad\u00b1") - buf.write("\5\24\13\20\u00ae\u00af\7\61\2\2\u00af\u00b1\5\24\13\6") - buf.write("\u00b0\u00a6\3\2\2\2\u00b0\u00a8\3\2\2\2\u00b0\u00ac\3") - buf.write("\2\2\2\u00b0\u00ae\3\2\2\2\u00b1\u00f3\3\2\2\2\u00b2\u00b3") - buf.write("\f\21\2\2\u00b3\u00b4\7\7\2\2\u00b4\u00f2\5\24\13\21\u00b5") - buf.write("\u00b6\f\17\2\2\u00b6\u00b7\t\5\2\2\u00b7\u00f2\5\24\13") - buf.write("\20\u00b8\u00b9\f\16\2\2\u00b9\u00ba\t\6\2\2\u00ba\u00f2") - buf.write("\5\24\13\17\u00bb\u00bc\f\r\2\2\u00bc\u00bd\t\7\2\2\u00bd") - buf.write("\u00f2\5\24\13\16\u00be\u00bf\f\f\2\2\u00bf\u00c0\7\17") - buf.write("\2\2\u00c0\u00f2\5\24\13\r\u00c1\u00c2\f\13\2\2\u00c2") - buf.write("\u00c3\7\20\2\2\u00c3\u00f2\5\24\13\f\u00c4\u00c5\f\n") - buf.write("\2\2\u00c5\u00c6\7\21\2\2\u00c6\u00f2\5\24\13\13\u00c7") - buf.write("\u00c8\f\t\2\2\u00c8\u00c9\t\b\2\2\u00c9\u00f2\5\24\13") - buf.write("\n\u00ca\u00cb\f\7\2\2\u00cb\u00cc\t\t\2\2\u00cc\u00f2") - buf.write("\5\24\13\7\u00cd\u00ce\f\5\2\2\u00ce\u00cf\7\62\2\2\u00cf") - buf.write("\u00f2\5\24\13\5\u00d0\u00d1\f\4\2\2\u00d1\u00d2\7\63") - buf.write("\2\2\u00d2\u00f2\5\24\13\4\u00d3\u00d4\f\3\2\2\u00d4\u00d5") - buf.write("\7\64\2\2\u00d5\u00d6\5\24\13\2\u00d6\u00d7\7\65\2\2\u00d7") - buf.write("\u00d8\5\24\13\3\u00d8\u00f2\3\2\2\2\u00d9\u00da\f\24") - buf.write("\2\2\u00da\u00db\7%\2\2\u00db\u00dc\5\24\13\2\u00dc\u00dd") - buf.write("\7&\2\2\u00dd\u00f2\3\2\2\2\u00de\u00df\f\23\2\2\u00df") - buf.write("\u00e0\7\'\2\2\u00e0\u00f2\7C\2\2\u00e1\u00e2\f\22\2\2") - buf.write("\u00e2\u00e8\7\37\2\2\u00e3\u00e4\5\24\13\2\u00e4\u00e5") - buf.write("\7\25\2\2\u00e5\u00e7\3\2\2\2\u00e6\u00e3\3\2\2\2\u00e7") - buf.write("\u00ea\3\2\2\2\u00e8\u00e6\3\2\2\2\u00e8\u00e9\3\2\2\2") - buf.write("\u00e9\u00ec\3\2\2\2\u00ea\u00e8\3\2\2\2\u00eb\u00ed\5") - buf.write("\24\13\2\u00ec\u00eb\3\2\2\2\u00ec\u00ed\3\2\2\2\u00ed") - buf.write("\u00ee\3\2\2\2\u00ee\u00f2\7 \2\2\u00ef\u00f0\f\b\2\2") - buf.write("\u00f0\u00f2\7*\2\2\u00f1\u00b2\3\2\2\2\u00f1\u00b5\3") - buf.write("\2\2\2\u00f1\u00b8\3\2\2\2\u00f1\u00bb\3\2\2\2\u00f1\u00be") - buf.write("\3\2\2\2\u00f1\u00c1\3\2\2\2\u00f1\u00c4\3\2\2\2\u00f1") - buf.write("\u00c7\3\2\2\2\u00f1\u00ca\3\2\2\2\u00f1\u00cd\3\2\2\2") - buf.write("\u00f1\u00d0\3\2\2\2\u00f1\u00d3\3\2\2\2\u00f1\u00d9\3") - buf.write("\2\2\2\u00f1\u00de\3\2\2\2\u00f1\u00e1\3\2\2\2\u00f1\u00ef") - buf.write("\3\2\2\2\u00f2\u00f5\3\2\2\2\u00f3\u00f1\3\2\2\2\u00f3") - buf.write("\u00f4\3\2\2\2\u00f4\25\3\2\2\2\u00f5\u00f3\3\2\2\2\u00f6") - buf.write("\u010a\7?\2\2\u00f7\u010a\7@\2\2\u00f8\u010a\t\n\2\2\u00f9") - buf.write("\u010a\7A\2\2\u00fa\u010a\7B\2\2\u00fb\u0101\7%\2\2\u00fc") - buf.write("\u00fd\5\24\13\2\u00fd\u00fe\7\25\2\2\u00fe\u0100\3\2") - buf.write("\2\2\u00ff\u00fc\3\2\2\2\u0100\u0103\3\2\2\2\u0101\u00ff") - buf.write("\3\2\2\2\u0101\u0102\3\2\2\2\u0102\u0105\3\2\2\2\u0103") - buf.write("\u0101\3\2\2\2\u0104\u0106\5\24\13\2\u0105\u0104\3\2\2") - buf.write("\2\u0105\u0106\3\2\2\2\u0106\u0107\3\2\2\2\u0107\u010a") - buf.write("\7&\2\2\u0108\u010a\7C\2\2\u0109\u00f6\3\2\2\2\u0109\u00f7") - buf.write("\3\2\2\2\u0109\u00f8\3\2\2\2\u0109\u00f9\3\2\2\2\u0109") - buf.write("\u00fa\3\2\2\2\u0109\u00fb\3\2\2\2\u0109\u0108\3\2\2\2") - buf.write("\u010a\27\3\2\2\2\u010b\u010c\b\r\1\2\u010c\u011d\78\2") - buf.write("\2\u010d\u011d\79\2\2\u010e\u011d\7:\2\2\u010f\u011d\7") - buf.write(";\2\2\u0110\u011d\7<\2\2\u0111\u011d\7=\2\2\u0112\u0113") - buf.write("\7\37\2\2\u0113\u0114\5\30\r\2\u0114\u0115\7 \2\2\u0115") - buf.write("\u011d\3\2\2\2\u0116\u0117\7%\2\2\u0117\u0118\5\30\r\2") - buf.write("\u0118\u0119\7&\2\2\u0119\u011d\3\2\2\2\u011a\u011b\7") - buf.write(">\2\2\u011b\u011d\5\30\r\3\u011c\u010b\3\2\2\2\u011c\u010d") - buf.write("\3\2\2\2\u011c\u010e\3\2\2\2\u011c\u010f\3\2\2\2\u011c") - buf.write("\u0110\3\2\2\2\u011c\u0111\3\2\2\2\u011c\u0112\3\2\2\2") - buf.write("\u011c\u0116\3\2\2\2\u011c\u011a\3\2\2\2\u011d\u0126\3") - buf.write("\2\2\2\u011e\u011f\f\5\2\2\u011f\u0120\7\b\2\2\u0120\u0125") - buf.write("\5\30\r\5\u0121\u0122\f\4\2\2\u0122\u0123\7>\2\2\u0123") - buf.write("\u0125\5\30\r\4\u0124\u011e\3\2\2\2\u0124\u0121\3\2\2") - buf.write("\2\u0125\u0128\3\2\2\2\u0126\u0124\3\2\2\2\u0126\u0127") - buf.write("\3\2\2\2\u0127\31\3\2\2\2\u0128\u0126\3\2\2\2\37\35&+") - buf.write("\618DFMY^nz~\u0082\u0085\u008f\u0098\u00a1\u00b0\u00e8") - buf.write("\u00ec\u00f1\u00f3\u0101\u0105\u0109\u011c\u0124\u0126") + buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") + buf.write("\3\13\3\13\3\13\3\13\7\13\u00ea\n\13\f\13\16\13\u00ed") + buf.write("\13\13\3\13\5\13\u00f0\n\13\3\13\3\13\3\13\7\13\u00f5") + buf.write("\n\13\f\13\16\13\u00f8\13\13\3\f\3\f\3\f\3\f\3\f\3\f\3") + buf.write("\f\3\f\3\f\7\f\u0103\n\f\f\f\16\f\u0106\13\f\3\f\5\f\u0109") + buf.write("\n\f\3\f\3\f\5\f\u010d\n\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r") + buf.write("\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\5\r\u0120\n\r") + buf.write("\3\r\3\r\3\r\3\r\3\r\3\r\7\r\u0128\n\r\f\r\16\r\u012b") + buf.write("\13\r\3\r\2\4\24\30\16\2\4\6\b\n\f\16\20\22\24\26\30\2") + buf.write("\13\3\2\7\21\3\2\22\23\4\2\13\f))\3\2\b\n\3\2\13\f\3\2") + buf.write("\r\16\3\2*+\3\2,\61\3\2\66\67\2\u0162\2\35\3\2\2\2\4&") + buf.write("\3\2\2\2\6F\3\2\2\2\bH\3\2\2\2\n\u0085\3\2\2\2\f\u0087") + buf.write("\3\2\2\2\16\u008d\3\2\2\2\20\u0096\3\2\2\2\22\u00a4\3") + buf.write("\2\2\2\24\u00b3\3\2\2\2\26\u010c\3\2\2\2\30\u011f\3\2") + buf.write("\2\2\32\34\5\4\3\2\33\32\3\2\2\2\34\37\3\2\2\2\35\33\3") + buf.write("\2\2\2\35\36\3\2\2\2\36 \3\2\2\2\37\35\3\2\2\2 !\7\2\2") + buf.write("\3!\3\3\2\2\2\"#\5\6\4\2#$\7\3\2\2$\'\3\2\2\2%\'\5\n\6") + buf.write("\2&\"\3\2\2\2&%\3\2\2\2\'\5\3\2\2\2(G\7\4\2\2)+\7\5\2") + buf.write("\2*,\5\22\n\2+*\3\2\2\2+,\3\2\2\2,G\3\2\2\2-.\5\30\r\2") + buf.write(".\61\7C\2\2/\60\7\6\2\2\60\62\5\22\n\2\61/\3\2\2\2\61") + buf.write("\62\3\2\2\2\62G\3\2\2\2\63\64\5\b\5\2\64\65\7\6\2\2\65") + buf.write("\67\3\2\2\2\66\63\3\2\2\2\67:\3\2\2\28\66\3\2\2\289\3") + buf.write("\2\2\29;\3\2\2\2:8\3\2\2\2;G\5\22\n\2<=\5\24\13\2=>\t") + buf.write("\2\2\2>?\7\6\2\2?@\5\24\13\2@G\3\2\2\2AG\t\3\2\2BD\7\24") + buf.write("\2\2CE\5\22\n\2DC\3\2\2\2DE\3\2\2\2EG\3\2\2\2F(\3\2\2") + buf.write("\2F)\3\2\2\2F-\3\2\2\2F8\3\2\2\2F<\3\2\2\2FA\3\2\2\2F") + buf.write("B\3\2\2\2G\7\3\2\2\2HM\5\24\13\2IJ\7\25\2\2JL\5\24\13") + buf.write("\2KI\3\2\2\2LO\3\2\2\2MK\3\2\2\2MN\3\2\2\2N\t\3\2\2\2") + buf.write("OM\3\2\2\2PQ\7\26\2\2QR\5\24\13\2RY\5\16\b\2ST\7\27\2") + buf.write("\2TU\5\24\13\2UV\5\16\b\2VX\3\2\2\2WS\3\2\2\2X[\3\2\2") + buf.write("\2YW\3\2\2\2YZ\3\2\2\2Z^\3\2\2\2[Y\3\2\2\2\\]\7\30\2\2") + buf.write("]_\5\16\b\2^\\\3\2\2\2^_\3\2\2\2_\u0086\3\2\2\2`a\7\31") + buf.write("\2\2ab\5\24\13\2bc\5\16\b\2c\u0086\3\2\2\2de\7\32\2\2") + buf.write("ef\5\24\13\2fg\5\16\b\2g\u0086\3\2\2\2hi\7\33\2\2ij\5") + buf.write("\22\n\2jk\7\34\2\2kn\5\22\n\2lm\7\35\2\2mo\5\22\n\2nl") + buf.write("\3\2\2\2no\3\2\2\2op\3\2\2\2pq\5\16\b\2q\u0086\3\2\2\2") + buf.write("rs\7\36\2\2st\7C\2\2tz\7\37\2\2uv\5\f\7\2vw\7\25\2\2w") + buf.write("y\3\2\2\2xu\3\2\2\2y|\3\2\2\2zx\3\2\2\2z{\3\2\2\2{~\3") + buf.write("\2\2\2|z\3\2\2\2}\177\5\f\7\2~}\3\2\2\2~\177\3\2\2\2\177") + buf.write("\u0080\3\2\2\2\u0080\u0082\7 \2\2\u0081\u0083\5\30\r\2") + buf.write("\u0082\u0081\3\2\2\2\u0082\u0083\3\2\2\2\u0083\u0084\3") + buf.write("\2\2\2\u0084\u0086\5\20\t\2\u0085P\3\2\2\2\u0085`\3\2") + buf.write("\2\2\u0085d\3\2\2\2\u0085h\3\2\2\2\u0085r\3\2\2\2\u0086") + buf.write("\13\3\2\2\2\u0087\u0088\5\30\r\2\u0088\u008b\7C\2\2\u0089") + buf.write("\u008a\7!\2\2\u008a\u008c\5\24\13\2\u008b\u0089\3\2\2") + buf.write("\2\u008b\u008c\3\2\2\2\u008c\r\3\2\2\2\u008d\u008e\7\"") + buf.write("\2\2\u008e\u0090\7#\2\2\u008f\u0091\5\4\3\2\u0090\u008f") + buf.write("\3\2\2\2\u0091\u0092\3\2\2\2\u0092\u0090\3\2\2\2\u0092") + buf.write("\u0093\3\2\2\2\u0093\u0094\3\2\2\2\u0094\u0095\7$\2\2") + buf.write("\u0095\17\3\2\2\2\u0096\u0097\7%\2\2\u0097\u0099\7#\2") + buf.write("\2\u0098\u009a\5\4\3\2\u0099\u0098\3\2\2\2\u009a\u009b") + buf.write("\3\2\2\2\u009b\u0099\3\2\2\2\u009b\u009c\3\2\2\2\u009c") + buf.write("\u009d\3\2\2\2\u009d\u009e\7$\2\2\u009e\21\3\2\2\2\u009f") + buf.write("\u00a0\5\24\13\2\u00a0\u00a1\7\25\2\2\u00a1\u00a3\3\2") + buf.write("\2\2\u00a2\u009f\3\2\2\2\u00a3\u00a6\3\2\2\2\u00a4\u00a2") + buf.write("\3\2\2\2\u00a4\u00a5\3\2\2\2\u00a5\u00a7\3\2\2\2\u00a6") + buf.write("\u00a4\3\2\2\2\u00a7\u00a8\5\24\13\2\u00a8\23\3\2\2\2") + buf.write("\u00a9\u00aa\b\13\1\2\u00aa\u00b4\5\26\f\2\u00ab\u00ac") + buf.write("\7\37\2\2\u00ac\u00ad\5\22\n\2\u00ad\u00ae\7 \2\2\u00ae") + buf.write("\u00b4\3\2\2\2\u00af\u00b0\t\4\2\2\u00b0\u00b4\5\24\13") + buf.write("\20\u00b1\u00b2\7\62\2\2\u00b2\u00b4\5\24\13\6\u00b3\u00a9") + buf.write("\3\2\2\2\u00b3\u00ab\3\2\2\2\u00b3\u00af\3\2\2\2\u00b3") + buf.write("\u00b1\3\2\2\2\u00b4\u00f6\3\2\2\2\u00b5\u00b6\f\21\2") + buf.write("\2\u00b6\u00b7\7\7\2\2\u00b7\u00f5\5\24\13\21\u00b8\u00b9") + buf.write("\f\17\2\2\u00b9\u00ba\t\5\2\2\u00ba\u00f5\5\24\13\20\u00bb") + buf.write("\u00bc\f\16\2\2\u00bc\u00bd\t\6\2\2\u00bd\u00f5\5\24\13") + buf.write("\17\u00be\u00bf\f\r\2\2\u00bf\u00c0\t\7\2\2\u00c0\u00f5") + buf.write("\5\24\13\16\u00c1\u00c2\f\f\2\2\u00c2\u00c3\7\17\2\2\u00c3") + buf.write("\u00f5\5\24\13\r\u00c4\u00c5\f\13\2\2\u00c5\u00c6\7\20") + buf.write("\2\2\u00c6\u00f5\5\24\13\f\u00c7\u00c8\f\n\2\2\u00c8\u00c9") + buf.write("\7\21\2\2\u00c9\u00f5\5\24\13\13\u00ca\u00cb\f\t\2\2\u00cb") + buf.write("\u00cc\t\b\2\2\u00cc\u00f5\5\24\13\n\u00cd\u00ce\f\7\2") + buf.write("\2\u00ce\u00cf\t\t\2\2\u00cf\u00f5\5\24\13\7\u00d0\u00d1") + buf.write("\f\5\2\2\u00d1\u00d2\7\63\2\2\u00d2\u00f5\5\24\13\5\u00d3") + buf.write("\u00d4\f\4\2\2\u00d4\u00d5\7\64\2\2\u00d5\u00f5\5\24\13") + buf.write("\4\u00d6\u00d7\f\3\2\2\u00d7\u00d8\7\65\2\2\u00d8\u00d9") + buf.write("\5\24\13\2\u00d9\u00da\7!\2\2\u00da\u00db\5\24\13\3\u00db") + buf.write("\u00f5\3\2\2\2\u00dc\u00dd\f\24\2\2\u00dd\u00de\7&\2\2") + buf.write("\u00de\u00df\5\24\13\2\u00df\u00e0\7\'\2\2\u00e0\u00f5") + buf.write("\3\2\2\2\u00e1\u00e2\f\23\2\2\u00e2\u00e3\7(\2\2\u00e3") + buf.write("\u00f5\7C\2\2\u00e4\u00e5\f\22\2\2\u00e5\u00eb\7\37\2") + buf.write("\2\u00e6\u00e7\5\24\13\2\u00e7\u00e8\7\25\2\2\u00e8\u00ea") + buf.write("\3\2\2\2\u00e9\u00e6\3\2\2\2\u00ea\u00ed\3\2\2\2\u00eb") + buf.write("\u00e9\3\2\2\2\u00eb\u00ec\3\2\2\2\u00ec\u00ef\3\2\2\2") + buf.write("\u00ed\u00eb\3\2\2\2\u00ee\u00f0\5\24\13\2\u00ef\u00ee") + buf.write("\3\2\2\2\u00ef\u00f0\3\2\2\2\u00f0\u00f1\3\2\2\2\u00f1") + buf.write("\u00f5\7 \2\2\u00f2\u00f3\f\b\2\2\u00f3\u00f5\7+\2\2\u00f4") + buf.write("\u00b5\3\2\2\2\u00f4\u00b8\3\2\2\2\u00f4\u00bb\3\2\2\2") + buf.write("\u00f4\u00be\3\2\2\2\u00f4\u00c1\3\2\2\2\u00f4\u00c4\3") + buf.write("\2\2\2\u00f4\u00c7\3\2\2\2\u00f4\u00ca\3\2\2\2\u00f4\u00cd") + buf.write("\3\2\2\2\u00f4\u00d0\3\2\2\2\u00f4\u00d3\3\2\2\2\u00f4") + buf.write("\u00d6\3\2\2\2\u00f4\u00dc\3\2\2\2\u00f4\u00e1\3\2\2\2") + buf.write("\u00f4\u00e4\3\2\2\2\u00f4\u00f2\3\2\2\2\u00f5\u00f8\3") + buf.write("\2\2\2\u00f6\u00f4\3\2\2\2\u00f6\u00f7\3\2\2\2\u00f7\25") + buf.write("\3\2\2\2\u00f8\u00f6\3\2\2\2\u00f9\u010d\7?\2\2\u00fa") + buf.write("\u010d\7@\2\2\u00fb\u010d\t\n\2\2\u00fc\u010d\7A\2\2\u00fd") + buf.write("\u010d\7B\2\2\u00fe\u0104\7&\2\2\u00ff\u0100\5\24\13\2") + buf.write("\u0100\u0101\7\25\2\2\u0101\u0103\3\2\2\2\u0102\u00ff") + buf.write("\3\2\2\2\u0103\u0106\3\2\2\2\u0104\u0102\3\2\2\2\u0104") + buf.write("\u0105\3\2\2\2\u0105\u0108\3\2\2\2\u0106\u0104\3\2\2\2") + buf.write("\u0107\u0109\5\24\13\2\u0108\u0107\3\2\2\2\u0108\u0109") + buf.write("\3\2\2\2\u0109\u010a\3\2\2\2\u010a\u010d\7\'\2\2\u010b") + buf.write("\u010d\7C\2\2\u010c\u00f9\3\2\2\2\u010c\u00fa\3\2\2\2") + buf.write("\u010c\u00fb\3\2\2\2\u010c\u00fc\3\2\2\2\u010c\u00fd\3") + buf.write("\2\2\2\u010c\u00fe\3\2\2\2\u010c\u010b\3\2\2\2\u010d\27") + buf.write("\3\2\2\2\u010e\u010f\b\r\1\2\u010f\u0120\78\2\2\u0110") + buf.write("\u0120\79\2\2\u0111\u0120\7:\2\2\u0112\u0120\7;\2\2\u0113") + buf.write("\u0120\7<\2\2\u0114\u0120\7=\2\2\u0115\u0116\7\37\2\2") + buf.write("\u0116\u0117\5\30\r\2\u0117\u0118\7 \2\2\u0118\u0120\3") + buf.write("\2\2\2\u0119\u011a\7&\2\2\u011a\u011b\5\30\r\2\u011b\u011c") + buf.write("\7\'\2\2\u011c\u0120\3\2\2\2\u011d\u011e\7>\2\2\u011e") + buf.write("\u0120\5\30\r\3\u011f\u010e\3\2\2\2\u011f\u0110\3\2\2") + buf.write("\2\u011f\u0111\3\2\2\2\u011f\u0112\3\2\2\2\u011f\u0113") + buf.write("\3\2\2\2\u011f\u0114\3\2\2\2\u011f\u0115\3\2\2\2\u011f") + buf.write("\u0119\3\2\2\2\u011f\u011d\3\2\2\2\u0120\u0129\3\2\2\2") + buf.write("\u0121\u0122\f\5\2\2\u0122\u0123\7\b\2\2\u0123\u0128\5") + buf.write("\30\r\5\u0124\u0125\f\4\2\2\u0125\u0126\7>\2\2\u0126\u0128") + buf.write("\5\30\r\4\u0127\u0121\3\2\2\2\u0127\u0124\3\2\2\2\u0128") + buf.write("\u012b\3\2\2\2\u0129\u0127\3\2\2\2\u0129\u012a\3\2\2\2") + buf.write("\u012a\31\3\2\2\2\u012b\u0129\3\2\2\2 \35&+\618DFMY^n") + buf.write("z~\u0082\u0085\u008b\u0092\u009b\u00a4\u00b3\u00eb\u00ef") + buf.write("\u00f4\u00f6\u0104\u0108\u010c\u011f\u0127\u0129") return buf.getvalue() @@ -166,9 +168,9 @@ class PyxellParser ( Parser ): "'&'", "'$'", "'|'", "'break'", "'continue'", "'return'", "','", "'if'", "'elif'", "'else'", "'while'", "'until'", "'for'", "'in'", "'step'", "'func'", "'('", "')'", - "'do'", "'{'", "'}'", "'def'", "'['", "']'", "'.'", - "'~'", "'..'", "'...'", "'=='", "'!='", "'<'", "'<='", - "'>'", "'>='", "'not'", "'and'", "'or'", "'?'", "':'", + "':'", "'do'", "'{'", "'}'", "'def'", "'['", "']'", + "'.'", "'~'", "'..'", "'...'", "'=='", "'!='", "'<'", + "'<='", "'>'", "'>='", "'not'", "'and'", "'or'", "'?'", "'true'", "'false'", "'Void'", "'Int'", "'Float'", "'Bool'", "'Char'", "'String'", "'->'" ] @@ -323,7 +325,7 @@ def program(self): self.state = 27 self._errHandler.sync(self) _la = self._input.LA(1) - while ((((_la - 2)) & ~0x3f) == 0 and ((1 << (_la - 2)) & ((1 << (PyxellParser.T__1 - 2)) | (1 << (PyxellParser.T__2 - 2)) | (1 << (PyxellParser.T__8 - 2)) | (1 << (PyxellParser.T__9 - 2)) | (1 << (PyxellParser.T__15 - 2)) | (1 << (PyxellParser.T__16 - 2)) | (1 << (PyxellParser.T__17 - 2)) | (1 << (PyxellParser.T__19 - 2)) | (1 << (PyxellParser.T__22 - 2)) | (1 << (PyxellParser.T__23 - 2)) | (1 << (PyxellParser.T__24 - 2)) | (1 << (PyxellParser.T__27 - 2)) | (1 << (PyxellParser.T__28 - 2)) | (1 << (PyxellParser.T__34 - 2)) | (1 << (PyxellParser.T__37 - 2)) | (1 << (PyxellParser.T__46 - 2)) | (1 << (PyxellParser.T__51 - 2)) | (1 << (PyxellParser.T__52 - 2)) | (1 << (PyxellParser.T__53 - 2)) | (1 << (PyxellParser.T__54 - 2)) | (1 << (PyxellParser.T__55 - 2)) | (1 << (PyxellParser.T__56 - 2)) | (1 << (PyxellParser.T__57 - 2)) | (1 << (PyxellParser.T__58 - 2)) | (1 << (PyxellParser.T__59 - 2)) | (1 << (PyxellParser.INT - 2)) | (1 << (PyxellParser.FLOAT - 2)) | (1 << (PyxellParser.CHAR - 2)) | (1 << (PyxellParser.STRING - 2)) | (1 << (PyxellParser.ID - 2)))) != 0): + while ((((_la - 2)) & ~0x3f) == 0 and ((1 << (_la - 2)) & ((1 << (PyxellParser.T__1 - 2)) | (1 << (PyxellParser.T__2 - 2)) | (1 << (PyxellParser.T__8 - 2)) | (1 << (PyxellParser.T__9 - 2)) | (1 << (PyxellParser.T__15 - 2)) | (1 << (PyxellParser.T__16 - 2)) | (1 << (PyxellParser.T__17 - 2)) | (1 << (PyxellParser.T__19 - 2)) | (1 << (PyxellParser.T__22 - 2)) | (1 << (PyxellParser.T__23 - 2)) | (1 << (PyxellParser.T__24 - 2)) | (1 << (PyxellParser.T__27 - 2)) | (1 << (PyxellParser.T__28 - 2)) | (1 << (PyxellParser.T__35 - 2)) | (1 << (PyxellParser.T__38 - 2)) | (1 << (PyxellParser.T__47 - 2)) | (1 << (PyxellParser.T__51 - 2)) | (1 << (PyxellParser.T__52 - 2)) | (1 << (PyxellParser.T__53 - 2)) | (1 << (PyxellParser.T__54 - 2)) | (1 << (PyxellParser.T__55 - 2)) | (1 << (PyxellParser.T__56 - 2)) | (1 << (PyxellParser.T__57 - 2)) | (1 << (PyxellParser.T__58 - 2)) | (1 << (PyxellParser.T__59 - 2)) | (1 << (PyxellParser.INT - 2)) | (1 << (PyxellParser.FLOAT - 2)) | (1 << (PyxellParser.CHAR - 2)) | (1 << (PyxellParser.STRING - 2)) | (1 << (PyxellParser.ID - 2)))) != 0): self.state = 24 self.stmt() self.state = 29 @@ -375,7 +377,7 @@ def stmt(self): self.state = 36 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__15, PyxellParser.T__16, PyxellParser.T__17, PyxellParser.T__28, PyxellParser.T__34, PyxellParser.T__37, PyxellParser.T__46, PyxellParser.T__51, PyxellParser.T__52, PyxellParser.T__53, PyxellParser.T__54, PyxellParser.T__55, PyxellParser.T__56, PyxellParser.T__57, PyxellParser.T__58, PyxellParser.T__59, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: + if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__15, PyxellParser.T__16, PyxellParser.T__17, PyxellParser.T__28, PyxellParser.T__35, PyxellParser.T__38, PyxellParser.T__47, PyxellParser.T__51, PyxellParser.T__52, PyxellParser.T__53, PyxellParser.T__54, PyxellParser.T__55, PyxellParser.T__56, PyxellParser.T__57, PyxellParser.T__58, PyxellParser.T__59, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: self.enterOuterAlt(localctx, 1) self.state = 32 self.simple_stmt() @@ -569,7 +571,7 @@ def simple_stmt(self): self.state = 41 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 9)) & ~0x3f) == 0 and ((1 << (_la - 9)) & ((1 << (PyxellParser.T__8 - 9)) | (1 << (PyxellParser.T__9 - 9)) | (1 << (PyxellParser.T__28 - 9)) | (1 << (PyxellParser.T__34 - 9)) | (1 << (PyxellParser.T__37 - 9)) | (1 << (PyxellParser.T__46 - 9)) | (1 << (PyxellParser.T__51 - 9)) | (1 << (PyxellParser.T__52 - 9)) | (1 << (PyxellParser.INT - 9)) | (1 << (PyxellParser.FLOAT - 9)) | (1 << (PyxellParser.CHAR - 9)) | (1 << (PyxellParser.STRING - 9)) | (1 << (PyxellParser.ID - 9)))) != 0): + if ((((_la - 9)) & ~0x3f) == 0 and ((1 << (_la - 9)) & ((1 << (PyxellParser.T__8 - 9)) | (1 << (PyxellParser.T__9 - 9)) | (1 << (PyxellParser.T__28 - 9)) | (1 << (PyxellParser.T__35 - 9)) | (1 << (PyxellParser.T__38 - 9)) | (1 << (PyxellParser.T__47 - 9)) | (1 << (PyxellParser.T__51 - 9)) | (1 << (PyxellParser.T__52 - 9)) | (1 << (PyxellParser.INT - 9)) | (1 << (PyxellParser.FLOAT - 9)) | (1 << (PyxellParser.CHAR - 9)) | (1 << (PyxellParser.STRING - 9)) | (1 << (PyxellParser.ID - 9)))) != 0): self.state = 40 self.tuple_expr() @@ -655,7 +657,7 @@ def simple_stmt(self): self.state = 66 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 9)) & ~0x3f) == 0 and ((1 << (_la - 9)) & ((1 << (PyxellParser.T__8 - 9)) | (1 << (PyxellParser.T__9 - 9)) | (1 << (PyxellParser.T__28 - 9)) | (1 << (PyxellParser.T__34 - 9)) | (1 << (PyxellParser.T__37 - 9)) | (1 << (PyxellParser.T__46 - 9)) | (1 << (PyxellParser.T__51 - 9)) | (1 << (PyxellParser.T__52 - 9)) | (1 << (PyxellParser.INT - 9)) | (1 << (PyxellParser.FLOAT - 9)) | (1 << (PyxellParser.CHAR - 9)) | (1 << (PyxellParser.STRING - 9)) | (1 << (PyxellParser.ID - 9)))) != 0): + if ((((_la - 9)) & ~0x3f) == 0 and ((1 << (_la - 9)) & ((1 << (PyxellParser.T__8 - 9)) | (1 << (PyxellParser.T__9 - 9)) | (1 << (PyxellParser.T__28 - 9)) | (1 << (PyxellParser.T__35 - 9)) | (1 << (PyxellParser.T__38 - 9)) | (1 << (PyxellParser.T__47 - 9)) | (1 << (PyxellParser.T__51 - 9)) | (1 << (PyxellParser.T__52 - 9)) | (1 << (PyxellParser.INT - 9)) | (1 << (PyxellParser.FLOAT - 9)) | (1 << (PyxellParser.CHAR - 9)) | (1 << (PyxellParser.STRING - 9)) | (1 << (PyxellParser.ID - 9)))) != 0): self.state = 65 self.tuple_expr() @@ -975,7 +977,7 @@ def compound_stmt(self): self.state = 124 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__28) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__53) | (1 << PyxellParser.T__54) | (1 << PyxellParser.T__55) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59))) != 0): + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__28) | (1 << PyxellParser.T__35) | (1 << PyxellParser.T__53) | (1 << PyxellParser.T__54) | (1 << PyxellParser.T__55) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59))) != 0): self.state = 123 self.arg() @@ -985,7 +987,7 @@ def compound_stmt(self): self.state = 128 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__28) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__53) | (1 << PyxellParser.T__54) | (1 << PyxellParser.T__55) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59))) != 0): + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__28) | (1 << PyxellParser.T__35) | (1 << PyxellParser.T__53) | (1 << PyxellParser.T__54) | (1 << PyxellParser.T__55) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59))) != 0): self.state = 127 localctx.ret = self.typ(0) @@ -1010,6 +1012,7 @@ class ArgContext(ParserRuleContext): def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) self.parser = parser + self.default = None # ExprContext def typ(self): return self.getTypedRuleContext(PyxellParser.TypContext,0) @@ -1018,6 +1021,10 @@ def typ(self): def ID(self): return self.getToken(PyxellParser.ID, 0) + def expr(self): + return self.getTypedRuleContext(PyxellParser.ExprContext,0) + + def getRuleIndex(self): return PyxellParser.RULE_arg @@ -1034,12 +1041,23 @@ def arg(self): localctx = PyxellParser.ArgContext(self, self._ctx, self.state) self.enterRule(localctx, 10, self.RULE_arg) + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 133 self.typ(0) self.state = 134 self.match(PyxellParser.ID) + self.state = 137 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==PyxellParser.T__30: + self.state = 135 + self.match(PyxellParser.T__30) + self.state = 136 + localctx.default = self.expr(0) + + except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -1081,24 +1099,24 @@ def do_block(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 136 - self.match(PyxellParser.T__30) - self.state = 137 + self.state = 139 self.match(PyxellParser.T__31) - self.state = 139 + self.state = 140 + self.match(PyxellParser.T__32) + self.state = 142 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 138 + self.state = 141 self.stmt() - self.state = 141 + self.state = 144 self._errHandler.sync(self) _la = self._input.LA(1) - if not (((((_la - 2)) & ~0x3f) == 0 and ((1 << (_la - 2)) & ((1 << (PyxellParser.T__1 - 2)) | (1 << (PyxellParser.T__2 - 2)) | (1 << (PyxellParser.T__8 - 2)) | (1 << (PyxellParser.T__9 - 2)) | (1 << (PyxellParser.T__15 - 2)) | (1 << (PyxellParser.T__16 - 2)) | (1 << (PyxellParser.T__17 - 2)) | (1 << (PyxellParser.T__19 - 2)) | (1 << (PyxellParser.T__22 - 2)) | (1 << (PyxellParser.T__23 - 2)) | (1 << (PyxellParser.T__24 - 2)) | (1 << (PyxellParser.T__27 - 2)) | (1 << (PyxellParser.T__28 - 2)) | (1 << (PyxellParser.T__34 - 2)) | (1 << (PyxellParser.T__37 - 2)) | (1 << (PyxellParser.T__46 - 2)) | (1 << (PyxellParser.T__51 - 2)) | (1 << (PyxellParser.T__52 - 2)) | (1 << (PyxellParser.T__53 - 2)) | (1 << (PyxellParser.T__54 - 2)) | (1 << (PyxellParser.T__55 - 2)) | (1 << (PyxellParser.T__56 - 2)) | (1 << (PyxellParser.T__57 - 2)) | (1 << (PyxellParser.T__58 - 2)) | (1 << (PyxellParser.T__59 - 2)) | (1 << (PyxellParser.INT - 2)) | (1 << (PyxellParser.FLOAT - 2)) | (1 << (PyxellParser.CHAR - 2)) | (1 << (PyxellParser.STRING - 2)) | (1 << (PyxellParser.ID - 2)))) != 0)): + if not (((((_la - 2)) & ~0x3f) == 0 and ((1 << (_la - 2)) & ((1 << (PyxellParser.T__1 - 2)) | (1 << (PyxellParser.T__2 - 2)) | (1 << (PyxellParser.T__8 - 2)) | (1 << (PyxellParser.T__9 - 2)) | (1 << (PyxellParser.T__15 - 2)) | (1 << (PyxellParser.T__16 - 2)) | (1 << (PyxellParser.T__17 - 2)) | (1 << (PyxellParser.T__19 - 2)) | (1 << (PyxellParser.T__22 - 2)) | (1 << (PyxellParser.T__23 - 2)) | (1 << (PyxellParser.T__24 - 2)) | (1 << (PyxellParser.T__27 - 2)) | (1 << (PyxellParser.T__28 - 2)) | (1 << (PyxellParser.T__35 - 2)) | (1 << (PyxellParser.T__38 - 2)) | (1 << (PyxellParser.T__47 - 2)) | (1 << (PyxellParser.T__51 - 2)) | (1 << (PyxellParser.T__52 - 2)) | (1 << (PyxellParser.T__53 - 2)) | (1 << (PyxellParser.T__54 - 2)) | (1 << (PyxellParser.T__55 - 2)) | (1 << (PyxellParser.T__56 - 2)) | (1 << (PyxellParser.T__57 - 2)) | (1 << (PyxellParser.T__58 - 2)) | (1 << (PyxellParser.T__59 - 2)) | (1 << (PyxellParser.INT - 2)) | (1 << (PyxellParser.FLOAT - 2)) | (1 << (PyxellParser.CHAR - 2)) | (1 << (PyxellParser.STRING - 2)) | (1 << (PyxellParser.ID - 2)))) != 0)): break - self.state = 143 - self.match(PyxellParser.T__32) + self.state = 146 + self.match(PyxellParser.T__33) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -1140,24 +1158,24 @@ def def_block(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 145 - self.match(PyxellParser.T__33) - self.state = 146 - self.match(PyxellParser.T__31) - self.state = 148 + self.state = 148 + self.match(PyxellParser.T__34) + self.state = 149 + self.match(PyxellParser.T__32) + self.state = 151 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 147 + self.state = 150 self.stmt() - self.state = 150 + self.state = 153 self._errHandler.sync(self) _la = self._input.LA(1) - if not (((((_la - 2)) & ~0x3f) == 0 and ((1 << (_la - 2)) & ((1 << (PyxellParser.T__1 - 2)) | (1 << (PyxellParser.T__2 - 2)) | (1 << (PyxellParser.T__8 - 2)) | (1 << (PyxellParser.T__9 - 2)) | (1 << (PyxellParser.T__15 - 2)) | (1 << (PyxellParser.T__16 - 2)) | (1 << (PyxellParser.T__17 - 2)) | (1 << (PyxellParser.T__19 - 2)) | (1 << (PyxellParser.T__22 - 2)) | (1 << (PyxellParser.T__23 - 2)) | (1 << (PyxellParser.T__24 - 2)) | (1 << (PyxellParser.T__27 - 2)) | (1 << (PyxellParser.T__28 - 2)) | (1 << (PyxellParser.T__34 - 2)) | (1 << (PyxellParser.T__37 - 2)) | (1 << (PyxellParser.T__46 - 2)) | (1 << (PyxellParser.T__51 - 2)) | (1 << (PyxellParser.T__52 - 2)) | (1 << (PyxellParser.T__53 - 2)) | (1 << (PyxellParser.T__54 - 2)) | (1 << (PyxellParser.T__55 - 2)) | (1 << (PyxellParser.T__56 - 2)) | (1 << (PyxellParser.T__57 - 2)) | (1 << (PyxellParser.T__58 - 2)) | (1 << (PyxellParser.T__59 - 2)) | (1 << (PyxellParser.INT - 2)) | (1 << (PyxellParser.FLOAT - 2)) | (1 << (PyxellParser.CHAR - 2)) | (1 << (PyxellParser.STRING - 2)) | (1 << (PyxellParser.ID - 2)))) != 0)): + if not (((((_la - 2)) & ~0x3f) == 0 and ((1 << (_la - 2)) & ((1 << (PyxellParser.T__1 - 2)) | (1 << (PyxellParser.T__2 - 2)) | (1 << (PyxellParser.T__8 - 2)) | (1 << (PyxellParser.T__9 - 2)) | (1 << (PyxellParser.T__15 - 2)) | (1 << (PyxellParser.T__16 - 2)) | (1 << (PyxellParser.T__17 - 2)) | (1 << (PyxellParser.T__19 - 2)) | (1 << (PyxellParser.T__22 - 2)) | (1 << (PyxellParser.T__23 - 2)) | (1 << (PyxellParser.T__24 - 2)) | (1 << (PyxellParser.T__27 - 2)) | (1 << (PyxellParser.T__28 - 2)) | (1 << (PyxellParser.T__35 - 2)) | (1 << (PyxellParser.T__38 - 2)) | (1 << (PyxellParser.T__47 - 2)) | (1 << (PyxellParser.T__51 - 2)) | (1 << (PyxellParser.T__52 - 2)) | (1 << (PyxellParser.T__53 - 2)) | (1 << (PyxellParser.T__54 - 2)) | (1 << (PyxellParser.T__55 - 2)) | (1 << (PyxellParser.T__56 - 2)) | (1 << (PyxellParser.T__57 - 2)) | (1 << (PyxellParser.T__58 - 2)) | (1 << (PyxellParser.T__59 - 2)) | (1 << (PyxellParser.INT - 2)) | (1 << (PyxellParser.FLOAT - 2)) | (1 << (PyxellParser.CHAR - 2)) | (1 << (PyxellParser.STRING - 2)) | (1 << (PyxellParser.ID - 2)))) != 0)): break - self.state = 152 - self.match(PyxellParser.T__32) + self.state = 155 + self.match(PyxellParser.T__33) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -1211,20 +1229,20 @@ def tuple_expr(self): try: localctx = PyxellParser.ExprTupleContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 159 + self.state = 162 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,17,self._ctx) + _alt = self._interp.adaptivePredict(self._input,18,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 154 + self.state = 157 self.expr(0) - self.state = 155 + self.state = 158 self.match(PyxellParser.T__18) - self.state = 161 + self.state = 164 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,17,self._ctx) + _alt = self._interp.adaptivePredict(self._input,18,self._ctx) - self.state = 162 + self.state = 165 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -1476,88 +1494,88 @@ def expr(self, _p:int=0): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 174 + self.state = 177 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__34, PyxellParser.T__51, PyxellParser.T__52, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: + if token in [PyxellParser.T__35, PyxellParser.T__51, PyxellParser.T__52, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: localctx = PyxellParser.ExprAtomContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 165 + self.state = 168 self.atom() pass elif token in [PyxellParser.T__28]: localctx = PyxellParser.ExprParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 166 + self.state = 169 self.match(PyxellParser.T__28) - self.state = 167 + self.state = 170 self.tuple_expr() - self.state = 168 + self.state = 171 self.match(PyxellParser.T__29) pass - elif token in [PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__37]: + elif token in [PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__38]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 170 + self.state = 173 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__37))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__38))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 171 + self.state = 174 self.expr(14) pass - elif token in [PyxellParser.T__46]: + elif token in [PyxellParser.T__47]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 172 - localctx.op = self.match(PyxellParser.T__46) - self.state = 173 + self.state = 175 + localctx.op = self.match(PyxellParser.T__47) + self.state = 176 self.expr(4) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 241 + self.state = 244 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,22,self._ctx) + _alt = self._interp.adaptivePredict(self._input,23,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 239 + self.state = 242 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,21,self._ctx) + la_ = self._interp.adaptivePredict(self._input,22,self._ctx) if la_ == 1: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 176 + self.state = 179 if not self.precpred(self._ctx, 15): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 15)") - self.state = 177 + self.state = 180 localctx.op = self.match(PyxellParser.T__4) - self.state = 178 + self.state = 181 self.expr(15) pass elif la_ == 2: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 179 + self.state = 182 if not self.precpred(self._ctx, 13): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") - self.state = 180 + self.state = 183 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__7))) != 0)): @@ -1565,18 +1583,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 181 + self.state = 184 self.expr(14) pass elif la_ == 3: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 182 + self.state = 185 if not self.precpred(self._ctx, 12): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 12)") - self.state = 183 + self.state = 186 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__8 or _la==PyxellParser.T__9): @@ -1584,18 +1602,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 184 + self.state = 187 self.expr(13) pass elif la_ == 4: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 185 + self.state = 188 if not self.precpred(self._ctx, 11): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") - self.state = 186 + self.state = 189 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__10 or _la==PyxellParser.T__11): @@ -1603,207 +1621,207 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 187 + self.state = 190 self.expr(12) pass elif la_ == 5: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 188 + self.state = 191 if not self.precpred(self._ctx, 10): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") - self.state = 189 + self.state = 192 localctx.op = self.match(PyxellParser.T__12) - self.state = 190 + self.state = 193 self.expr(11) pass elif la_ == 6: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 191 + self.state = 194 if not self.precpred(self._ctx, 9): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") - self.state = 192 + self.state = 195 localctx.op = self.match(PyxellParser.T__13) - self.state = 193 + self.state = 196 self.expr(10) pass elif la_ == 7: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 194 + self.state = 197 if not self.precpred(self._ctx, 8): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") - self.state = 195 + self.state = 198 localctx.op = self.match(PyxellParser.T__14) - self.state = 196 + self.state = 199 self.expr(9) pass elif la_ == 8: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 197 + self.state = 200 if not self.precpred(self._ctx, 7): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") - self.state = 198 + self.state = 201 localctx.dots = self._input.LT(1) _la = self._input.LA(1) - if not(_la==PyxellParser.T__38 or _la==PyxellParser.T__39): + if not(_la==PyxellParser.T__39 or _la==PyxellParser.T__40): localctx.dots = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 199 + self.state = 202 self.expr(8) pass elif la_ == 9: localctx = PyxellParser.ExprCmpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 200 + self.state = 203 if not self.precpred(self._ctx, 5): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") - self.state = 201 + self.state = 204 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__40) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__42) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__44) | (1 << PyxellParser.T__45))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__41) | (1 << PyxellParser.T__42) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__44) | (1 << PyxellParser.T__45) | (1 << PyxellParser.T__46))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 202 + self.state = 205 self.expr(5) pass elif la_ == 10: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 203 + self.state = 206 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 204 - localctx.op = self.match(PyxellParser.T__47) - self.state = 205 + self.state = 207 + localctx.op = self.match(PyxellParser.T__48) + self.state = 208 self.expr(3) pass elif la_ == 11: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 206 + self.state = 209 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 207 - localctx.op = self.match(PyxellParser.T__48) - self.state = 208 + self.state = 210 + localctx.op = self.match(PyxellParser.T__49) + self.state = 211 self.expr(2) pass elif la_ == 12: localctx = PyxellParser.ExprCondContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 209 + self.state = 212 if not self.precpred(self._ctx, 1): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") - self.state = 210 - self.match(PyxellParser.T__49) - self.state = 211 - self.expr(0) - self.state = 212 - self.match(PyxellParser.T__50) self.state = 213 + self.match(PyxellParser.T__50) + self.state = 214 + self.expr(0) + self.state = 215 + self.match(PyxellParser.T__30) + self.state = 216 self.expr(1) pass elif la_ == 13: localctx = PyxellParser.ExprIndexContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 215 + self.state = 218 if not self.precpred(self._ctx, 18): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 18)") - self.state = 216 - self.match(PyxellParser.T__34) - self.state = 217 - self.expr(0) - self.state = 218 + self.state = 219 self.match(PyxellParser.T__35) + self.state = 220 + self.expr(0) + self.state = 221 + self.match(PyxellParser.T__36) pass elif la_ == 14: localctx = PyxellParser.ExprAttrContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 220 + self.state = 223 if not self.precpred(self._ctx, 17): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 17)") - self.state = 221 - self.match(PyxellParser.T__36) - self.state = 222 + self.state = 224 + self.match(PyxellParser.T__37) + self.state = 225 self.match(PyxellParser.ID) pass elif la_ == 15: localctx = PyxellParser.ExprCallContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 223 + self.state = 226 if not self.precpred(self._ctx, 16): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 16)") - self.state = 224 + self.state = 227 self.match(PyxellParser.T__28) - self.state = 230 + self.state = 233 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,19,self._ctx) + _alt = self._interp.adaptivePredict(self._input,20,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 225 + self.state = 228 self.expr(0) - self.state = 226 + self.state = 229 self.match(PyxellParser.T__18) - self.state = 232 + self.state = 235 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,19,self._ctx) + _alt = self._interp.adaptivePredict(self._input,20,self._ctx) - self.state = 234 + self.state = 237 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 9)) & ~0x3f) == 0 and ((1 << (_la - 9)) & ((1 << (PyxellParser.T__8 - 9)) | (1 << (PyxellParser.T__9 - 9)) | (1 << (PyxellParser.T__28 - 9)) | (1 << (PyxellParser.T__34 - 9)) | (1 << (PyxellParser.T__37 - 9)) | (1 << (PyxellParser.T__46 - 9)) | (1 << (PyxellParser.T__51 - 9)) | (1 << (PyxellParser.T__52 - 9)) | (1 << (PyxellParser.INT - 9)) | (1 << (PyxellParser.FLOAT - 9)) | (1 << (PyxellParser.CHAR - 9)) | (1 << (PyxellParser.STRING - 9)) | (1 << (PyxellParser.ID - 9)))) != 0): - self.state = 233 + if ((((_la - 9)) & ~0x3f) == 0 and ((1 << (_la - 9)) & ((1 << (PyxellParser.T__8 - 9)) | (1 << (PyxellParser.T__9 - 9)) | (1 << (PyxellParser.T__28 - 9)) | (1 << (PyxellParser.T__35 - 9)) | (1 << (PyxellParser.T__38 - 9)) | (1 << (PyxellParser.T__47 - 9)) | (1 << (PyxellParser.T__51 - 9)) | (1 << (PyxellParser.T__52 - 9)) | (1 << (PyxellParser.INT - 9)) | (1 << (PyxellParser.FLOAT - 9)) | (1 << (PyxellParser.CHAR - 9)) | (1 << (PyxellParser.STRING - 9)) | (1 << (PyxellParser.ID - 9)))) != 0): + self.state = 236 self.expr(0) - self.state = 236 + self.state = 239 self.match(PyxellParser.T__29) pass elif la_ == 16: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 237 + self.state = 240 if not self.precpred(self._ctx, 6): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") - self.state = 238 - localctx.dots = self.match(PyxellParser.T__39) + self.state = 241 + localctx.dots = self.match(PyxellParser.T__40) pass - self.state = 243 + self.state = 246 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,22,self._ctx) + _alt = self._interp.adaptivePredict(self._input,23,self._ctx) except RecognitionException as re: localctx.exception = re @@ -1951,25 +1969,25 @@ def atom(self): self.enterRule(localctx, 20, self.RULE_atom) self._la = 0 # Token type try: - self.state = 263 + self.state = 266 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: localctx = PyxellParser.AtomIntContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 244 + self.state = 247 self.match(PyxellParser.INT) pass elif token in [PyxellParser.FLOAT]: localctx = PyxellParser.AtomFloatContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 245 + self.state = 248 self.match(PyxellParser.FLOAT) pass elif token in [PyxellParser.T__51, PyxellParser.T__52]: localctx = PyxellParser.AtomBoolContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 246 + self.state = 249 _la = self._input.LA(1) if not(_la==PyxellParser.T__51 or _la==PyxellParser.T__52): self._errHandler.recoverInline(self) @@ -1980,48 +1998,48 @@ def atom(self): elif token in [PyxellParser.CHAR]: localctx = PyxellParser.AtomCharContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 247 + self.state = 250 self.match(PyxellParser.CHAR) pass elif token in [PyxellParser.STRING]: localctx = PyxellParser.AtomStringContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 248 + self.state = 251 self.match(PyxellParser.STRING) pass - elif token in [PyxellParser.T__34]: + elif token in [PyxellParser.T__35]: localctx = PyxellParser.AtomArrayContext(self, localctx) self.enterOuterAlt(localctx, 6) - self.state = 249 - self.match(PyxellParser.T__34) - self.state = 255 + self.state = 252 + self.match(PyxellParser.T__35) + self.state = 258 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,23,self._ctx) + _alt = self._interp.adaptivePredict(self._input,24,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 250 + self.state = 253 self.expr(0) - self.state = 251 + self.state = 254 self.match(PyxellParser.T__18) - self.state = 257 + self.state = 260 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,23,self._ctx) + _alt = self._interp.adaptivePredict(self._input,24,self._ctx) - self.state = 259 + self.state = 262 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 9)) & ~0x3f) == 0 and ((1 << (_la - 9)) & ((1 << (PyxellParser.T__8 - 9)) | (1 << (PyxellParser.T__9 - 9)) | (1 << (PyxellParser.T__28 - 9)) | (1 << (PyxellParser.T__34 - 9)) | (1 << (PyxellParser.T__37 - 9)) | (1 << (PyxellParser.T__46 - 9)) | (1 << (PyxellParser.T__51 - 9)) | (1 << (PyxellParser.T__52 - 9)) | (1 << (PyxellParser.INT - 9)) | (1 << (PyxellParser.FLOAT - 9)) | (1 << (PyxellParser.CHAR - 9)) | (1 << (PyxellParser.STRING - 9)) | (1 << (PyxellParser.ID - 9)))) != 0): - self.state = 258 + if ((((_la - 9)) & ~0x3f) == 0 and ((1 << (_la - 9)) & ((1 << (PyxellParser.T__8 - 9)) | (1 << (PyxellParser.T__9 - 9)) | (1 << (PyxellParser.T__28 - 9)) | (1 << (PyxellParser.T__35 - 9)) | (1 << (PyxellParser.T__38 - 9)) | (1 << (PyxellParser.T__47 - 9)) | (1 << (PyxellParser.T__51 - 9)) | (1 << (PyxellParser.T__52 - 9)) | (1 << (PyxellParser.INT - 9)) | (1 << (PyxellParser.FLOAT - 9)) | (1 << (PyxellParser.CHAR - 9)) | (1 << (PyxellParser.STRING - 9)) | (1 << (PyxellParser.ID - 9)))) != 0): + self.state = 261 self.expr(0) - self.state = 261 - self.match(PyxellParser.T__35) + self.state = 264 + self.match(PyxellParser.T__36) pass elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) self.enterOuterAlt(localctx, 7) - self.state = 262 + self.state = 265 self.match(PyxellParser.ID) pass else: @@ -2166,7 +2184,7 @@ def typ(self, _p:int=0): self.enterRecursionRule(localctx, 22, self.RULE_typ, _p) try: self.enterOuterAlt(localctx, 1) - self.state = 282 + self.state = 285 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__53]: @@ -2174,120 +2192,120 @@ def typ(self, _p:int=0): self._ctx = localctx _prevctx = localctx - self.state = 266 + self.state = 269 self.match(PyxellParser.T__53) pass elif token in [PyxellParser.T__54]: localctx = PyxellParser.TypePrimitiveContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 267 + self.state = 270 self.match(PyxellParser.T__54) pass elif token in [PyxellParser.T__55]: localctx = PyxellParser.TypePrimitiveContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 268 + self.state = 271 self.match(PyxellParser.T__55) pass elif token in [PyxellParser.T__56]: localctx = PyxellParser.TypePrimitiveContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 269 + self.state = 272 self.match(PyxellParser.T__56) pass elif token in [PyxellParser.T__57]: localctx = PyxellParser.TypePrimitiveContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 270 + self.state = 273 self.match(PyxellParser.T__57) pass elif token in [PyxellParser.T__58]: localctx = PyxellParser.TypePrimitiveContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 271 + self.state = 274 self.match(PyxellParser.T__58) pass elif token in [PyxellParser.T__28]: localctx = PyxellParser.TypeParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 272 + self.state = 275 self.match(PyxellParser.T__28) - self.state = 273 + self.state = 276 self.typ(0) - self.state = 274 + self.state = 277 self.match(PyxellParser.T__29) pass - elif token in [PyxellParser.T__34]: + elif token in [PyxellParser.T__35]: localctx = PyxellParser.TypeArrayContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 276 - self.match(PyxellParser.T__34) - self.state = 277 - self.typ(0) - self.state = 278 + self.state = 279 self.match(PyxellParser.T__35) + self.state = 280 + self.typ(0) + self.state = 281 + self.match(PyxellParser.T__36) pass elif token in [PyxellParser.T__59]: localctx = PyxellParser.TypeFunc0Context(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 280 + self.state = 283 self.match(PyxellParser.T__59) - self.state = 281 + self.state = 284 self.typ(1) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 292 + self.state = 295 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,28,self._ctx) + _alt = self._interp.adaptivePredict(self._input,29,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 290 + self.state = 293 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,27,self._ctx) + la_ = self._interp.adaptivePredict(self._input,28,self._ctx) if la_ == 1: localctx = PyxellParser.TypeTupleContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 284 + self.state = 287 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 285 + self.state = 288 self.match(PyxellParser.T__5) - self.state = 286 + self.state = 289 self.typ(3) pass elif la_ == 2: localctx = PyxellParser.TypeFuncContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 287 + self.state = 290 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 288 + self.state = 291 self.match(PyxellParser.T__59) - self.state = 289 + self.state = 292 self.typ(2) pass - self.state = 294 + self.state = 297 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,28,self._ctx) + _alt = self._interp.adaptivePredict(self._input,29,self._ctx) except RecognitionException as re: localctx.exception = re diff --git a/src/compiler.py b/src/compiler.py index dd4d6746..6b98004a 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -1,6 +1,7 @@ import ast from contextlib import contextmanager +from itertools import zip_longest from .antlr.PyxellParser import PyxellParser from .antlr.PyxellVisitor import PyxellVisitor @@ -39,6 +40,16 @@ def local(self): self.env = env self.initialized = initialized + @contextmanager + def no_output(self): + dummy_module = ll.Module() + dummy_func = ll.Function(dummy_module, tFunc([]).pointee, 'dummy') + dummy_label = dummy_func.append_basic_block('dummy') + prev_label = self.builder.basic_block + self.builder.position_at_end(dummy_label) + yield + self.builder.position_at_end(prev_label) + @contextmanager def block(self): label_start = self.builder.append_basic_block() @@ -729,12 +740,23 @@ def visitStmtLoopControl(self, ctx): def visitStmtFunc(self, ctx): id = str(ctx.ID()) - args = [(self.visit(arg.typ()), arg.ID()) for arg in ctx.arg()] - arg_types = [arg[0] for arg in args] + args = [] + expect_default = False + for arg in ctx.arg(): + type = self.visit(arg.typ()) + name = str(arg.ID()) + default = arg.default + if default: + with self.no_output(): + self.cast(default, self.visit(default), type) + expect_default = True + elif expect_default: + self.throw(arg, err.MissingDefault(name)) + args.append(Arg(type, name, arg.default)) ret_type = self.visit(ctx.ret) if ctx.ret else tVoid - func_type = tFunc(arg_types, ret_type) + func_type = tFunc(args, ret_type) func = ll.Function(self.module, func_type.pointee, self.module.get_unique_name('def.'+id)) func_ptr = ll.GlobalVariable(self.module, func_type, self.module.get_unique_name(id)) func_ptr.initializer = func @@ -750,7 +772,7 @@ def visitStmtFunc(self, ctx): self.env.pop('#continue', None) self.env.pop('#break', None) - for (type, id), value in zip(args, func.args): + for (type, id, default), value in zip(args, func.args): ptr = self.declare(ctx, type, id, redeclare=True, initialize=True) self.env[id] = ptr self.builder.store(value, ptr) @@ -822,11 +844,22 @@ def visitExprCall(self, ctx): self.throw(ctx, err.NotFunction(func.type)) exprs = exprs[1:] - if len(exprs) < len(func.type.args): - self.throw(ctx, err.TooFewArguments(func.type)) if len(exprs) > len(func.type.args): self.throw(ctx, err.TooManyArguments(func.type)) - args = [self.cast(expr, self.visit(expr), type) for expr, type in zip(exprs, func.type.args)] + + args = [] + for call_arg, func_arg in zip_longest(exprs, func.type.args): + if call_arg: + expr = call_arg + elif func_arg.default: + expr = func_arg.default + else: + break + value = self.cast(expr, self.visit(expr), func_arg.type) + args.append(value) + + if len(args) < len(func.type.args): + self.throw(ctx, err.TooFewArguments(func.type)) return self.builder.call(func, args) diff --git a/src/errors.py b/src/errors.py index f2938396..9ebd451d 100644 --- a/src/errors.py +++ b/src/errors.py @@ -17,6 +17,7 @@ class PyxellError(Exception): IllegalAssignment = lambda t1, t2: f"Illegal assignment from `{t1.show()}` to `{t2.show()}`" InvalidDeclaration = lambda t: f"Cannot declare variable of type `{t.show()}`" InvalidLoopStep = lambda: f"Incompatible number of loop variables and step expressions" + MissingDefault = lambda id: f"Missing default value for argument `{id}`" MissingReturn = lambda id: f"Not all code paths return a value in function `{id}`" NoAttribute = lambda t, id: f"Type `{t.show()}` has no attribute `{id}`" NoBinaryOperator = lambda op, t1, t2: f"No binary operator `{op}` defined for `{t1.show()}` and `{t2.show()}`" diff --git a/src/types.py b/src/types.py index cbf20932..665f45b0 100644 --- a/src/types.py +++ b/src/types.py @@ -1,4 +1,6 @@ +from collections import namedtuple + import llvmlite.ir as ll from .utils import extend_class @@ -55,8 +57,11 @@ def isTuple(type): return getattr(type, 'kind', None) == 'tuple' +Arg = namedtuple('Arg', ['type', 'name', 'default'], defaults=[None]*3) + def tFunc(args, ret=tVoid): - type = tPtr(ll.FunctionType(ret, args)) + args = [arg if isinstance(arg, Arg) else Arg(arg) for arg in args] + type = tPtr(ll.FunctionType(ret, [arg.type for arg in args])) type.args = args type.ret = ret type.kind = 'function' @@ -91,7 +96,7 @@ def show(type): if type.isTuple(): return '*'.join(t.show() for t in type.elements) if type.isFunc(): - return '->'.join(t.show() for t in type.args) + '->' + type.ret.show() + return '->'.join(arg.type.show() for arg in type.args) + '->' + type.ret.show() return str(type) From cffbbcf034c18446162fd4c5ef8fe3ed16cbda27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Tue, 29 Oct 2019 20:31:26 +0100 Subject: [PATCH 036/100] Named arguments --- src/Pyxell.g4 | 10 +- src/antlr/Pyxell.interp | 5 +- src/antlr/PyxellParser.py | 807 ++++++++++++++++++---------------- src/antlr/PyxellVisitor.py | 9 +- src/compiler.py | 47 +- src/errors.py | 3 + test/bad/functions/call09.err | 2 +- 7 files changed, 487 insertions(+), 396 deletions(-) diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index 9fab2b3a..2aa288be 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -28,10 +28,10 @@ compound_stmt | 'while' expr do_block # StmtWhile | 'until' expr do_block # StmtUntil | 'for' tuple_expr 'in' tuple_expr ('step' step=tuple_expr)? do_block # StmtFor - | 'func' ID '(' (arg ',')* arg? ')' (ret=typ)? def_block # StmtFunc + | 'func' ID '(' (func_arg ',')* func_arg? ')' (ret=typ)? def_block # StmtFunc ; -arg +func_arg : typ ID (':' default=expr)? ; @@ -52,7 +52,7 @@ expr | '(' tuple_expr ')' # ExprParentheses | expr '[' expr ']' # ExprIndex | expr '.' ID # ExprAttr - | expr '(' (expr ',')* expr? ')' # ExprCall + | expr '(' (call_arg ',')* call_arg? ')' # ExprCall | expr op='^' expr # ExprBinaryOp | op=('+' | '-' | '~') expr # ExprUnaryOp | expr op=('*' | '/' | '%') expr # ExprBinaryOp @@ -70,6 +70,10 @@ expr | expr '?' expr ':' expr # ExprCond ; +call_arg + : (ID '=')? expr + ; + atom : INT # AtomInt | FLOAT # AtomFloat diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index 5ceead3a..162dc169 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -144,14 +144,15 @@ stmt simple_stmt lvalue compound_stmt -arg +func_arg do_block def_block tuple_expr expr +call_arg atom typ atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 69, 301, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 3, 2, 7, 2, 28, 10, 2, 12, 2, 14, 2, 31, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 39, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 44, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 50, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 55, 10, 4, 12, 4, 14, 4, 58, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 69, 10, 4, 5, 4, 71, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 76, 10, 5, 12, 5, 14, 5, 79, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 88, 10, 6, 12, 6, 14, 6, 91, 11, 6, 3, 6, 3, 6, 5, 6, 95, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 111, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 121, 10, 6, 12, 6, 14, 6, 124, 11, 6, 3, 6, 5, 6, 127, 10, 6, 3, 6, 3, 6, 5, 6, 131, 10, 6, 3, 6, 5, 6, 134, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 140, 10, 7, 3, 8, 3, 8, 3, 8, 6, 8, 145, 10, 8, 13, 8, 14, 8, 146, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 6, 9, 154, 10, 9, 13, 9, 14, 9, 155, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 7, 10, 163, 10, 10, 12, 10, 14, 10, 166, 11, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 180, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 234, 10, 11, 12, 11, 14, 11, 237, 11, 11, 3, 11, 5, 11, 240, 10, 11, 3, 11, 3, 11, 3, 11, 7, 11, 245, 10, 11, 12, 11, 14, 11, 248, 11, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 7, 12, 259, 10, 12, 12, 12, 14, 12, 262, 11, 12, 3, 12, 5, 12, 265, 10, 12, 3, 12, 3, 12, 5, 12, 269, 10, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 288, 10, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 7, 13, 296, 10, 13, 12, 13, 14, 13, 299, 11, 13, 3, 13, 2, 4, 20, 24, 14, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 2, 11, 3, 2, 7, 17, 3, 2, 18, 19, 4, 2, 11, 12, 41, 41, 3, 2, 8, 10, 3, 2, 11, 12, 3, 2, 13, 14, 3, 2, 42, 43, 3, 2, 44, 49, 3, 2, 54, 55, 2, 354, 2, 29, 3, 2, 2, 2, 4, 38, 3, 2, 2, 2, 6, 70, 3, 2, 2, 2, 8, 72, 3, 2, 2, 2, 10, 133, 3, 2, 2, 2, 12, 135, 3, 2, 2, 2, 14, 141, 3, 2, 2, 2, 16, 150, 3, 2, 2, 2, 18, 164, 3, 2, 2, 2, 20, 179, 3, 2, 2, 2, 22, 268, 3, 2, 2, 2, 24, 287, 3, 2, 2, 2, 26, 28, 5, 4, 3, 2, 27, 26, 3, 2, 2, 2, 28, 31, 3, 2, 2, 2, 29, 27, 3, 2, 2, 2, 29, 30, 3, 2, 2, 2, 30, 32, 3, 2, 2, 2, 31, 29, 3, 2, 2, 2, 32, 33, 7, 2, 2, 3, 33, 3, 3, 2, 2, 2, 34, 35, 5, 6, 4, 2, 35, 36, 7, 3, 2, 2, 36, 39, 3, 2, 2, 2, 37, 39, 5, 10, 6, 2, 38, 34, 3, 2, 2, 2, 38, 37, 3, 2, 2, 2, 39, 5, 3, 2, 2, 2, 40, 71, 7, 4, 2, 2, 41, 43, 7, 5, 2, 2, 42, 44, 5, 18, 10, 2, 43, 42, 3, 2, 2, 2, 43, 44, 3, 2, 2, 2, 44, 71, 3, 2, 2, 2, 45, 46, 5, 24, 13, 2, 46, 49, 7, 67, 2, 2, 47, 48, 7, 6, 2, 2, 48, 50, 5, 18, 10, 2, 49, 47, 3, 2, 2, 2, 49, 50, 3, 2, 2, 2, 50, 71, 3, 2, 2, 2, 51, 52, 5, 8, 5, 2, 52, 53, 7, 6, 2, 2, 53, 55, 3, 2, 2, 2, 54, 51, 3, 2, 2, 2, 55, 58, 3, 2, 2, 2, 56, 54, 3, 2, 2, 2, 56, 57, 3, 2, 2, 2, 57, 59, 3, 2, 2, 2, 58, 56, 3, 2, 2, 2, 59, 71, 5, 18, 10, 2, 60, 61, 5, 20, 11, 2, 61, 62, 9, 2, 2, 2, 62, 63, 7, 6, 2, 2, 63, 64, 5, 20, 11, 2, 64, 71, 3, 2, 2, 2, 65, 71, 9, 3, 2, 2, 66, 68, 7, 20, 2, 2, 67, 69, 5, 18, 10, 2, 68, 67, 3, 2, 2, 2, 68, 69, 3, 2, 2, 2, 69, 71, 3, 2, 2, 2, 70, 40, 3, 2, 2, 2, 70, 41, 3, 2, 2, 2, 70, 45, 3, 2, 2, 2, 70, 56, 3, 2, 2, 2, 70, 60, 3, 2, 2, 2, 70, 65, 3, 2, 2, 2, 70, 66, 3, 2, 2, 2, 71, 7, 3, 2, 2, 2, 72, 77, 5, 20, 11, 2, 73, 74, 7, 21, 2, 2, 74, 76, 5, 20, 11, 2, 75, 73, 3, 2, 2, 2, 76, 79, 3, 2, 2, 2, 77, 75, 3, 2, 2, 2, 77, 78, 3, 2, 2, 2, 78, 9, 3, 2, 2, 2, 79, 77, 3, 2, 2, 2, 80, 81, 7, 22, 2, 2, 81, 82, 5, 20, 11, 2, 82, 89, 5, 14, 8, 2, 83, 84, 7, 23, 2, 2, 84, 85, 5, 20, 11, 2, 85, 86, 5, 14, 8, 2, 86, 88, 3, 2, 2, 2, 87, 83, 3, 2, 2, 2, 88, 91, 3, 2, 2, 2, 89, 87, 3, 2, 2, 2, 89, 90, 3, 2, 2, 2, 90, 94, 3, 2, 2, 2, 91, 89, 3, 2, 2, 2, 92, 93, 7, 24, 2, 2, 93, 95, 5, 14, 8, 2, 94, 92, 3, 2, 2, 2, 94, 95, 3, 2, 2, 2, 95, 134, 3, 2, 2, 2, 96, 97, 7, 25, 2, 2, 97, 98, 5, 20, 11, 2, 98, 99, 5, 14, 8, 2, 99, 134, 3, 2, 2, 2, 100, 101, 7, 26, 2, 2, 101, 102, 5, 20, 11, 2, 102, 103, 5, 14, 8, 2, 103, 134, 3, 2, 2, 2, 104, 105, 7, 27, 2, 2, 105, 106, 5, 18, 10, 2, 106, 107, 7, 28, 2, 2, 107, 110, 5, 18, 10, 2, 108, 109, 7, 29, 2, 2, 109, 111, 5, 18, 10, 2, 110, 108, 3, 2, 2, 2, 110, 111, 3, 2, 2, 2, 111, 112, 3, 2, 2, 2, 112, 113, 5, 14, 8, 2, 113, 134, 3, 2, 2, 2, 114, 115, 7, 30, 2, 2, 115, 116, 7, 67, 2, 2, 116, 122, 7, 31, 2, 2, 117, 118, 5, 12, 7, 2, 118, 119, 7, 21, 2, 2, 119, 121, 3, 2, 2, 2, 120, 117, 3, 2, 2, 2, 121, 124, 3, 2, 2, 2, 122, 120, 3, 2, 2, 2, 122, 123, 3, 2, 2, 2, 123, 126, 3, 2, 2, 2, 124, 122, 3, 2, 2, 2, 125, 127, 5, 12, 7, 2, 126, 125, 3, 2, 2, 2, 126, 127, 3, 2, 2, 2, 127, 128, 3, 2, 2, 2, 128, 130, 7, 32, 2, 2, 129, 131, 5, 24, 13, 2, 130, 129, 3, 2, 2, 2, 130, 131, 3, 2, 2, 2, 131, 132, 3, 2, 2, 2, 132, 134, 5, 16, 9, 2, 133, 80, 3, 2, 2, 2, 133, 96, 3, 2, 2, 2, 133, 100, 3, 2, 2, 2, 133, 104, 3, 2, 2, 2, 133, 114, 3, 2, 2, 2, 134, 11, 3, 2, 2, 2, 135, 136, 5, 24, 13, 2, 136, 139, 7, 67, 2, 2, 137, 138, 7, 33, 2, 2, 138, 140, 5, 20, 11, 2, 139, 137, 3, 2, 2, 2, 139, 140, 3, 2, 2, 2, 140, 13, 3, 2, 2, 2, 141, 142, 7, 34, 2, 2, 142, 144, 7, 35, 2, 2, 143, 145, 5, 4, 3, 2, 144, 143, 3, 2, 2, 2, 145, 146, 3, 2, 2, 2, 146, 144, 3, 2, 2, 2, 146, 147, 3, 2, 2, 2, 147, 148, 3, 2, 2, 2, 148, 149, 7, 36, 2, 2, 149, 15, 3, 2, 2, 2, 150, 151, 7, 37, 2, 2, 151, 153, 7, 35, 2, 2, 152, 154, 5, 4, 3, 2, 153, 152, 3, 2, 2, 2, 154, 155, 3, 2, 2, 2, 155, 153, 3, 2, 2, 2, 155, 156, 3, 2, 2, 2, 156, 157, 3, 2, 2, 2, 157, 158, 7, 36, 2, 2, 158, 17, 3, 2, 2, 2, 159, 160, 5, 20, 11, 2, 160, 161, 7, 21, 2, 2, 161, 163, 3, 2, 2, 2, 162, 159, 3, 2, 2, 2, 163, 166, 3, 2, 2, 2, 164, 162, 3, 2, 2, 2, 164, 165, 3, 2, 2, 2, 165, 167, 3, 2, 2, 2, 166, 164, 3, 2, 2, 2, 167, 168, 5, 20, 11, 2, 168, 19, 3, 2, 2, 2, 169, 170, 8, 11, 1, 2, 170, 180, 5, 22, 12, 2, 171, 172, 7, 31, 2, 2, 172, 173, 5, 18, 10, 2, 173, 174, 7, 32, 2, 2, 174, 180, 3, 2, 2, 2, 175, 176, 9, 4, 2, 2, 176, 180, 5, 20, 11, 16, 177, 178, 7, 50, 2, 2, 178, 180, 5, 20, 11, 6, 179, 169, 3, 2, 2, 2, 179, 171, 3, 2, 2, 2, 179, 175, 3, 2, 2, 2, 179, 177, 3, 2, 2, 2, 180, 246, 3, 2, 2, 2, 181, 182, 12, 17, 2, 2, 182, 183, 7, 7, 2, 2, 183, 245, 5, 20, 11, 17, 184, 185, 12, 15, 2, 2, 185, 186, 9, 5, 2, 2, 186, 245, 5, 20, 11, 16, 187, 188, 12, 14, 2, 2, 188, 189, 9, 6, 2, 2, 189, 245, 5, 20, 11, 15, 190, 191, 12, 13, 2, 2, 191, 192, 9, 7, 2, 2, 192, 245, 5, 20, 11, 14, 193, 194, 12, 12, 2, 2, 194, 195, 7, 15, 2, 2, 195, 245, 5, 20, 11, 13, 196, 197, 12, 11, 2, 2, 197, 198, 7, 16, 2, 2, 198, 245, 5, 20, 11, 12, 199, 200, 12, 10, 2, 2, 200, 201, 7, 17, 2, 2, 201, 245, 5, 20, 11, 11, 202, 203, 12, 9, 2, 2, 203, 204, 9, 8, 2, 2, 204, 245, 5, 20, 11, 10, 205, 206, 12, 7, 2, 2, 206, 207, 9, 9, 2, 2, 207, 245, 5, 20, 11, 7, 208, 209, 12, 5, 2, 2, 209, 210, 7, 51, 2, 2, 210, 245, 5, 20, 11, 5, 211, 212, 12, 4, 2, 2, 212, 213, 7, 52, 2, 2, 213, 245, 5, 20, 11, 4, 214, 215, 12, 3, 2, 2, 215, 216, 7, 53, 2, 2, 216, 217, 5, 20, 11, 2, 217, 218, 7, 33, 2, 2, 218, 219, 5, 20, 11, 3, 219, 245, 3, 2, 2, 2, 220, 221, 12, 20, 2, 2, 221, 222, 7, 38, 2, 2, 222, 223, 5, 20, 11, 2, 223, 224, 7, 39, 2, 2, 224, 245, 3, 2, 2, 2, 225, 226, 12, 19, 2, 2, 226, 227, 7, 40, 2, 2, 227, 245, 7, 67, 2, 2, 228, 229, 12, 18, 2, 2, 229, 235, 7, 31, 2, 2, 230, 231, 5, 20, 11, 2, 231, 232, 7, 21, 2, 2, 232, 234, 3, 2, 2, 2, 233, 230, 3, 2, 2, 2, 234, 237, 3, 2, 2, 2, 235, 233, 3, 2, 2, 2, 235, 236, 3, 2, 2, 2, 236, 239, 3, 2, 2, 2, 237, 235, 3, 2, 2, 2, 238, 240, 5, 20, 11, 2, 239, 238, 3, 2, 2, 2, 239, 240, 3, 2, 2, 2, 240, 241, 3, 2, 2, 2, 241, 245, 7, 32, 2, 2, 242, 243, 12, 8, 2, 2, 243, 245, 7, 43, 2, 2, 244, 181, 3, 2, 2, 2, 244, 184, 3, 2, 2, 2, 244, 187, 3, 2, 2, 2, 244, 190, 3, 2, 2, 2, 244, 193, 3, 2, 2, 2, 244, 196, 3, 2, 2, 2, 244, 199, 3, 2, 2, 2, 244, 202, 3, 2, 2, 2, 244, 205, 3, 2, 2, 2, 244, 208, 3, 2, 2, 2, 244, 211, 3, 2, 2, 2, 244, 214, 3, 2, 2, 2, 244, 220, 3, 2, 2, 2, 244, 225, 3, 2, 2, 2, 244, 228, 3, 2, 2, 2, 244, 242, 3, 2, 2, 2, 245, 248, 3, 2, 2, 2, 246, 244, 3, 2, 2, 2, 246, 247, 3, 2, 2, 2, 247, 21, 3, 2, 2, 2, 248, 246, 3, 2, 2, 2, 249, 269, 7, 63, 2, 2, 250, 269, 7, 64, 2, 2, 251, 269, 9, 10, 2, 2, 252, 269, 7, 65, 2, 2, 253, 269, 7, 66, 2, 2, 254, 260, 7, 38, 2, 2, 255, 256, 5, 20, 11, 2, 256, 257, 7, 21, 2, 2, 257, 259, 3, 2, 2, 2, 258, 255, 3, 2, 2, 2, 259, 262, 3, 2, 2, 2, 260, 258, 3, 2, 2, 2, 260, 261, 3, 2, 2, 2, 261, 264, 3, 2, 2, 2, 262, 260, 3, 2, 2, 2, 263, 265, 5, 20, 11, 2, 264, 263, 3, 2, 2, 2, 264, 265, 3, 2, 2, 2, 265, 266, 3, 2, 2, 2, 266, 269, 7, 39, 2, 2, 267, 269, 7, 67, 2, 2, 268, 249, 3, 2, 2, 2, 268, 250, 3, 2, 2, 2, 268, 251, 3, 2, 2, 2, 268, 252, 3, 2, 2, 2, 268, 253, 3, 2, 2, 2, 268, 254, 3, 2, 2, 2, 268, 267, 3, 2, 2, 2, 269, 23, 3, 2, 2, 2, 270, 271, 8, 13, 1, 2, 271, 288, 7, 56, 2, 2, 272, 288, 7, 57, 2, 2, 273, 288, 7, 58, 2, 2, 274, 288, 7, 59, 2, 2, 275, 288, 7, 60, 2, 2, 276, 288, 7, 61, 2, 2, 277, 278, 7, 31, 2, 2, 278, 279, 5, 24, 13, 2, 279, 280, 7, 32, 2, 2, 280, 288, 3, 2, 2, 2, 281, 282, 7, 38, 2, 2, 282, 283, 5, 24, 13, 2, 283, 284, 7, 39, 2, 2, 284, 288, 3, 2, 2, 2, 285, 286, 7, 62, 2, 2, 286, 288, 5, 24, 13, 3, 287, 270, 3, 2, 2, 2, 287, 272, 3, 2, 2, 2, 287, 273, 3, 2, 2, 2, 287, 274, 3, 2, 2, 2, 287, 275, 3, 2, 2, 2, 287, 276, 3, 2, 2, 2, 287, 277, 3, 2, 2, 2, 287, 281, 3, 2, 2, 2, 287, 285, 3, 2, 2, 2, 288, 297, 3, 2, 2, 2, 289, 290, 12, 5, 2, 2, 290, 291, 7, 8, 2, 2, 291, 296, 5, 24, 13, 5, 292, 293, 12, 4, 2, 2, 293, 294, 7, 62, 2, 2, 294, 296, 5, 24, 13, 4, 295, 289, 3, 2, 2, 2, 295, 292, 3, 2, 2, 2, 296, 299, 3, 2, 2, 2, 297, 295, 3, 2, 2, 2, 297, 298, 3, 2, 2, 2, 298, 25, 3, 2, 2, 2, 299, 297, 3, 2, 2, 2, 32, 29, 38, 43, 49, 56, 68, 70, 77, 89, 94, 110, 122, 126, 130, 133, 139, 146, 155, 164, 179, 235, 239, 244, 246, 260, 264, 268, 287, 295, 297] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 69, 309, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 3, 2, 7, 2, 30, 10, 2, 12, 2, 14, 2, 33, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 41, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 46, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 52, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 57, 10, 4, 12, 4, 14, 4, 60, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 71, 10, 4, 5, 4, 73, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 78, 10, 5, 12, 5, 14, 5, 81, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 90, 10, 6, 12, 6, 14, 6, 93, 11, 6, 3, 6, 3, 6, 5, 6, 97, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 113, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 123, 10, 6, 12, 6, 14, 6, 126, 11, 6, 3, 6, 5, 6, 129, 10, 6, 3, 6, 3, 6, 5, 6, 133, 10, 6, 3, 6, 5, 6, 136, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 142, 10, 7, 3, 8, 3, 8, 3, 8, 6, 8, 147, 10, 8, 13, 8, 14, 8, 148, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 6, 9, 156, 10, 9, 13, 9, 14, 9, 157, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 7, 10, 165, 10, 10, 12, 10, 14, 10, 168, 11, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 182, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 236, 10, 11, 12, 11, 14, 11, 239, 11, 11, 3, 11, 5, 11, 242, 10, 11, 3, 11, 3, 11, 3, 11, 7, 11, 247, 10, 11, 12, 11, 14, 11, 250, 11, 11, 3, 12, 3, 12, 5, 12, 254, 10, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 7, 13, 267, 10, 13, 12, 13, 14, 13, 270, 11, 13, 3, 13, 5, 13, 273, 10, 13, 3, 13, 3, 13, 5, 13, 277, 10, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 296, 10, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 7, 14, 304, 10, 14, 12, 14, 14, 14, 307, 11, 14, 3, 14, 2, 4, 20, 26, 15, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 2, 11, 3, 2, 7, 17, 3, 2, 18, 19, 4, 2, 11, 12, 41, 41, 3, 2, 8, 10, 3, 2, 11, 12, 3, 2, 13, 14, 3, 2, 42, 43, 3, 2, 44, 49, 3, 2, 54, 55, 2, 362, 2, 31, 3, 2, 2, 2, 4, 40, 3, 2, 2, 2, 6, 72, 3, 2, 2, 2, 8, 74, 3, 2, 2, 2, 10, 135, 3, 2, 2, 2, 12, 137, 3, 2, 2, 2, 14, 143, 3, 2, 2, 2, 16, 152, 3, 2, 2, 2, 18, 166, 3, 2, 2, 2, 20, 181, 3, 2, 2, 2, 22, 253, 3, 2, 2, 2, 24, 276, 3, 2, 2, 2, 26, 295, 3, 2, 2, 2, 28, 30, 5, 4, 3, 2, 29, 28, 3, 2, 2, 2, 30, 33, 3, 2, 2, 2, 31, 29, 3, 2, 2, 2, 31, 32, 3, 2, 2, 2, 32, 34, 3, 2, 2, 2, 33, 31, 3, 2, 2, 2, 34, 35, 7, 2, 2, 3, 35, 3, 3, 2, 2, 2, 36, 37, 5, 6, 4, 2, 37, 38, 7, 3, 2, 2, 38, 41, 3, 2, 2, 2, 39, 41, 5, 10, 6, 2, 40, 36, 3, 2, 2, 2, 40, 39, 3, 2, 2, 2, 41, 5, 3, 2, 2, 2, 42, 73, 7, 4, 2, 2, 43, 45, 7, 5, 2, 2, 44, 46, 5, 18, 10, 2, 45, 44, 3, 2, 2, 2, 45, 46, 3, 2, 2, 2, 46, 73, 3, 2, 2, 2, 47, 48, 5, 26, 14, 2, 48, 51, 7, 67, 2, 2, 49, 50, 7, 6, 2, 2, 50, 52, 5, 18, 10, 2, 51, 49, 3, 2, 2, 2, 51, 52, 3, 2, 2, 2, 52, 73, 3, 2, 2, 2, 53, 54, 5, 8, 5, 2, 54, 55, 7, 6, 2, 2, 55, 57, 3, 2, 2, 2, 56, 53, 3, 2, 2, 2, 57, 60, 3, 2, 2, 2, 58, 56, 3, 2, 2, 2, 58, 59, 3, 2, 2, 2, 59, 61, 3, 2, 2, 2, 60, 58, 3, 2, 2, 2, 61, 73, 5, 18, 10, 2, 62, 63, 5, 20, 11, 2, 63, 64, 9, 2, 2, 2, 64, 65, 7, 6, 2, 2, 65, 66, 5, 20, 11, 2, 66, 73, 3, 2, 2, 2, 67, 73, 9, 3, 2, 2, 68, 70, 7, 20, 2, 2, 69, 71, 5, 18, 10, 2, 70, 69, 3, 2, 2, 2, 70, 71, 3, 2, 2, 2, 71, 73, 3, 2, 2, 2, 72, 42, 3, 2, 2, 2, 72, 43, 3, 2, 2, 2, 72, 47, 3, 2, 2, 2, 72, 58, 3, 2, 2, 2, 72, 62, 3, 2, 2, 2, 72, 67, 3, 2, 2, 2, 72, 68, 3, 2, 2, 2, 73, 7, 3, 2, 2, 2, 74, 79, 5, 20, 11, 2, 75, 76, 7, 21, 2, 2, 76, 78, 5, 20, 11, 2, 77, 75, 3, 2, 2, 2, 78, 81, 3, 2, 2, 2, 79, 77, 3, 2, 2, 2, 79, 80, 3, 2, 2, 2, 80, 9, 3, 2, 2, 2, 81, 79, 3, 2, 2, 2, 82, 83, 7, 22, 2, 2, 83, 84, 5, 20, 11, 2, 84, 91, 5, 14, 8, 2, 85, 86, 7, 23, 2, 2, 86, 87, 5, 20, 11, 2, 87, 88, 5, 14, 8, 2, 88, 90, 3, 2, 2, 2, 89, 85, 3, 2, 2, 2, 90, 93, 3, 2, 2, 2, 91, 89, 3, 2, 2, 2, 91, 92, 3, 2, 2, 2, 92, 96, 3, 2, 2, 2, 93, 91, 3, 2, 2, 2, 94, 95, 7, 24, 2, 2, 95, 97, 5, 14, 8, 2, 96, 94, 3, 2, 2, 2, 96, 97, 3, 2, 2, 2, 97, 136, 3, 2, 2, 2, 98, 99, 7, 25, 2, 2, 99, 100, 5, 20, 11, 2, 100, 101, 5, 14, 8, 2, 101, 136, 3, 2, 2, 2, 102, 103, 7, 26, 2, 2, 103, 104, 5, 20, 11, 2, 104, 105, 5, 14, 8, 2, 105, 136, 3, 2, 2, 2, 106, 107, 7, 27, 2, 2, 107, 108, 5, 18, 10, 2, 108, 109, 7, 28, 2, 2, 109, 112, 5, 18, 10, 2, 110, 111, 7, 29, 2, 2, 111, 113, 5, 18, 10, 2, 112, 110, 3, 2, 2, 2, 112, 113, 3, 2, 2, 2, 113, 114, 3, 2, 2, 2, 114, 115, 5, 14, 8, 2, 115, 136, 3, 2, 2, 2, 116, 117, 7, 30, 2, 2, 117, 118, 7, 67, 2, 2, 118, 124, 7, 31, 2, 2, 119, 120, 5, 12, 7, 2, 120, 121, 7, 21, 2, 2, 121, 123, 3, 2, 2, 2, 122, 119, 3, 2, 2, 2, 123, 126, 3, 2, 2, 2, 124, 122, 3, 2, 2, 2, 124, 125, 3, 2, 2, 2, 125, 128, 3, 2, 2, 2, 126, 124, 3, 2, 2, 2, 127, 129, 5, 12, 7, 2, 128, 127, 3, 2, 2, 2, 128, 129, 3, 2, 2, 2, 129, 130, 3, 2, 2, 2, 130, 132, 7, 32, 2, 2, 131, 133, 5, 26, 14, 2, 132, 131, 3, 2, 2, 2, 132, 133, 3, 2, 2, 2, 133, 134, 3, 2, 2, 2, 134, 136, 5, 16, 9, 2, 135, 82, 3, 2, 2, 2, 135, 98, 3, 2, 2, 2, 135, 102, 3, 2, 2, 2, 135, 106, 3, 2, 2, 2, 135, 116, 3, 2, 2, 2, 136, 11, 3, 2, 2, 2, 137, 138, 5, 26, 14, 2, 138, 141, 7, 67, 2, 2, 139, 140, 7, 33, 2, 2, 140, 142, 5, 20, 11, 2, 141, 139, 3, 2, 2, 2, 141, 142, 3, 2, 2, 2, 142, 13, 3, 2, 2, 2, 143, 144, 7, 34, 2, 2, 144, 146, 7, 35, 2, 2, 145, 147, 5, 4, 3, 2, 146, 145, 3, 2, 2, 2, 147, 148, 3, 2, 2, 2, 148, 146, 3, 2, 2, 2, 148, 149, 3, 2, 2, 2, 149, 150, 3, 2, 2, 2, 150, 151, 7, 36, 2, 2, 151, 15, 3, 2, 2, 2, 152, 153, 7, 37, 2, 2, 153, 155, 7, 35, 2, 2, 154, 156, 5, 4, 3, 2, 155, 154, 3, 2, 2, 2, 156, 157, 3, 2, 2, 2, 157, 155, 3, 2, 2, 2, 157, 158, 3, 2, 2, 2, 158, 159, 3, 2, 2, 2, 159, 160, 7, 36, 2, 2, 160, 17, 3, 2, 2, 2, 161, 162, 5, 20, 11, 2, 162, 163, 7, 21, 2, 2, 163, 165, 3, 2, 2, 2, 164, 161, 3, 2, 2, 2, 165, 168, 3, 2, 2, 2, 166, 164, 3, 2, 2, 2, 166, 167, 3, 2, 2, 2, 167, 169, 3, 2, 2, 2, 168, 166, 3, 2, 2, 2, 169, 170, 5, 20, 11, 2, 170, 19, 3, 2, 2, 2, 171, 172, 8, 11, 1, 2, 172, 182, 5, 24, 13, 2, 173, 174, 7, 31, 2, 2, 174, 175, 5, 18, 10, 2, 175, 176, 7, 32, 2, 2, 176, 182, 3, 2, 2, 2, 177, 178, 9, 4, 2, 2, 178, 182, 5, 20, 11, 16, 179, 180, 7, 50, 2, 2, 180, 182, 5, 20, 11, 6, 181, 171, 3, 2, 2, 2, 181, 173, 3, 2, 2, 2, 181, 177, 3, 2, 2, 2, 181, 179, 3, 2, 2, 2, 182, 248, 3, 2, 2, 2, 183, 184, 12, 17, 2, 2, 184, 185, 7, 7, 2, 2, 185, 247, 5, 20, 11, 17, 186, 187, 12, 15, 2, 2, 187, 188, 9, 5, 2, 2, 188, 247, 5, 20, 11, 16, 189, 190, 12, 14, 2, 2, 190, 191, 9, 6, 2, 2, 191, 247, 5, 20, 11, 15, 192, 193, 12, 13, 2, 2, 193, 194, 9, 7, 2, 2, 194, 247, 5, 20, 11, 14, 195, 196, 12, 12, 2, 2, 196, 197, 7, 15, 2, 2, 197, 247, 5, 20, 11, 13, 198, 199, 12, 11, 2, 2, 199, 200, 7, 16, 2, 2, 200, 247, 5, 20, 11, 12, 201, 202, 12, 10, 2, 2, 202, 203, 7, 17, 2, 2, 203, 247, 5, 20, 11, 11, 204, 205, 12, 9, 2, 2, 205, 206, 9, 8, 2, 2, 206, 247, 5, 20, 11, 10, 207, 208, 12, 7, 2, 2, 208, 209, 9, 9, 2, 2, 209, 247, 5, 20, 11, 7, 210, 211, 12, 5, 2, 2, 211, 212, 7, 51, 2, 2, 212, 247, 5, 20, 11, 5, 213, 214, 12, 4, 2, 2, 214, 215, 7, 52, 2, 2, 215, 247, 5, 20, 11, 4, 216, 217, 12, 3, 2, 2, 217, 218, 7, 53, 2, 2, 218, 219, 5, 20, 11, 2, 219, 220, 7, 33, 2, 2, 220, 221, 5, 20, 11, 3, 221, 247, 3, 2, 2, 2, 222, 223, 12, 20, 2, 2, 223, 224, 7, 38, 2, 2, 224, 225, 5, 20, 11, 2, 225, 226, 7, 39, 2, 2, 226, 247, 3, 2, 2, 2, 227, 228, 12, 19, 2, 2, 228, 229, 7, 40, 2, 2, 229, 247, 7, 67, 2, 2, 230, 231, 12, 18, 2, 2, 231, 237, 7, 31, 2, 2, 232, 233, 5, 22, 12, 2, 233, 234, 7, 21, 2, 2, 234, 236, 3, 2, 2, 2, 235, 232, 3, 2, 2, 2, 236, 239, 3, 2, 2, 2, 237, 235, 3, 2, 2, 2, 237, 238, 3, 2, 2, 2, 238, 241, 3, 2, 2, 2, 239, 237, 3, 2, 2, 2, 240, 242, 5, 22, 12, 2, 241, 240, 3, 2, 2, 2, 241, 242, 3, 2, 2, 2, 242, 243, 3, 2, 2, 2, 243, 247, 7, 32, 2, 2, 244, 245, 12, 8, 2, 2, 245, 247, 7, 43, 2, 2, 246, 183, 3, 2, 2, 2, 246, 186, 3, 2, 2, 2, 246, 189, 3, 2, 2, 2, 246, 192, 3, 2, 2, 2, 246, 195, 3, 2, 2, 2, 246, 198, 3, 2, 2, 2, 246, 201, 3, 2, 2, 2, 246, 204, 3, 2, 2, 2, 246, 207, 3, 2, 2, 2, 246, 210, 3, 2, 2, 2, 246, 213, 3, 2, 2, 2, 246, 216, 3, 2, 2, 2, 246, 222, 3, 2, 2, 2, 246, 227, 3, 2, 2, 2, 246, 230, 3, 2, 2, 2, 246, 244, 3, 2, 2, 2, 247, 250, 3, 2, 2, 2, 248, 246, 3, 2, 2, 2, 248, 249, 3, 2, 2, 2, 249, 21, 3, 2, 2, 2, 250, 248, 3, 2, 2, 2, 251, 252, 7, 67, 2, 2, 252, 254, 7, 6, 2, 2, 253, 251, 3, 2, 2, 2, 253, 254, 3, 2, 2, 2, 254, 255, 3, 2, 2, 2, 255, 256, 5, 20, 11, 2, 256, 23, 3, 2, 2, 2, 257, 277, 7, 63, 2, 2, 258, 277, 7, 64, 2, 2, 259, 277, 9, 10, 2, 2, 260, 277, 7, 65, 2, 2, 261, 277, 7, 66, 2, 2, 262, 268, 7, 38, 2, 2, 263, 264, 5, 20, 11, 2, 264, 265, 7, 21, 2, 2, 265, 267, 3, 2, 2, 2, 266, 263, 3, 2, 2, 2, 267, 270, 3, 2, 2, 2, 268, 266, 3, 2, 2, 2, 268, 269, 3, 2, 2, 2, 269, 272, 3, 2, 2, 2, 270, 268, 3, 2, 2, 2, 271, 273, 5, 20, 11, 2, 272, 271, 3, 2, 2, 2, 272, 273, 3, 2, 2, 2, 273, 274, 3, 2, 2, 2, 274, 277, 7, 39, 2, 2, 275, 277, 7, 67, 2, 2, 276, 257, 3, 2, 2, 2, 276, 258, 3, 2, 2, 2, 276, 259, 3, 2, 2, 2, 276, 260, 3, 2, 2, 2, 276, 261, 3, 2, 2, 2, 276, 262, 3, 2, 2, 2, 276, 275, 3, 2, 2, 2, 277, 25, 3, 2, 2, 2, 278, 279, 8, 14, 1, 2, 279, 296, 7, 56, 2, 2, 280, 296, 7, 57, 2, 2, 281, 296, 7, 58, 2, 2, 282, 296, 7, 59, 2, 2, 283, 296, 7, 60, 2, 2, 284, 296, 7, 61, 2, 2, 285, 286, 7, 31, 2, 2, 286, 287, 5, 26, 14, 2, 287, 288, 7, 32, 2, 2, 288, 296, 3, 2, 2, 2, 289, 290, 7, 38, 2, 2, 290, 291, 5, 26, 14, 2, 291, 292, 7, 39, 2, 2, 292, 296, 3, 2, 2, 2, 293, 294, 7, 62, 2, 2, 294, 296, 5, 26, 14, 3, 295, 278, 3, 2, 2, 2, 295, 280, 3, 2, 2, 2, 295, 281, 3, 2, 2, 2, 295, 282, 3, 2, 2, 2, 295, 283, 3, 2, 2, 2, 295, 284, 3, 2, 2, 2, 295, 285, 3, 2, 2, 2, 295, 289, 3, 2, 2, 2, 295, 293, 3, 2, 2, 2, 296, 305, 3, 2, 2, 2, 297, 298, 12, 5, 2, 2, 298, 299, 7, 8, 2, 2, 299, 304, 5, 26, 14, 5, 300, 301, 12, 4, 2, 2, 301, 302, 7, 62, 2, 2, 302, 304, 5, 26, 14, 4, 303, 297, 3, 2, 2, 2, 303, 300, 3, 2, 2, 2, 304, 307, 3, 2, 2, 2, 305, 303, 3, 2, 2, 2, 305, 306, 3, 2, 2, 2, 306, 27, 3, 2, 2, 2, 307, 305, 3, 2, 2, 2, 33, 31, 40, 45, 51, 58, 70, 72, 79, 91, 96, 112, 124, 128, 132, 135, 141, 148, 157, 166, 181, 237, 241, 246, 248, 253, 268, 272, 276, 295, 303, 305] \ No newline at end of file diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index 2f2eae2d..d06f1426 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -9,147 +9,152 @@ def serializedATN(): with StringIO() as buf: buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3E") - buf.write("\u012d\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") - buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\3\2") - buf.write("\7\2\34\n\2\f\2\16\2\37\13\2\3\2\3\2\3\3\3\3\3\3\3\3\5") - buf.write("\3\'\n\3\3\4\3\4\3\4\5\4,\n\4\3\4\3\4\3\4\3\4\5\4\62\n") - buf.write("\4\3\4\3\4\3\4\7\4\67\n\4\f\4\16\4:\13\4\3\4\3\4\3\4\3") - buf.write("\4\3\4\3\4\3\4\3\4\3\4\5\4E\n\4\5\4G\n\4\3\5\3\5\3\5\7") - buf.write("\5L\n\5\f\5\16\5O\13\5\3\6\3\6\3\6\3\6\3\6\3\6\3\6\7\6") - buf.write("X\n\6\f\6\16\6[\13\6\3\6\3\6\5\6_\n\6\3\6\3\6\3\6\3\6") - buf.write("\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\5\6o\n\6\3\6") - buf.write("\3\6\3\6\3\6\3\6\3\6\3\6\3\6\7\6y\n\6\f\6\16\6|\13\6\3") - buf.write("\6\5\6\177\n\6\3\6\3\6\5\6\u0083\n\6\3\6\5\6\u0086\n\6") - buf.write("\3\7\3\7\3\7\3\7\5\7\u008c\n\7\3\b\3\b\3\b\6\b\u0091\n") - buf.write("\b\r\b\16\b\u0092\3\b\3\b\3\t\3\t\3\t\6\t\u009a\n\t\r") - buf.write("\t\16\t\u009b\3\t\3\t\3\n\3\n\3\n\7\n\u00a3\n\n\f\n\16") - buf.write("\n\u00a6\13\n\3\n\3\n\3\13\3\13\3\13\3\13\3\13\3\13\3") - buf.write("\13\3\13\3\13\3\13\5\13\u00b4\n\13\3\13\3\13\3\13\3\13") + buf.write("\u0135\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16") + buf.write("\t\16\3\2\7\2\36\n\2\f\2\16\2!\13\2\3\2\3\2\3\3\3\3\3") + buf.write("\3\3\3\5\3)\n\3\3\4\3\4\3\4\5\4.\n\4\3\4\3\4\3\4\3\4\5") + buf.write("\4\64\n\4\3\4\3\4\3\4\7\49\n\4\f\4\16\4<\13\4\3\4\3\4") + buf.write("\3\4\3\4\3\4\3\4\3\4\3\4\3\4\5\4G\n\4\5\4I\n\4\3\5\3\5") + buf.write("\3\5\7\5N\n\5\f\5\16\5Q\13\5\3\6\3\6\3\6\3\6\3\6\3\6\3") + buf.write("\6\7\6Z\n\6\f\6\16\6]\13\6\3\6\3\6\5\6a\n\6\3\6\3\6\3") + buf.write("\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\5\6q\n") + buf.write("\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\7\6{\n\6\f\6\16\6~") + buf.write("\13\6\3\6\5\6\u0081\n\6\3\6\3\6\5\6\u0085\n\6\3\6\5\6") + buf.write("\u0088\n\6\3\7\3\7\3\7\3\7\5\7\u008e\n\7\3\b\3\b\3\b\6") + buf.write("\b\u0093\n\b\r\b\16\b\u0094\3\b\3\b\3\t\3\t\3\t\6\t\u009c") + buf.write("\n\t\r\t\16\t\u009d\3\t\3\t\3\n\3\n\3\n\7\n\u00a5\n\n") + buf.write("\f\n\16\n\u00a8\13\n\3\n\3\n\3\13\3\13\3\13\3\13\3\13") + buf.write("\3\13\3\13\3\13\3\13\3\13\5\13\u00b6\n\13\3\13\3\13\3") + buf.write("\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") - buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") - buf.write("\3\13\3\13\3\13\3\13\7\13\u00ea\n\13\f\13\16\13\u00ed") - buf.write("\13\13\3\13\5\13\u00f0\n\13\3\13\3\13\3\13\7\13\u00f5") - buf.write("\n\13\f\13\16\13\u00f8\13\13\3\f\3\f\3\f\3\f\3\f\3\f\3") - buf.write("\f\3\f\3\f\7\f\u0103\n\f\f\f\16\f\u0106\13\f\3\f\5\f\u0109") - buf.write("\n\f\3\f\3\f\5\f\u010d\n\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r") - buf.write("\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\5\r\u0120\n\r") - buf.write("\3\r\3\r\3\r\3\r\3\r\3\r\7\r\u0128\n\r\f\r\16\r\u012b") - buf.write("\13\r\3\r\2\4\24\30\16\2\4\6\b\n\f\16\20\22\24\26\30\2") - buf.write("\13\3\2\7\21\3\2\22\23\4\2\13\f))\3\2\b\n\3\2\13\f\3\2") - buf.write("\r\16\3\2*+\3\2,\61\3\2\66\67\2\u0162\2\35\3\2\2\2\4&") - buf.write("\3\2\2\2\6F\3\2\2\2\bH\3\2\2\2\n\u0085\3\2\2\2\f\u0087") - buf.write("\3\2\2\2\16\u008d\3\2\2\2\20\u0096\3\2\2\2\22\u00a4\3") - buf.write("\2\2\2\24\u00b3\3\2\2\2\26\u010c\3\2\2\2\30\u011f\3\2") - buf.write("\2\2\32\34\5\4\3\2\33\32\3\2\2\2\34\37\3\2\2\2\35\33\3") - buf.write("\2\2\2\35\36\3\2\2\2\36 \3\2\2\2\37\35\3\2\2\2 !\7\2\2") - buf.write("\3!\3\3\2\2\2\"#\5\6\4\2#$\7\3\2\2$\'\3\2\2\2%\'\5\n\6") - buf.write("\2&\"\3\2\2\2&%\3\2\2\2\'\5\3\2\2\2(G\7\4\2\2)+\7\5\2") - buf.write("\2*,\5\22\n\2+*\3\2\2\2+,\3\2\2\2,G\3\2\2\2-.\5\30\r\2") - buf.write(".\61\7C\2\2/\60\7\6\2\2\60\62\5\22\n\2\61/\3\2\2\2\61") - buf.write("\62\3\2\2\2\62G\3\2\2\2\63\64\5\b\5\2\64\65\7\6\2\2\65") - buf.write("\67\3\2\2\2\66\63\3\2\2\2\67:\3\2\2\28\66\3\2\2\289\3") - buf.write("\2\2\29;\3\2\2\2:8\3\2\2\2;G\5\22\n\2<=\5\24\13\2=>\t") - buf.write("\2\2\2>?\7\6\2\2?@\5\24\13\2@G\3\2\2\2AG\t\3\2\2BD\7\24") - buf.write("\2\2CE\5\22\n\2DC\3\2\2\2DE\3\2\2\2EG\3\2\2\2F(\3\2\2") - buf.write("\2F)\3\2\2\2F-\3\2\2\2F8\3\2\2\2F<\3\2\2\2FA\3\2\2\2F") - buf.write("B\3\2\2\2G\7\3\2\2\2HM\5\24\13\2IJ\7\25\2\2JL\5\24\13") - buf.write("\2KI\3\2\2\2LO\3\2\2\2MK\3\2\2\2MN\3\2\2\2N\t\3\2\2\2") - buf.write("OM\3\2\2\2PQ\7\26\2\2QR\5\24\13\2RY\5\16\b\2ST\7\27\2") - buf.write("\2TU\5\24\13\2UV\5\16\b\2VX\3\2\2\2WS\3\2\2\2X[\3\2\2") - buf.write("\2YW\3\2\2\2YZ\3\2\2\2Z^\3\2\2\2[Y\3\2\2\2\\]\7\30\2\2") - buf.write("]_\5\16\b\2^\\\3\2\2\2^_\3\2\2\2_\u0086\3\2\2\2`a\7\31") - buf.write("\2\2ab\5\24\13\2bc\5\16\b\2c\u0086\3\2\2\2de\7\32\2\2") - buf.write("ef\5\24\13\2fg\5\16\b\2g\u0086\3\2\2\2hi\7\33\2\2ij\5") - buf.write("\22\n\2jk\7\34\2\2kn\5\22\n\2lm\7\35\2\2mo\5\22\n\2nl") - buf.write("\3\2\2\2no\3\2\2\2op\3\2\2\2pq\5\16\b\2q\u0086\3\2\2\2") - buf.write("rs\7\36\2\2st\7C\2\2tz\7\37\2\2uv\5\f\7\2vw\7\25\2\2w") - buf.write("y\3\2\2\2xu\3\2\2\2y|\3\2\2\2zx\3\2\2\2z{\3\2\2\2{~\3") - buf.write("\2\2\2|z\3\2\2\2}\177\5\f\7\2~}\3\2\2\2~\177\3\2\2\2\177") - buf.write("\u0080\3\2\2\2\u0080\u0082\7 \2\2\u0081\u0083\5\30\r\2") - buf.write("\u0082\u0081\3\2\2\2\u0082\u0083\3\2\2\2\u0083\u0084\3") - buf.write("\2\2\2\u0084\u0086\5\20\t\2\u0085P\3\2\2\2\u0085`\3\2") - buf.write("\2\2\u0085d\3\2\2\2\u0085h\3\2\2\2\u0085r\3\2\2\2\u0086") - buf.write("\13\3\2\2\2\u0087\u0088\5\30\r\2\u0088\u008b\7C\2\2\u0089") - buf.write("\u008a\7!\2\2\u008a\u008c\5\24\13\2\u008b\u0089\3\2\2") - buf.write("\2\u008b\u008c\3\2\2\2\u008c\r\3\2\2\2\u008d\u008e\7\"") - buf.write("\2\2\u008e\u0090\7#\2\2\u008f\u0091\5\4\3\2\u0090\u008f") - buf.write("\3\2\2\2\u0091\u0092\3\2\2\2\u0092\u0090\3\2\2\2\u0092") - buf.write("\u0093\3\2\2\2\u0093\u0094\3\2\2\2\u0094\u0095\7$\2\2") - buf.write("\u0095\17\3\2\2\2\u0096\u0097\7%\2\2\u0097\u0099\7#\2") - buf.write("\2\u0098\u009a\5\4\3\2\u0099\u0098\3\2\2\2\u009a\u009b") - buf.write("\3\2\2\2\u009b\u0099\3\2\2\2\u009b\u009c\3\2\2\2\u009c") - buf.write("\u009d\3\2\2\2\u009d\u009e\7$\2\2\u009e\21\3\2\2\2\u009f") - buf.write("\u00a0\5\24\13\2\u00a0\u00a1\7\25\2\2\u00a1\u00a3\3\2") - buf.write("\2\2\u00a2\u009f\3\2\2\2\u00a3\u00a6\3\2\2\2\u00a4\u00a2") - buf.write("\3\2\2\2\u00a4\u00a5\3\2\2\2\u00a5\u00a7\3\2\2\2\u00a6") - buf.write("\u00a4\3\2\2\2\u00a7\u00a8\5\24\13\2\u00a8\23\3\2\2\2") - buf.write("\u00a9\u00aa\b\13\1\2\u00aa\u00b4\5\26\f\2\u00ab\u00ac") - buf.write("\7\37\2\2\u00ac\u00ad\5\22\n\2\u00ad\u00ae\7 \2\2\u00ae") - buf.write("\u00b4\3\2\2\2\u00af\u00b0\t\4\2\2\u00b0\u00b4\5\24\13") - buf.write("\20\u00b1\u00b2\7\62\2\2\u00b2\u00b4\5\24\13\6\u00b3\u00a9") - buf.write("\3\2\2\2\u00b3\u00ab\3\2\2\2\u00b3\u00af\3\2\2\2\u00b3") - buf.write("\u00b1\3\2\2\2\u00b4\u00f6\3\2\2\2\u00b5\u00b6\f\21\2") - buf.write("\2\u00b6\u00b7\7\7\2\2\u00b7\u00f5\5\24\13\21\u00b8\u00b9") - buf.write("\f\17\2\2\u00b9\u00ba\t\5\2\2\u00ba\u00f5\5\24\13\20\u00bb") - buf.write("\u00bc\f\16\2\2\u00bc\u00bd\t\6\2\2\u00bd\u00f5\5\24\13") - buf.write("\17\u00be\u00bf\f\r\2\2\u00bf\u00c0\t\7\2\2\u00c0\u00f5") - buf.write("\5\24\13\16\u00c1\u00c2\f\f\2\2\u00c2\u00c3\7\17\2\2\u00c3") - buf.write("\u00f5\5\24\13\r\u00c4\u00c5\f\13\2\2\u00c5\u00c6\7\20") - buf.write("\2\2\u00c6\u00f5\5\24\13\f\u00c7\u00c8\f\n\2\2\u00c8\u00c9") - buf.write("\7\21\2\2\u00c9\u00f5\5\24\13\13\u00ca\u00cb\f\t\2\2\u00cb") - buf.write("\u00cc\t\b\2\2\u00cc\u00f5\5\24\13\n\u00cd\u00ce\f\7\2") - buf.write("\2\u00ce\u00cf\t\t\2\2\u00cf\u00f5\5\24\13\7\u00d0\u00d1") - buf.write("\f\5\2\2\u00d1\u00d2\7\63\2\2\u00d2\u00f5\5\24\13\5\u00d3") - buf.write("\u00d4\f\4\2\2\u00d4\u00d5\7\64\2\2\u00d5\u00f5\5\24\13") - buf.write("\4\u00d6\u00d7\f\3\2\2\u00d7\u00d8\7\65\2\2\u00d8\u00d9") - buf.write("\5\24\13\2\u00d9\u00da\7!\2\2\u00da\u00db\5\24\13\3\u00db") - buf.write("\u00f5\3\2\2\2\u00dc\u00dd\f\24\2\2\u00dd\u00de\7&\2\2") - buf.write("\u00de\u00df\5\24\13\2\u00df\u00e0\7\'\2\2\u00e0\u00f5") - buf.write("\3\2\2\2\u00e1\u00e2\f\23\2\2\u00e2\u00e3\7(\2\2\u00e3") - buf.write("\u00f5\7C\2\2\u00e4\u00e5\f\22\2\2\u00e5\u00eb\7\37\2") - buf.write("\2\u00e6\u00e7\5\24\13\2\u00e7\u00e8\7\25\2\2\u00e8\u00ea") - buf.write("\3\2\2\2\u00e9\u00e6\3\2\2\2\u00ea\u00ed\3\2\2\2\u00eb") - buf.write("\u00e9\3\2\2\2\u00eb\u00ec\3\2\2\2\u00ec\u00ef\3\2\2\2") - buf.write("\u00ed\u00eb\3\2\2\2\u00ee\u00f0\5\24\13\2\u00ef\u00ee") - buf.write("\3\2\2\2\u00ef\u00f0\3\2\2\2\u00f0\u00f1\3\2\2\2\u00f1") - buf.write("\u00f5\7 \2\2\u00f2\u00f3\f\b\2\2\u00f3\u00f5\7+\2\2\u00f4") - buf.write("\u00b5\3\2\2\2\u00f4\u00b8\3\2\2\2\u00f4\u00bb\3\2\2\2") - buf.write("\u00f4\u00be\3\2\2\2\u00f4\u00c1\3\2\2\2\u00f4\u00c4\3") - buf.write("\2\2\2\u00f4\u00c7\3\2\2\2\u00f4\u00ca\3\2\2\2\u00f4\u00cd") - buf.write("\3\2\2\2\u00f4\u00d0\3\2\2\2\u00f4\u00d3\3\2\2\2\u00f4") - buf.write("\u00d6\3\2\2\2\u00f4\u00dc\3\2\2\2\u00f4\u00e1\3\2\2\2") - buf.write("\u00f4\u00e4\3\2\2\2\u00f4\u00f2\3\2\2\2\u00f5\u00f8\3") - buf.write("\2\2\2\u00f6\u00f4\3\2\2\2\u00f6\u00f7\3\2\2\2\u00f7\25") - buf.write("\3\2\2\2\u00f8\u00f6\3\2\2\2\u00f9\u010d\7?\2\2\u00fa") - buf.write("\u010d\7@\2\2\u00fb\u010d\t\n\2\2\u00fc\u010d\7A\2\2\u00fd") - buf.write("\u010d\7B\2\2\u00fe\u0104\7&\2\2\u00ff\u0100\5\24\13\2") - buf.write("\u0100\u0101\7\25\2\2\u0101\u0103\3\2\2\2\u0102\u00ff") - buf.write("\3\2\2\2\u0103\u0106\3\2\2\2\u0104\u0102\3\2\2\2\u0104") - buf.write("\u0105\3\2\2\2\u0105\u0108\3\2\2\2\u0106\u0104\3\2\2\2") - buf.write("\u0107\u0109\5\24\13\2\u0108\u0107\3\2\2\2\u0108\u0109") - buf.write("\3\2\2\2\u0109\u010a\3\2\2\2\u010a\u010d\7\'\2\2\u010b") - buf.write("\u010d\7C\2\2\u010c\u00f9\3\2\2\2\u010c\u00fa\3\2\2\2") - buf.write("\u010c\u00fb\3\2\2\2\u010c\u00fc\3\2\2\2\u010c\u00fd\3") - buf.write("\2\2\2\u010c\u00fe\3\2\2\2\u010c\u010b\3\2\2\2\u010d\27") - buf.write("\3\2\2\2\u010e\u010f\b\r\1\2\u010f\u0120\78\2\2\u0110") - buf.write("\u0120\79\2\2\u0111\u0120\7:\2\2\u0112\u0120\7;\2\2\u0113") - buf.write("\u0120\7<\2\2\u0114\u0120\7=\2\2\u0115\u0116\7\37\2\2") - buf.write("\u0116\u0117\5\30\r\2\u0117\u0118\7 \2\2\u0118\u0120\3") - buf.write("\2\2\2\u0119\u011a\7&\2\2\u011a\u011b\5\30\r\2\u011b\u011c") - buf.write("\7\'\2\2\u011c\u0120\3\2\2\2\u011d\u011e\7>\2\2\u011e") - buf.write("\u0120\5\30\r\3\u011f\u010e\3\2\2\2\u011f\u0110\3\2\2") - buf.write("\2\u011f\u0111\3\2\2\2\u011f\u0112\3\2\2\2\u011f\u0113") - buf.write("\3\2\2\2\u011f\u0114\3\2\2\2\u011f\u0115\3\2\2\2\u011f") - buf.write("\u0119\3\2\2\2\u011f\u011d\3\2\2\2\u0120\u0129\3\2\2\2") - buf.write("\u0121\u0122\f\5\2\2\u0122\u0123\7\b\2\2\u0123\u0128\5") - buf.write("\30\r\5\u0124\u0125\f\4\2\2\u0125\u0126\7>\2\2\u0126\u0128") - buf.write("\5\30\r\4\u0127\u0121\3\2\2\2\u0127\u0124\3\2\2\2\u0128") - buf.write("\u012b\3\2\2\2\u0129\u0127\3\2\2\2\u0129\u012a\3\2\2\2") - buf.write("\u012a\31\3\2\2\2\u012b\u0129\3\2\2\2 \35&+\618DFMY^n") - buf.write("z~\u0082\u0085\u008b\u0092\u009b\u00a4\u00b3\u00eb\u00ef") - buf.write("\u00f4\u00f6\u0104\u0108\u010c\u011f\u0127\u0129") + buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\7\13\u00ec\n\13\f\13\16") + buf.write("\13\u00ef\13\13\3\13\5\13\u00f2\n\13\3\13\3\13\3\13\7") + buf.write("\13\u00f7\n\13\f\13\16\13\u00fa\13\13\3\f\3\f\5\f\u00fe") + buf.write("\n\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\7\r\u010b") + buf.write("\n\r\f\r\16\r\u010e\13\r\3\r\5\r\u0111\n\r\3\r\3\r\5\r") + buf.write("\u0115\n\r\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16") + buf.write("\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\5\16\u0128\n") + buf.write("\16\3\16\3\16\3\16\3\16\3\16\3\16\7\16\u0130\n\16\f\16") + buf.write("\16\16\u0133\13\16\3\16\2\4\24\32\17\2\4\6\b\n\f\16\20") + buf.write("\22\24\26\30\32\2\13\3\2\7\21\3\2\22\23\4\2\13\f))\3\2") + buf.write("\b\n\3\2\13\f\3\2\r\16\3\2*+\3\2,\61\3\2\66\67\2\u016a") + buf.write("\2\37\3\2\2\2\4(\3\2\2\2\6H\3\2\2\2\bJ\3\2\2\2\n\u0087") + buf.write("\3\2\2\2\f\u0089\3\2\2\2\16\u008f\3\2\2\2\20\u0098\3\2") + buf.write("\2\2\22\u00a6\3\2\2\2\24\u00b5\3\2\2\2\26\u00fd\3\2\2") + buf.write("\2\30\u0114\3\2\2\2\32\u0127\3\2\2\2\34\36\5\4\3\2\35") + buf.write("\34\3\2\2\2\36!\3\2\2\2\37\35\3\2\2\2\37 \3\2\2\2 \"\3") + buf.write("\2\2\2!\37\3\2\2\2\"#\7\2\2\3#\3\3\2\2\2$%\5\6\4\2%&\7") + buf.write("\3\2\2&)\3\2\2\2\')\5\n\6\2($\3\2\2\2(\'\3\2\2\2)\5\3") + buf.write("\2\2\2*I\7\4\2\2+-\7\5\2\2,.\5\22\n\2-,\3\2\2\2-.\3\2") + buf.write("\2\2.I\3\2\2\2/\60\5\32\16\2\60\63\7C\2\2\61\62\7\6\2") + buf.write("\2\62\64\5\22\n\2\63\61\3\2\2\2\63\64\3\2\2\2\64I\3\2") + buf.write("\2\2\65\66\5\b\5\2\66\67\7\6\2\2\679\3\2\2\28\65\3\2\2") + buf.write("\29<\3\2\2\2:8\3\2\2\2:;\3\2\2\2;=\3\2\2\2<:\3\2\2\2=") + buf.write("I\5\22\n\2>?\5\24\13\2?@\t\2\2\2@A\7\6\2\2AB\5\24\13\2") + buf.write("BI\3\2\2\2CI\t\3\2\2DF\7\24\2\2EG\5\22\n\2FE\3\2\2\2F") + buf.write("G\3\2\2\2GI\3\2\2\2H*\3\2\2\2H+\3\2\2\2H/\3\2\2\2H:\3") + buf.write("\2\2\2H>\3\2\2\2HC\3\2\2\2HD\3\2\2\2I\7\3\2\2\2JO\5\24") + buf.write("\13\2KL\7\25\2\2LN\5\24\13\2MK\3\2\2\2NQ\3\2\2\2OM\3\2") + buf.write("\2\2OP\3\2\2\2P\t\3\2\2\2QO\3\2\2\2RS\7\26\2\2ST\5\24") + buf.write("\13\2T[\5\16\b\2UV\7\27\2\2VW\5\24\13\2WX\5\16\b\2XZ\3") + buf.write("\2\2\2YU\3\2\2\2Z]\3\2\2\2[Y\3\2\2\2[\\\3\2\2\2\\`\3\2") + buf.write("\2\2][\3\2\2\2^_\7\30\2\2_a\5\16\b\2`^\3\2\2\2`a\3\2\2") + buf.write("\2a\u0088\3\2\2\2bc\7\31\2\2cd\5\24\13\2de\5\16\b\2e\u0088") + buf.write("\3\2\2\2fg\7\32\2\2gh\5\24\13\2hi\5\16\b\2i\u0088\3\2") + buf.write("\2\2jk\7\33\2\2kl\5\22\n\2lm\7\34\2\2mp\5\22\n\2no\7\35") + buf.write("\2\2oq\5\22\n\2pn\3\2\2\2pq\3\2\2\2qr\3\2\2\2rs\5\16\b") + buf.write("\2s\u0088\3\2\2\2tu\7\36\2\2uv\7C\2\2v|\7\37\2\2wx\5\f") + buf.write("\7\2xy\7\25\2\2y{\3\2\2\2zw\3\2\2\2{~\3\2\2\2|z\3\2\2") + buf.write("\2|}\3\2\2\2}\u0080\3\2\2\2~|\3\2\2\2\177\u0081\5\f\7") + buf.write("\2\u0080\177\3\2\2\2\u0080\u0081\3\2\2\2\u0081\u0082\3") + buf.write("\2\2\2\u0082\u0084\7 \2\2\u0083\u0085\5\32\16\2\u0084") + buf.write("\u0083\3\2\2\2\u0084\u0085\3\2\2\2\u0085\u0086\3\2\2\2") + buf.write("\u0086\u0088\5\20\t\2\u0087R\3\2\2\2\u0087b\3\2\2\2\u0087") + buf.write("f\3\2\2\2\u0087j\3\2\2\2\u0087t\3\2\2\2\u0088\13\3\2\2") + buf.write("\2\u0089\u008a\5\32\16\2\u008a\u008d\7C\2\2\u008b\u008c") + buf.write("\7!\2\2\u008c\u008e\5\24\13\2\u008d\u008b\3\2\2\2\u008d") + buf.write("\u008e\3\2\2\2\u008e\r\3\2\2\2\u008f\u0090\7\"\2\2\u0090") + buf.write("\u0092\7#\2\2\u0091\u0093\5\4\3\2\u0092\u0091\3\2\2\2") + buf.write("\u0093\u0094\3\2\2\2\u0094\u0092\3\2\2\2\u0094\u0095\3") + buf.write("\2\2\2\u0095\u0096\3\2\2\2\u0096\u0097\7$\2\2\u0097\17") + buf.write("\3\2\2\2\u0098\u0099\7%\2\2\u0099\u009b\7#\2\2\u009a\u009c") + buf.write("\5\4\3\2\u009b\u009a\3\2\2\2\u009c\u009d\3\2\2\2\u009d") + buf.write("\u009b\3\2\2\2\u009d\u009e\3\2\2\2\u009e\u009f\3\2\2\2") + buf.write("\u009f\u00a0\7$\2\2\u00a0\21\3\2\2\2\u00a1\u00a2\5\24") + buf.write("\13\2\u00a2\u00a3\7\25\2\2\u00a3\u00a5\3\2\2\2\u00a4\u00a1") + buf.write("\3\2\2\2\u00a5\u00a8\3\2\2\2\u00a6\u00a4\3\2\2\2\u00a6") + buf.write("\u00a7\3\2\2\2\u00a7\u00a9\3\2\2\2\u00a8\u00a6\3\2\2\2") + buf.write("\u00a9\u00aa\5\24\13\2\u00aa\23\3\2\2\2\u00ab\u00ac\b") + buf.write("\13\1\2\u00ac\u00b6\5\30\r\2\u00ad\u00ae\7\37\2\2\u00ae") + buf.write("\u00af\5\22\n\2\u00af\u00b0\7 \2\2\u00b0\u00b6\3\2\2\2") + buf.write("\u00b1\u00b2\t\4\2\2\u00b2\u00b6\5\24\13\20\u00b3\u00b4") + buf.write("\7\62\2\2\u00b4\u00b6\5\24\13\6\u00b5\u00ab\3\2\2\2\u00b5") + buf.write("\u00ad\3\2\2\2\u00b5\u00b1\3\2\2\2\u00b5\u00b3\3\2\2\2") + buf.write("\u00b6\u00f8\3\2\2\2\u00b7\u00b8\f\21\2\2\u00b8\u00b9") + buf.write("\7\7\2\2\u00b9\u00f7\5\24\13\21\u00ba\u00bb\f\17\2\2\u00bb") + buf.write("\u00bc\t\5\2\2\u00bc\u00f7\5\24\13\20\u00bd\u00be\f\16") + buf.write("\2\2\u00be\u00bf\t\6\2\2\u00bf\u00f7\5\24\13\17\u00c0") + buf.write("\u00c1\f\r\2\2\u00c1\u00c2\t\7\2\2\u00c2\u00f7\5\24\13") + buf.write("\16\u00c3\u00c4\f\f\2\2\u00c4\u00c5\7\17\2\2\u00c5\u00f7") + buf.write("\5\24\13\r\u00c6\u00c7\f\13\2\2\u00c7\u00c8\7\20\2\2\u00c8") + buf.write("\u00f7\5\24\13\f\u00c9\u00ca\f\n\2\2\u00ca\u00cb\7\21") + buf.write("\2\2\u00cb\u00f7\5\24\13\13\u00cc\u00cd\f\t\2\2\u00cd") + buf.write("\u00ce\t\b\2\2\u00ce\u00f7\5\24\13\n\u00cf\u00d0\f\7\2") + buf.write("\2\u00d0\u00d1\t\t\2\2\u00d1\u00f7\5\24\13\7\u00d2\u00d3") + buf.write("\f\5\2\2\u00d3\u00d4\7\63\2\2\u00d4\u00f7\5\24\13\5\u00d5") + buf.write("\u00d6\f\4\2\2\u00d6\u00d7\7\64\2\2\u00d7\u00f7\5\24\13") + buf.write("\4\u00d8\u00d9\f\3\2\2\u00d9\u00da\7\65\2\2\u00da\u00db") + buf.write("\5\24\13\2\u00db\u00dc\7!\2\2\u00dc\u00dd\5\24\13\3\u00dd") + buf.write("\u00f7\3\2\2\2\u00de\u00df\f\24\2\2\u00df\u00e0\7&\2\2") + buf.write("\u00e0\u00e1\5\24\13\2\u00e1\u00e2\7\'\2\2\u00e2\u00f7") + buf.write("\3\2\2\2\u00e3\u00e4\f\23\2\2\u00e4\u00e5\7(\2\2\u00e5") + buf.write("\u00f7\7C\2\2\u00e6\u00e7\f\22\2\2\u00e7\u00ed\7\37\2") + buf.write("\2\u00e8\u00e9\5\26\f\2\u00e9\u00ea\7\25\2\2\u00ea\u00ec") + buf.write("\3\2\2\2\u00eb\u00e8\3\2\2\2\u00ec\u00ef\3\2\2\2\u00ed") + buf.write("\u00eb\3\2\2\2\u00ed\u00ee\3\2\2\2\u00ee\u00f1\3\2\2\2") + buf.write("\u00ef\u00ed\3\2\2\2\u00f0\u00f2\5\26\f\2\u00f1\u00f0") + buf.write("\3\2\2\2\u00f1\u00f2\3\2\2\2\u00f2\u00f3\3\2\2\2\u00f3") + buf.write("\u00f7\7 \2\2\u00f4\u00f5\f\b\2\2\u00f5\u00f7\7+\2\2\u00f6") + buf.write("\u00b7\3\2\2\2\u00f6\u00ba\3\2\2\2\u00f6\u00bd\3\2\2\2") + buf.write("\u00f6\u00c0\3\2\2\2\u00f6\u00c3\3\2\2\2\u00f6\u00c6\3") + buf.write("\2\2\2\u00f6\u00c9\3\2\2\2\u00f6\u00cc\3\2\2\2\u00f6\u00cf") + buf.write("\3\2\2\2\u00f6\u00d2\3\2\2\2\u00f6\u00d5\3\2\2\2\u00f6") + buf.write("\u00d8\3\2\2\2\u00f6\u00de\3\2\2\2\u00f6\u00e3\3\2\2\2") + buf.write("\u00f6\u00e6\3\2\2\2\u00f6\u00f4\3\2\2\2\u00f7\u00fa\3") + buf.write("\2\2\2\u00f8\u00f6\3\2\2\2\u00f8\u00f9\3\2\2\2\u00f9\25") + buf.write("\3\2\2\2\u00fa\u00f8\3\2\2\2\u00fb\u00fc\7C\2\2\u00fc") + buf.write("\u00fe\7\6\2\2\u00fd\u00fb\3\2\2\2\u00fd\u00fe\3\2\2\2") + buf.write("\u00fe\u00ff\3\2\2\2\u00ff\u0100\5\24\13\2\u0100\27\3") + buf.write("\2\2\2\u0101\u0115\7?\2\2\u0102\u0115\7@\2\2\u0103\u0115") + buf.write("\t\n\2\2\u0104\u0115\7A\2\2\u0105\u0115\7B\2\2\u0106\u010c") + buf.write("\7&\2\2\u0107\u0108\5\24\13\2\u0108\u0109\7\25\2\2\u0109") + buf.write("\u010b\3\2\2\2\u010a\u0107\3\2\2\2\u010b\u010e\3\2\2\2") + buf.write("\u010c\u010a\3\2\2\2\u010c\u010d\3\2\2\2\u010d\u0110\3") + buf.write("\2\2\2\u010e\u010c\3\2\2\2\u010f\u0111\5\24\13\2\u0110") + buf.write("\u010f\3\2\2\2\u0110\u0111\3\2\2\2\u0111\u0112\3\2\2\2") + buf.write("\u0112\u0115\7\'\2\2\u0113\u0115\7C\2\2\u0114\u0101\3") + buf.write("\2\2\2\u0114\u0102\3\2\2\2\u0114\u0103\3\2\2\2\u0114\u0104") + buf.write("\3\2\2\2\u0114\u0105\3\2\2\2\u0114\u0106\3\2\2\2\u0114") + buf.write("\u0113\3\2\2\2\u0115\31\3\2\2\2\u0116\u0117\b\16\1\2\u0117") + buf.write("\u0128\78\2\2\u0118\u0128\79\2\2\u0119\u0128\7:\2\2\u011a") + buf.write("\u0128\7;\2\2\u011b\u0128\7<\2\2\u011c\u0128\7=\2\2\u011d") + buf.write("\u011e\7\37\2\2\u011e\u011f\5\32\16\2\u011f\u0120\7 \2") + buf.write("\2\u0120\u0128\3\2\2\2\u0121\u0122\7&\2\2\u0122\u0123") + buf.write("\5\32\16\2\u0123\u0124\7\'\2\2\u0124\u0128\3\2\2\2\u0125") + buf.write("\u0126\7>\2\2\u0126\u0128\5\32\16\3\u0127\u0116\3\2\2") + buf.write("\2\u0127\u0118\3\2\2\2\u0127\u0119\3\2\2\2\u0127\u011a") + buf.write("\3\2\2\2\u0127\u011b\3\2\2\2\u0127\u011c\3\2\2\2\u0127") + buf.write("\u011d\3\2\2\2\u0127\u0121\3\2\2\2\u0127\u0125\3\2\2\2") + buf.write("\u0128\u0131\3\2\2\2\u0129\u012a\f\5\2\2\u012a\u012b\7") + buf.write("\b\2\2\u012b\u0130\5\32\16\5\u012c\u012d\f\4\2\2\u012d") + buf.write("\u012e\7>\2\2\u012e\u0130\5\32\16\4\u012f\u0129\3\2\2") + buf.write("\2\u012f\u012c\3\2\2\2\u0130\u0133\3\2\2\2\u0131\u012f") + buf.write("\3\2\2\2\u0131\u0132\3\2\2\2\u0132\33\3\2\2\2\u0133\u0131") + buf.write("\3\2\2\2!\37(-\63:FHO[`p|\u0080\u0084\u0087\u008d\u0094") + buf.write("\u009d\u00a6\u00b5\u00ed\u00f1\u00f6\u00f8\u00fd\u010c") + buf.write("\u0110\u0114\u0127\u012f\u0131") return buf.getvalue() @@ -197,17 +202,18 @@ class PyxellParser ( Parser ): RULE_simple_stmt = 2 RULE_lvalue = 3 RULE_compound_stmt = 4 - RULE_arg = 5 + RULE_func_arg = 5 RULE_do_block = 6 RULE_def_block = 7 RULE_tuple_expr = 8 RULE_expr = 9 - RULE_atom = 10 - RULE_typ = 11 + RULE_call_arg = 10 + RULE_atom = 11 + RULE_typ = 12 ruleNames = [ "program", "stmt", "simple_stmt", "lvalue", "compound_stmt", - "arg", "do_block", "def_block", "tuple_expr", "expr", - "atom", "typ" ] + "func_arg", "do_block", "def_block", "tuple_expr", "expr", + "call_arg", "atom", "typ" ] EOF = Token.EOF T__0=1 @@ -322,17 +328,17 @@ def program(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 27 + self.state = 29 self._errHandler.sync(self) _la = self._input.LA(1) while ((((_la - 2)) & ~0x3f) == 0 and ((1 << (_la - 2)) & ((1 << (PyxellParser.T__1 - 2)) | (1 << (PyxellParser.T__2 - 2)) | (1 << (PyxellParser.T__8 - 2)) | (1 << (PyxellParser.T__9 - 2)) | (1 << (PyxellParser.T__15 - 2)) | (1 << (PyxellParser.T__16 - 2)) | (1 << (PyxellParser.T__17 - 2)) | (1 << (PyxellParser.T__19 - 2)) | (1 << (PyxellParser.T__22 - 2)) | (1 << (PyxellParser.T__23 - 2)) | (1 << (PyxellParser.T__24 - 2)) | (1 << (PyxellParser.T__27 - 2)) | (1 << (PyxellParser.T__28 - 2)) | (1 << (PyxellParser.T__35 - 2)) | (1 << (PyxellParser.T__38 - 2)) | (1 << (PyxellParser.T__47 - 2)) | (1 << (PyxellParser.T__51 - 2)) | (1 << (PyxellParser.T__52 - 2)) | (1 << (PyxellParser.T__53 - 2)) | (1 << (PyxellParser.T__54 - 2)) | (1 << (PyxellParser.T__55 - 2)) | (1 << (PyxellParser.T__56 - 2)) | (1 << (PyxellParser.T__57 - 2)) | (1 << (PyxellParser.T__58 - 2)) | (1 << (PyxellParser.T__59 - 2)) | (1 << (PyxellParser.INT - 2)) | (1 << (PyxellParser.FLOAT - 2)) | (1 << (PyxellParser.CHAR - 2)) | (1 << (PyxellParser.STRING - 2)) | (1 << (PyxellParser.ID - 2)))) != 0): - self.state = 24 + self.state = 26 self.stmt() - self.state = 29 + self.state = 31 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 30 + self.state = 32 self.match(PyxellParser.EOF) except RecognitionException as re: localctx.exception = re @@ -374,19 +380,19 @@ def stmt(self): localctx = PyxellParser.StmtContext(self, self._ctx, self.state) self.enterRule(localctx, 2, self.RULE_stmt) try: - self.state = 36 + self.state = 38 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__15, PyxellParser.T__16, PyxellParser.T__17, PyxellParser.T__28, PyxellParser.T__35, PyxellParser.T__38, PyxellParser.T__47, PyxellParser.T__51, PyxellParser.T__52, PyxellParser.T__53, PyxellParser.T__54, PyxellParser.T__55, PyxellParser.T__56, PyxellParser.T__57, PyxellParser.T__58, PyxellParser.T__59, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: self.enterOuterAlt(localctx, 1) - self.state = 32 + self.state = 34 self.simple_stmt() - self.state = 33 + self.state = 35 self.match(PyxellParser.T__0) pass elif token in [PyxellParser.T__19, PyxellParser.T__22, PyxellParser.T__23, PyxellParser.T__24, PyxellParser.T__27]: self.enterOuterAlt(localctx, 2) - self.state = 35 + self.state = 37 self.compound_stmt() pass else: @@ -553,26 +559,26 @@ def simple_stmt(self): self.enterRule(localctx, 4, self.RULE_simple_stmt) self._la = 0 # Token type try: - self.state = 68 + self.state = 70 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,6,self._ctx) if la_ == 1: localctx = PyxellParser.StmtSkipContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 38 + self.state = 40 self.match(PyxellParser.T__1) pass elif la_ == 2: localctx = PyxellParser.StmtPrintContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 39 - self.match(PyxellParser.T__2) self.state = 41 + self.match(PyxellParser.T__2) + self.state = 43 self._errHandler.sync(self) _la = self._input.LA(1) if ((((_la - 9)) & ~0x3f) == 0 and ((1 << (_la - 9)) & ((1 << (PyxellParser.T__8 - 9)) | (1 << (PyxellParser.T__9 - 9)) | (1 << (PyxellParser.T__28 - 9)) | (1 << (PyxellParser.T__35 - 9)) | (1 << (PyxellParser.T__38 - 9)) | (1 << (PyxellParser.T__47 - 9)) | (1 << (PyxellParser.T__51 - 9)) | (1 << (PyxellParser.T__52 - 9)) | (1 << (PyxellParser.INT - 9)) | (1 << (PyxellParser.FLOAT - 9)) | (1 << (PyxellParser.CHAR - 9)) | (1 << (PyxellParser.STRING - 9)) | (1 << (PyxellParser.ID - 9)))) != 0): - self.state = 40 + self.state = 42 self.tuple_expr() @@ -581,17 +587,17 @@ def simple_stmt(self): elif la_ == 3: localctx = PyxellParser.StmtDeclContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 43 + self.state = 45 self.typ(0) - self.state = 44 + self.state = 46 self.match(PyxellParser.ID) - self.state = 47 + self.state = 49 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__3: - self.state = 45 + self.state = 47 self.match(PyxellParser.T__3) - self.state = 46 + self.state = 48 self.tuple_expr() @@ -600,29 +606,29 @@ def simple_stmt(self): elif la_ == 4: localctx = PyxellParser.StmtAssgContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 54 + self.state = 56 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,4,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 49 + self.state = 51 self.lvalue() - self.state = 50 + self.state = 52 self.match(PyxellParser.T__3) - self.state = 56 + self.state = 58 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,4,self._ctx) - self.state = 57 + self.state = 59 self.tuple_expr() pass elif la_ == 5: localctx = PyxellParser.StmtAssgExprContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 58 + self.state = 60 self.expr(0) - self.state = 59 + self.state = 61 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__4) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__7) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__11) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__14))) != 0)): @@ -630,16 +636,16 @@ def simple_stmt(self): else: self._errHandler.reportMatch(self) self.consume() - self.state = 60 + self.state = 62 self.match(PyxellParser.T__3) - self.state = 61 + self.state = 63 self.expr(0) pass elif la_ == 6: localctx = PyxellParser.StmtLoopControlContext(self, localctx) self.enterOuterAlt(localctx, 6) - self.state = 63 + self.state = 65 localctx.s = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__15 or _la==PyxellParser.T__16): @@ -652,13 +658,13 @@ def simple_stmt(self): elif la_ == 7: localctx = PyxellParser.StmtReturnContext(self, localctx) self.enterOuterAlt(localctx, 7) - self.state = 64 - self.match(PyxellParser.T__17) self.state = 66 + self.match(PyxellParser.T__17) + self.state = 68 self._errHandler.sync(self) _la = self._input.LA(1) if ((((_la - 9)) & ~0x3f) == 0 and ((1 << (_la - 9)) & ((1 << (PyxellParser.T__8 - 9)) | (1 << (PyxellParser.T__9 - 9)) | (1 << (PyxellParser.T__28 - 9)) | (1 << (PyxellParser.T__35 - 9)) | (1 << (PyxellParser.T__38 - 9)) | (1 << (PyxellParser.T__47 - 9)) | (1 << (PyxellParser.T__51 - 9)) | (1 << (PyxellParser.T__52 - 9)) | (1 << (PyxellParser.INT - 9)) | (1 << (PyxellParser.FLOAT - 9)) | (1 << (PyxellParser.CHAR - 9)) | (1 << (PyxellParser.STRING - 9)) | (1 << (PyxellParser.ID - 9)))) != 0): - self.state = 65 + self.state = 67 self.tuple_expr() @@ -706,17 +712,17 @@ def lvalue(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 70 + self.state = 72 self.expr(0) - self.state = 75 + self.state = 77 self._errHandler.sync(self) _la = self._input.LA(1) while _la==PyxellParser.T__18: - self.state = 71 + self.state = 73 self.match(PyxellParser.T__18) - self.state = 72 + self.state = 74 self.expr(0) - self.state = 77 + self.state = 79 self._errHandler.sync(self) _la = self._input.LA(1) @@ -757,11 +763,11 @@ def ID(self): def def_block(self): return self.getTypedRuleContext(PyxellParser.Def_blockContext,0) - def arg(self, i:int=None): + def func_arg(self, i:int=None): if i is None: - return self.getTypedRuleContexts(PyxellParser.ArgContext) + return self.getTypedRuleContexts(PyxellParser.Func_argContext) else: - return self.getTypedRuleContext(PyxellParser.ArgContext,i) + return self.getTypedRuleContext(PyxellParser.Func_argContext,i) def typ(self): return self.getTypedRuleContext(PyxellParser.TypContext,0) @@ -871,39 +877,39 @@ def compound_stmt(self): self.enterRule(localctx, 8, self.RULE_compound_stmt) self._la = 0 # Token type try: - self.state = 131 + self.state = 133 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__19]: localctx = PyxellParser.StmtIfContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 78 + self.state = 80 self.match(PyxellParser.T__19) - self.state = 79 + self.state = 81 self.expr(0) - self.state = 80 + self.state = 82 self.do_block() - self.state = 87 + self.state = 89 self._errHandler.sync(self) _la = self._input.LA(1) while _la==PyxellParser.T__20: - self.state = 81 + self.state = 83 self.match(PyxellParser.T__20) - self.state = 82 + self.state = 84 self.expr(0) - self.state = 83 + self.state = 85 self.do_block() - self.state = 89 + self.state = 91 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 92 + self.state = 94 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__21: - self.state = 90 + self.state = 92 self.match(PyxellParser.T__21) - self.state = 91 + self.state = 93 self.do_block() @@ -911,88 +917,88 @@ def compound_stmt(self): elif token in [PyxellParser.T__22]: localctx = PyxellParser.StmtWhileContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 94 + self.state = 96 self.match(PyxellParser.T__22) - self.state = 95 + self.state = 97 self.expr(0) - self.state = 96 + self.state = 98 self.do_block() pass elif token in [PyxellParser.T__23]: localctx = PyxellParser.StmtUntilContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 98 + self.state = 100 self.match(PyxellParser.T__23) - self.state = 99 + self.state = 101 self.expr(0) - self.state = 100 + self.state = 102 self.do_block() pass elif token in [PyxellParser.T__24]: localctx = PyxellParser.StmtForContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 102 + self.state = 104 self.match(PyxellParser.T__24) - self.state = 103 + self.state = 105 self.tuple_expr() - self.state = 104 + self.state = 106 self.match(PyxellParser.T__25) - self.state = 105 + self.state = 107 self.tuple_expr() - self.state = 108 + self.state = 110 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__26: - self.state = 106 + self.state = 108 self.match(PyxellParser.T__26) - self.state = 107 + self.state = 109 localctx.step = self.tuple_expr() - self.state = 110 + self.state = 112 self.do_block() pass elif token in [PyxellParser.T__27]: localctx = PyxellParser.StmtFuncContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 112 + self.state = 114 self.match(PyxellParser.T__27) - self.state = 113 + self.state = 115 self.match(PyxellParser.ID) - self.state = 114 + self.state = 116 self.match(PyxellParser.T__28) - self.state = 120 + self.state = 122 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,11,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 115 - self.arg() - self.state = 116 + self.state = 117 + self.func_arg() + self.state = 118 self.match(PyxellParser.T__18) - self.state = 122 + self.state = 124 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,11,self._ctx) - self.state = 124 + self.state = 126 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__28) | (1 << PyxellParser.T__35) | (1 << PyxellParser.T__53) | (1 << PyxellParser.T__54) | (1 << PyxellParser.T__55) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59))) != 0): - self.state = 123 - self.arg() + self.state = 125 + self.func_arg() - self.state = 126 - self.match(PyxellParser.T__29) self.state = 128 + self.match(PyxellParser.T__29) + self.state = 130 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__28) | (1 << PyxellParser.T__35) | (1 << PyxellParser.T__53) | (1 << PyxellParser.T__54) | (1 << PyxellParser.T__55) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59))) != 0): - self.state = 127 + self.state = 129 localctx.ret = self.typ(0) - self.state = 130 + self.state = 132 self.def_block() pass else: @@ -1007,7 +1013,7 @@ def compound_stmt(self): return localctx - class ArgContext(ParserRuleContext): + class Func_argContext(ParserRuleContext): def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -1026,35 +1032,35 @@ def expr(self): def getRuleIndex(self): - return PyxellParser.RULE_arg + return PyxellParser.RULE_func_arg def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitArg" ): - return visitor.visitArg(self) + if hasattr( visitor, "visitFunc_arg" ): + return visitor.visitFunc_arg(self) else: return visitor.visitChildren(self) - def arg(self): + def func_arg(self): - localctx = PyxellParser.ArgContext(self, self._ctx, self.state) - self.enterRule(localctx, 10, self.RULE_arg) + localctx = PyxellParser.Func_argContext(self, self._ctx, self.state) + self.enterRule(localctx, 10, self.RULE_func_arg) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 133 + self.state = 135 self.typ(0) - self.state = 134 + self.state = 136 self.match(PyxellParser.ID) - self.state = 137 + self.state = 139 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__30: - self.state = 135 + self.state = 137 self.match(PyxellParser.T__30) - self.state = 136 + self.state = 138 localctx.default = self.expr(0) @@ -1099,23 +1105,23 @@ def do_block(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 139 + self.state = 141 self.match(PyxellParser.T__31) - self.state = 140 + self.state = 142 self.match(PyxellParser.T__32) - self.state = 142 + self.state = 144 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 141 + self.state = 143 self.stmt() - self.state = 144 + self.state = 146 self._errHandler.sync(self) _la = self._input.LA(1) if not (((((_la - 2)) & ~0x3f) == 0 and ((1 << (_la - 2)) & ((1 << (PyxellParser.T__1 - 2)) | (1 << (PyxellParser.T__2 - 2)) | (1 << (PyxellParser.T__8 - 2)) | (1 << (PyxellParser.T__9 - 2)) | (1 << (PyxellParser.T__15 - 2)) | (1 << (PyxellParser.T__16 - 2)) | (1 << (PyxellParser.T__17 - 2)) | (1 << (PyxellParser.T__19 - 2)) | (1 << (PyxellParser.T__22 - 2)) | (1 << (PyxellParser.T__23 - 2)) | (1 << (PyxellParser.T__24 - 2)) | (1 << (PyxellParser.T__27 - 2)) | (1 << (PyxellParser.T__28 - 2)) | (1 << (PyxellParser.T__35 - 2)) | (1 << (PyxellParser.T__38 - 2)) | (1 << (PyxellParser.T__47 - 2)) | (1 << (PyxellParser.T__51 - 2)) | (1 << (PyxellParser.T__52 - 2)) | (1 << (PyxellParser.T__53 - 2)) | (1 << (PyxellParser.T__54 - 2)) | (1 << (PyxellParser.T__55 - 2)) | (1 << (PyxellParser.T__56 - 2)) | (1 << (PyxellParser.T__57 - 2)) | (1 << (PyxellParser.T__58 - 2)) | (1 << (PyxellParser.T__59 - 2)) | (1 << (PyxellParser.INT - 2)) | (1 << (PyxellParser.FLOAT - 2)) | (1 << (PyxellParser.CHAR - 2)) | (1 << (PyxellParser.STRING - 2)) | (1 << (PyxellParser.ID - 2)))) != 0)): break - self.state = 146 + self.state = 148 self.match(PyxellParser.T__33) except RecognitionException as re: localctx.exception = re @@ -1158,23 +1164,23 @@ def def_block(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 148 + self.state = 150 self.match(PyxellParser.T__34) - self.state = 149 + self.state = 151 self.match(PyxellParser.T__32) - self.state = 151 + self.state = 153 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 150 + self.state = 152 self.stmt() - self.state = 153 + self.state = 155 self._errHandler.sync(self) _la = self._input.LA(1) if not (((((_la - 2)) & ~0x3f) == 0 and ((1 << (_la - 2)) & ((1 << (PyxellParser.T__1 - 2)) | (1 << (PyxellParser.T__2 - 2)) | (1 << (PyxellParser.T__8 - 2)) | (1 << (PyxellParser.T__9 - 2)) | (1 << (PyxellParser.T__15 - 2)) | (1 << (PyxellParser.T__16 - 2)) | (1 << (PyxellParser.T__17 - 2)) | (1 << (PyxellParser.T__19 - 2)) | (1 << (PyxellParser.T__22 - 2)) | (1 << (PyxellParser.T__23 - 2)) | (1 << (PyxellParser.T__24 - 2)) | (1 << (PyxellParser.T__27 - 2)) | (1 << (PyxellParser.T__28 - 2)) | (1 << (PyxellParser.T__35 - 2)) | (1 << (PyxellParser.T__38 - 2)) | (1 << (PyxellParser.T__47 - 2)) | (1 << (PyxellParser.T__51 - 2)) | (1 << (PyxellParser.T__52 - 2)) | (1 << (PyxellParser.T__53 - 2)) | (1 << (PyxellParser.T__54 - 2)) | (1 << (PyxellParser.T__55 - 2)) | (1 << (PyxellParser.T__56 - 2)) | (1 << (PyxellParser.T__57 - 2)) | (1 << (PyxellParser.T__58 - 2)) | (1 << (PyxellParser.T__59 - 2)) | (1 << (PyxellParser.INT - 2)) | (1 << (PyxellParser.FLOAT - 2)) | (1 << (PyxellParser.CHAR - 2)) | (1 << (PyxellParser.STRING - 2)) | (1 << (PyxellParser.ID - 2)))) != 0)): break - self.state = 155 + self.state = 157 self.match(PyxellParser.T__33) except RecognitionException as re: localctx.exception = re @@ -1229,20 +1235,20 @@ def tuple_expr(self): try: localctx = PyxellParser.ExprTupleContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 162 + self.state = 164 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,18,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 157 + self.state = 159 self.expr(0) - self.state = 158 + self.state = 160 self.match(PyxellParser.T__18) - self.state = 164 + self.state = 166 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,18,self._ctx) - self.state = 165 + self.state = 167 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -1292,11 +1298,14 @@ def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Exp super().__init__(parser) self.copyFrom(ctx) - def expr(self, i:int=None): + def expr(self): + return self.getTypedRuleContext(PyxellParser.ExprContext,0) + + def call_arg(self, i:int=None): if i is None: - return self.getTypedRuleContexts(PyxellParser.ExprContext) + return self.getTypedRuleContexts(PyxellParser.Call_argContext) else: - return self.getTypedRuleContext(PyxellParser.ExprContext,i) + return self.getTypedRuleContext(PyxellParser.Call_argContext,i) def accept(self, visitor:ParseTreeVisitor): @@ -1494,7 +1503,7 @@ def expr(self, _p:int=0): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 177 + self.state = 179 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__35, PyxellParser.T__51, PyxellParser.T__52, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: @@ -1502,25 +1511,25 @@ def expr(self, _p:int=0): self._ctx = localctx _prevctx = localctx - self.state = 168 + self.state = 170 self.atom() pass elif token in [PyxellParser.T__28]: localctx = PyxellParser.ExprParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 169 + self.state = 171 self.match(PyxellParser.T__28) - self.state = 170 + self.state = 172 self.tuple_expr() - self.state = 171 + self.state = 173 self.match(PyxellParser.T__29) pass elif token in [PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__38]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 173 + self.state = 175 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__38))) != 0)): @@ -1528,23 +1537,23 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 174 + self.state = 176 self.expr(14) pass elif token in [PyxellParser.T__47]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 175 + self.state = 177 localctx.op = self.match(PyxellParser.T__47) - self.state = 176 + self.state = 178 self.expr(4) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 244 + self.state = 246 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,23,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: @@ -1552,30 +1561,30 @@ def expr(self, _p:int=0): if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 242 + self.state = 244 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,22,self._ctx) if la_ == 1: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 179 + self.state = 181 if not self.precpred(self._ctx, 15): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 15)") - self.state = 180 + self.state = 182 localctx.op = self.match(PyxellParser.T__4) - self.state = 181 + self.state = 183 self.expr(15) pass elif la_ == 2: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 182 + self.state = 184 if not self.precpred(self._ctx, 13): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") - self.state = 183 + self.state = 185 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__7))) != 0)): @@ -1583,18 +1592,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 184 + self.state = 186 self.expr(14) pass elif la_ == 3: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 185 + self.state = 187 if not self.precpred(self._ctx, 12): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 12)") - self.state = 186 + self.state = 188 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__8 or _la==PyxellParser.T__9): @@ -1602,18 +1611,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 187 + self.state = 189 self.expr(13) pass elif la_ == 4: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 188 + self.state = 190 if not self.precpred(self._ctx, 11): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") - self.state = 189 + self.state = 191 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__10 or _la==PyxellParser.T__11): @@ -1621,57 +1630,57 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 190 + self.state = 192 self.expr(12) pass elif la_ == 5: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 191 + self.state = 193 if not self.precpred(self._ctx, 10): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") - self.state = 192 + self.state = 194 localctx.op = self.match(PyxellParser.T__12) - self.state = 193 + self.state = 195 self.expr(11) pass elif la_ == 6: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 194 + self.state = 196 if not self.precpred(self._ctx, 9): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") - self.state = 195 + self.state = 197 localctx.op = self.match(PyxellParser.T__13) - self.state = 196 + self.state = 198 self.expr(10) pass elif la_ == 7: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 197 + self.state = 199 if not self.precpred(self._ctx, 8): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") - self.state = 198 + self.state = 200 localctx.op = self.match(PyxellParser.T__14) - self.state = 199 + self.state = 201 self.expr(9) pass elif la_ == 8: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 200 + self.state = 202 if not self.precpred(self._ctx, 7): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") - self.state = 201 + self.state = 203 localctx.dots = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__39 or _la==PyxellParser.T__40): @@ -1679,18 +1688,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 202 + self.state = 204 self.expr(8) pass elif la_ == 9: localctx = PyxellParser.ExprCmpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 203 + self.state = 205 if not self.precpred(self._ctx, 5): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") - self.state = 204 + self.state = 206 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__41) | (1 << PyxellParser.T__42) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__44) | (1 << PyxellParser.T__45) | (1 << PyxellParser.T__46))) != 0)): @@ -1698,128 +1707,128 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 205 + self.state = 207 self.expr(5) pass elif la_ == 10: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 206 + self.state = 208 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 207 + self.state = 209 localctx.op = self.match(PyxellParser.T__48) - self.state = 208 + self.state = 210 self.expr(3) pass elif la_ == 11: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 209 + self.state = 211 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 210 + self.state = 212 localctx.op = self.match(PyxellParser.T__49) - self.state = 211 + self.state = 213 self.expr(2) pass elif la_ == 12: localctx = PyxellParser.ExprCondContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 212 + self.state = 214 if not self.precpred(self._ctx, 1): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") - self.state = 213 + self.state = 215 self.match(PyxellParser.T__50) - self.state = 214 + self.state = 216 self.expr(0) - self.state = 215 + self.state = 217 self.match(PyxellParser.T__30) - self.state = 216 + self.state = 218 self.expr(1) pass elif la_ == 13: localctx = PyxellParser.ExprIndexContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 218 + self.state = 220 if not self.precpred(self._ctx, 18): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 18)") - self.state = 219 + self.state = 221 self.match(PyxellParser.T__35) - self.state = 220 + self.state = 222 self.expr(0) - self.state = 221 + self.state = 223 self.match(PyxellParser.T__36) pass elif la_ == 14: localctx = PyxellParser.ExprAttrContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 223 + self.state = 225 if not self.precpred(self._ctx, 17): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 17)") - self.state = 224 + self.state = 226 self.match(PyxellParser.T__37) - self.state = 225 + self.state = 227 self.match(PyxellParser.ID) pass elif la_ == 15: localctx = PyxellParser.ExprCallContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 226 + self.state = 228 if not self.precpred(self._ctx, 16): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 16)") - self.state = 227 + self.state = 229 self.match(PyxellParser.T__28) - self.state = 233 + self.state = 235 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,20,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 228 - self.expr(0) - self.state = 229 + self.state = 230 + self.call_arg() + self.state = 231 self.match(PyxellParser.T__18) - self.state = 235 + self.state = 237 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,20,self._ctx) - self.state = 237 + self.state = 239 self._errHandler.sync(self) _la = self._input.LA(1) if ((((_la - 9)) & ~0x3f) == 0 and ((1 << (_la - 9)) & ((1 << (PyxellParser.T__8 - 9)) | (1 << (PyxellParser.T__9 - 9)) | (1 << (PyxellParser.T__28 - 9)) | (1 << (PyxellParser.T__35 - 9)) | (1 << (PyxellParser.T__38 - 9)) | (1 << (PyxellParser.T__47 - 9)) | (1 << (PyxellParser.T__51 - 9)) | (1 << (PyxellParser.T__52 - 9)) | (1 << (PyxellParser.INT - 9)) | (1 << (PyxellParser.FLOAT - 9)) | (1 << (PyxellParser.CHAR - 9)) | (1 << (PyxellParser.STRING - 9)) | (1 << (PyxellParser.ID - 9)))) != 0): - self.state = 236 - self.expr(0) + self.state = 238 + self.call_arg() - self.state = 239 + self.state = 241 self.match(PyxellParser.T__29) pass elif la_ == 16: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 240 + self.state = 242 if not self.precpred(self._ctx, 6): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") - self.state = 241 + self.state = 243 localctx.dots = self.match(PyxellParser.T__40) pass - self.state = 246 + self.state = 248 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,23,self._ctx) @@ -1832,6 +1841,58 @@ def expr(self, _p:int=0): return localctx + class Call_argContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def expr(self): + return self.getTypedRuleContext(PyxellParser.ExprContext,0) + + + def ID(self): + return self.getToken(PyxellParser.ID, 0) + + def getRuleIndex(self): + return PyxellParser.RULE_call_arg + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitCall_arg" ): + return visitor.visitCall_arg(self) + else: + return visitor.visitChildren(self) + + + + + def call_arg(self): + + localctx = PyxellParser.Call_argContext(self, self._ctx, self.state) + self.enterRule(localctx, 20, self.RULE_call_arg) + try: + self.enterOuterAlt(localctx, 1) + self.state = 251 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,24,self._ctx) + if la_ == 1: + self.state = 249 + self.match(PyxellParser.ID) + self.state = 250 + self.match(PyxellParser.T__3) + + + self.state = 253 + self.expr(0) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class AtomContext(ParserRuleContext): def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): @@ -1966,28 +2027,28 @@ def accept(self, visitor:ParseTreeVisitor): def atom(self): localctx = PyxellParser.AtomContext(self, self._ctx, self.state) - self.enterRule(localctx, 20, self.RULE_atom) + self.enterRule(localctx, 22, self.RULE_atom) self._la = 0 # Token type try: - self.state = 266 + self.state = 274 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: localctx = PyxellParser.AtomIntContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 247 + self.state = 255 self.match(PyxellParser.INT) pass elif token in [PyxellParser.FLOAT]: localctx = PyxellParser.AtomFloatContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 248 + self.state = 256 self.match(PyxellParser.FLOAT) pass elif token in [PyxellParser.T__51, PyxellParser.T__52]: localctx = PyxellParser.AtomBoolContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 249 + self.state = 257 _la = self._input.LA(1) if not(_la==PyxellParser.T__51 or _la==PyxellParser.T__52): self._errHandler.recoverInline(self) @@ -1998,48 +2059,48 @@ def atom(self): elif token in [PyxellParser.CHAR]: localctx = PyxellParser.AtomCharContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 250 + self.state = 258 self.match(PyxellParser.CHAR) pass elif token in [PyxellParser.STRING]: localctx = PyxellParser.AtomStringContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 251 + self.state = 259 self.match(PyxellParser.STRING) pass elif token in [PyxellParser.T__35]: localctx = PyxellParser.AtomArrayContext(self, localctx) self.enterOuterAlt(localctx, 6) - self.state = 252 + self.state = 260 self.match(PyxellParser.T__35) - self.state = 258 + self.state = 266 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,24,self._ctx) + _alt = self._interp.adaptivePredict(self._input,25,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 253 + self.state = 261 self.expr(0) - self.state = 254 + self.state = 262 self.match(PyxellParser.T__18) - self.state = 260 + self.state = 268 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,24,self._ctx) + _alt = self._interp.adaptivePredict(self._input,25,self._ctx) - self.state = 262 + self.state = 270 self._errHandler.sync(self) _la = self._input.LA(1) if ((((_la - 9)) & ~0x3f) == 0 and ((1 << (_la - 9)) & ((1 << (PyxellParser.T__8 - 9)) | (1 << (PyxellParser.T__9 - 9)) | (1 << (PyxellParser.T__28 - 9)) | (1 << (PyxellParser.T__35 - 9)) | (1 << (PyxellParser.T__38 - 9)) | (1 << (PyxellParser.T__47 - 9)) | (1 << (PyxellParser.T__51 - 9)) | (1 << (PyxellParser.T__52 - 9)) | (1 << (PyxellParser.INT - 9)) | (1 << (PyxellParser.FLOAT - 9)) | (1 << (PyxellParser.CHAR - 9)) | (1 << (PyxellParser.STRING - 9)) | (1 << (PyxellParser.ID - 9)))) != 0): - self.state = 261 + self.state = 269 self.expr(0) - self.state = 264 + self.state = 272 self.match(PyxellParser.T__36) pass elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) self.enterOuterAlt(localctx, 7) - self.state = 265 + self.state = 273 self.match(PyxellParser.ID) pass else: @@ -2180,11 +2241,11 @@ def typ(self, _p:int=0): _parentState = self.state localctx = PyxellParser.TypContext(self, self._ctx, _parentState) _prevctx = localctx - _startState = 22 - self.enterRecursionRule(localctx, 22, self.RULE_typ, _p) + _startState = 24 + self.enterRecursionRule(localctx, 24, self.RULE_typ, _p) try: self.enterOuterAlt(localctx, 1) - self.state = 285 + self.state = 293 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__53]: @@ -2192,120 +2253,120 @@ def typ(self, _p:int=0): self._ctx = localctx _prevctx = localctx - self.state = 269 + self.state = 277 self.match(PyxellParser.T__53) pass elif token in [PyxellParser.T__54]: localctx = PyxellParser.TypePrimitiveContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 270 + self.state = 278 self.match(PyxellParser.T__54) pass elif token in [PyxellParser.T__55]: localctx = PyxellParser.TypePrimitiveContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 271 + self.state = 279 self.match(PyxellParser.T__55) pass elif token in [PyxellParser.T__56]: localctx = PyxellParser.TypePrimitiveContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 272 + self.state = 280 self.match(PyxellParser.T__56) pass elif token in [PyxellParser.T__57]: localctx = PyxellParser.TypePrimitiveContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 273 + self.state = 281 self.match(PyxellParser.T__57) pass elif token in [PyxellParser.T__58]: localctx = PyxellParser.TypePrimitiveContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 274 + self.state = 282 self.match(PyxellParser.T__58) pass elif token in [PyxellParser.T__28]: localctx = PyxellParser.TypeParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 275 + self.state = 283 self.match(PyxellParser.T__28) - self.state = 276 + self.state = 284 self.typ(0) - self.state = 277 + self.state = 285 self.match(PyxellParser.T__29) pass elif token in [PyxellParser.T__35]: localctx = PyxellParser.TypeArrayContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 279 + self.state = 287 self.match(PyxellParser.T__35) - self.state = 280 + self.state = 288 self.typ(0) - self.state = 281 + self.state = 289 self.match(PyxellParser.T__36) pass elif token in [PyxellParser.T__59]: localctx = PyxellParser.TypeFunc0Context(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 283 + self.state = 291 self.match(PyxellParser.T__59) - self.state = 284 + self.state = 292 self.typ(1) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 295 + self.state = 303 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,29,self._ctx) + _alt = self._interp.adaptivePredict(self._input,30,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 293 + self.state = 301 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,28,self._ctx) + la_ = self._interp.adaptivePredict(self._input,29,self._ctx) if la_ == 1: localctx = PyxellParser.TypeTupleContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 287 + self.state = 295 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 288 + self.state = 296 self.match(PyxellParser.T__5) - self.state = 289 + self.state = 297 self.typ(3) pass elif la_ == 2: localctx = PyxellParser.TypeFuncContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 290 + self.state = 298 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 291 + self.state = 299 self.match(PyxellParser.T__59) - self.state = 292 + self.state = 300 self.typ(2) pass - self.state = 297 + self.state = 305 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,29,self._ctx) + _alt = self._interp.adaptivePredict(self._input,30,self._ctx) except RecognitionException as re: localctx.exception = re @@ -2321,7 +2382,7 @@ def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): if self._predicates == None: self._predicates = dict() self._predicates[9] = self.expr_sempred - self._predicates[11] = self.typ_sempred + self._predicates[12] = self.typ_sempred pred = self._predicates.get(ruleIndex, None) if pred is None: raise Exception("No predicate with index:" + str(ruleIndex)) diff --git a/src/antlr/PyxellVisitor.py b/src/antlr/PyxellVisitor.py index e24ef6f1..fa250749 100644 --- a/src/antlr/PyxellVisitor.py +++ b/src/antlr/PyxellVisitor.py @@ -84,8 +84,8 @@ def visitStmtFunc(self, ctx:PyxellParser.StmtFuncContext): return self.visitChildren(ctx) - # Visit a parse tree produced by PyxellParser#arg. - def visitArg(self, ctx:PyxellParser.ArgContext): + # Visit a parse tree produced by PyxellParser#func_arg. + def visitFunc_arg(self, ctx:PyxellParser.Func_argContext): return self.visitChildren(ctx) @@ -159,6 +159,11 @@ def visitExprLogicalOp(self, ctx:PyxellParser.ExprLogicalOpContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#call_arg. + def visitCall_arg(self, ctx:PyxellParser.Call_argContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#AtomInt. def visitAtomInt(self, ctx:PyxellParser.AtomIntContext): return self.visitChildren(ctx) diff --git a/src/compiler.py b/src/compiler.py index 6b98004a..9ebede47 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -1,7 +1,6 @@ import ast from contextlib import contextmanager -from itertools import zip_longest from .antlr.PyxellParser import PyxellParser from .antlr.PyxellVisitor import PyxellVisitor @@ -742,7 +741,7 @@ def visitStmtFunc(self, ctx): args = [] expect_default = False - for arg in ctx.arg(): + for arg in ctx.func_arg(): type = self.visit(arg.typ()) name = str(arg.ID()) default = arg.default @@ -837,29 +836,47 @@ def visitExprAttr(self, ctx): self.throw(ctx, err.NoAttribute(value.type, id)) def visitExprCall(self, ctx): - exprs = ctx.expr() - - func = self.visit(exprs[0]) + func = self.visit(ctx.expr()) if not func.type.isFunc(): self.throw(ctx, err.NotFunction(func.type)) - exprs = exprs[1:] - if len(exprs) > len(func.type.args): - self.throw(ctx, err.TooManyArguments(func.type)) - args = [] - for call_arg, func_arg in zip_longest(exprs, func.type.args): - if call_arg: - expr = call_arg + pos_args = {} + named_args = {} + + for i, call_arg in enumerate(ctx.call_arg()): + name = call_arg.ID() + expr = call_arg.expr() + if name: + name = str(name) + if name in named_args: + self.throw(ctx, err.RepeatedArgument(name)) + named_args[name] = expr + else: + if named_args: + self.throw(ctx, err.ExpectedNamedArgument()) + pos_args[i] = expr + + for i, func_arg in enumerate(func.type.args): + name = func_arg.name + if name in named_args: + if i in pos_args: + self.throw(ctx, err.RepeatedArgument(name)) + expr = named_args.pop(name) + elif i in pos_args: + expr = pos_args.pop(i) elif func_arg.default: expr = func_arg.default else: - break + self.throw(ctx, err.TooFewArguments(func.type)) + value = self.cast(expr, self.visit(expr), func_arg.type) args.append(value) - if len(args) < len(func.type.args): - self.throw(ctx, err.TooFewArguments(func.type)) + if named_args: + self.throw(ctx, err.UnexpectedArgument(next(iter(named_args)))) + if pos_args: + self.throw(ctx, err.TooManyArguments(func.type)) return self.builder.call(func, args) diff --git a/src/errors.py b/src/errors.py index 9ebd451d..ddf62dc4 100644 --- a/src/errors.py +++ b/src/errors.py @@ -14,6 +14,7 @@ class PyxellError(Exception): InvalidSyntax = lambda: f"Syntax error" CannotUnpack = lambda t, n: f"Cannot unpack value of type `{t.show()}` into {n} values" + ExpectedNamedArgument = lambda: f"Positional argument cannot follow named arguments" IllegalAssignment = lambda t1, t2: f"Illegal assignment from `{t1.show()}` to `{t2.show()}`" InvalidDeclaration = lambda t: f"Cannot declare variable of type `{t.show()}`" InvalidLoopStep = lambda: f"Incompatible number of loop variables and step expressions" @@ -29,10 +30,12 @@ class PyxellError(Exception): NotFunction = lambda t: f"Type `{t.show()}` is not a function" NotPrintable = lambda t: f"Variable of type `{t.show()}` cannot be printed" RedeclaredIdentifier = lambda id: f"Identifier `{id}` is already declared" + RepeatedArgument = lambda id: f"Repeated argument `{id}`" TooFewArguments = lambda t: f"Too few arguments for function `{t.show()}`" TooManyArguments = lambda t: f"Too many arguments for function `{t.show()}`" UndeclaredIdentifier = lambda id: f"Undeclared identifier `{id}`" UninitializedIdentifier = lambda id: f"Identifier `{id}` might not have been initialized" + UnexpectedArgument = lambda id: f"Unexpected argument `{id}`" UnexpectedStatement = lambda s: f"Unexpected `{s}` statement" UnknownType = lambda: f"Cannot settle type of the expression" diff --git a/test/bad/functions/call09.err b/test/bad/functions/call09.err index 7664dc8f..711f38ac 100644 --- a/test/bad/functions/call09.err +++ b/test/bad/functions/call09.err @@ -1 +1 @@ -Expected named argument. \ No newline at end of file +Positional argument cannot follow named arguments. \ No newline at end of file From 1eae5bb49a0bb74c4f745d7506ec40e0f556288a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Tue, 29 Oct 2019 20:44:42 +0100 Subject: [PATCH 037/100] Global variables in functions --- src/compiler.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/compiler.py b/src/compiler.py index 9ebede47..da513d93 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -101,7 +101,11 @@ def declare(self, ctx, type, id, redeclare=False, initialize=False): id = str(id) if id in self.env and not redeclare: self.throw(ctx, err.RedeclaredIdentifier(id)) - ptr = self.builder.alloca(type) + if self.builder.basic_block.parent._name == 'main': + ptr = ll.GlobalVariable(self.module, type, self.module.get_unique_name(id)) + ptr.initializer = type.default() + else: + ptr = self.builder.alloca(type) self.env[id] = ptr if initialize: self.initialized.add(id) From 462e348f01c1ceffa339284e78c5a951347ff5d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Tue, 29 Oct 2019 22:21:36 +0100 Subject: [PATCH 038/100] Compound types as pointers --- src/compiler.py | 68 +++++++++++++++++++++++++------------------------ src/types.py | 12 ++++++--- 2 files changed, 43 insertions(+), 37 deletions(-) diff --git a/src/compiler.py b/src/compiler.py index da513d93..1a6f9cdd 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -70,15 +70,18 @@ def get(self, ctx, id): self.throw(ctx, err.UninitializedIdentifier(id)) return self.env[id] + def extract(self, value, *indices): + return self.builder.load(self.builder.gep(value, [vInt(0), *map(vIndex, indices)])) + def index(self, ctx, *exprs): collection, index = [self.visit(expr) for expr in exprs] if collection.type.isCollection(): index = self.cast(exprs[1], index, tInt) - length = self.builder.extract_value(collection, [1]) + length = self.extract(collection, 1) cmp = self.builder.icmp_signed('>=', index, vInt(0)) index = self.builder.select(cmp, index, self.builder.add(index, length)) - return self.builder.gep(self.builder.extract_value(collection, [0]), [index]) + return self.builder.gep(self.extract(collection, 0), [index]) else: self.throw(ctx, err.NotIndexable(collection.type)) @@ -142,9 +145,9 @@ def sizeof(self, type, length=vInt(1)): return self.builder.ptrtoint(self.builder.gep(vNull(type), [length]), tInt) def malloc(self, type, length=vInt(1)): - size = self.sizeof(type, length) + size = self.sizeof(type.pointee, length) ptr = self.builder.call(self.builtins['malloc'], [size]) - return self.builder.bitcast(ptr, tPtr(type)) + return self.builder.bitcast(ptr, type) def memcpy(self, dest, src, length): type = dest.type @@ -199,10 +202,10 @@ def binaryop(self, ctx, op, left, right): type = left.type subtype = type.subtype - src = self.builder.extract_value(left, [0]) - src_length = self.builder.extract_value(left, [1]) + src = self.extract(left, 0) + src_length = self.extract(left, 1) length = self.builder.mul(src_length, right) - dest = self.malloc(subtype, length) + dest = self.malloc(tPtr(subtype), length) index = self.builder.alloca(tInt) self.builder.store(vInt(0), index) @@ -218,7 +221,7 @@ def binaryop(self, ctx, op, left, right): value = self.malloc(type) self.builder.store(dest, self.builder.gep(value, [vInt(0), vIndex(0)])) self.builder.store(length, self.builder.gep(value, [vInt(0), vIndex(1)])) - return self.builder.load(value) + return value elif left.type == tInt and right.type.isCollection(): return self.binaryop(ctx, op, right, left) @@ -266,13 +269,13 @@ def binaryop(self, ctx, op, left, right): type = left.type subtype = type.subtype - length1 = self.builder.extract_value(left, [1]) - length2 = self.builder.extract_value(right, [1]) + length1 = self.extract(left, 1) + length2 = self.extract(right, 1) length = self.builder.add(length1, length2) - array1 = self.builder.extract_value(left, [0]) - array2 = self.builder.extract_value(right, [0]) - array = self.malloc(subtype, length) + array1 = self.extract(left, 0) + array2 = self.extract(right, 0) + array = self.malloc(tPtr(subtype), length) self.memcpy(array, array1, length1) self.memcpy(self.builder.gep(array, [length1]), array2, length2) @@ -280,7 +283,7 @@ def binaryop(self, ctx, op, left, right): value = self.malloc(type) self.builder.store(array, self.builder.gep(value, [vInt(0), vIndex(0)])) self.builder.store(length, self.builder.gep(value, [vInt(0), vIndex(1)])) - return self.builder.load(value) + return value else: self.throw(ctx, err.NoBinaryOperator(op, left.type, right.type)) @@ -325,10 +328,10 @@ def cmp(self, ctx, op, left, right): return self.builder.icmp_unsigned(op, left, right) elif left.type.isCollection(): - array1 = self.builder.extract_value(left, [0]) - array2 = self.builder.extract_value(right, [0]) - length1 = self.builder.extract_value(left, [1]) - length2 = self.builder.extract_value(right, [1]) + array1 = self.extract(left, 0) + array2 = self.extract(right, 0) + length1 = self.extract(left, 1) + length2 = self.extract(right, 1) index = self.builder.alloca(tInt) self.builder.store(vInt(0), index) @@ -396,7 +399,7 @@ def cmp(self, ctx, op, left, right): for i in range(len(left.type.elements)): label_cont = ll.Block(self.builder.function) - values = [self.builder.extract_value(tuple, i) for tuple in [left, right]] + values = [self.extract(tuple, i) for tuple in [left, right]] cond = self.cmp(ctx, op + '=' if op in ('<', '>') else op, *values) if op == '!=': @@ -455,7 +458,7 @@ def print(self, ctx, value): elif value.type.isArray(): self.write('[') - length = self.builder.extract_value(value, [1]) + length = self.extract(value, 1) index = self.builder.alloca(tInt) self.builder.store(vInt(0), index) @@ -463,7 +466,7 @@ def print(self, ctx, value): with self.builder.if_then(self.builder.icmp_signed('>', self.builder.load(index), vInt(0))): self.write(', ') - elem = self.builder.gep(self.builder.extract_value(value, [0]), [self.builder.load(index)]) + elem = self.builder.gep(self.extract(value, 0), [self.builder.load(index)]) self.print(ctx, self.builder.load(elem)) self.inc(index) @@ -477,8 +480,7 @@ def print(self, ctx, value): for i in range(len(value.type.elements)): if i > 0: self.write(' ') - elem = self.builder.extract_value(value, [i]) - self.print(ctx, elem) + self.print(ctx, self.extract(value, i)) else: self.throw(ctx, err.NotPrintable(value.type)) @@ -494,7 +496,7 @@ def tuple(self, values): ptr = self.builder.gep(tuple, [vInt(0), vIndex(i)]) self.builder.store(value, ptr) - return self.builder.load(tuple) + return tuple ### Program ### @@ -544,7 +546,7 @@ def visitStmtAssg(self, ctx): self.assign(lvalue, exprs[0], value) else: for i, expr in enumerate(exprs): - self.assign(lvalue, expr, self.builder.extract_value(value, [i])) + self.assign(lvalue, expr, self.extract(value, i)) def visitStmtAssgExpr(self, ctx): ptr = self.lvalue(ctx, ctx.expr(0)) @@ -668,8 +670,8 @@ def prepare(iterable, step): # must be a function so that lambdas work properly self.throw(ctx, err.NotIterable(value.type)) desc = self.builder.icmp_signed('<', step, vInt(0)) index = self.builder.alloca(tInt) - array = self.builder.extract_value(value, [0]) - length = self.builder.extract_value(value, [1]) + array = self.extract(value, 0) + length = self.extract(value, 1) end1 = self.builder.sub(length, vInt(1)) end2 = vInt(0) start = self.builder.select(desc, end1, end2) @@ -712,7 +714,7 @@ def prepare(iterable, step): # must be a function so that lambdas work properly elif len(vars) > 1 and len(types) == 1: for i, var in enumerate(vars): tuple = getters[0](self.builder.load(indices[0])) - self.assign(exprs[0], var, self.builder.extract_value(tuple, [i])) + self.assign(exprs[0], var, self.extract(tuple, i)) elif len(vars) == len(types): for var, index, getter in zip(vars, indices, getters): self.assign(exprs[0], var, getter(self.builder.load(index))) @@ -825,7 +827,7 @@ def visitExprAttr(self, ctx): if id != "length": self.throw(ctx, err.NoAttribute(value.type, id)) - return self.builder.extract_value(value, [1]) + return self.extract(value, 1) elif value.type.isTuple(): if len(id) > 1: @@ -835,7 +837,7 @@ def visitExprAttr(self, ctx): if not 0 <= index < len(value.type.elements): self.throw(ctx, err.NoAttribute(value.type, id)) - return self.builder.extract_value(value, [index]) + return self.extract(value, index) self.throw(ctx, err.NoAttribute(value.type, id)) @@ -1005,7 +1007,7 @@ def visitAtomString(self, ctx): length = self.builder.gep(string, [vInt(0), vIndex(1)]) self.builder.store(vInt(const.type.count), length) - return self.builder.load(string) + return string def visitAtomArray(self, ctx): exprs = ctx.expr() @@ -1016,7 +1018,7 @@ def visitAtomArray(self, ctx): array = self.malloc(type) pointer = self.builder.gep(array, [vInt(0), vIndex(0)]) - memory = self.malloc(subtype, vInt(len(values))) + memory = self.malloc(tPtr(subtype), vInt(len(values))) for i, value in enumerate(values): self.builder.store(value, self.builder.gep(memory, [vInt(i)])) self.builder.store(memory, pointer) @@ -1024,7 +1026,7 @@ def visitAtomArray(self, ctx): length = self.builder.gep(array, [vInt(0), vIndex(1)]) self.builder.store(vInt(len(values)), length) - return self.builder.load(array) + return array def visitAtomId(self, ctx): return self.builder.load(self.get(ctx, ctx.ID())) diff --git a/src/types.py b/src/types.py index 665f45b0..63495db7 100644 --- a/src/types.py +++ b/src/types.py @@ -26,10 +26,12 @@ def __eq__(self, other): def tPtr(type=tChar): - return type.as_pointer() + ptr_type = type.as_pointer() + ptr_type.kind = getattr(type, 'kind', None) + return ptr_type -tString = CustomStructType([tPtr(), tInt], 'string') +tString = tPtr(CustomStructType([tPtr(), tInt], 'string')) tString.subtype = tChar @extend_class(ll.Type) @@ -38,7 +40,7 @@ def isString(type): def tArray(subtype): - type = CustomStructType([tPtr(subtype), tInt], 'array') + type = tPtr(CustomStructType([tPtr(subtype), tInt], 'array')) type.subtype = subtype return type @@ -50,7 +52,9 @@ def isArray(type): def tTuple(elements): if len(elements) == 1: return elements[0] - return CustomStructType(elements, 'tuple') + type = tPtr(CustomStructType(elements, 'tuple')) + type.elements = elements + return type @extend_class(ll.Type) def isTuple(type): From fc834a00bd67218b8f25da1eac81218925a89b6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Wed, 30 Oct 2019 20:37:40 +0100 Subject: [PATCH 039/100] Empty arrays --- src/compiler.py | 58 +++++++++++++++++++++++++++++++++++-------------- src/types.py | 58 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+), 16 deletions(-) diff --git a/src/compiler.py b/src/compiler.py index 1a6f9cdd..4a3e01da 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -86,32 +86,49 @@ def index(self, ctx, *exprs): self.throw(ctx, err.NotIndexable(collection.type)) def cast(self, ctx, value, type): - if value.type != type: + if not types_compatible(value.type, type): self.throw(ctx, err.IllegalAssignment(value.type, type)) - return value + return value if value.type == type else self.builder.bitcast(value, type) def unify(self, ctx, *values): - if all(value.type == values[0].type for value in values): - return values - elif all(value.type in (tInt, tFloat) for value in values): - return [(self.builder.sitofp(value, tFloat) if value.type == tInt else value) for value in values] - else: - self.throw(ctx, err.UnknownType()) + if not values: + return [] + values = list(values) + + type = values[0].type + for value in values[1:]: + type = unify_types(value.type, type) + if type is None: + self.throw(ctx, err.UnknownType()) + + for i, value in enumerate(values): + if value.type == tInt and type == tFloat: + values[i] = self.builder.sitofp(value, type) + else: + values[i] = self.cast(ctx, value, type) + + return values def declare(self, ctx, type, id, redeclare=False, initialize=False): if type == tVoid: self.throw(ctx, err.InvalidDeclaration(type)) + if type.isUnknown(): + self.throw(ctx, err.UnknownType()) + id = str(id) if id in self.env and not redeclare: self.throw(ctx, err.RedeclaredIdentifier(id)) + if self.builder.basic_block.parent._name == 'main': ptr = ll.GlobalVariable(self.module, type, self.module.get_unique_name(id)) ptr.initializer = type.default() else: ptr = self.builder.alloca(type) + self.env[id] = ptr if initialize: self.initialized.add(id) + return ptr def lvalue(self, ctx, expr, declare=None, initialize=False): @@ -312,10 +329,9 @@ def binaryop(self, ctx, op, left, right): self.throw(ctx, err.NoBinaryOperator(op, left.type, right.type)) def cmp(self, ctx, op, left, right): - if left.type in (tInt, tFloat) and right.type in (tInt, tFloat): + try: left, right = self.unify(ctx, left, right) - - if left.type != right.type: + except err: self.throw(ctx, err.NotComparable(left.type, right.type)) if left.type in (tInt, tChar): @@ -432,6 +448,9 @@ def cmp(self, ctx, op, left, right): phi.add_incoming(vBool(op not in ('!=', '<', '>')), label_cont) return phi + elif left.type == tUnknown: + return vTrue + else: self.throw(ctx, err.NotComparable(left.type, right.type)) @@ -463,16 +482,20 @@ def print(self, ctx, value): self.builder.store(vInt(0), index) with self.block() as (label_start, label_end): - with self.builder.if_then(self.builder.icmp_signed('>', self.builder.load(index), vInt(0))): + i = self.builder.load(index) + + with self.builder.if_then(self.builder.icmp_signed('>=', i, length)): + self.builder.branch(label_end) + + with self.builder.if_then(self.builder.icmp_signed('>', i, vInt(0))): self.write(', ') - elem = self.builder.gep(self.extract(value, 0), [self.builder.load(index)]) + elem = self.builder.gep(self.extract(value, 0), [i]) self.print(ctx, self.builder.load(elem)) self.inc(index) - cond = self.builder.icmp_signed('<', self.builder.load(index), length) - self.builder.cbranch(cond, label_start, label_end) + self.builder.branch(label_start) self.write(']') @@ -482,6 +505,9 @@ def print(self, ctx, value): self.write(' ') self.print(ctx, self.extract(value, i)) + elif value.type == tUnknown: + pass + else: self.throw(ctx, err.NotPrintable(value.type)) @@ -1013,7 +1039,7 @@ def visitAtomArray(self, ctx): exprs = ctx.expr() values = self.unify(ctx, *[self.visit(expr) for expr in exprs]) - subtype = values[0].type + subtype = values[0].type if values else tUnknown type = tArray(subtype) array = self.malloc(type) diff --git a/src/types.py b/src/types.py index 63495db7..320d9480 100644 --- a/src/types.py +++ b/src/types.py @@ -6,6 +6,18 @@ from .utils import extend_class +class UnknownType(ll.Type): + + def _to_string(self): + return 'i8*' + + def __eq__(self, other): + return isinstance(other, UnknownType) + + def __hash__(self): + return hash(UnknownType) + + class CustomStructType(ll.LiteralStructType): def __init__(self, elements, kind): @@ -81,6 +93,52 @@ def isCollection(type): return type == tString or type.isArray() +tUnknown = UnknownType() + +@extend_class(ll.Type) +def isUnknown(type): + if type == tUnknown: + return True + if type.isArray(): + return type.subtype.isUnknown() + if type.isTuple(): + return any(elem.isUnknown() for elem in type.elements) + if type.isFunc(): + return any(arg.type.isUnknown() for arg in type.args) or type.ret.isUnknown() + return False + + +def types_compatible(type1, type2): + if type1 == type2: + return True + if type1.isArray() and type2.isArray(): + return types_compatible(type1.subtype, type2.subtype) + if type1.isTuple() and type2.isTuple(): + return len(type1.elements) == len(type2.elements) and \ + all(types_compatible(t1, t2) for t1, t2 in zip(type1.elements, type2.elements)) + if type1 == tUnknown or type2 == tUnknown: + return True + return False + + +def unify_types(type1, type2): + if type1 == type2: + return type1 + if type1 == tFloat and type2 == tInt or type1 == tInt and type2 == tFloat: + return tFloat + if type1.isArray() and type2.isArray(): + subtype = unify_types(type1.subtype, type2.subtype) + return tArray(subtype) if subtype else None + if type1.isTuple() and type2.isTuple(): + elems = [unify_types(t1, t2) for t1, t2 in zip(type1.elements, type2.elements)] + return tTuple(elems) if all(elems) and len(type1.elements) == len(type2.elements) else None + if type1 == tUnknown: + return type2 + if type2 == tUnknown: + return type1 + return None + + @extend_class(ll.Type) def show(type): if type == tVoid: From bcbdceb331b9ef97b21a1cd9506ba51405e19953 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Fri, 1 Nov 2019 11:23:33 +0100 Subject: [PATCH 040/100] Fix assertion error from llvmlite --- src/compiler.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/compiler.py b/src/compiler.py index 4a3e01da..33dc2496 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -8,12 +8,19 @@ from .types import * +class CustomIRBuilder(ll.IRBuilder): + + def _set_terminator(self, term): + self.basic_block.terminator = None # to prevent llvmlite's AssertionError + super()._set_terminator(term) + + class PyxellCompiler(PyxellVisitor): def __init__(self): self.env = {} self.initialized = set() - self.builder = ll.IRBuilder() + self.builder = CustomIRBuilder() self.module = ll.Module() self.builtins = { 'malloc': ll.Function(self.module, tFunc([tInt], tPtr()).pointee, 'malloc'), From 13236965bdf109eb441636cf80655390cfdb7788 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Fri, 1 Nov 2019 11:25:51 +0100 Subject: [PATCH 041/100] Fix makefile --- Makefile | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index cf7cc513..e40931e1 100644 --- a/Makefile +++ b/Makefile @@ -1,9 +1,7 @@ -all: parser libs +all: parser parser: - +$(MAKE) parser -C src -libs: - ./pyxell.py -l + "$(MAKE)" parser -C src clean: - +$(MAKE) clean -C src + "$(MAKE)" clean -C src From ab568c618e8ee0061c8e8363e45be3de5a92a46a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Fri, 1 Nov 2019 13:10:36 +0100 Subject: [PATCH 042/100] Single-line comments --- src/Pyxell.g4 | 1 + src/antlr/Pyxell.interp | 4 +- src/antlr/Pyxell.tokens | 5 +- src/antlr/PyxellLexer.interp | 5 +- src/antlr/PyxellLexer.py | 361 +++++++++++++++++----------------- src/antlr/PyxellLexer.tokens | 5 +- src/antlr/PyxellParser.py | 9 +- src/indentation.py | 12 +- test/good/basic/comment01.out | 2 +- test/good/basic/comment01.px | 19 +- test/good/basic/comment02.out | 1 + test/good/basic/comment02.px | 7 + 12 files changed, 230 insertions(+), 201 deletions(-) create mode 100644 test/good/basic/comment02.out create mode 100644 test/good/basic/comment02.px diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index 2aa288be..1f73af9b 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -108,5 +108,6 @@ fragment DIGIT : [0-9] ; fragment ID_START : [a-zA-Z_] ; fragment ID_CONT : ID_START | DIGIT | [_'] ; +COMMENT : '--' ~[\r\n\f]* -> skip ; WS : [ \n\r\t]+ -> skip ; ERR : . ; diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index 162dc169..a0244d7e 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -67,6 +67,7 @@ null null null null +null token symbolic names: null @@ -135,6 +136,7 @@ FLOAT CHAR STRING ID +COMMENT WS ERR @@ -155,4 +157,4 @@ typ atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 69, 309, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 3, 2, 7, 2, 30, 10, 2, 12, 2, 14, 2, 33, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 41, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 46, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 52, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 57, 10, 4, 12, 4, 14, 4, 60, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 71, 10, 4, 5, 4, 73, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 78, 10, 5, 12, 5, 14, 5, 81, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 90, 10, 6, 12, 6, 14, 6, 93, 11, 6, 3, 6, 3, 6, 5, 6, 97, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 113, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 123, 10, 6, 12, 6, 14, 6, 126, 11, 6, 3, 6, 5, 6, 129, 10, 6, 3, 6, 3, 6, 5, 6, 133, 10, 6, 3, 6, 5, 6, 136, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 142, 10, 7, 3, 8, 3, 8, 3, 8, 6, 8, 147, 10, 8, 13, 8, 14, 8, 148, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 6, 9, 156, 10, 9, 13, 9, 14, 9, 157, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 7, 10, 165, 10, 10, 12, 10, 14, 10, 168, 11, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 182, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 236, 10, 11, 12, 11, 14, 11, 239, 11, 11, 3, 11, 5, 11, 242, 10, 11, 3, 11, 3, 11, 3, 11, 7, 11, 247, 10, 11, 12, 11, 14, 11, 250, 11, 11, 3, 12, 3, 12, 5, 12, 254, 10, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 7, 13, 267, 10, 13, 12, 13, 14, 13, 270, 11, 13, 3, 13, 5, 13, 273, 10, 13, 3, 13, 3, 13, 5, 13, 277, 10, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 296, 10, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 7, 14, 304, 10, 14, 12, 14, 14, 14, 307, 11, 14, 3, 14, 2, 4, 20, 26, 15, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 2, 11, 3, 2, 7, 17, 3, 2, 18, 19, 4, 2, 11, 12, 41, 41, 3, 2, 8, 10, 3, 2, 11, 12, 3, 2, 13, 14, 3, 2, 42, 43, 3, 2, 44, 49, 3, 2, 54, 55, 2, 362, 2, 31, 3, 2, 2, 2, 4, 40, 3, 2, 2, 2, 6, 72, 3, 2, 2, 2, 8, 74, 3, 2, 2, 2, 10, 135, 3, 2, 2, 2, 12, 137, 3, 2, 2, 2, 14, 143, 3, 2, 2, 2, 16, 152, 3, 2, 2, 2, 18, 166, 3, 2, 2, 2, 20, 181, 3, 2, 2, 2, 22, 253, 3, 2, 2, 2, 24, 276, 3, 2, 2, 2, 26, 295, 3, 2, 2, 2, 28, 30, 5, 4, 3, 2, 29, 28, 3, 2, 2, 2, 30, 33, 3, 2, 2, 2, 31, 29, 3, 2, 2, 2, 31, 32, 3, 2, 2, 2, 32, 34, 3, 2, 2, 2, 33, 31, 3, 2, 2, 2, 34, 35, 7, 2, 2, 3, 35, 3, 3, 2, 2, 2, 36, 37, 5, 6, 4, 2, 37, 38, 7, 3, 2, 2, 38, 41, 3, 2, 2, 2, 39, 41, 5, 10, 6, 2, 40, 36, 3, 2, 2, 2, 40, 39, 3, 2, 2, 2, 41, 5, 3, 2, 2, 2, 42, 73, 7, 4, 2, 2, 43, 45, 7, 5, 2, 2, 44, 46, 5, 18, 10, 2, 45, 44, 3, 2, 2, 2, 45, 46, 3, 2, 2, 2, 46, 73, 3, 2, 2, 2, 47, 48, 5, 26, 14, 2, 48, 51, 7, 67, 2, 2, 49, 50, 7, 6, 2, 2, 50, 52, 5, 18, 10, 2, 51, 49, 3, 2, 2, 2, 51, 52, 3, 2, 2, 2, 52, 73, 3, 2, 2, 2, 53, 54, 5, 8, 5, 2, 54, 55, 7, 6, 2, 2, 55, 57, 3, 2, 2, 2, 56, 53, 3, 2, 2, 2, 57, 60, 3, 2, 2, 2, 58, 56, 3, 2, 2, 2, 58, 59, 3, 2, 2, 2, 59, 61, 3, 2, 2, 2, 60, 58, 3, 2, 2, 2, 61, 73, 5, 18, 10, 2, 62, 63, 5, 20, 11, 2, 63, 64, 9, 2, 2, 2, 64, 65, 7, 6, 2, 2, 65, 66, 5, 20, 11, 2, 66, 73, 3, 2, 2, 2, 67, 73, 9, 3, 2, 2, 68, 70, 7, 20, 2, 2, 69, 71, 5, 18, 10, 2, 70, 69, 3, 2, 2, 2, 70, 71, 3, 2, 2, 2, 71, 73, 3, 2, 2, 2, 72, 42, 3, 2, 2, 2, 72, 43, 3, 2, 2, 2, 72, 47, 3, 2, 2, 2, 72, 58, 3, 2, 2, 2, 72, 62, 3, 2, 2, 2, 72, 67, 3, 2, 2, 2, 72, 68, 3, 2, 2, 2, 73, 7, 3, 2, 2, 2, 74, 79, 5, 20, 11, 2, 75, 76, 7, 21, 2, 2, 76, 78, 5, 20, 11, 2, 77, 75, 3, 2, 2, 2, 78, 81, 3, 2, 2, 2, 79, 77, 3, 2, 2, 2, 79, 80, 3, 2, 2, 2, 80, 9, 3, 2, 2, 2, 81, 79, 3, 2, 2, 2, 82, 83, 7, 22, 2, 2, 83, 84, 5, 20, 11, 2, 84, 91, 5, 14, 8, 2, 85, 86, 7, 23, 2, 2, 86, 87, 5, 20, 11, 2, 87, 88, 5, 14, 8, 2, 88, 90, 3, 2, 2, 2, 89, 85, 3, 2, 2, 2, 90, 93, 3, 2, 2, 2, 91, 89, 3, 2, 2, 2, 91, 92, 3, 2, 2, 2, 92, 96, 3, 2, 2, 2, 93, 91, 3, 2, 2, 2, 94, 95, 7, 24, 2, 2, 95, 97, 5, 14, 8, 2, 96, 94, 3, 2, 2, 2, 96, 97, 3, 2, 2, 2, 97, 136, 3, 2, 2, 2, 98, 99, 7, 25, 2, 2, 99, 100, 5, 20, 11, 2, 100, 101, 5, 14, 8, 2, 101, 136, 3, 2, 2, 2, 102, 103, 7, 26, 2, 2, 103, 104, 5, 20, 11, 2, 104, 105, 5, 14, 8, 2, 105, 136, 3, 2, 2, 2, 106, 107, 7, 27, 2, 2, 107, 108, 5, 18, 10, 2, 108, 109, 7, 28, 2, 2, 109, 112, 5, 18, 10, 2, 110, 111, 7, 29, 2, 2, 111, 113, 5, 18, 10, 2, 112, 110, 3, 2, 2, 2, 112, 113, 3, 2, 2, 2, 113, 114, 3, 2, 2, 2, 114, 115, 5, 14, 8, 2, 115, 136, 3, 2, 2, 2, 116, 117, 7, 30, 2, 2, 117, 118, 7, 67, 2, 2, 118, 124, 7, 31, 2, 2, 119, 120, 5, 12, 7, 2, 120, 121, 7, 21, 2, 2, 121, 123, 3, 2, 2, 2, 122, 119, 3, 2, 2, 2, 123, 126, 3, 2, 2, 2, 124, 122, 3, 2, 2, 2, 124, 125, 3, 2, 2, 2, 125, 128, 3, 2, 2, 2, 126, 124, 3, 2, 2, 2, 127, 129, 5, 12, 7, 2, 128, 127, 3, 2, 2, 2, 128, 129, 3, 2, 2, 2, 129, 130, 3, 2, 2, 2, 130, 132, 7, 32, 2, 2, 131, 133, 5, 26, 14, 2, 132, 131, 3, 2, 2, 2, 132, 133, 3, 2, 2, 2, 133, 134, 3, 2, 2, 2, 134, 136, 5, 16, 9, 2, 135, 82, 3, 2, 2, 2, 135, 98, 3, 2, 2, 2, 135, 102, 3, 2, 2, 2, 135, 106, 3, 2, 2, 2, 135, 116, 3, 2, 2, 2, 136, 11, 3, 2, 2, 2, 137, 138, 5, 26, 14, 2, 138, 141, 7, 67, 2, 2, 139, 140, 7, 33, 2, 2, 140, 142, 5, 20, 11, 2, 141, 139, 3, 2, 2, 2, 141, 142, 3, 2, 2, 2, 142, 13, 3, 2, 2, 2, 143, 144, 7, 34, 2, 2, 144, 146, 7, 35, 2, 2, 145, 147, 5, 4, 3, 2, 146, 145, 3, 2, 2, 2, 147, 148, 3, 2, 2, 2, 148, 146, 3, 2, 2, 2, 148, 149, 3, 2, 2, 2, 149, 150, 3, 2, 2, 2, 150, 151, 7, 36, 2, 2, 151, 15, 3, 2, 2, 2, 152, 153, 7, 37, 2, 2, 153, 155, 7, 35, 2, 2, 154, 156, 5, 4, 3, 2, 155, 154, 3, 2, 2, 2, 156, 157, 3, 2, 2, 2, 157, 155, 3, 2, 2, 2, 157, 158, 3, 2, 2, 2, 158, 159, 3, 2, 2, 2, 159, 160, 7, 36, 2, 2, 160, 17, 3, 2, 2, 2, 161, 162, 5, 20, 11, 2, 162, 163, 7, 21, 2, 2, 163, 165, 3, 2, 2, 2, 164, 161, 3, 2, 2, 2, 165, 168, 3, 2, 2, 2, 166, 164, 3, 2, 2, 2, 166, 167, 3, 2, 2, 2, 167, 169, 3, 2, 2, 2, 168, 166, 3, 2, 2, 2, 169, 170, 5, 20, 11, 2, 170, 19, 3, 2, 2, 2, 171, 172, 8, 11, 1, 2, 172, 182, 5, 24, 13, 2, 173, 174, 7, 31, 2, 2, 174, 175, 5, 18, 10, 2, 175, 176, 7, 32, 2, 2, 176, 182, 3, 2, 2, 2, 177, 178, 9, 4, 2, 2, 178, 182, 5, 20, 11, 16, 179, 180, 7, 50, 2, 2, 180, 182, 5, 20, 11, 6, 181, 171, 3, 2, 2, 2, 181, 173, 3, 2, 2, 2, 181, 177, 3, 2, 2, 2, 181, 179, 3, 2, 2, 2, 182, 248, 3, 2, 2, 2, 183, 184, 12, 17, 2, 2, 184, 185, 7, 7, 2, 2, 185, 247, 5, 20, 11, 17, 186, 187, 12, 15, 2, 2, 187, 188, 9, 5, 2, 2, 188, 247, 5, 20, 11, 16, 189, 190, 12, 14, 2, 2, 190, 191, 9, 6, 2, 2, 191, 247, 5, 20, 11, 15, 192, 193, 12, 13, 2, 2, 193, 194, 9, 7, 2, 2, 194, 247, 5, 20, 11, 14, 195, 196, 12, 12, 2, 2, 196, 197, 7, 15, 2, 2, 197, 247, 5, 20, 11, 13, 198, 199, 12, 11, 2, 2, 199, 200, 7, 16, 2, 2, 200, 247, 5, 20, 11, 12, 201, 202, 12, 10, 2, 2, 202, 203, 7, 17, 2, 2, 203, 247, 5, 20, 11, 11, 204, 205, 12, 9, 2, 2, 205, 206, 9, 8, 2, 2, 206, 247, 5, 20, 11, 10, 207, 208, 12, 7, 2, 2, 208, 209, 9, 9, 2, 2, 209, 247, 5, 20, 11, 7, 210, 211, 12, 5, 2, 2, 211, 212, 7, 51, 2, 2, 212, 247, 5, 20, 11, 5, 213, 214, 12, 4, 2, 2, 214, 215, 7, 52, 2, 2, 215, 247, 5, 20, 11, 4, 216, 217, 12, 3, 2, 2, 217, 218, 7, 53, 2, 2, 218, 219, 5, 20, 11, 2, 219, 220, 7, 33, 2, 2, 220, 221, 5, 20, 11, 3, 221, 247, 3, 2, 2, 2, 222, 223, 12, 20, 2, 2, 223, 224, 7, 38, 2, 2, 224, 225, 5, 20, 11, 2, 225, 226, 7, 39, 2, 2, 226, 247, 3, 2, 2, 2, 227, 228, 12, 19, 2, 2, 228, 229, 7, 40, 2, 2, 229, 247, 7, 67, 2, 2, 230, 231, 12, 18, 2, 2, 231, 237, 7, 31, 2, 2, 232, 233, 5, 22, 12, 2, 233, 234, 7, 21, 2, 2, 234, 236, 3, 2, 2, 2, 235, 232, 3, 2, 2, 2, 236, 239, 3, 2, 2, 2, 237, 235, 3, 2, 2, 2, 237, 238, 3, 2, 2, 2, 238, 241, 3, 2, 2, 2, 239, 237, 3, 2, 2, 2, 240, 242, 5, 22, 12, 2, 241, 240, 3, 2, 2, 2, 241, 242, 3, 2, 2, 2, 242, 243, 3, 2, 2, 2, 243, 247, 7, 32, 2, 2, 244, 245, 12, 8, 2, 2, 245, 247, 7, 43, 2, 2, 246, 183, 3, 2, 2, 2, 246, 186, 3, 2, 2, 2, 246, 189, 3, 2, 2, 2, 246, 192, 3, 2, 2, 2, 246, 195, 3, 2, 2, 2, 246, 198, 3, 2, 2, 2, 246, 201, 3, 2, 2, 2, 246, 204, 3, 2, 2, 2, 246, 207, 3, 2, 2, 2, 246, 210, 3, 2, 2, 2, 246, 213, 3, 2, 2, 2, 246, 216, 3, 2, 2, 2, 246, 222, 3, 2, 2, 2, 246, 227, 3, 2, 2, 2, 246, 230, 3, 2, 2, 2, 246, 244, 3, 2, 2, 2, 247, 250, 3, 2, 2, 2, 248, 246, 3, 2, 2, 2, 248, 249, 3, 2, 2, 2, 249, 21, 3, 2, 2, 2, 250, 248, 3, 2, 2, 2, 251, 252, 7, 67, 2, 2, 252, 254, 7, 6, 2, 2, 253, 251, 3, 2, 2, 2, 253, 254, 3, 2, 2, 2, 254, 255, 3, 2, 2, 2, 255, 256, 5, 20, 11, 2, 256, 23, 3, 2, 2, 2, 257, 277, 7, 63, 2, 2, 258, 277, 7, 64, 2, 2, 259, 277, 9, 10, 2, 2, 260, 277, 7, 65, 2, 2, 261, 277, 7, 66, 2, 2, 262, 268, 7, 38, 2, 2, 263, 264, 5, 20, 11, 2, 264, 265, 7, 21, 2, 2, 265, 267, 3, 2, 2, 2, 266, 263, 3, 2, 2, 2, 267, 270, 3, 2, 2, 2, 268, 266, 3, 2, 2, 2, 268, 269, 3, 2, 2, 2, 269, 272, 3, 2, 2, 2, 270, 268, 3, 2, 2, 2, 271, 273, 5, 20, 11, 2, 272, 271, 3, 2, 2, 2, 272, 273, 3, 2, 2, 2, 273, 274, 3, 2, 2, 2, 274, 277, 7, 39, 2, 2, 275, 277, 7, 67, 2, 2, 276, 257, 3, 2, 2, 2, 276, 258, 3, 2, 2, 2, 276, 259, 3, 2, 2, 2, 276, 260, 3, 2, 2, 2, 276, 261, 3, 2, 2, 2, 276, 262, 3, 2, 2, 2, 276, 275, 3, 2, 2, 2, 277, 25, 3, 2, 2, 2, 278, 279, 8, 14, 1, 2, 279, 296, 7, 56, 2, 2, 280, 296, 7, 57, 2, 2, 281, 296, 7, 58, 2, 2, 282, 296, 7, 59, 2, 2, 283, 296, 7, 60, 2, 2, 284, 296, 7, 61, 2, 2, 285, 286, 7, 31, 2, 2, 286, 287, 5, 26, 14, 2, 287, 288, 7, 32, 2, 2, 288, 296, 3, 2, 2, 2, 289, 290, 7, 38, 2, 2, 290, 291, 5, 26, 14, 2, 291, 292, 7, 39, 2, 2, 292, 296, 3, 2, 2, 2, 293, 294, 7, 62, 2, 2, 294, 296, 5, 26, 14, 3, 295, 278, 3, 2, 2, 2, 295, 280, 3, 2, 2, 2, 295, 281, 3, 2, 2, 2, 295, 282, 3, 2, 2, 2, 295, 283, 3, 2, 2, 2, 295, 284, 3, 2, 2, 2, 295, 285, 3, 2, 2, 2, 295, 289, 3, 2, 2, 2, 295, 293, 3, 2, 2, 2, 296, 305, 3, 2, 2, 2, 297, 298, 12, 5, 2, 2, 298, 299, 7, 8, 2, 2, 299, 304, 5, 26, 14, 5, 300, 301, 12, 4, 2, 2, 301, 302, 7, 62, 2, 2, 302, 304, 5, 26, 14, 4, 303, 297, 3, 2, 2, 2, 303, 300, 3, 2, 2, 2, 304, 307, 3, 2, 2, 2, 305, 303, 3, 2, 2, 2, 305, 306, 3, 2, 2, 2, 306, 27, 3, 2, 2, 2, 307, 305, 3, 2, 2, 2, 33, 31, 40, 45, 51, 58, 70, 72, 79, 91, 96, 112, 124, 128, 132, 135, 141, 148, 157, 166, 181, 237, 241, 246, 248, 253, 268, 272, 276, 295, 303, 305] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 70, 309, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 3, 2, 7, 2, 30, 10, 2, 12, 2, 14, 2, 33, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 41, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 46, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 52, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 57, 10, 4, 12, 4, 14, 4, 60, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 71, 10, 4, 5, 4, 73, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 78, 10, 5, 12, 5, 14, 5, 81, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 90, 10, 6, 12, 6, 14, 6, 93, 11, 6, 3, 6, 3, 6, 5, 6, 97, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 113, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 123, 10, 6, 12, 6, 14, 6, 126, 11, 6, 3, 6, 5, 6, 129, 10, 6, 3, 6, 3, 6, 5, 6, 133, 10, 6, 3, 6, 5, 6, 136, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 142, 10, 7, 3, 8, 3, 8, 3, 8, 6, 8, 147, 10, 8, 13, 8, 14, 8, 148, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 6, 9, 156, 10, 9, 13, 9, 14, 9, 157, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 7, 10, 165, 10, 10, 12, 10, 14, 10, 168, 11, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 182, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 236, 10, 11, 12, 11, 14, 11, 239, 11, 11, 3, 11, 5, 11, 242, 10, 11, 3, 11, 3, 11, 3, 11, 7, 11, 247, 10, 11, 12, 11, 14, 11, 250, 11, 11, 3, 12, 3, 12, 5, 12, 254, 10, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 7, 13, 267, 10, 13, 12, 13, 14, 13, 270, 11, 13, 3, 13, 5, 13, 273, 10, 13, 3, 13, 3, 13, 5, 13, 277, 10, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 296, 10, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 7, 14, 304, 10, 14, 12, 14, 14, 14, 307, 11, 14, 3, 14, 2, 4, 20, 26, 15, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 2, 11, 3, 2, 7, 17, 3, 2, 18, 19, 4, 2, 11, 12, 41, 41, 3, 2, 8, 10, 3, 2, 11, 12, 3, 2, 13, 14, 3, 2, 42, 43, 3, 2, 44, 49, 3, 2, 54, 55, 2, 362, 2, 31, 3, 2, 2, 2, 4, 40, 3, 2, 2, 2, 6, 72, 3, 2, 2, 2, 8, 74, 3, 2, 2, 2, 10, 135, 3, 2, 2, 2, 12, 137, 3, 2, 2, 2, 14, 143, 3, 2, 2, 2, 16, 152, 3, 2, 2, 2, 18, 166, 3, 2, 2, 2, 20, 181, 3, 2, 2, 2, 22, 253, 3, 2, 2, 2, 24, 276, 3, 2, 2, 2, 26, 295, 3, 2, 2, 2, 28, 30, 5, 4, 3, 2, 29, 28, 3, 2, 2, 2, 30, 33, 3, 2, 2, 2, 31, 29, 3, 2, 2, 2, 31, 32, 3, 2, 2, 2, 32, 34, 3, 2, 2, 2, 33, 31, 3, 2, 2, 2, 34, 35, 7, 2, 2, 3, 35, 3, 3, 2, 2, 2, 36, 37, 5, 6, 4, 2, 37, 38, 7, 3, 2, 2, 38, 41, 3, 2, 2, 2, 39, 41, 5, 10, 6, 2, 40, 36, 3, 2, 2, 2, 40, 39, 3, 2, 2, 2, 41, 5, 3, 2, 2, 2, 42, 73, 7, 4, 2, 2, 43, 45, 7, 5, 2, 2, 44, 46, 5, 18, 10, 2, 45, 44, 3, 2, 2, 2, 45, 46, 3, 2, 2, 2, 46, 73, 3, 2, 2, 2, 47, 48, 5, 26, 14, 2, 48, 51, 7, 67, 2, 2, 49, 50, 7, 6, 2, 2, 50, 52, 5, 18, 10, 2, 51, 49, 3, 2, 2, 2, 51, 52, 3, 2, 2, 2, 52, 73, 3, 2, 2, 2, 53, 54, 5, 8, 5, 2, 54, 55, 7, 6, 2, 2, 55, 57, 3, 2, 2, 2, 56, 53, 3, 2, 2, 2, 57, 60, 3, 2, 2, 2, 58, 56, 3, 2, 2, 2, 58, 59, 3, 2, 2, 2, 59, 61, 3, 2, 2, 2, 60, 58, 3, 2, 2, 2, 61, 73, 5, 18, 10, 2, 62, 63, 5, 20, 11, 2, 63, 64, 9, 2, 2, 2, 64, 65, 7, 6, 2, 2, 65, 66, 5, 20, 11, 2, 66, 73, 3, 2, 2, 2, 67, 73, 9, 3, 2, 2, 68, 70, 7, 20, 2, 2, 69, 71, 5, 18, 10, 2, 70, 69, 3, 2, 2, 2, 70, 71, 3, 2, 2, 2, 71, 73, 3, 2, 2, 2, 72, 42, 3, 2, 2, 2, 72, 43, 3, 2, 2, 2, 72, 47, 3, 2, 2, 2, 72, 58, 3, 2, 2, 2, 72, 62, 3, 2, 2, 2, 72, 67, 3, 2, 2, 2, 72, 68, 3, 2, 2, 2, 73, 7, 3, 2, 2, 2, 74, 79, 5, 20, 11, 2, 75, 76, 7, 21, 2, 2, 76, 78, 5, 20, 11, 2, 77, 75, 3, 2, 2, 2, 78, 81, 3, 2, 2, 2, 79, 77, 3, 2, 2, 2, 79, 80, 3, 2, 2, 2, 80, 9, 3, 2, 2, 2, 81, 79, 3, 2, 2, 2, 82, 83, 7, 22, 2, 2, 83, 84, 5, 20, 11, 2, 84, 91, 5, 14, 8, 2, 85, 86, 7, 23, 2, 2, 86, 87, 5, 20, 11, 2, 87, 88, 5, 14, 8, 2, 88, 90, 3, 2, 2, 2, 89, 85, 3, 2, 2, 2, 90, 93, 3, 2, 2, 2, 91, 89, 3, 2, 2, 2, 91, 92, 3, 2, 2, 2, 92, 96, 3, 2, 2, 2, 93, 91, 3, 2, 2, 2, 94, 95, 7, 24, 2, 2, 95, 97, 5, 14, 8, 2, 96, 94, 3, 2, 2, 2, 96, 97, 3, 2, 2, 2, 97, 136, 3, 2, 2, 2, 98, 99, 7, 25, 2, 2, 99, 100, 5, 20, 11, 2, 100, 101, 5, 14, 8, 2, 101, 136, 3, 2, 2, 2, 102, 103, 7, 26, 2, 2, 103, 104, 5, 20, 11, 2, 104, 105, 5, 14, 8, 2, 105, 136, 3, 2, 2, 2, 106, 107, 7, 27, 2, 2, 107, 108, 5, 18, 10, 2, 108, 109, 7, 28, 2, 2, 109, 112, 5, 18, 10, 2, 110, 111, 7, 29, 2, 2, 111, 113, 5, 18, 10, 2, 112, 110, 3, 2, 2, 2, 112, 113, 3, 2, 2, 2, 113, 114, 3, 2, 2, 2, 114, 115, 5, 14, 8, 2, 115, 136, 3, 2, 2, 2, 116, 117, 7, 30, 2, 2, 117, 118, 7, 67, 2, 2, 118, 124, 7, 31, 2, 2, 119, 120, 5, 12, 7, 2, 120, 121, 7, 21, 2, 2, 121, 123, 3, 2, 2, 2, 122, 119, 3, 2, 2, 2, 123, 126, 3, 2, 2, 2, 124, 122, 3, 2, 2, 2, 124, 125, 3, 2, 2, 2, 125, 128, 3, 2, 2, 2, 126, 124, 3, 2, 2, 2, 127, 129, 5, 12, 7, 2, 128, 127, 3, 2, 2, 2, 128, 129, 3, 2, 2, 2, 129, 130, 3, 2, 2, 2, 130, 132, 7, 32, 2, 2, 131, 133, 5, 26, 14, 2, 132, 131, 3, 2, 2, 2, 132, 133, 3, 2, 2, 2, 133, 134, 3, 2, 2, 2, 134, 136, 5, 16, 9, 2, 135, 82, 3, 2, 2, 2, 135, 98, 3, 2, 2, 2, 135, 102, 3, 2, 2, 2, 135, 106, 3, 2, 2, 2, 135, 116, 3, 2, 2, 2, 136, 11, 3, 2, 2, 2, 137, 138, 5, 26, 14, 2, 138, 141, 7, 67, 2, 2, 139, 140, 7, 33, 2, 2, 140, 142, 5, 20, 11, 2, 141, 139, 3, 2, 2, 2, 141, 142, 3, 2, 2, 2, 142, 13, 3, 2, 2, 2, 143, 144, 7, 34, 2, 2, 144, 146, 7, 35, 2, 2, 145, 147, 5, 4, 3, 2, 146, 145, 3, 2, 2, 2, 147, 148, 3, 2, 2, 2, 148, 146, 3, 2, 2, 2, 148, 149, 3, 2, 2, 2, 149, 150, 3, 2, 2, 2, 150, 151, 7, 36, 2, 2, 151, 15, 3, 2, 2, 2, 152, 153, 7, 37, 2, 2, 153, 155, 7, 35, 2, 2, 154, 156, 5, 4, 3, 2, 155, 154, 3, 2, 2, 2, 156, 157, 3, 2, 2, 2, 157, 155, 3, 2, 2, 2, 157, 158, 3, 2, 2, 2, 158, 159, 3, 2, 2, 2, 159, 160, 7, 36, 2, 2, 160, 17, 3, 2, 2, 2, 161, 162, 5, 20, 11, 2, 162, 163, 7, 21, 2, 2, 163, 165, 3, 2, 2, 2, 164, 161, 3, 2, 2, 2, 165, 168, 3, 2, 2, 2, 166, 164, 3, 2, 2, 2, 166, 167, 3, 2, 2, 2, 167, 169, 3, 2, 2, 2, 168, 166, 3, 2, 2, 2, 169, 170, 5, 20, 11, 2, 170, 19, 3, 2, 2, 2, 171, 172, 8, 11, 1, 2, 172, 182, 5, 24, 13, 2, 173, 174, 7, 31, 2, 2, 174, 175, 5, 18, 10, 2, 175, 176, 7, 32, 2, 2, 176, 182, 3, 2, 2, 2, 177, 178, 9, 4, 2, 2, 178, 182, 5, 20, 11, 16, 179, 180, 7, 50, 2, 2, 180, 182, 5, 20, 11, 6, 181, 171, 3, 2, 2, 2, 181, 173, 3, 2, 2, 2, 181, 177, 3, 2, 2, 2, 181, 179, 3, 2, 2, 2, 182, 248, 3, 2, 2, 2, 183, 184, 12, 17, 2, 2, 184, 185, 7, 7, 2, 2, 185, 247, 5, 20, 11, 17, 186, 187, 12, 15, 2, 2, 187, 188, 9, 5, 2, 2, 188, 247, 5, 20, 11, 16, 189, 190, 12, 14, 2, 2, 190, 191, 9, 6, 2, 2, 191, 247, 5, 20, 11, 15, 192, 193, 12, 13, 2, 2, 193, 194, 9, 7, 2, 2, 194, 247, 5, 20, 11, 14, 195, 196, 12, 12, 2, 2, 196, 197, 7, 15, 2, 2, 197, 247, 5, 20, 11, 13, 198, 199, 12, 11, 2, 2, 199, 200, 7, 16, 2, 2, 200, 247, 5, 20, 11, 12, 201, 202, 12, 10, 2, 2, 202, 203, 7, 17, 2, 2, 203, 247, 5, 20, 11, 11, 204, 205, 12, 9, 2, 2, 205, 206, 9, 8, 2, 2, 206, 247, 5, 20, 11, 10, 207, 208, 12, 7, 2, 2, 208, 209, 9, 9, 2, 2, 209, 247, 5, 20, 11, 7, 210, 211, 12, 5, 2, 2, 211, 212, 7, 51, 2, 2, 212, 247, 5, 20, 11, 5, 213, 214, 12, 4, 2, 2, 214, 215, 7, 52, 2, 2, 215, 247, 5, 20, 11, 4, 216, 217, 12, 3, 2, 2, 217, 218, 7, 53, 2, 2, 218, 219, 5, 20, 11, 2, 219, 220, 7, 33, 2, 2, 220, 221, 5, 20, 11, 3, 221, 247, 3, 2, 2, 2, 222, 223, 12, 20, 2, 2, 223, 224, 7, 38, 2, 2, 224, 225, 5, 20, 11, 2, 225, 226, 7, 39, 2, 2, 226, 247, 3, 2, 2, 2, 227, 228, 12, 19, 2, 2, 228, 229, 7, 40, 2, 2, 229, 247, 7, 67, 2, 2, 230, 231, 12, 18, 2, 2, 231, 237, 7, 31, 2, 2, 232, 233, 5, 22, 12, 2, 233, 234, 7, 21, 2, 2, 234, 236, 3, 2, 2, 2, 235, 232, 3, 2, 2, 2, 236, 239, 3, 2, 2, 2, 237, 235, 3, 2, 2, 2, 237, 238, 3, 2, 2, 2, 238, 241, 3, 2, 2, 2, 239, 237, 3, 2, 2, 2, 240, 242, 5, 22, 12, 2, 241, 240, 3, 2, 2, 2, 241, 242, 3, 2, 2, 2, 242, 243, 3, 2, 2, 2, 243, 247, 7, 32, 2, 2, 244, 245, 12, 8, 2, 2, 245, 247, 7, 43, 2, 2, 246, 183, 3, 2, 2, 2, 246, 186, 3, 2, 2, 2, 246, 189, 3, 2, 2, 2, 246, 192, 3, 2, 2, 2, 246, 195, 3, 2, 2, 2, 246, 198, 3, 2, 2, 2, 246, 201, 3, 2, 2, 2, 246, 204, 3, 2, 2, 2, 246, 207, 3, 2, 2, 2, 246, 210, 3, 2, 2, 2, 246, 213, 3, 2, 2, 2, 246, 216, 3, 2, 2, 2, 246, 222, 3, 2, 2, 2, 246, 227, 3, 2, 2, 2, 246, 230, 3, 2, 2, 2, 246, 244, 3, 2, 2, 2, 247, 250, 3, 2, 2, 2, 248, 246, 3, 2, 2, 2, 248, 249, 3, 2, 2, 2, 249, 21, 3, 2, 2, 2, 250, 248, 3, 2, 2, 2, 251, 252, 7, 67, 2, 2, 252, 254, 7, 6, 2, 2, 253, 251, 3, 2, 2, 2, 253, 254, 3, 2, 2, 2, 254, 255, 3, 2, 2, 2, 255, 256, 5, 20, 11, 2, 256, 23, 3, 2, 2, 2, 257, 277, 7, 63, 2, 2, 258, 277, 7, 64, 2, 2, 259, 277, 9, 10, 2, 2, 260, 277, 7, 65, 2, 2, 261, 277, 7, 66, 2, 2, 262, 268, 7, 38, 2, 2, 263, 264, 5, 20, 11, 2, 264, 265, 7, 21, 2, 2, 265, 267, 3, 2, 2, 2, 266, 263, 3, 2, 2, 2, 267, 270, 3, 2, 2, 2, 268, 266, 3, 2, 2, 2, 268, 269, 3, 2, 2, 2, 269, 272, 3, 2, 2, 2, 270, 268, 3, 2, 2, 2, 271, 273, 5, 20, 11, 2, 272, 271, 3, 2, 2, 2, 272, 273, 3, 2, 2, 2, 273, 274, 3, 2, 2, 2, 274, 277, 7, 39, 2, 2, 275, 277, 7, 67, 2, 2, 276, 257, 3, 2, 2, 2, 276, 258, 3, 2, 2, 2, 276, 259, 3, 2, 2, 2, 276, 260, 3, 2, 2, 2, 276, 261, 3, 2, 2, 2, 276, 262, 3, 2, 2, 2, 276, 275, 3, 2, 2, 2, 277, 25, 3, 2, 2, 2, 278, 279, 8, 14, 1, 2, 279, 296, 7, 56, 2, 2, 280, 296, 7, 57, 2, 2, 281, 296, 7, 58, 2, 2, 282, 296, 7, 59, 2, 2, 283, 296, 7, 60, 2, 2, 284, 296, 7, 61, 2, 2, 285, 286, 7, 31, 2, 2, 286, 287, 5, 26, 14, 2, 287, 288, 7, 32, 2, 2, 288, 296, 3, 2, 2, 2, 289, 290, 7, 38, 2, 2, 290, 291, 5, 26, 14, 2, 291, 292, 7, 39, 2, 2, 292, 296, 3, 2, 2, 2, 293, 294, 7, 62, 2, 2, 294, 296, 5, 26, 14, 3, 295, 278, 3, 2, 2, 2, 295, 280, 3, 2, 2, 2, 295, 281, 3, 2, 2, 2, 295, 282, 3, 2, 2, 2, 295, 283, 3, 2, 2, 2, 295, 284, 3, 2, 2, 2, 295, 285, 3, 2, 2, 2, 295, 289, 3, 2, 2, 2, 295, 293, 3, 2, 2, 2, 296, 305, 3, 2, 2, 2, 297, 298, 12, 5, 2, 2, 298, 299, 7, 8, 2, 2, 299, 304, 5, 26, 14, 5, 300, 301, 12, 4, 2, 2, 301, 302, 7, 62, 2, 2, 302, 304, 5, 26, 14, 4, 303, 297, 3, 2, 2, 2, 303, 300, 3, 2, 2, 2, 304, 307, 3, 2, 2, 2, 305, 303, 3, 2, 2, 2, 305, 306, 3, 2, 2, 2, 306, 27, 3, 2, 2, 2, 307, 305, 3, 2, 2, 2, 33, 31, 40, 45, 51, 58, 70, 72, 79, 91, 96, 112, 124, 128, 132, 135, 141, 148, 157, 166, 181, 237, 241, 246, 248, 253, 268, 272, 276, 295, 303, 305] \ No newline at end of file diff --git a/src/antlr/Pyxell.tokens b/src/antlr/Pyxell.tokens index 41299c04..2b4922ee 100644 --- a/src/antlr/Pyxell.tokens +++ b/src/antlr/Pyxell.tokens @@ -63,8 +63,9 @@ FLOAT=62 CHAR=63 STRING=64 ID=65 -WS=66 -ERR=67 +COMMENT=66 +WS=67 +ERR=68 ';'=1 'skip'=2 'print'=3 diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp index c40eaaa5..ee66675c 100644 --- a/src/antlr/PyxellLexer.interp +++ b/src/antlr/PyxellLexer.interp @@ -67,6 +67,7 @@ null null null null +null token symbolic names: null @@ -135,6 +136,7 @@ FLOAT CHAR STRING ID +COMMENT WS ERR @@ -207,6 +209,7 @@ ID DIGIT ID_START ID_CONT +COMMENT WS ERR @@ -218,4 +221,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 69, 429, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 62, 6, 62, 357, 10, 62, 13, 62, 14, 62, 358, 3, 63, 6, 63, 362, 10, 63, 13, 63, 14, 63, 363, 3, 63, 3, 63, 6, 63, 368, 10, 63, 13, 63, 14, 63, 369, 3, 63, 3, 63, 5, 63, 374, 10, 63, 3, 63, 6, 63, 377, 10, 63, 13, 63, 14, 63, 378, 5, 63, 381, 10, 63, 3, 64, 3, 64, 3, 64, 3, 64, 7, 64, 387, 10, 64, 12, 64, 14, 64, 390, 11, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 7, 65, 398, 10, 65, 12, 65, 14, 65, 401, 11, 65, 3, 65, 3, 65, 3, 66, 3, 66, 7, 66, 407, 10, 66, 12, 66, 14, 66, 410, 11, 66, 3, 67, 3, 67, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 5, 69, 419, 10, 69, 3, 70, 6, 70, 422, 10, 70, 13, 70, 14, 70, 423, 3, 70, 3, 70, 3, 71, 3, 71, 2, 2, 72, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 2, 135, 2, 137, 2, 139, 68, 141, 69, 3, 2, 10, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 5, 2, 11, 12, 15, 15, 34, 34, 2, 439, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 3, 143, 3, 2, 2, 2, 5, 145, 3, 2, 2, 2, 7, 150, 3, 2, 2, 2, 9, 156, 3, 2, 2, 2, 11, 158, 3, 2, 2, 2, 13, 160, 3, 2, 2, 2, 15, 162, 3, 2, 2, 2, 17, 164, 3, 2, 2, 2, 19, 166, 3, 2, 2, 2, 21, 168, 3, 2, 2, 2, 23, 170, 3, 2, 2, 2, 25, 173, 3, 2, 2, 2, 27, 176, 3, 2, 2, 2, 29, 178, 3, 2, 2, 2, 31, 180, 3, 2, 2, 2, 33, 182, 3, 2, 2, 2, 35, 188, 3, 2, 2, 2, 37, 197, 3, 2, 2, 2, 39, 204, 3, 2, 2, 2, 41, 206, 3, 2, 2, 2, 43, 209, 3, 2, 2, 2, 45, 214, 3, 2, 2, 2, 47, 219, 3, 2, 2, 2, 49, 225, 3, 2, 2, 2, 51, 231, 3, 2, 2, 2, 53, 235, 3, 2, 2, 2, 55, 238, 3, 2, 2, 2, 57, 243, 3, 2, 2, 2, 59, 248, 3, 2, 2, 2, 61, 250, 3, 2, 2, 2, 63, 252, 3, 2, 2, 2, 65, 254, 3, 2, 2, 2, 67, 257, 3, 2, 2, 2, 69, 259, 3, 2, 2, 2, 71, 261, 3, 2, 2, 2, 73, 265, 3, 2, 2, 2, 75, 267, 3, 2, 2, 2, 77, 269, 3, 2, 2, 2, 79, 271, 3, 2, 2, 2, 81, 273, 3, 2, 2, 2, 83, 276, 3, 2, 2, 2, 85, 280, 3, 2, 2, 2, 87, 283, 3, 2, 2, 2, 89, 286, 3, 2, 2, 2, 91, 288, 3, 2, 2, 2, 93, 291, 3, 2, 2, 2, 95, 293, 3, 2, 2, 2, 97, 296, 3, 2, 2, 2, 99, 300, 3, 2, 2, 2, 101, 304, 3, 2, 2, 2, 103, 307, 3, 2, 2, 2, 105, 309, 3, 2, 2, 2, 107, 314, 3, 2, 2, 2, 109, 320, 3, 2, 2, 2, 111, 325, 3, 2, 2, 2, 113, 329, 3, 2, 2, 2, 115, 335, 3, 2, 2, 2, 117, 340, 3, 2, 2, 2, 119, 345, 3, 2, 2, 2, 121, 352, 3, 2, 2, 2, 123, 356, 3, 2, 2, 2, 125, 361, 3, 2, 2, 2, 127, 382, 3, 2, 2, 2, 129, 393, 3, 2, 2, 2, 131, 404, 3, 2, 2, 2, 133, 411, 3, 2, 2, 2, 135, 413, 3, 2, 2, 2, 137, 418, 3, 2, 2, 2, 139, 421, 3, 2, 2, 2, 141, 427, 3, 2, 2, 2, 143, 144, 7, 61, 2, 2, 144, 4, 3, 2, 2, 2, 145, 146, 7, 117, 2, 2, 146, 147, 7, 109, 2, 2, 147, 148, 7, 107, 2, 2, 148, 149, 7, 114, 2, 2, 149, 6, 3, 2, 2, 2, 150, 151, 7, 114, 2, 2, 151, 152, 7, 116, 2, 2, 152, 153, 7, 107, 2, 2, 153, 154, 7, 112, 2, 2, 154, 155, 7, 118, 2, 2, 155, 8, 3, 2, 2, 2, 156, 157, 7, 63, 2, 2, 157, 10, 3, 2, 2, 2, 158, 159, 7, 96, 2, 2, 159, 12, 3, 2, 2, 2, 160, 161, 7, 44, 2, 2, 161, 14, 3, 2, 2, 2, 162, 163, 7, 49, 2, 2, 163, 16, 3, 2, 2, 2, 164, 165, 7, 39, 2, 2, 165, 18, 3, 2, 2, 2, 166, 167, 7, 45, 2, 2, 167, 20, 3, 2, 2, 2, 168, 169, 7, 47, 2, 2, 169, 22, 3, 2, 2, 2, 170, 171, 7, 62, 2, 2, 171, 172, 7, 62, 2, 2, 172, 24, 3, 2, 2, 2, 173, 174, 7, 64, 2, 2, 174, 175, 7, 64, 2, 2, 175, 26, 3, 2, 2, 2, 176, 177, 7, 40, 2, 2, 177, 28, 3, 2, 2, 2, 178, 179, 7, 38, 2, 2, 179, 30, 3, 2, 2, 2, 180, 181, 7, 126, 2, 2, 181, 32, 3, 2, 2, 2, 182, 183, 7, 100, 2, 2, 183, 184, 7, 116, 2, 2, 184, 185, 7, 103, 2, 2, 185, 186, 7, 99, 2, 2, 186, 187, 7, 109, 2, 2, 187, 34, 3, 2, 2, 2, 188, 189, 7, 101, 2, 2, 189, 190, 7, 113, 2, 2, 190, 191, 7, 112, 2, 2, 191, 192, 7, 118, 2, 2, 192, 193, 7, 107, 2, 2, 193, 194, 7, 112, 2, 2, 194, 195, 7, 119, 2, 2, 195, 196, 7, 103, 2, 2, 196, 36, 3, 2, 2, 2, 197, 198, 7, 116, 2, 2, 198, 199, 7, 103, 2, 2, 199, 200, 7, 118, 2, 2, 200, 201, 7, 119, 2, 2, 201, 202, 7, 116, 2, 2, 202, 203, 7, 112, 2, 2, 203, 38, 3, 2, 2, 2, 204, 205, 7, 46, 2, 2, 205, 40, 3, 2, 2, 2, 206, 207, 7, 107, 2, 2, 207, 208, 7, 104, 2, 2, 208, 42, 3, 2, 2, 2, 209, 210, 7, 103, 2, 2, 210, 211, 7, 110, 2, 2, 211, 212, 7, 107, 2, 2, 212, 213, 7, 104, 2, 2, 213, 44, 3, 2, 2, 2, 214, 215, 7, 103, 2, 2, 215, 216, 7, 110, 2, 2, 216, 217, 7, 117, 2, 2, 217, 218, 7, 103, 2, 2, 218, 46, 3, 2, 2, 2, 219, 220, 7, 121, 2, 2, 220, 221, 7, 106, 2, 2, 221, 222, 7, 107, 2, 2, 222, 223, 7, 110, 2, 2, 223, 224, 7, 103, 2, 2, 224, 48, 3, 2, 2, 2, 225, 226, 7, 119, 2, 2, 226, 227, 7, 112, 2, 2, 227, 228, 7, 118, 2, 2, 228, 229, 7, 107, 2, 2, 229, 230, 7, 110, 2, 2, 230, 50, 3, 2, 2, 2, 231, 232, 7, 104, 2, 2, 232, 233, 7, 113, 2, 2, 233, 234, 7, 116, 2, 2, 234, 52, 3, 2, 2, 2, 235, 236, 7, 107, 2, 2, 236, 237, 7, 112, 2, 2, 237, 54, 3, 2, 2, 2, 238, 239, 7, 117, 2, 2, 239, 240, 7, 118, 2, 2, 240, 241, 7, 103, 2, 2, 241, 242, 7, 114, 2, 2, 242, 56, 3, 2, 2, 2, 243, 244, 7, 104, 2, 2, 244, 245, 7, 119, 2, 2, 245, 246, 7, 112, 2, 2, 246, 247, 7, 101, 2, 2, 247, 58, 3, 2, 2, 2, 248, 249, 7, 42, 2, 2, 249, 60, 3, 2, 2, 2, 250, 251, 7, 43, 2, 2, 251, 62, 3, 2, 2, 2, 252, 253, 7, 60, 2, 2, 253, 64, 3, 2, 2, 2, 254, 255, 7, 102, 2, 2, 255, 256, 7, 113, 2, 2, 256, 66, 3, 2, 2, 2, 257, 258, 7, 125, 2, 2, 258, 68, 3, 2, 2, 2, 259, 260, 7, 127, 2, 2, 260, 70, 3, 2, 2, 2, 261, 262, 7, 102, 2, 2, 262, 263, 7, 103, 2, 2, 263, 264, 7, 104, 2, 2, 264, 72, 3, 2, 2, 2, 265, 266, 7, 93, 2, 2, 266, 74, 3, 2, 2, 2, 267, 268, 7, 95, 2, 2, 268, 76, 3, 2, 2, 2, 269, 270, 7, 48, 2, 2, 270, 78, 3, 2, 2, 2, 271, 272, 7, 128, 2, 2, 272, 80, 3, 2, 2, 2, 273, 274, 7, 48, 2, 2, 274, 275, 7, 48, 2, 2, 275, 82, 3, 2, 2, 2, 276, 277, 7, 48, 2, 2, 277, 278, 7, 48, 2, 2, 278, 279, 7, 48, 2, 2, 279, 84, 3, 2, 2, 2, 280, 281, 7, 63, 2, 2, 281, 282, 7, 63, 2, 2, 282, 86, 3, 2, 2, 2, 283, 284, 7, 35, 2, 2, 284, 285, 7, 63, 2, 2, 285, 88, 3, 2, 2, 2, 286, 287, 7, 62, 2, 2, 287, 90, 3, 2, 2, 2, 288, 289, 7, 62, 2, 2, 289, 290, 7, 63, 2, 2, 290, 92, 3, 2, 2, 2, 291, 292, 7, 64, 2, 2, 292, 94, 3, 2, 2, 2, 293, 294, 7, 64, 2, 2, 294, 295, 7, 63, 2, 2, 295, 96, 3, 2, 2, 2, 296, 297, 7, 112, 2, 2, 297, 298, 7, 113, 2, 2, 298, 299, 7, 118, 2, 2, 299, 98, 3, 2, 2, 2, 300, 301, 7, 99, 2, 2, 301, 302, 7, 112, 2, 2, 302, 303, 7, 102, 2, 2, 303, 100, 3, 2, 2, 2, 304, 305, 7, 113, 2, 2, 305, 306, 7, 116, 2, 2, 306, 102, 3, 2, 2, 2, 307, 308, 7, 65, 2, 2, 308, 104, 3, 2, 2, 2, 309, 310, 7, 118, 2, 2, 310, 311, 7, 116, 2, 2, 311, 312, 7, 119, 2, 2, 312, 313, 7, 103, 2, 2, 313, 106, 3, 2, 2, 2, 314, 315, 7, 104, 2, 2, 315, 316, 7, 99, 2, 2, 316, 317, 7, 110, 2, 2, 317, 318, 7, 117, 2, 2, 318, 319, 7, 103, 2, 2, 319, 108, 3, 2, 2, 2, 320, 321, 7, 88, 2, 2, 321, 322, 7, 113, 2, 2, 322, 323, 7, 107, 2, 2, 323, 324, 7, 102, 2, 2, 324, 110, 3, 2, 2, 2, 325, 326, 7, 75, 2, 2, 326, 327, 7, 112, 2, 2, 327, 328, 7, 118, 2, 2, 328, 112, 3, 2, 2, 2, 329, 330, 7, 72, 2, 2, 330, 331, 7, 110, 2, 2, 331, 332, 7, 113, 2, 2, 332, 333, 7, 99, 2, 2, 333, 334, 7, 118, 2, 2, 334, 114, 3, 2, 2, 2, 335, 336, 7, 68, 2, 2, 336, 337, 7, 113, 2, 2, 337, 338, 7, 113, 2, 2, 338, 339, 7, 110, 2, 2, 339, 116, 3, 2, 2, 2, 340, 341, 7, 69, 2, 2, 341, 342, 7, 106, 2, 2, 342, 343, 7, 99, 2, 2, 343, 344, 7, 116, 2, 2, 344, 118, 3, 2, 2, 2, 345, 346, 7, 85, 2, 2, 346, 347, 7, 118, 2, 2, 347, 348, 7, 116, 2, 2, 348, 349, 7, 107, 2, 2, 349, 350, 7, 112, 2, 2, 350, 351, 7, 105, 2, 2, 351, 120, 3, 2, 2, 2, 352, 353, 7, 47, 2, 2, 353, 354, 7, 64, 2, 2, 354, 122, 3, 2, 2, 2, 355, 357, 5, 133, 67, 2, 356, 355, 3, 2, 2, 2, 357, 358, 3, 2, 2, 2, 358, 356, 3, 2, 2, 2, 358, 359, 3, 2, 2, 2, 359, 124, 3, 2, 2, 2, 360, 362, 5, 133, 67, 2, 361, 360, 3, 2, 2, 2, 362, 363, 3, 2, 2, 2, 363, 361, 3, 2, 2, 2, 363, 364, 3, 2, 2, 2, 364, 365, 3, 2, 2, 2, 365, 367, 7, 48, 2, 2, 366, 368, 5, 133, 67, 2, 367, 366, 3, 2, 2, 2, 368, 369, 3, 2, 2, 2, 369, 367, 3, 2, 2, 2, 369, 370, 3, 2, 2, 2, 370, 380, 3, 2, 2, 2, 371, 373, 7, 103, 2, 2, 372, 374, 7, 47, 2, 2, 373, 372, 3, 2, 2, 2, 373, 374, 3, 2, 2, 2, 374, 376, 3, 2, 2, 2, 375, 377, 5, 133, 67, 2, 376, 375, 3, 2, 2, 2, 377, 378, 3, 2, 2, 2, 378, 376, 3, 2, 2, 2, 378, 379, 3, 2, 2, 2, 379, 381, 3, 2, 2, 2, 380, 371, 3, 2, 2, 2, 380, 381, 3, 2, 2, 2, 381, 126, 3, 2, 2, 2, 382, 388, 7, 41, 2, 2, 383, 387, 10, 2, 2, 2, 384, 385, 7, 94, 2, 2, 385, 387, 9, 3, 2, 2, 386, 383, 3, 2, 2, 2, 386, 384, 3, 2, 2, 2, 387, 390, 3, 2, 2, 2, 388, 386, 3, 2, 2, 2, 388, 389, 3, 2, 2, 2, 389, 391, 3, 2, 2, 2, 390, 388, 3, 2, 2, 2, 391, 392, 7, 41, 2, 2, 392, 128, 3, 2, 2, 2, 393, 399, 7, 36, 2, 2, 394, 398, 10, 4, 2, 2, 395, 396, 7, 94, 2, 2, 396, 398, 9, 5, 2, 2, 397, 394, 3, 2, 2, 2, 397, 395, 3, 2, 2, 2, 398, 401, 3, 2, 2, 2, 399, 397, 3, 2, 2, 2, 399, 400, 3, 2, 2, 2, 400, 402, 3, 2, 2, 2, 401, 399, 3, 2, 2, 2, 402, 403, 7, 36, 2, 2, 403, 130, 3, 2, 2, 2, 404, 408, 5, 135, 68, 2, 405, 407, 5, 137, 69, 2, 406, 405, 3, 2, 2, 2, 407, 410, 3, 2, 2, 2, 408, 406, 3, 2, 2, 2, 408, 409, 3, 2, 2, 2, 409, 132, 3, 2, 2, 2, 410, 408, 3, 2, 2, 2, 411, 412, 9, 6, 2, 2, 412, 134, 3, 2, 2, 2, 413, 414, 9, 7, 2, 2, 414, 136, 3, 2, 2, 2, 415, 419, 5, 135, 68, 2, 416, 419, 5, 133, 67, 2, 417, 419, 9, 8, 2, 2, 418, 415, 3, 2, 2, 2, 418, 416, 3, 2, 2, 2, 418, 417, 3, 2, 2, 2, 419, 138, 3, 2, 2, 2, 420, 422, 9, 9, 2, 2, 421, 420, 3, 2, 2, 2, 422, 423, 3, 2, 2, 2, 423, 421, 3, 2, 2, 2, 423, 424, 3, 2, 2, 2, 424, 425, 3, 2, 2, 2, 425, 426, 8, 70, 2, 2, 426, 140, 3, 2, 2, 2, 427, 428, 11, 2, 2, 2, 428, 142, 3, 2, 2, 2, 16, 2, 358, 363, 369, 373, 378, 380, 386, 388, 397, 399, 408, 418, 423, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 70, 442, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 62, 6, 62, 359, 10, 62, 13, 62, 14, 62, 360, 3, 63, 6, 63, 364, 10, 63, 13, 63, 14, 63, 365, 3, 63, 3, 63, 6, 63, 370, 10, 63, 13, 63, 14, 63, 371, 3, 63, 3, 63, 5, 63, 376, 10, 63, 3, 63, 6, 63, 379, 10, 63, 13, 63, 14, 63, 380, 5, 63, 383, 10, 63, 3, 64, 3, 64, 3, 64, 3, 64, 7, 64, 389, 10, 64, 12, 64, 14, 64, 392, 11, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 7, 65, 400, 10, 65, 12, 65, 14, 65, 403, 11, 65, 3, 65, 3, 65, 3, 66, 3, 66, 7, 66, 409, 10, 66, 12, 66, 14, 66, 412, 11, 66, 3, 67, 3, 67, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 5, 69, 421, 10, 69, 3, 70, 3, 70, 3, 70, 3, 70, 7, 70, 427, 10, 70, 12, 70, 14, 70, 430, 11, 70, 3, 70, 3, 70, 3, 71, 6, 71, 435, 10, 71, 13, 71, 14, 71, 436, 3, 71, 3, 71, 3, 72, 3, 72, 2, 2, 73, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 2, 135, 2, 137, 2, 139, 68, 141, 69, 143, 70, 3, 2, 11, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 4, 2, 12, 12, 14, 15, 5, 2, 11, 12, 15, 15, 34, 34, 2, 453, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 3, 145, 3, 2, 2, 2, 5, 147, 3, 2, 2, 2, 7, 152, 3, 2, 2, 2, 9, 158, 3, 2, 2, 2, 11, 160, 3, 2, 2, 2, 13, 162, 3, 2, 2, 2, 15, 164, 3, 2, 2, 2, 17, 166, 3, 2, 2, 2, 19, 168, 3, 2, 2, 2, 21, 170, 3, 2, 2, 2, 23, 172, 3, 2, 2, 2, 25, 175, 3, 2, 2, 2, 27, 178, 3, 2, 2, 2, 29, 180, 3, 2, 2, 2, 31, 182, 3, 2, 2, 2, 33, 184, 3, 2, 2, 2, 35, 190, 3, 2, 2, 2, 37, 199, 3, 2, 2, 2, 39, 206, 3, 2, 2, 2, 41, 208, 3, 2, 2, 2, 43, 211, 3, 2, 2, 2, 45, 216, 3, 2, 2, 2, 47, 221, 3, 2, 2, 2, 49, 227, 3, 2, 2, 2, 51, 233, 3, 2, 2, 2, 53, 237, 3, 2, 2, 2, 55, 240, 3, 2, 2, 2, 57, 245, 3, 2, 2, 2, 59, 250, 3, 2, 2, 2, 61, 252, 3, 2, 2, 2, 63, 254, 3, 2, 2, 2, 65, 256, 3, 2, 2, 2, 67, 259, 3, 2, 2, 2, 69, 261, 3, 2, 2, 2, 71, 263, 3, 2, 2, 2, 73, 267, 3, 2, 2, 2, 75, 269, 3, 2, 2, 2, 77, 271, 3, 2, 2, 2, 79, 273, 3, 2, 2, 2, 81, 275, 3, 2, 2, 2, 83, 278, 3, 2, 2, 2, 85, 282, 3, 2, 2, 2, 87, 285, 3, 2, 2, 2, 89, 288, 3, 2, 2, 2, 91, 290, 3, 2, 2, 2, 93, 293, 3, 2, 2, 2, 95, 295, 3, 2, 2, 2, 97, 298, 3, 2, 2, 2, 99, 302, 3, 2, 2, 2, 101, 306, 3, 2, 2, 2, 103, 309, 3, 2, 2, 2, 105, 311, 3, 2, 2, 2, 107, 316, 3, 2, 2, 2, 109, 322, 3, 2, 2, 2, 111, 327, 3, 2, 2, 2, 113, 331, 3, 2, 2, 2, 115, 337, 3, 2, 2, 2, 117, 342, 3, 2, 2, 2, 119, 347, 3, 2, 2, 2, 121, 354, 3, 2, 2, 2, 123, 358, 3, 2, 2, 2, 125, 363, 3, 2, 2, 2, 127, 384, 3, 2, 2, 2, 129, 395, 3, 2, 2, 2, 131, 406, 3, 2, 2, 2, 133, 413, 3, 2, 2, 2, 135, 415, 3, 2, 2, 2, 137, 420, 3, 2, 2, 2, 139, 422, 3, 2, 2, 2, 141, 434, 3, 2, 2, 2, 143, 440, 3, 2, 2, 2, 145, 146, 7, 61, 2, 2, 146, 4, 3, 2, 2, 2, 147, 148, 7, 117, 2, 2, 148, 149, 7, 109, 2, 2, 149, 150, 7, 107, 2, 2, 150, 151, 7, 114, 2, 2, 151, 6, 3, 2, 2, 2, 152, 153, 7, 114, 2, 2, 153, 154, 7, 116, 2, 2, 154, 155, 7, 107, 2, 2, 155, 156, 7, 112, 2, 2, 156, 157, 7, 118, 2, 2, 157, 8, 3, 2, 2, 2, 158, 159, 7, 63, 2, 2, 159, 10, 3, 2, 2, 2, 160, 161, 7, 96, 2, 2, 161, 12, 3, 2, 2, 2, 162, 163, 7, 44, 2, 2, 163, 14, 3, 2, 2, 2, 164, 165, 7, 49, 2, 2, 165, 16, 3, 2, 2, 2, 166, 167, 7, 39, 2, 2, 167, 18, 3, 2, 2, 2, 168, 169, 7, 45, 2, 2, 169, 20, 3, 2, 2, 2, 170, 171, 7, 47, 2, 2, 171, 22, 3, 2, 2, 2, 172, 173, 7, 62, 2, 2, 173, 174, 7, 62, 2, 2, 174, 24, 3, 2, 2, 2, 175, 176, 7, 64, 2, 2, 176, 177, 7, 64, 2, 2, 177, 26, 3, 2, 2, 2, 178, 179, 7, 40, 2, 2, 179, 28, 3, 2, 2, 2, 180, 181, 7, 38, 2, 2, 181, 30, 3, 2, 2, 2, 182, 183, 7, 126, 2, 2, 183, 32, 3, 2, 2, 2, 184, 185, 7, 100, 2, 2, 185, 186, 7, 116, 2, 2, 186, 187, 7, 103, 2, 2, 187, 188, 7, 99, 2, 2, 188, 189, 7, 109, 2, 2, 189, 34, 3, 2, 2, 2, 190, 191, 7, 101, 2, 2, 191, 192, 7, 113, 2, 2, 192, 193, 7, 112, 2, 2, 193, 194, 7, 118, 2, 2, 194, 195, 7, 107, 2, 2, 195, 196, 7, 112, 2, 2, 196, 197, 7, 119, 2, 2, 197, 198, 7, 103, 2, 2, 198, 36, 3, 2, 2, 2, 199, 200, 7, 116, 2, 2, 200, 201, 7, 103, 2, 2, 201, 202, 7, 118, 2, 2, 202, 203, 7, 119, 2, 2, 203, 204, 7, 116, 2, 2, 204, 205, 7, 112, 2, 2, 205, 38, 3, 2, 2, 2, 206, 207, 7, 46, 2, 2, 207, 40, 3, 2, 2, 2, 208, 209, 7, 107, 2, 2, 209, 210, 7, 104, 2, 2, 210, 42, 3, 2, 2, 2, 211, 212, 7, 103, 2, 2, 212, 213, 7, 110, 2, 2, 213, 214, 7, 107, 2, 2, 214, 215, 7, 104, 2, 2, 215, 44, 3, 2, 2, 2, 216, 217, 7, 103, 2, 2, 217, 218, 7, 110, 2, 2, 218, 219, 7, 117, 2, 2, 219, 220, 7, 103, 2, 2, 220, 46, 3, 2, 2, 2, 221, 222, 7, 121, 2, 2, 222, 223, 7, 106, 2, 2, 223, 224, 7, 107, 2, 2, 224, 225, 7, 110, 2, 2, 225, 226, 7, 103, 2, 2, 226, 48, 3, 2, 2, 2, 227, 228, 7, 119, 2, 2, 228, 229, 7, 112, 2, 2, 229, 230, 7, 118, 2, 2, 230, 231, 7, 107, 2, 2, 231, 232, 7, 110, 2, 2, 232, 50, 3, 2, 2, 2, 233, 234, 7, 104, 2, 2, 234, 235, 7, 113, 2, 2, 235, 236, 7, 116, 2, 2, 236, 52, 3, 2, 2, 2, 237, 238, 7, 107, 2, 2, 238, 239, 7, 112, 2, 2, 239, 54, 3, 2, 2, 2, 240, 241, 7, 117, 2, 2, 241, 242, 7, 118, 2, 2, 242, 243, 7, 103, 2, 2, 243, 244, 7, 114, 2, 2, 244, 56, 3, 2, 2, 2, 245, 246, 7, 104, 2, 2, 246, 247, 7, 119, 2, 2, 247, 248, 7, 112, 2, 2, 248, 249, 7, 101, 2, 2, 249, 58, 3, 2, 2, 2, 250, 251, 7, 42, 2, 2, 251, 60, 3, 2, 2, 2, 252, 253, 7, 43, 2, 2, 253, 62, 3, 2, 2, 2, 254, 255, 7, 60, 2, 2, 255, 64, 3, 2, 2, 2, 256, 257, 7, 102, 2, 2, 257, 258, 7, 113, 2, 2, 258, 66, 3, 2, 2, 2, 259, 260, 7, 125, 2, 2, 260, 68, 3, 2, 2, 2, 261, 262, 7, 127, 2, 2, 262, 70, 3, 2, 2, 2, 263, 264, 7, 102, 2, 2, 264, 265, 7, 103, 2, 2, 265, 266, 7, 104, 2, 2, 266, 72, 3, 2, 2, 2, 267, 268, 7, 93, 2, 2, 268, 74, 3, 2, 2, 2, 269, 270, 7, 95, 2, 2, 270, 76, 3, 2, 2, 2, 271, 272, 7, 48, 2, 2, 272, 78, 3, 2, 2, 2, 273, 274, 7, 128, 2, 2, 274, 80, 3, 2, 2, 2, 275, 276, 7, 48, 2, 2, 276, 277, 7, 48, 2, 2, 277, 82, 3, 2, 2, 2, 278, 279, 7, 48, 2, 2, 279, 280, 7, 48, 2, 2, 280, 281, 7, 48, 2, 2, 281, 84, 3, 2, 2, 2, 282, 283, 7, 63, 2, 2, 283, 284, 7, 63, 2, 2, 284, 86, 3, 2, 2, 2, 285, 286, 7, 35, 2, 2, 286, 287, 7, 63, 2, 2, 287, 88, 3, 2, 2, 2, 288, 289, 7, 62, 2, 2, 289, 90, 3, 2, 2, 2, 290, 291, 7, 62, 2, 2, 291, 292, 7, 63, 2, 2, 292, 92, 3, 2, 2, 2, 293, 294, 7, 64, 2, 2, 294, 94, 3, 2, 2, 2, 295, 296, 7, 64, 2, 2, 296, 297, 7, 63, 2, 2, 297, 96, 3, 2, 2, 2, 298, 299, 7, 112, 2, 2, 299, 300, 7, 113, 2, 2, 300, 301, 7, 118, 2, 2, 301, 98, 3, 2, 2, 2, 302, 303, 7, 99, 2, 2, 303, 304, 7, 112, 2, 2, 304, 305, 7, 102, 2, 2, 305, 100, 3, 2, 2, 2, 306, 307, 7, 113, 2, 2, 307, 308, 7, 116, 2, 2, 308, 102, 3, 2, 2, 2, 309, 310, 7, 65, 2, 2, 310, 104, 3, 2, 2, 2, 311, 312, 7, 118, 2, 2, 312, 313, 7, 116, 2, 2, 313, 314, 7, 119, 2, 2, 314, 315, 7, 103, 2, 2, 315, 106, 3, 2, 2, 2, 316, 317, 7, 104, 2, 2, 317, 318, 7, 99, 2, 2, 318, 319, 7, 110, 2, 2, 319, 320, 7, 117, 2, 2, 320, 321, 7, 103, 2, 2, 321, 108, 3, 2, 2, 2, 322, 323, 7, 88, 2, 2, 323, 324, 7, 113, 2, 2, 324, 325, 7, 107, 2, 2, 325, 326, 7, 102, 2, 2, 326, 110, 3, 2, 2, 2, 327, 328, 7, 75, 2, 2, 328, 329, 7, 112, 2, 2, 329, 330, 7, 118, 2, 2, 330, 112, 3, 2, 2, 2, 331, 332, 7, 72, 2, 2, 332, 333, 7, 110, 2, 2, 333, 334, 7, 113, 2, 2, 334, 335, 7, 99, 2, 2, 335, 336, 7, 118, 2, 2, 336, 114, 3, 2, 2, 2, 337, 338, 7, 68, 2, 2, 338, 339, 7, 113, 2, 2, 339, 340, 7, 113, 2, 2, 340, 341, 7, 110, 2, 2, 341, 116, 3, 2, 2, 2, 342, 343, 7, 69, 2, 2, 343, 344, 7, 106, 2, 2, 344, 345, 7, 99, 2, 2, 345, 346, 7, 116, 2, 2, 346, 118, 3, 2, 2, 2, 347, 348, 7, 85, 2, 2, 348, 349, 7, 118, 2, 2, 349, 350, 7, 116, 2, 2, 350, 351, 7, 107, 2, 2, 351, 352, 7, 112, 2, 2, 352, 353, 7, 105, 2, 2, 353, 120, 3, 2, 2, 2, 354, 355, 7, 47, 2, 2, 355, 356, 7, 64, 2, 2, 356, 122, 3, 2, 2, 2, 357, 359, 5, 133, 67, 2, 358, 357, 3, 2, 2, 2, 359, 360, 3, 2, 2, 2, 360, 358, 3, 2, 2, 2, 360, 361, 3, 2, 2, 2, 361, 124, 3, 2, 2, 2, 362, 364, 5, 133, 67, 2, 363, 362, 3, 2, 2, 2, 364, 365, 3, 2, 2, 2, 365, 363, 3, 2, 2, 2, 365, 366, 3, 2, 2, 2, 366, 367, 3, 2, 2, 2, 367, 369, 7, 48, 2, 2, 368, 370, 5, 133, 67, 2, 369, 368, 3, 2, 2, 2, 370, 371, 3, 2, 2, 2, 371, 369, 3, 2, 2, 2, 371, 372, 3, 2, 2, 2, 372, 382, 3, 2, 2, 2, 373, 375, 7, 103, 2, 2, 374, 376, 7, 47, 2, 2, 375, 374, 3, 2, 2, 2, 375, 376, 3, 2, 2, 2, 376, 378, 3, 2, 2, 2, 377, 379, 5, 133, 67, 2, 378, 377, 3, 2, 2, 2, 379, 380, 3, 2, 2, 2, 380, 378, 3, 2, 2, 2, 380, 381, 3, 2, 2, 2, 381, 383, 3, 2, 2, 2, 382, 373, 3, 2, 2, 2, 382, 383, 3, 2, 2, 2, 383, 126, 3, 2, 2, 2, 384, 390, 7, 41, 2, 2, 385, 389, 10, 2, 2, 2, 386, 387, 7, 94, 2, 2, 387, 389, 9, 3, 2, 2, 388, 385, 3, 2, 2, 2, 388, 386, 3, 2, 2, 2, 389, 392, 3, 2, 2, 2, 390, 388, 3, 2, 2, 2, 390, 391, 3, 2, 2, 2, 391, 393, 3, 2, 2, 2, 392, 390, 3, 2, 2, 2, 393, 394, 7, 41, 2, 2, 394, 128, 3, 2, 2, 2, 395, 401, 7, 36, 2, 2, 396, 400, 10, 4, 2, 2, 397, 398, 7, 94, 2, 2, 398, 400, 9, 5, 2, 2, 399, 396, 3, 2, 2, 2, 399, 397, 3, 2, 2, 2, 400, 403, 3, 2, 2, 2, 401, 399, 3, 2, 2, 2, 401, 402, 3, 2, 2, 2, 402, 404, 3, 2, 2, 2, 403, 401, 3, 2, 2, 2, 404, 405, 7, 36, 2, 2, 405, 130, 3, 2, 2, 2, 406, 410, 5, 135, 68, 2, 407, 409, 5, 137, 69, 2, 408, 407, 3, 2, 2, 2, 409, 412, 3, 2, 2, 2, 410, 408, 3, 2, 2, 2, 410, 411, 3, 2, 2, 2, 411, 132, 3, 2, 2, 2, 412, 410, 3, 2, 2, 2, 413, 414, 9, 6, 2, 2, 414, 134, 3, 2, 2, 2, 415, 416, 9, 7, 2, 2, 416, 136, 3, 2, 2, 2, 417, 421, 5, 135, 68, 2, 418, 421, 5, 133, 67, 2, 419, 421, 9, 8, 2, 2, 420, 417, 3, 2, 2, 2, 420, 418, 3, 2, 2, 2, 420, 419, 3, 2, 2, 2, 421, 138, 3, 2, 2, 2, 422, 423, 7, 47, 2, 2, 423, 424, 7, 47, 2, 2, 424, 428, 3, 2, 2, 2, 425, 427, 10, 9, 2, 2, 426, 425, 3, 2, 2, 2, 427, 430, 3, 2, 2, 2, 428, 426, 3, 2, 2, 2, 428, 429, 3, 2, 2, 2, 429, 431, 3, 2, 2, 2, 430, 428, 3, 2, 2, 2, 431, 432, 8, 70, 2, 2, 432, 140, 3, 2, 2, 2, 433, 435, 9, 10, 2, 2, 434, 433, 3, 2, 2, 2, 435, 436, 3, 2, 2, 2, 436, 434, 3, 2, 2, 2, 436, 437, 3, 2, 2, 2, 437, 438, 3, 2, 2, 2, 438, 439, 8, 71, 2, 2, 439, 142, 3, 2, 2, 2, 440, 441, 11, 2, 2, 2, 441, 144, 3, 2, 2, 2, 17, 2, 360, 365, 371, 375, 380, 382, 388, 390, 399, 401, 410, 420, 428, 436, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py index 0c49bf1c..ca530209 100644 --- a/src/antlr/PyxellLexer.py +++ b/src/antlr/PyxellLexer.py @@ -8,8 +8,8 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2E") - buf.write("\u01ad\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2F") + buf.write("\u01ba\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") @@ -19,177 +19,183 @@ def serializedATN(): buf.write("\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64") buf.write("\t\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:") buf.write("\4;\t;\4<\t<\4=\t=\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\t") - buf.write("C\4D\tD\4E\tE\4F\tF\4G\tG\3\2\3\2\3\3\3\3\3\3\3\3\3\3") - buf.write("\3\4\3\4\3\4\3\4\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3") - buf.write("\b\3\t\3\t\3\n\3\n\3\13\3\13\3\f\3\f\3\f\3\r\3\r\3\r\3") - buf.write("\16\3\16\3\17\3\17\3\20\3\20\3\21\3\21\3\21\3\21\3\21") - buf.write("\3\21\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\23") - buf.write("\3\23\3\23\3\23\3\23\3\23\3\23\3\24\3\24\3\25\3\25\3\25") - buf.write("\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27\3\27\3\30") - buf.write("\3\30\3\30\3\30\3\30\3\30\3\31\3\31\3\31\3\31\3\31\3\31") - buf.write("\3\32\3\32\3\32\3\32\3\33\3\33\3\33\3\34\3\34\3\34\3\34") - buf.write("\3\34\3\35\3\35\3\35\3\35\3\35\3\36\3\36\3\37\3\37\3 ") - buf.write("\3 \3!\3!\3!\3\"\3\"\3#\3#\3$\3$\3$\3$\3%\3%\3&\3&\3\'") - buf.write("\3\'\3(\3(\3)\3)\3)\3*\3*\3*\3*\3+\3+\3+\3,\3,\3,\3-\3") - buf.write("-\3.\3.\3.\3/\3/\3\60\3\60\3\60\3\61\3\61\3\61\3\61\3") - buf.write("\62\3\62\3\62\3\62\3\63\3\63\3\63\3\64\3\64\3\65\3\65") - buf.write("\3\65\3\65\3\65\3\66\3\66\3\66\3\66\3\66\3\66\3\67\3\67") - buf.write("\3\67\3\67\3\67\38\38\38\38\39\39\39\39\39\39\3:\3:\3") - buf.write(":\3:\3:\3;\3;\3;\3;\3;\3<\3<\3<\3<\3<\3<\3<\3=\3=\3=\3") - buf.write(">\6>\u0165\n>\r>\16>\u0166\3?\6?\u016a\n?\r?\16?\u016b") - buf.write("\3?\3?\6?\u0170\n?\r?\16?\u0171\3?\3?\5?\u0176\n?\3?\6") - buf.write("?\u0179\n?\r?\16?\u017a\5?\u017d\n?\3@\3@\3@\3@\7@\u0183") - buf.write("\n@\f@\16@\u0186\13@\3@\3@\3A\3A\3A\3A\7A\u018e\nA\fA") - buf.write("\16A\u0191\13A\3A\3A\3B\3B\7B\u0197\nB\fB\16B\u019a\13") - buf.write("B\3C\3C\3D\3D\3E\3E\3E\5E\u01a3\nE\3F\6F\u01a6\nF\rF\16") - buf.write("F\u01a7\3F\3F\3G\3G\2\2H\3\3\5\4\7\5\t\6\13\7\r\b\17\t") - buf.write("\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23") - buf.write("%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34\67\359\36") - buf.write(";\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63") - buf.write("e\64g\65i\66k\67m8o9q:s;u{?}@\177A\u0081B\u0083C") - buf.write("\u0085\2\u0087\2\u0089\2\u008bD\u008dE\3\2\n\4\2))^^\6") + buf.write("C\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\3\2\3\2\3\3\3\3\3\3\3") + buf.write("\3\3\3\3\4\3\4\3\4\3\4\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7") + buf.write("\3\b\3\b\3\t\3\t\3\n\3\n\3\13\3\13\3\f\3\f\3\f\3\r\3\r") + buf.write("\3\r\3\16\3\16\3\17\3\17\3\20\3\20\3\21\3\21\3\21\3\21") + buf.write("\3\21\3\21\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22") + buf.write("\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\24\3\24\3\25\3\25") + buf.write("\3\25\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27\3\27") + buf.write("\3\30\3\30\3\30\3\30\3\30\3\30\3\31\3\31\3\31\3\31\3\31") + buf.write("\3\31\3\32\3\32\3\32\3\32\3\33\3\33\3\33\3\34\3\34\3\34") + buf.write("\3\34\3\34\3\35\3\35\3\35\3\35\3\35\3\36\3\36\3\37\3\37") + buf.write("\3 \3 \3!\3!\3!\3\"\3\"\3#\3#\3$\3$\3$\3$\3%\3%\3&\3&") + buf.write("\3\'\3\'\3(\3(\3)\3)\3)\3*\3*\3*\3*\3+\3+\3+\3,\3,\3,") + buf.write("\3-\3-\3.\3.\3.\3/\3/\3\60\3\60\3\60\3\61\3\61\3\61\3") + buf.write("\61\3\62\3\62\3\62\3\62\3\63\3\63\3\63\3\64\3\64\3\65") + buf.write("\3\65\3\65\3\65\3\65\3\66\3\66\3\66\3\66\3\66\3\66\3\67") + buf.write("\3\67\3\67\3\67\3\67\38\38\38\38\39\39\39\39\39\39\3:") + buf.write("\3:\3:\3:\3:\3;\3;\3;\3;\3;\3<\3<\3<\3<\3<\3<\3<\3=\3") + buf.write("=\3=\3>\6>\u0167\n>\r>\16>\u0168\3?\6?\u016c\n?\r?\16") + buf.write("?\u016d\3?\3?\6?\u0172\n?\r?\16?\u0173\3?\3?\5?\u0178") + buf.write("\n?\3?\6?\u017b\n?\r?\16?\u017c\5?\u017f\n?\3@\3@\3@\3") + buf.write("@\7@\u0185\n@\f@\16@\u0188\13@\3@\3@\3A\3A\3A\3A\7A\u0190") + buf.write("\nA\fA\16A\u0193\13A\3A\3A\3B\3B\7B\u0199\nB\fB\16B\u019c") + buf.write("\13B\3C\3C\3D\3D\3E\3E\3E\5E\u01a5\nE\3F\3F\3F\3F\7F\u01ab") + buf.write("\nF\fF\16F\u01ae\13F\3F\3F\3G\6G\u01b3\nG\rG\16G\u01b4") + buf.write("\3G\3G\3H\3H\2\2I\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23") + buf.write("\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25") + buf.write(")\26+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A") + buf.write("\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65") + buf.write("i\66k\67m8o9q:s;u{?}@\177A\u0081B\u0083C\u0085\2") + buf.write("\u0087\2\u0089\2\u008bD\u008dE\u008fF\3\2\13\4\2))^^\6") buf.write("\2))^^ppvv\4\2$$^^\6\2$$^^ppvv\3\2\62;\5\2C\\aac|\4\2") - buf.write("))aa\5\2\13\f\17\17\"\"\2\u01b7\2\3\3\2\2\2\2\5\3\2\2") - buf.write("\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2") - buf.write("\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27") - buf.write("\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3") - buf.write("\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2") - buf.write(")\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2") - buf.write("\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2") - buf.write(";\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2") - buf.write("\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2") - buf.write("\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2") - buf.write("\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3") - buf.write("\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k") - buf.write("\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2") - buf.write("u\3\2\2\2\2w\3\2\2\2\2y\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2") - buf.write("\2\177\3\2\2\2\2\u0081\3\2\2\2\2\u0083\3\2\2\2\2\u008b") - buf.write("\3\2\2\2\2\u008d\3\2\2\2\3\u008f\3\2\2\2\5\u0091\3\2\2") - buf.write("\2\7\u0096\3\2\2\2\t\u009c\3\2\2\2\13\u009e\3\2\2\2\r") - buf.write("\u00a0\3\2\2\2\17\u00a2\3\2\2\2\21\u00a4\3\2\2\2\23\u00a6") - buf.write("\3\2\2\2\25\u00a8\3\2\2\2\27\u00aa\3\2\2\2\31\u00ad\3") - buf.write("\2\2\2\33\u00b0\3\2\2\2\35\u00b2\3\2\2\2\37\u00b4\3\2") - buf.write("\2\2!\u00b6\3\2\2\2#\u00bc\3\2\2\2%\u00c5\3\2\2\2\'\u00cc") - buf.write("\3\2\2\2)\u00ce\3\2\2\2+\u00d1\3\2\2\2-\u00d6\3\2\2\2") - buf.write("/\u00db\3\2\2\2\61\u00e1\3\2\2\2\63\u00e7\3\2\2\2\65\u00eb") - buf.write("\3\2\2\2\67\u00ee\3\2\2\29\u00f3\3\2\2\2;\u00f8\3\2\2") - buf.write("\2=\u00fa\3\2\2\2?\u00fc\3\2\2\2A\u00fe\3\2\2\2C\u0101") - buf.write("\3\2\2\2E\u0103\3\2\2\2G\u0105\3\2\2\2I\u0109\3\2\2\2") - buf.write("K\u010b\3\2\2\2M\u010d\3\2\2\2O\u010f\3\2\2\2Q\u0111\3") - buf.write("\2\2\2S\u0114\3\2\2\2U\u0118\3\2\2\2W\u011b\3\2\2\2Y\u011e") - buf.write("\3\2\2\2[\u0120\3\2\2\2]\u0123\3\2\2\2_\u0125\3\2\2\2") - buf.write("a\u0128\3\2\2\2c\u012c\3\2\2\2e\u0130\3\2\2\2g\u0133\3") - buf.write("\2\2\2i\u0135\3\2\2\2k\u013a\3\2\2\2m\u0140\3\2\2\2o\u0145") - buf.write("\3\2\2\2q\u0149\3\2\2\2s\u014f\3\2\2\2u\u0154\3\2\2\2") - buf.write("w\u0159\3\2\2\2y\u0160\3\2\2\2{\u0164\3\2\2\2}\u0169\3") - buf.write("\2\2\2\177\u017e\3\2\2\2\u0081\u0189\3\2\2\2\u0083\u0194") - buf.write("\3\2\2\2\u0085\u019b\3\2\2\2\u0087\u019d\3\2\2\2\u0089") - buf.write("\u01a2\3\2\2\2\u008b\u01a5\3\2\2\2\u008d\u01ab\3\2\2\2") - buf.write("\u008f\u0090\7=\2\2\u0090\4\3\2\2\2\u0091\u0092\7u\2\2") - buf.write("\u0092\u0093\7m\2\2\u0093\u0094\7k\2\2\u0094\u0095\7r") - buf.write("\2\2\u0095\6\3\2\2\2\u0096\u0097\7r\2\2\u0097\u0098\7") - buf.write("t\2\2\u0098\u0099\7k\2\2\u0099\u009a\7p\2\2\u009a\u009b") - buf.write("\7v\2\2\u009b\b\3\2\2\2\u009c\u009d\7?\2\2\u009d\n\3\2") - buf.write("\2\2\u009e\u009f\7`\2\2\u009f\f\3\2\2\2\u00a0\u00a1\7") - buf.write(",\2\2\u00a1\16\3\2\2\2\u00a2\u00a3\7\61\2\2\u00a3\20\3") - buf.write("\2\2\2\u00a4\u00a5\7\'\2\2\u00a5\22\3\2\2\2\u00a6\u00a7") - buf.write("\7-\2\2\u00a7\24\3\2\2\2\u00a8\u00a9\7/\2\2\u00a9\26\3") - buf.write("\2\2\2\u00aa\u00ab\7>\2\2\u00ab\u00ac\7>\2\2\u00ac\30") - buf.write("\3\2\2\2\u00ad\u00ae\7@\2\2\u00ae\u00af\7@\2\2\u00af\32") - buf.write("\3\2\2\2\u00b0\u00b1\7(\2\2\u00b1\34\3\2\2\2\u00b2\u00b3") - buf.write("\7&\2\2\u00b3\36\3\2\2\2\u00b4\u00b5\7~\2\2\u00b5 \3\2") - buf.write("\2\2\u00b6\u00b7\7d\2\2\u00b7\u00b8\7t\2\2\u00b8\u00b9") - buf.write("\7g\2\2\u00b9\u00ba\7c\2\2\u00ba\u00bb\7m\2\2\u00bb\"") - buf.write("\3\2\2\2\u00bc\u00bd\7e\2\2\u00bd\u00be\7q\2\2\u00be\u00bf") - buf.write("\7p\2\2\u00bf\u00c0\7v\2\2\u00c0\u00c1\7k\2\2\u00c1\u00c2") - buf.write("\7p\2\2\u00c2\u00c3\7w\2\2\u00c3\u00c4\7g\2\2\u00c4$\3") - buf.write("\2\2\2\u00c5\u00c6\7t\2\2\u00c6\u00c7\7g\2\2\u00c7\u00c8") - buf.write("\7v\2\2\u00c8\u00c9\7w\2\2\u00c9\u00ca\7t\2\2\u00ca\u00cb") - buf.write("\7p\2\2\u00cb&\3\2\2\2\u00cc\u00cd\7.\2\2\u00cd(\3\2\2") - buf.write("\2\u00ce\u00cf\7k\2\2\u00cf\u00d0\7h\2\2\u00d0*\3\2\2") - buf.write("\2\u00d1\u00d2\7g\2\2\u00d2\u00d3\7n\2\2\u00d3\u00d4\7") - buf.write("k\2\2\u00d4\u00d5\7h\2\2\u00d5,\3\2\2\2\u00d6\u00d7\7") - buf.write("g\2\2\u00d7\u00d8\7n\2\2\u00d8\u00d9\7u\2\2\u00d9\u00da") - buf.write("\7g\2\2\u00da.\3\2\2\2\u00db\u00dc\7y\2\2\u00dc\u00dd") - buf.write("\7j\2\2\u00dd\u00de\7k\2\2\u00de\u00df\7n\2\2\u00df\u00e0") - buf.write("\7g\2\2\u00e0\60\3\2\2\2\u00e1\u00e2\7w\2\2\u00e2\u00e3") - buf.write("\7p\2\2\u00e3\u00e4\7v\2\2\u00e4\u00e5\7k\2\2\u00e5\u00e6") - buf.write("\7n\2\2\u00e6\62\3\2\2\2\u00e7\u00e8\7h\2\2\u00e8\u00e9") - buf.write("\7q\2\2\u00e9\u00ea\7t\2\2\u00ea\64\3\2\2\2\u00eb\u00ec") - buf.write("\7k\2\2\u00ec\u00ed\7p\2\2\u00ed\66\3\2\2\2\u00ee\u00ef") - buf.write("\7u\2\2\u00ef\u00f0\7v\2\2\u00f0\u00f1\7g\2\2\u00f1\u00f2") - buf.write("\7r\2\2\u00f28\3\2\2\2\u00f3\u00f4\7h\2\2\u00f4\u00f5") - buf.write("\7w\2\2\u00f5\u00f6\7p\2\2\u00f6\u00f7\7e\2\2\u00f7:\3") - buf.write("\2\2\2\u00f8\u00f9\7*\2\2\u00f9<\3\2\2\2\u00fa\u00fb\7") - buf.write("+\2\2\u00fb>\3\2\2\2\u00fc\u00fd\7<\2\2\u00fd@\3\2\2\2") - buf.write("\u00fe\u00ff\7f\2\2\u00ff\u0100\7q\2\2\u0100B\3\2\2\2") - buf.write("\u0101\u0102\7}\2\2\u0102D\3\2\2\2\u0103\u0104\7\177\2") - buf.write("\2\u0104F\3\2\2\2\u0105\u0106\7f\2\2\u0106\u0107\7g\2") - buf.write("\2\u0107\u0108\7h\2\2\u0108H\3\2\2\2\u0109\u010a\7]\2") - buf.write("\2\u010aJ\3\2\2\2\u010b\u010c\7_\2\2\u010cL\3\2\2\2\u010d") - buf.write("\u010e\7\60\2\2\u010eN\3\2\2\2\u010f\u0110\7\u0080\2\2") - buf.write("\u0110P\3\2\2\2\u0111\u0112\7\60\2\2\u0112\u0113\7\60") - buf.write("\2\2\u0113R\3\2\2\2\u0114\u0115\7\60\2\2\u0115\u0116\7") - buf.write("\60\2\2\u0116\u0117\7\60\2\2\u0117T\3\2\2\2\u0118\u0119") - buf.write("\7?\2\2\u0119\u011a\7?\2\2\u011aV\3\2\2\2\u011b\u011c") - buf.write("\7#\2\2\u011c\u011d\7?\2\2\u011dX\3\2\2\2\u011e\u011f") - buf.write("\7>\2\2\u011fZ\3\2\2\2\u0120\u0121\7>\2\2\u0121\u0122") - buf.write("\7?\2\2\u0122\\\3\2\2\2\u0123\u0124\7@\2\2\u0124^\3\2") - buf.write("\2\2\u0125\u0126\7@\2\2\u0126\u0127\7?\2\2\u0127`\3\2") - buf.write("\2\2\u0128\u0129\7p\2\2\u0129\u012a\7q\2\2\u012a\u012b") - buf.write("\7v\2\2\u012bb\3\2\2\2\u012c\u012d\7c\2\2\u012d\u012e") - buf.write("\7p\2\2\u012e\u012f\7f\2\2\u012fd\3\2\2\2\u0130\u0131") - buf.write("\7q\2\2\u0131\u0132\7t\2\2\u0132f\3\2\2\2\u0133\u0134") - buf.write("\7A\2\2\u0134h\3\2\2\2\u0135\u0136\7v\2\2\u0136\u0137") - buf.write("\7t\2\2\u0137\u0138\7w\2\2\u0138\u0139\7g\2\2\u0139j\3") - buf.write("\2\2\2\u013a\u013b\7h\2\2\u013b\u013c\7c\2\2\u013c\u013d") - buf.write("\7n\2\2\u013d\u013e\7u\2\2\u013e\u013f\7g\2\2\u013fl\3") - buf.write("\2\2\2\u0140\u0141\7X\2\2\u0141\u0142\7q\2\2\u0142\u0143") - buf.write("\7k\2\2\u0143\u0144\7f\2\2\u0144n\3\2\2\2\u0145\u0146") - buf.write("\7K\2\2\u0146\u0147\7p\2\2\u0147\u0148\7v\2\2\u0148p\3") - buf.write("\2\2\2\u0149\u014a\7H\2\2\u014a\u014b\7n\2\2\u014b\u014c") - buf.write("\7q\2\2\u014c\u014d\7c\2\2\u014d\u014e\7v\2\2\u014er\3") - buf.write("\2\2\2\u014f\u0150\7D\2\2\u0150\u0151\7q\2\2\u0151\u0152") - buf.write("\7q\2\2\u0152\u0153\7n\2\2\u0153t\3\2\2\2\u0154\u0155") - buf.write("\7E\2\2\u0155\u0156\7j\2\2\u0156\u0157\7c\2\2\u0157\u0158") - buf.write("\7t\2\2\u0158v\3\2\2\2\u0159\u015a\7U\2\2\u015a\u015b") - buf.write("\7v\2\2\u015b\u015c\7t\2\2\u015c\u015d\7k\2\2\u015d\u015e") - buf.write("\7p\2\2\u015e\u015f\7i\2\2\u015fx\3\2\2\2\u0160\u0161") - buf.write("\7/\2\2\u0161\u0162\7@\2\2\u0162z\3\2\2\2\u0163\u0165") - buf.write("\5\u0085C\2\u0164\u0163\3\2\2\2\u0165\u0166\3\2\2\2\u0166") - buf.write("\u0164\3\2\2\2\u0166\u0167\3\2\2\2\u0167|\3\2\2\2\u0168") - buf.write("\u016a\5\u0085C\2\u0169\u0168\3\2\2\2\u016a\u016b\3\2") - buf.write("\2\2\u016b\u0169\3\2\2\2\u016b\u016c\3\2\2\2\u016c\u016d") - buf.write("\3\2\2\2\u016d\u016f\7\60\2\2\u016e\u0170\5\u0085C\2\u016f") - buf.write("\u016e\3\2\2\2\u0170\u0171\3\2\2\2\u0171\u016f\3\2\2\2") - buf.write("\u0171\u0172\3\2\2\2\u0172\u017c\3\2\2\2\u0173\u0175\7") - buf.write("g\2\2\u0174\u0176\7/\2\2\u0175\u0174\3\2\2\2\u0175\u0176") - buf.write("\3\2\2\2\u0176\u0178\3\2\2\2\u0177\u0179\5\u0085C\2\u0178") - buf.write("\u0177\3\2\2\2\u0179\u017a\3\2\2\2\u017a\u0178\3\2\2\2") - buf.write("\u017a\u017b\3\2\2\2\u017b\u017d\3\2\2\2\u017c\u0173\3") - buf.write("\2\2\2\u017c\u017d\3\2\2\2\u017d~\3\2\2\2\u017e\u0184") - buf.write("\7)\2\2\u017f\u0183\n\2\2\2\u0180\u0181\7^\2\2\u0181\u0183") - buf.write("\t\3\2\2\u0182\u017f\3\2\2\2\u0182\u0180\3\2\2\2\u0183") - buf.write("\u0186\3\2\2\2\u0184\u0182\3\2\2\2\u0184\u0185\3\2\2\2") - buf.write("\u0185\u0187\3\2\2\2\u0186\u0184\3\2\2\2\u0187\u0188\7") - buf.write(")\2\2\u0188\u0080\3\2\2\2\u0189\u018f\7$\2\2\u018a\u018e") - buf.write("\n\4\2\2\u018b\u018c\7^\2\2\u018c\u018e\t\5\2\2\u018d") - buf.write("\u018a\3\2\2\2\u018d\u018b\3\2\2\2\u018e\u0191\3\2\2\2") - buf.write("\u018f\u018d\3\2\2\2\u018f\u0190\3\2\2\2\u0190\u0192\3") - buf.write("\2\2\2\u0191\u018f\3\2\2\2\u0192\u0193\7$\2\2\u0193\u0082") - buf.write("\3\2\2\2\u0194\u0198\5\u0087D\2\u0195\u0197\5\u0089E\2") - buf.write("\u0196\u0195\3\2\2\2\u0197\u019a\3\2\2\2\u0198\u0196\3") - buf.write("\2\2\2\u0198\u0199\3\2\2\2\u0199\u0084\3\2\2\2\u019a\u0198") - buf.write("\3\2\2\2\u019b\u019c\t\6\2\2\u019c\u0086\3\2\2\2\u019d") - buf.write("\u019e\t\7\2\2\u019e\u0088\3\2\2\2\u019f\u01a3\5\u0087") - buf.write("D\2\u01a0\u01a3\5\u0085C\2\u01a1\u01a3\t\b\2\2\u01a2\u019f") - buf.write("\3\2\2\2\u01a2\u01a0\3\2\2\2\u01a2\u01a1\3\2\2\2\u01a3") - buf.write("\u008a\3\2\2\2\u01a4\u01a6\t\t\2\2\u01a5\u01a4\3\2\2\2") - buf.write("\u01a6\u01a7\3\2\2\2\u01a7\u01a5\3\2\2\2\u01a7\u01a8\3") - buf.write("\2\2\2\u01a8\u01a9\3\2\2\2\u01a9\u01aa\bF\2\2\u01aa\u008c") - buf.write("\3\2\2\2\u01ab\u01ac\13\2\2\2\u01ac\u008e\3\2\2\2\20\2") - buf.write("\u0166\u016b\u0171\u0175\u017a\u017c\u0182\u0184\u018d") - buf.write("\u018f\u0198\u01a2\u01a7\3\b\2\2") + buf.write("))aa\4\2\f\f\16\17\5\2\13\f\17\17\"\"\2\u01c5\2\3\3\2") + buf.write("\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2") + buf.write("\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2") + buf.write("\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35") + buf.write("\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2") + buf.write("\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2") + buf.write("\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2") + buf.write("\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2") + buf.write("\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2") + buf.write("\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3") + buf.write("\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_") + buf.write("\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2") + buf.write("i\3\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2") + buf.write("\2s\3\2\2\2\2u\3\2\2\2\2w\3\2\2\2\2y\3\2\2\2\2{\3\2\2") + buf.write("\2\2}\3\2\2\2\2\177\3\2\2\2\2\u0081\3\2\2\2\2\u0083\3") + buf.write("\2\2\2\2\u008b\3\2\2\2\2\u008d\3\2\2\2\2\u008f\3\2\2\2") + buf.write("\3\u0091\3\2\2\2\5\u0093\3\2\2\2\7\u0098\3\2\2\2\t\u009e") + buf.write("\3\2\2\2\13\u00a0\3\2\2\2\r\u00a2\3\2\2\2\17\u00a4\3\2") + buf.write("\2\2\21\u00a6\3\2\2\2\23\u00a8\3\2\2\2\25\u00aa\3\2\2") + buf.write("\2\27\u00ac\3\2\2\2\31\u00af\3\2\2\2\33\u00b2\3\2\2\2") + buf.write("\35\u00b4\3\2\2\2\37\u00b6\3\2\2\2!\u00b8\3\2\2\2#\u00be") + buf.write("\3\2\2\2%\u00c7\3\2\2\2\'\u00ce\3\2\2\2)\u00d0\3\2\2\2") + buf.write("+\u00d3\3\2\2\2-\u00d8\3\2\2\2/\u00dd\3\2\2\2\61\u00e3") + buf.write("\3\2\2\2\63\u00e9\3\2\2\2\65\u00ed\3\2\2\2\67\u00f0\3") + buf.write("\2\2\29\u00f5\3\2\2\2;\u00fa\3\2\2\2=\u00fc\3\2\2\2?\u00fe") + buf.write("\3\2\2\2A\u0100\3\2\2\2C\u0103\3\2\2\2E\u0105\3\2\2\2") + buf.write("G\u0107\3\2\2\2I\u010b\3\2\2\2K\u010d\3\2\2\2M\u010f\3") + buf.write("\2\2\2O\u0111\3\2\2\2Q\u0113\3\2\2\2S\u0116\3\2\2\2U\u011a") + buf.write("\3\2\2\2W\u011d\3\2\2\2Y\u0120\3\2\2\2[\u0122\3\2\2\2") + buf.write("]\u0125\3\2\2\2_\u0127\3\2\2\2a\u012a\3\2\2\2c\u012e\3") + buf.write("\2\2\2e\u0132\3\2\2\2g\u0135\3\2\2\2i\u0137\3\2\2\2k\u013c") + buf.write("\3\2\2\2m\u0142\3\2\2\2o\u0147\3\2\2\2q\u014b\3\2\2\2") + buf.write("s\u0151\3\2\2\2u\u0156\3\2\2\2w\u015b\3\2\2\2y\u0162\3") + buf.write("\2\2\2{\u0166\3\2\2\2}\u016b\3\2\2\2\177\u0180\3\2\2\2") + buf.write("\u0081\u018b\3\2\2\2\u0083\u0196\3\2\2\2\u0085\u019d\3") + buf.write("\2\2\2\u0087\u019f\3\2\2\2\u0089\u01a4\3\2\2\2\u008b\u01a6") + buf.write("\3\2\2\2\u008d\u01b2\3\2\2\2\u008f\u01b8\3\2\2\2\u0091") + buf.write("\u0092\7=\2\2\u0092\4\3\2\2\2\u0093\u0094\7u\2\2\u0094") + buf.write("\u0095\7m\2\2\u0095\u0096\7k\2\2\u0096\u0097\7r\2\2\u0097") + buf.write("\6\3\2\2\2\u0098\u0099\7r\2\2\u0099\u009a\7t\2\2\u009a") + buf.write("\u009b\7k\2\2\u009b\u009c\7p\2\2\u009c\u009d\7v\2\2\u009d") + buf.write("\b\3\2\2\2\u009e\u009f\7?\2\2\u009f\n\3\2\2\2\u00a0\u00a1") + buf.write("\7`\2\2\u00a1\f\3\2\2\2\u00a2\u00a3\7,\2\2\u00a3\16\3") + buf.write("\2\2\2\u00a4\u00a5\7\61\2\2\u00a5\20\3\2\2\2\u00a6\u00a7") + buf.write("\7\'\2\2\u00a7\22\3\2\2\2\u00a8\u00a9\7-\2\2\u00a9\24") + buf.write("\3\2\2\2\u00aa\u00ab\7/\2\2\u00ab\26\3\2\2\2\u00ac\u00ad") + buf.write("\7>\2\2\u00ad\u00ae\7>\2\2\u00ae\30\3\2\2\2\u00af\u00b0") + buf.write("\7@\2\2\u00b0\u00b1\7@\2\2\u00b1\32\3\2\2\2\u00b2\u00b3") + buf.write("\7(\2\2\u00b3\34\3\2\2\2\u00b4\u00b5\7&\2\2\u00b5\36\3") + buf.write("\2\2\2\u00b6\u00b7\7~\2\2\u00b7 \3\2\2\2\u00b8\u00b9\7") + buf.write("d\2\2\u00b9\u00ba\7t\2\2\u00ba\u00bb\7g\2\2\u00bb\u00bc") + buf.write("\7c\2\2\u00bc\u00bd\7m\2\2\u00bd\"\3\2\2\2\u00be\u00bf") + buf.write("\7e\2\2\u00bf\u00c0\7q\2\2\u00c0\u00c1\7p\2\2\u00c1\u00c2") + buf.write("\7v\2\2\u00c2\u00c3\7k\2\2\u00c3\u00c4\7p\2\2\u00c4\u00c5") + buf.write("\7w\2\2\u00c5\u00c6\7g\2\2\u00c6$\3\2\2\2\u00c7\u00c8") + buf.write("\7t\2\2\u00c8\u00c9\7g\2\2\u00c9\u00ca\7v\2\2\u00ca\u00cb") + buf.write("\7w\2\2\u00cb\u00cc\7t\2\2\u00cc\u00cd\7p\2\2\u00cd&\3") + buf.write("\2\2\2\u00ce\u00cf\7.\2\2\u00cf(\3\2\2\2\u00d0\u00d1\7") + buf.write("k\2\2\u00d1\u00d2\7h\2\2\u00d2*\3\2\2\2\u00d3\u00d4\7") + buf.write("g\2\2\u00d4\u00d5\7n\2\2\u00d5\u00d6\7k\2\2\u00d6\u00d7") + buf.write("\7h\2\2\u00d7,\3\2\2\2\u00d8\u00d9\7g\2\2\u00d9\u00da") + buf.write("\7n\2\2\u00da\u00db\7u\2\2\u00db\u00dc\7g\2\2\u00dc.\3") + buf.write("\2\2\2\u00dd\u00de\7y\2\2\u00de\u00df\7j\2\2\u00df\u00e0") + buf.write("\7k\2\2\u00e0\u00e1\7n\2\2\u00e1\u00e2\7g\2\2\u00e2\60") + buf.write("\3\2\2\2\u00e3\u00e4\7w\2\2\u00e4\u00e5\7p\2\2\u00e5\u00e6") + buf.write("\7v\2\2\u00e6\u00e7\7k\2\2\u00e7\u00e8\7n\2\2\u00e8\62") + buf.write("\3\2\2\2\u00e9\u00ea\7h\2\2\u00ea\u00eb\7q\2\2\u00eb\u00ec") + buf.write("\7t\2\2\u00ec\64\3\2\2\2\u00ed\u00ee\7k\2\2\u00ee\u00ef") + buf.write("\7p\2\2\u00ef\66\3\2\2\2\u00f0\u00f1\7u\2\2\u00f1\u00f2") + buf.write("\7v\2\2\u00f2\u00f3\7g\2\2\u00f3\u00f4\7r\2\2\u00f48\3") + buf.write("\2\2\2\u00f5\u00f6\7h\2\2\u00f6\u00f7\7w\2\2\u00f7\u00f8") + buf.write("\7p\2\2\u00f8\u00f9\7e\2\2\u00f9:\3\2\2\2\u00fa\u00fb") + buf.write("\7*\2\2\u00fb<\3\2\2\2\u00fc\u00fd\7+\2\2\u00fd>\3\2\2") + buf.write("\2\u00fe\u00ff\7<\2\2\u00ff@\3\2\2\2\u0100\u0101\7f\2") + buf.write("\2\u0101\u0102\7q\2\2\u0102B\3\2\2\2\u0103\u0104\7}\2") + buf.write("\2\u0104D\3\2\2\2\u0105\u0106\7\177\2\2\u0106F\3\2\2\2") + buf.write("\u0107\u0108\7f\2\2\u0108\u0109\7g\2\2\u0109\u010a\7h") + buf.write("\2\2\u010aH\3\2\2\2\u010b\u010c\7]\2\2\u010cJ\3\2\2\2") + buf.write("\u010d\u010e\7_\2\2\u010eL\3\2\2\2\u010f\u0110\7\60\2") + buf.write("\2\u0110N\3\2\2\2\u0111\u0112\7\u0080\2\2\u0112P\3\2\2") + buf.write("\2\u0113\u0114\7\60\2\2\u0114\u0115\7\60\2\2\u0115R\3") + buf.write("\2\2\2\u0116\u0117\7\60\2\2\u0117\u0118\7\60\2\2\u0118") + buf.write("\u0119\7\60\2\2\u0119T\3\2\2\2\u011a\u011b\7?\2\2\u011b") + buf.write("\u011c\7?\2\2\u011cV\3\2\2\2\u011d\u011e\7#\2\2\u011e") + buf.write("\u011f\7?\2\2\u011fX\3\2\2\2\u0120\u0121\7>\2\2\u0121") + buf.write("Z\3\2\2\2\u0122\u0123\7>\2\2\u0123\u0124\7?\2\2\u0124") + buf.write("\\\3\2\2\2\u0125\u0126\7@\2\2\u0126^\3\2\2\2\u0127\u0128") + buf.write("\7@\2\2\u0128\u0129\7?\2\2\u0129`\3\2\2\2\u012a\u012b") + buf.write("\7p\2\2\u012b\u012c\7q\2\2\u012c\u012d\7v\2\2\u012db\3") + buf.write("\2\2\2\u012e\u012f\7c\2\2\u012f\u0130\7p\2\2\u0130\u0131") + buf.write("\7f\2\2\u0131d\3\2\2\2\u0132\u0133\7q\2\2\u0133\u0134") + buf.write("\7t\2\2\u0134f\3\2\2\2\u0135\u0136\7A\2\2\u0136h\3\2\2") + buf.write("\2\u0137\u0138\7v\2\2\u0138\u0139\7t\2\2\u0139\u013a\7") + buf.write("w\2\2\u013a\u013b\7g\2\2\u013bj\3\2\2\2\u013c\u013d\7") + buf.write("h\2\2\u013d\u013e\7c\2\2\u013e\u013f\7n\2\2\u013f\u0140") + buf.write("\7u\2\2\u0140\u0141\7g\2\2\u0141l\3\2\2\2\u0142\u0143") + buf.write("\7X\2\2\u0143\u0144\7q\2\2\u0144\u0145\7k\2\2\u0145\u0146") + buf.write("\7f\2\2\u0146n\3\2\2\2\u0147\u0148\7K\2\2\u0148\u0149") + buf.write("\7p\2\2\u0149\u014a\7v\2\2\u014ap\3\2\2\2\u014b\u014c") + buf.write("\7H\2\2\u014c\u014d\7n\2\2\u014d\u014e\7q\2\2\u014e\u014f") + buf.write("\7c\2\2\u014f\u0150\7v\2\2\u0150r\3\2\2\2\u0151\u0152") + buf.write("\7D\2\2\u0152\u0153\7q\2\2\u0153\u0154\7q\2\2\u0154\u0155") + buf.write("\7n\2\2\u0155t\3\2\2\2\u0156\u0157\7E\2\2\u0157\u0158") + buf.write("\7j\2\2\u0158\u0159\7c\2\2\u0159\u015a\7t\2\2\u015av\3") + buf.write("\2\2\2\u015b\u015c\7U\2\2\u015c\u015d\7v\2\2\u015d\u015e") + buf.write("\7t\2\2\u015e\u015f\7k\2\2\u015f\u0160\7p\2\2\u0160\u0161") + buf.write("\7i\2\2\u0161x\3\2\2\2\u0162\u0163\7/\2\2\u0163\u0164") + buf.write("\7@\2\2\u0164z\3\2\2\2\u0165\u0167\5\u0085C\2\u0166\u0165") + buf.write("\3\2\2\2\u0167\u0168\3\2\2\2\u0168\u0166\3\2\2\2\u0168") + buf.write("\u0169\3\2\2\2\u0169|\3\2\2\2\u016a\u016c\5\u0085C\2\u016b") + buf.write("\u016a\3\2\2\2\u016c\u016d\3\2\2\2\u016d\u016b\3\2\2\2") + buf.write("\u016d\u016e\3\2\2\2\u016e\u016f\3\2\2\2\u016f\u0171\7") + buf.write("\60\2\2\u0170\u0172\5\u0085C\2\u0171\u0170\3\2\2\2\u0172") + buf.write("\u0173\3\2\2\2\u0173\u0171\3\2\2\2\u0173\u0174\3\2\2\2") + buf.write("\u0174\u017e\3\2\2\2\u0175\u0177\7g\2\2\u0176\u0178\7") + buf.write("/\2\2\u0177\u0176\3\2\2\2\u0177\u0178\3\2\2\2\u0178\u017a") + buf.write("\3\2\2\2\u0179\u017b\5\u0085C\2\u017a\u0179\3\2\2\2\u017b") + buf.write("\u017c\3\2\2\2\u017c\u017a\3\2\2\2\u017c\u017d\3\2\2\2") + buf.write("\u017d\u017f\3\2\2\2\u017e\u0175\3\2\2\2\u017e\u017f\3") + buf.write("\2\2\2\u017f~\3\2\2\2\u0180\u0186\7)\2\2\u0181\u0185\n") + buf.write("\2\2\2\u0182\u0183\7^\2\2\u0183\u0185\t\3\2\2\u0184\u0181") + buf.write("\3\2\2\2\u0184\u0182\3\2\2\2\u0185\u0188\3\2\2\2\u0186") + buf.write("\u0184\3\2\2\2\u0186\u0187\3\2\2\2\u0187\u0189\3\2\2\2") + buf.write("\u0188\u0186\3\2\2\2\u0189\u018a\7)\2\2\u018a\u0080\3") + buf.write("\2\2\2\u018b\u0191\7$\2\2\u018c\u0190\n\4\2\2\u018d\u018e") + buf.write("\7^\2\2\u018e\u0190\t\5\2\2\u018f\u018c\3\2\2\2\u018f") + buf.write("\u018d\3\2\2\2\u0190\u0193\3\2\2\2\u0191\u018f\3\2\2\2") + buf.write("\u0191\u0192\3\2\2\2\u0192\u0194\3\2\2\2\u0193\u0191\3") + buf.write("\2\2\2\u0194\u0195\7$\2\2\u0195\u0082\3\2\2\2\u0196\u019a") + buf.write("\5\u0087D\2\u0197\u0199\5\u0089E\2\u0198\u0197\3\2\2\2") + buf.write("\u0199\u019c\3\2\2\2\u019a\u0198\3\2\2\2\u019a\u019b\3") + buf.write("\2\2\2\u019b\u0084\3\2\2\2\u019c\u019a\3\2\2\2\u019d\u019e") + buf.write("\t\6\2\2\u019e\u0086\3\2\2\2\u019f\u01a0\t\7\2\2\u01a0") + buf.write("\u0088\3\2\2\2\u01a1\u01a5\5\u0087D\2\u01a2\u01a5\5\u0085") + buf.write("C\2\u01a3\u01a5\t\b\2\2\u01a4\u01a1\3\2\2\2\u01a4\u01a2") + buf.write("\3\2\2\2\u01a4\u01a3\3\2\2\2\u01a5\u008a\3\2\2\2\u01a6") + buf.write("\u01a7\7/\2\2\u01a7\u01a8\7/\2\2\u01a8\u01ac\3\2\2\2\u01a9") + buf.write("\u01ab\n\t\2\2\u01aa\u01a9\3\2\2\2\u01ab\u01ae\3\2\2\2") + buf.write("\u01ac\u01aa\3\2\2\2\u01ac\u01ad\3\2\2\2\u01ad\u01af\3") + buf.write("\2\2\2\u01ae\u01ac\3\2\2\2\u01af\u01b0\bF\2\2\u01b0\u008c") + buf.write("\3\2\2\2\u01b1\u01b3\t\n\2\2\u01b2\u01b1\3\2\2\2\u01b3") + buf.write("\u01b4\3\2\2\2\u01b4\u01b2\3\2\2\2\u01b4\u01b5\3\2\2\2") + buf.write("\u01b5\u01b6\3\2\2\2\u01b6\u01b7\bG\2\2\u01b7\u008e\3") + buf.write("\2\2\2\u01b8\u01b9\13\2\2\2\u01b9\u0090\3\2\2\2\21\2\u0168") + buf.write("\u016d\u0173\u0177\u017c\u017e\u0184\u0186\u018f\u0191") + buf.write("\u019a\u01a4\u01ac\u01b4\3\b\2\2") return buf.getvalue() @@ -264,8 +270,9 @@ class PyxellLexer(Lexer): CHAR = 63 STRING = 64 ID = 65 - WS = 66 - ERR = 67 + COMMENT = 66 + WS = 67 + ERR = 68 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -283,7 +290,7 @@ class PyxellLexer(Lexer): "'->'" ] symbolicNames = [ "", - "INT", "FLOAT", "CHAR", "STRING", "ID", "WS", "ERR" ] + "INT", "FLOAT", "CHAR", "STRING", "ID", "COMMENT", "WS", "ERR" ] ruleNames = [ "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8", "T__9", "T__10", "T__11", "T__12", "T__13", @@ -295,8 +302,8 @@ class PyxellLexer(Lexer): "T__44", "T__45", "T__46", "T__47", "T__48", "T__49", "T__50", "T__51", "T__52", "T__53", "T__54", "T__55", "T__56", "T__57", "T__58", "T__59", "INT", "FLOAT", "CHAR", - "STRING", "ID", "DIGIT", "ID_START", "ID_CONT", "WS", - "ERR" ] + "STRING", "ID", "DIGIT", "ID_START", "ID_CONT", "COMMENT", + "WS", "ERR" ] grammarFileName = "Pyxell.g4" diff --git a/src/antlr/PyxellLexer.tokens b/src/antlr/PyxellLexer.tokens index 41299c04..2b4922ee 100644 --- a/src/antlr/PyxellLexer.tokens +++ b/src/antlr/PyxellLexer.tokens @@ -63,8 +63,9 @@ FLOAT=62 CHAR=63 STRING=64 ID=65 -WS=66 -ERR=67 +COMMENT=66 +WS=67 +ERR=68 ';'=1 'skip'=2 'print'=3 diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index d06f1426..5a1c1516 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -8,7 +8,7 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3E") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3F") buf.write("\u0135\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16") buf.write("\t\16\3\2\7\2\36\n\2\f\2\16\2!\13\2\3\2\3\2\3\3\3\3\3") @@ -195,7 +195,7 @@ class PyxellParser ( Parser ): "", "", "", "", "", "", "", "", "", "INT", "FLOAT", "CHAR", "STRING", "ID", - "WS", "ERR" ] + "COMMENT", "WS", "ERR" ] RULE_program = 0 RULE_stmt = 1 @@ -281,8 +281,9 @@ class PyxellParser ( Parser ): CHAR=63 STRING=64 ID=65 - WS=66 - ERR=67 + COMMENT=66 + WS=67 + ERR=68 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) diff --git a/src/indentation.py b/src/indentation.py index e6fe8057..cb3b5c29 100644 --- a/src/indentation.py +++ b/src/indentation.py @@ -14,9 +14,9 @@ def transform_indented_code(code): for i in range(len(lines)): line = lines[i] - match = re.search(r'^(\s*)\S', line) - if not match: - # Skip line with whitespace only. + match = re.match(r'(\s*)(\S+)', line) + if not match or match.group(2).startswith('--'): + # Skip line with comment or whitespace only. continue indent = match.group(1) prev_indent = indents[-1] @@ -37,11 +37,11 @@ def transform_indented_code(code): else: raise PyxellError(PyxellError.InvalidIndentation(), i+1) - if re.search(r'\W(do|def)\s*$', line): - lines[i] += '{' + if re.search(r'\W(do|def)\s*(--.*)?$', line): + lines[i] += '\r{' new_block = True else: - lines[i] += ';' + lines[i] += '\r;' indents.pop() lines[-1] += '}' * len(indents) diff --git a/test/good/basic/comment01.out b/test/good/basic/comment01.out index 282f2fe4..0cfbf088 100644 --- a/test/good/basic/comment01.out +++ b/test/good/basic/comment01.out @@ -1 +1 @@ -{--2 +2 diff --git a/test/good/basic/comment01.px b/test/good/basic/comment01.px index 857a2278..dda8d18c 100644 --- a/test/good/basic/comment01.px +++ b/test/good/basic/comment01.px @@ -1,8 +1,13 @@ --- test -x = "{--2" -- + "x" -{- -multi -line - -} -print{---}x +------------ +--@ test @-- +------------ + +if true do---; print false + -- + x = "--".length -- print false + --- x = 1; + print x ----- 2 + +else do -- + print false diff --git a/test/good/basic/comment02.out b/test/good/basic/comment02.out new file mode 100644 index 00000000..282f2fe4 --- /dev/null +++ b/test/good/basic/comment02.out @@ -0,0 +1 @@ +{--2 diff --git a/test/good/basic/comment02.px b/test/good/basic/comment02.px new file mode 100644 index 00000000..e7321e18 --- /dev/null +++ b/test/good/basic/comment02.px @@ -0,0 +1,7 @@ + +x = "{--2" -- + "x" +{- +multi + line + -} +print{---}x From 43f8a65f4cf0215905d881ed0038cde0928856cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Fri, 1 Nov 2019 18:22:12 +0100 Subject: [PATCH 043/100] Standard library --- lib/std.px | 73 ---- src/Pyxell.g4 | 9 +- src/antlr/Pyxell.interp | 4 +- src/antlr/Pyxell.tokens | 78 ++-- src/antlr/PyxellLexer.interp | 5 +- src/antlr/PyxellLexer.py | 395 +++++++++---------- src/antlr/PyxellLexer.tokens | 78 ++-- src/antlr/PyxellParser.py | 722 +++++++++++++++++------------------ src/compiler.py | 127 ++++-- src/main.py | 4 +- test/bad/arrays/print01.err | 2 +- test/bad/tuples/print01.err | 2 +- 12 files changed, 738 insertions(+), 761 deletions(-) diff --git a/lib/std.px b/lib/std.px index 450b2f41..83b8c225 100644 --- a/lib/std.px +++ b/lib/std.px @@ -15,24 +15,6 @@ func readInt() Int extern func readChar() Char extern -func min(T a, T b) T def - return a < b ? a : b - -func max(T a, T b) T def - return b < a ? a : b - -func clamp(T x, T a, T b) T def - y = x < a ? a : x - z = y > b ? b : y - return z - -func abs(T x) T def - return x >= 0 ? x : -x - -func sign(T x) Int def - return x > 0 ? 1 : x < 0 ? -1 : 0 - - func Int_pow(Int b, Int e) Int def if e < 0 do return 0 @@ -85,37 +67,6 @@ func StringArray_join([String] array, String sep: "") String def return CharArray_asString(r) -func Array_prepareSlice(Int l, Int a, Bool a', Int b, Bool b', Int c) Int*Int def - if not a' do - a = c > 0 ? 0 : l - elif a < 0 do - a += l - a = clamp(a, 0, l) - - if not b' do - b = c > 0 ? l : 0 - elif b < 0 do - b += l - b = clamp(b, 0, l) - - d = c > 0 ? b - a : a - b - d = (d-1) / abs(c) + 1 - - if c < 0 do - a -= 1 - - return a, d - - -func Array_compare([T] a1, [T] a2) Int def - for x1, x2 in a1, a2 do - if x1 < x2 do - return -1 - if x1 > x2 do - return 1 - return a1.length - a2.length - - func Int_toString(Int n) String extern func Float_toString(Float f) String extern @@ -149,27 +100,3 @@ func Char_toInt(Char c) Int def func Char_toFloat(Char c) Float def return ord(c) - 48.0 - - -func all(A->Bool f, [A] a) Bool def - for x in a do - if not f(x) do - return false - return true - -func any(A->Bool f, [A] a) Bool def - for x in a do - if f(x) do - return true - return false - -func filter(A->Bool f, [A] a) [A] def - return [x for x in a if f(x)] - -func map(A->B f, [A] a) [B] def - return [f(x) for x in a] - -func reduce(A->B->B f, B r, [A] a) B def - for x in a do - r = f(x, r) - return r diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index 1f73af9b..f7311b5a 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -28,7 +28,7 @@ compound_stmt | 'while' expr do_block # StmtWhile | 'until' expr do_block # StmtUntil | 'for' tuple_expr 'in' tuple_expr ('step' step=tuple_expr)? do_block # StmtFor - | 'func' ID '(' (func_arg ',')* func_arg? ')' (ret=typ)? def_block # StmtFunc + | 'func' ID '(' (func_arg ',')* func_arg? ')' (ret=typ)? (def_block | 'extern' ';') # StmtFunc ; func_arg @@ -85,12 +85,7 @@ atom ; typ - : 'Void' # TypePrimitive - | 'Int' # TypePrimitive - | 'Float' # TypePrimitive - | 'Bool' # TypePrimitive - | 'Char' # TypePrimitive - | 'String' # TypePrimitive + : ('Void' | 'Int' | 'Float' | 'Bool' | 'Char' | 'String') # TypePrimitive | '(' typ ')' # TypeParentheses | '[' typ ']' # TypeArray | typ '*' typ # TypeTuple diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index a0244d7e..d705f8e0 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -30,6 +30,7 @@ null 'func' '(' ')' +'extern' ':' 'do' '{' @@ -131,6 +132,7 @@ null null null null +null INT FLOAT CHAR @@ -157,4 +159,4 @@ typ atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 70, 309, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 3, 2, 7, 2, 30, 10, 2, 12, 2, 14, 2, 33, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 41, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 46, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 52, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 57, 10, 4, 12, 4, 14, 4, 60, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 71, 10, 4, 5, 4, 73, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 78, 10, 5, 12, 5, 14, 5, 81, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 90, 10, 6, 12, 6, 14, 6, 93, 11, 6, 3, 6, 3, 6, 5, 6, 97, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 113, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 123, 10, 6, 12, 6, 14, 6, 126, 11, 6, 3, 6, 5, 6, 129, 10, 6, 3, 6, 3, 6, 5, 6, 133, 10, 6, 3, 6, 5, 6, 136, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 142, 10, 7, 3, 8, 3, 8, 3, 8, 6, 8, 147, 10, 8, 13, 8, 14, 8, 148, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 6, 9, 156, 10, 9, 13, 9, 14, 9, 157, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 7, 10, 165, 10, 10, 12, 10, 14, 10, 168, 11, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 182, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 236, 10, 11, 12, 11, 14, 11, 239, 11, 11, 3, 11, 5, 11, 242, 10, 11, 3, 11, 3, 11, 3, 11, 7, 11, 247, 10, 11, 12, 11, 14, 11, 250, 11, 11, 3, 12, 3, 12, 5, 12, 254, 10, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 7, 13, 267, 10, 13, 12, 13, 14, 13, 270, 11, 13, 3, 13, 5, 13, 273, 10, 13, 3, 13, 3, 13, 5, 13, 277, 10, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 296, 10, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 7, 14, 304, 10, 14, 12, 14, 14, 14, 307, 11, 14, 3, 14, 2, 4, 20, 26, 15, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 2, 11, 3, 2, 7, 17, 3, 2, 18, 19, 4, 2, 11, 12, 41, 41, 3, 2, 8, 10, 3, 2, 11, 12, 3, 2, 13, 14, 3, 2, 42, 43, 3, 2, 44, 49, 3, 2, 54, 55, 2, 362, 2, 31, 3, 2, 2, 2, 4, 40, 3, 2, 2, 2, 6, 72, 3, 2, 2, 2, 8, 74, 3, 2, 2, 2, 10, 135, 3, 2, 2, 2, 12, 137, 3, 2, 2, 2, 14, 143, 3, 2, 2, 2, 16, 152, 3, 2, 2, 2, 18, 166, 3, 2, 2, 2, 20, 181, 3, 2, 2, 2, 22, 253, 3, 2, 2, 2, 24, 276, 3, 2, 2, 2, 26, 295, 3, 2, 2, 2, 28, 30, 5, 4, 3, 2, 29, 28, 3, 2, 2, 2, 30, 33, 3, 2, 2, 2, 31, 29, 3, 2, 2, 2, 31, 32, 3, 2, 2, 2, 32, 34, 3, 2, 2, 2, 33, 31, 3, 2, 2, 2, 34, 35, 7, 2, 2, 3, 35, 3, 3, 2, 2, 2, 36, 37, 5, 6, 4, 2, 37, 38, 7, 3, 2, 2, 38, 41, 3, 2, 2, 2, 39, 41, 5, 10, 6, 2, 40, 36, 3, 2, 2, 2, 40, 39, 3, 2, 2, 2, 41, 5, 3, 2, 2, 2, 42, 73, 7, 4, 2, 2, 43, 45, 7, 5, 2, 2, 44, 46, 5, 18, 10, 2, 45, 44, 3, 2, 2, 2, 45, 46, 3, 2, 2, 2, 46, 73, 3, 2, 2, 2, 47, 48, 5, 26, 14, 2, 48, 51, 7, 67, 2, 2, 49, 50, 7, 6, 2, 2, 50, 52, 5, 18, 10, 2, 51, 49, 3, 2, 2, 2, 51, 52, 3, 2, 2, 2, 52, 73, 3, 2, 2, 2, 53, 54, 5, 8, 5, 2, 54, 55, 7, 6, 2, 2, 55, 57, 3, 2, 2, 2, 56, 53, 3, 2, 2, 2, 57, 60, 3, 2, 2, 2, 58, 56, 3, 2, 2, 2, 58, 59, 3, 2, 2, 2, 59, 61, 3, 2, 2, 2, 60, 58, 3, 2, 2, 2, 61, 73, 5, 18, 10, 2, 62, 63, 5, 20, 11, 2, 63, 64, 9, 2, 2, 2, 64, 65, 7, 6, 2, 2, 65, 66, 5, 20, 11, 2, 66, 73, 3, 2, 2, 2, 67, 73, 9, 3, 2, 2, 68, 70, 7, 20, 2, 2, 69, 71, 5, 18, 10, 2, 70, 69, 3, 2, 2, 2, 70, 71, 3, 2, 2, 2, 71, 73, 3, 2, 2, 2, 72, 42, 3, 2, 2, 2, 72, 43, 3, 2, 2, 2, 72, 47, 3, 2, 2, 2, 72, 58, 3, 2, 2, 2, 72, 62, 3, 2, 2, 2, 72, 67, 3, 2, 2, 2, 72, 68, 3, 2, 2, 2, 73, 7, 3, 2, 2, 2, 74, 79, 5, 20, 11, 2, 75, 76, 7, 21, 2, 2, 76, 78, 5, 20, 11, 2, 77, 75, 3, 2, 2, 2, 78, 81, 3, 2, 2, 2, 79, 77, 3, 2, 2, 2, 79, 80, 3, 2, 2, 2, 80, 9, 3, 2, 2, 2, 81, 79, 3, 2, 2, 2, 82, 83, 7, 22, 2, 2, 83, 84, 5, 20, 11, 2, 84, 91, 5, 14, 8, 2, 85, 86, 7, 23, 2, 2, 86, 87, 5, 20, 11, 2, 87, 88, 5, 14, 8, 2, 88, 90, 3, 2, 2, 2, 89, 85, 3, 2, 2, 2, 90, 93, 3, 2, 2, 2, 91, 89, 3, 2, 2, 2, 91, 92, 3, 2, 2, 2, 92, 96, 3, 2, 2, 2, 93, 91, 3, 2, 2, 2, 94, 95, 7, 24, 2, 2, 95, 97, 5, 14, 8, 2, 96, 94, 3, 2, 2, 2, 96, 97, 3, 2, 2, 2, 97, 136, 3, 2, 2, 2, 98, 99, 7, 25, 2, 2, 99, 100, 5, 20, 11, 2, 100, 101, 5, 14, 8, 2, 101, 136, 3, 2, 2, 2, 102, 103, 7, 26, 2, 2, 103, 104, 5, 20, 11, 2, 104, 105, 5, 14, 8, 2, 105, 136, 3, 2, 2, 2, 106, 107, 7, 27, 2, 2, 107, 108, 5, 18, 10, 2, 108, 109, 7, 28, 2, 2, 109, 112, 5, 18, 10, 2, 110, 111, 7, 29, 2, 2, 111, 113, 5, 18, 10, 2, 112, 110, 3, 2, 2, 2, 112, 113, 3, 2, 2, 2, 113, 114, 3, 2, 2, 2, 114, 115, 5, 14, 8, 2, 115, 136, 3, 2, 2, 2, 116, 117, 7, 30, 2, 2, 117, 118, 7, 67, 2, 2, 118, 124, 7, 31, 2, 2, 119, 120, 5, 12, 7, 2, 120, 121, 7, 21, 2, 2, 121, 123, 3, 2, 2, 2, 122, 119, 3, 2, 2, 2, 123, 126, 3, 2, 2, 2, 124, 122, 3, 2, 2, 2, 124, 125, 3, 2, 2, 2, 125, 128, 3, 2, 2, 2, 126, 124, 3, 2, 2, 2, 127, 129, 5, 12, 7, 2, 128, 127, 3, 2, 2, 2, 128, 129, 3, 2, 2, 2, 129, 130, 3, 2, 2, 2, 130, 132, 7, 32, 2, 2, 131, 133, 5, 26, 14, 2, 132, 131, 3, 2, 2, 2, 132, 133, 3, 2, 2, 2, 133, 134, 3, 2, 2, 2, 134, 136, 5, 16, 9, 2, 135, 82, 3, 2, 2, 2, 135, 98, 3, 2, 2, 2, 135, 102, 3, 2, 2, 2, 135, 106, 3, 2, 2, 2, 135, 116, 3, 2, 2, 2, 136, 11, 3, 2, 2, 2, 137, 138, 5, 26, 14, 2, 138, 141, 7, 67, 2, 2, 139, 140, 7, 33, 2, 2, 140, 142, 5, 20, 11, 2, 141, 139, 3, 2, 2, 2, 141, 142, 3, 2, 2, 2, 142, 13, 3, 2, 2, 2, 143, 144, 7, 34, 2, 2, 144, 146, 7, 35, 2, 2, 145, 147, 5, 4, 3, 2, 146, 145, 3, 2, 2, 2, 147, 148, 3, 2, 2, 2, 148, 146, 3, 2, 2, 2, 148, 149, 3, 2, 2, 2, 149, 150, 3, 2, 2, 2, 150, 151, 7, 36, 2, 2, 151, 15, 3, 2, 2, 2, 152, 153, 7, 37, 2, 2, 153, 155, 7, 35, 2, 2, 154, 156, 5, 4, 3, 2, 155, 154, 3, 2, 2, 2, 156, 157, 3, 2, 2, 2, 157, 155, 3, 2, 2, 2, 157, 158, 3, 2, 2, 2, 158, 159, 3, 2, 2, 2, 159, 160, 7, 36, 2, 2, 160, 17, 3, 2, 2, 2, 161, 162, 5, 20, 11, 2, 162, 163, 7, 21, 2, 2, 163, 165, 3, 2, 2, 2, 164, 161, 3, 2, 2, 2, 165, 168, 3, 2, 2, 2, 166, 164, 3, 2, 2, 2, 166, 167, 3, 2, 2, 2, 167, 169, 3, 2, 2, 2, 168, 166, 3, 2, 2, 2, 169, 170, 5, 20, 11, 2, 170, 19, 3, 2, 2, 2, 171, 172, 8, 11, 1, 2, 172, 182, 5, 24, 13, 2, 173, 174, 7, 31, 2, 2, 174, 175, 5, 18, 10, 2, 175, 176, 7, 32, 2, 2, 176, 182, 3, 2, 2, 2, 177, 178, 9, 4, 2, 2, 178, 182, 5, 20, 11, 16, 179, 180, 7, 50, 2, 2, 180, 182, 5, 20, 11, 6, 181, 171, 3, 2, 2, 2, 181, 173, 3, 2, 2, 2, 181, 177, 3, 2, 2, 2, 181, 179, 3, 2, 2, 2, 182, 248, 3, 2, 2, 2, 183, 184, 12, 17, 2, 2, 184, 185, 7, 7, 2, 2, 185, 247, 5, 20, 11, 17, 186, 187, 12, 15, 2, 2, 187, 188, 9, 5, 2, 2, 188, 247, 5, 20, 11, 16, 189, 190, 12, 14, 2, 2, 190, 191, 9, 6, 2, 2, 191, 247, 5, 20, 11, 15, 192, 193, 12, 13, 2, 2, 193, 194, 9, 7, 2, 2, 194, 247, 5, 20, 11, 14, 195, 196, 12, 12, 2, 2, 196, 197, 7, 15, 2, 2, 197, 247, 5, 20, 11, 13, 198, 199, 12, 11, 2, 2, 199, 200, 7, 16, 2, 2, 200, 247, 5, 20, 11, 12, 201, 202, 12, 10, 2, 2, 202, 203, 7, 17, 2, 2, 203, 247, 5, 20, 11, 11, 204, 205, 12, 9, 2, 2, 205, 206, 9, 8, 2, 2, 206, 247, 5, 20, 11, 10, 207, 208, 12, 7, 2, 2, 208, 209, 9, 9, 2, 2, 209, 247, 5, 20, 11, 7, 210, 211, 12, 5, 2, 2, 211, 212, 7, 51, 2, 2, 212, 247, 5, 20, 11, 5, 213, 214, 12, 4, 2, 2, 214, 215, 7, 52, 2, 2, 215, 247, 5, 20, 11, 4, 216, 217, 12, 3, 2, 2, 217, 218, 7, 53, 2, 2, 218, 219, 5, 20, 11, 2, 219, 220, 7, 33, 2, 2, 220, 221, 5, 20, 11, 3, 221, 247, 3, 2, 2, 2, 222, 223, 12, 20, 2, 2, 223, 224, 7, 38, 2, 2, 224, 225, 5, 20, 11, 2, 225, 226, 7, 39, 2, 2, 226, 247, 3, 2, 2, 2, 227, 228, 12, 19, 2, 2, 228, 229, 7, 40, 2, 2, 229, 247, 7, 67, 2, 2, 230, 231, 12, 18, 2, 2, 231, 237, 7, 31, 2, 2, 232, 233, 5, 22, 12, 2, 233, 234, 7, 21, 2, 2, 234, 236, 3, 2, 2, 2, 235, 232, 3, 2, 2, 2, 236, 239, 3, 2, 2, 2, 237, 235, 3, 2, 2, 2, 237, 238, 3, 2, 2, 2, 238, 241, 3, 2, 2, 2, 239, 237, 3, 2, 2, 2, 240, 242, 5, 22, 12, 2, 241, 240, 3, 2, 2, 2, 241, 242, 3, 2, 2, 2, 242, 243, 3, 2, 2, 2, 243, 247, 7, 32, 2, 2, 244, 245, 12, 8, 2, 2, 245, 247, 7, 43, 2, 2, 246, 183, 3, 2, 2, 2, 246, 186, 3, 2, 2, 2, 246, 189, 3, 2, 2, 2, 246, 192, 3, 2, 2, 2, 246, 195, 3, 2, 2, 2, 246, 198, 3, 2, 2, 2, 246, 201, 3, 2, 2, 2, 246, 204, 3, 2, 2, 2, 246, 207, 3, 2, 2, 2, 246, 210, 3, 2, 2, 2, 246, 213, 3, 2, 2, 2, 246, 216, 3, 2, 2, 2, 246, 222, 3, 2, 2, 2, 246, 227, 3, 2, 2, 2, 246, 230, 3, 2, 2, 2, 246, 244, 3, 2, 2, 2, 247, 250, 3, 2, 2, 2, 248, 246, 3, 2, 2, 2, 248, 249, 3, 2, 2, 2, 249, 21, 3, 2, 2, 2, 250, 248, 3, 2, 2, 2, 251, 252, 7, 67, 2, 2, 252, 254, 7, 6, 2, 2, 253, 251, 3, 2, 2, 2, 253, 254, 3, 2, 2, 2, 254, 255, 3, 2, 2, 2, 255, 256, 5, 20, 11, 2, 256, 23, 3, 2, 2, 2, 257, 277, 7, 63, 2, 2, 258, 277, 7, 64, 2, 2, 259, 277, 9, 10, 2, 2, 260, 277, 7, 65, 2, 2, 261, 277, 7, 66, 2, 2, 262, 268, 7, 38, 2, 2, 263, 264, 5, 20, 11, 2, 264, 265, 7, 21, 2, 2, 265, 267, 3, 2, 2, 2, 266, 263, 3, 2, 2, 2, 267, 270, 3, 2, 2, 2, 268, 266, 3, 2, 2, 2, 268, 269, 3, 2, 2, 2, 269, 272, 3, 2, 2, 2, 270, 268, 3, 2, 2, 2, 271, 273, 5, 20, 11, 2, 272, 271, 3, 2, 2, 2, 272, 273, 3, 2, 2, 2, 273, 274, 3, 2, 2, 2, 274, 277, 7, 39, 2, 2, 275, 277, 7, 67, 2, 2, 276, 257, 3, 2, 2, 2, 276, 258, 3, 2, 2, 2, 276, 259, 3, 2, 2, 2, 276, 260, 3, 2, 2, 2, 276, 261, 3, 2, 2, 2, 276, 262, 3, 2, 2, 2, 276, 275, 3, 2, 2, 2, 277, 25, 3, 2, 2, 2, 278, 279, 8, 14, 1, 2, 279, 296, 7, 56, 2, 2, 280, 296, 7, 57, 2, 2, 281, 296, 7, 58, 2, 2, 282, 296, 7, 59, 2, 2, 283, 296, 7, 60, 2, 2, 284, 296, 7, 61, 2, 2, 285, 286, 7, 31, 2, 2, 286, 287, 5, 26, 14, 2, 287, 288, 7, 32, 2, 2, 288, 296, 3, 2, 2, 2, 289, 290, 7, 38, 2, 2, 290, 291, 5, 26, 14, 2, 291, 292, 7, 39, 2, 2, 292, 296, 3, 2, 2, 2, 293, 294, 7, 62, 2, 2, 294, 296, 5, 26, 14, 3, 295, 278, 3, 2, 2, 2, 295, 280, 3, 2, 2, 2, 295, 281, 3, 2, 2, 2, 295, 282, 3, 2, 2, 2, 295, 283, 3, 2, 2, 2, 295, 284, 3, 2, 2, 2, 295, 285, 3, 2, 2, 2, 295, 289, 3, 2, 2, 2, 295, 293, 3, 2, 2, 2, 296, 305, 3, 2, 2, 2, 297, 298, 12, 5, 2, 2, 298, 299, 7, 8, 2, 2, 299, 304, 5, 26, 14, 5, 300, 301, 12, 4, 2, 2, 301, 302, 7, 62, 2, 2, 302, 304, 5, 26, 14, 4, 303, 297, 3, 2, 2, 2, 303, 300, 3, 2, 2, 2, 304, 307, 3, 2, 2, 2, 305, 303, 3, 2, 2, 2, 305, 306, 3, 2, 2, 2, 306, 27, 3, 2, 2, 2, 307, 305, 3, 2, 2, 2, 33, 31, 40, 45, 51, 58, 70, 72, 79, 91, 96, 112, 124, 128, 132, 135, 141, 148, 157, 166, 181, 237, 241, 246, 248, 253, 268, 272, 276, 295, 303, 305] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 71, 308, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 3, 2, 7, 2, 30, 10, 2, 12, 2, 14, 2, 33, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 41, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 46, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 52, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 57, 10, 4, 12, 4, 14, 4, 60, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 71, 10, 4, 5, 4, 73, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 78, 10, 5, 12, 5, 14, 5, 81, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 90, 10, 6, 12, 6, 14, 6, 93, 11, 6, 3, 6, 3, 6, 5, 6, 97, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 113, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 123, 10, 6, 12, 6, 14, 6, 126, 11, 6, 3, 6, 5, 6, 129, 10, 6, 3, 6, 3, 6, 5, 6, 133, 10, 6, 3, 6, 3, 6, 3, 6, 5, 6, 138, 10, 6, 5, 6, 140, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 146, 10, 7, 3, 8, 3, 8, 3, 8, 6, 8, 151, 10, 8, 13, 8, 14, 8, 152, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 6, 9, 160, 10, 9, 13, 9, 14, 9, 161, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 7, 10, 169, 10, 10, 12, 10, 14, 10, 172, 11, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 186, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 240, 10, 11, 12, 11, 14, 11, 243, 11, 11, 3, 11, 5, 11, 246, 10, 11, 3, 11, 3, 11, 3, 11, 7, 11, 251, 10, 11, 12, 11, 14, 11, 254, 11, 11, 3, 12, 3, 12, 5, 12, 258, 10, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 7, 13, 271, 10, 13, 12, 13, 14, 13, 274, 11, 13, 3, 13, 5, 13, 277, 10, 13, 3, 13, 3, 13, 5, 13, 281, 10, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 295, 10, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 7, 14, 303, 10, 14, 12, 14, 14, 14, 306, 11, 14, 3, 14, 2, 4, 20, 26, 15, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 2, 12, 3, 2, 7, 17, 3, 2, 18, 19, 4, 2, 11, 12, 42, 42, 3, 2, 8, 10, 3, 2, 11, 12, 3, 2, 13, 14, 3, 2, 43, 44, 3, 2, 45, 50, 3, 2, 55, 56, 3, 2, 57, 62, 2, 357, 2, 31, 3, 2, 2, 2, 4, 40, 3, 2, 2, 2, 6, 72, 3, 2, 2, 2, 8, 74, 3, 2, 2, 2, 10, 139, 3, 2, 2, 2, 12, 141, 3, 2, 2, 2, 14, 147, 3, 2, 2, 2, 16, 156, 3, 2, 2, 2, 18, 170, 3, 2, 2, 2, 20, 185, 3, 2, 2, 2, 22, 257, 3, 2, 2, 2, 24, 280, 3, 2, 2, 2, 26, 294, 3, 2, 2, 2, 28, 30, 5, 4, 3, 2, 29, 28, 3, 2, 2, 2, 30, 33, 3, 2, 2, 2, 31, 29, 3, 2, 2, 2, 31, 32, 3, 2, 2, 2, 32, 34, 3, 2, 2, 2, 33, 31, 3, 2, 2, 2, 34, 35, 7, 2, 2, 3, 35, 3, 3, 2, 2, 2, 36, 37, 5, 6, 4, 2, 37, 38, 7, 3, 2, 2, 38, 41, 3, 2, 2, 2, 39, 41, 5, 10, 6, 2, 40, 36, 3, 2, 2, 2, 40, 39, 3, 2, 2, 2, 41, 5, 3, 2, 2, 2, 42, 73, 7, 4, 2, 2, 43, 45, 7, 5, 2, 2, 44, 46, 5, 18, 10, 2, 45, 44, 3, 2, 2, 2, 45, 46, 3, 2, 2, 2, 46, 73, 3, 2, 2, 2, 47, 48, 5, 26, 14, 2, 48, 51, 7, 68, 2, 2, 49, 50, 7, 6, 2, 2, 50, 52, 5, 18, 10, 2, 51, 49, 3, 2, 2, 2, 51, 52, 3, 2, 2, 2, 52, 73, 3, 2, 2, 2, 53, 54, 5, 8, 5, 2, 54, 55, 7, 6, 2, 2, 55, 57, 3, 2, 2, 2, 56, 53, 3, 2, 2, 2, 57, 60, 3, 2, 2, 2, 58, 56, 3, 2, 2, 2, 58, 59, 3, 2, 2, 2, 59, 61, 3, 2, 2, 2, 60, 58, 3, 2, 2, 2, 61, 73, 5, 18, 10, 2, 62, 63, 5, 20, 11, 2, 63, 64, 9, 2, 2, 2, 64, 65, 7, 6, 2, 2, 65, 66, 5, 20, 11, 2, 66, 73, 3, 2, 2, 2, 67, 73, 9, 3, 2, 2, 68, 70, 7, 20, 2, 2, 69, 71, 5, 18, 10, 2, 70, 69, 3, 2, 2, 2, 70, 71, 3, 2, 2, 2, 71, 73, 3, 2, 2, 2, 72, 42, 3, 2, 2, 2, 72, 43, 3, 2, 2, 2, 72, 47, 3, 2, 2, 2, 72, 58, 3, 2, 2, 2, 72, 62, 3, 2, 2, 2, 72, 67, 3, 2, 2, 2, 72, 68, 3, 2, 2, 2, 73, 7, 3, 2, 2, 2, 74, 79, 5, 20, 11, 2, 75, 76, 7, 21, 2, 2, 76, 78, 5, 20, 11, 2, 77, 75, 3, 2, 2, 2, 78, 81, 3, 2, 2, 2, 79, 77, 3, 2, 2, 2, 79, 80, 3, 2, 2, 2, 80, 9, 3, 2, 2, 2, 81, 79, 3, 2, 2, 2, 82, 83, 7, 22, 2, 2, 83, 84, 5, 20, 11, 2, 84, 91, 5, 14, 8, 2, 85, 86, 7, 23, 2, 2, 86, 87, 5, 20, 11, 2, 87, 88, 5, 14, 8, 2, 88, 90, 3, 2, 2, 2, 89, 85, 3, 2, 2, 2, 90, 93, 3, 2, 2, 2, 91, 89, 3, 2, 2, 2, 91, 92, 3, 2, 2, 2, 92, 96, 3, 2, 2, 2, 93, 91, 3, 2, 2, 2, 94, 95, 7, 24, 2, 2, 95, 97, 5, 14, 8, 2, 96, 94, 3, 2, 2, 2, 96, 97, 3, 2, 2, 2, 97, 140, 3, 2, 2, 2, 98, 99, 7, 25, 2, 2, 99, 100, 5, 20, 11, 2, 100, 101, 5, 14, 8, 2, 101, 140, 3, 2, 2, 2, 102, 103, 7, 26, 2, 2, 103, 104, 5, 20, 11, 2, 104, 105, 5, 14, 8, 2, 105, 140, 3, 2, 2, 2, 106, 107, 7, 27, 2, 2, 107, 108, 5, 18, 10, 2, 108, 109, 7, 28, 2, 2, 109, 112, 5, 18, 10, 2, 110, 111, 7, 29, 2, 2, 111, 113, 5, 18, 10, 2, 112, 110, 3, 2, 2, 2, 112, 113, 3, 2, 2, 2, 113, 114, 3, 2, 2, 2, 114, 115, 5, 14, 8, 2, 115, 140, 3, 2, 2, 2, 116, 117, 7, 30, 2, 2, 117, 118, 7, 68, 2, 2, 118, 124, 7, 31, 2, 2, 119, 120, 5, 12, 7, 2, 120, 121, 7, 21, 2, 2, 121, 123, 3, 2, 2, 2, 122, 119, 3, 2, 2, 2, 123, 126, 3, 2, 2, 2, 124, 122, 3, 2, 2, 2, 124, 125, 3, 2, 2, 2, 125, 128, 3, 2, 2, 2, 126, 124, 3, 2, 2, 2, 127, 129, 5, 12, 7, 2, 128, 127, 3, 2, 2, 2, 128, 129, 3, 2, 2, 2, 129, 130, 3, 2, 2, 2, 130, 132, 7, 32, 2, 2, 131, 133, 5, 26, 14, 2, 132, 131, 3, 2, 2, 2, 132, 133, 3, 2, 2, 2, 133, 137, 3, 2, 2, 2, 134, 138, 5, 16, 9, 2, 135, 136, 7, 33, 2, 2, 136, 138, 7, 3, 2, 2, 137, 134, 3, 2, 2, 2, 137, 135, 3, 2, 2, 2, 138, 140, 3, 2, 2, 2, 139, 82, 3, 2, 2, 2, 139, 98, 3, 2, 2, 2, 139, 102, 3, 2, 2, 2, 139, 106, 3, 2, 2, 2, 139, 116, 3, 2, 2, 2, 140, 11, 3, 2, 2, 2, 141, 142, 5, 26, 14, 2, 142, 145, 7, 68, 2, 2, 143, 144, 7, 34, 2, 2, 144, 146, 5, 20, 11, 2, 145, 143, 3, 2, 2, 2, 145, 146, 3, 2, 2, 2, 146, 13, 3, 2, 2, 2, 147, 148, 7, 35, 2, 2, 148, 150, 7, 36, 2, 2, 149, 151, 5, 4, 3, 2, 150, 149, 3, 2, 2, 2, 151, 152, 3, 2, 2, 2, 152, 150, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 154, 3, 2, 2, 2, 154, 155, 7, 37, 2, 2, 155, 15, 3, 2, 2, 2, 156, 157, 7, 38, 2, 2, 157, 159, 7, 36, 2, 2, 158, 160, 5, 4, 3, 2, 159, 158, 3, 2, 2, 2, 160, 161, 3, 2, 2, 2, 161, 159, 3, 2, 2, 2, 161, 162, 3, 2, 2, 2, 162, 163, 3, 2, 2, 2, 163, 164, 7, 37, 2, 2, 164, 17, 3, 2, 2, 2, 165, 166, 5, 20, 11, 2, 166, 167, 7, 21, 2, 2, 167, 169, 3, 2, 2, 2, 168, 165, 3, 2, 2, 2, 169, 172, 3, 2, 2, 2, 170, 168, 3, 2, 2, 2, 170, 171, 3, 2, 2, 2, 171, 173, 3, 2, 2, 2, 172, 170, 3, 2, 2, 2, 173, 174, 5, 20, 11, 2, 174, 19, 3, 2, 2, 2, 175, 176, 8, 11, 1, 2, 176, 186, 5, 24, 13, 2, 177, 178, 7, 31, 2, 2, 178, 179, 5, 18, 10, 2, 179, 180, 7, 32, 2, 2, 180, 186, 3, 2, 2, 2, 181, 182, 9, 4, 2, 2, 182, 186, 5, 20, 11, 16, 183, 184, 7, 51, 2, 2, 184, 186, 5, 20, 11, 6, 185, 175, 3, 2, 2, 2, 185, 177, 3, 2, 2, 2, 185, 181, 3, 2, 2, 2, 185, 183, 3, 2, 2, 2, 186, 252, 3, 2, 2, 2, 187, 188, 12, 17, 2, 2, 188, 189, 7, 7, 2, 2, 189, 251, 5, 20, 11, 17, 190, 191, 12, 15, 2, 2, 191, 192, 9, 5, 2, 2, 192, 251, 5, 20, 11, 16, 193, 194, 12, 14, 2, 2, 194, 195, 9, 6, 2, 2, 195, 251, 5, 20, 11, 15, 196, 197, 12, 13, 2, 2, 197, 198, 9, 7, 2, 2, 198, 251, 5, 20, 11, 14, 199, 200, 12, 12, 2, 2, 200, 201, 7, 15, 2, 2, 201, 251, 5, 20, 11, 13, 202, 203, 12, 11, 2, 2, 203, 204, 7, 16, 2, 2, 204, 251, 5, 20, 11, 12, 205, 206, 12, 10, 2, 2, 206, 207, 7, 17, 2, 2, 207, 251, 5, 20, 11, 11, 208, 209, 12, 9, 2, 2, 209, 210, 9, 8, 2, 2, 210, 251, 5, 20, 11, 10, 211, 212, 12, 7, 2, 2, 212, 213, 9, 9, 2, 2, 213, 251, 5, 20, 11, 7, 214, 215, 12, 5, 2, 2, 215, 216, 7, 52, 2, 2, 216, 251, 5, 20, 11, 5, 217, 218, 12, 4, 2, 2, 218, 219, 7, 53, 2, 2, 219, 251, 5, 20, 11, 4, 220, 221, 12, 3, 2, 2, 221, 222, 7, 54, 2, 2, 222, 223, 5, 20, 11, 2, 223, 224, 7, 34, 2, 2, 224, 225, 5, 20, 11, 3, 225, 251, 3, 2, 2, 2, 226, 227, 12, 20, 2, 2, 227, 228, 7, 39, 2, 2, 228, 229, 5, 20, 11, 2, 229, 230, 7, 40, 2, 2, 230, 251, 3, 2, 2, 2, 231, 232, 12, 19, 2, 2, 232, 233, 7, 41, 2, 2, 233, 251, 7, 68, 2, 2, 234, 235, 12, 18, 2, 2, 235, 241, 7, 31, 2, 2, 236, 237, 5, 22, 12, 2, 237, 238, 7, 21, 2, 2, 238, 240, 3, 2, 2, 2, 239, 236, 3, 2, 2, 2, 240, 243, 3, 2, 2, 2, 241, 239, 3, 2, 2, 2, 241, 242, 3, 2, 2, 2, 242, 245, 3, 2, 2, 2, 243, 241, 3, 2, 2, 2, 244, 246, 5, 22, 12, 2, 245, 244, 3, 2, 2, 2, 245, 246, 3, 2, 2, 2, 246, 247, 3, 2, 2, 2, 247, 251, 7, 32, 2, 2, 248, 249, 12, 8, 2, 2, 249, 251, 7, 44, 2, 2, 250, 187, 3, 2, 2, 2, 250, 190, 3, 2, 2, 2, 250, 193, 3, 2, 2, 2, 250, 196, 3, 2, 2, 2, 250, 199, 3, 2, 2, 2, 250, 202, 3, 2, 2, 2, 250, 205, 3, 2, 2, 2, 250, 208, 3, 2, 2, 2, 250, 211, 3, 2, 2, 2, 250, 214, 3, 2, 2, 2, 250, 217, 3, 2, 2, 2, 250, 220, 3, 2, 2, 2, 250, 226, 3, 2, 2, 2, 250, 231, 3, 2, 2, 2, 250, 234, 3, 2, 2, 2, 250, 248, 3, 2, 2, 2, 251, 254, 3, 2, 2, 2, 252, 250, 3, 2, 2, 2, 252, 253, 3, 2, 2, 2, 253, 21, 3, 2, 2, 2, 254, 252, 3, 2, 2, 2, 255, 256, 7, 68, 2, 2, 256, 258, 7, 6, 2, 2, 257, 255, 3, 2, 2, 2, 257, 258, 3, 2, 2, 2, 258, 259, 3, 2, 2, 2, 259, 260, 5, 20, 11, 2, 260, 23, 3, 2, 2, 2, 261, 281, 7, 64, 2, 2, 262, 281, 7, 65, 2, 2, 263, 281, 9, 10, 2, 2, 264, 281, 7, 66, 2, 2, 265, 281, 7, 67, 2, 2, 266, 272, 7, 39, 2, 2, 267, 268, 5, 20, 11, 2, 268, 269, 7, 21, 2, 2, 269, 271, 3, 2, 2, 2, 270, 267, 3, 2, 2, 2, 271, 274, 3, 2, 2, 2, 272, 270, 3, 2, 2, 2, 272, 273, 3, 2, 2, 2, 273, 276, 3, 2, 2, 2, 274, 272, 3, 2, 2, 2, 275, 277, 5, 20, 11, 2, 276, 275, 3, 2, 2, 2, 276, 277, 3, 2, 2, 2, 277, 278, 3, 2, 2, 2, 278, 281, 7, 40, 2, 2, 279, 281, 7, 68, 2, 2, 280, 261, 3, 2, 2, 2, 280, 262, 3, 2, 2, 2, 280, 263, 3, 2, 2, 2, 280, 264, 3, 2, 2, 2, 280, 265, 3, 2, 2, 2, 280, 266, 3, 2, 2, 2, 280, 279, 3, 2, 2, 2, 281, 25, 3, 2, 2, 2, 282, 283, 8, 14, 1, 2, 283, 295, 9, 11, 2, 2, 284, 285, 7, 31, 2, 2, 285, 286, 5, 26, 14, 2, 286, 287, 7, 32, 2, 2, 287, 295, 3, 2, 2, 2, 288, 289, 7, 39, 2, 2, 289, 290, 5, 26, 14, 2, 290, 291, 7, 40, 2, 2, 291, 295, 3, 2, 2, 2, 292, 293, 7, 63, 2, 2, 293, 295, 5, 26, 14, 3, 294, 282, 3, 2, 2, 2, 294, 284, 3, 2, 2, 2, 294, 288, 3, 2, 2, 2, 294, 292, 3, 2, 2, 2, 295, 304, 3, 2, 2, 2, 296, 297, 12, 5, 2, 2, 297, 298, 7, 8, 2, 2, 298, 303, 5, 26, 14, 5, 299, 300, 12, 4, 2, 2, 300, 301, 7, 63, 2, 2, 301, 303, 5, 26, 14, 4, 302, 296, 3, 2, 2, 2, 302, 299, 3, 2, 2, 2, 303, 306, 3, 2, 2, 2, 304, 302, 3, 2, 2, 2, 304, 305, 3, 2, 2, 2, 305, 27, 3, 2, 2, 2, 306, 304, 3, 2, 2, 2, 34, 31, 40, 45, 51, 58, 70, 72, 79, 91, 96, 112, 124, 128, 132, 137, 139, 145, 152, 161, 170, 185, 241, 245, 250, 252, 257, 272, 276, 280, 294, 302, 304] \ No newline at end of file diff --git a/src/antlr/Pyxell.tokens b/src/antlr/Pyxell.tokens index 2b4922ee..0a7a727a 100644 --- a/src/antlr/Pyxell.tokens +++ b/src/antlr/Pyxell.tokens @@ -58,14 +58,15 @@ T__56=57 T__57=58 T__58=59 T__59=60 -INT=61 -FLOAT=62 -CHAR=63 -STRING=64 -ID=65 -COMMENT=66 -WS=67 -ERR=68 +T__60=61 +INT=62 +FLOAT=63 +CHAR=64 +STRING=65 +ID=66 +COMMENT=67 +WS=68 +ERR=69 ';'=1 'skip'=2 'print'=3 @@ -96,33 +97,34 @@ ERR=68 'func'=28 '('=29 ')'=30 -':'=31 -'do'=32 -'{'=33 -'}'=34 -'def'=35 -'['=36 -']'=37 -'.'=38 -'~'=39 -'..'=40 -'...'=41 -'=='=42 -'!='=43 -'<'=44 -'<='=45 -'>'=46 -'>='=47 -'not'=48 -'and'=49 -'or'=50 -'?'=51 -'true'=52 -'false'=53 -'Void'=54 -'Int'=55 -'Float'=56 -'Bool'=57 -'Char'=58 -'String'=59 -'->'=60 +'extern'=31 +':'=32 +'do'=33 +'{'=34 +'}'=35 +'def'=36 +'['=37 +']'=38 +'.'=39 +'~'=40 +'..'=41 +'...'=42 +'=='=43 +'!='=44 +'<'=45 +'<='=46 +'>'=47 +'>='=48 +'not'=49 +'and'=50 +'or'=51 +'?'=52 +'true'=53 +'false'=54 +'Void'=55 +'Int'=56 +'Float'=57 +'Bool'=58 +'Char'=59 +'String'=60 +'->'=61 diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp index ee66675c..cc106cad 100644 --- a/src/antlr/PyxellLexer.interp +++ b/src/antlr/PyxellLexer.interp @@ -30,6 +30,7 @@ null 'func' '(' ')' +'extern' ':' 'do' '{' @@ -131,6 +132,7 @@ null null null null +null INT FLOAT CHAR @@ -201,6 +203,7 @@ T__56 T__57 T__58 T__59 +T__60 INT FLOAT CHAR @@ -221,4 +224,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 70, 442, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 62, 6, 62, 359, 10, 62, 13, 62, 14, 62, 360, 3, 63, 6, 63, 364, 10, 63, 13, 63, 14, 63, 365, 3, 63, 3, 63, 6, 63, 370, 10, 63, 13, 63, 14, 63, 371, 3, 63, 3, 63, 5, 63, 376, 10, 63, 3, 63, 6, 63, 379, 10, 63, 13, 63, 14, 63, 380, 5, 63, 383, 10, 63, 3, 64, 3, 64, 3, 64, 3, 64, 7, 64, 389, 10, 64, 12, 64, 14, 64, 392, 11, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 7, 65, 400, 10, 65, 12, 65, 14, 65, 403, 11, 65, 3, 65, 3, 65, 3, 66, 3, 66, 7, 66, 409, 10, 66, 12, 66, 14, 66, 412, 11, 66, 3, 67, 3, 67, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 5, 69, 421, 10, 69, 3, 70, 3, 70, 3, 70, 3, 70, 7, 70, 427, 10, 70, 12, 70, 14, 70, 430, 11, 70, 3, 70, 3, 70, 3, 71, 6, 71, 435, 10, 71, 13, 71, 14, 71, 436, 3, 71, 3, 71, 3, 72, 3, 72, 2, 2, 73, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 2, 135, 2, 137, 2, 139, 68, 141, 69, 143, 70, 3, 2, 11, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 4, 2, 12, 12, 14, 15, 5, 2, 11, 12, 15, 15, 34, 34, 2, 453, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 3, 145, 3, 2, 2, 2, 5, 147, 3, 2, 2, 2, 7, 152, 3, 2, 2, 2, 9, 158, 3, 2, 2, 2, 11, 160, 3, 2, 2, 2, 13, 162, 3, 2, 2, 2, 15, 164, 3, 2, 2, 2, 17, 166, 3, 2, 2, 2, 19, 168, 3, 2, 2, 2, 21, 170, 3, 2, 2, 2, 23, 172, 3, 2, 2, 2, 25, 175, 3, 2, 2, 2, 27, 178, 3, 2, 2, 2, 29, 180, 3, 2, 2, 2, 31, 182, 3, 2, 2, 2, 33, 184, 3, 2, 2, 2, 35, 190, 3, 2, 2, 2, 37, 199, 3, 2, 2, 2, 39, 206, 3, 2, 2, 2, 41, 208, 3, 2, 2, 2, 43, 211, 3, 2, 2, 2, 45, 216, 3, 2, 2, 2, 47, 221, 3, 2, 2, 2, 49, 227, 3, 2, 2, 2, 51, 233, 3, 2, 2, 2, 53, 237, 3, 2, 2, 2, 55, 240, 3, 2, 2, 2, 57, 245, 3, 2, 2, 2, 59, 250, 3, 2, 2, 2, 61, 252, 3, 2, 2, 2, 63, 254, 3, 2, 2, 2, 65, 256, 3, 2, 2, 2, 67, 259, 3, 2, 2, 2, 69, 261, 3, 2, 2, 2, 71, 263, 3, 2, 2, 2, 73, 267, 3, 2, 2, 2, 75, 269, 3, 2, 2, 2, 77, 271, 3, 2, 2, 2, 79, 273, 3, 2, 2, 2, 81, 275, 3, 2, 2, 2, 83, 278, 3, 2, 2, 2, 85, 282, 3, 2, 2, 2, 87, 285, 3, 2, 2, 2, 89, 288, 3, 2, 2, 2, 91, 290, 3, 2, 2, 2, 93, 293, 3, 2, 2, 2, 95, 295, 3, 2, 2, 2, 97, 298, 3, 2, 2, 2, 99, 302, 3, 2, 2, 2, 101, 306, 3, 2, 2, 2, 103, 309, 3, 2, 2, 2, 105, 311, 3, 2, 2, 2, 107, 316, 3, 2, 2, 2, 109, 322, 3, 2, 2, 2, 111, 327, 3, 2, 2, 2, 113, 331, 3, 2, 2, 2, 115, 337, 3, 2, 2, 2, 117, 342, 3, 2, 2, 2, 119, 347, 3, 2, 2, 2, 121, 354, 3, 2, 2, 2, 123, 358, 3, 2, 2, 2, 125, 363, 3, 2, 2, 2, 127, 384, 3, 2, 2, 2, 129, 395, 3, 2, 2, 2, 131, 406, 3, 2, 2, 2, 133, 413, 3, 2, 2, 2, 135, 415, 3, 2, 2, 2, 137, 420, 3, 2, 2, 2, 139, 422, 3, 2, 2, 2, 141, 434, 3, 2, 2, 2, 143, 440, 3, 2, 2, 2, 145, 146, 7, 61, 2, 2, 146, 4, 3, 2, 2, 2, 147, 148, 7, 117, 2, 2, 148, 149, 7, 109, 2, 2, 149, 150, 7, 107, 2, 2, 150, 151, 7, 114, 2, 2, 151, 6, 3, 2, 2, 2, 152, 153, 7, 114, 2, 2, 153, 154, 7, 116, 2, 2, 154, 155, 7, 107, 2, 2, 155, 156, 7, 112, 2, 2, 156, 157, 7, 118, 2, 2, 157, 8, 3, 2, 2, 2, 158, 159, 7, 63, 2, 2, 159, 10, 3, 2, 2, 2, 160, 161, 7, 96, 2, 2, 161, 12, 3, 2, 2, 2, 162, 163, 7, 44, 2, 2, 163, 14, 3, 2, 2, 2, 164, 165, 7, 49, 2, 2, 165, 16, 3, 2, 2, 2, 166, 167, 7, 39, 2, 2, 167, 18, 3, 2, 2, 2, 168, 169, 7, 45, 2, 2, 169, 20, 3, 2, 2, 2, 170, 171, 7, 47, 2, 2, 171, 22, 3, 2, 2, 2, 172, 173, 7, 62, 2, 2, 173, 174, 7, 62, 2, 2, 174, 24, 3, 2, 2, 2, 175, 176, 7, 64, 2, 2, 176, 177, 7, 64, 2, 2, 177, 26, 3, 2, 2, 2, 178, 179, 7, 40, 2, 2, 179, 28, 3, 2, 2, 2, 180, 181, 7, 38, 2, 2, 181, 30, 3, 2, 2, 2, 182, 183, 7, 126, 2, 2, 183, 32, 3, 2, 2, 2, 184, 185, 7, 100, 2, 2, 185, 186, 7, 116, 2, 2, 186, 187, 7, 103, 2, 2, 187, 188, 7, 99, 2, 2, 188, 189, 7, 109, 2, 2, 189, 34, 3, 2, 2, 2, 190, 191, 7, 101, 2, 2, 191, 192, 7, 113, 2, 2, 192, 193, 7, 112, 2, 2, 193, 194, 7, 118, 2, 2, 194, 195, 7, 107, 2, 2, 195, 196, 7, 112, 2, 2, 196, 197, 7, 119, 2, 2, 197, 198, 7, 103, 2, 2, 198, 36, 3, 2, 2, 2, 199, 200, 7, 116, 2, 2, 200, 201, 7, 103, 2, 2, 201, 202, 7, 118, 2, 2, 202, 203, 7, 119, 2, 2, 203, 204, 7, 116, 2, 2, 204, 205, 7, 112, 2, 2, 205, 38, 3, 2, 2, 2, 206, 207, 7, 46, 2, 2, 207, 40, 3, 2, 2, 2, 208, 209, 7, 107, 2, 2, 209, 210, 7, 104, 2, 2, 210, 42, 3, 2, 2, 2, 211, 212, 7, 103, 2, 2, 212, 213, 7, 110, 2, 2, 213, 214, 7, 107, 2, 2, 214, 215, 7, 104, 2, 2, 215, 44, 3, 2, 2, 2, 216, 217, 7, 103, 2, 2, 217, 218, 7, 110, 2, 2, 218, 219, 7, 117, 2, 2, 219, 220, 7, 103, 2, 2, 220, 46, 3, 2, 2, 2, 221, 222, 7, 121, 2, 2, 222, 223, 7, 106, 2, 2, 223, 224, 7, 107, 2, 2, 224, 225, 7, 110, 2, 2, 225, 226, 7, 103, 2, 2, 226, 48, 3, 2, 2, 2, 227, 228, 7, 119, 2, 2, 228, 229, 7, 112, 2, 2, 229, 230, 7, 118, 2, 2, 230, 231, 7, 107, 2, 2, 231, 232, 7, 110, 2, 2, 232, 50, 3, 2, 2, 2, 233, 234, 7, 104, 2, 2, 234, 235, 7, 113, 2, 2, 235, 236, 7, 116, 2, 2, 236, 52, 3, 2, 2, 2, 237, 238, 7, 107, 2, 2, 238, 239, 7, 112, 2, 2, 239, 54, 3, 2, 2, 2, 240, 241, 7, 117, 2, 2, 241, 242, 7, 118, 2, 2, 242, 243, 7, 103, 2, 2, 243, 244, 7, 114, 2, 2, 244, 56, 3, 2, 2, 2, 245, 246, 7, 104, 2, 2, 246, 247, 7, 119, 2, 2, 247, 248, 7, 112, 2, 2, 248, 249, 7, 101, 2, 2, 249, 58, 3, 2, 2, 2, 250, 251, 7, 42, 2, 2, 251, 60, 3, 2, 2, 2, 252, 253, 7, 43, 2, 2, 253, 62, 3, 2, 2, 2, 254, 255, 7, 60, 2, 2, 255, 64, 3, 2, 2, 2, 256, 257, 7, 102, 2, 2, 257, 258, 7, 113, 2, 2, 258, 66, 3, 2, 2, 2, 259, 260, 7, 125, 2, 2, 260, 68, 3, 2, 2, 2, 261, 262, 7, 127, 2, 2, 262, 70, 3, 2, 2, 2, 263, 264, 7, 102, 2, 2, 264, 265, 7, 103, 2, 2, 265, 266, 7, 104, 2, 2, 266, 72, 3, 2, 2, 2, 267, 268, 7, 93, 2, 2, 268, 74, 3, 2, 2, 2, 269, 270, 7, 95, 2, 2, 270, 76, 3, 2, 2, 2, 271, 272, 7, 48, 2, 2, 272, 78, 3, 2, 2, 2, 273, 274, 7, 128, 2, 2, 274, 80, 3, 2, 2, 2, 275, 276, 7, 48, 2, 2, 276, 277, 7, 48, 2, 2, 277, 82, 3, 2, 2, 2, 278, 279, 7, 48, 2, 2, 279, 280, 7, 48, 2, 2, 280, 281, 7, 48, 2, 2, 281, 84, 3, 2, 2, 2, 282, 283, 7, 63, 2, 2, 283, 284, 7, 63, 2, 2, 284, 86, 3, 2, 2, 2, 285, 286, 7, 35, 2, 2, 286, 287, 7, 63, 2, 2, 287, 88, 3, 2, 2, 2, 288, 289, 7, 62, 2, 2, 289, 90, 3, 2, 2, 2, 290, 291, 7, 62, 2, 2, 291, 292, 7, 63, 2, 2, 292, 92, 3, 2, 2, 2, 293, 294, 7, 64, 2, 2, 294, 94, 3, 2, 2, 2, 295, 296, 7, 64, 2, 2, 296, 297, 7, 63, 2, 2, 297, 96, 3, 2, 2, 2, 298, 299, 7, 112, 2, 2, 299, 300, 7, 113, 2, 2, 300, 301, 7, 118, 2, 2, 301, 98, 3, 2, 2, 2, 302, 303, 7, 99, 2, 2, 303, 304, 7, 112, 2, 2, 304, 305, 7, 102, 2, 2, 305, 100, 3, 2, 2, 2, 306, 307, 7, 113, 2, 2, 307, 308, 7, 116, 2, 2, 308, 102, 3, 2, 2, 2, 309, 310, 7, 65, 2, 2, 310, 104, 3, 2, 2, 2, 311, 312, 7, 118, 2, 2, 312, 313, 7, 116, 2, 2, 313, 314, 7, 119, 2, 2, 314, 315, 7, 103, 2, 2, 315, 106, 3, 2, 2, 2, 316, 317, 7, 104, 2, 2, 317, 318, 7, 99, 2, 2, 318, 319, 7, 110, 2, 2, 319, 320, 7, 117, 2, 2, 320, 321, 7, 103, 2, 2, 321, 108, 3, 2, 2, 2, 322, 323, 7, 88, 2, 2, 323, 324, 7, 113, 2, 2, 324, 325, 7, 107, 2, 2, 325, 326, 7, 102, 2, 2, 326, 110, 3, 2, 2, 2, 327, 328, 7, 75, 2, 2, 328, 329, 7, 112, 2, 2, 329, 330, 7, 118, 2, 2, 330, 112, 3, 2, 2, 2, 331, 332, 7, 72, 2, 2, 332, 333, 7, 110, 2, 2, 333, 334, 7, 113, 2, 2, 334, 335, 7, 99, 2, 2, 335, 336, 7, 118, 2, 2, 336, 114, 3, 2, 2, 2, 337, 338, 7, 68, 2, 2, 338, 339, 7, 113, 2, 2, 339, 340, 7, 113, 2, 2, 340, 341, 7, 110, 2, 2, 341, 116, 3, 2, 2, 2, 342, 343, 7, 69, 2, 2, 343, 344, 7, 106, 2, 2, 344, 345, 7, 99, 2, 2, 345, 346, 7, 116, 2, 2, 346, 118, 3, 2, 2, 2, 347, 348, 7, 85, 2, 2, 348, 349, 7, 118, 2, 2, 349, 350, 7, 116, 2, 2, 350, 351, 7, 107, 2, 2, 351, 352, 7, 112, 2, 2, 352, 353, 7, 105, 2, 2, 353, 120, 3, 2, 2, 2, 354, 355, 7, 47, 2, 2, 355, 356, 7, 64, 2, 2, 356, 122, 3, 2, 2, 2, 357, 359, 5, 133, 67, 2, 358, 357, 3, 2, 2, 2, 359, 360, 3, 2, 2, 2, 360, 358, 3, 2, 2, 2, 360, 361, 3, 2, 2, 2, 361, 124, 3, 2, 2, 2, 362, 364, 5, 133, 67, 2, 363, 362, 3, 2, 2, 2, 364, 365, 3, 2, 2, 2, 365, 363, 3, 2, 2, 2, 365, 366, 3, 2, 2, 2, 366, 367, 3, 2, 2, 2, 367, 369, 7, 48, 2, 2, 368, 370, 5, 133, 67, 2, 369, 368, 3, 2, 2, 2, 370, 371, 3, 2, 2, 2, 371, 369, 3, 2, 2, 2, 371, 372, 3, 2, 2, 2, 372, 382, 3, 2, 2, 2, 373, 375, 7, 103, 2, 2, 374, 376, 7, 47, 2, 2, 375, 374, 3, 2, 2, 2, 375, 376, 3, 2, 2, 2, 376, 378, 3, 2, 2, 2, 377, 379, 5, 133, 67, 2, 378, 377, 3, 2, 2, 2, 379, 380, 3, 2, 2, 2, 380, 378, 3, 2, 2, 2, 380, 381, 3, 2, 2, 2, 381, 383, 3, 2, 2, 2, 382, 373, 3, 2, 2, 2, 382, 383, 3, 2, 2, 2, 383, 126, 3, 2, 2, 2, 384, 390, 7, 41, 2, 2, 385, 389, 10, 2, 2, 2, 386, 387, 7, 94, 2, 2, 387, 389, 9, 3, 2, 2, 388, 385, 3, 2, 2, 2, 388, 386, 3, 2, 2, 2, 389, 392, 3, 2, 2, 2, 390, 388, 3, 2, 2, 2, 390, 391, 3, 2, 2, 2, 391, 393, 3, 2, 2, 2, 392, 390, 3, 2, 2, 2, 393, 394, 7, 41, 2, 2, 394, 128, 3, 2, 2, 2, 395, 401, 7, 36, 2, 2, 396, 400, 10, 4, 2, 2, 397, 398, 7, 94, 2, 2, 398, 400, 9, 5, 2, 2, 399, 396, 3, 2, 2, 2, 399, 397, 3, 2, 2, 2, 400, 403, 3, 2, 2, 2, 401, 399, 3, 2, 2, 2, 401, 402, 3, 2, 2, 2, 402, 404, 3, 2, 2, 2, 403, 401, 3, 2, 2, 2, 404, 405, 7, 36, 2, 2, 405, 130, 3, 2, 2, 2, 406, 410, 5, 135, 68, 2, 407, 409, 5, 137, 69, 2, 408, 407, 3, 2, 2, 2, 409, 412, 3, 2, 2, 2, 410, 408, 3, 2, 2, 2, 410, 411, 3, 2, 2, 2, 411, 132, 3, 2, 2, 2, 412, 410, 3, 2, 2, 2, 413, 414, 9, 6, 2, 2, 414, 134, 3, 2, 2, 2, 415, 416, 9, 7, 2, 2, 416, 136, 3, 2, 2, 2, 417, 421, 5, 135, 68, 2, 418, 421, 5, 133, 67, 2, 419, 421, 9, 8, 2, 2, 420, 417, 3, 2, 2, 2, 420, 418, 3, 2, 2, 2, 420, 419, 3, 2, 2, 2, 421, 138, 3, 2, 2, 2, 422, 423, 7, 47, 2, 2, 423, 424, 7, 47, 2, 2, 424, 428, 3, 2, 2, 2, 425, 427, 10, 9, 2, 2, 426, 425, 3, 2, 2, 2, 427, 430, 3, 2, 2, 2, 428, 426, 3, 2, 2, 2, 428, 429, 3, 2, 2, 2, 429, 431, 3, 2, 2, 2, 430, 428, 3, 2, 2, 2, 431, 432, 8, 70, 2, 2, 432, 140, 3, 2, 2, 2, 433, 435, 9, 10, 2, 2, 434, 433, 3, 2, 2, 2, 435, 436, 3, 2, 2, 2, 436, 434, 3, 2, 2, 2, 436, 437, 3, 2, 2, 2, 437, 438, 3, 2, 2, 2, 438, 439, 8, 71, 2, 2, 439, 142, 3, 2, 2, 2, 440, 441, 11, 2, 2, 2, 441, 144, 3, 2, 2, 2, 17, 2, 360, 365, 371, 375, 380, 382, 388, 390, 399, 401, 410, 420, 428, 436, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 71, 451, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 63, 6, 63, 368, 10, 63, 13, 63, 14, 63, 369, 3, 64, 6, 64, 373, 10, 64, 13, 64, 14, 64, 374, 3, 64, 3, 64, 6, 64, 379, 10, 64, 13, 64, 14, 64, 380, 3, 64, 3, 64, 5, 64, 385, 10, 64, 3, 64, 6, 64, 388, 10, 64, 13, 64, 14, 64, 389, 5, 64, 392, 10, 64, 3, 65, 3, 65, 3, 65, 3, 65, 7, 65, 398, 10, 65, 12, 65, 14, 65, 401, 11, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 7, 66, 409, 10, 66, 12, 66, 14, 66, 412, 11, 66, 3, 66, 3, 66, 3, 67, 3, 67, 7, 67, 418, 10, 67, 12, 67, 14, 67, 421, 11, 67, 3, 68, 3, 68, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 5, 70, 430, 10, 70, 3, 71, 3, 71, 3, 71, 3, 71, 7, 71, 436, 10, 71, 12, 71, 14, 71, 439, 11, 71, 3, 71, 3, 71, 3, 72, 6, 72, 444, 10, 72, 13, 72, 14, 72, 445, 3, 72, 3, 72, 3, 73, 3, 73, 2, 2, 74, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 2, 137, 2, 139, 2, 141, 69, 143, 70, 145, 71, 3, 2, 11, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 4, 2, 12, 12, 14, 15, 5, 2, 11, 12, 15, 15, 34, 34, 2, 462, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 3, 147, 3, 2, 2, 2, 5, 149, 3, 2, 2, 2, 7, 154, 3, 2, 2, 2, 9, 160, 3, 2, 2, 2, 11, 162, 3, 2, 2, 2, 13, 164, 3, 2, 2, 2, 15, 166, 3, 2, 2, 2, 17, 168, 3, 2, 2, 2, 19, 170, 3, 2, 2, 2, 21, 172, 3, 2, 2, 2, 23, 174, 3, 2, 2, 2, 25, 177, 3, 2, 2, 2, 27, 180, 3, 2, 2, 2, 29, 182, 3, 2, 2, 2, 31, 184, 3, 2, 2, 2, 33, 186, 3, 2, 2, 2, 35, 192, 3, 2, 2, 2, 37, 201, 3, 2, 2, 2, 39, 208, 3, 2, 2, 2, 41, 210, 3, 2, 2, 2, 43, 213, 3, 2, 2, 2, 45, 218, 3, 2, 2, 2, 47, 223, 3, 2, 2, 2, 49, 229, 3, 2, 2, 2, 51, 235, 3, 2, 2, 2, 53, 239, 3, 2, 2, 2, 55, 242, 3, 2, 2, 2, 57, 247, 3, 2, 2, 2, 59, 252, 3, 2, 2, 2, 61, 254, 3, 2, 2, 2, 63, 256, 3, 2, 2, 2, 65, 263, 3, 2, 2, 2, 67, 265, 3, 2, 2, 2, 69, 268, 3, 2, 2, 2, 71, 270, 3, 2, 2, 2, 73, 272, 3, 2, 2, 2, 75, 276, 3, 2, 2, 2, 77, 278, 3, 2, 2, 2, 79, 280, 3, 2, 2, 2, 81, 282, 3, 2, 2, 2, 83, 284, 3, 2, 2, 2, 85, 287, 3, 2, 2, 2, 87, 291, 3, 2, 2, 2, 89, 294, 3, 2, 2, 2, 91, 297, 3, 2, 2, 2, 93, 299, 3, 2, 2, 2, 95, 302, 3, 2, 2, 2, 97, 304, 3, 2, 2, 2, 99, 307, 3, 2, 2, 2, 101, 311, 3, 2, 2, 2, 103, 315, 3, 2, 2, 2, 105, 318, 3, 2, 2, 2, 107, 320, 3, 2, 2, 2, 109, 325, 3, 2, 2, 2, 111, 331, 3, 2, 2, 2, 113, 336, 3, 2, 2, 2, 115, 340, 3, 2, 2, 2, 117, 346, 3, 2, 2, 2, 119, 351, 3, 2, 2, 2, 121, 356, 3, 2, 2, 2, 123, 363, 3, 2, 2, 2, 125, 367, 3, 2, 2, 2, 127, 372, 3, 2, 2, 2, 129, 393, 3, 2, 2, 2, 131, 404, 3, 2, 2, 2, 133, 415, 3, 2, 2, 2, 135, 422, 3, 2, 2, 2, 137, 424, 3, 2, 2, 2, 139, 429, 3, 2, 2, 2, 141, 431, 3, 2, 2, 2, 143, 443, 3, 2, 2, 2, 145, 449, 3, 2, 2, 2, 147, 148, 7, 61, 2, 2, 148, 4, 3, 2, 2, 2, 149, 150, 7, 117, 2, 2, 150, 151, 7, 109, 2, 2, 151, 152, 7, 107, 2, 2, 152, 153, 7, 114, 2, 2, 153, 6, 3, 2, 2, 2, 154, 155, 7, 114, 2, 2, 155, 156, 7, 116, 2, 2, 156, 157, 7, 107, 2, 2, 157, 158, 7, 112, 2, 2, 158, 159, 7, 118, 2, 2, 159, 8, 3, 2, 2, 2, 160, 161, 7, 63, 2, 2, 161, 10, 3, 2, 2, 2, 162, 163, 7, 96, 2, 2, 163, 12, 3, 2, 2, 2, 164, 165, 7, 44, 2, 2, 165, 14, 3, 2, 2, 2, 166, 167, 7, 49, 2, 2, 167, 16, 3, 2, 2, 2, 168, 169, 7, 39, 2, 2, 169, 18, 3, 2, 2, 2, 170, 171, 7, 45, 2, 2, 171, 20, 3, 2, 2, 2, 172, 173, 7, 47, 2, 2, 173, 22, 3, 2, 2, 2, 174, 175, 7, 62, 2, 2, 175, 176, 7, 62, 2, 2, 176, 24, 3, 2, 2, 2, 177, 178, 7, 64, 2, 2, 178, 179, 7, 64, 2, 2, 179, 26, 3, 2, 2, 2, 180, 181, 7, 40, 2, 2, 181, 28, 3, 2, 2, 2, 182, 183, 7, 38, 2, 2, 183, 30, 3, 2, 2, 2, 184, 185, 7, 126, 2, 2, 185, 32, 3, 2, 2, 2, 186, 187, 7, 100, 2, 2, 187, 188, 7, 116, 2, 2, 188, 189, 7, 103, 2, 2, 189, 190, 7, 99, 2, 2, 190, 191, 7, 109, 2, 2, 191, 34, 3, 2, 2, 2, 192, 193, 7, 101, 2, 2, 193, 194, 7, 113, 2, 2, 194, 195, 7, 112, 2, 2, 195, 196, 7, 118, 2, 2, 196, 197, 7, 107, 2, 2, 197, 198, 7, 112, 2, 2, 198, 199, 7, 119, 2, 2, 199, 200, 7, 103, 2, 2, 200, 36, 3, 2, 2, 2, 201, 202, 7, 116, 2, 2, 202, 203, 7, 103, 2, 2, 203, 204, 7, 118, 2, 2, 204, 205, 7, 119, 2, 2, 205, 206, 7, 116, 2, 2, 206, 207, 7, 112, 2, 2, 207, 38, 3, 2, 2, 2, 208, 209, 7, 46, 2, 2, 209, 40, 3, 2, 2, 2, 210, 211, 7, 107, 2, 2, 211, 212, 7, 104, 2, 2, 212, 42, 3, 2, 2, 2, 213, 214, 7, 103, 2, 2, 214, 215, 7, 110, 2, 2, 215, 216, 7, 107, 2, 2, 216, 217, 7, 104, 2, 2, 217, 44, 3, 2, 2, 2, 218, 219, 7, 103, 2, 2, 219, 220, 7, 110, 2, 2, 220, 221, 7, 117, 2, 2, 221, 222, 7, 103, 2, 2, 222, 46, 3, 2, 2, 2, 223, 224, 7, 121, 2, 2, 224, 225, 7, 106, 2, 2, 225, 226, 7, 107, 2, 2, 226, 227, 7, 110, 2, 2, 227, 228, 7, 103, 2, 2, 228, 48, 3, 2, 2, 2, 229, 230, 7, 119, 2, 2, 230, 231, 7, 112, 2, 2, 231, 232, 7, 118, 2, 2, 232, 233, 7, 107, 2, 2, 233, 234, 7, 110, 2, 2, 234, 50, 3, 2, 2, 2, 235, 236, 7, 104, 2, 2, 236, 237, 7, 113, 2, 2, 237, 238, 7, 116, 2, 2, 238, 52, 3, 2, 2, 2, 239, 240, 7, 107, 2, 2, 240, 241, 7, 112, 2, 2, 241, 54, 3, 2, 2, 2, 242, 243, 7, 117, 2, 2, 243, 244, 7, 118, 2, 2, 244, 245, 7, 103, 2, 2, 245, 246, 7, 114, 2, 2, 246, 56, 3, 2, 2, 2, 247, 248, 7, 104, 2, 2, 248, 249, 7, 119, 2, 2, 249, 250, 7, 112, 2, 2, 250, 251, 7, 101, 2, 2, 251, 58, 3, 2, 2, 2, 252, 253, 7, 42, 2, 2, 253, 60, 3, 2, 2, 2, 254, 255, 7, 43, 2, 2, 255, 62, 3, 2, 2, 2, 256, 257, 7, 103, 2, 2, 257, 258, 7, 122, 2, 2, 258, 259, 7, 118, 2, 2, 259, 260, 7, 103, 2, 2, 260, 261, 7, 116, 2, 2, 261, 262, 7, 112, 2, 2, 262, 64, 3, 2, 2, 2, 263, 264, 7, 60, 2, 2, 264, 66, 3, 2, 2, 2, 265, 266, 7, 102, 2, 2, 266, 267, 7, 113, 2, 2, 267, 68, 3, 2, 2, 2, 268, 269, 7, 125, 2, 2, 269, 70, 3, 2, 2, 2, 270, 271, 7, 127, 2, 2, 271, 72, 3, 2, 2, 2, 272, 273, 7, 102, 2, 2, 273, 274, 7, 103, 2, 2, 274, 275, 7, 104, 2, 2, 275, 74, 3, 2, 2, 2, 276, 277, 7, 93, 2, 2, 277, 76, 3, 2, 2, 2, 278, 279, 7, 95, 2, 2, 279, 78, 3, 2, 2, 2, 280, 281, 7, 48, 2, 2, 281, 80, 3, 2, 2, 2, 282, 283, 7, 128, 2, 2, 283, 82, 3, 2, 2, 2, 284, 285, 7, 48, 2, 2, 285, 286, 7, 48, 2, 2, 286, 84, 3, 2, 2, 2, 287, 288, 7, 48, 2, 2, 288, 289, 7, 48, 2, 2, 289, 290, 7, 48, 2, 2, 290, 86, 3, 2, 2, 2, 291, 292, 7, 63, 2, 2, 292, 293, 7, 63, 2, 2, 293, 88, 3, 2, 2, 2, 294, 295, 7, 35, 2, 2, 295, 296, 7, 63, 2, 2, 296, 90, 3, 2, 2, 2, 297, 298, 7, 62, 2, 2, 298, 92, 3, 2, 2, 2, 299, 300, 7, 62, 2, 2, 300, 301, 7, 63, 2, 2, 301, 94, 3, 2, 2, 2, 302, 303, 7, 64, 2, 2, 303, 96, 3, 2, 2, 2, 304, 305, 7, 64, 2, 2, 305, 306, 7, 63, 2, 2, 306, 98, 3, 2, 2, 2, 307, 308, 7, 112, 2, 2, 308, 309, 7, 113, 2, 2, 309, 310, 7, 118, 2, 2, 310, 100, 3, 2, 2, 2, 311, 312, 7, 99, 2, 2, 312, 313, 7, 112, 2, 2, 313, 314, 7, 102, 2, 2, 314, 102, 3, 2, 2, 2, 315, 316, 7, 113, 2, 2, 316, 317, 7, 116, 2, 2, 317, 104, 3, 2, 2, 2, 318, 319, 7, 65, 2, 2, 319, 106, 3, 2, 2, 2, 320, 321, 7, 118, 2, 2, 321, 322, 7, 116, 2, 2, 322, 323, 7, 119, 2, 2, 323, 324, 7, 103, 2, 2, 324, 108, 3, 2, 2, 2, 325, 326, 7, 104, 2, 2, 326, 327, 7, 99, 2, 2, 327, 328, 7, 110, 2, 2, 328, 329, 7, 117, 2, 2, 329, 330, 7, 103, 2, 2, 330, 110, 3, 2, 2, 2, 331, 332, 7, 88, 2, 2, 332, 333, 7, 113, 2, 2, 333, 334, 7, 107, 2, 2, 334, 335, 7, 102, 2, 2, 335, 112, 3, 2, 2, 2, 336, 337, 7, 75, 2, 2, 337, 338, 7, 112, 2, 2, 338, 339, 7, 118, 2, 2, 339, 114, 3, 2, 2, 2, 340, 341, 7, 72, 2, 2, 341, 342, 7, 110, 2, 2, 342, 343, 7, 113, 2, 2, 343, 344, 7, 99, 2, 2, 344, 345, 7, 118, 2, 2, 345, 116, 3, 2, 2, 2, 346, 347, 7, 68, 2, 2, 347, 348, 7, 113, 2, 2, 348, 349, 7, 113, 2, 2, 349, 350, 7, 110, 2, 2, 350, 118, 3, 2, 2, 2, 351, 352, 7, 69, 2, 2, 352, 353, 7, 106, 2, 2, 353, 354, 7, 99, 2, 2, 354, 355, 7, 116, 2, 2, 355, 120, 3, 2, 2, 2, 356, 357, 7, 85, 2, 2, 357, 358, 7, 118, 2, 2, 358, 359, 7, 116, 2, 2, 359, 360, 7, 107, 2, 2, 360, 361, 7, 112, 2, 2, 361, 362, 7, 105, 2, 2, 362, 122, 3, 2, 2, 2, 363, 364, 7, 47, 2, 2, 364, 365, 7, 64, 2, 2, 365, 124, 3, 2, 2, 2, 366, 368, 5, 135, 68, 2, 367, 366, 3, 2, 2, 2, 368, 369, 3, 2, 2, 2, 369, 367, 3, 2, 2, 2, 369, 370, 3, 2, 2, 2, 370, 126, 3, 2, 2, 2, 371, 373, 5, 135, 68, 2, 372, 371, 3, 2, 2, 2, 373, 374, 3, 2, 2, 2, 374, 372, 3, 2, 2, 2, 374, 375, 3, 2, 2, 2, 375, 376, 3, 2, 2, 2, 376, 378, 7, 48, 2, 2, 377, 379, 5, 135, 68, 2, 378, 377, 3, 2, 2, 2, 379, 380, 3, 2, 2, 2, 380, 378, 3, 2, 2, 2, 380, 381, 3, 2, 2, 2, 381, 391, 3, 2, 2, 2, 382, 384, 7, 103, 2, 2, 383, 385, 7, 47, 2, 2, 384, 383, 3, 2, 2, 2, 384, 385, 3, 2, 2, 2, 385, 387, 3, 2, 2, 2, 386, 388, 5, 135, 68, 2, 387, 386, 3, 2, 2, 2, 388, 389, 3, 2, 2, 2, 389, 387, 3, 2, 2, 2, 389, 390, 3, 2, 2, 2, 390, 392, 3, 2, 2, 2, 391, 382, 3, 2, 2, 2, 391, 392, 3, 2, 2, 2, 392, 128, 3, 2, 2, 2, 393, 399, 7, 41, 2, 2, 394, 398, 10, 2, 2, 2, 395, 396, 7, 94, 2, 2, 396, 398, 9, 3, 2, 2, 397, 394, 3, 2, 2, 2, 397, 395, 3, 2, 2, 2, 398, 401, 3, 2, 2, 2, 399, 397, 3, 2, 2, 2, 399, 400, 3, 2, 2, 2, 400, 402, 3, 2, 2, 2, 401, 399, 3, 2, 2, 2, 402, 403, 7, 41, 2, 2, 403, 130, 3, 2, 2, 2, 404, 410, 7, 36, 2, 2, 405, 409, 10, 4, 2, 2, 406, 407, 7, 94, 2, 2, 407, 409, 9, 5, 2, 2, 408, 405, 3, 2, 2, 2, 408, 406, 3, 2, 2, 2, 409, 412, 3, 2, 2, 2, 410, 408, 3, 2, 2, 2, 410, 411, 3, 2, 2, 2, 411, 413, 3, 2, 2, 2, 412, 410, 3, 2, 2, 2, 413, 414, 7, 36, 2, 2, 414, 132, 3, 2, 2, 2, 415, 419, 5, 137, 69, 2, 416, 418, 5, 139, 70, 2, 417, 416, 3, 2, 2, 2, 418, 421, 3, 2, 2, 2, 419, 417, 3, 2, 2, 2, 419, 420, 3, 2, 2, 2, 420, 134, 3, 2, 2, 2, 421, 419, 3, 2, 2, 2, 422, 423, 9, 6, 2, 2, 423, 136, 3, 2, 2, 2, 424, 425, 9, 7, 2, 2, 425, 138, 3, 2, 2, 2, 426, 430, 5, 137, 69, 2, 427, 430, 5, 135, 68, 2, 428, 430, 9, 8, 2, 2, 429, 426, 3, 2, 2, 2, 429, 427, 3, 2, 2, 2, 429, 428, 3, 2, 2, 2, 430, 140, 3, 2, 2, 2, 431, 432, 7, 47, 2, 2, 432, 433, 7, 47, 2, 2, 433, 437, 3, 2, 2, 2, 434, 436, 10, 9, 2, 2, 435, 434, 3, 2, 2, 2, 436, 439, 3, 2, 2, 2, 437, 435, 3, 2, 2, 2, 437, 438, 3, 2, 2, 2, 438, 440, 3, 2, 2, 2, 439, 437, 3, 2, 2, 2, 440, 441, 8, 71, 2, 2, 441, 142, 3, 2, 2, 2, 442, 444, 9, 10, 2, 2, 443, 442, 3, 2, 2, 2, 444, 445, 3, 2, 2, 2, 445, 443, 3, 2, 2, 2, 445, 446, 3, 2, 2, 2, 446, 447, 3, 2, 2, 2, 447, 448, 8, 72, 2, 2, 448, 144, 3, 2, 2, 2, 449, 450, 11, 2, 2, 2, 450, 146, 3, 2, 2, 2, 17, 2, 369, 374, 380, 384, 389, 391, 397, 399, 408, 410, 419, 429, 437, 445, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py index ca530209..a422b9e3 100644 --- a/src/antlr/PyxellLexer.py +++ b/src/antlr/PyxellLexer.py @@ -8,8 +8,8 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2F") - buf.write("\u01ba\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2G") + buf.write("\u01c3\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") @@ -19,183 +19,187 @@ def serializedATN(): buf.write("\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64") buf.write("\t\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:") buf.write("\4;\t;\4<\t<\4=\t=\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\t") - buf.write("C\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\3\2\3\2\3\3\3\3\3\3\3") - buf.write("\3\3\3\3\4\3\4\3\4\3\4\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7") - buf.write("\3\b\3\b\3\t\3\t\3\n\3\n\3\13\3\13\3\f\3\f\3\f\3\r\3\r") - buf.write("\3\r\3\16\3\16\3\17\3\17\3\20\3\20\3\21\3\21\3\21\3\21") - buf.write("\3\21\3\21\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22") - buf.write("\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\24\3\24\3\25\3\25") - buf.write("\3\25\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27\3\27") - buf.write("\3\30\3\30\3\30\3\30\3\30\3\30\3\31\3\31\3\31\3\31\3\31") - buf.write("\3\31\3\32\3\32\3\32\3\32\3\33\3\33\3\33\3\34\3\34\3\34") - buf.write("\3\34\3\34\3\35\3\35\3\35\3\35\3\35\3\36\3\36\3\37\3\37") - buf.write("\3 \3 \3!\3!\3!\3\"\3\"\3#\3#\3$\3$\3$\3$\3%\3%\3&\3&") - buf.write("\3\'\3\'\3(\3(\3)\3)\3)\3*\3*\3*\3*\3+\3+\3+\3,\3,\3,") - buf.write("\3-\3-\3.\3.\3.\3/\3/\3\60\3\60\3\60\3\61\3\61\3\61\3") - buf.write("\61\3\62\3\62\3\62\3\62\3\63\3\63\3\63\3\64\3\64\3\65") - buf.write("\3\65\3\65\3\65\3\65\3\66\3\66\3\66\3\66\3\66\3\66\3\67") - buf.write("\3\67\3\67\3\67\3\67\38\38\38\38\39\39\39\39\39\39\3:") - buf.write("\3:\3:\3:\3:\3;\3;\3;\3;\3;\3<\3<\3<\3<\3<\3<\3<\3=\3") - buf.write("=\3=\3>\6>\u0167\n>\r>\16>\u0168\3?\6?\u016c\n?\r?\16") - buf.write("?\u016d\3?\3?\6?\u0172\n?\r?\16?\u0173\3?\3?\5?\u0178") - buf.write("\n?\3?\6?\u017b\n?\r?\16?\u017c\5?\u017f\n?\3@\3@\3@\3") - buf.write("@\7@\u0185\n@\f@\16@\u0188\13@\3@\3@\3A\3A\3A\3A\7A\u0190") - buf.write("\nA\fA\16A\u0193\13A\3A\3A\3B\3B\7B\u0199\nB\fB\16B\u019c") - buf.write("\13B\3C\3C\3D\3D\3E\3E\3E\5E\u01a5\nE\3F\3F\3F\3F\7F\u01ab") - buf.write("\nF\fF\16F\u01ae\13F\3F\3F\3G\6G\u01b3\nG\rG\16G\u01b4") - buf.write("\3G\3G\3H\3H\2\2I\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23") - buf.write("\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25") - buf.write(")\26+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A") - buf.write("\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65") - buf.write("i\66k\67m8o9q:s;u{?}@\177A\u0081B\u0083C\u0085\2") - buf.write("\u0087\2\u0089\2\u008bD\u008dE\u008fF\3\2\13\4\2))^^\6") - buf.write("\2))^^ppvv\4\2$$^^\6\2$$^^ppvv\3\2\62;\5\2C\\aac|\4\2") - buf.write("))aa\4\2\f\f\16\17\5\2\13\f\17\17\"\"\2\u01c5\2\3\3\2") - buf.write("\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2") - buf.write("\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2") - buf.write("\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35") - buf.write("\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2") - buf.write("\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2") - buf.write("\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2") - buf.write("\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2") - buf.write("\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2") - buf.write("\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3") - buf.write("\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_") - buf.write("\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2") - buf.write("i\3\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2") - buf.write("\2s\3\2\2\2\2u\3\2\2\2\2w\3\2\2\2\2y\3\2\2\2\2{\3\2\2") - buf.write("\2\2}\3\2\2\2\2\177\3\2\2\2\2\u0081\3\2\2\2\2\u0083\3") - buf.write("\2\2\2\2\u008b\3\2\2\2\2\u008d\3\2\2\2\2\u008f\3\2\2\2") - buf.write("\3\u0091\3\2\2\2\5\u0093\3\2\2\2\7\u0098\3\2\2\2\t\u009e") - buf.write("\3\2\2\2\13\u00a0\3\2\2\2\r\u00a2\3\2\2\2\17\u00a4\3\2") - buf.write("\2\2\21\u00a6\3\2\2\2\23\u00a8\3\2\2\2\25\u00aa\3\2\2") - buf.write("\2\27\u00ac\3\2\2\2\31\u00af\3\2\2\2\33\u00b2\3\2\2\2") - buf.write("\35\u00b4\3\2\2\2\37\u00b6\3\2\2\2!\u00b8\3\2\2\2#\u00be") - buf.write("\3\2\2\2%\u00c7\3\2\2\2\'\u00ce\3\2\2\2)\u00d0\3\2\2\2") - buf.write("+\u00d3\3\2\2\2-\u00d8\3\2\2\2/\u00dd\3\2\2\2\61\u00e3") - buf.write("\3\2\2\2\63\u00e9\3\2\2\2\65\u00ed\3\2\2\2\67\u00f0\3") - buf.write("\2\2\29\u00f5\3\2\2\2;\u00fa\3\2\2\2=\u00fc\3\2\2\2?\u00fe") - buf.write("\3\2\2\2A\u0100\3\2\2\2C\u0103\3\2\2\2E\u0105\3\2\2\2") - buf.write("G\u0107\3\2\2\2I\u010b\3\2\2\2K\u010d\3\2\2\2M\u010f\3") - buf.write("\2\2\2O\u0111\3\2\2\2Q\u0113\3\2\2\2S\u0116\3\2\2\2U\u011a") - buf.write("\3\2\2\2W\u011d\3\2\2\2Y\u0120\3\2\2\2[\u0122\3\2\2\2") - buf.write("]\u0125\3\2\2\2_\u0127\3\2\2\2a\u012a\3\2\2\2c\u012e\3") - buf.write("\2\2\2e\u0132\3\2\2\2g\u0135\3\2\2\2i\u0137\3\2\2\2k\u013c") - buf.write("\3\2\2\2m\u0142\3\2\2\2o\u0147\3\2\2\2q\u014b\3\2\2\2") - buf.write("s\u0151\3\2\2\2u\u0156\3\2\2\2w\u015b\3\2\2\2y\u0162\3") - buf.write("\2\2\2{\u0166\3\2\2\2}\u016b\3\2\2\2\177\u0180\3\2\2\2") - buf.write("\u0081\u018b\3\2\2\2\u0083\u0196\3\2\2\2\u0085\u019d\3") - buf.write("\2\2\2\u0087\u019f\3\2\2\2\u0089\u01a4\3\2\2\2\u008b\u01a6") - buf.write("\3\2\2\2\u008d\u01b2\3\2\2\2\u008f\u01b8\3\2\2\2\u0091") - buf.write("\u0092\7=\2\2\u0092\4\3\2\2\2\u0093\u0094\7u\2\2\u0094") - buf.write("\u0095\7m\2\2\u0095\u0096\7k\2\2\u0096\u0097\7r\2\2\u0097") - buf.write("\6\3\2\2\2\u0098\u0099\7r\2\2\u0099\u009a\7t\2\2\u009a") - buf.write("\u009b\7k\2\2\u009b\u009c\7p\2\2\u009c\u009d\7v\2\2\u009d") - buf.write("\b\3\2\2\2\u009e\u009f\7?\2\2\u009f\n\3\2\2\2\u00a0\u00a1") - buf.write("\7`\2\2\u00a1\f\3\2\2\2\u00a2\u00a3\7,\2\2\u00a3\16\3") - buf.write("\2\2\2\u00a4\u00a5\7\61\2\2\u00a5\20\3\2\2\2\u00a6\u00a7") - buf.write("\7\'\2\2\u00a7\22\3\2\2\2\u00a8\u00a9\7-\2\2\u00a9\24") - buf.write("\3\2\2\2\u00aa\u00ab\7/\2\2\u00ab\26\3\2\2\2\u00ac\u00ad") - buf.write("\7>\2\2\u00ad\u00ae\7>\2\2\u00ae\30\3\2\2\2\u00af\u00b0") - buf.write("\7@\2\2\u00b0\u00b1\7@\2\2\u00b1\32\3\2\2\2\u00b2\u00b3") - buf.write("\7(\2\2\u00b3\34\3\2\2\2\u00b4\u00b5\7&\2\2\u00b5\36\3") - buf.write("\2\2\2\u00b6\u00b7\7~\2\2\u00b7 \3\2\2\2\u00b8\u00b9\7") - buf.write("d\2\2\u00b9\u00ba\7t\2\2\u00ba\u00bb\7g\2\2\u00bb\u00bc") - buf.write("\7c\2\2\u00bc\u00bd\7m\2\2\u00bd\"\3\2\2\2\u00be\u00bf") - buf.write("\7e\2\2\u00bf\u00c0\7q\2\2\u00c0\u00c1\7p\2\2\u00c1\u00c2") - buf.write("\7v\2\2\u00c2\u00c3\7k\2\2\u00c3\u00c4\7p\2\2\u00c4\u00c5") - buf.write("\7w\2\2\u00c5\u00c6\7g\2\2\u00c6$\3\2\2\2\u00c7\u00c8") - buf.write("\7t\2\2\u00c8\u00c9\7g\2\2\u00c9\u00ca\7v\2\2\u00ca\u00cb") - buf.write("\7w\2\2\u00cb\u00cc\7t\2\2\u00cc\u00cd\7p\2\2\u00cd&\3") - buf.write("\2\2\2\u00ce\u00cf\7.\2\2\u00cf(\3\2\2\2\u00d0\u00d1\7") - buf.write("k\2\2\u00d1\u00d2\7h\2\2\u00d2*\3\2\2\2\u00d3\u00d4\7") - buf.write("g\2\2\u00d4\u00d5\7n\2\2\u00d5\u00d6\7k\2\2\u00d6\u00d7") - buf.write("\7h\2\2\u00d7,\3\2\2\2\u00d8\u00d9\7g\2\2\u00d9\u00da") - buf.write("\7n\2\2\u00da\u00db\7u\2\2\u00db\u00dc\7g\2\2\u00dc.\3") - buf.write("\2\2\2\u00dd\u00de\7y\2\2\u00de\u00df\7j\2\2\u00df\u00e0") - buf.write("\7k\2\2\u00e0\u00e1\7n\2\2\u00e1\u00e2\7g\2\2\u00e2\60") - buf.write("\3\2\2\2\u00e3\u00e4\7w\2\2\u00e4\u00e5\7p\2\2\u00e5\u00e6") - buf.write("\7v\2\2\u00e6\u00e7\7k\2\2\u00e7\u00e8\7n\2\2\u00e8\62") - buf.write("\3\2\2\2\u00e9\u00ea\7h\2\2\u00ea\u00eb\7q\2\2\u00eb\u00ec") - buf.write("\7t\2\2\u00ec\64\3\2\2\2\u00ed\u00ee\7k\2\2\u00ee\u00ef") - buf.write("\7p\2\2\u00ef\66\3\2\2\2\u00f0\u00f1\7u\2\2\u00f1\u00f2") - buf.write("\7v\2\2\u00f2\u00f3\7g\2\2\u00f3\u00f4\7r\2\2\u00f48\3") - buf.write("\2\2\2\u00f5\u00f6\7h\2\2\u00f6\u00f7\7w\2\2\u00f7\u00f8") - buf.write("\7p\2\2\u00f8\u00f9\7e\2\2\u00f9:\3\2\2\2\u00fa\u00fb") - buf.write("\7*\2\2\u00fb<\3\2\2\2\u00fc\u00fd\7+\2\2\u00fd>\3\2\2") - buf.write("\2\u00fe\u00ff\7<\2\2\u00ff@\3\2\2\2\u0100\u0101\7f\2") - buf.write("\2\u0101\u0102\7q\2\2\u0102B\3\2\2\2\u0103\u0104\7}\2") - buf.write("\2\u0104D\3\2\2\2\u0105\u0106\7\177\2\2\u0106F\3\2\2\2") - buf.write("\u0107\u0108\7f\2\2\u0108\u0109\7g\2\2\u0109\u010a\7h") - buf.write("\2\2\u010aH\3\2\2\2\u010b\u010c\7]\2\2\u010cJ\3\2\2\2") - buf.write("\u010d\u010e\7_\2\2\u010eL\3\2\2\2\u010f\u0110\7\60\2") - buf.write("\2\u0110N\3\2\2\2\u0111\u0112\7\u0080\2\2\u0112P\3\2\2") - buf.write("\2\u0113\u0114\7\60\2\2\u0114\u0115\7\60\2\2\u0115R\3") - buf.write("\2\2\2\u0116\u0117\7\60\2\2\u0117\u0118\7\60\2\2\u0118") - buf.write("\u0119\7\60\2\2\u0119T\3\2\2\2\u011a\u011b\7?\2\2\u011b") - buf.write("\u011c\7?\2\2\u011cV\3\2\2\2\u011d\u011e\7#\2\2\u011e") - buf.write("\u011f\7?\2\2\u011fX\3\2\2\2\u0120\u0121\7>\2\2\u0121") - buf.write("Z\3\2\2\2\u0122\u0123\7>\2\2\u0123\u0124\7?\2\2\u0124") - buf.write("\\\3\2\2\2\u0125\u0126\7@\2\2\u0126^\3\2\2\2\u0127\u0128") - buf.write("\7@\2\2\u0128\u0129\7?\2\2\u0129`\3\2\2\2\u012a\u012b") - buf.write("\7p\2\2\u012b\u012c\7q\2\2\u012c\u012d\7v\2\2\u012db\3") - buf.write("\2\2\2\u012e\u012f\7c\2\2\u012f\u0130\7p\2\2\u0130\u0131") - buf.write("\7f\2\2\u0131d\3\2\2\2\u0132\u0133\7q\2\2\u0133\u0134") - buf.write("\7t\2\2\u0134f\3\2\2\2\u0135\u0136\7A\2\2\u0136h\3\2\2") - buf.write("\2\u0137\u0138\7v\2\2\u0138\u0139\7t\2\2\u0139\u013a\7") - buf.write("w\2\2\u013a\u013b\7g\2\2\u013bj\3\2\2\2\u013c\u013d\7") - buf.write("h\2\2\u013d\u013e\7c\2\2\u013e\u013f\7n\2\2\u013f\u0140") - buf.write("\7u\2\2\u0140\u0141\7g\2\2\u0141l\3\2\2\2\u0142\u0143") - buf.write("\7X\2\2\u0143\u0144\7q\2\2\u0144\u0145\7k\2\2\u0145\u0146") - buf.write("\7f\2\2\u0146n\3\2\2\2\u0147\u0148\7K\2\2\u0148\u0149") - buf.write("\7p\2\2\u0149\u014a\7v\2\2\u014ap\3\2\2\2\u014b\u014c") - buf.write("\7H\2\2\u014c\u014d\7n\2\2\u014d\u014e\7q\2\2\u014e\u014f") - buf.write("\7c\2\2\u014f\u0150\7v\2\2\u0150r\3\2\2\2\u0151\u0152") - buf.write("\7D\2\2\u0152\u0153\7q\2\2\u0153\u0154\7q\2\2\u0154\u0155") - buf.write("\7n\2\2\u0155t\3\2\2\2\u0156\u0157\7E\2\2\u0157\u0158") - buf.write("\7j\2\2\u0158\u0159\7c\2\2\u0159\u015a\7t\2\2\u015av\3") - buf.write("\2\2\2\u015b\u015c\7U\2\2\u015c\u015d\7v\2\2\u015d\u015e") - buf.write("\7t\2\2\u015e\u015f\7k\2\2\u015f\u0160\7p\2\2\u0160\u0161") - buf.write("\7i\2\2\u0161x\3\2\2\2\u0162\u0163\7/\2\2\u0163\u0164") - buf.write("\7@\2\2\u0164z\3\2\2\2\u0165\u0167\5\u0085C\2\u0166\u0165") - buf.write("\3\2\2\2\u0167\u0168\3\2\2\2\u0168\u0166\3\2\2\2\u0168") - buf.write("\u0169\3\2\2\2\u0169|\3\2\2\2\u016a\u016c\5\u0085C\2\u016b") - buf.write("\u016a\3\2\2\2\u016c\u016d\3\2\2\2\u016d\u016b\3\2\2\2") - buf.write("\u016d\u016e\3\2\2\2\u016e\u016f\3\2\2\2\u016f\u0171\7") - buf.write("\60\2\2\u0170\u0172\5\u0085C\2\u0171\u0170\3\2\2\2\u0172") - buf.write("\u0173\3\2\2\2\u0173\u0171\3\2\2\2\u0173\u0174\3\2\2\2") - buf.write("\u0174\u017e\3\2\2\2\u0175\u0177\7g\2\2\u0176\u0178\7") - buf.write("/\2\2\u0177\u0176\3\2\2\2\u0177\u0178\3\2\2\2\u0178\u017a") - buf.write("\3\2\2\2\u0179\u017b\5\u0085C\2\u017a\u0179\3\2\2\2\u017b") - buf.write("\u017c\3\2\2\2\u017c\u017a\3\2\2\2\u017c\u017d\3\2\2\2") - buf.write("\u017d\u017f\3\2\2\2\u017e\u0175\3\2\2\2\u017e\u017f\3") - buf.write("\2\2\2\u017f~\3\2\2\2\u0180\u0186\7)\2\2\u0181\u0185\n") - buf.write("\2\2\2\u0182\u0183\7^\2\2\u0183\u0185\t\3\2\2\u0184\u0181") - buf.write("\3\2\2\2\u0184\u0182\3\2\2\2\u0185\u0188\3\2\2\2\u0186") - buf.write("\u0184\3\2\2\2\u0186\u0187\3\2\2\2\u0187\u0189\3\2\2\2") - buf.write("\u0188\u0186\3\2\2\2\u0189\u018a\7)\2\2\u018a\u0080\3") - buf.write("\2\2\2\u018b\u0191\7$\2\2\u018c\u0190\n\4\2\2\u018d\u018e") - buf.write("\7^\2\2\u018e\u0190\t\5\2\2\u018f\u018c\3\2\2\2\u018f") - buf.write("\u018d\3\2\2\2\u0190\u0193\3\2\2\2\u0191\u018f\3\2\2\2") - buf.write("\u0191\u0192\3\2\2\2\u0192\u0194\3\2\2\2\u0193\u0191\3") - buf.write("\2\2\2\u0194\u0195\7$\2\2\u0195\u0082\3\2\2\2\u0196\u019a") - buf.write("\5\u0087D\2\u0197\u0199\5\u0089E\2\u0198\u0197\3\2\2\2") - buf.write("\u0199\u019c\3\2\2\2\u019a\u0198\3\2\2\2\u019a\u019b\3") - buf.write("\2\2\2\u019b\u0084\3\2\2\2\u019c\u019a\3\2\2\2\u019d\u019e") - buf.write("\t\6\2\2\u019e\u0086\3\2\2\2\u019f\u01a0\t\7\2\2\u01a0") - buf.write("\u0088\3\2\2\2\u01a1\u01a5\5\u0087D\2\u01a2\u01a5\5\u0085") - buf.write("C\2\u01a3\u01a5\t\b\2\2\u01a4\u01a1\3\2\2\2\u01a4\u01a2") - buf.write("\3\2\2\2\u01a4\u01a3\3\2\2\2\u01a5\u008a\3\2\2\2\u01a6") - buf.write("\u01a7\7/\2\2\u01a7\u01a8\7/\2\2\u01a8\u01ac\3\2\2\2\u01a9") - buf.write("\u01ab\n\t\2\2\u01aa\u01a9\3\2\2\2\u01ab\u01ae\3\2\2\2") - buf.write("\u01ac\u01aa\3\2\2\2\u01ac\u01ad\3\2\2\2\u01ad\u01af\3") - buf.write("\2\2\2\u01ae\u01ac\3\2\2\2\u01af\u01b0\bF\2\2\u01b0\u008c") - buf.write("\3\2\2\2\u01b1\u01b3\t\n\2\2\u01b2\u01b1\3\2\2\2\u01b3") - buf.write("\u01b4\3\2\2\2\u01b4\u01b2\3\2\2\2\u01b4\u01b5\3\2\2\2") - buf.write("\u01b5\u01b6\3\2\2\2\u01b6\u01b7\bG\2\2\u01b7\u008e\3") - buf.write("\2\2\2\u01b8\u01b9\13\2\2\2\u01b9\u0090\3\2\2\2\21\2\u0168") - buf.write("\u016d\u0173\u0177\u017c\u017e\u0184\u0186\u018f\u0191") - buf.write("\u019a\u01a4\u01ac\u01b4\3\b\2\2") + buf.write("C\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I\tI\3\2\3\2\3\3\3\3") + buf.write("\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\4\3\5\3\5\3\6\3\6\3") + buf.write("\7\3\7\3\b\3\b\3\t\3\t\3\n\3\n\3\13\3\13\3\f\3\f\3\f\3") + buf.write("\r\3\r\3\r\3\16\3\16\3\17\3\17\3\20\3\20\3\21\3\21\3\21") + buf.write("\3\21\3\21\3\21\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22") + buf.write("\3\22\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\24\3\24\3\25") + buf.write("\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27") + buf.write("\3\27\3\30\3\30\3\30\3\30\3\30\3\30\3\31\3\31\3\31\3\31") + buf.write("\3\31\3\31\3\32\3\32\3\32\3\32\3\33\3\33\3\33\3\34\3\34") + buf.write("\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35\3\36\3\36\3\37") + buf.write("\3\37\3 \3 \3 \3 \3 \3 \3 \3!\3!\3\"\3\"\3\"\3#\3#\3$") + buf.write("\3$\3%\3%\3%\3%\3&\3&\3\'\3\'\3(\3(\3)\3)\3*\3*\3*\3+") + buf.write("\3+\3+\3+\3,\3,\3,\3-\3-\3-\3.\3.\3/\3/\3/\3\60\3\60\3") + buf.write("\61\3\61\3\61\3\62\3\62\3\62\3\62\3\63\3\63\3\63\3\63") + buf.write("\3\64\3\64\3\64\3\65\3\65\3\66\3\66\3\66\3\66\3\66\3\67") + buf.write("\3\67\3\67\3\67\3\67\3\67\38\38\38\38\38\39\39\39\39\3") + buf.write(":\3:\3:\3:\3:\3:\3;\3;\3;\3;\3;\3<\3<\3<\3<\3<\3=\3=\3") + buf.write("=\3=\3=\3=\3=\3>\3>\3>\3?\6?\u0170\n?\r?\16?\u0171\3@") + buf.write("\6@\u0175\n@\r@\16@\u0176\3@\3@\6@\u017b\n@\r@\16@\u017c") + buf.write("\3@\3@\5@\u0181\n@\3@\6@\u0184\n@\r@\16@\u0185\5@\u0188") + buf.write("\n@\3A\3A\3A\3A\7A\u018e\nA\fA\16A\u0191\13A\3A\3A\3B") + buf.write("\3B\3B\3B\7B\u0199\nB\fB\16B\u019c\13B\3B\3B\3C\3C\7C") + buf.write("\u01a2\nC\fC\16C\u01a5\13C\3D\3D\3E\3E\3F\3F\3F\5F\u01ae") + buf.write("\nF\3G\3G\3G\3G\7G\u01b4\nG\fG\16G\u01b7\13G\3G\3G\3H") + buf.write("\6H\u01bc\nH\rH\16H\u01bd\3H\3H\3I\3I\2\2J\3\3\5\4\7\5") + buf.write("\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35") + buf.write("\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33") + buf.write("\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[") + buf.write("/]\60_\61a\62c\63e\64g\65i\66k\67m8o9q:s;u{?}@\177") + buf.write("A\u0081B\u0083C\u0085D\u0087\2\u0089\2\u008b\2\u008dE") + buf.write("\u008fF\u0091G\3\2\13\4\2))^^\6\2))^^ppvv\4\2$$^^\6\2") + buf.write("$$^^ppvv\3\2\62;\5\2C\\aac|\4\2))aa\4\2\f\f\16\17\5\2") + buf.write("\13\f\17\17\"\"\2\u01ce\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3") + buf.write("\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2") + buf.write("\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2") + buf.write("\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2") + buf.write("!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2") + buf.write("\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3") + buf.write("\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2") + buf.write("\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2") + buf.write("\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2") + buf.write("\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3") + buf.write("\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c") + buf.write("\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2") + buf.write("m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2u\3\2\2\2") + buf.write("\2w\3\2\2\2\2y\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177\3\2") + buf.write("\2\2\2\u0081\3\2\2\2\2\u0083\3\2\2\2\2\u0085\3\2\2\2\2") + buf.write("\u008d\3\2\2\2\2\u008f\3\2\2\2\2\u0091\3\2\2\2\3\u0093") + buf.write("\3\2\2\2\5\u0095\3\2\2\2\7\u009a\3\2\2\2\t\u00a0\3\2\2") + buf.write("\2\13\u00a2\3\2\2\2\r\u00a4\3\2\2\2\17\u00a6\3\2\2\2\21") + buf.write("\u00a8\3\2\2\2\23\u00aa\3\2\2\2\25\u00ac\3\2\2\2\27\u00ae") + buf.write("\3\2\2\2\31\u00b1\3\2\2\2\33\u00b4\3\2\2\2\35\u00b6\3") + buf.write("\2\2\2\37\u00b8\3\2\2\2!\u00ba\3\2\2\2#\u00c0\3\2\2\2") + buf.write("%\u00c9\3\2\2\2\'\u00d0\3\2\2\2)\u00d2\3\2\2\2+\u00d5") + buf.write("\3\2\2\2-\u00da\3\2\2\2/\u00df\3\2\2\2\61\u00e5\3\2\2") + buf.write("\2\63\u00eb\3\2\2\2\65\u00ef\3\2\2\2\67\u00f2\3\2\2\2") + buf.write("9\u00f7\3\2\2\2;\u00fc\3\2\2\2=\u00fe\3\2\2\2?\u0100\3") + buf.write("\2\2\2A\u0107\3\2\2\2C\u0109\3\2\2\2E\u010c\3\2\2\2G\u010e") + buf.write("\3\2\2\2I\u0110\3\2\2\2K\u0114\3\2\2\2M\u0116\3\2\2\2") + buf.write("O\u0118\3\2\2\2Q\u011a\3\2\2\2S\u011c\3\2\2\2U\u011f\3") + buf.write("\2\2\2W\u0123\3\2\2\2Y\u0126\3\2\2\2[\u0129\3\2\2\2]\u012b") + buf.write("\3\2\2\2_\u012e\3\2\2\2a\u0130\3\2\2\2c\u0133\3\2\2\2") + buf.write("e\u0137\3\2\2\2g\u013b\3\2\2\2i\u013e\3\2\2\2k\u0140\3") + buf.write("\2\2\2m\u0145\3\2\2\2o\u014b\3\2\2\2q\u0150\3\2\2\2s\u0154") + buf.write("\3\2\2\2u\u015a\3\2\2\2w\u015f\3\2\2\2y\u0164\3\2\2\2") + buf.write("{\u016b\3\2\2\2}\u016f\3\2\2\2\177\u0174\3\2\2\2\u0081") + buf.write("\u0189\3\2\2\2\u0083\u0194\3\2\2\2\u0085\u019f\3\2\2\2") + buf.write("\u0087\u01a6\3\2\2\2\u0089\u01a8\3\2\2\2\u008b\u01ad\3") + buf.write("\2\2\2\u008d\u01af\3\2\2\2\u008f\u01bb\3\2\2\2\u0091\u01c1") + buf.write("\3\2\2\2\u0093\u0094\7=\2\2\u0094\4\3\2\2\2\u0095\u0096") + buf.write("\7u\2\2\u0096\u0097\7m\2\2\u0097\u0098\7k\2\2\u0098\u0099") + buf.write("\7r\2\2\u0099\6\3\2\2\2\u009a\u009b\7r\2\2\u009b\u009c") + buf.write("\7t\2\2\u009c\u009d\7k\2\2\u009d\u009e\7p\2\2\u009e\u009f") + buf.write("\7v\2\2\u009f\b\3\2\2\2\u00a0\u00a1\7?\2\2\u00a1\n\3\2") + buf.write("\2\2\u00a2\u00a3\7`\2\2\u00a3\f\3\2\2\2\u00a4\u00a5\7") + buf.write(",\2\2\u00a5\16\3\2\2\2\u00a6\u00a7\7\61\2\2\u00a7\20\3") + buf.write("\2\2\2\u00a8\u00a9\7\'\2\2\u00a9\22\3\2\2\2\u00aa\u00ab") + buf.write("\7-\2\2\u00ab\24\3\2\2\2\u00ac\u00ad\7/\2\2\u00ad\26\3") + buf.write("\2\2\2\u00ae\u00af\7>\2\2\u00af\u00b0\7>\2\2\u00b0\30") + buf.write("\3\2\2\2\u00b1\u00b2\7@\2\2\u00b2\u00b3\7@\2\2\u00b3\32") + buf.write("\3\2\2\2\u00b4\u00b5\7(\2\2\u00b5\34\3\2\2\2\u00b6\u00b7") + buf.write("\7&\2\2\u00b7\36\3\2\2\2\u00b8\u00b9\7~\2\2\u00b9 \3\2") + buf.write("\2\2\u00ba\u00bb\7d\2\2\u00bb\u00bc\7t\2\2\u00bc\u00bd") + buf.write("\7g\2\2\u00bd\u00be\7c\2\2\u00be\u00bf\7m\2\2\u00bf\"") + buf.write("\3\2\2\2\u00c0\u00c1\7e\2\2\u00c1\u00c2\7q\2\2\u00c2\u00c3") + buf.write("\7p\2\2\u00c3\u00c4\7v\2\2\u00c4\u00c5\7k\2\2\u00c5\u00c6") + buf.write("\7p\2\2\u00c6\u00c7\7w\2\2\u00c7\u00c8\7g\2\2\u00c8$\3") + buf.write("\2\2\2\u00c9\u00ca\7t\2\2\u00ca\u00cb\7g\2\2\u00cb\u00cc") + buf.write("\7v\2\2\u00cc\u00cd\7w\2\2\u00cd\u00ce\7t\2\2\u00ce\u00cf") + buf.write("\7p\2\2\u00cf&\3\2\2\2\u00d0\u00d1\7.\2\2\u00d1(\3\2\2") + buf.write("\2\u00d2\u00d3\7k\2\2\u00d3\u00d4\7h\2\2\u00d4*\3\2\2") + buf.write("\2\u00d5\u00d6\7g\2\2\u00d6\u00d7\7n\2\2\u00d7\u00d8\7") + buf.write("k\2\2\u00d8\u00d9\7h\2\2\u00d9,\3\2\2\2\u00da\u00db\7") + buf.write("g\2\2\u00db\u00dc\7n\2\2\u00dc\u00dd\7u\2\2\u00dd\u00de") + buf.write("\7g\2\2\u00de.\3\2\2\2\u00df\u00e0\7y\2\2\u00e0\u00e1") + buf.write("\7j\2\2\u00e1\u00e2\7k\2\2\u00e2\u00e3\7n\2\2\u00e3\u00e4") + buf.write("\7g\2\2\u00e4\60\3\2\2\2\u00e5\u00e6\7w\2\2\u00e6\u00e7") + buf.write("\7p\2\2\u00e7\u00e8\7v\2\2\u00e8\u00e9\7k\2\2\u00e9\u00ea") + buf.write("\7n\2\2\u00ea\62\3\2\2\2\u00eb\u00ec\7h\2\2\u00ec\u00ed") + buf.write("\7q\2\2\u00ed\u00ee\7t\2\2\u00ee\64\3\2\2\2\u00ef\u00f0") + buf.write("\7k\2\2\u00f0\u00f1\7p\2\2\u00f1\66\3\2\2\2\u00f2\u00f3") + buf.write("\7u\2\2\u00f3\u00f4\7v\2\2\u00f4\u00f5\7g\2\2\u00f5\u00f6") + buf.write("\7r\2\2\u00f68\3\2\2\2\u00f7\u00f8\7h\2\2\u00f8\u00f9") + buf.write("\7w\2\2\u00f9\u00fa\7p\2\2\u00fa\u00fb\7e\2\2\u00fb:\3") + buf.write("\2\2\2\u00fc\u00fd\7*\2\2\u00fd<\3\2\2\2\u00fe\u00ff\7") + buf.write("+\2\2\u00ff>\3\2\2\2\u0100\u0101\7g\2\2\u0101\u0102\7") + buf.write("z\2\2\u0102\u0103\7v\2\2\u0103\u0104\7g\2\2\u0104\u0105") + buf.write("\7t\2\2\u0105\u0106\7p\2\2\u0106@\3\2\2\2\u0107\u0108") + buf.write("\7<\2\2\u0108B\3\2\2\2\u0109\u010a\7f\2\2\u010a\u010b") + buf.write("\7q\2\2\u010bD\3\2\2\2\u010c\u010d\7}\2\2\u010dF\3\2\2") + buf.write("\2\u010e\u010f\7\177\2\2\u010fH\3\2\2\2\u0110\u0111\7") + buf.write("f\2\2\u0111\u0112\7g\2\2\u0112\u0113\7h\2\2\u0113J\3\2") + buf.write("\2\2\u0114\u0115\7]\2\2\u0115L\3\2\2\2\u0116\u0117\7_") + buf.write("\2\2\u0117N\3\2\2\2\u0118\u0119\7\60\2\2\u0119P\3\2\2") + buf.write("\2\u011a\u011b\7\u0080\2\2\u011bR\3\2\2\2\u011c\u011d") + buf.write("\7\60\2\2\u011d\u011e\7\60\2\2\u011eT\3\2\2\2\u011f\u0120") + buf.write("\7\60\2\2\u0120\u0121\7\60\2\2\u0121\u0122\7\60\2\2\u0122") + buf.write("V\3\2\2\2\u0123\u0124\7?\2\2\u0124\u0125\7?\2\2\u0125") + buf.write("X\3\2\2\2\u0126\u0127\7#\2\2\u0127\u0128\7?\2\2\u0128") + buf.write("Z\3\2\2\2\u0129\u012a\7>\2\2\u012a\\\3\2\2\2\u012b\u012c") + buf.write("\7>\2\2\u012c\u012d\7?\2\2\u012d^\3\2\2\2\u012e\u012f") + buf.write("\7@\2\2\u012f`\3\2\2\2\u0130\u0131\7@\2\2\u0131\u0132") + buf.write("\7?\2\2\u0132b\3\2\2\2\u0133\u0134\7p\2\2\u0134\u0135") + buf.write("\7q\2\2\u0135\u0136\7v\2\2\u0136d\3\2\2\2\u0137\u0138") + buf.write("\7c\2\2\u0138\u0139\7p\2\2\u0139\u013a\7f\2\2\u013af\3") + buf.write("\2\2\2\u013b\u013c\7q\2\2\u013c\u013d\7t\2\2\u013dh\3") + buf.write("\2\2\2\u013e\u013f\7A\2\2\u013fj\3\2\2\2\u0140\u0141\7") + buf.write("v\2\2\u0141\u0142\7t\2\2\u0142\u0143\7w\2\2\u0143\u0144") + buf.write("\7g\2\2\u0144l\3\2\2\2\u0145\u0146\7h\2\2\u0146\u0147") + buf.write("\7c\2\2\u0147\u0148\7n\2\2\u0148\u0149\7u\2\2\u0149\u014a") + buf.write("\7g\2\2\u014an\3\2\2\2\u014b\u014c\7X\2\2\u014c\u014d") + buf.write("\7q\2\2\u014d\u014e\7k\2\2\u014e\u014f\7f\2\2\u014fp\3") + buf.write("\2\2\2\u0150\u0151\7K\2\2\u0151\u0152\7p\2\2\u0152\u0153") + buf.write("\7v\2\2\u0153r\3\2\2\2\u0154\u0155\7H\2\2\u0155\u0156") + buf.write("\7n\2\2\u0156\u0157\7q\2\2\u0157\u0158\7c\2\2\u0158\u0159") + buf.write("\7v\2\2\u0159t\3\2\2\2\u015a\u015b\7D\2\2\u015b\u015c") + buf.write("\7q\2\2\u015c\u015d\7q\2\2\u015d\u015e\7n\2\2\u015ev\3") + buf.write("\2\2\2\u015f\u0160\7E\2\2\u0160\u0161\7j\2\2\u0161\u0162") + buf.write("\7c\2\2\u0162\u0163\7t\2\2\u0163x\3\2\2\2\u0164\u0165") + buf.write("\7U\2\2\u0165\u0166\7v\2\2\u0166\u0167\7t\2\2\u0167\u0168") + buf.write("\7k\2\2\u0168\u0169\7p\2\2\u0169\u016a\7i\2\2\u016az\3") + buf.write("\2\2\2\u016b\u016c\7/\2\2\u016c\u016d\7@\2\2\u016d|\3") + buf.write("\2\2\2\u016e\u0170\5\u0087D\2\u016f\u016e\3\2\2\2\u0170") + buf.write("\u0171\3\2\2\2\u0171\u016f\3\2\2\2\u0171\u0172\3\2\2\2") + buf.write("\u0172~\3\2\2\2\u0173\u0175\5\u0087D\2\u0174\u0173\3\2") + buf.write("\2\2\u0175\u0176\3\2\2\2\u0176\u0174\3\2\2\2\u0176\u0177") + buf.write("\3\2\2\2\u0177\u0178\3\2\2\2\u0178\u017a\7\60\2\2\u0179") + buf.write("\u017b\5\u0087D\2\u017a\u0179\3\2\2\2\u017b\u017c\3\2") + buf.write("\2\2\u017c\u017a\3\2\2\2\u017c\u017d\3\2\2\2\u017d\u0187") + buf.write("\3\2\2\2\u017e\u0180\7g\2\2\u017f\u0181\7/\2\2\u0180\u017f") + buf.write("\3\2\2\2\u0180\u0181\3\2\2\2\u0181\u0183\3\2\2\2\u0182") + buf.write("\u0184\5\u0087D\2\u0183\u0182\3\2\2\2\u0184\u0185\3\2") + buf.write("\2\2\u0185\u0183\3\2\2\2\u0185\u0186\3\2\2\2\u0186\u0188") + buf.write("\3\2\2\2\u0187\u017e\3\2\2\2\u0187\u0188\3\2\2\2\u0188") + buf.write("\u0080\3\2\2\2\u0189\u018f\7)\2\2\u018a\u018e\n\2\2\2") + buf.write("\u018b\u018c\7^\2\2\u018c\u018e\t\3\2\2\u018d\u018a\3") + buf.write("\2\2\2\u018d\u018b\3\2\2\2\u018e\u0191\3\2\2\2\u018f\u018d") + buf.write("\3\2\2\2\u018f\u0190\3\2\2\2\u0190\u0192\3\2\2\2\u0191") + buf.write("\u018f\3\2\2\2\u0192\u0193\7)\2\2\u0193\u0082\3\2\2\2") + buf.write("\u0194\u019a\7$\2\2\u0195\u0199\n\4\2\2\u0196\u0197\7") + buf.write("^\2\2\u0197\u0199\t\5\2\2\u0198\u0195\3\2\2\2\u0198\u0196") + buf.write("\3\2\2\2\u0199\u019c\3\2\2\2\u019a\u0198\3\2\2\2\u019a") + buf.write("\u019b\3\2\2\2\u019b\u019d\3\2\2\2\u019c\u019a\3\2\2\2") + buf.write("\u019d\u019e\7$\2\2\u019e\u0084\3\2\2\2\u019f\u01a3\5") + buf.write("\u0089E\2\u01a0\u01a2\5\u008bF\2\u01a1\u01a0\3\2\2\2\u01a2") + buf.write("\u01a5\3\2\2\2\u01a3\u01a1\3\2\2\2\u01a3\u01a4\3\2\2\2") + buf.write("\u01a4\u0086\3\2\2\2\u01a5\u01a3\3\2\2\2\u01a6\u01a7\t") + buf.write("\6\2\2\u01a7\u0088\3\2\2\2\u01a8\u01a9\t\7\2\2\u01a9\u008a") + buf.write("\3\2\2\2\u01aa\u01ae\5\u0089E\2\u01ab\u01ae\5\u0087D\2") + buf.write("\u01ac\u01ae\t\b\2\2\u01ad\u01aa\3\2\2\2\u01ad\u01ab\3") + buf.write("\2\2\2\u01ad\u01ac\3\2\2\2\u01ae\u008c\3\2\2\2\u01af\u01b0") + buf.write("\7/\2\2\u01b0\u01b1\7/\2\2\u01b1\u01b5\3\2\2\2\u01b2\u01b4") + buf.write("\n\t\2\2\u01b3\u01b2\3\2\2\2\u01b4\u01b7\3\2\2\2\u01b5") + buf.write("\u01b3\3\2\2\2\u01b5\u01b6\3\2\2\2\u01b6\u01b8\3\2\2\2") + buf.write("\u01b7\u01b5\3\2\2\2\u01b8\u01b9\bG\2\2\u01b9\u008e\3") + buf.write("\2\2\2\u01ba\u01bc\t\n\2\2\u01bb\u01ba\3\2\2\2\u01bc\u01bd") + buf.write("\3\2\2\2\u01bd\u01bb\3\2\2\2\u01bd\u01be\3\2\2\2\u01be") + buf.write("\u01bf\3\2\2\2\u01bf\u01c0\bH\2\2\u01c0\u0090\3\2\2\2") + buf.write("\u01c1\u01c2\13\2\2\2\u01c2\u0092\3\2\2\2\21\2\u0171\u0176") + buf.write("\u017c\u0180\u0185\u0187\u018d\u018f\u0198\u019a\u01a3") + buf.write("\u01ad\u01b5\u01bd\3\b\2\2") return buf.getvalue() @@ -265,14 +269,15 @@ class PyxellLexer(Lexer): T__57 = 58 T__58 = 59 T__59 = 60 - INT = 61 - FLOAT = 62 - CHAR = 63 - STRING = 64 - ID = 65 - COMMENT = 66 - WS = 67 - ERR = 68 + T__60 = 61 + INT = 62 + FLOAT = 63 + CHAR = 64 + STRING = 65 + ID = 66 + COMMENT = 67 + WS = 68 + ERR = 69 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -283,11 +288,11 @@ class PyxellLexer(Lexer): "'+'", "'-'", "'<<'", "'>>'", "'&'", "'$'", "'|'", "'break'", "'continue'", "'return'", "','", "'if'", "'elif'", "'else'", "'while'", "'until'", "'for'", "'in'", "'step'", "'func'", "'('", - "')'", "':'", "'do'", "'{'", "'}'", "'def'", "'['", "']'", "'.'", - "'~'", "'..'", "'...'", "'=='", "'!='", "'<'", "'<='", "'>'", - "'>='", "'not'", "'and'", "'or'", "'?'", "'true'", "'false'", - "'Void'", "'Int'", "'Float'", "'Bool'", "'Char'", "'String'", - "'->'" ] + "')'", "'extern'", "':'", "'do'", "'{'", "'}'", "'def'", "'['", + "']'", "'.'", "'~'", "'..'", "'...'", "'=='", "'!='", "'<'", + "'<='", "'>'", "'>='", "'not'", "'and'", "'or'", "'?'", "'true'", + "'false'", "'Void'", "'Int'", "'Float'", "'Bool'", "'Char'", + "'String'", "'->'" ] symbolicNames = [ "", "INT", "FLOAT", "CHAR", "STRING", "ID", "COMMENT", "WS", "ERR" ] @@ -301,9 +306,9 @@ class PyxellLexer(Lexer): "T__38", "T__39", "T__40", "T__41", "T__42", "T__43", "T__44", "T__45", "T__46", "T__47", "T__48", "T__49", "T__50", "T__51", "T__52", "T__53", "T__54", "T__55", - "T__56", "T__57", "T__58", "T__59", "INT", "FLOAT", "CHAR", - "STRING", "ID", "DIGIT", "ID_START", "ID_CONT", "COMMENT", - "WS", "ERR" ] + "T__56", "T__57", "T__58", "T__59", "T__60", "INT", "FLOAT", + "CHAR", "STRING", "ID", "DIGIT", "ID_START", "ID_CONT", + "COMMENT", "WS", "ERR" ] grammarFileName = "Pyxell.g4" diff --git a/src/antlr/PyxellLexer.tokens b/src/antlr/PyxellLexer.tokens index 2b4922ee..0a7a727a 100644 --- a/src/antlr/PyxellLexer.tokens +++ b/src/antlr/PyxellLexer.tokens @@ -58,14 +58,15 @@ T__56=57 T__57=58 T__58=59 T__59=60 -INT=61 -FLOAT=62 -CHAR=63 -STRING=64 -ID=65 -COMMENT=66 -WS=67 -ERR=68 +T__60=61 +INT=62 +FLOAT=63 +CHAR=64 +STRING=65 +ID=66 +COMMENT=67 +WS=68 +ERR=69 ';'=1 'skip'=2 'print'=3 @@ -96,33 +97,34 @@ ERR=68 'func'=28 '('=29 ')'=30 -':'=31 -'do'=32 -'{'=33 -'}'=34 -'def'=35 -'['=36 -']'=37 -'.'=38 -'~'=39 -'..'=40 -'...'=41 -'=='=42 -'!='=43 -'<'=44 -'<='=45 -'>'=46 -'>='=47 -'not'=48 -'and'=49 -'or'=50 -'?'=51 -'true'=52 -'false'=53 -'Void'=54 -'Int'=55 -'Float'=56 -'Bool'=57 -'Char'=58 -'String'=59 -'->'=60 +'extern'=31 +':'=32 +'do'=33 +'{'=34 +'}'=35 +'def'=36 +'['=37 +']'=38 +'.'=39 +'~'=40 +'..'=41 +'...'=42 +'=='=43 +'!='=44 +'<'=45 +'<='=46 +'>'=47 +'>='=48 +'not'=49 +'and'=50 +'or'=51 +'?'=52 +'true'=53 +'false'=54 +'Void'=55 +'Int'=56 +'Float'=57 +'Bool'=58 +'Char'=59 +'String'=60 +'->'=61 diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index 5a1c1516..22f19ad7 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -8,8 +8,8 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3F") - buf.write("\u0135\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3G") + buf.write("\u0134\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16") buf.write("\t\16\3\2\7\2\36\n\2\f\2\16\2!\13\2\3\2\3\2\3\3\3\3\3") buf.write("\3\3\3\5\3)\n\3\3\4\3\4\3\4\5\4.\n\4\3\4\3\4\3\4\3\4\5") @@ -19,142 +19,140 @@ def serializedATN(): buf.write("\6\7\6Z\n\6\f\6\16\6]\13\6\3\6\3\6\5\6a\n\6\3\6\3\6\3") buf.write("\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\5\6q\n") buf.write("\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\7\6{\n\6\f\6\16\6~") - buf.write("\13\6\3\6\5\6\u0081\n\6\3\6\3\6\5\6\u0085\n\6\3\6\5\6") - buf.write("\u0088\n\6\3\7\3\7\3\7\3\7\5\7\u008e\n\7\3\b\3\b\3\b\6") - buf.write("\b\u0093\n\b\r\b\16\b\u0094\3\b\3\b\3\t\3\t\3\t\6\t\u009c") - buf.write("\n\t\r\t\16\t\u009d\3\t\3\t\3\n\3\n\3\n\7\n\u00a5\n\n") - buf.write("\f\n\16\n\u00a8\13\n\3\n\3\n\3\13\3\13\3\13\3\13\3\13") - buf.write("\3\13\3\13\3\13\3\13\3\13\5\13\u00b6\n\13\3\13\3\13\3") - buf.write("\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") + buf.write("\13\6\3\6\5\6\u0081\n\6\3\6\3\6\5\6\u0085\n\6\3\6\3\6") + buf.write("\3\6\5\6\u008a\n\6\5\6\u008c\n\6\3\7\3\7\3\7\3\7\5\7\u0092") + buf.write("\n\7\3\b\3\b\3\b\6\b\u0097\n\b\r\b\16\b\u0098\3\b\3\b") + buf.write("\3\t\3\t\3\t\6\t\u00a0\n\t\r\t\16\t\u00a1\3\t\3\t\3\n") + buf.write("\3\n\3\n\7\n\u00a9\n\n\f\n\16\n\u00ac\13\n\3\n\3\n\3\13") + buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\5\13\u00ba") + buf.write("\n\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") - buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\7\13\u00ec\n\13\f\13\16") - buf.write("\13\u00ef\13\13\3\13\5\13\u00f2\n\13\3\13\3\13\3\13\7") - buf.write("\13\u00f7\n\13\f\13\16\13\u00fa\13\13\3\f\3\f\5\f\u00fe") - buf.write("\n\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\7\r\u010b") - buf.write("\n\r\f\r\16\r\u010e\13\r\3\r\5\r\u0111\n\r\3\r\3\r\5\r") - buf.write("\u0115\n\r\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16") - buf.write("\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\5\16\u0128\n") - buf.write("\16\3\16\3\16\3\16\3\16\3\16\3\16\7\16\u0130\n\16\f\16") - buf.write("\16\16\u0133\13\16\3\16\2\4\24\32\17\2\4\6\b\n\f\16\20") - buf.write("\22\24\26\30\32\2\13\3\2\7\21\3\2\22\23\4\2\13\f))\3\2") - buf.write("\b\n\3\2\13\f\3\2\r\16\3\2*+\3\2,\61\3\2\66\67\2\u016a") - buf.write("\2\37\3\2\2\2\4(\3\2\2\2\6H\3\2\2\2\bJ\3\2\2\2\n\u0087") - buf.write("\3\2\2\2\f\u0089\3\2\2\2\16\u008f\3\2\2\2\20\u0098\3\2") - buf.write("\2\2\22\u00a6\3\2\2\2\24\u00b5\3\2\2\2\26\u00fd\3\2\2") - buf.write("\2\30\u0114\3\2\2\2\32\u0127\3\2\2\2\34\36\5\4\3\2\35") - buf.write("\34\3\2\2\2\36!\3\2\2\2\37\35\3\2\2\2\37 \3\2\2\2 \"\3") - buf.write("\2\2\2!\37\3\2\2\2\"#\7\2\2\3#\3\3\2\2\2$%\5\6\4\2%&\7") - buf.write("\3\2\2&)\3\2\2\2\')\5\n\6\2($\3\2\2\2(\'\3\2\2\2)\5\3") - buf.write("\2\2\2*I\7\4\2\2+-\7\5\2\2,.\5\22\n\2-,\3\2\2\2-.\3\2") - buf.write("\2\2.I\3\2\2\2/\60\5\32\16\2\60\63\7C\2\2\61\62\7\6\2") - buf.write("\2\62\64\5\22\n\2\63\61\3\2\2\2\63\64\3\2\2\2\64I\3\2") - buf.write("\2\2\65\66\5\b\5\2\66\67\7\6\2\2\679\3\2\2\28\65\3\2\2") - buf.write("\29<\3\2\2\2:8\3\2\2\2:;\3\2\2\2;=\3\2\2\2<:\3\2\2\2=") - buf.write("I\5\22\n\2>?\5\24\13\2?@\t\2\2\2@A\7\6\2\2AB\5\24\13\2") - buf.write("BI\3\2\2\2CI\t\3\2\2DF\7\24\2\2EG\5\22\n\2FE\3\2\2\2F") - buf.write("G\3\2\2\2GI\3\2\2\2H*\3\2\2\2H+\3\2\2\2H/\3\2\2\2H:\3") - buf.write("\2\2\2H>\3\2\2\2HC\3\2\2\2HD\3\2\2\2I\7\3\2\2\2JO\5\24") - buf.write("\13\2KL\7\25\2\2LN\5\24\13\2MK\3\2\2\2NQ\3\2\2\2OM\3\2") - buf.write("\2\2OP\3\2\2\2P\t\3\2\2\2QO\3\2\2\2RS\7\26\2\2ST\5\24") - buf.write("\13\2T[\5\16\b\2UV\7\27\2\2VW\5\24\13\2WX\5\16\b\2XZ\3") - buf.write("\2\2\2YU\3\2\2\2Z]\3\2\2\2[Y\3\2\2\2[\\\3\2\2\2\\`\3\2") - buf.write("\2\2][\3\2\2\2^_\7\30\2\2_a\5\16\b\2`^\3\2\2\2`a\3\2\2") - buf.write("\2a\u0088\3\2\2\2bc\7\31\2\2cd\5\24\13\2de\5\16\b\2e\u0088") - buf.write("\3\2\2\2fg\7\32\2\2gh\5\24\13\2hi\5\16\b\2i\u0088\3\2") - buf.write("\2\2jk\7\33\2\2kl\5\22\n\2lm\7\34\2\2mp\5\22\n\2no\7\35") - buf.write("\2\2oq\5\22\n\2pn\3\2\2\2pq\3\2\2\2qr\3\2\2\2rs\5\16\b") - buf.write("\2s\u0088\3\2\2\2tu\7\36\2\2uv\7C\2\2v|\7\37\2\2wx\5\f") - buf.write("\7\2xy\7\25\2\2y{\3\2\2\2zw\3\2\2\2{~\3\2\2\2|z\3\2\2") - buf.write("\2|}\3\2\2\2}\u0080\3\2\2\2~|\3\2\2\2\177\u0081\5\f\7") - buf.write("\2\u0080\177\3\2\2\2\u0080\u0081\3\2\2\2\u0081\u0082\3") - buf.write("\2\2\2\u0082\u0084\7 \2\2\u0083\u0085\5\32\16\2\u0084") - buf.write("\u0083\3\2\2\2\u0084\u0085\3\2\2\2\u0085\u0086\3\2\2\2") - buf.write("\u0086\u0088\5\20\t\2\u0087R\3\2\2\2\u0087b\3\2\2\2\u0087") - buf.write("f\3\2\2\2\u0087j\3\2\2\2\u0087t\3\2\2\2\u0088\13\3\2\2") - buf.write("\2\u0089\u008a\5\32\16\2\u008a\u008d\7C\2\2\u008b\u008c") - buf.write("\7!\2\2\u008c\u008e\5\24\13\2\u008d\u008b\3\2\2\2\u008d") - buf.write("\u008e\3\2\2\2\u008e\r\3\2\2\2\u008f\u0090\7\"\2\2\u0090") - buf.write("\u0092\7#\2\2\u0091\u0093\5\4\3\2\u0092\u0091\3\2\2\2") - buf.write("\u0093\u0094\3\2\2\2\u0094\u0092\3\2\2\2\u0094\u0095\3") - buf.write("\2\2\2\u0095\u0096\3\2\2\2\u0096\u0097\7$\2\2\u0097\17") - buf.write("\3\2\2\2\u0098\u0099\7%\2\2\u0099\u009b\7#\2\2\u009a\u009c") - buf.write("\5\4\3\2\u009b\u009a\3\2\2\2\u009c\u009d\3\2\2\2\u009d") - buf.write("\u009b\3\2\2\2\u009d\u009e\3\2\2\2\u009e\u009f\3\2\2\2") - buf.write("\u009f\u00a0\7$\2\2\u00a0\21\3\2\2\2\u00a1\u00a2\5\24") - buf.write("\13\2\u00a2\u00a3\7\25\2\2\u00a3\u00a5\3\2\2\2\u00a4\u00a1") - buf.write("\3\2\2\2\u00a5\u00a8\3\2\2\2\u00a6\u00a4\3\2\2\2\u00a6") - buf.write("\u00a7\3\2\2\2\u00a7\u00a9\3\2\2\2\u00a8\u00a6\3\2\2\2") - buf.write("\u00a9\u00aa\5\24\13\2\u00aa\23\3\2\2\2\u00ab\u00ac\b") - buf.write("\13\1\2\u00ac\u00b6\5\30\r\2\u00ad\u00ae\7\37\2\2\u00ae") - buf.write("\u00af\5\22\n\2\u00af\u00b0\7 \2\2\u00b0\u00b6\3\2\2\2") - buf.write("\u00b1\u00b2\t\4\2\2\u00b2\u00b6\5\24\13\20\u00b3\u00b4") - buf.write("\7\62\2\2\u00b4\u00b6\5\24\13\6\u00b5\u00ab\3\2\2\2\u00b5") - buf.write("\u00ad\3\2\2\2\u00b5\u00b1\3\2\2\2\u00b5\u00b3\3\2\2\2") - buf.write("\u00b6\u00f8\3\2\2\2\u00b7\u00b8\f\21\2\2\u00b8\u00b9") - buf.write("\7\7\2\2\u00b9\u00f7\5\24\13\21\u00ba\u00bb\f\17\2\2\u00bb") - buf.write("\u00bc\t\5\2\2\u00bc\u00f7\5\24\13\20\u00bd\u00be\f\16") - buf.write("\2\2\u00be\u00bf\t\6\2\2\u00bf\u00f7\5\24\13\17\u00c0") - buf.write("\u00c1\f\r\2\2\u00c1\u00c2\t\7\2\2\u00c2\u00f7\5\24\13") - buf.write("\16\u00c3\u00c4\f\f\2\2\u00c4\u00c5\7\17\2\2\u00c5\u00f7") - buf.write("\5\24\13\r\u00c6\u00c7\f\13\2\2\u00c7\u00c8\7\20\2\2\u00c8") - buf.write("\u00f7\5\24\13\f\u00c9\u00ca\f\n\2\2\u00ca\u00cb\7\21") - buf.write("\2\2\u00cb\u00f7\5\24\13\13\u00cc\u00cd\f\t\2\2\u00cd") - buf.write("\u00ce\t\b\2\2\u00ce\u00f7\5\24\13\n\u00cf\u00d0\f\7\2") - buf.write("\2\u00d0\u00d1\t\t\2\2\u00d1\u00f7\5\24\13\7\u00d2\u00d3") - buf.write("\f\5\2\2\u00d3\u00d4\7\63\2\2\u00d4\u00f7\5\24\13\5\u00d5") - buf.write("\u00d6\f\4\2\2\u00d6\u00d7\7\64\2\2\u00d7\u00f7\5\24\13") - buf.write("\4\u00d8\u00d9\f\3\2\2\u00d9\u00da\7\65\2\2\u00da\u00db") - buf.write("\5\24\13\2\u00db\u00dc\7!\2\2\u00dc\u00dd\5\24\13\3\u00dd") - buf.write("\u00f7\3\2\2\2\u00de\u00df\f\24\2\2\u00df\u00e0\7&\2\2") - buf.write("\u00e0\u00e1\5\24\13\2\u00e1\u00e2\7\'\2\2\u00e2\u00f7") - buf.write("\3\2\2\2\u00e3\u00e4\f\23\2\2\u00e4\u00e5\7(\2\2\u00e5") - buf.write("\u00f7\7C\2\2\u00e6\u00e7\f\22\2\2\u00e7\u00ed\7\37\2") - buf.write("\2\u00e8\u00e9\5\26\f\2\u00e9\u00ea\7\25\2\2\u00ea\u00ec") - buf.write("\3\2\2\2\u00eb\u00e8\3\2\2\2\u00ec\u00ef\3\2\2\2\u00ed") - buf.write("\u00eb\3\2\2\2\u00ed\u00ee\3\2\2\2\u00ee\u00f1\3\2\2\2") - buf.write("\u00ef\u00ed\3\2\2\2\u00f0\u00f2\5\26\f\2\u00f1\u00f0") - buf.write("\3\2\2\2\u00f1\u00f2\3\2\2\2\u00f2\u00f3\3\2\2\2\u00f3") - buf.write("\u00f7\7 \2\2\u00f4\u00f5\f\b\2\2\u00f5\u00f7\7+\2\2\u00f6") - buf.write("\u00b7\3\2\2\2\u00f6\u00ba\3\2\2\2\u00f6\u00bd\3\2\2\2") - buf.write("\u00f6\u00c0\3\2\2\2\u00f6\u00c3\3\2\2\2\u00f6\u00c6\3") - buf.write("\2\2\2\u00f6\u00c9\3\2\2\2\u00f6\u00cc\3\2\2\2\u00f6\u00cf") - buf.write("\3\2\2\2\u00f6\u00d2\3\2\2\2\u00f6\u00d5\3\2\2\2\u00f6") - buf.write("\u00d8\3\2\2\2\u00f6\u00de\3\2\2\2\u00f6\u00e3\3\2\2\2") - buf.write("\u00f6\u00e6\3\2\2\2\u00f6\u00f4\3\2\2\2\u00f7\u00fa\3") - buf.write("\2\2\2\u00f8\u00f6\3\2\2\2\u00f8\u00f9\3\2\2\2\u00f9\25") - buf.write("\3\2\2\2\u00fa\u00f8\3\2\2\2\u00fb\u00fc\7C\2\2\u00fc") - buf.write("\u00fe\7\6\2\2\u00fd\u00fb\3\2\2\2\u00fd\u00fe\3\2\2\2") - buf.write("\u00fe\u00ff\3\2\2\2\u00ff\u0100\5\24\13\2\u0100\27\3") - buf.write("\2\2\2\u0101\u0115\7?\2\2\u0102\u0115\7@\2\2\u0103\u0115") - buf.write("\t\n\2\2\u0104\u0115\7A\2\2\u0105\u0115\7B\2\2\u0106\u010c") - buf.write("\7&\2\2\u0107\u0108\5\24\13\2\u0108\u0109\7\25\2\2\u0109") - buf.write("\u010b\3\2\2\2\u010a\u0107\3\2\2\2\u010b\u010e\3\2\2\2") - buf.write("\u010c\u010a\3\2\2\2\u010c\u010d\3\2\2\2\u010d\u0110\3") - buf.write("\2\2\2\u010e\u010c\3\2\2\2\u010f\u0111\5\24\13\2\u0110") - buf.write("\u010f\3\2\2\2\u0110\u0111\3\2\2\2\u0111\u0112\3\2\2\2") - buf.write("\u0112\u0115\7\'\2\2\u0113\u0115\7C\2\2\u0114\u0101\3") - buf.write("\2\2\2\u0114\u0102\3\2\2\2\u0114\u0103\3\2\2\2\u0114\u0104") - buf.write("\3\2\2\2\u0114\u0105\3\2\2\2\u0114\u0106\3\2\2\2\u0114") - buf.write("\u0113\3\2\2\2\u0115\31\3\2\2\2\u0116\u0117\b\16\1\2\u0117") - buf.write("\u0128\78\2\2\u0118\u0128\79\2\2\u0119\u0128\7:\2\2\u011a") - buf.write("\u0128\7;\2\2\u011b\u0128\7<\2\2\u011c\u0128\7=\2\2\u011d") - buf.write("\u011e\7\37\2\2\u011e\u011f\5\32\16\2\u011f\u0120\7 \2") - buf.write("\2\u0120\u0128\3\2\2\2\u0121\u0122\7&\2\2\u0122\u0123") - buf.write("\5\32\16\2\u0123\u0124\7\'\2\2\u0124\u0128\3\2\2\2\u0125") - buf.write("\u0126\7>\2\2\u0126\u0128\5\32\16\3\u0127\u0116\3\2\2") - buf.write("\2\u0127\u0118\3\2\2\2\u0127\u0119\3\2\2\2\u0127\u011a") - buf.write("\3\2\2\2\u0127\u011b\3\2\2\2\u0127\u011c\3\2\2\2\u0127") - buf.write("\u011d\3\2\2\2\u0127\u0121\3\2\2\2\u0127\u0125\3\2\2\2") - buf.write("\u0128\u0131\3\2\2\2\u0129\u012a\f\5\2\2\u012a\u012b\7") - buf.write("\b\2\2\u012b\u0130\5\32\16\5\u012c\u012d\f\4\2\2\u012d") - buf.write("\u012e\7>\2\2\u012e\u0130\5\32\16\4\u012f\u0129\3\2\2") - buf.write("\2\u012f\u012c\3\2\2\2\u0130\u0133\3\2\2\2\u0131\u012f") - buf.write("\3\2\2\2\u0131\u0132\3\2\2\2\u0132\33\3\2\2\2\u0133\u0131") - buf.write("\3\2\2\2!\37(-\63:FHO[`p|\u0080\u0084\u0087\u008d\u0094") - buf.write("\u009d\u00a6\u00b5\u00ed\u00f1\u00f6\u00f8\u00fd\u010c") - buf.write("\u0110\u0114\u0127\u012f\u0131") + buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\7\13\u00f0") + buf.write("\n\13\f\13\16\13\u00f3\13\13\3\13\5\13\u00f6\n\13\3\13") + buf.write("\3\13\3\13\7\13\u00fb\n\13\f\13\16\13\u00fe\13\13\3\f") + buf.write("\3\f\5\f\u0102\n\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r") + buf.write("\3\r\3\r\7\r\u010f\n\r\f\r\16\r\u0112\13\r\3\r\5\r\u0115") + buf.write("\n\r\3\r\3\r\5\r\u0119\n\r\3\16\3\16\3\16\3\16\3\16\3") + buf.write("\16\3\16\3\16\3\16\3\16\3\16\3\16\5\16\u0127\n\16\3\16") + buf.write("\3\16\3\16\3\16\3\16\3\16\7\16\u012f\n\16\f\16\16\16\u0132") + buf.write("\13\16\3\16\2\4\24\32\17\2\4\6\b\n\f\16\20\22\24\26\30") + buf.write("\32\2\f\3\2\7\21\3\2\22\23\4\2\13\f**\3\2\b\n\3\2\13\f") + buf.write("\3\2\r\16\3\2+,\3\2-\62\3\2\678\3\29>\2\u0165\2\37\3\2") + buf.write("\2\2\4(\3\2\2\2\6H\3\2\2\2\bJ\3\2\2\2\n\u008b\3\2\2\2") + buf.write("\f\u008d\3\2\2\2\16\u0093\3\2\2\2\20\u009c\3\2\2\2\22") + buf.write("\u00aa\3\2\2\2\24\u00b9\3\2\2\2\26\u0101\3\2\2\2\30\u0118") + buf.write("\3\2\2\2\32\u0126\3\2\2\2\34\36\5\4\3\2\35\34\3\2\2\2") + buf.write("\36!\3\2\2\2\37\35\3\2\2\2\37 \3\2\2\2 \"\3\2\2\2!\37") + buf.write("\3\2\2\2\"#\7\2\2\3#\3\3\2\2\2$%\5\6\4\2%&\7\3\2\2&)\3") + buf.write("\2\2\2\')\5\n\6\2($\3\2\2\2(\'\3\2\2\2)\5\3\2\2\2*I\7") + buf.write("\4\2\2+-\7\5\2\2,.\5\22\n\2-,\3\2\2\2-.\3\2\2\2.I\3\2") + buf.write("\2\2/\60\5\32\16\2\60\63\7D\2\2\61\62\7\6\2\2\62\64\5") + buf.write("\22\n\2\63\61\3\2\2\2\63\64\3\2\2\2\64I\3\2\2\2\65\66") + buf.write("\5\b\5\2\66\67\7\6\2\2\679\3\2\2\28\65\3\2\2\29<\3\2\2") + buf.write("\2:8\3\2\2\2:;\3\2\2\2;=\3\2\2\2<:\3\2\2\2=I\5\22\n\2") + buf.write(">?\5\24\13\2?@\t\2\2\2@A\7\6\2\2AB\5\24\13\2BI\3\2\2\2") + buf.write("CI\t\3\2\2DF\7\24\2\2EG\5\22\n\2FE\3\2\2\2FG\3\2\2\2G") + buf.write("I\3\2\2\2H*\3\2\2\2H+\3\2\2\2H/\3\2\2\2H:\3\2\2\2H>\3") + buf.write("\2\2\2HC\3\2\2\2HD\3\2\2\2I\7\3\2\2\2JO\5\24\13\2KL\7") + buf.write("\25\2\2LN\5\24\13\2MK\3\2\2\2NQ\3\2\2\2OM\3\2\2\2OP\3") + buf.write("\2\2\2P\t\3\2\2\2QO\3\2\2\2RS\7\26\2\2ST\5\24\13\2T[\5") + buf.write("\16\b\2UV\7\27\2\2VW\5\24\13\2WX\5\16\b\2XZ\3\2\2\2YU") + buf.write("\3\2\2\2Z]\3\2\2\2[Y\3\2\2\2[\\\3\2\2\2\\`\3\2\2\2][\3") + buf.write("\2\2\2^_\7\30\2\2_a\5\16\b\2`^\3\2\2\2`a\3\2\2\2a\u008c") + buf.write("\3\2\2\2bc\7\31\2\2cd\5\24\13\2de\5\16\b\2e\u008c\3\2") + buf.write("\2\2fg\7\32\2\2gh\5\24\13\2hi\5\16\b\2i\u008c\3\2\2\2") + buf.write("jk\7\33\2\2kl\5\22\n\2lm\7\34\2\2mp\5\22\n\2no\7\35\2") + buf.write("\2oq\5\22\n\2pn\3\2\2\2pq\3\2\2\2qr\3\2\2\2rs\5\16\b\2") + buf.write("s\u008c\3\2\2\2tu\7\36\2\2uv\7D\2\2v|\7\37\2\2wx\5\f\7") + buf.write("\2xy\7\25\2\2y{\3\2\2\2zw\3\2\2\2{~\3\2\2\2|z\3\2\2\2") + buf.write("|}\3\2\2\2}\u0080\3\2\2\2~|\3\2\2\2\177\u0081\5\f\7\2") + buf.write("\u0080\177\3\2\2\2\u0080\u0081\3\2\2\2\u0081\u0082\3\2") + buf.write("\2\2\u0082\u0084\7 \2\2\u0083\u0085\5\32\16\2\u0084\u0083") + buf.write("\3\2\2\2\u0084\u0085\3\2\2\2\u0085\u0089\3\2\2\2\u0086") + buf.write("\u008a\5\20\t\2\u0087\u0088\7!\2\2\u0088\u008a\7\3\2\2") + buf.write("\u0089\u0086\3\2\2\2\u0089\u0087\3\2\2\2\u008a\u008c\3") + buf.write("\2\2\2\u008bR\3\2\2\2\u008bb\3\2\2\2\u008bf\3\2\2\2\u008b") + buf.write("j\3\2\2\2\u008bt\3\2\2\2\u008c\13\3\2\2\2\u008d\u008e") + buf.write("\5\32\16\2\u008e\u0091\7D\2\2\u008f\u0090\7\"\2\2\u0090") + buf.write("\u0092\5\24\13\2\u0091\u008f\3\2\2\2\u0091\u0092\3\2\2") + buf.write("\2\u0092\r\3\2\2\2\u0093\u0094\7#\2\2\u0094\u0096\7$\2") + buf.write("\2\u0095\u0097\5\4\3\2\u0096\u0095\3\2\2\2\u0097\u0098") + buf.write("\3\2\2\2\u0098\u0096\3\2\2\2\u0098\u0099\3\2\2\2\u0099") + buf.write("\u009a\3\2\2\2\u009a\u009b\7%\2\2\u009b\17\3\2\2\2\u009c") + buf.write("\u009d\7&\2\2\u009d\u009f\7$\2\2\u009e\u00a0\5\4\3\2\u009f") + buf.write("\u009e\3\2\2\2\u00a0\u00a1\3\2\2\2\u00a1\u009f\3\2\2\2") + buf.write("\u00a1\u00a2\3\2\2\2\u00a2\u00a3\3\2\2\2\u00a3\u00a4\7") + buf.write("%\2\2\u00a4\21\3\2\2\2\u00a5\u00a6\5\24\13\2\u00a6\u00a7") + buf.write("\7\25\2\2\u00a7\u00a9\3\2\2\2\u00a8\u00a5\3\2\2\2\u00a9") + buf.write("\u00ac\3\2\2\2\u00aa\u00a8\3\2\2\2\u00aa\u00ab\3\2\2\2") + buf.write("\u00ab\u00ad\3\2\2\2\u00ac\u00aa\3\2\2\2\u00ad\u00ae\5") + buf.write("\24\13\2\u00ae\23\3\2\2\2\u00af\u00b0\b\13\1\2\u00b0\u00ba") + buf.write("\5\30\r\2\u00b1\u00b2\7\37\2\2\u00b2\u00b3\5\22\n\2\u00b3") + buf.write("\u00b4\7 \2\2\u00b4\u00ba\3\2\2\2\u00b5\u00b6\t\4\2\2") + buf.write("\u00b6\u00ba\5\24\13\20\u00b7\u00b8\7\63\2\2\u00b8\u00ba") + buf.write("\5\24\13\6\u00b9\u00af\3\2\2\2\u00b9\u00b1\3\2\2\2\u00b9") + buf.write("\u00b5\3\2\2\2\u00b9\u00b7\3\2\2\2\u00ba\u00fc\3\2\2\2") + buf.write("\u00bb\u00bc\f\21\2\2\u00bc\u00bd\7\7\2\2\u00bd\u00fb") + buf.write("\5\24\13\21\u00be\u00bf\f\17\2\2\u00bf\u00c0\t\5\2\2\u00c0") + buf.write("\u00fb\5\24\13\20\u00c1\u00c2\f\16\2\2\u00c2\u00c3\t\6") + buf.write("\2\2\u00c3\u00fb\5\24\13\17\u00c4\u00c5\f\r\2\2\u00c5") + buf.write("\u00c6\t\7\2\2\u00c6\u00fb\5\24\13\16\u00c7\u00c8\f\f") + buf.write("\2\2\u00c8\u00c9\7\17\2\2\u00c9\u00fb\5\24\13\r\u00ca") + buf.write("\u00cb\f\13\2\2\u00cb\u00cc\7\20\2\2\u00cc\u00fb\5\24") + buf.write("\13\f\u00cd\u00ce\f\n\2\2\u00ce\u00cf\7\21\2\2\u00cf\u00fb") + buf.write("\5\24\13\13\u00d0\u00d1\f\t\2\2\u00d1\u00d2\t\b\2\2\u00d2") + buf.write("\u00fb\5\24\13\n\u00d3\u00d4\f\7\2\2\u00d4\u00d5\t\t\2") + buf.write("\2\u00d5\u00fb\5\24\13\7\u00d6\u00d7\f\5\2\2\u00d7\u00d8") + buf.write("\7\64\2\2\u00d8\u00fb\5\24\13\5\u00d9\u00da\f\4\2\2\u00da") + buf.write("\u00db\7\65\2\2\u00db\u00fb\5\24\13\4\u00dc\u00dd\f\3") + buf.write("\2\2\u00dd\u00de\7\66\2\2\u00de\u00df\5\24\13\2\u00df") + buf.write("\u00e0\7\"\2\2\u00e0\u00e1\5\24\13\3\u00e1\u00fb\3\2\2") + buf.write("\2\u00e2\u00e3\f\24\2\2\u00e3\u00e4\7\'\2\2\u00e4\u00e5") + buf.write("\5\24\13\2\u00e5\u00e6\7(\2\2\u00e6\u00fb\3\2\2\2\u00e7") + buf.write("\u00e8\f\23\2\2\u00e8\u00e9\7)\2\2\u00e9\u00fb\7D\2\2") + buf.write("\u00ea\u00eb\f\22\2\2\u00eb\u00f1\7\37\2\2\u00ec\u00ed") + buf.write("\5\26\f\2\u00ed\u00ee\7\25\2\2\u00ee\u00f0\3\2\2\2\u00ef") + buf.write("\u00ec\3\2\2\2\u00f0\u00f3\3\2\2\2\u00f1\u00ef\3\2\2\2") + buf.write("\u00f1\u00f2\3\2\2\2\u00f2\u00f5\3\2\2\2\u00f3\u00f1\3") + buf.write("\2\2\2\u00f4\u00f6\5\26\f\2\u00f5\u00f4\3\2\2\2\u00f5") + buf.write("\u00f6\3\2\2\2\u00f6\u00f7\3\2\2\2\u00f7\u00fb\7 \2\2") + buf.write("\u00f8\u00f9\f\b\2\2\u00f9\u00fb\7,\2\2\u00fa\u00bb\3") + buf.write("\2\2\2\u00fa\u00be\3\2\2\2\u00fa\u00c1\3\2\2\2\u00fa\u00c4") + buf.write("\3\2\2\2\u00fa\u00c7\3\2\2\2\u00fa\u00ca\3\2\2\2\u00fa") + buf.write("\u00cd\3\2\2\2\u00fa\u00d0\3\2\2\2\u00fa\u00d3\3\2\2\2") + buf.write("\u00fa\u00d6\3\2\2\2\u00fa\u00d9\3\2\2\2\u00fa\u00dc\3") + buf.write("\2\2\2\u00fa\u00e2\3\2\2\2\u00fa\u00e7\3\2\2\2\u00fa\u00ea") + buf.write("\3\2\2\2\u00fa\u00f8\3\2\2\2\u00fb\u00fe\3\2\2\2\u00fc") + buf.write("\u00fa\3\2\2\2\u00fc\u00fd\3\2\2\2\u00fd\25\3\2\2\2\u00fe") + buf.write("\u00fc\3\2\2\2\u00ff\u0100\7D\2\2\u0100\u0102\7\6\2\2") + buf.write("\u0101\u00ff\3\2\2\2\u0101\u0102\3\2\2\2\u0102\u0103\3") + buf.write("\2\2\2\u0103\u0104\5\24\13\2\u0104\27\3\2\2\2\u0105\u0119") + buf.write("\7@\2\2\u0106\u0119\7A\2\2\u0107\u0119\t\n\2\2\u0108\u0119") + buf.write("\7B\2\2\u0109\u0119\7C\2\2\u010a\u0110\7\'\2\2\u010b\u010c") + buf.write("\5\24\13\2\u010c\u010d\7\25\2\2\u010d\u010f\3\2\2\2\u010e") + buf.write("\u010b\3\2\2\2\u010f\u0112\3\2\2\2\u0110\u010e\3\2\2\2") + buf.write("\u0110\u0111\3\2\2\2\u0111\u0114\3\2\2\2\u0112\u0110\3") + buf.write("\2\2\2\u0113\u0115\5\24\13\2\u0114\u0113\3\2\2\2\u0114") + buf.write("\u0115\3\2\2\2\u0115\u0116\3\2\2\2\u0116\u0119\7(\2\2") + buf.write("\u0117\u0119\7D\2\2\u0118\u0105\3\2\2\2\u0118\u0106\3") + buf.write("\2\2\2\u0118\u0107\3\2\2\2\u0118\u0108\3\2\2\2\u0118\u0109") + buf.write("\3\2\2\2\u0118\u010a\3\2\2\2\u0118\u0117\3\2\2\2\u0119") + buf.write("\31\3\2\2\2\u011a\u011b\b\16\1\2\u011b\u0127\t\13\2\2") + buf.write("\u011c\u011d\7\37\2\2\u011d\u011e\5\32\16\2\u011e\u011f") + buf.write("\7 \2\2\u011f\u0127\3\2\2\2\u0120\u0121\7\'\2\2\u0121") + buf.write("\u0122\5\32\16\2\u0122\u0123\7(\2\2\u0123\u0127\3\2\2") + buf.write("\2\u0124\u0125\7?\2\2\u0125\u0127\5\32\16\3\u0126\u011a") + buf.write("\3\2\2\2\u0126\u011c\3\2\2\2\u0126\u0120\3\2\2\2\u0126") + buf.write("\u0124\3\2\2\2\u0127\u0130\3\2\2\2\u0128\u0129\f\5\2\2") + buf.write("\u0129\u012a\7\b\2\2\u012a\u012f\5\32\16\5\u012b\u012c") + buf.write("\f\4\2\2\u012c\u012d\7?\2\2\u012d\u012f\5\32\16\4\u012e") + buf.write("\u0128\3\2\2\2\u012e\u012b\3\2\2\2\u012f\u0132\3\2\2\2") + buf.write("\u0130\u012e\3\2\2\2\u0130\u0131\3\2\2\2\u0131\33\3\2") + buf.write("\2\2\u0132\u0130\3\2\2\2\"\37(-\63:FHO[`p|\u0080\u0084") + buf.write("\u0089\u008b\u0091\u0098\u00a1\u00aa\u00b9\u00f1\u00f5") + buf.write("\u00fa\u00fc\u0101\u0110\u0114\u0118\u0126\u012e\u0130") return buf.getvalue() @@ -173,10 +171,10 @@ class PyxellParser ( Parser ): "'&'", "'$'", "'|'", "'break'", "'continue'", "'return'", "','", "'if'", "'elif'", "'else'", "'while'", "'until'", "'for'", "'in'", "'step'", "'func'", "'('", "')'", - "':'", "'do'", "'{'", "'}'", "'def'", "'['", "']'", - "'.'", "'~'", "'..'", "'...'", "'=='", "'!='", "'<'", - "'<='", "'>'", "'>='", "'not'", "'and'", "'or'", "'?'", - "'true'", "'false'", "'Void'", "'Int'", "'Float'", + "'extern'", "':'", "'do'", "'{'", "'}'", "'def'", "'['", + "']'", "'.'", "'~'", "'..'", "'...'", "'=='", "'!='", + "'<'", "'<='", "'>'", "'>='", "'not'", "'and'", "'or'", + "'?'", "'true'", "'false'", "'Void'", "'Int'", "'Float'", "'Bool'", "'Char'", "'String'", "'->'" ] symbolicNames = [ "", "", "", "", @@ -194,8 +192,8 @@ class PyxellParser ( Parser ): "", "", "", "", "", "", "", "", "", "", "", "", - "", "INT", "FLOAT", "CHAR", "STRING", "ID", - "COMMENT", "WS", "ERR" ] + "", "", "INT", "FLOAT", "CHAR", + "STRING", "ID", "COMMENT", "WS", "ERR" ] RULE_program = 0 RULE_stmt = 1 @@ -276,14 +274,15 @@ class PyxellParser ( Parser ): T__57=58 T__58=59 T__59=60 - INT=61 - FLOAT=62 - CHAR=63 - STRING=64 - ID=65 - COMMENT=66 - WS=67 - ERR=68 + T__60=61 + INT=62 + FLOAT=63 + CHAR=64 + STRING=65 + ID=66 + COMMENT=67 + WS=68 + ERR=69 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -332,7 +331,7 @@ def program(self): self.state = 29 self._errHandler.sync(self) _la = self._input.LA(1) - while ((((_la - 2)) & ~0x3f) == 0 and ((1 << (_la - 2)) & ((1 << (PyxellParser.T__1 - 2)) | (1 << (PyxellParser.T__2 - 2)) | (1 << (PyxellParser.T__8 - 2)) | (1 << (PyxellParser.T__9 - 2)) | (1 << (PyxellParser.T__15 - 2)) | (1 << (PyxellParser.T__16 - 2)) | (1 << (PyxellParser.T__17 - 2)) | (1 << (PyxellParser.T__19 - 2)) | (1 << (PyxellParser.T__22 - 2)) | (1 << (PyxellParser.T__23 - 2)) | (1 << (PyxellParser.T__24 - 2)) | (1 << (PyxellParser.T__27 - 2)) | (1 << (PyxellParser.T__28 - 2)) | (1 << (PyxellParser.T__35 - 2)) | (1 << (PyxellParser.T__38 - 2)) | (1 << (PyxellParser.T__47 - 2)) | (1 << (PyxellParser.T__51 - 2)) | (1 << (PyxellParser.T__52 - 2)) | (1 << (PyxellParser.T__53 - 2)) | (1 << (PyxellParser.T__54 - 2)) | (1 << (PyxellParser.T__55 - 2)) | (1 << (PyxellParser.T__56 - 2)) | (1 << (PyxellParser.T__57 - 2)) | (1 << (PyxellParser.T__58 - 2)) | (1 << (PyxellParser.T__59 - 2)) | (1 << (PyxellParser.INT - 2)) | (1 << (PyxellParser.FLOAT - 2)) | (1 << (PyxellParser.CHAR - 2)) | (1 << (PyxellParser.STRING - 2)) | (1 << (PyxellParser.ID - 2)))) != 0): + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__17) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__39) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__52) | (1 << PyxellParser.T__53) | (1 << PyxellParser.T__54) | (1 << PyxellParser.T__55) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60) | (1 << PyxellParser.INT) | (1 << PyxellParser.FLOAT))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0): self.state = 26 self.stmt() self.state = 31 @@ -384,7 +383,7 @@ def stmt(self): self.state = 38 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__15, PyxellParser.T__16, PyxellParser.T__17, PyxellParser.T__28, PyxellParser.T__35, PyxellParser.T__38, PyxellParser.T__47, PyxellParser.T__51, PyxellParser.T__52, PyxellParser.T__53, PyxellParser.T__54, PyxellParser.T__55, PyxellParser.T__56, PyxellParser.T__57, PyxellParser.T__58, PyxellParser.T__59, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: + if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__15, PyxellParser.T__16, PyxellParser.T__17, PyxellParser.T__28, PyxellParser.T__36, PyxellParser.T__39, PyxellParser.T__48, PyxellParser.T__52, PyxellParser.T__53, PyxellParser.T__54, PyxellParser.T__55, PyxellParser.T__56, PyxellParser.T__57, PyxellParser.T__58, PyxellParser.T__59, PyxellParser.T__60, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: self.enterOuterAlt(localctx, 1) self.state = 34 self.simple_stmt() @@ -578,7 +577,7 @@ def simple_stmt(self): self.state = 43 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 9)) & ~0x3f) == 0 and ((1 << (_la - 9)) & ((1 << (PyxellParser.T__8 - 9)) | (1 << (PyxellParser.T__9 - 9)) | (1 << (PyxellParser.T__28 - 9)) | (1 << (PyxellParser.T__35 - 9)) | (1 << (PyxellParser.T__38 - 9)) | (1 << (PyxellParser.T__47 - 9)) | (1 << (PyxellParser.T__51 - 9)) | (1 << (PyxellParser.T__52 - 9)) | (1 << (PyxellParser.INT - 9)) | (1 << (PyxellParser.FLOAT - 9)) | (1 << (PyxellParser.CHAR - 9)) | (1 << (PyxellParser.STRING - 9)) | (1 << (PyxellParser.ID - 9)))) != 0): + if ((((_la - 9)) & ~0x3f) == 0 and ((1 << (_la - 9)) & ((1 << (PyxellParser.T__8 - 9)) | (1 << (PyxellParser.T__9 - 9)) | (1 << (PyxellParser.T__28 - 9)) | (1 << (PyxellParser.T__36 - 9)) | (1 << (PyxellParser.T__39 - 9)) | (1 << (PyxellParser.T__48 - 9)) | (1 << (PyxellParser.T__52 - 9)) | (1 << (PyxellParser.T__53 - 9)) | (1 << (PyxellParser.INT - 9)) | (1 << (PyxellParser.FLOAT - 9)) | (1 << (PyxellParser.CHAR - 9)) | (1 << (PyxellParser.STRING - 9)) | (1 << (PyxellParser.ID - 9)))) != 0): self.state = 42 self.tuple_expr() @@ -664,7 +663,7 @@ def simple_stmt(self): self.state = 68 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 9)) & ~0x3f) == 0 and ((1 << (_la - 9)) & ((1 << (PyxellParser.T__8 - 9)) | (1 << (PyxellParser.T__9 - 9)) | (1 << (PyxellParser.T__28 - 9)) | (1 << (PyxellParser.T__35 - 9)) | (1 << (PyxellParser.T__38 - 9)) | (1 << (PyxellParser.T__47 - 9)) | (1 << (PyxellParser.T__51 - 9)) | (1 << (PyxellParser.T__52 - 9)) | (1 << (PyxellParser.INT - 9)) | (1 << (PyxellParser.FLOAT - 9)) | (1 << (PyxellParser.CHAR - 9)) | (1 << (PyxellParser.STRING - 9)) | (1 << (PyxellParser.ID - 9)))) != 0): + if ((((_la - 9)) & ~0x3f) == 0 and ((1 << (_la - 9)) & ((1 << (PyxellParser.T__8 - 9)) | (1 << (PyxellParser.T__9 - 9)) | (1 << (PyxellParser.T__28 - 9)) | (1 << (PyxellParser.T__36 - 9)) | (1 << (PyxellParser.T__39 - 9)) | (1 << (PyxellParser.T__48 - 9)) | (1 << (PyxellParser.T__52 - 9)) | (1 << (PyxellParser.T__53 - 9)) | (1 << (PyxellParser.INT - 9)) | (1 << (PyxellParser.FLOAT - 9)) | (1 << (PyxellParser.CHAR - 9)) | (1 << (PyxellParser.STRING - 9)) | (1 << (PyxellParser.ID - 9)))) != 0): self.state = 67 self.tuple_expr() @@ -878,7 +877,7 @@ def compound_stmt(self): self.enterRule(localctx, 8, self.RULE_compound_stmt) self._la = 0 # Token type try: - self.state = 133 + self.state = 137 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__19]: @@ -984,7 +983,7 @@ def compound_stmt(self): self.state = 126 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__28) | (1 << PyxellParser.T__35) | (1 << PyxellParser.T__53) | (1 << PyxellParser.T__54) | (1 << PyxellParser.T__55) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59))) != 0): + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__28) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__54) | (1 << PyxellParser.T__55) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60))) != 0): self.state = 125 self.func_arg() @@ -994,13 +993,27 @@ def compound_stmt(self): self.state = 130 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__28) | (1 << PyxellParser.T__35) | (1 << PyxellParser.T__53) | (1 << PyxellParser.T__54) | (1 << PyxellParser.T__55) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59))) != 0): + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__28) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__54) | (1 << PyxellParser.T__55) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60))) != 0): self.state = 129 localctx.ret = self.typ(0) - self.state = 132 - self.def_block() + self.state = 135 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [PyxellParser.T__35]: + self.state = 132 + self.def_block() + pass + elif token in [PyxellParser.T__30]: + self.state = 133 + self.match(PyxellParser.T__30) + self.state = 134 + self.match(PyxellParser.T__0) + pass + else: + raise NoViableAltException(self) + pass else: raise NoViableAltException(self) @@ -1051,17 +1064,17 @@ def func_arg(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 135 + self.state = 139 self.typ(0) - self.state = 136 + self.state = 140 self.match(PyxellParser.ID) - self.state = 139 + self.state = 143 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__30: - self.state = 137 - self.match(PyxellParser.T__30) - self.state = 138 + if _la==PyxellParser.T__31: + self.state = 141 + self.match(PyxellParser.T__31) + self.state = 142 localctx.default = self.expr(0) @@ -1106,24 +1119,24 @@ def do_block(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 141 - self.match(PyxellParser.T__31) - self.state = 142 + self.state = 145 self.match(PyxellParser.T__32) - self.state = 144 + self.state = 146 + self.match(PyxellParser.T__33) + self.state = 148 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 143 + self.state = 147 self.stmt() - self.state = 146 + self.state = 150 self._errHandler.sync(self) _la = self._input.LA(1) - if not (((((_la - 2)) & ~0x3f) == 0 and ((1 << (_la - 2)) & ((1 << (PyxellParser.T__1 - 2)) | (1 << (PyxellParser.T__2 - 2)) | (1 << (PyxellParser.T__8 - 2)) | (1 << (PyxellParser.T__9 - 2)) | (1 << (PyxellParser.T__15 - 2)) | (1 << (PyxellParser.T__16 - 2)) | (1 << (PyxellParser.T__17 - 2)) | (1 << (PyxellParser.T__19 - 2)) | (1 << (PyxellParser.T__22 - 2)) | (1 << (PyxellParser.T__23 - 2)) | (1 << (PyxellParser.T__24 - 2)) | (1 << (PyxellParser.T__27 - 2)) | (1 << (PyxellParser.T__28 - 2)) | (1 << (PyxellParser.T__35 - 2)) | (1 << (PyxellParser.T__38 - 2)) | (1 << (PyxellParser.T__47 - 2)) | (1 << (PyxellParser.T__51 - 2)) | (1 << (PyxellParser.T__52 - 2)) | (1 << (PyxellParser.T__53 - 2)) | (1 << (PyxellParser.T__54 - 2)) | (1 << (PyxellParser.T__55 - 2)) | (1 << (PyxellParser.T__56 - 2)) | (1 << (PyxellParser.T__57 - 2)) | (1 << (PyxellParser.T__58 - 2)) | (1 << (PyxellParser.T__59 - 2)) | (1 << (PyxellParser.INT - 2)) | (1 << (PyxellParser.FLOAT - 2)) | (1 << (PyxellParser.CHAR - 2)) | (1 << (PyxellParser.STRING - 2)) | (1 << (PyxellParser.ID - 2)))) != 0)): + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__17) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__39) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__52) | (1 << PyxellParser.T__53) | (1 << PyxellParser.T__54) | (1 << PyxellParser.T__55) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60) | (1 << PyxellParser.INT) | (1 << PyxellParser.FLOAT))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0)): break - self.state = 148 - self.match(PyxellParser.T__33) + self.state = 152 + self.match(PyxellParser.T__34) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -1165,24 +1178,24 @@ def def_block(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 150 - self.match(PyxellParser.T__34) - self.state = 151 - self.match(PyxellParser.T__32) - self.state = 153 + self.state = 154 + self.match(PyxellParser.T__35) + self.state = 155 + self.match(PyxellParser.T__33) + self.state = 157 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 152 + self.state = 156 self.stmt() - self.state = 155 + self.state = 159 self._errHandler.sync(self) _la = self._input.LA(1) - if not (((((_la - 2)) & ~0x3f) == 0 and ((1 << (_la - 2)) & ((1 << (PyxellParser.T__1 - 2)) | (1 << (PyxellParser.T__2 - 2)) | (1 << (PyxellParser.T__8 - 2)) | (1 << (PyxellParser.T__9 - 2)) | (1 << (PyxellParser.T__15 - 2)) | (1 << (PyxellParser.T__16 - 2)) | (1 << (PyxellParser.T__17 - 2)) | (1 << (PyxellParser.T__19 - 2)) | (1 << (PyxellParser.T__22 - 2)) | (1 << (PyxellParser.T__23 - 2)) | (1 << (PyxellParser.T__24 - 2)) | (1 << (PyxellParser.T__27 - 2)) | (1 << (PyxellParser.T__28 - 2)) | (1 << (PyxellParser.T__35 - 2)) | (1 << (PyxellParser.T__38 - 2)) | (1 << (PyxellParser.T__47 - 2)) | (1 << (PyxellParser.T__51 - 2)) | (1 << (PyxellParser.T__52 - 2)) | (1 << (PyxellParser.T__53 - 2)) | (1 << (PyxellParser.T__54 - 2)) | (1 << (PyxellParser.T__55 - 2)) | (1 << (PyxellParser.T__56 - 2)) | (1 << (PyxellParser.T__57 - 2)) | (1 << (PyxellParser.T__58 - 2)) | (1 << (PyxellParser.T__59 - 2)) | (1 << (PyxellParser.INT - 2)) | (1 << (PyxellParser.FLOAT - 2)) | (1 << (PyxellParser.CHAR - 2)) | (1 << (PyxellParser.STRING - 2)) | (1 << (PyxellParser.ID - 2)))) != 0)): + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__17) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__39) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__52) | (1 << PyxellParser.T__53) | (1 << PyxellParser.T__54) | (1 << PyxellParser.T__55) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60) | (1 << PyxellParser.INT) | (1 << PyxellParser.FLOAT))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0)): break - self.state = 157 - self.match(PyxellParser.T__33) + self.state = 161 + self.match(PyxellParser.T__34) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -1236,20 +1249,20 @@ def tuple_expr(self): try: localctx = PyxellParser.ExprTupleContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 164 + self.state = 168 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,18,self._ctx) + _alt = self._interp.adaptivePredict(self._input,19,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 159 + self.state = 163 self.expr(0) - self.state = 160 + self.state = 164 self.match(PyxellParser.T__18) - self.state = 166 + self.state = 170 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,18,self._ctx) + _alt = self._interp.adaptivePredict(self._input,19,self._ctx) - self.state = 167 + self.state = 171 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -1504,88 +1517,88 @@ def expr(self, _p:int=0): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 179 + self.state = 183 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__35, PyxellParser.T__51, PyxellParser.T__52, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: + if token in [PyxellParser.T__36, PyxellParser.T__52, PyxellParser.T__53, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: localctx = PyxellParser.ExprAtomContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 170 + self.state = 174 self.atom() pass elif token in [PyxellParser.T__28]: localctx = PyxellParser.ExprParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 171 + self.state = 175 self.match(PyxellParser.T__28) - self.state = 172 + self.state = 176 self.tuple_expr() - self.state = 173 + self.state = 177 self.match(PyxellParser.T__29) pass - elif token in [PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__38]: + elif token in [PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__39]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 175 + self.state = 179 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__38))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__39))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 176 + self.state = 180 self.expr(14) pass - elif token in [PyxellParser.T__47]: + elif token in [PyxellParser.T__48]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 177 - localctx.op = self.match(PyxellParser.T__47) - self.state = 178 + self.state = 181 + localctx.op = self.match(PyxellParser.T__48) + self.state = 182 self.expr(4) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 246 + self.state = 250 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,23,self._ctx) + _alt = self._interp.adaptivePredict(self._input,24,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 244 + self.state = 248 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,22,self._ctx) + la_ = self._interp.adaptivePredict(self._input,23,self._ctx) if la_ == 1: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 181 + self.state = 185 if not self.precpred(self._ctx, 15): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 15)") - self.state = 182 + self.state = 186 localctx.op = self.match(PyxellParser.T__4) - self.state = 183 + self.state = 187 self.expr(15) pass elif la_ == 2: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 184 + self.state = 188 if not self.precpred(self._ctx, 13): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") - self.state = 185 + self.state = 189 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__7))) != 0)): @@ -1593,18 +1606,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 186 + self.state = 190 self.expr(14) pass elif la_ == 3: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 187 + self.state = 191 if not self.precpred(self._ctx, 12): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 12)") - self.state = 188 + self.state = 192 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__8 or _la==PyxellParser.T__9): @@ -1612,18 +1625,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 189 + self.state = 193 self.expr(13) pass elif la_ == 4: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 190 + self.state = 194 if not self.precpred(self._ctx, 11): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") - self.state = 191 + self.state = 195 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__10 or _la==PyxellParser.T__11): @@ -1631,207 +1644,207 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 192 + self.state = 196 self.expr(12) pass elif la_ == 5: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 193 + self.state = 197 if not self.precpred(self._ctx, 10): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") - self.state = 194 + self.state = 198 localctx.op = self.match(PyxellParser.T__12) - self.state = 195 + self.state = 199 self.expr(11) pass elif la_ == 6: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 196 + self.state = 200 if not self.precpred(self._ctx, 9): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") - self.state = 197 + self.state = 201 localctx.op = self.match(PyxellParser.T__13) - self.state = 198 + self.state = 202 self.expr(10) pass elif la_ == 7: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 199 + self.state = 203 if not self.precpred(self._ctx, 8): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") - self.state = 200 + self.state = 204 localctx.op = self.match(PyxellParser.T__14) - self.state = 201 + self.state = 205 self.expr(9) pass elif la_ == 8: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 202 + self.state = 206 if not self.precpred(self._ctx, 7): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") - self.state = 203 + self.state = 207 localctx.dots = self._input.LT(1) _la = self._input.LA(1) - if not(_la==PyxellParser.T__39 or _la==PyxellParser.T__40): + if not(_la==PyxellParser.T__40 or _la==PyxellParser.T__41): localctx.dots = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 204 + self.state = 208 self.expr(8) pass elif la_ == 9: localctx = PyxellParser.ExprCmpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 205 + self.state = 209 if not self.precpred(self._ctx, 5): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") - self.state = 206 + self.state = 210 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__41) | (1 << PyxellParser.T__42) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__44) | (1 << PyxellParser.T__45) | (1 << PyxellParser.T__46))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__42) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__44) | (1 << PyxellParser.T__45) | (1 << PyxellParser.T__46) | (1 << PyxellParser.T__47))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 207 + self.state = 211 self.expr(5) pass elif la_ == 10: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 208 + self.state = 212 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 209 - localctx.op = self.match(PyxellParser.T__48) - self.state = 210 + self.state = 213 + localctx.op = self.match(PyxellParser.T__49) + self.state = 214 self.expr(3) pass elif la_ == 11: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 211 + self.state = 215 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 212 - localctx.op = self.match(PyxellParser.T__49) - self.state = 213 + self.state = 216 + localctx.op = self.match(PyxellParser.T__50) + self.state = 217 self.expr(2) pass elif la_ == 12: localctx = PyxellParser.ExprCondContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 214 + self.state = 218 if not self.precpred(self._ctx, 1): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") - self.state = 215 - self.match(PyxellParser.T__50) - self.state = 216 + self.state = 219 + self.match(PyxellParser.T__51) + self.state = 220 self.expr(0) - self.state = 217 - self.match(PyxellParser.T__30) - self.state = 218 + self.state = 221 + self.match(PyxellParser.T__31) + self.state = 222 self.expr(1) pass elif la_ == 13: localctx = PyxellParser.ExprIndexContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 220 + self.state = 224 if not self.precpred(self._ctx, 18): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 18)") - self.state = 221 - self.match(PyxellParser.T__35) - self.state = 222 - self.expr(0) - self.state = 223 + self.state = 225 self.match(PyxellParser.T__36) + self.state = 226 + self.expr(0) + self.state = 227 + self.match(PyxellParser.T__37) pass elif la_ == 14: localctx = PyxellParser.ExprAttrContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 225 + self.state = 229 if not self.precpred(self._ctx, 17): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 17)") - self.state = 226 - self.match(PyxellParser.T__37) - self.state = 227 + self.state = 230 + self.match(PyxellParser.T__38) + self.state = 231 self.match(PyxellParser.ID) pass elif la_ == 15: localctx = PyxellParser.ExprCallContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 228 + self.state = 232 if not self.precpred(self._ctx, 16): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 16)") - self.state = 229 + self.state = 233 self.match(PyxellParser.T__28) - self.state = 235 + self.state = 239 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,20,self._ctx) + _alt = self._interp.adaptivePredict(self._input,21,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 230 + self.state = 234 self.call_arg() - self.state = 231 + self.state = 235 self.match(PyxellParser.T__18) - self.state = 237 + self.state = 241 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,20,self._ctx) + _alt = self._interp.adaptivePredict(self._input,21,self._ctx) - self.state = 239 + self.state = 243 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 9)) & ~0x3f) == 0 and ((1 << (_la - 9)) & ((1 << (PyxellParser.T__8 - 9)) | (1 << (PyxellParser.T__9 - 9)) | (1 << (PyxellParser.T__28 - 9)) | (1 << (PyxellParser.T__35 - 9)) | (1 << (PyxellParser.T__38 - 9)) | (1 << (PyxellParser.T__47 - 9)) | (1 << (PyxellParser.T__51 - 9)) | (1 << (PyxellParser.T__52 - 9)) | (1 << (PyxellParser.INT - 9)) | (1 << (PyxellParser.FLOAT - 9)) | (1 << (PyxellParser.CHAR - 9)) | (1 << (PyxellParser.STRING - 9)) | (1 << (PyxellParser.ID - 9)))) != 0): - self.state = 238 + if ((((_la - 9)) & ~0x3f) == 0 and ((1 << (_la - 9)) & ((1 << (PyxellParser.T__8 - 9)) | (1 << (PyxellParser.T__9 - 9)) | (1 << (PyxellParser.T__28 - 9)) | (1 << (PyxellParser.T__36 - 9)) | (1 << (PyxellParser.T__39 - 9)) | (1 << (PyxellParser.T__48 - 9)) | (1 << (PyxellParser.T__52 - 9)) | (1 << (PyxellParser.T__53 - 9)) | (1 << (PyxellParser.INT - 9)) | (1 << (PyxellParser.FLOAT - 9)) | (1 << (PyxellParser.CHAR - 9)) | (1 << (PyxellParser.STRING - 9)) | (1 << (PyxellParser.ID - 9)))) != 0): + self.state = 242 self.call_arg() - self.state = 241 + self.state = 245 self.match(PyxellParser.T__29) pass elif la_ == 16: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 242 + self.state = 246 if not self.precpred(self._ctx, 6): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") - self.state = 243 - localctx.dots = self.match(PyxellParser.T__40) + self.state = 247 + localctx.dots = self.match(PyxellParser.T__41) pass - self.state = 248 + self.state = 252 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,23,self._ctx) + _alt = self._interp.adaptivePredict(self._input,24,self._ctx) except RecognitionException as re: localctx.exception = re @@ -1873,17 +1886,17 @@ def call_arg(self): self.enterRule(localctx, 20, self.RULE_call_arg) try: self.enterOuterAlt(localctx, 1) - self.state = 251 + self.state = 255 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,24,self._ctx) + la_ = self._interp.adaptivePredict(self._input,25,self._ctx) if la_ == 1: - self.state = 249 + self.state = 253 self.match(PyxellParser.ID) - self.state = 250 + self.state = 254 self.match(PyxellParser.T__3) - self.state = 253 + self.state = 257 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -2031,27 +2044,27 @@ def atom(self): self.enterRule(localctx, 22, self.RULE_atom) self._la = 0 # Token type try: - self.state = 274 + self.state = 278 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: localctx = PyxellParser.AtomIntContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 255 + self.state = 259 self.match(PyxellParser.INT) pass elif token in [PyxellParser.FLOAT]: localctx = PyxellParser.AtomFloatContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 256 + self.state = 260 self.match(PyxellParser.FLOAT) pass - elif token in [PyxellParser.T__51, PyxellParser.T__52]: + elif token in [PyxellParser.T__52, PyxellParser.T__53]: localctx = PyxellParser.AtomBoolContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 257 + self.state = 261 _la = self._input.LA(1) - if not(_la==PyxellParser.T__51 or _la==PyxellParser.T__52): + if not(_la==PyxellParser.T__52 or _la==PyxellParser.T__53): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -2060,48 +2073,48 @@ def atom(self): elif token in [PyxellParser.CHAR]: localctx = PyxellParser.AtomCharContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 258 + self.state = 262 self.match(PyxellParser.CHAR) pass elif token in [PyxellParser.STRING]: localctx = PyxellParser.AtomStringContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 259 + self.state = 263 self.match(PyxellParser.STRING) pass - elif token in [PyxellParser.T__35]: + elif token in [PyxellParser.T__36]: localctx = PyxellParser.AtomArrayContext(self, localctx) self.enterOuterAlt(localctx, 6) - self.state = 260 - self.match(PyxellParser.T__35) - self.state = 266 + self.state = 264 + self.match(PyxellParser.T__36) + self.state = 270 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,25,self._ctx) + _alt = self._interp.adaptivePredict(self._input,26,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 261 + self.state = 265 self.expr(0) - self.state = 262 + self.state = 266 self.match(PyxellParser.T__18) - self.state = 268 + self.state = 272 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,25,self._ctx) + _alt = self._interp.adaptivePredict(self._input,26,self._ctx) - self.state = 270 + self.state = 274 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 9)) & ~0x3f) == 0 and ((1 << (_la - 9)) & ((1 << (PyxellParser.T__8 - 9)) | (1 << (PyxellParser.T__9 - 9)) | (1 << (PyxellParser.T__28 - 9)) | (1 << (PyxellParser.T__35 - 9)) | (1 << (PyxellParser.T__38 - 9)) | (1 << (PyxellParser.T__47 - 9)) | (1 << (PyxellParser.T__51 - 9)) | (1 << (PyxellParser.T__52 - 9)) | (1 << (PyxellParser.INT - 9)) | (1 << (PyxellParser.FLOAT - 9)) | (1 << (PyxellParser.CHAR - 9)) | (1 << (PyxellParser.STRING - 9)) | (1 << (PyxellParser.ID - 9)))) != 0): - self.state = 269 + if ((((_la - 9)) & ~0x3f) == 0 and ((1 << (_la - 9)) & ((1 << (PyxellParser.T__8 - 9)) | (1 << (PyxellParser.T__9 - 9)) | (1 << (PyxellParser.T__28 - 9)) | (1 << (PyxellParser.T__36 - 9)) | (1 << (PyxellParser.T__39 - 9)) | (1 << (PyxellParser.T__48 - 9)) | (1 << (PyxellParser.T__52 - 9)) | (1 << (PyxellParser.T__53 - 9)) | (1 << (PyxellParser.INT - 9)) | (1 << (PyxellParser.FLOAT - 9)) | (1 << (PyxellParser.CHAR - 9)) | (1 << (PyxellParser.STRING - 9)) | (1 << (PyxellParser.ID - 9)))) != 0): + self.state = 273 self.expr(0) - self.state = 272 - self.match(PyxellParser.T__36) + self.state = 276 + self.match(PyxellParser.T__37) pass elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) self.enterOuterAlt(localctx, 7) - self.state = 273 + self.state = 277 self.match(PyxellParser.ID) pass else: @@ -2244,130 +2257,101 @@ def typ(self, _p:int=0): _prevctx = localctx _startState = 24 self.enterRecursionRule(localctx, 24, self.RULE_typ, _p) + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 293 + self.state = 292 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__53]: + if token in [PyxellParser.T__54, PyxellParser.T__55, PyxellParser.T__56, PyxellParser.T__57, PyxellParser.T__58, PyxellParser.T__59]: localctx = PyxellParser.TypePrimitiveContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 277 - self.match(PyxellParser.T__53) - pass - elif token in [PyxellParser.T__54]: - localctx = PyxellParser.TypePrimitiveContext(self, localctx) - self._ctx = localctx - _prevctx = localctx - self.state = 278 - self.match(PyxellParser.T__54) - pass - elif token in [PyxellParser.T__55]: - localctx = PyxellParser.TypePrimitiveContext(self, localctx) - self._ctx = localctx - _prevctx = localctx - self.state = 279 - self.match(PyxellParser.T__55) - pass - elif token in [PyxellParser.T__56]: - localctx = PyxellParser.TypePrimitiveContext(self, localctx) - self._ctx = localctx - _prevctx = localctx - self.state = 280 - self.match(PyxellParser.T__56) - pass - elif token in [PyxellParser.T__57]: - localctx = PyxellParser.TypePrimitiveContext(self, localctx) - self._ctx = localctx - _prevctx = localctx self.state = 281 - self.match(PyxellParser.T__57) - pass - elif token in [PyxellParser.T__58]: - localctx = PyxellParser.TypePrimitiveContext(self, localctx) - self._ctx = localctx - _prevctx = localctx - self.state = 282 - self.match(PyxellParser.T__58) + _la = self._input.LA(1) + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__54) | (1 << PyxellParser.T__55) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59))) != 0)): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() pass elif token in [PyxellParser.T__28]: localctx = PyxellParser.TypeParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 283 + self.state = 282 self.match(PyxellParser.T__28) - self.state = 284 + self.state = 283 self.typ(0) - self.state = 285 + self.state = 284 self.match(PyxellParser.T__29) pass - elif token in [PyxellParser.T__35]: + elif token in [PyxellParser.T__36]: localctx = PyxellParser.TypeArrayContext(self, localctx) self._ctx = localctx _prevctx = localctx + self.state = 286 + self.match(PyxellParser.T__36) self.state = 287 - self.match(PyxellParser.T__35) - self.state = 288 self.typ(0) - self.state = 289 - self.match(PyxellParser.T__36) + self.state = 288 + self.match(PyxellParser.T__37) pass - elif token in [PyxellParser.T__59]: + elif token in [PyxellParser.T__60]: localctx = PyxellParser.TypeFunc0Context(self, localctx) self._ctx = localctx _prevctx = localctx + self.state = 290 + self.match(PyxellParser.T__60) self.state = 291 - self.match(PyxellParser.T__59) - self.state = 292 self.typ(1) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 303 + self.state = 302 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,30,self._ctx) + _alt = self._interp.adaptivePredict(self._input,31,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 301 + self.state = 300 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,29,self._ctx) + la_ = self._interp.adaptivePredict(self._input,30,self._ctx) if la_ == 1: localctx = PyxellParser.TypeTupleContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 295 + self.state = 294 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 296 + self.state = 295 self.match(PyxellParser.T__5) - self.state = 297 + self.state = 296 self.typ(3) pass elif la_ == 2: localctx = PyxellParser.TypeFuncContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 298 + self.state = 297 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") + self.state = 298 + self.match(PyxellParser.T__60) self.state = 299 - self.match(PyxellParser.T__59) - self.state = 300 self.typ(2) pass - self.state = 305 + self.state = 304 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,30,self._ctx) + _alt = self._interp.adaptivePredict(self._input,31,self._ctx) except RecognitionException as re: localctx.exception = re diff --git a/src/compiler.py b/src/compiler.py index 33dc2496..7b671f7e 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -25,14 +25,7 @@ def __init__(self): self.builtins = { 'malloc': ll.Function(self.module, tFunc([tInt], tPtr()).pointee, 'malloc'), 'memcpy': ll.Function(self.module, tFunc([tPtr(), tPtr(), tInt]).pointee, 'memcpy'), - 'write': ll.Function(self.module, tFunc([tString]).pointee, 'func.write'), - 'writeInt': ll.Function(self.module, tFunc([tInt]).pointee, 'func.writeInt'), - 'writeFloat': ll.Function(self.module, tFunc([tFloat]).pointee, 'func.writeFloat'), - 'writeBool': ll.Function(self.module, tFunc([tBool]).pointee, 'func.writeBool'), - 'writeChar': ll.Function(self.module, tFunc([tChar]).pointee, 'func.writeChar'), 'putchar': ll.Function(self.module, tFunc([tChar]).pointee, 'putchar'), - 'Int_pow': ll.Function(self.module, tFunc([tInt, tInt], tInt).pointee, 'func.Int_pow'), - 'Float_pow': ll.Function(self.module, tFunc([tFloat, tFloat], tFloat).pointee, 'func.Float_pow'), } @@ -92,6 +85,68 @@ def index(self, ctx, *exprs): else: self.throw(ctx, err.NotIndexable(collection.type)) + def attribute(self, ctx, value, attr): + type = value.type + attr = str(attr) + + if type == tInt: + if attr == 'toString': + return self.get(ctx, 'Int_toString') + elif attr == 'toFloat': + return self.get(ctx, 'Int_toFloat') + + elif type == tFloat: + if attr == 'toString': + return self.get(ctx, 'Float_toString') + elif attr == 'toInt': + return self.get(ctx, 'Float_toInt') + + elif type == tBool: + if attr == 'toString': + return self.get(ctx, 'Bool_toString') + elif attr == 'toInt': + return self.get(ctx, 'Bool_toInt') + elif attr == 'toFloat': + return self.get(ctx, 'Bool_toFloat') + + elif type == tChar: + if attr == 'toString': + return self.get(ctx, 'Char_toString') + elif attr == 'toInt': + return self.get(ctx, 'Char_toInt') + elif attr == 'toFloat': + return self.get(ctx, 'Char_toFloat') + + elif type.isCollection(): + if attr == 'length': + return self.extract(value, 1) + elif type == tString: + if attr == 'toString': + return self.get(ctx, 'String_toString') + elif attr == 'toArray': + return self.get(ctx, 'String_toArray') + elif attr == 'toInt': + return self.get(ctx, 'String_toInt') + elif attr == 'toFloat': + return self.get(ctx, 'String_toFloat') + elif type.isArray(): + if attr == 'join': + if type.subtype == tChar: + return self.get(ctx, 'CharArray_join') + elif type.subtype == tString: + return self.get(ctx, 'StringArray_join') + + elif type.isTuple() and len(attr) == 1: + index = ord(attr) - ord('a') + if 0 <= index < len(type.elements): + return self.extract(value, index) + + self.throw(ctx, err.NoAttribute(type, attr)) + + def call(self, ctx, name, *values): + func = self.builder.load(self.get(ctx, name)) + return self.builder.call(func, values) + def cast(self, ctx, value, type): if not types_compatible(value.type, type): self.throw(ctx, err.IllegalAssignment(value.type, type)) @@ -207,10 +262,10 @@ def binaryop(self, ctx, op, left, right): if op == '^': if left.type == right.type == tInt: - return self.builder.call(self.builtins['Int_pow'], [left, right]) + return self.call(ctx, 'Int_pow', left, right) elif left.type == right.type == tFloat: - return self.builder.call(self.builtins['Float_pow'], [left, right]) + return self.call(ctx, 'Float_pow', left, right) else: self.throw(ctx, err.NoBinaryOperator(op, left.type, right.type)) @@ -467,19 +522,19 @@ def write(self, str): def print(self, ctx, value): if value.type == tInt: - self.builder.call(self.builtins['writeInt'], [value]) + self.call(ctx, 'writeInt', value) elif value.type == tFloat: - self.builder.call(self.builtins['writeFloat'], [value]) + self.call(ctx, 'writeFloat', value) elif value.type == tBool: - self.builder.call(self.builtins['writeBool'], [value]) + self.call(ctx, 'writeBool', value) elif value.type == tChar: - self.builder.call(self.builtins['writeChar'], [value]) + self.call(ctx, 'writeChar', value) elif value.type.isString(): - self.builder.call(self.builtins['write'], [value]) + self.call(ctx, 'write', value) elif value.type.isArray(): self.write('[') @@ -795,6 +850,14 @@ def visitStmtFunc(self, ctx): ret_type = self.visit(ctx.ret) if ctx.ret else tVoid func_type = tFunc(args, ret_type) + func_def = ctx.def_block() + + if not func_def: # `extern` + func_ptr = ll.GlobalVariable(self.module, func_type, self.module.get_unique_name('f.'+id)) + self.env[id] = func_ptr + self.initialized.add(id) + return + func = ll.Function(self.module, func_type.pointee, self.module.get_unique_name('def.'+id)) func_ptr = ll.GlobalVariable(self.module, func_type, self.module.get_unique_name(id)) func_ptr.initializer = func @@ -815,7 +878,7 @@ def visitStmtFunc(self, ctx): self.env[id] = ptr self.builder.store(value, ptr) - self.visit(ctx.def_block()) + self.visit(func_def) if ret_type == tVoid: self.builder.ret_void() @@ -854,28 +917,18 @@ def visitExprIndex(self, ctx): def visitExprAttr(self, ctx): value = self.visit(ctx.expr()) - id = str(ctx.ID()) - - if value.type.isCollection(): - if id != "length": - self.throw(ctx, err.NoAttribute(value.type, id)) - - return self.extract(value, 1) + return self.attribute(ctx, value, ctx.ID()) - elif value.type.isTuple(): - if len(id) > 1: - self.throw(ctx, err.NoAttribute(value.type, id)) - - index = ord(id) - ord('a') - if not 0 <= index < len(value.type.elements): - self.throw(ctx, err.NoAttribute(value.type, id)) - - return self.extract(value, index) + def visitExprCall(self, ctx): + expr = ctx.expr() - self.throw(ctx, err.NoAttribute(value.type, id)) + if isinstance(expr, PyxellParser.ExprAttrContext): + obj = self.visit(expr.expr()) + func = self.builder.load(self.attribute(expr, obj, expr.ID())) + else: + obj = None + func = self.visit(expr) - def visitExprCall(self, ctx): - func = self.visit(ctx.expr()) if not func.type.isFunc(): self.throw(ctx, err.NotFunction(func.type)) @@ -896,7 +949,8 @@ def visitExprCall(self, ctx): self.throw(ctx, err.ExpectedNamedArgument()) pos_args[i] = expr - for i, func_arg in enumerate(func.type.args): + func_args = func.type.args[1:] if obj else func.type.args + for i, func_arg in enumerate(func_args): name = func_arg.name if name in named_args: if i in pos_args: @@ -917,6 +971,9 @@ def visitExprCall(self, ctx): if pos_args: self.throw(ctx, err.TooManyArguments(func.type)) + if obj: + args.insert(0, obj) + return self.builder.call(func, args) def visitExprUnaryOp(self, ctx): diff --git a/src/main.py b/src/main.py index 3e98051f..a5bd66ab 100644 --- a/src/main.py +++ b/src/main.py @@ -26,7 +26,7 @@ try: # Read the code and transform indents. - pyxell_code = filepath.read_text() + pyxell_code = Path(abspath/'lib/std.px').read_text() + filepath.read_text() pyxell_code = transform_indented_code(pyxell_code) # Parse the program. @@ -54,4 +54,4 @@ # Create an executable. with open(f'{filename}.ll', 'w') as file: file.write(llvm_code) -subprocess.check_output(['clang', f'{filename}.ll', f'{abspath / "lib/io.ll"}', f'{abspath / "lib/base.ll"}', '-o', f'{filename}.exe', '-O2'] + args.clangargs) +subprocess.check_output(['clang', f'{filename}.ll', abspath/'lib/io.ll', abspath/'lib/base.ll', '-o', f'{filename}.exe', '-O2'] + args.clangargs) diff --git a/test/bad/arrays/print01.err b/test/bad/arrays/print01.err index e9633046..da5cefdc 100644 --- a/test/bad/arrays/print01.err +++ b/test/bad/arrays/print01.err @@ -1 +1 @@ -Variable of type `[Char->Int]` cannot be printed. \ No newline at end of file +Variable of type `Char->Int` cannot be printed. \ No newline at end of file diff --git a/test/bad/tuples/print01.err b/test/bad/tuples/print01.err index 5da9c143..da5cefdc 100644 --- a/test/bad/tuples/print01.err +++ b/test/bad/tuples/print01.err @@ -1 +1 @@ -Variable of type `Int*Char->Int` cannot be printed. \ No newline at end of file +Variable of type `Char->Int` cannot be printed. \ No newline at end of file From 8774b9b35076eb7e012585ffe815b576707f6887 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Fri, 1 Nov 2019 20:24:58 +0100 Subject: [PATCH 044/100] Appending characters to strings --- src/compiler.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/compiler.py b/src/compiler.py index 7b671f7e..5af6572e 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -364,6 +364,12 @@ def binaryop(self, ctx, op, left, right): self.builder.store(length, self.builder.gep(value, [vInt(0), vIndex(1)])) return value + elif left.type == tString and right.type == tChar: + return self.binaryop(ctx, op, left, self.call(ctx, 'Char_toString', right)) + + elif left.type == tChar and right.type == tString: + return self.binaryop(ctx, op, self.call(ctx, 'Char_toString', left), right) + else: self.throw(ctx, err.NoBinaryOperator(op, left.type, right.type)) From 216dd34949d542dd913dd92927a160caa3d376c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Fri, 1 Nov 2019 23:08:15 +0100 Subject: [PATCH 045/100] String interpolation --- src/Pyxell.g4 | 12 +- src/antlr/Pyxell.interp | 5 +- src/antlr/PyxellParser.py | 920 ++++++++++++++++++++----------------- src/antlr/PyxellVisitor.py | 15 +- src/compiler.py | 109 +++-- src/errors.py | 1 + src/main.py | 15 +- src/parsing.py | 24 + 8 files changed, 607 insertions(+), 494 deletions(-) create mode 100644 src/parsing.py diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index f7311b5a..6a08b0c6 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -43,10 +43,6 @@ def_block : 'def' '{' stmt+ '}' ; -tuple_expr - : (expr ',')* expr # ExprTuple - ; - expr : atom # ExprAtom | '(' tuple_expr ')' # ExprParentheses @@ -70,6 +66,14 @@ expr | expr '?' expr ':' expr # ExprCond ; +tuple_expr + : (expr ',')* expr # ExprTuple + ; + +interpolation_expr + : tuple_expr EOF # ExprInterpolation + ; + call_arg : (ID '=')? expr ; diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index d705f8e0..49b809b5 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -151,12 +151,13 @@ compound_stmt func_arg do_block def_block -tuple_expr expr +tuple_expr +interpolation_expr call_arg atom typ atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 71, 308, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 3, 2, 7, 2, 30, 10, 2, 12, 2, 14, 2, 33, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 41, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 46, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 52, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 57, 10, 4, 12, 4, 14, 4, 60, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 71, 10, 4, 5, 4, 73, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 78, 10, 5, 12, 5, 14, 5, 81, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 90, 10, 6, 12, 6, 14, 6, 93, 11, 6, 3, 6, 3, 6, 5, 6, 97, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 113, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 123, 10, 6, 12, 6, 14, 6, 126, 11, 6, 3, 6, 5, 6, 129, 10, 6, 3, 6, 3, 6, 5, 6, 133, 10, 6, 3, 6, 3, 6, 3, 6, 5, 6, 138, 10, 6, 5, 6, 140, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 146, 10, 7, 3, 8, 3, 8, 3, 8, 6, 8, 151, 10, 8, 13, 8, 14, 8, 152, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 6, 9, 160, 10, 9, 13, 9, 14, 9, 161, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 7, 10, 169, 10, 10, 12, 10, 14, 10, 172, 11, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 186, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 240, 10, 11, 12, 11, 14, 11, 243, 11, 11, 3, 11, 5, 11, 246, 10, 11, 3, 11, 3, 11, 3, 11, 7, 11, 251, 10, 11, 12, 11, 14, 11, 254, 11, 11, 3, 12, 3, 12, 5, 12, 258, 10, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 7, 13, 271, 10, 13, 12, 13, 14, 13, 274, 11, 13, 3, 13, 5, 13, 277, 10, 13, 3, 13, 3, 13, 5, 13, 281, 10, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 295, 10, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 7, 14, 303, 10, 14, 12, 14, 14, 14, 306, 11, 14, 3, 14, 2, 4, 20, 26, 15, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 2, 12, 3, 2, 7, 17, 3, 2, 18, 19, 4, 2, 11, 12, 42, 42, 3, 2, 8, 10, 3, 2, 11, 12, 3, 2, 13, 14, 3, 2, 43, 44, 3, 2, 45, 50, 3, 2, 55, 56, 3, 2, 57, 62, 2, 357, 2, 31, 3, 2, 2, 2, 4, 40, 3, 2, 2, 2, 6, 72, 3, 2, 2, 2, 8, 74, 3, 2, 2, 2, 10, 139, 3, 2, 2, 2, 12, 141, 3, 2, 2, 2, 14, 147, 3, 2, 2, 2, 16, 156, 3, 2, 2, 2, 18, 170, 3, 2, 2, 2, 20, 185, 3, 2, 2, 2, 22, 257, 3, 2, 2, 2, 24, 280, 3, 2, 2, 2, 26, 294, 3, 2, 2, 2, 28, 30, 5, 4, 3, 2, 29, 28, 3, 2, 2, 2, 30, 33, 3, 2, 2, 2, 31, 29, 3, 2, 2, 2, 31, 32, 3, 2, 2, 2, 32, 34, 3, 2, 2, 2, 33, 31, 3, 2, 2, 2, 34, 35, 7, 2, 2, 3, 35, 3, 3, 2, 2, 2, 36, 37, 5, 6, 4, 2, 37, 38, 7, 3, 2, 2, 38, 41, 3, 2, 2, 2, 39, 41, 5, 10, 6, 2, 40, 36, 3, 2, 2, 2, 40, 39, 3, 2, 2, 2, 41, 5, 3, 2, 2, 2, 42, 73, 7, 4, 2, 2, 43, 45, 7, 5, 2, 2, 44, 46, 5, 18, 10, 2, 45, 44, 3, 2, 2, 2, 45, 46, 3, 2, 2, 2, 46, 73, 3, 2, 2, 2, 47, 48, 5, 26, 14, 2, 48, 51, 7, 68, 2, 2, 49, 50, 7, 6, 2, 2, 50, 52, 5, 18, 10, 2, 51, 49, 3, 2, 2, 2, 51, 52, 3, 2, 2, 2, 52, 73, 3, 2, 2, 2, 53, 54, 5, 8, 5, 2, 54, 55, 7, 6, 2, 2, 55, 57, 3, 2, 2, 2, 56, 53, 3, 2, 2, 2, 57, 60, 3, 2, 2, 2, 58, 56, 3, 2, 2, 2, 58, 59, 3, 2, 2, 2, 59, 61, 3, 2, 2, 2, 60, 58, 3, 2, 2, 2, 61, 73, 5, 18, 10, 2, 62, 63, 5, 20, 11, 2, 63, 64, 9, 2, 2, 2, 64, 65, 7, 6, 2, 2, 65, 66, 5, 20, 11, 2, 66, 73, 3, 2, 2, 2, 67, 73, 9, 3, 2, 2, 68, 70, 7, 20, 2, 2, 69, 71, 5, 18, 10, 2, 70, 69, 3, 2, 2, 2, 70, 71, 3, 2, 2, 2, 71, 73, 3, 2, 2, 2, 72, 42, 3, 2, 2, 2, 72, 43, 3, 2, 2, 2, 72, 47, 3, 2, 2, 2, 72, 58, 3, 2, 2, 2, 72, 62, 3, 2, 2, 2, 72, 67, 3, 2, 2, 2, 72, 68, 3, 2, 2, 2, 73, 7, 3, 2, 2, 2, 74, 79, 5, 20, 11, 2, 75, 76, 7, 21, 2, 2, 76, 78, 5, 20, 11, 2, 77, 75, 3, 2, 2, 2, 78, 81, 3, 2, 2, 2, 79, 77, 3, 2, 2, 2, 79, 80, 3, 2, 2, 2, 80, 9, 3, 2, 2, 2, 81, 79, 3, 2, 2, 2, 82, 83, 7, 22, 2, 2, 83, 84, 5, 20, 11, 2, 84, 91, 5, 14, 8, 2, 85, 86, 7, 23, 2, 2, 86, 87, 5, 20, 11, 2, 87, 88, 5, 14, 8, 2, 88, 90, 3, 2, 2, 2, 89, 85, 3, 2, 2, 2, 90, 93, 3, 2, 2, 2, 91, 89, 3, 2, 2, 2, 91, 92, 3, 2, 2, 2, 92, 96, 3, 2, 2, 2, 93, 91, 3, 2, 2, 2, 94, 95, 7, 24, 2, 2, 95, 97, 5, 14, 8, 2, 96, 94, 3, 2, 2, 2, 96, 97, 3, 2, 2, 2, 97, 140, 3, 2, 2, 2, 98, 99, 7, 25, 2, 2, 99, 100, 5, 20, 11, 2, 100, 101, 5, 14, 8, 2, 101, 140, 3, 2, 2, 2, 102, 103, 7, 26, 2, 2, 103, 104, 5, 20, 11, 2, 104, 105, 5, 14, 8, 2, 105, 140, 3, 2, 2, 2, 106, 107, 7, 27, 2, 2, 107, 108, 5, 18, 10, 2, 108, 109, 7, 28, 2, 2, 109, 112, 5, 18, 10, 2, 110, 111, 7, 29, 2, 2, 111, 113, 5, 18, 10, 2, 112, 110, 3, 2, 2, 2, 112, 113, 3, 2, 2, 2, 113, 114, 3, 2, 2, 2, 114, 115, 5, 14, 8, 2, 115, 140, 3, 2, 2, 2, 116, 117, 7, 30, 2, 2, 117, 118, 7, 68, 2, 2, 118, 124, 7, 31, 2, 2, 119, 120, 5, 12, 7, 2, 120, 121, 7, 21, 2, 2, 121, 123, 3, 2, 2, 2, 122, 119, 3, 2, 2, 2, 123, 126, 3, 2, 2, 2, 124, 122, 3, 2, 2, 2, 124, 125, 3, 2, 2, 2, 125, 128, 3, 2, 2, 2, 126, 124, 3, 2, 2, 2, 127, 129, 5, 12, 7, 2, 128, 127, 3, 2, 2, 2, 128, 129, 3, 2, 2, 2, 129, 130, 3, 2, 2, 2, 130, 132, 7, 32, 2, 2, 131, 133, 5, 26, 14, 2, 132, 131, 3, 2, 2, 2, 132, 133, 3, 2, 2, 2, 133, 137, 3, 2, 2, 2, 134, 138, 5, 16, 9, 2, 135, 136, 7, 33, 2, 2, 136, 138, 7, 3, 2, 2, 137, 134, 3, 2, 2, 2, 137, 135, 3, 2, 2, 2, 138, 140, 3, 2, 2, 2, 139, 82, 3, 2, 2, 2, 139, 98, 3, 2, 2, 2, 139, 102, 3, 2, 2, 2, 139, 106, 3, 2, 2, 2, 139, 116, 3, 2, 2, 2, 140, 11, 3, 2, 2, 2, 141, 142, 5, 26, 14, 2, 142, 145, 7, 68, 2, 2, 143, 144, 7, 34, 2, 2, 144, 146, 5, 20, 11, 2, 145, 143, 3, 2, 2, 2, 145, 146, 3, 2, 2, 2, 146, 13, 3, 2, 2, 2, 147, 148, 7, 35, 2, 2, 148, 150, 7, 36, 2, 2, 149, 151, 5, 4, 3, 2, 150, 149, 3, 2, 2, 2, 151, 152, 3, 2, 2, 2, 152, 150, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 154, 3, 2, 2, 2, 154, 155, 7, 37, 2, 2, 155, 15, 3, 2, 2, 2, 156, 157, 7, 38, 2, 2, 157, 159, 7, 36, 2, 2, 158, 160, 5, 4, 3, 2, 159, 158, 3, 2, 2, 2, 160, 161, 3, 2, 2, 2, 161, 159, 3, 2, 2, 2, 161, 162, 3, 2, 2, 2, 162, 163, 3, 2, 2, 2, 163, 164, 7, 37, 2, 2, 164, 17, 3, 2, 2, 2, 165, 166, 5, 20, 11, 2, 166, 167, 7, 21, 2, 2, 167, 169, 3, 2, 2, 2, 168, 165, 3, 2, 2, 2, 169, 172, 3, 2, 2, 2, 170, 168, 3, 2, 2, 2, 170, 171, 3, 2, 2, 2, 171, 173, 3, 2, 2, 2, 172, 170, 3, 2, 2, 2, 173, 174, 5, 20, 11, 2, 174, 19, 3, 2, 2, 2, 175, 176, 8, 11, 1, 2, 176, 186, 5, 24, 13, 2, 177, 178, 7, 31, 2, 2, 178, 179, 5, 18, 10, 2, 179, 180, 7, 32, 2, 2, 180, 186, 3, 2, 2, 2, 181, 182, 9, 4, 2, 2, 182, 186, 5, 20, 11, 16, 183, 184, 7, 51, 2, 2, 184, 186, 5, 20, 11, 6, 185, 175, 3, 2, 2, 2, 185, 177, 3, 2, 2, 2, 185, 181, 3, 2, 2, 2, 185, 183, 3, 2, 2, 2, 186, 252, 3, 2, 2, 2, 187, 188, 12, 17, 2, 2, 188, 189, 7, 7, 2, 2, 189, 251, 5, 20, 11, 17, 190, 191, 12, 15, 2, 2, 191, 192, 9, 5, 2, 2, 192, 251, 5, 20, 11, 16, 193, 194, 12, 14, 2, 2, 194, 195, 9, 6, 2, 2, 195, 251, 5, 20, 11, 15, 196, 197, 12, 13, 2, 2, 197, 198, 9, 7, 2, 2, 198, 251, 5, 20, 11, 14, 199, 200, 12, 12, 2, 2, 200, 201, 7, 15, 2, 2, 201, 251, 5, 20, 11, 13, 202, 203, 12, 11, 2, 2, 203, 204, 7, 16, 2, 2, 204, 251, 5, 20, 11, 12, 205, 206, 12, 10, 2, 2, 206, 207, 7, 17, 2, 2, 207, 251, 5, 20, 11, 11, 208, 209, 12, 9, 2, 2, 209, 210, 9, 8, 2, 2, 210, 251, 5, 20, 11, 10, 211, 212, 12, 7, 2, 2, 212, 213, 9, 9, 2, 2, 213, 251, 5, 20, 11, 7, 214, 215, 12, 5, 2, 2, 215, 216, 7, 52, 2, 2, 216, 251, 5, 20, 11, 5, 217, 218, 12, 4, 2, 2, 218, 219, 7, 53, 2, 2, 219, 251, 5, 20, 11, 4, 220, 221, 12, 3, 2, 2, 221, 222, 7, 54, 2, 2, 222, 223, 5, 20, 11, 2, 223, 224, 7, 34, 2, 2, 224, 225, 5, 20, 11, 3, 225, 251, 3, 2, 2, 2, 226, 227, 12, 20, 2, 2, 227, 228, 7, 39, 2, 2, 228, 229, 5, 20, 11, 2, 229, 230, 7, 40, 2, 2, 230, 251, 3, 2, 2, 2, 231, 232, 12, 19, 2, 2, 232, 233, 7, 41, 2, 2, 233, 251, 7, 68, 2, 2, 234, 235, 12, 18, 2, 2, 235, 241, 7, 31, 2, 2, 236, 237, 5, 22, 12, 2, 237, 238, 7, 21, 2, 2, 238, 240, 3, 2, 2, 2, 239, 236, 3, 2, 2, 2, 240, 243, 3, 2, 2, 2, 241, 239, 3, 2, 2, 2, 241, 242, 3, 2, 2, 2, 242, 245, 3, 2, 2, 2, 243, 241, 3, 2, 2, 2, 244, 246, 5, 22, 12, 2, 245, 244, 3, 2, 2, 2, 245, 246, 3, 2, 2, 2, 246, 247, 3, 2, 2, 2, 247, 251, 7, 32, 2, 2, 248, 249, 12, 8, 2, 2, 249, 251, 7, 44, 2, 2, 250, 187, 3, 2, 2, 2, 250, 190, 3, 2, 2, 2, 250, 193, 3, 2, 2, 2, 250, 196, 3, 2, 2, 2, 250, 199, 3, 2, 2, 2, 250, 202, 3, 2, 2, 2, 250, 205, 3, 2, 2, 2, 250, 208, 3, 2, 2, 2, 250, 211, 3, 2, 2, 2, 250, 214, 3, 2, 2, 2, 250, 217, 3, 2, 2, 2, 250, 220, 3, 2, 2, 2, 250, 226, 3, 2, 2, 2, 250, 231, 3, 2, 2, 2, 250, 234, 3, 2, 2, 2, 250, 248, 3, 2, 2, 2, 251, 254, 3, 2, 2, 2, 252, 250, 3, 2, 2, 2, 252, 253, 3, 2, 2, 2, 253, 21, 3, 2, 2, 2, 254, 252, 3, 2, 2, 2, 255, 256, 7, 68, 2, 2, 256, 258, 7, 6, 2, 2, 257, 255, 3, 2, 2, 2, 257, 258, 3, 2, 2, 2, 258, 259, 3, 2, 2, 2, 259, 260, 5, 20, 11, 2, 260, 23, 3, 2, 2, 2, 261, 281, 7, 64, 2, 2, 262, 281, 7, 65, 2, 2, 263, 281, 9, 10, 2, 2, 264, 281, 7, 66, 2, 2, 265, 281, 7, 67, 2, 2, 266, 272, 7, 39, 2, 2, 267, 268, 5, 20, 11, 2, 268, 269, 7, 21, 2, 2, 269, 271, 3, 2, 2, 2, 270, 267, 3, 2, 2, 2, 271, 274, 3, 2, 2, 2, 272, 270, 3, 2, 2, 2, 272, 273, 3, 2, 2, 2, 273, 276, 3, 2, 2, 2, 274, 272, 3, 2, 2, 2, 275, 277, 5, 20, 11, 2, 276, 275, 3, 2, 2, 2, 276, 277, 3, 2, 2, 2, 277, 278, 3, 2, 2, 2, 278, 281, 7, 40, 2, 2, 279, 281, 7, 68, 2, 2, 280, 261, 3, 2, 2, 2, 280, 262, 3, 2, 2, 2, 280, 263, 3, 2, 2, 2, 280, 264, 3, 2, 2, 2, 280, 265, 3, 2, 2, 2, 280, 266, 3, 2, 2, 2, 280, 279, 3, 2, 2, 2, 281, 25, 3, 2, 2, 2, 282, 283, 8, 14, 1, 2, 283, 295, 9, 11, 2, 2, 284, 285, 7, 31, 2, 2, 285, 286, 5, 26, 14, 2, 286, 287, 7, 32, 2, 2, 287, 295, 3, 2, 2, 2, 288, 289, 7, 39, 2, 2, 289, 290, 5, 26, 14, 2, 290, 291, 7, 40, 2, 2, 291, 295, 3, 2, 2, 2, 292, 293, 7, 63, 2, 2, 293, 295, 5, 26, 14, 3, 294, 282, 3, 2, 2, 2, 294, 284, 3, 2, 2, 2, 294, 288, 3, 2, 2, 2, 294, 292, 3, 2, 2, 2, 295, 304, 3, 2, 2, 2, 296, 297, 12, 5, 2, 2, 297, 298, 7, 8, 2, 2, 298, 303, 5, 26, 14, 5, 299, 300, 12, 4, 2, 2, 300, 301, 7, 63, 2, 2, 301, 303, 5, 26, 14, 4, 302, 296, 3, 2, 2, 2, 302, 299, 3, 2, 2, 2, 303, 306, 3, 2, 2, 2, 304, 302, 3, 2, 2, 2, 304, 305, 3, 2, 2, 2, 305, 27, 3, 2, 2, 2, 306, 304, 3, 2, 2, 2, 34, 31, 40, 45, 51, 58, 70, 72, 79, 91, 96, 112, 124, 128, 132, 137, 139, 145, 152, 161, 170, 185, 241, 245, 250, 252, 257, 272, 276, 280, 294, 302, 304] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 71, 313, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 3, 2, 7, 2, 32, 10, 2, 12, 2, 14, 2, 35, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 43, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 48, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 54, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 59, 10, 4, 12, 4, 14, 4, 62, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 73, 10, 4, 5, 4, 75, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 80, 10, 5, 12, 5, 14, 5, 83, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 92, 10, 6, 12, 6, 14, 6, 95, 11, 6, 3, 6, 3, 6, 5, 6, 99, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 115, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 125, 10, 6, 12, 6, 14, 6, 128, 11, 6, 3, 6, 5, 6, 131, 10, 6, 3, 6, 3, 6, 5, 6, 135, 10, 6, 3, 6, 3, 6, 3, 6, 5, 6, 140, 10, 6, 5, 6, 142, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 148, 10, 7, 3, 8, 3, 8, 3, 8, 6, 8, 153, 10, 8, 13, 8, 14, 8, 154, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 6, 9, 162, 10, 9, 13, 9, 14, 9, 163, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 178, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 232, 10, 10, 12, 10, 14, 10, 235, 11, 10, 3, 10, 5, 10, 238, 10, 10, 3, 10, 3, 10, 3, 10, 7, 10, 243, 10, 10, 12, 10, 14, 10, 246, 11, 10, 3, 11, 3, 11, 3, 11, 7, 11, 251, 10, 11, 12, 11, 14, 11, 254, 11, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 5, 13, 263, 10, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 7, 14, 276, 10, 14, 12, 14, 14, 14, 279, 11, 14, 3, 14, 5, 14, 282, 10, 14, 3, 14, 3, 14, 5, 14, 286, 10, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 300, 10, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 7, 15, 308, 10, 15, 12, 15, 14, 15, 311, 11, 15, 3, 15, 2, 4, 18, 28, 16, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 2, 12, 3, 2, 7, 17, 3, 2, 18, 19, 4, 2, 11, 12, 42, 42, 3, 2, 8, 10, 3, 2, 11, 12, 3, 2, 13, 14, 3, 2, 43, 44, 3, 2, 45, 50, 3, 2, 55, 56, 3, 2, 57, 62, 2, 361, 2, 33, 3, 2, 2, 2, 4, 42, 3, 2, 2, 2, 6, 74, 3, 2, 2, 2, 8, 76, 3, 2, 2, 2, 10, 141, 3, 2, 2, 2, 12, 143, 3, 2, 2, 2, 14, 149, 3, 2, 2, 2, 16, 158, 3, 2, 2, 2, 18, 177, 3, 2, 2, 2, 20, 252, 3, 2, 2, 2, 22, 257, 3, 2, 2, 2, 24, 262, 3, 2, 2, 2, 26, 285, 3, 2, 2, 2, 28, 299, 3, 2, 2, 2, 30, 32, 5, 4, 3, 2, 31, 30, 3, 2, 2, 2, 32, 35, 3, 2, 2, 2, 33, 31, 3, 2, 2, 2, 33, 34, 3, 2, 2, 2, 34, 36, 3, 2, 2, 2, 35, 33, 3, 2, 2, 2, 36, 37, 7, 2, 2, 3, 37, 3, 3, 2, 2, 2, 38, 39, 5, 6, 4, 2, 39, 40, 7, 3, 2, 2, 40, 43, 3, 2, 2, 2, 41, 43, 5, 10, 6, 2, 42, 38, 3, 2, 2, 2, 42, 41, 3, 2, 2, 2, 43, 5, 3, 2, 2, 2, 44, 75, 7, 4, 2, 2, 45, 47, 7, 5, 2, 2, 46, 48, 5, 20, 11, 2, 47, 46, 3, 2, 2, 2, 47, 48, 3, 2, 2, 2, 48, 75, 3, 2, 2, 2, 49, 50, 5, 28, 15, 2, 50, 53, 7, 68, 2, 2, 51, 52, 7, 6, 2, 2, 52, 54, 5, 20, 11, 2, 53, 51, 3, 2, 2, 2, 53, 54, 3, 2, 2, 2, 54, 75, 3, 2, 2, 2, 55, 56, 5, 8, 5, 2, 56, 57, 7, 6, 2, 2, 57, 59, 3, 2, 2, 2, 58, 55, 3, 2, 2, 2, 59, 62, 3, 2, 2, 2, 60, 58, 3, 2, 2, 2, 60, 61, 3, 2, 2, 2, 61, 63, 3, 2, 2, 2, 62, 60, 3, 2, 2, 2, 63, 75, 5, 20, 11, 2, 64, 65, 5, 18, 10, 2, 65, 66, 9, 2, 2, 2, 66, 67, 7, 6, 2, 2, 67, 68, 5, 18, 10, 2, 68, 75, 3, 2, 2, 2, 69, 75, 9, 3, 2, 2, 70, 72, 7, 20, 2, 2, 71, 73, 5, 20, 11, 2, 72, 71, 3, 2, 2, 2, 72, 73, 3, 2, 2, 2, 73, 75, 3, 2, 2, 2, 74, 44, 3, 2, 2, 2, 74, 45, 3, 2, 2, 2, 74, 49, 3, 2, 2, 2, 74, 60, 3, 2, 2, 2, 74, 64, 3, 2, 2, 2, 74, 69, 3, 2, 2, 2, 74, 70, 3, 2, 2, 2, 75, 7, 3, 2, 2, 2, 76, 81, 5, 18, 10, 2, 77, 78, 7, 21, 2, 2, 78, 80, 5, 18, 10, 2, 79, 77, 3, 2, 2, 2, 80, 83, 3, 2, 2, 2, 81, 79, 3, 2, 2, 2, 81, 82, 3, 2, 2, 2, 82, 9, 3, 2, 2, 2, 83, 81, 3, 2, 2, 2, 84, 85, 7, 22, 2, 2, 85, 86, 5, 18, 10, 2, 86, 93, 5, 14, 8, 2, 87, 88, 7, 23, 2, 2, 88, 89, 5, 18, 10, 2, 89, 90, 5, 14, 8, 2, 90, 92, 3, 2, 2, 2, 91, 87, 3, 2, 2, 2, 92, 95, 3, 2, 2, 2, 93, 91, 3, 2, 2, 2, 93, 94, 3, 2, 2, 2, 94, 98, 3, 2, 2, 2, 95, 93, 3, 2, 2, 2, 96, 97, 7, 24, 2, 2, 97, 99, 5, 14, 8, 2, 98, 96, 3, 2, 2, 2, 98, 99, 3, 2, 2, 2, 99, 142, 3, 2, 2, 2, 100, 101, 7, 25, 2, 2, 101, 102, 5, 18, 10, 2, 102, 103, 5, 14, 8, 2, 103, 142, 3, 2, 2, 2, 104, 105, 7, 26, 2, 2, 105, 106, 5, 18, 10, 2, 106, 107, 5, 14, 8, 2, 107, 142, 3, 2, 2, 2, 108, 109, 7, 27, 2, 2, 109, 110, 5, 20, 11, 2, 110, 111, 7, 28, 2, 2, 111, 114, 5, 20, 11, 2, 112, 113, 7, 29, 2, 2, 113, 115, 5, 20, 11, 2, 114, 112, 3, 2, 2, 2, 114, 115, 3, 2, 2, 2, 115, 116, 3, 2, 2, 2, 116, 117, 5, 14, 8, 2, 117, 142, 3, 2, 2, 2, 118, 119, 7, 30, 2, 2, 119, 120, 7, 68, 2, 2, 120, 126, 7, 31, 2, 2, 121, 122, 5, 12, 7, 2, 122, 123, 7, 21, 2, 2, 123, 125, 3, 2, 2, 2, 124, 121, 3, 2, 2, 2, 125, 128, 3, 2, 2, 2, 126, 124, 3, 2, 2, 2, 126, 127, 3, 2, 2, 2, 127, 130, 3, 2, 2, 2, 128, 126, 3, 2, 2, 2, 129, 131, 5, 12, 7, 2, 130, 129, 3, 2, 2, 2, 130, 131, 3, 2, 2, 2, 131, 132, 3, 2, 2, 2, 132, 134, 7, 32, 2, 2, 133, 135, 5, 28, 15, 2, 134, 133, 3, 2, 2, 2, 134, 135, 3, 2, 2, 2, 135, 139, 3, 2, 2, 2, 136, 140, 5, 16, 9, 2, 137, 138, 7, 33, 2, 2, 138, 140, 7, 3, 2, 2, 139, 136, 3, 2, 2, 2, 139, 137, 3, 2, 2, 2, 140, 142, 3, 2, 2, 2, 141, 84, 3, 2, 2, 2, 141, 100, 3, 2, 2, 2, 141, 104, 3, 2, 2, 2, 141, 108, 3, 2, 2, 2, 141, 118, 3, 2, 2, 2, 142, 11, 3, 2, 2, 2, 143, 144, 5, 28, 15, 2, 144, 147, 7, 68, 2, 2, 145, 146, 7, 34, 2, 2, 146, 148, 5, 18, 10, 2, 147, 145, 3, 2, 2, 2, 147, 148, 3, 2, 2, 2, 148, 13, 3, 2, 2, 2, 149, 150, 7, 35, 2, 2, 150, 152, 7, 36, 2, 2, 151, 153, 5, 4, 3, 2, 152, 151, 3, 2, 2, 2, 153, 154, 3, 2, 2, 2, 154, 152, 3, 2, 2, 2, 154, 155, 3, 2, 2, 2, 155, 156, 3, 2, 2, 2, 156, 157, 7, 37, 2, 2, 157, 15, 3, 2, 2, 2, 158, 159, 7, 38, 2, 2, 159, 161, 7, 36, 2, 2, 160, 162, 5, 4, 3, 2, 161, 160, 3, 2, 2, 2, 162, 163, 3, 2, 2, 2, 163, 161, 3, 2, 2, 2, 163, 164, 3, 2, 2, 2, 164, 165, 3, 2, 2, 2, 165, 166, 7, 37, 2, 2, 166, 17, 3, 2, 2, 2, 167, 168, 8, 10, 1, 2, 168, 178, 5, 26, 14, 2, 169, 170, 7, 31, 2, 2, 170, 171, 5, 20, 11, 2, 171, 172, 7, 32, 2, 2, 172, 178, 3, 2, 2, 2, 173, 174, 9, 4, 2, 2, 174, 178, 5, 18, 10, 16, 175, 176, 7, 51, 2, 2, 176, 178, 5, 18, 10, 6, 177, 167, 3, 2, 2, 2, 177, 169, 3, 2, 2, 2, 177, 173, 3, 2, 2, 2, 177, 175, 3, 2, 2, 2, 178, 244, 3, 2, 2, 2, 179, 180, 12, 17, 2, 2, 180, 181, 7, 7, 2, 2, 181, 243, 5, 18, 10, 17, 182, 183, 12, 15, 2, 2, 183, 184, 9, 5, 2, 2, 184, 243, 5, 18, 10, 16, 185, 186, 12, 14, 2, 2, 186, 187, 9, 6, 2, 2, 187, 243, 5, 18, 10, 15, 188, 189, 12, 13, 2, 2, 189, 190, 9, 7, 2, 2, 190, 243, 5, 18, 10, 14, 191, 192, 12, 12, 2, 2, 192, 193, 7, 15, 2, 2, 193, 243, 5, 18, 10, 13, 194, 195, 12, 11, 2, 2, 195, 196, 7, 16, 2, 2, 196, 243, 5, 18, 10, 12, 197, 198, 12, 10, 2, 2, 198, 199, 7, 17, 2, 2, 199, 243, 5, 18, 10, 11, 200, 201, 12, 9, 2, 2, 201, 202, 9, 8, 2, 2, 202, 243, 5, 18, 10, 10, 203, 204, 12, 7, 2, 2, 204, 205, 9, 9, 2, 2, 205, 243, 5, 18, 10, 7, 206, 207, 12, 5, 2, 2, 207, 208, 7, 52, 2, 2, 208, 243, 5, 18, 10, 5, 209, 210, 12, 4, 2, 2, 210, 211, 7, 53, 2, 2, 211, 243, 5, 18, 10, 4, 212, 213, 12, 3, 2, 2, 213, 214, 7, 54, 2, 2, 214, 215, 5, 18, 10, 2, 215, 216, 7, 34, 2, 2, 216, 217, 5, 18, 10, 3, 217, 243, 3, 2, 2, 2, 218, 219, 12, 20, 2, 2, 219, 220, 7, 39, 2, 2, 220, 221, 5, 18, 10, 2, 221, 222, 7, 40, 2, 2, 222, 243, 3, 2, 2, 2, 223, 224, 12, 19, 2, 2, 224, 225, 7, 41, 2, 2, 225, 243, 7, 68, 2, 2, 226, 227, 12, 18, 2, 2, 227, 233, 7, 31, 2, 2, 228, 229, 5, 24, 13, 2, 229, 230, 7, 21, 2, 2, 230, 232, 3, 2, 2, 2, 231, 228, 3, 2, 2, 2, 232, 235, 3, 2, 2, 2, 233, 231, 3, 2, 2, 2, 233, 234, 3, 2, 2, 2, 234, 237, 3, 2, 2, 2, 235, 233, 3, 2, 2, 2, 236, 238, 5, 24, 13, 2, 237, 236, 3, 2, 2, 2, 237, 238, 3, 2, 2, 2, 238, 239, 3, 2, 2, 2, 239, 243, 7, 32, 2, 2, 240, 241, 12, 8, 2, 2, 241, 243, 7, 44, 2, 2, 242, 179, 3, 2, 2, 2, 242, 182, 3, 2, 2, 2, 242, 185, 3, 2, 2, 2, 242, 188, 3, 2, 2, 2, 242, 191, 3, 2, 2, 2, 242, 194, 3, 2, 2, 2, 242, 197, 3, 2, 2, 2, 242, 200, 3, 2, 2, 2, 242, 203, 3, 2, 2, 2, 242, 206, 3, 2, 2, 2, 242, 209, 3, 2, 2, 2, 242, 212, 3, 2, 2, 2, 242, 218, 3, 2, 2, 2, 242, 223, 3, 2, 2, 2, 242, 226, 3, 2, 2, 2, 242, 240, 3, 2, 2, 2, 243, 246, 3, 2, 2, 2, 244, 242, 3, 2, 2, 2, 244, 245, 3, 2, 2, 2, 245, 19, 3, 2, 2, 2, 246, 244, 3, 2, 2, 2, 247, 248, 5, 18, 10, 2, 248, 249, 7, 21, 2, 2, 249, 251, 3, 2, 2, 2, 250, 247, 3, 2, 2, 2, 251, 254, 3, 2, 2, 2, 252, 250, 3, 2, 2, 2, 252, 253, 3, 2, 2, 2, 253, 255, 3, 2, 2, 2, 254, 252, 3, 2, 2, 2, 255, 256, 5, 18, 10, 2, 256, 21, 3, 2, 2, 2, 257, 258, 5, 20, 11, 2, 258, 259, 7, 2, 2, 3, 259, 23, 3, 2, 2, 2, 260, 261, 7, 68, 2, 2, 261, 263, 7, 6, 2, 2, 262, 260, 3, 2, 2, 2, 262, 263, 3, 2, 2, 2, 263, 264, 3, 2, 2, 2, 264, 265, 5, 18, 10, 2, 265, 25, 3, 2, 2, 2, 266, 286, 7, 64, 2, 2, 267, 286, 7, 65, 2, 2, 268, 286, 9, 10, 2, 2, 269, 286, 7, 66, 2, 2, 270, 286, 7, 67, 2, 2, 271, 277, 7, 39, 2, 2, 272, 273, 5, 18, 10, 2, 273, 274, 7, 21, 2, 2, 274, 276, 3, 2, 2, 2, 275, 272, 3, 2, 2, 2, 276, 279, 3, 2, 2, 2, 277, 275, 3, 2, 2, 2, 277, 278, 3, 2, 2, 2, 278, 281, 3, 2, 2, 2, 279, 277, 3, 2, 2, 2, 280, 282, 5, 18, 10, 2, 281, 280, 3, 2, 2, 2, 281, 282, 3, 2, 2, 2, 282, 283, 3, 2, 2, 2, 283, 286, 7, 40, 2, 2, 284, 286, 7, 68, 2, 2, 285, 266, 3, 2, 2, 2, 285, 267, 3, 2, 2, 2, 285, 268, 3, 2, 2, 2, 285, 269, 3, 2, 2, 2, 285, 270, 3, 2, 2, 2, 285, 271, 3, 2, 2, 2, 285, 284, 3, 2, 2, 2, 286, 27, 3, 2, 2, 2, 287, 288, 8, 15, 1, 2, 288, 300, 9, 11, 2, 2, 289, 290, 7, 31, 2, 2, 290, 291, 5, 28, 15, 2, 291, 292, 7, 32, 2, 2, 292, 300, 3, 2, 2, 2, 293, 294, 7, 39, 2, 2, 294, 295, 5, 28, 15, 2, 295, 296, 7, 40, 2, 2, 296, 300, 3, 2, 2, 2, 297, 298, 7, 63, 2, 2, 298, 300, 5, 28, 15, 3, 299, 287, 3, 2, 2, 2, 299, 289, 3, 2, 2, 2, 299, 293, 3, 2, 2, 2, 299, 297, 3, 2, 2, 2, 300, 309, 3, 2, 2, 2, 301, 302, 12, 5, 2, 2, 302, 303, 7, 8, 2, 2, 303, 308, 5, 28, 15, 5, 304, 305, 12, 4, 2, 2, 305, 306, 7, 63, 2, 2, 306, 308, 5, 28, 15, 4, 307, 301, 3, 2, 2, 2, 307, 304, 3, 2, 2, 2, 308, 311, 3, 2, 2, 2, 309, 307, 3, 2, 2, 2, 309, 310, 3, 2, 2, 2, 310, 29, 3, 2, 2, 2, 311, 309, 3, 2, 2, 2, 34, 33, 42, 47, 53, 60, 72, 74, 81, 93, 98, 114, 126, 130, 134, 139, 141, 147, 154, 163, 177, 233, 237, 242, 244, 252, 262, 277, 281, 285, 299, 307, 309] \ No newline at end of file diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index 22f19ad7..f023787b 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -9,150 +9,151 @@ def serializedATN(): with StringIO() as buf: buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3G") - buf.write("\u0134\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\u0139\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16") - buf.write("\t\16\3\2\7\2\36\n\2\f\2\16\2!\13\2\3\2\3\2\3\3\3\3\3") - buf.write("\3\3\3\5\3)\n\3\3\4\3\4\3\4\5\4.\n\4\3\4\3\4\3\4\3\4\5") - buf.write("\4\64\n\4\3\4\3\4\3\4\7\49\n\4\f\4\16\4<\13\4\3\4\3\4") - buf.write("\3\4\3\4\3\4\3\4\3\4\3\4\3\4\5\4G\n\4\5\4I\n\4\3\5\3\5") - buf.write("\3\5\7\5N\n\5\f\5\16\5Q\13\5\3\6\3\6\3\6\3\6\3\6\3\6\3") - buf.write("\6\7\6Z\n\6\f\6\16\6]\13\6\3\6\3\6\5\6a\n\6\3\6\3\6\3") - buf.write("\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\5\6q\n") - buf.write("\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\7\6{\n\6\f\6\16\6~") - buf.write("\13\6\3\6\5\6\u0081\n\6\3\6\3\6\5\6\u0085\n\6\3\6\3\6") - buf.write("\3\6\5\6\u008a\n\6\5\6\u008c\n\6\3\7\3\7\3\7\3\7\5\7\u0092") - buf.write("\n\7\3\b\3\b\3\b\6\b\u0097\n\b\r\b\16\b\u0098\3\b\3\b") - buf.write("\3\t\3\t\3\t\6\t\u00a0\n\t\r\t\16\t\u00a1\3\t\3\t\3\n") - buf.write("\3\n\3\n\7\n\u00a9\n\n\f\n\16\n\u00ac\13\n\3\n\3\n\3\13") - buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\5\13\u00ba") - buf.write("\n\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") - buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") - buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") - buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") - buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\7\13\u00f0") - buf.write("\n\13\f\13\16\13\u00f3\13\13\3\13\5\13\u00f6\n\13\3\13") - buf.write("\3\13\3\13\7\13\u00fb\n\13\f\13\16\13\u00fe\13\13\3\f") - buf.write("\3\f\5\f\u0102\n\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r") - buf.write("\3\r\3\r\7\r\u010f\n\r\f\r\16\r\u0112\13\r\3\r\5\r\u0115") - buf.write("\n\r\3\r\3\r\5\r\u0119\n\r\3\16\3\16\3\16\3\16\3\16\3") - buf.write("\16\3\16\3\16\3\16\3\16\3\16\3\16\5\16\u0127\n\16\3\16") - buf.write("\3\16\3\16\3\16\3\16\3\16\7\16\u012f\n\16\f\16\16\16\u0132") - buf.write("\13\16\3\16\2\4\24\32\17\2\4\6\b\n\f\16\20\22\24\26\30") - buf.write("\32\2\f\3\2\7\21\3\2\22\23\4\2\13\f**\3\2\b\n\3\2\13\f") - buf.write("\3\2\r\16\3\2+,\3\2-\62\3\2\678\3\29>\2\u0165\2\37\3\2") - buf.write("\2\2\4(\3\2\2\2\6H\3\2\2\2\bJ\3\2\2\2\n\u008b\3\2\2\2") - buf.write("\f\u008d\3\2\2\2\16\u0093\3\2\2\2\20\u009c\3\2\2\2\22") - buf.write("\u00aa\3\2\2\2\24\u00b9\3\2\2\2\26\u0101\3\2\2\2\30\u0118") - buf.write("\3\2\2\2\32\u0126\3\2\2\2\34\36\5\4\3\2\35\34\3\2\2\2") - buf.write("\36!\3\2\2\2\37\35\3\2\2\2\37 \3\2\2\2 \"\3\2\2\2!\37") - buf.write("\3\2\2\2\"#\7\2\2\3#\3\3\2\2\2$%\5\6\4\2%&\7\3\2\2&)\3") - buf.write("\2\2\2\')\5\n\6\2($\3\2\2\2(\'\3\2\2\2)\5\3\2\2\2*I\7") - buf.write("\4\2\2+-\7\5\2\2,.\5\22\n\2-,\3\2\2\2-.\3\2\2\2.I\3\2") - buf.write("\2\2/\60\5\32\16\2\60\63\7D\2\2\61\62\7\6\2\2\62\64\5") - buf.write("\22\n\2\63\61\3\2\2\2\63\64\3\2\2\2\64I\3\2\2\2\65\66") - buf.write("\5\b\5\2\66\67\7\6\2\2\679\3\2\2\28\65\3\2\2\29<\3\2\2") - buf.write("\2:8\3\2\2\2:;\3\2\2\2;=\3\2\2\2<:\3\2\2\2=I\5\22\n\2") - buf.write(">?\5\24\13\2?@\t\2\2\2@A\7\6\2\2AB\5\24\13\2BI\3\2\2\2") - buf.write("CI\t\3\2\2DF\7\24\2\2EG\5\22\n\2FE\3\2\2\2FG\3\2\2\2G") - buf.write("I\3\2\2\2H*\3\2\2\2H+\3\2\2\2H/\3\2\2\2H:\3\2\2\2H>\3") - buf.write("\2\2\2HC\3\2\2\2HD\3\2\2\2I\7\3\2\2\2JO\5\24\13\2KL\7") - buf.write("\25\2\2LN\5\24\13\2MK\3\2\2\2NQ\3\2\2\2OM\3\2\2\2OP\3") - buf.write("\2\2\2P\t\3\2\2\2QO\3\2\2\2RS\7\26\2\2ST\5\24\13\2T[\5") - buf.write("\16\b\2UV\7\27\2\2VW\5\24\13\2WX\5\16\b\2XZ\3\2\2\2YU") - buf.write("\3\2\2\2Z]\3\2\2\2[Y\3\2\2\2[\\\3\2\2\2\\`\3\2\2\2][\3") - buf.write("\2\2\2^_\7\30\2\2_a\5\16\b\2`^\3\2\2\2`a\3\2\2\2a\u008c") - buf.write("\3\2\2\2bc\7\31\2\2cd\5\24\13\2de\5\16\b\2e\u008c\3\2") - buf.write("\2\2fg\7\32\2\2gh\5\24\13\2hi\5\16\b\2i\u008c\3\2\2\2") - buf.write("jk\7\33\2\2kl\5\22\n\2lm\7\34\2\2mp\5\22\n\2no\7\35\2") - buf.write("\2oq\5\22\n\2pn\3\2\2\2pq\3\2\2\2qr\3\2\2\2rs\5\16\b\2") - buf.write("s\u008c\3\2\2\2tu\7\36\2\2uv\7D\2\2v|\7\37\2\2wx\5\f\7") - buf.write("\2xy\7\25\2\2y{\3\2\2\2zw\3\2\2\2{~\3\2\2\2|z\3\2\2\2") - buf.write("|}\3\2\2\2}\u0080\3\2\2\2~|\3\2\2\2\177\u0081\5\f\7\2") - buf.write("\u0080\177\3\2\2\2\u0080\u0081\3\2\2\2\u0081\u0082\3\2") - buf.write("\2\2\u0082\u0084\7 \2\2\u0083\u0085\5\32\16\2\u0084\u0083") - buf.write("\3\2\2\2\u0084\u0085\3\2\2\2\u0085\u0089\3\2\2\2\u0086") - buf.write("\u008a\5\20\t\2\u0087\u0088\7!\2\2\u0088\u008a\7\3\2\2") - buf.write("\u0089\u0086\3\2\2\2\u0089\u0087\3\2\2\2\u008a\u008c\3") - buf.write("\2\2\2\u008bR\3\2\2\2\u008bb\3\2\2\2\u008bf\3\2\2\2\u008b") - buf.write("j\3\2\2\2\u008bt\3\2\2\2\u008c\13\3\2\2\2\u008d\u008e") - buf.write("\5\32\16\2\u008e\u0091\7D\2\2\u008f\u0090\7\"\2\2\u0090") - buf.write("\u0092\5\24\13\2\u0091\u008f\3\2\2\2\u0091\u0092\3\2\2") - buf.write("\2\u0092\r\3\2\2\2\u0093\u0094\7#\2\2\u0094\u0096\7$\2") - buf.write("\2\u0095\u0097\5\4\3\2\u0096\u0095\3\2\2\2\u0097\u0098") - buf.write("\3\2\2\2\u0098\u0096\3\2\2\2\u0098\u0099\3\2\2\2\u0099") - buf.write("\u009a\3\2\2\2\u009a\u009b\7%\2\2\u009b\17\3\2\2\2\u009c") - buf.write("\u009d\7&\2\2\u009d\u009f\7$\2\2\u009e\u00a0\5\4\3\2\u009f") - buf.write("\u009e\3\2\2\2\u00a0\u00a1\3\2\2\2\u00a1\u009f\3\2\2\2") - buf.write("\u00a1\u00a2\3\2\2\2\u00a2\u00a3\3\2\2\2\u00a3\u00a4\7") - buf.write("%\2\2\u00a4\21\3\2\2\2\u00a5\u00a6\5\24\13\2\u00a6\u00a7") - buf.write("\7\25\2\2\u00a7\u00a9\3\2\2\2\u00a8\u00a5\3\2\2\2\u00a9") - buf.write("\u00ac\3\2\2\2\u00aa\u00a8\3\2\2\2\u00aa\u00ab\3\2\2\2") - buf.write("\u00ab\u00ad\3\2\2\2\u00ac\u00aa\3\2\2\2\u00ad\u00ae\5") - buf.write("\24\13\2\u00ae\23\3\2\2\2\u00af\u00b0\b\13\1\2\u00b0\u00ba") - buf.write("\5\30\r\2\u00b1\u00b2\7\37\2\2\u00b2\u00b3\5\22\n\2\u00b3") - buf.write("\u00b4\7 \2\2\u00b4\u00ba\3\2\2\2\u00b5\u00b6\t\4\2\2") - buf.write("\u00b6\u00ba\5\24\13\20\u00b7\u00b8\7\63\2\2\u00b8\u00ba") - buf.write("\5\24\13\6\u00b9\u00af\3\2\2\2\u00b9\u00b1\3\2\2\2\u00b9") - buf.write("\u00b5\3\2\2\2\u00b9\u00b7\3\2\2\2\u00ba\u00fc\3\2\2\2") - buf.write("\u00bb\u00bc\f\21\2\2\u00bc\u00bd\7\7\2\2\u00bd\u00fb") - buf.write("\5\24\13\21\u00be\u00bf\f\17\2\2\u00bf\u00c0\t\5\2\2\u00c0") - buf.write("\u00fb\5\24\13\20\u00c1\u00c2\f\16\2\2\u00c2\u00c3\t\6") - buf.write("\2\2\u00c3\u00fb\5\24\13\17\u00c4\u00c5\f\r\2\2\u00c5") - buf.write("\u00c6\t\7\2\2\u00c6\u00fb\5\24\13\16\u00c7\u00c8\f\f") - buf.write("\2\2\u00c8\u00c9\7\17\2\2\u00c9\u00fb\5\24\13\r\u00ca") - buf.write("\u00cb\f\13\2\2\u00cb\u00cc\7\20\2\2\u00cc\u00fb\5\24") - buf.write("\13\f\u00cd\u00ce\f\n\2\2\u00ce\u00cf\7\21\2\2\u00cf\u00fb") - buf.write("\5\24\13\13\u00d0\u00d1\f\t\2\2\u00d1\u00d2\t\b\2\2\u00d2") - buf.write("\u00fb\5\24\13\n\u00d3\u00d4\f\7\2\2\u00d4\u00d5\t\t\2") - buf.write("\2\u00d5\u00fb\5\24\13\7\u00d6\u00d7\f\5\2\2\u00d7\u00d8") - buf.write("\7\64\2\2\u00d8\u00fb\5\24\13\5\u00d9\u00da\f\4\2\2\u00da") - buf.write("\u00db\7\65\2\2\u00db\u00fb\5\24\13\4\u00dc\u00dd\f\3") - buf.write("\2\2\u00dd\u00de\7\66\2\2\u00de\u00df\5\24\13\2\u00df") - buf.write("\u00e0\7\"\2\2\u00e0\u00e1\5\24\13\3\u00e1\u00fb\3\2\2") - buf.write("\2\u00e2\u00e3\f\24\2\2\u00e3\u00e4\7\'\2\2\u00e4\u00e5") - buf.write("\5\24\13\2\u00e5\u00e6\7(\2\2\u00e6\u00fb\3\2\2\2\u00e7") - buf.write("\u00e8\f\23\2\2\u00e8\u00e9\7)\2\2\u00e9\u00fb\7D\2\2") - buf.write("\u00ea\u00eb\f\22\2\2\u00eb\u00f1\7\37\2\2\u00ec\u00ed") - buf.write("\5\26\f\2\u00ed\u00ee\7\25\2\2\u00ee\u00f0\3\2\2\2\u00ef") - buf.write("\u00ec\3\2\2\2\u00f0\u00f3\3\2\2\2\u00f1\u00ef\3\2\2\2") - buf.write("\u00f1\u00f2\3\2\2\2\u00f2\u00f5\3\2\2\2\u00f3\u00f1\3") - buf.write("\2\2\2\u00f4\u00f6\5\26\f\2\u00f5\u00f4\3\2\2\2\u00f5") - buf.write("\u00f6\3\2\2\2\u00f6\u00f7\3\2\2\2\u00f7\u00fb\7 \2\2") - buf.write("\u00f8\u00f9\f\b\2\2\u00f9\u00fb\7,\2\2\u00fa\u00bb\3") - buf.write("\2\2\2\u00fa\u00be\3\2\2\2\u00fa\u00c1\3\2\2\2\u00fa\u00c4") - buf.write("\3\2\2\2\u00fa\u00c7\3\2\2\2\u00fa\u00ca\3\2\2\2\u00fa") - buf.write("\u00cd\3\2\2\2\u00fa\u00d0\3\2\2\2\u00fa\u00d3\3\2\2\2") - buf.write("\u00fa\u00d6\3\2\2\2\u00fa\u00d9\3\2\2\2\u00fa\u00dc\3") - buf.write("\2\2\2\u00fa\u00e2\3\2\2\2\u00fa\u00e7\3\2\2\2\u00fa\u00ea") - buf.write("\3\2\2\2\u00fa\u00f8\3\2\2\2\u00fb\u00fe\3\2\2\2\u00fc") - buf.write("\u00fa\3\2\2\2\u00fc\u00fd\3\2\2\2\u00fd\25\3\2\2\2\u00fe") - buf.write("\u00fc\3\2\2\2\u00ff\u0100\7D\2\2\u0100\u0102\7\6\2\2") - buf.write("\u0101\u00ff\3\2\2\2\u0101\u0102\3\2\2\2\u0102\u0103\3") - buf.write("\2\2\2\u0103\u0104\5\24\13\2\u0104\27\3\2\2\2\u0105\u0119") - buf.write("\7@\2\2\u0106\u0119\7A\2\2\u0107\u0119\t\n\2\2\u0108\u0119") - buf.write("\7B\2\2\u0109\u0119\7C\2\2\u010a\u0110\7\'\2\2\u010b\u010c") - buf.write("\5\24\13\2\u010c\u010d\7\25\2\2\u010d\u010f\3\2\2\2\u010e") - buf.write("\u010b\3\2\2\2\u010f\u0112\3\2\2\2\u0110\u010e\3\2\2\2") - buf.write("\u0110\u0111\3\2\2\2\u0111\u0114\3\2\2\2\u0112\u0110\3") - buf.write("\2\2\2\u0113\u0115\5\24\13\2\u0114\u0113\3\2\2\2\u0114") - buf.write("\u0115\3\2\2\2\u0115\u0116\3\2\2\2\u0116\u0119\7(\2\2") - buf.write("\u0117\u0119\7D\2\2\u0118\u0105\3\2\2\2\u0118\u0106\3") - buf.write("\2\2\2\u0118\u0107\3\2\2\2\u0118\u0108\3\2\2\2\u0118\u0109") - buf.write("\3\2\2\2\u0118\u010a\3\2\2\2\u0118\u0117\3\2\2\2\u0119") - buf.write("\31\3\2\2\2\u011a\u011b\b\16\1\2\u011b\u0127\t\13\2\2") - buf.write("\u011c\u011d\7\37\2\2\u011d\u011e\5\32\16\2\u011e\u011f") - buf.write("\7 \2\2\u011f\u0127\3\2\2\2\u0120\u0121\7\'\2\2\u0121") - buf.write("\u0122\5\32\16\2\u0122\u0123\7(\2\2\u0123\u0127\3\2\2") - buf.write("\2\u0124\u0125\7?\2\2\u0125\u0127\5\32\16\3\u0126\u011a") - buf.write("\3\2\2\2\u0126\u011c\3\2\2\2\u0126\u0120\3\2\2\2\u0126") - buf.write("\u0124\3\2\2\2\u0127\u0130\3\2\2\2\u0128\u0129\f\5\2\2") - buf.write("\u0129\u012a\7\b\2\2\u012a\u012f\5\32\16\5\u012b\u012c") - buf.write("\f\4\2\2\u012c\u012d\7?\2\2\u012d\u012f\5\32\16\4\u012e") - buf.write("\u0128\3\2\2\2\u012e\u012b\3\2\2\2\u012f\u0132\3\2\2\2") - buf.write("\u0130\u012e\3\2\2\2\u0130\u0131\3\2\2\2\u0131\33\3\2") - buf.write("\2\2\u0132\u0130\3\2\2\2\"\37(-\63:FHO[`p|\u0080\u0084") - buf.write("\u0089\u008b\u0091\u0098\u00a1\u00aa\u00b9\u00f1\u00f5") - buf.write("\u00fa\u00fc\u0101\u0110\u0114\u0118\u0126\u012e\u0130") + buf.write("\t\16\4\17\t\17\3\2\7\2 \n\2\f\2\16\2#\13\2\3\2\3\2\3") + buf.write("\3\3\3\3\3\3\3\5\3+\n\3\3\4\3\4\3\4\5\4\60\n\4\3\4\3\4") + buf.write("\3\4\3\4\5\4\66\n\4\3\4\3\4\3\4\7\4;\n\4\f\4\16\4>\13") + buf.write("\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\5\4I\n\4\5\4K\n") + buf.write("\4\3\5\3\5\3\5\7\5P\n\5\f\5\16\5S\13\5\3\6\3\6\3\6\3\6") + buf.write("\3\6\3\6\3\6\7\6\\\n\6\f\6\16\6_\13\6\3\6\3\6\5\6c\n\6") + buf.write("\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3") + buf.write("\6\5\6s\n\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\7\6}\n\6\f") + buf.write("\6\16\6\u0080\13\6\3\6\5\6\u0083\n\6\3\6\3\6\5\6\u0087") + buf.write("\n\6\3\6\3\6\3\6\5\6\u008c\n\6\5\6\u008e\n\6\3\7\3\7\3") + buf.write("\7\3\7\5\7\u0094\n\7\3\b\3\b\3\b\6\b\u0099\n\b\r\b\16") + buf.write("\b\u009a\3\b\3\b\3\t\3\t\3\t\6\t\u00a2\n\t\r\t\16\t\u00a3") + buf.write("\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\5\n\u00b2") + buf.write("\n\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3") + buf.write("\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n") + buf.write("\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3") + buf.write("\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\7\n") + buf.write("\u00e8\n\n\f\n\16\n\u00eb\13\n\3\n\5\n\u00ee\n\n\3\n\3") + buf.write("\n\3\n\7\n\u00f3\n\n\f\n\16\n\u00f6\13\n\3\13\3\13\3\13") + buf.write("\7\13\u00fb\n\13\f\13\16\13\u00fe\13\13\3\13\3\13\3\f") + buf.write("\3\f\3\f\3\r\3\r\5\r\u0107\n\r\3\r\3\r\3\16\3\16\3\16") + buf.write("\3\16\3\16\3\16\3\16\3\16\3\16\7\16\u0114\n\16\f\16\16") + buf.write("\16\u0117\13\16\3\16\5\16\u011a\n\16\3\16\3\16\5\16\u011e") + buf.write("\n\16\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17") + buf.write("\3\17\3\17\5\17\u012c\n\17\3\17\3\17\3\17\3\17\3\17\3") + buf.write("\17\7\17\u0134\n\17\f\17\16\17\u0137\13\17\3\17\2\4\22") + buf.write("\34\20\2\4\6\b\n\f\16\20\22\24\26\30\32\34\2\f\3\2\7\21") + buf.write("\3\2\22\23\4\2\13\f**\3\2\b\n\3\2\13\f\3\2\r\16\3\2+,") + buf.write("\3\2-\62\3\2\678\3\29>\2\u0169\2!\3\2\2\2\4*\3\2\2\2\6") + buf.write("J\3\2\2\2\bL\3\2\2\2\n\u008d\3\2\2\2\f\u008f\3\2\2\2\16") + buf.write("\u0095\3\2\2\2\20\u009e\3\2\2\2\22\u00b1\3\2\2\2\24\u00fc") + buf.write("\3\2\2\2\26\u0101\3\2\2\2\30\u0106\3\2\2\2\32\u011d\3") + buf.write("\2\2\2\34\u012b\3\2\2\2\36 \5\4\3\2\37\36\3\2\2\2 #\3") + buf.write("\2\2\2!\37\3\2\2\2!\"\3\2\2\2\"$\3\2\2\2#!\3\2\2\2$%\7") + buf.write("\2\2\3%\3\3\2\2\2&\'\5\6\4\2\'(\7\3\2\2(+\3\2\2\2)+\5") + buf.write("\n\6\2*&\3\2\2\2*)\3\2\2\2+\5\3\2\2\2,K\7\4\2\2-/\7\5") + buf.write("\2\2.\60\5\24\13\2/.\3\2\2\2/\60\3\2\2\2\60K\3\2\2\2\61") + buf.write("\62\5\34\17\2\62\65\7D\2\2\63\64\7\6\2\2\64\66\5\24\13") + buf.write("\2\65\63\3\2\2\2\65\66\3\2\2\2\66K\3\2\2\2\678\5\b\5\2") + buf.write("89\7\6\2\29;\3\2\2\2:\67\3\2\2\2;>\3\2\2\2<:\3\2\2\2<") + buf.write("=\3\2\2\2=?\3\2\2\2><\3\2\2\2?K\5\24\13\2@A\5\22\n\2A") + buf.write("B\t\2\2\2BC\7\6\2\2CD\5\22\n\2DK\3\2\2\2EK\t\3\2\2FH\7") + buf.write("\24\2\2GI\5\24\13\2HG\3\2\2\2HI\3\2\2\2IK\3\2\2\2J,\3") + buf.write("\2\2\2J-\3\2\2\2J\61\3\2\2\2J<\3\2\2\2J@\3\2\2\2JE\3\2") + buf.write("\2\2JF\3\2\2\2K\7\3\2\2\2LQ\5\22\n\2MN\7\25\2\2NP\5\22") + buf.write("\n\2OM\3\2\2\2PS\3\2\2\2QO\3\2\2\2QR\3\2\2\2R\t\3\2\2") + buf.write("\2SQ\3\2\2\2TU\7\26\2\2UV\5\22\n\2V]\5\16\b\2WX\7\27\2") + buf.write("\2XY\5\22\n\2YZ\5\16\b\2Z\\\3\2\2\2[W\3\2\2\2\\_\3\2\2") + buf.write("\2][\3\2\2\2]^\3\2\2\2^b\3\2\2\2_]\3\2\2\2`a\7\30\2\2") + buf.write("ac\5\16\b\2b`\3\2\2\2bc\3\2\2\2c\u008e\3\2\2\2de\7\31") + buf.write("\2\2ef\5\22\n\2fg\5\16\b\2g\u008e\3\2\2\2hi\7\32\2\2i") + buf.write("j\5\22\n\2jk\5\16\b\2k\u008e\3\2\2\2lm\7\33\2\2mn\5\24") + buf.write("\13\2no\7\34\2\2or\5\24\13\2pq\7\35\2\2qs\5\24\13\2rp") + buf.write("\3\2\2\2rs\3\2\2\2st\3\2\2\2tu\5\16\b\2u\u008e\3\2\2\2") + buf.write("vw\7\36\2\2wx\7D\2\2x~\7\37\2\2yz\5\f\7\2z{\7\25\2\2{") + buf.write("}\3\2\2\2|y\3\2\2\2}\u0080\3\2\2\2~|\3\2\2\2~\177\3\2") + buf.write("\2\2\177\u0082\3\2\2\2\u0080~\3\2\2\2\u0081\u0083\5\f") + buf.write("\7\2\u0082\u0081\3\2\2\2\u0082\u0083\3\2\2\2\u0083\u0084") + buf.write("\3\2\2\2\u0084\u0086\7 \2\2\u0085\u0087\5\34\17\2\u0086") + buf.write("\u0085\3\2\2\2\u0086\u0087\3\2\2\2\u0087\u008b\3\2\2\2") + buf.write("\u0088\u008c\5\20\t\2\u0089\u008a\7!\2\2\u008a\u008c\7") + buf.write("\3\2\2\u008b\u0088\3\2\2\2\u008b\u0089\3\2\2\2\u008c\u008e") + buf.write("\3\2\2\2\u008dT\3\2\2\2\u008dd\3\2\2\2\u008dh\3\2\2\2") + buf.write("\u008dl\3\2\2\2\u008dv\3\2\2\2\u008e\13\3\2\2\2\u008f") + buf.write("\u0090\5\34\17\2\u0090\u0093\7D\2\2\u0091\u0092\7\"\2") + buf.write("\2\u0092\u0094\5\22\n\2\u0093\u0091\3\2\2\2\u0093\u0094") + buf.write("\3\2\2\2\u0094\r\3\2\2\2\u0095\u0096\7#\2\2\u0096\u0098") + buf.write("\7$\2\2\u0097\u0099\5\4\3\2\u0098\u0097\3\2\2\2\u0099") + buf.write("\u009a\3\2\2\2\u009a\u0098\3\2\2\2\u009a\u009b\3\2\2\2") + buf.write("\u009b\u009c\3\2\2\2\u009c\u009d\7%\2\2\u009d\17\3\2\2") + buf.write("\2\u009e\u009f\7&\2\2\u009f\u00a1\7$\2\2\u00a0\u00a2\5") + buf.write("\4\3\2\u00a1\u00a0\3\2\2\2\u00a2\u00a3\3\2\2\2\u00a3\u00a1") + buf.write("\3\2\2\2\u00a3\u00a4\3\2\2\2\u00a4\u00a5\3\2\2\2\u00a5") + buf.write("\u00a6\7%\2\2\u00a6\21\3\2\2\2\u00a7\u00a8\b\n\1\2\u00a8") + buf.write("\u00b2\5\32\16\2\u00a9\u00aa\7\37\2\2\u00aa\u00ab\5\24") + buf.write("\13\2\u00ab\u00ac\7 \2\2\u00ac\u00b2\3\2\2\2\u00ad\u00ae") + buf.write("\t\4\2\2\u00ae\u00b2\5\22\n\20\u00af\u00b0\7\63\2\2\u00b0") + buf.write("\u00b2\5\22\n\6\u00b1\u00a7\3\2\2\2\u00b1\u00a9\3\2\2") + buf.write("\2\u00b1\u00ad\3\2\2\2\u00b1\u00af\3\2\2\2\u00b2\u00f4") + buf.write("\3\2\2\2\u00b3\u00b4\f\21\2\2\u00b4\u00b5\7\7\2\2\u00b5") + buf.write("\u00f3\5\22\n\21\u00b6\u00b7\f\17\2\2\u00b7\u00b8\t\5") + buf.write("\2\2\u00b8\u00f3\5\22\n\20\u00b9\u00ba\f\16\2\2\u00ba") + buf.write("\u00bb\t\6\2\2\u00bb\u00f3\5\22\n\17\u00bc\u00bd\f\r\2") + buf.write("\2\u00bd\u00be\t\7\2\2\u00be\u00f3\5\22\n\16\u00bf\u00c0") + buf.write("\f\f\2\2\u00c0\u00c1\7\17\2\2\u00c1\u00f3\5\22\n\r\u00c2") + buf.write("\u00c3\f\13\2\2\u00c3\u00c4\7\20\2\2\u00c4\u00f3\5\22") + buf.write("\n\f\u00c5\u00c6\f\n\2\2\u00c6\u00c7\7\21\2\2\u00c7\u00f3") + buf.write("\5\22\n\13\u00c8\u00c9\f\t\2\2\u00c9\u00ca\t\b\2\2\u00ca") + buf.write("\u00f3\5\22\n\n\u00cb\u00cc\f\7\2\2\u00cc\u00cd\t\t\2") + buf.write("\2\u00cd\u00f3\5\22\n\7\u00ce\u00cf\f\5\2\2\u00cf\u00d0") + buf.write("\7\64\2\2\u00d0\u00f3\5\22\n\5\u00d1\u00d2\f\4\2\2\u00d2") + buf.write("\u00d3\7\65\2\2\u00d3\u00f3\5\22\n\4\u00d4\u00d5\f\3\2") + buf.write("\2\u00d5\u00d6\7\66\2\2\u00d6\u00d7\5\22\n\2\u00d7\u00d8") + buf.write("\7\"\2\2\u00d8\u00d9\5\22\n\3\u00d9\u00f3\3\2\2\2\u00da") + buf.write("\u00db\f\24\2\2\u00db\u00dc\7\'\2\2\u00dc\u00dd\5\22\n") + buf.write("\2\u00dd\u00de\7(\2\2\u00de\u00f3\3\2\2\2\u00df\u00e0") + buf.write("\f\23\2\2\u00e0\u00e1\7)\2\2\u00e1\u00f3\7D\2\2\u00e2") + buf.write("\u00e3\f\22\2\2\u00e3\u00e9\7\37\2\2\u00e4\u00e5\5\30") + buf.write("\r\2\u00e5\u00e6\7\25\2\2\u00e6\u00e8\3\2\2\2\u00e7\u00e4") + buf.write("\3\2\2\2\u00e8\u00eb\3\2\2\2\u00e9\u00e7\3\2\2\2\u00e9") + buf.write("\u00ea\3\2\2\2\u00ea\u00ed\3\2\2\2\u00eb\u00e9\3\2\2\2") + buf.write("\u00ec\u00ee\5\30\r\2\u00ed\u00ec\3\2\2\2\u00ed\u00ee") + buf.write("\3\2\2\2\u00ee\u00ef\3\2\2\2\u00ef\u00f3\7 \2\2\u00f0") + buf.write("\u00f1\f\b\2\2\u00f1\u00f3\7,\2\2\u00f2\u00b3\3\2\2\2") + buf.write("\u00f2\u00b6\3\2\2\2\u00f2\u00b9\3\2\2\2\u00f2\u00bc\3") + buf.write("\2\2\2\u00f2\u00bf\3\2\2\2\u00f2\u00c2\3\2\2\2\u00f2\u00c5") + buf.write("\3\2\2\2\u00f2\u00c8\3\2\2\2\u00f2\u00cb\3\2\2\2\u00f2") + buf.write("\u00ce\3\2\2\2\u00f2\u00d1\3\2\2\2\u00f2\u00d4\3\2\2\2") + buf.write("\u00f2\u00da\3\2\2\2\u00f2\u00df\3\2\2\2\u00f2\u00e2\3") + buf.write("\2\2\2\u00f2\u00f0\3\2\2\2\u00f3\u00f6\3\2\2\2\u00f4\u00f2") + buf.write("\3\2\2\2\u00f4\u00f5\3\2\2\2\u00f5\23\3\2\2\2\u00f6\u00f4") + buf.write("\3\2\2\2\u00f7\u00f8\5\22\n\2\u00f8\u00f9\7\25\2\2\u00f9") + buf.write("\u00fb\3\2\2\2\u00fa\u00f7\3\2\2\2\u00fb\u00fe\3\2\2\2") + buf.write("\u00fc\u00fa\3\2\2\2\u00fc\u00fd\3\2\2\2\u00fd\u00ff\3") + buf.write("\2\2\2\u00fe\u00fc\3\2\2\2\u00ff\u0100\5\22\n\2\u0100") + buf.write("\25\3\2\2\2\u0101\u0102\5\24\13\2\u0102\u0103\7\2\2\3") + buf.write("\u0103\27\3\2\2\2\u0104\u0105\7D\2\2\u0105\u0107\7\6\2") + buf.write("\2\u0106\u0104\3\2\2\2\u0106\u0107\3\2\2\2\u0107\u0108") + buf.write("\3\2\2\2\u0108\u0109\5\22\n\2\u0109\31\3\2\2\2\u010a\u011e") + buf.write("\7@\2\2\u010b\u011e\7A\2\2\u010c\u011e\t\n\2\2\u010d\u011e") + buf.write("\7B\2\2\u010e\u011e\7C\2\2\u010f\u0115\7\'\2\2\u0110\u0111") + buf.write("\5\22\n\2\u0111\u0112\7\25\2\2\u0112\u0114\3\2\2\2\u0113") + buf.write("\u0110\3\2\2\2\u0114\u0117\3\2\2\2\u0115\u0113\3\2\2\2") + buf.write("\u0115\u0116\3\2\2\2\u0116\u0119\3\2\2\2\u0117\u0115\3") + buf.write("\2\2\2\u0118\u011a\5\22\n\2\u0119\u0118\3\2\2\2\u0119") + buf.write("\u011a\3\2\2\2\u011a\u011b\3\2\2\2\u011b\u011e\7(\2\2") + buf.write("\u011c\u011e\7D\2\2\u011d\u010a\3\2\2\2\u011d\u010b\3") + buf.write("\2\2\2\u011d\u010c\3\2\2\2\u011d\u010d\3\2\2\2\u011d\u010e") + buf.write("\3\2\2\2\u011d\u010f\3\2\2\2\u011d\u011c\3\2\2\2\u011e") + buf.write("\33\3\2\2\2\u011f\u0120\b\17\1\2\u0120\u012c\t\13\2\2") + buf.write("\u0121\u0122\7\37\2\2\u0122\u0123\5\34\17\2\u0123\u0124") + buf.write("\7 \2\2\u0124\u012c\3\2\2\2\u0125\u0126\7\'\2\2\u0126") + buf.write("\u0127\5\34\17\2\u0127\u0128\7(\2\2\u0128\u012c\3\2\2") + buf.write("\2\u0129\u012a\7?\2\2\u012a\u012c\5\34\17\3\u012b\u011f") + buf.write("\3\2\2\2\u012b\u0121\3\2\2\2\u012b\u0125\3\2\2\2\u012b") + buf.write("\u0129\3\2\2\2\u012c\u0135\3\2\2\2\u012d\u012e\f\5\2\2") + buf.write("\u012e\u012f\7\b\2\2\u012f\u0134\5\34\17\5\u0130\u0131") + buf.write("\f\4\2\2\u0131\u0132\7?\2\2\u0132\u0134\5\34\17\4\u0133") + buf.write("\u012d\3\2\2\2\u0133\u0130\3\2\2\2\u0134\u0137\3\2\2\2") + buf.write("\u0135\u0133\3\2\2\2\u0135\u0136\3\2\2\2\u0136\35\3\2") + buf.write("\2\2\u0137\u0135\3\2\2\2\"!*/\65 1: + lits, tags = parts[::2], parts[1::2] + values = [None] * len(parts) - pointer = self.builder.gep(string, [vInt(0), vIndex(0)]) - array = ll.GlobalVariable(self.module, const.type, self.module.get_unique_name('str')) - array.global_constant = True - array.initializer = const - self.builder.store(self.builder.gep(array, [vInt(0), vInt(0)]), pointer) + for i, lit in enumerate(lits): + values[i*2] = self.string(lit) + + for i, tag in enumerate(tags): + try: + expr = parse_expr(tag) + except err: + self.throw(ctx, err.InvalidExpression(tag)) + try: + value = self.visit(expr) + except err as e: + self.throw(ctx, str(e).partition(': ')[2][:-1]) - length = self.builder.gep(string, [vInt(0), vIndex(1)]) - self.builder.store(vInt(const.type.count), length) + func = self.builder.load(self.attribute(ctx, value, 'toString')) + values[i*2+1] = self.builder.call(func, [value]) - return string + return self.call('StringArray_join', self.array(tString, values), self.string('')) + + else: + return self.string(lit) def visitAtomArray(self, ctx): exprs = ctx.expr() values = self.unify(ctx, *[self.visit(expr) for expr in exprs]) - subtype = values[0].type if values else tUnknown - type = tArray(subtype) - array = self.malloc(type) - - pointer = self.builder.gep(array, [vInt(0), vIndex(0)]) - memory = self.malloc(tPtr(subtype), vInt(len(values))) - for i, value in enumerate(values): - self.builder.store(value, self.builder.gep(memory, [vInt(i)])) - self.builder.store(memory, pointer) - - length = self.builder.gep(array, [vInt(0), vIndex(1)]) - self.builder.store(vInt(len(values)), length) - - return array + return self.array(subtype, values) def visitAtomId(self, ctx): return self.builder.load(self.get(ctx, ctx.ID())) diff --git a/src/errors.py b/src/errors.py index ddf62dc4..d459e222 100644 --- a/src/errors.py +++ b/src/errors.py @@ -17,6 +17,7 @@ class PyxellError(Exception): ExpectedNamedArgument = lambda: f"Positional argument cannot follow named arguments" IllegalAssignment = lambda t1, t2: f"Illegal assignment from `{t1.show()}` to `{t2.show()}`" InvalidDeclaration = lambda t: f"Cannot declare variable of type `{t.show()}`" + InvalidExpression = lambda e: f"Could not parse expression `{e}`" InvalidLoopStep = lambda: f"Incompatible number of loop variables and step expressions" MissingDefault = lambda id: f"Missing default value for argument `{id}`" MissingReturn = lambda id: f"Not all code paths return a value in function `{id}`" diff --git a/src/main.py b/src/main.py index a5bd66ab..524a5fe5 100644 --- a/src/main.py +++ b/src/main.py @@ -5,13 +5,10 @@ import subprocess from pathlib import Path -from antlr4 import * - -from .antlr.PyxellLexer import PyxellLexer -from .antlr.PyxellParser import PyxellParser from .compiler import PyxellCompiler -from .errors import PyxellErrorListener, PyxellError +from .errors import PyxellError from .indentation import transform_indented_code +from .parsing import parse_program # Parse arguments. @@ -30,13 +27,7 @@ pyxell_code = transform_indented_code(pyxell_code) # Parse the program. - input_stream = InputStream(pyxell_code) - lexer = PyxellLexer(input_stream) - stream = CommonTokenStream(lexer) - parser = PyxellParser(stream) - parser.removeErrorListeners() - parser.addErrorListener(PyxellErrorListener()) - tree = parser.program() + tree = parse_program(pyxell_code) # Generate LLVM code. compiler = PyxellCompiler() diff --git a/src/parsing.py b/src/parsing.py new file mode 100644 index 00000000..ff03c116 --- /dev/null +++ b/src/parsing.py @@ -0,0 +1,24 @@ + +from antlr4 import * + +from .antlr.PyxellLexer import PyxellLexer +from .antlr.PyxellParser import PyxellParser +from .errors import PyxellErrorListener + + +def _get_parser(code): + input_stream = InputStream(code) + lexer = PyxellLexer(input_stream) + stream = CommonTokenStream(lexer) + parser = PyxellParser(stream) + parser.removeErrorListeners() + parser.addErrorListener(PyxellErrorListener()) + return parser + + +def parse_program(code): + return _get_parser(code).program() + + +def parse_expr(code): + return _get_parser(code).interpolation_expr() From 569a3d9c3c591ad9e606544807aaf1ff54dedc26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Fri, 1 Nov 2019 23:48:07 +0100 Subject: [PATCH 046/100] Fix mutability of strings --- src/compiler.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/compiler.py b/src/compiler.py index 69cdf29d..4fb70cd8 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -75,17 +75,20 @@ def get(self, ctx, id): def extract(self, value, *indices): return self.builder.load(self.builder.gep(value, [vInt(0), *map(vIndex, indices)])) - def index(self, ctx, *exprs): + def index(self, ctx, *exprs, lvalue=False): collection, index = [self.visit(expr) for expr in exprs] if collection.type.isCollection(): + if lvalue and not collection.type.isArray(): + self.throw(exprs[0], err.NotLvalue()) + index = self.cast(exprs[1], index, tInt) length = self.extract(collection, 1) cmp = self.builder.icmp_signed('>=', index, vInt(0)) index = self.builder.select(cmp, index, self.builder.add(index, length)) return self.builder.gep(self.extract(collection, 0), [index]) - else: - self.throw(ctx, err.NotIndexable(collection.type)) + + self.throw(ctx, err.NotIndexable(collection.type)) def attribute(self, ctx, value, attr): type = value.type @@ -200,18 +203,22 @@ def lvalue(self, ctx, expr, declare=None, initialize=False): atom = expr.atom() if not isinstance(atom, PyxellParser.AtomIdContext): self.throw(ctx, err.NotLvalue()) + id = str(atom.ID()) if id not in self.env: if declare is None: self.throw(ctx, err.UndeclaredIdentifier(id)) self.declare(ctx, declare, id) + if initialize: self.initialized.add(id) + return self.env[id] + elif isinstance(expr, PyxellParser.ExprIndexContext): - return self.index(ctx, *expr.expr()) - else: - self.throw(ctx, err.NotLvalue()) + return self.index(ctx, *expr.expr(), lvalue=True) + + self.throw(ctx, err.NotLvalue()) def assign(self, ctx, expr, value): ptr = self.lvalue(ctx, expr, declare=value.type, initialize=True) From b806e344fcea5fa8749f6a88afc79f9de146b4a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sat, 2 Nov 2019 21:26:31 +0100 Subject: [PATCH 047/100] Faster execution of tests --- src/main.py | 46 ++++++++++++++++++++++++---------------------- test.py | 42 +++++++++++++++++++++++++----------------- 2 files changed, 49 insertions(+), 39 deletions(-) diff --git a/src/main.py b/src/main.py index 524a5fe5..15f5035d 100644 --- a/src/main.py +++ b/src/main.py @@ -6,22 +6,16 @@ from pathlib import Path from .compiler import PyxellCompiler -from .errors import PyxellError from .indentation import transform_indented_code from .parsing import parse_program +abspath = Path(__file__).parents[1] -# Parse arguments. -parser = argparse.ArgumentParser(prog='pyxell', description="Run Pyxell compiler.") -parser.add_argument('filepath', help="source file path") -parser.add_argument('clangargs', nargs=argparse.REMAINDER, help="other arguments that will be passed to clang") -args = parser.parse_args() -filepath = Path(args.filepath) -filename, ext = os.path.splitext(filepath) -abspath = Path(__file__).parents[1] +def run_compiler(filepath, clangargs): + filepath = Path(filepath) + filename, ext = os.path.splitext(filepath) -try: # Read the code and transform indents. pyxell_code = Path(abspath/'lib/std.px').read_text() + filepath.read_text() pyxell_code = transform_indented_code(pyxell_code) @@ -34,15 +28,23 @@ compiler.visit(tree) llvm_code = str(compiler.module) -except FileNotFoundError: - print("File not found.") - exit(1) - -except PyxellError as error: - print(str(error)) - exit(1) - -# Create an executable. -with open(f'{filename}.ll', 'w') as file: - file.write(llvm_code) -subprocess.check_output(['clang', f'{filename}.ll', abspath/'lib/io.ll', abspath/'lib/base.ll', '-o', f'{filename}.exe', '-O2'] + args.clangargs) + # Create an executable. + with open(f'{filename}.ll', 'w') as file: + file.write(llvm_code) + try: + subprocess.check_output(['clang', f'{filename}.ll', abspath/'lib/io.ll', abspath/'lib/base.ll', '-o', f'{filename}.exe', '-O2', *clangargs], stderr=subprocess.STDOUT) + except subprocess.CalledProcessError as e: + raise ValueError(e.output.decode()) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(prog='pyxell', description="Run Pyxell compiler.") + parser.add_argument('filepath', help="source file path") + parser.add_argument('clangargs', nargs=argparse.REMAINDER, help="other arguments that will be passed to clang") + args = parser.parse_args() + + try: + run_compiler(args.filepath, args.clangargs) + except Exception as e: + print(str(e)) + exit(1) diff --git a/test.py b/test.py index a7f4ce9b..38367bd5 100644 --- a/test.py +++ b/test.py @@ -6,6 +6,9 @@ import os import subprocess from timeit import default_timer as timer +from pathlib import Path + +from src.main import run_compiler # Setup terminal colors. R = colorama.Style.BRIGHT + colorama.Fore.RED @@ -40,25 +43,30 @@ with open('tmp.out', 'w') as outfile: try: - params = '-target x86_64-pc-windows-gnu' if args.target_windows_gnu else '' - subprocess.check_output(f'python -m src.main {path} {params}', stderr=subprocess.STDOUT) - except subprocess.CalledProcessError as e: - if os.path.isfile(path.replace(".px", ".err")): - error_message = e.output.decode() - with open(f'{path.replace(".px", ".err")}', 'r') as errfile: - error_expected = errfile.read() - if e.output.decode().strip().endswith(error_expected): - print(f"{G}{error_message}{E}") - ok += 1 - else: - print(f"{R}{error_message}---\n> {error_expected}{E}") + error_expected = Path(path.replace(".px", ".err")).read_text() + except FileNotFoundError: + error_expected = None + + try: + params = ['-target', 'x86_64-pc-windows-gnu'] if args.target_windows_gnu else [] + run_compiler(path, params) + except KeyboardInterrupt: + exit(1) + except Exception as e: + error_message = str(e) + if error_expected: + if error_message.strip().endswith(error_expected): + print(f"{G}{error_message}{E}") + ok += 1 + else: + print(f"{R}{error_message}\n---\n> {error_expected}{E}") else: - print(f"{R}Compiler returned error code {e.returncode}.\n{e.output.decode()}{E}") + print(f"{R}{error_message}{E}") + continue + + if error_expected: + print(f"{R}Program compiled successfully, but error expected.\n---\n> {error_expected}{E}") continue - else: - if os.path.isfile(path.replace(".px", ".err")): - print(f"{R}Compiler returned code 0, but error expected!{E}") - continue t1 = timer() try: From a401c2b8938e236d04766f73c813061f9ecc3beb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sun, 3 Nov 2019 11:36:05 +0100 Subject: [PATCH 048/100] Update requirements --- README.md | 15 ++++++++++----- requirements.txt | 3 +-- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index fabdb685..1bc52fd8 100644 --- a/README.md +++ b/README.md @@ -104,17 +104,22 @@ Details Requirements ------------ -These are the software versions that I use. Pyxell may work with others versions, but it is not guaranteed. +* Python 3.8 with packages from `requirements.txt`. -* ANTLR 4.7.2 (to build the parser) -* Python 3.7.4 with packages from `requirements.txt` installed (to run tests) +Sometimes installation of `llvmlite` fails. +If a problem occurs, try using `easy_install` instead of `pip install`. -To compile and link a Pyxell program correctly, a C++ standard library is required for Clang. -This shouldn't be a problem on Linux, but on Windows this may not work out of the box. +* Clang 6 with C++ standard library. + +The library shouldn't be a problem on Linux, but on Windows this may not work out of the box. In some cases Windows SDK installation may be required or it may be necessary to run `pyxell` with `-target x86_64-pc-windows-gnu` (run `test.py` with `-t` argument to use this). +* ANTLR 4.7.2 (to build the parser). + +Put `antlr-4.7.2-complete.jar` file into `src` folder. + Usage ----- diff --git a/requirements.txt b/requirements.txt index 4afec941..91abc38a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,3 @@ antlr4-python3-runtime==4.7.2 -argparse==1.4.0 colorama==0.4.1 -llvmlite==0.29.0 +llvmlite==0.30.0 From 105ffb7ad34790111666c61078a73315e7315304 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sun, 3 Nov 2019 21:31:28 +0100 Subject: [PATCH 049/100] Modules --- lib/random.px | 2 +- src/Pyxell.g4 | 7 +- src/antlr/Pyxell.interp | 11 +- src/antlr/Pyxell.tokens | 144 +++-- src/antlr/PyxellLexer.interp | 14 +- src/antlr/PyxellLexer.py | 392 ++++++------ src/antlr/PyxellLexer.tokens | 144 +++-- src/antlr/PyxellParser.py | 1139 +++++++++++++++++++--------------- src/antlr/PyxellVisitor.py | 10 + src/compiler.py | 159 +++-- src/errors.py | 1 + src/main.py | 25 +- test/bad/modules/use01.err | 2 +- 13 files changed, 1166 insertions(+), 884 deletions(-) diff --git a/lib/random.px b/lib/random.px index d936faa7..2219befc 100644 --- a/lib/random.px +++ b/lib/random.px @@ -12,7 +12,7 @@ func randInt(Int r: 2) Int def -- range shouldn't be larger than 2^60 r' >>= 1 x = 0 -- rand() gives only 15 bits of randomness - for i in 1..min(b, 60) step 15 do + for i in 1..(b < 60 ? b : 60) step 15 do x = (x << 15) + rand() return x % r diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index 6a08b0c6..09b8d5f5 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -10,7 +10,8 @@ stmt ; simple_stmt - : 'skip' # StmtSkip + : 'use' name=ID ('only' only=id_list | 'hiding' hiding=id_list | 'as' as_=ID)? # StmtUse + | 'skip' # StmtSkip | 'print' tuple_expr? # StmtPrint | typ ID ('=' tuple_expr)? # StmtDecl | (lvalue '=')* tuple_expr # StmtAssg @@ -88,6 +89,10 @@ atom | ID # AtomId ; +id_list + : (ID ',')* ID + ; + typ : ('Void' | 'Int' | 'Float' | 'Bool' | 'Char' | 'String') # TypePrimitive | '(' typ ')' # TypeParentheses diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index 49b809b5..6753c7df 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -1,6 +1,10 @@ token literal names: null ';' +'use' +'only' +'hiding' +'as' 'skip' 'print' '=' @@ -133,6 +137,10 @@ null null null null +null +null +null +null INT FLOAT CHAR @@ -156,8 +164,9 @@ tuple_expr interpolation_expr call_arg atom +id_list typ atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 71, 313, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 3, 2, 7, 2, 32, 10, 2, 12, 2, 14, 2, 35, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 43, 10, 3, 3, 4, 3, 4, 3, 4, 5, 4, 48, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 54, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 59, 10, 4, 12, 4, 14, 4, 62, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 73, 10, 4, 5, 4, 75, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 80, 10, 5, 12, 5, 14, 5, 83, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 92, 10, 6, 12, 6, 14, 6, 95, 11, 6, 3, 6, 3, 6, 5, 6, 99, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 115, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 125, 10, 6, 12, 6, 14, 6, 128, 11, 6, 3, 6, 5, 6, 131, 10, 6, 3, 6, 3, 6, 5, 6, 135, 10, 6, 3, 6, 3, 6, 3, 6, 5, 6, 140, 10, 6, 5, 6, 142, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 148, 10, 7, 3, 8, 3, 8, 3, 8, 6, 8, 153, 10, 8, 13, 8, 14, 8, 154, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 6, 9, 162, 10, 9, 13, 9, 14, 9, 163, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 178, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 232, 10, 10, 12, 10, 14, 10, 235, 11, 10, 3, 10, 5, 10, 238, 10, 10, 3, 10, 3, 10, 3, 10, 7, 10, 243, 10, 10, 12, 10, 14, 10, 246, 11, 10, 3, 11, 3, 11, 3, 11, 7, 11, 251, 10, 11, 12, 11, 14, 11, 254, 11, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 5, 13, 263, 10, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 7, 14, 276, 10, 14, 12, 14, 14, 14, 279, 11, 14, 3, 14, 5, 14, 282, 10, 14, 3, 14, 3, 14, 5, 14, 286, 10, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 300, 10, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 7, 15, 308, 10, 15, 12, 15, 14, 15, 311, 11, 15, 3, 15, 2, 4, 18, 28, 16, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 2, 12, 3, 2, 7, 17, 3, 2, 18, 19, 4, 2, 11, 12, 42, 42, 3, 2, 8, 10, 3, 2, 11, 12, 3, 2, 13, 14, 3, 2, 43, 44, 3, 2, 45, 50, 3, 2, 55, 56, 3, 2, 57, 62, 2, 361, 2, 33, 3, 2, 2, 2, 4, 42, 3, 2, 2, 2, 6, 74, 3, 2, 2, 2, 8, 76, 3, 2, 2, 2, 10, 141, 3, 2, 2, 2, 12, 143, 3, 2, 2, 2, 14, 149, 3, 2, 2, 2, 16, 158, 3, 2, 2, 2, 18, 177, 3, 2, 2, 2, 20, 252, 3, 2, 2, 2, 22, 257, 3, 2, 2, 2, 24, 262, 3, 2, 2, 2, 26, 285, 3, 2, 2, 2, 28, 299, 3, 2, 2, 2, 30, 32, 5, 4, 3, 2, 31, 30, 3, 2, 2, 2, 32, 35, 3, 2, 2, 2, 33, 31, 3, 2, 2, 2, 33, 34, 3, 2, 2, 2, 34, 36, 3, 2, 2, 2, 35, 33, 3, 2, 2, 2, 36, 37, 7, 2, 2, 3, 37, 3, 3, 2, 2, 2, 38, 39, 5, 6, 4, 2, 39, 40, 7, 3, 2, 2, 40, 43, 3, 2, 2, 2, 41, 43, 5, 10, 6, 2, 42, 38, 3, 2, 2, 2, 42, 41, 3, 2, 2, 2, 43, 5, 3, 2, 2, 2, 44, 75, 7, 4, 2, 2, 45, 47, 7, 5, 2, 2, 46, 48, 5, 20, 11, 2, 47, 46, 3, 2, 2, 2, 47, 48, 3, 2, 2, 2, 48, 75, 3, 2, 2, 2, 49, 50, 5, 28, 15, 2, 50, 53, 7, 68, 2, 2, 51, 52, 7, 6, 2, 2, 52, 54, 5, 20, 11, 2, 53, 51, 3, 2, 2, 2, 53, 54, 3, 2, 2, 2, 54, 75, 3, 2, 2, 2, 55, 56, 5, 8, 5, 2, 56, 57, 7, 6, 2, 2, 57, 59, 3, 2, 2, 2, 58, 55, 3, 2, 2, 2, 59, 62, 3, 2, 2, 2, 60, 58, 3, 2, 2, 2, 60, 61, 3, 2, 2, 2, 61, 63, 3, 2, 2, 2, 62, 60, 3, 2, 2, 2, 63, 75, 5, 20, 11, 2, 64, 65, 5, 18, 10, 2, 65, 66, 9, 2, 2, 2, 66, 67, 7, 6, 2, 2, 67, 68, 5, 18, 10, 2, 68, 75, 3, 2, 2, 2, 69, 75, 9, 3, 2, 2, 70, 72, 7, 20, 2, 2, 71, 73, 5, 20, 11, 2, 72, 71, 3, 2, 2, 2, 72, 73, 3, 2, 2, 2, 73, 75, 3, 2, 2, 2, 74, 44, 3, 2, 2, 2, 74, 45, 3, 2, 2, 2, 74, 49, 3, 2, 2, 2, 74, 60, 3, 2, 2, 2, 74, 64, 3, 2, 2, 2, 74, 69, 3, 2, 2, 2, 74, 70, 3, 2, 2, 2, 75, 7, 3, 2, 2, 2, 76, 81, 5, 18, 10, 2, 77, 78, 7, 21, 2, 2, 78, 80, 5, 18, 10, 2, 79, 77, 3, 2, 2, 2, 80, 83, 3, 2, 2, 2, 81, 79, 3, 2, 2, 2, 81, 82, 3, 2, 2, 2, 82, 9, 3, 2, 2, 2, 83, 81, 3, 2, 2, 2, 84, 85, 7, 22, 2, 2, 85, 86, 5, 18, 10, 2, 86, 93, 5, 14, 8, 2, 87, 88, 7, 23, 2, 2, 88, 89, 5, 18, 10, 2, 89, 90, 5, 14, 8, 2, 90, 92, 3, 2, 2, 2, 91, 87, 3, 2, 2, 2, 92, 95, 3, 2, 2, 2, 93, 91, 3, 2, 2, 2, 93, 94, 3, 2, 2, 2, 94, 98, 3, 2, 2, 2, 95, 93, 3, 2, 2, 2, 96, 97, 7, 24, 2, 2, 97, 99, 5, 14, 8, 2, 98, 96, 3, 2, 2, 2, 98, 99, 3, 2, 2, 2, 99, 142, 3, 2, 2, 2, 100, 101, 7, 25, 2, 2, 101, 102, 5, 18, 10, 2, 102, 103, 5, 14, 8, 2, 103, 142, 3, 2, 2, 2, 104, 105, 7, 26, 2, 2, 105, 106, 5, 18, 10, 2, 106, 107, 5, 14, 8, 2, 107, 142, 3, 2, 2, 2, 108, 109, 7, 27, 2, 2, 109, 110, 5, 20, 11, 2, 110, 111, 7, 28, 2, 2, 111, 114, 5, 20, 11, 2, 112, 113, 7, 29, 2, 2, 113, 115, 5, 20, 11, 2, 114, 112, 3, 2, 2, 2, 114, 115, 3, 2, 2, 2, 115, 116, 3, 2, 2, 2, 116, 117, 5, 14, 8, 2, 117, 142, 3, 2, 2, 2, 118, 119, 7, 30, 2, 2, 119, 120, 7, 68, 2, 2, 120, 126, 7, 31, 2, 2, 121, 122, 5, 12, 7, 2, 122, 123, 7, 21, 2, 2, 123, 125, 3, 2, 2, 2, 124, 121, 3, 2, 2, 2, 125, 128, 3, 2, 2, 2, 126, 124, 3, 2, 2, 2, 126, 127, 3, 2, 2, 2, 127, 130, 3, 2, 2, 2, 128, 126, 3, 2, 2, 2, 129, 131, 5, 12, 7, 2, 130, 129, 3, 2, 2, 2, 130, 131, 3, 2, 2, 2, 131, 132, 3, 2, 2, 2, 132, 134, 7, 32, 2, 2, 133, 135, 5, 28, 15, 2, 134, 133, 3, 2, 2, 2, 134, 135, 3, 2, 2, 2, 135, 139, 3, 2, 2, 2, 136, 140, 5, 16, 9, 2, 137, 138, 7, 33, 2, 2, 138, 140, 7, 3, 2, 2, 139, 136, 3, 2, 2, 2, 139, 137, 3, 2, 2, 2, 140, 142, 3, 2, 2, 2, 141, 84, 3, 2, 2, 2, 141, 100, 3, 2, 2, 2, 141, 104, 3, 2, 2, 2, 141, 108, 3, 2, 2, 2, 141, 118, 3, 2, 2, 2, 142, 11, 3, 2, 2, 2, 143, 144, 5, 28, 15, 2, 144, 147, 7, 68, 2, 2, 145, 146, 7, 34, 2, 2, 146, 148, 5, 18, 10, 2, 147, 145, 3, 2, 2, 2, 147, 148, 3, 2, 2, 2, 148, 13, 3, 2, 2, 2, 149, 150, 7, 35, 2, 2, 150, 152, 7, 36, 2, 2, 151, 153, 5, 4, 3, 2, 152, 151, 3, 2, 2, 2, 153, 154, 3, 2, 2, 2, 154, 152, 3, 2, 2, 2, 154, 155, 3, 2, 2, 2, 155, 156, 3, 2, 2, 2, 156, 157, 7, 37, 2, 2, 157, 15, 3, 2, 2, 2, 158, 159, 7, 38, 2, 2, 159, 161, 7, 36, 2, 2, 160, 162, 5, 4, 3, 2, 161, 160, 3, 2, 2, 2, 162, 163, 3, 2, 2, 2, 163, 161, 3, 2, 2, 2, 163, 164, 3, 2, 2, 2, 164, 165, 3, 2, 2, 2, 165, 166, 7, 37, 2, 2, 166, 17, 3, 2, 2, 2, 167, 168, 8, 10, 1, 2, 168, 178, 5, 26, 14, 2, 169, 170, 7, 31, 2, 2, 170, 171, 5, 20, 11, 2, 171, 172, 7, 32, 2, 2, 172, 178, 3, 2, 2, 2, 173, 174, 9, 4, 2, 2, 174, 178, 5, 18, 10, 16, 175, 176, 7, 51, 2, 2, 176, 178, 5, 18, 10, 6, 177, 167, 3, 2, 2, 2, 177, 169, 3, 2, 2, 2, 177, 173, 3, 2, 2, 2, 177, 175, 3, 2, 2, 2, 178, 244, 3, 2, 2, 2, 179, 180, 12, 17, 2, 2, 180, 181, 7, 7, 2, 2, 181, 243, 5, 18, 10, 17, 182, 183, 12, 15, 2, 2, 183, 184, 9, 5, 2, 2, 184, 243, 5, 18, 10, 16, 185, 186, 12, 14, 2, 2, 186, 187, 9, 6, 2, 2, 187, 243, 5, 18, 10, 15, 188, 189, 12, 13, 2, 2, 189, 190, 9, 7, 2, 2, 190, 243, 5, 18, 10, 14, 191, 192, 12, 12, 2, 2, 192, 193, 7, 15, 2, 2, 193, 243, 5, 18, 10, 13, 194, 195, 12, 11, 2, 2, 195, 196, 7, 16, 2, 2, 196, 243, 5, 18, 10, 12, 197, 198, 12, 10, 2, 2, 198, 199, 7, 17, 2, 2, 199, 243, 5, 18, 10, 11, 200, 201, 12, 9, 2, 2, 201, 202, 9, 8, 2, 2, 202, 243, 5, 18, 10, 10, 203, 204, 12, 7, 2, 2, 204, 205, 9, 9, 2, 2, 205, 243, 5, 18, 10, 7, 206, 207, 12, 5, 2, 2, 207, 208, 7, 52, 2, 2, 208, 243, 5, 18, 10, 5, 209, 210, 12, 4, 2, 2, 210, 211, 7, 53, 2, 2, 211, 243, 5, 18, 10, 4, 212, 213, 12, 3, 2, 2, 213, 214, 7, 54, 2, 2, 214, 215, 5, 18, 10, 2, 215, 216, 7, 34, 2, 2, 216, 217, 5, 18, 10, 3, 217, 243, 3, 2, 2, 2, 218, 219, 12, 20, 2, 2, 219, 220, 7, 39, 2, 2, 220, 221, 5, 18, 10, 2, 221, 222, 7, 40, 2, 2, 222, 243, 3, 2, 2, 2, 223, 224, 12, 19, 2, 2, 224, 225, 7, 41, 2, 2, 225, 243, 7, 68, 2, 2, 226, 227, 12, 18, 2, 2, 227, 233, 7, 31, 2, 2, 228, 229, 5, 24, 13, 2, 229, 230, 7, 21, 2, 2, 230, 232, 3, 2, 2, 2, 231, 228, 3, 2, 2, 2, 232, 235, 3, 2, 2, 2, 233, 231, 3, 2, 2, 2, 233, 234, 3, 2, 2, 2, 234, 237, 3, 2, 2, 2, 235, 233, 3, 2, 2, 2, 236, 238, 5, 24, 13, 2, 237, 236, 3, 2, 2, 2, 237, 238, 3, 2, 2, 2, 238, 239, 3, 2, 2, 2, 239, 243, 7, 32, 2, 2, 240, 241, 12, 8, 2, 2, 241, 243, 7, 44, 2, 2, 242, 179, 3, 2, 2, 2, 242, 182, 3, 2, 2, 2, 242, 185, 3, 2, 2, 2, 242, 188, 3, 2, 2, 2, 242, 191, 3, 2, 2, 2, 242, 194, 3, 2, 2, 2, 242, 197, 3, 2, 2, 2, 242, 200, 3, 2, 2, 2, 242, 203, 3, 2, 2, 2, 242, 206, 3, 2, 2, 2, 242, 209, 3, 2, 2, 2, 242, 212, 3, 2, 2, 2, 242, 218, 3, 2, 2, 2, 242, 223, 3, 2, 2, 2, 242, 226, 3, 2, 2, 2, 242, 240, 3, 2, 2, 2, 243, 246, 3, 2, 2, 2, 244, 242, 3, 2, 2, 2, 244, 245, 3, 2, 2, 2, 245, 19, 3, 2, 2, 2, 246, 244, 3, 2, 2, 2, 247, 248, 5, 18, 10, 2, 248, 249, 7, 21, 2, 2, 249, 251, 3, 2, 2, 2, 250, 247, 3, 2, 2, 2, 251, 254, 3, 2, 2, 2, 252, 250, 3, 2, 2, 2, 252, 253, 3, 2, 2, 2, 253, 255, 3, 2, 2, 2, 254, 252, 3, 2, 2, 2, 255, 256, 5, 18, 10, 2, 256, 21, 3, 2, 2, 2, 257, 258, 5, 20, 11, 2, 258, 259, 7, 2, 2, 3, 259, 23, 3, 2, 2, 2, 260, 261, 7, 68, 2, 2, 261, 263, 7, 6, 2, 2, 262, 260, 3, 2, 2, 2, 262, 263, 3, 2, 2, 2, 263, 264, 3, 2, 2, 2, 264, 265, 5, 18, 10, 2, 265, 25, 3, 2, 2, 2, 266, 286, 7, 64, 2, 2, 267, 286, 7, 65, 2, 2, 268, 286, 9, 10, 2, 2, 269, 286, 7, 66, 2, 2, 270, 286, 7, 67, 2, 2, 271, 277, 7, 39, 2, 2, 272, 273, 5, 18, 10, 2, 273, 274, 7, 21, 2, 2, 274, 276, 3, 2, 2, 2, 275, 272, 3, 2, 2, 2, 276, 279, 3, 2, 2, 2, 277, 275, 3, 2, 2, 2, 277, 278, 3, 2, 2, 2, 278, 281, 3, 2, 2, 2, 279, 277, 3, 2, 2, 2, 280, 282, 5, 18, 10, 2, 281, 280, 3, 2, 2, 2, 281, 282, 3, 2, 2, 2, 282, 283, 3, 2, 2, 2, 283, 286, 7, 40, 2, 2, 284, 286, 7, 68, 2, 2, 285, 266, 3, 2, 2, 2, 285, 267, 3, 2, 2, 2, 285, 268, 3, 2, 2, 2, 285, 269, 3, 2, 2, 2, 285, 270, 3, 2, 2, 2, 285, 271, 3, 2, 2, 2, 285, 284, 3, 2, 2, 2, 286, 27, 3, 2, 2, 2, 287, 288, 8, 15, 1, 2, 288, 300, 9, 11, 2, 2, 289, 290, 7, 31, 2, 2, 290, 291, 5, 28, 15, 2, 291, 292, 7, 32, 2, 2, 292, 300, 3, 2, 2, 2, 293, 294, 7, 39, 2, 2, 294, 295, 5, 28, 15, 2, 295, 296, 7, 40, 2, 2, 296, 300, 3, 2, 2, 2, 297, 298, 7, 63, 2, 2, 298, 300, 5, 28, 15, 3, 299, 287, 3, 2, 2, 2, 299, 289, 3, 2, 2, 2, 299, 293, 3, 2, 2, 2, 299, 297, 3, 2, 2, 2, 300, 309, 3, 2, 2, 2, 301, 302, 12, 5, 2, 2, 302, 303, 7, 8, 2, 2, 303, 308, 5, 28, 15, 5, 304, 305, 12, 4, 2, 2, 305, 306, 7, 63, 2, 2, 306, 308, 5, 28, 15, 4, 307, 301, 3, 2, 2, 2, 307, 304, 3, 2, 2, 2, 308, 311, 3, 2, 2, 2, 309, 307, 3, 2, 2, 2, 309, 310, 3, 2, 2, 2, 310, 29, 3, 2, 2, 2, 311, 309, 3, 2, 2, 2, 34, 33, 42, 47, 53, 60, 72, 74, 81, 93, 98, 114, 126, 130, 134, 139, 141, 147, 154, 163, 177, 233, 237, 242, 244, 252, 262, 277, 281, 285, 299, 307, 309] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 75, 334, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 3, 2, 7, 2, 34, 10, 2, 12, 2, 14, 2, 37, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 45, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 55, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 60, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 66, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 71, 10, 4, 12, 4, 14, 4, 74, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 85, 10, 4, 5, 4, 87, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 92, 10, 5, 12, 5, 14, 5, 95, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 104, 10, 6, 12, 6, 14, 6, 107, 11, 6, 3, 6, 3, 6, 5, 6, 111, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 127, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 137, 10, 6, 12, 6, 14, 6, 140, 11, 6, 3, 6, 5, 6, 143, 10, 6, 3, 6, 3, 6, 5, 6, 147, 10, 6, 3, 6, 3, 6, 3, 6, 5, 6, 152, 10, 6, 5, 6, 154, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 160, 10, 7, 3, 8, 3, 8, 3, 8, 6, 8, 165, 10, 8, 13, 8, 14, 8, 166, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 6, 9, 174, 10, 9, 13, 9, 14, 9, 175, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 190, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 244, 10, 10, 12, 10, 14, 10, 247, 11, 10, 3, 10, 5, 10, 250, 10, 10, 3, 10, 3, 10, 3, 10, 7, 10, 255, 10, 10, 12, 10, 14, 10, 258, 11, 10, 3, 11, 3, 11, 3, 11, 7, 11, 263, 10, 11, 12, 11, 14, 11, 266, 11, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 5, 13, 275, 10, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 7, 14, 288, 10, 14, 12, 14, 14, 14, 291, 11, 14, 3, 14, 5, 14, 294, 10, 14, 3, 14, 3, 14, 5, 14, 298, 10, 14, 3, 15, 3, 15, 7, 15, 302, 10, 15, 12, 15, 14, 15, 305, 11, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 321, 10, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 7, 16, 329, 10, 16, 12, 16, 14, 16, 332, 11, 16, 3, 16, 2, 4, 18, 30, 17, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 2, 12, 3, 2, 11, 21, 3, 2, 22, 23, 4, 2, 15, 16, 46, 46, 3, 2, 12, 14, 3, 2, 15, 16, 3, 2, 17, 18, 3, 2, 47, 48, 3, 2, 49, 54, 3, 2, 59, 60, 3, 2, 61, 66, 2, 386, 2, 35, 3, 2, 2, 2, 4, 44, 3, 2, 2, 2, 6, 86, 3, 2, 2, 2, 8, 88, 3, 2, 2, 2, 10, 153, 3, 2, 2, 2, 12, 155, 3, 2, 2, 2, 14, 161, 3, 2, 2, 2, 16, 170, 3, 2, 2, 2, 18, 189, 3, 2, 2, 2, 20, 264, 3, 2, 2, 2, 22, 269, 3, 2, 2, 2, 24, 274, 3, 2, 2, 2, 26, 297, 3, 2, 2, 2, 28, 303, 3, 2, 2, 2, 30, 320, 3, 2, 2, 2, 32, 34, 5, 4, 3, 2, 33, 32, 3, 2, 2, 2, 34, 37, 3, 2, 2, 2, 35, 33, 3, 2, 2, 2, 35, 36, 3, 2, 2, 2, 36, 38, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 38, 39, 7, 2, 2, 3, 39, 3, 3, 2, 2, 2, 40, 41, 5, 6, 4, 2, 41, 42, 7, 3, 2, 2, 42, 45, 3, 2, 2, 2, 43, 45, 5, 10, 6, 2, 44, 40, 3, 2, 2, 2, 44, 43, 3, 2, 2, 2, 45, 5, 3, 2, 2, 2, 46, 47, 7, 4, 2, 2, 47, 54, 7, 72, 2, 2, 48, 49, 7, 5, 2, 2, 49, 55, 5, 28, 15, 2, 50, 51, 7, 6, 2, 2, 51, 55, 5, 28, 15, 2, 52, 53, 7, 7, 2, 2, 53, 55, 7, 72, 2, 2, 54, 48, 3, 2, 2, 2, 54, 50, 3, 2, 2, 2, 54, 52, 3, 2, 2, 2, 54, 55, 3, 2, 2, 2, 55, 87, 3, 2, 2, 2, 56, 87, 7, 8, 2, 2, 57, 59, 7, 9, 2, 2, 58, 60, 5, 20, 11, 2, 59, 58, 3, 2, 2, 2, 59, 60, 3, 2, 2, 2, 60, 87, 3, 2, 2, 2, 61, 62, 5, 30, 16, 2, 62, 65, 7, 72, 2, 2, 63, 64, 7, 10, 2, 2, 64, 66, 5, 20, 11, 2, 65, 63, 3, 2, 2, 2, 65, 66, 3, 2, 2, 2, 66, 87, 3, 2, 2, 2, 67, 68, 5, 8, 5, 2, 68, 69, 7, 10, 2, 2, 69, 71, 3, 2, 2, 2, 70, 67, 3, 2, 2, 2, 71, 74, 3, 2, 2, 2, 72, 70, 3, 2, 2, 2, 72, 73, 3, 2, 2, 2, 73, 75, 3, 2, 2, 2, 74, 72, 3, 2, 2, 2, 75, 87, 5, 20, 11, 2, 76, 77, 5, 18, 10, 2, 77, 78, 9, 2, 2, 2, 78, 79, 7, 10, 2, 2, 79, 80, 5, 18, 10, 2, 80, 87, 3, 2, 2, 2, 81, 87, 9, 3, 2, 2, 82, 84, 7, 24, 2, 2, 83, 85, 5, 20, 11, 2, 84, 83, 3, 2, 2, 2, 84, 85, 3, 2, 2, 2, 85, 87, 3, 2, 2, 2, 86, 46, 3, 2, 2, 2, 86, 56, 3, 2, 2, 2, 86, 57, 3, 2, 2, 2, 86, 61, 3, 2, 2, 2, 86, 72, 3, 2, 2, 2, 86, 76, 3, 2, 2, 2, 86, 81, 3, 2, 2, 2, 86, 82, 3, 2, 2, 2, 87, 7, 3, 2, 2, 2, 88, 93, 5, 18, 10, 2, 89, 90, 7, 25, 2, 2, 90, 92, 5, 18, 10, 2, 91, 89, 3, 2, 2, 2, 92, 95, 3, 2, 2, 2, 93, 91, 3, 2, 2, 2, 93, 94, 3, 2, 2, 2, 94, 9, 3, 2, 2, 2, 95, 93, 3, 2, 2, 2, 96, 97, 7, 26, 2, 2, 97, 98, 5, 18, 10, 2, 98, 105, 5, 14, 8, 2, 99, 100, 7, 27, 2, 2, 100, 101, 5, 18, 10, 2, 101, 102, 5, 14, 8, 2, 102, 104, 3, 2, 2, 2, 103, 99, 3, 2, 2, 2, 104, 107, 3, 2, 2, 2, 105, 103, 3, 2, 2, 2, 105, 106, 3, 2, 2, 2, 106, 110, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 108, 109, 7, 28, 2, 2, 109, 111, 5, 14, 8, 2, 110, 108, 3, 2, 2, 2, 110, 111, 3, 2, 2, 2, 111, 154, 3, 2, 2, 2, 112, 113, 7, 29, 2, 2, 113, 114, 5, 18, 10, 2, 114, 115, 5, 14, 8, 2, 115, 154, 3, 2, 2, 2, 116, 117, 7, 30, 2, 2, 117, 118, 5, 18, 10, 2, 118, 119, 5, 14, 8, 2, 119, 154, 3, 2, 2, 2, 120, 121, 7, 31, 2, 2, 121, 122, 5, 20, 11, 2, 122, 123, 7, 32, 2, 2, 123, 126, 5, 20, 11, 2, 124, 125, 7, 33, 2, 2, 125, 127, 5, 20, 11, 2, 126, 124, 3, 2, 2, 2, 126, 127, 3, 2, 2, 2, 127, 128, 3, 2, 2, 2, 128, 129, 5, 14, 8, 2, 129, 154, 3, 2, 2, 2, 130, 131, 7, 34, 2, 2, 131, 132, 7, 72, 2, 2, 132, 138, 7, 35, 2, 2, 133, 134, 5, 12, 7, 2, 134, 135, 7, 25, 2, 2, 135, 137, 3, 2, 2, 2, 136, 133, 3, 2, 2, 2, 137, 140, 3, 2, 2, 2, 138, 136, 3, 2, 2, 2, 138, 139, 3, 2, 2, 2, 139, 142, 3, 2, 2, 2, 140, 138, 3, 2, 2, 2, 141, 143, 5, 12, 7, 2, 142, 141, 3, 2, 2, 2, 142, 143, 3, 2, 2, 2, 143, 144, 3, 2, 2, 2, 144, 146, 7, 36, 2, 2, 145, 147, 5, 30, 16, 2, 146, 145, 3, 2, 2, 2, 146, 147, 3, 2, 2, 2, 147, 151, 3, 2, 2, 2, 148, 152, 5, 16, 9, 2, 149, 150, 7, 37, 2, 2, 150, 152, 7, 3, 2, 2, 151, 148, 3, 2, 2, 2, 151, 149, 3, 2, 2, 2, 152, 154, 3, 2, 2, 2, 153, 96, 3, 2, 2, 2, 153, 112, 3, 2, 2, 2, 153, 116, 3, 2, 2, 2, 153, 120, 3, 2, 2, 2, 153, 130, 3, 2, 2, 2, 154, 11, 3, 2, 2, 2, 155, 156, 5, 30, 16, 2, 156, 159, 7, 72, 2, 2, 157, 158, 7, 38, 2, 2, 158, 160, 5, 18, 10, 2, 159, 157, 3, 2, 2, 2, 159, 160, 3, 2, 2, 2, 160, 13, 3, 2, 2, 2, 161, 162, 7, 39, 2, 2, 162, 164, 7, 40, 2, 2, 163, 165, 5, 4, 3, 2, 164, 163, 3, 2, 2, 2, 165, 166, 3, 2, 2, 2, 166, 164, 3, 2, 2, 2, 166, 167, 3, 2, 2, 2, 167, 168, 3, 2, 2, 2, 168, 169, 7, 41, 2, 2, 169, 15, 3, 2, 2, 2, 170, 171, 7, 42, 2, 2, 171, 173, 7, 40, 2, 2, 172, 174, 5, 4, 3, 2, 173, 172, 3, 2, 2, 2, 174, 175, 3, 2, 2, 2, 175, 173, 3, 2, 2, 2, 175, 176, 3, 2, 2, 2, 176, 177, 3, 2, 2, 2, 177, 178, 7, 41, 2, 2, 178, 17, 3, 2, 2, 2, 179, 180, 8, 10, 1, 2, 180, 190, 5, 26, 14, 2, 181, 182, 7, 35, 2, 2, 182, 183, 5, 20, 11, 2, 183, 184, 7, 36, 2, 2, 184, 190, 3, 2, 2, 2, 185, 186, 9, 4, 2, 2, 186, 190, 5, 18, 10, 16, 187, 188, 7, 55, 2, 2, 188, 190, 5, 18, 10, 6, 189, 179, 3, 2, 2, 2, 189, 181, 3, 2, 2, 2, 189, 185, 3, 2, 2, 2, 189, 187, 3, 2, 2, 2, 190, 256, 3, 2, 2, 2, 191, 192, 12, 17, 2, 2, 192, 193, 7, 11, 2, 2, 193, 255, 5, 18, 10, 17, 194, 195, 12, 15, 2, 2, 195, 196, 9, 5, 2, 2, 196, 255, 5, 18, 10, 16, 197, 198, 12, 14, 2, 2, 198, 199, 9, 6, 2, 2, 199, 255, 5, 18, 10, 15, 200, 201, 12, 13, 2, 2, 201, 202, 9, 7, 2, 2, 202, 255, 5, 18, 10, 14, 203, 204, 12, 12, 2, 2, 204, 205, 7, 19, 2, 2, 205, 255, 5, 18, 10, 13, 206, 207, 12, 11, 2, 2, 207, 208, 7, 20, 2, 2, 208, 255, 5, 18, 10, 12, 209, 210, 12, 10, 2, 2, 210, 211, 7, 21, 2, 2, 211, 255, 5, 18, 10, 11, 212, 213, 12, 9, 2, 2, 213, 214, 9, 8, 2, 2, 214, 255, 5, 18, 10, 10, 215, 216, 12, 7, 2, 2, 216, 217, 9, 9, 2, 2, 217, 255, 5, 18, 10, 7, 218, 219, 12, 5, 2, 2, 219, 220, 7, 56, 2, 2, 220, 255, 5, 18, 10, 5, 221, 222, 12, 4, 2, 2, 222, 223, 7, 57, 2, 2, 223, 255, 5, 18, 10, 4, 224, 225, 12, 3, 2, 2, 225, 226, 7, 58, 2, 2, 226, 227, 5, 18, 10, 2, 227, 228, 7, 38, 2, 2, 228, 229, 5, 18, 10, 3, 229, 255, 3, 2, 2, 2, 230, 231, 12, 20, 2, 2, 231, 232, 7, 43, 2, 2, 232, 233, 5, 18, 10, 2, 233, 234, 7, 44, 2, 2, 234, 255, 3, 2, 2, 2, 235, 236, 12, 19, 2, 2, 236, 237, 7, 45, 2, 2, 237, 255, 7, 72, 2, 2, 238, 239, 12, 18, 2, 2, 239, 245, 7, 35, 2, 2, 240, 241, 5, 24, 13, 2, 241, 242, 7, 25, 2, 2, 242, 244, 3, 2, 2, 2, 243, 240, 3, 2, 2, 2, 244, 247, 3, 2, 2, 2, 245, 243, 3, 2, 2, 2, 245, 246, 3, 2, 2, 2, 246, 249, 3, 2, 2, 2, 247, 245, 3, 2, 2, 2, 248, 250, 5, 24, 13, 2, 249, 248, 3, 2, 2, 2, 249, 250, 3, 2, 2, 2, 250, 251, 3, 2, 2, 2, 251, 255, 7, 36, 2, 2, 252, 253, 12, 8, 2, 2, 253, 255, 7, 48, 2, 2, 254, 191, 3, 2, 2, 2, 254, 194, 3, 2, 2, 2, 254, 197, 3, 2, 2, 2, 254, 200, 3, 2, 2, 2, 254, 203, 3, 2, 2, 2, 254, 206, 3, 2, 2, 2, 254, 209, 3, 2, 2, 2, 254, 212, 3, 2, 2, 2, 254, 215, 3, 2, 2, 2, 254, 218, 3, 2, 2, 2, 254, 221, 3, 2, 2, 2, 254, 224, 3, 2, 2, 2, 254, 230, 3, 2, 2, 2, 254, 235, 3, 2, 2, 2, 254, 238, 3, 2, 2, 2, 254, 252, 3, 2, 2, 2, 255, 258, 3, 2, 2, 2, 256, 254, 3, 2, 2, 2, 256, 257, 3, 2, 2, 2, 257, 19, 3, 2, 2, 2, 258, 256, 3, 2, 2, 2, 259, 260, 5, 18, 10, 2, 260, 261, 7, 25, 2, 2, 261, 263, 3, 2, 2, 2, 262, 259, 3, 2, 2, 2, 263, 266, 3, 2, 2, 2, 264, 262, 3, 2, 2, 2, 264, 265, 3, 2, 2, 2, 265, 267, 3, 2, 2, 2, 266, 264, 3, 2, 2, 2, 267, 268, 5, 18, 10, 2, 268, 21, 3, 2, 2, 2, 269, 270, 5, 20, 11, 2, 270, 271, 7, 2, 2, 3, 271, 23, 3, 2, 2, 2, 272, 273, 7, 72, 2, 2, 273, 275, 7, 10, 2, 2, 274, 272, 3, 2, 2, 2, 274, 275, 3, 2, 2, 2, 275, 276, 3, 2, 2, 2, 276, 277, 5, 18, 10, 2, 277, 25, 3, 2, 2, 2, 278, 298, 7, 68, 2, 2, 279, 298, 7, 69, 2, 2, 280, 298, 9, 10, 2, 2, 281, 298, 7, 70, 2, 2, 282, 298, 7, 71, 2, 2, 283, 289, 7, 43, 2, 2, 284, 285, 5, 18, 10, 2, 285, 286, 7, 25, 2, 2, 286, 288, 3, 2, 2, 2, 287, 284, 3, 2, 2, 2, 288, 291, 3, 2, 2, 2, 289, 287, 3, 2, 2, 2, 289, 290, 3, 2, 2, 2, 290, 293, 3, 2, 2, 2, 291, 289, 3, 2, 2, 2, 292, 294, 5, 18, 10, 2, 293, 292, 3, 2, 2, 2, 293, 294, 3, 2, 2, 2, 294, 295, 3, 2, 2, 2, 295, 298, 7, 44, 2, 2, 296, 298, 7, 72, 2, 2, 297, 278, 3, 2, 2, 2, 297, 279, 3, 2, 2, 2, 297, 280, 3, 2, 2, 2, 297, 281, 3, 2, 2, 2, 297, 282, 3, 2, 2, 2, 297, 283, 3, 2, 2, 2, 297, 296, 3, 2, 2, 2, 298, 27, 3, 2, 2, 2, 299, 300, 7, 72, 2, 2, 300, 302, 7, 25, 2, 2, 301, 299, 3, 2, 2, 2, 302, 305, 3, 2, 2, 2, 303, 301, 3, 2, 2, 2, 303, 304, 3, 2, 2, 2, 304, 306, 3, 2, 2, 2, 305, 303, 3, 2, 2, 2, 306, 307, 7, 72, 2, 2, 307, 29, 3, 2, 2, 2, 308, 309, 8, 16, 1, 2, 309, 321, 9, 11, 2, 2, 310, 311, 7, 35, 2, 2, 311, 312, 5, 30, 16, 2, 312, 313, 7, 36, 2, 2, 313, 321, 3, 2, 2, 2, 314, 315, 7, 43, 2, 2, 315, 316, 5, 30, 16, 2, 316, 317, 7, 44, 2, 2, 317, 321, 3, 2, 2, 2, 318, 319, 7, 67, 2, 2, 319, 321, 5, 30, 16, 3, 320, 308, 3, 2, 2, 2, 320, 310, 3, 2, 2, 2, 320, 314, 3, 2, 2, 2, 320, 318, 3, 2, 2, 2, 321, 330, 3, 2, 2, 2, 322, 323, 12, 5, 2, 2, 323, 324, 7, 12, 2, 2, 324, 329, 5, 30, 16, 5, 325, 326, 12, 4, 2, 2, 326, 327, 7, 67, 2, 2, 327, 329, 5, 30, 16, 4, 328, 322, 3, 2, 2, 2, 328, 325, 3, 2, 2, 2, 329, 332, 3, 2, 2, 2, 330, 328, 3, 2, 2, 2, 330, 331, 3, 2, 2, 2, 331, 31, 3, 2, 2, 2, 332, 330, 3, 2, 2, 2, 36, 35, 44, 54, 59, 65, 72, 84, 86, 93, 105, 110, 126, 138, 142, 146, 151, 153, 159, 166, 175, 189, 245, 249, 254, 256, 264, 274, 289, 293, 297, 303, 320, 328, 330] \ No newline at end of file diff --git a/src/antlr/Pyxell.tokens b/src/antlr/Pyxell.tokens index 0a7a727a..851d08ac 100644 --- a/src/antlr/Pyxell.tokens +++ b/src/antlr/Pyxell.tokens @@ -59,72 +59,80 @@ T__57=58 T__58=59 T__59=60 T__60=61 -INT=62 -FLOAT=63 -CHAR=64 -STRING=65 -ID=66 -COMMENT=67 -WS=68 -ERR=69 +T__61=62 +T__62=63 +T__63=64 +T__64=65 +INT=66 +FLOAT=67 +CHAR=68 +STRING=69 +ID=70 +COMMENT=71 +WS=72 +ERR=73 ';'=1 -'skip'=2 -'print'=3 -'='=4 -'^'=5 -'*'=6 -'/'=7 -'%'=8 -'+'=9 -'-'=10 -'<<'=11 -'>>'=12 -'&'=13 -'$'=14 -'|'=15 -'break'=16 -'continue'=17 -'return'=18 -','=19 -'if'=20 -'elif'=21 -'else'=22 -'while'=23 -'until'=24 -'for'=25 -'in'=26 -'step'=27 -'func'=28 -'('=29 -')'=30 -'extern'=31 -':'=32 -'do'=33 -'{'=34 -'}'=35 -'def'=36 -'['=37 -']'=38 -'.'=39 -'~'=40 -'..'=41 -'...'=42 -'=='=43 -'!='=44 -'<'=45 -'<='=46 -'>'=47 -'>='=48 -'not'=49 -'and'=50 -'or'=51 -'?'=52 -'true'=53 -'false'=54 -'Void'=55 -'Int'=56 -'Float'=57 -'Bool'=58 -'Char'=59 -'String'=60 -'->'=61 +'use'=2 +'only'=3 +'hiding'=4 +'as'=5 +'skip'=6 +'print'=7 +'='=8 +'^'=9 +'*'=10 +'/'=11 +'%'=12 +'+'=13 +'-'=14 +'<<'=15 +'>>'=16 +'&'=17 +'$'=18 +'|'=19 +'break'=20 +'continue'=21 +'return'=22 +','=23 +'if'=24 +'elif'=25 +'else'=26 +'while'=27 +'until'=28 +'for'=29 +'in'=30 +'step'=31 +'func'=32 +'('=33 +')'=34 +'extern'=35 +':'=36 +'do'=37 +'{'=38 +'}'=39 +'def'=40 +'['=41 +']'=42 +'.'=43 +'~'=44 +'..'=45 +'...'=46 +'=='=47 +'!='=48 +'<'=49 +'<='=50 +'>'=51 +'>='=52 +'not'=53 +'and'=54 +'or'=55 +'?'=56 +'true'=57 +'false'=58 +'Void'=59 +'Int'=60 +'Float'=61 +'Bool'=62 +'Char'=63 +'String'=64 +'->'=65 diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp index cc106cad..63e39e75 100644 --- a/src/antlr/PyxellLexer.interp +++ b/src/antlr/PyxellLexer.interp @@ -1,6 +1,10 @@ token literal names: null ';' +'use' +'only' +'hiding' +'as' 'skip' 'print' '=' @@ -133,6 +137,10 @@ null null null null +null +null +null +null INT FLOAT CHAR @@ -204,6 +212,10 @@ T__57 T__58 T__59 T__60 +T__61 +T__62 +T__63 +T__64 INT FLOAT CHAR @@ -224,4 +236,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 71, 451, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 63, 6, 63, 368, 10, 63, 13, 63, 14, 63, 369, 3, 64, 6, 64, 373, 10, 64, 13, 64, 14, 64, 374, 3, 64, 3, 64, 6, 64, 379, 10, 64, 13, 64, 14, 64, 380, 3, 64, 3, 64, 5, 64, 385, 10, 64, 3, 64, 6, 64, 388, 10, 64, 13, 64, 14, 64, 389, 5, 64, 392, 10, 64, 3, 65, 3, 65, 3, 65, 3, 65, 7, 65, 398, 10, 65, 12, 65, 14, 65, 401, 11, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 7, 66, 409, 10, 66, 12, 66, 14, 66, 412, 11, 66, 3, 66, 3, 66, 3, 67, 3, 67, 7, 67, 418, 10, 67, 12, 67, 14, 67, 421, 11, 67, 3, 68, 3, 68, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 5, 70, 430, 10, 70, 3, 71, 3, 71, 3, 71, 3, 71, 7, 71, 436, 10, 71, 12, 71, 14, 71, 439, 11, 71, 3, 71, 3, 71, 3, 72, 6, 72, 444, 10, 72, 13, 72, 14, 72, 445, 3, 72, 3, 72, 3, 73, 3, 73, 2, 2, 74, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 2, 137, 2, 139, 2, 141, 69, 143, 70, 145, 71, 3, 2, 11, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 4, 2, 12, 12, 14, 15, 5, 2, 11, 12, 15, 15, 34, 34, 2, 462, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 3, 147, 3, 2, 2, 2, 5, 149, 3, 2, 2, 2, 7, 154, 3, 2, 2, 2, 9, 160, 3, 2, 2, 2, 11, 162, 3, 2, 2, 2, 13, 164, 3, 2, 2, 2, 15, 166, 3, 2, 2, 2, 17, 168, 3, 2, 2, 2, 19, 170, 3, 2, 2, 2, 21, 172, 3, 2, 2, 2, 23, 174, 3, 2, 2, 2, 25, 177, 3, 2, 2, 2, 27, 180, 3, 2, 2, 2, 29, 182, 3, 2, 2, 2, 31, 184, 3, 2, 2, 2, 33, 186, 3, 2, 2, 2, 35, 192, 3, 2, 2, 2, 37, 201, 3, 2, 2, 2, 39, 208, 3, 2, 2, 2, 41, 210, 3, 2, 2, 2, 43, 213, 3, 2, 2, 2, 45, 218, 3, 2, 2, 2, 47, 223, 3, 2, 2, 2, 49, 229, 3, 2, 2, 2, 51, 235, 3, 2, 2, 2, 53, 239, 3, 2, 2, 2, 55, 242, 3, 2, 2, 2, 57, 247, 3, 2, 2, 2, 59, 252, 3, 2, 2, 2, 61, 254, 3, 2, 2, 2, 63, 256, 3, 2, 2, 2, 65, 263, 3, 2, 2, 2, 67, 265, 3, 2, 2, 2, 69, 268, 3, 2, 2, 2, 71, 270, 3, 2, 2, 2, 73, 272, 3, 2, 2, 2, 75, 276, 3, 2, 2, 2, 77, 278, 3, 2, 2, 2, 79, 280, 3, 2, 2, 2, 81, 282, 3, 2, 2, 2, 83, 284, 3, 2, 2, 2, 85, 287, 3, 2, 2, 2, 87, 291, 3, 2, 2, 2, 89, 294, 3, 2, 2, 2, 91, 297, 3, 2, 2, 2, 93, 299, 3, 2, 2, 2, 95, 302, 3, 2, 2, 2, 97, 304, 3, 2, 2, 2, 99, 307, 3, 2, 2, 2, 101, 311, 3, 2, 2, 2, 103, 315, 3, 2, 2, 2, 105, 318, 3, 2, 2, 2, 107, 320, 3, 2, 2, 2, 109, 325, 3, 2, 2, 2, 111, 331, 3, 2, 2, 2, 113, 336, 3, 2, 2, 2, 115, 340, 3, 2, 2, 2, 117, 346, 3, 2, 2, 2, 119, 351, 3, 2, 2, 2, 121, 356, 3, 2, 2, 2, 123, 363, 3, 2, 2, 2, 125, 367, 3, 2, 2, 2, 127, 372, 3, 2, 2, 2, 129, 393, 3, 2, 2, 2, 131, 404, 3, 2, 2, 2, 133, 415, 3, 2, 2, 2, 135, 422, 3, 2, 2, 2, 137, 424, 3, 2, 2, 2, 139, 429, 3, 2, 2, 2, 141, 431, 3, 2, 2, 2, 143, 443, 3, 2, 2, 2, 145, 449, 3, 2, 2, 2, 147, 148, 7, 61, 2, 2, 148, 4, 3, 2, 2, 2, 149, 150, 7, 117, 2, 2, 150, 151, 7, 109, 2, 2, 151, 152, 7, 107, 2, 2, 152, 153, 7, 114, 2, 2, 153, 6, 3, 2, 2, 2, 154, 155, 7, 114, 2, 2, 155, 156, 7, 116, 2, 2, 156, 157, 7, 107, 2, 2, 157, 158, 7, 112, 2, 2, 158, 159, 7, 118, 2, 2, 159, 8, 3, 2, 2, 2, 160, 161, 7, 63, 2, 2, 161, 10, 3, 2, 2, 2, 162, 163, 7, 96, 2, 2, 163, 12, 3, 2, 2, 2, 164, 165, 7, 44, 2, 2, 165, 14, 3, 2, 2, 2, 166, 167, 7, 49, 2, 2, 167, 16, 3, 2, 2, 2, 168, 169, 7, 39, 2, 2, 169, 18, 3, 2, 2, 2, 170, 171, 7, 45, 2, 2, 171, 20, 3, 2, 2, 2, 172, 173, 7, 47, 2, 2, 173, 22, 3, 2, 2, 2, 174, 175, 7, 62, 2, 2, 175, 176, 7, 62, 2, 2, 176, 24, 3, 2, 2, 2, 177, 178, 7, 64, 2, 2, 178, 179, 7, 64, 2, 2, 179, 26, 3, 2, 2, 2, 180, 181, 7, 40, 2, 2, 181, 28, 3, 2, 2, 2, 182, 183, 7, 38, 2, 2, 183, 30, 3, 2, 2, 2, 184, 185, 7, 126, 2, 2, 185, 32, 3, 2, 2, 2, 186, 187, 7, 100, 2, 2, 187, 188, 7, 116, 2, 2, 188, 189, 7, 103, 2, 2, 189, 190, 7, 99, 2, 2, 190, 191, 7, 109, 2, 2, 191, 34, 3, 2, 2, 2, 192, 193, 7, 101, 2, 2, 193, 194, 7, 113, 2, 2, 194, 195, 7, 112, 2, 2, 195, 196, 7, 118, 2, 2, 196, 197, 7, 107, 2, 2, 197, 198, 7, 112, 2, 2, 198, 199, 7, 119, 2, 2, 199, 200, 7, 103, 2, 2, 200, 36, 3, 2, 2, 2, 201, 202, 7, 116, 2, 2, 202, 203, 7, 103, 2, 2, 203, 204, 7, 118, 2, 2, 204, 205, 7, 119, 2, 2, 205, 206, 7, 116, 2, 2, 206, 207, 7, 112, 2, 2, 207, 38, 3, 2, 2, 2, 208, 209, 7, 46, 2, 2, 209, 40, 3, 2, 2, 2, 210, 211, 7, 107, 2, 2, 211, 212, 7, 104, 2, 2, 212, 42, 3, 2, 2, 2, 213, 214, 7, 103, 2, 2, 214, 215, 7, 110, 2, 2, 215, 216, 7, 107, 2, 2, 216, 217, 7, 104, 2, 2, 217, 44, 3, 2, 2, 2, 218, 219, 7, 103, 2, 2, 219, 220, 7, 110, 2, 2, 220, 221, 7, 117, 2, 2, 221, 222, 7, 103, 2, 2, 222, 46, 3, 2, 2, 2, 223, 224, 7, 121, 2, 2, 224, 225, 7, 106, 2, 2, 225, 226, 7, 107, 2, 2, 226, 227, 7, 110, 2, 2, 227, 228, 7, 103, 2, 2, 228, 48, 3, 2, 2, 2, 229, 230, 7, 119, 2, 2, 230, 231, 7, 112, 2, 2, 231, 232, 7, 118, 2, 2, 232, 233, 7, 107, 2, 2, 233, 234, 7, 110, 2, 2, 234, 50, 3, 2, 2, 2, 235, 236, 7, 104, 2, 2, 236, 237, 7, 113, 2, 2, 237, 238, 7, 116, 2, 2, 238, 52, 3, 2, 2, 2, 239, 240, 7, 107, 2, 2, 240, 241, 7, 112, 2, 2, 241, 54, 3, 2, 2, 2, 242, 243, 7, 117, 2, 2, 243, 244, 7, 118, 2, 2, 244, 245, 7, 103, 2, 2, 245, 246, 7, 114, 2, 2, 246, 56, 3, 2, 2, 2, 247, 248, 7, 104, 2, 2, 248, 249, 7, 119, 2, 2, 249, 250, 7, 112, 2, 2, 250, 251, 7, 101, 2, 2, 251, 58, 3, 2, 2, 2, 252, 253, 7, 42, 2, 2, 253, 60, 3, 2, 2, 2, 254, 255, 7, 43, 2, 2, 255, 62, 3, 2, 2, 2, 256, 257, 7, 103, 2, 2, 257, 258, 7, 122, 2, 2, 258, 259, 7, 118, 2, 2, 259, 260, 7, 103, 2, 2, 260, 261, 7, 116, 2, 2, 261, 262, 7, 112, 2, 2, 262, 64, 3, 2, 2, 2, 263, 264, 7, 60, 2, 2, 264, 66, 3, 2, 2, 2, 265, 266, 7, 102, 2, 2, 266, 267, 7, 113, 2, 2, 267, 68, 3, 2, 2, 2, 268, 269, 7, 125, 2, 2, 269, 70, 3, 2, 2, 2, 270, 271, 7, 127, 2, 2, 271, 72, 3, 2, 2, 2, 272, 273, 7, 102, 2, 2, 273, 274, 7, 103, 2, 2, 274, 275, 7, 104, 2, 2, 275, 74, 3, 2, 2, 2, 276, 277, 7, 93, 2, 2, 277, 76, 3, 2, 2, 2, 278, 279, 7, 95, 2, 2, 279, 78, 3, 2, 2, 2, 280, 281, 7, 48, 2, 2, 281, 80, 3, 2, 2, 2, 282, 283, 7, 128, 2, 2, 283, 82, 3, 2, 2, 2, 284, 285, 7, 48, 2, 2, 285, 286, 7, 48, 2, 2, 286, 84, 3, 2, 2, 2, 287, 288, 7, 48, 2, 2, 288, 289, 7, 48, 2, 2, 289, 290, 7, 48, 2, 2, 290, 86, 3, 2, 2, 2, 291, 292, 7, 63, 2, 2, 292, 293, 7, 63, 2, 2, 293, 88, 3, 2, 2, 2, 294, 295, 7, 35, 2, 2, 295, 296, 7, 63, 2, 2, 296, 90, 3, 2, 2, 2, 297, 298, 7, 62, 2, 2, 298, 92, 3, 2, 2, 2, 299, 300, 7, 62, 2, 2, 300, 301, 7, 63, 2, 2, 301, 94, 3, 2, 2, 2, 302, 303, 7, 64, 2, 2, 303, 96, 3, 2, 2, 2, 304, 305, 7, 64, 2, 2, 305, 306, 7, 63, 2, 2, 306, 98, 3, 2, 2, 2, 307, 308, 7, 112, 2, 2, 308, 309, 7, 113, 2, 2, 309, 310, 7, 118, 2, 2, 310, 100, 3, 2, 2, 2, 311, 312, 7, 99, 2, 2, 312, 313, 7, 112, 2, 2, 313, 314, 7, 102, 2, 2, 314, 102, 3, 2, 2, 2, 315, 316, 7, 113, 2, 2, 316, 317, 7, 116, 2, 2, 317, 104, 3, 2, 2, 2, 318, 319, 7, 65, 2, 2, 319, 106, 3, 2, 2, 2, 320, 321, 7, 118, 2, 2, 321, 322, 7, 116, 2, 2, 322, 323, 7, 119, 2, 2, 323, 324, 7, 103, 2, 2, 324, 108, 3, 2, 2, 2, 325, 326, 7, 104, 2, 2, 326, 327, 7, 99, 2, 2, 327, 328, 7, 110, 2, 2, 328, 329, 7, 117, 2, 2, 329, 330, 7, 103, 2, 2, 330, 110, 3, 2, 2, 2, 331, 332, 7, 88, 2, 2, 332, 333, 7, 113, 2, 2, 333, 334, 7, 107, 2, 2, 334, 335, 7, 102, 2, 2, 335, 112, 3, 2, 2, 2, 336, 337, 7, 75, 2, 2, 337, 338, 7, 112, 2, 2, 338, 339, 7, 118, 2, 2, 339, 114, 3, 2, 2, 2, 340, 341, 7, 72, 2, 2, 341, 342, 7, 110, 2, 2, 342, 343, 7, 113, 2, 2, 343, 344, 7, 99, 2, 2, 344, 345, 7, 118, 2, 2, 345, 116, 3, 2, 2, 2, 346, 347, 7, 68, 2, 2, 347, 348, 7, 113, 2, 2, 348, 349, 7, 113, 2, 2, 349, 350, 7, 110, 2, 2, 350, 118, 3, 2, 2, 2, 351, 352, 7, 69, 2, 2, 352, 353, 7, 106, 2, 2, 353, 354, 7, 99, 2, 2, 354, 355, 7, 116, 2, 2, 355, 120, 3, 2, 2, 2, 356, 357, 7, 85, 2, 2, 357, 358, 7, 118, 2, 2, 358, 359, 7, 116, 2, 2, 359, 360, 7, 107, 2, 2, 360, 361, 7, 112, 2, 2, 361, 362, 7, 105, 2, 2, 362, 122, 3, 2, 2, 2, 363, 364, 7, 47, 2, 2, 364, 365, 7, 64, 2, 2, 365, 124, 3, 2, 2, 2, 366, 368, 5, 135, 68, 2, 367, 366, 3, 2, 2, 2, 368, 369, 3, 2, 2, 2, 369, 367, 3, 2, 2, 2, 369, 370, 3, 2, 2, 2, 370, 126, 3, 2, 2, 2, 371, 373, 5, 135, 68, 2, 372, 371, 3, 2, 2, 2, 373, 374, 3, 2, 2, 2, 374, 372, 3, 2, 2, 2, 374, 375, 3, 2, 2, 2, 375, 376, 3, 2, 2, 2, 376, 378, 7, 48, 2, 2, 377, 379, 5, 135, 68, 2, 378, 377, 3, 2, 2, 2, 379, 380, 3, 2, 2, 2, 380, 378, 3, 2, 2, 2, 380, 381, 3, 2, 2, 2, 381, 391, 3, 2, 2, 2, 382, 384, 7, 103, 2, 2, 383, 385, 7, 47, 2, 2, 384, 383, 3, 2, 2, 2, 384, 385, 3, 2, 2, 2, 385, 387, 3, 2, 2, 2, 386, 388, 5, 135, 68, 2, 387, 386, 3, 2, 2, 2, 388, 389, 3, 2, 2, 2, 389, 387, 3, 2, 2, 2, 389, 390, 3, 2, 2, 2, 390, 392, 3, 2, 2, 2, 391, 382, 3, 2, 2, 2, 391, 392, 3, 2, 2, 2, 392, 128, 3, 2, 2, 2, 393, 399, 7, 41, 2, 2, 394, 398, 10, 2, 2, 2, 395, 396, 7, 94, 2, 2, 396, 398, 9, 3, 2, 2, 397, 394, 3, 2, 2, 2, 397, 395, 3, 2, 2, 2, 398, 401, 3, 2, 2, 2, 399, 397, 3, 2, 2, 2, 399, 400, 3, 2, 2, 2, 400, 402, 3, 2, 2, 2, 401, 399, 3, 2, 2, 2, 402, 403, 7, 41, 2, 2, 403, 130, 3, 2, 2, 2, 404, 410, 7, 36, 2, 2, 405, 409, 10, 4, 2, 2, 406, 407, 7, 94, 2, 2, 407, 409, 9, 5, 2, 2, 408, 405, 3, 2, 2, 2, 408, 406, 3, 2, 2, 2, 409, 412, 3, 2, 2, 2, 410, 408, 3, 2, 2, 2, 410, 411, 3, 2, 2, 2, 411, 413, 3, 2, 2, 2, 412, 410, 3, 2, 2, 2, 413, 414, 7, 36, 2, 2, 414, 132, 3, 2, 2, 2, 415, 419, 5, 137, 69, 2, 416, 418, 5, 139, 70, 2, 417, 416, 3, 2, 2, 2, 418, 421, 3, 2, 2, 2, 419, 417, 3, 2, 2, 2, 419, 420, 3, 2, 2, 2, 420, 134, 3, 2, 2, 2, 421, 419, 3, 2, 2, 2, 422, 423, 9, 6, 2, 2, 423, 136, 3, 2, 2, 2, 424, 425, 9, 7, 2, 2, 425, 138, 3, 2, 2, 2, 426, 430, 5, 137, 69, 2, 427, 430, 5, 135, 68, 2, 428, 430, 9, 8, 2, 2, 429, 426, 3, 2, 2, 2, 429, 427, 3, 2, 2, 2, 429, 428, 3, 2, 2, 2, 430, 140, 3, 2, 2, 2, 431, 432, 7, 47, 2, 2, 432, 433, 7, 47, 2, 2, 433, 437, 3, 2, 2, 2, 434, 436, 10, 9, 2, 2, 435, 434, 3, 2, 2, 2, 436, 439, 3, 2, 2, 2, 437, 435, 3, 2, 2, 2, 437, 438, 3, 2, 2, 2, 438, 440, 3, 2, 2, 2, 439, 437, 3, 2, 2, 2, 440, 441, 8, 71, 2, 2, 441, 142, 3, 2, 2, 2, 442, 444, 9, 10, 2, 2, 443, 442, 3, 2, 2, 2, 444, 445, 3, 2, 2, 2, 445, 443, 3, 2, 2, 2, 445, 446, 3, 2, 2, 2, 446, 447, 3, 2, 2, 2, 447, 448, 8, 72, 2, 2, 448, 144, 3, 2, 2, 2, 449, 450, 11, 2, 2, 2, 450, 146, 3, 2, 2, 2, 17, 2, 369, 374, 380, 384, 389, 391, 397, 399, 408, 410, 419, 429, 437, 445, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 75, 478, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 67, 6, 67, 395, 10, 67, 13, 67, 14, 67, 396, 3, 68, 6, 68, 400, 10, 68, 13, 68, 14, 68, 401, 3, 68, 3, 68, 6, 68, 406, 10, 68, 13, 68, 14, 68, 407, 3, 68, 3, 68, 5, 68, 412, 10, 68, 3, 68, 6, 68, 415, 10, 68, 13, 68, 14, 68, 416, 5, 68, 419, 10, 68, 3, 69, 3, 69, 3, 69, 3, 69, 7, 69, 425, 10, 69, 12, 69, 14, 69, 428, 11, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, 7, 70, 436, 10, 70, 12, 70, 14, 70, 439, 11, 70, 3, 70, 3, 70, 3, 71, 3, 71, 7, 71, 445, 10, 71, 12, 71, 14, 71, 448, 11, 71, 3, 72, 3, 72, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 5, 74, 457, 10, 74, 3, 75, 3, 75, 3, 75, 3, 75, 7, 75, 463, 10, 75, 12, 75, 14, 75, 466, 11, 75, 3, 75, 3, 75, 3, 76, 6, 76, 471, 10, 76, 13, 76, 14, 76, 472, 3, 76, 3, 76, 3, 77, 3, 77, 2, 2, 78, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 2, 145, 2, 147, 2, 149, 73, 151, 74, 153, 75, 3, 2, 11, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 4, 2, 12, 12, 14, 15, 5, 2, 11, 12, 15, 15, 34, 34, 2, 489, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 3, 155, 3, 2, 2, 2, 5, 157, 3, 2, 2, 2, 7, 161, 3, 2, 2, 2, 9, 166, 3, 2, 2, 2, 11, 173, 3, 2, 2, 2, 13, 176, 3, 2, 2, 2, 15, 181, 3, 2, 2, 2, 17, 187, 3, 2, 2, 2, 19, 189, 3, 2, 2, 2, 21, 191, 3, 2, 2, 2, 23, 193, 3, 2, 2, 2, 25, 195, 3, 2, 2, 2, 27, 197, 3, 2, 2, 2, 29, 199, 3, 2, 2, 2, 31, 201, 3, 2, 2, 2, 33, 204, 3, 2, 2, 2, 35, 207, 3, 2, 2, 2, 37, 209, 3, 2, 2, 2, 39, 211, 3, 2, 2, 2, 41, 213, 3, 2, 2, 2, 43, 219, 3, 2, 2, 2, 45, 228, 3, 2, 2, 2, 47, 235, 3, 2, 2, 2, 49, 237, 3, 2, 2, 2, 51, 240, 3, 2, 2, 2, 53, 245, 3, 2, 2, 2, 55, 250, 3, 2, 2, 2, 57, 256, 3, 2, 2, 2, 59, 262, 3, 2, 2, 2, 61, 266, 3, 2, 2, 2, 63, 269, 3, 2, 2, 2, 65, 274, 3, 2, 2, 2, 67, 279, 3, 2, 2, 2, 69, 281, 3, 2, 2, 2, 71, 283, 3, 2, 2, 2, 73, 290, 3, 2, 2, 2, 75, 292, 3, 2, 2, 2, 77, 295, 3, 2, 2, 2, 79, 297, 3, 2, 2, 2, 81, 299, 3, 2, 2, 2, 83, 303, 3, 2, 2, 2, 85, 305, 3, 2, 2, 2, 87, 307, 3, 2, 2, 2, 89, 309, 3, 2, 2, 2, 91, 311, 3, 2, 2, 2, 93, 314, 3, 2, 2, 2, 95, 318, 3, 2, 2, 2, 97, 321, 3, 2, 2, 2, 99, 324, 3, 2, 2, 2, 101, 326, 3, 2, 2, 2, 103, 329, 3, 2, 2, 2, 105, 331, 3, 2, 2, 2, 107, 334, 3, 2, 2, 2, 109, 338, 3, 2, 2, 2, 111, 342, 3, 2, 2, 2, 113, 345, 3, 2, 2, 2, 115, 347, 3, 2, 2, 2, 117, 352, 3, 2, 2, 2, 119, 358, 3, 2, 2, 2, 121, 363, 3, 2, 2, 2, 123, 367, 3, 2, 2, 2, 125, 373, 3, 2, 2, 2, 127, 378, 3, 2, 2, 2, 129, 383, 3, 2, 2, 2, 131, 390, 3, 2, 2, 2, 133, 394, 3, 2, 2, 2, 135, 399, 3, 2, 2, 2, 137, 420, 3, 2, 2, 2, 139, 431, 3, 2, 2, 2, 141, 442, 3, 2, 2, 2, 143, 449, 3, 2, 2, 2, 145, 451, 3, 2, 2, 2, 147, 456, 3, 2, 2, 2, 149, 458, 3, 2, 2, 2, 151, 470, 3, 2, 2, 2, 153, 476, 3, 2, 2, 2, 155, 156, 7, 61, 2, 2, 156, 4, 3, 2, 2, 2, 157, 158, 7, 119, 2, 2, 158, 159, 7, 117, 2, 2, 159, 160, 7, 103, 2, 2, 160, 6, 3, 2, 2, 2, 161, 162, 7, 113, 2, 2, 162, 163, 7, 112, 2, 2, 163, 164, 7, 110, 2, 2, 164, 165, 7, 123, 2, 2, 165, 8, 3, 2, 2, 2, 166, 167, 7, 106, 2, 2, 167, 168, 7, 107, 2, 2, 168, 169, 7, 102, 2, 2, 169, 170, 7, 107, 2, 2, 170, 171, 7, 112, 2, 2, 171, 172, 7, 105, 2, 2, 172, 10, 3, 2, 2, 2, 173, 174, 7, 99, 2, 2, 174, 175, 7, 117, 2, 2, 175, 12, 3, 2, 2, 2, 176, 177, 7, 117, 2, 2, 177, 178, 7, 109, 2, 2, 178, 179, 7, 107, 2, 2, 179, 180, 7, 114, 2, 2, 180, 14, 3, 2, 2, 2, 181, 182, 7, 114, 2, 2, 182, 183, 7, 116, 2, 2, 183, 184, 7, 107, 2, 2, 184, 185, 7, 112, 2, 2, 185, 186, 7, 118, 2, 2, 186, 16, 3, 2, 2, 2, 187, 188, 7, 63, 2, 2, 188, 18, 3, 2, 2, 2, 189, 190, 7, 96, 2, 2, 190, 20, 3, 2, 2, 2, 191, 192, 7, 44, 2, 2, 192, 22, 3, 2, 2, 2, 193, 194, 7, 49, 2, 2, 194, 24, 3, 2, 2, 2, 195, 196, 7, 39, 2, 2, 196, 26, 3, 2, 2, 2, 197, 198, 7, 45, 2, 2, 198, 28, 3, 2, 2, 2, 199, 200, 7, 47, 2, 2, 200, 30, 3, 2, 2, 2, 201, 202, 7, 62, 2, 2, 202, 203, 7, 62, 2, 2, 203, 32, 3, 2, 2, 2, 204, 205, 7, 64, 2, 2, 205, 206, 7, 64, 2, 2, 206, 34, 3, 2, 2, 2, 207, 208, 7, 40, 2, 2, 208, 36, 3, 2, 2, 2, 209, 210, 7, 38, 2, 2, 210, 38, 3, 2, 2, 2, 211, 212, 7, 126, 2, 2, 212, 40, 3, 2, 2, 2, 213, 214, 7, 100, 2, 2, 214, 215, 7, 116, 2, 2, 215, 216, 7, 103, 2, 2, 216, 217, 7, 99, 2, 2, 217, 218, 7, 109, 2, 2, 218, 42, 3, 2, 2, 2, 219, 220, 7, 101, 2, 2, 220, 221, 7, 113, 2, 2, 221, 222, 7, 112, 2, 2, 222, 223, 7, 118, 2, 2, 223, 224, 7, 107, 2, 2, 224, 225, 7, 112, 2, 2, 225, 226, 7, 119, 2, 2, 226, 227, 7, 103, 2, 2, 227, 44, 3, 2, 2, 2, 228, 229, 7, 116, 2, 2, 229, 230, 7, 103, 2, 2, 230, 231, 7, 118, 2, 2, 231, 232, 7, 119, 2, 2, 232, 233, 7, 116, 2, 2, 233, 234, 7, 112, 2, 2, 234, 46, 3, 2, 2, 2, 235, 236, 7, 46, 2, 2, 236, 48, 3, 2, 2, 2, 237, 238, 7, 107, 2, 2, 238, 239, 7, 104, 2, 2, 239, 50, 3, 2, 2, 2, 240, 241, 7, 103, 2, 2, 241, 242, 7, 110, 2, 2, 242, 243, 7, 107, 2, 2, 243, 244, 7, 104, 2, 2, 244, 52, 3, 2, 2, 2, 245, 246, 7, 103, 2, 2, 246, 247, 7, 110, 2, 2, 247, 248, 7, 117, 2, 2, 248, 249, 7, 103, 2, 2, 249, 54, 3, 2, 2, 2, 250, 251, 7, 121, 2, 2, 251, 252, 7, 106, 2, 2, 252, 253, 7, 107, 2, 2, 253, 254, 7, 110, 2, 2, 254, 255, 7, 103, 2, 2, 255, 56, 3, 2, 2, 2, 256, 257, 7, 119, 2, 2, 257, 258, 7, 112, 2, 2, 258, 259, 7, 118, 2, 2, 259, 260, 7, 107, 2, 2, 260, 261, 7, 110, 2, 2, 261, 58, 3, 2, 2, 2, 262, 263, 7, 104, 2, 2, 263, 264, 7, 113, 2, 2, 264, 265, 7, 116, 2, 2, 265, 60, 3, 2, 2, 2, 266, 267, 7, 107, 2, 2, 267, 268, 7, 112, 2, 2, 268, 62, 3, 2, 2, 2, 269, 270, 7, 117, 2, 2, 270, 271, 7, 118, 2, 2, 271, 272, 7, 103, 2, 2, 272, 273, 7, 114, 2, 2, 273, 64, 3, 2, 2, 2, 274, 275, 7, 104, 2, 2, 275, 276, 7, 119, 2, 2, 276, 277, 7, 112, 2, 2, 277, 278, 7, 101, 2, 2, 278, 66, 3, 2, 2, 2, 279, 280, 7, 42, 2, 2, 280, 68, 3, 2, 2, 2, 281, 282, 7, 43, 2, 2, 282, 70, 3, 2, 2, 2, 283, 284, 7, 103, 2, 2, 284, 285, 7, 122, 2, 2, 285, 286, 7, 118, 2, 2, 286, 287, 7, 103, 2, 2, 287, 288, 7, 116, 2, 2, 288, 289, 7, 112, 2, 2, 289, 72, 3, 2, 2, 2, 290, 291, 7, 60, 2, 2, 291, 74, 3, 2, 2, 2, 292, 293, 7, 102, 2, 2, 293, 294, 7, 113, 2, 2, 294, 76, 3, 2, 2, 2, 295, 296, 7, 125, 2, 2, 296, 78, 3, 2, 2, 2, 297, 298, 7, 127, 2, 2, 298, 80, 3, 2, 2, 2, 299, 300, 7, 102, 2, 2, 300, 301, 7, 103, 2, 2, 301, 302, 7, 104, 2, 2, 302, 82, 3, 2, 2, 2, 303, 304, 7, 93, 2, 2, 304, 84, 3, 2, 2, 2, 305, 306, 7, 95, 2, 2, 306, 86, 3, 2, 2, 2, 307, 308, 7, 48, 2, 2, 308, 88, 3, 2, 2, 2, 309, 310, 7, 128, 2, 2, 310, 90, 3, 2, 2, 2, 311, 312, 7, 48, 2, 2, 312, 313, 7, 48, 2, 2, 313, 92, 3, 2, 2, 2, 314, 315, 7, 48, 2, 2, 315, 316, 7, 48, 2, 2, 316, 317, 7, 48, 2, 2, 317, 94, 3, 2, 2, 2, 318, 319, 7, 63, 2, 2, 319, 320, 7, 63, 2, 2, 320, 96, 3, 2, 2, 2, 321, 322, 7, 35, 2, 2, 322, 323, 7, 63, 2, 2, 323, 98, 3, 2, 2, 2, 324, 325, 7, 62, 2, 2, 325, 100, 3, 2, 2, 2, 326, 327, 7, 62, 2, 2, 327, 328, 7, 63, 2, 2, 328, 102, 3, 2, 2, 2, 329, 330, 7, 64, 2, 2, 330, 104, 3, 2, 2, 2, 331, 332, 7, 64, 2, 2, 332, 333, 7, 63, 2, 2, 333, 106, 3, 2, 2, 2, 334, 335, 7, 112, 2, 2, 335, 336, 7, 113, 2, 2, 336, 337, 7, 118, 2, 2, 337, 108, 3, 2, 2, 2, 338, 339, 7, 99, 2, 2, 339, 340, 7, 112, 2, 2, 340, 341, 7, 102, 2, 2, 341, 110, 3, 2, 2, 2, 342, 343, 7, 113, 2, 2, 343, 344, 7, 116, 2, 2, 344, 112, 3, 2, 2, 2, 345, 346, 7, 65, 2, 2, 346, 114, 3, 2, 2, 2, 347, 348, 7, 118, 2, 2, 348, 349, 7, 116, 2, 2, 349, 350, 7, 119, 2, 2, 350, 351, 7, 103, 2, 2, 351, 116, 3, 2, 2, 2, 352, 353, 7, 104, 2, 2, 353, 354, 7, 99, 2, 2, 354, 355, 7, 110, 2, 2, 355, 356, 7, 117, 2, 2, 356, 357, 7, 103, 2, 2, 357, 118, 3, 2, 2, 2, 358, 359, 7, 88, 2, 2, 359, 360, 7, 113, 2, 2, 360, 361, 7, 107, 2, 2, 361, 362, 7, 102, 2, 2, 362, 120, 3, 2, 2, 2, 363, 364, 7, 75, 2, 2, 364, 365, 7, 112, 2, 2, 365, 366, 7, 118, 2, 2, 366, 122, 3, 2, 2, 2, 367, 368, 7, 72, 2, 2, 368, 369, 7, 110, 2, 2, 369, 370, 7, 113, 2, 2, 370, 371, 7, 99, 2, 2, 371, 372, 7, 118, 2, 2, 372, 124, 3, 2, 2, 2, 373, 374, 7, 68, 2, 2, 374, 375, 7, 113, 2, 2, 375, 376, 7, 113, 2, 2, 376, 377, 7, 110, 2, 2, 377, 126, 3, 2, 2, 2, 378, 379, 7, 69, 2, 2, 379, 380, 7, 106, 2, 2, 380, 381, 7, 99, 2, 2, 381, 382, 7, 116, 2, 2, 382, 128, 3, 2, 2, 2, 383, 384, 7, 85, 2, 2, 384, 385, 7, 118, 2, 2, 385, 386, 7, 116, 2, 2, 386, 387, 7, 107, 2, 2, 387, 388, 7, 112, 2, 2, 388, 389, 7, 105, 2, 2, 389, 130, 3, 2, 2, 2, 390, 391, 7, 47, 2, 2, 391, 392, 7, 64, 2, 2, 392, 132, 3, 2, 2, 2, 393, 395, 5, 143, 72, 2, 394, 393, 3, 2, 2, 2, 395, 396, 3, 2, 2, 2, 396, 394, 3, 2, 2, 2, 396, 397, 3, 2, 2, 2, 397, 134, 3, 2, 2, 2, 398, 400, 5, 143, 72, 2, 399, 398, 3, 2, 2, 2, 400, 401, 3, 2, 2, 2, 401, 399, 3, 2, 2, 2, 401, 402, 3, 2, 2, 2, 402, 403, 3, 2, 2, 2, 403, 405, 7, 48, 2, 2, 404, 406, 5, 143, 72, 2, 405, 404, 3, 2, 2, 2, 406, 407, 3, 2, 2, 2, 407, 405, 3, 2, 2, 2, 407, 408, 3, 2, 2, 2, 408, 418, 3, 2, 2, 2, 409, 411, 7, 103, 2, 2, 410, 412, 7, 47, 2, 2, 411, 410, 3, 2, 2, 2, 411, 412, 3, 2, 2, 2, 412, 414, 3, 2, 2, 2, 413, 415, 5, 143, 72, 2, 414, 413, 3, 2, 2, 2, 415, 416, 3, 2, 2, 2, 416, 414, 3, 2, 2, 2, 416, 417, 3, 2, 2, 2, 417, 419, 3, 2, 2, 2, 418, 409, 3, 2, 2, 2, 418, 419, 3, 2, 2, 2, 419, 136, 3, 2, 2, 2, 420, 426, 7, 41, 2, 2, 421, 425, 10, 2, 2, 2, 422, 423, 7, 94, 2, 2, 423, 425, 9, 3, 2, 2, 424, 421, 3, 2, 2, 2, 424, 422, 3, 2, 2, 2, 425, 428, 3, 2, 2, 2, 426, 424, 3, 2, 2, 2, 426, 427, 3, 2, 2, 2, 427, 429, 3, 2, 2, 2, 428, 426, 3, 2, 2, 2, 429, 430, 7, 41, 2, 2, 430, 138, 3, 2, 2, 2, 431, 437, 7, 36, 2, 2, 432, 436, 10, 4, 2, 2, 433, 434, 7, 94, 2, 2, 434, 436, 9, 5, 2, 2, 435, 432, 3, 2, 2, 2, 435, 433, 3, 2, 2, 2, 436, 439, 3, 2, 2, 2, 437, 435, 3, 2, 2, 2, 437, 438, 3, 2, 2, 2, 438, 440, 3, 2, 2, 2, 439, 437, 3, 2, 2, 2, 440, 441, 7, 36, 2, 2, 441, 140, 3, 2, 2, 2, 442, 446, 5, 145, 73, 2, 443, 445, 5, 147, 74, 2, 444, 443, 3, 2, 2, 2, 445, 448, 3, 2, 2, 2, 446, 444, 3, 2, 2, 2, 446, 447, 3, 2, 2, 2, 447, 142, 3, 2, 2, 2, 448, 446, 3, 2, 2, 2, 449, 450, 9, 6, 2, 2, 450, 144, 3, 2, 2, 2, 451, 452, 9, 7, 2, 2, 452, 146, 3, 2, 2, 2, 453, 457, 5, 145, 73, 2, 454, 457, 5, 143, 72, 2, 455, 457, 9, 8, 2, 2, 456, 453, 3, 2, 2, 2, 456, 454, 3, 2, 2, 2, 456, 455, 3, 2, 2, 2, 457, 148, 3, 2, 2, 2, 458, 459, 7, 47, 2, 2, 459, 460, 7, 47, 2, 2, 460, 464, 3, 2, 2, 2, 461, 463, 10, 9, 2, 2, 462, 461, 3, 2, 2, 2, 463, 466, 3, 2, 2, 2, 464, 462, 3, 2, 2, 2, 464, 465, 3, 2, 2, 2, 465, 467, 3, 2, 2, 2, 466, 464, 3, 2, 2, 2, 467, 468, 8, 75, 2, 2, 468, 150, 3, 2, 2, 2, 469, 471, 9, 10, 2, 2, 470, 469, 3, 2, 2, 2, 471, 472, 3, 2, 2, 2, 472, 470, 3, 2, 2, 2, 472, 473, 3, 2, 2, 2, 473, 474, 3, 2, 2, 2, 474, 475, 8, 76, 2, 2, 475, 152, 3, 2, 2, 2, 476, 477, 11, 2, 2, 2, 477, 154, 3, 2, 2, 2, 17, 2, 396, 401, 407, 411, 416, 418, 424, 426, 435, 437, 446, 456, 464, 472, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py index a422b9e3..c0b39eac 100644 --- a/src/antlr/PyxellLexer.py +++ b/src/antlr/PyxellLexer.py @@ -8,8 +8,8 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2G") - buf.write("\u01c3\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2K") + buf.write("\u01de\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") @@ -19,39 +19,41 @@ def serializedATN(): buf.write("\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64") buf.write("\t\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:") buf.write("\4;\t;\4<\t<\4=\t=\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\t") - buf.write("C\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I\tI\3\2\3\2\3\3\3\3") - buf.write("\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\4\3\5\3\5\3\6\3\6\3") - buf.write("\7\3\7\3\b\3\b\3\t\3\t\3\n\3\n\3\13\3\13\3\f\3\f\3\f\3") - buf.write("\r\3\r\3\r\3\16\3\16\3\17\3\17\3\20\3\20\3\21\3\21\3\21") - buf.write("\3\21\3\21\3\21\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22") - buf.write("\3\22\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\24\3\24\3\25") - buf.write("\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27") - buf.write("\3\27\3\30\3\30\3\30\3\30\3\30\3\30\3\31\3\31\3\31\3\31") - buf.write("\3\31\3\31\3\32\3\32\3\32\3\32\3\33\3\33\3\33\3\34\3\34") - buf.write("\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35\3\36\3\36\3\37") - buf.write("\3\37\3 \3 \3 \3 \3 \3 \3 \3!\3!\3\"\3\"\3\"\3#\3#\3$") - buf.write("\3$\3%\3%\3%\3%\3&\3&\3\'\3\'\3(\3(\3)\3)\3*\3*\3*\3+") - buf.write("\3+\3+\3+\3,\3,\3,\3-\3-\3-\3.\3.\3/\3/\3/\3\60\3\60\3") - buf.write("\61\3\61\3\61\3\62\3\62\3\62\3\62\3\63\3\63\3\63\3\63") - buf.write("\3\64\3\64\3\64\3\65\3\65\3\66\3\66\3\66\3\66\3\66\3\67") - buf.write("\3\67\3\67\3\67\3\67\3\67\38\38\38\38\38\39\39\39\39\3") - buf.write(":\3:\3:\3:\3:\3:\3;\3;\3;\3;\3;\3<\3<\3<\3<\3<\3=\3=\3") - buf.write("=\3=\3=\3=\3=\3>\3>\3>\3?\6?\u0170\n?\r?\16?\u0171\3@") - buf.write("\6@\u0175\n@\r@\16@\u0176\3@\3@\6@\u017b\n@\r@\16@\u017c") - buf.write("\3@\3@\5@\u0181\n@\3@\6@\u0184\n@\r@\16@\u0185\5@\u0188") - buf.write("\n@\3A\3A\3A\3A\7A\u018e\nA\fA\16A\u0191\13A\3A\3A\3B") - buf.write("\3B\3B\3B\7B\u0199\nB\fB\16B\u019c\13B\3B\3B\3C\3C\7C") - buf.write("\u01a2\nC\fC\16C\u01a5\13C\3D\3D\3E\3E\3F\3F\3F\5F\u01ae") - buf.write("\nF\3G\3G\3G\3G\7G\u01b4\nG\fG\16G\u01b7\13G\3G\3G\3H") - buf.write("\6H\u01bc\nH\rH\16H\u01bd\3H\3H\3I\3I\2\2J\3\3\5\4\7\5") - buf.write("\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35") - buf.write("\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33") - buf.write("\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[") - buf.write("/]\60_\61a\62c\63e\64g\65i\66k\67m8o9q:s;u{?}@\177") - buf.write("A\u0081B\u0083C\u0085D\u0087\2\u0089\2\u008b\2\u008dE") - buf.write("\u008fF\u0091G\3\2\13\4\2))^^\6\2))^^ppvv\4\2$$^^\6\2") + buf.write("C\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I\tI\4J\tJ\4K\tK\4L\t") + buf.write("L\4M\tM\3\2\3\2\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3") + buf.write("\5\3\5\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3\6\3\7\3\7\3\7\3\7") + buf.write("\3\7\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3\t\3\n\3\n\3\13\3\13") + buf.write("\3\f\3\f\3\r\3\r\3\16\3\16\3\17\3\17\3\20\3\20\3\20\3") + buf.write("\21\3\21\3\21\3\22\3\22\3\23\3\23\3\24\3\24\3\25\3\25") + buf.write("\3\25\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\26\3\26") + buf.write("\3\26\3\26\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\30\3\30") + buf.write("\3\31\3\31\3\31\3\32\3\32\3\32\3\32\3\32\3\33\3\33\3\33") + buf.write("\3\33\3\33\3\34\3\34\3\34\3\34\3\34\3\34\3\35\3\35\3\35") + buf.write("\3\35\3\35\3\35\3\36\3\36\3\36\3\36\3\37\3\37\3\37\3 ") + buf.write("\3 \3 \3 \3 \3!\3!\3!\3!\3!\3\"\3\"\3#\3#\3$\3$\3$\3$") + buf.write("\3$\3$\3$\3%\3%\3&\3&\3&\3\'\3\'\3(\3(\3)\3)\3)\3)\3*") + buf.write("\3*\3+\3+\3,\3,\3-\3-\3.\3.\3.\3/\3/\3/\3/\3\60\3\60\3") + buf.write("\60\3\61\3\61\3\61\3\62\3\62\3\63\3\63\3\63\3\64\3\64") + buf.write("\3\65\3\65\3\65\3\66\3\66\3\66\3\66\3\67\3\67\3\67\3\67") + buf.write("\38\38\38\39\39\3:\3:\3:\3:\3:\3;\3;\3;\3;\3;\3;\3<\3") + buf.write("<\3<\3<\3<\3=\3=\3=\3=\3>\3>\3>\3>\3>\3>\3?\3?\3?\3?\3") + buf.write("?\3@\3@\3@\3@\3@\3A\3A\3A\3A\3A\3A\3A\3B\3B\3B\3C\6C\u018b") + buf.write("\nC\rC\16C\u018c\3D\6D\u0190\nD\rD\16D\u0191\3D\3D\6D") + buf.write("\u0196\nD\rD\16D\u0197\3D\3D\5D\u019c\nD\3D\6D\u019f\n") + buf.write("D\rD\16D\u01a0\5D\u01a3\nD\3E\3E\3E\3E\7E\u01a9\nE\fE") + buf.write("\16E\u01ac\13E\3E\3E\3F\3F\3F\3F\7F\u01b4\nF\fF\16F\u01b7") + buf.write("\13F\3F\3F\3G\3G\7G\u01bd\nG\fG\16G\u01c0\13G\3H\3H\3") + buf.write("I\3I\3J\3J\3J\5J\u01c9\nJ\3K\3K\3K\3K\7K\u01cf\nK\fK\16") + buf.write("K\u01d2\13K\3K\3K\3L\6L\u01d7\nL\rL\16L\u01d8\3L\3L\3") + buf.write("M\3M\2\2N\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25") + buf.write("\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+") + buf.write("\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#E") + buf.write("$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k") + buf.write("\67m8o9q:s;u{?}@\177A\u0081B\u0083C\u0085D\u0087") + buf.write("E\u0089F\u008bG\u008dH\u008f\2\u0091\2\u0093\2\u0095I") + buf.write("\u0097J\u0099K\3\2\13\4\2))^^\6\2))^^ppvv\4\2$$^^\6\2") buf.write("$$^^ppvv\3\2\62;\5\2C\\aac|\4\2))aa\4\2\f\f\16\17\5\2") - buf.write("\13\f\17\17\"\"\2\u01ce\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3") + buf.write("\13\f\17\17\"\"\2\u01e9\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3") buf.write("\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2") buf.write("\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2") buf.write("\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2") @@ -66,140 +68,149 @@ def serializedATN(): buf.write("m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2u\3\2\2\2") buf.write("\2w\3\2\2\2\2y\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177\3\2") buf.write("\2\2\2\u0081\3\2\2\2\2\u0083\3\2\2\2\2\u0085\3\2\2\2\2") - buf.write("\u008d\3\2\2\2\2\u008f\3\2\2\2\2\u0091\3\2\2\2\3\u0093") - buf.write("\3\2\2\2\5\u0095\3\2\2\2\7\u009a\3\2\2\2\t\u00a0\3\2\2") - buf.write("\2\13\u00a2\3\2\2\2\r\u00a4\3\2\2\2\17\u00a6\3\2\2\2\21") - buf.write("\u00a8\3\2\2\2\23\u00aa\3\2\2\2\25\u00ac\3\2\2\2\27\u00ae") - buf.write("\3\2\2\2\31\u00b1\3\2\2\2\33\u00b4\3\2\2\2\35\u00b6\3") - buf.write("\2\2\2\37\u00b8\3\2\2\2!\u00ba\3\2\2\2#\u00c0\3\2\2\2") - buf.write("%\u00c9\3\2\2\2\'\u00d0\3\2\2\2)\u00d2\3\2\2\2+\u00d5") - buf.write("\3\2\2\2-\u00da\3\2\2\2/\u00df\3\2\2\2\61\u00e5\3\2\2") - buf.write("\2\63\u00eb\3\2\2\2\65\u00ef\3\2\2\2\67\u00f2\3\2\2\2") - buf.write("9\u00f7\3\2\2\2;\u00fc\3\2\2\2=\u00fe\3\2\2\2?\u0100\3") - buf.write("\2\2\2A\u0107\3\2\2\2C\u0109\3\2\2\2E\u010c\3\2\2\2G\u010e") - buf.write("\3\2\2\2I\u0110\3\2\2\2K\u0114\3\2\2\2M\u0116\3\2\2\2") - buf.write("O\u0118\3\2\2\2Q\u011a\3\2\2\2S\u011c\3\2\2\2U\u011f\3") - buf.write("\2\2\2W\u0123\3\2\2\2Y\u0126\3\2\2\2[\u0129\3\2\2\2]\u012b") - buf.write("\3\2\2\2_\u012e\3\2\2\2a\u0130\3\2\2\2c\u0133\3\2\2\2") - buf.write("e\u0137\3\2\2\2g\u013b\3\2\2\2i\u013e\3\2\2\2k\u0140\3") - buf.write("\2\2\2m\u0145\3\2\2\2o\u014b\3\2\2\2q\u0150\3\2\2\2s\u0154") - buf.write("\3\2\2\2u\u015a\3\2\2\2w\u015f\3\2\2\2y\u0164\3\2\2\2") - buf.write("{\u016b\3\2\2\2}\u016f\3\2\2\2\177\u0174\3\2\2\2\u0081") - buf.write("\u0189\3\2\2\2\u0083\u0194\3\2\2\2\u0085\u019f\3\2\2\2") - buf.write("\u0087\u01a6\3\2\2\2\u0089\u01a8\3\2\2\2\u008b\u01ad\3") - buf.write("\2\2\2\u008d\u01af\3\2\2\2\u008f\u01bb\3\2\2\2\u0091\u01c1") - buf.write("\3\2\2\2\u0093\u0094\7=\2\2\u0094\4\3\2\2\2\u0095\u0096") - buf.write("\7u\2\2\u0096\u0097\7m\2\2\u0097\u0098\7k\2\2\u0098\u0099") - buf.write("\7r\2\2\u0099\6\3\2\2\2\u009a\u009b\7r\2\2\u009b\u009c") - buf.write("\7t\2\2\u009c\u009d\7k\2\2\u009d\u009e\7p\2\2\u009e\u009f") - buf.write("\7v\2\2\u009f\b\3\2\2\2\u00a0\u00a1\7?\2\2\u00a1\n\3\2") - buf.write("\2\2\u00a2\u00a3\7`\2\2\u00a3\f\3\2\2\2\u00a4\u00a5\7") - buf.write(",\2\2\u00a5\16\3\2\2\2\u00a6\u00a7\7\61\2\2\u00a7\20\3") - buf.write("\2\2\2\u00a8\u00a9\7\'\2\2\u00a9\22\3\2\2\2\u00aa\u00ab") - buf.write("\7-\2\2\u00ab\24\3\2\2\2\u00ac\u00ad\7/\2\2\u00ad\26\3") - buf.write("\2\2\2\u00ae\u00af\7>\2\2\u00af\u00b0\7>\2\2\u00b0\30") - buf.write("\3\2\2\2\u00b1\u00b2\7@\2\2\u00b2\u00b3\7@\2\2\u00b3\32") - buf.write("\3\2\2\2\u00b4\u00b5\7(\2\2\u00b5\34\3\2\2\2\u00b6\u00b7") - buf.write("\7&\2\2\u00b7\36\3\2\2\2\u00b8\u00b9\7~\2\2\u00b9 \3\2") - buf.write("\2\2\u00ba\u00bb\7d\2\2\u00bb\u00bc\7t\2\2\u00bc\u00bd") - buf.write("\7g\2\2\u00bd\u00be\7c\2\2\u00be\u00bf\7m\2\2\u00bf\"") - buf.write("\3\2\2\2\u00c0\u00c1\7e\2\2\u00c1\u00c2\7q\2\2\u00c2\u00c3") - buf.write("\7p\2\2\u00c3\u00c4\7v\2\2\u00c4\u00c5\7k\2\2\u00c5\u00c6") - buf.write("\7p\2\2\u00c6\u00c7\7w\2\2\u00c7\u00c8\7g\2\2\u00c8$\3") - buf.write("\2\2\2\u00c9\u00ca\7t\2\2\u00ca\u00cb\7g\2\2\u00cb\u00cc") - buf.write("\7v\2\2\u00cc\u00cd\7w\2\2\u00cd\u00ce\7t\2\2\u00ce\u00cf") - buf.write("\7p\2\2\u00cf&\3\2\2\2\u00d0\u00d1\7.\2\2\u00d1(\3\2\2") - buf.write("\2\u00d2\u00d3\7k\2\2\u00d3\u00d4\7h\2\2\u00d4*\3\2\2") - buf.write("\2\u00d5\u00d6\7g\2\2\u00d6\u00d7\7n\2\2\u00d7\u00d8\7") - buf.write("k\2\2\u00d8\u00d9\7h\2\2\u00d9,\3\2\2\2\u00da\u00db\7") - buf.write("g\2\2\u00db\u00dc\7n\2\2\u00dc\u00dd\7u\2\2\u00dd\u00de") - buf.write("\7g\2\2\u00de.\3\2\2\2\u00df\u00e0\7y\2\2\u00e0\u00e1") - buf.write("\7j\2\2\u00e1\u00e2\7k\2\2\u00e2\u00e3\7n\2\2\u00e3\u00e4") - buf.write("\7g\2\2\u00e4\60\3\2\2\2\u00e5\u00e6\7w\2\2\u00e6\u00e7") - buf.write("\7p\2\2\u00e7\u00e8\7v\2\2\u00e8\u00e9\7k\2\2\u00e9\u00ea") - buf.write("\7n\2\2\u00ea\62\3\2\2\2\u00eb\u00ec\7h\2\2\u00ec\u00ed") - buf.write("\7q\2\2\u00ed\u00ee\7t\2\2\u00ee\64\3\2\2\2\u00ef\u00f0") - buf.write("\7k\2\2\u00f0\u00f1\7p\2\2\u00f1\66\3\2\2\2\u00f2\u00f3") - buf.write("\7u\2\2\u00f3\u00f4\7v\2\2\u00f4\u00f5\7g\2\2\u00f5\u00f6") - buf.write("\7r\2\2\u00f68\3\2\2\2\u00f7\u00f8\7h\2\2\u00f8\u00f9") - buf.write("\7w\2\2\u00f9\u00fa\7p\2\2\u00fa\u00fb\7e\2\2\u00fb:\3") - buf.write("\2\2\2\u00fc\u00fd\7*\2\2\u00fd<\3\2\2\2\u00fe\u00ff\7") - buf.write("+\2\2\u00ff>\3\2\2\2\u0100\u0101\7g\2\2\u0101\u0102\7") - buf.write("z\2\2\u0102\u0103\7v\2\2\u0103\u0104\7g\2\2\u0104\u0105") - buf.write("\7t\2\2\u0105\u0106\7p\2\2\u0106@\3\2\2\2\u0107\u0108") - buf.write("\7<\2\2\u0108B\3\2\2\2\u0109\u010a\7f\2\2\u010a\u010b") - buf.write("\7q\2\2\u010bD\3\2\2\2\u010c\u010d\7}\2\2\u010dF\3\2\2") - buf.write("\2\u010e\u010f\7\177\2\2\u010fH\3\2\2\2\u0110\u0111\7") - buf.write("f\2\2\u0111\u0112\7g\2\2\u0112\u0113\7h\2\2\u0113J\3\2") - buf.write("\2\2\u0114\u0115\7]\2\2\u0115L\3\2\2\2\u0116\u0117\7_") - buf.write("\2\2\u0117N\3\2\2\2\u0118\u0119\7\60\2\2\u0119P\3\2\2") - buf.write("\2\u011a\u011b\7\u0080\2\2\u011bR\3\2\2\2\u011c\u011d") - buf.write("\7\60\2\2\u011d\u011e\7\60\2\2\u011eT\3\2\2\2\u011f\u0120") - buf.write("\7\60\2\2\u0120\u0121\7\60\2\2\u0121\u0122\7\60\2\2\u0122") - buf.write("V\3\2\2\2\u0123\u0124\7?\2\2\u0124\u0125\7?\2\2\u0125") - buf.write("X\3\2\2\2\u0126\u0127\7#\2\2\u0127\u0128\7?\2\2\u0128") - buf.write("Z\3\2\2\2\u0129\u012a\7>\2\2\u012a\\\3\2\2\2\u012b\u012c") - buf.write("\7>\2\2\u012c\u012d\7?\2\2\u012d^\3\2\2\2\u012e\u012f") - buf.write("\7@\2\2\u012f`\3\2\2\2\u0130\u0131\7@\2\2\u0131\u0132") - buf.write("\7?\2\2\u0132b\3\2\2\2\u0133\u0134\7p\2\2\u0134\u0135") - buf.write("\7q\2\2\u0135\u0136\7v\2\2\u0136d\3\2\2\2\u0137\u0138") - buf.write("\7c\2\2\u0138\u0139\7p\2\2\u0139\u013a\7f\2\2\u013af\3") - buf.write("\2\2\2\u013b\u013c\7q\2\2\u013c\u013d\7t\2\2\u013dh\3") - buf.write("\2\2\2\u013e\u013f\7A\2\2\u013fj\3\2\2\2\u0140\u0141\7") - buf.write("v\2\2\u0141\u0142\7t\2\2\u0142\u0143\7w\2\2\u0143\u0144") - buf.write("\7g\2\2\u0144l\3\2\2\2\u0145\u0146\7h\2\2\u0146\u0147") - buf.write("\7c\2\2\u0147\u0148\7n\2\2\u0148\u0149\7u\2\2\u0149\u014a") - buf.write("\7g\2\2\u014an\3\2\2\2\u014b\u014c\7X\2\2\u014c\u014d") - buf.write("\7q\2\2\u014d\u014e\7k\2\2\u014e\u014f\7f\2\2\u014fp\3") - buf.write("\2\2\2\u0150\u0151\7K\2\2\u0151\u0152\7p\2\2\u0152\u0153") - buf.write("\7v\2\2\u0153r\3\2\2\2\u0154\u0155\7H\2\2\u0155\u0156") - buf.write("\7n\2\2\u0156\u0157\7q\2\2\u0157\u0158\7c\2\2\u0158\u0159") - buf.write("\7v\2\2\u0159t\3\2\2\2\u015a\u015b\7D\2\2\u015b\u015c") - buf.write("\7q\2\2\u015c\u015d\7q\2\2\u015d\u015e\7n\2\2\u015ev\3") - buf.write("\2\2\2\u015f\u0160\7E\2\2\u0160\u0161\7j\2\2\u0161\u0162") - buf.write("\7c\2\2\u0162\u0163\7t\2\2\u0163x\3\2\2\2\u0164\u0165") - buf.write("\7U\2\2\u0165\u0166\7v\2\2\u0166\u0167\7t\2\2\u0167\u0168") - buf.write("\7k\2\2\u0168\u0169\7p\2\2\u0169\u016a\7i\2\2\u016az\3") - buf.write("\2\2\2\u016b\u016c\7/\2\2\u016c\u016d\7@\2\2\u016d|\3") - buf.write("\2\2\2\u016e\u0170\5\u0087D\2\u016f\u016e\3\2\2\2\u0170") - buf.write("\u0171\3\2\2\2\u0171\u016f\3\2\2\2\u0171\u0172\3\2\2\2") - buf.write("\u0172~\3\2\2\2\u0173\u0175\5\u0087D\2\u0174\u0173\3\2") - buf.write("\2\2\u0175\u0176\3\2\2\2\u0176\u0174\3\2\2\2\u0176\u0177") - buf.write("\3\2\2\2\u0177\u0178\3\2\2\2\u0178\u017a\7\60\2\2\u0179") - buf.write("\u017b\5\u0087D\2\u017a\u0179\3\2\2\2\u017b\u017c\3\2") - buf.write("\2\2\u017c\u017a\3\2\2\2\u017c\u017d\3\2\2\2\u017d\u0187") - buf.write("\3\2\2\2\u017e\u0180\7g\2\2\u017f\u0181\7/\2\2\u0180\u017f") - buf.write("\3\2\2\2\u0180\u0181\3\2\2\2\u0181\u0183\3\2\2\2\u0182") - buf.write("\u0184\5\u0087D\2\u0183\u0182\3\2\2\2\u0184\u0185\3\2") - buf.write("\2\2\u0185\u0183\3\2\2\2\u0185\u0186\3\2\2\2\u0186\u0188") - buf.write("\3\2\2\2\u0187\u017e\3\2\2\2\u0187\u0188\3\2\2\2\u0188") - buf.write("\u0080\3\2\2\2\u0189\u018f\7)\2\2\u018a\u018e\n\2\2\2") - buf.write("\u018b\u018c\7^\2\2\u018c\u018e\t\3\2\2\u018d\u018a\3") - buf.write("\2\2\2\u018d\u018b\3\2\2\2\u018e\u0191\3\2\2\2\u018f\u018d") - buf.write("\3\2\2\2\u018f\u0190\3\2\2\2\u0190\u0192\3\2\2\2\u0191") - buf.write("\u018f\3\2\2\2\u0192\u0193\7)\2\2\u0193\u0082\3\2\2\2") - buf.write("\u0194\u019a\7$\2\2\u0195\u0199\n\4\2\2\u0196\u0197\7") - buf.write("^\2\2\u0197\u0199\t\5\2\2\u0198\u0195\3\2\2\2\u0198\u0196") - buf.write("\3\2\2\2\u0199\u019c\3\2\2\2\u019a\u0198\3\2\2\2\u019a") - buf.write("\u019b\3\2\2\2\u019b\u019d\3\2\2\2\u019c\u019a\3\2\2\2") - buf.write("\u019d\u019e\7$\2\2\u019e\u0084\3\2\2\2\u019f\u01a3\5") - buf.write("\u0089E\2\u01a0\u01a2\5\u008bF\2\u01a1\u01a0\3\2\2\2\u01a2") - buf.write("\u01a5\3\2\2\2\u01a3\u01a1\3\2\2\2\u01a3\u01a4\3\2\2\2") - buf.write("\u01a4\u0086\3\2\2\2\u01a5\u01a3\3\2\2\2\u01a6\u01a7\t") - buf.write("\6\2\2\u01a7\u0088\3\2\2\2\u01a8\u01a9\t\7\2\2\u01a9\u008a") - buf.write("\3\2\2\2\u01aa\u01ae\5\u0089E\2\u01ab\u01ae\5\u0087D\2") - buf.write("\u01ac\u01ae\t\b\2\2\u01ad\u01aa\3\2\2\2\u01ad\u01ab\3") - buf.write("\2\2\2\u01ad\u01ac\3\2\2\2\u01ae\u008c\3\2\2\2\u01af\u01b0") - buf.write("\7/\2\2\u01b0\u01b1\7/\2\2\u01b1\u01b5\3\2\2\2\u01b2\u01b4") - buf.write("\n\t\2\2\u01b3\u01b2\3\2\2\2\u01b4\u01b7\3\2\2\2\u01b5") - buf.write("\u01b3\3\2\2\2\u01b5\u01b6\3\2\2\2\u01b6\u01b8\3\2\2\2") - buf.write("\u01b7\u01b5\3\2\2\2\u01b8\u01b9\bG\2\2\u01b9\u008e\3") - buf.write("\2\2\2\u01ba\u01bc\t\n\2\2\u01bb\u01ba\3\2\2\2\u01bc\u01bd") - buf.write("\3\2\2\2\u01bd\u01bb\3\2\2\2\u01bd\u01be\3\2\2\2\u01be") - buf.write("\u01bf\3\2\2\2\u01bf\u01c0\bH\2\2\u01c0\u0090\3\2\2\2") - buf.write("\u01c1\u01c2\13\2\2\2\u01c2\u0092\3\2\2\2\21\2\u0171\u0176") - buf.write("\u017c\u0180\u0185\u0187\u018d\u018f\u0198\u019a\u01a3") - buf.write("\u01ad\u01b5\u01bd\3\b\2\2") + buf.write("\u0087\3\2\2\2\2\u0089\3\2\2\2\2\u008b\3\2\2\2\2\u008d") + buf.write("\3\2\2\2\2\u0095\3\2\2\2\2\u0097\3\2\2\2\2\u0099\3\2\2") + buf.write("\2\3\u009b\3\2\2\2\5\u009d\3\2\2\2\7\u00a1\3\2\2\2\t\u00a6") + buf.write("\3\2\2\2\13\u00ad\3\2\2\2\r\u00b0\3\2\2\2\17\u00b5\3\2") + buf.write("\2\2\21\u00bb\3\2\2\2\23\u00bd\3\2\2\2\25\u00bf\3\2\2") + buf.write("\2\27\u00c1\3\2\2\2\31\u00c3\3\2\2\2\33\u00c5\3\2\2\2") + buf.write("\35\u00c7\3\2\2\2\37\u00c9\3\2\2\2!\u00cc\3\2\2\2#\u00cf") + buf.write("\3\2\2\2%\u00d1\3\2\2\2\'\u00d3\3\2\2\2)\u00d5\3\2\2\2") + buf.write("+\u00db\3\2\2\2-\u00e4\3\2\2\2/\u00eb\3\2\2\2\61\u00ed") + buf.write("\3\2\2\2\63\u00f0\3\2\2\2\65\u00f5\3\2\2\2\67\u00fa\3") + buf.write("\2\2\29\u0100\3\2\2\2;\u0106\3\2\2\2=\u010a\3\2\2\2?\u010d") + buf.write("\3\2\2\2A\u0112\3\2\2\2C\u0117\3\2\2\2E\u0119\3\2\2\2") + buf.write("G\u011b\3\2\2\2I\u0122\3\2\2\2K\u0124\3\2\2\2M\u0127\3") + buf.write("\2\2\2O\u0129\3\2\2\2Q\u012b\3\2\2\2S\u012f\3\2\2\2U\u0131") + buf.write("\3\2\2\2W\u0133\3\2\2\2Y\u0135\3\2\2\2[\u0137\3\2\2\2") + buf.write("]\u013a\3\2\2\2_\u013e\3\2\2\2a\u0141\3\2\2\2c\u0144\3") + buf.write("\2\2\2e\u0146\3\2\2\2g\u0149\3\2\2\2i\u014b\3\2\2\2k\u014e") + buf.write("\3\2\2\2m\u0152\3\2\2\2o\u0156\3\2\2\2q\u0159\3\2\2\2") + buf.write("s\u015b\3\2\2\2u\u0160\3\2\2\2w\u0166\3\2\2\2y\u016b\3") + buf.write("\2\2\2{\u016f\3\2\2\2}\u0175\3\2\2\2\177\u017a\3\2\2\2") + buf.write("\u0081\u017f\3\2\2\2\u0083\u0186\3\2\2\2\u0085\u018a\3") + buf.write("\2\2\2\u0087\u018f\3\2\2\2\u0089\u01a4\3\2\2\2\u008b\u01af") + buf.write("\3\2\2\2\u008d\u01ba\3\2\2\2\u008f\u01c1\3\2\2\2\u0091") + buf.write("\u01c3\3\2\2\2\u0093\u01c8\3\2\2\2\u0095\u01ca\3\2\2\2") + buf.write("\u0097\u01d6\3\2\2\2\u0099\u01dc\3\2\2\2\u009b\u009c\7") + buf.write("=\2\2\u009c\4\3\2\2\2\u009d\u009e\7w\2\2\u009e\u009f\7") + buf.write("u\2\2\u009f\u00a0\7g\2\2\u00a0\6\3\2\2\2\u00a1\u00a2\7") + buf.write("q\2\2\u00a2\u00a3\7p\2\2\u00a3\u00a4\7n\2\2\u00a4\u00a5") + buf.write("\7{\2\2\u00a5\b\3\2\2\2\u00a6\u00a7\7j\2\2\u00a7\u00a8") + buf.write("\7k\2\2\u00a8\u00a9\7f\2\2\u00a9\u00aa\7k\2\2\u00aa\u00ab") + buf.write("\7p\2\2\u00ab\u00ac\7i\2\2\u00ac\n\3\2\2\2\u00ad\u00ae") + buf.write("\7c\2\2\u00ae\u00af\7u\2\2\u00af\f\3\2\2\2\u00b0\u00b1") + buf.write("\7u\2\2\u00b1\u00b2\7m\2\2\u00b2\u00b3\7k\2\2\u00b3\u00b4") + buf.write("\7r\2\2\u00b4\16\3\2\2\2\u00b5\u00b6\7r\2\2\u00b6\u00b7") + buf.write("\7t\2\2\u00b7\u00b8\7k\2\2\u00b8\u00b9\7p\2\2\u00b9\u00ba") + buf.write("\7v\2\2\u00ba\20\3\2\2\2\u00bb\u00bc\7?\2\2\u00bc\22\3") + buf.write("\2\2\2\u00bd\u00be\7`\2\2\u00be\24\3\2\2\2\u00bf\u00c0") + buf.write("\7,\2\2\u00c0\26\3\2\2\2\u00c1\u00c2\7\61\2\2\u00c2\30") + buf.write("\3\2\2\2\u00c3\u00c4\7\'\2\2\u00c4\32\3\2\2\2\u00c5\u00c6") + buf.write("\7-\2\2\u00c6\34\3\2\2\2\u00c7\u00c8\7/\2\2\u00c8\36\3") + buf.write("\2\2\2\u00c9\u00ca\7>\2\2\u00ca\u00cb\7>\2\2\u00cb \3") + buf.write("\2\2\2\u00cc\u00cd\7@\2\2\u00cd\u00ce\7@\2\2\u00ce\"\3") + buf.write("\2\2\2\u00cf\u00d0\7(\2\2\u00d0$\3\2\2\2\u00d1\u00d2\7") + buf.write("&\2\2\u00d2&\3\2\2\2\u00d3\u00d4\7~\2\2\u00d4(\3\2\2\2") + buf.write("\u00d5\u00d6\7d\2\2\u00d6\u00d7\7t\2\2\u00d7\u00d8\7g") + buf.write("\2\2\u00d8\u00d9\7c\2\2\u00d9\u00da\7m\2\2\u00da*\3\2") + buf.write("\2\2\u00db\u00dc\7e\2\2\u00dc\u00dd\7q\2\2\u00dd\u00de") + buf.write("\7p\2\2\u00de\u00df\7v\2\2\u00df\u00e0\7k\2\2\u00e0\u00e1") + buf.write("\7p\2\2\u00e1\u00e2\7w\2\2\u00e2\u00e3\7g\2\2\u00e3,\3") + buf.write("\2\2\2\u00e4\u00e5\7t\2\2\u00e5\u00e6\7g\2\2\u00e6\u00e7") + buf.write("\7v\2\2\u00e7\u00e8\7w\2\2\u00e8\u00e9\7t\2\2\u00e9\u00ea") + buf.write("\7p\2\2\u00ea.\3\2\2\2\u00eb\u00ec\7.\2\2\u00ec\60\3\2") + buf.write("\2\2\u00ed\u00ee\7k\2\2\u00ee\u00ef\7h\2\2\u00ef\62\3") + buf.write("\2\2\2\u00f0\u00f1\7g\2\2\u00f1\u00f2\7n\2\2\u00f2\u00f3") + buf.write("\7k\2\2\u00f3\u00f4\7h\2\2\u00f4\64\3\2\2\2\u00f5\u00f6") + buf.write("\7g\2\2\u00f6\u00f7\7n\2\2\u00f7\u00f8\7u\2\2\u00f8\u00f9") + buf.write("\7g\2\2\u00f9\66\3\2\2\2\u00fa\u00fb\7y\2\2\u00fb\u00fc") + buf.write("\7j\2\2\u00fc\u00fd\7k\2\2\u00fd\u00fe\7n\2\2\u00fe\u00ff") + buf.write("\7g\2\2\u00ff8\3\2\2\2\u0100\u0101\7w\2\2\u0101\u0102") + buf.write("\7p\2\2\u0102\u0103\7v\2\2\u0103\u0104\7k\2\2\u0104\u0105") + buf.write("\7n\2\2\u0105:\3\2\2\2\u0106\u0107\7h\2\2\u0107\u0108") + buf.write("\7q\2\2\u0108\u0109\7t\2\2\u0109<\3\2\2\2\u010a\u010b") + buf.write("\7k\2\2\u010b\u010c\7p\2\2\u010c>\3\2\2\2\u010d\u010e") + buf.write("\7u\2\2\u010e\u010f\7v\2\2\u010f\u0110\7g\2\2\u0110\u0111") + buf.write("\7r\2\2\u0111@\3\2\2\2\u0112\u0113\7h\2\2\u0113\u0114") + buf.write("\7w\2\2\u0114\u0115\7p\2\2\u0115\u0116\7e\2\2\u0116B\3") + buf.write("\2\2\2\u0117\u0118\7*\2\2\u0118D\3\2\2\2\u0119\u011a\7") + buf.write("+\2\2\u011aF\3\2\2\2\u011b\u011c\7g\2\2\u011c\u011d\7") + buf.write("z\2\2\u011d\u011e\7v\2\2\u011e\u011f\7g\2\2\u011f\u0120") + buf.write("\7t\2\2\u0120\u0121\7p\2\2\u0121H\3\2\2\2\u0122\u0123") + buf.write("\7<\2\2\u0123J\3\2\2\2\u0124\u0125\7f\2\2\u0125\u0126") + buf.write("\7q\2\2\u0126L\3\2\2\2\u0127\u0128\7}\2\2\u0128N\3\2\2") + buf.write("\2\u0129\u012a\7\177\2\2\u012aP\3\2\2\2\u012b\u012c\7") + buf.write("f\2\2\u012c\u012d\7g\2\2\u012d\u012e\7h\2\2\u012eR\3\2") + buf.write("\2\2\u012f\u0130\7]\2\2\u0130T\3\2\2\2\u0131\u0132\7_") + buf.write("\2\2\u0132V\3\2\2\2\u0133\u0134\7\60\2\2\u0134X\3\2\2") + buf.write("\2\u0135\u0136\7\u0080\2\2\u0136Z\3\2\2\2\u0137\u0138") + buf.write("\7\60\2\2\u0138\u0139\7\60\2\2\u0139\\\3\2\2\2\u013a\u013b") + buf.write("\7\60\2\2\u013b\u013c\7\60\2\2\u013c\u013d\7\60\2\2\u013d") + buf.write("^\3\2\2\2\u013e\u013f\7?\2\2\u013f\u0140\7?\2\2\u0140") + buf.write("`\3\2\2\2\u0141\u0142\7#\2\2\u0142\u0143\7?\2\2\u0143") + buf.write("b\3\2\2\2\u0144\u0145\7>\2\2\u0145d\3\2\2\2\u0146\u0147") + buf.write("\7>\2\2\u0147\u0148\7?\2\2\u0148f\3\2\2\2\u0149\u014a") + buf.write("\7@\2\2\u014ah\3\2\2\2\u014b\u014c\7@\2\2\u014c\u014d") + buf.write("\7?\2\2\u014dj\3\2\2\2\u014e\u014f\7p\2\2\u014f\u0150") + buf.write("\7q\2\2\u0150\u0151\7v\2\2\u0151l\3\2\2\2\u0152\u0153") + buf.write("\7c\2\2\u0153\u0154\7p\2\2\u0154\u0155\7f\2\2\u0155n\3") + buf.write("\2\2\2\u0156\u0157\7q\2\2\u0157\u0158\7t\2\2\u0158p\3") + buf.write("\2\2\2\u0159\u015a\7A\2\2\u015ar\3\2\2\2\u015b\u015c\7") + buf.write("v\2\2\u015c\u015d\7t\2\2\u015d\u015e\7w\2\2\u015e\u015f") + buf.write("\7g\2\2\u015ft\3\2\2\2\u0160\u0161\7h\2\2\u0161\u0162") + buf.write("\7c\2\2\u0162\u0163\7n\2\2\u0163\u0164\7u\2\2\u0164\u0165") + buf.write("\7g\2\2\u0165v\3\2\2\2\u0166\u0167\7X\2\2\u0167\u0168") + buf.write("\7q\2\2\u0168\u0169\7k\2\2\u0169\u016a\7f\2\2\u016ax\3") + buf.write("\2\2\2\u016b\u016c\7K\2\2\u016c\u016d\7p\2\2\u016d\u016e") + buf.write("\7v\2\2\u016ez\3\2\2\2\u016f\u0170\7H\2\2\u0170\u0171") + buf.write("\7n\2\2\u0171\u0172\7q\2\2\u0172\u0173\7c\2\2\u0173\u0174") + buf.write("\7v\2\2\u0174|\3\2\2\2\u0175\u0176\7D\2\2\u0176\u0177") + buf.write("\7q\2\2\u0177\u0178\7q\2\2\u0178\u0179\7n\2\2\u0179~\3") + buf.write("\2\2\2\u017a\u017b\7E\2\2\u017b\u017c\7j\2\2\u017c\u017d") + buf.write("\7c\2\2\u017d\u017e\7t\2\2\u017e\u0080\3\2\2\2\u017f\u0180") + buf.write("\7U\2\2\u0180\u0181\7v\2\2\u0181\u0182\7t\2\2\u0182\u0183") + buf.write("\7k\2\2\u0183\u0184\7p\2\2\u0184\u0185\7i\2\2\u0185\u0082") + buf.write("\3\2\2\2\u0186\u0187\7/\2\2\u0187\u0188\7@\2\2\u0188\u0084") + buf.write("\3\2\2\2\u0189\u018b\5\u008fH\2\u018a\u0189\3\2\2\2\u018b") + buf.write("\u018c\3\2\2\2\u018c\u018a\3\2\2\2\u018c\u018d\3\2\2\2") + buf.write("\u018d\u0086\3\2\2\2\u018e\u0190\5\u008fH\2\u018f\u018e") + buf.write("\3\2\2\2\u0190\u0191\3\2\2\2\u0191\u018f\3\2\2\2\u0191") + buf.write("\u0192\3\2\2\2\u0192\u0193\3\2\2\2\u0193\u0195\7\60\2") + buf.write("\2\u0194\u0196\5\u008fH\2\u0195\u0194\3\2\2\2\u0196\u0197") + buf.write("\3\2\2\2\u0197\u0195\3\2\2\2\u0197\u0198\3\2\2\2\u0198") + buf.write("\u01a2\3\2\2\2\u0199\u019b\7g\2\2\u019a\u019c\7/\2\2\u019b") + buf.write("\u019a\3\2\2\2\u019b\u019c\3\2\2\2\u019c\u019e\3\2\2\2") + buf.write("\u019d\u019f\5\u008fH\2\u019e\u019d\3\2\2\2\u019f\u01a0") + buf.write("\3\2\2\2\u01a0\u019e\3\2\2\2\u01a0\u01a1\3\2\2\2\u01a1") + buf.write("\u01a3\3\2\2\2\u01a2\u0199\3\2\2\2\u01a2\u01a3\3\2\2\2") + buf.write("\u01a3\u0088\3\2\2\2\u01a4\u01aa\7)\2\2\u01a5\u01a9\n") + buf.write("\2\2\2\u01a6\u01a7\7^\2\2\u01a7\u01a9\t\3\2\2\u01a8\u01a5") + buf.write("\3\2\2\2\u01a8\u01a6\3\2\2\2\u01a9\u01ac\3\2\2\2\u01aa") + buf.write("\u01a8\3\2\2\2\u01aa\u01ab\3\2\2\2\u01ab\u01ad\3\2\2\2") + buf.write("\u01ac\u01aa\3\2\2\2\u01ad\u01ae\7)\2\2\u01ae\u008a\3") + buf.write("\2\2\2\u01af\u01b5\7$\2\2\u01b0\u01b4\n\4\2\2\u01b1\u01b2") + buf.write("\7^\2\2\u01b2\u01b4\t\5\2\2\u01b3\u01b0\3\2\2\2\u01b3") + buf.write("\u01b1\3\2\2\2\u01b4\u01b7\3\2\2\2\u01b5\u01b3\3\2\2\2") + buf.write("\u01b5\u01b6\3\2\2\2\u01b6\u01b8\3\2\2\2\u01b7\u01b5\3") + buf.write("\2\2\2\u01b8\u01b9\7$\2\2\u01b9\u008c\3\2\2\2\u01ba\u01be") + buf.write("\5\u0091I\2\u01bb\u01bd\5\u0093J\2\u01bc\u01bb\3\2\2\2") + buf.write("\u01bd\u01c0\3\2\2\2\u01be\u01bc\3\2\2\2\u01be\u01bf\3") + buf.write("\2\2\2\u01bf\u008e\3\2\2\2\u01c0\u01be\3\2\2\2\u01c1\u01c2") + buf.write("\t\6\2\2\u01c2\u0090\3\2\2\2\u01c3\u01c4\t\7\2\2\u01c4") + buf.write("\u0092\3\2\2\2\u01c5\u01c9\5\u0091I\2\u01c6\u01c9\5\u008f") + buf.write("H\2\u01c7\u01c9\t\b\2\2\u01c8\u01c5\3\2\2\2\u01c8\u01c6") + buf.write("\3\2\2\2\u01c8\u01c7\3\2\2\2\u01c9\u0094\3\2\2\2\u01ca") + buf.write("\u01cb\7/\2\2\u01cb\u01cc\7/\2\2\u01cc\u01d0\3\2\2\2\u01cd") + buf.write("\u01cf\n\t\2\2\u01ce\u01cd\3\2\2\2\u01cf\u01d2\3\2\2\2") + buf.write("\u01d0\u01ce\3\2\2\2\u01d0\u01d1\3\2\2\2\u01d1\u01d3\3") + buf.write("\2\2\2\u01d2\u01d0\3\2\2\2\u01d3\u01d4\bK\2\2\u01d4\u0096") + buf.write("\3\2\2\2\u01d5\u01d7\t\n\2\2\u01d6\u01d5\3\2\2\2\u01d7") + buf.write("\u01d8\3\2\2\2\u01d8\u01d6\3\2\2\2\u01d8\u01d9\3\2\2\2") + buf.write("\u01d9\u01da\3\2\2\2\u01da\u01db\bL\2\2\u01db\u0098\3") + buf.write("\2\2\2\u01dc\u01dd\13\2\2\2\u01dd\u009a\3\2\2\2\21\2\u018c") + buf.write("\u0191\u0197\u019b\u01a0\u01a2\u01a8\u01aa\u01b3\u01b5") + buf.write("\u01be\u01c8\u01d0\u01d8\3\b\2\2") return buf.getvalue() @@ -270,29 +281,33 @@ class PyxellLexer(Lexer): T__58 = 59 T__59 = 60 T__60 = 61 - INT = 62 - FLOAT = 63 - CHAR = 64 - STRING = 65 - ID = 66 - COMMENT = 67 - WS = 68 - ERR = 69 + T__61 = 62 + T__62 = 63 + T__63 = 64 + T__64 = 65 + INT = 66 + FLOAT = 67 + CHAR = 68 + STRING = 69 + ID = 70 + COMMENT = 71 + WS = 72 + ERR = 73 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] modeNames = [ "DEFAULT_MODE" ] literalNames = [ "", - "';'", "'skip'", "'print'", "'='", "'^'", "'*'", "'/'", "'%'", - "'+'", "'-'", "'<<'", "'>>'", "'&'", "'$'", "'|'", "'break'", - "'continue'", "'return'", "','", "'if'", "'elif'", "'else'", - "'while'", "'until'", "'for'", "'in'", "'step'", "'func'", "'('", - "')'", "'extern'", "':'", "'do'", "'{'", "'}'", "'def'", "'['", - "']'", "'.'", "'~'", "'..'", "'...'", "'=='", "'!='", "'<'", - "'<='", "'>'", "'>='", "'not'", "'and'", "'or'", "'?'", "'true'", - "'false'", "'Void'", "'Int'", "'Float'", "'Bool'", "'Char'", - "'String'", "'->'" ] + "';'", "'use'", "'only'", "'hiding'", "'as'", "'skip'", "'print'", + "'='", "'^'", "'*'", "'/'", "'%'", "'+'", "'-'", "'<<'", "'>>'", + "'&'", "'$'", "'|'", "'break'", "'continue'", "'return'", "','", + "'if'", "'elif'", "'else'", "'while'", "'until'", "'for'", "'in'", + "'step'", "'func'", "'('", "')'", "'extern'", "':'", "'do'", + "'{'", "'}'", "'def'", "'['", "']'", "'.'", "'~'", "'..'", "'...'", + "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", "'not'", "'and'", + "'or'", "'?'", "'true'", "'false'", "'Void'", "'Int'", "'Float'", + "'Bool'", "'Char'", "'String'", "'->'" ] symbolicNames = [ "", "INT", "FLOAT", "CHAR", "STRING", "ID", "COMMENT", "WS", "ERR" ] @@ -306,9 +321,10 @@ class PyxellLexer(Lexer): "T__38", "T__39", "T__40", "T__41", "T__42", "T__43", "T__44", "T__45", "T__46", "T__47", "T__48", "T__49", "T__50", "T__51", "T__52", "T__53", "T__54", "T__55", - "T__56", "T__57", "T__58", "T__59", "T__60", "INT", "FLOAT", - "CHAR", "STRING", "ID", "DIGIT", "ID_START", "ID_CONT", - "COMMENT", "WS", "ERR" ] + "T__56", "T__57", "T__58", "T__59", "T__60", "T__61", + "T__62", "T__63", "T__64", "INT", "FLOAT", "CHAR", "STRING", + "ID", "DIGIT", "ID_START", "ID_CONT", "COMMENT", "WS", + "ERR" ] grammarFileName = "Pyxell.g4" diff --git a/src/antlr/PyxellLexer.tokens b/src/antlr/PyxellLexer.tokens index 0a7a727a..851d08ac 100644 --- a/src/antlr/PyxellLexer.tokens +++ b/src/antlr/PyxellLexer.tokens @@ -59,72 +59,80 @@ T__57=58 T__58=59 T__59=60 T__60=61 -INT=62 -FLOAT=63 -CHAR=64 -STRING=65 -ID=66 -COMMENT=67 -WS=68 -ERR=69 +T__61=62 +T__62=63 +T__63=64 +T__64=65 +INT=66 +FLOAT=67 +CHAR=68 +STRING=69 +ID=70 +COMMENT=71 +WS=72 +ERR=73 ';'=1 -'skip'=2 -'print'=3 -'='=4 -'^'=5 -'*'=6 -'/'=7 -'%'=8 -'+'=9 -'-'=10 -'<<'=11 -'>>'=12 -'&'=13 -'$'=14 -'|'=15 -'break'=16 -'continue'=17 -'return'=18 -','=19 -'if'=20 -'elif'=21 -'else'=22 -'while'=23 -'until'=24 -'for'=25 -'in'=26 -'step'=27 -'func'=28 -'('=29 -')'=30 -'extern'=31 -':'=32 -'do'=33 -'{'=34 -'}'=35 -'def'=36 -'['=37 -']'=38 -'.'=39 -'~'=40 -'..'=41 -'...'=42 -'=='=43 -'!='=44 -'<'=45 -'<='=46 -'>'=47 -'>='=48 -'not'=49 -'and'=50 -'or'=51 -'?'=52 -'true'=53 -'false'=54 -'Void'=55 -'Int'=56 -'Float'=57 -'Bool'=58 -'Char'=59 -'String'=60 -'->'=61 +'use'=2 +'only'=3 +'hiding'=4 +'as'=5 +'skip'=6 +'print'=7 +'='=8 +'^'=9 +'*'=10 +'/'=11 +'%'=12 +'+'=13 +'-'=14 +'<<'=15 +'>>'=16 +'&'=17 +'$'=18 +'|'=19 +'break'=20 +'continue'=21 +'return'=22 +','=23 +'if'=24 +'elif'=25 +'else'=26 +'while'=27 +'until'=28 +'for'=29 +'in'=30 +'step'=31 +'func'=32 +'('=33 +')'=34 +'extern'=35 +':'=36 +'do'=37 +'{'=38 +'}'=39 +'def'=40 +'['=41 +']'=42 +'.'=43 +'~'=44 +'..'=45 +'...'=46 +'=='=47 +'!='=48 +'<'=49 +'<='=50 +'>'=51 +'>='=52 +'not'=53 +'and'=54 +'or'=55 +'?'=56 +'true'=57 +'false'=58 +'Void'=59 +'Int'=60 +'Float'=61 +'Bool'=62 +'Char'=63 +'String'=64 +'->'=65 diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index f023787b..48bc8a35 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -8,152 +8,163 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3G") - buf.write("\u0139\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3K") + buf.write("\u014e\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16") - buf.write("\t\16\4\17\t\17\3\2\7\2 \n\2\f\2\16\2#\13\2\3\2\3\2\3") - buf.write("\3\3\3\3\3\3\3\5\3+\n\3\3\4\3\4\3\4\5\4\60\n\4\3\4\3\4") - buf.write("\3\4\3\4\5\4\66\n\4\3\4\3\4\3\4\7\4;\n\4\f\4\16\4>\13") - buf.write("\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\5\4I\n\4\5\4K\n") - buf.write("\4\3\5\3\5\3\5\7\5P\n\5\f\5\16\5S\13\5\3\6\3\6\3\6\3\6") - buf.write("\3\6\3\6\3\6\7\6\\\n\6\f\6\16\6_\13\6\3\6\3\6\5\6c\n\6") - buf.write("\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3") - buf.write("\6\5\6s\n\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\7\6}\n\6\f") - buf.write("\6\16\6\u0080\13\6\3\6\5\6\u0083\n\6\3\6\3\6\5\6\u0087") - buf.write("\n\6\3\6\3\6\3\6\5\6\u008c\n\6\5\6\u008e\n\6\3\7\3\7\3") - buf.write("\7\3\7\5\7\u0094\n\7\3\b\3\b\3\b\6\b\u0099\n\b\r\b\16") - buf.write("\b\u009a\3\b\3\b\3\t\3\t\3\t\6\t\u00a2\n\t\r\t\16\t\u00a3") - buf.write("\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\5\n\u00b2") - buf.write("\n\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3") + buf.write("\t\16\4\17\t\17\4\20\t\20\3\2\7\2\"\n\2\f\2\16\2%\13\2") + buf.write("\3\2\3\2\3\3\3\3\3\3\3\3\5\3-\n\3\3\4\3\4\3\4\3\4\3\4") + buf.write("\3\4\3\4\3\4\5\4\67\n\4\3\4\3\4\3\4\5\4<\n\4\3\4\3\4\3") + buf.write("\4\3\4\5\4B\n\4\3\4\3\4\3\4\7\4G\n\4\f\4\16\4J\13\4\3") + buf.write("\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\5\4U\n\4\5\4W\n\4\3") + buf.write("\5\3\5\3\5\7\5\\\n\5\f\5\16\5_\13\5\3\6\3\6\3\6\3\6\3") + buf.write("\6\3\6\3\6\7\6h\n\6\f\6\16\6k\13\6\3\6\3\6\5\6o\n\6\3") + buf.write("\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6") + buf.write("\5\6\177\n\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\7\6\u0089") + buf.write("\n\6\f\6\16\6\u008c\13\6\3\6\5\6\u008f\n\6\3\6\3\6\5\6") + buf.write("\u0093\n\6\3\6\3\6\3\6\5\6\u0098\n\6\5\6\u009a\n\6\3\7") + buf.write("\3\7\3\7\3\7\5\7\u00a0\n\7\3\b\3\b\3\b\6\b\u00a5\n\b\r") + buf.write("\b\16\b\u00a6\3\b\3\b\3\t\3\t\3\t\6\t\u00ae\n\t\r\t\16") + buf.write("\t\u00af\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3") + buf.write("\n\5\n\u00be\n\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3") buf.write("\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n") buf.write("\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3") - buf.write("\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\7\n") - buf.write("\u00e8\n\n\f\n\16\n\u00eb\13\n\3\n\5\n\u00ee\n\n\3\n\3") - buf.write("\n\3\n\7\n\u00f3\n\n\f\n\16\n\u00f6\13\n\3\13\3\13\3\13") - buf.write("\7\13\u00fb\n\13\f\13\16\13\u00fe\13\13\3\13\3\13\3\f") - buf.write("\3\f\3\f\3\r\3\r\5\r\u0107\n\r\3\r\3\r\3\16\3\16\3\16") - buf.write("\3\16\3\16\3\16\3\16\3\16\3\16\7\16\u0114\n\16\f\16\16") - buf.write("\16\u0117\13\16\3\16\5\16\u011a\n\16\3\16\3\16\5\16\u011e") - buf.write("\n\16\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17") - buf.write("\3\17\3\17\5\17\u012c\n\17\3\17\3\17\3\17\3\17\3\17\3") - buf.write("\17\7\17\u0134\n\17\f\17\16\17\u0137\13\17\3\17\2\4\22") - buf.write("\34\20\2\4\6\b\n\f\16\20\22\24\26\30\32\34\2\f\3\2\7\21") - buf.write("\3\2\22\23\4\2\13\f**\3\2\b\n\3\2\13\f\3\2\r\16\3\2+,") - buf.write("\3\2-\62\3\2\678\3\29>\2\u0169\2!\3\2\2\2\4*\3\2\2\2\6") - buf.write("J\3\2\2\2\bL\3\2\2\2\n\u008d\3\2\2\2\f\u008f\3\2\2\2\16") - buf.write("\u0095\3\2\2\2\20\u009e\3\2\2\2\22\u00b1\3\2\2\2\24\u00fc") - buf.write("\3\2\2\2\26\u0101\3\2\2\2\30\u0106\3\2\2\2\32\u011d\3") - buf.write("\2\2\2\34\u012b\3\2\2\2\36 \5\4\3\2\37\36\3\2\2\2 #\3") - buf.write("\2\2\2!\37\3\2\2\2!\"\3\2\2\2\"$\3\2\2\2#!\3\2\2\2$%\7") - buf.write("\2\2\3%\3\3\2\2\2&\'\5\6\4\2\'(\7\3\2\2(+\3\2\2\2)+\5") - buf.write("\n\6\2*&\3\2\2\2*)\3\2\2\2+\5\3\2\2\2,K\7\4\2\2-/\7\5") - buf.write("\2\2.\60\5\24\13\2/.\3\2\2\2/\60\3\2\2\2\60K\3\2\2\2\61") - buf.write("\62\5\34\17\2\62\65\7D\2\2\63\64\7\6\2\2\64\66\5\24\13") - buf.write("\2\65\63\3\2\2\2\65\66\3\2\2\2\66K\3\2\2\2\678\5\b\5\2") - buf.write("89\7\6\2\29;\3\2\2\2:\67\3\2\2\2;>\3\2\2\2<:\3\2\2\2<") - buf.write("=\3\2\2\2=?\3\2\2\2><\3\2\2\2?K\5\24\13\2@A\5\22\n\2A") - buf.write("B\t\2\2\2BC\7\6\2\2CD\5\22\n\2DK\3\2\2\2EK\t\3\2\2FH\7") - buf.write("\24\2\2GI\5\24\13\2HG\3\2\2\2HI\3\2\2\2IK\3\2\2\2J,\3") - buf.write("\2\2\2J-\3\2\2\2J\61\3\2\2\2J<\3\2\2\2J@\3\2\2\2JE\3\2") - buf.write("\2\2JF\3\2\2\2K\7\3\2\2\2LQ\5\22\n\2MN\7\25\2\2NP\5\22") - buf.write("\n\2OM\3\2\2\2PS\3\2\2\2QO\3\2\2\2QR\3\2\2\2R\t\3\2\2") - buf.write("\2SQ\3\2\2\2TU\7\26\2\2UV\5\22\n\2V]\5\16\b\2WX\7\27\2") - buf.write("\2XY\5\22\n\2YZ\5\16\b\2Z\\\3\2\2\2[W\3\2\2\2\\_\3\2\2") - buf.write("\2][\3\2\2\2]^\3\2\2\2^b\3\2\2\2_]\3\2\2\2`a\7\30\2\2") - buf.write("ac\5\16\b\2b`\3\2\2\2bc\3\2\2\2c\u008e\3\2\2\2de\7\31") - buf.write("\2\2ef\5\22\n\2fg\5\16\b\2g\u008e\3\2\2\2hi\7\32\2\2i") - buf.write("j\5\22\n\2jk\5\16\b\2k\u008e\3\2\2\2lm\7\33\2\2mn\5\24") - buf.write("\13\2no\7\34\2\2or\5\24\13\2pq\7\35\2\2qs\5\24\13\2rp") - buf.write("\3\2\2\2rs\3\2\2\2st\3\2\2\2tu\5\16\b\2u\u008e\3\2\2\2") - buf.write("vw\7\36\2\2wx\7D\2\2x~\7\37\2\2yz\5\f\7\2z{\7\25\2\2{") - buf.write("}\3\2\2\2|y\3\2\2\2}\u0080\3\2\2\2~|\3\2\2\2~\177\3\2") - buf.write("\2\2\177\u0082\3\2\2\2\u0080~\3\2\2\2\u0081\u0083\5\f") - buf.write("\7\2\u0082\u0081\3\2\2\2\u0082\u0083\3\2\2\2\u0083\u0084") - buf.write("\3\2\2\2\u0084\u0086\7 \2\2\u0085\u0087\5\34\17\2\u0086") - buf.write("\u0085\3\2\2\2\u0086\u0087\3\2\2\2\u0087\u008b\3\2\2\2") - buf.write("\u0088\u008c\5\20\t\2\u0089\u008a\7!\2\2\u008a\u008c\7") - buf.write("\3\2\2\u008b\u0088\3\2\2\2\u008b\u0089\3\2\2\2\u008c\u008e") - buf.write("\3\2\2\2\u008dT\3\2\2\2\u008dd\3\2\2\2\u008dh\3\2\2\2") - buf.write("\u008dl\3\2\2\2\u008dv\3\2\2\2\u008e\13\3\2\2\2\u008f") - buf.write("\u0090\5\34\17\2\u0090\u0093\7D\2\2\u0091\u0092\7\"\2") - buf.write("\2\u0092\u0094\5\22\n\2\u0093\u0091\3\2\2\2\u0093\u0094") - buf.write("\3\2\2\2\u0094\r\3\2\2\2\u0095\u0096\7#\2\2\u0096\u0098") - buf.write("\7$\2\2\u0097\u0099\5\4\3\2\u0098\u0097\3\2\2\2\u0099") - buf.write("\u009a\3\2\2\2\u009a\u0098\3\2\2\2\u009a\u009b\3\2\2\2") - buf.write("\u009b\u009c\3\2\2\2\u009c\u009d\7%\2\2\u009d\17\3\2\2") - buf.write("\2\u009e\u009f\7&\2\2\u009f\u00a1\7$\2\2\u00a0\u00a2\5") - buf.write("\4\3\2\u00a1\u00a0\3\2\2\2\u00a2\u00a3\3\2\2\2\u00a3\u00a1") - buf.write("\3\2\2\2\u00a3\u00a4\3\2\2\2\u00a4\u00a5\3\2\2\2\u00a5") - buf.write("\u00a6\7%\2\2\u00a6\21\3\2\2\2\u00a7\u00a8\b\n\1\2\u00a8") - buf.write("\u00b2\5\32\16\2\u00a9\u00aa\7\37\2\2\u00aa\u00ab\5\24") - buf.write("\13\2\u00ab\u00ac\7 \2\2\u00ac\u00b2\3\2\2\2\u00ad\u00ae") - buf.write("\t\4\2\2\u00ae\u00b2\5\22\n\20\u00af\u00b0\7\63\2\2\u00b0") - buf.write("\u00b2\5\22\n\6\u00b1\u00a7\3\2\2\2\u00b1\u00a9\3\2\2") - buf.write("\2\u00b1\u00ad\3\2\2\2\u00b1\u00af\3\2\2\2\u00b2\u00f4") - buf.write("\3\2\2\2\u00b3\u00b4\f\21\2\2\u00b4\u00b5\7\7\2\2\u00b5") - buf.write("\u00f3\5\22\n\21\u00b6\u00b7\f\17\2\2\u00b7\u00b8\t\5") - buf.write("\2\2\u00b8\u00f3\5\22\n\20\u00b9\u00ba\f\16\2\2\u00ba") - buf.write("\u00bb\t\6\2\2\u00bb\u00f3\5\22\n\17\u00bc\u00bd\f\r\2") - buf.write("\2\u00bd\u00be\t\7\2\2\u00be\u00f3\5\22\n\16\u00bf\u00c0") - buf.write("\f\f\2\2\u00c0\u00c1\7\17\2\2\u00c1\u00f3\5\22\n\r\u00c2") - buf.write("\u00c3\f\13\2\2\u00c3\u00c4\7\20\2\2\u00c4\u00f3\5\22") - buf.write("\n\f\u00c5\u00c6\f\n\2\2\u00c6\u00c7\7\21\2\2\u00c7\u00f3") - buf.write("\5\22\n\13\u00c8\u00c9\f\t\2\2\u00c9\u00ca\t\b\2\2\u00ca") - buf.write("\u00f3\5\22\n\n\u00cb\u00cc\f\7\2\2\u00cc\u00cd\t\t\2") - buf.write("\2\u00cd\u00f3\5\22\n\7\u00ce\u00cf\f\5\2\2\u00cf\u00d0") - buf.write("\7\64\2\2\u00d0\u00f3\5\22\n\5\u00d1\u00d2\f\4\2\2\u00d2") - buf.write("\u00d3\7\65\2\2\u00d3\u00f3\5\22\n\4\u00d4\u00d5\f\3\2") - buf.write("\2\u00d5\u00d6\7\66\2\2\u00d6\u00d7\5\22\n\2\u00d7\u00d8") - buf.write("\7\"\2\2\u00d8\u00d9\5\22\n\3\u00d9\u00f3\3\2\2\2\u00da") - buf.write("\u00db\f\24\2\2\u00db\u00dc\7\'\2\2\u00dc\u00dd\5\22\n") - buf.write("\2\u00dd\u00de\7(\2\2\u00de\u00f3\3\2\2\2\u00df\u00e0") - buf.write("\f\23\2\2\u00e0\u00e1\7)\2\2\u00e1\u00f3\7D\2\2\u00e2") - buf.write("\u00e3\f\22\2\2\u00e3\u00e9\7\37\2\2\u00e4\u00e5\5\30") - buf.write("\r\2\u00e5\u00e6\7\25\2\2\u00e6\u00e8\3\2\2\2\u00e7\u00e4") - buf.write("\3\2\2\2\u00e8\u00eb\3\2\2\2\u00e9\u00e7\3\2\2\2\u00e9") - buf.write("\u00ea\3\2\2\2\u00ea\u00ed\3\2\2\2\u00eb\u00e9\3\2\2\2") - buf.write("\u00ec\u00ee\5\30\r\2\u00ed\u00ec\3\2\2\2\u00ed\u00ee") - buf.write("\3\2\2\2\u00ee\u00ef\3\2\2\2\u00ef\u00f3\7 \2\2\u00f0") - buf.write("\u00f1\f\b\2\2\u00f1\u00f3\7,\2\2\u00f2\u00b3\3\2\2\2") - buf.write("\u00f2\u00b6\3\2\2\2\u00f2\u00b9\3\2\2\2\u00f2\u00bc\3") - buf.write("\2\2\2\u00f2\u00bf\3\2\2\2\u00f2\u00c2\3\2\2\2\u00f2\u00c5") - buf.write("\3\2\2\2\u00f2\u00c8\3\2\2\2\u00f2\u00cb\3\2\2\2\u00f2") - buf.write("\u00ce\3\2\2\2\u00f2\u00d1\3\2\2\2\u00f2\u00d4\3\2\2\2") - buf.write("\u00f2\u00da\3\2\2\2\u00f2\u00df\3\2\2\2\u00f2\u00e2\3") - buf.write("\2\2\2\u00f2\u00f0\3\2\2\2\u00f3\u00f6\3\2\2\2\u00f4\u00f2") - buf.write("\3\2\2\2\u00f4\u00f5\3\2\2\2\u00f5\23\3\2\2\2\u00f6\u00f4") - buf.write("\3\2\2\2\u00f7\u00f8\5\22\n\2\u00f8\u00f9\7\25\2\2\u00f9") - buf.write("\u00fb\3\2\2\2\u00fa\u00f7\3\2\2\2\u00fb\u00fe\3\2\2\2") - buf.write("\u00fc\u00fa\3\2\2\2\u00fc\u00fd\3\2\2\2\u00fd\u00ff\3") - buf.write("\2\2\2\u00fe\u00fc\3\2\2\2\u00ff\u0100\5\22\n\2\u0100") - buf.write("\25\3\2\2\2\u0101\u0102\5\24\13\2\u0102\u0103\7\2\2\3") - buf.write("\u0103\27\3\2\2\2\u0104\u0105\7D\2\2\u0105\u0107\7\6\2") - buf.write("\2\u0106\u0104\3\2\2\2\u0106\u0107\3\2\2\2\u0107\u0108") - buf.write("\3\2\2\2\u0108\u0109\5\22\n\2\u0109\31\3\2\2\2\u010a\u011e") - buf.write("\7@\2\2\u010b\u011e\7A\2\2\u010c\u011e\t\n\2\2\u010d\u011e") - buf.write("\7B\2\2\u010e\u011e\7C\2\2\u010f\u0115\7\'\2\2\u0110\u0111") - buf.write("\5\22\n\2\u0111\u0112\7\25\2\2\u0112\u0114\3\2\2\2\u0113") - buf.write("\u0110\3\2\2\2\u0114\u0117\3\2\2\2\u0115\u0113\3\2\2\2") - buf.write("\u0115\u0116\3\2\2\2\u0116\u0119\3\2\2\2\u0117\u0115\3") - buf.write("\2\2\2\u0118\u011a\5\22\n\2\u0119\u0118\3\2\2\2\u0119") - buf.write("\u011a\3\2\2\2\u011a\u011b\3\2\2\2\u011b\u011e\7(\2\2") - buf.write("\u011c\u011e\7D\2\2\u011d\u010a\3\2\2\2\u011d\u010b\3") - buf.write("\2\2\2\u011d\u010c\3\2\2\2\u011d\u010d\3\2\2\2\u011d\u010e") - buf.write("\3\2\2\2\u011d\u010f\3\2\2\2\u011d\u011c\3\2\2\2\u011e") - buf.write("\33\3\2\2\2\u011f\u0120\b\17\1\2\u0120\u012c\t\13\2\2") - buf.write("\u0121\u0122\7\37\2\2\u0122\u0123\5\34\17\2\u0123\u0124") - buf.write("\7 \2\2\u0124\u012c\3\2\2\2\u0125\u0126\7\'\2\2\u0126") - buf.write("\u0127\5\34\17\2\u0127\u0128\7(\2\2\u0128\u012c\3\2\2") - buf.write("\2\u0129\u012a\7?\2\2\u012a\u012c\5\34\17\3\u012b\u011f") - buf.write("\3\2\2\2\u012b\u0121\3\2\2\2\u012b\u0125\3\2\2\2\u012b") - buf.write("\u0129\3\2\2\2\u012c\u0135\3\2\2\2\u012d\u012e\f\5\2\2") - buf.write("\u012e\u012f\7\b\2\2\u012f\u0134\5\34\17\5\u0130\u0131") - buf.write("\f\4\2\2\u0131\u0132\7?\2\2\u0132\u0134\5\34\17\4\u0133") - buf.write("\u012d\3\2\2\2\u0133\u0130\3\2\2\2\u0134\u0137\3\2\2\2") - buf.write("\u0135\u0133\3\2\2\2\u0135\u0136\3\2\2\2\u0136\35\3\2") - buf.write("\2\2\u0137\u0135\3\2\2\2\"!*/\65\5\36\20\2") + buf.write(">A\7H\2\2?@\7\n\2\2@B\5\24\13\2A?\3\2\2\2AB\3\2\2\2BW") + buf.write("\3\2\2\2CD\5\b\5\2DE\7\n\2\2EG\3\2\2\2FC\3\2\2\2GJ\3\2") + buf.write("\2\2HF\3\2\2\2HI\3\2\2\2IK\3\2\2\2JH\3\2\2\2KW\5\24\13") + buf.write("\2LM\5\22\n\2MN\t\2\2\2NO\7\n\2\2OP\5\22\n\2PW\3\2\2\2") + buf.write("QW\t\3\2\2RT\7\30\2\2SU\5\24\13\2TS\3\2\2\2TU\3\2\2\2") + buf.write("UW\3\2\2\2V.\3\2\2\2V8\3\2\2\2V9\3\2\2\2V=\3\2\2\2VH\3") + buf.write("\2\2\2VL\3\2\2\2VQ\3\2\2\2VR\3\2\2\2W\7\3\2\2\2X]\5\22") + buf.write("\n\2YZ\7\31\2\2Z\\\5\22\n\2[Y\3\2\2\2\\_\3\2\2\2][\3\2") + buf.write("\2\2]^\3\2\2\2^\t\3\2\2\2_]\3\2\2\2`a\7\32\2\2ab\5\22") + buf.write("\n\2bi\5\16\b\2cd\7\33\2\2de\5\22\n\2ef\5\16\b\2fh\3\2") + buf.write("\2\2gc\3\2\2\2hk\3\2\2\2ig\3\2\2\2ij\3\2\2\2jn\3\2\2\2") + buf.write("ki\3\2\2\2lm\7\34\2\2mo\5\16\b\2nl\3\2\2\2no\3\2\2\2o") + buf.write("\u009a\3\2\2\2pq\7\35\2\2qr\5\22\n\2rs\5\16\b\2s\u009a") + buf.write("\3\2\2\2tu\7\36\2\2uv\5\22\n\2vw\5\16\b\2w\u009a\3\2\2") + buf.write("\2xy\7\37\2\2yz\5\24\13\2z{\7 \2\2{~\5\24\13\2|}\7!\2") + buf.write("\2}\177\5\24\13\2~|\3\2\2\2~\177\3\2\2\2\177\u0080\3\2") + buf.write("\2\2\u0080\u0081\5\16\b\2\u0081\u009a\3\2\2\2\u0082\u0083") + buf.write("\7\"\2\2\u0083\u0084\7H\2\2\u0084\u008a\7#\2\2\u0085\u0086") + buf.write("\5\f\7\2\u0086\u0087\7\31\2\2\u0087\u0089\3\2\2\2\u0088") + buf.write("\u0085\3\2\2\2\u0089\u008c\3\2\2\2\u008a\u0088\3\2\2\2") + buf.write("\u008a\u008b\3\2\2\2\u008b\u008e\3\2\2\2\u008c\u008a\3") + buf.write("\2\2\2\u008d\u008f\5\f\7\2\u008e\u008d\3\2\2\2\u008e\u008f") + buf.write("\3\2\2\2\u008f\u0090\3\2\2\2\u0090\u0092\7$\2\2\u0091") + buf.write("\u0093\5\36\20\2\u0092\u0091\3\2\2\2\u0092\u0093\3\2\2") + buf.write("\2\u0093\u0097\3\2\2\2\u0094\u0098\5\20\t\2\u0095\u0096") + buf.write("\7%\2\2\u0096\u0098\7\3\2\2\u0097\u0094\3\2\2\2\u0097") + buf.write("\u0095\3\2\2\2\u0098\u009a\3\2\2\2\u0099`\3\2\2\2\u0099") + buf.write("p\3\2\2\2\u0099t\3\2\2\2\u0099x\3\2\2\2\u0099\u0082\3") + buf.write("\2\2\2\u009a\13\3\2\2\2\u009b\u009c\5\36\20\2\u009c\u009f") + buf.write("\7H\2\2\u009d\u009e\7&\2\2\u009e\u00a0\5\22\n\2\u009f") + buf.write("\u009d\3\2\2\2\u009f\u00a0\3\2\2\2\u00a0\r\3\2\2\2\u00a1") + buf.write("\u00a2\7\'\2\2\u00a2\u00a4\7(\2\2\u00a3\u00a5\5\4\3\2") + buf.write("\u00a4\u00a3\3\2\2\2\u00a5\u00a6\3\2\2\2\u00a6\u00a4\3") + buf.write("\2\2\2\u00a6\u00a7\3\2\2\2\u00a7\u00a8\3\2\2\2\u00a8\u00a9") + buf.write("\7)\2\2\u00a9\17\3\2\2\2\u00aa\u00ab\7*\2\2\u00ab\u00ad") + buf.write("\7(\2\2\u00ac\u00ae\5\4\3\2\u00ad\u00ac\3\2\2\2\u00ae") + buf.write("\u00af\3\2\2\2\u00af\u00ad\3\2\2\2\u00af\u00b0\3\2\2\2") + buf.write("\u00b0\u00b1\3\2\2\2\u00b1\u00b2\7)\2\2\u00b2\21\3\2\2") + buf.write("\2\u00b3\u00b4\b\n\1\2\u00b4\u00be\5\32\16\2\u00b5\u00b6") + buf.write("\7#\2\2\u00b6\u00b7\5\24\13\2\u00b7\u00b8\7$\2\2\u00b8") + buf.write("\u00be\3\2\2\2\u00b9\u00ba\t\4\2\2\u00ba\u00be\5\22\n") + buf.write("\20\u00bb\u00bc\7\67\2\2\u00bc\u00be\5\22\n\6\u00bd\u00b3") + buf.write("\3\2\2\2\u00bd\u00b5\3\2\2\2\u00bd\u00b9\3\2\2\2\u00bd") + buf.write("\u00bb\3\2\2\2\u00be\u0100\3\2\2\2\u00bf\u00c0\f\21\2") + buf.write("\2\u00c0\u00c1\7\13\2\2\u00c1\u00ff\5\22\n\21\u00c2\u00c3") + buf.write("\f\17\2\2\u00c3\u00c4\t\5\2\2\u00c4\u00ff\5\22\n\20\u00c5") + buf.write("\u00c6\f\16\2\2\u00c6\u00c7\t\6\2\2\u00c7\u00ff\5\22\n") + buf.write("\17\u00c8\u00c9\f\r\2\2\u00c9\u00ca\t\7\2\2\u00ca\u00ff") + buf.write("\5\22\n\16\u00cb\u00cc\f\f\2\2\u00cc\u00cd\7\23\2\2\u00cd") + buf.write("\u00ff\5\22\n\r\u00ce\u00cf\f\13\2\2\u00cf\u00d0\7\24") + buf.write("\2\2\u00d0\u00ff\5\22\n\f\u00d1\u00d2\f\n\2\2\u00d2\u00d3") + buf.write("\7\25\2\2\u00d3\u00ff\5\22\n\13\u00d4\u00d5\f\t\2\2\u00d5") + buf.write("\u00d6\t\b\2\2\u00d6\u00ff\5\22\n\n\u00d7\u00d8\f\7\2") + buf.write("\2\u00d8\u00d9\t\t\2\2\u00d9\u00ff\5\22\n\7\u00da\u00db") + buf.write("\f\5\2\2\u00db\u00dc\78\2\2\u00dc\u00ff\5\22\n\5\u00dd") + buf.write("\u00de\f\4\2\2\u00de\u00df\79\2\2\u00df\u00ff\5\22\n\4") + buf.write("\u00e0\u00e1\f\3\2\2\u00e1\u00e2\7:\2\2\u00e2\u00e3\5") + buf.write("\22\n\2\u00e3\u00e4\7&\2\2\u00e4\u00e5\5\22\n\3\u00e5") + buf.write("\u00ff\3\2\2\2\u00e6\u00e7\f\24\2\2\u00e7\u00e8\7+\2\2") + buf.write("\u00e8\u00e9\5\22\n\2\u00e9\u00ea\7,\2\2\u00ea\u00ff\3") + buf.write("\2\2\2\u00eb\u00ec\f\23\2\2\u00ec\u00ed\7-\2\2\u00ed\u00ff") + buf.write("\7H\2\2\u00ee\u00ef\f\22\2\2\u00ef\u00f5\7#\2\2\u00f0") + buf.write("\u00f1\5\30\r\2\u00f1\u00f2\7\31\2\2\u00f2\u00f4\3\2\2") + buf.write("\2\u00f3\u00f0\3\2\2\2\u00f4\u00f7\3\2\2\2\u00f5\u00f3") + buf.write("\3\2\2\2\u00f5\u00f6\3\2\2\2\u00f6\u00f9\3\2\2\2\u00f7") + buf.write("\u00f5\3\2\2\2\u00f8\u00fa\5\30\r\2\u00f9\u00f8\3\2\2") + buf.write("\2\u00f9\u00fa\3\2\2\2\u00fa\u00fb\3\2\2\2\u00fb\u00ff") + buf.write("\7$\2\2\u00fc\u00fd\f\b\2\2\u00fd\u00ff\7\60\2\2\u00fe") + buf.write("\u00bf\3\2\2\2\u00fe\u00c2\3\2\2\2\u00fe\u00c5\3\2\2\2") + buf.write("\u00fe\u00c8\3\2\2\2\u00fe\u00cb\3\2\2\2\u00fe\u00ce\3") + buf.write("\2\2\2\u00fe\u00d1\3\2\2\2\u00fe\u00d4\3\2\2\2\u00fe\u00d7") + buf.write("\3\2\2\2\u00fe\u00da\3\2\2\2\u00fe\u00dd\3\2\2\2\u00fe") + buf.write("\u00e0\3\2\2\2\u00fe\u00e6\3\2\2\2\u00fe\u00eb\3\2\2\2") + buf.write("\u00fe\u00ee\3\2\2\2\u00fe\u00fc\3\2\2\2\u00ff\u0102\3") + buf.write("\2\2\2\u0100\u00fe\3\2\2\2\u0100\u0101\3\2\2\2\u0101\23") + buf.write("\3\2\2\2\u0102\u0100\3\2\2\2\u0103\u0104\5\22\n\2\u0104") + buf.write("\u0105\7\31\2\2\u0105\u0107\3\2\2\2\u0106\u0103\3\2\2") + buf.write("\2\u0107\u010a\3\2\2\2\u0108\u0106\3\2\2\2\u0108\u0109") + buf.write("\3\2\2\2\u0109\u010b\3\2\2\2\u010a\u0108\3\2\2\2\u010b") + buf.write("\u010c\5\22\n\2\u010c\25\3\2\2\2\u010d\u010e\5\24\13\2") + buf.write("\u010e\u010f\7\2\2\3\u010f\27\3\2\2\2\u0110\u0111\7H\2") + buf.write("\2\u0111\u0113\7\n\2\2\u0112\u0110\3\2\2\2\u0112\u0113") + buf.write("\3\2\2\2\u0113\u0114\3\2\2\2\u0114\u0115\5\22\n\2\u0115") + buf.write("\31\3\2\2\2\u0116\u012a\7D\2\2\u0117\u012a\7E\2\2\u0118") + buf.write("\u012a\t\n\2\2\u0119\u012a\7F\2\2\u011a\u012a\7G\2\2\u011b") + buf.write("\u0121\7+\2\2\u011c\u011d\5\22\n\2\u011d\u011e\7\31\2") + buf.write("\2\u011e\u0120\3\2\2\2\u011f\u011c\3\2\2\2\u0120\u0123") + buf.write("\3\2\2\2\u0121\u011f\3\2\2\2\u0121\u0122\3\2\2\2\u0122") + buf.write("\u0125\3\2\2\2\u0123\u0121\3\2\2\2\u0124\u0126\5\22\n") + buf.write("\2\u0125\u0124\3\2\2\2\u0125\u0126\3\2\2\2\u0126\u0127") + buf.write("\3\2\2\2\u0127\u012a\7,\2\2\u0128\u012a\7H\2\2\u0129\u0116") + buf.write("\3\2\2\2\u0129\u0117\3\2\2\2\u0129\u0118\3\2\2\2\u0129") + buf.write("\u0119\3\2\2\2\u0129\u011a\3\2\2\2\u0129\u011b\3\2\2\2") + buf.write("\u0129\u0128\3\2\2\2\u012a\33\3\2\2\2\u012b\u012c\7H\2") + buf.write("\2\u012c\u012e\7\31\2\2\u012d\u012b\3\2\2\2\u012e\u0131") + buf.write("\3\2\2\2\u012f\u012d\3\2\2\2\u012f\u0130\3\2\2\2\u0130") + buf.write("\u0132\3\2\2\2\u0131\u012f\3\2\2\2\u0132\u0133\7H\2\2") + buf.write("\u0133\35\3\2\2\2\u0134\u0135\b\20\1\2\u0135\u0141\t\13") + buf.write("\2\2\u0136\u0137\7#\2\2\u0137\u0138\5\36\20\2\u0138\u0139") + buf.write("\7$\2\2\u0139\u0141\3\2\2\2\u013a\u013b\7+\2\2\u013b\u013c") + buf.write("\5\36\20\2\u013c\u013d\7,\2\2\u013d\u0141\3\2\2\2\u013e") + buf.write("\u013f\7C\2\2\u013f\u0141\5\36\20\3\u0140\u0134\3\2\2") + buf.write("\2\u0140\u0136\3\2\2\2\u0140\u013a\3\2\2\2\u0140\u013e") + buf.write("\3\2\2\2\u0141\u014a\3\2\2\2\u0142\u0143\f\5\2\2\u0143") + buf.write("\u0144\7\f\2\2\u0144\u0149\5\36\20\5\u0145\u0146\f\4\2") + buf.write("\2\u0146\u0147\7C\2\2\u0147\u0149\5\36\20\4\u0148\u0142") + buf.write("\3\2\2\2\u0148\u0145\3\2\2\2\u0149\u014c\3\2\2\2\u014a") + buf.write("\u0148\3\2\2\2\u014a\u014b\3\2\2\2\u014b\37\3\2\2\2\u014c") + buf.write("\u014a\3\2\2\2$#,\66;AHTV]in~\u008a\u008e\u0092\u0097") + buf.write("\u0099\u009f\u00a6\u00af\u00bd\u00f5\u00f9\u00fe\u0100") + buf.write("\u0108\u0112\u0121\u0125\u0129\u012f\u0140\u0148\u014a") return buf.getvalue() @@ -167,15 +178,16 @@ class PyxellParser ( Parser ): sharedContextCache = PredictionContextCache() - literalNames = [ "", "';'", "'skip'", "'print'", "'='", "'^'", - "'*'", "'/'", "'%'", "'+'", "'-'", "'<<'", "'>>'", - "'&'", "'$'", "'|'", "'break'", "'continue'", "'return'", - "','", "'if'", "'elif'", "'else'", "'while'", "'until'", - "'for'", "'in'", "'step'", "'func'", "'('", "')'", - "'extern'", "':'", "'do'", "'{'", "'}'", "'def'", "'['", - "']'", "'.'", "'~'", "'..'", "'...'", "'=='", "'!='", - "'<'", "'<='", "'>'", "'>='", "'not'", "'and'", "'or'", - "'?'", "'true'", "'false'", "'Void'", "'Int'", "'Float'", + literalNames = [ "", "';'", "'use'", "'only'", "'hiding'", + "'as'", "'skip'", "'print'", "'='", "'^'", "'*'", "'/'", + "'%'", "'+'", "'-'", "'<<'", "'>>'", "'&'", "'$'", + "'|'", "'break'", "'continue'", "'return'", "','", + "'if'", "'elif'", "'else'", "'while'", "'until'", "'for'", + "'in'", "'step'", "'func'", "'('", "')'", "'extern'", + "':'", "'do'", "'{'", "'}'", "'def'", "'['", "']'", + "'.'", "'~'", "'..'", "'...'", "'=='", "'!='", "'<'", + "'<='", "'>'", "'>='", "'not'", "'and'", "'or'", "'?'", + "'true'", "'false'", "'Void'", "'Int'", "'Float'", "'Bool'", "'Char'", "'String'", "'->'" ] symbolicNames = [ "", "", "", "", @@ -193,6 +205,7 @@ class PyxellParser ( Parser ): "", "", "", "", "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "INT", "FLOAT", "CHAR", "STRING", "ID", "COMMENT", "WS", "ERR" ] @@ -209,11 +222,13 @@ class PyxellParser ( Parser ): RULE_interpolation_expr = 10 RULE_call_arg = 11 RULE_atom = 12 - RULE_typ = 13 + RULE_id_list = 13 + RULE_typ = 14 ruleNames = [ "program", "stmt", "simple_stmt", "lvalue", "compound_stmt", "func_arg", "do_block", "def_block", "expr", "tuple_expr", - "interpolation_expr", "call_arg", "atom", "typ" ] + "interpolation_expr", "call_arg", "atom", "id_list", + "typ" ] EOF = Token.EOF T__0=1 @@ -277,14 +292,18 @@ class PyxellParser ( Parser ): T__58=59 T__59=60 T__60=61 - INT=62 - FLOAT=63 - CHAR=64 - STRING=65 - ID=66 - COMMENT=67 - WS=68 - ERR=69 + T__61=62 + T__62=63 + T__63=64 + T__64=65 + INT=66 + FLOAT=67 + CHAR=68 + STRING=69 + ID=70 + COMMENT=71 + WS=72 + ERR=73 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -330,17 +349,17 @@ def program(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 31 + self.state = 33 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__17) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__39) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__52) | (1 << PyxellParser.T__53) | (1 << PyxellParser.T__54) | (1 << PyxellParser.T__55) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60) | (1 << PyxellParser.INT) | (1 << PyxellParser.FLOAT))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0): - self.state = 28 + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__26) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__31) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__40) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__52) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0): + self.state = 30 self.stmt() - self.state = 33 + self.state = 35 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 34 + self.state = 36 self.match(PyxellParser.EOF) except RecognitionException as re: localctx.exception = re @@ -382,19 +401,19 @@ def stmt(self): localctx = PyxellParser.StmtContext(self, self._ctx, self.state) self.enterRule(localctx, 2, self.RULE_stmt) try: - self.state = 40 + self.state = 42 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__1, PyxellParser.T__2, PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__15, PyxellParser.T__16, PyxellParser.T__17, PyxellParser.T__28, PyxellParser.T__36, PyxellParser.T__39, PyxellParser.T__48, PyxellParser.T__52, PyxellParser.T__53, PyxellParser.T__54, PyxellParser.T__55, PyxellParser.T__56, PyxellParser.T__57, PyxellParser.T__58, PyxellParser.T__59, PyxellParser.T__60, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: + if token in [PyxellParser.T__1, PyxellParser.T__5, PyxellParser.T__6, PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__19, PyxellParser.T__20, PyxellParser.T__21, PyxellParser.T__32, PyxellParser.T__40, PyxellParser.T__43, PyxellParser.T__52, PyxellParser.T__56, PyxellParser.T__57, PyxellParser.T__58, PyxellParser.T__59, PyxellParser.T__60, PyxellParser.T__61, PyxellParser.T__62, PyxellParser.T__63, PyxellParser.T__64, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: self.enterOuterAlt(localctx, 1) - self.state = 36 + self.state = 38 self.simple_stmt() - self.state = 37 + self.state = 39 self.match(PyxellParser.T__0) pass - elif token in [PyxellParser.T__19, PyxellParser.T__22, PyxellParser.T__23, PyxellParser.T__24, PyxellParser.T__27]: + elif token in [PyxellParser.T__23, PyxellParser.T__26, PyxellParser.T__27, PyxellParser.T__28, PyxellParser.T__31]: self.enterOuterAlt(localctx, 2) - self.state = 39 + self.state = 41 self.compound_stmt() pass else: @@ -442,6 +461,32 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) + class StmtUseContext(Simple_stmtContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Simple_stmtContext + super().__init__(parser) + self.name = None # Token + self.only = None # Id_listContext + self.hiding = None # Id_listContext + self.as_ = None # Token + self.copyFrom(ctx) + + def ID(self, i:int=None): + if i is None: + return self.getTokens(PyxellParser.ID) + else: + return self.getToken(PyxellParser.ID, i) + def id_list(self): + return self.getTypedRuleContext(PyxellParser.Id_listContext,0) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStmtUse" ): + return visitor.visitStmtUse(self) + else: + return visitor.visitChildren(self) + + class StmtDeclContext(Simple_stmtContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Simple_stmtContext @@ -561,112 +606,146 @@ def simple_stmt(self): self.enterRule(localctx, 4, self.RULE_simple_stmt) self._la = 0 # Token type try: - self.state = 72 + self.state = 84 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,6,self._ctx) + la_ = self._interp.adaptivePredict(self._input,7,self._ctx) if la_ == 1: - localctx = PyxellParser.StmtSkipContext(self, localctx) + localctx = PyxellParser.StmtUseContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 42 + self.state = 44 self.match(PyxellParser.T__1) + self.state = 45 + localctx.name = self.match(PyxellParser.ID) + self.state = 52 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [PyxellParser.T__2]: + self.state = 46 + self.match(PyxellParser.T__2) + self.state = 47 + localctx.only = self.id_list() + pass + elif token in [PyxellParser.T__3]: + self.state = 48 + self.match(PyxellParser.T__3) + self.state = 49 + localctx.hiding = self.id_list() + pass + elif token in [PyxellParser.T__4]: + self.state = 50 + self.match(PyxellParser.T__4) + self.state = 51 + localctx.as_ = self.match(PyxellParser.ID) + pass + elif token in [PyxellParser.T__0]: + pass + else: + pass pass elif la_ == 2: - localctx = PyxellParser.StmtPrintContext(self, localctx) + localctx = PyxellParser.StmtSkipContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 43 - self.match(PyxellParser.T__2) - self.state = 45 + self.state = 54 + self.match(PyxellParser.T__5) + pass + + elif la_ == 3: + localctx = PyxellParser.StmtPrintContext(self, localctx) + self.enterOuterAlt(localctx, 3) + self.state = 55 + self.match(PyxellParser.T__6) + self.state = 57 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 9)) & ~0x3f) == 0 and ((1 << (_la - 9)) & ((1 << (PyxellParser.T__8 - 9)) | (1 << (PyxellParser.T__9 - 9)) | (1 << (PyxellParser.T__28 - 9)) | (1 << (PyxellParser.T__36 - 9)) | (1 << (PyxellParser.T__39 - 9)) | (1 << (PyxellParser.T__48 - 9)) | (1 << (PyxellParser.T__52 - 9)) | (1 << (PyxellParser.T__53 - 9)) | (1 << (PyxellParser.INT - 9)) | (1 << (PyxellParser.FLOAT - 9)) | (1 << (PyxellParser.CHAR - 9)) | (1 << (PyxellParser.STRING - 9)) | (1 << (PyxellParser.ID - 9)))) != 0): - self.state = 44 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__32 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__52 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 56 self.tuple_expr() pass - elif la_ == 3: + elif la_ == 4: localctx = PyxellParser.StmtDeclContext(self, localctx) - self.enterOuterAlt(localctx, 3) - self.state = 47 + self.enterOuterAlt(localctx, 4) + self.state = 59 self.typ(0) - self.state = 48 + self.state = 60 self.match(PyxellParser.ID) - self.state = 51 + self.state = 63 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__3: - self.state = 49 - self.match(PyxellParser.T__3) - self.state = 50 + if _la==PyxellParser.T__7: + self.state = 61 + self.match(PyxellParser.T__7) + self.state = 62 self.tuple_expr() pass - elif la_ == 4: + elif la_ == 5: localctx = PyxellParser.StmtAssgContext(self, localctx) - self.enterOuterAlt(localctx, 4) - self.state = 58 + self.enterOuterAlt(localctx, 5) + self.state = 70 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,4,self._ctx) + _alt = self._interp.adaptivePredict(self._input,5,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 53 + self.state = 65 self.lvalue() - self.state = 54 - self.match(PyxellParser.T__3) - self.state = 60 + self.state = 66 + self.match(PyxellParser.T__7) + self.state = 72 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,4,self._ctx) + _alt = self._interp.adaptivePredict(self._input,5,self._ctx) - self.state = 61 + self.state = 73 self.tuple_expr() pass - elif la_ == 5: + elif la_ == 6: localctx = PyxellParser.StmtAssgExprContext(self, localctx) - self.enterOuterAlt(localctx, 5) - self.state = 62 + self.enterOuterAlt(localctx, 6) + self.state = 74 self.expr(0) - self.state = 63 + self.state = 75 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__4) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__7) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__11) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__14))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__11) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__14) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__17) | (1 << PyxellParser.T__18))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 64 - self.match(PyxellParser.T__3) - self.state = 65 + self.state = 76 + self.match(PyxellParser.T__7) + self.state = 77 self.expr(0) pass - elif la_ == 6: + elif la_ == 7: localctx = PyxellParser.StmtLoopControlContext(self, localctx) - self.enterOuterAlt(localctx, 6) - self.state = 67 + self.enterOuterAlt(localctx, 7) + self.state = 79 localctx.s = self._input.LT(1) _la = self._input.LA(1) - if not(_la==PyxellParser.T__15 or _la==PyxellParser.T__16): + if not(_la==PyxellParser.T__19 or _la==PyxellParser.T__20): localctx.s = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() pass - elif la_ == 7: + elif la_ == 8: localctx = PyxellParser.StmtReturnContext(self, localctx) - self.enterOuterAlt(localctx, 7) - self.state = 68 - self.match(PyxellParser.T__17) - self.state = 70 + self.enterOuterAlt(localctx, 8) + self.state = 80 + self.match(PyxellParser.T__21) + self.state = 82 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 9)) & ~0x3f) == 0 and ((1 << (_la - 9)) & ((1 << (PyxellParser.T__8 - 9)) | (1 << (PyxellParser.T__9 - 9)) | (1 << (PyxellParser.T__28 - 9)) | (1 << (PyxellParser.T__36 - 9)) | (1 << (PyxellParser.T__39 - 9)) | (1 << (PyxellParser.T__48 - 9)) | (1 << (PyxellParser.T__52 - 9)) | (1 << (PyxellParser.T__53 - 9)) | (1 << (PyxellParser.INT - 9)) | (1 << (PyxellParser.FLOAT - 9)) | (1 << (PyxellParser.CHAR - 9)) | (1 << (PyxellParser.STRING - 9)) | (1 << (PyxellParser.ID - 9)))) != 0): - self.state = 69 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__32 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__52 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 81 self.tuple_expr() @@ -714,17 +793,17 @@ def lvalue(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 74 + self.state = 86 self.expr(0) - self.state = 79 + self.state = 91 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==PyxellParser.T__18: - self.state = 75 - self.match(PyxellParser.T__18) - self.state = 76 + while _la==PyxellParser.T__22: + self.state = 87 + self.match(PyxellParser.T__22) + self.state = 88 self.expr(0) - self.state = 81 + self.state = 93 self._errHandler.sync(self) _la = self._input.LA(1) @@ -879,138 +958,138 @@ def compound_stmt(self): self.enterRule(localctx, 8, self.RULE_compound_stmt) self._la = 0 # Token type try: - self.state = 139 + self.state = 151 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__19]: + if token in [PyxellParser.T__23]: localctx = PyxellParser.StmtIfContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 82 - self.match(PyxellParser.T__19) - self.state = 83 + self.state = 94 + self.match(PyxellParser.T__23) + self.state = 95 self.expr(0) - self.state = 84 + self.state = 96 self.do_block() - self.state = 91 + self.state = 103 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==PyxellParser.T__20: - self.state = 85 - self.match(PyxellParser.T__20) - self.state = 86 + while _la==PyxellParser.T__24: + self.state = 97 + self.match(PyxellParser.T__24) + self.state = 98 self.expr(0) - self.state = 87 + self.state = 99 self.do_block() - self.state = 93 + self.state = 105 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 96 + self.state = 108 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__21: - self.state = 94 - self.match(PyxellParser.T__21) - self.state = 95 + if _la==PyxellParser.T__25: + self.state = 106 + self.match(PyxellParser.T__25) + self.state = 107 self.do_block() pass - elif token in [PyxellParser.T__22]: + elif token in [PyxellParser.T__26]: localctx = PyxellParser.StmtWhileContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 98 - self.match(PyxellParser.T__22) - self.state = 99 + self.state = 110 + self.match(PyxellParser.T__26) + self.state = 111 self.expr(0) - self.state = 100 + self.state = 112 self.do_block() pass - elif token in [PyxellParser.T__23]: + elif token in [PyxellParser.T__27]: localctx = PyxellParser.StmtUntilContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 102 - self.match(PyxellParser.T__23) - self.state = 103 + self.state = 114 + self.match(PyxellParser.T__27) + self.state = 115 self.expr(0) - self.state = 104 + self.state = 116 self.do_block() pass - elif token in [PyxellParser.T__24]: + elif token in [PyxellParser.T__28]: localctx = PyxellParser.StmtForContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 106 - self.match(PyxellParser.T__24) - self.state = 107 + self.state = 118 + self.match(PyxellParser.T__28) + self.state = 119 self.tuple_expr() - self.state = 108 - self.match(PyxellParser.T__25) - self.state = 109 + self.state = 120 + self.match(PyxellParser.T__29) + self.state = 121 self.tuple_expr() - self.state = 112 + self.state = 124 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__26: - self.state = 110 - self.match(PyxellParser.T__26) - self.state = 111 + if _la==PyxellParser.T__30: + self.state = 122 + self.match(PyxellParser.T__30) + self.state = 123 localctx.step = self.tuple_expr() - self.state = 114 + self.state = 126 self.do_block() pass - elif token in [PyxellParser.T__27]: + elif token in [PyxellParser.T__31]: localctx = PyxellParser.StmtFuncContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 116 - self.match(PyxellParser.T__27) - self.state = 117 + self.state = 128 + self.match(PyxellParser.T__31) + self.state = 129 self.match(PyxellParser.ID) - self.state = 118 - self.match(PyxellParser.T__28) - self.state = 124 + self.state = 130 + self.match(PyxellParser.T__32) + self.state = 136 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,11,self._ctx) + _alt = self._interp.adaptivePredict(self._input,12,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 119 + self.state = 131 self.func_arg() - self.state = 120 - self.match(PyxellParser.T__18) - self.state = 126 + self.state = 132 + self.match(PyxellParser.T__22) + self.state = 138 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,11,self._ctx) + _alt = self._interp.adaptivePredict(self._input,12,self._ctx) - self.state = 128 + self.state = 140 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__28) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__54) | (1 << PyxellParser.T__55) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60))) != 0): - self.state = 127 + if ((((_la - 33)) & ~0x3f) == 0 and ((1 << (_la - 33)) & ((1 << (PyxellParser.T__32 - 33)) | (1 << (PyxellParser.T__40 - 33)) | (1 << (PyxellParser.T__58 - 33)) | (1 << (PyxellParser.T__59 - 33)) | (1 << (PyxellParser.T__60 - 33)) | (1 << (PyxellParser.T__61 - 33)) | (1 << (PyxellParser.T__62 - 33)) | (1 << (PyxellParser.T__63 - 33)) | (1 << (PyxellParser.T__64 - 33)))) != 0): + self.state = 139 self.func_arg() - self.state = 130 - self.match(PyxellParser.T__29) - self.state = 132 + self.state = 142 + self.match(PyxellParser.T__33) + self.state = 144 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__28) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__54) | (1 << PyxellParser.T__55) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60))) != 0): - self.state = 131 + if ((((_la - 33)) & ~0x3f) == 0 and ((1 << (_la - 33)) & ((1 << (PyxellParser.T__32 - 33)) | (1 << (PyxellParser.T__40 - 33)) | (1 << (PyxellParser.T__58 - 33)) | (1 << (PyxellParser.T__59 - 33)) | (1 << (PyxellParser.T__60 - 33)) | (1 << (PyxellParser.T__61 - 33)) | (1 << (PyxellParser.T__62 - 33)) | (1 << (PyxellParser.T__63 - 33)) | (1 << (PyxellParser.T__64 - 33)))) != 0): + self.state = 143 localctx.ret = self.typ(0) - self.state = 137 + self.state = 149 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__35]: - self.state = 134 + if token in [PyxellParser.T__39]: + self.state = 146 self.def_block() pass - elif token in [PyxellParser.T__30]: - self.state = 135 - self.match(PyxellParser.T__30) - self.state = 136 + elif token in [PyxellParser.T__34]: + self.state = 147 + self.match(PyxellParser.T__34) + self.state = 148 self.match(PyxellParser.T__0) pass else: @@ -1066,17 +1145,17 @@ def func_arg(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 141 + self.state = 153 self.typ(0) - self.state = 142 + self.state = 154 self.match(PyxellParser.ID) - self.state = 145 + self.state = 157 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__31: - self.state = 143 - self.match(PyxellParser.T__31) - self.state = 144 + if _la==PyxellParser.T__35: + self.state = 155 + self.match(PyxellParser.T__35) + self.state = 156 localctx.default = self.expr(0) @@ -1121,24 +1200,24 @@ def do_block(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 147 - self.match(PyxellParser.T__32) - self.state = 148 - self.match(PyxellParser.T__33) - self.state = 150 + self.state = 159 + self.match(PyxellParser.T__36) + self.state = 160 + self.match(PyxellParser.T__37) + self.state = 162 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 149 + self.state = 161 self.stmt() - self.state = 152 + self.state = 164 self._errHandler.sync(self) _la = self._input.LA(1) - if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__17) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__39) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__52) | (1 << PyxellParser.T__53) | (1 << PyxellParser.T__54) | (1 << PyxellParser.T__55) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60) | (1 << PyxellParser.INT) | (1 << PyxellParser.FLOAT))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0)): + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__26) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__31) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__40) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__52) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0)): break - self.state = 154 - self.match(PyxellParser.T__34) + self.state = 166 + self.match(PyxellParser.T__38) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -1180,24 +1259,24 @@ def def_block(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 156 - self.match(PyxellParser.T__35) - self.state = 157 - self.match(PyxellParser.T__33) - self.state = 159 + self.state = 168 + self.match(PyxellParser.T__39) + self.state = 169 + self.match(PyxellParser.T__37) + self.state = 171 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 158 + self.state = 170 self.stmt() - self.state = 161 + self.state = 173 self._errHandler.sync(self) _la = self._input.LA(1) - if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__2) | (1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__17) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__39) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__52) | (1 << PyxellParser.T__53) | (1 << PyxellParser.T__54) | (1 << PyxellParser.T__55) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60) | (1 << PyxellParser.INT) | (1 << PyxellParser.FLOAT))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0)): + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__26) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__31) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__40) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__52) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0)): break - self.state = 163 - self.match(PyxellParser.T__34) + self.state = 175 + self.match(PyxellParser.T__38) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -1451,334 +1530,334 @@ def expr(self, _p:int=0): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 175 + self.state = 187 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__36, PyxellParser.T__52, PyxellParser.T__53, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: + if token in [PyxellParser.T__40, PyxellParser.T__56, PyxellParser.T__57, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: localctx = PyxellParser.ExprAtomContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 166 + self.state = 178 self.atom() pass - elif token in [PyxellParser.T__28]: + elif token in [PyxellParser.T__32]: localctx = PyxellParser.ExprParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 167 - self.match(PyxellParser.T__28) - self.state = 168 + self.state = 179 + self.match(PyxellParser.T__32) + self.state = 180 self.tuple_expr() - self.state = 169 - self.match(PyxellParser.T__29) + self.state = 181 + self.match(PyxellParser.T__33) pass - elif token in [PyxellParser.T__8, PyxellParser.T__9, PyxellParser.T__39]: + elif token in [PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__43]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 171 + self.state = 183 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__39))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__43))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 172 + self.state = 184 self.expr(14) pass - elif token in [PyxellParser.T__48]: + elif token in [PyxellParser.T__52]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 173 - localctx.op = self.match(PyxellParser.T__48) - self.state = 174 + self.state = 185 + localctx.op = self.match(PyxellParser.T__52) + self.state = 186 self.expr(4) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 242 + self.state = 254 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,23,self._ctx) + _alt = self._interp.adaptivePredict(self._input,24,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 240 + self.state = 252 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,22,self._ctx) + la_ = self._interp.adaptivePredict(self._input,23,self._ctx) if la_ == 1: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 177 + self.state = 189 if not self.precpred(self._ctx, 15): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 15)") - self.state = 178 - localctx.op = self.match(PyxellParser.T__4) - self.state = 179 + self.state = 190 + localctx.op = self.match(PyxellParser.T__8) + self.state = 191 self.expr(15) pass elif la_ == 2: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 180 + self.state = 192 if not self.precpred(self._ctx, 13): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") - self.state = 181 + self.state = 193 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__7))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__9) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__11))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 182 + self.state = 194 self.expr(14) pass elif la_ == 3: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 183 + self.state = 195 if not self.precpred(self._ctx, 12): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 12)") - self.state = 184 + self.state = 196 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not(_la==PyxellParser.T__8 or _la==PyxellParser.T__9): + if not(_la==PyxellParser.T__12 or _la==PyxellParser.T__13): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 185 + self.state = 197 self.expr(13) pass elif la_ == 4: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 186 + self.state = 198 if not self.precpred(self._ctx, 11): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") - self.state = 187 + self.state = 199 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not(_la==PyxellParser.T__10 or _la==PyxellParser.T__11): + if not(_la==PyxellParser.T__14 or _la==PyxellParser.T__15): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 188 + self.state = 200 self.expr(12) pass elif la_ == 5: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 189 + self.state = 201 if not self.precpred(self._ctx, 10): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") - self.state = 190 - localctx.op = self.match(PyxellParser.T__12) - self.state = 191 + self.state = 202 + localctx.op = self.match(PyxellParser.T__16) + self.state = 203 self.expr(11) pass elif la_ == 6: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 192 + self.state = 204 if not self.precpred(self._ctx, 9): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") - self.state = 193 - localctx.op = self.match(PyxellParser.T__13) - self.state = 194 + self.state = 205 + localctx.op = self.match(PyxellParser.T__17) + self.state = 206 self.expr(10) pass elif la_ == 7: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 195 + self.state = 207 if not self.precpred(self._ctx, 8): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") - self.state = 196 - localctx.op = self.match(PyxellParser.T__14) - self.state = 197 + self.state = 208 + localctx.op = self.match(PyxellParser.T__18) + self.state = 209 self.expr(9) pass elif la_ == 8: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 198 + self.state = 210 if not self.precpred(self._ctx, 7): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") - self.state = 199 + self.state = 211 localctx.dots = self._input.LT(1) _la = self._input.LA(1) - if not(_la==PyxellParser.T__40 or _la==PyxellParser.T__41): + if not(_la==PyxellParser.T__44 or _la==PyxellParser.T__45): localctx.dots = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 200 + self.state = 212 self.expr(8) pass elif la_ == 9: localctx = PyxellParser.ExprCmpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 201 + self.state = 213 if not self.precpred(self._ctx, 5): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") - self.state = 202 + self.state = 214 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__42) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__44) | (1 << PyxellParser.T__45) | (1 << PyxellParser.T__46) | (1 << PyxellParser.T__47))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__46) | (1 << PyxellParser.T__47) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__49) | (1 << PyxellParser.T__50) | (1 << PyxellParser.T__51))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 203 + self.state = 215 self.expr(5) pass elif la_ == 10: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 204 + self.state = 216 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 205 - localctx.op = self.match(PyxellParser.T__49) - self.state = 206 + self.state = 217 + localctx.op = self.match(PyxellParser.T__53) + self.state = 218 self.expr(3) pass elif la_ == 11: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 207 + self.state = 219 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 208 - localctx.op = self.match(PyxellParser.T__50) - self.state = 209 + self.state = 220 + localctx.op = self.match(PyxellParser.T__54) + self.state = 221 self.expr(2) pass elif la_ == 12: localctx = PyxellParser.ExprCondContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 210 + self.state = 222 if not self.precpred(self._ctx, 1): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") - self.state = 211 - self.match(PyxellParser.T__51) - self.state = 212 + self.state = 223 + self.match(PyxellParser.T__55) + self.state = 224 self.expr(0) - self.state = 213 - self.match(PyxellParser.T__31) - self.state = 214 + self.state = 225 + self.match(PyxellParser.T__35) + self.state = 226 self.expr(1) pass elif la_ == 13: localctx = PyxellParser.ExprIndexContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 216 + self.state = 228 if not self.precpred(self._ctx, 18): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 18)") - self.state = 217 - self.match(PyxellParser.T__36) - self.state = 218 + self.state = 229 + self.match(PyxellParser.T__40) + self.state = 230 self.expr(0) - self.state = 219 - self.match(PyxellParser.T__37) + self.state = 231 + self.match(PyxellParser.T__41) pass elif la_ == 14: localctx = PyxellParser.ExprAttrContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 221 + self.state = 233 if not self.precpred(self._ctx, 17): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 17)") - self.state = 222 - self.match(PyxellParser.T__38) - self.state = 223 + self.state = 234 + self.match(PyxellParser.T__42) + self.state = 235 self.match(PyxellParser.ID) pass elif la_ == 15: localctx = PyxellParser.ExprCallContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 224 + self.state = 236 if not self.precpred(self._ctx, 16): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 16)") - self.state = 225 - self.match(PyxellParser.T__28) - self.state = 231 + self.state = 237 + self.match(PyxellParser.T__32) + self.state = 243 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,20,self._ctx) + _alt = self._interp.adaptivePredict(self._input,21,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 226 + self.state = 238 self.call_arg() - self.state = 227 - self.match(PyxellParser.T__18) - self.state = 233 + self.state = 239 + self.match(PyxellParser.T__22) + self.state = 245 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,20,self._ctx) + _alt = self._interp.adaptivePredict(self._input,21,self._ctx) - self.state = 235 + self.state = 247 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 9)) & ~0x3f) == 0 and ((1 << (_la - 9)) & ((1 << (PyxellParser.T__8 - 9)) | (1 << (PyxellParser.T__9 - 9)) | (1 << (PyxellParser.T__28 - 9)) | (1 << (PyxellParser.T__36 - 9)) | (1 << (PyxellParser.T__39 - 9)) | (1 << (PyxellParser.T__48 - 9)) | (1 << (PyxellParser.T__52 - 9)) | (1 << (PyxellParser.T__53 - 9)) | (1 << (PyxellParser.INT - 9)) | (1 << (PyxellParser.FLOAT - 9)) | (1 << (PyxellParser.CHAR - 9)) | (1 << (PyxellParser.STRING - 9)) | (1 << (PyxellParser.ID - 9)))) != 0): - self.state = 234 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__32 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__52 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 246 self.call_arg() - self.state = 237 - self.match(PyxellParser.T__29) + self.state = 249 + self.match(PyxellParser.T__33) pass elif la_ == 16: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 238 + self.state = 250 if not self.precpred(self._ctx, 6): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") - self.state = 239 - localctx.dots = self.match(PyxellParser.T__41) + self.state = 251 + localctx.dots = self.match(PyxellParser.T__45) pass - self.state = 244 + self.state = 256 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,23,self._ctx) + _alt = self._interp.adaptivePredict(self._input,24,self._ctx) except RecognitionException as re: localctx.exception = re @@ -1833,20 +1912,20 @@ def tuple_expr(self): try: localctx = PyxellParser.ExprTupleContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 250 + self.state = 262 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,24,self._ctx) + _alt = self._interp.adaptivePredict(self._input,25,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 245 + self.state = 257 self.expr(0) - self.state = 246 - self.match(PyxellParser.T__18) - self.state = 252 + self.state = 258 + self.match(PyxellParser.T__22) + self.state = 264 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,24,self._ctx) + _alt = self._interp.adaptivePredict(self._input,25,self._ctx) - self.state = 253 + self.state = 265 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -1900,9 +1979,9 @@ def interpolation_expr(self): try: localctx = PyxellParser.ExprInterpolationContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 255 + self.state = 267 self.tuple_expr() - self.state = 256 + self.state = 268 self.match(PyxellParser.EOF) except RecognitionException as re: localctx.exception = re @@ -1944,17 +2023,17 @@ def call_arg(self): self.enterRule(localctx, 22, self.RULE_call_arg) try: self.enterOuterAlt(localctx, 1) - self.state = 260 + self.state = 272 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,25,self._ctx) + la_ = self._interp.adaptivePredict(self._input,26,self._ctx) if la_ == 1: - self.state = 258 + self.state = 270 self.match(PyxellParser.ID) - self.state = 259 - self.match(PyxellParser.T__3) + self.state = 271 + self.match(PyxellParser.T__7) - self.state = 262 + self.state = 274 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -2102,27 +2181,27 @@ def atom(self): self.enterRule(localctx, 24, self.RULE_atom) self._la = 0 # Token type try: - self.state = 283 + self.state = 295 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: localctx = PyxellParser.AtomIntContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 264 + self.state = 276 self.match(PyxellParser.INT) pass elif token in [PyxellParser.FLOAT]: localctx = PyxellParser.AtomFloatContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 265 + self.state = 277 self.match(PyxellParser.FLOAT) pass - elif token in [PyxellParser.T__52, PyxellParser.T__53]: + elif token in [PyxellParser.T__56, PyxellParser.T__57]: localctx = PyxellParser.AtomBoolContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 266 + self.state = 278 _la = self._input.LA(1) - if not(_la==PyxellParser.T__52 or _la==PyxellParser.T__53): + if not(_la==PyxellParser.T__56 or _la==PyxellParser.T__57): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -2131,48 +2210,48 @@ def atom(self): elif token in [PyxellParser.CHAR]: localctx = PyxellParser.AtomCharContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 267 + self.state = 279 self.match(PyxellParser.CHAR) pass elif token in [PyxellParser.STRING]: localctx = PyxellParser.AtomStringContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 268 + self.state = 280 self.match(PyxellParser.STRING) pass - elif token in [PyxellParser.T__36]: + elif token in [PyxellParser.T__40]: localctx = PyxellParser.AtomArrayContext(self, localctx) self.enterOuterAlt(localctx, 6) - self.state = 269 - self.match(PyxellParser.T__36) - self.state = 275 + self.state = 281 + self.match(PyxellParser.T__40) + self.state = 287 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,26,self._ctx) + _alt = self._interp.adaptivePredict(self._input,27,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 270 + self.state = 282 self.expr(0) - self.state = 271 - self.match(PyxellParser.T__18) - self.state = 277 + self.state = 283 + self.match(PyxellParser.T__22) + self.state = 289 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,26,self._ctx) + _alt = self._interp.adaptivePredict(self._input,27,self._ctx) - self.state = 279 + self.state = 291 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 9)) & ~0x3f) == 0 and ((1 << (_la - 9)) & ((1 << (PyxellParser.T__8 - 9)) | (1 << (PyxellParser.T__9 - 9)) | (1 << (PyxellParser.T__28 - 9)) | (1 << (PyxellParser.T__36 - 9)) | (1 << (PyxellParser.T__39 - 9)) | (1 << (PyxellParser.T__48 - 9)) | (1 << (PyxellParser.T__52 - 9)) | (1 << (PyxellParser.T__53 - 9)) | (1 << (PyxellParser.INT - 9)) | (1 << (PyxellParser.FLOAT - 9)) | (1 << (PyxellParser.CHAR - 9)) | (1 << (PyxellParser.STRING - 9)) | (1 << (PyxellParser.ID - 9)))) != 0): - self.state = 278 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__32 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__52 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 290 self.expr(0) - self.state = 281 - self.match(PyxellParser.T__37) + self.state = 293 + self.match(PyxellParser.T__41) pass elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) self.enterOuterAlt(localctx, 7) - self.state = 282 + self.state = 294 self.match(PyxellParser.ID) pass else: @@ -2187,6 +2266,60 @@ def atom(self): return localctx + class Id_listContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def ID(self, i:int=None): + if i is None: + return self.getTokens(PyxellParser.ID) + else: + return self.getToken(PyxellParser.ID, i) + + def getRuleIndex(self): + return PyxellParser.RULE_id_list + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitId_list" ): + return visitor.visitId_list(self) + else: + return visitor.visitChildren(self) + + + + + def id_list(self): + + localctx = PyxellParser.Id_listContext(self, self._ctx, self.state) + self.enterRule(localctx, 26, self.RULE_id_list) + try: + self.enterOuterAlt(localctx, 1) + self.state = 301 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,30,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 297 + self.match(PyxellParser.ID) + self.state = 298 + self.match(PyxellParser.T__22) + self.state = 303 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,30,self._ctx) + + self.state = 304 + self.match(PyxellParser.ID) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class TypContext(ParserRuleContext): def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): @@ -2313,103 +2446,103 @@ def typ(self, _p:int=0): _parentState = self.state localctx = PyxellParser.TypContext(self, self._ctx, _parentState) _prevctx = localctx - _startState = 26 - self.enterRecursionRule(localctx, 26, self.RULE_typ, _p) + _startState = 28 + self.enterRecursionRule(localctx, 28, self.RULE_typ, _p) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 297 + self.state = 318 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__54, PyxellParser.T__55, PyxellParser.T__56, PyxellParser.T__57, PyxellParser.T__58, PyxellParser.T__59]: + if token in [PyxellParser.T__58, PyxellParser.T__59, PyxellParser.T__60, PyxellParser.T__61, PyxellParser.T__62, PyxellParser.T__63]: localctx = PyxellParser.TypePrimitiveContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 286 + self.state = 307 _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__54) | (1 << PyxellParser.T__55) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59))) != 0)): + if not(((((_la - 59)) & ~0x3f) == 0 and ((1 << (_la - 59)) & ((1 << (PyxellParser.T__58 - 59)) | (1 << (PyxellParser.T__59 - 59)) | (1 << (PyxellParser.T__60 - 59)) | (1 << (PyxellParser.T__61 - 59)) | (1 << (PyxellParser.T__62 - 59)) | (1 << (PyxellParser.T__63 - 59)))) != 0)): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() pass - elif token in [PyxellParser.T__28]: + elif token in [PyxellParser.T__32]: localctx = PyxellParser.TypeParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 287 - self.match(PyxellParser.T__28) - self.state = 288 + self.state = 308 + self.match(PyxellParser.T__32) + self.state = 309 self.typ(0) - self.state = 289 - self.match(PyxellParser.T__29) + self.state = 310 + self.match(PyxellParser.T__33) pass - elif token in [PyxellParser.T__36]: + elif token in [PyxellParser.T__40]: localctx = PyxellParser.TypeArrayContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 291 - self.match(PyxellParser.T__36) - self.state = 292 + self.state = 312 + self.match(PyxellParser.T__40) + self.state = 313 self.typ(0) - self.state = 293 - self.match(PyxellParser.T__37) + self.state = 314 + self.match(PyxellParser.T__41) pass - elif token in [PyxellParser.T__60]: + elif token in [PyxellParser.T__64]: localctx = PyxellParser.TypeFunc0Context(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 295 - self.match(PyxellParser.T__60) - self.state = 296 + self.state = 316 + self.match(PyxellParser.T__64) + self.state = 317 self.typ(1) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 307 + self.state = 328 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,31,self._ctx) + _alt = self._interp.adaptivePredict(self._input,33,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 305 + self.state = 326 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,30,self._ctx) + la_ = self._interp.adaptivePredict(self._input,32,self._ctx) if la_ == 1: localctx = PyxellParser.TypeTupleContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 299 + self.state = 320 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 300 - self.match(PyxellParser.T__5) - self.state = 301 + self.state = 321 + self.match(PyxellParser.T__9) + self.state = 322 self.typ(3) pass elif la_ == 2: localctx = PyxellParser.TypeFuncContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 302 + self.state = 323 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 303 - self.match(PyxellParser.T__60) - self.state = 304 + self.state = 324 + self.match(PyxellParser.T__64) + self.state = 325 self.typ(2) pass - self.state = 309 + self.state = 330 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,31,self._ctx) + _alt = self._interp.adaptivePredict(self._input,33,self._ctx) except RecognitionException as re: localctx.exception = re @@ -2425,7 +2558,7 @@ def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): if self._predicates == None: self._predicates = dict() self._predicates[8] = self.expr_sempred - self._predicates[13] = self.typ_sempred + self._predicates[14] = self.typ_sempred pred = self._predicates.get(ruleIndex, None) if pred is None: raise Exception("No predicate with index:" + str(ruleIndex)) diff --git a/src/antlr/PyxellVisitor.py b/src/antlr/PyxellVisitor.py index 24e0e8dd..19ae9988 100644 --- a/src/antlr/PyxellVisitor.py +++ b/src/antlr/PyxellVisitor.py @@ -19,6 +19,11 @@ def visitStmt(self, ctx:PyxellParser.StmtContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#StmtUse. + def visitStmtUse(self, ctx:PyxellParser.StmtUseContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#StmtSkip. def visitStmtSkip(self, ctx:PyxellParser.StmtSkipContext): return self.visitChildren(ctx) @@ -204,6 +209,11 @@ def visitAtomId(self, ctx:PyxellParser.AtomIdContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#id_list. + def visitId_list(self, ctx:PyxellParser.Id_listContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#TypeParentheses. def visitTypeParentheses(self, ctx:PyxellParser.TypeParenthesesContext): return self.visitChildren(ctx) diff --git a/src/compiler.py b/src/compiler.py index 4fb70cd8..0a9d62cf 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -17,22 +17,52 @@ def _set_terminator(self, term): super()._set_terminator(term) +class Unit: + + def __init__(self, env, initialized): + self.env = env + self.initialized = initialized + + class PyxellCompiler(PyxellVisitor): def __init__(self): - self.env = {} - self.initialized = set() + self.units = {} + self._unit = None self.builder = CustomIRBuilder() self.module = ll.Module() + self.main = ll.Function(self.module, tFunc([], tInt).pointee, 'main') + self.builder.position_at_end(self.main.append_basic_block('entry')) self.builtins = { 'malloc': ll.Function(self.module, tFunc([tInt], tPtr()).pointee, 'malloc'), 'memcpy': ll.Function(self.module, tFunc([tPtr(), tPtr(), tInt]).pointee, 'memcpy'), 'putchar': ll.Function(self.module, tFunc([tChar]).pointee, 'putchar'), } + def llvm(self): + if not self.builder.basic_block.is_terminated: + self.builder.ret(ll.Constant(tInt, 0)) + return str(self.module) + ### Helpers ### + @property + def env(self): + return self._unit.env + + @env.setter + def env(self, env): + self._unit.env = env + + @property + def initialized(self): + return self._unit.initialized + + @initialized.setter + def initialized(self, initialized): + self._unit.initialized = initialized + @contextmanager def local(self): env = self.env.copy() @@ -41,6 +71,13 @@ def local(self): self.env = env self.initialized = initialized + @contextmanager + def unit(self, name): + _unit = self._unit + self._unit = self.units[name] + yield + self._unit = _unit + @contextmanager def no_output(self): dummy_module = ll.Module() @@ -64,13 +101,14 @@ def block(self): def throw(self, ctx, msg): raise err(msg, ctx.start.line, ctx.start.column+1) - def get(self, ctx, id): + def get(self, ctx, id, load=True): id = str(id) if id not in self.env: self.throw(ctx, err.UndeclaredIdentifier(id)) if id not in self.initialized: self.throw(ctx, err.UninitializedIdentifier(id)) - return self.env[id] + ptr = self.env[id] + return self.builder.load(ptr) if load else ptr def extract(self, value, *indices): return self.builder.load(self.builder.gep(value, [vInt(0), *map(vIndex, indices)])) @@ -90,63 +128,77 @@ def index(self, ctx, *exprs, lvalue=False): self.throw(ctx, err.NotIndexable(collection.type)) - def attribute(self, ctx, value, attr): - type = value.type + def attribute(self, ctx, expr, attr): attr = str(attr) + + if isinstance(expr, PyxellParser.ExprAtomContext): + atom = expr.atom() + if isinstance(atom, PyxellParser.AtomIdContext): + id = str(atom.ID()) + if id in self.units: + with self.unit(id): + return None, self.get(ctx, attr) + + obj = self.visit(expr) + type = obj.type + value = None if type == tInt: if attr == 'toString': - return self.get(ctx, 'Int_toString') + value = self.get(ctx, 'Int_toString') elif attr == 'toFloat': - return self.get(ctx, 'Int_toFloat') + value = self.get(ctx, 'Int_toFloat') elif type == tFloat: if attr == 'toString': - return self.get(ctx, 'Float_toString') + value = self.get(ctx, 'Float_toString') elif attr == 'toInt': - return self.get(ctx, 'Float_toInt') + value = self.get(ctx, 'Float_toInt') elif type == tBool: if attr == 'toString': - return self.get(ctx, 'Bool_toString') + value = self.get(ctx, 'Bool_toString') elif attr == 'toInt': - return self.get(ctx, 'Bool_toInt') + value = self.get(ctx, 'Bool_toInt') elif attr == 'toFloat': - return self.get(ctx, 'Bool_toFloat') + value = self.get(ctx, 'Bool_toFloat') elif type == tChar: if attr == 'toString': - return self.get(ctx, 'Char_toString') + value = self.get(ctx, 'Char_toString') elif attr == 'toInt': - return self.get(ctx, 'Char_toInt') + value = self.get(ctx, 'Char_toInt') elif attr == 'toFloat': - return self.get(ctx, 'Char_toFloat') + value = self.get(ctx, 'Char_toFloat') elif type.isCollection(): if attr == 'length': - return self.extract(value, 1) + value = self.extract(obj, 1) elif type == tString: if attr == 'toString': - return self.get(ctx, 'String_toString') + value = self.get(ctx, 'String_toString') elif attr == 'toArray': - return self.get(ctx, 'String_toArray') + value = self.get(ctx, 'String_toArray') elif attr == 'toInt': - return self.get(ctx, 'String_toInt') + value = self.get(ctx, 'String_toInt') elif attr == 'toFloat': - return self.get(ctx, 'String_toFloat') + value = self.get(ctx, 'String_toFloat') elif type.isArray(): if attr == 'join': if type.subtype == tChar: - return self.get(ctx, 'CharArray_join') + value = self.get(ctx, 'CharArray_join') elif type.subtype == tString: - return self.get(ctx, 'StringArray_join') + value = self.get(ctx, 'StringArray_join') elif type.isTuple() and len(attr) == 1: index = ord(attr) - ord('a') if 0 <= index < len(type.elements): - return self.extract(value, index) + value = self.extract(obj, index) - self.throw(ctx, err.NoAttribute(type, attr)) + if value is None: + self.throw(ctx, err.NoAttribute(type, attr)) + + return obj, value def call(self, name, *values): func = self.builder.load(self.env[name]) @@ -630,17 +682,46 @@ def tuple(self, values): ### Program ### - def visitProgram(self, ctx): - func = ll.Function(self.module, tFunc([], tInt).pointee, 'main') - entry = func.append_basic_block('entry') - self.builder.position_at_end(entry) - self.visitChildren(ctx) - self.builder.position_at_end(func.blocks[-1]) - self.builder.ret(ll.Constant(tInt, 0)) + def visitProgram(self, ctx, unit=None): + self.units[unit] = Unit({}, set()) + with self.unit(unit): + if unit != 'std': + self.env = self.units['std'].env.copy() + self.initialized = self.units['std'].initialized.copy() + self.visitChildren(ctx) ### Statements ### + def visitStmtUse(self, ctx): + name = ctx.name.text + if name not in self.units: + self.throw(ctx, err.InvalidModule(name)) + + unit = self.units[name] + if ctx.only: + for id in ctx.only.ID(): + id = str(id) + if id not in unit.env: + self.throw(ctx.only, err.UndeclaredIdentifier(id)) + self.env[id] = unit.env[id] + if id in unit.initialized: + self.initialized.add(id) + elif ctx.hiding: + hidden = set() + for id in ctx.hiding.ID(): + id = str(id) + if id not in unit.env: + self.throw(ctx.hiding, err.UndeclaredIdentifier(id)) + hidden.add(id) + self.env.update({x: unit.env[x] for x in unit.env.keys() - hidden}) + self.initialized.update(unit.initialized - hidden) + elif ctx.as_: + self.units[ctx.as_.text] = unit + else: + self.env.update(unit.env) + self.initialized.update(unit.initialized) + def visitStmtPrint(self, ctx): expr = ctx.tuple_expr() if expr: @@ -957,15 +1038,14 @@ def visitExprIndex(self, ctx): return self.builder.load(self.index(ctx, *ctx.expr())) def visitExprAttr(self, ctx): - value = self.visit(ctx.expr()) - return self.attribute(ctx, value, ctx.ID()) + obj, value = self.attribute(ctx, ctx.expr(), ctx.ID()) + return value def visitExprCall(self, ctx): expr = ctx.expr() if isinstance(expr, PyxellParser.ExprAttrContext): - obj = self.visit(expr.expr()) - func = self.builder.load(self.attribute(expr, obj, expr.ID())) + obj, func = self.attribute(expr, expr.expr(), expr.ID()) else: obj = None func = self.visit(expr) @@ -1142,12 +1222,11 @@ def visitAtomString(self, ctx): except err: self.throw(ctx, err.InvalidExpression(tag)) try: - value = self.visit(expr) + obj, func = self.attribute(ctx, expr, 'toString') except err as e: self.throw(ctx, str(e).partition(': ')[2][:-1]) - func = self.builder.load(self.attribute(ctx, value, 'toString')) - values[i*2+1] = self.builder.call(func, [value]) + values[i*2+1] = self.builder.call(func, [obj]) return self.call('StringArray_join', self.array(tString, values), self.string('')) @@ -1161,7 +1240,7 @@ def visitAtomArray(self, ctx): return self.array(subtype, values) def visitAtomId(self, ctx): - return self.builder.load(self.get(ctx, ctx.ID())) + return self.get(ctx, ctx.ID()) ### Types ### diff --git a/src/errors.py b/src/errors.py index d459e222..9ce13f15 100644 --- a/src/errors.py +++ b/src/errors.py @@ -19,6 +19,7 @@ class PyxellError(Exception): InvalidDeclaration = lambda t: f"Cannot declare variable of type `{t.show()}`" InvalidExpression = lambda e: f"Could not parse expression `{e}`" InvalidLoopStep = lambda: f"Incompatible number of loop variables and step expressions" + InvalidModule = lambda id: f"Could not find module `{id}`" MissingDefault = lambda id: f"Missing default value for argument `{id}`" MissingReturn = lambda id: f"Not all code paths return a value in function `{id}`" NoAttribute = lambda t, id: f"Type `{t.show()}` has no attribute `{id}`" diff --git a/src/main.py b/src/main.py index 15f5035d..d8f7d584 100644 --- a/src/main.py +++ b/src/main.py @@ -13,24 +13,25 @@ def run_compiler(filepath, clangargs): - filepath = Path(filepath) filename, ext = os.path.splitext(filepath) - # Read the code and transform indents. - pyxell_code = Path(abspath/'lib/std.px').read_text() + filepath.read_text() - pyxell_code = transform_indented_code(pyxell_code) + units = { + **{name: abspath/f'lib/{name}.px' for name in [ + 'std', 'math', 'time', 'random', + ]}, + 'main': Path(filepath), + } - # Parse the program. - tree = parse_program(pyxell_code) - - # Generate LLVM code. compiler = PyxellCompiler() - compiler.visit(tree) - llvm_code = str(compiler.module) - # Create an executable. + for name, path in units.items(): + code = transform_indented_code(path.read_text()) + tree = parse_program(code) + compiler.visitProgram(tree, unit=name) + with open(f'{filename}.ll', 'w') as file: - file.write(llvm_code) + file.write(compiler.llvm()) + try: subprocess.check_output(['clang', f'{filename}.ll', abspath/'lib/io.ll', abspath/'lib/base.ll', '-o', f'{filename}.exe', '-O2', *clangargs], stderr=subprocess.STDOUT) except subprocess.CalledProcessError as e: diff --git a/test/bad/modules/use01.err b/test/bad/modules/use01.err index 3186dc29..74bb8708 100644 --- a/test/bad/modules/use01.err +++ b/test/bad/modules/use01.err @@ -1 +1 @@ -Could not load module `test`. \ No newline at end of file +Could not find module `test`. \ No newline at end of file From 47f74d803a43f465865a81dc83c76443f386dd7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Tue, 5 Nov 2019 16:24:08 +0100 Subject: [PATCH 050/100] Refactoring: AST --- src/Pyxell.g4 | 26 +- src/antlr/Pyxell.interp | 9 +- src/antlr/Pyxell.tokens | 32 +- src/antlr/PyxellLexer.interp | 6 +- src/antlr/PyxellLexer.py | 72 +-- src/antlr/PyxellLexer.tokens | 32 +- src/antlr/PyxellParser.py | 1158 +++++++++++++++++----------------- src/antlr/PyxellVisitor.py | 27 +- src/ast.py | 345 ++++++++++ src/compiler.py | 551 +++++++--------- src/main.py | 4 +- src/parsing.py | 11 +- src/types.py | 19 +- src/utils.py | 4 + 14 files changed, 1281 insertions(+), 1015 deletions(-) create mode 100644 src/ast.py diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index 09b8d5f5..48962a70 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -25,29 +25,26 @@ lvalue ; compound_stmt - : 'if' expr do_block ('elif' expr do_block)* ('else' do_block)? # StmtIf - | 'while' expr do_block # StmtWhile - | 'until' expr do_block # StmtUntil - | 'for' tuple_expr 'in' tuple_expr ('step' step=tuple_expr)? do_block # StmtFor - | 'func' ID '(' (func_arg ',')* func_arg? ')' (ret=typ)? (def_block | 'extern' ';') # StmtFunc + : 'if' expr 'do' block ('elif' expr 'do' block)* ('else' 'do' block)? # StmtIf + | 'while' expr 'do' block # StmtWhile + | 'until' expr 'do' block # StmtUntil + | 'for' tuple_expr 'in' tuple_expr ('step' step=tuple_expr)? 'do' block # StmtFor + | 'func' ID '(' (func_arg ',')* func_arg? ')' (ret=typ)? ('def' block | 'extern' ';') # StmtFunc ; func_arg - : typ ID (':' default=expr)? + : typ ID (':' expr)? # FuncArg ; -do_block - : 'do' '{' stmt+ '}' - ; - -def_block - : 'def' '{' stmt+ '}' +block + : '{' stmt+ '}' ; expr : atom # ExprAtom | '(' tuple_expr ')' # ExprParentheses - | expr '[' expr ']' # ExprIndex + | '[' (expr ',')* expr? ']' # ExprArray + | expr '[' tuple_expr ']' # ExprIndex | expr '.' ID # ExprAttr | expr '(' (call_arg ',')* call_arg? ')' # ExprCall | expr op='^' expr # ExprBinaryOp @@ -76,7 +73,7 @@ interpolation_expr ; call_arg - : (ID '=')? expr + : (ID '=')? expr # CallArg ; atom @@ -85,7 +82,6 @@ atom | ('true' | 'false') # AtomBool | CHAR # AtomChar | STRING # AtomString - | '[' (expr ',')* expr? ']' # AtomArray | ID # AtomId ; diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index 6753c7df..a612d7b8 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -24,6 +24,7 @@ null 'return' ',' 'if' +'do' 'elif' 'else' 'while' @@ -34,12 +35,11 @@ null 'func' '(' ')' +'def' 'extern' ':' -'do' '{' '}' -'def' '[' ']' '.' @@ -157,8 +157,7 @@ simple_stmt lvalue compound_stmt func_arg -do_block -def_block +block expr tuple_expr interpolation_expr @@ -169,4 +168,4 @@ typ atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 75, 334, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 3, 2, 7, 2, 34, 10, 2, 12, 2, 14, 2, 37, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 45, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 55, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 60, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 66, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 71, 10, 4, 12, 4, 14, 4, 74, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 85, 10, 4, 5, 4, 87, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 92, 10, 5, 12, 5, 14, 5, 95, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 104, 10, 6, 12, 6, 14, 6, 107, 11, 6, 3, 6, 3, 6, 5, 6, 111, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 127, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 137, 10, 6, 12, 6, 14, 6, 140, 11, 6, 3, 6, 5, 6, 143, 10, 6, 3, 6, 3, 6, 5, 6, 147, 10, 6, 3, 6, 3, 6, 3, 6, 5, 6, 152, 10, 6, 5, 6, 154, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 160, 10, 7, 3, 8, 3, 8, 3, 8, 6, 8, 165, 10, 8, 13, 8, 14, 8, 166, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 6, 9, 174, 10, 9, 13, 9, 14, 9, 175, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 190, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 244, 10, 10, 12, 10, 14, 10, 247, 11, 10, 3, 10, 5, 10, 250, 10, 10, 3, 10, 3, 10, 3, 10, 7, 10, 255, 10, 10, 12, 10, 14, 10, 258, 11, 10, 3, 11, 3, 11, 3, 11, 7, 11, 263, 10, 11, 12, 11, 14, 11, 266, 11, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 5, 13, 275, 10, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 7, 14, 288, 10, 14, 12, 14, 14, 14, 291, 11, 14, 3, 14, 5, 14, 294, 10, 14, 3, 14, 3, 14, 5, 14, 298, 10, 14, 3, 15, 3, 15, 7, 15, 302, 10, 15, 12, 15, 14, 15, 305, 11, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 321, 10, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 7, 16, 329, 10, 16, 12, 16, 14, 16, 332, 11, 16, 3, 16, 2, 4, 18, 30, 17, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 2, 12, 3, 2, 11, 21, 3, 2, 22, 23, 4, 2, 15, 16, 46, 46, 3, 2, 12, 14, 3, 2, 15, 16, 3, 2, 17, 18, 3, 2, 47, 48, 3, 2, 49, 54, 3, 2, 59, 60, 3, 2, 61, 66, 2, 386, 2, 35, 3, 2, 2, 2, 4, 44, 3, 2, 2, 2, 6, 86, 3, 2, 2, 2, 8, 88, 3, 2, 2, 2, 10, 153, 3, 2, 2, 2, 12, 155, 3, 2, 2, 2, 14, 161, 3, 2, 2, 2, 16, 170, 3, 2, 2, 2, 18, 189, 3, 2, 2, 2, 20, 264, 3, 2, 2, 2, 22, 269, 3, 2, 2, 2, 24, 274, 3, 2, 2, 2, 26, 297, 3, 2, 2, 2, 28, 303, 3, 2, 2, 2, 30, 320, 3, 2, 2, 2, 32, 34, 5, 4, 3, 2, 33, 32, 3, 2, 2, 2, 34, 37, 3, 2, 2, 2, 35, 33, 3, 2, 2, 2, 35, 36, 3, 2, 2, 2, 36, 38, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 38, 39, 7, 2, 2, 3, 39, 3, 3, 2, 2, 2, 40, 41, 5, 6, 4, 2, 41, 42, 7, 3, 2, 2, 42, 45, 3, 2, 2, 2, 43, 45, 5, 10, 6, 2, 44, 40, 3, 2, 2, 2, 44, 43, 3, 2, 2, 2, 45, 5, 3, 2, 2, 2, 46, 47, 7, 4, 2, 2, 47, 54, 7, 72, 2, 2, 48, 49, 7, 5, 2, 2, 49, 55, 5, 28, 15, 2, 50, 51, 7, 6, 2, 2, 51, 55, 5, 28, 15, 2, 52, 53, 7, 7, 2, 2, 53, 55, 7, 72, 2, 2, 54, 48, 3, 2, 2, 2, 54, 50, 3, 2, 2, 2, 54, 52, 3, 2, 2, 2, 54, 55, 3, 2, 2, 2, 55, 87, 3, 2, 2, 2, 56, 87, 7, 8, 2, 2, 57, 59, 7, 9, 2, 2, 58, 60, 5, 20, 11, 2, 59, 58, 3, 2, 2, 2, 59, 60, 3, 2, 2, 2, 60, 87, 3, 2, 2, 2, 61, 62, 5, 30, 16, 2, 62, 65, 7, 72, 2, 2, 63, 64, 7, 10, 2, 2, 64, 66, 5, 20, 11, 2, 65, 63, 3, 2, 2, 2, 65, 66, 3, 2, 2, 2, 66, 87, 3, 2, 2, 2, 67, 68, 5, 8, 5, 2, 68, 69, 7, 10, 2, 2, 69, 71, 3, 2, 2, 2, 70, 67, 3, 2, 2, 2, 71, 74, 3, 2, 2, 2, 72, 70, 3, 2, 2, 2, 72, 73, 3, 2, 2, 2, 73, 75, 3, 2, 2, 2, 74, 72, 3, 2, 2, 2, 75, 87, 5, 20, 11, 2, 76, 77, 5, 18, 10, 2, 77, 78, 9, 2, 2, 2, 78, 79, 7, 10, 2, 2, 79, 80, 5, 18, 10, 2, 80, 87, 3, 2, 2, 2, 81, 87, 9, 3, 2, 2, 82, 84, 7, 24, 2, 2, 83, 85, 5, 20, 11, 2, 84, 83, 3, 2, 2, 2, 84, 85, 3, 2, 2, 2, 85, 87, 3, 2, 2, 2, 86, 46, 3, 2, 2, 2, 86, 56, 3, 2, 2, 2, 86, 57, 3, 2, 2, 2, 86, 61, 3, 2, 2, 2, 86, 72, 3, 2, 2, 2, 86, 76, 3, 2, 2, 2, 86, 81, 3, 2, 2, 2, 86, 82, 3, 2, 2, 2, 87, 7, 3, 2, 2, 2, 88, 93, 5, 18, 10, 2, 89, 90, 7, 25, 2, 2, 90, 92, 5, 18, 10, 2, 91, 89, 3, 2, 2, 2, 92, 95, 3, 2, 2, 2, 93, 91, 3, 2, 2, 2, 93, 94, 3, 2, 2, 2, 94, 9, 3, 2, 2, 2, 95, 93, 3, 2, 2, 2, 96, 97, 7, 26, 2, 2, 97, 98, 5, 18, 10, 2, 98, 105, 5, 14, 8, 2, 99, 100, 7, 27, 2, 2, 100, 101, 5, 18, 10, 2, 101, 102, 5, 14, 8, 2, 102, 104, 3, 2, 2, 2, 103, 99, 3, 2, 2, 2, 104, 107, 3, 2, 2, 2, 105, 103, 3, 2, 2, 2, 105, 106, 3, 2, 2, 2, 106, 110, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 108, 109, 7, 28, 2, 2, 109, 111, 5, 14, 8, 2, 110, 108, 3, 2, 2, 2, 110, 111, 3, 2, 2, 2, 111, 154, 3, 2, 2, 2, 112, 113, 7, 29, 2, 2, 113, 114, 5, 18, 10, 2, 114, 115, 5, 14, 8, 2, 115, 154, 3, 2, 2, 2, 116, 117, 7, 30, 2, 2, 117, 118, 5, 18, 10, 2, 118, 119, 5, 14, 8, 2, 119, 154, 3, 2, 2, 2, 120, 121, 7, 31, 2, 2, 121, 122, 5, 20, 11, 2, 122, 123, 7, 32, 2, 2, 123, 126, 5, 20, 11, 2, 124, 125, 7, 33, 2, 2, 125, 127, 5, 20, 11, 2, 126, 124, 3, 2, 2, 2, 126, 127, 3, 2, 2, 2, 127, 128, 3, 2, 2, 2, 128, 129, 5, 14, 8, 2, 129, 154, 3, 2, 2, 2, 130, 131, 7, 34, 2, 2, 131, 132, 7, 72, 2, 2, 132, 138, 7, 35, 2, 2, 133, 134, 5, 12, 7, 2, 134, 135, 7, 25, 2, 2, 135, 137, 3, 2, 2, 2, 136, 133, 3, 2, 2, 2, 137, 140, 3, 2, 2, 2, 138, 136, 3, 2, 2, 2, 138, 139, 3, 2, 2, 2, 139, 142, 3, 2, 2, 2, 140, 138, 3, 2, 2, 2, 141, 143, 5, 12, 7, 2, 142, 141, 3, 2, 2, 2, 142, 143, 3, 2, 2, 2, 143, 144, 3, 2, 2, 2, 144, 146, 7, 36, 2, 2, 145, 147, 5, 30, 16, 2, 146, 145, 3, 2, 2, 2, 146, 147, 3, 2, 2, 2, 147, 151, 3, 2, 2, 2, 148, 152, 5, 16, 9, 2, 149, 150, 7, 37, 2, 2, 150, 152, 7, 3, 2, 2, 151, 148, 3, 2, 2, 2, 151, 149, 3, 2, 2, 2, 152, 154, 3, 2, 2, 2, 153, 96, 3, 2, 2, 2, 153, 112, 3, 2, 2, 2, 153, 116, 3, 2, 2, 2, 153, 120, 3, 2, 2, 2, 153, 130, 3, 2, 2, 2, 154, 11, 3, 2, 2, 2, 155, 156, 5, 30, 16, 2, 156, 159, 7, 72, 2, 2, 157, 158, 7, 38, 2, 2, 158, 160, 5, 18, 10, 2, 159, 157, 3, 2, 2, 2, 159, 160, 3, 2, 2, 2, 160, 13, 3, 2, 2, 2, 161, 162, 7, 39, 2, 2, 162, 164, 7, 40, 2, 2, 163, 165, 5, 4, 3, 2, 164, 163, 3, 2, 2, 2, 165, 166, 3, 2, 2, 2, 166, 164, 3, 2, 2, 2, 166, 167, 3, 2, 2, 2, 167, 168, 3, 2, 2, 2, 168, 169, 7, 41, 2, 2, 169, 15, 3, 2, 2, 2, 170, 171, 7, 42, 2, 2, 171, 173, 7, 40, 2, 2, 172, 174, 5, 4, 3, 2, 173, 172, 3, 2, 2, 2, 174, 175, 3, 2, 2, 2, 175, 173, 3, 2, 2, 2, 175, 176, 3, 2, 2, 2, 176, 177, 3, 2, 2, 2, 177, 178, 7, 41, 2, 2, 178, 17, 3, 2, 2, 2, 179, 180, 8, 10, 1, 2, 180, 190, 5, 26, 14, 2, 181, 182, 7, 35, 2, 2, 182, 183, 5, 20, 11, 2, 183, 184, 7, 36, 2, 2, 184, 190, 3, 2, 2, 2, 185, 186, 9, 4, 2, 2, 186, 190, 5, 18, 10, 16, 187, 188, 7, 55, 2, 2, 188, 190, 5, 18, 10, 6, 189, 179, 3, 2, 2, 2, 189, 181, 3, 2, 2, 2, 189, 185, 3, 2, 2, 2, 189, 187, 3, 2, 2, 2, 190, 256, 3, 2, 2, 2, 191, 192, 12, 17, 2, 2, 192, 193, 7, 11, 2, 2, 193, 255, 5, 18, 10, 17, 194, 195, 12, 15, 2, 2, 195, 196, 9, 5, 2, 2, 196, 255, 5, 18, 10, 16, 197, 198, 12, 14, 2, 2, 198, 199, 9, 6, 2, 2, 199, 255, 5, 18, 10, 15, 200, 201, 12, 13, 2, 2, 201, 202, 9, 7, 2, 2, 202, 255, 5, 18, 10, 14, 203, 204, 12, 12, 2, 2, 204, 205, 7, 19, 2, 2, 205, 255, 5, 18, 10, 13, 206, 207, 12, 11, 2, 2, 207, 208, 7, 20, 2, 2, 208, 255, 5, 18, 10, 12, 209, 210, 12, 10, 2, 2, 210, 211, 7, 21, 2, 2, 211, 255, 5, 18, 10, 11, 212, 213, 12, 9, 2, 2, 213, 214, 9, 8, 2, 2, 214, 255, 5, 18, 10, 10, 215, 216, 12, 7, 2, 2, 216, 217, 9, 9, 2, 2, 217, 255, 5, 18, 10, 7, 218, 219, 12, 5, 2, 2, 219, 220, 7, 56, 2, 2, 220, 255, 5, 18, 10, 5, 221, 222, 12, 4, 2, 2, 222, 223, 7, 57, 2, 2, 223, 255, 5, 18, 10, 4, 224, 225, 12, 3, 2, 2, 225, 226, 7, 58, 2, 2, 226, 227, 5, 18, 10, 2, 227, 228, 7, 38, 2, 2, 228, 229, 5, 18, 10, 3, 229, 255, 3, 2, 2, 2, 230, 231, 12, 20, 2, 2, 231, 232, 7, 43, 2, 2, 232, 233, 5, 18, 10, 2, 233, 234, 7, 44, 2, 2, 234, 255, 3, 2, 2, 2, 235, 236, 12, 19, 2, 2, 236, 237, 7, 45, 2, 2, 237, 255, 7, 72, 2, 2, 238, 239, 12, 18, 2, 2, 239, 245, 7, 35, 2, 2, 240, 241, 5, 24, 13, 2, 241, 242, 7, 25, 2, 2, 242, 244, 3, 2, 2, 2, 243, 240, 3, 2, 2, 2, 244, 247, 3, 2, 2, 2, 245, 243, 3, 2, 2, 2, 245, 246, 3, 2, 2, 2, 246, 249, 3, 2, 2, 2, 247, 245, 3, 2, 2, 2, 248, 250, 5, 24, 13, 2, 249, 248, 3, 2, 2, 2, 249, 250, 3, 2, 2, 2, 250, 251, 3, 2, 2, 2, 251, 255, 7, 36, 2, 2, 252, 253, 12, 8, 2, 2, 253, 255, 7, 48, 2, 2, 254, 191, 3, 2, 2, 2, 254, 194, 3, 2, 2, 2, 254, 197, 3, 2, 2, 2, 254, 200, 3, 2, 2, 2, 254, 203, 3, 2, 2, 2, 254, 206, 3, 2, 2, 2, 254, 209, 3, 2, 2, 2, 254, 212, 3, 2, 2, 2, 254, 215, 3, 2, 2, 2, 254, 218, 3, 2, 2, 2, 254, 221, 3, 2, 2, 2, 254, 224, 3, 2, 2, 2, 254, 230, 3, 2, 2, 2, 254, 235, 3, 2, 2, 2, 254, 238, 3, 2, 2, 2, 254, 252, 3, 2, 2, 2, 255, 258, 3, 2, 2, 2, 256, 254, 3, 2, 2, 2, 256, 257, 3, 2, 2, 2, 257, 19, 3, 2, 2, 2, 258, 256, 3, 2, 2, 2, 259, 260, 5, 18, 10, 2, 260, 261, 7, 25, 2, 2, 261, 263, 3, 2, 2, 2, 262, 259, 3, 2, 2, 2, 263, 266, 3, 2, 2, 2, 264, 262, 3, 2, 2, 2, 264, 265, 3, 2, 2, 2, 265, 267, 3, 2, 2, 2, 266, 264, 3, 2, 2, 2, 267, 268, 5, 18, 10, 2, 268, 21, 3, 2, 2, 2, 269, 270, 5, 20, 11, 2, 270, 271, 7, 2, 2, 3, 271, 23, 3, 2, 2, 2, 272, 273, 7, 72, 2, 2, 273, 275, 7, 10, 2, 2, 274, 272, 3, 2, 2, 2, 274, 275, 3, 2, 2, 2, 275, 276, 3, 2, 2, 2, 276, 277, 5, 18, 10, 2, 277, 25, 3, 2, 2, 2, 278, 298, 7, 68, 2, 2, 279, 298, 7, 69, 2, 2, 280, 298, 9, 10, 2, 2, 281, 298, 7, 70, 2, 2, 282, 298, 7, 71, 2, 2, 283, 289, 7, 43, 2, 2, 284, 285, 5, 18, 10, 2, 285, 286, 7, 25, 2, 2, 286, 288, 3, 2, 2, 2, 287, 284, 3, 2, 2, 2, 288, 291, 3, 2, 2, 2, 289, 287, 3, 2, 2, 2, 289, 290, 3, 2, 2, 2, 290, 293, 3, 2, 2, 2, 291, 289, 3, 2, 2, 2, 292, 294, 5, 18, 10, 2, 293, 292, 3, 2, 2, 2, 293, 294, 3, 2, 2, 2, 294, 295, 3, 2, 2, 2, 295, 298, 7, 44, 2, 2, 296, 298, 7, 72, 2, 2, 297, 278, 3, 2, 2, 2, 297, 279, 3, 2, 2, 2, 297, 280, 3, 2, 2, 2, 297, 281, 3, 2, 2, 2, 297, 282, 3, 2, 2, 2, 297, 283, 3, 2, 2, 2, 297, 296, 3, 2, 2, 2, 298, 27, 3, 2, 2, 2, 299, 300, 7, 72, 2, 2, 300, 302, 7, 25, 2, 2, 301, 299, 3, 2, 2, 2, 302, 305, 3, 2, 2, 2, 303, 301, 3, 2, 2, 2, 303, 304, 3, 2, 2, 2, 304, 306, 3, 2, 2, 2, 305, 303, 3, 2, 2, 2, 306, 307, 7, 72, 2, 2, 307, 29, 3, 2, 2, 2, 308, 309, 8, 16, 1, 2, 309, 321, 9, 11, 2, 2, 310, 311, 7, 35, 2, 2, 311, 312, 5, 30, 16, 2, 312, 313, 7, 36, 2, 2, 313, 321, 3, 2, 2, 2, 314, 315, 7, 43, 2, 2, 315, 316, 5, 30, 16, 2, 316, 317, 7, 44, 2, 2, 317, 321, 3, 2, 2, 2, 318, 319, 7, 67, 2, 2, 319, 321, 5, 30, 16, 3, 320, 308, 3, 2, 2, 2, 320, 310, 3, 2, 2, 2, 320, 314, 3, 2, 2, 2, 320, 318, 3, 2, 2, 2, 321, 330, 3, 2, 2, 2, 322, 323, 12, 5, 2, 2, 323, 324, 7, 12, 2, 2, 324, 329, 5, 30, 16, 5, 325, 326, 12, 4, 2, 2, 326, 327, 7, 67, 2, 2, 327, 329, 5, 30, 16, 4, 328, 322, 3, 2, 2, 2, 328, 325, 3, 2, 2, 2, 329, 332, 3, 2, 2, 2, 330, 328, 3, 2, 2, 2, 330, 331, 3, 2, 2, 2, 331, 31, 3, 2, 2, 2, 332, 330, 3, 2, 2, 2, 36, 35, 44, 54, 59, 65, 72, 84, 86, 93, 105, 110, 126, 138, 142, 146, 151, 153, 159, 166, 175, 189, 245, 249, 254, 256, 264, 274, 289, 293, 297, 303, 320, 328, 330] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 75, 329, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 3, 2, 7, 2, 32, 10, 2, 12, 2, 14, 2, 35, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 43, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 53, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 58, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 64, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 69, 10, 4, 12, 4, 14, 4, 72, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 83, 10, 4, 5, 4, 85, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 90, 10, 5, 12, 5, 14, 5, 93, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 104, 10, 6, 12, 6, 14, 6, 107, 11, 6, 3, 6, 3, 6, 3, 6, 5, 6, 112, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 130, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 141, 10, 6, 12, 6, 14, 6, 144, 11, 6, 3, 6, 5, 6, 147, 10, 6, 3, 6, 3, 6, 5, 6, 151, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 157, 10, 6, 5, 6, 159, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 165, 10, 7, 3, 8, 3, 8, 6, 8, 169, 10, 8, 13, 8, 14, 8, 170, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 185, 10, 9, 12, 9, 14, 9, 188, 11, 9, 3, 9, 5, 9, 191, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 198, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 252, 10, 9, 12, 9, 14, 9, 255, 11, 9, 3, 9, 5, 9, 258, 10, 9, 3, 9, 3, 9, 3, 9, 7, 9, 263, 10, 9, 12, 9, 14, 9, 266, 11, 9, 3, 10, 3, 10, 3, 10, 7, 10, 271, 10, 10, 12, 10, 14, 10, 274, 11, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 5, 12, 283, 10, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 293, 10, 13, 3, 14, 3, 14, 7, 14, 297, 10, 14, 12, 14, 14, 14, 300, 11, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 316, 10, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 7, 15, 324, 10, 15, 12, 15, 14, 15, 327, 11, 15, 3, 15, 2, 4, 16, 28, 16, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 2, 12, 3, 2, 11, 21, 3, 2, 22, 23, 4, 2, 15, 16, 46, 46, 3, 2, 12, 14, 3, 2, 15, 16, 3, 2, 17, 18, 3, 2, 47, 48, 3, 2, 49, 54, 3, 2, 59, 60, 3, 2, 61, 66, 2, 381, 2, 33, 3, 2, 2, 2, 4, 42, 3, 2, 2, 2, 6, 84, 3, 2, 2, 2, 8, 86, 3, 2, 2, 2, 10, 158, 3, 2, 2, 2, 12, 160, 3, 2, 2, 2, 14, 166, 3, 2, 2, 2, 16, 197, 3, 2, 2, 2, 18, 272, 3, 2, 2, 2, 20, 277, 3, 2, 2, 2, 22, 282, 3, 2, 2, 2, 24, 292, 3, 2, 2, 2, 26, 298, 3, 2, 2, 2, 28, 315, 3, 2, 2, 2, 30, 32, 5, 4, 3, 2, 31, 30, 3, 2, 2, 2, 32, 35, 3, 2, 2, 2, 33, 31, 3, 2, 2, 2, 33, 34, 3, 2, 2, 2, 34, 36, 3, 2, 2, 2, 35, 33, 3, 2, 2, 2, 36, 37, 7, 2, 2, 3, 37, 3, 3, 2, 2, 2, 38, 39, 5, 6, 4, 2, 39, 40, 7, 3, 2, 2, 40, 43, 3, 2, 2, 2, 41, 43, 5, 10, 6, 2, 42, 38, 3, 2, 2, 2, 42, 41, 3, 2, 2, 2, 43, 5, 3, 2, 2, 2, 44, 45, 7, 4, 2, 2, 45, 52, 7, 72, 2, 2, 46, 47, 7, 5, 2, 2, 47, 53, 5, 26, 14, 2, 48, 49, 7, 6, 2, 2, 49, 53, 5, 26, 14, 2, 50, 51, 7, 7, 2, 2, 51, 53, 7, 72, 2, 2, 52, 46, 3, 2, 2, 2, 52, 48, 3, 2, 2, 2, 52, 50, 3, 2, 2, 2, 52, 53, 3, 2, 2, 2, 53, 85, 3, 2, 2, 2, 54, 85, 7, 8, 2, 2, 55, 57, 7, 9, 2, 2, 56, 58, 5, 18, 10, 2, 57, 56, 3, 2, 2, 2, 57, 58, 3, 2, 2, 2, 58, 85, 3, 2, 2, 2, 59, 60, 5, 28, 15, 2, 60, 63, 7, 72, 2, 2, 61, 62, 7, 10, 2, 2, 62, 64, 5, 18, 10, 2, 63, 61, 3, 2, 2, 2, 63, 64, 3, 2, 2, 2, 64, 85, 3, 2, 2, 2, 65, 66, 5, 8, 5, 2, 66, 67, 7, 10, 2, 2, 67, 69, 3, 2, 2, 2, 68, 65, 3, 2, 2, 2, 69, 72, 3, 2, 2, 2, 70, 68, 3, 2, 2, 2, 70, 71, 3, 2, 2, 2, 71, 73, 3, 2, 2, 2, 72, 70, 3, 2, 2, 2, 73, 85, 5, 18, 10, 2, 74, 75, 5, 16, 9, 2, 75, 76, 9, 2, 2, 2, 76, 77, 7, 10, 2, 2, 77, 78, 5, 16, 9, 2, 78, 85, 3, 2, 2, 2, 79, 85, 9, 3, 2, 2, 80, 82, 7, 24, 2, 2, 81, 83, 5, 18, 10, 2, 82, 81, 3, 2, 2, 2, 82, 83, 3, 2, 2, 2, 83, 85, 3, 2, 2, 2, 84, 44, 3, 2, 2, 2, 84, 54, 3, 2, 2, 2, 84, 55, 3, 2, 2, 2, 84, 59, 3, 2, 2, 2, 84, 70, 3, 2, 2, 2, 84, 74, 3, 2, 2, 2, 84, 79, 3, 2, 2, 2, 84, 80, 3, 2, 2, 2, 85, 7, 3, 2, 2, 2, 86, 91, 5, 16, 9, 2, 87, 88, 7, 25, 2, 2, 88, 90, 5, 16, 9, 2, 89, 87, 3, 2, 2, 2, 90, 93, 3, 2, 2, 2, 91, 89, 3, 2, 2, 2, 91, 92, 3, 2, 2, 2, 92, 9, 3, 2, 2, 2, 93, 91, 3, 2, 2, 2, 94, 95, 7, 26, 2, 2, 95, 96, 5, 16, 9, 2, 96, 97, 7, 27, 2, 2, 97, 105, 5, 14, 8, 2, 98, 99, 7, 28, 2, 2, 99, 100, 5, 16, 9, 2, 100, 101, 7, 27, 2, 2, 101, 102, 5, 14, 8, 2, 102, 104, 3, 2, 2, 2, 103, 98, 3, 2, 2, 2, 104, 107, 3, 2, 2, 2, 105, 103, 3, 2, 2, 2, 105, 106, 3, 2, 2, 2, 106, 111, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 108, 109, 7, 29, 2, 2, 109, 110, 7, 27, 2, 2, 110, 112, 5, 14, 8, 2, 111, 108, 3, 2, 2, 2, 111, 112, 3, 2, 2, 2, 112, 159, 3, 2, 2, 2, 113, 114, 7, 30, 2, 2, 114, 115, 5, 16, 9, 2, 115, 116, 7, 27, 2, 2, 116, 117, 5, 14, 8, 2, 117, 159, 3, 2, 2, 2, 118, 119, 7, 31, 2, 2, 119, 120, 5, 16, 9, 2, 120, 121, 7, 27, 2, 2, 121, 122, 5, 14, 8, 2, 122, 159, 3, 2, 2, 2, 123, 124, 7, 32, 2, 2, 124, 125, 5, 18, 10, 2, 125, 126, 7, 33, 2, 2, 126, 129, 5, 18, 10, 2, 127, 128, 7, 34, 2, 2, 128, 130, 5, 18, 10, 2, 129, 127, 3, 2, 2, 2, 129, 130, 3, 2, 2, 2, 130, 131, 3, 2, 2, 2, 131, 132, 7, 27, 2, 2, 132, 133, 5, 14, 8, 2, 133, 159, 3, 2, 2, 2, 134, 135, 7, 35, 2, 2, 135, 136, 7, 72, 2, 2, 136, 142, 7, 36, 2, 2, 137, 138, 5, 12, 7, 2, 138, 139, 7, 25, 2, 2, 139, 141, 3, 2, 2, 2, 140, 137, 3, 2, 2, 2, 141, 144, 3, 2, 2, 2, 142, 140, 3, 2, 2, 2, 142, 143, 3, 2, 2, 2, 143, 146, 3, 2, 2, 2, 144, 142, 3, 2, 2, 2, 145, 147, 5, 12, 7, 2, 146, 145, 3, 2, 2, 2, 146, 147, 3, 2, 2, 2, 147, 148, 3, 2, 2, 2, 148, 150, 7, 37, 2, 2, 149, 151, 5, 28, 15, 2, 150, 149, 3, 2, 2, 2, 150, 151, 3, 2, 2, 2, 151, 156, 3, 2, 2, 2, 152, 153, 7, 38, 2, 2, 153, 157, 5, 14, 8, 2, 154, 155, 7, 39, 2, 2, 155, 157, 7, 3, 2, 2, 156, 152, 3, 2, 2, 2, 156, 154, 3, 2, 2, 2, 157, 159, 3, 2, 2, 2, 158, 94, 3, 2, 2, 2, 158, 113, 3, 2, 2, 2, 158, 118, 3, 2, 2, 2, 158, 123, 3, 2, 2, 2, 158, 134, 3, 2, 2, 2, 159, 11, 3, 2, 2, 2, 160, 161, 5, 28, 15, 2, 161, 164, 7, 72, 2, 2, 162, 163, 7, 40, 2, 2, 163, 165, 5, 16, 9, 2, 164, 162, 3, 2, 2, 2, 164, 165, 3, 2, 2, 2, 165, 13, 3, 2, 2, 2, 166, 168, 7, 41, 2, 2, 167, 169, 5, 4, 3, 2, 168, 167, 3, 2, 2, 2, 169, 170, 3, 2, 2, 2, 170, 168, 3, 2, 2, 2, 170, 171, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 173, 7, 42, 2, 2, 173, 15, 3, 2, 2, 2, 174, 175, 8, 9, 1, 2, 175, 198, 5, 24, 13, 2, 176, 177, 7, 36, 2, 2, 177, 178, 5, 18, 10, 2, 178, 179, 7, 37, 2, 2, 179, 198, 3, 2, 2, 2, 180, 186, 7, 43, 2, 2, 181, 182, 5, 16, 9, 2, 182, 183, 7, 25, 2, 2, 183, 185, 3, 2, 2, 2, 184, 181, 3, 2, 2, 2, 185, 188, 3, 2, 2, 2, 186, 184, 3, 2, 2, 2, 186, 187, 3, 2, 2, 2, 187, 190, 3, 2, 2, 2, 188, 186, 3, 2, 2, 2, 189, 191, 5, 16, 9, 2, 190, 189, 3, 2, 2, 2, 190, 191, 3, 2, 2, 2, 191, 192, 3, 2, 2, 2, 192, 198, 7, 44, 2, 2, 193, 194, 9, 4, 2, 2, 194, 198, 5, 16, 9, 16, 195, 196, 7, 55, 2, 2, 196, 198, 5, 16, 9, 6, 197, 174, 3, 2, 2, 2, 197, 176, 3, 2, 2, 2, 197, 180, 3, 2, 2, 2, 197, 193, 3, 2, 2, 2, 197, 195, 3, 2, 2, 2, 198, 264, 3, 2, 2, 2, 199, 200, 12, 17, 2, 2, 200, 201, 7, 11, 2, 2, 201, 263, 5, 16, 9, 17, 202, 203, 12, 15, 2, 2, 203, 204, 9, 5, 2, 2, 204, 263, 5, 16, 9, 16, 205, 206, 12, 14, 2, 2, 206, 207, 9, 6, 2, 2, 207, 263, 5, 16, 9, 15, 208, 209, 12, 13, 2, 2, 209, 210, 9, 7, 2, 2, 210, 263, 5, 16, 9, 14, 211, 212, 12, 12, 2, 2, 212, 213, 7, 19, 2, 2, 213, 263, 5, 16, 9, 13, 214, 215, 12, 11, 2, 2, 215, 216, 7, 20, 2, 2, 216, 263, 5, 16, 9, 12, 217, 218, 12, 10, 2, 2, 218, 219, 7, 21, 2, 2, 219, 263, 5, 16, 9, 11, 220, 221, 12, 9, 2, 2, 221, 222, 9, 8, 2, 2, 222, 263, 5, 16, 9, 10, 223, 224, 12, 7, 2, 2, 224, 225, 9, 9, 2, 2, 225, 263, 5, 16, 9, 7, 226, 227, 12, 5, 2, 2, 227, 228, 7, 56, 2, 2, 228, 263, 5, 16, 9, 5, 229, 230, 12, 4, 2, 2, 230, 231, 7, 57, 2, 2, 231, 263, 5, 16, 9, 4, 232, 233, 12, 3, 2, 2, 233, 234, 7, 58, 2, 2, 234, 235, 5, 16, 9, 2, 235, 236, 7, 40, 2, 2, 236, 237, 5, 16, 9, 3, 237, 263, 3, 2, 2, 2, 238, 239, 12, 20, 2, 2, 239, 240, 7, 43, 2, 2, 240, 241, 5, 18, 10, 2, 241, 242, 7, 44, 2, 2, 242, 263, 3, 2, 2, 2, 243, 244, 12, 19, 2, 2, 244, 245, 7, 45, 2, 2, 245, 263, 7, 72, 2, 2, 246, 247, 12, 18, 2, 2, 247, 253, 7, 36, 2, 2, 248, 249, 5, 22, 12, 2, 249, 250, 7, 25, 2, 2, 250, 252, 3, 2, 2, 2, 251, 248, 3, 2, 2, 2, 252, 255, 3, 2, 2, 2, 253, 251, 3, 2, 2, 2, 253, 254, 3, 2, 2, 2, 254, 257, 3, 2, 2, 2, 255, 253, 3, 2, 2, 2, 256, 258, 5, 22, 12, 2, 257, 256, 3, 2, 2, 2, 257, 258, 3, 2, 2, 2, 258, 259, 3, 2, 2, 2, 259, 263, 7, 37, 2, 2, 260, 261, 12, 8, 2, 2, 261, 263, 7, 48, 2, 2, 262, 199, 3, 2, 2, 2, 262, 202, 3, 2, 2, 2, 262, 205, 3, 2, 2, 2, 262, 208, 3, 2, 2, 2, 262, 211, 3, 2, 2, 2, 262, 214, 3, 2, 2, 2, 262, 217, 3, 2, 2, 2, 262, 220, 3, 2, 2, 2, 262, 223, 3, 2, 2, 2, 262, 226, 3, 2, 2, 2, 262, 229, 3, 2, 2, 2, 262, 232, 3, 2, 2, 2, 262, 238, 3, 2, 2, 2, 262, 243, 3, 2, 2, 2, 262, 246, 3, 2, 2, 2, 262, 260, 3, 2, 2, 2, 263, 266, 3, 2, 2, 2, 264, 262, 3, 2, 2, 2, 264, 265, 3, 2, 2, 2, 265, 17, 3, 2, 2, 2, 266, 264, 3, 2, 2, 2, 267, 268, 5, 16, 9, 2, 268, 269, 7, 25, 2, 2, 269, 271, 3, 2, 2, 2, 270, 267, 3, 2, 2, 2, 271, 274, 3, 2, 2, 2, 272, 270, 3, 2, 2, 2, 272, 273, 3, 2, 2, 2, 273, 275, 3, 2, 2, 2, 274, 272, 3, 2, 2, 2, 275, 276, 5, 16, 9, 2, 276, 19, 3, 2, 2, 2, 277, 278, 5, 18, 10, 2, 278, 279, 7, 2, 2, 3, 279, 21, 3, 2, 2, 2, 280, 281, 7, 72, 2, 2, 281, 283, 7, 10, 2, 2, 282, 280, 3, 2, 2, 2, 282, 283, 3, 2, 2, 2, 283, 284, 3, 2, 2, 2, 284, 285, 5, 16, 9, 2, 285, 23, 3, 2, 2, 2, 286, 293, 7, 68, 2, 2, 287, 293, 7, 69, 2, 2, 288, 293, 9, 10, 2, 2, 289, 293, 7, 70, 2, 2, 290, 293, 7, 71, 2, 2, 291, 293, 7, 72, 2, 2, 292, 286, 3, 2, 2, 2, 292, 287, 3, 2, 2, 2, 292, 288, 3, 2, 2, 2, 292, 289, 3, 2, 2, 2, 292, 290, 3, 2, 2, 2, 292, 291, 3, 2, 2, 2, 293, 25, 3, 2, 2, 2, 294, 295, 7, 72, 2, 2, 295, 297, 7, 25, 2, 2, 296, 294, 3, 2, 2, 2, 297, 300, 3, 2, 2, 2, 298, 296, 3, 2, 2, 2, 298, 299, 3, 2, 2, 2, 299, 301, 3, 2, 2, 2, 300, 298, 3, 2, 2, 2, 301, 302, 7, 72, 2, 2, 302, 27, 3, 2, 2, 2, 303, 304, 8, 15, 1, 2, 304, 316, 9, 11, 2, 2, 305, 306, 7, 36, 2, 2, 306, 307, 5, 28, 15, 2, 307, 308, 7, 37, 2, 2, 308, 316, 3, 2, 2, 2, 309, 310, 7, 43, 2, 2, 310, 311, 5, 28, 15, 2, 311, 312, 7, 44, 2, 2, 312, 316, 3, 2, 2, 2, 313, 314, 7, 67, 2, 2, 314, 316, 5, 28, 15, 3, 315, 303, 3, 2, 2, 2, 315, 305, 3, 2, 2, 2, 315, 309, 3, 2, 2, 2, 315, 313, 3, 2, 2, 2, 316, 325, 3, 2, 2, 2, 317, 318, 12, 5, 2, 2, 318, 319, 7, 12, 2, 2, 319, 324, 5, 28, 15, 5, 320, 321, 12, 4, 2, 2, 321, 322, 7, 67, 2, 2, 322, 324, 5, 28, 15, 4, 323, 317, 3, 2, 2, 2, 323, 320, 3, 2, 2, 2, 324, 327, 3, 2, 2, 2, 325, 323, 3, 2, 2, 2, 325, 326, 3, 2, 2, 2, 326, 29, 3, 2, 2, 2, 327, 325, 3, 2, 2, 2, 35, 33, 42, 52, 57, 63, 70, 82, 84, 91, 105, 111, 129, 142, 146, 150, 156, 158, 164, 170, 186, 190, 197, 253, 257, 262, 264, 272, 282, 292, 298, 315, 323, 325] \ No newline at end of file diff --git a/src/antlr/Pyxell.tokens b/src/antlr/Pyxell.tokens index 851d08ac..4c4934c0 100644 --- a/src/antlr/Pyxell.tokens +++ b/src/antlr/Pyxell.tokens @@ -95,22 +95,22 @@ ERR=73 'return'=22 ','=23 'if'=24 -'elif'=25 -'else'=26 -'while'=27 -'until'=28 -'for'=29 -'in'=30 -'step'=31 -'func'=32 -'('=33 -')'=34 -'extern'=35 -':'=36 -'do'=37 -'{'=38 -'}'=39 -'def'=40 +'do'=25 +'elif'=26 +'else'=27 +'while'=28 +'until'=29 +'for'=30 +'in'=31 +'step'=32 +'func'=33 +'('=34 +')'=35 +'def'=36 +'extern'=37 +':'=38 +'{'=39 +'}'=40 '['=41 ']'=42 '.'=43 diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp index 63e39e75..118d031f 100644 --- a/src/antlr/PyxellLexer.interp +++ b/src/antlr/PyxellLexer.interp @@ -24,6 +24,7 @@ null 'return' ',' 'if' +'do' 'elif' 'else' 'while' @@ -34,12 +35,11 @@ null 'func' '(' ')' +'def' 'extern' ':' -'do' '{' '}' -'def' '[' ']' '.' @@ -236,4 +236,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 75, 478, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 67, 6, 67, 395, 10, 67, 13, 67, 14, 67, 396, 3, 68, 6, 68, 400, 10, 68, 13, 68, 14, 68, 401, 3, 68, 3, 68, 6, 68, 406, 10, 68, 13, 68, 14, 68, 407, 3, 68, 3, 68, 5, 68, 412, 10, 68, 3, 68, 6, 68, 415, 10, 68, 13, 68, 14, 68, 416, 5, 68, 419, 10, 68, 3, 69, 3, 69, 3, 69, 3, 69, 7, 69, 425, 10, 69, 12, 69, 14, 69, 428, 11, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, 7, 70, 436, 10, 70, 12, 70, 14, 70, 439, 11, 70, 3, 70, 3, 70, 3, 71, 3, 71, 7, 71, 445, 10, 71, 12, 71, 14, 71, 448, 11, 71, 3, 72, 3, 72, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 5, 74, 457, 10, 74, 3, 75, 3, 75, 3, 75, 3, 75, 7, 75, 463, 10, 75, 12, 75, 14, 75, 466, 11, 75, 3, 75, 3, 75, 3, 76, 6, 76, 471, 10, 76, 13, 76, 14, 76, 472, 3, 76, 3, 76, 3, 77, 3, 77, 2, 2, 78, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 2, 145, 2, 147, 2, 149, 73, 151, 74, 153, 75, 3, 2, 11, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 4, 2, 12, 12, 14, 15, 5, 2, 11, 12, 15, 15, 34, 34, 2, 489, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 3, 155, 3, 2, 2, 2, 5, 157, 3, 2, 2, 2, 7, 161, 3, 2, 2, 2, 9, 166, 3, 2, 2, 2, 11, 173, 3, 2, 2, 2, 13, 176, 3, 2, 2, 2, 15, 181, 3, 2, 2, 2, 17, 187, 3, 2, 2, 2, 19, 189, 3, 2, 2, 2, 21, 191, 3, 2, 2, 2, 23, 193, 3, 2, 2, 2, 25, 195, 3, 2, 2, 2, 27, 197, 3, 2, 2, 2, 29, 199, 3, 2, 2, 2, 31, 201, 3, 2, 2, 2, 33, 204, 3, 2, 2, 2, 35, 207, 3, 2, 2, 2, 37, 209, 3, 2, 2, 2, 39, 211, 3, 2, 2, 2, 41, 213, 3, 2, 2, 2, 43, 219, 3, 2, 2, 2, 45, 228, 3, 2, 2, 2, 47, 235, 3, 2, 2, 2, 49, 237, 3, 2, 2, 2, 51, 240, 3, 2, 2, 2, 53, 245, 3, 2, 2, 2, 55, 250, 3, 2, 2, 2, 57, 256, 3, 2, 2, 2, 59, 262, 3, 2, 2, 2, 61, 266, 3, 2, 2, 2, 63, 269, 3, 2, 2, 2, 65, 274, 3, 2, 2, 2, 67, 279, 3, 2, 2, 2, 69, 281, 3, 2, 2, 2, 71, 283, 3, 2, 2, 2, 73, 290, 3, 2, 2, 2, 75, 292, 3, 2, 2, 2, 77, 295, 3, 2, 2, 2, 79, 297, 3, 2, 2, 2, 81, 299, 3, 2, 2, 2, 83, 303, 3, 2, 2, 2, 85, 305, 3, 2, 2, 2, 87, 307, 3, 2, 2, 2, 89, 309, 3, 2, 2, 2, 91, 311, 3, 2, 2, 2, 93, 314, 3, 2, 2, 2, 95, 318, 3, 2, 2, 2, 97, 321, 3, 2, 2, 2, 99, 324, 3, 2, 2, 2, 101, 326, 3, 2, 2, 2, 103, 329, 3, 2, 2, 2, 105, 331, 3, 2, 2, 2, 107, 334, 3, 2, 2, 2, 109, 338, 3, 2, 2, 2, 111, 342, 3, 2, 2, 2, 113, 345, 3, 2, 2, 2, 115, 347, 3, 2, 2, 2, 117, 352, 3, 2, 2, 2, 119, 358, 3, 2, 2, 2, 121, 363, 3, 2, 2, 2, 123, 367, 3, 2, 2, 2, 125, 373, 3, 2, 2, 2, 127, 378, 3, 2, 2, 2, 129, 383, 3, 2, 2, 2, 131, 390, 3, 2, 2, 2, 133, 394, 3, 2, 2, 2, 135, 399, 3, 2, 2, 2, 137, 420, 3, 2, 2, 2, 139, 431, 3, 2, 2, 2, 141, 442, 3, 2, 2, 2, 143, 449, 3, 2, 2, 2, 145, 451, 3, 2, 2, 2, 147, 456, 3, 2, 2, 2, 149, 458, 3, 2, 2, 2, 151, 470, 3, 2, 2, 2, 153, 476, 3, 2, 2, 2, 155, 156, 7, 61, 2, 2, 156, 4, 3, 2, 2, 2, 157, 158, 7, 119, 2, 2, 158, 159, 7, 117, 2, 2, 159, 160, 7, 103, 2, 2, 160, 6, 3, 2, 2, 2, 161, 162, 7, 113, 2, 2, 162, 163, 7, 112, 2, 2, 163, 164, 7, 110, 2, 2, 164, 165, 7, 123, 2, 2, 165, 8, 3, 2, 2, 2, 166, 167, 7, 106, 2, 2, 167, 168, 7, 107, 2, 2, 168, 169, 7, 102, 2, 2, 169, 170, 7, 107, 2, 2, 170, 171, 7, 112, 2, 2, 171, 172, 7, 105, 2, 2, 172, 10, 3, 2, 2, 2, 173, 174, 7, 99, 2, 2, 174, 175, 7, 117, 2, 2, 175, 12, 3, 2, 2, 2, 176, 177, 7, 117, 2, 2, 177, 178, 7, 109, 2, 2, 178, 179, 7, 107, 2, 2, 179, 180, 7, 114, 2, 2, 180, 14, 3, 2, 2, 2, 181, 182, 7, 114, 2, 2, 182, 183, 7, 116, 2, 2, 183, 184, 7, 107, 2, 2, 184, 185, 7, 112, 2, 2, 185, 186, 7, 118, 2, 2, 186, 16, 3, 2, 2, 2, 187, 188, 7, 63, 2, 2, 188, 18, 3, 2, 2, 2, 189, 190, 7, 96, 2, 2, 190, 20, 3, 2, 2, 2, 191, 192, 7, 44, 2, 2, 192, 22, 3, 2, 2, 2, 193, 194, 7, 49, 2, 2, 194, 24, 3, 2, 2, 2, 195, 196, 7, 39, 2, 2, 196, 26, 3, 2, 2, 2, 197, 198, 7, 45, 2, 2, 198, 28, 3, 2, 2, 2, 199, 200, 7, 47, 2, 2, 200, 30, 3, 2, 2, 2, 201, 202, 7, 62, 2, 2, 202, 203, 7, 62, 2, 2, 203, 32, 3, 2, 2, 2, 204, 205, 7, 64, 2, 2, 205, 206, 7, 64, 2, 2, 206, 34, 3, 2, 2, 2, 207, 208, 7, 40, 2, 2, 208, 36, 3, 2, 2, 2, 209, 210, 7, 38, 2, 2, 210, 38, 3, 2, 2, 2, 211, 212, 7, 126, 2, 2, 212, 40, 3, 2, 2, 2, 213, 214, 7, 100, 2, 2, 214, 215, 7, 116, 2, 2, 215, 216, 7, 103, 2, 2, 216, 217, 7, 99, 2, 2, 217, 218, 7, 109, 2, 2, 218, 42, 3, 2, 2, 2, 219, 220, 7, 101, 2, 2, 220, 221, 7, 113, 2, 2, 221, 222, 7, 112, 2, 2, 222, 223, 7, 118, 2, 2, 223, 224, 7, 107, 2, 2, 224, 225, 7, 112, 2, 2, 225, 226, 7, 119, 2, 2, 226, 227, 7, 103, 2, 2, 227, 44, 3, 2, 2, 2, 228, 229, 7, 116, 2, 2, 229, 230, 7, 103, 2, 2, 230, 231, 7, 118, 2, 2, 231, 232, 7, 119, 2, 2, 232, 233, 7, 116, 2, 2, 233, 234, 7, 112, 2, 2, 234, 46, 3, 2, 2, 2, 235, 236, 7, 46, 2, 2, 236, 48, 3, 2, 2, 2, 237, 238, 7, 107, 2, 2, 238, 239, 7, 104, 2, 2, 239, 50, 3, 2, 2, 2, 240, 241, 7, 103, 2, 2, 241, 242, 7, 110, 2, 2, 242, 243, 7, 107, 2, 2, 243, 244, 7, 104, 2, 2, 244, 52, 3, 2, 2, 2, 245, 246, 7, 103, 2, 2, 246, 247, 7, 110, 2, 2, 247, 248, 7, 117, 2, 2, 248, 249, 7, 103, 2, 2, 249, 54, 3, 2, 2, 2, 250, 251, 7, 121, 2, 2, 251, 252, 7, 106, 2, 2, 252, 253, 7, 107, 2, 2, 253, 254, 7, 110, 2, 2, 254, 255, 7, 103, 2, 2, 255, 56, 3, 2, 2, 2, 256, 257, 7, 119, 2, 2, 257, 258, 7, 112, 2, 2, 258, 259, 7, 118, 2, 2, 259, 260, 7, 107, 2, 2, 260, 261, 7, 110, 2, 2, 261, 58, 3, 2, 2, 2, 262, 263, 7, 104, 2, 2, 263, 264, 7, 113, 2, 2, 264, 265, 7, 116, 2, 2, 265, 60, 3, 2, 2, 2, 266, 267, 7, 107, 2, 2, 267, 268, 7, 112, 2, 2, 268, 62, 3, 2, 2, 2, 269, 270, 7, 117, 2, 2, 270, 271, 7, 118, 2, 2, 271, 272, 7, 103, 2, 2, 272, 273, 7, 114, 2, 2, 273, 64, 3, 2, 2, 2, 274, 275, 7, 104, 2, 2, 275, 276, 7, 119, 2, 2, 276, 277, 7, 112, 2, 2, 277, 278, 7, 101, 2, 2, 278, 66, 3, 2, 2, 2, 279, 280, 7, 42, 2, 2, 280, 68, 3, 2, 2, 2, 281, 282, 7, 43, 2, 2, 282, 70, 3, 2, 2, 2, 283, 284, 7, 103, 2, 2, 284, 285, 7, 122, 2, 2, 285, 286, 7, 118, 2, 2, 286, 287, 7, 103, 2, 2, 287, 288, 7, 116, 2, 2, 288, 289, 7, 112, 2, 2, 289, 72, 3, 2, 2, 2, 290, 291, 7, 60, 2, 2, 291, 74, 3, 2, 2, 2, 292, 293, 7, 102, 2, 2, 293, 294, 7, 113, 2, 2, 294, 76, 3, 2, 2, 2, 295, 296, 7, 125, 2, 2, 296, 78, 3, 2, 2, 2, 297, 298, 7, 127, 2, 2, 298, 80, 3, 2, 2, 2, 299, 300, 7, 102, 2, 2, 300, 301, 7, 103, 2, 2, 301, 302, 7, 104, 2, 2, 302, 82, 3, 2, 2, 2, 303, 304, 7, 93, 2, 2, 304, 84, 3, 2, 2, 2, 305, 306, 7, 95, 2, 2, 306, 86, 3, 2, 2, 2, 307, 308, 7, 48, 2, 2, 308, 88, 3, 2, 2, 2, 309, 310, 7, 128, 2, 2, 310, 90, 3, 2, 2, 2, 311, 312, 7, 48, 2, 2, 312, 313, 7, 48, 2, 2, 313, 92, 3, 2, 2, 2, 314, 315, 7, 48, 2, 2, 315, 316, 7, 48, 2, 2, 316, 317, 7, 48, 2, 2, 317, 94, 3, 2, 2, 2, 318, 319, 7, 63, 2, 2, 319, 320, 7, 63, 2, 2, 320, 96, 3, 2, 2, 2, 321, 322, 7, 35, 2, 2, 322, 323, 7, 63, 2, 2, 323, 98, 3, 2, 2, 2, 324, 325, 7, 62, 2, 2, 325, 100, 3, 2, 2, 2, 326, 327, 7, 62, 2, 2, 327, 328, 7, 63, 2, 2, 328, 102, 3, 2, 2, 2, 329, 330, 7, 64, 2, 2, 330, 104, 3, 2, 2, 2, 331, 332, 7, 64, 2, 2, 332, 333, 7, 63, 2, 2, 333, 106, 3, 2, 2, 2, 334, 335, 7, 112, 2, 2, 335, 336, 7, 113, 2, 2, 336, 337, 7, 118, 2, 2, 337, 108, 3, 2, 2, 2, 338, 339, 7, 99, 2, 2, 339, 340, 7, 112, 2, 2, 340, 341, 7, 102, 2, 2, 341, 110, 3, 2, 2, 2, 342, 343, 7, 113, 2, 2, 343, 344, 7, 116, 2, 2, 344, 112, 3, 2, 2, 2, 345, 346, 7, 65, 2, 2, 346, 114, 3, 2, 2, 2, 347, 348, 7, 118, 2, 2, 348, 349, 7, 116, 2, 2, 349, 350, 7, 119, 2, 2, 350, 351, 7, 103, 2, 2, 351, 116, 3, 2, 2, 2, 352, 353, 7, 104, 2, 2, 353, 354, 7, 99, 2, 2, 354, 355, 7, 110, 2, 2, 355, 356, 7, 117, 2, 2, 356, 357, 7, 103, 2, 2, 357, 118, 3, 2, 2, 2, 358, 359, 7, 88, 2, 2, 359, 360, 7, 113, 2, 2, 360, 361, 7, 107, 2, 2, 361, 362, 7, 102, 2, 2, 362, 120, 3, 2, 2, 2, 363, 364, 7, 75, 2, 2, 364, 365, 7, 112, 2, 2, 365, 366, 7, 118, 2, 2, 366, 122, 3, 2, 2, 2, 367, 368, 7, 72, 2, 2, 368, 369, 7, 110, 2, 2, 369, 370, 7, 113, 2, 2, 370, 371, 7, 99, 2, 2, 371, 372, 7, 118, 2, 2, 372, 124, 3, 2, 2, 2, 373, 374, 7, 68, 2, 2, 374, 375, 7, 113, 2, 2, 375, 376, 7, 113, 2, 2, 376, 377, 7, 110, 2, 2, 377, 126, 3, 2, 2, 2, 378, 379, 7, 69, 2, 2, 379, 380, 7, 106, 2, 2, 380, 381, 7, 99, 2, 2, 381, 382, 7, 116, 2, 2, 382, 128, 3, 2, 2, 2, 383, 384, 7, 85, 2, 2, 384, 385, 7, 118, 2, 2, 385, 386, 7, 116, 2, 2, 386, 387, 7, 107, 2, 2, 387, 388, 7, 112, 2, 2, 388, 389, 7, 105, 2, 2, 389, 130, 3, 2, 2, 2, 390, 391, 7, 47, 2, 2, 391, 392, 7, 64, 2, 2, 392, 132, 3, 2, 2, 2, 393, 395, 5, 143, 72, 2, 394, 393, 3, 2, 2, 2, 395, 396, 3, 2, 2, 2, 396, 394, 3, 2, 2, 2, 396, 397, 3, 2, 2, 2, 397, 134, 3, 2, 2, 2, 398, 400, 5, 143, 72, 2, 399, 398, 3, 2, 2, 2, 400, 401, 3, 2, 2, 2, 401, 399, 3, 2, 2, 2, 401, 402, 3, 2, 2, 2, 402, 403, 3, 2, 2, 2, 403, 405, 7, 48, 2, 2, 404, 406, 5, 143, 72, 2, 405, 404, 3, 2, 2, 2, 406, 407, 3, 2, 2, 2, 407, 405, 3, 2, 2, 2, 407, 408, 3, 2, 2, 2, 408, 418, 3, 2, 2, 2, 409, 411, 7, 103, 2, 2, 410, 412, 7, 47, 2, 2, 411, 410, 3, 2, 2, 2, 411, 412, 3, 2, 2, 2, 412, 414, 3, 2, 2, 2, 413, 415, 5, 143, 72, 2, 414, 413, 3, 2, 2, 2, 415, 416, 3, 2, 2, 2, 416, 414, 3, 2, 2, 2, 416, 417, 3, 2, 2, 2, 417, 419, 3, 2, 2, 2, 418, 409, 3, 2, 2, 2, 418, 419, 3, 2, 2, 2, 419, 136, 3, 2, 2, 2, 420, 426, 7, 41, 2, 2, 421, 425, 10, 2, 2, 2, 422, 423, 7, 94, 2, 2, 423, 425, 9, 3, 2, 2, 424, 421, 3, 2, 2, 2, 424, 422, 3, 2, 2, 2, 425, 428, 3, 2, 2, 2, 426, 424, 3, 2, 2, 2, 426, 427, 3, 2, 2, 2, 427, 429, 3, 2, 2, 2, 428, 426, 3, 2, 2, 2, 429, 430, 7, 41, 2, 2, 430, 138, 3, 2, 2, 2, 431, 437, 7, 36, 2, 2, 432, 436, 10, 4, 2, 2, 433, 434, 7, 94, 2, 2, 434, 436, 9, 5, 2, 2, 435, 432, 3, 2, 2, 2, 435, 433, 3, 2, 2, 2, 436, 439, 3, 2, 2, 2, 437, 435, 3, 2, 2, 2, 437, 438, 3, 2, 2, 2, 438, 440, 3, 2, 2, 2, 439, 437, 3, 2, 2, 2, 440, 441, 7, 36, 2, 2, 441, 140, 3, 2, 2, 2, 442, 446, 5, 145, 73, 2, 443, 445, 5, 147, 74, 2, 444, 443, 3, 2, 2, 2, 445, 448, 3, 2, 2, 2, 446, 444, 3, 2, 2, 2, 446, 447, 3, 2, 2, 2, 447, 142, 3, 2, 2, 2, 448, 446, 3, 2, 2, 2, 449, 450, 9, 6, 2, 2, 450, 144, 3, 2, 2, 2, 451, 452, 9, 7, 2, 2, 452, 146, 3, 2, 2, 2, 453, 457, 5, 145, 73, 2, 454, 457, 5, 143, 72, 2, 455, 457, 9, 8, 2, 2, 456, 453, 3, 2, 2, 2, 456, 454, 3, 2, 2, 2, 456, 455, 3, 2, 2, 2, 457, 148, 3, 2, 2, 2, 458, 459, 7, 47, 2, 2, 459, 460, 7, 47, 2, 2, 460, 464, 3, 2, 2, 2, 461, 463, 10, 9, 2, 2, 462, 461, 3, 2, 2, 2, 463, 466, 3, 2, 2, 2, 464, 462, 3, 2, 2, 2, 464, 465, 3, 2, 2, 2, 465, 467, 3, 2, 2, 2, 466, 464, 3, 2, 2, 2, 467, 468, 8, 75, 2, 2, 468, 150, 3, 2, 2, 2, 469, 471, 9, 10, 2, 2, 470, 469, 3, 2, 2, 2, 471, 472, 3, 2, 2, 2, 472, 470, 3, 2, 2, 2, 472, 473, 3, 2, 2, 2, 473, 474, 3, 2, 2, 2, 474, 475, 8, 76, 2, 2, 475, 152, 3, 2, 2, 2, 476, 477, 11, 2, 2, 2, 477, 154, 3, 2, 2, 2, 17, 2, 396, 401, 407, 411, 416, 418, 424, 426, 435, 437, 446, 456, 464, 472, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 75, 478, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 67, 6, 67, 395, 10, 67, 13, 67, 14, 67, 396, 3, 68, 6, 68, 400, 10, 68, 13, 68, 14, 68, 401, 3, 68, 3, 68, 6, 68, 406, 10, 68, 13, 68, 14, 68, 407, 3, 68, 3, 68, 5, 68, 412, 10, 68, 3, 68, 6, 68, 415, 10, 68, 13, 68, 14, 68, 416, 5, 68, 419, 10, 68, 3, 69, 3, 69, 3, 69, 3, 69, 7, 69, 425, 10, 69, 12, 69, 14, 69, 428, 11, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, 7, 70, 436, 10, 70, 12, 70, 14, 70, 439, 11, 70, 3, 70, 3, 70, 3, 71, 3, 71, 7, 71, 445, 10, 71, 12, 71, 14, 71, 448, 11, 71, 3, 72, 3, 72, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 5, 74, 457, 10, 74, 3, 75, 3, 75, 3, 75, 3, 75, 7, 75, 463, 10, 75, 12, 75, 14, 75, 466, 11, 75, 3, 75, 3, 75, 3, 76, 6, 76, 471, 10, 76, 13, 76, 14, 76, 472, 3, 76, 3, 76, 3, 77, 3, 77, 2, 2, 78, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 2, 145, 2, 147, 2, 149, 73, 151, 74, 153, 75, 3, 2, 11, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 4, 2, 12, 12, 14, 15, 5, 2, 11, 12, 15, 15, 34, 34, 2, 489, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 3, 155, 3, 2, 2, 2, 5, 157, 3, 2, 2, 2, 7, 161, 3, 2, 2, 2, 9, 166, 3, 2, 2, 2, 11, 173, 3, 2, 2, 2, 13, 176, 3, 2, 2, 2, 15, 181, 3, 2, 2, 2, 17, 187, 3, 2, 2, 2, 19, 189, 3, 2, 2, 2, 21, 191, 3, 2, 2, 2, 23, 193, 3, 2, 2, 2, 25, 195, 3, 2, 2, 2, 27, 197, 3, 2, 2, 2, 29, 199, 3, 2, 2, 2, 31, 201, 3, 2, 2, 2, 33, 204, 3, 2, 2, 2, 35, 207, 3, 2, 2, 2, 37, 209, 3, 2, 2, 2, 39, 211, 3, 2, 2, 2, 41, 213, 3, 2, 2, 2, 43, 219, 3, 2, 2, 2, 45, 228, 3, 2, 2, 2, 47, 235, 3, 2, 2, 2, 49, 237, 3, 2, 2, 2, 51, 240, 3, 2, 2, 2, 53, 243, 3, 2, 2, 2, 55, 248, 3, 2, 2, 2, 57, 253, 3, 2, 2, 2, 59, 259, 3, 2, 2, 2, 61, 265, 3, 2, 2, 2, 63, 269, 3, 2, 2, 2, 65, 272, 3, 2, 2, 2, 67, 277, 3, 2, 2, 2, 69, 282, 3, 2, 2, 2, 71, 284, 3, 2, 2, 2, 73, 286, 3, 2, 2, 2, 75, 290, 3, 2, 2, 2, 77, 297, 3, 2, 2, 2, 79, 299, 3, 2, 2, 2, 81, 301, 3, 2, 2, 2, 83, 303, 3, 2, 2, 2, 85, 305, 3, 2, 2, 2, 87, 307, 3, 2, 2, 2, 89, 309, 3, 2, 2, 2, 91, 311, 3, 2, 2, 2, 93, 314, 3, 2, 2, 2, 95, 318, 3, 2, 2, 2, 97, 321, 3, 2, 2, 2, 99, 324, 3, 2, 2, 2, 101, 326, 3, 2, 2, 2, 103, 329, 3, 2, 2, 2, 105, 331, 3, 2, 2, 2, 107, 334, 3, 2, 2, 2, 109, 338, 3, 2, 2, 2, 111, 342, 3, 2, 2, 2, 113, 345, 3, 2, 2, 2, 115, 347, 3, 2, 2, 2, 117, 352, 3, 2, 2, 2, 119, 358, 3, 2, 2, 2, 121, 363, 3, 2, 2, 2, 123, 367, 3, 2, 2, 2, 125, 373, 3, 2, 2, 2, 127, 378, 3, 2, 2, 2, 129, 383, 3, 2, 2, 2, 131, 390, 3, 2, 2, 2, 133, 394, 3, 2, 2, 2, 135, 399, 3, 2, 2, 2, 137, 420, 3, 2, 2, 2, 139, 431, 3, 2, 2, 2, 141, 442, 3, 2, 2, 2, 143, 449, 3, 2, 2, 2, 145, 451, 3, 2, 2, 2, 147, 456, 3, 2, 2, 2, 149, 458, 3, 2, 2, 2, 151, 470, 3, 2, 2, 2, 153, 476, 3, 2, 2, 2, 155, 156, 7, 61, 2, 2, 156, 4, 3, 2, 2, 2, 157, 158, 7, 119, 2, 2, 158, 159, 7, 117, 2, 2, 159, 160, 7, 103, 2, 2, 160, 6, 3, 2, 2, 2, 161, 162, 7, 113, 2, 2, 162, 163, 7, 112, 2, 2, 163, 164, 7, 110, 2, 2, 164, 165, 7, 123, 2, 2, 165, 8, 3, 2, 2, 2, 166, 167, 7, 106, 2, 2, 167, 168, 7, 107, 2, 2, 168, 169, 7, 102, 2, 2, 169, 170, 7, 107, 2, 2, 170, 171, 7, 112, 2, 2, 171, 172, 7, 105, 2, 2, 172, 10, 3, 2, 2, 2, 173, 174, 7, 99, 2, 2, 174, 175, 7, 117, 2, 2, 175, 12, 3, 2, 2, 2, 176, 177, 7, 117, 2, 2, 177, 178, 7, 109, 2, 2, 178, 179, 7, 107, 2, 2, 179, 180, 7, 114, 2, 2, 180, 14, 3, 2, 2, 2, 181, 182, 7, 114, 2, 2, 182, 183, 7, 116, 2, 2, 183, 184, 7, 107, 2, 2, 184, 185, 7, 112, 2, 2, 185, 186, 7, 118, 2, 2, 186, 16, 3, 2, 2, 2, 187, 188, 7, 63, 2, 2, 188, 18, 3, 2, 2, 2, 189, 190, 7, 96, 2, 2, 190, 20, 3, 2, 2, 2, 191, 192, 7, 44, 2, 2, 192, 22, 3, 2, 2, 2, 193, 194, 7, 49, 2, 2, 194, 24, 3, 2, 2, 2, 195, 196, 7, 39, 2, 2, 196, 26, 3, 2, 2, 2, 197, 198, 7, 45, 2, 2, 198, 28, 3, 2, 2, 2, 199, 200, 7, 47, 2, 2, 200, 30, 3, 2, 2, 2, 201, 202, 7, 62, 2, 2, 202, 203, 7, 62, 2, 2, 203, 32, 3, 2, 2, 2, 204, 205, 7, 64, 2, 2, 205, 206, 7, 64, 2, 2, 206, 34, 3, 2, 2, 2, 207, 208, 7, 40, 2, 2, 208, 36, 3, 2, 2, 2, 209, 210, 7, 38, 2, 2, 210, 38, 3, 2, 2, 2, 211, 212, 7, 126, 2, 2, 212, 40, 3, 2, 2, 2, 213, 214, 7, 100, 2, 2, 214, 215, 7, 116, 2, 2, 215, 216, 7, 103, 2, 2, 216, 217, 7, 99, 2, 2, 217, 218, 7, 109, 2, 2, 218, 42, 3, 2, 2, 2, 219, 220, 7, 101, 2, 2, 220, 221, 7, 113, 2, 2, 221, 222, 7, 112, 2, 2, 222, 223, 7, 118, 2, 2, 223, 224, 7, 107, 2, 2, 224, 225, 7, 112, 2, 2, 225, 226, 7, 119, 2, 2, 226, 227, 7, 103, 2, 2, 227, 44, 3, 2, 2, 2, 228, 229, 7, 116, 2, 2, 229, 230, 7, 103, 2, 2, 230, 231, 7, 118, 2, 2, 231, 232, 7, 119, 2, 2, 232, 233, 7, 116, 2, 2, 233, 234, 7, 112, 2, 2, 234, 46, 3, 2, 2, 2, 235, 236, 7, 46, 2, 2, 236, 48, 3, 2, 2, 2, 237, 238, 7, 107, 2, 2, 238, 239, 7, 104, 2, 2, 239, 50, 3, 2, 2, 2, 240, 241, 7, 102, 2, 2, 241, 242, 7, 113, 2, 2, 242, 52, 3, 2, 2, 2, 243, 244, 7, 103, 2, 2, 244, 245, 7, 110, 2, 2, 245, 246, 7, 107, 2, 2, 246, 247, 7, 104, 2, 2, 247, 54, 3, 2, 2, 2, 248, 249, 7, 103, 2, 2, 249, 250, 7, 110, 2, 2, 250, 251, 7, 117, 2, 2, 251, 252, 7, 103, 2, 2, 252, 56, 3, 2, 2, 2, 253, 254, 7, 121, 2, 2, 254, 255, 7, 106, 2, 2, 255, 256, 7, 107, 2, 2, 256, 257, 7, 110, 2, 2, 257, 258, 7, 103, 2, 2, 258, 58, 3, 2, 2, 2, 259, 260, 7, 119, 2, 2, 260, 261, 7, 112, 2, 2, 261, 262, 7, 118, 2, 2, 262, 263, 7, 107, 2, 2, 263, 264, 7, 110, 2, 2, 264, 60, 3, 2, 2, 2, 265, 266, 7, 104, 2, 2, 266, 267, 7, 113, 2, 2, 267, 268, 7, 116, 2, 2, 268, 62, 3, 2, 2, 2, 269, 270, 7, 107, 2, 2, 270, 271, 7, 112, 2, 2, 271, 64, 3, 2, 2, 2, 272, 273, 7, 117, 2, 2, 273, 274, 7, 118, 2, 2, 274, 275, 7, 103, 2, 2, 275, 276, 7, 114, 2, 2, 276, 66, 3, 2, 2, 2, 277, 278, 7, 104, 2, 2, 278, 279, 7, 119, 2, 2, 279, 280, 7, 112, 2, 2, 280, 281, 7, 101, 2, 2, 281, 68, 3, 2, 2, 2, 282, 283, 7, 42, 2, 2, 283, 70, 3, 2, 2, 2, 284, 285, 7, 43, 2, 2, 285, 72, 3, 2, 2, 2, 286, 287, 7, 102, 2, 2, 287, 288, 7, 103, 2, 2, 288, 289, 7, 104, 2, 2, 289, 74, 3, 2, 2, 2, 290, 291, 7, 103, 2, 2, 291, 292, 7, 122, 2, 2, 292, 293, 7, 118, 2, 2, 293, 294, 7, 103, 2, 2, 294, 295, 7, 116, 2, 2, 295, 296, 7, 112, 2, 2, 296, 76, 3, 2, 2, 2, 297, 298, 7, 60, 2, 2, 298, 78, 3, 2, 2, 2, 299, 300, 7, 125, 2, 2, 300, 80, 3, 2, 2, 2, 301, 302, 7, 127, 2, 2, 302, 82, 3, 2, 2, 2, 303, 304, 7, 93, 2, 2, 304, 84, 3, 2, 2, 2, 305, 306, 7, 95, 2, 2, 306, 86, 3, 2, 2, 2, 307, 308, 7, 48, 2, 2, 308, 88, 3, 2, 2, 2, 309, 310, 7, 128, 2, 2, 310, 90, 3, 2, 2, 2, 311, 312, 7, 48, 2, 2, 312, 313, 7, 48, 2, 2, 313, 92, 3, 2, 2, 2, 314, 315, 7, 48, 2, 2, 315, 316, 7, 48, 2, 2, 316, 317, 7, 48, 2, 2, 317, 94, 3, 2, 2, 2, 318, 319, 7, 63, 2, 2, 319, 320, 7, 63, 2, 2, 320, 96, 3, 2, 2, 2, 321, 322, 7, 35, 2, 2, 322, 323, 7, 63, 2, 2, 323, 98, 3, 2, 2, 2, 324, 325, 7, 62, 2, 2, 325, 100, 3, 2, 2, 2, 326, 327, 7, 62, 2, 2, 327, 328, 7, 63, 2, 2, 328, 102, 3, 2, 2, 2, 329, 330, 7, 64, 2, 2, 330, 104, 3, 2, 2, 2, 331, 332, 7, 64, 2, 2, 332, 333, 7, 63, 2, 2, 333, 106, 3, 2, 2, 2, 334, 335, 7, 112, 2, 2, 335, 336, 7, 113, 2, 2, 336, 337, 7, 118, 2, 2, 337, 108, 3, 2, 2, 2, 338, 339, 7, 99, 2, 2, 339, 340, 7, 112, 2, 2, 340, 341, 7, 102, 2, 2, 341, 110, 3, 2, 2, 2, 342, 343, 7, 113, 2, 2, 343, 344, 7, 116, 2, 2, 344, 112, 3, 2, 2, 2, 345, 346, 7, 65, 2, 2, 346, 114, 3, 2, 2, 2, 347, 348, 7, 118, 2, 2, 348, 349, 7, 116, 2, 2, 349, 350, 7, 119, 2, 2, 350, 351, 7, 103, 2, 2, 351, 116, 3, 2, 2, 2, 352, 353, 7, 104, 2, 2, 353, 354, 7, 99, 2, 2, 354, 355, 7, 110, 2, 2, 355, 356, 7, 117, 2, 2, 356, 357, 7, 103, 2, 2, 357, 118, 3, 2, 2, 2, 358, 359, 7, 88, 2, 2, 359, 360, 7, 113, 2, 2, 360, 361, 7, 107, 2, 2, 361, 362, 7, 102, 2, 2, 362, 120, 3, 2, 2, 2, 363, 364, 7, 75, 2, 2, 364, 365, 7, 112, 2, 2, 365, 366, 7, 118, 2, 2, 366, 122, 3, 2, 2, 2, 367, 368, 7, 72, 2, 2, 368, 369, 7, 110, 2, 2, 369, 370, 7, 113, 2, 2, 370, 371, 7, 99, 2, 2, 371, 372, 7, 118, 2, 2, 372, 124, 3, 2, 2, 2, 373, 374, 7, 68, 2, 2, 374, 375, 7, 113, 2, 2, 375, 376, 7, 113, 2, 2, 376, 377, 7, 110, 2, 2, 377, 126, 3, 2, 2, 2, 378, 379, 7, 69, 2, 2, 379, 380, 7, 106, 2, 2, 380, 381, 7, 99, 2, 2, 381, 382, 7, 116, 2, 2, 382, 128, 3, 2, 2, 2, 383, 384, 7, 85, 2, 2, 384, 385, 7, 118, 2, 2, 385, 386, 7, 116, 2, 2, 386, 387, 7, 107, 2, 2, 387, 388, 7, 112, 2, 2, 388, 389, 7, 105, 2, 2, 389, 130, 3, 2, 2, 2, 390, 391, 7, 47, 2, 2, 391, 392, 7, 64, 2, 2, 392, 132, 3, 2, 2, 2, 393, 395, 5, 143, 72, 2, 394, 393, 3, 2, 2, 2, 395, 396, 3, 2, 2, 2, 396, 394, 3, 2, 2, 2, 396, 397, 3, 2, 2, 2, 397, 134, 3, 2, 2, 2, 398, 400, 5, 143, 72, 2, 399, 398, 3, 2, 2, 2, 400, 401, 3, 2, 2, 2, 401, 399, 3, 2, 2, 2, 401, 402, 3, 2, 2, 2, 402, 403, 3, 2, 2, 2, 403, 405, 7, 48, 2, 2, 404, 406, 5, 143, 72, 2, 405, 404, 3, 2, 2, 2, 406, 407, 3, 2, 2, 2, 407, 405, 3, 2, 2, 2, 407, 408, 3, 2, 2, 2, 408, 418, 3, 2, 2, 2, 409, 411, 7, 103, 2, 2, 410, 412, 7, 47, 2, 2, 411, 410, 3, 2, 2, 2, 411, 412, 3, 2, 2, 2, 412, 414, 3, 2, 2, 2, 413, 415, 5, 143, 72, 2, 414, 413, 3, 2, 2, 2, 415, 416, 3, 2, 2, 2, 416, 414, 3, 2, 2, 2, 416, 417, 3, 2, 2, 2, 417, 419, 3, 2, 2, 2, 418, 409, 3, 2, 2, 2, 418, 419, 3, 2, 2, 2, 419, 136, 3, 2, 2, 2, 420, 426, 7, 41, 2, 2, 421, 425, 10, 2, 2, 2, 422, 423, 7, 94, 2, 2, 423, 425, 9, 3, 2, 2, 424, 421, 3, 2, 2, 2, 424, 422, 3, 2, 2, 2, 425, 428, 3, 2, 2, 2, 426, 424, 3, 2, 2, 2, 426, 427, 3, 2, 2, 2, 427, 429, 3, 2, 2, 2, 428, 426, 3, 2, 2, 2, 429, 430, 7, 41, 2, 2, 430, 138, 3, 2, 2, 2, 431, 437, 7, 36, 2, 2, 432, 436, 10, 4, 2, 2, 433, 434, 7, 94, 2, 2, 434, 436, 9, 5, 2, 2, 435, 432, 3, 2, 2, 2, 435, 433, 3, 2, 2, 2, 436, 439, 3, 2, 2, 2, 437, 435, 3, 2, 2, 2, 437, 438, 3, 2, 2, 2, 438, 440, 3, 2, 2, 2, 439, 437, 3, 2, 2, 2, 440, 441, 7, 36, 2, 2, 441, 140, 3, 2, 2, 2, 442, 446, 5, 145, 73, 2, 443, 445, 5, 147, 74, 2, 444, 443, 3, 2, 2, 2, 445, 448, 3, 2, 2, 2, 446, 444, 3, 2, 2, 2, 446, 447, 3, 2, 2, 2, 447, 142, 3, 2, 2, 2, 448, 446, 3, 2, 2, 2, 449, 450, 9, 6, 2, 2, 450, 144, 3, 2, 2, 2, 451, 452, 9, 7, 2, 2, 452, 146, 3, 2, 2, 2, 453, 457, 5, 145, 73, 2, 454, 457, 5, 143, 72, 2, 455, 457, 9, 8, 2, 2, 456, 453, 3, 2, 2, 2, 456, 454, 3, 2, 2, 2, 456, 455, 3, 2, 2, 2, 457, 148, 3, 2, 2, 2, 458, 459, 7, 47, 2, 2, 459, 460, 7, 47, 2, 2, 460, 464, 3, 2, 2, 2, 461, 463, 10, 9, 2, 2, 462, 461, 3, 2, 2, 2, 463, 466, 3, 2, 2, 2, 464, 462, 3, 2, 2, 2, 464, 465, 3, 2, 2, 2, 465, 467, 3, 2, 2, 2, 466, 464, 3, 2, 2, 2, 467, 468, 8, 75, 2, 2, 468, 150, 3, 2, 2, 2, 469, 471, 9, 10, 2, 2, 470, 469, 3, 2, 2, 2, 471, 472, 3, 2, 2, 2, 472, 470, 3, 2, 2, 2, 472, 473, 3, 2, 2, 2, 473, 474, 3, 2, 2, 2, 474, 475, 8, 76, 2, 2, 475, 152, 3, 2, 2, 2, 476, 477, 11, 2, 2, 2, 477, 154, 3, 2, 2, 2, 17, 2, 396, 401, 407, 411, 416, 418, 424, 426, 435, 437, 446, 456, 464, 472, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py index c0b39eac..26bf20ac 100644 --- a/src/antlr/PyxellLexer.py +++ b/src/antlr/PyxellLexer.py @@ -27,13 +27,13 @@ def serializedATN(): buf.write("\21\3\21\3\21\3\22\3\22\3\23\3\23\3\24\3\24\3\25\3\25") buf.write("\3\25\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\26\3\26") buf.write("\3\26\3\26\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\30\3\30") - buf.write("\3\31\3\31\3\31\3\32\3\32\3\32\3\32\3\32\3\33\3\33\3\33") - buf.write("\3\33\3\33\3\34\3\34\3\34\3\34\3\34\3\34\3\35\3\35\3\35") - buf.write("\3\35\3\35\3\35\3\36\3\36\3\36\3\36\3\37\3\37\3\37\3 ") - buf.write("\3 \3 \3 \3 \3!\3!\3!\3!\3!\3\"\3\"\3#\3#\3$\3$\3$\3$") - buf.write("\3$\3$\3$\3%\3%\3&\3&\3&\3\'\3\'\3(\3(\3)\3)\3)\3)\3*") - buf.write("\3*\3+\3+\3,\3,\3-\3-\3.\3.\3.\3/\3/\3/\3/\3\60\3\60\3") - buf.write("\60\3\61\3\61\3\61\3\62\3\62\3\63\3\63\3\63\3\64\3\64") + buf.write("\3\31\3\31\3\31\3\32\3\32\3\32\3\33\3\33\3\33\3\33\3\33") + buf.write("\3\34\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35\3\35") + buf.write("\3\36\3\36\3\36\3\36\3\36\3\36\3\37\3\37\3\37\3\37\3 ") + buf.write("\3 \3 \3!\3!\3!\3!\3!\3\"\3\"\3\"\3\"\3\"\3#\3#\3$\3$") + buf.write("\3%\3%\3%\3%\3&\3&\3&\3&\3&\3&\3&\3\'\3\'\3(\3(\3)\3)") + buf.write("\3*\3*\3+\3+\3,\3,\3-\3-\3.\3.\3.\3/\3/\3/\3/\3\60\3\60") + buf.write("\3\60\3\61\3\61\3\61\3\62\3\62\3\63\3\63\3\63\3\64\3\64") buf.write("\3\65\3\65\3\65\3\66\3\66\3\66\3\66\3\67\3\67\3\67\3\67") buf.write("\38\38\38\39\39\3:\3:\3:\3:\3:\3;\3;\3;\3;\3;\3;\3<\3") buf.write("<\3<\3<\3<\3=\3=\3=\3=\3>\3>\3>\3>\3>\3>\3?\3?\3?\3?\3") @@ -77,11 +77,11 @@ def serializedATN(): buf.write("\35\u00c7\3\2\2\2\37\u00c9\3\2\2\2!\u00cc\3\2\2\2#\u00cf") buf.write("\3\2\2\2%\u00d1\3\2\2\2\'\u00d3\3\2\2\2)\u00d5\3\2\2\2") buf.write("+\u00db\3\2\2\2-\u00e4\3\2\2\2/\u00eb\3\2\2\2\61\u00ed") - buf.write("\3\2\2\2\63\u00f0\3\2\2\2\65\u00f5\3\2\2\2\67\u00fa\3") - buf.write("\2\2\29\u0100\3\2\2\2;\u0106\3\2\2\2=\u010a\3\2\2\2?\u010d") - buf.write("\3\2\2\2A\u0112\3\2\2\2C\u0117\3\2\2\2E\u0119\3\2\2\2") - buf.write("G\u011b\3\2\2\2I\u0122\3\2\2\2K\u0124\3\2\2\2M\u0127\3") - buf.write("\2\2\2O\u0129\3\2\2\2Q\u012b\3\2\2\2S\u012f\3\2\2\2U\u0131") + buf.write("\3\2\2\2\63\u00f0\3\2\2\2\65\u00f3\3\2\2\2\67\u00f8\3") + buf.write("\2\2\29\u00fd\3\2\2\2;\u0103\3\2\2\2=\u0109\3\2\2\2?\u010d") + buf.write("\3\2\2\2A\u0110\3\2\2\2C\u0115\3\2\2\2E\u011a\3\2\2\2") + buf.write("G\u011c\3\2\2\2I\u011e\3\2\2\2K\u0122\3\2\2\2M\u0129\3") + buf.write("\2\2\2O\u012b\3\2\2\2Q\u012d\3\2\2\2S\u012f\3\2\2\2U\u0131") buf.write("\3\2\2\2W\u0133\3\2\2\2Y\u0135\3\2\2\2[\u0137\3\2\2\2") buf.write("]\u013a\3\2\2\2_\u013e\3\2\2\2a\u0141\3\2\2\2c\u0144\3") buf.write("\2\2\2e\u0146\3\2\2\2g\u0149\3\2\2\2i\u014b\3\2\2\2k\u014e") @@ -121,27 +121,27 @@ def serializedATN(): buf.write("\7v\2\2\u00e7\u00e8\7w\2\2\u00e8\u00e9\7t\2\2\u00e9\u00ea") buf.write("\7p\2\2\u00ea.\3\2\2\2\u00eb\u00ec\7.\2\2\u00ec\60\3\2") buf.write("\2\2\u00ed\u00ee\7k\2\2\u00ee\u00ef\7h\2\2\u00ef\62\3") - buf.write("\2\2\2\u00f0\u00f1\7g\2\2\u00f1\u00f2\7n\2\2\u00f2\u00f3") - buf.write("\7k\2\2\u00f3\u00f4\7h\2\2\u00f4\64\3\2\2\2\u00f5\u00f6") - buf.write("\7g\2\2\u00f6\u00f7\7n\2\2\u00f7\u00f8\7u\2\2\u00f8\u00f9") - buf.write("\7g\2\2\u00f9\66\3\2\2\2\u00fa\u00fb\7y\2\2\u00fb\u00fc") - buf.write("\7j\2\2\u00fc\u00fd\7k\2\2\u00fd\u00fe\7n\2\2\u00fe\u00ff") - buf.write("\7g\2\2\u00ff8\3\2\2\2\u0100\u0101\7w\2\2\u0101\u0102") - buf.write("\7p\2\2\u0102\u0103\7v\2\2\u0103\u0104\7k\2\2\u0104\u0105") - buf.write("\7n\2\2\u0105:\3\2\2\2\u0106\u0107\7h\2\2\u0107\u0108") - buf.write("\7q\2\2\u0108\u0109\7t\2\2\u0109<\3\2\2\2\u010a\u010b") - buf.write("\7k\2\2\u010b\u010c\7p\2\2\u010c>\3\2\2\2\u010d\u010e") - buf.write("\7u\2\2\u010e\u010f\7v\2\2\u010f\u0110\7g\2\2\u0110\u0111") - buf.write("\7r\2\2\u0111@\3\2\2\2\u0112\u0113\7h\2\2\u0113\u0114") - buf.write("\7w\2\2\u0114\u0115\7p\2\2\u0115\u0116\7e\2\2\u0116B\3") - buf.write("\2\2\2\u0117\u0118\7*\2\2\u0118D\3\2\2\2\u0119\u011a\7") - buf.write("+\2\2\u011aF\3\2\2\2\u011b\u011c\7g\2\2\u011c\u011d\7") - buf.write("z\2\2\u011d\u011e\7v\2\2\u011e\u011f\7g\2\2\u011f\u0120") - buf.write("\7t\2\2\u0120\u0121\7p\2\2\u0121H\3\2\2\2\u0122\u0123") - buf.write("\7<\2\2\u0123J\3\2\2\2\u0124\u0125\7f\2\2\u0125\u0126") - buf.write("\7q\2\2\u0126L\3\2\2\2\u0127\u0128\7}\2\2\u0128N\3\2\2") - buf.write("\2\u0129\u012a\7\177\2\2\u012aP\3\2\2\2\u012b\u012c\7") - buf.write("f\2\2\u012c\u012d\7g\2\2\u012d\u012e\7h\2\2\u012eR\3\2") + buf.write("\2\2\2\u00f0\u00f1\7f\2\2\u00f1\u00f2\7q\2\2\u00f2\64") + buf.write("\3\2\2\2\u00f3\u00f4\7g\2\2\u00f4\u00f5\7n\2\2\u00f5\u00f6") + buf.write("\7k\2\2\u00f6\u00f7\7h\2\2\u00f7\66\3\2\2\2\u00f8\u00f9") + buf.write("\7g\2\2\u00f9\u00fa\7n\2\2\u00fa\u00fb\7u\2\2\u00fb\u00fc") + buf.write("\7g\2\2\u00fc8\3\2\2\2\u00fd\u00fe\7y\2\2\u00fe\u00ff") + buf.write("\7j\2\2\u00ff\u0100\7k\2\2\u0100\u0101\7n\2\2\u0101\u0102") + buf.write("\7g\2\2\u0102:\3\2\2\2\u0103\u0104\7w\2\2\u0104\u0105") + buf.write("\7p\2\2\u0105\u0106\7v\2\2\u0106\u0107\7k\2\2\u0107\u0108") + buf.write("\7n\2\2\u0108<\3\2\2\2\u0109\u010a\7h\2\2\u010a\u010b") + buf.write("\7q\2\2\u010b\u010c\7t\2\2\u010c>\3\2\2\2\u010d\u010e") + buf.write("\7k\2\2\u010e\u010f\7p\2\2\u010f@\3\2\2\2\u0110\u0111") + buf.write("\7u\2\2\u0111\u0112\7v\2\2\u0112\u0113\7g\2\2\u0113\u0114") + buf.write("\7r\2\2\u0114B\3\2\2\2\u0115\u0116\7h\2\2\u0116\u0117") + buf.write("\7w\2\2\u0117\u0118\7p\2\2\u0118\u0119\7e\2\2\u0119D\3") + buf.write("\2\2\2\u011a\u011b\7*\2\2\u011bF\3\2\2\2\u011c\u011d\7") + buf.write("+\2\2\u011dH\3\2\2\2\u011e\u011f\7f\2\2\u011f\u0120\7") + buf.write("g\2\2\u0120\u0121\7h\2\2\u0121J\3\2\2\2\u0122\u0123\7") + buf.write("g\2\2\u0123\u0124\7z\2\2\u0124\u0125\7v\2\2\u0125\u0126") + buf.write("\7g\2\2\u0126\u0127\7t\2\2\u0127\u0128\7p\2\2\u0128L\3") + buf.write("\2\2\2\u0129\u012a\7<\2\2\u012aN\3\2\2\2\u012b\u012c\7") + buf.write("}\2\2\u012cP\3\2\2\2\u012d\u012e\7\177\2\2\u012eR\3\2") buf.write("\2\2\u012f\u0130\7]\2\2\u0130T\3\2\2\2\u0131\u0132\7_") buf.write("\2\2\u0132V\3\2\2\2\u0133\u0134\7\60\2\2\u0134X\3\2\2") buf.write("\2\u0135\u0136\7\u0080\2\2\u0136Z\3\2\2\2\u0137\u0138") @@ -302,9 +302,9 @@ class PyxellLexer(Lexer): "';'", "'use'", "'only'", "'hiding'", "'as'", "'skip'", "'print'", "'='", "'^'", "'*'", "'/'", "'%'", "'+'", "'-'", "'<<'", "'>>'", "'&'", "'$'", "'|'", "'break'", "'continue'", "'return'", "','", - "'if'", "'elif'", "'else'", "'while'", "'until'", "'for'", "'in'", - "'step'", "'func'", "'('", "')'", "'extern'", "':'", "'do'", - "'{'", "'}'", "'def'", "'['", "']'", "'.'", "'~'", "'..'", "'...'", + "'if'", "'do'", "'elif'", "'else'", "'while'", "'until'", "'for'", + "'in'", "'step'", "'func'", "'('", "')'", "'def'", "'extern'", + "':'", "'{'", "'}'", "'['", "']'", "'.'", "'~'", "'..'", "'...'", "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", "'not'", "'and'", "'or'", "'?'", "'true'", "'false'", "'Void'", "'Int'", "'Float'", "'Bool'", "'Char'", "'String'", "'->'" ] diff --git a/src/antlr/PyxellLexer.tokens b/src/antlr/PyxellLexer.tokens index 851d08ac..4c4934c0 100644 --- a/src/antlr/PyxellLexer.tokens +++ b/src/antlr/PyxellLexer.tokens @@ -95,22 +95,22 @@ ERR=73 'return'=22 ','=23 'if'=24 -'elif'=25 -'else'=26 -'while'=27 -'until'=28 -'for'=29 -'in'=30 -'step'=31 -'func'=32 -'('=33 -')'=34 -'extern'=35 -':'=36 -'do'=37 -'{'=38 -'}'=39 -'def'=40 +'do'=25 +'elif'=26 +'else'=27 +'while'=28 +'until'=29 +'for'=30 +'in'=31 +'step'=32 +'func'=33 +'('=34 +')'=35 +'def'=36 +'extern'=37 +':'=38 +'{'=39 +'}'=40 '['=41 ']'=42 '.'=43 diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index 48bc8a35..584bc9d8 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -9,162 +9,160 @@ def serializedATN(): with StringIO() as buf: buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3K") - buf.write("\u014e\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\u0149\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16") - buf.write("\t\16\4\17\t\17\4\20\t\20\3\2\7\2\"\n\2\f\2\16\2%\13\2") - buf.write("\3\2\3\2\3\3\3\3\3\3\3\3\5\3-\n\3\3\4\3\4\3\4\3\4\3\4") - buf.write("\3\4\3\4\3\4\5\4\67\n\4\3\4\3\4\3\4\5\4<\n\4\3\4\3\4\3") - buf.write("\4\3\4\5\4B\n\4\3\4\3\4\3\4\7\4G\n\4\f\4\16\4J\13\4\3") - buf.write("\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\5\4U\n\4\5\4W\n\4\3") - buf.write("\5\3\5\3\5\7\5\\\n\5\f\5\16\5_\13\5\3\6\3\6\3\6\3\6\3") - buf.write("\6\3\6\3\6\7\6h\n\6\f\6\16\6k\13\6\3\6\3\6\5\6o\n\6\3") + buf.write("\t\16\4\17\t\17\3\2\7\2 \n\2\f\2\16\2#\13\2\3\2\3\2\3") + buf.write("\3\3\3\3\3\3\3\5\3+\n\3\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3") + buf.write("\4\5\4\65\n\4\3\4\3\4\3\4\5\4:\n\4\3\4\3\4\3\4\3\4\5\4") + buf.write("@\n\4\3\4\3\4\3\4\7\4E\n\4\f\4\16\4H\13\4\3\4\3\4\3\4") + buf.write("\3\4\3\4\3\4\3\4\3\4\3\4\5\4S\n\4\5\4U\n\4\3\5\3\5\3\5") + buf.write("\7\5Z\n\5\f\5\16\5]\13\5\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3") + buf.write("\6\3\6\7\6h\n\6\f\6\16\6k\13\6\3\6\3\6\3\6\5\6p\n\6\3") buf.write("\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6") - buf.write("\5\6\177\n\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\7\6\u0089") - buf.write("\n\6\f\6\16\6\u008c\13\6\3\6\5\6\u008f\n\6\3\6\3\6\5\6") - buf.write("\u0093\n\6\3\6\3\6\3\6\5\6\u0098\n\6\5\6\u009a\n\6\3\7") - buf.write("\3\7\3\7\3\7\5\7\u00a0\n\7\3\b\3\b\3\b\6\b\u00a5\n\b\r") - buf.write("\b\16\b\u00a6\3\b\3\b\3\t\3\t\3\t\6\t\u00ae\n\t\r\t\16") - buf.write("\t\u00af\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3") - buf.write("\n\5\n\u00be\n\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3") - buf.write("\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n") - buf.write("\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3") - buf.write("\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n") - buf.write("\3\n\3\n\7\n\u00f4\n\n\f\n\16\n\u00f7\13\n\3\n\5\n\u00fa") - buf.write("\n\n\3\n\3\n\3\n\7\n\u00ff\n\n\f\n\16\n\u0102\13\n\3\13") - buf.write("\3\13\3\13\7\13\u0107\n\13\f\13\16\13\u010a\13\13\3\13") - buf.write("\3\13\3\f\3\f\3\f\3\r\3\r\5\r\u0113\n\r\3\r\3\r\3\16\3") - buf.write("\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\7\16\u0120\n\16") - buf.write("\f\16\16\16\u0123\13\16\3\16\5\16\u0126\n\16\3\16\3\16") - buf.write("\5\16\u012a\n\16\3\17\3\17\7\17\u012e\n\17\f\17\16\17") - buf.write("\u0131\13\17\3\17\3\17\3\20\3\20\3\20\3\20\3\20\3\20\3") - buf.write("\20\3\20\3\20\3\20\3\20\3\20\5\20\u0141\n\20\3\20\3\20") - buf.write("\3\20\3\20\3\20\3\20\7\20\u0149\n\20\f\20\16\20\u014c") - buf.write("\13\20\3\20\2\4\22\36\21\2\4\6\b\n\f\16\20\22\24\26\30") - buf.write("\32\34\36\2\f\3\2\13\25\3\2\26\27\4\2\17\20..\3\2\f\16") - buf.write("\3\2\17\20\3\2\21\22\3\2/\60\3\2\61\66\3\2;<\3\2=B\2\u0182") - buf.write("\2#\3\2\2\2\4,\3\2\2\2\6V\3\2\2\2\bX\3\2\2\2\n\u0099\3") - buf.write("\2\2\2\f\u009b\3\2\2\2\16\u00a1\3\2\2\2\20\u00aa\3\2\2") - buf.write("\2\22\u00bd\3\2\2\2\24\u0108\3\2\2\2\26\u010d\3\2\2\2") - buf.write("\30\u0112\3\2\2\2\32\u0129\3\2\2\2\34\u012f\3\2\2\2\36") - buf.write("\u0140\3\2\2\2 \"\5\4\3\2! \3\2\2\2\"%\3\2\2\2#!\3\2\2") - buf.write("\2#$\3\2\2\2$&\3\2\2\2%#\3\2\2\2&\'\7\2\2\3\'\3\3\2\2") - buf.write("\2()\5\6\4\2)*\7\3\2\2*-\3\2\2\2+-\5\n\6\2,(\3\2\2\2,") - buf.write("+\3\2\2\2-\5\3\2\2\2./\7\4\2\2/\66\7H\2\2\60\61\7\5\2") - buf.write("\2\61\67\5\34\17\2\62\63\7\6\2\2\63\67\5\34\17\2\64\65") - buf.write("\7\7\2\2\65\67\7H\2\2\66\60\3\2\2\2\66\62\3\2\2\2\66\64") - buf.write("\3\2\2\2\66\67\3\2\2\2\67W\3\2\2\28W\7\b\2\29;\7\t\2\2") - buf.write(":<\5\24\13\2;:\3\2\2\2;<\3\2\2\2\5\36\20\2") - buf.write(">A\7H\2\2?@\7\n\2\2@B\5\24\13\2A?\3\2\2\2AB\3\2\2\2BW") - buf.write("\3\2\2\2CD\5\b\5\2DE\7\n\2\2EG\3\2\2\2FC\3\2\2\2GJ\3\2") - buf.write("\2\2HF\3\2\2\2HI\3\2\2\2IK\3\2\2\2JH\3\2\2\2KW\5\24\13") - buf.write("\2LM\5\22\n\2MN\t\2\2\2NO\7\n\2\2OP\5\22\n\2PW\3\2\2\2") - buf.write("QW\t\3\2\2RT\7\30\2\2SU\5\24\13\2TS\3\2\2\2TU\3\2\2\2") - buf.write("UW\3\2\2\2V.\3\2\2\2V8\3\2\2\2V9\3\2\2\2V=\3\2\2\2VH\3") - buf.write("\2\2\2VL\3\2\2\2VQ\3\2\2\2VR\3\2\2\2W\7\3\2\2\2X]\5\22") - buf.write("\n\2YZ\7\31\2\2Z\\\5\22\n\2[Y\3\2\2\2\\_\3\2\2\2][\3\2") - buf.write("\2\2]^\3\2\2\2^\t\3\2\2\2_]\3\2\2\2`a\7\32\2\2ab\5\22") - buf.write("\n\2bi\5\16\b\2cd\7\33\2\2de\5\22\n\2ef\5\16\b\2fh\3\2") - buf.write("\2\2gc\3\2\2\2hk\3\2\2\2ig\3\2\2\2ij\3\2\2\2jn\3\2\2\2") - buf.write("ki\3\2\2\2lm\7\34\2\2mo\5\16\b\2nl\3\2\2\2no\3\2\2\2o") - buf.write("\u009a\3\2\2\2pq\7\35\2\2qr\5\22\n\2rs\5\16\b\2s\u009a") - buf.write("\3\2\2\2tu\7\36\2\2uv\5\22\n\2vw\5\16\b\2w\u009a\3\2\2") - buf.write("\2xy\7\37\2\2yz\5\24\13\2z{\7 \2\2{~\5\24\13\2|}\7!\2") - buf.write("\2}\177\5\24\13\2~|\3\2\2\2~\177\3\2\2\2\177\u0080\3\2") - buf.write("\2\2\u0080\u0081\5\16\b\2\u0081\u009a\3\2\2\2\u0082\u0083") - buf.write("\7\"\2\2\u0083\u0084\7H\2\2\u0084\u008a\7#\2\2\u0085\u0086") - buf.write("\5\f\7\2\u0086\u0087\7\31\2\2\u0087\u0089\3\2\2\2\u0088") - buf.write("\u0085\3\2\2\2\u0089\u008c\3\2\2\2\u008a\u0088\3\2\2\2") - buf.write("\u008a\u008b\3\2\2\2\u008b\u008e\3\2\2\2\u008c\u008a\3") - buf.write("\2\2\2\u008d\u008f\5\f\7\2\u008e\u008d\3\2\2\2\u008e\u008f") - buf.write("\3\2\2\2\u008f\u0090\3\2\2\2\u0090\u0092\7$\2\2\u0091") - buf.write("\u0093\5\36\20\2\u0092\u0091\3\2\2\2\u0092\u0093\3\2\2") - buf.write("\2\u0093\u0097\3\2\2\2\u0094\u0098\5\20\t\2\u0095\u0096") - buf.write("\7%\2\2\u0096\u0098\7\3\2\2\u0097\u0094\3\2\2\2\u0097") - buf.write("\u0095\3\2\2\2\u0098\u009a\3\2\2\2\u0099`\3\2\2\2\u0099") - buf.write("p\3\2\2\2\u0099t\3\2\2\2\u0099x\3\2\2\2\u0099\u0082\3") - buf.write("\2\2\2\u009a\13\3\2\2\2\u009b\u009c\5\36\20\2\u009c\u009f") - buf.write("\7H\2\2\u009d\u009e\7&\2\2\u009e\u00a0\5\22\n\2\u009f") - buf.write("\u009d\3\2\2\2\u009f\u00a0\3\2\2\2\u00a0\r\3\2\2\2\u00a1") - buf.write("\u00a2\7\'\2\2\u00a2\u00a4\7(\2\2\u00a3\u00a5\5\4\3\2") - buf.write("\u00a4\u00a3\3\2\2\2\u00a5\u00a6\3\2\2\2\u00a6\u00a4\3") - buf.write("\2\2\2\u00a6\u00a7\3\2\2\2\u00a7\u00a8\3\2\2\2\u00a8\u00a9") - buf.write("\7)\2\2\u00a9\17\3\2\2\2\u00aa\u00ab\7*\2\2\u00ab\u00ad") - buf.write("\7(\2\2\u00ac\u00ae\5\4\3\2\u00ad\u00ac\3\2\2\2\u00ae") - buf.write("\u00af\3\2\2\2\u00af\u00ad\3\2\2\2\u00af\u00b0\3\2\2\2") - buf.write("\u00b0\u00b1\3\2\2\2\u00b1\u00b2\7)\2\2\u00b2\21\3\2\2") - buf.write("\2\u00b3\u00b4\b\n\1\2\u00b4\u00be\5\32\16\2\u00b5\u00b6") - buf.write("\7#\2\2\u00b6\u00b7\5\24\13\2\u00b7\u00b8\7$\2\2\u00b8") - buf.write("\u00be\3\2\2\2\u00b9\u00ba\t\4\2\2\u00ba\u00be\5\22\n") - buf.write("\20\u00bb\u00bc\7\67\2\2\u00bc\u00be\5\22\n\6\u00bd\u00b3") - buf.write("\3\2\2\2\u00bd\u00b5\3\2\2\2\u00bd\u00b9\3\2\2\2\u00bd") - buf.write("\u00bb\3\2\2\2\u00be\u0100\3\2\2\2\u00bf\u00c0\f\21\2") - buf.write("\2\u00c0\u00c1\7\13\2\2\u00c1\u00ff\5\22\n\21\u00c2\u00c3") - buf.write("\f\17\2\2\u00c3\u00c4\t\5\2\2\u00c4\u00ff\5\22\n\20\u00c5") - buf.write("\u00c6\f\16\2\2\u00c6\u00c7\t\6\2\2\u00c7\u00ff\5\22\n") - buf.write("\17\u00c8\u00c9\f\r\2\2\u00c9\u00ca\t\7\2\2\u00ca\u00ff") - buf.write("\5\22\n\16\u00cb\u00cc\f\f\2\2\u00cc\u00cd\7\23\2\2\u00cd") - buf.write("\u00ff\5\22\n\r\u00ce\u00cf\f\13\2\2\u00cf\u00d0\7\24") - buf.write("\2\2\u00d0\u00ff\5\22\n\f\u00d1\u00d2\f\n\2\2\u00d2\u00d3") - buf.write("\7\25\2\2\u00d3\u00ff\5\22\n\13\u00d4\u00d5\f\t\2\2\u00d5") - buf.write("\u00d6\t\b\2\2\u00d6\u00ff\5\22\n\n\u00d7\u00d8\f\7\2") - buf.write("\2\u00d8\u00d9\t\t\2\2\u00d9\u00ff\5\22\n\7\u00da\u00db") - buf.write("\f\5\2\2\u00db\u00dc\78\2\2\u00dc\u00ff\5\22\n\5\u00dd") - buf.write("\u00de\f\4\2\2\u00de\u00df\79\2\2\u00df\u00ff\5\22\n\4") - buf.write("\u00e0\u00e1\f\3\2\2\u00e1\u00e2\7:\2\2\u00e2\u00e3\5") - buf.write("\22\n\2\u00e3\u00e4\7&\2\2\u00e4\u00e5\5\22\n\3\u00e5") - buf.write("\u00ff\3\2\2\2\u00e6\u00e7\f\24\2\2\u00e7\u00e8\7+\2\2") - buf.write("\u00e8\u00e9\5\22\n\2\u00e9\u00ea\7,\2\2\u00ea\u00ff\3") - buf.write("\2\2\2\u00eb\u00ec\f\23\2\2\u00ec\u00ed\7-\2\2\u00ed\u00ff") - buf.write("\7H\2\2\u00ee\u00ef\f\22\2\2\u00ef\u00f5\7#\2\2\u00f0") - buf.write("\u00f1\5\30\r\2\u00f1\u00f2\7\31\2\2\u00f2\u00f4\3\2\2") - buf.write("\2\u00f3\u00f0\3\2\2\2\u00f4\u00f7\3\2\2\2\u00f5\u00f3") - buf.write("\3\2\2\2\u00f5\u00f6\3\2\2\2\u00f6\u00f9\3\2\2\2\u00f7") - buf.write("\u00f5\3\2\2\2\u00f8\u00fa\5\30\r\2\u00f9\u00f8\3\2\2") - buf.write("\2\u00f9\u00fa\3\2\2\2\u00fa\u00fb\3\2\2\2\u00fb\u00ff") - buf.write("\7$\2\2\u00fc\u00fd\f\b\2\2\u00fd\u00ff\7\60\2\2\u00fe") - buf.write("\u00bf\3\2\2\2\u00fe\u00c2\3\2\2\2\u00fe\u00c5\3\2\2\2") - buf.write("\u00fe\u00c8\3\2\2\2\u00fe\u00cb\3\2\2\2\u00fe\u00ce\3") - buf.write("\2\2\2\u00fe\u00d1\3\2\2\2\u00fe\u00d4\3\2\2\2\u00fe\u00d7") - buf.write("\3\2\2\2\u00fe\u00da\3\2\2\2\u00fe\u00dd\3\2\2\2\u00fe") - buf.write("\u00e0\3\2\2\2\u00fe\u00e6\3\2\2\2\u00fe\u00eb\3\2\2\2") - buf.write("\u00fe\u00ee\3\2\2\2\u00fe\u00fc\3\2\2\2\u00ff\u0102\3") - buf.write("\2\2\2\u0100\u00fe\3\2\2\2\u0100\u0101\3\2\2\2\u0101\23") - buf.write("\3\2\2\2\u0102\u0100\3\2\2\2\u0103\u0104\5\22\n\2\u0104") - buf.write("\u0105\7\31\2\2\u0105\u0107\3\2\2\2\u0106\u0103\3\2\2") - buf.write("\2\u0107\u010a\3\2\2\2\u0108\u0106\3\2\2\2\u0108\u0109") - buf.write("\3\2\2\2\u0109\u010b\3\2\2\2\u010a\u0108\3\2\2\2\u010b") - buf.write("\u010c\5\22\n\2\u010c\25\3\2\2\2\u010d\u010e\5\24\13\2") - buf.write("\u010e\u010f\7\2\2\3\u010f\27\3\2\2\2\u0110\u0111\7H\2") - buf.write("\2\u0111\u0113\7\n\2\2\u0112\u0110\3\2\2\2\u0112\u0113") - buf.write("\3\2\2\2\u0113\u0114\3\2\2\2\u0114\u0115\5\22\n\2\u0115") - buf.write("\31\3\2\2\2\u0116\u012a\7D\2\2\u0117\u012a\7E\2\2\u0118") - buf.write("\u012a\t\n\2\2\u0119\u012a\7F\2\2\u011a\u012a\7G\2\2\u011b") - buf.write("\u0121\7+\2\2\u011c\u011d\5\22\n\2\u011d\u011e\7\31\2") - buf.write("\2\u011e\u0120\3\2\2\2\u011f\u011c\3\2\2\2\u0120\u0123") - buf.write("\3\2\2\2\u0121\u011f\3\2\2\2\u0121\u0122\3\2\2\2\u0122") - buf.write("\u0125\3\2\2\2\u0123\u0121\3\2\2\2\u0124\u0126\5\22\n") - buf.write("\2\u0125\u0124\3\2\2\2\u0125\u0126\3\2\2\2\u0126\u0127") - buf.write("\3\2\2\2\u0127\u012a\7,\2\2\u0128\u012a\7H\2\2\u0129\u0116") - buf.write("\3\2\2\2\u0129\u0117\3\2\2\2\u0129\u0118\3\2\2\2\u0129") - buf.write("\u0119\3\2\2\2\u0129\u011a\3\2\2\2\u0129\u011b\3\2\2\2") - buf.write("\u0129\u0128\3\2\2\2\u012a\33\3\2\2\2\u012b\u012c\7H\2") - buf.write("\2\u012c\u012e\7\31\2\2\u012d\u012b\3\2\2\2\u012e\u0131") - buf.write("\3\2\2\2\u012f\u012d\3\2\2\2\u012f\u0130\3\2\2\2\u0130") - buf.write("\u0132\3\2\2\2\u0131\u012f\3\2\2\2\u0132\u0133\7H\2\2") - buf.write("\u0133\35\3\2\2\2\u0134\u0135\b\20\1\2\u0135\u0141\t\13") - buf.write("\2\2\u0136\u0137\7#\2\2\u0137\u0138\5\36\20\2\u0138\u0139") - buf.write("\7$\2\2\u0139\u0141\3\2\2\2\u013a\u013b\7+\2\2\u013b\u013c") - buf.write("\5\36\20\2\u013c\u013d\7,\2\2\u013d\u0141\3\2\2\2\u013e") - buf.write("\u013f\7C\2\2\u013f\u0141\5\36\20\3\u0140\u0134\3\2\2") - buf.write("\2\u0140\u0136\3\2\2\2\u0140\u013a\3\2\2\2\u0140\u013e") - buf.write("\3\2\2\2\u0141\u014a\3\2\2\2\u0142\u0143\f\5\2\2\u0143") - buf.write("\u0144\7\f\2\2\u0144\u0149\5\36\20\5\u0145\u0146\f\4\2") - buf.write("\2\u0146\u0147\7C\2\2\u0147\u0149\5\36\20\4\u0148\u0142") - buf.write("\3\2\2\2\u0148\u0145\3\2\2\2\u0149\u014c\3\2\2\2\u014a") - buf.write("\u0148\3\2\2\2\u014a\u014b\3\2\2\2\u014b\37\3\2\2\2\u014c") - buf.write("\u014a\3\2\2\2$#,\66;AHTV]in~\u008a\u008e\u0092\u0097") - buf.write("\u0099\u009f\u00a6\u00af\u00bd\u00f5\u00f9\u00fe\u0100") - buf.write("\u0108\u0112\u0121\u0125\u0129\u012f\u0140\u0148\u014a") + buf.write("\3\6\3\6\5\6\u0082\n\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6") + buf.write("\3\6\7\6\u008d\n\6\f\6\16\6\u0090\13\6\3\6\5\6\u0093\n") + buf.write("\6\3\6\3\6\5\6\u0097\n\6\3\6\3\6\3\6\3\6\5\6\u009d\n\6") + buf.write("\5\6\u009f\n\6\3\7\3\7\3\7\3\7\5\7\u00a5\n\7\3\b\3\b\6") + buf.write("\b\u00a9\n\b\r\b\16\b\u00aa\3\b\3\b\3\t\3\t\3\t\3\t\3") + buf.write("\t\3\t\3\t\3\t\3\t\3\t\7\t\u00b9\n\t\f\t\16\t\u00bc\13") + buf.write("\t\3\t\5\t\u00bf\n\t\3\t\3\t\3\t\3\t\3\t\5\t\u00c6\n\t") + buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") + buf.write("\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") + buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") + buf.write("\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\7\t\u00fc") + buf.write("\n\t\f\t\16\t\u00ff\13\t\3\t\5\t\u0102\n\t\3\t\3\t\3\t") + buf.write("\7\t\u0107\n\t\f\t\16\t\u010a\13\t\3\n\3\n\3\n\7\n\u010f") + buf.write("\n\n\f\n\16\n\u0112\13\n\3\n\3\n\3\13\3\13\3\13\3\f\3") + buf.write("\f\5\f\u011b\n\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\5\r\u0125") + buf.write("\n\r\3\16\3\16\7\16\u0129\n\16\f\16\16\16\u012c\13\16") + buf.write("\3\16\3\16\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17") + buf.write("\3\17\3\17\3\17\5\17\u013c\n\17\3\17\3\17\3\17\3\17\3") + buf.write("\17\3\17\7\17\u0144\n\17\f\17\16\17\u0147\13\17\3\17\2") + buf.write("\4\20\34\20\2\4\6\b\n\f\16\20\22\24\26\30\32\34\2\f\3") + buf.write("\2\13\25\3\2\26\27\4\2\17\20..\3\2\f\16\3\2\17\20\3\2") + buf.write("\21\22\3\2/\60\3\2\61\66\3\2;<\3\2=B\2\u017d\2!\3\2\2") + buf.write("\2\4*\3\2\2\2\6T\3\2\2\2\bV\3\2\2\2\n\u009e\3\2\2\2\f") + buf.write("\u00a0\3\2\2\2\16\u00a6\3\2\2\2\20\u00c5\3\2\2\2\22\u0110") + buf.write("\3\2\2\2\24\u0115\3\2\2\2\26\u011a\3\2\2\2\30\u0124\3") + buf.write("\2\2\2\32\u012a\3\2\2\2\34\u013b\3\2\2\2\36 \5\4\3\2\37") + buf.write("\36\3\2\2\2 #\3\2\2\2!\37\3\2\2\2!\"\3\2\2\2\"$\3\2\2") + buf.write("\2#!\3\2\2\2$%\7\2\2\3%\3\3\2\2\2&\'\5\6\4\2\'(\7\3\2") + buf.write("\2(+\3\2\2\2)+\5\n\6\2*&\3\2\2\2*)\3\2\2\2+\5\3\2\2\2") + buf.write(",-\7\4\2\2-\64\7H\2\2./\7\5\2\2/\65\5\32\16\2\60\61\7") + buf.write("\6\2\2\61\65\5\32\16\2\62\63\7\7\2\2\63\65\7H\2\2\64.") + buf.write("\3\2\2\2\64\60\3\2\2\2\64\62\3\2\2\2\64\65\3\2\2\2\65") + buf.write("U\3\2\2\2\66U\7\b\2\2\679\7\t\2\28:\5\22\n\298\3\2\2\2") + buf.write("9:\3\2\2\2:U\3\2\2\2;<\5\34\17\2\7\n\2\2>@") + buf.write("\5\22\n\2?=\3\2\2\2?@\3\2\2\2@U\3\2\2\2AB\5\b\5\2BC\7") + buf.write("\n\2\2CE\3\2\2\2DA\3\2\2\2EH\3\2\2\2FD\3\2\2\2FG\3\2\2") + buf.write("\2GI\3\2\2\2HF\3\2\2\2IU\5\22\n\2JK\5\20\t\2KL\t\2\2\2") + buf.write("LM\7\n\2\2MN\5\20\t\2NU\3\2\2\2OU\t\3\2\2PR\7\30\2\2Q") + buf.write("S\5\22\n\2RQ\3\2\2\2RS\3\2\2\2SU\3\2\2\2T,\3\2\2\2T\66") + buf.write("\3\2\2\2T\67\3\2\2\2T;\3\2\2\2TF\3\2\2\2TJ\3\2\2\2TO\3") + buf.write("\2\2\2TP\3\2\2\2U\7\3\2\2\2V[\5\20\t\2WX\7\31\2\2XZ\5") + buf.write("\20\t\2YW\3\2\2\2Z]\3\2\2\2[Y\3\2\2\2[\\\3\2\2\2\\\t\3") + buf.write("\2\2\2][\3\2\2\2^_\7\32\2\2_`\5\20\t\2`a\7\33\2\2ai\5") + buf.write("\16\b\2bc\7\34\2\2cd\5\20\t\2de\7\33\2\2ef\5\16\b\2fh") + buf.write("\3\2\2\2gb\3\2\2\2hk\3\2\2\2ig\3\2\2\2ij\3\2\2\2jo\3\2") + buf.write("\2\2ki\3\2\2\2lm\7\35\2\2mn\7\33\2\2np\5\16\b\2ol\3\2") + buf.write("\2\2op\3\2\2\2p\u009f\3\2\2\2qr\7\36\2\2rs\5\20\t\2st") + buf.write("\7\33\2\2tu\5\16\b\2u\u009f\3\2\2\2vw\7\37\2\2wx\5\20") + buf.write("\t\2xy\7\33\2\2yz\5\16\b\2z\u009f\3\2\2\2{|\7 \2\2|}\5") + buf.write("\22\n\2}~\7!\2\2~\u0081\5\22\n\2\177\u0080\7\"\2\2\u0080") + buf.write("\u0082\5\22\n\2\u0081\177\3\2\2\2\u0081\u0082\3\2\2\2") + buf.write("\u0082\u0083\3\2\2\2\u0083\u0084\7\33\2\2\u0084\u0085") + buf.write("\5\16\b\2\u0085\u009f\3\2\2\2\u0086\u0087\7#\2\2\u0087") + buf.write("\u0088\7H\2\2\u0088\u008e\7$\2\2\u0089\u008a\5\f\7\2\u008a") + buf.write("\u008b\7\31\2\2\u008b\u008d\3\2\2\2\u008c\u0089\3\2\2") + buf.write("\2\u008d\u0090\3\2\2\2\u008e\u008c\3\2\2\2\u008e\u008f") + buf.write("\3\2\2\2\u008f\u0092\3\2\2\2\u0090\u008e\3\2\2\2\u0091") + buf.write("\u0093\5\f\7\2\u0092\u0091\3\2\2\2\u0092\u0093\3\2\2\2") + buf.write("\u0093\u0094\3\2\2\2\u0094\u0096\7%\2\2\u0095\u0097\5") + buf.write("\34\17\2\u0096\u0095\3\2\2\2\u0096\u0097\3\2\2\2\u0097") + buf.write("\u009c\3\2\2\2\u0098\u0099\7&\2\2\u0099\u009d\5\16\b\2") + buf.write("\u009a\u009b\7\'\2\2\u009b\u009d\7\3\2\2\u009c\u0098\3") + buf.write("\2\2\2\u009c\u009a\3\2\2\2\u009d\u009f\3\2\2\2\u009e^") + buf.write("\3\2\2\2\u009eq\3\2\2\2\u009ev\3\2\2\2\u009e{\3\2\2\2") + buf.write("\u009e\u0086\3\2\2\2\u009f\13\3\2\2\2\u00a0\u00a1\5\34") + buf.write("\17\2\u00a1\u00a4\7H\2\2\u00a2\u00a3\7(\2\2\u00a3\u00a5") + buf.write("\5\20\t\2\u00a4\u00a2\3\2\2\2\u00a4\u00a5\3\2\2\2\u00a5") + buf.write("\r\3\2\2\2\u00a6\u00a8\7)\2\2\u00a7\u00a9\5\4\3\2\u00a8") + buf.write("\u00a7\3\2\2\2\u00a9\u00aa\3\2\2\2\u00aa\u00a8\3\2\2\2") + buf.write("\u00aa\u00ab\3\2\2\2\u00ab\u00ac\3\2\2\2\u00ac\u00ad\7") + buf.write("*\2\2\u00ad\17\3\2\2\2\u00ae\u00af\b\t\1\2\u00af\u00c6") + buf.write("\5\30\r\2\u00b0\u00b1\7$\2\2\u00b1\u00b2\5\22\n\2\u00b2") + buf.write("\u00b3\7%\2\2\u00b3\u00c6\3\2\2\2\u00b4\u00ba\7+\2\2\u00b5") + buf.write("\u00b6\5\20\t\2\u00b6\u00b7\7\31\2\2\u00b7\u00b9\3\2\2") + buf.write("\2\u00b8\u00b5\3\2\2\2\u00b9\u00bc\3\2\2\2\u00ba\u00b8") + buf.write("\3\2\2\2\u00ba\u00bb\3\2\2\2\u00bb\u00be\3\2\2\2\u00bc") + buf.write("\u00ba\3\2\2\2\u00bd\u00bf\5\20\t\2\u00be\u00bd\3\2\2") + buf.write("\2\u00be\u00bf\3\2\2\2\u00bf\u00c0\3\2\2\2\u00c0\u00c6") + buf.write("\7,\2\2\u00c1\u00c2\t\4\2\2\u00c2\u00c6\5\20\t\20\u00c3") + buf.write("\u00c4\7\67\2\2\u00c4\u00c6\5\20\t\6\u00c5\u00ae\3\2\2") + buf.write("\2\u00c5\u00b0\3\2\2\2\u00c5\u00b4\3\2\2\2\u00c5\u00c1") + buf.write("\3\2\2\2\u00c5\u00c3\3\2\2\2\u00c6\u0108\3\2\2\2\u00c7") + buf.write("\u00c8\f\21\2\2\u00c8\u00c9\7\13\2\2\u00c9\u0107\5\20") + buf.write("\t\21\u00ca\u00cb\f\17\2\2\u00cb\u00cc\t\5\2\2\u00cc\u0107") + buf.write("\5\20\t\20\u00cd\u00ce\f\16\2\2\u00ce\u00cf\t\6\2\2\u00cf") + buf.write("\u0107\5\20\t\17\u00d0\u00d1\f\r\2\2\u00d1\u00d2\t\7\2") + buf.write("\2\u00d2\u0107\5\20\t\16\u00d3\u00d4\f\f\2\2\u00d4\u00d5") + buf.write("\7\23\2\2\u00d5\u0107\5\20\t\r\u00d6\u00d7\f\13\2\2\u00d7") + buf.write("\u00d8\7\24\2\2\u00d8\u0107\5\20\t\f\u00d9\u00da\f\n\2") + buf.write("\2\u00da\u00db\7\25\2\2\u00db\u0107\5\20\t\13\u00dc\u00dd") + buf.write("\f\t\2\2\u00dd\u00de\t\b\2\2\u00de\u0107\5\20\t\n\u00df") + buf.write("\u00e0\f\7\2\2\u00e0\u00e1\t\t\2\2\u00e1\u0107\5\20\t") + buf.write("\7\u00e2\u00e3\f\5\2\2\u00e3\u00e4\78\2\2\u00e4\u0107") + buf.write("\5\20\t\5\u00e5\u00e6\f\4\2\2\u00e6\u00e7\79\2\2\u00e7") + buf.write("\u0107\5\20\t\4\u00e8\u00e9\f\3\2\2\u00e9\u00ea\7:\2\2") + buf.write("\u00ea\u00eb\5\20\t\2\u00eb\u00ec\7(\2\2\u00ec\u00ed\5") + buf.write("\20\t\3\u00ed\u0107\3\2\2\2\u00ee\u00ef\f\24\2\2\u00ef") + buf.write("\u00f0\7+\2\2\u00f0\u00f1\5\22\n\2\u00f1\u00f2\7,\2\2") + buf.write("\u00f2\u0107\3\2\2\2\u00f3\u00f4\f\23\2\2\u00f4\u00f5") + buf.write("\7-\2\2\u00f5\u0107\7H\2\2\u00f6\u00f7\f\22\2\2\u00f7") + buf.write("\u00fd\7$\2\2\u00f8\u00f9\5\26\f\2\u00f9\u00fa\7\31\2") + buf.write("\2\u00fa\u00fc\3\2\2\2\u00fb\u00f8\3\2\2\2\u00fc\u00ff") + buf.write("\3\2\2\2\u00fd\u00fb\3\2\2\2\u00fd\u00fe\3\2\2\2\u00fe") + buf.write("\u0101\3\2\2\2\u00ff\u00fd\3\2\2\2\u0100\u0102\5\26\f") + buf.write("\2\u0101\u0100\3\2\2\2\u0101\u0102\3\2\2\2\u0102\u0103") + buf.write("\3\2\2\2\u0103\u0107\7%\2\2\u0104\u0105\f\b\2\2\u0105") + buf.write("\u0107\7\60\2\2\u0106\u00c7\3\2\2\2\u0106\u00ca\3\2\2") + buf.write("\2\u0106\u00cd\3\2\2\2\u0106\u00d0\3\2\2\2\u0106\u00d3") + buf.write("\3\2\2\2\u0106\u00d6\3\2\2\2\u0106\u00d9\3\2\2\2\u0106") + buf.write("\u00dc\3\2\2\2\u0106\u00df\3\2\2\2\u0106\u00e2\3\2\2\2") + buf.write("\u0106\u00e5\3\2\2\2\u0106\u00e8\3\2\2\2\u0106\u00ee\3") + buf.write("\2\2\2\u0106\u00f3\3\2\2\2\u0106\u00f6\3\2\2\2\u0106\u0104") + buf.write("\3\2\2\2\u0107\u010a\3\2\2\2\u0108\u0106\3\2\2\2\u0108") + buf.write("\u0109\3\2\2\2\u0109\21\3\2\2\2\u010a\u0108\3\2\2\2\u010b") + buf.write("\u010c\5\20\t\2\u010c\u010d\7\31\2\2\u010d\u010f\3\2\2") + buf.write("\2\u010e\u010b\3\2\2\2\u010f\u0112\3\2\2\2\u0110\u010e") + buf.write("\3\2\2\2\u0110\u0111\3\2\2\2\u0111\u0113\3\2\2\2\u0112") + buf.write("\u0110\3\2\2\2\u0113\u0114\5\20\t\2\u0114\23\3\2\2\2\u0115") + buf.write("\u0116\5\22\n\2\u0116\u0117\7\2\2\3\u0117\25\3\2\2\2\u0118") + buf.write("\u0119\7H\2\2\u0119\u011b\7\n\2\2\u011a\u0118\3\2\2\2") + buf.write("\u011a\u011b\3\2\2\2\u011b\u011c\3\2\2\2\u011c\u011d\5") + buf.write("\20\t\2\u011d\27\3\2\2\2\u011e\u0125\7D\2\2\u011f\u0125") + buf.write("\7E\2\2\u0120\u0125\t\n\2\2\u0121\u0125\7F\2\2\u0122\u0125") + buf.write("\7G\2\2\u0123\u0125\7H\2\2\u0124\u011e\3\2\2\2\u0124\u011f") + buf.write("\3\2\2\2\u0124\u0120\3\2\2\2\u0124\u0121\3\2\2\2\u0124") + buf.write("\u0122\3\2\2\2\u0124\u0123\3\2\2\2\u0125\31\3\2\2\2\u0126") + buf.write("\u0127\7H\2\2\u0127\u0129\7\31\2\2\u0128\u0126\3\2\2\2") + buf.write("\u0129\u012c\3\2\2\2\u012a\u0128\3\2\2\2\u012a\u012b\3") + buf.write("\2\2\2\u012b\u012d\3\2\2\2\u012c\u012a\3\2\2\2\u012d\u012e") + buf.write("\7H\2\2\u012e\33\3\2\2\2\u012f\u0130\b\17\1\2\u0130\u013c") + buf.write("\t\13\2\2\u0131\u0132\7$\2\2\u0132\u0133\5\34\17\2\u0133") + buf.write("\u0134\7%\2\2\u0134\u013c\3\2\2\2\u0135\u0136\7+\2\2\u0136") + buf.write("\u0137\5\34\17\2\u0137\u0138\7,\2\2\u0138\u013c\3\2\2") + buf.write("\2\u0139\u013a\7C\2\2\u013a\u013c\5\34\17\3\u013b\u012f") + buf.write("\3\2\2\2\u013b\u0131\3\2\2\2\u013b\u0135\3\2\2\2\u013b") + buf.write("\u0139\3\2\2\2\u013c\u0145\3\2\2\2\u013d\u013e\f\5\2\2") + buf.write("\u013e\u013f\7\f\2\2\u013f\u0144\5\34\17\5\u0140\u0141") + buf.write("\f\4\2\2\u0141\u0142\7C\2\2\u0142\u0144\5\34\17\4\u0143") + buf.write("\u013d\3\2\2\2\u0143\u0140\3\2\2\2\u0144\u0147\3\2\2\2") + buf.write("\u0145\u0143\3\2\2\2\u0145\u0146\3\2\2\2\u0146\35\3\2") + buf.write("\2\2\u0147\u0145\3\2\2\2#!*\649?FRT[io\u0081\u008e\u0092") + buf.write("\u0096\u009c\u009e\u00a4\u00aa\u00ba\u00be\u00c5\u00fd") + buf.write("\u0101\u0106\u0108\u0110\u011a\u0124\u012a\u013b\u0143") + buf.write("\u0145") return buf.getvalue() @@ -182,9 +180,9 @@ class PyxellParser ( Parser ): "'as'", "'skip'", "'print'", "'='", "'^'", "'*'", "'/'", "'%'", "'+'", "'-'", "'<<'", "'>>'", "'&'", "'$'", "'|'", "'break'", "'continue'", "'return'", "','", - "'if'", "'elif'", "'else'", "'while'", "'until'", "'for'", - "'in'", "'step'", "'func'", "'('", "')'", "'extern'", - "':'", "'do'", "'{'", "'}'", "'def'", "'['", "']'", + "'if'", "'do'", "'elif'", "'else'", "'while'", "'until'", + "'for'", "'in'", "'step'", "'func'", "'('", "')'", + "'def'", "'extern'", "':'", "'{'", "'}'", "'['", "']'", "'.'", "'~'", "'..'", "'...'", "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", "'not'", "'and'", "'or'", "'?'", "'true'", "'false'", "'Void'", "'Int'", "'Float'", @@ -215,20 +213,18 @@ class PyxellParser ( Parser ): RULE_lvalue = 3 RULE_compound_stmt = 4 RULE_func_arg = 5 - RULE_do_block = 6 - RULE_def_block = 7 - RULE_expr = 8 - RULE_tuple_expr = 9 - RULE_interpolation_expr = 10 - RULE_call_arg = 11 - RULE_atom = 12 - RULE_id_list = 13 - RULE_typ = 14 + RULE_block = 6 + RULE_expr = 7 + RULE_tuple_expr = 8 + RULE_interpolation_expr = 9 + RULE_call_arg = 10 + RULE_atom = 11 + RULE_id_list = 12 + RULE_typ = 13 ruleNames = [ "program", "stmt", "simple_stmt", "lvalue", "compound_stmt", - "func_arg", "do_block", "def_block", "expr", "tuple_expr", - "interpolation_expr", "call_arg", "atom", "id_list", - "typ" ] + "func_arg", "block", "expr", "tuple_expr", "interpolation_expr", + "call_arg", "atom", "id_list", "typ" ] EOF = Token.EOF T__0=1 @@ -349,17 +345,17 @@ def program(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 33 + self.state = 31 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__26) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__31) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__40) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__52) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0): - self.state = 30 + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__40) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__52) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0): + self.state = 28 self.stmt() - self.state = 35 + self.state = 33 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 36 + self.state = 34 self.match(PyxellParser.EOF) except RecognitionException as re: localctx.exception = re @@ -401,19 +397,19 @@ def stmt(self): localctx = PyxellParser.StmtContext(self, self._ctx, self.state) self.enterRule(localctx, 2, self.RULE_stmt) try: - self.state = 42 + self.state = 40 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__1, PyxellParser.T__5, PyxellParser.T__6, PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__19, PyxellParser.T__20, PyxellParser.T__21, PyxellParser.T__32, PyxellParser.T__40, PyxellParser.T__43, PyxellParser.T__52, PyxellParser.T__56, PyxellParser.T__57, PyxellParser.T__58, PyxellParser.T__59, PyxellParser.T__60, PyxellParser.T__61, PyxellParser.T__62, PyxellParser.T__63, PyxellParser.T__64, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: + if token in [PyxellParser.T__1, PyxellParser.T__5, PyxellParser.T__6, PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__19, PyxellParser.T__20, PyxellParser.T__21, PyxellParser.T__33, PyxellParser.T__40, PyxellParser.T__43, PyxellParser.T__52, PyxellParser.T__56, PyxellParser.T__57, PyxellParser.T__58, PyxellParser.T__59, PyxellParser.T__60, PyxellParser.T__61, PyxellParser.T__62, PyxellParser.T__63, PyxellParser.T__64, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: self.enterOuterAlt(localctx, 1) - self.state = 38 + self.state = 36 self.simple_stmt() - self.state = 39 + self.state = 37 self.match(PyxellParser.T__0) pass - elif token in [PyxellParser.T__23, PyxellParser.T__26, PyxellParser.T__27, PyxellParser.T__28, PyxellParser.T__31]: + elif token in [PyxellParser.T__23, PyxellParser.T__27, PyxellParser.T__28, PyxellParser.T__29, PyxellParser.T__32]: self.enterOuterAlt(localctx, 2) - self.state = 41 + self.state = 39 self.compound_stmt() pass else: @@ -606,35 +602,35 @@ def simple_stmt(self): self.enterRule(localctx, 4, self.RULE_simple_stmt) self._la = 0 # Token type try: - self.state = 84 + self.state = 82 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,7,self._ctx) if la_ == 1: localctx = PyxellParser.StmtUseContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 44 + self.state = 42 self.match(PyxellParser.T__1) - self.state = 45 + self.state = 43 localctx.name = self.match(PyxellParser.ID) - self.state = 52 + self.state = 50 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__2]: - self.state = 46 + self.state = 44 self.match(PyxellParser.T__2) - self.state = 47 + self.state = 45 localctx.only = self.id_list() pass elif token in [PyxellParser.T__3]: - self.state = 48 + self.state = 46 self.match(PyxellParser.T__3) - self.state = 49 + self.state = 47 localctx.hiding = self.id_list() pass elif token in [PyxellParser.T__4]: - self.state = 50 + self.state = 48 self.match(PyxellParser.T__4) - self.state = 51 + self.state = 49 localctx.as_ = self.match(PyxellParser.ID) pass elif token in [PyxellParser.T__0]: @@ -646,20 +642,20 @@ def simple_stmt(self): elif la_ == 2: localctx = PyxellParser.StmtSkipContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 54 + self.state = 52 self.match(PyxellParser.T__5) pass elif la_ == 3: localctx = PyxellParser.StmtPrintContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 55 + self.state = 53 self.match(PyxellParser.T__6) - self.state = 57 + self.state = 55 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__32 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__52 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 56 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__52 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 54 self.tuple_expr() @@ -668,17 +664,17 @@ def simple_stmt(self): elif la_ == 4: localctx = PyxellParser.StmtDeclContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 59 + self.state = 57 self.typ(0) - self.state = 60 + self.state = 58 self.match(PyxellParser.ID) - self.state = 63 + self.state = 61 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__7: - self.state = 61 + self.state = 59 self.match(PyxellParser.T__7) - self.state = 62 + self.state = 60 self.tuple_expr() @@ -687,29 +683,29 @@ def simple_stmt(self): elif la_ == 5: localctx = PyxellParser.StmtAssgContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 70 + self.state = 68 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,5,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 65 + self.state = 63 self.lvalue() - self.state = 66 + self.state = 64 self.match(PyxellParser.T__7) - self.state = 72 + self.state = 70 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,5,self._ctx) - self.state = 73 + self.state = 71 self.tuple_expr() pass elif la_ == 6: localctx = PyxellParser.StmtAssgExprContext(self, localctx) self.enterOuterAlt(localctx, 6) - self.state = 74 + self.state = 72 self.expr(0) - self.state = 75 + self.state = 73 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__11) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__14) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__17) | (1 << PyxellParser.T__18))) != 0)): @@ -717,16 +713,16 @@ def simple_stmt(self): else: self._errHandler.reportMatch(self) self.consume() - self.state = 76 + self.state = 74 self.match(PyxellParser.T__7) - self.state = 77 + self.state = 75 self.expr(0) pass elif la_ == 7: localctx = PyxellParser.StmtLoopControlContext(self, localctx) self.enterOuterAlt(localctx, 7) - self.state = 79 + self.state = 77 localctx.s = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__19 or _la==PyxellParser.T__20): @@ -739,13 +735,13 @@ def simple_stmt(self): elif la_ == 8: localctx = PyxellParser.StmtReturnContext(self, localctx) self.enterOuterAlt(localctx, 8) - self.state = 80 + self.state = 78 self.match(PyxellParser.T__21) - self.state = 82 + self.state = 80 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__32 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__52 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 81 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__52 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 79 self.tuple_expr() @@ -793,17 +789,17 @@ def lvalue(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 86 + self.state = 84 self.expr(0) - self.state = 91 + self.state = 89 self._errHandler.sync(self) _la = self._input.LA(1) while _la==PyxellParser.T__22: - self.state = 87 + self.state = 85 self.match(PyxellParser.T__22) - self.state = 88 + self.state = 86 self.expr(0) - self.state = 93 + self.state = 91 self._errHandler.sync(self) _la = self._input.LA(1) @@ -841,8 +837,8 @@ def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Com def ID(self): return self.getToken(PyxellParser.ID, 0) - def def_block(self): - return self.getTypedRuleContext(PyxellParser.Def_blockContext,0) + def block(self): + return self.getTypedRuleContext(PyxellParser.BlockContext,0) def func_arg(self, i:int=None): if i is None: @@ -870,8 +866,8 @@ def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Com def expr(self): return self.getTypedRuleContext(PyxellParser.ExprContext,0) - def do_block(self): - return self.getTypedRuleContext(PyxellParser.Do_blockContext,0) + def block(self): + return self.getTypedRuleContext(PyxellParser.BlockContext,0) def accept(self, visitor:ParseTreeVisitor): @@ -890,8 +886,8 @@ def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Com def expr(self): return self.getTypedRuleContext(PyxellParser.ExprContext,0) - def do_block(self): - return self.getTypedRuleContext(PyxellParser.Do_blockContext,0) + def block(self): + return self.getTypedRuleContext(PyxellParser.BlockContext,0) def accept(self, visitor:ParseTreeVisitor): @@ -914,8 +910,8 @@ def tuple_expr(self, i:int=None): else: return self.getTypedRuleContext(PyxellParser.Tuple_exprContext,i) - def do_block(self): - return self.getTypedRuleContext(PyxellParser.Do_blockContext,0) + def block(self): + return self.getTypedRuleContext(PyxellParser.BlockContext,0) def accept(self, visitor:ParseTreeVisitor): @@ -937,11 +933,11 @@ def expr(self, i:int=None): else: return self.getTypedRuleContext(PyxellParser.ExprContext,i) - def do_block(self, i:int=None): + def block(self, i:int=None): if i is None: - return self.getTypedRuleContexts(PyxellParser.Do_blockContext) + return self.getTypedRuleContexts(PyxellParser.BlockContext) else: - return self.getTypedRuleContext(PyxellParser.Do_blockContext,i) + return self.getTypedRuleContext(PyxellParser.BlockContext,i) def accept(self, visitor:ParseTreeVisitor): @@ -958,138 +954,152 @@ def compound_stmt(self): self.enterRule(localctx, 8, self.RULE_compound_stmt) self._la = 0 # Token type try: - self.state = 151 + self.state = 156 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__23]: localctx = PyxellParser.StmtIfContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 94 + self.state = 92 self.match(PyxellParser.T__23) - self.state = 95 + self.state = 93 self.expr(0) - self.state = 96 - self.do_block() + self.state = 94 + self.match(PyxellParser.T__24) + self.state = 95 + self.block() self.state = 103 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==PyxellParser.T__24: + while _la==PyxellParser.T__25: + self.state = 96 + self.match(PyxellParser.T__25) self.state = 97 - self.match(PyxellParser.T__24) - self.state = 98 self.expr(0) + self.state = 98 + self.match(PyxellParser.T__24) self.state = 99 - self.do_block() + self.block() self.state = 105 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 108 + self.state = 109 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__25: + if _la==PyxellParser.T__26: self.state = 106 - self.match(PyxellParser.T__25) + self.match(PyxellParser.T__26) self.state = 107 - self.do_block() + self.match(PyxellParser.T__24) + self.state = 108 + self.block() pass - elif token in [PyxellParser.T__26]: + elif token in [PyxellParser.T__27]: localctx = PyxellParser.StmtWhileContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 110 - self.match(PyxellParser.T__26) self.state = 111 - self.expr(0) + self.match(PyxellParser.T__27) self.state = 112 - self.do_block() + self.expr(0) + self.state = 113 + self.match(PyxellParser.T__24) + self.state = 114 + self.block() pass - elif token in [PyxellParser.T__27]: + elif token in [PyxellParser.T__28]: localctx = PyxellParser.StmtUntilContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 114 - self.match(PyxellParser.T__27) - self.state = 115 - self.expr(0) self.state = 116 - self.do_block() + self.match(PyxellParser.T__28) + self.state = 117 + self.expr(0) + self.state = 118 + self.match(PyxellParser.T__24) + self.state = 119 + self.block() pass - elif token in [PyxellParser.T__28]: + elif token in [PyxellParser.T__29]: localctx = PyxellParser.StmtForContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 118 - self.match(PyxellParser.T__28) - self.state = 119 - self.tuple_expr() - self.state = 120 - self.match(PyxellParser.T__29) self.state = 121 + self.match(PyxellParser.T__29) + self.state = 122 self.tuple_expr() + self.state = 123 + self.match(PyxellParser.T__30) self.state = 124 + self.tuple_expr() + self.state = 127 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__30: - self.state = 122 - self.match(PyxellParser.T__30) - self.state = 123 + if _la==PyxellParser.T__31: + self.state = 125 + self.match(PyxellParser.T__31) + self.state = 126 localctx.step = self.tuple_expr() - self.state = 126 - self.do_block() + self.state = 129 + self.match(PyxellParser.T__24) + self.state = 130 + self.block() pass - elif token in [PyxellParser.T__31]: + elif token in [PyxellParser.T__32]: localctx = PyxellParser.StmtFuncContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 128 - self.match(PyxellParser.T__31) - self.state = 129 - self.match(PyxellParser.ID) - self.state = 130 + self.state = 132 self.match(PyxellParser.T__32) - self.state = 136 + self.state = 133 + self.match(PyxellParser.ID) + self.state = 134 + self.match(PyxellParser.T__33) + self.state = 140 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,12,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 131 + self.state = 135 self.func_arg() - self.state = 132 + self.state = 136 self.match(PyxellParser.T__22) - self.state = 138 + self.state = 142 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,12,self._ctx) - self.state = 140 + self.state = 144 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 33)) & ~0x3f) == 0 and ((1 << (_la - 33)) & ((1 << (PyxellParser.T__32 - 33)) | (1 << (PyxellParser.T__40 - 33)) | (1 << (PyxellParser.T__58 - 33)) | (1 << (PyxellParser.T__59 - 33)) | (1 << (PyxellParser.T__60 - 33)) | (1 << (PyxellParser.T__61 - 33)) | (1 << (PyxellParser.T__62 - 33)) | (1 << (PyxellParser.T__63 - 33)) | (1 << (PyxellParser.T__64 - 33)))) != 0): - self.state = 139 + if ((((_la - 34)) & ~0x3f) == 0 and ((1 << (_la - 34)) & ((1 << (PyxellParser.T__33 - 34)) | (1 << (PyxellParser.T__40 - 34)) | (1 << (PyxellParser.T__58 - 34)) | (1 << (PyxellParser.T__59 - 34)) | (1 << (PyxellParser.T__60 - 34)) | (1 << (PyxellParser.T__61 - 34)) | (1 << (PyxellParser.T__62 - 34)) | (1 << (PyxellParser.T__63 - 34)) | (1 << (PyxellParser.T__64 - 34)))) != 0): + self.state = 143 self.func_arg() - self.state = 142 - self.match(PyxellParser.T__33) - self.state = 144 + self.state = 146 + self.match(PyxellParser.T__34) + self.state = 148 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 33)) & ~0x3f) == 0 and ((1 << (_la - 33)) & ((1 << (PyxellParser.T__32 - 33)) | (1 << (PyxellParser.T__40 - 33)) | (1 << (PyxellParser.T__58 - 33)) | (1 << (PyxellParser.T__59 - 33)) | (1 << (PyxellParser.T__60 - 33)) | (1 << (PyxellParser.T__61 - 33)) | (1 << (PyxellParser.T__62 - 33)) | (1 << (PyxellParser.T__63 - 33)) | (1 << (PyxellParser.T__64 - 33)))) != 0): - self.state = 143 + if ((((_la - 34)) & ~0x3f) == 0 and ((1 << (_la - 34)) & ((1 << (PyxellParser.T__33 - 34)) | (1 << (PyxellParser.T__40 - 34)) | (1 << (PyxellParser.T__58 - 34)) | (1 << (PyxellParser.T__59 - 34)) | (1 << (PyxellParser.T__60 - 34)) | (1 << (PyxellParser.T__61 - 34)) | (1 << (PyxellParser.T__62 - 34)) | (1 << (PyxellParser.T__63 - 34)) | (1 << (PyxellParser.T__64 - 34)))) != 0): + self.state = 147 localctx.ret = self.typ(0) - self.state = 149 + self.state = 154 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__39]: - self.state = 146 - self.def_block() + if token in [PyxellParser.T__35]: + self.state = 150 + self.match(PyxellParser.T__35) + self.state = 151 + self.block() pass - elif token in [PyxellParser.T__34]: - self.state = 147 - self.match(PyxellParser.T__34) - self.state = 148 + elif token in [PyxellParser.T__36]: + self.state = 152 + self.match(PyxellParser.T__36) + self.state = 153 self.match(PyxellParser.T__0) pass else: @@ -1113,50 +1123,60 @@ class Func_argContext(ParserRuleContext): def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) self.parser = parser - self.default = None # ExprContext + + + def getRuleIndex(self): + return PyxellParser.RULE_func_arg + + + def copyFrom(self, ctx:ParserRuleContext): + super().copyFrom(ctx) + + + + class FuncArgContext(Func_argContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Func_argContext + super().__init__(parser) + self.copyFrom(ctx) def typ(self): return self.getTypedRuleContext(PyxellParser.TypContext,0) - def ID(self): return self.getToken(PyxellParser.ID, 0) - def expr(self): return self.getTypedRuleContext(PyxellParser.ExprContext,0) - def getRuleIndex(self): - return PyxellParser.RULE_func_arg - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitFunc_arg" ): - return visitor.visitFunc_arg(self) + if hasattr( visitor, "visitFuncArg" ): + return visitor.visitFuncArg(self) else: return visitor.visitChildren(self) - def func_arg(self): localctx = PyxellParser.Func_argContext(self, self._ctx, self.state) self.enterRule(localctx, 10, self.RULE_func_arg) self._la = 0 # Token type try: + localctx = PyxellParser.FuncArgContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 153 + self.state = 158 self.typ(0) - self.state = 154 + self.state = 159 self.match(PyxellParser.ID) - self.state = 157 + self.state = 162 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__35: - self.state = 155 - self.match(PyxellParser.T__35) - self.state = 156 - localctx.default = self.expr(0) + if _la==PyxellParser.T__37: + self.state = 160 + self.match(PyxellParser.T__37) + self.state = 161 + self.expr(0) except RecognitionException as re: @@ -1168,7 +1188,7 @@ def func_arg(self): return localctx - class Do_blockContext(ParserRuleContext): + class BlockContext(ParserRuleContext): def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) @@ -1182,101 +1202,40 @@ def stmt(self, i:int=None): def getRuleIndex(self): - return PyxellParser.RULE_do_block + return PyxellParser.RULE_block def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitDo_block" ): - return visitor.visitDo_block(self) + if hasattr( visitor, "visitBlock" ): + return visitor.visitBlock(self) else: return visitor.visitChildren(self) - def do_block(self): + def block(self): - localctx = PyxellParser.Do_blockContext(self, self._ctx, self.state) - self.enterRule(localctx, 12, self.RULE_do_block) + localctx = PyxellParser.BlockContext(self, self._ctx, self.state) + self.enterRule(localctx, 12, self.RULE_block) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 159 - self.match(PyxellParser.T__36) - self.state = 160 - self.match(PyxellParser.T__37) - self.state = 162 - self._errHandler.sync(self) - _la = self._input.LA(1) - while True: - self.state = 161 - self.stmt() - self.state = 164 - self._errHandler.sync(self) - _la = self._input.LA(1) - if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__26) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__31) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__40) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__52) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0)): - break - - self.state = 166 + self.state = 164 self.match(PyxellParser.T__38) - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class Def_blockContext(ParserRuleContext): - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - def stmt(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(PyxellParser.StmtContext) - else: - return self.getTypedRuleContext(PyxellParser.StmtContext,i) - - - def getRuleIndex(self): - return PyxellParser.RULE_def_block - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitDef_block" ): - return visitor.visitDef_block(self) - else: - return visitor.visitChildren(self) - - - - - def def_block(self): - - localctx = PyxellParser.Def_blockContext(self, self._ctx, self.state) - self.enterRule(localctx, 14, self.RULE_def_block) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 168 - self.match(PyxellParser.T__39) - self.state = 169 - self.match(PyxellParser.T__37) - self.state = 171 + self.state = 166 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 170 + self.state = 165 self.stmt() - self.state = 173 + self.state = 168 self._errHandler.sync(self) _la = self._input.LA(1) - if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__26) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__31) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__40) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__52) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0)): + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__40) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__52) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0)): break - self.state = 175 - self.match(PyxellParser.T__38) + self.state = 170 + self.match(PyxellParser.T__39) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -1369,11 +1328,11 @@ def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Exp super().__init__(parser) self.copyFrom(ctx) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(PyxellParser.ExprContext) - else: - return self.getTypedRuleContext(PyxellParser.ExprContext,i) + def expr(self): + return self.getTypedRuleContext(PyxellParser.ExprContext,0) + + def tuple_expr(self): + return self.getTypedRuleContext(PyxellParser.Tuple_exprContext,0) def accept(self, visitor:ParseTreeVisitor): @@ -1498,6 +1457,26 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) + class ExprArrayContext(ExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext + super().__init__(parser) + self.copyFrom(ctx) + + def expr(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(PyxellParser.ExprContext) + else: + return self.getTypedRuleContext(PyxellParser.ExprContext,i) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExprArray" ): + return visitor.visitExprArray(self) + else: + return visitor.visitChildren(self) + + class ExprLogicalOpContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext @@ -1525,38 +1504,68 @@ def expr(self, _p:int=0): _parentState = self.state localctx = PyxellParser.ExprContext(self, self._ctx, _parentState) _prevctx = localctx - _startState = 16 - self.enterRecursionRule(localctx, 16, self.RULE_expr, _p) + _startState = 14 + self.enterRecursionRule(localctx, 14, self.RULE_expr, _p) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 187 + self.state = 195 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__40, PyxellParser.T__56, PyxellParser.T__57, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: + if token in [PyxellParser.T__56, PyxellParser.T__57, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: localctx = PyxellParser.ExprAtomContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 178 + self.state = 173 self.atom() pass - elif token in [PyxellParser.T__32]: + elif token in [PyxellParser.T__33]: localctx = PyxellParser.ExprParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 179 - self.match(PyxellParser.T__32) - self.state = 180 - self.tuple_expr() - self.state = 181 + self.state = 174 self.match(PyxellParser.T__33) + self.state = 175 + self.tuple_expr() + self.state = 176 + self.match(PyxellParser.T__34) + pass + elif token in [PyxellParser.T__40]: + localctx = PyxellParser.ExprArrayContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 178 + self.match(PyxellParser.T__40) + self.state = 184 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,19,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 179 + self.expr(0) + self.state = 180 + self.match(PyxellParser.T__22) + self.state = 186 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,19,self._ctx) + + self.state = 188 + self._errHandler.sync(self) + _la = self._input.LA(1) + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__52 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 187 + self.expr(0) + + + self.state = 190 + self.match(PyxellParser.T__41) pass elif token in [PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__43]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 183 + self.state = 191 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__43))) != 0)): @@ -1564,54 +1573,54 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 184 + self.state = 192 self.expr(14) pass elif token in [PyxellParser.T__52]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 185 + self.state = 193 localctx.op = self.match(PyxellParser.T__52) - self.state = 186 + self.state = 194 self.expr(4) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 254 + self.state = 262 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,24,self._ctx) + _alt = self._interp.adaptivePredict(self._input,25,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 252 + self.state = 260 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,23,self._ctx) + la_ = self._interp.adaptivePredict(self._input,24,self._ctx) if la_ == 1: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 189 + self.state = 197 if not self.precpred(self._ctx, 15): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 15)") - self.state = 190 + self.state = 198 localctx.op = self.match(PyxellParser.T__8) - self.state = 191 + self.state = 199 self.expr(15) pass elif la_ == 2: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 192 + self.state = 200 if not self.precpred(self._ctx, 13): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") - self.state = 193 + self.state = 201 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__9) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__11))) != 0)): @@ -1619,18 +1628,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 194 + self.state = 202 self.expr(14) pass elif la_ == 3: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 195 + self.state = 203 if not self.precpred(self._ctx, 12): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 12)") - self.state = 196 + self.state = 204 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__12 or _la==PyxellParser.T__13): @@ -1638,18 +1647,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 197 + self.state = 205 self.expr(13) pass elif la_ == 4: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 198 + self.state = 206 if not self.precpred(self._ctx, 11): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") - self.state = 199 + self.state = 207 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__14 or _la==PyxellParser.T__15): @@ -1657,57 +1666,57 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 200 + self.state = 208 self.expr(12) pass elif la_ == 5: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 201 + self.state = 209 if not self.precpred(self._ctx, 10): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") - self.state = 202 + self.state = 210 localctx.op = self.match(PyxellParser.T__16) - self.state = 203 + self.state = 211 self.expr(11) pass elif la_ == 6: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 204 + self.state = 212 if not self.precpred(self._ctx, 9): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") - self.state = 205 + self.state = 213 localctx.op = self.match(PyxellParser.T__17) - self.state = 206 + self.state = 214 self.expr(10) pass elif la_ == 7: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 207 + self.state = 215 if not self.precpred(self._ctx, 8): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") - self.state = 208 + self.state = 216 localctx.op = self.match(PyxellParser.T__18) - self.state = 209 + self.state = 217 self.expr(9) pass elif la_ == 8: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 210 + self.state = 218 if not self.precpred(self._ctx, 7): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") - self.state = 211 + self.state = 219 localctx.dots = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__44 or _la==PyxellParser.T__45): @@ -1715,18 +1724,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 212 + self.state = 220 self.expr(8) pass elif la_ == 9: localctx = PyxellParser.ExprCmpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 213 + self.state = 221 if not self.precpred(self._ctx, 5): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") - self.state = 214 + self.state = 222 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__46) | (1 << PyxellParser.T__47) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__49) | (1 << PyxellParser.T__50) | (1 << PyxellParser.T__51))) != 0)): @@ -1734,130 +1743,130 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 215 + self.state = 223 self.expr(5) pass elif la_ == 10: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 216 + self.state = 224 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 217 + self.state = 225 localctx.op = self.match(PyxellParser.T__53) - self.state = 218 + self.state = 226 self.expr(3) pass elif la_ == 11: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 219 + self.state = 227 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 220 + self.state = 228 localctx.op = self.match(PyxellParser.T__54) - self.state = 221 + self.state = 229 self.expr(2) pass elif la_ == 12: localctx = PyxellParser.ExprCondContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 222 + self.state = 230 if not self.precpred(self._ctx, 1): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") - self.state = 223 + self.state = 231 self.match(PyxellParser.T__55) - self.state = 224 + self.state = 232 self.expr(0) - self.state = 225 - self.match(PyxellParser.T__35) - self.state = 226 + self.state = 233 + self.match(PyxellParser.T__37) + self.state = 234 self.expr(1) pass elif la_ == 13: localctx = PyxellParser.ExprIndexContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 228 + self.state = 236 if not self.precpred(self._ctx, 18): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 18)") - self.state = 229 + self.state = 237 self.match(PyxellParser.T__40) - self.state = 230 - self.expr(0) - self.state = 231 + self.state = 238 + self.tuple_expr() + self.state = 239 self.match(PyxellParser.T__41) pass elif la_ == 14: localctx = PyxellParser.ExprAttrContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 233 + self.state = 241 if not self.precpred(self._ctx, 17): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 17)") - self.state = 234 + self.state = 242 self.match(PyxellParser.T__42) - self.state = 235 + self.state = 243 self.match(PyxellParser.ID) pass elif la_ == 15: localctx = PyxellParser.ExprCallContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 236 + self.state = 244 if not self.precpred(self._ctx, 16): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 16)") - self.state = 237 - self.match(PyxellParser.T__32) - self.state = 243 + self.state = 245 + self.match(PyxellParser.T__33) + self.state = 251 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,21,self._ctx) + _alt = self._interp.adaptivePredict(self._input,22,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 238 + self.state = 246 self.call_arg() - self.state = 239 + self.state = 247 self.match(PyxellParser.T__22) - self.state = 245 + self.state = 253 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,21,self._ctx) + _alt = self._interp.adaptivePredict(self._input,22,self._ctx) - self.state = 247 + self.state = 255 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__32 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__52 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 246 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__52 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 254 self.call_arg() - self.state = 249 - self.match(PyxellParser.T__33) + self.state = 257 + self.match(PyxellParser.T__34) pass elif la_ == 16: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 250 + self.state = 258 if not self.precpred(self._ctx, 6): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") - self.state = 251 + self.state = 259 localctx.dots = self.match(PyxellParser.T__45) pass - self.state = 256 + self.state = 264 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,24,self._ctx) + _alt = self._interp.adaptivePredict(self._input,25,self._ctx) except RecognitionException as re: localctx.exception = re @@ -1908,24 +1917,24 @@ def accept(self, visitor:ParseTreeVisitor): def tuple_expr(self): localctx = PyxellParser.Tuple_exprContext(self, self._ctx, self.state) - self.enterRule(localctx, 18, self.RULE_tuple_expr) + self.enterRule(localctx, 16, self.RULE_tuple_expr) try: localctx = PyxellParser.ExprTupleContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 262 + self.state = 270 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,25,self._ctx) + _alt = self._interp.adaptivePredict(self._input,26,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 257 + self.state = 265 self.expr(0) - self.state = 258 + self.state = 266 self.match(PyxellParser.T__22) - self.state = 264 + self.state = 272 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,25,self._ctx) + _alt = self._interp.adaptivePredict(self._input,26,self._ctx) - self.state = 265 + self.state = 273 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -1975,13 +1984,13 @@ def accept(self, visitor:ParseTreeVisitor): def interpolation_expr(self): localctx = PyxellParser.Interpolation_exprContext(self, self._ctx, self.state) - self.enterRule(localctx, 20, self.RULE_interpolation_expr) + self.enterRule(localctx, 18, self.RULE_interpolation_expr) try: localctx = PyxellParser.ExprInterpolationContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 267 + self.state = 275 self.tuple_expr() - self.state = 268 + self.state = 276 self.match(PyxellParser.EOF) except RecognitionException as re: localctx.exception = re @@ -1998,42 +2007,54 @@ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) self.parser = parser + + def getRuleIndex(self): + return PyxellParser.RULE_call_arg + + + def copyFrom(self, ctx:ParserRuleContext): + super().copyFrom(ctx) + + + + class CallArgContext(Call_argContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Call_argContext + super().__init__(parser) + self.copyFrom(ctx) + def expr(self): return self.getTypedRuleContext(PyxellParser.ExprContext,0) - def ID(self): return self.getToken(PyxellParser.ID, 0) - def getRuleIndex(self): - return PyxellParser.RULE_call_arg - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitCall_arg" ): - return visitor.visitCall_arg(self) + if hasattr( visitor, "visitCallArg" ): + return visitor.visitCallArg(self) else: return visitor.visitChildren(self) - def call_arg(self): localctx = PyxellParser.Call_argContext(self, self._ctx, self.state) - self.enterRule(localctx, 22, self.RULE_call_arg) + self.enterRule(localctx, 20, self.RULE_call_arg) try: + localctx = PyxellParser.CallArgContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 272 + self.state = 280 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,26,self._ctx) + la_ = self._interp.adaptivePredict(self._input,27,self._ctx) if la_ == 1: - self.state = 270 + self.state = 278 self.match(PyxellParser.ID) - self.state = 271 + self.state = 279 self.match(PyxellParser.T__7) - self.state = 274 + self.state = 282 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -2106,26 +2127,6 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) - class AtomArrayContext(AtomContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.AtomContext - super().__init__(parser) - self.copyFrom(ctx) - - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(PyxellParser.ExprContext) - else: - return self.getTypedRuleContext(PyxellParser.ExprContext,i) - - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitAtomArray" ): - return visitor.visitAtomArray(self) - else: - return visitor.visitChildren(self) - - class AtomIdContext(AtomContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.AtomContext @@ -2178,28 +2179,28 @@ def accept(self, visitor:ParseTreeVisitor): def atom(self): localctx = PyxellParser.AtomContext(self, self._ctx, self.state) - self.enterRule(localctx, 24, self.RULE_atom) + self.enterRule(localctx, 22, self.RULE_atom) self._la = 0 # Token type try: - self.state = 295 + self.state = 290 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: localctx = PyxellParser.AtomIntContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 276 + self.state = 284 self.match(PyxellParser.INT) pass elif token in [PyxellParser.FLOAT]: localctx = PyxellParser.AtomFloatContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 277 + self.state = 285 self.match(PyxellParser.FLOAT) pass elif token in [PyxellParser.T__56, PyxellParser.T__57]: localctx = PyxellParser.AtomBoolContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 278 + self.state = 286 _la = self._input.LA(1) if not(_la==PyxellParser.T__56 or _la==PyxellParser.T__57): self._errHandler.recoverInline(self) @@ -2210,48 +2211,19 @@ def atom(self): elif token in [PyxellParser.CHAR]: localctx = PyxellParser.AtomCharContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 279 + self.state = 287 self.match(PyxellParser.CHAR) pass elif token in [PyxellParser.STRING]: localctx = PyxellParser.AtomStringContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 280 + self.state = 288 self.match(PyxellParser.STRING) pass - elif token in [PyxellParser.T__40]: - localctx = PyxellParser.AtomArrayContext(self, localctx) - self.enterOuterAlt(localctx, 6) - self.state = 281 - self.match(PyxellParser.T__40) - self.state = 287 - self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,27,self._ctx) - while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: - if _alt==1: - self.state = 282 - self.expr(0) - self.state = 283 - self.match(PyxellParser.T__22) - self.state = 289 - self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,27,self._ctx) - - self.state = 291 - self._errHandler.sync(self) - _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__32 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__52 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 290 - self.expr(0) - - - self.state = 293 - self.match(PyxellParser.T__41) - pass elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) - self.enterOuterAlt(localctx, 7) - self.state = 294 + self.enterOuterAlt(localctx, 6) + self.state = 289 self.match(PyxellParser.ID) pass else: @@ -2293,23 +2265,23 @@ def accept(self, visitor:ParseTreeVisitor): def id_list(self): localctx = PyxellParser.Id_listContext(self, self._ctx, self.state) - self.enterRule(localctx, 26, self.RULE_id_list) + self.enterRule(localctx, 24, self.RULE_id_list) try: self.enterOuterAlt(localctx, 1) - self.state = 301 + self.state = 296 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,30,self._ctx) + _alt = self._interp.adaptivePredict(self._input,29,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 297 + self.state = 292 self.match(PyxellParser.ID) - self.state = 298 + self.state = 293 self.match(PyxellParser.T__22) - self.state = 303 + self.state = 298 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,30,self._ctx) + _alt = self._interp.adaptivePredict(self._input,29,self._ctx) - self.state = 304 + self.state = 299 self.match(PyxellParser.ID) except RecognitionException as re: localctx.exception = re @@ -2446,12 +2418,12 @@ def typ(self, _p:int=0): _parentState = self.state localctx = PyxellParser.TypContext(self, self._ctx, _parentState) _prevctx = localctx - _startState = 28 - self.enterRecursionRule(localctx, 28, self.RULE_typ, _p) + _startState = 26 + self.enterRecursionRule(localctx, 26, self.RULE_typ, _p) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 318 + self.state = 313 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__58, PyxellParser.T__59, PyxellParser.T__60, PyxellParser.T__61, PyxellParser.T__62, PyxellParser.T__63]: @@ -2459,7 +2431,7 @@ def typ(self, _p:int=0): self._ctx = localctx _prevctx = localctx - self.state = 307 + self.state = 302 _la = self._input.LA(1) if not(((((_la - 59)) & ~0x3f) == 0 and ((1 << (_la - 59)) & ((1 << (PyxellParser.T__58 - 59)) | (1 << (PyxellParser.T__59 - 59)) | (1 << (PyxellParser.T__60 - 59)) | (1 << (PyxellParser.T__61 - 59)) | (1 << (PyxellParser.T__62 - 59)) | (1 << (PyxellParser.T__63 - 59)))) != 0)): self._errHandler.recoverInline(self) @@ -2467,82 +2439,82 @@ def typ(self, _p:int=0): self._errHandler.reportMatch(self) self.consume() pass - elif token in [PyxellParser.T__32]: + elif token in [PyxellParser.T__33]: localctx = PyxellParser.TypeParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 308 - self.match(PyxellParser.T__32) - self.state = 309 - self.typ(0) - self.state = 310 + self.state = 303 self.match(PyxellParser.T__33) + self.state = 304 + self.typ(0) + self.state = 305 + self.match(PyxellParser.T__34) pass elif token in [PyxellParser.T__40]: localctx = PyxellParser.TypeArrayContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 312 + self.state = 307 self.match(PyxellParser.T__40) - self.state = 313 + self.state = 308 self.typ(0) - self.state = 314 + self.state = 309 self.match(PyxellParser.T__41) pass elif token in [PyxellParser.T__64]: localctx = PyxellParser.TypeFunc0Context(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 316 + self.state = 311 self.match(PyxellParser.T__64) - self.state = 317 + self.state = 312 self.typ(1) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 328 + self.state = 323 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,33,self._ctx) + _alt = self._interp.adaptivePredict(self._input,32,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 326 + self.state = 321 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,32,self._ctx) + la_ = self._interp.adaptivePredict(self._input,31,self._ctx) if la_ == 1: localctx = PyxellParser.TypeTupleContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 320 + self.state = 315 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 321 + self.state = 316 self.match(PyxellParser.T__9) - self.state = 322 + self.state = 317 self.typ(3) pass elif la_ == 2: localctx = PyxellParser.TypeFuncContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 323 + self.state = 318 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 324 + self.state = 319 self.match(PyxellParser.T__64) - self.state = 325 + self.state = 320 self.typ(2) pass - self.state = 330 + self.state = 325 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,33,self._ctx) + _alt = self._interp.adaptivePredict(self._input,32,self._ctx) except RecognitionException as re: localctx.exception = re @@ -2557,8 +2529,8 @@ def typ(self, _p:int=0): def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): if self._predicates == None: self._predicates = dict() - self._predicates[8] = self.expr_sempred - self._predicates[14] = self.typ_sempred + self._predicates[7] = self.expr_sempred + self._predicates[13] = self.typ_sempred pred = self._predicates.get(ruleIndex, None) if pred is None: raise Exception("No predicate with index:" + str(ruleIndex)) diff --git a/src/antlr/PyxellVisitor.py b/src/antlr/PyxellVisitor.py index 19ae9988..8d45c866 100644 --- a/src/antlr/PyxellVisitor.py +++ b/src/antlr/PyxellVisitor.py @@ -89,18 +89,13 @@ def visitStmtFunc(self, ctx:PyxellParser.StmtFuncContext): return self.visitChildren(ctx) - # Visit a parse tree produced by PyxellParser#func_arg. - def visitFunc_arg(self, ctx:PyxellParser.Func_argContext): + # Visit a parse tree produced by PyxellParser#FuncArg. + def visitFuncArg(self, ctx:PyxellParser.FuncArgContext): return self.visitChildren(ctx) - # Visit a parse tree produced by PyxellParser#do_block. - def visitDo_block(self, ctx:PyxellParser.Do_blockContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by PyxellParser#def_block. - def visitDef_block(self, ctx:PyxellParser.Def_blockContext): + # Visit a parse tree produced by PyxellParser#block. + def visitBlock(self, ctx:PyxellParser.BlockContext): return self.visitChildren(ctx) @@ -154,6 +149,11 @@ def visitExprRange(self, ctx:PyxellParser.ExprRangeContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#ExprArray. + def visitExprArray(self, ctx:PyxellParser.ExprArrayContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#ExprLogicalOp. def visitExprLogicalOp(self, ctx:PyxellParser.ExprLogicalOpContext): return self.visitChildren(ctx) @@ -169,8 +169,8 @@ def visitExprInterpolation(self, ctx:PyxellParser.ExprInterpolationContext): return self.visitChildren(ctx) - # Visit a parse tree produced by PyxellParser#call_arg. - def visitCall_arg(self, ctx:PyxellParser.Call_argContext): + # Visit a parse tree produced by PyxellParser#CallArg. + def visitCallArg(self, ctx:PyxellParser.CallArgContext): return self.visitChildren(ctx) @@ -199,11 +199,6 @@ def visitAtomString(self, ctx:PyxellParser.AtomStringContext): return self.visitChildren(ctx) - # Visit a parse tree produced by PyxellParser#AtomArray. - def visitAtomArray(self, ctx:PyxellParser.AtomArrayContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by PyxellParser#AtomId. def visitAtomId(self, ctx:PyxellParser.AtomIdContext): return self.visitChildren(ctx) diff --git a/src/ast.py b/src/ast.py new file mode 100644 index 00000000..431221c1 --- /dev/null +++ b/src/ast.py @@ -0,0 +1,345 @@ + +import ast + +from antlr4.tree import Tree + +from .antlr.PyxellParser import PyxellParser +from .antlr.PyxellVisitor import PyxellVisitor + +from .types import * +from .utils import * + + +def _node(ctx, name): + return { + 'node': name, + 'position': [ctx.start.line, ctx.start.column + 1], + } + + +class PyxellASTVisitor(PyxellVisitor): + + def visit(self, ctx): + if ctx is None: + return None + if isinstance(ctx, list): + return lmap(self.visit, ctx) + if isinstance(ctx, Tree.TerminalNodeImpl): + return str(ctx) + return super().visit(ctx) + + + ### Statements ### + + def visitProgram(self, ctx): + return { + **_node(ctx, 'Block'), + 'stmts': self.visit(ctx.stmt()), + } + + def visitBlock(self, ctx): + return { + **_node(ctx, 'Block'), + 'stmts': self.visit(ctx.stmt()), + } + + def visitStmt(self, ctx): + return self.visit(ctx.simple_stmt() or ctx.compound_stmt()) + + def visitStmtUse(self, ctx): + if ctx.only: + detail = ['only', *map(str, ctx.only.ID())] + elif ctx.hiding: + detail = ['hiding', *map(str, ctx.hiding.ID())] + elif ctx.as_: + detail = ['as', ctx.as_.text] + else: + detail = ['all'] + return { + **_node(ctx, 'StmtUse'), + 'name': ctx.name.text, + 'detail': detail, + } + + def visitStmtSkip(self, ctx): + return { + **_node(ctx, 'StmtSkip'), + } + + def visitStmtPrint(self, ctx): + return { + **_node(ctx, 'StmtPrint'), + 'expr': self.visit(ctx.tuple_expr()), + } + + def visitStmtDecl(self, ctx): + return { + **_node(ctx, 'StmtDecl'), + 'type': self.visit(ctx.typ()), + 'id': self.visit(ctx.ID()), + 'expr': self.visit(ctx.tuple_expr()), + } + + def visitStmtAssg(self, ctx): + return { + **_node(ctx, 'StmtAssg'), + 'lvalues': self.visit(ctx.lvalue()), + 'expr': self.visit(ctx.tuple_expr()), + } + + def visitLvalue(self, ctx): + return { + **_node(ctx, 'Lvalue'), + 'exprs': self.visit(ctx.expr()), + } + + def visitStmtAssgExpr(self, ctx): + return { + **_node(ctx, 'StmtAssgExpr'), + 'exprs': self.visit(ctx.expr()), + 'op': ctx.op.text, + } + + def visitStmtIf(self, ctx): + return { + **_node(ctx, 'StmtIf'), + 'exprs': self.visit(ctx.expr()), + 'blocks': self.visit(ctx.block()), + } + + def visitStmtWhile(self, ctx): + return { + **_node(ctx, 'StmtWhile'), + 'expr': self.visit(ctx.expr()), + 'block': self.visit(ctx.block()), + } + + def visitStmtUntil(self, ctx): + return { + **_node(ctx, 'StmtUntil'), + 'expr': self.visit(ctx.expr()), + 'block': self.visit(ctx.block()), + } + + def visitStmtFor(self, ctx): + exprs = ctx.tuple_expr() + return { + **_node(ctx, 'StmtFor'), + 'vars': self.visit(exprs[0].expr()), + 'iterables': self.visit(exprs[1].expr()), + 'steps': self.visit(exprs[2].expr()) if len(exprs) > 2 else [], + 'block': self.visit(ctx.block()), + } + + def visitStmtLoopControl(self, ctx): + return { + **_node(ctx, 'StmtLoopControl'), + 'stmt': ctx.s.text, + } + + def visitStmtFunc(self, ctx): + return { + **_node(ctx, 'StmtFunc'), + 'id': self.visit(ctx.ID()), + 'args': self.visit(ctx.func_arg()), + 'ret': self.visit(ctx.ret) or tVoid, + 'block': self.visit(ctx.block()), + } + + def visitFuncArg(self, ctx): + return { + **_node(ctx, 'FuncArg'), + 'type': self.visit(ctx.typ()), + 'name': self.visit(ctx.ID()), + 'default': self.visit(ctx.expr()), + } + + def visitStmtReturn(self, ctx): + return { + **_node(ctx, 'StmtReturn'), + 'expr': self.visit(ctx.tuple_expr()), + } + + + ### Expressions ### + + def visitExprParentheses(self, ctx): + return self.visit(ctx.tuple_expr()) + + def visitExprArray(self, ctx): + return { + **_node(ctx, 'ExprArray'), + 'exprs': self.visit(ctx.expr()), + } + + def visitExprIndex(self, ctx): + return { + **_node(ctx, 'ExprIndex'), + 'exprs': [self.visit(ctx.expr()), self.visit(ctx.tuple_expr())], + } + + def visitExprAttr(self, ctx): + return { + **_node(ctx, 'ExprAttr'), + 'expr': self.visit(ctx.expr()), + 'attr': self.visit(ctx.ID()), + } + + def visitExprCall(self, ctx): + return { + **_node(ctx, 'ExprCall'), + 'expr': self.visit(ctx.expr()), + 'args': self.visit(ctx.call_arg()), + } + + def visitCallArg(self, ctx): + return { + **_node(ctx, 'CallArg'), + 'name': self.visit(ctx.ID()), + 'expr': self.visit(ctx.expr()), + } + + def visitExprUnaryOp(self, ctx): + return { + **_node(ctx, 'ExprUnaryOp'), + 'expr': self.visit(ctx.expr()), + 'op': ctx.op.text, + } + + def visitExprBinaryOp(self, ctx): + return { + **_node(ctx, 'ExprBinaryOp'), + 'exprs': self.visit(ctx.expr()), + 'op': ctx.op.text, + } + + def visitExprRange(self, ctx): + return { + **_node(ctx, 'ExprRange'), + 'exprs': self.visit(ctx.expr()), + 'inclusive': ctx.dots.text == '..', + } + + def visitExprCmp(self, ctx): + exprs = [] + ops = [] + while True: + exprs.append(ctx.expr(0)) + ops.append(ctx.op.text) + if not isinstance(ctx.expr(1), PyxellParser.ExprCmpContext): + break + ctx = ctx.expr(1) + exprs.append(ctx.expr(1)) + return { + **_node(ctx, 'ExprCmp'), + 'exprs': self.visit(exprs), + 'ops': ops, + } + + def visitExprLogicalOp(self, ctx): + return { + **_node(ctx, 'ExprLogicalOp'), + 'exprs': self.visit(ctx.expr()), + 'op': ctx.op.text, + } + + def visitExprCond(self, ctx): + return { + **_node(ctx, 'ExprCond'), + 'exprs': self.visit(ctx.expr()), + } + + def visitExprTuple(self, ctx): + elems = self.visit(ctx.expr()) + if len(elems) == 1: + return elems[0] + return { + **_node(ctx, 'ExprTuple'), + 'exprs': elems, + } + + def visitExprInterpolation(self, ctx): + return self.visit(ctx.tuple_expr()) + + + ### Atoms ### + + def visitAtomInt(self, ctx): + return { + **_node(ctx, 'AtomInt'), + 'int': int(self.visit(ctx.INT())), + } + + def visitAtomFloat(self, ctx): + return { + **_node(ctx, 'AtomFloat'), + 'float': float(self.visit(ctx.FLOAT())), + } + + def visitAtomBool(self, ctx): + return { + **_node(ctx, 'AtomBool'), + 'bool': ctx.getText() == 'true', + } + + def visitAtomChar(self, ctx): + return { + **_node(ctx, 'AtomChar'), + 'char': ast.literal_eval(self.visit(ctx.CHAR())), + } + + def visitAtomString(self, ctx): + return { + **_node(ctx, 'AtomString'), + 'string': ast.literal_eval(self.visit(ctx.STRING())), + } + + def visitAtomId(self, ctx): + return { + **_node(ctx, 'AtomId'), + 'id': self.visit(ctx.ID()), + } + + + ### Types ### + + def visitTypePrimitive(self, ctx): + return { + 'Void': tVoid, + 'Int': tInt, + 'Float': tFloat, + 'Bool': tBool, + 'Char': tChar, + 'String': tString, + }[ctx.getText()] + + def visitTypeParentheses(self, ctx): + return self.visit(ctx.typ()) + + def visitTypeArray(self, ctx): + return tArray(self.visit(ctx.typ())) + + def visitTypeTuple(self, ctx): + types = [] + while True: + types.append(self.visit(ctx.typ(0))) + if not isinstance(ctx.typ(1), PyxellParser.TypeTupleContext): + break + ctx = ctx.typ(1) + types.append(self.visit(ctx.typ(1))) + if len(types) == 1: + return types[0] + return tTuple(types) + + def visitTypeFunc(self, ctx): + types = [] + while True: + types.append(self.visit(ctx.typ(0))) + if not isinstance(ctx.typ(1), PyxellParser.TypeFuncContext): + break + ctx = ctx.typ(1) + types.append(self.visit(ctx.typ(1))) + return tFunc(types[:-1], types[-1]) + + def visitTypeFunc0(self, ctx): + return tFunc([], self.visit(ctx.typ())) diff --git a/src/compiler.py b/src/compiler.py index 0a9d62cf..b7fd1aa1 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -1,13 +1,13 @@ -import ast import re from contextlib import contextmanager -from .antlr.PyxellParser import PyxellParser -from .antlr.PyxellVisitor import PyxellVisitor +import llvmlite.ir as ll + from .errors import PyxellError as err from .parsing import parse_expr from .types import * +from .utils import * class CustomIRBuilder(ll.IRBuilder): @@ -24,7 +24,7 @@ def __init__(self, env, initialized): self.initialized = initialized -class PyxellCompiler(PyxellVisitor): +class PyxellCompiler: def __init__(self): self.units = {} @@ -98,23 +98,23 @@ def block(self): self.builder.function.blocks.append(label_end) self.builder.position_at_end(label_end) - def throw(self, ctx, msg): - raise err(msg, ctx.start.line, ctx.start.column+1) + def throw(self, node, msg): + line, column = node['position'] + raise err(msg, line, column) - def get(self, ctx, id, load=True): - id = str(id) + def get(self, node, id, load=True): if id not in self.env: - self.throw(ctx, err.UndeclaredIdentifier(id)) + self.throw(node, err.UndeclaredIdentifier(id)) if id not in self.initialized: - self.throw(ctx, err.UninitializedIdentifier(id)) + self.throw(node, err.UninitializedIdentifier(id)) ptr = self.env[id] return self.builder.load(ptr) if load else ptr def extract(self, value, *indices): return self.builder.load(self.builder.gep(value, [vInt(0), *map(vIndex, indices)])) - def index(self, ctx, *exprs, lvalue=False): - collection, index = [self.visit(expr) for expr in exprs] + def index(self, node, *exprs, lvalue=False): + collection, index = [self.compile(expr) for expr in exprs] if collection.type.isCollection(): if lvalue and not collection.type.isArray(): @@ -126,69 +126,65 @@ def index(self, ctx, *exprs, lvalue=False): index = self.builder.select(cmp, index, self.builder.add(index, length)) return self.builder.gep(self.extract(collection, 0), [index]) - self.throw(ctx, err.NotIndexable(collection.type)) - - def attribute(self, ctx, expr, attr): - attr = str(attr) + self.throw(node, err.NotIndexable(collection.type)) - if isinstance(expr, PyxellParser.ExprAtomContext): - atom = expr.atom() - if isinstance(atom, PyxellParser.AtomIdContext): - id = str(atom.ID()) - if id in self.units: - with self.unit(id): - return None, self.get(ctx, attr) + def attribute(self, node, expr, attr): + if expr['node'] == 'AtomId': + id = expr['id'] + if id in self.units: + with self.unit(id): + return None, self.get(node, attr) - obj = self.visit(expr) + obj = self.compile(expr) type = obj.type value = None if type == tInt: if attr == 'toString': - value = self.get(ctx, 'Int_toString') + value = self.get(node, 'Int_toString') elif attr == 'toFloat': - value = self.get(ctx, 'Int_toFloat') + value = self.get(node, 'Int_toFloat') elif type == tFloat: if attr == 'toString': - value = self.get(ctx, 'Float_toString') + value = self.get(node, 'Float_toString') elif attr == 'toInt': - value = self.get(ctx, 'Float_toInt') + value = self.get(node, 'Float_toInt') elif type == tBool: if attr == 'toString': - value = self.get(ctx, 'Bool_toString') + value = self.get(node, 'Bool_toString') elif attr == 'toInt': - value = self.get(ctx, 'Bool_toInt') + value = self.get(node, 'Bool_toInt') elif attr == 'toFloat': - value = self.get(ctx, 'Bool_toFloat') + value = self.get(node, 'Bool_toFloat') elif type == tChar: if attr == 'toString': - value = self.get(ctx, 'Char_toString') + value = self.get(node, 'Char_toString') elif attr == 'toInt': - value = self.get(ctx, 'Char_toInt') + value = self.get(node, 'Char_toInt') elif attr == 'toFloat': - value = self.get(ctx, 'Char_toFloat') + value = self.get(node, 'Char_toFloat') elif type.isCollection(): if attr == 'length': value = self.extract(obj, 1) elif type == tString: if attr == 'toString': - value = self.get(ctx, 'String_toString') + value = self.get(node, 'String_toString') elif attr == 'toArray': - value = self.get(ctx, 'String_toArray') + value = self.get(node, 'String_toArray') elif attr == 'toInt': - value = self.get(ctx, 'String_toInt') + value = self.get(node, 'String_toInt') elif attr == 'toFloat': - value = self.get(ctx, 'String_toFloat') + value = self.get(node, 'String_toFloat') elif type.isArray(): if attr == 'join': if type.subtype == tChar: - value = self.get(ctx, 'CharArray_join') + value = self.get(node, 'CharArray_join') elif type.subtype == tString: - value = self.get(ctx, 'StringArray_join') + value = self.get(node, 'StringArray_join') elif type.isTuple() and len(attr) == 1: index = ord(attr) - ord('a') @@ -196,7 +192,7 @@ def attribute(self, ctx, expr, attr): value = self.extract(obj, index) if value is None: - self.throw(ctx, err.NoAttribute(type, attr)) + self.throw(node, err.NoAttribute(type, attr)) return obj, value @@ -204,12 +200,12 @@ def call(self, name, *values): func = self.builder.load(self.env[name]) return self.builder.call(func, values) - def cast(self, ctx, value, type): + def cast(self, node, value, type): if not types_compatible(value.type, type): - self.throw(ctx, err.IllegalAssignment(value.type, type)) + self.throw(node, err.IllegalAssignment(value.type, type)) return value if value.type == type else self.builder.bitcast(value, type) - def unify(self, ctx, *values): + def unify(self, node, *values): if not values: return [] values = list(values) @@ -218,25 +214,24 @@ def unify(self, ctx, *values): for value in values[1:]: type = unify_types(value.type, type) if type is None: - self.throw(ctx, err.UnknownType()) + self.throw(node, err.UnknownType()) for i, value in enumerate(values): if value.type == tInt and type == tFloat: values[i] = self.builder.sitofp(value, type) else: - values[i] = self.cast(ctx, value, type) + values[i] = self.cast(node, value, type) return values - def declare(self, ctx, type, id, redeclare=False, initialize=False): + def declare(self, node, type, id, redeclare=False, initialize=False): if type == tVoid: - self.throw(ctx, err.InvalidDeclaration(type)) + self.throw(node, err.InvalidDeclaration(type)) if type.isUnknown(): - self.throw(ctx, err.UnknownType()) + self.throw(node, err.UnknownType()) - id = str(id) if id in self.env and not redeclare: - self.throw(ctx, err.RedeclaredIdentifier(id)) + self.throw(node, err.RedeclaredIdentifier(id)) if self.builder.basic_block.parent._name == 'main': ptr = ll.GlobalVariable(self.module, type, self.module.get_unique_name(id)) @@ -250,31 +245,28 @@ def declare(self, ctx, type, id, redeclare=False, initialize=False): return ptr - def lvalue(self, ctx, expr, declare=None, initialize=False): - if isinstance(expr, PyxellParser.ExprAtomContext): - atom = expr.atom() - if not isinstance(atom, PyxellParser.AtomIdContext): - self.throw(ctx, err.NotLvalue()) + def lvalue(self, node, expr, declare=None, initialize=False): + if expr['node'] == 'AtomId': + id = expr['id'] - id = str(atom.ID()) if id not in self.env: if declare is None: - self.throw(ctx, err.UndeclaredIdentifier(id)) - self.declare(ctx, declare, id) + self.throw(node, err.UndeclaredIdentifier(id)) + self.declare(node, declare, id) if initialize: self.initialized.add(id) return self.env[id] - elif isinstance(expr, PyxellParser.ExprIndexContext): - return self.index(ctx, *expr.expr(), lvalue=True) + elif expr['node'] == 'ExprIndex': + return self.index(node, *expr['exprs'], lvalue=True) - self.throw(ctx, err.NotLvalue()) + self.throw(node, err.NotLvalue()) - def assign(self, ctx, expr, value): - ptr = self.lvalue(ctx, expr, declare=value.type, initialize=True) - value = self.cast(ctx, value, ptr.type.pointee) + def assign(self, node, expr, value): + ptr = self.lvalue(node, expr, declare=value.type, initialize=True) + value = self.cast(node, value, ptr.type.pointee) self.builder.store(value, ptr) def inc(self, ptr, step=vInt(1)): @@ -296,7 +288,7 @@ def memcpy(self, dest, src, length): size = self.sizeof(type.pointee, length) return self.builder.call(self.builtins['memcpy'], [dest, src, size]) - def unaryop(self, ctx, op, value): + def unaryop(self, node, op, value): if op in ('+', '-'): types = [tInt, tFloat] elif op == '~': @@ -305,7 +297,7 @@ def unaryop(self, ctx, op, value): types = [tBool] if value.type not in types: - self.throw(ctx, err.NoUnaryOperator(op, value.type)) + self.throw(node, err.NoUnaryOperator(op, value.type)) if op == '+': return value @@ -317,9 +309,9 @@ def unaryop(self, ctx, op, value): elif op in ('~', 'not'): return self.builder.not_(value) - def binaryop(self, ctx, op, left, right): + def binaryop(self, node, op, left, right): if left.type in (tInt, tFloat) and right.type in (tInt, tFloat): - left, right = self.unify(ctx, left, right) + left, right = self.unify(node, left, right) if op == '^': if left.type == right.type == tInt: @@ -329,7 +321,7 @@ def binaryop(self, ctx, op, left, right): return self.call('Float_pow', left, right) else: - self.throw(ctx, err.NoBinaryOperator(op, left.type, right.type)) + self.throw(node, err.NoBinaryOperator(op, left.type, right.type)) elif op == '*': if left.type == right.type == tInt: @@ -364,10 +356,10 @@ def binaryop(self, ctx, op, left, right): return value elif left.type == tInt and right.type.isCollection(): - return self.binaryop(ctx, op, right, left) + return self.binaryop(node, op, right, left) else: - self.throw(ctx, err.NoBinaryOperator(op, left.type, right.type)) + self.throw(node, err.NoBinaryOperator(op, left.type, right.type)) elif op == '/': if left.type == right.type == tInt: @@ -384,7 +376,7 @@ def binaryop(self, ctx, op, left, right): return self.builder.fdiv(left, right) else: - self.throw(ctx, err.NoBinaryOperator(op, left.type, right.type)) + self.throw(node, err.NoBinaryOperator(op, left.type, right.type)) elif op == '%': if left.type == right.type == tInt: @@ -396,7 +388,7 @@ def binaryop(self, ctx, op, left, right): v6 = self.builder.icmp_signed('==', v1, vInt(0)) return self.builder.select(v6, v1, v5) else: - self.throw(ctx, err.NoBinaryOperator(op, left.type, right.type)) + self.throw(node, err.NoBinaryOperator(op, left.type, right.type)) elif op == '+': if left.type == right.type == tInt: @@ -426,13 +418,13 @@ def binaryop(self, ctx, op, left, right): return value elif left.type == tString and right.type == tChar: - return self.binaryop(ctx, op, left, self.call('Char_toString', right)) + return self.binaryop(node, op, left, self.call('Char_toString', right)) elif left.type == tChar and right.type == tString: - return self.binaryop(ctx, op, self.call('Char_toString', left), right) + return self.binaryop(node, op, self.call('Char_toString', left), right) else: - self.throw(ctx, err.NoBinaryOperator(op, left.type, right.type)) + self.throw(node, err.NoBinaryOperator(op, left.type, right.type)) elif op == '-': if left.type == right.type == tInt: @@ -442,7 +434,7 @@ def binaryop(self, ctx, op, left, right): return self.builder.fsub(left, right) else: - self.throw(ctx, err.NoBinaryOperator(op, left.type, right.type)) + self.throw(node, err.NoBinaryOperator(op, left.type, right.type)) else: if left.type == right.type == tInt: @@ -455,13 +447,13 @@ def binaryop(self, ctx, op, left, right): }[op] return instruction(left, right) else: - self.throw(ctx, err.NoBinaryOperator(op, left.type, right.type)) + self.throw(node, err.NoBinaryOperator(op, left.type, right.type)) - def cmp(self, ctx, op, left, right): + def cmp(self, node, op, left, right): try: - left, right = self.unify(ctx, left, right) + left, right = self.unify(node, left, right) except err: - self.throw(ctx, err.NotComparable(left.type, right.type)) + self.throw(node, err.NotComparable(left.type, right.type)) if left.type in (tInt, tChar): return self.builder.icmp_signed(op, left, right) @@ -496,7 +488,7 @@ def cmp(self, ctx, op, left, right): self.builder.position_at_end(label) values = [self.builder.load(self.builder.gep(array, [i])) for array in [array1, array2]] - cond = self.cmp(ctx, op + '=' if op in ('<', '>') else op, *values) + cond = self.cmp(node, op + '=' if op in ('<', '>') else op, *values) if op == '!=': self.builder.cbranch(cond, label_true, label_cont) @@ -509,7 +501,7 @@ def cmp(self, ctx, op, left, right): if op in ('<=', '>=', '<', '>'): label_cont = ll.Block(self.builder.function) - cond2 = self.cmp(ctx, '!=', *values) + cond2 = self.cmp(node, '!=', *values) self.builder.cbranch(cond2, label_true, label_cont) self.builder.function.blocks.append(label_cont) @@ -545,7 +537,7 @@ def cmp(self, ctx, op, left, right): label_cont = ll.Block(self.builder.function) values = [self.extract(tuple, i) for tuple in [left, right]] - cond = self.cmp(ctx, op + '=' if op in ('<', '>') else op, *values) + cond = self.cmp(node, op + '=' if op in ('<', '>') else op, *values) if op == '!=': self.builder.cbranch(cond, label_true, label_cont) @@ -558,7 +550,7 @@ def cmp(self, ctx, op, left, right): if op in ('<=', '>=', '<', '>'): label_cont = ll.Block(self.builder.function) - cond2 = self.cmp(ctx, '!=', *values) + cond2 = self.cmp(node, '!=', *values) self.builder.cbranch(cond2, label_true, label_cont) self.builder.function.blocks.append(label_cont) @@ -581,13 +573,13 @@ def cmp(self, ctx, op, left, right): return vTrue else: - self.throw(ctx, err.NotComparable(left.type, right.type)) + self.throw(node, err.NotComparable(left.type, right.type)) def write(self, str): for char in str: self.builder.call(self.builtins['putchar'], [vChar(char)]) - def print(self, ctx, value): + def print(self, node, value): if value.type == tInt: self.call('writeInt', value) @@ -620,7 +612,7 @@ def print(self, ctx, value): self.write(', ') elem = self.builder.gep(self.extract(value, 0), [i]) - self.print(ctx, self.builder.load(elem)) + self.print(node, self.builder.load(elem)) self.inc(index) @@ -632,13 +624,13 @@ def print(self, ctx, value): for i in range(len(value.type.elements)): if i > 0: self.write(' ') - self.print(ctx, self.extract(value, i)) + self.print(node, self.extract(value, i)) elif value.type == tUnknown: pass else: - self.throw(ctx, err.NotPrintable(value.type)) + self.throw(node, err.NotPrintable(value.type)) def string(self, lit): const = ll.Constant(ll.ArrayType(tChar, len(lit)), [vChar(c) for c in lit]) @@ -680,77 +672,86 @@ def tuple(self, values): return result - ### Program ### + ### Compilation ### - def visitProgram(self, ctx, unit=None): + def compileUnit(self, ast, unit): self.units[unit] = Unit({}, set()) with self.unit(unit): if unit != 'std': self.env = self.units['std'].env.copy() self.initialized = self.units['std'].initialized.copy() - self.visitChildren(ctx) + self.compile(ast) + + def compile(self, node): + return getattr(self, 'compile'+node['node'])(node) ### Statements ### - def visitStmtUse(self, ctx): - name = ctx.name.text + def compileBlock(self, node): + for stmt in node['stmts']: + self.compile(stmt) + + def compileStmtUse(self, node): + name = node['name'] if name not in self.units: - self.throw(ctx, err.InvalidModule(name)) + self.throw(node, err.InvalidModule(name)) unit = self.units[name] - if ctx.only: - for id in ctx.only.ID(): - id = str(id) + kind, *ids = node['detail'] + if kind == 'only': + for id in ids: if id not in unit.env: - self.throw(ctx.only, err.UndeclaredIdentifier(id)) + self.throw(node, err.UndeclaredIdentifier(id)) self.env[id] = unit.env[id] if id in unit.initialized: self.initialized.add(id) - elif ctx.hiding: + elif kind == 'hiding': hidden = set() - for id in ctx.hiding.ID(): - id = str(id) + for id in ids: if id not in unit.env: - self.throw(ctx.hiding, err.UndeclaredIdentifier(id)) + self.throw(node, err.UndeclaredIdentifier(id)) hidden.add(id) self.env.update({x: unit.env[x] for x in unit.env.keys() - hidden}) self.initialized.update(unit.initialized - hidden) - elif ctx.as_: - self.units[ctx.as_.text] = unit + elif kind == 'as': + self.units[ids[0]] = unit else: self.env.update(unit.env) self.initialized.update(unit.initialized) - def visitStmtPrint(self, ctx): - expr = ctx.tuple_expr() + def compileStmtSkip(self, node): + pass + + def compileStmtPrint(self, node): + expr = node['expr'] if expr: - value = self.visit(expr) + value = self.compile(expr) self.print(expr, value) self.write('\n') - def visitStmtDecl(self, ctx): - type = self.visit(ctx.typ()) - id = ctx.ID() - expr = ctx.tuple_expr() - ptr = self.declare(ctx, type, id, initialize=bool(expr)) + def compileStmtDecl(self, node): + type = node['type'] + id = node['id'] + expr = node['expr'] + ptr = self.declare(node, type, id, initialize=bool(expr)) if expr: - value = self.cast(ctx, self.visit(expr), type) + value = self.cast(node, self.compile(expr), type) self.builder.store(value, ptr) - def visitStmtAssg(self, ctx): - value = self.visit(ctx.tuple_expr()) + def compileStmtAssg(self, node): + value = self.compile(node['expr']) - for lvalue in ctx.lvalue(): - exprs = lvalue.expr() + for lvalue in node['lvalues']: + exprs = lvalue['exprs'] len1 = len(exprs) if value.type.isTuple(): len2 = len(value.type.elements) if len1 > 1 and len1 != len2: - self.throw(ctx, err.CannotUnpack(value.type, len1)) + self.throw(node, err.CannotUnpack(value.type, len1)) elif len1 > 1: - self.throw(ctx, err.CannotUnpack(value.type, len1)) + self.throw(node, err.CannotUnpack(value.type, len1)) if len1 == 1: self.assign(lvalue, exprs[0], value) @@ -758,14 +759,14 @@ def visitStmtAssg(self, ctx): for i, expr in enumerate(exprs): self.assign(lvalue, expr, self.extract(value, i)) - def visitStmtAssgExpr(self, ctx): - ptr = self.lvalue(ctx, ctx.expr(0)) - value = self.binaryop(ctx, ctx.op.text, self.builder.load(ptr), self.visit(ctx.expr(1))) + def compileStmtAssgExpr(self, node): + ptr = self.lvalue(node, node['exprs'][0]) + value = self.binaryop(node, node['op'], self.builder.load(ptr), self.compile(node['exprs'][1])) self.builder.store(value, ptr) - def visitStmtIf(self, ctx): - exprs = ctx.expr() - blocks = ctx.do_block() + def compileStmtIf(self, node): + exprs = node['exprs'] + blocks = node['blocks'] with self.block() as (label_start, label_end): initialized_vars = [] @@ -774,11 +775,11 @@ def emitIfElse(index): if len(exprs) == index: if len(blocks) > index: with self.local(): - self.visit(blocks[index]) + self.compile(blocks[index]) return expr = exprs[index] - cond = self.cast(expr, self.visit(expr), tBool) + cond = self.cast(expr, self.compile(expr), tBool) label_if = self.builder.append_basic_block() label_else = self.builder.append_basic_block() @@ -786,7 +787,7 @@ def emitIfElse(index): with self.builder._branch_helper(label_if, label_end): with self.local(): - self.visit(blocks[index]) + self.compile(blocks[index]) initialized_vars.append(self.initialized) with self.builder._branch_helper(label_else, label_end): @@ -797,10 +798,10 @@ def emitIfElse(index): if len(blocks) > len(exprs): # there is an `else` statement self.initialized.update(set.intersection(*initialized_vars)) - def visitStmtWhile(self, ctx): + def compileStmtWhile(self, node): with self.block() as (label_start, label_end): - expr = ctx.expr() - cond = self.cast(expr, self.visit(expr), tBool) + expr = node['expr'] + cond = self.cast(expr, self.compile(expr), tBool) label_while = self.builder.append_basic_block() self.builder.cbranch(cond, label_while, label_end) @@ -810,27 +811,26 @@ def visitStmtWhile(self, ctx): self.env['#continue'] = label_start self.env['#break'] = label_end - self.visit(ctx.do_block()) + self.compile(node['block']) self.builder.branch(label_start) - def visitStmtUntil(self, ctx): + def compileStmtUntil(self, node): with self.block() as (label_start, label_end): with self.local(): self.env['#continue'] = label_start self.env['#break'] = label_end - self.visit(ctx.do_block()) + self.compile(node['block']) - expr = ctx.expr() - cond = self.cast(expr, self.visit(expr), tBool) + expr = node['expr'] + cond = self.cast(expr, self.compile(expr), tBool) self.builder.cbranch(cond, label_end, label_start) - def visitStmtFor(self, ctx): - exprs = ctx.tuple_expr() - vars = exprs[0].expr() - iterables = exprs[1].expr() + def compileStmtFor(self, node): + vars = node['vars'] + iterables = node['iterables'] types = [] steps = [] @@ -838,10 +838,10 @@ def visitStmtFor(self, ctx): conditions = [] getters = [] - def prepare(iterable, step): # must be a function so that lambdas work properly - - if isinstance(iterable, PyxellParser.ExprRangeContext): - values = [self.visit(expr) for expr in iterable.expr()] + def prepare(iterable, step): + # It must be a function so that lambdas have separate scopes. + if iterable['node'] == 'ExprRange': + values = lmap(self.compile, iterable['exprs']) type = values[0].type types.append(type) if type not in (tInt, tFloat, tChar): @@ -865,19 +865,19 @@ def prepare(iterable, step): # must be a function so that lambdas work properly start = values[0] if len(values) == 1: cond = lambda v: vTrue - elif iterable.dots.text == '..': + elif iterable['inclusive']: cond = lambda v: self.builder.select(desc, cmp('>=', v, values[1]), cmp('<=', v, values[1])) - elif iterable.dots.text == '...': + else: cond = lambda v: self.builder.select(desc, cmp('>', v, values[1]), cmp('<', v, values[1])) getter = lambda v: v else: - value = self.visit(iterable) + value = self.compile(iterable) if value.type.isString(): types.append(tChar) elif value.type.isArray(): types.append(value.type.subtype) else: - self.throw(ctx, err.NotIterable(value.type)) + self.throw(node, err.NotIterable(value.type)) desc = self.builder.icmp_signed('<', step, vInt(0)) index = self.builder.alloca(tInt) array = self.extract(value, 0) @@ -894,13 +894,11 @@ def prepare(iterable, step): # must be a function so that lambdas work properly conditions.append(cond) getters.append(getter) - _steps = [vInt(1)] - if len(exprs) > 2: - _steps = [self.visit(expr) for expr in exprs[2].expr()] + _steps = lmap(self.compile, node['steps']) or [vInt(1)] if len(_steps) == 1: _steps *= len(iterables) - if len(exprs) > 2 and len(_steps) != len(iterables): - self.throw(ctx, err.InvalidLoopStep()) + elif len(_steps) != len(iterables): + self.throw(node, err.InvalidLoopStep()) for iterable, step in zip(iterables, _steps): prepare(iterable, step) @@ -920,18 +918,18 @@ def prepare(iterable, step): # must be a function so that lambdas work properly if len(vars) == 1 and len(types) > 1: tuple = self.tuple([getters[i](self.builder.load(index)) for i, index in enumerate(indices)]) - self.assign(exprs[0], vars[0], tuple) + self.assign(node, vars[0], tuple) elif len(vars) > 1 and len(types) == 1: for i, var in enumerate(vars): tuple = getters[0](self.builder.load(indices[0])) - self.assign(exprs[0], var, self.extract(tuple, i)) + self.assign(node, var, self.extract(tuple, i)) elif len(vars) == len(types): for var, index, getter in zip(vars, indices, getters): - self.assign(exprs[0], var, getter(self.builder.load(index))) + self.assign(node, var, getter(self.builder.load(index))) else: - self.throw(exprs[0], err.CannotUnpack(tTuple(types), len(vars))) + self.throw(node, err.CannotUnpack(tTuple(types), len(vars))) - self.visit(ctx.do_block()) + self.compile(node['block']) self.builder.function.blocks.append(label_cont) self.builder.branch(label_cont) @@ -942,37 +940,37 @@ def prepare(iterable, step): # must be a function so that lambdas work properly self.builder.branch(label_start) - def visitStmtLoopControl(self, ctx): - stmt = ctx.s.text # `break` / `continue` - + def compileStmtLoopControl(self, node): + stmt = node['stmt'] # `break` / `continue` + try: label = self.env[f'#{stmt}'] except KeyError: - self.throw(ctx, err.UnexpectedStatement(stmt)) + self.throw(node, err.UnexpectedStatement(stmt)) self.builder.branch(label) - def visitStmtFunc(self, ctx): - id = str(ctx.ID()) + def compileStmtFunc(self, node): + id = node['id'] args = [] expect_default = False - for arg in ctx.func_arg(): - type = self.visit(arg.typ()) - name = str(arg.ID()) - default = arg.default + for arg in node['args']: + type = arg['type'] + name = arg['name'] + default = arg['default'] if default: with self.no_output(): - self.cast(default, self.visit(default), type) + self.cast(default, self.compile(default), type) expect_default = True elif expect_default: self.throw(arg, err.MissingDefault(name)) - args.append(Arg(type, name, arg.default)) + args.append(Arg(type, name, default)) - ret_type = self.visit(ctx.ret) if ctx.ret else tVoid + ret_type = node['ret'] func_type = tFunc(args, ret_type) - func_def = ctx.def_block() + func_def = node['block'] if not func_def: # `extern` func_ptr = ll.GlobalVariable(self.module, func_type, self.module.get_unique_name('f.'+id)) @@ -996,78 +994,80 @@ def visitStmtFunc(self, ctx): self.env.pop('#break', None) for (type, id, default), value in zip(args, func.args): - ptr = self.declare(ctx, type, id, redeclare=True, initialize=True) + ptr = self.declare(node, type, id, redeclare=True, initialize=True) self.env[id] = ptr self.builder.store(value, ptr) - self.visit(func_def) + self.compile(func_def) if ret_type == tVoid: self.builder.ret_void() else: if '#return' not in self.initialized: - self.throw(ctx, err.MissingReturn(id)) + self.throw(node, err.MissingReturn(id)) self.builder.ret(ret_type.default()) self.builder.position_at_end(prev_label) - def visitStmtReturn(self, ctx): + def compileStmtReturn(self, node): try: type = self.env['#return'] except KeyError: - self.throw(ctx, err.UnexpectedStatement('return')) + self.throw(node, err.UnexpectedStatement('return')) self.initialized.add('#return') - expr = ctx.tuple_expr() + expr = node['expr'] if expr: - value = self.cast(ctx, self.visit(expr), type) + value = self.cast(node, self.compile(expr), type) self.builder.ret(value) else: if type != tVoid: - self.throw(ctx, err.IllegalAssignment(tVoid, type)) + self.throw(node, err.IllegalAssignment(tVoid, type)) self.builder.ret_void() ### Expressions ### - def visitExprParentheses(self, ctx): - return self.visit(ctx.tuple_expr()) + def compileExprArray(self, node): + exprs = node['exprs'] + values = self.unify(node, *map(self.compile, exprs)) + subtype = values[0].type if values else tUnknown + return self.array(subtype, values) - def visitExprIndex(self, ctx): - return self.builder.load(self.index(ctx, *ctx.expr())) + def compileExprIndex(self, node): + return self.builder.load(self.index(node, *node['exprs'])) - def visitExprAttr(self, ctx): - obj, value = self.attribute(ctx, ctx.expr(), ctx.ID()) + def compileExprAttr(self, node): + obj, value = self.attribute(node, node['expr'], node['attr']) return value - def visitExprCall(self, ctx): - expr = ctx.expr() + def compileExprCall(self, node): + expr = node['expr'] - if isinstance(expr, PyxellParser.ExprAttrContext): - obj, func = self.attribute(expr, expr.expr(), expr.ID()) + if expr['node'] == 'ExprAttr': + obj, func = self.attribute(expr, expr['expr'], expr['attr']) else: obj = None - func = self.visit(expr) + func = self.compile(expr) if not func.type.isFunc(): - self.throw(ctx, err.NotFunction(func.type)) + self.throw(node, err.NotFunction(func.type)) args = [] pos_args = {} named_args = {} - for i, call_arg in enumerate(ctx.call_arg()): - name = call_arg.ID() - expr = call_arg.expr() + for i, call_arg in enumerate(node['args']): + name = call_arg['name'] + expr = call_arg['expr'] if name: - name = str(name) if name in named_args: - self.throw(ctx, err.RepeatedArgument(name)) + self.throw(node, err.RepeatedArgument(name)) named_args[name] = expr else: if named_args: - self.throw(ctx, err.ExpectedNamedArgument()) + self.throw(node, err.ExpectedNamedArgument()) pos_args[i] = expr func_args = func.type.args[1:] if obj else func.type.args @@ -1075,49 +1075,42 @@ def visitExprCall(self, ctx): name = func_arg.name if name in named_args: if i in pos_args: - self.throw(ctx, err.RepeatedArgument(name)) + self.throw(node, err.RepeatedArgument(name)) expr = named_args.pop(name) elif i in pos_args: expr = pos_args.pop(i) elif func_arg.default: expr = func_arg.default else: - self.throw(ctx, err.TooFewArguments(func.type)) + self.throw(node, err.TooFewArguments(func.type)) - value = self.cast(expr, self.visit(expr), func_arg.type) + value = self.cast(expr, self.compile(expr), func_arg.type) args.append(value) if named_args: - self.throw(ctx, err.UnexpectedArgument(next(iter(named_args)))) + self.throw(node, err.UnexpectedArgument(next(iter(named_args)))) if pos_args: - self.throw(ctx, err.TooManyArguments(func.type)) + self.throw(node, err.TooManyArguments(func.type)) if obj: args.insert(0, obj) return self.builder.call(func, args) - def visitExprUnaryOp(self, ctx): - return self.unaryop(ctx, ctx.op.text, self.visit(ctx.expr())) + def compileExprUnaryOp(self, node): + return self.unaryop(node, node['op'], self.compile(node['expr'])) - def visitExprBinaryOp(self, ctx): - return self.binaryop(ctx, ctx.op.text, self.visit(ctx.expr(0)), self.visit(ctx.expr(1))) + def compileExprBinaryOp(self, node): + return self.binaryop(node, node['op'], *map(self.compile, node['exprs'])) - def visitExprRange(self, ctx): - self.throw(ctx, err.UnknownType()) + def compileExprRange(self, node): + self.throw(node, err.UnknownType()) - def visitExprCmp(self, ctx): - exprs = [] - ops = [] - while True: - exprs.append(ctx.expr(0)) - ops.append(ctx.op.text) - if not isinstance(ctx.expr(1), PyxellParser.ExprCmpContext): - break - ctx = ctx.expr(1) - exprs.append(ctx.expr(1)) + def compileExprCmp(self, node): + exprs = node['exprs'] + ops = node['ops'] - values = [self.visit(exprs[0])] + values = [self.compile(exprs[0])] with self.block() as (label_start, label_end): self.builder.position_at_end(label_end) @@ -1125,8 +1118,8 @@ def visitExprCmp(self, ctx): self.builder.position_at_end(label_start) def emitIf(index): - values.append(self.visit(exprs[index+1])) - cond = self.cmp(ctx, ops[index], values[index], values[index+1]) + values.append(self.compile(exprs[index+1])) + cond = self.cmp(node, ops[index], values[index], values[index+1]) if len(exprs) == index+2: phi.add_incoming(cond, self.builder.basic_block) @@ -1144,10 +1137,11 @@ def emitIf(index): return phi - def visitExprLogicalOp(self, ctx): - op = ctx.op.text + def compileExprLogicalOp(self, node): + exprs = node['exprs'] + op = node['op'] - cond1 = self.visit(ctx.expr(0)) + cond1 = self.compile(exprs[0]) with self.block() as (label_start, label_end): label_if = self.builder.function.append_basic_block() @@ -1165,48 +1159,41 @@ def visitExprLogicalOp(self, ctx): phi.add_incoming(vTrue, label_start) with self.builder._branch_helper(label_if, label_end): - cond2 = self.visit(ctx.expr(1)) + cond2 = self.compile(exprs[1]) if not cond1.type == cond2.type == tBool: - self.throw(ctx, err.NoBinaryOperator(op, cond1.type, cond2.type)) + self.throw(node, err.NoBinaryOperator(op, cond1.type, cond2.type)) phi.add_incoming(cond2, self.builder.basic_block) return phi - def visitExprCond(self, ctx): - exprs = ctx.expr() - cond, *values = [self.visit(expr) for expr in exprs] - + def compileExprCond(self, node): + exprs = node['exprs'] + cond, *values = map(self.compile, exprs) cond = self.cast(exprs[0], cond, tBool) - values = self.unify(ctx, *values) - + values = self.unify(node, *values) return self.builder.select(cond, *values) - def visitExprTuple(self, ctx): - exprs = ctx.expr() - values = [self.visit(expr) for expr in exprs] + def compileExprTuple(self, node): + values = lmap(self.compile, node['exprs']) return self.tuple(values) - def visitExprInterpolation(self, ctx): - return self.visit(ctx.tuple_expr()) - ### Atoms ### - def visitAtomInt(self, ctx): - return vInt(ctx.INT()) + def compileAtomInt(self, node): + return vInt(node['int']) - def visitAtomFloat(self, ctx): - return vFloat(ctx.FLOAT()) + def compileAtomFloat(self, node): + return vFloat(node['float']) - def visitAtomBool(self, ctx): - return vBool(ctx.getText() == 'true') + def compileAtomBool(self, node): + return vBool(node['bool']) - def visitAtomChar(self, ctx): - lit = ast.literal_eval(str(ctx.CHAR())) - return vChar(lit) + def compileAtomChar(self, node): + return vChar(node['char']) - def visitAtomString(self, ctx): - lit = ast.literal_eval(str(ctx.STRING())) + def compileAtomString(self, node): + lit = node['string'] parts = re.split(r'{([^}]+)}', lit) if len(parts) > 1: @@ -1220,11 +1207,11 @@ def visitAtomString(self, ctx): try: expr = parse_expr(tag) except err: - self.throw(ctx, err.InvalidExpression(tag)) + self.throw(node, err.InvalidExpression(tag)) try: - obj, func = self.attribute(ctx, expr, 'toString') + obj, func = self.attribute(node, expr, 'toString') except err as e: - self.throw(ctx, str(e).partition(': ')[2][:-1]) + self.throw(node, str(e).partition(': ')[2][:-1]) values[i*2+1] = self.builder.call(func, [obj]) @@ -1233,53 +1220,5 @@ def visitAtomString(self, ctx): else: return self.string(lit) - def visitAtomArray(self, ctx): - exprs = ctx.expr() - values = self.unify(ctx, *[self.visit(expr) for expr in exprs]) - subtype = values[0].type if values else tUnknown - return self.array(subtype, values) - - def visitAtomId(self, ctx): - return self.get(ctx, ctx.ID()) - - - ### Types ### - - def visitTypePrimitive(self, ctx): - return { - 'Void': tVoid, - 'Int': tInt, - 'Float': tFloat, - 'Bool': tBool, - 'Char': tChar, - 'String': tString, - }[ctx.getText()] - - def visitTypeParentheses(self, ctx): - return self.visit(ctx.typ()) - - def visitTypeArray(self, ctx): - return tArray(self.visit(ctx.typ())) - - def visitTypeTuple(self, ctx): - types = [] - while True: - types.append(self.visit(ctx.typ(0))) - if not isinstance(ctx.typ(1), PyxellParser.TypeTupleContext): - break - ctx = ctx.typ(1) - types.append(self.visit(ctx.typ(1))) - return tTuple(types) - - def visitTypeFunc(self, ctx): - types = [] - while True: - types.append(self.visit(ctx.typ(0))) - if not isinstance(ctx.typ(1), PyxellParser.TypeFuncContext): - break - ctx = ctx.typ(1) - types.append(self.visit(ctx.typ(1))) - return tFunc(types[:-1], types[-1]) - - def visitTypeFunc0(self, ctx): - return tFunc([], self.visit(ctx.typ())) + def compileAtomId(self, node): + return self.get(node, node['id']) diff --git a/src/main.py b/src/main.py index d8f7d584..326e0423 100644 --- a/src/main.py +++ b/src/main.py @@ -26,8 +26,8 @@ def run_compiler(filepath, clangargs): for name, path in units.items(): code = transform_indented_code(path.read_text()) - tree = parse_program(code) - compiler.visitProgram(tree, unit=name) + ast = parse_program(code) + compiler.compileUnit(ast, name) with open(f'{filename}.ll', 'w') as file: file.write(compiler.llvm()) diff --git a/src/parsing.py b/src/parsing.py index ff03c116..72cf8f4a 100644 --- a/src/parsing.py +++ b/src/parsing.py @@ -3,6 +3,8 @@ from .antlr.PyxellLexer import PyxellLexer from .antlr.PyxellParser import PyxellParser + +from .ast import PyxellASTVisitor from .errors import PyxellErrorListener @@ -16,9 +18,14 @@ def _get_parser(code): return parser +def _build_ast(tree): + visitor = PyxellASTVisitor() + return visitor.visit(tree) + + def parse_program(code): - return _get_parser(code).program() + return _build_ast(_get_parser(code).program()) def parse_expr(code): - return _get_parser(code).interpolation_expr() + return _build_ast(_get_parser(code).interpolation_expr()) diff --git a/src/types.py b/src/types.py index 320d9480..7dae7c2f 100644 --- a/src/types.py +++ b/src/types.py @@ -6,6 +6,14 @@ from .utils import extend_class +__all__ = [ + 'tVoid', 'tInt', 'tFloat', 'tBool', 'tChar', 'tPtr', 'tString', 'tArray', 'tTuple', 'tFunc', 'tUnknown', + 'Arg', + 'types_compatible', 'unify_types', + 'vInt', 'vFloat', 'vBool', 'vFalse', 'vTrue', 'vChar', 'vNull', 'vIndex', +] + + class UnknownType(ll.Type): def _to_string(self): @@ -29,6 +37,9 @@ def __eq__(self, other): return False return self.kind == other.kind + def __hash__(self): + return hash(CustomStructType) + tVoid = ll.VoidType() tInt = ll.IntType(64) @@ -62,8 +73,6 @@ def isArray(type): def tTuple(elements): - if len(elements) == 1: - return elements[0] type = tPtr(CustomStructType(elements, 'tuple')) type.elements = elements return type @@ -168,13 +177,13 @@ def default(type): def vInt(n): - return ll.Constant(tInt, str(n)) + return ll.Constant(tInt, n) def vFloat(f): - return ll.Constant(tFloat, str(f)) + return ll.Constant(tFloat, f) def vBool(b): - return ll.Constant(tBool, int(b)) + return ll.Constant(tBool, b) vFalse = vBool(False) vTrue = vBool(True) diff --git a/src/utils.py b/src/utils.py index 2d1ce0a0..a0c68a1e 100644 --- a/src/utils.py +++ b/src/utils.py @@ -1,4 +1,8 @@ +def lmap(*args): + return [*map(*args)] + + def extend_class(cls): def decorator(func): setattr(cls, func.__name__, func) From 48791d6fdf4b109f5d187f4d0a11d3716e855270 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Tue, 5 Nov 2019 16:36:50 +0100 Subject: [PATCH 051/100] Precompilation of libraries for tests --- src/compiler.py | 44 ++++++++++++++++++++++++-------------------- src/main.py | 30 +++++++++++++++--------------- test.py | 4 ++-- 3 files changed, 41 insertions(+), 37 deletions(-) diff --git a/src/compiler.py b/src/compiler.py index b7fd1aa1..98305008 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -31,17 +31,35 @@ def __init__(self): self._unit = None self.builder = CustomIRBuilder() self.module = ll.Module() - self.main = ll.Function(self.module, tFunc([], tInt).pointee, 'main') - self.builder.position_at_end(self.main.append_basic_block('entry')) self.builtins = { 'malloc': ll.Function(self.module, tFunc([tInt], tPtr()).pointee, 'malloc'), 'memcpy': ll.Function(self.module, tFunc([tPtr(), tPtr(), tInt]).pointee, 'memcpy'), 'putchar': ll.Function(self.module, tFunc([tChar]).pointee, 'putchar'), } + self.main = ll.Function(self.module, tFunc([], tInt).pointee, 'main') + self.init = ll.Function(self.module, tFunc([]).pointee, 'init') + self.builder.position_at_end(self.init.append_basic_block('entry')) + + def run(self, ast, unit): + self.units[unit] = Unit({}, set()) + with self.unit(unit): + if unit != 'std': + self.env = self.units['std'].env.copy() + self.initialized = self.units['std'].initialized.copy() + self.compile(ast) - def llvm(self): - if not self.builder.basic_block.is_terminated: - self.builder.ret(ll.Constant(tInt, 0)) + def run_main(self, ast): + self.builder.ret_void() + self.main.blocks = [] + self.builder.position_at_end(self.main.append_basic_block('entry')) + self.builder.call(self.init, []) + self.run(ast, 'main') + self.builder.ret(ll.Constant(tInt, 0)) + + def compile(self, node): + return getattr(self, 'compile'+node['node'])(node) + + def llvm_ir(self): return str(self.module) @@ -233,7 +251,7 @@ def declare(self, node, type, id, redeclare=False, initialize=False): if id in self.env and not redeclare: self.throw(node, err.RedeclaredIdentifier(id)) - if self.builder.basic_block.parent._name == 'main': + if self.builder.function._name in ('init', 'main'): ptr = ll.GlobalVariable(self.module, type, self.module.get_unique_name(id)) ptr.initializer = type.default() else: @@ -672,20 +690,6 @@ def tuple(self, values): return result - ### Compilation ### - - def compileUnit(self, ast, unit): - self.units[unit] = Unit({}, set()) - with self.unit(unit): - if unit != 'std': - self.env = self.units['std'].env.copy() - self.initialized = self.units['std'].initialized.copy() - self.compile(ast) - - def compile(self, node): - return getattr(self, 'compile'+node['node'])(node) - - ### Statements ### def compileBlock(self, node): diff --git a/src/main.py b/src/main.py index 326e0423..ad8660ef 100644 --- a/src/main.py +++ b/src/main.py @@ -12,25 +12,25 @@ abspath = Path(__file__).parents[1] -def run_compiler(filepath, clangargs): - filename, ext = os.path.splitext(filepath) +compiler = PyxellCompiler() + +for name in ['std', 'math', 'time', 'random']: + path = abspath/f'lib/{name}.px' + code = transform_indented_code(path.read_text()) + ast = parse_program(code) + compiler.run(ast, name) - units = { - **{name: abspath/f'lib/{name}.px' for name in [ - 'std', 'math', 'time', 'random', - ]}, - 'main': Path(filepath), - } - compiler = PyxellCompiler() +def compile(filepath, clangargs): + filepath = Path(filepath) + filename, ext = os.path.splitext(filepath) - for name, path in units.items(): - code = transform_indented_code(path.read_text()) - ast = parse_program(code) - compiler.compileUnit(ast, name) + code = transform_indented_code(filepath.read_text()) + ast = parse_program(code) + compiler.run_main(ast) with open(f'{filename}.ll', 'w') as file: - file.write(compiler.llvm()) + file.write(compiler.llvm_ir()) try: subprocess.check_output(['clang', f'{filename}.ll', abspath/'lib/io.ll', abspath/'lib/base.ll', '-o', f'{filename}.exe', '-O2', *clangargs], stderr=subprocess.STDOUT) @@ -45,7 +45,7 @@ def run_compiler(filepath, clangargs): args = parser.parse_args() try: - run_compiler(args.filepath, args.clangargs) + compile(args.filepath, args.clangargs) except Exception as e: print(str(e)) exit(1) diff --git a/test.py b/test.py index 38367bd5..3757e8a4 100644 --- a/test.py +++ b/test.py @@ -8,7 +8,7 @@ from timeit import default_timer as timer from pathlib import Path -from src.main import run_compiler +from src.main import compile # Setup terminal colors. R = colorama.Style.BRIGHT + colorama.Fore.RED @@ -49,7 +49,7 @@ try: params = ['-target', 'x86_64-pc-windows-gnu'] if args.target_windows_gnu else [] - run_compiler(path, params) + compile(path, params) except KeyboardInterrupt: exit(1) except Exception as e: From d18b6d7cdb3541ba461338e86b84924bcf6d94a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Wed, 6 Nov 2019 21:25:38 +0100 Subject: [PATCH 052/100] Lambda functions --- src/Pyxell.g4 | 1 + src/antlr/Pyxell.interp | 6 +- src/antlr/Pyxell.tokens | 36 +- src/antlr/PyxellLexer.interp | 7 +- src/antlr/PyxellLexer.py | 416 ++++++++--------- src/antlr/PyxellLexer.tokens | 36 +- src/antlr/PyxellParser.py | 862 +++++++++++++++++++---------------- src/antlr/PyxellVisitor.py | 39 +- src/ast.py | 7 + src/compiler.py | 45 +- 10 files changed, 788 insertions(+), 667 deletions(-) diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index 48962a70..c57472c9 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -62,6 +62,7 @@ expr | expr op='and' expr # ExprLogicalOp | expr op='or' expr # ExprLogicalOp | expr '?' expr ':' expr # ExprCond + | 'lambda' (ID ',')* ID? '->' expr # ExprLambda ; tuple_expr diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index a612d7b8..a7d3ce62 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -56,6 +56,8 @@ null 'and' 'or' '?' +'lambda' +'->' 'true' 'false' 'Void' @@ -64,7 +66,6 @@ null 'Bool' 'Char' 'String' -'->' null null null @@ -141,6 +142,7 @@ null null null null +null INT FLOAT CHAR @@ -168,4 +170,4 @@ typ atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 75, 329, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 3, 2, 7, 2, 32, 10, 2, 12, 2, 14, 2, 35, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 43, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 53, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 58, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 64, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 69, 10, 4, 12, 4, 14, 4, 72, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 83, 10, 4, 5, 4, 85, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 90, 10, 5, 12, 5, 14, 5, 93, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 104, 10, 6, 12, 6, 14, 6, 107, 11, 6, 3, 6, 3, 6, 3, 6, 5, 6, 112, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 130, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 141, 10, 6, 12, 6, 14, 6, 144, 11, 6, 3, 6, 5, 6, 147, 10, 6, 3, 6, 3, 6, 5, 6, 151, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 157, 10, 6, 5, 6, 159, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 165, 10, 7, 3, 8, 3, 8, 6, 8, 169, 10, 8, 13, 8, 14, 8, 170, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 185, 10, 9, 12, 9, 14, 9, 188, 11, 9, 3, 9, 5, 9, 191, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 198, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 252, 10, 9, 12, 9, 14, 9, 255, 11, 9, 3, 9, 5, 9, 258, 10, 9, 3, 9, 3, 9, 3, 9, 7, 9, 263, 10, 9, 12, 9, 14, 9, 266, 11, 9, 3, 10, 3, 10, 3, 10, 7, 10, 271, 10, 10, 12, 10, 14, 10, 274, 11, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 5, 12, 283, 10, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 293, 10, 13, 3, 14, 3, 14, 7, 14, 297, 10, 14, 12, 14, 14, 14, 300, 11, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 316, 10, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 7, 15, 324, 10, 15, 12, 15, 14, 15, 327, 11, 15, 3, 15, 2, 4, 16, 28, 16, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 2, 12, 3, 2, 11, 21, 3, 2, 22, 23, 4, 2, 15, 16, 46, 46, 3, 2, 12, 14, 3, 2, 15, 16, 3, 2, 17, 18, 3, 2, 47, 48, 3, 2, 49, 54, 3, 2, 59, 60, 3, 2, 61, 66, 2, 381, 2, 33, 3, 2, 2, 2, 4, 42, 3, 2, 2, 2, 6, 84, 3, 2, 2, 2, 8, 86, 3, 2, 2, 2, 10, 158, 3, 2, 2, 2, 12, 160, 3, 2, 2, 2, 14, 166, 3, 2, 2, 2, 16, 197, 3, 2, 2, 2, 18, 272, 3, 2, 2, 2, 20, 277, 3, 2, 2, 2, 22, 282, 3, 2, 2, 2, 24, 292, 3, 2, 2, 2, 26, 298, 3, 2, 2, 2, 28, 315, 3, 2, 2, 2, 30, 32, 5, 4, 3, 2, 31, 30, 3, 2, 2, 2, 32, 35, 3, 2, 2, 2, 33, 31, 3, 2, 2, 2, 33, 34, 3, 2, 2, 2, 34, 36, 3, 2, 2, 2, 35, 33, 3, 2, 2, 2, 36, 37, 7, 2, 2, 3, 37, 3, 3, 2, 2, 2, 38, 39, 5, 6, 4, 2, 39, 40, 7, 3, 2, 2, 40, 43, 3, 2, 2, 2, 41, 43, 5, 10, 6, 2, 42, 38, 3, 2, 2, 2, 42, 41, 3, 2, 2, 2, 43, 5, 3, 2, 2, 2, 44, 45, 7, 4, 2, 2, 45, 52, 7, 72, 2, 2, 46, 47, 7, 5, 2, 2, 47, 53, 5, 26, 14, 2, 48, 49, 7, 6, 2, 2, 49, 53, 5, 26, 14, 2, 50, 51, 7, 7, 2, 2, 51, 53, 7, 72, 2, 2, 52, 46, 3, 2, 2, 2, 52, 48, 3, 2, 2, 2, 52, 50, 3, 2, 2, 2, 52, 53, 3, 2, 2, 2, 53, 85, 3, 2, 2, 2, 54, 85, 7, 8, 2, 2, 55, 57, 7, 9, 2, 2, 56, 58, 5, 18, 10, 2, 57, 56, 3, 2, 2, 2, 57, 58, 3, 2, 2, 2, 58, 85, 3, 2, 2, 2, 59, 60, 5, 28, 15, 2, 60, 63, 7, 72, 2, 2, 61, 62, 7, 10, 2, 2, 62, 64, 5, 18, 10, 2, 63, 61, 3, 2, 2, 2, 63, 64, 3, 2, 2, 2, 64, 85, 3, 2, 2, 2, 65, 66, 5, 8, 5, 2, 66, 67, 7, 10, 2, 2, 67, 69, 3, 2, 2, 2, 68, 65, 3, 2, 2, 2, 69, 72, 3, 2, 2, 2, 70, 68, 3, 2, 2, 2, 70, 71, 3, 2, 2, 2, 71, 73, 3, 2, 2, 2, 72, 70, 3, 2, 2, 2, 73, 85, 5, 18, 10, 2, 74, 75, 5, 16, 9, 2, 75, 76, 9, 2, 2, 2, 76, 77, 7, 10, 2, 2, 77, 78, 5, 16, 9, 2, 78, 85, 3, 2, 2, 2, 79, 85, 9, 3, 2, 2, 80, 82, 7, 24, 2, 2, 81, 83, 5, 18, 10, 2, 82, 81, 3, 2, 2, 2, 82, 83, 3, 2, 2, 2, 83, 85, 3, 2, 2, 2, 84, 44, 3, 2, 2, 2, 84, 54, 3, 2, 2, 2, 84, 55, 3, 2, 2, 2, 84, 59, 3, 2, 2, 2, 84, 70, 3, 2, 2, 2, 84, 74, 3, 2, 2, 2, 84, 79, 3, 2, 2, 2, 84, 80, 3, 2, 2, 2, 85, 7, 3, 2, 2, 2, 86, 91, 5, 16, 9, 2, 87, 88, 7, 25, 2, 2, 88, 90, 5, 16, 9, 2, 89, 87, 3, 2, 2, 2, 90, 93, 3, 2, 2, 2, 91, 89, 3, 2, 2, 2, 91, 92, 3, 2, 2, 2, 92, 9, 3, 2, 2, 2, 93, 91, 3, 2, 2, 2, 94, 95, 7, 26, 2, 2, 95, 96, 5, 16, 9, 2, 96, 97, 7, 27, 2, 2, 97, 105, 5, 14, 8, 2, 98, 99, 7, 28, 2, 2, 99, 100, 5, 16, 9, 2, 100, 101, 7, 27, 2, 2, 101, 102, 5, 14, 8, 2, 102, 104, 3, 2, 2, 2, 103, 98, 3, 2, 2, 2, 104, 107, 3, 2, 2, 2, 105, 103, 3, 2, 2, 2, 105, 106, 3, 2, 2, 2, 106, 111, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 108, 109, 7, 29, 2, 2, 109, 110, 7, 27, 2, 2, 110, 112, 5, 14, 8, 2, 111, 108, 3, 2, 2, 2, 111, 112, 3, 2, 2, 2, 112, 159, 3, 2, 2, 2, 113, 114, 7, 30, 2, 2, 114, 115, 5, 16, 9, 2, 115, 116, 7, 27, 2, 2, 116, 117, 5, 14, 8, 2, 117, 159, 3, 2, 2, 2, 118, 119, 7, 31, 2, 2, 119, 120, 5, 16, 9, 2, 120, 121, 7, 27, 2, 2, 121, 122, 5, 14, 8, 2, 122, 159, 3, 2, 2, 2, 123, 124, 7, 32, 2, 2, 124, 125, 5, 18, 10, 2, 125, 126, 7, 33, 2, 2, 126, 129, 5, 18, 10, 2, 127, 128, 7, 34, 2, 2, 128, 130, 5, 18, 10, 2, 129, 127, 3, 2, 2, 2, 129, 130, 3, 2, 2, 2, 130, 131, 3, 2, 2, 2, 131, 132, 7, 27, 2, 2, 132, 133, 5, 14, 8, 2, 133, 159, 3, 2, 2, 2, 134, 135, 7, 35, 2, 2, 135, 136, 7, 72, 2, 2, 136, 142, 7, 36, 2, 2, 137, 138, 5, 12, 7, 2, 138, 139, 7, 25, 2, 2, 139, 141, 3, 2, 2, 2, 140, 137, 3, 2, 2, 2, 141, 144, 3, 2, 2, 2, 142, 140, 3, 2, 2, 2, 142, 143, 3, 2, 2, 2, 143, 146, 3, 2, 2, 2, 144, 142, 3, 2, 2, 2, 145, 147, 5, 12, 7, 2, 146, 145, 3, 2, 2, 2, 146, 147, 3, 2, 2, 2, 147, 148, 3, 2, 2, 2, 148, 150, 7, 37, 2, 2, 149, 151, 5, 28, 15, 2, 150, 149, 3, 2, 2, 2, 150, 151, 3, 2, 2, 2, 151, 156, 3, 2, 2, 2, 152, 153, 7, 38, 2, 2, 153, 157, 5, 14, 8, 2, 154, 155, 7, 39, 2, 2, 155, 157, 7, 3, 2, 2, 156, 152, 3, 2, 2, 2, 156, 154, 3, 2, 2, 2, 157, 159, 3, 2, 2, 2, 158, 94, 3, 2, 2, 2, 158, 113, 3, 2, 2, 2, 158, 118, 3, 2, 2, 2, 158, 123, 3, 2, 2, 2, 158, 134, 3, 2, 2, 2, 159, 11, 3, 2, 2, 2, 160, 161, 5, 28, 15, 2, 161, 164, 7, 72, 2, 2, 162, 163, 7, 40, 2, 2, 163, 165, 5, 16, 9, 2, 164, 162, 3, 2, 2, 2, 164, 165, 3, 2, 2, 2, 165, 13, 3, 2, 2, 2, 166, 168, 7, 41, 2, 2, 167, 169, 5, 4, 3, 2, 168, 167, 3, 2, 2, 2, 169, 170, 3, 2, 2, 2, 170, 168, 3, 2, 2, 2, 170, 171, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 173, 7, 42, 2, 2, 173, 15, 3, 2, 2, 2, 174, 175, 8, 9, 1, 2, 175, 198, 5, 24, 13, 2, 176, 177, 7, 36, 2, 2, 177, 178, 5, 18, 10, 2, 178, 179, 7, 37, 2, 2, 179, 198, 3, 2, 2, 2, 180, 186, 7, 43, 2, 2, 181, 182, 5, 16, 9, 2, 182, 183, 7, 25, 2, 2, 183, 185, 3, 2, 2, 2, 184, 181, 3, 2, 2, 2, 185, 188, 3, 2, 2, 2, 186, 184, 3, 2, 2, 2, 186, 187, 3, 2, 2, 2, 187, 190, 3, 2, 2, 2, 188, 186, 3, 2, 2, 2, 189, 191, 5, 16, 9, 2, 190, 189, 3, 2, 2, 2, 190, 191, 3, 2, 2, 2, 191, 192, 3, 2, 2, 2, 192, 198, 7, 44, 2, 2, 193, 194, 9, 4, 2, 2, 194, 198, 5, 16, 9, 16, 195, 196, 7, 55, 2, 2, 196, 198, 5, 16, 9, 6, 197, 174, 3, 2, 2, 2, 197, 176, 3, 2, 2, 2, 197, 180, 3, 2, 2, 2, 197, 193, 3, 2, 2, 2, 197, 195, 3, 2, 2, 2, 198, 264, 3, 2, 2, 2, 199, 200, 12, 17, 2, 2, 200, 201, 7, 11, 2, 2, 201, 263, 5, 16, 9, 17, 202, 203, 12, 15, 2, 2, 203, 204, 9, 5, 2, 2, 204, 263, 5, 16, 9, 16, 205, 206, 12, 14, 2, 2, 206, 207, 9, 6, 2, 2, 207, 263, 5, 16, 9, 15, 208, 209, 12, 13, 2, 2, 209, 210, 9, 7, 2, 2, 210, 263, 5, 16, 9, 14, 211, 212, 12, 12, 2, 2, 212, 213, 7, 19, 2, 2, 213, 263, 5, 16, 9, 13, 214, 215, 12, 11, 2, 2, 215, 216, 7, 20, 2, 2, 216, 263, 5, 16, 9, 12, 217, 218, 12, 10, 2, 2, 218, 219, 7, 21, 2, 2, 219, 263, 5, 16, 9, 11, 220, 221, 12, 9, 2, 2, 221, 222, 9, 8, 2, 2, 222, 263, 5, 16, 9, 10, 223, 224, 12, 7, 2, 2, 224, 225, 9, 9, 2, 2, 225, 263, 5, 16, 9, 7, 226, 227, 12, 5, 2, 2, 227, 228, 7, 56, 2, 2, 228, 263, 5, 16, 9, 5, 229, 230, 12, 4, 2, 2, 230, 231, 7, 57, 2, 2, 231, 263, 5, 16, 9, 4, 232, 233, 12, 3, 2, 2, 233, 234, 7, 58, 2, 2, 234, 235, 5, 16, 9, 2, 235, 236, 7, 40, 2, 2, 236, 237, 5, 16, 9, 3, 237, 263, 3, 2, 2, 2, 238, 239, 12, 20, 2, 2, 239, 240, 7, 43, 2, 2, 240, 241, 5, 18, 10, 2, 241, 242, 7, 44, 2, 2, 242, 263, 3, 2, 2, 2, 243, 244, 12, 19, 2, 2, 244, 245, 7, 45, 2, 2, 245, 263, 7, 72, 2, 2, 246, 247, 12, 18, 2, 2, 247, 253, 7, 36, 2, 2, 248, 249, 5, 22, 12, 2, 249, 250, 7, 25, 2, 2, 250, 252, 3, 2, 2, 2, 251, 248, 3, 2, 2, 2, 252, 255, 3, 2, 2, 2, 253, 251, 3, 2, 2, 2, 253, 254, 3, 2, 2, 2, 254, 257, 3, 2, 2, 2, 255, 253, 3, 2, 2, 2, 256, 258, 5, 22, 12, 2, 257, 256, 3, 2, 2, 2, 257, 258, 3, 2, 2, 2, 258, 259, 3, 2, 2, 2, 259, 263, 7, 37, 2, 2, 260, 261, 12, 8, 2, 2, 261, 263, 7, 48, 2, 2, 262, 199, 3, 2, 2, 2, 262, 202, 3, 2, 2, 2, 262, 205, 3, 2, 2, 2, 262, 208, 3, 2, 2, 2, 262, 211, 3, 2, 2, 2, 262, 214, 3, 2, 2, 2, 262, 217, 3, 2, 2, 2, 262, 220, 3, 2, 2, 2, 262, 223, 3, 2, 2, 2, 262, 226, 3, 2, 2, 2, 262, 229, 3, 2, 2, 2, 262, 232, 3, 2, 2, 2, 262, 238, 3, 2, 2, 2, 262, 243, 3, 2, 2, 2, 262, 246, 3, 2, 2, 2, 262, 260, 3, 2, 2, 2, 263, 266, 3, 2, 2, 2, 264, 262, 3, 2, 2, 2, 264, 265, 3, 2, 2, 2, 265, 17, 3, 2, 2, 2, 266, 264, 3, 2, 2, 2, 267, 268, 5, 16, 9, 2, 268, 269, 7, 25, 2, 2, 269, 271, 3, 2, 2, 2, 270, 267, 3, 2, 2, 2, 271, 274, 3, 2, 2, 2, 272, 270, 3, 2, 2, 2, 272, 273, 3, 2, 2, 2, 273, 275, 3, 2, 2, 2, 274, 272, 3, 2, 2, 2, 275, 276, 5, 16, 9, 2, 276, 19, 3, 2, 2, 2, 277, 278, 5, 18, 10, 2, 278, 279, 7, 2, 2, 3, 279, 21, 3, 2, 2, 2, 280, 281, 7, 72, 2, 2, 281, 283, 7, 10, 2, 2, 282, 280, 3, 2, 2, 2, 282, 283, 3, 2, 2, 2, 283, 284, 3, 2, 2, 2, 284, 285, 5, 16, 9, 2, 285, 23, 3, 2, 2, 2, 286, 293, 7, 68, 2, 2, 287, 293, 7, 69, 2, 2, 288, 293, 9, 10, 2, 2, 289, 293, 7, 70, 2, 2, 290, 293, 7, 71, 2, 2, 291, 293, 7, 72, 2, 2, 292, 286, 3, 2, 2, 2, 292, 287, 3, 2, 2, 2, 292, 288, 3, 2, 2, 2, 292, 289, 3, 2, 2, 2, 292, 290, 3, 2, 2, 2, 292, 291, 3, 2, 2, 2, 293, 25, 3, 2, 2, 2, 294, 295, 7, 72, 2, 2, 295, 297, 7, 25, 2, 2, 296, 294, 3, 2, 2, 2, 297, 300, 3, 2, 2, 2, 298, 296, 3, 2, 2, 2, 298, 299, 3, 2, 2, 2, 299, 301, 3, 2, 2, 2, 300, 298, 3, 2, 2, 2, 301, 302, 7, 72, 2, 2, 302, 27, 3, 2, 2, 2, 303, 304, 8, 15, 1, 2, 304, 316, 9, 11, 2, 2, 305, 306, 7, 36, 2, 2, 306, 307, 5, 28, 15, 2, 307, 308, 7, 37, 2, 2, 308, 316, 3, 2, 2, 2, 309, 310, 7, 43, 2, 2, 310, 311, 5, 28, 15, 2, 311, 312, 7, 44, 2, 2, 312, 316, 3, 2, 2, 2, 313, 314, 7, 67, 2, 2, 314, 316, 5, 28, 15, 3, 315, 303, 3, 2, 2, 2, 315, 305, 3, 2, 2, 2, 315, 309, 3, 2, 2, 2, 315, 313, 3, 2, 2, 2, 316, 325, 3, 2, 2, 2, 317, 318, 12, 5, 2, 2, 318, 319, 7, 12, 2, 2, 319, 324, 5, 28, 15, 5, 320, 321, 12, 4, 2, 2, 321, 322, 7, 67, 2, 2, 322, 324, 5, 28, 15, 4, 323, 317, 3, 2, 2, 2, 323, 320, 3, 2, 2, 2, 324, 327, 3, 2, 2, 2, 325, 323, 3, 2, 2, 2, 325, 326, 3, 2, 2, 2, 326, 29, 3, 2, 2, 2, 327, 325, 3, 2, 2, 2, 35, 33, 42, 52, 57, 63, 70, 82, 84, 91, 105, 111, 129, 142, 146, 150, 156, 158, 164, 170, 186, 190, 197, 253, 257, 262, 264, 272, 282, 292, 298, 315, 323, 325] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 76, 342, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 3, 2, 7, 2, 32, 10, 2, 12, 2, 14, 2, 35, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 43, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 53, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 58, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 64, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 69, 10, 4, 12, 4, 14, 4, 72, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 83, 10, 4, 5, 4, 85, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 90, 10, 5, 12, 5, 14, 5, 93, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 104, 10, 6, 12, 6, 14, 6, 107, 11, 6, 3, 6, 3, 6, 3, 6, 5, 6, 112, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 130, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 141, 10, 6, 12, 6, 14, 6, 144, 11, 6, 3, 6, 5, 6, 147, 10, 6, 3, 6, 3, 6, 5, 6, 151, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 157, 10, 6, 5, 6, 159, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 165, 10, 7, 3, 8, 3, 8, 6, 8, 169, 10, 8, 13, 8, 14, 8, 170, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 185, 10, 9, 12, 9, 14, 9, 188, 11, 9, 3, 9, 5, 9, 191, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 201, 10, 9, 12, 9, 14, 9, 204, 11, 9, 3, 9, 5, 9, 207, 10, 9, 3, 9, 3, 9, 5, 9, 211, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 265, 10, 9, 12, 9, 14, 9, 268, 11, 9, 3, 9, 5, 9, 271, 10, 9, 3, 9, 3, 9, 3, 9, 7, 9, 276, 10, 9, 12, 9, 14, 9, 279, 11, 9, 3, 10, 3, 10, 3, 10, 7, 10, 284, 10, 10, 12, 10, 14, 10, 287, 11, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 5, 12, 296, 10, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 306, 10, 13, 3, 14, 3, 14, 7, 14, 310, 10, 14, 12, 14, 14, 14, 313, 11, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 329, 10, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 7, 15, 337, 10, 15, 12, 15, 14, 15, 340, 11, 15, 3, 15, 2, 4, 16, 28, 16, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 2, 12, 3, 2, 11, 21, 3, 2, 22, 23, 4, 2, 15, 16, 46, 46, 3, 2, 12, 14, 3, 2, 15, 16, 3, 2, 17, 18, 3, 2, 47, 48, 3, 2, 49, 54, 3, 2, 61, 62, 3, 2, 63, 68, 2, 397, 2, 33, 3, 2, 2, 2, 4, 42, 3, 2, 2, 2, 6, 84, 3, 2, 2, 2, 8, 86, 3, 2, 2, 2, 10, 158, 3, 2, 2, 2, 12, 160, 3, 2, 2, 2, 14, 166, 3, 2, 2, 2, 16, 210, 3, 2, 2, 2, 18, 285, 3, 2, 2, 2, 20, 290, 3, 2, 2, 2, 22, 295, 3, 2, 2, 2, 24, 305, 3, 2, 2, 2, 26, 311, 3, 2, 2, 2, 28, 328, 3, 2, 2, 2, 30, 32, 5, 4, 3, 2, 31, 30, 3, 2, 2, 2, 32, 35, 3, 2, 2, 2, 33, 31, 3, 2, 2, 2, 33, 34, 3, 2, 2, 2, 34, 36, 3, 2, 2, 2, 35, 33, 3, 2, 2, 2, 36, 37, 7, 2, 2, 3, 37, 3, 3, 2, 2, 2, 38, 39, 5, 6, 4, 2, 39, 40, 7, 3, 2, 2, 40, 43, 3, 2, 2, 2, 41, 43, 5, 10, 6, 2, 42, 38, 3, 2, 2, 2, 42, 41, 3, 2, 2, 2, 43, 5, 3, 2, 2, 2, 44, 45, 7, 4, 2, 2, 45, 52, 7, 73, 2, 2, 46, 47, 7, 5, 2, 2, 47, 53, 5, 26, 14, 2, 48, 49, 7, 6, 2, 2, 49, 53, 5, 26, 14, 2, 50, 51, 7, 7, 2, 2, 51, 53, 7, 73, 2, 2, 52, 46, 3, 2, 2, 2, 52, 48, 3, 2, 2, 2, 52, 50, 3, 2, 2, 2, 52, 53, 3, 2, 2, 2, 53, 85, 3, 2, 2, 2, 54, 85, 7, 8, 2, 2, 55, 57, 7, 9, 2, 2, 56, 58, 5, 18, 10, 2, 57, 56, 3, 2, 2, 2, 57, 58, 3, 2, 2, 2, 58, 85, 3, 2, 2, 2, 59, 60, 5, 28, 15, 2, 60, 63, 7, 73, 2, 2, 61, 62, 7, 10, 2, 2, 62, 64, 5, 18, 10, 2, 63, 61, 3, 2, 2, 2, 63, 64, 3, 2, 2, 2, 64, 85, 3, 2, 2, 2, 65, 66, 5, 8, 5, 2, 66, 67, 7, 10, 2, 2, 67, 69, 3, 2, 2, 2, 68, 65, 3, 2, 2, 2, 69, 72, 3, 2, 2, 2, 70, 68, 3, 2, 2, 2, 70, 71, 3, 2, 2, 2, 71, 73, 3, 2, 2, 2, 72, 70, 3, 2, 2, 2, 73, 85, 5, 18, 10, 2, 74, 75, 5, 16, 9, 2, 75, 76, 9, 2, 2, 2, 76, 77, 7, 10, 2, 2, 77, 78, 5, 16, 9, 2, 78, 85, 3, 2, 2, 2, 79, 85, 9, 3, 2, 2, 80, 82, 7, 24, 2, 2, 81, 83, 5, 18, 10, 2, 82, 81, 3, 2, 2, 2, 82, 83, 3, 2, 2, 2, 83, 85, 3, 2, 2, 2, 84, 44, 3, 2, 2, 2, 84, 54, 3, 2, 2, 2, 84, 55, 3, 2, 2, 2, 84, 59, 3, 2, 2, 2, 84, 70, 3, 2, 2, 2, 84, 74, 3, 2, 2, 2, 84, 79, 3, 2, 2, 2, 84, 80, 3, 2, 2, 2, 85, 7, 3, 2, 2, 2, 86, 91, 5, 16, 9, 2, 87, 88, 7, 25, 2, 2, 88, 90, 5, 16, 9, 2, 89, 87, 3, 2, 2, 2, 90, 93, 3, 2, 2, 2, 91, 89, 3, 2, 2, 2, 91, 92, 3, 2, 2, 2, 92, 9, 3, 2, 2, 2, 93, 91, 3, 2, 2, 2, 94, 95, 7, 26, 2, 2, 95, 96, 5, 16, 9, 2, 96, 97, 7, 27, 2, 2, 97, 105, 5, 14, 8, 2, 98, 99, 7, 28, 2, 2, 99, 100, 5, 16, 9, 2, 100, 101, 7, 27, 2, 2, 101, 102, 5, 14, 8, 2, 102, 104, 3, 2, 2, 2, 103, 98, 3, 2, 2, 2, 104, 107, 3, 2, 2, 2, 105, 103, 3, 2, 2, 2, 105, 106, 3, 2, 2, 2, 106, 111, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 108, 109, 7, 29, 2, 2, 109, 110, 7, 27, 2, 2, 110, 112, 5, 14, 8, 2, 111, 108, 3, 2, 2, 2, 111, 112, 3, 2, 2, 2, 112, 159, 3, 2, 2, 2, 113, 114, 7, 30, 2, 2, 114, 115, 5, 16, 9, 2, 115, 116, 7, 27, 2, 2, 116, 117, 5, 14, 8, 2, 117, 159, 3, 2, 2, 2, 118, 119, 7, 31, 2, 2, 119, 120, 5, 16, 9, 2, 120, 121, 7, 27, 2, 2, 121, 122, 5, 14, 8, 2, 122, 159, 3, 2, 2, 2, 123, 124, 7, 32, 2, 2, 124, 125, 5, 18, 10, 2, 125, 126, 7, 33, 2, 2, 126, 129, 5, 18, 10, 2, 127, 128, 7, 34, 2, 2, 128, 130, 5, 18, 10, 2, 129, 127, 3, 2, 2, 2, 129, 130, 3, 2, 2, 2, 130, 131, 3, 2, 2, 2, 131, 132, 7, 27, 2, 2, 132, 133, 5, 14, 8, 2, 133, 159, 3, 2, 2, 2, 134, 135, 7, 35, 2, 2, 135, 136, 7, 73, 2, 2, 136, 142, 7, 36, 2, 2, 137, 138, 5, 12, 7, 2, 138, 139, 7, 25, 2, 2, 139, 141, 3, 2, 2, 2, 140, 137, 3, 2, 2, 2, 141, 144, 3, 2, 2, 2, 142, 140, 3, 2, 2, 2, 142, 143, 3, 2, 2, 2, 143, 146, 3, 2, 2, 2, 144, 142, 3, 2, 2, 2, 145, 147, 5, 12, 7, 2, 146, 145, 3, 2, 2, 2, 146, 147, 3, 2, 2, 2, 147, 148, 3, 2, 2, 2, 148, 150, 7, 37, 2, 2, 149, 151, 5, 28, 15, 2, 150, 149, 3, 2, 2, 2, 150, 151, 3, 2, 2, 2, 151, 156, 3, 2, 2, 2, 152, 153, 7, 38, 2, 2, 153, 157, 5, 14, 8, 2, 154, 155, 7, 39, 2, 2, 155, 157, 7, 3, 2, 2, 156, 152, 3, 2, 2, 2, 156, 154, 3, 2, 2, 2, 157, 159, 3, 2, 2, 2, 158, 94, 3, 2, 2, 2, 158, 113, 3, 2, 2, 2, 158, 118, 3, 2, 2, 2, 158, 123, 3, 2, 2, 2, 158, 134, 3, 2, 2, 2, 159, 11, 3, 2, 2, 2, 160, 161, 5, 28, 15, 2, 161, 164, 7, 73, 2, 2, 162, 163, 7, 40, 2, 2, 163, 165, 5, 16, 9, 2, 164, 162, 3, 2, 2, 2, 164, 165, 3, 2, 2, 2, 165, 13, 3, 2, 2, 2, 166, 168, 7, 41, 2, 2, 167, 169, 5, 4, 3, 2, 168, 167, 3, 2, 2, 2, 169, 170, 3, 2, 2, 2, 170, 168, 3, 2, 2, 2, 170, 171, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 173, 7, 42, 2, 2, 173, 15, 3, 2, 2, 2, 174, 175, 8, 9, 1, 2, 175, 211, 5, 24, 13, 2, 176, 177, 7, 36, 2, 2, 177, 178, 5, 18, 10, 2, 178, 179, 7, 37, 2, 2, 179, 211, 3, 2, 2, 2, 180, 186, 7, 43, 2, 2, 181, 182, 5, 16, 9, 2, 182, 183, 7, 25, 2, 2, 183, 185, 3, 2, 2, 2, 184, 181, 3, 2, 2, 2, 185, 188, 3, 2, 2, 2, 186, 184, 3, 2, 2, 2, 186, 187, 3, 2, 2, 2, 187, 190, 3, 2, 2, 2, 188, 186, 3, 2, 2, 2, 189, 191, 5, 16, 9, 2, 190, 189, 3, 2, 2, 2, 190, 191, 3, 2, 2, 2, 191, 192, 3, 2, 2, 2, 192, 211, 7, 44, 2, 2, 193, 194, 9, 4, 2, 2, 194, 211, 5, 16, 9, 17, 195, 196, 7, 55, 2, 2, 196, 211, 5, 16, 9, 7, 197, 202, 7, 59, 2, 2, 198, 199, 7, 73, 2, 2, 199, 201, 7, 25, 2, 2, 200, 198, 3, 2, 2, 2, 201, 204, 3, 2, 2, 2, 202, 200, 3, 2, 2, 2, 202, 203, 3, 2, 2, 2, 203, 206, 3, 2, 2, 2, 204, 202, 3, 2, 2, 2, 205, 207, 7, 73, 2, 2, 206, 205, 3, 2, 2, 2, 206, 207, 3, 2, 2, 2, 207, 208, 3, 2, 2, 2, 208, 209, 7, 60, 2, 2, 209, 211, 5, 16, 9, 3, 210, 174, 3, 2, 2, 2, 210, 176, 3, 2, 2, 2, 210, 180, 3, 2, 2, 2, 210, 193, 3, 2, 2, 2, 210, 195, 3, 2, 2, 2, 210, 197, 3, 2, 2, 2, 211, 277, 3, 2, 2, 2, 212, 213, 12, 18, 2, 2, 213, 214, 7, 11, 2, 2, 214, 276, 5, 16, 9, 18, 215, 216, 12, 16, 2, 2, 216, 217, 9, 5, 2, 2, 217, 276, 5, 16, 9, 17, 218, 219, 12, 15, 2, 2, 219, 220, 9, 6, 2, 2, 220, 276, 5, 16, 9, 16, 221, 222, 12, 14, 2, 2, 222, 223, 9, 7, 2, 2, 223, 276, 5, 16, 9, 15, 224, 225, 12, 13, 2, 2, 225, 226, 7, 19, 2, 2, 226, 276, 5, 16, 9, 14, 227, 228, 12, 12, 2, 2, 228, 229, 7, 20, 2, 2, 229, 276, 5, 16, 9, 13, 230, 231, 12, 11, 2, 2, 231, 232, 7, 21, 2, 2, 232, 276, 5, 16, 9, 12, 233, 234, 12, 10, 2, 2, 234, 235, 9, 8, 2, 2, 235, 276, 5, 16, 9, 11, 236, 237, 12, 8, 2, 2, 237, 238, 9, 9, 2, 2, 238, 276, 5, 16, 9, 8, 239, 240, 12, 6, 2, 2, 240, 241, 7, 56, 2, 2, 241, 276, 5, 16, 9, 6, 242, 243, 12, 5, 2, 2, 243, 244, 7, 57, 2, 2, 244, 276, 5, 16, 9, 5, 245, 246, 12, 4, 2, 2, 246, 247, 7, 58, 2, 2, 247, 248, 5, 16, 9, 2, 248, 249, 7, 40, 2, 2, 249, 250, 5, 16, 9, 4, 250, 276, 3, 2, 2, 2, 251, 252, 12, 21, 2, 2, 252, 253, 7, 43, 2, 2, 253, 254, 5, 18, 10, 2, 254, 255, 7, 44, 2, 2, 255, 276, 3, 2, 2, 2, 256, 257, 12, 20, 2, 2, 257, 258, 7, 45, 2, 2, 258, 276, 7, 73, 2, 2, 259, 260, 12, 19, 2, 2, 260, 266, 7, 36, 2, 2, 261, 262, 5, 22, 12, 2, 262, 263, 7, 25, 2, 2, 263, 265, 3, 2, 2, 2, 264, 261, 3, 2, 2, 2, 265, 268, 3, 2, 2, 2, 266, 264, 3, 2, 2, 2, 266, 267, 3, 2, 2, 2, 267, 270, 3, 2, 2, 2, 268, 266, 3, 2, 2, 2, 269, 271, 5, 22, 12, 2, 270, 269, 3, 2, 2, 2, 270, 271, 3, 2, 2, 2, 271, 272, 3, 2, 2, 2, 272, 276, 7, 37, 2, 2, 273, 274, 12, 9, 2, 2, 274, 276, 7, 48, 2, 2, 275, 212, 3, 2, 2, 2, 275, 215, 3, 2, 2, 2, 275, 218, 3, 2, 2, 2, 275, 221, 3, 2, 2, 2, 275, 224, 3, 2, 2, 2, 275, 227, 3, 2, 2, 2, 275, 230, 3, 2, 2, 2, 275, 233, 3, 2, 2, 2, 275, 236, 3, 2, 2, 2, 275, 239, 3, 2, 2, 2, 275, 242, 3, 2, 2, 2, 275, 245, 3, 2, 2, 2, 275, 251, 3, 2, 2, 2, 275, 256, 3, 2, 2, 2, 275, 259, 3, 2, 2, 2, 275, 273, 3, 2, 2, 2, 276, 279, 3, 2, 2, 2, 277, 275, 3, 2, 2, 2, 277, 278, 3, 2, 2, 2, 278, 17, 3, 2, 2, 2, 279, 277, 3, 2, 2, 2, 280, 281, 5, 16, 9, 2, 281, 282, 7, 25, 2, 2, 282, 284, 3, 2, 2, 2, 283, 280, 3, 2, 2, 2, 284, 287, 3, 2, 2, 2, 285, 283, 3, 2, 2, 2, 285, 286, 3, 2, 2, 2, 286, 288, 3, 2, 2, 2, 287, 285, 3, 2, 2, 2, 288, 289, 5, 16, 9, 2, 289, 19, 3, 2, 2, 2, 290, 291, 5, 18, 10, 2, 291, 292, 7, 2, 2, 3, 292, 21, 3, 2, 2, 2, 293, 294, 7, 73, 2, 2, 294, 296, 7, 10, 2, 2, 295, 293, 3, 2, 2, 2, 295, 296, 3, 2, 2, 2, 296, 297, 3, 2, 2, 2, 297, 298, 5, 16, 9, 2, 298, 23, 3, 2, 2, 2, 299, 306, 7, 69, 2, 2, 300, 306, 7, 70, 2, 2, 301, 306, 9, 10, 2, 2, 302, 306, 7, 71, 2, 2, 303, 306, 7, 72, 2, 2, 304, 306, 7, 73, 2, 2, 305, 299, 3, 2, 2, 2, 305, 300, 3, 2, 2, 2, 305, 301, 3, 2, 2, 2, 305, 302, 3, 2, 2, 2, 305, 303, 3, 2, 2, 2, 305, 304, 3, 2, 2, 2, 306, 25, 3, 2, 2, 2, 307, 308, 7, 73, 2, 2, 308, 310, 7, 25, 2, 2, 309, 307, 3, 2, 2, 2, 310, 313, 3, 2, 2, 2, 311, 309, 3, 2, 2, 2, 311, 312, 3, 2, 2, 2, 312, 314, 3, 2, 2, 2, 313, 311, 3, 2, 2, 2, 314, 315, 7, 73, 2, 2, 315, 27, 3, 2, 2, 2, 316, 317, 8, 15, 1, 2, 317, 329, 9, 11, 2, 2, 318, 319, 7, 36, 2, 2, 319, 320, 5, 28, 15, 2, 320, 321, 7, 37, 2, 2, 321, 329, 3, 2, 2, 2, 322, 323, 7, 43, 2, 2, 323, 324, 5, 28, 15, 2, 324, 325, 7, 44, 2, 2, 325, 329, 3, 2, 2, 2, 326, 327, 7, 60, 2, 2, 327, 329, 5, 28, 15, 3, 328, 316, 3, 2, 2, 2, 328, 318, 3, 2, 2, 2, 328, 322, 3, 2, 2, 2, 328, 326, 3, 2, 2, 2, 329, 338, 3, 2, 2, 2, 330, 331, 12, 5, 2, 2, 331, 332, 7, 12, 2, 2, 332, 337, 5, 28, 15, 5, 333, 334, 12, 4, 2, 2, 334, 335, 7, 60, 2, 2, 335, 337, 5, 28, 15, 4, 336, 330, 3, 2, 2, 2, 336, 333, 3, 2, 2, 2, 337, 340, 3, 2, 2, 2, 338, 336, 3, 2, 2, 2, 338, 339, 3, 2, 2, 2, 339, 29, 3, 2, 2, 2, 340, 338, 3, 2, 2, 2, 37, 33, 42, 52, 57, 63, 70, 82, 84, 91, 105, 111, 129, 142, 146, 150, 156, 158, 164, 170, 186, 190, 202, 206, 210, 266, 270, 275, 277, 285, 295, 305, 311, 328, 336, 338] \ No newline at end of file diff --git a/src/antlr/Pyxell.tokens b/src/antlr/Pyxell.tokens index 4c4934c0..f94f0b97 100644 --- a/src/antlr/Pyxell.tokens +++ b/src/antlr/Pyxell.tokens @@ -63,14 +63,15 @@ T__61=62 T__62=63 T__63=64 T__64=65 -INT=66 -FLOAT=67 -CHAR=68 -STRING=69 -ID=70 -COMMENT=71 -WS=72 -ERR=73 +T__65=66 +INT=67 +FLOAT=68 +CHAR=69 +STRING=70 +ID=71 +COMMENT=72 +WS=73 +ERR=74 ';'=1 'use'=2 'only'=3 @@ -127,12 +128,13 @@ ERR=73 'and'=54 'or'=55 '?'=56 -'true'=57 -'false'=58 -'Void'=59 -'Int'=60 -'Float'=61 -'Bool'=62 -'Char'=63 -'String'=64 -'->'=65 +'lambda'=57 +'->'=58 +'true'=59 +'false'=60 +'Void'=61 +'Int'=62 +'Float'=63 +'Bool'=64 +'Char'=65 +'String'=66 diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp index 118d031f..c4873a51 100644 --- a/src/antlr/PyxellLexer.interp +++ b/src/antlr/PyxellLexer.interp @@ -56,6 +56,8 @@ null 'and' 'or' '?' +'lambda' +'->' 'true' 'false' 'Void' @@ -64,7 +66,6 @@ null 'Bool' 'Char' 'String' -'->' null null null @@ -141,6 +142,7 @@ null null null null +null INT FLOAT CHAR @@ -216,6 +218,7 @@ T__61 T__62 T__63 T__64 +T__65 INT FLOAT CHAR @@ -236,4 +239,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 75, 478, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 67, 6, 67, 395, 10, 67, 13, 67, 14, 67, 396, 3, 68, 6, 68, 400, 10, 68, 13, 68, 14, 68, 401, 3, 68, 3, 68, 6, 68, 406, 10, 68, 13, 68, 14, 68, 407, 3, 68, 3, 68, 5, 68, 412, 10, 68, 3, 68, 6, 68, 415, 10, 68, 13, 68, 14, 68, 416, 5, 68, 419, 10, 68, 3, 69, 3, 69, 3, 69, 3, 69, 7, 69, 425, 10, 69, 12, 69, 14, 69, 428, 11, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, 7, 70, 436, 10, 70, 12, 70, 14, 70, 439, 11, 70, 3, 70, 3, 70, 3, 71, 3, 71, 7, 71, 445, 10, 71, 12, 71, 14, 71, 448, 11, 71, 3, 72, 3, 72, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 5, 74, 457, 10, 74, 3, 75, 3, 75, 3, 75, 3, 75, 7, 75, 463, 10, 75, 12, 75, 14, 75, 466, 11, 75, 3, 75, 3, 75, 3, 76, 6, 76, 471, 10, 76, 13, 76, 14, 76, 472, 3, 76, 3, 76, 3, 77, 3, 77, 2, 2, 78, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 2, 145, 2, 147, 2, 149, 73, 151, 74, 153, 75, 3, 2, 11, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 4, 2, 12, 12, 14, 15, 5, 2, 11, 12, 15, 15, 34, 34, 2, 489, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 3, 155, 3, 2, 2, 2, 5, 157, 3, 2, 2, 2, 7, 161, 3, 2, 2, 2, 9, 166, 3, 2, 2, 2, 11, 173, 3, 2, 2, 2, 13, 176, 3, 2, 2, 2, 15, 181, 3, 2, 2, 2, 17, 187, 3, 2, 2, 2, 19, 189, 3, 2, 2, 2, 21, 191, 3, 2, 2, 2, 23, 193, 3, 2, 2, 2, 25, 195, 3, 2, 2, 2, 27, 197, 3, 2, 2, 2, 29, 199, 3, 2, 2, 2, 31, 201, 3, 2, 2, 2, 33, 204, 3, 2, 2, 2, 35, 207, 3, 2, 2, 2, 37, 209, 3, 2, 2, 2, 39, 211, 3, 2, 2, 2, 41, 213, 3, 2, 2, 2, 43, 219, 3, 2, 2, 2, 45, 228, 3, 2, 2, 2, 47, 235, 3, 2, 2, 2, 49, 237, 3, 2, 2, 2, 51, 240, 3, 2, 2, 2, 53, 243, 3, 2, 2, 2, 55, 248, 3, 2, 2, 2, 57, 253, 3, 2, 2, 2, 59, 259, 3, 2, 2, 2, 61, 265, 3, 2, 2, 2, 63, 269, 3, 2, 2, 2, 65, 272, 3, 2, 2, 2, 67, 277, 3, 2, 2, 2, 69, 282, 3, 2, 2, 2, 71, 284, 3, 2, 2, 2, 73, 286, 3, 2, 2, 2, 75, 290, 3, 2, 2, 2, 77, 297, 3, 2, 2, 2, 79, 299, 3, 2, 2, 2, 81, 301, 3, 2, 2, 2, 83, 303, 3, 2, 2, 2, 85, 305, 3, 2, 2, 2, 87, 307, 3, 2, 2, 2, 89, 309, 3, 2, 2, 2, 91, 311, 3, 2, 2, 2, 93, 314, 3, 2, 2, 2, 95, 318, 3, 2, 2, 2, 97, 321, 3, 2, 2, 2, 99, 324, 3, 2, 2, 2, 101, 326, 3, 2, 2, 2, 103, 329, 3, 2, 2, 2, 105, 331, 3, 2, 2, 2, 107, 334, 3, 2, 2, 2, 109, 338, 3, 2, 2, 2, 111, 342, 3, 2, 2, 2, 113, 345, 3, 2, 2, 2, 115, 347, 3, 2, 2, 2, 117, 352, 3, 2, 2, 2, 119, 358, 3, 2, 2, 2, 121, 363, 3, 2, 2, 2, 123, 367, 3, 2, 2, 2, 125, 373, 3, 2, 2, 2, 127, 378, 3, 2, 2, 2, 129, 383, 3, 2, 2, 2, 131, 390, 3, 2, 2, 2, 133, 394, 3, 2, 2, 2, 135, 399, 3, 2, 2, 2, 137, 420, 3, 2, 2, 2, 139, 431, 3, 2, 2, 2, 141, 442, 3, 2, 2, 2, 143, 449, 3, 2, 2, 2, 145, 451, 3, 2, 2, 2, 147, 456, 3, 2, 2, 2, 149, 458, 3, 2, 2, 2, 151, 470, 3, 2, 2, 2, 153, 476, 3, 2, 2, 2, 155, 156, 7, 61, 2, 2, 156, 4, 3, 2, 2, 2, 157, 158, 7, 119, 2, 2, 158, 159, 7, 117, 2, 2, 159, 160, 7, 103, 2, 2, 160, 6, 3, 2, 2, 2, 161, 162, 7, 113, 2, 2, 162, 163, 7, 112, 2, 2, 163, 164, 7, 110, 2, 2, 164, 165, 7, 123, 2, 2, 165, 8, 3, 2, 2, 2, 166, 167, 7, 106, 2, 2, 167, 168, 7, 107, 2, 2, 168, 169, 7, 102, 2, 2, 169, 170, 7, 107, 2, 2, 170, 171, 7, 112, 2, 2, 171, 172, 7, 105, 2, 2, 172, 10, 3, 2, 2, 2, 173, 174, 7, 99, 2, 2, 174, 175, 7, 117, 2, 2, 175, 12, 3, 2, 2, 2, 176, 177, 7, 117, 2, 2, 177, 178, 7, 109, 2, 2, 178, 179, 7, 107, 2, 2, 179, 180, 7, 114, 2, 2, 180, 14, 3, 2, 2, 2, 181, 182, 7, 114, 2, 2, 182, 183, 7, 116, 2, 2, 183, 184, 7, 107, 2, 2, 184, 185, 7, 112, 2, 2, 185, 186, 7, 118, 2, 2, 186, 16, 3, 2, 2, 2, 187, 188, 7, 63, 2, 2, 188, 18, 3, 2, 2, 2, 189, 190, 7, 96, 2, 2, 190, 20, 3, 2, 2, 2, 191, 192, 7, 44, 2, 2, 192, 22, 3, 2, 2, 2, 193, 194, 7, 49, 2, 2, 194, 24, 3, 2, 2, 2, 195, 196, 7, 39, 2, 2, 196, 26, 3, 2, 2, 2, 197, 198, 7, 45, 2, 2, 198, 28, 3, 2, 2, 2, 199, 200, 7, 47, 2, 2, 200, 30, 3, 2, 2, 2, 201, 202, 7, 62, 2, 2, 202, 203, 7, 62, 2, 2, 203, 32, 3, 2, 2, 2, 204, 205, 7, 64, 2, 2, 205, 206, 7, 64, 2, 2, 206, 34, 3, 2, 2, 2, 207, 208, 7, 40, 2, 2, 208, 36, 3, 2, 2, 2, 209, 210, 7, 38, 2, 2, 210, 38, 3, 2, 2, 2, 211, 212, 7, 126, 2, 2, 212, 40, 3, 2, 2, 2, 213, 214, 7, 100, 2, 2, 214, 215, 7, 116, 2, 2, 215, 216, 7, 103, 2, 2, 216, 217, 7, 99, 2, 2, 217, 218, 7, 109, 2, 2, 218, 42, 3, 2, 2, 2, 219, 220, 7, 101, 2, 2, 220, 221, 7, 113, 2, 2, 221, 222, 7, 112, 2, 2, 222, 223, 7, 118, 2, 2, 223, 224, 7, 107, 2, 2, 224, 225, 7, 112, 2, 2, 225, 226, 7, 119, 2, 2, 226, 227, 7, 103, 2, 2, 227, 44, 3, 2, 2, 2, 228, 229, 7, 116, 2, 2, 229, 230, 7, 103, 2, 2, 230, 231, 7, 118, 2, 2, 231, 232, 7, 119, 2, 2, 232, 233, 7, 116, 2, 2, 233, 234, 7, 112, 2, 2, 234, 46, 3, 2, 2, 2, 235, 236, 7, 46, 2, 2, 236, 48, 3, 2, 2, 2, 237, 238, 7, 107, 2, 2, 238, 239, 7, 104, 2, 2, 239, 50, 3, 2, 2, 2, 240, 241, 7, 102, 2, 2, 241, 242, 7, 113, 2, 2, 242, 52, 3, 2, 2, 2, 243, 244, 7, 103, 2, 2, 244, 245, 7, 110, 2, 2, 245, 246, 7, 107, 2, 2, 246, 247, 7, 104, 2, 2, 247, 54, 3, 2, 2, 2, 248, 249, 7, 103, 2, 2, 249, 250, 7, 110, 2, 2, 250, 251, 7, 117, 2, 2, 251, 252, 7, 103, 2, 2, 252, 56, 3, 2, 2, 2, 253, 254, 7, 121, 2, 2, 254, 255, 7, 106, 2, 2, 255, 256, 7, 107, 2, 2, 256, 257, 7, 110, 2, 2, 257, 258, 7, 103, 2, 2, 258, 58, 3, 2, 2, 2, 259, 260, 7, 119, 2, 2, 260, 261, 7, 112, 2, 2, 261, 262, 7, 118, 2, 2, 262, 263, 7, 107, 2, 2, 263, 264, 7, 110, 2, 2, 264, 60, 3, 2, 2, 2, 265, 266, 7, 104, 2, 2, 266, 267, 7, 113, 2, 2, 267, 268, 7, 116, 2, 2, 268, 62, 3, 2, 2, 2, 269, 270, 7, 107, 2, 2, 270, 271, 7, 112, 2, 2, 271, 64, 3, 2, 2, 2, 272, 273, 7, 117, 2, 2, 273, 274, 7, 118, 2, 2, 274, 275, 7, 103, 2, 2, 275, 276, 7, 114, 2, 2, 276, 66, 3, 2, 2, 2, 277, 278, 7, 104, 2, 2, 278, 279, 7, 119, 2, 2, 279, 280, 7, 112, 2, 2, 280, 281, 7, 101, 2, 2, 281, 68, 3, 2, 2, 2, 282, 283, 7, 42, 2, 2, 283, 70, 3, 2, 2, 2, 284, 285, 7, 43, 2, 2, 285, 72, 3, 2, 2, 2, 286, 287, 7, 102, 2, 2, 287, 288, 7, 103, 2, 2, 288, 289, 7, 104, 2, 2, 289, 74, 3, 2, 2, 2, 290, 291, 7, 103, 2, 2, 291, 292, 7, 122, 2, 2, 292, 293, 7, 118, 2, 2, 293, 294, 7, 103, 2, 2, 294, 295, 7, 116, 2, 2, 295, 296, 7, 112, 2, 2, 296, 76, 3, 2, 2, 2, 297, 298, 7, 60, 2, 2, 298, 78, 3, 2, 2, 2, 299, 300, 7, 125, 2, 2, 300, 80, 3, 2, 2, 2, 301, 302, 7, 127, 2, 2, 302, 82, 3, 2, 2, 2, 303, 304, 7, 93, 2, 2, 304, 84, 3, 2, 2, 2, 305, 306, 7, 95, 2, 2, 306, 86, 3, 2, 2, 2, 307, 308, 7, 48, 2, 2, 308, 88, 3, 2, 2, 2, 309, 310, 7, 128, 2, 2, 310, 90, 3, 2, 2, 2, 311, 312, 7, 48, 2, 2, 312, 313, 7, 48, 2, 2, 313, 92, 3, 2, 2, 2, 314, 315, 7, 48, 2, 2, 315, 316, 7, 48, 2, 2, 316, 317, 7, 48, 2, 2, 317, 94, 3, 2, 2, 2, 318, 319, 7, 63, 2, 2, 319, 320, 7, 63, 2, 2, 320, 96, 3, 2, 2, 2, 321, 322, 7, 35, 2, 2, 322, 323, 7, 63, 2, 2, 323, 98, 3, 2, 2, 2, 324, 325, 7, 62, 2, 2, 325, 100, 3, 2, 2, 2, 326, 327, 7, 62, 2, 2, 327, 328, 7, 63, 2, 2, 328, 102, 3, 2, 2, 2, 329, 330, 7, 64, 2, 2, 330, 104, 3, 2, 2, 2, 331, 332, 7, 64, 2, 2, 332, 333, 7, 63, 2, 2, 333, 106, 3, 2, 2, 2, 334, 335, 7, 112, 2, 2, 335, 336, 7, 113, 2, 2, 336, 337, 7, 118, 2, 2, 337, 108, 3, 2, 2, 2, 338, 339, 7, 99, 2, 2, 339, 340, 7, 112, 2, 2, 340, 341, 7, 102, 2, 2, 341, 110, 3, 2, 2, 2, 342, 343, 7, 113, 2, 2, 343, 344, 7, 116, 2, 2, 344, 112, 3, 2, 2, 2, 345, 346, 7, 65, 2, 2, 346, 114, 3, 2, 2, 2, 347, 348, 7, 118, 2, 2, 348, 349, 7, 116, 2, 2, 349, 350, 7, 119, 2, 2, 350, 351, 7, 103, 2, 2, 351, 116, 3, 2, 2, 2, 352, 353, 7, 104, 2, 2, 353, 354, 7, 99, 2, 2, 354, 355, 7, 110, 2, 2, 355, 356, 7, 117, 2, 2, 356, 357, 7, 103, 2, 2, 357, 118, 3, 2, 2, 2, 358, 359, 7, 88, 2, 2, 359, 360, 7, 113, 2, 2, 360, 361, 7, 107, 2, 2, 361, 362, 7, 102, 2, 2, 362, 120, 3, 2, 2, 2, 363, 364, 7, 75, 2, 2, 364, 365, 7, 112, 2, 2, 365, 366, 7, 118, 2, 2, 366, 122, 3, 2, 2, 2, 367, 368, 7, 72, 2, 2, 368, 369, 7, 110, 2, 2, 369, 370, 7, 113, 2, 2, 370, 371, 7, 99, 2, 2, 371, 372, 7, 118, 2, 2, 372, 124, 3, 2, 2, 2, 373, 374, 7, 68, 2, 2, 374, 375, 7, 113, 2, 2, 375, 376, 7, 113, 2, 2, 376, 377, 7, 110, 2, 2, 377, 126, 3, 2, 2, 2, 378, 379, 7, 69, 2, 2, 379, 380, 7, 106, 2, 2, 380, 381, 7, 99, 2, 2, 381, 382, 7, 116, 2, 2, 382, 128, 3, 2, 2, 2, 383, 384, 7, 85, 2, 2, 384, 385, 7, 118, 2, 2, 385, 386, 7, 116, 2, 2, 386, 387, 7, 107, 2, 2, 387, 388, 7, 112, 2, 2, 388, 389, 7, 105, 2, 2, 389, 130, 3, 2, 2, 2, 390, 391, 7, 47, 2, 2, 391, 392, 7, 64, 2, 2, 392, 132, 3, 2, 2, 2, 393, 395, 5, 143, 72, 2, 394, 393, 3, 2, 2, 2, 395, 396, 3, 2, 2, 2, 396, 394, 3, 2, 2, 2, 396, 397, 3, 2, 2, 2, 397, 134, 3, 2, 2, 2, 398, 400, 5, 143, 72, 2, 399, 398, 3, 2, 2, 2, 400, 401, 3, 2, 2, 2, 401, 399, 3, 2, 2, 2, 401, 402, 3, 2, 2, 2, 402, 403, 3, 2, 2, 2, 403, 405, 7, 48, 2, 2, 404, 406, 5, 143, 72, 2, 405, 404, 3, 2, 2, 2, 406, 407, 3, 2, 2, 2, 407, 405, 3, 2, 2, 2, 407, 408, 3, 2, 2, 2, 408, 418, 3, 2, 2, 2, 409, 411, 7, 103, 2, 2, 410, 412, 7, 47, 2, 2, 411, 410, 3, 2, 2, 2, 411, 412, 3, 2, 2, 2, 412, 414, 3, 2, 2, 2, 413, 415, 5, 143, 72, 2, 414, 413, 3, 2, 2, 2, 415, 416, 3, 2, 2, 2, 416, 414, 3, 2, 2, 2, 416, 417, 3, 2, 2, 2, 417, 419, 3, 2, 2, 2, 418, 409, 3, 2, 2, 2, 418, 419, 3, 2, 2, 2, 419, 136, 3, 2, 2, 2, 420, 426, 7, 41, 2, 2, 421, 425, 10, 2, 2, 2, 422, 423, 7, 94, 2, 2, 423, 425, 9, 3, 2, 2, 424, 421, 3, 2, 2, 2, 424, 422, 3, 2, 2, 2, 425, 428, 3, 2, 2, 2, 426, 424, 3, 2, 2, 2, 426, 427, 3, 2, 2, 2, 427, 429, 3, 2, 2, 2, 428, 426, 3, 2, 2, 2, 429, 430, 7, 41, 2, 2, 430, 138, 3, 2, 2, 2, 431, 437, 7, 36, 2, 2, 432, 436, 10, 4, 2, 2, 433, 434, 7, 94, 2, 2, 434, 436, 9, 5, 2, 2, 435, 432, 3, 2, 2, 2, 435, 433, 3, 2, 2, 2, 436, 439, 3, 2, 2, 2, 437, 435, 3, 2, 2, 2, 437, 438, 3, 2, 2, 2, 438, 440, 3, 2, 2, 2, 439, 437, 3, 2, 2, 2, 440, 441, 7, 36, 2, 2, 441, 140, 3, 2, 2, 2, 442, 446, 5, 145, 73, 2, 443, 445, 5, 147, 74, 2, 444, 443, 3, 2, 2, 2, 445, 448, 3, 2, 2, 2, 446, 444, 3, 2, 2, 2, 446, 447, 3, 2, 2, 2, 447, 142, 3, 2, 2, 2, 448, 446, 3, 2, 2, 2, 449, 450, 9, 6, 2, 2, 450, 144, 3, 2, 2, 2, 451, 452, 9, 7, 2, 2, 452, 146, 3, 2, 2, 2, 453, 457, 5, 145, 73, 2, 454, 457, 5, 143, 72, 2, 455, 457, 9, 8, 2, 2, 456, 453, 3, 2, 2, 2, 456, 454, 3, 2, 2, 2, 456, 455, 3, 2, 2, 2, 457, 148, 3, 2, 2, 2, 458, 459, 7, 47, 2, 2, 459, 460, 7, 47, 2, 2, 460, 464, 3, 2, 2, 2, 461, 463, 10, 9, 2, 2, 462, 461, 3, 2, 2, 2, 463, 466, 3, 2, 2, 2, 464, 462, 3, 2, 2, 2, 464, 465, 3, 2, 2, 2, 465, 467, 3, 2, 2, 2, 466, 464, 3, 2, 2, 2, 467, 468, 8, 75, 2, 2, 468, 150, 3, 2, 2, 2, 469, 471, 9, 10, 2, 2, 470, 469, 3, 2, 2, 2, 471, 472, 3, 2, 2, 2, 472, 470, 3, 2, 2, 2, 472, 473, 3, 2, 2, 2, 473, 474, 3, 2, 2, 2, 474, 475, 8, 76, 2, 2, 475, 152, 3, 2, 2, 2, 476, 477, 11, 2, 2, 2, 477, 154, 3, 2, 2, 2, 17, 2, 396, 401, 407, 411, 416, 418, 424, 426, 435, 437, 446, 456, 464, 472, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 76, 487, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 6, 68, 404, 10, 68, 13, 68, 14, 68, 405, 3, 69, 6, 69, 409, 10, 69, 13, 69, 14, 69, 410, 3, 69, 3, 69, 6, 69, 415, 10, 69, 13, 69, 14, 69, 416, 3, 69, 3, 69, 5, 69, 421, 10, 69, 3, 69, 6, 69, 424, 10, 69, 13, 69, 14, 69, 425, 5, 69, 428, 10, 69, 3, 70, 3, 70, 3, 70, 3, 70, 7, 70, 434, 10, 70, 12, 70, 14, 70, 437, 11, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 3, 71, 7, 71, 445, 10, 71, 12, 71, 14, 71, 448, 11, 71, 3, 71, 3, 71, 3, 72, 3, 72, 7, 72, 454, 10, 72, 12, 72, 14, 72, 457, 11, 72, 3, 73, 3, 73, 3, 74, 3, 74, 3, 75, 3, 75, 3, 75, 5, 75, 466, 10, 75, 3, 76, 3, 76, 3, 76, 3, 76, 7, 76, 472, 10, 76, 12, 76, 14, 76, 475, 11, 76, 3, 76, 3, 76, 3, 77, 6, 77, 480, 10, 77, 13, 77, 14, 77, 481, 3, 77, 3, 77, 3, 78, 3, 78, 2, 2, 79, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 2, 147, 2, 149, 2, 151, 74, 153, 75, 155, 76, 3, 2, 11, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 4, 2, 12, 12, 14, 15, 5, 2, 11, 12, 15, 15, 34, 34, 2, 498, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 3, 157, 3, 2, 2, 2, 5, 159, 3, 2, 2, 2, 7, 163, 3, 2, 2, 2, 9, 168, 3, 2, 2, 2, 11, 175, 3, 2, 2, 2, 13, 178, 3, 2, 2, 2, 15, 183, 3, 2, 2, 2, 17, 189, 3, 2, 2, 2, 19, 191, 3, 2, 2, 2, 21, 193, 3, 2, 2, 2, 23, 195, 3, 2, 2, 2, 25, 197, 3, 2, 2, 2, 27, 199, 3, 2, 2, 2, 29, 201, 3, 2, 2, 2, 31, 203, 3, 2, 2, 2, 33, 206, 3, 2, 2, 2, 35, 209, 3, 2, 2, 2, 37, 211, 3, 2, 2, 2, 39, 213, 3, 2, 2, 2, 41, 215, 3, 2, 2, 2, 43, 221, 3, 2, 2, 2, 45, 230, 3, 2, 2, 2, 47, 237, 3, 2, 2, 2, 49, 239, 3, 2, 2, 2, 51, 242, 3, 2, 2, 2, 53, 245, 3, 2, 2, 2, 55, 250, 3, 2, 2, 2, 57, 255, 3, 2, 2, 2, 59, 261, 3, 2, 2, 2, 61, 267, 3, 2, 2, 2, 63, 271, 3, 2, 2, 2, 65, 274, 3, 2, 2, 2, 67, 279, 3, 2, 2, 2, 69, 284, 3, 2, 2, 2, 71, 286, 3, 2, 2, 2, 73, 288, 3, 2, 2, 2, 75, 292, 3, 2, 2, 2, 77, 299, 3, 2, 2, 2, 79, 301, 3, 2, 2, 2, 81, 303, 3, 2, 2, 2, 83, 305, 3, 2, 2, 2, 85, 307, 3, 2, 2, 2, 87, 309, 3, 2, 2, 2, 89, 311, 3, 2, 2, 2, 91, 313, 3, 2, 2, 2, 93, 316, 3, 2, 2, 2, 95, 320, 3, 2, 2, 2, 97, 323, 3, 2, 2, 2, 99, 326, 3, 2, 2, 2, 101, 328, 3, 2, 2, 2, 103, 331, 3, 2, 2, 2, 105, 333, 3, 2, 2, 2, 107, 336, 3, 2, 2, 2, 109, 340, 3, 2, 2, 2, 111, 344, 3, 2, 2, 2, 113, 347, 3, 2, 2, 2, 115, 349, 3, 2, 2, 2, 117, 356, 3, 2, 2, 2, 119, 359, 3, 2, 2, 2, 121, 364, 3, 2, 2, 2, 123, 370, 3, 2, 2, 2, 125, 375, 3, 2, 2, 2, 127, 379, 3, 2, 2, 2, 129, 385, 3, 2, 2, 2, 131, 390, 3, 2, 2, 2, 133, 395, 3, 2, 2, 2, 135, 403, 3, 2, 2, 2, 137, 408, 3, 2, 2, 2, 139, 429, 3, 2, 2, 2, 141, 440, 3, 2, 2, 2, 143, 451, 3, 2, 2, 2, 145, 458, 3, 2, 2, 2, 147, 460, 3, 2, 2, 2, 149, 465, 3, 2, 2, 2, 151, 467, 3, 2, 2, 2, 153, 479, 3, 2, 2, 2, 155, 485, 3, 2, 2, 2, 157, 158, 7, 61, 2, 2, 158, 4, 3, 2, 2, 2, 159, 160, 7, 119, 2, 2, 160, 161, 7, 117, 2, 2, 161, 162, 7, 103, 2, 2, 162, 6, 3, 2, 2, 2, 163, 164, 7, 113, 2, 2, 164, 165, 7, 112, 2, 2, 165, 166, 7, 110, 2, 2, 166, 167, 7, 123, 2, 2, 167, 8, 3, 2, 2, 2, 168, 169, 7, 106, 2, 2, 169, 170, 7, 107, 2, 2, 170, 171, 7, 102, 2, 2, 171, 172, 7, 107, 2, 2, 172, 173, 7, 112, 2, 2, 173, 174, 7, 105, 2, 2, 174, 10, 3, 2, 2, 2, 175, 176, 7, 99, 2, 2, 176, 177, 7, 117, 2, 2, 177, 12, 3, 2, 2, 2, 178, 179, 7, 117, 2, 2, 179, 180, 7, 109, 2, 2, 180, 181, 7, 107, 2, 2, 181, 182, 7, 114, 2, 2, 182, 14, 3, 2, 2, 2, 183, 184, 7, 114, 2, 2, 184, 185, 7, 116, 2, 2, 185, 186, 7, 107, 2, 2, 186, 187, 7, 112, 2, 2, 187, 188, 7, 118, 2, 2, 188, 16, 3, 2, 2, 2, 189, 190, 7, 63, 2, 2, 190, 18, 3, 2, 2, 2, 191, 192, 7, 96, 2, 2, 192, 20, 3, 2, 2, 2, 193, 194, 7, 44, 2, 2, 194, 22, 3, 2, 2, 2, 195, 196, 7, 49, 2, 2, 196, 24, 3, 2, 2, 2, 197, 198, 7, 39, 2, 2, 198, 26, 3, 2, 2, 2, 199, 200, 7, 45, 2, 2, 200, 28, 3, 2, 2, 2, 201, 202, 7, 47, 2, 2, 202, 30, 3, 2, 2, 2, 203, 204, 7, 62, 2, 2, 204, 205, 7, 62, 2, 2, 205, 32, 3, 2, 2, 2, 206, 207, 7, 64, 2, 2, 207, 208, 7, 64, 2, 2, 208, 34, 3, 2, 2, 2, 209, 210, 7, 40, 2, 2, 210, 36, 3, 2, 2, 2, 211, 212, 7, 38, 2, 2, 212, 38, 3, 2, 2, 2, 213, 214, 7, 126, 2, 2, 214, 40, 3, 2, 2, 2, 215, 216, 7, 100, 2, 2, 216, 217, 7, 116, 2, 2, 217, 218, 7, 103, 2, 2, 218, 219, 7, 99, 2, 2, 219, 220, 7, 109, 2, 2, 220, 42, 3, 2, 2, 2, 221, 222, 7, 101, 2, 2, 222, 223, 7, 113, 2, 2, 223, 224, 7, 112, 2, 2, 224, 225, 7, 118, 2, 2, 225, 226, 7, 107, 2, 2, 226, 227, 7, 112, 2, 2, 227, 228, 7, 119, 2, 2, 228, 229, 7, 103, 2, 2, 229, 44, 3, 2, 2, 2, 230, 231, 7, 116, 2, 2, 231, 232, 7, 103, 2, 2, 232, 233, 7, 118, 2, 2, 233, 234, 7, 119, 2, 2, 234, 235, 7, 116, 2, 2, 235, 236, 7, 112, 2, 2, 236, 46, 3, 2, 2, 2, 237, 238, 7, 46, 2, 2, 238, 48, 3, 2, 2, 2, 239, 240, 7, 107, 2, 2, 240, 241, 7, 104, 2, 2, 241, 50, 3, 2, 2, 2, 242, 243, 7, 102, 2, 2, 243, 244, 7, 113, 2, 2, 244, 52, 3, 2, 2, 2, 245, 246, 7, 103, 2, 2, 246, 247, 7, 110, 2, 2, 247, 248, 7, 107, 2, 2, 248, 249, 7, 104, 2, 2, 249, 54, 3, 2, 2, 2, 250, 251, 7, 103, 2, 2, 251, 252, 7, 110, 2, 2, 252, 253, 7, 117, 2, 2, 253, 254, 7, 103, 2, 2, 254, 56, 3, 2, 2, 2, 255, 256, 7, 121, 2, 2, 256, 257, 7, 106, 2, 2, 257, 258, 7, 107, 2, 2, 258, 259, 7, 110, 2, 2, 259, 260, 7, 103, 2, 2, 260, 58, 3, 2, 2, 2, 261, 262, 7, 119, 2, 2, 262, 263, 7, 112, 2, 2, 263, 264, 7, 118, 2, 2, 264, 265, 7, 107, 2, 2, 265, 266, 7, 110, 2, 2, 266, 60, 3, 2, 2, 2, 267, 268, 7, 104, 2, 2, 268, 269, 7, 113, 2, 2, 269, 270, 7, 116, 2, 2, 270, 62, 3, 2, 2, 2, 271, 272, 7, 107, 2, 2, 272, 273, 7, 112, 2, 2, 273, 64, 3, 2, 2, 2, 274, 275, 7, 117, 2, 2, 275, 276, 7, 118, 2, 2, 276, 277, 7, 103, 2, 2, 277, 278, 7, 114, 2, 2, 278, 66, 3, 2, 2, 2, 279, 280, 7, 104, 2, 2, 280, 281, 7, 119, 2, 2, 281, 282, 7, 112, 2, 2, 282, 283, 7, 101, 2, 2, 283, 68, 3, 2, 2, 2, 284, 285, 7, 42, 2, 2, 285, 70, 3, 2, 2, 2, 286, 287, 7, 43, 2, 2, 287, 72, 3, 2, 2, 2, 288, 289, 7, 102, 2, 2, 289, 290, 7, 103, 2, 2, 290, 291, 7, 104, 2, 2, 291, 74, 3, 2, 2, 2, 292, 293, 7, 103, 2, 2, 293, 294, 7, 122, 2, 2, 294, 295, 7, 118, 2, 2, 295, 296, 7, 103, 2, 2, 296, 297, 7, 116, 2, 2, 297, 298, 7, 112, 2, 2, 298, 76, 3, 2, 2, 2, 299, 300, 7, 60, 2, 2, 300, 78, 3, 2, 2, 2, 301, 302, 7, 125, 2, 2, 302, 80, 3, 2, 2, 2, 303, 304, 7, 127, 2, 2, 304, 82, 3, 2, 2, 2, 305, 306, 7, 93, 2, 2, 306, 84, 3, 2, 2, 2, 307, 308, 7, 95, 2, 2, 308, 86, 3, 2, 2, 2, 309, 310, 7, 48, 2, 2, 310, 88, 3, 2, 2, 2, 311, 312, 7, 128, 2, 2, 312, 90, 3, 2, 2, 2, 313, 314, 7, 48, 2, 2, 314, 315, 7, 48, 2, 2, 315, 92, 3, 2, 2, 2, 316, 317, 7, 48, 2, 2, 317, 318, 7, 48, 2, 2, 318, 319, 7, 48, 2, 2, 319, 94, 3, 2, 2, 2, 320, 321, 7, 63, 2, 2, 321, 322, 7, 63, 2, 2, 322, 96, 3, 2, 2, 2, 323, 324, 7, 35, 2, 2, 324, 325, 7, 63, 2, 2, 325, 98, 3, 2, 2, 2, 326, 327, 7, 62, 2, 2, 327, 100, 3, 2, 2, 2, 328, 329, 7, 62, 2, 2, 329, 330, 7, 63, 2, 2, 330, 102, 3, 2, 2, 2, 331, 332, 7, 64, 2, 2, 332, 104, 3, 2, 2, 2, 333, 334, 7, 64, 2, 2, 334, 335, 7, 63, 2, 2, 335, 106, 3, 2, 2, 2, 336, 337, 7, 112, 2, 2, 337, 338, 7, 113, 2, 2, 338, 339, 7, 118, 2, 2, 339, 108, 3, 2, 2, 2, 340, 341, 7, 99, 2, 2, 341, 342, 7, 112, 2, 2, 342, 343, 7, 102, 2, 2, 343, 110, 3, 2, 2, 2, 344, 345, 7, 113, 2, 2, 345, 346, 7, 116, 2, 2, 346, 112, 3, 2, 2, 2, 347, 348, 7, 65, 2, 2, 348, 114, 3, 2, 2, 2, 349, 350, 7, 110, 2, 2, 350, 351, 7, 99, 2, 2, 351, 352, 7, 111, 2, 2, 352, 353, 7, 100, 2, 2, 353, 354, 7, 102, 2, 2, 354, 355, 7, 99, 2, 2, 355, 116, 3, 2, 2, 2, 356, 357, 7, 47, 2, 2, 357, 358, 7, 64, 2, 2, 358, 118, 3, 2, 2, 2, 359, 360, 7, 118, 2, 2, 360, 361, 7, 116, 2, 2, 361, 362, 7, 119, 2, 2, 362, 363, 7, 103, 2, 2, 363, 120, 3, 2, 2, 2, 364, 365, 7, 104, 2, 2, 365, 366, 7, 99, 2, 2, 366, 367, 7, 110, 2, 2, 367, 368, 7, 117, 2, 2, 368, 369, 7, 103, 2, 2, 369, 122, 3, 2, 2, 2, 370, 371, 7, 88, 2, 2, 371, 372, 7, 113, 2, 2, 372, 373, 7, 107, 2, 2, 373, 374, 7, 102, 2, 2, 374, 124, 3, 2, 2, 2, 375, 376, 7, 75, 2, 2, 376, 377, 7, 112, 2, 2, 377, 378, 7, 118, 2, 2, 378, 126, 3, 2, 2, 2, 379, 380, 7, 72, 2, 2, 380, 381, 7, 110, 2, 2, 381, 382, 7, 113, 2, 2, 382, 383, 7, 99, 2, 2, 383, 384, 7, 118, 2, 2, 384, 128, 3, 2, 2, 2, 385, 386, 7, 68, 2, 2, 386, 387, 7, 113, 2, 2, 387, 388, 7, 113, 2, 2, 388, 389, 7, 110, 2, 2, 389, 130, 3, 2, 2, 2, 390, 391, 7, 69, 2, 2, 391, 392, 7, 106, 2, 2, 392, 393, 7, 99, 2, 2, 393, 394, 7, 116, 2, 2, 394, 132, 3, 2, 2, 2, 395, 396, 7, 85, 2, 2, 396, 397, 7, 118, 2, 2, 397, 398, 7, 116, 2, 2, 398, 399, 7, 107, 2, 2, 399, 400, 7, 112, 2, 2, 400, 401, 7, 105, 2, 2, 401, 134, 3, 2, 2, 2, 402, 404, 5, 145, 73, 2, 403, 402, 3, 2, 2, 2, 404, 405, 3, 2, 2, 2, 405, 403, 3, 2, 2, 2, 405, 406, 3, 2, 2, 2, 406, 136, 3, 2, 2, 2, 407, 409, 5, 145, 73, 2, 408, 407, 3, 2, 2, 2, 409, 410, 3, 2, 2, 2, 410, 408, 3, 2, 2, 2, 410, 411, 3, 2, 2, 2, 411, 412, 3, 2, 2, 2, 412, 414, 7, 48, 2, 2, 413, 415, 5, 145, 73, 2, 414, 413, 3, 2, 2, 2, 415, 416, 3, 2, 2, 2, 416, 414, 3, 2, 2, 2, 416, 417, 3, 2, 2, 2, 417, 427, 3, 2, 2, 2, 418, 420, 7, 103, 2, 2, 419, 421, 7, 47, 2, 2, 420, 419, 3, 2, 2, 2, 420, 421, 3, 2, 2, 2, 421, 423, 3, 2, 2, 2, 422, 424, 5, 145, 73, 2, 423, 422, 3, 2, 2, 2, 424, 425, 3, 2, 2, 2, 425, 423, 3, 2, 2, 2, 425, 426, 3, 2, 2, 2, 426, 428, 3, 2, 2, 2, 427, 418, 3, 2, 2, 2, 427, 428, 3, 2, 2, 2, 428, 138, 3, 2, 2, 2, 429, 435, 7, 41, 2, 2, 430, 434, 10, 2, 2, 2, 431, 432, 7, 94, 2, 2, 432, 434, 9, 3, 2, 2, 433, 430, 3, 2, 2, 2, 433, 431, 3, 2, 2, 2, 434, 437, 3, 2, 2, 2, 435, 433, 3, 2, 2, 2, 435, 436, 3, 2, 2, 2, 436, 438, 3, 2, 2, 2, 437, 435, 3, 2, 2, 2, 438, 439, 7, 41, 2, 2, 439, 140, 3, 2, 2, 2, 440, 446, 7, 36, 2, 2, 441, 445, 10, 4, 2, 2, 442, 443, 7, 94, 2, 2, 443, 445, 9, 5, 2, 2, 444, 441, 3, 2, 2, 2, 444, 442, 3, 2, 2, 2, 445, 448, 3, 2, 2, 2, 446, 444, 3, 2, 2, 2, 446, 447, 3, 2, 2, 2, 447, 449, 3, 2, 2, 2, 448, 446, 3, 2, 2, 2, 449, 450, 7, 36, 2, 2, 450, 142, 3, 2, 2, 2, 451, 455, 5, 147, 74, 2, 452, 454, 5, 149, 75, 2, 453, 452, 3, 2, 2, 2, 454, 457, 3, 2, 2, 2, 455, 453, 3, 2, 2, 2, 455, 456, 3, 2, 2, 2, 456, 144, 3, 2, 2, 2, 457, 455, 3, 2, 2, 2, 458, 459, 9, 6, 2, 2, 459, 146, 3, 2, 2, 2, 460, 461, 9, 7, 2, 2, 461, 148, 3, 2, 2, 2, 462, 466, 5, 147, 74, 2, 463, 466, 5, 145, 73, 2, 464, 466, 9, 8, 2, 2, 465, 462, 3, 2, 2, 2, 465, 463, 3, 2, 2, 2, 465, 464, 3, 2, 2, 2, 466, 150, 3, 2, 2, 2, 467, 468, 7, 47, 2, 2, 468, 469, 7, 47, 2, 2, 469, 473, 3, 2, 2, 2, 470, 472, 10, 9, 2, 2, 471, 470, 3, 2, 2, 2, 472, 475, 3, 2, 2, 2, 473, 471, 3, 2, 2, 2, 473, 474, 3, 2, 2, 2, 474, 476, 3, 2, 2, 2, 475, 473, 3, 2, 2, 2, 476, 477, 8, 76, 2, 2, 477, 152, 3, 2, 2, 2, 478, 480, 9, 10, 2, 2, 479, 478, 3, 2, 2, 2, 480, 481, 3, 2, 2, 2, 481, 479, 3, 2, 2, 2, 481, 482, 3, 2, 2, 2, 482, 483, 3, 2, 2, 2, 483, 484, 8, 77, 2, 2, 484, 154, 3, 2, 2, 2, 485, 486, 11, 2, 2, 2, 486, 156, 3, 2, 2, 2, 17, 2, 405, 410, 416, 420, 425, 427, 433, 435, 444, 446, 455, 465, 473, 481, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py index 26bf20ac..c72ec433 100644 --- a/src/antlr/PyxellLexer.py +++ b/src/antlr/PyxellLexer.py @@ -8,8 +8,8 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2K") - buf.write("\u01de\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2L") + buf.write("\u01e7\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") @@ -20,197 +20,200 @@ def serializedATN(): buf.write("\t\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:") buf.write("\4;\t;\4<\t<\4=\t=\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\t") buf.write("C\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I\tI\4J\tJ\4K\tK\4L\t") - buf.write("L\4M\tM\3\2\3\2\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3") - buf.write("\5\3\5\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3\6\3\7\3\7\3\7\3\7") - buf.write("\3\7\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3\t\3\n\3\n\3\13\3\13") - buf.write("\3\f\3\f\3\r\3\r\3\16\3\16\3\17\3\17\3\20\3\20\3\20\3") - buf.write("\21\3\21\3\21\3\22\3\22\3\23\3\23\3\24\3\24\3\25\3\25") - buf.write("\3\25\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\26\3\26") - buf.write("\3\26\3\26\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\30\3\30") - buf.write("\3\31\3\31\3\31\3\32\3\32\3\32\3\33\3\33\3\33\3\33\3\33") - buf.write("\3\34\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35\3\35") - buf.write("\3\36\3\36\3\36\3\36\3\36\3\36\3\37\3\37\3\37\3\37\3 ") - buf.write("\3 \3 \3!\3!\3!\3!\3!\3\"\3\"\3\"\3\"\3\"\3#\3#\3$\3$") - buf.write("\3%\3%\3%\3%\3&\3&\3&\3&\3&\3&\3&\3\'\3\'\3(\3(\3)\3)") - buf.write("\3*\3*\3+\3+\3,\3,\3-\3-\3.\3.\3.\3/\3/\3/\3/\3\60\3\60") - buf.write("\3\60\3\61\3\61\3\61\3\62\3\62\3\63\3\63\3\63\3\64\3\64") - buf.write("\3\65\3\65\3\65\3\66\3\66\3\66\3\66\3\67\3\67\3\67\3\67") - buf.write("\38\38\38\39\39\3:\3:\3:\3:\3:\3;\3;\3;\3;\3;\3;\3<\3") - buf.write("<\3<\3<\3<\3=\3=\3=\3=\3>\3>\3>\3>\3>\3>\3?\3?\3?\3?\3") - buf.write("?\3@\3@\3@\3@\3@\3A\3A\3A\3A\3A\3A\3A\3B\3B\3B\3C\6C\u018b") - buf.write("\nC\rC\16C\u018c\3D\6D\u0190\nD\rD\16D\u0191\3D\3D\6D") - buf.write("\u0196\nD\rD\16D\u0197\3D\3D\5D\u019c\nD\3D\6D\u019f\n") - buf.write("D\rD\16D\u01a0\5D\u01a3\nD\3E\3E\3E\3E\7E\u01a9\nE\fE") - buf.write("\16E\u01ac\13E\3E\3E\3F\3F\3F\3F\7F\u01b4\nF\fF\16F\u01b7") - buf.write("\13F\3F\3F\3G\3G\7G\u01bd\nG\fG\16G\u01c0\13G\3H\3H\3") - buf.write("I\3I\3J\3J\3J\5J\u01c9\nJ\3K\3K\3K\3K\7K\u01cf\nK\fK\16") - buf.write("K\u01d2\13K\3K\3K\3L\6L\u01d7\nL\rL\16L\u01d8\3L\3L\3") - buf.write("M\3M\2\2N\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25") - buf.write("\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+") - buf.write("\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#E") - buf.write("$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k") - buf.write("\67m8o9q:s;u{?}@\177A\u0081B\u0083C\u0085D\u0087") - buf.write("E\u0089F\u008bG\u008dH\u008f\2\u0091\2\u0093\2\u0095I") - buf.write("\u0097J\u0099K\3\2\13\4\2))^^\6\2))^^ppvv\4\2$$^^\6\2") - buf.write("$$^^ppvv\3\2\62;\5\2C\\aac|\4\2))aa\4\2\f\f\16\17\5\2") - buf.write("\13\f\17\17\"\"\2\u01e9\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3") - buf.write("\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2") - buf.write("\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2") - buf.write("\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2") - buf.write("!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2") - buf.write("\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3") - buf.write("\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2") - buf.write("\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2") - buf.write("\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2") - buf.write("\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3") - buf.write("\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c") - buf.write("\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2") - buf.write("m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2u\3\2\2\2") - buf.write("\2w\3\2\2\2\2y\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177\3\2") - buf.write("\2\2\2\u0081\3\2\2\2\2\u0083\3\2\2\2\2\u0085\3\2\2\2\2") - buf.write("\u0087\3\2\2\2\2\u0089\3\2\2\2\2\u008b\3\2\2\2\2\u008d") - buf.write("\3\2\2\2\2\u0095\3\2\2\2\2\u0097\3\2\2\2\2\u0099\3\2\2") - buf.write("\2\3\u009b\3\2\2\2\5\u009d\3\2\2\2\7\u00a1\3\2\2\2\t\u00a6") - buf.write("\3\2\2\2\13\u00ad\3\2\2\2\r\u00b0\3\2\2\2\17\u00b5\3\2") - buf.write("\2\2\21\u00bb\3\2\2\2\23\u00bd\3\2\2\2\25\u00bf\3\2\2") - buf.write("\2\27\u00c1\3\2\2\2\31\u00c3\3\2\2\2\33\u00c5\3\2\2\2") - buf.write("\35\u00c7\3\2\2\2\37\u00c9\3\2\2\2!\u00cc\3\2\2\2#\u00cf") - buf.write("\3\2\2\2%\u00d1\3\2\2\2\'\u00d3\3\2\2\2)\u00d5\3\2\2\2") - buf.write("+\u00db\3\2\2\2-\u00e4\3\2\2\2/\u00eb\3\2\2\2\61\u00ed") - buf.write("\3\2\2\2\63\u00f0\3\2\2\2\65\u00f3\3\2\2\2\67\u00f8\3") - buf.write("\2\2\29\u00fd\3\2\2\2;\u0103\3\2\2\2=\u0109\3\2\2\2?\u010d") - buf.write("\3\2\2\2A\u0110\3\2\2\2C\u0115\3\2\2\2E\u011a\3\2\2\2") - buf.write("G\u011c\3\2\2\2I\u011e\3\2\2\2K\u0122\3\2\2\2M\u0129\3") - buf.write("\2\2\2O\u012b\3\2\2\2Q\u012d\3\2\2\2S\u012f\3\2\2\2U\u0131") - buf.write("\3\2\2\2W\u0133\3\2\2\2Y\u0135\3\2\2\2[\u0137\3\2\2\2") - buf.write("]\u013a\3\2\2\2_\u013e\3\2\2\2a\u0141\3\2\2\2c\u0144\3") - buf.write("\2\2\2e\u0146\3\2\2\2g\u0149\3\2\2\2i\u014b\3\2\2\2k\u014e") - buf.write("\3\2\2\2m\u0152\3\2\2\2o\u0156\3\2\2\2q\u0159\3\2\2\2") - buf.write("s\u015b\3\2\2\2u\u0160\3\2\2\2w\u0166\3\2\2\2y\u016b\3") - buf.write("\2\2\2{\u016f\3\2\2\2}\u0175\3\2\2\2\177\u017a\3\2\2\2") - buf.write("\u0081\u017f\3\2\2\2\u0083\u0186\3\2\2\2\u0085\u018a\3") - buf.write("\2\2\2\u0087\u018f\3\2\2\2\u0089\u01a4\3\2\2\2\u008b\u01af") - buf.write("\3\2\2\2\u008d\u01ba\3\2\2\2\u008f\u01c1\3\2\2\2\u0091") - buf.write("\u01c3\3\2\2\2\u0093\u01c8\3\2\2\2\u0095\u01ca\3\2\2\2") - buf.write("\u0097\u01d6\3\2\2\2\u0099\u01dc\3\2\2\2\u009b\u009c\7") - buf.write("=\2\2\u009c\4\3\2\2\2\u009d\u009e\7w\2\2\u009e\u009f\7") - buf.write("u\2\2\u009f\u00a0\7g\2\2\u00a0\6\3\2\2\2\u00a1\u00a2\7") - buf.write("q\2\2\u00a2\u00a3\7p\2\2\u00a3\u00a4\7n\2\2\u00a4\u00a5") - buf.write("\7{\2\2\u00a5\b\3\2\2\2\u00a6\u00a7\7j\2\2\u00a7\u00a8") - buf.write("\7k\2\2\u00a8\u00a9\7f\2\2\u00a9\u00aa\7k\2\2\u00aa\u00ab") - buf.write("\7p\2\2\u00ab\u00ac\7i\2\2\u00ac\n\3\2\2\2\u00ad\u00ae") - buf.write("\7c\2\2\u00ae\u00af\7u\2\2\u00af\f\3\2\2\2\u00b0\u00b1") - buf.write("\7u\2\2\u00b1\u00b2\7m\2\2\u00b2\u00b3\7k\2\2\u00b3\u00b4") - buf.write("\7r\2\2\u00b4\16\3\2\2\2\u00b5\u00b6\7r\2\2\u00b6\u00b7") - buf.write("\7t\2\2\u00b7\u00b8\7k\2\2\u00b8\u00b9\7p\2\2\u00b9\u00ba") - buf.write("\7v\2\2\u00ba\20\3\2\2\2\u00bb\u00bc\7?\2\2\u00bc\22\3") - buf.write("\2\2\2\u00bd\u00be\7`\2\2\u00be\24\3\2\2\2\u00bf\u00c0") - buf.write("\7,\2\2\u00c0\26\3\2\2\2\u00c1\u00c2\7\61\2\2\u00c2\30") - buf.write("\3\2\2\2\u00c3\u00c4\7\'\2\2\u00c4\32\3\2\2\2\u00c5\u00c6") - buf.write("\7-\2\2\u00c6\34\3\2\2\2\u00c7\u00c8\7/\2\2\u00c8\36\3") - buf.write("\2\2\2\u00c9\u00ca\7>\2\2\u00ca\u00cb\7>\2\2\u00cb \3") - buf.write("\2\2\2\u00cc\u00cd\7@\2\2\u00cd\u00ce\7@\2\2\u00ce\"\3") - buf.write("\2\2\2\u00cf\u00d0\7(\2\2\u00d0$\3\2\2\2\u00d1\u00d2\7") - buf.write("&\2\2\u00d2&\3\2\2\2\u00d3\u00d4\7~\2\2\u00d4(\3\2\2\2") - buf.write("\u00d5\u00d6\7d\2\2\u00d6\u00d7\7t\2\2\u00d7\u00d8\7g") - buf.write("\2\2\u00d8\u00d9\7c\2\2\u00d9\u00da\7m\2\2\u00da*\3\2") - buf.write("\2\2\u00db\u00dc\7e\2\2\u00dc\u00dd\7q\2\2\u00dd\u00de") - buf.write("\7p\2\2\u00de\u00df\7v\2\2\u00df\u00e0\7k\2\2\u00e0\u00e1") - buf.write("\7p\2\2\u00e1\u00e2\7w\2\2\u00e2\u00e3\7g\2\2\u00e3,\3") - buf.write("\2\2\2\u00e4\u00e5\7t\2\2\u00e5\u00e6\7g\2\2\u00e6\u00e7") - buf.write("\7v\2\2\u00e7\u00e8\7w\2\2\u00e8\u00e9\7t\2\2\u00e9\u00ea") - buf.write("\7p\2\2\u00ea.\3\2\2\2\u00eb\u00ec\7.\2\2\u00ec\60\3\2") - buf.write("\2\2\u00ed\u00ee\7k\2\2\u00ee\u00ef\7h\2\2\u00ef\62\3") - buf.write("\2\2\2\u00f0\u00f1\7f\2\2\u00f1\u00f2\7q\2\2\u00f2\64") - buf.write("\3\2\2\2\u00f3\u00f4\7g\2\2\u00f4\u00f5\7n\2\2\u00f5\u00f6") - buf.write("\7k\2\2\u00f6\u00f7\7h\2\2\u00f7\66\3\2\2\2\u00f8\u00f9") - buf.write("\7g\2\2\u00f9\u00fa\7n\2\2\u00fa\u00fb\7u\2\2\u00fb\u00fc") - buf.write("\7g\2\2\u00fc8\3\2\2\2\u00fd\u00fe\7y\2\2\u00fe\u00ff") - buf.write("\7j\2\2\u00ff\u0100\7k\2\2\u0100\u0101\7n\2\2\u0101\u0102") - buf.write("\7g\2\2\u0102:\3\2\2\2\u0103\u0104\7w\2\2\u0104\u0105") - buf.write("\7p\2\2\u0105\u0106\7v\2\2\u0106\u0107\7k\2\2\u0107\u0108") - buf.write("\7n\2\2\u0108<\3\2\2\2\u0109\u010a\7h\2\2\u010a\u010b") - buf.write("\7q\2\2\u010b\u010c\7t\2\2\u010c>\3\2\2\2\u010d\u010e") - buf.write("\7k\2\2\u010e\u010f\7p\2\2\u010f@\3\2\2\2\u0110\u0111") - buf.write("\7u\2\2\u0111\u0112\7v\2\2\u0112\u0113\7g\2\2\u0113\u0114") - buf.write("\7r\2\2\u0114B\3\2\2\2\u0115\u0116\7h\2\2\u0116\u0117") - buf.write("\7w\2\2\u0117\u0118\7p\2\2\u0118\u0119\7e\2\2\u0119D\3") - buf.write("\2\2\2\u011a\u011b\7*\2\2\u011bF\3\2\2\2\u011c\u011d\7") - buf.write("+\2\2\u011dH\3\2\2\2\u011e\u011f\7f\2\2\u011f\u0120\7") - buf.write("g\2\2\u0120\u0121\7h\2\2\u0121J\3\2\2\2\u0122\u0123\7") - buf.write("g\2\2\u0123\u0124\7z\2\2\u0124\u0125\7v\2\2\u0125\u0126") - buf.write("\7g\2\2\u0126\u0127\7t\2\2\u0127\u0128\7p\2\2\u0128L\3") - buf.write("\2\2\2\u0129\u012a\7<\2\2\u012aN\3\2\2\2\u012b\u012c\7") - buf.write("}\2\2\u012cP\3\2\2\2\u012d\u012e\7\177\2\2\u012eR\3\2") - buf.write("\2\2\u012f\u0130\7]\2\2\u0130T\3\2\2\2\u0131\u0132\7_") - buf.write("\2\2\u0132V\3\2\2\2\u0133\u0134\7\60\2\2\u0134X\3\2\2") - buf.write("\2\u0135\u0136\7\u0080\2\2\u0136Z\3\2\2\2\u0137\u0138") - buf.write("\7\60\2\2\u0138\u0139\7\60\2\2\u0139\\\3\2\2\2\u013a\u013b") - buf.write("\7\60\2\2\u013b\u013c\7\60\2\2\u013c\u013d\7\60\2\2\u013d") - buf.write("^\3\2\2\2\u013e\u013f\7?\2\2\u013f\u0140\7?\2\2\u0140") - buf.write("`\3\2\2\2\u0141\u0142\7#\2\2\u0142\u0143\7?\2\2\u0143") - buf.write("b\3\2\2\2\u0144\u0145\7>\2\2\u0145d\3\2\2\2\u0146\u0147") - buf.write("\7>\2\2\u0147\u0148\7?\2\2\u0148f\3\2\2\2\u0149\u014a") - buf.write("\7@\2\2\u014ah\3\2\2\2\u014b\u014c\7@\2\2\u014c\u014d") - buf.write("\7?\2\2\u014dj\3\2\2\2\u014e\u014f\7p\2\2\u014f\u0150") - buf.write("\7q\2\2\u0150\u0151\7v\2\2\u0151l\3\2\2\2\u0152\u0153") - buf.write("\7c\2\2\u0153\u0154\7p\2\2\u0154\u0155\7f\2\2\u0155n\3") - buf.write("\2\2\2\u0156\u0157\7q\2\2\u0157\u0158\7t\2\2\u0158p\3") - buf.write("\2\2\2\u0159\u015a\7A\2\2\u015ar\3\2\2\2\u015b\u015c\7") - buf.write("v\2\2\u015c\u015d\7t\2\2\u015d\u015e\7w\2\2\u015e\u015f") - buf.write("\7g\2\2\u015ft\3\2\2\2\u0160\u0161\7h\2\2\u0161\u0162") - buf.write("\7c\2\2\u0162\u0163\7n\2\2\u0163\u0164\7u\2\2\u0164\u0165") - buf.write("\7g\2\2\u0165v\3\2\2\2\u0166\u0167\7X\2\2\u0167\u0168") - buf.write("\7q\2\2\u0168\u0169\7k\2\2\u0169\u016a\7f\2\2\u016ax\3") - buf.write("\2\2\2\u016b\u016c\7K\2\2\u016c\u016d\7p\2\2\u016d\u016e") - buf.write("\7v\2\2\u016ez\3\2\2\2\u016f\u0170\7H\2\2\u0170\u0171") - buf.write("\7n\2\2\u0171\u0172\7q\2\2\u0172\u0173\7c\2\2\u0173\u0174") - buf.write("\7v\2\2\u0174|\3\2\2\2\u0175\u0176\7D\2\2\u0176\u0177") - buf.write("\7q\2\2\u0177\u0178\7q\2\2\u0178\u0179\7n\2\2\u0179~\3") - buf.write("\2\2\2\u017a\u017b\7E\2\2\u017b\u017c\7j\2\2\u017c\u017d") - buf.write("\7c\2\2\u017d\u017e\7t\2\2\u017e\u0080\3\2\2\2\u017f\u0180") - buf.write("\7U\2\2\u0180\u0181\7v\2\2\u0181\u0182\7t\2\2\u0182\u0183") - buf.write("\7k\2\2\u0183\u0184\7p\2\2\u0184\u0185\7i\2\2\u0185\u0082") - buf.write("\3\2\2\2\u0186\u0187\7/\2\2\u0187\u0188\7@\2\2\u0188\u0084") - buf.write("\3\2\2\2\u0189\u018b\5\u008fH\2\u018a\u0189\3\2\2\2\u018b") - buf.write("\u018c\3\2\2\2\u018c\u018a\3\2\2\2\u018c\u018d\3\2\2\2") - buf.write("\u018d\u0086\3\2\2\2\u018e\u0190\5\u008fH\2\u018f\u018e") - buf.write("\3\2\2\2\u0190\u0191\3\2\2\2\u0191\u018f\3\2\2\2\u0191") - buf.write("\u0192\3\2\2\2\u0192\u0193\3\2\2\2\u0193\u0195\7\60\2") - buf.write("\2\u0194\u0196\5\u008fH\2\u0195\u0194\3\2\2\2\u0196\u0197") - buf.write("\3\2\2\2\u0197\u0195\3\2\2\2\u0197\u0198\3\2\2\2\u0198") - buf.write("\u01a2\3\2\2\2\u0199\u019b\7g\2\2\u019a\u019c\7/\2\2\u019b") - buf.write("\u019a\3\2\2\2\u019b\u019c\3\2\2\2\u019c\u019e\3\2\2\2") - buf.write("\u019d\u019f\5\u008fH\2\u019e\u019d\3\2\2\2\u019f\u01a0") - buf.write("\3\2\2\2\u01a0\u019e\3\2\2\2\u01a0\u01a1\3\2\2\2\u01a1") - buf.write("\u01a3\3\2\2\2\u01a2\u0199\3\2\2\2\u01a2\u01a3\3\2\2\2") - buf.write("\u01a3\u0088\3\2\2\2\u01a4\u01aa\7)\2\2\u01a5\u01a9\n") - buf.write("\2\2\2\u01a6\u01a7\7^\2\2\u01a7\u01a9\t\3\2\2\u01a8\u01a5") - buf.write("\3\2\2\2\u01a8\u01a6\3\2\2\2\u01a9\u01ac\3\2\2\2\u01aa") - buf.write("\u01a8\3\2\2\2\u01aa\u01ab\3\2\2\2\u01ab\u01ad\3\2\2\2") - buf.write("\u01ac\u01aa\3\2\2\2\u01ad\u01ae\7)\2\2\u01ae\u008a\3") - buf.write("\2\2\2\u01af\u01b5\7$\2\2\u01b0\u01b4\n\4\2\2\u01b1\u01b2") - buf.write("\7^\2\2\u01b2\u01b4\t\5\2\2\u01b3\u01b0\3\2\2\2\u01b3") - buf.write("\u01b1\3\2\2\2\u01b4\u01b7\3\2\2\2\u01b5\u01b3\3\2\2\2") - buf.write("\u01b5\u01b6\3\2\2\2\u01b6\u01b8\3\2\2\2\u01b7\u01b5\3") - buf.write("\2\2\2\u01b8\u01b9\7$\2\2\u01b9\u008c\3\2\2\2\u01ba\u01be") - buf.write("\5\u0091I\2\u01bb\u01bd\5\u0093J\2\u01bc\u01bb\3\2\2\2") - buf.write("\u01bd\u01c0\3\2\2\2\u01be\u01bc\3\2\2\2\u01be\u01bf\3") - buf.write("\2\2\2\u01bf\u008e\3\2\2\2\u01c0\u01be\3\2\2\2\u01c1\u01c2") - buf.write("\t\6\2\2\u01c2\u0090\3\2\2\2\u01c3\u01c4\t\7\2\2\u01c4") - buf.write("\u0092\3\2\2\2\u01c5\u01c9\5\u0091I\2\u01c6\u01c9\5\u008f") - buf.write("H\2\u01c7\u01c9\t\b\2\2\u01c8\u01c5\3\2\2\2\u01c8\u01c6") - buf.write("\3\2\2\2\u01c8\u01c7\3\2\2\2\u01c9\u0094\3\2\2\2\u01ca") - buf.write("\u01cb\7/\2\2\u01cb\u01cc\7/\2\2\u01cc\u01d0\3\2\2\2\u01cd") - buf.write("\u01cf\n\t\2\2\u01ce\u01cd\3\2\2\2\u01cf\u01d2\3\2\2\2") - buf.write("\u01d0\u01ce\3\2\2\2\u01d0\u01d1\3\2\2\2\u01d1\u01d3\3") - buf.write("\2\2\2\u01d2\u01d0\3\2\2\2\u01d3\u01d4\bK\2\2\u01d4\u0096") - buf.write("\3\2\2\2\u01d5\u01d7\t\n\2\2\u01d6\u01d5\3\2\2\2\u01d7") - buf.write("\u01d8\3\2\2\2\u01d8\u01d6\3\2\2\2\u01d8\u01d9\3\2\2\2") - buf.write("\u01d9\u01da\3\2\2\2\u01da\u01db\bL\2\2\u01db\u0098\3") - buf.write("\2\2\2\u01dc\u01dd\13\2\2\2\u01dd\u009a\3\2\2\2\21\2\u018c") - buf.write("\u0191\u0197\u019b\u01a0\u01a2\u01a8\u01aa\u01b3\u01b5") - buf.write("\u01be\u01c8\u01d0\u01d8\3\b\2\2") + buf.write("L\4M\tM\4N\tN\3\2\3\2\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4") + buf.write("\3\4\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3\6\3\7\3\7\3") + buf.write("\7\3\7\3\7\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3\t\3\n\3\n\3\13") + buf.write("\3\13\3\f\3\f\3\r\3\r\3\16\3\16\3\17\3\17\3\20\3\20\3") + buf.write("\20\3\21\3\21\3\21\3\22\3\22\3\23\3\23\3\24\3\24\3\25") + buf.write("\3\25\3\25\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\26") + buf.write("\3\26\3\26\3\26\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\30") + buf.write("\3\30\3\31\3\31\3\31\3\32\3\32\3\32\3\33\3\33\3\33\3\33") + buf.write("\3\33\3\34\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35") + buf.write("\3\35\3\36\3\36\3\36\3\36\3\36\3\36\3\37\3\37\3\37\3\37") + buf.write("\3 \3 \3 \3!\3!\3!\3!\3!\3\"\3\"\3\"\3\"\3\"\3#\3#\3$") + buf.write("\3$\3%\3%\3%\3%\3&\3&\3&\3&\3&\3&\3&\3\'\3\'\3(\3(\3)") + buf.write("\3)\3*\3*\3+\3+\3,\3,\3-\3-\3.\3.\3.\3/\3/\3/\3/\3\60") + buf.write("\3\60\3\60\3\61\3\61\3\61\3\62\3\62\3\63\3\63\3\63\3\64") + buf.write("\3\64\3\65\3\65\3\65\3\66\3\66\3\66\3\66\3\67\3\67\3\67") + buf.write("\3\67\38\38\38\39\39\3:\3:\3:\3:\3:\3:\3:\3;\3;\3;\3<") + buf.write("\3<\3<\3<\3<\3=\3=\3=\3=\3=\3=\3>\3>\3>\3>\3>\3?\3?\3") + buf.write("?\3?\3@\3@\3@\3@\3@\3@\3A\3A\3A\3A\3A\3B\3B\3B\3B\3B\3") + buf.write("C\3C\3C\3C\3C\3C\3C\3D\6D\u0194\nD\rD\16D\u0195\3E\6E") + buf.write("\u0199\nE\rE\16E\u019a\3E\3E\6E\u019f\nE\rE\16E\u01a0") + buf.write("\3E\3E\5E\u01a5\nE\3E\6E\u01a8\nE\rE\16E\u01a9\5E\u01ac") + buf.write("\nE\3F\3F\3F\3F\7F\u01b2\nF\fF\16F\u01b5\13F\3F\3F\3G") + buf.write("\3G\3G\3G\7G\u01bd\nG\fG\16G\u01c0\13G\3G\3G\3H\3H\7H") + buf.write("\u01c6\nH\fH\16H\u01c9\13H\3I\3I\3J\3J\3K\3K\3K\5K\u01d2") + buf.write("\nK\3L\3L\3L\3L\7L\u01d8\nL\fL\16L\u01db\13L\3L\3L\3M") + buf.write("\6M\u01e0\nM\rM\16M\u01e1\3M\3M\3N\3N\2\2O\3\3\5\4\7\5") + buf.write("\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35") + buf.write("\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33") + buf.write("\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[") + buf.write("/]\60_\61a\62c\63e\64g\65i\66k\67m8o9q:s;u{?}@\177") + buf.write("A\u0081B\u0083C\u0085D\u0087E\u0089F\u008bG\u008dH\u008f") + buf.write("I\u0091\2\u0093\2\u0095\2\u0097J\u0099K\u009bL\3\2\13") + buf.write("\4\2))^^\6\2))^^ppvv\4\2$$^^\6\2$$^^ppvv\3\2\62;\5\2C") + buf.write("\\aac|\4\2))aa\4\2\f\f\16\17\5\2\13\f\17\17\"\"\2\u01f2") + buf.write("\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13") + buf.write("\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3") + buf.write("\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2") + buf.write("\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2") + buf.write("%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2") + buf.write("\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67") + buf.write("\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2") + buf.write("A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2") + buf.write("\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2") + buf.write("\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2") + buf.write("\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3") + buf.write("\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2q") + buf.write("\3\2\2\2\2s\3\2\2\2\2u\3\2\2\2\2w\3\2\2\2\2y\3\2\2\2\2") + buf.write("{\3\2\2\2\2}\3\2\2\2\2\177\3\2\2\2\2\u0081\3\2\2\2\2\u0083") + buf.write("\3\2\2\2\2\u0085\3\2\2\2\2\u0087\3\2\2\2\2\u0089\3\2\2") + buf.write("\2\2\u008b\3\2\2\2\2\u008d\3\2\2\2\2\u008f\3\2\2\2\2\u0097") + buf.write("\3\2\2\2\2\u0099\3\2\2\2\2\u009b\3\2\2\2\3\u009d\3\2\2") + buf.write("\2\5\u009f\3\2\2\2\7\u00a3\3\2\2\2\t\u00a8\3\2\2\2\13") + buf.write("\u00af\3\2\2\2\r\u00b2\3\2\2\2\17\u00b7\3\2\2\2\21\u00bd") + buf.write("\3\2\2\2\23\u00bf\3\2\2\2\25\u00c1\3\2\2\2\27\u00c3\3") + buf.write("\2\2\2\31\u00c5\3\2\2\2\33\u00c7\3\2\2\2\35\u00c9\3\2") + buf.write("\2\2\37\u00cb\3\2\2\2!\u00ce\3\2\2\2#\u00d1\3\2\2\2%\u00d3") + buf.write("\3\2\2\2\'\u00d5\3\2\2\2)\u00d7\3\2\2\2+\u00dd\3\2\2\2") + buf.write("-\u00e6\3\2\2\2/\u00ed\3\2\2\2\61\u00ef\3\2\2\2\63\u00f2") + buf.write("\3\2\2\2\65\u00f5\3\2\2\2\67\u00fa\3\2\2\29\u00ff\3\2") + buf.write("\2\2;\u0105\3\2\2\2=\u010b\3\2\2\2?\u010f\3\2\2\2A\u0112") + buf.write("\3\2\2\2C\u0117\3\2\2\2E\u011c\3\2\2\2G\u011e\3\2\2\2") + buf.write("I\u0120\3\2\2\2K\u0124\3\2\2\2M\u012b\3\2\2\2O\u012d\3") + buf.write("\2\2\2Q\u012f\3\2\2\2S\u0131\3\2\2\2U\u0133\3\2\2\2W\u0135") + buf.write("\3\2\2\2Y\u0137\3\2\2\2[\u0139\3\2\2\2]\u013c\3\2\2\2") + buf.write("_\u0140\3\2\2\2a\u0143\3\2\2\2c\u0146\3\2\2\2e\u0148\3") + buf.write("\2\2\2g\u014b\3\2\2\2i\u014d\3\2\2\2k\u0150\3\2\2\2m\u0154") + buf.write("\3\2\2\2o\u0158\3\2\2\2q\u015b\3\2\2\2s\u015d\3\2\2\2") + buf.write("u\u0164\3\2\2\2w\u0167\3\2\2\2y\u016c\3\2\2\2{\u0172\3") + buf.write("\2\2\2}\u0177\3\2\2\2\177\u017b\3\2\2\2\u0081\u0181\3") + buf.write("\2\2\2\u0083\u0186\3\2\2\2\u0085\u018b\3\2\2\2\u0087\u0193") + buf.write("\3\2\2\2\u0089\u0198\3\2\2\2\u008b\u01ad\3\2\2\2\u008d") + buf.write("\u01b8\3\2\2\2\u008f\u01c3\3\2\2\2\u0091\u01ca\3\2\2\2") + buf.write("\u0093\u01cc\3\2\2\2\u0095\u01d1\3\2\2\2\u0097\u01d3\3") + buf.write("\2\2\2\u0099\u01df\3\2\2\2\u009b\u01e5\3\2\2\2\u009d\u009e") + buf.write("\7=\2\2\u009e\4\3\2\2\2\u009f\u00a0\7w\2\2\u00a0\u00a1") + buf.write("\7u\2\2\u00a1\u00a2\7g\2\2\u00a2\6\3\2\2\2\u00a3\u00a4") + buf.write("\7q\2\2\u00a4\u00a5\7p\2\2\u00a5\u00a6\7n\2\2\u00a6\u00a7") + buf.write("\7{\2\2\u00a7\b\3\2\2\2\u00a8\u00a9\7j\2\2\u00a9\u00aa") + buf.write("\7k\2\2\u00aa\u00ab\7f\2\2\u00ab\u00ac\7k\2\2\u00ac\u00ad") + buf.write("\7p\2\2\u00ad\u00ae\7i\2\2\u00ae\n\3\2\2\2\u00af\u00b0") + buf.write("\7c\2\2\u00b0\u00b1\7u\2\2\u00b1\f\3\2\2\2\u00b2\u00b3") + buf.write("\7u\2\2\u00b3\u00b4\7m\2\2\u00b4\u00b5\7k\2\2\u00b5\u00b6") + buf.write("\7r\2\2\u00b6\16\3\2\2\2\u00b7\u00b8\7r\2\2\u00b8\u00b9") + buf.write("\7t\2\2\u00b9\u00ba\7k\2\2\u00ba\u00bb\7p\2\2\u00bb\u00bc") + buf.write("\7v\2\2\u00bc\20\3\2\2\2\u00bd\u00be\7?\2\2\u00be\22\3") + buf.write("\2\2\2\u00bf\u00c0\7`\2\2\u00c0\24\3\2\2\2\u00c1\u00c2") + buf.write("\7,\2\2\u00c2\26\3\2\2\2\u00c3\u00c4\7\61\2\2\u00c4\30") + buf.write("\3\2\2\2\u00c5\u00c6\7\'\2\2\u00c6\32\3\2\2\2\u00c7\u00c8") + buf.write("\7-\2\2\u00c8\34\3\2\2\2\u00c9\u00ca\7/\2\2\u00ca\36\3") + buf.write("\2\2\2\u00cb\u00cc\7>\2\2\u00cc\u00cd\7>\2\2\u00cd \3") + buf.write("\2\2\2\u00ce\u00cf\7@\2\2\u00cf\u00d0\7@\2\2\u00d0\"\3") + buf.write("\2\2\2\u00d1\u00d2\7(\2\2\u00d2$\3\2\2\2\u00d3\u00d4\7") + buf.write("&\2\2\u00d4&\3\2\2\2\u00d5\u00d6\7~\2\2\u00d6(\3\2\2\2") + buf.write("\u00d7\u00d8\7d\2\2\u00d8\u00d9\7t\2\2\u00d9\u00da\7g") + buf.write("\2\2\u00da\u00db\7c\2\2\u00db\u00dc\7m\2\2\u00dc*\3\2") + buf.write("\2\2\u00dd\u00de\7e\2\2\u00de\u00df\7q\2\2\u00df\u00e0") + buf.write("\7p\2\2\u00e0\u00e1\7v\2\2\u00e1\u00e2\7k\2\2\u00e2\u00e3") + buf.write("\7p\2\2\u00e3\u00e4\7w\2\2\u00e4\u00e5\7g\2\2\u00e5,\3") + buf.write("\2\2\2\u00e6\u00e7\7t\2\2\u00e7\u00e8\7g\2\2\u00e8\u00e9") + buf.write("\7v\2\2\u00e9\u00ea\7w\2\2\u00ea\u00eb\7t\2\2\u00eb\u00ec") + buf.write("\7p\2\2\u00ec.\3\2\2\2\u00ed\u00ee\7.\2\2\u00ee\60\3\2") + buf.write("\2\2\u00ef\u00f0\7k\2\2\u00f0\u00f1\7h\2\2\u00f1\62\3") + buf.write("\2\2\2\u00f2\u00f3\7f\2\2\u00f3\u00f4\7q\2\2\u00f4\64") + buf.write("\3\2\2\2\u00f5\u00f6\7g\2\2\u00f6\u00f7\7n\2\2\u00f7\u00f8") + buf.write("\7k\2\2\u00f8\u00f9\7h\2\2\u00f9\66\3\2\2\2\u00fa\u00fb") + buf.write("\7g\2\2\u00fb\u00fc\7n\2\2\u00fc\u00fd\7u\2\2\u00fd\u00fe") + buf.write("\7g\2\2\u00fe8\3\2\2\2\u00ff\u0100\7y\2\2\u0100\u0101") + buf.write("\7j\2\2\u0101\u0102\7k\2\2\u0102\u0103\7n\2\2\u0103\u0104") + buf.write("\7g\2\2\u0104:\3\2\2\2\u0105\u0106\7w\2\2\u0106\u0107") + buf.write("\7p\2\2\u0107\u0108\7v\2\2\u0108\u0109\7k\2\2\u0109\u010a") + buf.write("\7n\2\2\u010a<\3\2\2\2\u010b\u010c\7h\2\2\u010c\u010d") + buf.write("\7q\2\2\u010d\u010e\7t\2\2\u010e>\3\2\2\2\u010f\u0110") + buf.write("\7k\2\2\u0110\u0111\7p\2\2\u0111@\3\2\2\2\u0112\u0113") + buf.write("\7u\2\2\u0113\u0114\7v\2\2\u0114\u0115\7g\2\2\u0115\u0116") + buf.write("\7r\2\2\u0116B\3\2\2\2\u0117\u0118\7h\2\2\u0118\u0119") + buf.write("\7w\2\2\u0119\u011a\7p\2\2\u011a\u011b\7e\2\2\u011bD\3") + buf.write("\2\2\2\u011c\u011d\7*\2\2\u011dF\3\2\2\2\u011e\u011f\7") + buf.write("+\2\2\u011fH\3\2\2\2\u0120\u0121\7f\2\2\u0121\u0122\7") + buf.write("g\2\2\u0122\u0123\7h\2\2\u0123J\3\2\2\2\u0124\u0125\7") + buf.write("g\2\2\u0125\u0126\7z\2\2\u0126\u0127\7v\2\2\u0127\u0128") + buf.write("\7g\2\2\u0128\u0129\7t\2\2\u0129\u012a\7p\2\2\u012aL\3") + buf.write("\2\2\2\u012b\u012c\7<\2\2\u012cN\3\2\2\2\u012d\u012e\7") + buf.write("}\2\2\u012eP\3\2\2\2\u012f\u0130\7\177\2\2\u0130R\3\2") + buf.write("\2\2\u0131\u0132\7]\2\2\u0132T\3\2\2\2\u0133\u0134\7_") + buf.write("\2\2\u0134V\3\2\2\2\u0135\u0136\7\60\2\2\u0136X\3\2\2") + buf.write("\2\u0137\u0138\7\u0080\2\2\u0138Z\3\2\2\2\u0139\u013a") + buf.write("\7\60\2\2\u013a\u013b\7\60\2\2\u013b\\\3\2\2\2\u013c\u013d") + buf.write("\7\60\2\2\u013d\u013e\7\60\2\2\u013e\u013f\7\60\2\2\u013f") + buf.write("^\3\2\2\2\u0140\u0141\7?\2\2\u0141\u0142\7?\2\2\u0142") + buf.write("`\3\2\2\2\u0143\u0144\7#\2\2\u0144\u0145\7?\2\2\u0145") + buf.write("b\3\2\2\2\u0146\u0147\7>\2\2\u0147d\3\2\2\2\u0148\u0149") + buf.write("\7>\2\2\u0149\u014a\7?\2\2\u014af\3\2\2\2\u014b\u014c") + buf.write("\7@\2\2\u014ch\3\2\2\2\u014d\u014e\7@\2\2\u014e\u014f") + buf.write("\7?\2\2\u014fj\3\2\2\2\u0150\u0151\7p\2\2\u0151\u0152") + buf.write("\7q\2\2\u0152\u0153\7v\2\2\u0153l\3\2\2\2\u0154\u0155") + buf.write("\7c\2\2\u0155\u0156\7p\2\2\u0156\u0157\7f\2\2\u0157n\3") + buf.write("\2\2\2\u0158\u0159\7q\2\2\u0159\u015a\7t\2\2\u015ap\3") + buf.write("\2\2\2\u015b\u015c\7A\2\2\u015cr\3\2\2\2\u015d\u015e\7") + buf.write("n\2\2\u015e\u015f\7c\2\2\u015f\u0160\7o\2\2\u0160\u0161") + buf.write("\7d\2\2\u0161\u0162\7f\2\2\u0162\u0163\7c\2\2\u0163t\3") + buf.write("\2\2\2\u0164\u0165\7/\2\2\u0165\u0166\7@\2\2\u0166v\3") + buf.write("\2\2\2\u0167\u0168\7v\2\2\u0168\u0169\7t\2\2\u0169\u016a") + buf.write("\7w\2\2\u016a\u016b\7g\2\2\u016bx\3\2\2\2\u016c\u016d") + buf.write("\7h\2\2\u016d\u016e\7c\2\2\u016e\u016f\7n\2\2\u016f\u0170") + buf.write("\7u\2\2\u0170\u0171\7g\2\2\u0171z\3\2\2\2\u0172\u0173") + buf.write("\7X\2\2\u0173\u0174\7q\2\2\u0174\u0175\7k\2\2\u0175\u0176") + buf.write("\7f\2\2\u0176|\3\2\2\2\u0177\u0178\7K\2\2\u0178\u0179") + buf.write("\7p\2\2\u0179\u017a\7v\2\2\u017a~\3\2\2\2\u017b\u017c") + buf.write("\7H\2\2\u017c\u017d\7n\2\2\u017d\u017e\7q\2\2\u017e\u017f") + buf.write("\7c\2\2\u017f\u0180\7v\2\2\u0180\u0080\3\2\2\2\u0181\u0182") + buf.write("\7D\2\2\u0182\u0183\7q\2\2\u0183\u0184\7q\2\2\u0184\u0185") + buf.write("\7n\2\2\u0185\u0082\3\2\2\2\u0186\u0187\7E\2\2\u0187\u0188") + buf.write("\7j\2\2\u0188\u0189\7c\2\2\u0189\u018a\7t\2\2\u018a\u0084") + buf.write("\3\2\2\2\u018b\u018c\7U\2\2\u018c\u018d\7v\2\2\u018d\u018e") + buf.write("\7t\2\2\u018e\u018f\7k\2\2\u018f\u0190\7p\2\2\u0190\u0191") + buf.write("\7i\2\2\u0191\u0086\3\2\2\2\u0192\u0194\5\u0091I\2\u0193") + buf.write("\u0192\3\2\2\2\u0194\u0195\3\2\2\2\u0195\u0193\3\2\2\2") + buf.write("\u0195\u0196\3\2\2\2\u0196\u0088\3\2\2\2\u0197\u0199\5") + buf.write("\u0091I\2\u0198\u0197\3\2\2\2\u0199\u019a\3\2\2\2\u019a") + buf.write("\u0198\3\2\2\2\u019a\u019b\3\2\2\2\u019b\u019c\3\2\2\2") + buf.write("\u019c\u019e\7\60\2\2\u019d\u019f\5\u0091I\2\u019e\u019d") + buf.write("\3\2\2\2\u019f\u01a0\3\2\2\2\u01a0\u019e\3\2\2\2\u01a0") + buf.write("\u01a1\3\2\2\2\u01a1\u01ab\3\2\2\2\u01a2\u01a4\7g\2\2") + buf.write("\u01a3\u01a5\7/\2\2\u01a4\u01a3\3\2\2\2\u01a4\u01a5\3") + buf.write("\2\2\2\u01a5\u01a7\3\2\2\2\u01a6\u01a8\5\u0091I\2\u01a7") + buf.write("\u01a6\3\2\2\2\u01a8\u01a9\3\2\2\2\u01a9\u01a7\3\2\2\2") + buf.write("\u01a9\u01aa\3\2\2\2\u01aa\u01ac\3\2\2\2\u01ab\u01a2\3") + buf.write("\2\2\2\u01ab\u01ac\3\2\2\2\u01ac\u008a\3\2\2\2\u01ad\u01b3") + buf.write("\7)\2\2\u01ae\u01b2\n\2\2\2\u01af\u01b0\7^\2\2\u01b0\u01b2") + buf.write("\t\3\2\2\u01b1\u01ae\3\2\2\2\u01b1\u01af\3\2\2\2\u01b2") + buf.write("\u01b5\3\2\2\2\u01b3\u01b1\3\2\2\2\u01b3\u01b4\3\2\2\2") + buf.write("\u01b4\u01b6\3\2\2\2\u01b5\u01b3\3\2\2\2\u01b6\u01b7\7") + buf.write(")\2\2\u01b7\u008c\3\2\2\2\u01b8\u01be\7$\2\2\u01b9\u01bd") + buf.write("\n\4\2\2\u01ba\u01bb\7^\2\2\u01bb\u01bd\t\5\2\2\u01bc") + buf.write("\u01b9\3\2\2\2\u01bc\u01ba\3\2\2\2\u01bd\u01c0\3\2\2\2") + buf.write("\u01be\u01bc\3\2\2\2\u01be\u01bf\3\2\2\2\u01bf\u01c1\3") + buf.write("\2\2\2\u01c0\u01be\3\2\2\2\u01c1\u01c2\7$\2\2\u01c2\u008e") + buf.write("\3\2\2\2\u01c3\u01c7\5\u0093J\2\u01c4\u01c6\5\u0095K\2") + buf.write("\u01c5\u01c4\3\2\2\2\u01c6\u01c9\3\2\2\2\u01c7\u01c5\3") + buf.write("\2\2\2\u01c7\u01c8\3\2\2\2\u01c8\u0090\3\2\2\2\u01c9\u01c7") + buf.write("\3\2\2\2\u01ca\u01cb\t\6\2\2\u01cb\u0092\3\2\2\2\u01cc") + buf.write("\u01cd\t\7\2\2\u01cd\u0094\3\2\2\2\u01ce\u01d2\5\u0093") + buf.write("J\2\u01cf\u01d2\5\u0091I\2\u01d0\u01d2\t\b\2\2\u01d1\u01ce") + buf.write("\3\2\2\2\u01d1\u01cf\3\2\2\2\u01d1\u01d0\3\2\2\2\u01d2") + buf.write("\u0096\3\2\2\2\u01d3\u01d4\7/\2\2\u01d4\u01d5\7/\2\2\u01d5") + buf.write("\u01d9\3\2\2\2\u01d6\u01d8\n\t\2\2\u01d7\u01d6\3\2\2\2") + buf.write("\u01d8\u01db\3\2\2\2\u01d9\u01d7\3\2\2\2\u01d9\u01da\3") + buf.write("\2\2\2\u01da\u01dc\3\2\2\2\u01db\u01d9\3\2\2\2\u01dc\u01dd") + buf.write("\bL\2\2\u01dd\u0098\3\2\2\2\u01de\u01e0\t\n\2\2\u01df") + buf.write("\u01de\3\2\2\2\u01e0\u01e1\3\2\2\2\u01e1\u01df\3\2\2\2") + buf.write("\u01e1\u01e2\3\2\2\2\u01e2\u01e3\3\2\2\2\u01e3\u01e4\b") + buf.write("M\2\2\u01e4\u009a\3\2\2\2\u01e5\u01e6\13\2\2\2\u01e6\u009c") + buf.write("\3\2\2\2\21\2\u0195\u019a\u01a0\u01a4\u01a9\u01ab\u01b1") + buf.write("\u01b3\u01bc\u01be\u01c7\u01d1\u01d9\u01e1\3\b\2\2") return buf.getvalue() @@ -285,14 +288,15 @@ class PyxellLexer(Lexer): T__62 = 63 T__63 = 64 T__64 = 65 - INT = 66 - FLOAT = 67 - CHAR = 68 - STRING = 69 - ID = 70 - COMMENT = 71 - WS = 72 - ERR = 73 + T__65 = 66 + INT = 67 + FLOAT = 68 + CHAR = 69 + STRING = 70 + ID = 71 + COMMENT = 72 + WS = 73 + ERR = 74 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -306,8 +310,8 @@ class PyxellLexer(Lexer): "'in'", "'step'", "'func'", "'('", "')'", "'def'", "'extern'", "':'", "'{'", "'}'", "'['", "']'", "'.'", "'~'", "'..'", "'...'", "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", "'not'", "'and'", - "'or'", "'?'", "'true'", "'false'", "'Void'", "'Int'", "'Float'", - "'Bool'", "'Char'", "'String'", "'->'" ] + "'or'", "'?'", "'lambda'", "'->'", "'true'", "'false'", "'Void'", + "'Int'", "'Float'", "'Bool'", "'Char'", "'String'" ] symbolicNames = [ "", "INT", "FLOAT", "CHAR", "STRING", "ID", "COMMENT", "WS", "ERR" ] @@ -322,9 +326,9 @@ class PyxellLexer(Lexer): "T__44", "T__45", "T__46", "T__47", "T__48", "T__49", "T__50", "T__51", "T__52", "T__53", "T__54", "T__55", "T__56", "T__57", "T__58", "T__59", "T__60", "T__61", - "T__62", "T__63", "T__64", "INT", "FLOAT", "CHAR", "STRING", - "ID", "DIGIT", "ID_START", "ID_CONT", "COMMENT", "WS", - "ERR" ] + "T__62", "T__63", "T__64", "T__65", "INT", "FLOAT", "CHAR", + "STRING", "ID", "DIGIT", "ID_START", "ID_CONT", "COMMENT", + "WS", "ERR" ] grammarFileName = "Pyxell.g4" diff --git a/src/antlr/PyxellLexer.tokens b/src/antlr/PyxellLexer.tokens index 4c4934c0..f94f0b97 100644 --- a/src/antlr/PyxellLexer.tokens +++ b/src/antlr/PyxellLexer.tokens @@ -63,14 +63,15 @@ T__61=62 T__62=63 T__63=64 T__64=65 -INT=66 -FLOAT=67 -CHAR=68 -STRING=69 -ID=70 -COMMENT=71 -WS=72 -ERR=73 +T__65=66 +INT=67 +FLOAT=68 +CHAR=69 +STRING=70 +ID=71 +COMMENT=72 +WS=73 +ERR=74 ';'=1 'use'=2 'only'=3 @@ -127,12 +128,13 @@ ERR=73 'and'=54 'or'=55 '?'=56 -'true'=57 -'false'=58 -'Void'=59 -'Int'=60 -'Float'=61 -'Bool'=62 -'Char'=63 -'String'=64 -'->'=65 +'lambda'=57 +'->'=58 +'true'=59 +'false'=60 +'Void'=61 +'Int'=62 +'Float'=63 +'Bool'=64 +'Char'=65 +'String'=66 diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index 584bc9d8..a7584b8d 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -8,8 +8,8 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3K") - buf.write("\u0149\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3L") + buf.write("\u0156\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16") buf.write("\t\16\4\17\t\17\3\2\7\2 \n\2\f\2\16\2#\13\2\3\2\3\2\3") buf.write("\3\3\3\3\3\3\3\5\3+\n\3\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3") @@ -25,144 +25,151 @@ def serializedATN(): buf.write("\5\6\u009f\n\6\3\7\3\7\3\7\3\7\5\7\u00a5\n\7\3\b\3\b\6") buf.write("\b\u00a9\n\b\r\b\16\b\u00aa\3\b\3\b\3\t\3\t\3\t\3\t\3") buf.write("\t\3\t\3\t\3\t\3\t\3\t\7\t\u00b9\n\t\f\t\16\t\u00bc\13") - buf.write("\t\3\t\5\t\u00bf\n\t\3\t\3\t\3\t\3\t\3\t\5\t\u00c6\n\t") + buf.write("\t\3\t\5\t\u00bf\n\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\7") + buf.write("\t\u00c9\n\t\f\t\16\t\u00cc\13\t\3\t\5\t\u00cf\n\t\3\t") + buf.write("\3\t\5\t\u00d3\n\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") buf.write("\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") - buf.write("\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\7\t\u00fc") - buf.write("\n\t\f\t\16\t\u00ff\13\t\3\t\5\t\u0102\n\t\3\t\3\t\3\t") - buf.write("\7\t\u0107\n\t\f\t\16\t\u010a\13\t\3\n\3\n\3\n\7\n\u010f") - buf.write("\n\n\f\n\16\n\u0112\13\n\3\n\3\n\3\13\3\13\3\13\3\f\3") - buf.write("\f\5\f\u011b\n\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\5\r\u0125") - buf.write("\n\r\3\16\3\16\7\16\u0129\n\16\f\16\16\16\u012c\13\16") - buf.write("\3\16\3\16\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17") - buf.write("\3\17\3\17\3\17\5\17\u013c\n\17\3\17\3\17\3\17\3\17\3") - buf.write("\17\3\17\7\17\u0144\n\17\f\17\16\17\u0147\13\17\3\17\2") - buf.write("\4\20\34\20\2\4\6\b\n\f\16\20\22\24\26\30\32\34\2\f\3") - buf.write("\2\13\25\3\2\26\27\4\2\17\20..\3\2\f\16\3\2\17\20\3\2") - buf.write("\21\22\3\2/\60\3\2\61\66\3\2;<\3\2=B\2\u017d\2!\3\2\2") - buf.write("\2\4*\3\2\2\2\6T\3\2\2\2\bV\3\2\2\2\n\u009e\3\2\2\2\f") - buf.write("\u00a0\3\2\2\2\16\u00a6\3\2\2\2\20\u00c5\3\2\2\2\22\u0110") - buf.write("\3\2\2\2\24\u0115\3\2\2\2\26\u011a\3\2\2\2\30\u0124\3") - buf.write("\2\2\2\32\u012a\3\2\2\2\34\u013b\3\2\2\2\36 \5\4\3\2\37") - buf.write("\36\3\2\2\2 #\3\2\2\2!\37\3\2\2\2!\"\3\2\2\2\"$\3\2\2") - buf.write("\2#!\3\2\2\2$%\7\2\2\3%\3\3\2\2\2&\'\5\6\4\2\'(\7\3\2") - buf.write("\2(+\3\2\2\2)+\5\n\6\2*&\3\2\2\2*)\3\2\2\2+\5\3\2\2\2") - buf.write(",-\7\4\2\2-\64\7H\2\2./\7\5\2\2/\65\5\32\16\2\60\61\7") - buf.write("\6\2\2\61\65\5\32\16\2\62\63\7\7\2\2\63\65\7H\2\2\64.") - buf.write("\3\2\2\2\64\60\3\2\2\2\64\62\3\2\2\2\64\65\3\2\2\2\65") - buf.write("U\3\2\2\2\66U\7\b\2\2\679\7\t\2\28:\5\22\n\298\3\2\2\2") - buf.write("9:\3\2\2\2:U\3\2\2\2;<\5\34\17\2\7\n\2\2>@") - buf.write("\5\22\n\2?=\3\2\2\2?@\3\2\2\2@U\3\2\2\2AB\5\b\5\2BC\7") - buf.write("\n\2\2CE\3\2\2\2DA\3\2\2\2EH\3\2\2\2FD\3\2\2\2FG\3\2\2") - buf.write("\2GI\3\2\2\2HF\3\2\2\2IU\5\22\n\2JK\5\20\t\2KL\t\2\2\2") - buf.write("LM\7\n\2\2MN\5\20\t\2NU\3\2\2\2OU\t\3\2\2PR\7\30\2\2Q") - buf.write("S\5\22\n\2RQ\3\2\2\2RS\3\2\2\2SU\3\2\2\2T,\3\2\2\2T\66") - buf.write("\3\2\2\2T\67\3\2\2\2T;\3\2\2\2TF\3\2\2\2TJ\3\2\2\2TO\3") - buf.write("\2\2\2TP\3\2\2\2U\7\3\2\2\2V[\5\20\t\2WX\7\31\2\2XZ\5") - buf.write("\20\t\2YW\3\2\2\2Z]\3\2\2\2[Y\3\2\2\2[\\\3\2\2\2\\\t\3") - buf.write("\2\2\2][\3\2\2\2^_\7\32\2\2_`\5\20\t\2`a\7\33\2\2ai\5") - buf.write("\16\b\2bc\7\34\2\2cd\5\20\t\2de\7\33\2\2ef\5\16\b\2fh") - buf.write("\3\2\2\2gb\3\2\2\2hk\3\2\2\2ig\3\2\2\2ij\3\2\2\2jo\3\2") - buf.write("\2\2ki\3\2\2\2lm\7\35\2\2mn\7\33\2\2np\5\16\b\2ol\3\2") - buf.write("\2\2op\3\2\2\2p\u009f\3\2\2\2qr\7\36\2\2rs\5\20\t\2st") - buf.write("\7\33\2\2tu\5\16\b\2u\u009f\3\2\2\2vw\7\37\2\2wx\5\20") - buf.write("\t\2xy\7\33\2\2yz\5\16\b\2z\u009f\3\2\2\2{|\7 \2\2|}\5") - buf.write("\22\n\2}~\7!\2\2~\u0081\5\22\n\2\177\u0080\7\"\2\2\u0080") - buf.write("\u0082\5\22\n\2\u0081\177\3\2\2\2\u0081\u0082\3\2\2\2") - buf.write("\u0082\u0083\3\2\2\2\u0083\u0084\7\33\2\2\u0084\u0085") - buf.write("\5\16\b\2\u0085\u009f\3\2\2\2\u0086\u0087\7#\2\2\u0087") - buf.write("\u0088\7H\2\2\u0088\u008e\7$\2\2\u0089\u008a\5\f\7\2\u008a") - buf.write("\u008b\7\31\2\2\u008b\u008d\3\2\2\2\u008c\u0089\3\2\2") - buf.write("\2\u008d\u0090\3\2\2\2\u008e\u008c\3\2\2\2\u008e\u008f") - buf.write("\3\2\2\2\u008f\u0092\3\2\2\2\u0090\u008e\3\2\2\2\u0091") - buf.write("\u0093\5\f\7\2\u0092\u0091\3\2\2\2\u0092\u0093\3\2\2\2") - buf.write("\u0093\u0094\3\2\2\2\u0094\u0096\7%\2\2\u0095\u0097\5") - buf.write("\34\17\2\u0096\u0095\3\2\2\2\u0096\u0097\3\2\2\2\u0097") - buf.write("\u009c\3\2\2\2\u0098\u0099\7&\2\2\u0099\u009d\5\16\b\2") - buf.write("\u009a\u009b\7\'\2\2\u009b\u009d\7\3\2\2\u009c\u0098\3") - buf.write("\2\2\2\u009c\u009a\3\2\2\2\u009d\u009f\3\2\2\2\u009e^") - buf.write("\3\2\2\2\u009eq\3\2\2\2\u009ev\3\2\2\2\u009e{\3\2\2\2") - buf.write("\u009e\u0086\3\2\2\2\u009f\13\3\2\2\2\u00a0\u00a1\5\34") - buf.write("\17\2\u00a1\u00a4\7H\2\2\u00a2\u00a3\7(\2\2\u00a3\u00a5") - buf.write("\5\20\t\2\u00a4\u00a2\3\2\2\2\u00a4\u00a5\3\2\2\2\u00a5") - buf.write("\r\3\2\2\2\u00a6\u00a8\7)\2\2\u00a7\u00a9\5\4\3\2\u00a8") - buf.write("\u00a7\3\2\2\2\u00a9\u00aa\3\2\2\2\u00aa\u00a8\3\2\2\2") - buf.write("\u00aa\u00ab\3\2\2\2\u00ab\u00ac\3\2\2\2\u00ac\u00ad\7") - buf.write("*\2\2\u00ad\17\3\2\2\2\u00ae\u00af\b\t\1\2\u00af\u00c6") - buf.write("\5\30\r\2\u00b0\u00b1\7$\2\2\u00b1\u00b2\5\22\n\2\u00b2") - buf.write("\u00b3\7%\2\2\u00b3\u00c6\3\2\2\2\u00b4\u00ba\7+\2\2\u00b5") - buf.write("\u00b6\5\20\t\2\u00b6\u00b7\7\31\2\2\u00b7\u00b9\3\2\2") - buf.write("\2\u00b8\u00b5\3\2\2\2\u00b9\u00bc\3\2\2\2\u00ba\u00b8") - buf.write("\3\2\2\2\u00ba\u00bb\3\2\2\2\u00bb\u00be\3\2\2\2\u00bc") - buf.write("\u00ba\3\2\2\2\u00bd\u00bf\5\20\t\2\u00be\u00bd\3\2\2") - buf.write("\2\u00be\u00bf\3\2\2\2\u00bf\u00c0\3\2\2\2\u00c0\u00c6") - buf.write("\7,\2\2\u00c1\u00c2\t\4\2\2\u00c2\u00c6\5\20\t\20\u00c3") - buf.write("\u00c4\7\67\2\2\u00c4\u00c6\5\20\t\6\u00c5\u00ae\3\2\2") - buf.write("\2\u00c5\u00b0\3\2\2\2\u00c5\u00b4\3\2\2\2\u00c5\u00c1") - buf.write("\3\2\2\2\u00c5\u00c3\3\2\2\2\u00c6\u0108\3\2\2\2\u00c7") - buf.write("\u00c8\f\21\2\2\u00c8\u00c9\7\13\2\2\u00c9\u0107\5\20") - buf.write("\t\21\u00ca\u00cb\f\17\2\2\u00cb\u00cc\t\5\2\2\u00cc\u0107") - buf.write("\5\20\t\20\u00cd\u00ce\f\16\2\2\u00ce\u00cf\t\6\2\2\u00cf") - buf.write("\u0107\5\20\t\17\u00d0\u00d1\f\r\2\2\u00d1\u00d2\t\7\2") - buf.write("\2\u00d2\u0107\5\20\t\16\u00d3\u00d4\f\f\2\2\u00d4\u00d5") - buf.write("\7\23\2\2\u00d5\u0107\5\20\t\r\u00d6\u00d7\f\13\2\2\u00d7") - buf.write("\u00d8\7\24\2\2\u00d8\u0107\5\20\t\f\u00d9\u00da\f\n\2") - buf.write("\2\u00da\u00db\7\25\2\2\u00db\u0107\5\20\t\13\u00dc\u00dd") - buf.write("\f\t\2\2\u00dd\u00de\t\b\2\2\u00de\u0107\5\20\t\n\u00df") - buf.write("\u00e0\f\7\2\2\u00e0\u00e1\t\t\2\2\u00e1\u0107\5\20\t") - buf.write("\7\u00e2\u00e3\f\5\2\2\u00e3\u00e4\78\2\2\u00e4\u0107") - buf.write("\5\20\t\5\u00e5\u00e6\f\4\2\2\u00e6\u00e7\79\2\2\u00e7") - buf.write("\u0107\5\20\t\4\u00e8\u00e9\f\3\2\2\u00e9\u00ea\7:\2\2") - buf.write("\u00ea\u00eb\5\20\t\2\u00eb\u00ec\7(\2\2\u00ec\u00ed\5") - buf.write("\20\t\3\u00ed\u0107\3\2\2\2\u00ee\u00ef\f\24\2\2\u00ef") - buf.write("\u00f0\7+\2\2\u00f0\u00f1\5\22\n\2\u00f1\u00f2\7,\2\2") - buf.write("\u00f2\u0107\3\2\2\2\u00f3\u00f4\f\23\2\2\u00f4\u00f5") - buf.write("\7-\2\2\u00f5\u0107\7H\2\2\u00f6\u00f7\f\22\2\2\u00f7") - buf.write("\u00fd\7$\2\2\u00f8\u00f9\5\26\f\2\u00f9\u00fa\7\31\2") - buf.write("\2\u00fa\u00fc\3\2\2\2\u00fb\u00f8\3\2\2\2\u00fc\u00ff") - buf.write("\3\2\2\2\u00fd\u00fb\3\2\2\2\u00fd\u00fe\3\2\2\2\u00fe") - buf.write("\u0101\3\2\2\2\u00ff\u00fd\3\2\2\2\u0100\u0102\5\26\f") - buf.write("\2\u0101\u0100\3\2\2\2\u0101\u0102\3\2\2\2\u0102\u0103") - buf.write("\3\2\2\2\u0103\u0107\7%\2\2\u0104\u0105\f\b\2\2\u0105") - buf.write("\u0107\7\60\2\2\u0106\u00c7\3\2\2\2\u0106\u00ca\3\2\2") - buf.write("\2\u0106\u00cd\3\2\2\2\u0106\u00d0\3\2\2\2\u0106\u00d3") - buf.write("\3\2\2\2\u0106\u00d6\3\2\2\2\u0106\u00d9\3\2\2\2\u0106") - buf.write("\u00dc\3\2\2\2\u0106\u00df\3\2\2\2\u0106\u00e2\3\2\2\2") - buf.write("\u0106\u00e5\3\2\2\2\u0106\u00e8\3\2\2\2\u0106\u00ee\3") - buf.write("\2\2\2\u0106\u00f3\3\2\2\2\u0106\u00f6\3\2\2\2\u0106\u0104") - buf.write("\3\2\2\2\u0107\u010a\3\2\2\2\u0108\u0106\3\2\2\2\u0108") - buf.write("\u0109\3\2\2\2\u0109\21\3\2\2\2\u010a\u0108\3\2\2\2\u010b") - buf.write("\u010c\5\20\t\2\u010c\u010d\7\31\2\2\u010d\u010f\3\2\2") - buf.write("\2\u010e\u010b\3\2\2\2\u010f\u0112\3\2\2\2\u0110\u010e") - buf.write("\3\2\2\2\u0110\u0111\3\2\2\2\u0111\u0113\3\2\2\2\u0112") - buf.write("\u0110\3\2\2\2\u0113\u0114\5\20\t\2\u0114\23\3\2\2\2\u0115") - buf.write("\u0116\5\22\n\2\u0116\u0117\7\2\2\3\u0117\25\3\2\2\2\u0118") - buf.write("\u0119\7H\2\2\u0119\u011b\7\n\2\2\u011a\u0118\3\2\2\2") - buf.write("\u011a\u011b\3\2\2\2\u011b\u011c\3\2\2\2\u011c\u011d\5") - buf.write("\20\t\2\u011d\27\3\2\2\2\u011e\u0125\7D\2\2\u011f\u0125") - buf.write("\7E\2\2\u0120\u0125\t\n\2\2\u0121\u0125\7F\2\2\u0122\u0125") - buf.write("\7G\2\2\u0123\u0125\7H\2\2\u0124\u011e\3\2\2\2\u0124\u011f") - buf.write("\3\2\2\2\u0124\u0120\3\2\2\2\u0124\u0121\3\2\2\2\u0124") - buf.write("\u0122\3\2\2\2\u0124\u0123\3\2\2\2\u0125\31\3\2\2\2\u0126") - buf.write("\u0127\7H\2\2\u0127\u0129\7\31\2\2\u0128\u0126\3\2\2\2") - buf.write("\u0129\u012c\3\2\2\2\u012a\u0128\3\2\2\2\u012a\u012b\3") - buf.write("\2\2\2\u012b\u012d\3\2\2\2\u012c\u012a\3\2\2\2\u012d\u012e") - buf.write("\7H\2\2\u012e\33\3\2\2\2\u012f\u0130\b\17\1\2\u0130\u013c") - buf.write("\t\13\2\2\u0131\u0132\7$\2\2\u0132\u0133\5\34\17\2\u0133") - buf.write("\u0134\7%\2\2\u0134\u013c\3\2\2\2\u0135\u0136\7+\2\2\u0136") - buf.write("\u0137\5\34\17\2\u0137\u0138\7,\2\2\u0138\u013c\3\2\2") - buf.write("\2\u0139\u013a\7C\2\2\u013a\u013c\5\34\17\3\u013b\u012f") - buf.write("\3\2\2\2\u013b\u0131\3\2\2\2\u013b\u0135\3\2\2\2\u013b") - buf.write("\u0139\3\2\2\2\u013c\u0145\3\2\2\2\u013d\u013e\f\5\2\2") - buf.write("\u013e\u013f\7\f\2\2\u013f\u0144\5\34\17\5\u0140\u0141") - buf.write("\f\4\2\2\u0141\u0142\7C\2\2\u0142\u0144\5\34\17\4\u0143") - buf.write("\u013d\3\2\2\2\u0143\u0140\3\2\2\2\u0144\u0147\3\2\2\2") - buf.write("\u0145\u0143\3\2\2\2\u0145\u0146\3\2\2\2\u0146\35\3\2") - buf.write("\2\2\u0147\u0145\3\2\2\2#!*\649?FRT[io\u0081\u008e\u0092") - buf.write("\u0096\u009c\u009e\u00a4\u00aa\u00ba\u00be\u00c5\u00fd") - buf.write("\u0101\u0106\u0108\u0110\u011a\u0124\u012a\u013b\u0143") - buf.write("\u0145") + buf.write("\t\3\t\3\t\7\t\u0109\n\t\f\t\16\t\u010c\13\t\3\t\5\t\u010f") + buf.write("\n\t\3\t\3\t\3\t\7\t\u0114\n\t\f\t\16\t\u0117\13\t\3\n") + buf.write("\3\n\3\n\7\n\u011c\n\n\f\n\16\n\u011f\13\n\3\n\3\n\3\13") + buf.write("\3\13\3\13\3\f\3\f\5\f\u0128\n\f\3\f\3\f\3\r\3\r\3\r\3") + buf.write("\r\3\r\3\r\5\r\u0132\n\r\3\16\3\16\7\16\u0136\n\16\f\16") + buf.write("\16\16\u0139\13\16\3\16\3\16\3\17\3\17\3\17\3\17\3\17") + buf.write("\3\17\3\17\3\17\3\17\3\17\3\17\3\17\5\17\u0149\n\17\3") + buf.write("\17\3\17\3\17\3\17\3\17\3\17\7\17\u0151\n\17\f\17\16\17") + buf.write("\u0154\13\17\3\17\2\4\20\34\20\2\4\6\b\n\f\16\20\22\24") + buf.write("\26\30\32\34\2\f\3\2\13\25\3\2\26\27\4\2\17\20..\3\2\f") + buf.write("\16\3\2\17\20\3\2\21\22\3\2/\60\3\2\61\66\3\2=>\3\2?D") + buf.write("\2\u018d\2!\3\2\2\2\4*\3\2\2\2\6T\3\2\2\2\bV\3\2\2\2\n") + buf.write("\u009e\3\2\2\2\f\u00a0\3\2\2\2\16\u00a6\3\2\2\2\20\u00d2") + buf.write("\3\2\2\2\22\u011d\3\2\2\2\24\u0122\3\2\2\2\26\u0127\3") + buf.write("\2\2\2\30\u0131\3\2\2\2\32\u0137\3\2\2\2\34\u0148\3\2") + buf.write("\2\2\36 \5\4\3\2\37\36\3\2\2\2 #\3\2\2\2!\37\3\2\2\2!") + buf.write("\"\3\2\2\2\"$\3\2\2\2#!\3\2\2\2$%\7\2\2\3%\3\3\2\2\2&") + buf.write("\'\5\6\4\2\'(\7\3\2\2(+\3\2\2\2)+\5\n\6\2*&\3\2\2\2*)") + buf.write("\3\2\2\2+\5\3\2\2\2,-\7\4\2\2-\64\7I\2\2./\7\5\2\2/\65") + buf.write("\5\32\16\2\60\61\7\6\2\2\61\65\5\32\16\2\62\63\7\7\2\2") + buf.write("\63\65\7I\2\2\64.\3\2\2\2\64\60\3\2\2\2\64\62\3\2\2\2") + buf.write("\64\65\3\2\2\2\65U\3\2\2\2\66U\7\b\2\2\679\7\t\2\28:\5") + buf.write("\22\n\298\3\2\2\29:\3\2\2\2:U\3\2\2\2;<\5\34\17\2\7\n\2\2>@\5\22\n\2?=\3\2\2\2?@\3\2\2\2@U\3\2\2") + buf.write("\2AB\5\b\5\2BC\7\n\2\2CE\3\2\2\2DA\3\2\2\2EH\3\2\2\2F") + buf.write("D\3\2\2\2FG\3\2\2\2GI\3\2\2\2HF\3\2\2\2IU\5\22\n\2JK\5") + buf.write("\20\t\2KL\t\2\2\2LM\7\n\2\2MN\5\20\t\2NU\3\2\2\2OU\t\3") + buf.write("\2\2PR\7\30\2\2QS\5\22\n\2RQ\3\2\2\2RS\3\2\2\2SU\3\2\2") + buf.write("\2T,\3\2\2\2T\66\3\2\2\2T\67\3\2\2\2T;\3\2\2\2TF\3\2\2") + buf.write("\2TJ\3\2\2\2TO\3\2\2\2TP\3\2\2\2U\7\3\2\2\2V[\5\20\t\2") + buf.write("WX\7\31\2\2XZ\5\20\t\2YW\3\2\2\2Z]\3\2\2\2[Y\3\2\2\2[") + buf.write("\\\3\2\2\2\\\t\3\2\2\2][\3\2\2\2^_\7\32\2\2_`\5\20\t\2") + buf.write("`a\7\33\2\2ai\5\16\b\2bc\7\34\2\2cd\5\20\t\2de\7\33\2") + buf.write("\2ef\5\16\b\2fh\3\2\2\2gb\3\2\2\2hk\3\2\2\2ig\3\2\2\2") + buf.write("ij\3\2\2\2jo\3\2\2\2ki\3\2\2\2lm\7\35\2\2mn\7\33\2\2n") + buf.write("p\5\16\b\2ol\3\2\2\2op\3\2\2\2p\u009f\3\2\2\2qr\7\36\2") + buf.write("\2rs\5\20\t\2st\7\33\2\2tu\5\16\b\2u\u009f\3\2\2\2vw\7") + buf.write("\37\2\2wx\5\20\t\2xy\7\33\2\2yz\5\16\b\2z\u009f\3\2\2") + buf.write("\2{|\7 \2\2|}\5\22\n\2}~\7!\2\2~\u0081\5\22\n\2\177\u0080") + buf.write("\7\"\2\2\u0080\u0082\5\22\n\2\u0081\177\3\2\2\2\u0081") + buf.write("\u0082\3\2\2\2\u0082\u0083\3\2\2\2\u0083\u0084\7\33\2") + buf.write("\2\u0084\u0085\5\16\b\2\u0085\u009f\3\2\2\2\u0086\u0087") + buf.write("\7#\2\2\u0087\u0088\7I\2\2\u0088\u008e\7$\2\2\u0089\u008a") + buf.write("\5\f\7\2\u008a\u008b\7\31\2\2\u008b\u008d\3\2\2\2\u008c") + buf.write("\u0089\3\2\2\2\u008d\u0090\3\2\2\2\u008e\u008c\3\2\2\2") + buf.write("\u008e\u008f\3\2\2\2\u008f\u0092\3\2\2\2\u0090\u008e\3") + buf.write("\2\2\2\u0091\u0093\5\f\7\2\u0092\u0091\3\2\2\2\u0092\u0093") + buf.write("\3\2\2\2\u0093\u0094\3\2\2\2\u0094\u0096\7%\2\2\u0095") + buf.write("\u0097\5\34\17\2\u0096\u0095\3\2\2\2\u0096\u0097\3\2\2") + buf.write("\2\u0097\u009c\3\2\2\2\u0098\u0099\7&\2\2\u0099\u009d") + buf.write("\5\16\b\2\u009a\u009b\7\'\2\2\u009b\u009d\7\3\2\2\u009c") + buf.write("\u0098\3\2\2\2\u009c\u009a\3\2\2\2\u009d\u009f\3\2\2\2") + buf.write("\u009e^\3\2\2\2\u009eq\3\2\2\2\u009ev\3\2\2\2\u009e{\3") + buf.write("\2\2\2\u009e\u0086\3\2\2\2\u009f\13\3\2\2\2\u00a0\u00a1") + buf.write("\5\34\17\2\u00a1\u00a4\7I\2\2\u00a2\u00a3\7(\2\2\u00a3") + buf.write("\u00a5\5\20\t\2\u00a4\u00a2\3\2\2\2\u00a4\u00a5\3\2\2") + buf.write("\2\u00a5\r\3\2\2\2\u00a6\u00a8\7)\2\2\u00a7\u00a9\5\4") + buf.write("\3\2\u00a8\u00a7\3\2\2\2\u00a9\u00aa\3\2\2\2\u00aa\u00a8") + buf.write("\3\2\2\2\u00aa\u00ab\3\2\2\2\u00ab\u00ac\3\2\2\2\u00ac") + buf.write("\u00ad\7*\2\2\u00ad\17\3\2\2\2\u00ae\u00af\b\t\1\2\u00af") + buf.write("\u00d3\5\30\r\2\u00b0\u00b1\7$\2\2\u00b1\u00b2\5\22\n") + buf.write("\2\u00b2\u00b3\7%\2\2\u00b3\u00d3\3\2\2\2\u00b4\u00ba") + buf.write("\7+\2\2\u00b5\u00b6\5\20\t\2\u00b6\u00b7\7\31\2\2\u00b7") + buf.write("\u00b9\3\2\2\2\u00b8\u00b5\3\2\2\2\u00b9\u00bc\3\2\2\2") + buf.write("\u00ba\u00b8\3\2\2\2\u00ba\u00bb\3\2\2\2\u00bb\u00be\3") + buf.write("\2\2\2\u00bc\u00ba\3\2\2\2\u00bd\u00bf\5\20\t\2\u00be") + buf.write("\u00bd\3\2\2\2\u00be\u00bf\3\2\2\2\u00bf\u00c0\3\2\2\2") + buf.write("\u00c0\u00d3\7,\2\2\u00c1\u00c2\t\4\2\2\u00c2\u00d3\5") + buf.write("\20\t\21\u00c3\u00c4\7\67\2\2\u00c4\u00d3\5\20\t\7\u00c5") + buf.write("\u00ca\7;\2\2\u00c6\u00c7\7I\2\2\u00c7\u00c9\7\31\2\2") + buf.write("\u00c8\u00c6\3\2\2\2\u00c9\u00cc\3\2\2\2\u00ca\u00c8\3") + buf.write("\2\2\2\u00ca\u00cb\3\2\2\2\u00cb\u00ce\3\2\2\2\u00cc\u00ca") + buf.write("\3\2\2\2\u00cd\u00cf\7I\2\2\u00ce\u00cd\3\2\2\2\u00ce") + buf.write("\u00cf\3\2\2\2\u00cf\u00d0\3\2\2\2\u00d0\u00d1\7<\2\2") + buf.write("\u00d1\u00d3\5\20\t\3\u00d2\u00ae\3\2\2\2\u00d2\u00b0") + buf.write("\3\2\2\2\u00d2\u00b4\3\2\2\2\u00d2\u00c1\3\2\2\2\u00d2") + buf.write("\u00c3\3\2\2\2\u00d2\u00c5\3\2\2\2\u00d3\u0115\3\2\2\2") + buf.write("\u00d4\u00d5\f\22\2\2\u00d5\u00d6\7\13\2\2\u00d6\u0114") + buf.write("\5\20\t\22\u00d7\u00d8\f\20\2\2\u00d8\u00d9\t\5\2\2\u00d9") + buf.write("\u0114\5\20\t\21\u00da\u00db\f\17\2\2\u00db\u00dc\t\6") + buf.write("\2\2\u00dc\u0114\5\20\t\20\u00dd\u00de\f\16\2\2\u00de") + buf.write("\u00df\t\7\2\2\u00df\u0114\5\20\t\17\u00e0\u00e1\f\r\2") + buf.write("\2\u00e1\u00e2\7\23\2\2\u00e2\u0114\5\20\t\16\u00e3\u00e4") + buf.write("\f\f\2\2\u00e4\u00e5\7\24\2\2\u00e5\u0114\5\20\t\r\u00e6") + buf.write("\u00e7\f\13\2\2\u00e7\u00e8\7\25\2\2\u00e8\u0114\5\20") + buf.write("\t\f\u00e9\u00ea\f\n\2\2\u00ea\u00eb\t\b\2\2\u00eb\u0114") + buf.write("\5\20\t\13\u00ec\u00ed\f\b\2\2\u00ed\u00ee\t\t\2\2\u00ee") + buf.write("\u0114\5\20\t\b\u00ef\u00f0\f\6\2\2\u00f0\u00f1\78\2\2") + buf.write("\u00f1\u0114\5\20\t\6\u00f2\u00f3\f\5\2\2\u00f3\u00f4") + buf.write("\79\2\2\u00f4\u0114\5\20\t\5\u00f5\u00f6\f\4\2\2\u00f6") + buf.write("\u00f7\7:\2\2\u00f7\u00f8\5\20\t\2\u00f8\u00f9\7(\2\2") + buf.write("\u00f9\u00fa\5\20\t\4\u00fa\u0114\3\2\2\2\u00fb\u00fc") + buf.write("\f\25\2\2\u00fc\u00fd\7+\2\2\u00fd\u00fe\5\22\n\2\u00fe") + buf.write("\u00ff\7,\2\2\u00ff\u0114\3\2\2\2\u0100\u0101\f\24\2\2") + buf.write("\u0101\u0102\7-\2\2\u0102\u0114\7I\2\2\u0103\u0104\f\23") + buf.write("\2\2\u0104\u010a\7$\2\2\u0105\u0106\5\26\f\2\u0106\u0107") + buf.write("\7\31\2\2\u0107\u0109\3\2\2\2\u0108\u0105\3\2\2\2\u0109") + buf.write("\u010c\3\2\2\2\u010a\u0108\3\2\2\2\u010a\u010b\3\2\2\2") + buf.write("\u010b\u010e\3\2\2\2\u010c\u010a\3\2\2\2\u010d\u010f\5") + buf.write("\26\f\2\u010e\u010d\3\2\2\2\u010e\u010f\3\2\2\2\u010f") + buf.write("\u0110\3\2\2\2\u0110\u0114\7%\2\2\u0111\u0112\f\t\2\2") + buf.write("\u0112\u0114\7\60\2\2\u0113\u00d4\3\2\2\2\u0113\u00d7") + buf.write("\3\2\2\2\u0113\u00da\3\2\2\2\u0113\u00dd\3\2\2\2\u0113") + buf.write("\u00e0\3\2\2\2\u0113\u00e3\3\2\2\2\u0113\u00e6\3\2\2\2") + buf.write("\u0113\u00e9\3\2\2\2\u0113\u00ec\3\2\2\2\u0113\u00ef\3") + buf.write("\2\2\2\u0113\u00f2\3\2\2\2\u0113\u00f5\3\2\2\2\u0113\u00fb") + buf.write("\3\2\2\2\u0113\u0100\3\2\2\2\u0113\u0103\3\2\2\2\u0113") + buf.write("\u0111\3\2\2\2\u0114\u0117\3\2\2\2\u0115\u0113\3\2\2\2") + buf.write("\u0115\u0116\3\2\2\2\u0116\21\3\2\2\2\u0117\u0115\3\2") + buf.write("\2\2\u0118\u0119\5\20\t\2\u0119\u011a\7\31\2\2\u011a\u011c") + buf.write("\3\2\2\2\u011b\u0118\3\2\2\2\u011c\u011f\3\2\2\2\u011d") + buf.write("\u011b\3\2\2\2\u011d\u011e\3\2\2\2\u011e\u0120\3\2\2\2") + buf.write("\u011f\u011d\3\2\2\2\u0120\u0121\5\20\t\2\u0121\23\3\2") + buf.write("\2\2\u0122\u0123\5\22\n\2\u0123\u0124\7\2\2\3\u0124\25") + buf.write("\3\2\2\2\u0125\u0126\7I\2\2\u0126\u0128\7\n\2\2\u0127") + buf.write("\u0125\3\2\2\2\u0127\u0128\3\2\2\2\u0128\u0129\3\2\2\2") + buf.write("\u0129\u012a\5\20\t\2\u012a\27\3\2\2\2\u012b\u0132\7E") + buf.write("\2\2\u012c\u0132\7F\2\2\u012d\u0132\t\n\2\2\u012e\u0132") + buf.write("\7G\2\2\u012f\u0132\7H\2\2\u0130\u0132\7I\2\2\u0131\u012b") + buf.write("\3\2\2\2\u0131\u012c\3\2\2\2\u0131\u012d\3\2\2\2\u0131") + buf.write("\u012e\3\2\2\2\u0131\u012f\3\2\2\2\u0131\u0130\3\2\2\2") + buf.write("\u0132\31\3\2\2\2\u0133\u0134\7I\2\2\u0134\u0136\7\31") + buf.write("\2\2\u0135\u0133\3\2\2\2\u0136\u0139\3\2\2\2\u0137\u0135") + buf.write("\3\2\2\2\u0137\u0138\3\2\2\2\u0138\u013a\3\2\2\2\u0139") + buf.write("\u0137\3\2\2\2\u013a\u013b\7I\2\2\u013b\33\3\2\2\2\u013c") + buf.write("\u013d\b\17\1\2\u013d\u0149\t\13\2\2\u013e\u013f\7$\2") + buf.write("\2\u013f\u0140\5\34\17\2\u0140\u0141\7%\2\2\u0141\u0149") + buf.write("\3\2\2\2\u0142\u0143\7+\2\2\u0143\u0144\5\34\17\2\u0144") + buf.write("\u0145\7,\2\2\u0145\u0149\3\2\2\2\u0146\u0147\7<\2\2\u0147") + buf.write("\u0149\5\34\17\3\u0148\u013c\3\2\2\2\u0148\u013e\3\2\2") + buf.write("\2\u0148\u0142\3\2\2\2\u0148\u0146\3\2\2\2\u0149\u0152") + buf.write("\3\2\2\2\u014a\u014b\f\5\2\2\u014b\u014c\7\f\2\2\u014c") + buf.write("\u0151\5\34\17\5\u014d\u014e\f\4\2\2\u014e\u014f\7<\2") + buf.write("\2\u014f\u0151\5\34\17\4\u0150\u014a\3\2\2\2\u0150\u014d") + buf.write("\3\2\2\2\u0151\u0154\3\2\2\2\u0152\u0150\3\2\2\2\u0152") + buf.write("\u0153\3\2\2\2\u0153\35\3\2\2\2\u0154\u0152\3\2\2\2%!") + buf.write("*\649?FRT[io\u0081\u008e\u0092\u0096\u009c\u009e\u00a4") + buf.write("\u00aa\u00ba\u00be\u00ca\u00ce\u00d2\u010a\u010e\u0113") + buf.write("\u0115\u011d\u0127\u0131\u0137\u0148\u0150\u0152") return buf.getvalue() @@ -185,8 +192,8 @@ class PyxellParser ( Parser ): "'def'", "'extern'", "':'", "'{'", "'}'", "'['", "']'", "'.'", "'~'", "'..'", "'...'", "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", "'not'", "'and'", "'or'", "'?'", - "'true'", "'false'", "'Void'", "'Int'", "'Float'", - "'Bool'", "'Char'", "'String'", "'->'" ] + "'lambda'", "'->'", "'true'", "'false'", "'Void'", + "'Int'", "'Float'", "'Bool'", "'Char'", "'String'" ] symbolicNames = [ "", "", "", "", "", "", "", "", @@ -204,8 +211,8 @@ class PyxellParser ( Parser ): "", "", "", "", "", "", "", "", "", "", "", "", - "", "", "INT", "FLOAT", "CHAR", - "STRING", "ID", "COMMENT", "WS", "ERR" ] + "", "", "", "INT", "FLOAT", + "CHAR", "STRING", "ID", "COMMENT", "WS", "ERR" ] RULE_program = 0 RULE_stmt = 1 @@ -292,14 +299,15 @@ class PyxellParser ( Parser ): T__62=63 T__63=64 T__64=65 - INT=66 - FLOAT=67 - CHAR=68 - STRING=69 - ID=70 - COMMENT=71 - WS=72 - ERR=73 + T__65=66 + INT=67 + FLOAT=68 + CHAR=69 + STRING=70 + ID=71 + COMMENT=72 + WS=73 + ERR=74 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -348,7 +356,7 @@ def program(self): self.state = 31 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__40) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__52) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0): + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__40) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__52) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0): self.state = 28 self.stmt() self.state = 33 @@ -400,7 +408,7 @@ def stmt(self): self.state = 40 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__1, PyxellParser.T__5, PyxellParser.T__6, PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__19, PyxellParser.T__20, PyxellParser.T__21, PyxellParser.T__33, PyxellParser.T__40, PyxellParser.T__43, PyxellParser.T__52, PyxellParser.T__56, PyxellParser.T__57, PyxellParser.T__58, PyxellParser.T__59, PyxellParser.T__60, PyxellParser.T__61, PyxellParser.T__62, PyxellParser.T__63, PyxellParser.T__64, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: + if token in [PyxellParser.T__1, PyxellParser.T__5, PyxellParser.T__6, PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__19, PyxellParser.T__20, PyxellParser.T__21, PyxellParser.T__33, PyxellParser.T__40, PyxellParser.T__43, PyxellParser.T__52, PyxellParser.T__56, PyxellParser.T__57, PyxellParser.T__58, PyxellParser.T__59, PyxellParser.T__60, PyxellParser.T__61, PyxellParser.T__62, PyxellParser.T__63, PyxellParser.T__64, PyxellParser.T__65, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: self.enterOuterAlt(localctx, 1) self.state = 36 self.simple_stmt() @@ -654,7 +662,7 @@ def simple_stmt(self): self.state = 55 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__52 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__52 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): self.state = 54 self.tuple_expr() @@ -740,7 +748,7 @@ def simple_stmt(self): self.state = 80 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__52 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__52 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): self.state = 79 self.tuple_expr() @@ -1072,7 +1080,7 @@ def compound_stmt(self): self.state = 144 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 34)) & ~0x3f) == 0 and ((1 << (_la - 34)) & ((1 << (PyxellParser.T__33 - 34)) | (1 << (PyxellParser.T__40 - 34)) | (1 << (PyxellParser.T__58 - 34)) | (1 << (PyxellParser.T__59 - 34)) | (1 << (PyxellParser.T__60 - 34)) | (1 << (PyxellParser.T__61 - 34)) | (1 << (PyxellParser.T__62 - 34)) | (1 << (PyxellParser.T__63 - 34)) | (1 << (PyxellParser.T__64 - 34)))) != 0): + if ((((_la - 34)) & ~0x3f) == 0 and ((1 << (_la - 34)) & ((1 << (PyxellParser.T__33 - 34)) | (1 << (PyxellParser.T__40 - 34)) | (1 << (PyxellParser.T__57 - 34)) | (1 << (PyxellParser.T__60 - 34)) | (1 << (PyxellParser.T__61 - 34)) | (1 << (PyxellParser.T__62 - 34)) | (1 << (PyxellParser.T__63 - 34)) | (1 << (PyxellParser.T__64 - 34)) | (1 << (PyxellParser.T__65 - 34)))) != 0): self.state = 143 self.func_arg() @@ -1082,7 +1090,7 @@ def compound_stmt(self): self.state = 148 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 34)) & ~0x3f) == 0 and ((1 << (_la - 34)) & ((1 << (PyxellParser.T__33 - 34)) | (1 << (PyxellParser.T__40 - 34)) | (1 << (PyxellParser.T__58 - 34)) | (1 << (PyxellParser.T__59 - 34)) | (1 << (PyxellParser.T__60 - 34)) | (1 << (PyxellParser.T__61 - 34)) | (1 << (PyxellParser.T__62 - 34)) | (1 << (PyxellParser.T__63 - 34)) | (1 << (PyxellParser.T__64 - 34)))) != 0): + if ((((_la - 34)) & ~0x3f) == 0 and ((1 << (_la - 34)) & ((1 << (PyxellParser.T__33 - 34)) | (1 << (PyxellParser.T__40 - 34)) | (1 << (PyxellParser.T__57 - 34)) | (1 << (PyxellParser.T__60 - 34)) | (1 << (PyxellParser.T__61 - 34)) | (1 << (PyxellParser.T__62 - 34)) | (1 << (PyxellParser.T__63 - 34)) | (1 << (PyxellParser.T__64 - 34)) | (1 << (PyxellParser.T__65 - 34)))) != 0): self.state = 147 localctx.ret = self.typ(0) @@ -1231,7 +1239,7 @@ def block(self): self.state = 168 self._errHandler.sync(self) _la = self._input.LA(1) - if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__40) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__52) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0)): + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__40) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__52) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0)): break self.state = 170 @@ -1278,29 +1286,6 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) - class ExprCallContext(ExprContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def expr(self): - return self.getTypedRuleContext(PyxellParser.ExprContext,0) - - def call_arg(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(PyxellParser.Call_argContext) - else: - return self.getTypedRuleContext(PyxellParser.Call_argContext,i) - - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExprCall" ): - return visitor.visitExprCall(self) - else: - return visitor.visitChildren(self) - - class ExprCmpContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext @@ -1342,26 +1327,6 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) - class ExprCondContext(ExprContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(PyxellParser.ExprContext) - else: - return self.getTypedRuleContext(PyxellParser.ExprContext,i) - - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExprCond" ): - return visitor.visitExprCond(self) - else: - return visitor.visitChildren(self) - - class ExprAtomContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext @@ -1415,11 +1380,10 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) - class ExprBinaryOpContext(ExprContext): + class ExprArrayContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext super().__init__(parser) - self.op = None # Token self.copyFrom(ctx) def expr(self, i:int=None): @@ -1430,17 +1394,17 @@ def expr(self, i:int=None): def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExprBinaryOp" ): - return visitor.visitExprBinaryOp(self) + if hasattr( visitor, "visitExprArray" ): + return visitor.visitExprArray(self) else: return visitor.visitChildren(self) - class ExprRangeContext(ExprContext): + class ExprLogicalOpContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext super().__init__(parser) - self.dots = None # Token + self.op = None # Token self.copyFrom(ctx) def expr(self, i:int=None): @@ -1451,13 +1415,36 @@ def expr(self, i:int=None): def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExprRange" ): - return visitor.visitExprRange(self) + if hasattr( visitor, "visitExprLogicalOp" ): + return visitor.visitExprLogicalOp(self) else: return visitor.visitChildren(self) - class ExprArrayContext(ExprContext): + class ExprCallContext(ExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext + super().__init__(parser) + self.copyFrom(ctx) + + def expr(self): + return self.getTypedRuleContext(PyxellParser.ExprContext,0) + + def call_arg(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(PyxellParser.Call_argContext) + else: + return self.getTypedRuleContext(PyxellParser.Call_argContext,i) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExprCall" ): + return visitor.visitExprCall(self) + else: + return visitor.visitChildren(self) + + + class ExprCondContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext super().__init__(parser) @@ -1471,13 +1458,13 @@ def expr(self, i:int=None): def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExprArray" ): - return visitor.visitExprArray(self) + if hasattr( visitor, "visitExprCond" ): + return visitor.visitExprCond(self) else: return visitor.visitChildren(self) - class ExprLogicalOpContext(ExprContext): + class ExprBinaryOpContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext super().__init__(parser) @@ -1492,8 +1479,51 @@ def expr(self, i:int=None): def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExprLogicalOp" ): - return visitor.visitExprLogicalOp(self) + if hasattr( visitor, "visitExprBinaryOp" ): + return visitor.visitExprBinaryOp(self) + else: + return visitor.visitChildren(self) + + + class ExprRangeContext(ExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext + super().__init__(parser) + self.dots = None # Token + self.copyFrom(ctx) + + def expr(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(PyxellParser.ExprContext) + else: + return self.getTypedRuleContext(PyxellParser.ExprContext,i) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExprRange" ): + return visitor.visitExprRange(self) + else: + return visitor.visitChildren(self) + + + class ExprLambdaContext(ExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext + super().__init__(parser) + self.copyFrom(ctx) + + def expr(self): + return self.getTypedRuleContext(PyxellParser.ExprContext,0) + + def ID(self, i:int=None): + if i is None: + return self.getTokens(PyxellParser.ID) + else: + return self.getToken(PyxellParser.ID, i) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExprLambda" ): + return visitor.visitExprLambda(self) else: return visitor.visitChildren(self) @@ -1509,10 +1539,10 @@ def expr(self, _p:int=0): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 195 + self.state = 208 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__56, PyxellParser.T__57, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: + if token in [PyxellParser.T__58, PyxellParser.T__59, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: localctx = PyxellParser.ExprAtomContext(self, localctx) self._ctx = localctx _prevctx = localctx @@ -1553,7 +1583,7 @@ def expr(self, _p:int=0): self.state = 188 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__52 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__52 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): self.state = 187 self.expr(0) @@ -1574,7 +1604,7 @@ def expr(self, _p:int=0): self._errHandler.reportMatch(self) self.consume() self.state = 192 - self.expr(14) + self.expr(15) pass elif token in [PyxellParser.T__52]: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) @@ -1583,44 +1613,76 @@ def expr(self, _p:int=0): self.state = 193 localctx.op = self.match(PyxellParser.T__52) self.state = 194 - self.expr(4) + self.expr(5) + pass + elif token in [PyxellParser.T__56]: + localctx = PyxellParser.ExprLambdaContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 195 + self.match(PyxellParser.T__56) + self.state = 200 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,21,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 196 + self.match(PyxellParser.ID) + self.state = 197 + self.match(PyxellParser.T__22) + self.state = 202 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,21,self._ctx) + + self.state = 204 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==PyxellParser.ID: + self.state = 203 + self.match(PyxellParser.ID) + + + self.state = 206 + self.match(PyxellParser.T__57) + self.state = 207 + self.expr(1) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 262 + self.state = 275 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,25,self._ctx) + _alt = self._interp.adaptivePredict(self._input,27,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 260 + self.state = 273 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,24,self._ctx) + la_ = self._interp.adaptivePredict(self._input,26,self._ctx) if la_ == 1: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 197 - if not self.precpred(self._ctx, 15): + self.state = 210 + if not self.precpred(self._ctx, 16): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 15)") - self.state = 198 + raise FailedPredicateException(self, "self.precpred(self._ctx, 16)") + self.state = 211 localctx.op = self.match(PyxellParser.T__8) - self.state = 199 - self.expr(15) + self.state = 212 + self.expr(16) pass elif la_ == 2: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 200 - if not self.precpred(self._ctx, 13): + self.state = 213 + if not self.precpred(self._ctx, 14): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") - self.state = 201 + raise FailedPredicateException(self, "self.precpred(self._ctx, 14)") + self.state = 214 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__9) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__11))) != 0)): @@ -1628,18 +1690,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 202 - self.expr(14) + self.state = 215 + self.expr(15) pass elif la_ == 3: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 203 - if not self.precpred(self._ctx, 12): + self.state = 216 + if not self.precpred(self._ctx, 13): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 12)") - self.state = 204 + raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") + self.state = 217 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__12 or _la==PyxellParser.T__13): @@ -1647,18 +1709,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 205 - self.expr(13) + self.state = 218 + self.expr(14) pass elif la_ == 4: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 206 - if not self.precpred(self._ctx, 11): + self.state = 219 + if not self.precpred(self._ctx, 12): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") - self.state = 207 + raise FailedPredicateException(self, "self.precpred(self._ctx, 12)") + self.state = 220 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__14 or _la==PyxellParser.T__15): @@ -1666,57 +1728,57 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 208 - self.expr(12) + self.state = 221 + self.expr(13) pass elif la_ == 5: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 209 - if not self.precpred(self._ctx, 10): + self.state = 222 + if not self.precpred(self._ctx, 11): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") - self.state = 210 + raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") + self.state = 223 localctx.op = self.match(PyxellParser.T__16) - self.state = 211 - self.expr(11) + self.state = 224 + self.expr(12) pass elif la_ == 6: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 212 - if not self.precpred(self._ctx, 9): + self.state = 225 + if not self.precpred(self._ctx, 10): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") - self.state = 213 + raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") + self.state = 226 localctx.op = self.match(PyxellParser.T__17) - self.state = 214 - self.expr(10) + self.state = 227 + self.expr(11) pass elif la_ == 7: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 215 - if not self.precpred(self._ctx, 8): + self.state = 228 + if not self.precpred(self._ctx, 9): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") - self.state = 216 + raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") + self.state = 229 localctx.op = self.match(PyxellParser.T__18) - self.state = 217 - self.expr(9) + self.state = 230 + self.expr(10) pass elif la_ == 8: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 218 - if not self.precpred(self._ctx, 7): + self.state = 231 + if not self.precpred(self._ctx, 8): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") - self.state = 219 + raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") + self.state = 232 localctx.dots = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__44 or _la==PyxellParser.T__45): @@ -1724,18 +1786,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 220 - self.expr(8) + self.state = 233 + self.expr(9) pass elif la_ == 9: localctx = PyxellParser.ExprCmpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 221 - if not self.precpred(self._ctx, 5): + self.state = 234 + if not self.precpred(self._ctx, 6): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") - self.state = 222 + raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") + self.state = 235 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__46) | (1 << PyxellParser.T__47) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__49) | (1 << PyxellParser.T__50) | (1 << PyxellParser.T__51))) != 0)): @@ -1743,130 +1805,130 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 223 - self.expr(5) + self.state = 236 + self.expr(6) pass elif la_ == 10: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 224 - if not self.precpred(self._ctx, 3): + self.state = 237 + if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 225 + raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") + self.state = 238 localctx.op = self.match(PyxellParser.T__53) - self.state = 226 - self.expr(3) + self.state = 239 + self.expr(4) pass elif la_ == 11: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 227 - if not self.precpred(self._ctx, 2): + self.state = 240 + if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 228 + raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") + self.state = 241 localctx.op = self.match(PyxellParser.T__54) - self.state = 229 - self.expr(2) + self.state = 242 + self.expr(3) pass elif la_ == 12: localctx = PyxellParser.ExprCondContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 230 - if not self.precpred(self._ctx, 1): + self.state = 243 + if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") - self.state = 231 + raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") + self.state = 244 self.match(PyxellParser.T__55) - self.state = 232 + self.state = 245 self.expr(0) - self.state = 233 + self.state = 246 self.match(PyxellParser.T__37) - self.state = 234 - self.expr(1) + self.state = 247 + self.expr(2) pass elif la_ == 13: localctx = PyxellParser.ExprIndexContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 236 - if not self.precpred(self._ctx, 18): + self.state = 249 + if not self.precpred(self._ctx, 19): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 18)") - self.state = 237 + raise FailedPredicateException(self, "self.precpred(self._ctx, 19)") + self.state = 250 self.match(PyxellParser.T__40) - self.state = 238 + self.state = 251 self.tuple_expr() - self.state = 239 + self.state = 252 self.match(PyxellParser.T__41) pass elif la_ == 14: localctx = PyxellParser.ExprAttrContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 241 - if not self.precpred(self._ctx, 17): + self.state = 254 + if not self.precpred(self._ctx, 18): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 17)") - self.state = 242 + raise FailedPredicateException(self, "self.precpred(self._ctx, 18)") + self.state = 255 self.match(PyxellParser.T__42) - self.state = 243 + self.state = 256 self.match(PyxellParser.ID) pass elif la_ == 15: localctx = PyxellParser.ExprCallContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 244 - if not self.precpred(self._ctx, 16): + self.state = 257 + if not self.precpred(self._ctx, 17): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 16)") - self.state = 245 + raise FailedPredicateException(self, "self.precpred(self._ctx, 17)") + self.state = 258 self.match(PyxellParser.T__33) - self.state = 251 + self.state = 264 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,22,self._ctx) + _alt = self._interp.adaptivePredict(self._input,24,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 246 + self.state = 259 self.call_arg() - self.state = 247 + self.state = 260 self.match(PyxellParser.T__22) - self.state = 253 + self.state = 266 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,22,self._ctx) + _alt = self._interp.adaptivePredict(self._input,24,self._ctx) - self.state = 255 + self.state = 268 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__52 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 254 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__52 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 267 self.call_arg() - self.state = 257 + self.state = 270 self.match(PyxellParser.T__34) pass elif la_ == 16: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 258 - if not self.precpred(self._ctx, 6): + self.state = 271 + if not self.precpred(self._ctx, 7): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") - self.state = 259 + raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") + self.state = 272 localctx.dots = self.match(PyxellParser.T__45) pass - self.state = 264 + self.state = 277 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,25,self._ctx) + _alt = self._interp.adaptivePredict(self._input,27,self._ctx) except RecognitionException as re: localctx.exception = re @@ -1921,20 +1983,20 @@ def tuple_expr(self): try: localctx = PyxellParser.ExprTupleContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 270 + self.state = 283 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,26,self._ctx) + _alt = self._interp.adaptivePredict(self._input,28,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 265 + self.state = 278 self.expr(0) - self.state = 266 + self.state = 279 self.match(PyxellParser.T__22) - self.state = 272 + self.state = 285 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,26,self._ctx) + _alt = self._interp.adaptivePredict(self._input,28,self._ctx) - self.state = 273 + self.state = 286 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -1988,9 +2050,9 @@ def interpolation_expr(self): try: localctx = PyxellParser.ExprInterpolationContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 275 + self.state = 288 self.tuple_expr() - self.state = 276 + self.state = 289 self.match(PyxellParser.EOF) except RecognitionException as re: localctx.exception = re @@ -2044,17 +2106,17 @@ def call_arg(self): try: localctx = PyxellParser.CallArgContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 280 + self.state = 293 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,27,self._ctx) + la_ = self._interp.adaptivePredict(self._input,29,self._ctx) if la_ == 1: - self.state = 278 + self.state = 291 self.match(PyxellParser.ID) - self.state = 279 + self.state = 292 self.match(PyxellParser.T__7) - self.state = 282 + self.state = 295 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -2182,27 +2244,27 @@ def atom(self): self.enterRule(localctx, 22, self.RULE_atom) self._la = 0 # Token type try: - self.state = 290 + self.state = 303 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: localctx = PyxellParser.AtomIntContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 284 + self.state = 297 self.match(PyxellParser.INT) pass elif token in [PyxellParser.FLOAT]: localctx = PyxellParser.AtomFloatContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 285 + self.state = 298 self.match(PyxellParser.FLOAT) pass - elif token in [PyxellParser.T__56, PyxellParser.T__57]: + elif token in [PyxellParser.T__58, PyxellParser.T__59]: localctx = PyxellParser.AtomBoolContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 286 + self.state = 299 _la = self._input.LA(1) - if not(_la==PyxellParser.T__56 or _la==PyxellParser.T__57): + if not(_la==PyxellParser.T__58 or _la==PyxellParser.T__59): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -2211,19 +2273,19 @@ def atom(self): elif token in [PyxellParser.CHAR]: localctx = PyxellParser.AtomCharContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 287 + self.state = 300 self.match(PyxellParser.CHAR) pass elif token in [PyxellParser.STRING]: localctx = PyxellParser.AtomStringContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 288 + self.state = 301 self.match(PyxellParser.STRING) pass elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) self.enterOuterAlt(localctx, 6) - self.state = 289 + self.state = 302 self.match(PyxellParser.ID) pass else: @@ -2268,20 +2330,20 @@ def id_list(self): self.enterRule(localctx, 24, self.RULE_id_list) try: self.enterOuterAlt(localctx, 1) - self.state = 296 + self.state = 309 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,29,self._ctx) + _alt = self._interp.adaptivePredict(self._input,31,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 292 + self.state = 305 self.match(PyxellParser.ID) - self.state = 293 + self.state = 306 self.match(PyxellParser.T__22) - self.state = 298 + self.state = 311 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,29,self._ctx) + _alt = self._interp.adaptivePredict(self._input,31,self._ctx) - self.state = 299 + self.state = 312 self.match(PyxellParser.ID) except RecognitionException as re: localctx.exception = re @@ -2423,17 +2485,17 @@ def typ(self, _p:int=0): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 313 + self.state = 326 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__58, PyxellParser.T__59, PyxellParser.T__60, PyxellParser.T__61, PyxellParser.T__62, PyxellParser.T__63]: + if token in [PyxellParser.T__60, PyxellParser.T__61, PyxellParser.T__62, PyxellParser.T__63, PyxellParser.T__64, PyxellParser.T__65]: localctx = PyxellParser.TypePrimitiveContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 302 + self.state = 315 _la = self._input.LA(1) - if not(((((_la - 59)) & ~0x3f) == 0 and ((1 << (_la - 59)) & ((1 << (PyxellParser.T__58 - 59)) | (1 << (PyxellParser.T__59 - 59)) | (1 << (PyxellParser.T__60 - 59)) | (1 << (PyxellParser.T__61 - 59)) | (1 << (PyxellParser.T__62 - 59)) | (1 << (PyxellParser.T__63 - 59)))) != 0)): + if not(((((_la - 61)) & ~0x3f) == 0 and ((1 << (_la - 61)) & ((1 << (PyxellParser.T__60 - 61)) | (1 << (PyxellParser.T__61 - 61)) | (1 << (PyxellParser.T__62 - 61)) | (1 << (PyxellParser.T__63 - 61)) | (1 << (PyxellParser.T__64 - 61)) | (1 << (PyxellParser.T__65 - 61)))) != 0)): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -2443,78 +2505,78 @@ def typ(self, _p:int=0): localctx = PyxellParser.TypeParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 303 + self.state = 316 self.match(PyxellParser.T__33) - self.state = 304 + self.state = 317 self.typ(0) - self.state = 305 + self.state = 318 self.match(PyxellParser.T__34) pass elif token in [PyxellParser.T__40]: localctx = PyxellParser.TypeArrayContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 307 + self.state = 320 self.match(PyxellParser.T__40) - self.state = 308 + self.state = 321 self.typ(0) - self.state = 309 + self.state = 322 self.match(PyxellParser.T__41) pass - elif token in [PyxellParser.T__64]: + elif token in [PyxellParser.T__57]: localctx = PyxellParser.TypeFunc0Context(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 311 - self.match(PyxellParser.T__64) - self.state = 312 + self.state = 324 + self.match(PyxellParser.T__57) + self.state = 325 self.typ(1) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 323 + self.state = 336 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,32,self._ctx) + _alt = self._interp.adaptivePredict(self._input,34,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 321 + self.state = 334 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,31,self._ctx) + la_ = self._interp.adaptivePredict(self._input,33,self._ctx) if la_ == 1: localctx = PyxellParser.TypeTupleContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 315 + self.state = 328 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 316 + self.state = 329 self.match(PyxellParser.T__9) - self.state = 317 + self.state = 330 self.typ(3) pass elif la_ == 2: localctx = PyxellParser.TypeFuncContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 318 + self.state = 331 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 319 - self.match(PyxellParser.T__64) - self.state = 320 + self.state = 332 + self.match(PyxellParser.T__57) + self.state = 333 self.typ(2) pass - self.state = 325 + self.state = 338 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,32,self._ctx) + _alt = self._interp.adaptivePredict(self._input,34,self._ctx) except RecognitionException as re: localctx.exception = re @@ -2539,67 +2601,67 @@ def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): def expr_sempred(self, localctx:ExprContext, predIndex:int): if predIndex == 0: - return self.precpred(self._ctx, 15) + return self.precpred(self._ctx, 16) if predIndex == 1: - return self.precpred(self._ctx, 13) + return self.precpred(self._ctx, 14) if predIndex == 2: - return self.precpred(self._ctx, 12) + return self.precpred(self._ctx, 13) if predIndex == 3: - return self.precpred(self._ctx, 11) + return self.precpred(self._ctx, 12) if predIndex == 4: - return self.precpred(self._ctx, 10) + return self.precpred(self._ctx, 11) if predIndex == 5: - return self.precpred(self._ctx, 9) + return self.precpred(self._ctx, 10) if predIndex == 6: - return self.precpred(self._ctx, 8) + return self.precpred(self._ctx, 9) if predIndex == 7: - return self.precpred(self._ctx, 7) + return self.precpred(self._ctx, 8) if predIndex == 8: - return self.precpred(self._ctx, 5) + return self.precpred(self._ctx, 6) if predIndex == 9: - return self.precpred(self._ctx, 3) + return self.precpred(self._ctx, 4) if predIndex == 10: - return self.precpred(self._ctx, 2) + return self.precpred(self._ctx, 3) if predIndex == 11: - return self.precpred(self._ctx, 1) + return self.precpred(self._ctx, 2) if predIndex == 12: - return self.precpred(self._ctx, 18) + return self.precpred(self._ctx, 19) if predIndex == 13: - return self.precpred(self._ctx, 17) + return self.precpred(self._ctx, 18) if predIndex == 14: - return self.precpred(self._ctx, 16) + return self.precpred(self._ctx, 17) if predIndex == 15: - return self.precpred(self._ctx, 6) + return self.precpred(self._ctx, 7) def typ_sempred(self, localctx:TypContext, predIndex:int): diff --git a/src/antlr/PyxellVisitor.py b/src/antlr/PyxellVisitor.py index 8d45c866..ecda8970 100644 --- a/src/antlr/PyxellVisitor.py +++ b/src/antlr/PyxellVisitor.py @@ -104,11 +104,6 @@ def visitExprUnaryOp(self, ctx:PyxellParser.ExprUnaryOpContext): return self.visitChildren(ctx) - # Visit a parse tree produced by PyxellParser#ExprCall. - def visitExprCall(self, ctx:PyxellParser.ExprCallContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by PyxellParser#ExprCmp. def visitExprCmp(self, ctx:PyxellParser.ExprCmpContext): return self.visitChildren(ctx) @@ -119,11 +114,6 @@ def visitExprIndex(self, ctx:PyxellParser.ExprIndexContext): return self.visitChildren(ctx) - # Visit a parse tree produced by PyxellParser#ExprCond. - def visitExprCond(self, ctx:PyxellParser.ExprCondContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by PyxellParser#ExprAtom. def visitExprAtom(self, ctx:PyxellParser.ExprAtomContext): return self.visitChildren(ctx) @@ -139,6 +129,26 @@ def visitExprParentheses(self, ctx:PyxellParser.ExprParenthesesContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#ExprArray. + def visitExprArray(self, ctx:PyxellParser.ExprArrayContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by PyxellParser#ExprLogicalOp. + def visitExprLogicalOp(self, ctx:PyxellParser.ExprLogicalOpContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by PyxellParser#ExprCall. + def visitExprCall(self, ctx:PyxellParser.ExprCallContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by PyxellParser#ExprCond. + def visitExprCond(self, ctx:PyxellParser.ExprCondContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#ExprBinaryOp. def visitExprBinaryOp(self, ctx:PyxellParser.ExprBinaryOpContext): return self.visitChildren(ctx) @@ -149,13 +159,8 @@ def visitExprRange(self, ctx:PyxellParser.ExprRangeContext): return self.visitChildren(ctx) - # Visit a parse tree produced by PyxellParser#ExprArray. - def visitExprArray(self, ctx:PyxellParser.ExprArrayContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by PyxellParser#ExprLogicalOp. - def visitExprLogicalOp(self, ctx:PyxellParser.ExprLogicalOpContext): + # Visit a parse tree produced by PyxellParser#ExprLambda. + def visitExprLambda(self, ctx:PyxellParser.ExprLambdaContext): return self.visitChildren(ctx) diff --git a/src/ast.py b/src/ast.py index 431221c1..bfa19815 100644 --- a/src/ast.py +++ b/src/ast.py @@ -249,6 +249,13 @@ def visitExprCond(self, ctx): 'exprs': self.visit(ctx.expr()), } + def visitExprLambda(self, ctx): + return { + **_node(ctx, 'ExprLambda'), + 'ids': self.visit(ctx.ID()), + 'expr': self.visit(ctx.expr()), + } + def visitExprTuple(self, ctx): elems = self.visit(ctx.expr()) if len(elems) == 1: diff --git a/src/compiler.py b/src/compiler.py index 98305008..6568b573 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -962,7 +962,7 @@ def compileStmtFunc(self, node): for arg in node['args']: type = arg['type'] name = arg['name'] - default = arg['default'] + default = arg.get('default') if default: with self.no_output(): self.cast(default, self.compile(default), type) @@ -1024,11 +1024,13 @@ def compileStmtReturn(self, node): expr = node['expr'] if expr: value = self.cast(node, self.compile(expr), type) - self.builder.ret(value) - else: - if type != tVoid: - self.throw(node, err.IllegalAssignment(tVoid, type)) + elif type != tVoid: + self.throw(node, err.IllegalAssignment(tVoid, type)) + + if type == tVoid: self.builder.ret_void() + else: + self.builder.ret(value) ### Expressions ### @@ -1088,7 +1090,35 @@ def compileExprCall(self, node): else: self.throw(node, err.TooFewArguments(func.type)) - value = self.cast(expr, self.compile(expr), func_arg.type) + if expr['node'] == 'ExprLambda': + ids = expr['ids'] + type = func_arg.type + if len(ids) < len(type.args): + self.throw(node, err.TooFewArguments(type)) + if len(ids) > len(type.args): + self.throw(node, err.TooManyArguments(type)) + pos = expr['position'] + id = self.module.get_unique_name('lambda') + self.compile({ + 'node': 'StmtFunc', + 'position': pos, + 'id': id, + 'args': [{ + 'type': arg.type, + 'name': name, + } for arg, name in zip(type.args, ids)], + 'ret': type.ret, + 'block': { + 'node': 'StmtReturn', + 'position': pos, + 'expr': expr['expr'], + }, + }) + value = self.get(expr, id) + else: + value = self.compile(expr) + + value = self.cast(expr, value, func_arg.type) args.append(value) if named_args: @@ -1177,6 +1207,9 @@ def compileExprCond(self, node): values = self.unify(node, *values) return self.builder.select(cond, *values) + def compileExprLambda(self, node): + self.throw(node, err.UnknownType()) + def compileExprTuple(self, node): values = lmap(self.compile, node['exprs']) return self.tuple(values) From 6d438f8c31f68df11eb85f05553f0dae7d60feeb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Thu, 7 Nov 2019 19:50:33 +0100 Subject: [PATCH 053/100] Expressions with placeholders --- src/ast.py | 5 ++++- src/compiler.py | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ src/types.py | 2 +- 3 files changed, 54 insertions(+), 2 deletions(-) diff --git a/src/ast.py b/src/ast.py index bfa19815..5715b8e5 100644 --- a/src/ast.py +++ b/src/ast.py @@ -302,9 +302,12 @@ def visitAtomString(self, ctx): } def visitAtomId(self, ctx): + id = self.visit(ctx.ID()) + if id == '_': + return _node(ctx, 'AtomStub') return { **_node(ctx, 'AtomId'), - 'id': self.visit(ctx.ID()), + 'id': id, } diff --git a/src/compiler.py b/src/compiler.py index 6568b573..abd53f3a 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -689,6 +689,51 @@ def tuple(self, values): return result + def convert_lambda(self, expr): + ids = [] + + def convert_expr(expr): + nonlocal ids + node = expr['node'] + + if node in ['ExprArray', 'ExprIndex', 'ExprBinaryOp', 'ExprRange', 'ExprCmp', 'ExprLogicalOp', 'ExprCond', 'ExprTuple']: + return { + **expr, + 'exprs': lmap(convert_expr, expr['exprs']), + } + if node in ['ExprAttr', 'ExprUnaryOp']: + return { + **expr, + 'expr': convert_expr(expr['expr']), + } + if node == 'ExprCall': + return { + **expr, + 'expr': convert_expr(expr['expr']), + 'args': [{ + **arg, + 'expr': convert_expr(arg['expr']), + } for arg in expr['args']], + } + if node == 'AtomStub': + id = f'${len(ids)}' + ids.append(id) + return { + **expr, + 'node': 'AtomId', + 'id': id, + } + return expr + + expr = convert_expr(expr) + if ids: + return { + **expr, + 'node': 'ExprLambda', + 'ids': ids, + 'expr': expr, + } + return expr ### Statements ### @@ -1090,6 +1135,7 @@ def compileExprCall(self, node): else: self.throw(node, err.TooFewArguments(func.type)) + expr = self.convert_lambda(expr) if expr['node'] == 'ExprLambda': ids = expr['ids'] type = func_arg.type @@ -1259,3 +1305,6 @@ def compileAtomString(self, node): def compileAtomId(self, node): return self.get(node, node['id']) + + def compileAtomStub(self, node): + self.throw(node, err.UnknownType()) diff --git a/src/types.py b/src/types.py index 7dae7c2f..86b7aa45 100644 --- a/src/types.py +++ b/src/types.py @@ -3,7 +3,7 @@ import llvmlite.ir as ll -from .utils import extend_class +from .utils import * __all__ = [ From f1affa6760a4ab2edbbdd3637efb45acc3ab42d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Fri, 8 Nov 2019 19:13:40 +0100 Subject: [PATCH 054/100] Better error messages regarding lambdas --- src/compiler.py | 8 +++++--- src/errors.py | 2 ++ test/bad/functions/lambda05.err | 2 +- test/bad/functions/lambda06.err | 2 +- test/bad/functions/lambda13.err | 1 + test/bad/functions/lambda13.px | 5 +++++ test/bad/loops/range01.err | 1 + test/bad/loops/range01.px | 2 ++ 8 files changed, 18 insertions(+), 5 deletions(-) create mode 100644 test/bad/functions/lambda13.err create mode 100644 test/bad/functions/lambda13.px create mode 100644 test/bad/loops/range01.err create mode 100644 test/bad/loops/range01.px diff --git a/src/compiler.py b/src/compiler.py index abd53f3a..1484e058 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -1139,6 +1139,8 @@ def compileExprCall(self, node): if expr['node'] == 'ExprLambda': ids = expr['ids'] type = func_arg.type + if not type.isFunc(): + self.throw(node, err.IllegalLambda()) if len(ids) < len(type.args): self.throw(node, err.TooFewArguments(type)) if len(ids) > len(type.args): @@ -1184,7 +1186,7 @@ def compileExprBinaryOp(self, node): return self.binaryop(node, node['op'], *map(self.compile, node['exprs'])) def compileExprRange(self, node): - self.throw(node, err.UnknownType()) + self.throw(node, err.IllegalRange()) def compileExprCmp(self, node): exprs = node['exprs'] @@ -1254,7 +1256,7 @@ def compileExprCond(self, node): return self.builder.select(cond, *values) def compileExprLambda(self, node): - self.throw(node, err.UnknownType()) + self.throw(node, err.IllegalLambda()) def compileExprTuple(self, node): values = lmap(self.compile, node['exprs']) @@ -1307,4 +1309,4 @@ def compileAtomId(self, node): return self.get(node, node['id']) def compileAtomStub(self, node): - self.throw(node, err.UnknownType()) + self.throw(node, err.IllegalLambda()) diff --git a/src/errors.py b/src/errors.py index 9ce13f15..28d32577 100644 --- a/src/errors.py +++ b/src/errors.py @@ -16,6 +16,8 @@ class PyxellError(Exception): CannotUnpack = lambda t, n: f"Cannot unpack value of type `{t.show()}` into {n} values" ExpectedNamedArgument = lambda: f"Positional argument cannot follow named arguments" IllegalAssignment = lambda t1, t2: f"Illegal assignment from `{t1.show()}` to `{t2.show()}`" + IllegalLambda = lambda: "Lambda expression cannot be used in this context" + IllegalRange = lambda: "Range expression cannot be used in this context" InvalidDeclaration = lambda t: f"Cannot declare variable of type `{t.show()}`" InvalidExpression = lambda e: f"Could not parse expression `{e}`" InvalidLoopStep = lambda: f"Incompatible number of loop variables and step expressions" diff --git a/test/bad/functions/lambda05.err b/test/bad/functions/lambda05.err index 97a5a7d8..8eeaae66 100644 --- a/test/bad/functions/lambda05.err +++ b/test/bad/functions/lambda05.err @@ -1 +1 @@ -Cannot settle type of the expression. \ No newline at end of file +Lambda expression cannot be used in this context. \ No newline at end of file diff --git a/test/bad/functions/lambda06.err b/test/bad/functions/lambda06.err index 97a5a7d8..8eeaae66 100644 --- a/test/bad/functions/lambda06.err +++ b/test/bad/functions/lambda06.err @@ -1 +1 @@ -Cannot settle type of the expression. \ No newline at end of file +Lambda expression cannot be used in this context. \ No newline at end of file diff --git a/test/bad/functions/lambda13.err b/test/bad/functions/lambda13.err new file mode 100644 index 00000000..8eeaae66 --- /dev/null +++ b/test/bad/functions/lambda13.err @@ -0,0 +1 @@ +Lambda expression cannot be used in this context. \ No newline at end of file diff --git a/test/bad/functions/lambda13.px b/test/bad/functions/lambda13.px new file mode 100644 index 00000000..1307c903 --- /dev/null +++ b/test/bad/functions/lambda13.px @@ -0,0 +1,5 @@ + +func f(Int g) Int def + return 0 + +f(lambda -> 0) diff --git a/test/bad/loops/range01.err b/test/bad/loops/range01.err new file mode 100644 index 00000000..9ea1c708 --- /dev/null +++ b/test/bad/loops/range01.err @@ -0,0 +1 @@ +Range expression cannot be used in this context. \ No newline at end of file diff --git a/test/bad/loops/range01.px b/test/bad/loops/range01.px new file mode 100644 index 00000000..58af25c3 --- /dev/null +++ b/test/bad/loops/range01.px @@ -0,0 +1,2 @@ + +0..1 From 5e2bb5341fb383559ffcafc2b8ccd7a3fac96bee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Fri, 8 Nov 2019 20:15:05 +0100 Subject: [PATCH 055/100] String interpolation with lambda placeholders --- src/compiler.py | 92 +++++++++++++++++++++----------- src/errors.py | 2 + test/good/functions/lambda12.out | 2 + test/good/functions/lambda12.px | 6 +++ 4 files changed, 72 insertions(+), 30 deletions(-) create mode 100644 test/good/functions/lambda12.out create mode 100644 test/good/functions/lambda12.px diff --git a/src/compiler.py b/src/compiler.py index 1484e058..5b5560f4 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -117,7 +117,7 @@ def block(self): self.builder.position_at_end(label_end) def throw(self, node, msg): - line, column = node['position'] + line, column = node.get('position', (1, 1)) raise err(msg, line, column) def get(self, node, id, load=True): @@ -664,6 +664,49 @@ def string(self, lit): return result + def convert_string(self, node, lit): + parts = re.split(r'{([^}]+)}', lit) + + if len(parts) == 1: + return node + + lits, tags = parts[::2], parts[1::2] + exprs = [None] * len(parts) + + for i, lit in enumerate(lits): + exprs[i*2] = { + 'node': 'AtomString', + 'string': lit, + } + + for i, tag in enumerate(tags): + try: + expr = parse_expr(tag) + except err: + self.throw(node, err.InvalidExpression(tag)) + exprs[i*2+1] ={ + 'node': 'ExprCall', + 'expr': { + 'node': 'ExprAttr', + 'expr': expr, + 'attr': 'toString', + }, + 'args': [], + } + + return { + 'node': 'ExprCall', + 'expr': { + 'node': 'ExprAttr', + 'expr': { + 'node': 'ExprArray', + 'exprs': exprs, + }, + 'attr': 'join', + }, + 'args': [], + } + def array(self, subtype, values): type = tArray(subtype) result = self.malloc(type) @@ -715,6 +758,11 @@ def convert_expr(expr): 'expr': convert_expr(arg['expr']), } for arg in expr['args']], } + if node == 'AtomString': + expr = self.convert_string(expr, expr['string']) + if expr['node'] == 'AtomString': + return expr + return convert_expr(expr) if node == 'AtomStub': id = f'${len(ids)}' ids.append(id) @@ -735,6 +783,7 @@ def convert_expr(expr): } return expr + ### Statements ### def compileBlock(self, node): @@ -1145,11 +1194,10 @@ def compileExprCall(self, node): self.throw(node, err.TooFewArguments(type)) if len(ids) > len(type.args): self.throw(node, err.TooManyArguments(type)) - pos = expr['position'] id = self.module.get_unique_name('lambda') self.compile({ + **expr, 'node': 'StmtFunc', - 'position': pos, 'id': id, 'args': [{ 'type': arg.type, @@ -1157,8 +1205,8 @@ def compileExprCall(self, node): } for arg, name in zip(type.args, ids)], 'ret': type.ret, 'block': { + **expr, 'node': 'StmtReturn', - 'position': pos, 'expr': expr['expr'], }, }) @@ -1278,32 +1326,16 @@ def compileAtomChar(self, node): return vChar(node['char']) def compileAtomString(self, node): - lit = node['string'] - parts = re.split(r'{([^}]+)}', lit) - - if len(parts) > 1: - lits, tags = parts[::2], parts[1::2] - values = [None] * len(parts) - - for i, lit in enumerate(lits): - values[i*2] = self.string(lit) - - for i, tag in enumerate(tags): - try: - expr = parse_expr(tag) - except err: - self.throw(node, err.InvalidExpression(tag)) - try: - obj, func = self.attribute(node, expr, 'toString') - except err as e: - self.throw(node, str(e).partition(': ')[2][:-1]) - - values[i*2+1] = self.builder.call(func, [obj]) - - return self.call('StringArray_join', self.array(tString, values), self.string('')) - - else: - return self.string(lit) + expr = self.convert_string(node, node['string']) + if expr['node'] == 'AtomString': + return self.string(expr['string']) + try: + return self.compile(expr) + except err as e: + self.throw({ + **node, + 'position': [e.line+node['position'][0]-1, e.column+node['position'][1]+1], + }, str(e).partition(': ')[2][:-1]) def compileAtomId(self, node): return self.get(node, node['id']) diff --git a/src/errors.py b/src/errors.py index 28d32577..408660ff 100644 --- a/src/errors.py +++ b/src/errors.py @@ -44,6 +44,8 @@ class PyxellError(Exception): UnknownType = lambda: f"Cannot settle type of the expression" def __init__(self, msg, line, column=None): + self.line = line + self.column = column text = f"Line {line}" if column: text += f", column {column}" diff --git a/test/good/functions/lambda12.out b/test/good/functions/lambda12.out new file mode 100644 index 00000000..f2eba603 --- /dev/null +++ b/test/good/functions/lambda12.out @@ -0,0 +1,2 @@ +2+2=4 false +true... diff --git a/test/good/functions/lambda12.px b/test/good/functions/lambda12.px new file mode 100644 index 00000000..dbcd3d01 --- /dev/null +++ b/test/good/functions/lambda12.px @@ -0,0 +1,6 @@ + +func f(Int->Bool->String g, Int n, Bool b) String def + return g(n, b) + +print f("2+2={_*2} {not _}", 2, true) +print f("{(_>0)==_}...", 0, false) From 161e0bb4d3c52c42e29435a04fbdb0613b3987be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sat, 9 Nov 2019 11:07:06 +0100 Subject: [PATCH 056/100] Array comprehension --- src/Pyxell.g4 | 8 +- src/antlr/Pyxell.interp | 3 +- src/antlr/PyxellParser.py | 1019 +++++++++++++++----------- src/antlr/PyxellVisitor.py | 15 + src/ast.py | 22 + src/compiler.py | 117 ++- test/bad/arrays/comprehension05.err | 2 +- test/good/arrays/comprehension10.out | 1 + test/good/arrays/comprehension10.px | 2 + 9 files changed, 752 insertions(+), 437 deletions(-) create mode 100644 test/good/arrays/comprehension10.out create mode 100644 test/good/arrays/comprehension10.px diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index c57472c9..d0a303ab 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -28,7 +28,7 @@ compound_stmt : 'if' expr 'do' block ('elif' expr 'do' block)* ('else' 'do' block)? # StmtIf | 'while' expr 'do' block # StmtWhile | 'until' expr 'do' block # StmtUntil - | 'for' tuple_expr 'in' tuple_expr ('step' step=tuple_expr)? 'do' block # StmtFor + | 'for' tuple_expr 'in' tuple_expr ('step' tuple_expr)? 'do' block # StmtFor | 'func' ID '(' (func_arg ',')* func_arg? ')' (ret=typ)? ('def' block | 'extern' ';') # StmtFunc ; @@ -44,6 +44,7 @@ expr : atom # ExprAtom | '(' tuple_expr ')' # ExprParentheses | '[' (expr ',')* expr? ']' # ExprArray + | '[' expr comprehension+ ']' # ExprArrayComprehension | expr '[' tuple_expr ']' # ExprIndex | expr '.' ID # ExprAttr | expr '(' (call_arg ',')* call_arg? ')' # ExprCall @@ -73,6 +74,11 @@ interpolation_expr : tuple_expr EOF # ExprInterpolation ; +comprehension + : 'for' tuple_expr 'in' tuple_expr ('step' tuple_expr)? # ComprehensionGenerator + | 'if' expr # ComprehensionFilter + ; + call_arg : (ID '=')? expr # CallArg ; diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index a7d3ce62..84900d08 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -163,6 +163,7 @@ block expr tuple_expr interpolation_expr +comprehension call_arg atom id_list @@ -170,4 +171,4 @@ typ atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 76, 342, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 3, 2, 7, 2, 32, 10, 2, 12, 2, 14, 2, 35, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 43, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 53, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 58, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 64, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 69, 10, 4, 12, 4, 14, 4, 72, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 83, 10, 4, 5, 4, 85, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 90, 10, 5, 12, 5, 14, 5, 93, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 104, 10, 6, 12, 6, 14, 6, 107, 11, 6, 3, 6, 3, 6, 3, 6, 5, 6, 112, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 130, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 141, 10, 6, 12, 6, 14, 6, 144, 11, 6, 3, 6, 5, 6, 147, 10, 6, 3, 6, 3, 6, 5, 6, 151, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 157, 10, 6, 5, 6, 159, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 165, 10, 7, 3, 8, 3, 8, 6, 8, 169, 10, 8, 13, 8, 14, 8, 170, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 185, 10, 9, 12, 9, 14, 9, 188, 11, 9, 3, 9, 5, 9, 191, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 201, 10, 9, 12, 9, 14, 9, 204, 11, 9, 3, 9, 5, 9, 207, 10, 9, 3, 9, 3, 9, 5, 9, 211, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 265, 10, 9, 12, 9, 14, 9, 268, 11, 9, 3, 9, 5, 9, 271, 10, 9, 3, 9, 3, 9, 3, 9, 7, 9, 276, 10, 9, 12, 9, 14, 9, 279, 11, 9, 3, 10, 3, 10, 3, 10, 7, 10, 284, 10, 10, 12, 10, 14, 10, 287, 11, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 5, 12, 296, 10, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 306, 10, 13, 3, 14, 3, 14, 7, 14, 310, 10, 14, 12, 14, 14, 14, 313, 11, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 329, 10, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 7, 15, 337, 10, 15, 12, 15, 14, 15, 340, 11, 15, 3, 15, 2, 4, 16, 28, 16, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 2, 12, 3, 2, 11, 21, 3, 2, 22, 23, 4, 2, 15, 16, 46, 46, 3, 2, 12, 14, 3, 2, 15, 16, 3, 2, 17, 18, 3, 2, 47, 48, 3, 2, 49, 54, 3, 2, 61, 62, 3, 2, 63, 68, 2, 397, 2, 33, 3, 2, 2, 2, 4, 42, 3, 2, 2, 2, 6, 84, 3, 2, 2, 2, 8, 86, 3, 2, 2, 2, 10, 158, 3, 2, 2, 2, 12, 160, 3, 2, 2, 2, 14, 166, 3, 2, 2, 2, 16, 210, 3, 2, 2, 2, 18, 285, 3, 2, 2, 2, 20, 290, 3, 2, 2, 2, 22, 295, 3, 2, 2, 2, 24, 305, 3, 2, 2, 2, 26, 311, 3, 2, 2, 2, 28, 328, 3, 2, 2, 2, 30, 32, 5, 4, 3, 2, 31, 30, 3, 2, 2, 2, 32, 35, 3, 2, 2, 2, 33, 31, 3, 2, 2, 2, 33, 34, 3, 2, 2, 2, 34, 36, 3, 2, 2, 2, 35, 33, 3, 2, 2, 2, 36, 37, 7, 2, 2, 3, 37, 3, 3, 2, 2, 2, 38, 39, 5, 6, 4, 2, 39, 40, 7, 3, 2, 2, 40, 43, 3, 2, 2, 2, 41, 43, 5, 10, 6, 2, 42, 38, 3, 2, 2, 2, 42, 41, 3, 2, 2, 2, 43, 5, 3, 2, 2, 2, 44, 45, 7, 4, 2, 2, 45, 52, 7, 73, 2, 2, 46, 47, 7, 5, 2, 2, 47, 53, 5, 26, 14, 2, 48, 49, 7, 6, 2, 2, 49, 53, 5, 26, 14, 2, 50, 51, 7, 7, 2, 2, 51, 53, 7, 73, 2, 2, 52, 46, 3, 2, 2, 2, 52, 48, 3, 2, 2, 2, 52, 50, 3, 2, 2, 2, 52, 53, 3, 2, 2, 2, 53, 85, 3, 2, 2, 2, 54, 85, 7, 8, 2, 2, 55, 57, 7, 9, 2, 2, 56, 58, 5, 18, 10, 2, 57, 56, 3, 2, 2, 2, 57, 58, 3, 2, 2, 2, 58, 85, 3, 2, 2, 2, 59, 60, 5, 28, 15, 2, 60, 63, 7, 73, 2, 2, 61, 62, 7, 10, 2, 2, 62, 64, 5, 18, 10, 2, 63, 61, 3, 2, 2, 2, 63, 64, 3, 2, 2, 2, 64, 85, 3, 2, 2, 2, 65, 66, 5, 8, 5, 2, 66, 67, 7, 10, 2, 2, 67, 69, 3, 2, 2, 2, 68, 65, 3, 2, 2, 2, 69, 72, 3, 2, 2, 2, 70, 68, 3, 2, 2, 2, 70, 71, 3, 2, 2, 2, 71, 73, 3, 2, 2, 2, 72, 70, 3, 2, 2, 2, 73, 85, 5, 18, 10, 2, 74, 75, 5, 16, 9, 2, 75, 76, 9, 2, 2, 2, 76, 77, 7, 10, 2, 2, 77, 78, 5, 16, 9, 2, 78, 85, 3, 2, 2, 2, 79, 85, 9, 3, 2, 2, 80, 82, 7, 24, 2, 2, 81, 83, 5, 18, 10, 2, 82, 81, 3, 2, 2, 2, 82, 83, 3, 2, 2, 2, 83, 85, 3, 2, 2, 2, 84, 44, 3, 2, 2, 2, 84, 54, 3, 2, 2, 2, 84, 55, 3, 2, 2, 2, 84, 59, 3, 2, 2, 2, 84, 70, 3, 2, 2, 2, 84, 74, 3, 2, 2, 2, 84, 79, 3, 2, 2, 2, 84, 80, 3, 2, 2, 2, 85, 7, 3, 2, 2, 2, 86, 91, 5, 16, 9, 2, 87, 88, 7, 25, 2, 2, 88, 90, 5, 16, 9, 2, 89, 87, 3, 2, 2, 2, 90, 93, 3, 2, 2, 2, 91, 89, 3, 2, 2, 2, 91, 92, 3, 2, 2, 2, 92, 9, 3, 2, 2, 2, 93, 91, 3, 2, 2, 2, 94, 95, 7, 26, 2, 2, 95, 96, 5, 16, 9, 2, 96, 97, 7, 27, 2, 2, 97, 105, 5, 14, 8, 2, 98, 99, 7, 28, 2, 2, 99, 100, 5, 16, 9, 2, 100, 101, 7, 27, 2, 2, 101, 102, 5, 14, 8, 2, 102, 104, 3, 2, 2, 2, 103, 98, 3, 2, 2, 2, 104, 107, 3, 2, 2, 2, 105, 103, 3, 2, 2, 2, 105, 106, 3, 2, 2, 2, 106, 111, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 108, 109, 7, 29, 2, 2, 109, 110, 7, 27, 2, 2, 110, 112, 5, 14, 8, 2, 111, 108, 3, 2, 2, 2, 111, 112, 3, 2, 2, 2, 112, 159, 3, 2, 2, 2, 113, 114, 7, 30, 2, 2, 114, 115, 5, 16, 9, 2, 115, 116, 7, 27, 2, 2, 116, 117, 5, 14, 8, 2, 117, 159, 3, 2, 2, 2, 118, 119, 7, 31, 2, 2, 119, 120, 5, 16, 9, 2, 120, 121, 7, 27, 2, 2, 121, 122, 5, 14, 8, 2, 122, 159, 3, 2, 2, 2, 123, 124, 7, 32, 2, 2, 124, 125, 5, 18, 10, 2, 125, 126, 7, 33, 2, 2, 126, 129, 5, 18, 10, 2, 127, 128, 7, 34, 2, 2, 128, 130, 5, 18, 10, 2, 129, 127, 3, 2, 2, 2, 129, 130, 3, 2, 2, 2, 130, 131, 3, 2, 2, 2, 131, 132, 7, 27, 2, 2, 132, 133, 5, 14, 8, 2, 133, 159, 3, 2, 2, 2, 134, 135, 7, 35, 2, 2, 135, 136, 7, 73, 2, 2, 136, 142, 7, 36, 2, 2, 137, 138, 5, 12, 7, 2, 138, 139, 7, 25, 2, 2, 139, 141, 3, 2, 2, 2, 140, 137, 3, 2, 2, 2, 141, 144, 3, 2, 2, 2, 142, 140, 3, 2, 2, 2, 142, 143, 3, 2, 2, 2, 143, 146, 3, 2, 2, 2, 144, 142, 3, 2, 2, 2, 145, 147, 5, 12, 7, 2, 146, 145, 3, 2, 2, 2, 146, 147, 3, 2, 2, 2, 147, 148, 3, 2, 2, 2, 148, 150, 7, 37, 2, 2, 149, 151, 5, 28, 15, 2, 150, 149, 3, 2, 2, 2, 150, 151, 3, 2, 2, 2, 151, 156, 3, 2, 2, 2, 152, 153, 7, 38, 2, 2, 153, 157, 5, 14, 8, 2, 154, 155, 7, 39, 2, 2, 155, 157, 7, 3, 2, 2, 156, 152, 3, 2, 2, 2, 156, 154, 3, 2, 2, 2, 157, 159, 3, 2, 2, 2, 158, 94, 3, 2, 2, 2, 158, 113, 3, 2, 2, 2, 158, 118, 3, 2, 2, 2, 158, 123, 3, 2, 2, 2, 158, 134, 3, 2, 2, 2, 159, 11, 3, 2, 2, 2, 160, 161, 5, 28, 15, 2, 161, 164, 7, 73, 2, 2, 162, 163, 7, 40, 2, 2, 163, 165, 5, 16, 9, 2, 164, 162, 3, 2, 2, 2, 164, 165, 3, 2, 2, 2, 165, 13, 3, 2, 2, 2, 166, 168, 7, 41, 2, 2, 167, 169, 5, 4, 3, 2, 168, 167, 3, 2, 2, 2, 169, 170, 3, 2, 2, 2, 170, 168, 3, 2, 2, 2, 170, 171, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 173, 7, 42, 2, 2, 173, 15, 3, 2, 2, 2, 174, 175, 8, 9, 1, 2, 175, 211, 5, 24, 13, 2, 176, 177, 7, 36, 2, 2, 177, 178, 5, 18, 10, 2, 178, 179, 7, 37, 2, 2, 179, 211, 3, 2, 2, 2, 180, 186, 7, 43, 2, 2, 181, 182, 5, 16, 9, 2, 182, 183, 7, 25, 2, 2, 183, 185, 3, 2, 2, 2, 184, 181, 3, 2, 2, 2, 185, 188, 3, 2, 2, 2, 186, 184, 3, 2, 2, 2, 186, 187, 3, 2, 2, 2, 187, 190, 3, 2, 2, 2, 188, 186, 3, 2, 2, 2, 189, 191, 5, 16, 9, 2, 190, 189, 3, 2, 2, 2, 190, 191, 3, 2, 2, 2, 191, 192, 3, 2, 2, 2, 192, 211, 7, 44, 2, 2, 193, 194, 9, 4, 2, 2, 194, 211, 5, 16, 9, 17, 195, 196, 7, 55, 2, 2, 196, 211, 5, 16, 9, 7, 197, 202, 7, 59, 2, 2, 198, 199, 7, 73, 2, 2, 199, 201, 7, 25, 2, 2, 200, 198, 3, 2, 2, 2, 201, 204, 3, 2, 2, 2, 202, 200, 3, 2, 2, 2, 202, 203, 3, 2, 2, 2, 203, 206, 3, 2, 2, 2, 204, 202, 3, 2, 2, 2, 205, 207, 7, 73, 2, 2, 206, 205, 3, 2, 2, 2, 206, 207, 3, 2, 2, 2, 207, 208, 3, 2, 2, 2, 208, 209, 7, 60, 2, 2, 209, 211, 5, 16, 9, 3, 210, 174, 3, 2, 2, 2, 210, 176, 3, 2, 2, 2, 210, 180, 3, 2, 2, 2, 210, 193, 3, 2, 2, 2, 210, 195, 3, 2, 2, 2, 210, 197, 3, 2, 2, 2, 211, 277, 3, 2, 2, 2, 212, 213, 12, 18, 2, 2, 213, 214, 7, 11, 2, 2, 214, 276, 5, 16, 9, 18, 215, 216, 12, 16, 2, 2, 216, 217, 9, 5, 2, 2, 217, 276, 5, 16, 9, 17, 218, 219, 12, 15, 2, 2, 219, 220, 9, 6, 2, 2, 220, 276, 5, 16, 9, 16, 221, 222, 12, 14, 2, 2, 222, 223, 9, 7, 2, 2, 223, 276, 5, 16, 9, 15, 224, 225, 12, 13, 2, 2, 225, 226, 7, 19, 2, 2, 226, 276, 5, 16, 9, 14, 227, 228, 12, 12, 2, 2, 228, 229, 7, 20, 2, 2, 229, 276, 5, 16, 9, 13, 230, 231, 12, 11, 2, 2, 231, 232, 7, 21, 2, 2, 232, 276, 5, 16, 9, 12, 233, 234, 12, 10, 2, 2, 234, 235, 9, 8, 2, 2, 235, 276, 5, 16, 9, 11, 236, 237, 12, 8, 2, 2, 237, 238, 9, 9, 2, 2, 238, 276, 5, 16, 9, 8, 239, 240, 12, 6, 2, 2, 240, 241, 7, 56, 2, 2, 241, 276, 5, 16, 9, 6, 242, 243, 12, 5, 2, 2, 243, 244, 7, 57, 2, 2, 244, 276, 5, 16, 9, 5, 245, 246, 12, 4, 2, 2, 246, 247, 7, 58, 2, 2, 247, 248, 5, 16, 9, 2, 248, 249, 7, 40, 2, 2, 249, 250, 5, 16, 9, 4, 250, 276, 3, 2, 2, 2, 251, 252, 12, 21, 2, 2, 252, 253, 7, 43, 2, 2, 253, 254, 5, 18, 10, 2, 254, 255, 7, 44, 2, 2, 255, 276, 3, 2, 2, 2, 256, 257, 12, 20, 2, 2, 257, 258, 7, 45, 2, 2, 258, 276, 7, 73, 2, 2, 259, 260, 12, 19, 2, 2, 260, 266, 7, 36, 2, 2, 261, 262, 5, 22, 12, 2, 262, 263, 7, 25, 2, 2, 263, 265, 3, 2, 2, 2, 264, 261, 3, 2, 2, 2, 265, 268, 3, 2, 2, 2, 266, 264, 3, 2, 2, 2, 266, 267, 3, 2, 2, 2, 267, 270, 3, 2, 2, 2, 268, 266, 3, 2, 2, 2, 269, 271, 5, 22, 12, 2, 270, 269, 3, 2, 2, 2, 270, 271, 3, 2, 2, 2, 271, 272, 3, 2, 2, 2, 272, 276, 7, 37, 2, 2, 273, 274, 12, 9, 2, 2, 274, 276, 7, 48, 2, 2, 275, 212, 3, 2, 2, 2, 275, 215, 3, 2, 2, 2, 275, 218, 3, 2, 2, 2, 275, 221, 3, 2, 2, 2, 275, 224, 3, 2, 2, 2, 275, 227, 3, 2, 2, 2, 275, 230, 3, 2, 2, 2, 275, 233, 3, 2, 2, 2, 275, 236, 3, 2, 2, 2, 275, 239, 3, 2, 2, 2, 275, 242, 3, 2, 2, 2, 275, 245, 3, 2, 2, 2, 275, 251, 3, 2, 2, 2, 275, 256, 3, 2, 2, 2, 275, 259, 3, 2, 2, 2, 275, 273, 3, 2, 2, 2, 276, 279, 3, 2, 2, 2, 277, 275, 3, 2, 2, 2, 277, 278, 3, 2, 2, 2, 278, 17, 3, 2, 2, 2, 279, 277, 3, 2, 2, 2, 280, 281, 5, 16, 9, 2, 281, 282, 7, 25, 2, 2, 282, 284, 3, 2, 2, 2, 283, 280, 3, 2, 2, 2, 284, 287, 3, 2, 2, 2, 285, 283, 3, 2, 2, 2, 285, 286, 3, 2, 2, 2, 286, 288, 3, 2, 2, 2, 287, 285, 3, 2, 2, 2, 288, 289, 5, 16, 9, 2, 289, 19, 3, 2, 2, 2, 290, 291, 5, 18, 10, 2, 291, 292, 7, 2, 2, 3, 292, 21, 3, 2, 2, 2, 293, 294, 7, 73, 2, 2, 294, 296, 7, 10, 2, 2, 295, 293, 3, 2, 2, 2, 295, 296, 3, 2, 2, 2, 296, 297, 3, 2, 2, 2, 297, 298, 5, 16, 9, 2, 298, 23, 3, 2, 2, 2, 299, 306, 7, 69, 2, 2, 300, 306, 7, 70, 2, 2, 301, 306, 9, 10, 2, 2, 302, 306, 7, 71, 2, 2, 303, 306, 7, 72, 2, 2, 304, 306, 7, 73, 2, 2, 305, 299, 3, 2, 2, 2, 305, 300, 3, 2, 2, 2, 305, 301, 3, 2, 2, 2, 305, 302, 3, 2, 2, 2, 305, 303, 3, 2, 2, 2, 305, 304, 3, 2, 2, 2, 306, 25, 3, 2, 2, 2, 307, 308, 7, 73, 2, 2, 308, 310, 7, 25, 2, 2, 309, 307, 3, 2, 2, 2, 310, 313, 3, 2, 2, 2, 311, 309, 3, 2, 2, 2, 311, 312, 3, 2, 2, 2, 312, 314, 3, 2, 2, 2, 313, 311, 3, 2, 2, 2, 314, 315, 7, 73, 2, 2, 315, 27, 3, 2, 2, 2, 316, 317, 8, 15, 1, 2, 317, 329, 9, 11, 2, 2, 318, 319, 7, 36, 2, 2, 319, 320, 5, 28, 15, 2, 320, 321, 7, 37, 2, 2, 321, 329, 3, 2, 2, 2, 322, 323, 7, 43, 2, 2, 323, 324, 5, 28, 15, 2, 324, 325, 7, 44, 2, 2, 325, 329, 3, 2, 2, 2, 326, 327, 7, 60, 2, 2, 327, 329, 5, 28, 15, 3, 328, 316, 3, 2, 2, 2, 328, 318, 3, 2, 2, 2, 328, 322, 3, 2, 2, 2, 328, 326, 3, 2, 2, 2, 329, 338, 3, 2, 2, 2, 330, 331, 12, 5, 2, 2, 331, 332, 7, 12, 2, 2, 332, 337, 5, 28, 15, 5, 333, 334, 12, 4, 2, 2, 334, 335, 7, 60, 2, 2, 335, 337, 5, 28, 15, 4, 336, 330, 3, 2, 2, 2, 336, 333, 3, 2, 2, 2, 337, 340, 3, 2, 2, 2, 338, 336, 3, 2, 2, 2, 338, 339, 3, 2, 2, 2, 339, 29, 3, 2, 2, 2, 340, 338, 3, 2, 2, 2, 37, 33, 42, 52, 57, 63, 70, 82, 84, 91, 105, 111, 129, 142, 146, 150, 156, 158, 164, 170, 186, 190, 202, 206, 210, 266, 270, 275, 277, 285, 295, 305, 311, 328, 336, 338] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 76, 365, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 3, 2, 7, 2, 34, 10, 2, 12, 2, 14, 2, 37, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 45, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 55, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 60, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 66, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 71, 10, 4, 12, 4, 14, 4, 74, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 85, 10, 4, 5, 4, 87, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 92, 10, 5, 12, 5, 14, 5, 95, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 106, 10, 6, 12, 6, 14, 6, 109, 11, 6, 3, 6, 3, 6, 3, 6, 5, 6, 114, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 132, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 143, 10, 6, 12, 6, 14, 6, 146, 11, 6, 3, 6, 5, 6, 149, 10, 6, 3, 6, 3, 6, 5, 6, 153, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 159, 10, 6, 5, 6, 161, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 167, 10, 7, 3, 8, 3, 8, 6, 8, 171, 10, 8, 13, 8, 14, 8, 172, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 187, 10, 9, 12, 9, 14, 9, 190, 11, 9, 3, 9, 5, 9, 193, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 6, 9, 199, 10, 9, 13, 9, 14, 9, 200, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 212, 10, 9, 12, 9, 14, 9, 215, 11, 9, 3, 9, 5, 9, 218, 10, 9, 3, 9, 3, 9, 5, 9, 222, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 276, 10, 9, 12, 9, 14, 9, 279, 11, 9, 3, 9, 5, 9, 282, 10, 9, 3, 9, 3, 9, 3, 9, 7, 9, 287, 10, 9, 12, 9, 14, 9, 290, 11, 9, 3, 10, 3, 10, 3, 10, 7, 10, 295, 10, 10, 12, 10, 14, 10, 298, 11, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 311, 10, 12, 3, 12, 3, 12, 5, 12, 315, 10, 12, 3, 13, 3, 13, 5, 13, 319, 10, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 329, 10, 14, 3, 15, 3, 15, 7, 15, 333, 10, 15, 12, 15, 14, 15, 336, 11, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 352, 10, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 7, 16, 360, 10, 16, 12, 16, 14, 16, 363, 11, 16, 3, 16, 2, 4, 16, 30, 17, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 2, 12, 3, 2, 11, 21, 3, 2, 22, 23, 4, 2, 15, 16, 46, 46, 3, 2, 12, 14, 3, 2, 15, 16, 3, 2, 17, 18, 3, 2, 47, 48, 3, 2, 49, 54, 3, 2, 61, 62, 3, 2, 63, 68, 2, 423, 2, 35, 3, 2, 2, 2, 4, 44, 3, 2, 2, 2, 6, 86, 3, 2, 2, 2, 8, 88, 3, 2, 2, 2, 10, 160, 3, 2, 2, 2, 12, 162, 3, 2, 2, 2, 14, 168, 3, 2, 2, 2, 16, 221, 3, 2, 2, 2, 18, 296, 3, 2, 2, 2, 20, 301, 3, 2, 2, 2, 22, 314, 3, 2, 2, 2, 24, 318, 3, 2, 2, 2, 26, 328, 3, 2, 2, 2, 28, 334, 3, 2, 2, 2, 30, 351, 3, 2, 2, 2, 32, 34, 5, 4, 3, 2, 33, 32, 3, 2, 2, 2, 34, 37, 3, 2, 2, 2, 35, 33, 3, 2, 2, 2, 35, 36, 3, 2, 2, 2, 36, 38, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 38, 39, 7, 2, 2, 3, 39, 3, 3, 2, 2, 2, 40, 41, 5, 6, 4, 2, 41, 42, 7, 3, 2, 2, 42, 45, 3, 2, 2, 2, 43, 45, 5, 10, 6, 2, 44, 40, 3, 2, 2, 2, 44, 43, 3, 2, 2, 2, 45, 5, 3, 2, 2, 2, 46, 47, 7, 4, 2, 2, 47, 54, 7, 73, 2, 2, 48, 49, 7, 5, 2, 2, 49, 55, 5, 28, 15, 2, 50, 51, 7, 6, 2, 2, 51, 55, 5, 28, 15, 2, 52, 53, 7, 7, 2, 2, 53, 55, 7, 73, 2, 2, 54, 48, 3, 2, 2, 2, 54, 50, 3, 2, 2, 2, 54, 52, 3, 2, 2, 2, 54, 55, 3, 2, 2, 2, 55, 87, 3, 2, 2, 2, 56, 87, 7, 8, 2, 2, 57, 59, 7, 9, 2, 2, 58, 60, 5, 18, 10, 2, 59, 58, 3, 2, 2, 2, 59, 60, 3, 2, 2, 2, 60, 87, 3, 2, 2, 2, 61, 62, 5, 30, 16, 2, 62, 65, 7, 73, 2, 2, 63, 64, 7, 10, 2, 2, 64, 66, 5, 18, 10, 2, 65, 63, 3, 2, 2, 2, 65, 66, 3, 2, 2, 2, 66, 87, 3, 2, 2, 2, 67, 68, 5, 8, 5, 2, 68, 69, 7, 10, 2, 2, 69, 71, 3, 2, 2, 2, 70, 67, 3, 2, 2, 2, 71, 74, 3, 2, 2, 2, 72, 70, 3, 2, 2, 2, 72, 73, 3, 2, 2, 2, 73, 75, 3, 2, 2, 2, 74, 72, 3, 2, 2, 2, 75, 87, 5, 18, 10, 2, 76, 77, 5, 16, 9, 2, 77, 78, 9, 2, 2, 2, 78, 79, 7, 10, 2, 2, 79, 80, 5, 16, 9, 2, 80, 87, 3, 2, 2, 2, 81, 87, 9, 3, 2, 2, 82, 84, 7, 24, 2, 2, 83, 85, 5, 18, 10, 2, 84, 83, 3, 2, 2, 2, 84, 85, 3, 2, 2, 2, 85, 87, 3, 2, 2, 2, 86, 46, 3, 2, 2, 2, 86, 56, 3, 2, 2, 2, 86, 57, 3, 2, 2, 2, 86, 61, 3, 2, 2, 2, 86, 72, 3, 2, 2, 2, 86, 76, 3, 2, 2, 2, 86, 81, 3, 2, 2, 2, 86, 82, 3, 2, 2, 2, 87, 7, 3, 2, 2, 2, 88, 93, 5, 16, 9, 2, 89, 90, 7, 25, 2, 2, 90, 92, 5, 16, 9, 2, 91, 89, 3, 2, 2, 2, 92, 95, 3, 2, 2, 2, 93, 91, 3, 2, 2, 2, 93, 94, 3, 2, 2, 2, 94, 9, 3, 2, 2, 2, 95, 93, 3, 2, 2, 2, 96, 97, 7, 26, 2, 2, 97, 98, 5, 16, 9, 2, 98, 99, 7, 27, 2, 2, 99, 107, 5, 14, 8, 2, 100, 101, 7, 28, 2, 2, 101, 102, 5, 16, 9, 2, 102, 103, 7, 27, 2, 2, 103, 104, 5, 14, 8, 2, 104, 106, 3, 2, 2, 2, 105, 100, 3, 2, 2, 2, 106, 109, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 107, 108, 3, 2, 2, 2, 108, 113, 3, 2, 2, 2, 109, 107, 3, 2, 2, 2, 110, 111, 7, 29, 2, 2, 111, 112, 7, 27, 2, 2, 112, 114, 5, 14, 8, 2, 113, 110, 3, 2, 2, 2, 113, 114, 3, 2, 2, 2, 114, 161, 3, 2, 2, 2, 115, 116, 7, 30, 2, 2, 116, 117, 5, 16, 9, 2, 117, 118, 7, 27, 2, 2, 118, 119, 5, 14, 8, 2, 119, 161, 3, 2, 2, 2, 120, 121, 7, 31, 2, 2, 121, 122, 5, 16, 9, 2, 122, 123, 7, 27, 2, 2, 123, 124, 5, 14, 8, 2, 124, 161, 3, 2, 2, 2, 125, 126, 7, 32, 2, 2, 126, 127, 5, 18, 10, 2, 127, 128, 7, 33, 2, 2, 128, 131, 5, 18, 10, 2, 129, 130, 7, 34, 2, 2, 130, 132, 5, 18, 10, 2, 131, 129, 3, 2, 2, 2, 131, 132, 3, 2, 2, 2, 132, 133, 3, 2, 2, 2, 133, 134, 7, 27, 2, 2, 134, 135, 5, 14, 8, 2, 135, 161, 3, 2, 2, 2, 136, 137, 7, 35, 2, 2, 137, 138, 7, 73, 2, 2, 138, 144, 7, 36, 2, 2, 139, 140, 5, 12, 7, 2, 140, 141, 7, 25, 2, 2, 141, 143, 3, 2, 2, 2, 142, 139, 3, 2, 2, 2, 143, 146, 3, 2, 2, 2, 144, 142, 3, 2, 2, 2, 144, 145, 3, 2, 2, 2, 145, 148, 3, 2, 2, 2, 146, 144, 3, 2, 2, 2, 147, 149, 5, 12, 7, 2, 148, 147, 3, 2, 2, 2, 148, 149, 3, 2, 2, 2, 149, 150, 3, 2, 2, 2, 150, 152, 7, 37, 2, 2, 151, 153, 5, 30, 16, 2, 152, 151, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 158, 3, 2, 2, 2, 154, 155, 7, 38, 2, 2, 155, 159, 5, 14, 8, 2, 156, 157, 7, 39, 2, 2, 157, 159, 7, 3, 2, 2, 158, 154, 3, 2, 2, 2, 158, 156, 3, 2, 2, 2, 159, 161, 3, 2, 2, 2, 160, 96, 3, 2, 2, 2, 160, 115, 3, 2, 2, 2, 160, 120, 3, 2, 2, 2, 160, 125, 3, 2, 2, 2, 160, 136, 3, 2, 2, 2, 161, 11, 3, 2, 2, 2, 162, 163, 5, 30, 16, 2, 163, 166, 7, 73, 2, 2, 164, 165, 7, 40, 2, 2, 165, 167, 5, 16, 9, 2, 166, 164, 3, 2, 2, 2, 166, 167, 3, 2, 2, 2, 167, 13, 3, 2, 2, 2, 168, 170, 7, 41, 2, 2, 169, 171, 5, 4, 3, 2, 170, 169, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 170, 3, 2, 2, 2, 172, 173, 3, 2, 2, 2, 173, 174, 3, 2, 2, 2, 174, 175, 7, 42, 2, 2, 175, 15, 3, 2, 2, 2, 176, 177, 8, 9, 1, 2, 177, 222, 5, 26, 14, 2, 178, 179, 7, 36, 2, 2, 179, 180, 5, 18, 10, 2, 180, 181, 7, 37, 2, 2, 181, 222, 3, 2, 2, 2, 182, 188, 7, 43, 2, 2, 183, 184, 5, 16, 9, 2, 184, 185, 7, 25, 2, 2, 185, 187, 3, 2, 2, 2, 186, 183, 3, 2, 2, 2, 187, 190, 3, 2, 2, 2, 188, 186, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 192, 3, 2, 2, 2, 190, 188, 3, 2, 2, 2, 191, 193, 5, 16, 9, 2, 192, 191, 3, 2, 2, 2, 192, 193, 3, 2, 2, 2, 193, 194, 3, 2, 2, 2, 194, 222, 7, 44, 2, 2, 195, 196, 7, 43, 2, 2, 196, 198, 5, 16, 9, 2, 197, 199, 5, 22, 12, 2, 198, 197, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 198, 3, 2, 2, 2, 200, 201, 3, 2, 2, 2, 201, 202, 3, 2, 2, 2, 202, 203, 7, 44, 2, 2, 203, 222, 3, 2, 2, 2, 204, 205, 9, 4, 2, 2, 205, 222, 5, 16, 9, 17, 206, 207, 7, 55, 2, 2, 207, 222, 5, 16, 9, 7, 208, 213, 7, 59, 2, 2, 209, 210, 7, 73, 2, 2, 210, 212, 7, 25, 2, 2, 211, 209, 3, 2, 2, 2, 212, 215, 3, 2, 2, 2, 213, 211, 3, 2, 2, 2, 213, 214, 3, 2, 2, 2, 214, 217, 3, 2, 2, 2, 215, 213, 3, 2, 2, 2, 216, 218, 7, 73, 2, 2, 217, 216, 3, 2, 2, 2, 217, 218, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 220, 7, 60, 2, 2, 220, 222, 5, 16, 9, 3, 221, 176, 3, 2, 2, 2, 221, 178, 3, 2, 2, 2, 221, 182, 3, 2, 2, 2, 221, 195, 3, 2, 2, 2, 221, 204, 3, 2, 2, 2, 221, 206, 3, 2, 2, 2, 221, 208, 3, 2, 2, 2, 222, 288, 3, 2, 2, 2, 223, 224, 12, 18, 2, 2, 224, 225, 7, 11, 2, 2, 225, 287, 5, 16, 9, 18, 226, 227, 12, 16, 2, 2, 227, 228, 9, 5, 2, 2, 228, 287, 5, 16, 9, 17, 229, 230, 12, 15, 2, 2, 230, 231, 9, 6, 2, 2, 231, 287, 5, 16, 9, 16, 232, 233, 12, 14, 2, 2, 233, 234, 9, 7, 2, 2, 234, 287, 5, 16, 9, 15, 235, 236, 12, 13, 2, 2, 236, 237, 7, 19, 2, 2, 237, 287, 5, 16, 9, 14, 238, 239, 12, 12, 2, 2, 239, 240, 7, 20, 2, 2, 240, 287, 5, 16, 9, 13, 241, 242, 12, 11, 2, 2, 242, 243, 7, 21, 2, 2, 243, 287, 5, 16, 9, 12, 244, 245, 12, 10, 2, 2, 245, 246, 9, 8, 2, 2, 246, 287, 5, 16, 9, 11, 247, 248, 12, 8, 2, 2, 248, 249, 9, 9, 2, 2, 249, 287, 5, 16, 9, 8, 250, 251, 12, 6, 2, 2, 251, 252, 7, 56, 2, 2, 252, 287, 5, 16, 9, 6, 253, 254, 12, 5, 2, 2, 254, 255, 7, 57, 2, 2, 255, 287, 5, 16, 9, 5, 256, 257, 12, 4, 2, 2, 257, 258, 7, 58, 2, 2, 258, 259, 5, 16, 9, 2, 259, 260, 7, 40, 2, 2, 260, 261, 5, 16, 9, 4, 261, 287, 3, 2, 2, 2, 262, 263, 12, 21, 2, 2, 263, 264, 7, 43, 2, 2, 264, 265, 5, 18, 10, 2, 265, 266, 7, 44, 2, 2, 266, 287, 3, 2, 2, 2, 267, 268, 12, 20, 2, 2, 268, 269, 7, 45, 2, 2, 269, 287, 7, 73, 2, 2, 270, 271, 12, 19, 2, 2, 271, 277, 7, 36, 2, 2, 272, 273, 5, 24, 13, 2, 273, 274, 7, 25, 2, 2, 274, 276, 3, 2, 2, 2, 275, 272, 3, 2, 2, 2, 276, 279, 3, 2, 2, 2, 277, 275, 3, 2, 2, 2, 277, 278, 3, 2, 2, 2, 278, 281, 3, 2, 2, 2, 279, 277, 3, 2, 2, 2, 280, 282, 5, 24, 13, 2, 281, 280, 3, 2, 2, 2, 281, 282, 3, 2, 2, 2, 282, 283, 3, 2, 2, 2, 283, 287, 7, 37, 2, 2, 284, 285, 12, 9, 2, 2, 285, 287, 7, 48, 2, 2, 286, 223, 3, 2, 2, 2, 286, 226, 3, 2, 2, 2, 286, 229, 3, 2, 2, 2, 286, 232, 3, 2, 2, 2, 286, 235, 3, 2, 2, 2, 286, 238, 3, 2, 2, 2, 286, 241, 3, 2, 2, 2, 286, 244, 3, 2, 2, 2, 286, 247, 3, 2, 2, 2, 286, 250, 3, 2, 2, 2, 286, 253, 3, 2, 2, 2, 286, 256, 3, 2, 2, 2, 286, 262, 3, 2, 2, 2, 286, 267, 3, 2, 2, 2, 286, 270, 3, 2, 2, 2, 286, 284, 3, 2, 2, 2, 287, 290, 3, 2, 2, 2, 288, 286, 3, 2, 2, 2, 288, 289, 3, 2, 2, 2, 289, 17, 3, 2, 2, 2, 290, 288, 3, 2, 2, 2, 291, 292, 5, 16, 9, 2, 292, 293, 7, 25, 2, 2, 293, 295, 3, 2, 2, 2, 294, 291, 3, 2, 2, 2, 295, 298, 3, 2, 2, 2, 296, 294, 3, 2, 2, 2, 296, 297, 3, 2, 2, 2, 297, 299, 3, 2, 2, 2, 298, 296, 3, 2, 2, 2, 299, 300, 5, 16, 9, 2, 300, 19, 3, 2, 2, 2, 301, 302, 5, 18, 10, 2, 302, 303, 7, 2, 2, 3, 303, 21, 3, 2, 2, 2, 304, 305, 7, 32, 2, 2, 305, 306, 5, 18, 10, 2, 306, 307, 7, 33, 2, 2, 307, 310, 5, 18, 10, 2, 308, 309, 7, 34, 2, 2, 309, 311, 5, 18, 10, 2, 310, 308, 3, 2, 2, 2, 310, 311, 3, 2, 2, 2, 311, 315, 3, 2, 2, 2, 312, 313, 7, 26, 2, 2, 313, 315, 5, 16, 9, 2, 314, 304, 3, 2, 2, 2, 314, 312, 3, 2, 2, 2, 315, 23, 3, 2, 2, 2, 316, 317, 7, 73, 2, 2, 317, 319, 7, 10, 2, 2, 318, 316, 3, 2, 2, 2, 318, 319, 3, 2, 2, 2, 319, 320, 3, 2, 2, 2, 320, 321, 5, 16, 9, 2, 321, 25, 3, 2, 2, 2, 322, 329, 7, 69, 2, 2, 323, 329, 7, 70, 2, 2, 324, 329, 9, 10, 2, 2, 325, 329, 7, 71, 2, 2, 326, 329, 7, 72, 2, 2, 327, 329, 7, 73, 2, 2, 328, 322, 3, 2, 2, 2, 328, 323, 3, 2, 2, 2, 328, 324, 3, 2, 2, 2, 328, 325, 3, 2, 2, 2, 328, 326, 3, 2, 2, 2, 328, 327, 3, 2, 2, 2, 329, 27, 3, 2, 2, 2, 330, 331, 7, 73, 2, 2, 331, 333, 7, 25, 2, 2, 332, 330, 3, 2, 2, 2, 333, 336, 3, 2, 2, 2, 334, 332, 3, 2, 2, 2, 334, 335, 3, 2, 2, 2, 335, 337, 3, 2, 2, 2, 336, 334, 3, 2, 2, 2, 337, 338, 7, 73, 2, 2, 338, 29, 3, 2, 2, 2, 339, 340, 8, 16, 1, 2, 340, 352, 9, 11, 2, 2, 341, 342, 7, 36, 2, 2, 342, 343, 5, 30, 16, 2, 343, 344, 7, 37, 2, 2, 344, 352, 3, 2, 2, 2, 345, 346, 7, 43, 2, 2, 346, 347, 5, 30, 16, 2, 347, 348, 7, 44, 2, 2, 348, 352, 3, 2, 2, 2, 349, 350, 7, 60, 2, 2, 350, 352, 5, 30, 16, 3, 351, 339, 3, 2, 2, 2, 351, 341, 3, 2, 2, 2, 351, 345, 3, 2, 2, 2, 351, 349, 3, 2, 2, 2, 352, 361, 3, 2, 2, 2, 353, 354, 12, 5, 2, 2, 354, 355, 7, 12, 2, 2, 355, 360, 5, 30, 16, 5, 356, 357, 12, 4, 2, 2, 357, 358, 7, 60, 2, 2, 358, 360, 5, 30, 16, 4, 359, 353, 3, 2, 2, 2, 359, 356, 3, 2, 2, 2, 360, 363, 3, 2, 2, 2, 361, 359, 3, 2, 2, 2, 361, 362, 3, 2, 2, 2, 362, 31, 3, 2, 2, 2, 363, 361, 3, 2, 2, 2, 40, 35, 44, 54, 59, 65, 72, 84, 86, 93, 107, 113, 131, 144, 148, 152, 158, 160, 166, 172, 188, 192, 200, 213, 217, 221, 277, 281, 286, 288, 296, 310, 314, 318, 328, 334, 351, 359, 361] \ No newline at end of file diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index a7584b8d..9a87fdec 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -9,167 +9,180 @@ def serializedATN(): with StringIO() as buf: buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3L") - buf.write("\u0156\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\u016d\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16") - buf.write("\t\16\4\17\t\17\3\2\7\2 \n\2\f\2\16\2#\13\2\3\2\3\2\3") - buf.write("\3\3\3\3\3\3\3\5\3+\n\3\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3") - buf.write("\4\5\4\65\n\4\3\4\3\4\3\4\5\4:\n\4\3\4\3\4\3\4\3\4\5\4") - buf.write("@\n\4\3\4\3\4\3\4\7\4E\n\4\f\4\16\4H\13\4\3\4\3\4\3\4") - buf.write("\3\4\3\4\3\4\3\4\3\4\3\4\5\4S\n\4\5\4U\n\4\3\5\3\5\3\5") - buf.write("\7\5Z\n\5\f\5\16\5]\13\5\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3") - buf.write("\6\3\6\7\6h\n\6\f\6\16\6k\13\6\3\6\3\6\3\6\5\6p\n\6\3") - buf.write("\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6") - buf.write("\3\6\3\6\5\6\u0082\n\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6") - buf.write("\3\6\7\6\u008d\n\6\f\6\16\6\u0090\13\6\3\6\5\6\u0093\n") - buf.write("\6\3\6\3\6\5\6\u0097\n\6\3\6\3\6\3\6\3\6\5\6\u009d\n\6") - buf.write("\5\6\u009f\n\6\3\7\3\7\3\7\3\7\5\7\u00a5\n\7\3\b\3\b\6") - buf.write("\b\u00a9\n\b\r\b\16\b\u00aa\3\b\3\b\3\t\3\t\3\t\3\t\3") - buf.write("\t\3\t\3\t\3\t\3\t\3\t\7\t\u00b9\n\t\f\t\16\t\u00bc\13") - buf.write("\t\3\t\5\t\u00bf\n\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\7") - buf.write("\t\u00c9\n\t\f\t\16\t\u00cc\13\t\3\t\5\t\u00cf\n\t\3\t") - buf.write("\3\t\5\t\u00d3\n\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") + buf.write("\t\16\4\17\t\17\4\20\t\20\3\2\7\2\"\n\2\f\2\16\2%\13\2") + buf.write("\3\2\3\2\3\3\3\3\3\3\3\3\5\3-\n\3\3\4\3\4\3\4\3\4\3\4") + buf.write("\3\4\3\4\3\4\5\4\67\n\4\3\4\3\4\3\4\5\4<\n\4\3\4\3\4\3") + buf.write("\4\3\4\5\4B\n\4\3\4\3\4\3\4\7\4G\n\4\f\4\16\4J\13\4\3") + buf.write("\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\5\4U\n\4\5\4W\n\4\3") + buf.write("\5\3\5\3\5\7\5\\\n\5\f\5\16\5_\13\5\3\6\3\6\3\6\3\6\3") + buf.write("\6\3\6\3\6\3\6\3\6\7\6j\n\6\f\6\16\6m\13\6\3\6\3\6\3\6") + buf.write("\5\6r\n\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6") + buf.write("\3\6\3\6\3\6\3\6\3\6\5\6\u0084\n\6\3\6\3\6\3\6\3\6\3\6") + buf.write("\3\6\3\6\3\6\3\6\7\6\u008f\n\6\f\6\16\6\u0092\13\6\3\6") + buf.write("\5\6\u0095\n\6\3\6\3\6\5\6\u0099\n\6\3\6\3\6\3\6\3\6\5") + buf.write("\6\u009f\n\6\5\6\u00a1\n\6\3\7\3\7\3\7\3\7\5\7\u00a7\n") + buf.write("\7\3\b\3\b\6\b\u00ab\n\b\r\b\16\b\u00ac\3\b\3\b\3\t\3") + buf.write("\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\7\t\u00bb\n\t\f\t\16") + buf.write("\t\u00be\13\t\3\t\5\t\u00c1\n\t\3\t\3\t\3\t\3\t\6\t\u00c7") + buf.write("\n\t\r\t\16\t\u00c8\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") + buf.write("\t\7\t\u00d4\n\t\f\t\16\t\u00d7\13\t\3\t\5\t\u00da\n\t") + buf.write("\3\t\3\t\5\t\u00de\n\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") buf.write("\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") - buf.write("\t\3\t\3\t\7\t\u0109\n\t\f\t\16\t\u010c\13\t\3\t\5\t\u010f") - buf.write("\n\t\3\t\3\t\3\t\7\t\u0114\n\t\f\t\16\t\u0117\13\t\3\n") - buf.write("\3\n\3\n\7\n\u011c\n\n\f\n\16\n\u011f\13\n\3\n\3\n\3\13") - buf.write("\3\13\3\13\3\f\3\f\5\f\u0128\n\f\3\f\3\f\3\r\3\r\3\r\3") - buf.write("\r\3\r\3\r\5\r\u0132\n\r\3\16\3\16\7\16\u0136\n\16\f\16") - buf.write("\16\16\u0139\13\16\3\16\3\16\3\17\3\17\3\17\3\17\3\17") - buf.write("\3\17\3\17\3\17\3\17\3\17\3\17\3\17\5\17\u0149\n\17\3") - buf.write("\17\3\17\3\17\3\17\3\17\3\17\7\17\u0151\n\17\f\17\16\17") - buf.write("\u0154\13\17\3\17\2\4\20\34\20\2\4\6\b\n\f\16\20\22\24") - buf.write("\26\30\32\34\2\f\3\2\13\25\3\2\26\27\4\2\17\20..\3\2\f") - buf.write("\16\3\2\17\20\3\2\21\22\3\2/\60\3\2\61\66\3\2=>\3\2?D") - buf.write("\2\u018d\2!\3\2\2\2\4*\3\2\2\2\6T\3\2\2\2\bV\3\2\2\2\n") - buf.write("\u009e\3\2\2\2\f\u00a0\3\2\2\2\16\u00a6\3\2\2\2\20\u00d2") - buf.write("\3\2\2\2\22\u011d\3\2\2\2\24\u0122\3\2\2\2\26\u0127\3") - buf.write("\2\2\2\30\u0131\3\2\2\2\32\u0137\3\2\2\2\34\u0148\3\2") - buf.write("\2\2\36 \5\4\3\2\37\36\3\2\2\2 #\3\2\2\2!\37\3\2\2\2!") - buf.write("\"\3\2\2\2\"$\3\2\2\2#!\3\2\2\2$%\7\2\2\3%\3\3\2\2\2&") - buf.write("\'\5\6\4\2\'(\7\3\2\2(+\3\2\2\2)+\5\n\6\2*&\3\2\2\2*)") - buf.write("\3\2\2\2+\5\3\2\2\2,-\7\4\2\2-\64\7I\2\2./\7\5\2\2/\65") - buf.write("\5\32\16\2\60\61\7\6\2\2\61\65\5\32\16\2\62\63\7\7\2\2") - buf.write("\63\65\7I\2\2\64.\3\2\2\2\64\60\3\2\2\2\64\62\3\2\2\2") - buf.write("\64\65\3\2\2\2\65U\3\2\2\2\66U\7\b\2\2\679\7\t\2\28:\5") - buf.write("\22\n\298\3\2\2\29:\3\2\2\2:U\3\2\2\2;<\5\34\17\2\7\n\2\2>@\5\22\n\2?=\3\2\2\2?@\3\2\2\2@U\3\2\2") - buf.write("\2AB\5\b\5\2BC\7\n\2\2CE\3\2\2\2DA\3\2\2\2EH\3\2\2\2F") - buf.write("D\3\2\2\2FG\3\2\2\2GI\3\2\2\2HF\3\2\2\2IU\5\22\n\2JK\5") - buf.write("\20\t\2KL\t\2\2\2LM\7\n\2\2MN\5\20\t\2NU\3\2\2\2OU\t\3") - buf.write("\2\2PR\7\30\2\2QS\5\22\n\2RQ\3\2\2\2RS\3\2\2\2SU\3\2\2") - buf.write("\2T,\3\2\2\2T\66\3\2\2\2T\67\3\2\2\2T;\3\2\2\2TF\3\2\2") - buf.write("\2TJ\3\2\2\2TO\3\2\2\2TP\3\2\2\2U\7\3\2\2\2V[\5\20\t\2") - buf.write("WX\7\31\2\2XZ\5\20\t\2YW\3\2\2\2Z]\3\2\2\2[Y\3\2\2\2[") - buf.write("\\\3\2\2\2\\\t\3\2\2\2][\3\2\2\2^_\7\32\2\2_`\5\20\t\2") - buf.write("`a\7\33\2\2ai\5\16\b\2bc\7\34\2\2cd\5\20\t\2de\7\33\2") - buf.write("\2ef\5\16\b\2fh\3\2\2\2gb\3\2\2\2hk\3\2\2\2ig\3\2\2\2") - buf.write("ij\3\2\2\2jo\3\2\2\2ki\3\2\2\2lm\7\35\2\2mn\7\33\2\2n") - buf.write("p\5\16\b\2ol\3\2\2\2op\3\2\2\2p\u009f\3\2\2\2qr\7\36\2") - buf.write("\2rs\5\20\t\2st\7\33\2\2tu\5\16\b\2u\u009f\3\2\2\2vw\7") - buf.write("\37\2\2wx\5\20\t\2xy\7\33\2\2yz\5\16\b\2z\u009f\3\2\2") - buf.write("\2{|\7 \2\2|}\5\22\n\2}~\7!\2\2~\u0081\5\22\n\2\177\u0080") - buf.write("\7\"\2\2\u0080\u0082\5\22\n\2\u0081\177\3\2\2\2\u0081") - buf.write("\u0082\3\2\2\2\u0082\u0083\3\2\2\2\u0083\u0084\7\33\2") - buf.write("\2\u0084\u0085\5\16\b\2\u0085\u009f\3\2\2\2\u0086\u0087") - buf.write("\7#\2\2\u0087\u0088\7I\2\2\u0088\u008e\7$\2\2\u0089\u008a") - buf.write("\5\f\7\2\u008a\u008b\7\31\2\2\u008b\u008d\3\2\2\2\u008c") - buf.write("\u0089\3\2\2\2\u008d\u0090\3\2\2\2\u008e\u008c\3\2\2\2") - buf.write("\u008e\u008f\3\2\2\2\u008f\u0092\3\2\2\2\u0090\u008e\3") - buf.write("\2\2\2\u0091\u0093\5\f\7\2\u0092\u0091\3\2\2\2\u0092\u0093") - buf.write("\3\2\2\2\u0093\u0094\3\2\2\2\u0094\u0096\7%\2\2\u0095") - buf.write("\u0097\5\34\17\2\u0096\u0095\3\2\2\2\u0096\u0097\3\2\2") - buf.write("\2\u0097\u009c\3\2\2\2\u0098\u0099\7&\2\2\u0099\u009d") - buf.write("\5\16\b\2\u009a\u009b\7\'\2\2\u009b\u009d\7\3\2\2\u009c") - buf.write("\u0098\3\2\2\2\u009c\u009a\3\2\2\2\u009d\u009f\3\2\2\2") - buf.write("\u009e^\3\2\2\2\u009eq\3\2\2\2\u009ev\3\2\2\2\u009e{\3") - buf.write("\2\2\2\u009e\u0086\3\2\2\2\u009f\13\3\2\2\2\u00a0\u00a1") - buf.write("\5\34\17\2\u00a1\u00a4\7I\2\2\u00a2\u00a3\7(\2\2\u00a3") - buf.write("\u00a5\5\20\t\2\u00a4\u00a2\3\2\2\2\u00a4\u00a5\3\2\2") - buf.write("\2\u00a5\r\3\2\2\2\u00a6\u00a8\7)\2\2\u00a7\u00a9\5\4") - buf.write("\3\2\u00a8\u00a7\3\2\2\2\u00a9\u00aa\3\2\2\2\u00aa\u00a8") - buf.write("\3\2\2\2\u00aa\u00ab\3\2\2\2\u00ab\u00ac\3\2\2\2\u00ac") - buf.write("\u00ad\7*\2\2\u00ad\17\3\2\2\2\u00ae\u00af\b\t\1\2\u00af") - buf.write("\u00d3\5\30\r\2\u00b0\u00b1\7$\2\2\u00b1\u00b2\5\22\n") - buf.write("\2\u00b2\u00b3\7%\2\2\u00b3\u00d3\3\2\2\2\u00b4\u00ba") - buf.write("\7+\2\2\u00b5\u00b6\5\20\t\2\u00b6\u00b7\7\31\2\2\u00b7") - buf.write("\u00b9\3\2\2\2\u00b8\u00b5\3\2\2\2\u00b9\u00bc\3\2\2\2") - buf.write("\u00ba\u00b8\3\2\2\2\u00ba\u00bb\3\2\2\2\u00bb\u00be\3") - buf.write("\2\2\2\u00bc\u00ba\3\2\2\2\u00bd\u00bf\5\20\t\2\u00be") - buf.write("\u00bd\3\2\2\2\u00be\u00bf\3\2\2\2\u00bf\u00c0\3\2\2\2") - buf.write("\u00c0\u00d3\7,\2\2\u00c1\u00c2\t\4\2\2\u00c2\u00d3\5") - buf.write("\20\t\21\u00c3\u00c4\7\67\2\2\u00c4\u00d3\5\20\t\7\u00c5") - buf.write("\u00ca\7;\2\2\u00c6\u00c7\7I\2\2\u00c7\u00c9\7\31\2\2") - buf.write("\u00c8\u00c6\3\2\2\2\u00c9\u00cc\3\2\2\2\u00ca\u00c8\3") - buf.write("\2\2\2\u00ca\u00cb\3\2\2\2\u00cb\u00ce\3\2\2\2\u00cc\u00ca") - buf.write("\3\2\2\2\u00cd\u00cf\7I\2\2\u00ce\u00cd\3\2\2\2\u00ce") - buf.write("\u00cf\3\2\2\2\u00cf\u00d0\3\2\2\2\u00d0\u00d1\7<\2\2") - buf.write("\u00d1\u00d3\5\20\t\3\u00d2\u00ae\3\2\2\2\u00d2\u00b0") - buf.write("\3\2\2\2\u00d2\u00b4\3\2\2\2\u00d2\u00c1\3\2\2\2\u00d2") - buf.write("\u00c3\3\2\2\2\u00d2\u00c5\3\2\2\2\u00d3\u0115\3\2\2\2") - buf.write("\u00d4\u00d5\f\22\2\2\u00d5\u00d6\7\13\2\2\u00d6\u0114") - buf.write("\5\20\t\22\u00d7\u00d8\f\20\2\2\u00d8\u00d9\t\5\2\2\u00d9") - buf.write("\u0114\5\20\t\21\u00da\u00db\f\17\2\2\u00db\u00dc\t\6") - buf.write("\2\2\u00dc\u0114\5\20\t\20\u00dd\u00de\f\16\2\2\u00de") - buf.write("\u00df\t\7\2\2\u00df\u0114\5\20\t\17\u00e0\u00e1\f\r\2") - buf.write("\2\u00e1\u00e2\7\23\2\2\u00e2\u0114\5\20\t\16\u00e3\u00e4") - buf.write("\f\f\2\2\u00e4\u00e5\7\24\2\2\u00e5\u0114\5\20\t\r\u00e6") - buf.write("\u00e7\f\13\2\2\u00e7\u00e8\7\25\2\2\u00e8\u0114\5\20") - buf.write("\t\f\u00e9\u00ea\f\n\2\2\u00ea\u00eb\t\b\2\2\u00eb\u0114") - buf.write("\5\20\t\13\u00ec\u00ed\f\b\2\2\u00ed\u00ee\t\t\2\2\u00ee") - buf.write("\u0114\5\20\t\b\u00ef\u00f0\f\6\2\2\u00f0\u00f1\78\2\2") - buf.write("\u00f1\u0114\5\20\t\6\u00f2\u00f3\f\5\2\2\u00f3\u00f4") - buf.write("\79\2\2\u00f4\u0114\5\20\t\5\u00f5\u00f6\f\4\2\2\u00f6") - buf.write("\u00f7\7:\2\2\u00f7\u00f8\5\20\t\2\u00f8\u00f9\7(\2\2") - buf.write("\u00f9\u00fa\5\20\t\4\u00fa\u0114\3\2\2\2\u00fb\u00fc") - buf.write("\f\25\2\2\u00fc\u00fd\7+\2\2\u00fd\u00fe\5\22\n\2\u00fe") - buf.write("\u00ff\7,\2\2\u00ff\u0114\3\2\2\2\u0100\u0101\f\24\2\2") - buf.write("\u0101\u0102\7-\2\2\u0102\u0114\7I\2\2\u0103\u0104\f\23") - buf.write("\2\2\u0104\u010a\7$\2\2\u0105\u0106\5\26\f\2\u0106\u0107") - buf.write("\7\31\2\2\u0107\u0109\3\2\2\2\u0108\u0105\3\2\2\2\u0109") - buf.write("\u010c\3\2\2\2\u010a\u0108\3\2\2\2\u010a\u010b\3\2\2\2") - buf.write("\u010b\u010e\3\2\2\2\u010c\u010a\3\2\2\2\u010d\u010f\5") - buf.write("\26\f\2\u010e\u010d\3\2\2\2\u010e\u010f\3\2\2\2\u010f") - buf.write("\u0110\3\2\2\2\u0110\u0114\7%\2\2\u0111\u0112\f\t\2\2") - buf.write("\u0112\u0114\7\60\2\2\u0113\u00d4\3\2\2\2\u0113\u00d7") - buf.write("\3\2\2\2\u0113\u00da\3\2\2\2\u0113\u00dd\3\2\2\2\u0113") - buf.write("\u00e0\3\2\2\2\u0113\u00e3\3\2\2\2\u0113\u00e6\3\2\2\2") - buf.write("\u0113\u00e9\3\2\2\2\u0113\u00ec\3\2\2\2\u0113\u00ef\3") - buf.write("\2\2\2\u0113\u00f2\3\2\2\2\u0113\u00f5\3\2\2\2\u0113\u00fb") - buf.write("\3\2\2\2\u0113\u0100\3\2\2\2\u0113\u0103\3\2\2\2\u0113") - buf.write("\u0111\3\2\2\2\u0114\u0117\3\2\2\2\u0115\u0113\3\2\2\2") - buf.write("\u0115\u0116\3\2\2\2\u0116\21\3\2\2\2\u0117\u0115\3\2") - buf.write("\2\2\u0118\u0119\5\20\t\2\u0119\u011a\7\31\2\2\u011a\u011c") - buf.write("\3\2\2\2\u011b\u0118\3\2\2\2\u011c\u011f\3\2\2\2\u011d") - buf.write("\u011b\3\2\2\2\u011d\u011e\3\2\2\2\u011e\u0120\3\2\2\2") - buf.write("\u011f\u011d\3\2\2\2\u0120\u0121\5\20\t\2\u0121\23\3\2") - buf.write("\2\2\u0122\u0123\5\22\n\2\u0123\u0124\7\2\2\3\u0124\25") - buf.write("\3\2\2\2\u0125\u0126\7I\2\2\u0126\u0128\7\n\2\2\u0127") - buf.write("\u0125\3\2\2\2\u0127\u0128\3\2\2\2\u0128\u0129\3\2\2\2") - buf.write("\u0129\u012a\5\20\t\2\u012a\27\3\2\2\2\u012b\u0132\7E") - buf.write("\2\2\u012c\u0132\7F\2\2\u012d\u0132\t\n\2\2\u012e\u0132") - buf.write("\7G\2\2\u012f\u0132\7H\2\2\u0130\u0132\7I\2\2\u0131\u012b") - buf.write("\3\2\2\2\u0131\u012c\3\2\2\2\u0131\u012d\3\2\2\2\u0131") - buf.write("\u012e\3\2\2\2\u0131\u012f\3\2\2\2\u0131\u0130\3\2\2\2") - buf.write("\u0132\31\3\2\2\2\u0133\u0134\7I\2\2\u0134\u0136\7\31") - buf.write("\2\2\u0135\u0133\3\2\2\2\u0136\u0139\3\2\2\2\u0137\u0135") - buf.write("\3\2\2\2\u0137\u0138\3\2\2\2\u0138\u013a\3\2\2\2\u0139") - buf.write("\u0137\3\2\2\2\u013a\u013b\7I\2\2\u013b\33\3\2\2\2\u013c") - buf.write("\u013d\b\17\1\2\u013d\u0149\t\13\2\2\u013e\u013f\7$\2") - buf.write("\2\u013f\u0140\5\34\17\2\u0140\u0141\7%\2\2\u0141\u0149") - buf.write("\3\2\2\2\u0142\u0143\7+\2\2\u0143\u0144\5\34\17\2\u0144") - buf.write("\u0145\7,\2\2\u0145\u0149\3\2\2\2\u0146\u0147\7<\2\2\u0147") - buf.write("\u0149\5\34\17\3\u0148\u013c\3\2\2\2\u0148\u013e\3\2\2") - buf.write("\2\u0148\u0142\3\2\2\2\u0148\u0146\3\2\2\2\u0149\u0152") - buf.write("\3\2\2\2\u014a\u014b\f\5\2\2\u014b\u014c\7\f\2\2\u014c") - buf.write("\u0151\5\34\17\5\u014d\u014e\f\4\2\2\u014e\u014f\7<\2") - buf.write("\2\u014f\u0151\5\34\17\4\u0150\u014a\3\2\2\2\u0150\u014d") - buf.write("\3\2\2\2\u0151\u0154\3\2\2\2\u0152\u0150\3\2\2\2\u0152") - buf.write("\u0153\3\2\2\2\u0153\35\3\2\2\2\u0154\u0152\3\2\2\2%!") - buf.write("*\649?FRT[io\u0081\u008e\u0092\u0096\u009c\u009e\u00a4") - buf.write("\u00aa\u00ba\u00be\u00ca\u00ce\u00d2\u010a\u010e\u0113") - buf.write("\u0115\u011d\u0127\u0131\u0137\u0148\u0150\u0152") + buf.write("\t\3\t\3\t\3\t\7\t\u0114\n\t\f\t\16\t\u0117\13\t\3\t\5") + buf.write("\t\u011a\n\t\3\t\3\t\3\t\7\t\u011f\n\t\f\t\16\t\u0122") + buf.write("\13\t\3\n\3\n\3\n\7\n\u0127\n\n\f\n\16\n\u012a\13\n\3") + buf.write("\n\3\n\3\13\3\13\3\13\3\f\3\f\3\f\3\f\3\f\3\f\5\f\u0137") + buf.write("\n\f\3\f\3\f\5\f\u013b\n\f\3\r\3\r\5\r\u013f\n\r\3\r\3") + buf.write("\r\3\16\3\16\3\16\3\16\3\16\3\16\5\16\u0149\n\16\3\17") + buf.write("\3\17\7\17\u014d\n\17\f\17\16\17\u0150\13\17\3\17\3\17") + buf.write("\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20") + buf.write("\3\20\5\20\u0160\n\20\3\20\3\20\3\20\3\20\3\20\3\20\7") + buf.write("\20\u0168\n\20\f\20\16\20\u016b\13\20\3\20\2\4\20\36\21") + buf.write("\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36\2\f\3\2\13\25") + buf.write("\3\2\26\27\4\2\17\20..\3\2\f\16\3\2\17\20\3\2\21\22\3") + buf.write("\2/\60\3\2\61\66\3\2=>\3\2?D\2\u01a7\2#\3\2\2\2\4,\3\2") + buf.write("\2\2\6V\3\2\2\2\bX\3\2\2\2\n\u00a0\3\2\2\2\f\u00a2\3\2") + buf.write("\2\2\16\u00a8\3\2\2\2\20\u00dd\3\2\2\2\22\u0128\3\2\2") + buf.write("\2\24\u012d\3\2\2\2\26\u013a\3\2\2\2\30\u013e\3\2\2\2") + buf.write("\32\u0148\3\2\2\2\34\u014e\3\2\2\2\36\u015f\3\2\2\2 \"") + buf.write("\5\4\3\2! \3\2\2\2\"%\3\2\2\2#!\3\2\2\2#$\3\2\2\2$&\3") + buf.write("\2\2\2%#\3\2\2\2&\'\7\2\2\3\'\3\3\2\2\2()\5\6\4\2)*\7") + buf.write("\3\2\2*-\3\2\2\2+-\5\n\6\2,(\3\2\2\2,+\3\2\2\2-\5\3\2") + buf.write("\2\2./\7\4\2\2/\66\7I\2\2\60\61\7\5\2\2\61\67\5\34\17") + buf.write("\2\62\63\7\6\2\2\63\67\5\34\17\2\64\65\7\7\2\2\65\67\7") + buf.write("I\2\2\66\60\3\2\2\2\66\62\3\2\2\2\66\64\3\2\2\2\66\67") + buf.write("\3\2\2\2\67W\3\2\2\28W\7\b\2\29;\7\t\2\2:<\5\22\n\2;:") + buf.write("\3\2\2\2;<\3\2\2\2\5\36\20\2>A\7I\2\2?@\7") + buf.write("\n\2\2@B\5\22\n\2A?\3\2\2\2AB\3\2\2\2BW\3\2\2\2CD\5\b") + buf.write("\5\2DE\7\n\2\2EG\3\2\2\2FC\3\2\2\2GJ\3\2\2\2HF\3\2\2\2") + buf.write("HI\3\2\2\2IK\3\2\2\2JH\3\2\2\2KW\5\22\n\2LM\5\20\t\2M") + buf.write("N\t\2\2\2NO\7\n\2\2OP\5\20\t\2PW\3\2\2\2QW\t\3\2\2RT\7") + buf.write("\30\2\2SU\5\22\n\2TS\3\2\2\2TU\3\2\2\2UW\3\2\2\2V.\3\2") + buf.write("\2\2V8\3\2\2\2V9\3\2\2\2V=\3\2\2\2VH\3\2\2\2VL\3\2\2\2") + buf.write("VQ\3\2\2\2VR\3\2\2\2W\7\3\2\2\2X]\5\20\t\2YZ\7\31\2\2") + buf.write("Z\\\5\20\t\2[Y\3\2\2\2\\_\3\2\2\2][\3\2\2\2]^\3\2\2\2") + buf.write("^\t\3\2\2\2_]\3\2\2\2`a\7\32\2\2ab\5\20\t\2bc\7\33\2\2") + buf.write("ck\5\16\b\2de\7\34\2\2ef\5\20\t\2fg\7\33\2\2gh\5\16\b") + buf.write("\2hj\3\2\2\2id\3\2\2\2jm\3\2\2\2ki\3\2\2\2kl\3\2\2\2l") + buf.write("q\3\2\2\2mk\3\2\2\2no\7\35\2\2op\7\33\2\2pr\5\16\b\2q") + buf.write("n\3\2\2\2qr\3\2\2\2r\u00a1\3\2\2\2st\7\36\2\2tu\5\20\t") + buf.write("\2uv\7\33\2\2vw\5\16\b\2w\u00a1\3\2\2\2xy\7\37\2\2yz\5") + buf.write("\20\t\2z{\7\33\2\2{|\5\16\b\2|\u00a1\3\2\2\2}~\7 \2\2") + buf.write("~\177\5\22\n\2\177\u0080\7!\2\2\u0080\u0083\5\22\n\2\u0081") + buf.write("\u0082\7\"\2\2\u0082\u0084\5\22\n\2\u0083\u0081\3\2\2") + buf.write("\2\u0083\u0084\3\2\2\2\u0084\u0085\3\2\2\2\u0085\u0086") + buf.write("\7\33\2\2\u0086\u0087\5\16\b\2\u0087\u00a1\3\2\2\2\u0088") + buf.write("\u0089\7#\2\2\u0089\u008a\7I\2\2\u008a\u0090\7$\2\2\u008b") + buf.write("\u008c\5\f\7\2\u008c\u008d\7\31\2\2\u008d\u008f\3\2\2") + buf.write("\2\u008e\u008b\3\2\2\2\u008f\u0092\3\2\2\2\u0090\u008e") + buf.write("\3\2\2\2\u0090\u0091\3\2\2\2\u0091\u0094\3\2\2\2\u0092") + buf.write("\u0090\3\2\2\2\u0093\u0095\5\f\7\2\u0094\u0093\3\2\2\2") + buf.write("\u0094\u0095\3\2\2\2\u0095\u0096\3\2\2\2\u0096\u0098\7") + buf.write("%\2\2\u0097\u0099\5\36\20\2\u0098\u0097\3\2\2\2\u0098") + buf.write("\u0099\3\2\2\2\u0099\u009e\3\2\2\2\u009a\u009b\7&\2\2") + buf.write("\u009b\u009f\5\16\b\2\u009c\u009d\7\'\2\2\u009d\u009f") + buf.write("\7\3\2\2\u009e\u009a\3\2\2\2\u009e\u009c\3\2\2\2\u009f") + buf.write("\u00a1\3\2\2\2\u00a0`\3\2\2\2\u00a0s\3\2\2\2\u00a0x\3") + buf.write("\2\2\2\u00a0}\3\2\2\2\u00a0\u0088\3\2\2\2\u00a1\13\3\2") + buf.write("\2\2\u00a2\u00a3\5\36\20\2\u00a3\u00a6\7I\2\2\u00a4\u00a5") + buf.write("\7(\2\2\u00a5\u00a7\5\20\t\2\u00a6\u00a4\3\2\2\2\u00a6") + buf.write("\u00a7\3\2\2\2\u00a7\r\3\2\2\2\u00a8\u00aa\7)\2\2\u00a9") + buf.write("\u00ab\5\4\3\2\u00aa\u00a9\3\2\2\2\u00ab\u00ac\3\2\2\2") + buf.write("\u00ac\u00aa\3\2\2\2\u00ac\u00ad\3\2\2\2\u00ad\u00ae\3") + buf.write("\2\2\2\u00ae\u00af\7*\2\2\u00af\17\3\2\2\2\u00b0\u00b1") + buf.write("\b\t\1\2\u00b1\u00de\5\32\16\2\u00b2\u00b3\7$\2\2\u00b3") + buf.write("\u00b4\5\22\n\2\u00b4\u00b5\7%\2\2\u00b5\u00de\3\2\2\2") + buf.write("\u00b6\u00bc\7+\2\2\u00b7\u00b8\5\20\t\2\u00b8\u00b9\7") + buf.write("\31\2\2\u00b9\u00bb\3\2\2\2\u00ba\u00b7\3\2\2\2\u00bb") + buf.write("\u00be\3\2\2\2\u00bc\u00ba\3\2\2\2\u00bc\u00bd\3\2\2\2") + buf.write("\u00bd\u00c0\3\2\2\2\u00be\u00bc\3\2\2\2\u00bf\u00c1\5") + buf.write("\20\t\2\u00c0\u00bf\3\2\2\2\u00c0\u00c1\3\2\2\2\u00c1") + buf.write("\u00c2\3\2\2\2\u00c2\u00de\7,\2\2\u00c3\u00c4\7+\2\2\u00c4") + buf.write("\u00c6\5\20\t\2\u00c5\u00c7\5\26\f\2\u00c6\u00c5\3\2\2") + buf.write("\2\u00c7\u00c8\3\2\2\2\u00c8\u00c6\3\2\2\2\u00c8\u00c9") + buf.write("\3\2\2\2\u00c9\u00ca\3\2\2\2\u00ca\u00cb\7,\2\2\u00cb") + buf.write("\u00de\3\2\2\2\u00cc\u00cd\t\4\2\2\u00cd\u00de\5\20\t") + buf.write("\21\u00ce\u00cf\7\67\2\2\u00cf\u00de\5\20\t\7\u00d0\u00d5") + buf.write("\7;\2\2\u00d1\u00d2\7I\2\2\u00d2\u00d4\7\31\2\2\u00d3") + buf.write("\u00d1\3\2\2\2\u00d4\u00d7\3\2\2\2\u00d5\u00d3\3\2\2\2") + buf.write("\u00d5\u00d6\3\2\2\2\u00d6\u00d9\3\2\2\2\u00d7\u00d5\3") + buf.write("\2\2\2\u00d8\u00da\7I\2\2\u00d9\u00d8\3\2\2\2\u00d9\u00da") + buf.write("\3\2\2\2\u00da\u00db\3\2\2\2\u00db\u00dc\7<\2\2\u00dc") + buf.write("\u00de\5\20\t\3\u00dd\u00b0\3\2\2\2\u00dd\u00b2\3\2\2") + buf.write("\2\u00dd\u00b6\3\2\2\2\u00dd\u00c3\3\2\2\2\u00dd\u00cc") + buf.write("\3\2\2\2\u00dd\u00ce\3\2\2\2\u00dd\u00d0\3\2\2\2\u00de") + buf.write("\u0120\3\2\2\2\u00df\u00e0\f\22\2\2\u00e0\u00e1\7\13\2") + buf.write("\2\u00e1\u011f\5\20\t\22\u00e2\u00e3\f\20\2\2\u00e3\u00e4") + buf.write("\t\5\2\2\u00e4\u011f\5\20\t\21\u00e5\u00e6\f\17\2\2\u00e6") + buf.write("\u00e7\t\6\2\2\u00e7\u011f\5\20\t\20\u00e8\u00e9\f\16") + buf.write("\2\2\u00e9\u00ea\t\7\2\2\u00ea\u011f\5\20\t\17\u00eb\u00ec") + buf.write("\f\r\2\2\u00ec\u00ed\7\23\2\2\u00ed\u011f\5\20\t\16\u00ee") + buf.write("\u00ef\f\f\2\2\u00ef\u00f0\7\24\2\2\u00f0\u011f\5\20\t") + buf.write("\r\u00f1\u00f2\f\13\2\2\u00f2\u00f3\7\25\2\2\u00f3\u011f") + buf.write("\5\20\t\f\u00f4\u00f5\f\n\2\2\u00f5\u00f6\t\b\2\2\u00f6") + buf.write("\u011f\5\20\t\13\u00f7\u00f8\f\b\2\2\u00f8\u00f9\t\t\2") + buf.write("\2\u00f9\u011f\5\20\t\b\u00fa\u00fb\f\6\2\2\u00fb\u00fc") + buf.write("\78\2\2\u00fc\u011f\5\20\t\6\u00fd\u00fe\f\5\2\2\u00fe") + buf.write("\u00ff\79\2\2\u00ff\u011f\5\20\t\5\u0100\u0101\f\4\2\2") + buf.write("\u0101\u0102\7:\2\2\u0102\u0103\5\20\t\2\u0103\u0104\7") + buf.write("(\2\2\u0104\u0105\5\20\t\4\u0105\u011f\3\2\2\2\u0106\u0107") + buf.write("\f\25\2\2\u0107\u0108\7+\2\2\u0108\u0109\5\22\n\2\u0109") + buf.write("\u010a\7,\2\2\u010a\u011f\3\2\2\2\u010b\u010c\f\24\2\2") + buf.write("\u010c\u010d\7-\2\2\u010d\u011f\7I\2\2\u010e\u010f\f\23") + buf.write("\2\2\u010f\u0115\7$\2\2\u0110\u0111\5\30\r\2\u0111\u0112") + buf.write("\7\31\2\2\u0112\u0114\3\2\2\2\u0113\u0110\3\2\2\2\u0114") + buf.write("\u0117\3\2\2\2\u0115\u0113\3\2\2\2\u0115\u0116\3\2\2\2") + buf.write("\u0116\u0119\3\2\2\2\u0117\u0115\3\2\2\2\u0118\u011a\5") + buf.write("\30\r\2\u0119\u0118\3\2\2\2\u0119\u011a\3\2\2\2\u011a") + buf.write("\u011b\3\2\2\2\u011b\u011f\7%\2\2\u011c\u011d\f\t\2\2") + buf.write("\u011d\u011f\7\60\2\2\u011e\u00df\3\2\2\2\u011e\u00e2") + buf.write("\3\2\2\2\u011e\u00e5\3\2\2\2\u011e\u00e8\3\2\2\2\u011e") + buf.write("\u00eb\3\2\2\2\u011e\u00ee\3\2\2\2\u011e\u00f1\3\2\2\2") + buf.write("\u011e\u00f4\3\2\2\2\u011e\u00f7\3\2\2\2\u011e\u00fa\3") + buf.write("\2\2\2\u011e\u00fd\3\2\2\2\u011e\u0100\3\2\2\2\u011e\u0106") + buf.write("\3\2\2\2\u011e\u010b\3\2\2\2\u011e\u010e\3\2\2\2\u011e") + buf.write("\u011c\3\2\2\2\u011f\u0122\3\2\2\2\u0120\u011e\3\2\2\2") + buf.write("\u0120\u0121\3\2\2\2\u0121\21\3\2\2\2\u0122\u0120\3\2") + buf.write("\2\2\u0123\u0124\5\20\t\2\u0124\u0125\7\31\2\2\u0125\u0127") + buf.write("\3\2\2\2\u0126\u0123\3\2\2\2\u0127\u012a\3\2\2\2\u0128") + buf.write("\u0126\3\2\2\2\u0128\u0129\3\2\2\2\u0129\u012b\3\2\2\2") + buf.write("\u012a\u0128\3\2\2\2\u012b\u012c\5\20\t\2\u012c\23\3\2") + buf.write("\2\2\u012d\u012e\5\22\n\2\u012e\u012f\7\2\2\3\u012f\25") + buf.write("\3\2\2\2\u0130\u0131\7 \2\2\u0131\u0132\5\22\n\2\u0132") + buf.write("\u0133\7!\2\2\u0133\u0136\5\22\n\2\u0134\u0135\7\"\2\2") + buf.write("\u0135\u0137\5\22\n\2\u0136\u0134\3\2\2\2\u0136\u0137") + buf.write("\3\2\2\2\u0137\u013b\3\2\2\2\u0138\u0139\7\32\2\2\u0139") + buf.write("\u013b\5\20\t\2\u013a\u0130\3\2\2\2\u013a\u0138\3\2\2") + buf.write("\2\u013b\27\3\2\2\2\u013c\u013d\7I\2\2\u013d\u013f\7\n") + buf.write("\2\2\u013e\u013c\3\2\2\2\u013e\u013f\3\2\2\2\u013f\u0140") + buf.write("\3\2\2\2\u0140\u0141\5\20\t\2\u0141\31\3\2\2\2\u0142\u0149") + buf.write("\7E\2\2\u0143\u0149\7F\2\2\u0144\u0149\t\n\2\2\u0145\u0149") + buf.write("\7G\2\2\u0146\u0149\7H\2\2\u0147\u0149\7I\2\2\u0148\u0142") + buf.write("\3\2\2\2\u0148\u0143\3\2\2\2\u0148\u0144\3\2\2\2\u0148") + buf.write("\u0145\3\2\2\2\u0148\u0146\3\2\2\2\u0148\u0147\3\2\2\2") + buf.write("\u0149\33\3\2\2\2\u014a\u014b\7I\2\2\u014b\u014d\7\31") + buf.write("\2\2\u014c\u014a\3\2\2\2\u014d\u0150\3\2\2\2\u014e\u014c") + buf.write("\3\2\2\2\u014e\u014f\3\2\2\2\u014f\u0151\3\2\2\2\u0150") + buf.write("\u014e\3\2\2\2\u0151\u0152\7I\2\2\u0152\35\3\2\2\2\u0153") + buf.write("\u0154\b\20\1\2\u0154\u0160\t\13\2\2\u0155\u0156\7$\2") + buf.write("\2\u0156\u0157\5\36\20\2\u0157\u0158\7%\2\2\u0158\u0160") + buf.write("\3\2\2\2\u0159\u015a\7+\2\2\u015a\u015b\5\36\20\2\u015b") + buf.write("\u015c\7,\2\2\u015c\u0160\3\2\2\2\u015d\u015e\7<\2\2\u015e") + buf.write("\u0160\5\36\20\3\u015f\u0153\3\2\2\2\u015f\u0155\3\2\2") + buf.write("\2\u015f\u0159\3\2\2\2\u015f\u015d\3\2\2\2\u0160\u0169") + buf.write("\3\2\2\2\u0161\u0162\f\5\2\2\u0162\u0163\7\f\2\2\u0163") + buf.write("\u0168\5\36\20\5\u0164\u0165\f\4\2\2\u0165\u0166\7<\2") + buf.write("\2\u0166\u0168\5\36\20\4\u0167\u0161\3\2\2\2\u0167\u0164") + buf.write("\3\2\2\2\u0168\u016b\3\2\2\2\u0169\u0167\3\2\2\2\u0169") + buf.write("\u016a\3\2\2\2\u016a\37\3\2\2\2\u016b\u0169\3\2\2\2(#") + buf.write(",\66;AHTV]kq\u0083\u0090\u0094\u0098\u009e\u00a0\u00a6") + buf.write("\u00ac\u00bc\u00c0\u00c8\u00d5\u00d9\u00dd\u0115\u0119") + buf.write("\u011e\u0120\u0128\u0136\u013a\u013e\u0148\u014e\u015f") + buf.write("\u0167\u0169") return buf.getvalue() @@ -224,14 +237,15 @@ class PyxellParser ( Parser ): RULE_expr = 7 RULE_tuple_expr = 8 RULE_interpolation_expr = 9 - RULE_call_arg = 10 - RULE_atom = 11 - RULE_id_list = 12 - RULE_typ = 13 + RULE_comprehension = 10 + RULE_call_arg = 11 + RULE_atom = 12 + RULE_id_list = 13 + RULE_typ = 14 ruleNames = [ "program", "stmt", "simple_stmt", "lvalue", "compound_stmt", "func_arg", "block", "expr", "tuple_expr", "interpolation_expr", - "call_arg", "atom", "id_list", "typ" ] + "comprehension", "call_arg", "atom", "id_list", "typ" ] EOF = Token.EOF T__0=1 @@ -353,17 +367,17 @@ def program(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 31 + self.state = 33 self._errHandler.sync(self) _la = self._input.LA(1) while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__40) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__52) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0): - self.state = 28 + self.state = 30 self.stmt() - self.state = 33 + self.state = 35 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 34 + self.state = 36 self.match(PyxellParser.EOF) except RecognitionException as re: localctx.exception = re @@ -405,19 +419,19 @@ def stmt(self): localctx = PyxellParser.StmtContext(self, self._ctx, self.state) self.enterRule(localctx, 2, self.RULE_stmt) try: - self.state = 40 + self.state = 42 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__1, PyxellParser.T__5, PyxellParser.T__6, PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__19, PyxellParser.T__20, PyxellParser.T__21, PyxellParser.T__33, PyxellParser.T__40, PyxellParser.T__43, PyxellParser.T__52, PyxellParser.T__56, PyxellParser.T__57, PyxellParser.T__58, PyxellParser.T__59, PyxellParser.T__60, PyxellParser.T__61, PyxellParser.T__62, PyxellParser.T__63, PyxellParser.T__64, PyxellParser.T__65, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: self.enterOuterAlt(localctx, 1) - self.state = 36 + self.state = 38 self.simple_stmt() - self.state = 37 + self.state = 39 self.match(PyxellParser.T__0) pass elif token in [PyxellParser.T__23, PyxellParser.T__27, PyxellParser.T__28, PyxellParser.T__29, PyxellParser.T__32]: self.enterOuterAlt(localctx, 2) - self.state = 39 + self.state = 41 self.compound_stmt() pass else: @@ -610,35 +624,35 @@ def simple_stmt(self): self.enterRule(localctx, 4, self.RULE_simple_stmt) self._la = 0 # Token type try: - self.state = 82 + self.state = 84 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,7,self._ctx) if la_ == 1: localctx = PyxellParser.StmtUseContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 42 + self.state = 44 self.match(PyxellParser.T__1) - self.state = 43 + self.state = 45 localctx.name = self.match(PyxellParser.ID) - self.state = 50 + self.state = 52 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__2]: - self.state = 44 + self.state = 46 self.match(PyxellParser.T__2) - self.state = 45 + self.state = 47 localctx.only = self.id_list() pass elif token in [PyxellParser.T__3]: - self.state = 46 + self.state = 48 self.match(PyxellParser.T__3) - self.state = 47 + self.state = 49 localctx.hiding = self.id_list() pass elif token in [PyxellParser.T__4]: - self.state = 48 + self.state = 50 self.match(PyxellParser.T__4) - self.state = 49 + self.state = 51 localctx.as_ = self.match(PyxellParser.ID) pass elif token in [PyxellParser.T__0]: @@ -650,20 +664,20 @@ def simple_stmt(self): elif la_ == 2: localctx = PyxellParser.StmtSkipContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 52 + self.state = 54 self.match(PyxellParser.T__5) pass elif la_ == 3: localctx = PyxellParser.StmtPrintContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 53 - self.match(PyxellParser.T__6) self.state = 55 + self.match(PyxellParser.T__6) + self.state = 57 self._errHandler.sync(self) _la = self._input.LA(1) if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__52 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 54 + self.state = 56 self.tuple_expr() @@ -672,17 +686,17 @@ def simple_stmt(self): elif la_ == 4: localctx = PyxellParser.StmtDeclContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 57 + self.state = 59 self.typ(0) - self.state = 58 + self.state = 60 self.match(PyxellParser.ID) - self.state = 61 + self.state = 63 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__7: - self.state = 59 + self.state = 61 self.match(PyxellParser.T__7) - self.state = 60 + self.state = 62 self.tuple_expr() @@ -691,29 +705,29 @@ def simple_stmt(self): elif la_ == 5: localctx = PyxellParser.StmtAssgContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 68 + self.state = 70 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,5,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 63 + self.state = 65 self.lvalue() - self.state = 64 + self.state = 66 self.match(PyxellParser.T__7) - self.state = 70 + self.state = 72 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,5,self._ctx) - self.state = 71 + self.state = 73 self.tuple_expr() pass elif la_ == 6: localctx = PyxellParser.StmtAssgExprContext(self, localctx) self.enterOuterAlt(localctx, 6) - self.state = 72 + self.state = 74 self.expr(0) - self.state = 73 + self.state = 75 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__11) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__14) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__17) | (1 << PyxellParser.T__18))) != 0)): @@ -721,16 +735,16 @@ def simple_stmt(self): else: self._errHandler.reportMatch(self) self.consume() - self.state = 74 + self.state = 76 self.match(PyxellParser.T__7) - self.state = 75 + self.state = 77 self.expr(0) pass elif la_ == 7: localctx = PyxellParser.StmtLoopControlContext(self, localctx) self.enterOuterAlt(localctx, 7) - self.state = 77 + self.state = 79 localctx.s = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__19 or _la==PyxellParser.T__20): @@ -743,13 +757,13 @@ def simple_stmt(self): elif la_ == 8: localctx = PyxellParser.StmtReturnContext(self, localctx) self.enterOuterAlt(localctx, 8) - self.state = 78 - self.match(PyxellParser.T__21) self.state = 80 + self.match(PyxellParser.T__21) + self.state = 82 self._errHandler.sync(self) _la = self._input.LA(1) if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__52 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 79 + self.state = 81 self.tuple_expr() @@ -797,17 +811,17 @@ def lvalue(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 84 + self.state = 86 self.expr(0) - self.state = 89 + self.state = 91 self._errHandler.sync(self) _la = self._input.LA(1) while _la==PyxellParser.T__22: - self.state = 85 + self.state = 87 self.match(PyxellParser.T__22) - self.state = 86 + self.state = 88 self.expr(0) - self.state = 91 + self.state = 93 self._errHandler.sync(self) _la = self._input.LA(1) @@ -909,7 +923,6 @@ class StmtForContext(Compound_stmtContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Compound_stmtContext super().__init__(parser) - self.step = None # Tuple_exprContext self.copyFrom(ctx) def tuple_expr(self, i:int=None): @@ -962,45 +975,45 @@ def compound_stmt(self): self.enterRule(localctx, 8, self.RULE_compound_stmt) self._la = 0 # Token type try: - self.state = 156 + self.state = 158 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__23]: localctx = PyxellParser.StmtIfContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 92 + self.state = 94 self.match(PyxellParser.T__23) - self.state = 93 + self.state = 95 self.expr(0) - self.state = 94 + self.state = 96 self.match(PyxellParser.T__24) - self.state = 95 + self.state = 97 self.block() - self.state = 103 + self.state = 105 self._errHandler.sync(self) _la = self._input.LA(1) while _la==PyxellParser.T__25: - self.state = 96 + self.state = 98 self.match(PyxellParser.T__25) - self.state = 97 + self.state = 99 self.expr(0) - self.state = 98 + self.state = 100 self.match(PyxellParser.T__24) - self.state = 99 + self.state = 101 self.block() - self.state = 105 + self.state = 107 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 109 + self.state = 111 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__26: - self.state = 106 + self.state = 108 self.match(PyxellParser.T__26) - self.state = 107 + self.state = 109 self.match(PyxellParser.T__24) - self.state = 108 + self.state = 110 self.block() @@ -1008,106 +1021,106 @@ def compound_stmt(self): elif token in [PyxellParser.T__27]: localctx = PyxellParser.StmtWhileContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 111 + self.state = 113 self.match(PyxellParser.T__27) - self.state = 112 + self.state = 114 self.expr(0) - self.state = 113 + self.state = 115 self.match(PyxellParser.T__24) - self.state = 114 + self.state = 116 self.block() pass elif token in [PyxellParser.T__28]: localctx = PyxellParser.StmtUntilContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 116 + self.state = 118 self.match(PyxellParser.T__28) - self.state = 117 + self.state = 119 self.expr(0) - self.state = 118 + self.state = 120 self.match(PyxellParser.T__24) - self.state = 119 + self.state = 121 self.block() pass elif token in [PyxellParser.T__29]: localctx = PyxellParser.StmtForContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 121 + self.state = 123 self.match(PyxellParser.T__29) - self.state = 122 + self.state = 124 self.tuple_expr() - self.state = 123 + self.state = 125 self.match(PyxellParser.T__30) - self.state = 124 + self.state = 126 self.tuple_expr() - self.state = 127 + self.state = 129 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__31: - self.state = 125 + self.state = 127 self.match(PyxellParser.T__31) - self.state = 126 - localctx.step = self.tuple_expr() + self.state = 128 + self.tuple_expr() - self.state = 129 + self.state = 131 self.match(PyxellParser.T__24) - self.state = 130 + self.state = 132 self.block() pass elif token in [PyxellParser.T__32]: localctx = PyxellParser.StmtFuncContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 132 + self.state = 134 self.match(PyxellParser.T__32) - self.state = 133 + self.state = 135 self.match(PyxellParser.ID) - self.state = 134 + self.state = 136 self.match(PyxellParser.T__33) - self.state = 140 + self.state = 142 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,12,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 135 + self.state = 137 self.func_arg() - self.state = 136 + self.state = 138 self.match(PyxellParser.T__22) - self.state = 142 + self.state = 144 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,12,self._ctx) - self.state = 144 + self.state = 146 self._errHandler.sync(self) _la = self._input.LA(1) if ((((_la - 34)) & ~0x3f) == 0 and ((1 << (_la - 34)) & ((1 << (PyxellParser.T__33 - 34)) | (1 << (PyxellParser.T__40 - 34)) | (1 << (PyxellParser.T__57 - 34)) | (1 << (PyxellParser.T__60 - 34)) | (1 << (PyxellParser.T__61 - 34)) | (1 << (PyxellParser.T__62 - 34)) | (1 << (PyxellParser.T__63 - 34)) | (1 << (PyxellParser.T__64 - 34)) | (1 << (PyxellParser.T__65 - 34)))) != 0): - self.state = 143 + self.state = 145 self.func_arg() - self.state = 146 - self.match(PyxellParser.T__34) self.state = 148 + self.match(PyxellParser.T__34) + self.state = 150 self._errHandler.sync(self) _la = self._input.LA(1) if ((((_la - 34)) & ~0x3f) == 0 and ((1 << (_la - 34)) & ((1 << (PyxellParser.T__33 - 34)) | (1 << (PyxellParser.T__40 - 34)) | (1 << (PyxellParser.T__57 - 34)) | (1 << (PyxellParser.T__60 - 34)) | (1 << (PyxellParser.T__61 - 34)) | (1 << (PyxellParser.T__62 - 34)) | (1 << (PyxellParser.T__63 - 34)) | (1 << (PyxellParser.T__64 - 34)) | (1 << (PyxellParser.T__65 - 34)))) != 0): - self.state = 147 + self.state = 149 localctx.ret = self.typ(0) - self.state = 154 + self.state = 156 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__35]: - self.state = 150 + self.state = 152 self.match(PyxellParser.T__35) - self.state = 151 + self.state = 153 self.block() pass elif token in [PyxellParser.T__36]: - self.state = 152 + self.state = 154 self.match(PyxellParser.T__36) - self.state = 153 + self.state = 155 self.match(PyxellParser.T__0) pass else: @@ -1173,17 +1186,17 @@ def func_arg(self): try: localctx = PyxellParser.FuncArgContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 158 + self.state = 160 self.typ(0) - self.state = 159 + self.state = 161 self.match(PyxellParser.ID) - self.state = 162 + self.state = 164 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__37: - self.state = 160 + self.state = 162 self.match(PyxellParser.T__37) - self.state = 161 + self.state = 163 self.expr(0) @@ -1228,21 +1241,21 @@ def block(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 164 + self.state = 166 self.match(PyxellParser.T__38) - self.state = 166 + self.state = 168 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 165 + self.state = 167 self.stmt() - self.state = 168 + self.state = 170 self._errHandler.sync(self) _la = self._input.LA(1) if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__40) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__52) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0)): break - self.state = 170 + self.state = 172 self.match(PyxellParser.T__39) except RecognitionException as re: localctx.exception = re @@ -1421,6 +1434,29 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) + class ExprArrayComprehensionContext(ExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext + super().__init__(parser) + self.copyFrom(ctx) + + def expr(self): + return self.getTypedRuleContext(PyxellParser.ExprContext,0) + + def comprehension(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(PyxellParser.ComprehensionContext) + else: + return self.getTypedRuleContext(PyxellParser.ComprehensionContext,i) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExprArrayComprehension" ): + return visitor.visitExprArrayComprehension(self) + else: + return visitor.visitChildren(self) + + class ExprCallContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext @@ -1539,63 +1575,90 @@ def expr(self, _p:int=0): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 208 + self.state = 219 self._errHandler.sync(self) - token = self._input.LA(1) - if token in [PyxellParser.T__58, PyxellParser.T__59, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: + la_ = self._interp.adaptivePredict(self._input,24,self._ctx) + if la_ == 1: localctx = PyxellParser.ExprAtomContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 173 + self.state = 175 self.atom() pass - elif token in [PyxellParser.T__33]: + + elif la_ == 2: localctx = PyxellParser.ExprParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 174 + self.state = 176 self.match(PyxellParser.T__33) - self.state = 175 + self.state = 177 self.tuple_expr() - self.state = 176 + self.state = 178 self.match(PyxellParser.T__34) pass - elif token in [PyxellParser.T__40]: + + elif la_ == 3: localctx = PyxellParser.ExprArrayContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 178 + self.state = 180 self.match(PyxellParser.T__40) - self.state = 184 + self.state = 186 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,19,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 179 + self.state = 181 self.expr(0) - self.state = 180 + self.state = 182 self.match(PyxellParser.T__22) - self.state = 186 + self.state = 188 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,19,self._ctx) - self.state = 188 + self.state = 190 self._errHandler.sync(self) _la = self._input.LA(1) if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__52 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 187 + self.state = 189 self.expr(0) - self.state = 190 + self.state = 192 self.match(PyxellParser.T__41) pass - elif token in [PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__43]: + + elif la_ == 4: + localctx = PyxellParser.ExprArrayComprehensionContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 193 + self.match(PyxellParser.T__40) + self.state = 194 + self.expr(0) + self.state = 196 + self._errHandler.sync(self) + _la = self._input.LA(1) + while True: + self.state = 195 + self.comprehension() + self.state = 198 + self._errHandler.sync(self) + _la = self._input.LA(1) + if not (_la==PyxellParser.T__23 or _la==PyxellParser.T__29): + break + + self.state = 200 + self.match(PyxellParser.T__41) + pass + + elif la_ == 5: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 191 + self.state = 202 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__43))) != 0)): @@ -1603,86 +1666,87 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 192 + self.state = 203 self.expr(15) pass - elif token in [PyxellParser.T__52]: + + elif la_ == 6: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 193 + self.state = 204 localctx.op = self.match(PyxellParser.T__52) - self.state = 194 + self.state = 205 self.expr(5) pass - elif token in [PyxellParser.T__56]: + + elif la_ == 7: localctx = PyxellParser.ExprLambdaContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 195 + self.state = 206 self.match(PyxellParser.T__56) - self.state = 200 + self.state = 211 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,21,self._ctx) + _alt = self._interp.adaptivePredict(self._input,22,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 196 + self.state = 207 self.match(PyxellParser.ID) - self.state = 197 + self.state = 208 self.match(PyxellParser.T__22) - self.state = 202 + self.state = 213 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,21,self._ctx) + _alt = self._interp.adaptivePredict(self._input,22,self._ctx) - self.state = 204 + self.state = 215 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.ID: - self.state = 203 + self.state = 214 self.match(PyxellParser.ID) - self.state = 206 + self.state = 217 self.match(PyxellParser.T__57) - self.state = 207 + self.state = 218 self.expr(1) pass - else: - raise NoViableAltException(self) + self._ctx.stop = self._input.LT(-1) - self.state = 275 + self.state = 286 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,27,self._ctx) + _alt = self._interp.adaptivePredict(self._input,28,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 273 + self.state = 284 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,26,self._ctx) + la_ = self._interp.adaptivePredict(self._input,27,self._ctx) if la_ == 1: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 210 + self.state = 221 if not self.precpred(self._ctx, 16): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 16)") - self.state = 211 + self.state = 222 localctx.op = self.match(PyxellParser.T__8) - self.state = 212 + self.state = 223 self.expr(16) pass elif la_ == 2: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 213 + self.state = 224 if not self.precpred(self._ctx, 14): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 14)") - self.state = 214 + self.state = 225 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__9) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__11))) != 0)): @@ -1690,18 +1754,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 215 + self.state = 226 self.expr(15) pass elif la_ == 3: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 216 + self.state = 227 if not self.precpred(self._ctx, 13): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") - self.state = 217 + self.state = 228 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__12 or _la==PyxellParser.T__13): @@ -1709,18 +1773,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 218 + self.state = 229 self.expr(14) pass elif la_ == 4: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 219 + self.state = 230 if not self.precpred(self._ctx, 12): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 12)") - self.state = 220 + self.state = 231 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__14 or _la==PyxellParser.T__15): @@ -1728,57 +1792,57 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 221 + self.state = 232 self.expr(13) pass elif la_ == 5: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 222 + self.state = 233 if not self.precpred(self._ctx, 11): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") - self.state = 223 + self.state = 234 localctx.op = self.match(PyxellParser.T__16) - self.state = 224 + self.state = 235 self.expr(12) pass elif la_ == 6: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 225 + self.state = 236 if not self.precpred(self._ctx, 10): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") - self.state = 226 + self.state = 237 localctx.op = self.match(PyxellParser.T__17) - self.state = 227 + self.state = 238 self.expr(11) pass elif la_ == 7: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 228 + self.state = 239 if not self.precpred(self._ctx, 9): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") - self.state = 229 + self.state = 240 localctx.op = self.match(PyxellParser.T__18) - self.state = 230 + self.state = 241 self.expr(10) pass elif la_ == 8: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 231 + self.state = 242 if not self.precpred(self._ctx, 8): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") - self.state = 232 + self.state = 243 localctx.dots = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__44 or _la==PyxellParser.T__45): @@ -1786,18 +1850,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 233 + self.state = 244 self.expr(9) pass elif la_ == 9: localctx = PyxellParser.ExprCmpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 234 + self.state = 245 if not self.precpred(self._ctx, 6): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") - self.state = 235 + self.state = 246 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__46) | (1 << PyxellParser.T__47) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__49) | (1 << PyxellParser.T__50) | (1 << PyxellParser.T__51))) != 0)): @@ -1805,130 +1869,130 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 236 + self.state = 247 self.expr(6) pass elif la_ == 10: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 237 + self.state = 248 if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") - self.state = 238 + self.state = 249 localctx.op = self.match(PyxellParser.T__53) - self.state = 239 + self.state = 250 self.expr(4) pass elif la_ == 11: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 240 + self.state = 251 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 241 + self.state = 252 localctx.op = self.match(PyxellParser.T__54) - self.state = 242 + self.state = 253 self.expr(3) pass elif la_ == 12: localctx = PyxellParser.ExprCondContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 243 + self.state = 254 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 244 + self.state = 255 self.match(PyxellParser.T__55) - self.state = 245 + self.state = 256 self.expr(0) - self.state = 246 + self.state = 257 self.match(PyxellParser.T__37) - self.state = 247 + self.state = 258 self.expr(2) pass elif la_ == 13: localctx = PyxellParser.ExprIndexContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 249 + self.state = 260 if not self.precpred(self._ctx, 19): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 19)") - self.state = 250 + self.state = 261 self.match(PyxellParser.T__40) - self.state = 251 + self.state = 262 self.tuple_expr() - self.state = 252 + self.state = 263 self.match(PyxellParser.T__41) pass elif la_ == 14: localctx = PyxellParser.ExprAttrContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 254 + self.state = 265 if not self.precpred(self._ctx, 18): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 18)") - self.state = 255 + self.state = 266 self.match(PyxellParser.T__42) - self.state = 256 + self.state = 267 self.match(PyxellParser.ID) pass elif la_ == 15: localctx = PyxellParser.ExprCallContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 257 + self.state = 268 if not self.precpred(self._ctx, 17): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 17)") - self.state = 258 + self.state = 269 self.match(PyxellParser.T__33) - self.state = 264 + self.state = 275 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,24,self._ctx) + _alt = self._interp.adaptivePredict(self._input,25,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 259 + self.state = 270 self.call_arg() - self.state = 260 + self.state = 271 self.match(PyxellParser.T__22) - self.state = 266 + self.state = 277 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,24,self._ctx) + _alt = self._interp.adaptivePredict(self._input,25,self._ctx) - self.state = 268 + self.state = 279 self._errHandler.sync(self) _la = self._input.LA(1) if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__52 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 267 + self.state = 278 self.call_arg() - self.state = 270 + self.state = 281 self.match(PyxellParser.T__34) pass elif la_ == 16: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 271 + self.state = 282 if not self.precpred(self._ctx, 7): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") - self.state = 272 + self.state = 283 localctx.dots = self.match(PyxellParser.T__45) pass - self.state = 277 + self.state = 288 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,27,self._ctx) + _alt = self._interp.adaptivePredict(self._input,28,self._ctx) except RecognitionException as re: localctx.exception = re @@ -1983,20 +2047,20 @@ def tuple_expr(self): try: localctx = PyxellParser.ExprTupleContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 283 + self.state = 294 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,28,self._ctx) + _alt = self._interp.adaptivePredict(self._input,29,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 278 + self.state = 289 self.expr(0) - self.state = 279 + self.state = 290 self.match(PyxellParser.T__22) - self.state = 285 + self.state = 296 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,28,self._ctx) + _alt = self._interp.adaptivePredict(self._input,29,self._ctx) - self.state = 286 + self.state = 297 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -2050,9 +2114,9 @@ def interpolation_expr(self): try: localctx = PyxellParser.ExprInterpolationContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 288 + self.state = 299 self.tuple_expr() - self.state = 289 + self.state = 300 self.match(PyxellParser.EOF) except RecognitionException as re: localctx.exception = re @@ -2063,6 +2127,111 @@ def interpolation_expr(self): return localctx + class ComprehensionContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + + def getRuleIndex(self): + return PyxellParser.RULE_comprehension + + + def copyFrom(self, ctx:ParserRuleContext): + super().copyFrom(ctx) + + + + class ComprehensionGeneratorContext(ComprehensionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ComprehensionContext + super().__init__(parser) + self.copyFrom(ctx) + + def tuple_expr(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(PyxellParser.Tuple_exprContext) + else: + return self.getTypedRuleContext(PyxellParser.Tuple_exprContext,i) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitComprehensionGenerator" ): + return visitor.visitComprehensionGenerator(self) + else: + return visitor.visitChildren(self) + + + class ComprehensionFilterContext(ComprehensionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ComprehensionContext + super().__init__(parser) + self.copyFrom(ctx) + + def expr(self): + return self.getTypedRuleContext(PyxellParser.ExprContext,0) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitComprehensionFilter" ): + return visitor.visitComprehensionFilter(self) + else: + return visitor.visitChildren(self) + + + + def comprehension(self): + + localctx = PyxellParser.ComprehensionContext(self, self._ctx, self.state) + self.enterRule(localctx, 20, self.RULE_comprehension) + self._la = 0 # Token type + try: + self.state = 312 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [PyxellParser.T__29]: + localctx = PyxellParser.ComprehensionGeneratorContext(self, localctx) + self.enterOuterAlt(localctx, 1) + self.state = 302 + self.match(PyxellParser.T__29) + self.state = 303 + self.tuple_expr() + self.state = 304 + self.match(PyxellParser.T__30) + self.state = 305 + self.tuple_expr() + self.state = 308 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==PyxellParser.T__31: + self.state = 306 + self.match(PyxellParser.T__31) + self.state = 307 + self.tuple_expr() + + + pass + elif token in [PyxellParser.T__23]: + localctx = PyxellParser.ComprehensionFilterContext(self, localctx) + self.enterOuterAlt(localctx, 2) + self.state = 310 + self.match(PyxellParser.T__23) + self.state = 311 + self.expr(0) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Call_argContext(ParserRuleContext): def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): @@ -2102,21 +2271,21 @@ def accept(self, visitor:ParseTreeVisitor): def call_arg(self): localctx = PyxellParser.Call_argContext(self, self._ctx, self.state) - self.enterRule(localctx, 20, self.RULE_call_arg) + self.enterRule(localctx, 22, self.RULE_call_arg) try: localctx = PyxellParser.CallArgContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 293 + self.state = 316 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,29,self._ctx) + la_ = self._interp.adaptivePredict(self._input,32,self._ctx) if la_ == 1: - self.state = 291 + self.state = 314 self.match(PyxellParser.ID) - self.state = 292 + self.state = 315 self.match(PyxellParser.T__7) - self.state = 295 + self.state = 318 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -2241,28 +2410,28 @@ def accept(self, visitor:ParseTreeVisitor): def atom(self): localctx = PyxellParser.AtomContext(self, self._ctx, self.state) - self.enterRule(localctx, 22, self.RULE_atom) + self.enterRule(localctx, 24, self.RULE_atom) self._la = 0 # Token type try: - self.state = 303 + self.state = 326 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: localctx = PyxellParser.AtomIntContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 297 + self.state = 320 self.match(PyxellParser.INT) pass elif token in [PyxellParser.FLOAT]: localctx = PyxellParser.AtomFloatContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 298 + self.state = 321 self.match(PyxellParser.FLOAT) pass elif token in [PyxellParser.T__58, PyxellParser.T__59]: localctx = PyxellParser.AtomBoolContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 299 + self.state = 322 _la = self._input.LA(1) if not(_la==PyxellParser.T__58 or _la==PyxellParser.T__59): self._errHandler.recoverInline(self) @@ -2273,19 +2442,19 @@ def atom(self): elif token in [PyxellParser.CHAR]: localctx = PyxellParser.AtomCharContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 300 + self.state = 323 self.match(PyxellParser.CHAR) pass elif token in [PyxellParser.STRING]: localctx = PyxellParser.AtomStringContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 301 + self.state = 324 self.match(PyxellParser.STRING) pass elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) self.enterOuterAlt(localctx, 6) - self.state = 302 + self.state = 325 self.match(PyxellParser.ID) pass else: @@ -2327,23 +2496,23 @@ def accept(self, visitor:ParseTreeVisitor): def id_list(self): localctx = PyxellParser.Id_listContext(self, self._ctx, self.state) - self.enterRule(localctx, 24, self.RULE_id_list) + self.enterRule(localctx, 26, self.RULE_id_list) try: self.enterOuterAlt(localctx, 1) - self.state = 309 + self.state = 332 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,31,self._ctx) + _alt = self._interp.adaptivePredict(self._input,34,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 305 + self.state = 328 self.match(PyxellParser.ID) - self.state = 306 + self.state = 329 self.match(PyxellParser.T__22) - self.state = 311 + self.state = 334 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,31,self._ctx) + _alt = self._interp.adaptivePredict(self._input,34,self._ctx) - self.state = 312 + self.state = 335 self.match(PyxellParser.ID) except RecognitionException as re: localctx.exception = re @@ -2480,12 +2649,12 @@ def typ(self, _p:int=0): _parentState = self.state localctx = PyxellParser.TypContext(self, self._ctx, _parentState) _prevctx = localctx - _startState = 26 - self.enterRecursionRule(localctx, 26, self.RULE_typ, _p) + _startState = 28 + self.enterRecursionRule(localctx, 28, self.RULE_typ, _p) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 326 + self.state = 349 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__60, PyxellParser.T__61, PyxellParser.T__62, PyxellParser.T__63, PyxellParser.T__64, PyxellParser.T__65]: @@ -2493,7 +2662,7 @@ def typ(self, _p:int=0): self._ctx = localctx _prevctx = localctx - self.state = 315 + self.state = 338 _la = self._input.LA(1) if not(((((_la - 61)) & ~0x3f) == 0 and ((1 << (_la - 61)) & ((1 << (PyxellParser.T__60 - 61)) | (1 << (PyxellParser.T__61 - 61)) | (1 << (PyxellParser.T__62 - 61)) | (1 << (PyxellParser.T__63 - 61)) | (1 << (PyxellParser.T__64 - 61)) | (1 << (PyxellParser.T__65 - 61)))) != 0)): self._errHandler.recoverInline(self) @@ -2505,78 +2674,78 @@ def typ(self, _p:int=0): localctx = PyxellParser.TypeParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 316 + self.state = 339 self.match(PyxellParser.T__33) - self.state = 317 + self.state = 340 self.typ(0) - self.state = 318 + self.state = 341 self.match(PyxellParser.T__34) pass elif token in [PyxellParser.T__40]: localctx = PyxellParser.TypeArrayContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 320 + self.state = 343 self.match(PyxellParser.T__40) - self.state = 321 + self.state = 344 self.typ(0) - self.state = 322 + self.state = 345 self.match(PyxellParser.T__41) pass elif token in [PyxellParser.T__57]: localctx = PyxellParser.TypeFunc0Context(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 324 + self.state = 347 self.match(PyxellParser.T__57) - self.state = 325 + self.state = 348 self.typ(1) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 336 + self.state = 359 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,34,self._ctx) + _alt = self._interp.adaptivePredict(self._input,37,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 334 + self.state = 357 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,33,self._ctx) + la_ = self._interp.adaptivePredict(self._input,36,self._ctx) if la_ == 1: localctx = PyxellParser.TypeTupleContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 328 + self.state = 351 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 329 + self.state = 352 self.match(PyxellParser.T__9) - self.state = 330 + self.state = 353 self.typ(3) pass elif la_ == 2: localctx = PyxellParser.TypeFuncContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 331 + self.state = 354 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 332 + self.state = 355 self.match(PyxellParser.T__57) - self.state = 333 + self.state = 356 self.typ(2) pass - self.state = 338 + self.state = 361 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,34,self._ctx) + _alt = self._interp.adaptivePredict(self._input,37,self._ctx) except RecognitionException as re: localctx.exception = re @@ -2592,7 +2761,7 @@ def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): if self._predicates == None: self._predicates = dict() self._predicates[7] = self.expr_sempred - self._predicates[13] = self.typ_sempred + self._predicates[14] = self.typ_sempred pred = self._predicates.get(ruleIndex, None) if pred is None: raise Exception("No predicate with index:" + str(ruleIndex)) diff --git a/src/antlr/PyxellVisitor.py b/src/antlr/PyxellVisitor.py index ecda8970..71059fdb 100644 --- a/src/antlr/PyxellVisitor.py +++ b/src/antlr/PyxellVisitor.py @@ -139,6 +139,11 @@ def visitExprLogicalOp(self, ctx:PyxellParser.ExprLogicalOpContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#ExprArrayComprehension. + def visitExprArrayComprehension(self, ctx:PyxellParser.ExprArrayComprehensionContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#ExprCall. def visitExprCall(self, ctx:PyxellParser.ExprCallContext): return self.visitChildren(ctx) @@ -174,6 +179,16 @@ def visitExprInterpolation(self, ctx:PyxellParser.ExprInterpolationContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#ComprehensionGenerator. + def visitComprehensionGenerator(self, ctx:PyxellParser.ComprehensionGeneratorContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by PyxellParser#ComprehensionFilter. + def visitComprehensionFilter(self, ctx:PyxellParser.ComprehensionFilterContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#CallArg. def visitCallArg(self, ctx:PyxellParser.CallArgContext): return self.visitChildren(ctx) diff --git a/src/ast.py b/src/ast.py index 5715b8e5..b99d8d26 100644 --- a/src/ast.py +++ b/src/ast.py @@ -172,6 +172,28 @@ def visitExprArray(self, ctx): 'exprs': self.visit(ctx.expr()), } + def visitExprArrayComprehension(self, ctx): + return { + **_node(ctx, 'ExprArrayComprehension'), + 'expr': self.visit(ctx.expr()), + 'comprehensions': self.visit(ctx.comprehension()), + } + + def visitComprehensionGenerator(self, ctx): + exprs = ctx.tuple_expr() + return { + **_node(ctx, 'ComprehensionGenerator'), + 'vars': self.visit(exprs[0].expr()), + 'iterables': self.visit(exprs[1].expr()), + 'steps': self.visit(exprs[2].expr()) if len(exprs) > 2 else [], + } + + def visitComprehensionFilter(self, ctx): + return { + **_node(ctx, 'ComprehensionFilter'), + 'expr': self.visit(ctx.expr()), + } + def visitExprIndex(self, ctx): return { **_node(ctx, 'ExprIndex'), diff --git a/src/compiler.py b/src/compiler.py index 5b5560f4..de436c71 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -33,6 +33,7 @@ def __init__(self): self.module = ll.Module() self.builtins = { 'malloc': ll.Function(self.module, tFunc([tInt], tPtr()).pointee, 'malloc'), + 'realloc': ll.Function(self.module, tFunc([tPtr(), tInt], tPtr()).pointee, 'realloc'), 'memcpy': ll.Function(self.module, tFunc([tPtr(), tPtr(), tInt]).pointee, 'memcpy'), 'putchar': ll.Function(self.module, tFunc([tChar]).pointee, 'putchar'), } @@ -83,6 +84,9 @@ def initialized(self, initialized): @contextmanager def local(self): + if getattr(self, 'prevent_local', False): + yield + return env = self.env.copy() initialized = self.initialized.copy() yield @@ -97,7 +101,9 @@ def unit(self, name): self._unit = _unit @contextmanager - def no_output(self): + def no_output(self, prevent_local=False): + if prevent_local: + self.prevent_local = True dummy_module = ll.Module() dummy_func = ll.Function(dummy_module, tFunc([]).pointee, 'dummy') dummy_label = dummy_func.append_basic_block('dummy') @@ -105,6 +111,8 @@ def no_output(self): self.builder.position_at_end(dummy_label) yield self.builder.position_at_end(prev_label) + if prevent_local: + self.prevent_local = False @contextmanager def block(self): @@ -299,6 +307,13 @@ def malloc(self, type, length=vInt(1)): ptr = self.builder.call(self.builtins['malloc'], [size]) return self.builder.bitcast(ptr, type) + def realloc(self, ptr, length=vInt(1)): + type = ptr.type + size = self.sizeof(type.pointee, length) + ptr = self.builder.bitcast(ptr, tPtr()) + ptr = self.builder.call(self.builtins['realloc'], [ptr, size]) + return self.builder.bitcast(ptr, type) + def memcpy(self, dest, src, length): type = dest.type dest = self.builder.bitcast(dest, tPtr()) @@ -707,16 +722,19 @@ def convert_string(self, node, lit): 'args': [], } - def array(self, subtype, values): + def array(self, subtype, values, length=None): type = tArray(subtype) result = self.malloc(type) - memory = self.malloc(tPtr(subtype), vInt(len(values))) + if length is None: + length = len(values) + + memory = self.malloc(tPtr(subtype), vInt(length)) for i, value in enumerate(values): self.builder.store(value, self.builder.gep(memory, [vInt(i)])) self.builder.store(memory, self.builder.gep(result, [vInt(0), vIndex(0)])) - self.builder.store(vInt(len(values)), self.builder.gep(result, [vInt(0), vIndex(1)])) + self.builder.store(vInt(length), self.builder.gep(result, [vInt(0), vIndex(1)])) return result @@ -744,19 +762,28 @@ def convert_expr(expr): **expr, 'exprs': lmap(convert_expr, expr['exprs']), } - if node in ['ExprAttr', 'ExprUnaryOp']: + if node == 'ExprArrayComprehension': return { **expr, 'expr': convert_expr(expr['expr']), + 'comprehensions': lmap(convert_expr, expr['comprehensions']), + } + if node == 'ComprehensionGenerator': + return { + **expr, + 'iterables': lmap(convert_expr, expr['iterables']), + 'steps': lmap(convert_expr, expr['steps']), } if node == 'ExprCall': return { **expr, 'expr': convert_expr(expr['expr']), - 'args': [{ - **arg, - 'expr': convert_expr(arg['expr']), - } for arg in expr['args']], + 'args': lmap(convert_expr, expr['args']), + } + if node in ['ComprehensionFilter', 'ExprAttr', 'CallArg', 'ExprUnaryOp']: + return { + **expr, + 'expr': convert_expr(expr['expr']), } if node == 'AtomString': expr = self.convert_string(expr, expr['string']) @@ -862,6 +889,22 @@ def compileStmtAssgExpr(self, node): value = self.binaryop(node, node['op'], self.builder.load(ptr), self.compile(node['exprs'][1])) self.builder.store(value, ptr) + def compileStmtAppend(self, node): + # Special instruction for array comprehension. + array = self.compile(node['array']) + length = self.extract(array, 1) + index = self.compile(node['index']) + + with self.builder.if_then(self.builder.icmp_signed('==', index, length)): + length = self.builder.shl(length, vInt(1)) + memory = self.realloc(self.extract(array, 0), length) + self.builder.store(memory, self.builder.gep(array, [vInt(0), vIndex(0)])) + self.builder.store(length, self.builder.gep(array, [vInt(0), vIndex(1)])) + + value = self.compile(node['expr']) + self.builder.store(value, self.builder.gep(self.extract(array, 0), [index])) + self.builder.store(self.builder.add(index, vInt(1)), self.lvalue(node, node['index'])) + def compileStmtIf(self, node): exprs = node['exprs'] blocks = node['blocks'] @@ -1135,6 +1178,62 @@ def compileExprArray(self, node): subtype = values[0].type if values else tUnknown return self.array(subtype, values) + def compileExprArrayComprehension(self, node): + expr = node['expr'] + + n = len(self.env) + value, array, index = [{ + 'node': 'AtomId', + 'id': f'$cpr_{name}{n}', + } for name in ['value', 'array', 'index']] + + stmt = inner_stmt = { + 'node': 'StmtAssg', + 'lvalues': [{ + 'node': 'Lvalue', + 'exprs': [value], + }], + 'expr': expr, + } + + for i, cpr in reversed(list(enumerate(node['comprehensions']))): + if cpr['node'] == 'ComprehensionGenerator': + stmt = { + **cpr, + 'node': 'StmtFor', + 'block': stmt, + } + elif cpr['node'] == 'ComprehensionFilter': + if i == 0: + self.throw(cpr, err.InvalidSyntax()) + stmt = { + **cpr, + 'node': 'StmtIf', + 'exprs': [cpr['expr']], + 'blocks': [stmt], + } + + # A small hack to obtain type of the expression. + with self.local(): + with self.no_output(prevent_local=True): + self.compile(stmt) + type = self.compile(value).type + + self.assign(node, array, self.array(type, [], length=4)) + self.assign(node, index, vInt(0)) + + inner_stmt['node'] = 'StmtAppend' + inner_stmt['array'] = array + inner_stmt['index'] = index + + self.compile(stmt) + + result = self.compile(array) + length = self.compile(index) + self.builder.store(length, self.builder.gep(result, [vInt(0), vIndex(1)])) + + return result + def compileExprIndex(self, node): return self.builder.load(self.index(node, *node['exprs'])) diff --git a/test/bad/arrays/comprehension05.err b/test/bad/arrays/comprehension05.err index eef5c6d3..63261bf3 100644 --- a/test/bad/arrays/comprehension05.err +++ b/test/bad/arrays/comprehension05.err @@ -1 +1 @@ -Unexpected `if` statement. \ No newline at end of file +Syntax error. \ No newline at end of file diff --git a/test/good/arrays/comprehension10.out b/test/good/arrays/comprehension10.out new file mode 100644 index 00000000..e26a9f2f --- /dev/null +++ b/test/good/arrays/comprehension10.out @@ -0,0 +1 @@ +[[[1], [2], [3]], [[1], [2]]] diff --git a/test/good/arrays/comprehension10.px b/test/good/arrays/comprehension10.px new file mode 100644 index 00000000..7864b699 --- /dev/null +++ b/test/good/arrays/comprehension10.px @@ -0,0 +1,2 @@ + +print [[[z for z in y..y] for y in 1..x] for x in 5...1 step -1 if x < 4] From 334d8371018b64c5649dae4123ef8eebe5152706 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sat, 9 Nov 2019 12:17:23 +0100 Subject: [PATCH 057/100] Further improvements in test running Precompilation was not perfect, because tests interfered with one another in some cases. Now libraries are only parsed at the beginning, but compiled separately for each test. --- src/compiler.py | 9 ++------- src/main.py | 24 +++++++++++++----------- test.py | 6 +++++- 3 files changed, 20 insertions(+), 19 deletions(-) diff --git a/src/compiler.py b/src/compiler.py index de436c71..7830f46c 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -38,8 +38,7 @@ def __init__(self): 'putchar': ll.Function(self.module, tFunc([tChar]).pointee, 'putchar'), } self.main = ll.Function(self.module, tFunc([], tInt).pointee, 'main') - self.init = ll.Function(self.module, tFunc([]).pointee, 'init') - self.builder.position_at_end(self.init.append_basic_block('entry')) + self.builder.position_at_end(self.main.append_basic_block('entry')) def run(self, ast, unit): self.units[unit] = Unit({}, set()) @@ -50,10 +49,6 @@ def run(self, ast, unit): self.compile(ast) def run_main(self, ast): - self.builder.ret_void() - self.main.blocks = [] - self.builder.position_at_end(self.main.append_basic_block('entry')) - self.builder.call(self.init, []) self.run(ast, 'main') self.builder.ret(ll.Constant(tInt, 0)) @@ -259,7 +254,7 @@ def declare(self, node, type, id, redeclare=False, initialize=False): if id in self.env and not redeclare: self.throw(node, err.RedeclaredIdentifier(id)) - if self.builder.function._name in ('init', 'main'): + if self.builder.function._name == 'main': ptr = ll.GlobalVariable(self.module, type, self.module.get_unique_name(id)) ptr.initializer = type.default() else: diff --git a/src/main.py b/src/main.py index ad8660ef..16ef5344 100644 --- a/src/main.py +++ b/src/main.py @@ -12,30 +12,32 @@ abspath = Path(__file__).parents[1] -compiler = PyxellCompiler() +def build_ast(path): + code = transform_indented_code(path.read_text()) + return parse_program(code) + +units = {} for name in ['std', 'math', 'time', 'random']: path = abspath/f'lib/{name}.px' - code = transform_indented_code(path.read_text()) - ast = parse_program(code) - compiler.run(ast, name) + units[name] = build_ast(path) def compile(filepath, clangargs): filepath = Path(filepath) filename, ext = os.path.splitext(filepath) - code = transform_indented_code(filepath.read_text()) - ast = parse_program(code) - compiler.run_main(ast) + compiler = PyxellCompiler() + + for name, ast in units.items(): + compiler.run(ast, name) + + compiler.run_main(build_ast(filepath)) with open(f'{filename}.ll', 'w') as file: file.write(compiler.llvm_ir()) - try: - subprocess.check_output(['clang', f'{filename}.ll', abspath/'lib/io.ll', abspath/'lib/base.ll', '-o', f'{filename}.exe', '-O2', *clangargs], stderr=subprocess.STDOUT) - except subprocess.CalledProcessError as e: - raise ValueError(e.output.decode()) + subprocess.check_output(['clang', f'{filename}.ll', abspath/'lib/io.ll', abspath/'lib/base.ll', '-o', f'{filename}.exe', '-O2', *clangargs], stderr=subprocess.STDOUT) if __name__ == '__main__': diff --git a/test.py b/test.py index 3757e8a4..861ea327 100644 --- a/test.py +++ b/test.py @@ -9,6 +9,7 @@ from pathlib import Path from src.main import compile +from src.errors import PyxellError # Setup terminal colors. R = colorama.Style.BRIGHT + colorama.Fore.RED @@ -52,7 +53,7 @@ compile(path, params) except KeyboardInterrupt: exit(1) - except Exception as e: + except PyxellError as e: error_message = str(e) if error_expected: if error_message.strip().endswith(error_expected): @@ -63,6 +64,9 @@ else: print(f"{R}{error_message}{E}") continue + except subprocess.CalledProcessError as e: + print(f"{R}{e.output.decode()}{E}") + continue if error_expected: print(f"{R}Program compiled successfully, but error expected.\n---\n> {error_expected}{E}") From d23e9c2965d998d615925c2902107e8064852b7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sun, 10 Nov 2019 09:06:42 +0100 Subject: [PATCH 058/100] Slicing --- src/Pyxell.g4 | 1 + src/antlr/Pyxell.interp | 2 +- src/antlr/PyxellParser.py | 571 ++++++++++++++++++------------- src/antlr/PyxellVisitor.py | 5 + src/ast.py | 7 + src/compiler.py | 69 +++- test/bad/arrays/slice04.err | 2 +- test/bad/arrays/slice05.err | 1 + test/bad/arrays/slice05.px | 2 + test/good/functions/lambda10.out | 6 +- test/good/functions/lambda10.px | 6 +- 11 files changed, 413 insertions(+), 259 deletions(-) create mode 100644 test/bad/arrays/slice05.err create mode 100644 test/bad/arrays/slice05.px diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index d0a303ab..75716505 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -46,6 +46,7 @@ expr | '[' (expr ',')* expr? ']' # ExprArray | '[' expr comprehension+ ']' # ExprArrayComprehension | expr '[' tuple_expr ']' # ExprIndex + | expr '[' e1=expr? (':' e2=expr? (':' e3=expr?)?) ']' # ExprSlice | expr '.' ID # ExprAttr | expr '(' (call_arg ',')* call_arg? ')' # ExprCall | expr op='^' expr # ExprBinaryOp diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index 84900d08..c9234860 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -171,4 +171,4 @@ typ atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 76, 365, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 3, 2, 7, 2, 34, 10, 2, 12, 2, 14, 2, 37, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 45, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 55, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 60, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 66, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 71, 10, 4, 12, 4, 14, 4, 74, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 85, 10, 4, 5, 4, 87, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 92, 10, 5, 12, 5, 14, 5, 95, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 106, 10, 6, 12, 6, 14, 6, 109, 11, 6, 3, 6, 3, 6, 3, 6, 5, 6, 114, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 132, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 143, 10, 6, 12, 6, 14, 6, 146, 11, 6, 3, 6, 5, 6, 149, 10, 6, 3, 6, 3, 6, 5, 6, 153, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 159, 10, 6, 5, 6, 161, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 167, 10, 7, 3, 8, 3, 8, 6, 8, 171, 10, 8, 13, 8, 14, 8, 172, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 187, 10, 9, 12, 9, 14, 9, 190, 11, 9, 3, 9, 5, 9, 193, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 6, 9, 199, 10, 9, 13, 9, 14, 9, 200, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 212, 10, 9, 12, 9, 14, 9, 215, 11, 9, 3, 9, 5, 9, 218, 10, 9, 3, 9, 3, 9, 5, 9, 222, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 276, 10, 9, 12, 9, 14, 9, 279, 11, 9, 3, 9, 5, 9, 282, 10, 9, 3, 9, 3, 9, 3, 9, 7, 9, 287, 10, 9, 12, 9, 14, 9, 290, 11, 9, 3, 10, 3, 10, 3, 10, 7, 10, 295, 10, 10, 12, 10, 14, 10, 298, 11, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 311, 10, 12, 3, 12, 3, 12, 5, 12, 315, 10, 12, 3, 13, 3, 13, 5, 13, 319, 10, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 329, 10, 14, 3, 15, 3, 15, 7, 15, 333, 10, 15, 12, 15, 14, 15, 336, 11, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 352, 10, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 7, 16, 360, 10, 16, 12, 16, 14, 16, 363, 11, 16, 3, 16, 2, 4, 16, 30, 17, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 2, 12, 3, 2, 11, 21, 3, 2, 22, 23, 4, 2, 15, 16, 46, 46, 3, 2, 12, 14, 3, 2, 15, 16, 3, 2, 17, 18, 3, 2, 47, 48, 3, 2, 49, 54, 3, 2, 61, 62, 3, 2, 63, 68, 2, 423, 2, 35, 3, 2, 2, 2, 4, 44, 3, 2, 2, 2, 6, 86, 3, 2, 2, 2, 8, 88, 3, 2, 2, 2, 10, 160, 3, 2, 2, 2, 12, 162, 3, 2, 2, 2, 14, 168, 3, 2, 2, 2, 16, 221, 3, 2, 2, 2, 18, 296, 3, 2, 2, 2, 20, 301, 3, 2, 2, 2, 22, 314, 3, 2, 2, 2, 24, 318, 3, 2, 2, 2, 26, 328, 3, 2, 2, 2, 28, 334, 3, 2, 2, 2, 30, 351, 3, 2, 2, 2, 32, 34, 5, 4, 3, 2, 33, 32, 3, 2, 2, 2, 34, 37, 3, 2, 2, 2, 35, 33, 3, 2, 2, 2, 35, 36, 3, 2, 2, 2, 36, 38, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 38, 39, 7, 2, 2, 3, 39, 3, 3, 2, 2, 2, 40, 41, 5, 6, 4, 2, 41, 42, 7, 3, 2, 2, 42, 45, 3, 2, 2, 2, 43, 45, 5, 10, 6, 2, 44, 40, 3, 2, 2, 2, 44, 43, 3, 2, 2, 2, 45, 5, 3, 2, 2, 2, 46, 47, 7, 4, 2, 2, 47, 54, 7, 73, 2, 2, 48, 49, 7, 5, 2, 2, 49, 55, 5, 28, 15, 2, 50, 51, 7, 6, 2, 2, 51, 55, 5, 28, 15, 2, 52, 53, 7, 7, 2, 2, 53, 55, 7, 73, 2, 2, 54, 48, 3, 2, 2, 2, 54, 50, 3, 2, 2, 2, 54, 52, 3, 2, 2, 2, 54, 55, 3, 2, 2, 2, 55, 87, 3, 2, 2, 2, 56, 87, 7, 8, 2, 2, 57, 59, 7, 9, 2, 2, 58, 60, 5, 18, 10, 2, 59, 58, 3, 2, 2, 2, 59, 60, 3, 2, 2, 2, 60, 87, 3, 2, 2, 2, 61, 62, 5, 30, 16, 2, 62, 65, 7, 73, 2, 2, 63, 64, 7, 10, 2, 2, 64, 66, 5, 18, 10, 2, 65, 63, 3, 2, 2, 2, 65, 66, 3, 2, 2, 2, 66, 87, 3, 2, 2, 2, 67, 68, 5, 8, 5, 2, 68, 69, 7, 10, 2, 2, 69, 71, 3, 2, 2, 2, 70, 67, 3, 2, 2, 2, 71, 74, 3, 2, 2, 2, 72, 70, 3, 2, 2, 2, 72, 73, 3, 2, 2, 2, 73, 75, 3, 2, 2, 2, 74, 72, 3, 2, 2, 2, 75, 87, 5, 18, 10, 2, 76, 77, 5, 16, 9, 2, 77, 78, 9, 2, 2, 2, 78, 79, 7, 10, 2, 2, 79, 80, 5, 16, 9, 2, 80, 87, 3, 2, 2, 2, 81, 87, 9, 3, 2, 2, 82, 84, 7, 24, 2, 2, 83, 85, 5, 18, 10, 2, 84, 83, 3, 2, 2, 2, 84, 85, 3, 2, 2, 2, 85, 87, 3, 2, 2, 2, 86, 46, 3, 2, 2, 2, 86, 56, 3, 2, 2, 2, 86, 57, 3, 2, 2, 2, 86, 61, 3, 2, 2, 2, 86, 72, 3, 2, 2, 2, 86, 76, 3, 2, 2, 2, 86, 81, 3, 2, 2, 2, 86, 82, 3, 2, 2, 2, 87, 7, 3, 2, 2, 2, 88, 93, 5, 16, 9, 2, 89, 90, 7, 25, 2, 2, 90, 92, 5, 16, 9, 2, 91, 89, 3, 2, 2, 2, 92, 95, 3, 2, 2, 2, 93, 91, 3, 2, 2, 2, 93, 94, 3, 2, 2, 2, 94, 9, 3, 2, 2, 2, 95, 93, 3, 2, 2, 2, 96, 97, 7, 26, 2, 2, 97, 98, 5, 16, 9, 2, 98, 99, 7, 27, 2, 2, 99, 107, 5, 14, 8, 2, 100, 101, 7, 28, 2, 2, 101, 102, 5, 16, 9, 2, 102, 103, 7, 27, 2, 2, 103, 104, 5, 14, 8, 2, 104, 106, 3, 2, 2, 2, 105, 100, 3, 2, 2, 2, 106, 109, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 107, 108, 3, 2, 2, 2, 108, 113, 3, 2, 2, 2, 109, 107, 3, 2, 2, 2, 110, 111, 7, 29, 2, 2, 111, 112, 7, 27, 2, 2, 112, 114, 5, 14, 8, 2, 113, 110, 3, 2, 2, 2, 113, 114, 3, 2, 2, 2, 114, 161, 3, 2, 2, 2, 115, 116, 7, 30, 2, 2, 116, 117, 5, 16, 9, 2, 117, 118, 7, 27, 2, 2, 118, 119, 5, 14, 8, 2, 119, 161, 3, 2, 2, 2, 120, 121, 7, 31, 2, 2, 121, 122, 5, 16, 9, 2, 122, 123, 7, 27, 2, 2, 123, 124, 5, 14, 8, 2, 124, 161, 3, 2, 2, 2, 125, 126, 7, 32, 2, 2, 126, 127, 5, 18, 10, 2, 127, 128, 7, 33, 2, 2, 128, 131, 5, 18, 10, 2, 129, 130, 7, 34, 2, 2, 130, 132, 5, 18, 10, 2, 131, 129, 3, 2, 2, 2, 131, 132, 3, 2, 2, 2, 132, 133, 3, 2, 2, 2, 133, 134, 7, 27, 2, 2, 134, 135, 5, 14, 8, 2, 135, 161, 3, 2, 2, 2, 136, 137, 7, 35, 2, 2, 137, 138, 7, 73, 2, 2, 138, 144, 7, 36, 2, 2, 139, 140, 5, 12, 7, 2, 140, 141, 7, 25, 2, 2, 141, 143, 3, 2, 2, 2, 142, 139, 3, 2, 2, 2, 143, 146, 3, 2, 2, 2, 144, 142, 3, 2, 2, 2, 144, 145, 3, 2, 2, 2, 145, 148, 3, 2, 2, 2, 146, 144, 3, 2, 2, 2, 147, 149, 5, 12, 7, 2, 148, 147, 3, 2, 2, 2, 148, 149, 3, 2, 2, 2, 149, 150, 3, 2, 2, 2, 150, 152, 7, 37, 2, 2, 151, 153, 5, 30, 16, 2, 152, 151, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 158, 3, 2, 2, 2, 154, 155, 7, 38, 2, 2, 155, 159, 5, 14, 8, 2, 156, 157, 7, 39, 2, 2, 157, 159, 7, 3, 2, 2, 158, 154, 3, 2, 2, 2, 158, 156, 3, 2, 2, 2, 159, 161, 3, 2, 2, 2, 160, 96, 3, 2, 2, 2, 160, 115, 3, 2, 2, 2, 160, 120, 3, 2, 2, 2, 160, 125, 3, 2, 2, 2, 160, 136, 3, 2, 2, 2, 161, 11, 3, 2, 2, 2, 162, 163, 5, 30, 16, 2, 163, 166, 7, 73, 2, 2, 164, 165, 7, 40, 2, 2, 165, 167, 5, 16, 9, 2, 166, 164, 3, 2, 2, 2, 166, 167, 3, 2, 2, 2, 167, 13, 3, 2, 2, 2, 168, 170, 7, 41, 2, 2, 169, 171, 5, 4, 3, 2, 170, 169, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 170, 3, 2, 2, 2, 172, 173, 3, 2, 2, 2, 173, 174, 3, 2, 2, 2, 174, 175, 7, 42, 2, 2, 175, 15, 3, 2, 2, 2, 176, 177, 8, 9, 1, 2, 177, 222, 5, 26, 14, 2, 178, 179, 7, 36, 2, 2, 179, 180, 5, 18, 10, 2, 180, 181, 7, 37, 2, 2, 181, 222, 3, 2, 2, 2, 182, 188, 7, 43, 2, 2, 183, 184, 5, 16, 9, 2, 184, 185, 7, 25, 2, 2, 185, 187, 3, 2, 2, 2, 186, 183, 3, 2, 2, 2, 187, 190, 3, 2, 2, 2, 188, 186, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 192, 3, 2, 2, 2, 190, 188, 3, 2, 2, 2, 191, 193, 5, 16, 9, 2, 192, 191, 3, 2, 2, 2, 192, 193, 3, 2, 2, 2, 193, 194, 3, 2, 2, 2, 194, 222, 7, 44, 2, 2, 195, 196, 7, 43, 2, 2, 196, 198, 5, 16, 9, 2, 197, 199, 5, 22, 12, 2, 198, 197, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 198, 3, 2, 2, 2, 200, 201, 3, 2, 2, 2, 201, 202, 3, 2, 2, 2, 202, 203, 7, 44, 2, 2, 203, 222, 3, 2, 2, 2, 204, 205, 9, 4, 2, 2, 205, 222, 5, 16, 9, 17, 206, 207, 7, 55, 2, 2, 207, 222, 5, 16, 9, 7, 208, 213, 7, 59, 2, 2, 209, 210, 7, 73, 2, 2, 210, 212, 7, 25, 2, 2, 211, 209, 3, 2, 2, 2, 212, 215, 3, 2, 2, 2, 213, 211, 3, 2, 2, 2, 213, 214, 3, 2, 2, 2, 214, 217, 3, 2, 2, 2, 215, 213, 3, 2, 2, 2, 216, 218, 7, 73, 2, 2, 217, 216, 3, 2, 2, 2, 217, 218, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 220, 7, 60, 2, 2, 220, 222, 5, 16, 9, 3, 221, 176, 3, 2, 2, 2, 221, 178, 3, 2, 2, 2, 221, 182, 3, 2, 2, 2, 221, 195, 3, 2, 2, 2, 221, 204, 3, 2, 2, 2, 221, 206, 3, 2, 2, 2, 221, 208, 3, 2, 2, 2, 222, 288, 3, 2, 2, 2, 223, 224, 12, 18, 2, 2, 224, 225, 7, 11, 2, 2, 225, 287, 5, 16, 9, 18, 226, 227, 12, 16, 2, 2, 227, 228, 9, 5, 2, 2, 228, 287, 5, 16, 9, 17, 229, 230, 12, 15, 2, 2, 230, 231, 9, 6, 2, 2, 231, 287, 5, 16, 9, 16, 232, 233, 12, 14, 2, 2, 233, 234, 9, 7, 2, 2, 234, 287, 5, 16, 9, 15, 235, 236, 12, 13, 2, 2, 236, 237, 7, 19, 2, 2, 237, 287, 5, 16, 9, 14, 238, 239, 12, 12, 2, 2, 239, 240, 7, 20, 2, 2, 240, 287, 5, 16, 9, 13, 241, 242, 12, 11, 2, 2, 242, 243, 7, 21, 2, 2, 243, 287, 5, 16, 9, 12, 244, 245, 12, 10, 2, 2, 245, 246, 9, 8, 2, 2, 246, 287, 5, 16, 9, 11, 247, 248, 12, 8, 2, 2, 248, 249, 9, 9, 2, 2, 249, 287, 5, 16, 9, 8, 250, 251, 12, 6, 2, 2, 251, 252, 7, 56, 2, 2, 252, 287, 5, 16, 9, 6, 253, 254, 12, 5, 2, 2, 254, 255, 7, 57, 2, 2, 255, 287, 5, 16, 9, 5, 256, 257, 12, 4, 2, 2, 257, 258, 7, 58, 2, 2, 258, 259, 5, 16, 9, 2, 259, 260, 7, 40, 2, 2, 260, 261, 5, 16, 9, 4, 261, 287, 3, 2, 2, 2, 262, 263, 12, 21, 2, 2, 263, 264, 7, 43, 2, 2, 264, 265, 5, 18, 10, 2, 265, 266, 7, 44, 2, 2, 266, 287, 3, 2, 2, 2, 267, 268, 12, 20, 2, 2, 268, 269, 7, 45, 2, 2, 269, 287, 7, 73, 2, 2, 270, 271, 12, 19, 2, 2, 271, 277, 7, 36, 2, 2, 272, 273, 5, 24, 13, 2, 273, 274, 7, 25, 2, 2, 274, 276, 3, 2, 2, 2, 275, 272, 3, 2, 2, 2, 276, 279, 3, 2, 2, 2, 277, 275, 3, 2, 2, 2, 277, 278, 3, 2, 2, 2, 278, 281, 3, 2, 2, 2, 279, 277, 3, 2, 2, 2, 280, 282, 5, 24, 13, 2, 281, 280, 3, 2, 2, 2, 281, 282, 3, 2, 2, 2, 282, 283, 3, 2, 2, 2, 283, 287, 7, 37, 2, 2, 284, 285, 12, 9, 2, 2, 285, 287, 7, 48, 2, 2, 286, 223, 3, 2, 2, 2, 286, 226, 3, 2, 2, 2, 286, 229, 3, 2, 2, 2, 286, 232, 3, 2, 2, 2, 286, 235, 3, 2, 2, 2, 286, 238, 3, 2, 2, 2, 286, 241, 3, 2, 2, 2, 286, 244, 3, 2, 2, 2, 286, 247, 3, 2, 2, 2, 286, 250, 3, 2, 2, 2, 286, 253, 3, 2, 2, 2, 286, 256, 3, 2, 2, 2, 286, 262, 3, 2, 2, 2, 286, 267, 3, 2, 2, 2, 286, 270, 3, 2, 2, 2, 286, 284, 3, 2, 2, 2, 287, 290, 3, 2, 2, 2, 288, 286, 3, 2, 2, 2, 288, 289, 3, 2, 2, 2, 289, 17, 3, 2, 2, 2, 290, 288, 3, 2, 2, 2, 291, 292, 5, 16, 9, 2, 292, 293, 7, 25, 2, 2, 293, 295, 3, 2, 2, 2, 294, 291, 3, 2, 2, 2, 295, 298, 3, 2, 2, 2, 296, 294, 3, 2, 2, 2, 296, 297, 3, 2, 2, 2, 297, 299, 3, 2, 2, 2, 298, 296, 3, 2, 2, 2, 299, 300, 5, 16, 9, 2, 300, 19, 3, 2, 2, 2, 301, 302, 5, 18, 10, 2, 302, 303, 7, 2, 2, 3, 303, 21, 3, 2, 2, 2, 304, 305, 7, 32, 2, 2, 305, 306, 5, 18, 10, 2, 306, 307, 7, 33, 2, 2, 307, 310, 5, 18, 10, 2, 308, 309, 7, 34, 2, 2, 309, 311, 5, 18, 10, 2, 310, 308, 3, 2, 2, 2, 310, 311, 3, 2, 2, 2, 311, 315, 3, 2, 2, 2, 312, 313, 7, 26, 2, 2, 313, 315, 5, 16, 9, 2, 314, 304, 3, 2, 2, 2, 314, 312, 3, 2, 2, 2, 315, 23, 3, 2, 2, 2, 316, 317, 7, 73, 2, 2, 317, 319, 7, 10, 2, 2, 318, 316, 3, 2, 2, 2, 318, 319, 3, 2, 2, 2, 319, 320, 3, 2, 2, 2, 320, 321, 5, 16, 9, 2, 321, 25, 3, 2, 2, 2, 322, 329, 7, 69, 2, 2, 323, 329, 7, 70, 2, 2, 324, 329, 9, 10, 2, 2, 325, 329, 7, 71, 2, 2, 326, 329, 7, 72, 2, 2, 327, 329, 7, 73, 2, 2, 328, 322, 3, 2, 2, 2, 328, 323, 3, 2, 2, 2, 328, 324, 3, 2, 2, 2, 328, 325, 3, 2, 2, 2, 328, 326, 3, 2, 2, 2, 328, 327, 3, 2, 2, 2, 329, 27, 3, 2, 2, 2, 330, 331, 7, 73, 2, 2, 331, 333, 7, 25, 2, 2, 332, 330, 3, 2, 2, 2, 333, 336, 3, 2, 2, 2, 334, 332, 3, 2, 2, 2, 334, 335, 3, 2, 2, 2, 335, 337, 3, 2, 2, 2, 336, 334, 3, 2, 2, 2, 337, 338, 7, 73, 2, 2, 338, 29, 3, 2, 2, 2, 339, 340, 8, 16, 1, 2, 340, 352, 9, 11, 2, 2, 341, 342, 7, 36, 2, 2, 342, 343, 5, 30, 16, 2, 343, 344, 7, 37, 2, 2, 344, 352, 3, 2, 2, 2, 345, 346, 7, 43, 2, 2, 346, 347, 5, 30, 16, 2, 347, 348, 7, 44, 2, 2, 348, 352, 3, 2, 2, 2, 349, 350, 7, 60, 2, 2, 350, 352, 5, 30, 16, 3, 351, 339, 3, 2, 2, 2, 351, 341, 3, 2, 2, 2, 351, 345, 3, 2, 2, 2, 351, 349, 3, 2, 2, 2, 352, 361, 3, 2, 2, 2, 353, 354, 12, 5, 2, 2, 354, 355, 7, 12, 2, 2, 355, 360, 5, 30, 16, 5, 356, 357, 12, 4, 2, 2, 357, 358, 7, 60, 2, 2, 358, 360, 5, 30, 16, 4, 359, 353, 3, 2, 2, 2, 359, 356, 3, 2, 2, 2, 360, 363, 3, 2, 2, 2, 361, 359, 3, 2, 2, 2, 361, 362, 3, 2, 2, 2, 362, 31, 3, 2, 2, 2, 363, 361, 3, 2, 2, 2, 40, 35, 44, 54, 59, 65, 72, 84, 86, 93, 107, 113, 131, 144, 148, 152, 158, 160, 166, 172, 188, 192, 200, 213, 217, 221, 277, 281, 286, 288, 296, 310, 314, 318, 328, 334, 351, 359, 361] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 76, 381, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 3, 2, 7, 2, 34, 10, 2, 12, 2, 14, 2, 37, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 45, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 55, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 60, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 66, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 71, 10, 4, 12, 4, 14, 4, 74, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 85, 10, 4, 5, 4, 87, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 92, 10, 5, 12, 5, 14, 5, 95, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 106, 10, 6, 12, 6, 14, 6, 109, 11, 6, 3, 6, 3, 6, 3, 6, 5, 6, 114, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 132, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 143, 10, 6, 12, 6, 14, 6, 146, 11, 6, 3, 6, 5, 6, 149, 10, 6, 3, 6, 3, 6, 5, 6, 153, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 159, 10, 6, 5, 6, 161, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 167, 10, 7, 3, 8, 3, 8, 6, 8, 171, 10, 8, 13, 8, 14, 8, 172, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 187, 10, 9, 12, 9, 14, 9, 190, 11, 9, 3, 9, 5, 9, 193, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 6, 9, 199, 10, 9, 13, 9, 14, 9, 200, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 212, 10, 9, 12, 9, 14, 9, 215, 11, 9, 3, 9, 5, 9, 218, 10, 9, 3, 9, 3, 9, 5, 9, 222, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 271, 10, 9, 3, 9, 3, 9, 5, 9, 275, 10, 9, 3, 9, 3, 9, 5, 9, 279, 10, 9, 5, 9, 281, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 292, 10, 9, 12, 9, 14, 9, 295, 11, 9, 3, 9, 5, 9, 298, 10, 9, 3, 9, 3, 9, 3, 9, 7, 9, 303, 10, 9, 12, 9, 14, 9, 306, 11, 9, 3, 10, 3, 10, 3, 10, 7, 10, 311, 10, 10, 12, 10, 14, 10, 314, 11, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 327, 10, 12, 3, 12, 3, 12, 5, 12, 331, 10, 12, 3, 13, 3, 13, 5, 13, 335, 10, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 345, 10, 14, 3, 15, 3, 15, 7, 15, 349, 10, 15, 12, 15, 14, 15, 352, 11, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 368, 10, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 7, 16, 376, 10, 16, 12, 16, 14, 16, 379, 11, 16, 3, 16, 2, 4, 16, 30, 17, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 2, 12, 3, 2, 11, 21, 3, 2, 22, 23, 4, 2, 15, 16, 46, 46, 3, 2, 12, 14, 3, 2, 15, 16, 3, 2, 17, 18, 3, 2, 47, 48, 3, 2, 49, 54, 3, 2, 61, 62, 3, 2, 63, 68, 2, 444, 2, 35, 3, 2, 2, 2, 4, 44, 3, 2, 2, 2, 6, 86, 3, 2, 2, 2, 8, 88, 3, 2, 2, 2, 10, 160, 3, 2, 2, 2, 12, 162, 3, 2, 2, 2, 14, 168, 3, 2, 2, 2, 16, 221, 3, 2, 2, 2, 18, 312, 3, 2, 2, 2, 20, 317, 3, 2, 2, 2, 22, 330, 3, 2, 2, 2, 24, 334, 3, 2, 2, 2, 26, 344, 3, 2, 2, 2, 28, 350, 3, 2, 2, 2, 30, 367, 3, 2, 2, 2, 32, 34, 5, 4, 3, 2, 33, 32, 3, 2, 2, 2, 34, 37, 3, 2, 2, 2, 35, 33, 3, 2, 2, 2, 35, 36, 3, 2, 2, 2, 36, 38, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 38, 39, 7, 2, 2, 3, 39, 3, 3, 2, 2, 2, 40, 41, 5, 6, 4, 2, 41, 42, 7, 3, 2, 2, 42, 45, 3, 2, 2, 2, 43, 45, 5, 10, 6, 2, 44, 40, 3, 2, 2, 2, 44, 43, 3, 2, 2, 2, 45, 5, 3, 2, 2, 2, 46, 47, 7, 4, 2, 2, 47, 54, 7, 73, 2, 2, 48, 49, 7, 5, 2, 2, 49, 55, 5, 28, 15, 2, 50, 51, 7, 6, 2, 2, 51, 55, 5, 28, 15, 2, 52, 53, 7, 7, 2, 2, 53, 55, 7, 73, 2, 2, 54, 48, 3, 2, 2, 2, 54, 50, 3, 2, 2, 2, 54, 52, 3, 2, 2, 2, 54, 55, 3, 2, 2, 2, 55, 87, 3, 2, 2, 2, 56, 87, 7, 8, 2, 2, 57, 59, 7, 9, 2, 2, 58, 60, 5, 18, 10, 2, 59, 58, 3, 2, 2, 2, 59, 60, 3, 2, 2, 2, 60, 87, 3, 2, 2, 2, 61, 62, 5, 30, 16, 2, 62, 65, 7, 73, 2, 2, 63, 64, 7, 10, 2, 2, 64, 66, 5, 18, 10, 2, 65, 63, 3, 2, 2, 2, 65, 66, 3, 2, 2, 2, 66, 87, 3, 2, 2, 2, 67, 68, 5, 8, 5, 2, 68, 69, 7, 10, 2, 2, 69, 71, 3, 2, 2, 2, 70, 67, 3, 2, 2, 2, 71, 74, 3, 2, 2, 2, 72, 70, 3, 2, 2, 2, 72, 73, 3, 2, 2, 2, 73, 75, 3, 2, 2, 2, 74, 72, 3, 2, 2, 2, 75, 87, 5, 18, 10, 2, 76, 77, 5, 16, 9, 2, 77, 78, 9, 2, 2, 2, 78, 79, 7, 10, 2, 2, 79, 80, 5, 16, 9, 2, 80, 87, 3, 2, 2, 2, 81, 87, 9, 3, 2, 2, 82, 84, 7, 24, 2, 2, 83, 85, 5, 18, 10, 2, 84, 83, 3, 2, 2, 2, 84, 85, 3, 2, 2, 2, 85, 87, 3, 2, 2, 2, 86, 46, 3, 2, 2, 2, 86, 56, 3, 2, 2, 2, 86, 57, 3, 2, 2, 2, 86, 61, 3, 2, 2, 2, 86, 72, 3, 2, 2, 2, 86, 76, 3, 2, 2, 2, 86, 81, 3, 2, 2, 2, 86, 82, 3, 2, 2, 2, 87, 7, 3, 2, 2, 2, 88, 93, 5, 16, 9, 2, 89, 90, 7, 25, 2, 2, 90, 92, 5, 16, 9, 2, 91, 89, 3, 2, 2, 2, 92, 95, 3, 2, 2, 2, 93, 91, 3, 2, 2, 2, 93, 94, 3, 2, 2, 2, 94, 9, 3, 2, 2, 2, 95, 93, 3, 2, 2, 2, 96, 97, 7, 26, 2, 2, 97, 98, 5, 16, 9, 2, 98, 99, 7, 27, 2, 2, 99, 107, 5, 14, 8, 2, 100, 101, 7, 28, 2, 2, 101, 102, 5, 16, 9, 2, 102, 103, 7, 27, 2, 2, 103, 104, 5, 14, 8, 2, 104, 106, 3, 2, 2, 2, 105, 100, 3, 2, 2, 2, 106, 109, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 107, 108, 3, 2, 2, 2, 108, 113, 3, 2, 2, 2, 109, 107, 3, 2, 2, 2, 110, 111, 7, 29, 2, 2, 111, 112, 7, 27, 2, 2, 112, 114, 5, 14, 8, 2, 113, 110, 3, 2, 2, 2, 113, 114, 3, 2, 2, 2, 114, 161, 3, 2, 2, 2, 115, 116, 7, 30, 2, 2, 116, 117, 5, 16, 9, 2, 117, 118, 7, 27, 2, 2, 118, 119, 5, 14, 8, 2, 119, 161, 3, 2, 2, 2, 120, 121, 7, 31, 2, 2, 121, 122, 5, 16, 9, 2, 122, 123, 7, 27, 2, 2, 123, 124, 5, 14, 8, 2, 124, 161, 3, 2, 2, 2, 125, 126, 7, 32, 2, 2, 126, 127, 5, 18, 10, 2, 127, 128, 7, 33, 2, 2, 128, 131, 5, 18, 10, 2, 129, 130, 7, 34, 2, 2, 130, 132, 5, 18, 10, 2, 131, 129, 3, 2, 2, 2, 131, 132, 3, 2, 2, 2, 132, 133, 3, 2, 2, 2, 133, 134, 7, 27, 2, 2, 134, 135, 5, 14, 8, 2, 135, 161, 3, 2, 2, 2, 136, 137, 7, 35, 2, 2, 137, 138, 7, 73, 2, 2, 138, 144, 7, 36, 2, 2, 139, 140, 5, 12, 7, 2, 140, 141, 7, 25, 2, 2, 141, 143, 3, 2, 2, 2, 142, 139, 3, 2, 2, 2, 143, 146, 3, 2, 2, 2, 144, 142, 3, 2, 2, 2, 144, 145, 3, 2, 2, 2, 145, 148, 3, 2, 2, 2, 146, 144, 3, 2, 2, 2, 147, 149, 5, 12, 7, 2, 148, 147, 3, 2, 2, 2, 148, 149, 3, 2, 2, 2, 149, 150, 3, 2, 2, 2, 150, 152, 7, 37, 2, 2, 151, 153, 5, 30, 16, 2, 152, 151, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 158, 3, 2, 2, 2, 154, 155, 7, 38, 2, 2, 155, 159, 5, 14, 8, 2, 156, 157, 7, 39, 2, 2, 157, 159, 7, 3, 2, 2, 158, 154, 3, 2, 2, 2, 158, 156, 3, 2, 2, 2, 159, 161, 3, 2, 2, 2, 160, 96, 3, 2, 2, 2, 160, 115, 3, 2, 2, 2, 160, 120, 3, 2, 2, 2, 160, 125, 3, 2, 2, 2, 160, 136, 3, 2, 2, 2, 161, 11, 3, 2, 2, 2, 162, 163, 5, 30, 16, 2, 163, 166, 7, 73, 2, 2, 164, 165, 7, 40, 2, 2, 165, 167, 5, 16, 9, 2, 166, 164, 3, 2, 2, 2, 166, 167, 3, 2, 2, 2, 167, 13, 3, 2, 2, 2, 168, 170, 7, 41, 2, 2, 169, 171, 5, 4, 3, 2, 170, 169, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 170, 3, 2, 2, 2, 172, 173, 3, 2, 2, 2, 173, 174, 3, 2, 2, 2, 174, 175, 7, 42, 2, 2, 175, 15, 3, 2, 2, 2, 176, 177, 8, 9, 1, 2, 177, 222, 5, 26, 14, 2, 178, 179, 7, 36, 2, 2, 179, 180, 5, 18, 10, 2, 180, 181, 7, 37, 2, 2, 181, 222, 3, 2, 2, 2, 182, 188, 7, 43, 2, 2, 183, 184, 5, 16, 9, 2, 184, 185, 7, 25, 2, 2, 185, 187, 3, 2, 2, 2, 186, 183, 3, 2, 2, 2, 187, 190, 3, 2, 2, 2, 188, 186, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 192, 3, 2, 2, 2, 190, 188, 3, 2, 2, 2, 191, 193, 5, 16, 9, 2, 192, 191, 3, 2, 2, 2, 192, 193, 3, 2, 2, 2, 193, 194, 3, 2, 2, 2, 194, 222, 7, 44, 2, 2, 195, 196, 7, 43, 2, 2, 196, 198, 5, 16, 9, 2, 197, 199, 5, 22, 12, 2, 198, 197, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 198, 3, 2, 2, 2, 200, 201, 3, 2, 2, 2, 201, 202, 3, 2, 2, 2, 202, 203, 7, 44, 2, 2, 203, 222, 3, 2, 2, 2, 204, 205, 9, 4, 2, 2, 205, 222, 5, 16, 9, 17, 206, 207, 7, 55, 2, 2, 207, 222, 5, 16, 9, 7, 208, 213, 7, 59, 2, 2, 209, 210, 7, 73, 2, 2, 210, 212, 7, 25, 2, 2, 211, 209, 3, 2, 2, 2, 212, 215, 3, 2, 2, 2, 213, 211, 3, 2, 2, 2, 213, 214, 3, 2, 2, 2, 214, 217, 3, 2, 2, 2, 215, 213, 3, 2, 2, 2, 216, 218, 7, 73, 2, 2, 217, 216, 3, 2, 2, 2, 217, 218, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 220, 7, 60, 2, 2, 220, 222, 5, 16, 9, 3, 221, 176, 3, 2, 2, 2, 221, 178, 3, 2, 2, 2, 221, 182, 3, 2, 2, 2, 221, 195, 3, 2, 2, 2, 221, 204, 3, 2, 2, 2, 221, 206, 3, 2, 2, 2, 221, 208, 3, 2, 2, 2, 222, 304, 3, 2, 2, 2, 223, 224, 12, 18, 2, 2, 224, 225, 7, 11, 2, 2, 225, 303, 5, 16, 9, 18, 226, 227, 12, 16, 2, 2, 227, 228, 9, 5, 2, 2, 228, 303, 5, 16, 9, 17, 229, 230, 12, 15, 2, 2, 230, 231, 9, 6, 2, 2, 231, 303, 5, 16, 9, 16, 232, 233, 12, 14, 2, 2, 233, 234, 9, 7, 2, 2, 234, 303, 5, 16, 9, 15, 235, 236, 12, 13, 2, 2, 236, 237, 7, 19, 2, 2, 237, 303, 5, 16, 9, 14, 238, 239, 12, 12, 2, 2, 239, 240, 7, 20, 2, 2, 240, 303, 5, 16, 9, 13, 241, 242, 12, 11, 2, 2, 242, 243, 7, 21, 2, 2, 243, 303, 5, 16, 9, 12, 244, 245, 12, 10, 2, 2, 245, 246, 9, 8, 2, 2, 246, 303, 5, 16, 9, 11, 247, 248, 12, 8, 2, 2, 248, 249, 9, 9, 2, 2, 249, 303, 5, 16, 9, 8, 250, 251, 12, 6, 2, 2, 251, 252, 7, 56, 2, 2, 252, 303, 5, 16, 9, 6, 253, 254, 12, 5, 2, 2, 254, 255, 7, 57, 2, 2, 255, 303, 5, 16, 9, 5, 256, 257, 12, 4, 2, 2, 257, 258, 7, 58, 2, 2, 258, 259, 5, 16, 9, 2, 259, 260, 7, 40, 2, 2, 260, 261, 5, 16, 9, 4, 261, 303, 3, 2, 2, 2, 262, 263, 12, 22, 2, 2, 263, 264, 7, 43, 2, 2, 264, 265, 5, 18, 10, 2, 265, 266, 7, 44, 2, 2, 266, 303, 3, 2, 2, 2, 267, 268, 12, 21, 2, 2, 268, 270, 7, 43, 2, 2, 269, 271, 5, 16, 9, 2, 270, 269, 3, 2, 2, 2, 270, 271, 3, 2, 2, 2, 271, 272, 3, 2, 2, 2, 272, 274, 7, 40, 2, 2, 273, 275, 5, 16, 9, 2, 274, 273, 3, 2, 2, 2, 274, 275, 3, 2, 2, 2, 275, 280, 3, 2, 2, 2, 276, 278, 7, 40, 2, 2, 277, 279, 5, 16, 9, 2, 278, 277, 3, 2, 2, 2, 278, 279, 3, 2, 2, 2, 279, 281, 3, 2, 2, 2, 280, 276, 3, 2, 2, 2, 280, 281, 3, 2, 2, 2, 281, 282, 3, 2, 2, 2, 282, 303, 7, 44, 2, 2, 283, 284, 12, 20, 2, 2, 284, 285, 7, 45, 2, 2, 285, 303, 7, 73, 2, 2, 286, 287, 12, 19, 2, 2, 287, 293, 7, 36, 2, 2, 288, 289, 5, 24, 13, 2, 289, 290, 7, 25, 2, 2, 290, 292, 3, 2, 2, 2, 291, 288, 3, 2, 2, 2, 292, 295, 3, 2, 2, 2, 293, 291, 3, 2, 2, 2, 293, 294, 3, 2, 2, 2, 294, 297, 3, 2, 2, 2, 295, 293, 3, 2, 2, 2, 296, 298, 5, 24, 13, 2, 297, 296, 3, 2, 2, 2, 297, 298, 3, 2, 2, 2, 298, 299, 3, 2, 2, 2, 299, 303, 7, 37, 2, 2, 300, 301, 12, 9, 2, 2, 301, 303, 7, 48, 2, 2, 302, 223, 3, 2, 2, 2, 302, 226, 3, 2, 2, 2, 302, 229, 3, 2, 2, 2, 302, 232, 3, 2, 2, 2, 302, 235, 3, 2, 2, 2, 302, 238, 3, 2, 2, 2, 302, 241, 3, 2, 2, 2, 302, 244, 3, 2, 2, 2, 302, 247, 3, 2, 2, 2, 302, 250, 3, 2, 2, 2, 302, 253, 3, 2, 2, 2, 302, 256, 3, 2, 2, 2, 302, 262, 3, 2, 2, 2, 302, 267, 3, 2, 2, 2, 302, 283, 3, 2, 2, 2, 302, 286, 3, 2, 2, 2, 302, 300, 3, 2, 2, 2, 303, 306, 3, 2, 2, 2, 304, 302, 3, 2, 2, 2, 304, 305, 3, 2, 2, 2, 305, 17, 3, 2, 2, 2, 306, 304, 3, 2, 2, 2, 307, 308, 5, 16, 9, 2, 308, 309, 7, 25, 2, 2, 309, 311, 3, 2, 2, 2, 310, 307, 3, 2, 2, 2, 311, 314, 3, 2, 2, 2, 312, 310, 3, 2, 2, 2, 312, 313, 3, 2, 2, 2, 313, 315, 3, 2, 2, 2, 314, 312, 3, 2, 2, 2, 315, 316, 5, 16, 9, 2, 316, 19, 3, 2, 2, 2, 317, 318, 5, 18, 10, 2, 318, 319, 7, 2, 2, 3, 319, 21, 3, 2, 2, 2, 320, 321, 7, 32, 2, 2, 321, 322, 5, 18, 10, 2, 322, 323, 7, 33, 2, 2, 323, 326, 5, 18, 10, 2, 324, 325, 7, 34, 2, 2, 325, 327, 5, 18, 10, 2, 326, 324, 3, 2, 2, 2, 326, 327, 3, 2, 2, 2, 327, 331, 3, 2, 2, 2, 328, 329, 7, 26, 2, 2, 329, 331, 5, 16, 9, 2, 330, 320, 3, 2, 2, 2, 330, 328, 3, 2, 2, 2, 331, 23, 3, 2, 2, 2, 332, 333, 7, 73, 2, 2, 333, 335, 7, 10, 2, 2, 334, 332, 3, 2, 2, 2, 334, 335, 3, 2, 2, 2, 335, 336, 3, 2, 2, 2, 336, 337, 5, 16, 9, 2, 337, 25, 3, 2, 2, 2, 338, 345, 7, 69, 2, 2, 339, 345, 7, 70, 2, 2, 340, 345, 9, 10, 2, 2, 341, 345, 7, 71, 2, 2, 342, 345, 7, 72, 2, 2, 343, 345, 7, 73, 2, 2, 344, 338, 3, 2, 2, 2, 344, 339, 3, 2, 2, 2, 344, 340, 3, 2, 2, 2, 344, 341, 3, 2, 2, 2, 344, 342, 3, 2, 2, 2, 344, 343, 3, 2, 2, 2, 345, 27, 3, 2, 2, 2, 346, 347, 7, 73, 2, 2, 347, 349, 7, 25, 2, 2, 348, 346, 3, 2, 2, 2, 349, 352, 3, 2, 2, 2, 350, 348, 3, 2, 2, 2, 350, 351, 3, 2, 2, 2, 351, 353, 3, 2, 2, 2, 352, 350, 3, 2, 2, 2, 353, 354, 7, 73, 2, 2, 354, 29, 3, 2, 2, 2, 355, 356, 8, 16, 1, 2, 356, 368, 9, 11, 2, 2, 357, 358, 7, 36, 2, 2, 358, 359, 5, 30, 16, 2, 359, 360, 7, 37, 2, 2, 360, 368, 3, 2, 2, 2, 361, 362, 7, 43, 2, 2, 362, 363, 5, 30, 16, 2, 363, 364, 7, 44, 2, 2, 364, 368, 3, 2, 2, 2, 365, 366, 7, 60, 2, 2, 366, 368, 5, 30, 16, 3, 367, 355, 3, 2, 2, 2, 367, 357, 3, 2, 2, 2, 367, 361, 3, 2, 2, 2, 367, 365, 3, 2, 2, 2, 368, 377, 3, 2, 2, 2, 369, 370, 12, 5, 2, 2, 370, 371, 7, 12, 2, 2, 371, 376, 5, 30, 16, 5, 372, 373, 12, 4, 2, 2, 373, 374, 7, 60, 2, 2, 374, 376, 5, 30, 16, 4, 375, 369, 3, 2, 2, 2, 375, 372, 3, 2, 2, 2, 376, 379, 3, 2, 2, 2, 377, 375, 3, 2, 2, 2, 377, 378, 3, 2, 2, 2, 378, 31, 3, 2, 2, 2, 379, 377, 3, 2, 2, 2, 44, 35, 44, 54, 59, 65, 72, 84, 86, 93, 107, 113, 131, 144, 148, 152, 158, 160, 166, 172, 188, 192, 200, 213, 217, 221, 270, 274, 278, 280, 293, 297, 302, 304, 312, 326, 330, 334, 344, 350, 367, 375, 377] \ No newline at end of file diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index 9a87fdec..a38034f9 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -9,7 +9,7 @@ def serializedATN(): with StringIO() as buf: buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3L") - buf.write("\u016d\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\u017d\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16") buf.write("\t\16\4\17\t\17\4\20\t\20\3\2\7\2\"\n\2\f\2\16\2%\13\2") buf.write("\3\2\3\2\3\3\3\3\3\3\3\3\5\3-\n\3\3\4\3\4\3\4\3\4\3\4") @@ -31,158 +31,167 @@ def serializedATN(): buf.write("\3\t\3\t\5\t\u00de\n\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") buf.write("\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") - buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") - buf.write("\t\3\t\3\t\3\t\7\t\u0114\n\t\f\t\16\t\u0117\13\t\3\t\5") - buf.write("\t\u011a\n\t\3\t\3\t\3\t\7\t\u011f\n\t\f\t\16\t\u0122") - buf.write("\13\t\3\n\3\n\3\n\7\n\u0127\n\n\f\n\16\n\u012a\13\n\3") - buf.write("\n\3\n\3\13\3\13\3\13\3\f\3\f\3\f\3\f\3\f\3\f\5\f\u0137") - buf.write("\n\f\3\f\3\f\5\f\u013b\n\f\3\r\3\r\5\r\u013f\n\r\3\r\3") - buf.write("\r\3\16\3\16\3\16\3\16\3\16\3\16\5\16\u0149\n\16\3\17") - buf.write("\3\17\7\17\u014d\n\17\f\17\16\17\u0150\13\17\3\17\3\17") - buf.write("\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20") - buf.write("\3\20\5\20\u0160\n\20\3\20\3\20\3\20\3\20\3\20\3\20\7") - buf.write("\20\u0168\n\20\f\20\16\20\u016b\13\20\3\20\2\4\20\36\21") - buf.write("\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36\2\f\3\2\13\25") - buf.write("\3\2\26\27\4\2\17\20..\3\2\f\16\3\2\17\20\3\2\21\22\3") - buf.write("\2/\60\3\2\61\66\3\2=>\3\2?D\2\u01a7\2#\3\2\2\2\4,\3\2") - buf.write("\2\2\6V\3\2\2\2\bX\3\2\2\2\n\u00a0\3\2\2\2\f\u00a2\3\2") - buf.write("\2\2\16\u00a8\3\2\2\2\20\u00dd\3\2\2\2\22\u0128\3\2\2") - buf.write("\2\24\u012d\3\2\2\2\26\u013a\3\2\2\2\30\u013e\3\2\2\2") - buf.write("\32\u0148\3\2\2\2\34\u014e\3\2\2\2\36\u015f\3\2\2\2 \"") - buf.write("\5\4\3\2! \3\2\2\2\"%\3\2\2\2#!\3\2\2\2#$\3\2\2\2$&\3") - buf.write("\2\2\2%#\3\2\2\2&\'\7\2\2\3\'\3\3\2\2\2()\5\6\4\2)*\7") - buf.write("\3\2\2*-\3\2\2\2+-\5\n\6\2,(\3\2\2\2,+\3\2\2\2-\5\3\2") - buf.write("\2\2./\7\4\2\2/\66\7I\2\2\60\61\7\5\2\2\61\67\5\34\17") - buf.write("\2\62\63\7\6\2\2\63\67\5\34\17\2\64\65\7\7\2\2\65\67\7") - buf.write("I\2\2\66\60\3\2\2\2\66\62\3\2\2\2\66\64\3\2\2\2\66\67") - buf.write("\3\2\2\2\67W\3\2\2\28W\7\b\2\29;\7\t\2\2:<\5\22\n\2;:") - buf.write("\3\2\2\2;<\3\2\2\2\5\36\20\2>A\7I\2\2?@\7") - buf.write("\n\2\2@B\5\22\n\2A?\3\2\2\2AB\3\2\2\2BW\3\2\2\2CD\5\b") - buf.write("\5\2DE\7\n\2\2EG\3\2\2\2FC\3\2\2\2GJ\3\2\2\2HF\3\2\2\2") - buf.write("HI\3\2\2\2IK\3\2\2\2JH\3\2\2\2KW\5\22\n\2LM\5\20\t\2M") - buf.write("N\t\2\2\2NO\7\n\2\2OP\5\20\t\2PW\3\2\2\2QW\t\3\2\2RT\7") - buf.write("\30\2\2SU\5\22\n\2TS\3\2\2\2TU\3\2\2\2UW\3\2\2\2V.\3\2") - buf.write("\2\2V8\3\2\2\2V9\3\2\2\2V=\3\2\2\2VH\3\2\2\2VL\3\2\2\2") - buf.write("VQ\3\2\2\2VR\3\2\2\2W\7\3\2\2\2X]\5\20\t\2YZ\7\31\2\2") - buf.write("Z\\\5\20\t\2[Y\3\2\2\2\\_\3\2\2\2][\3\2\2\2]^\3\2\2\2") - buf.write("^\t\3\2\2\2_]\3\2\2\2`a\7\32\2\2ab\5\20\t\2bc\7\33\2\2") - buf.write("ck\5\16\b\2de\7\34\2\2ef\5\20\t\2fg\7\33\2\2gh\5\16\b") - buf.write("\2hj\3\2\2\2id\3\2\2\2jm\3\2\2\2ki\3\2\2\2kl\3\2\2\2l") - buf.write("q\3\2\2\2mk\3\2\2\2no\7\35\2\2op\7\33\2\2pr\5\16\b\2q") - buf.write("n\3\2\2\2qr\3\2\2\2r\u00a1\3\2\2\2st\7\36\2\2tu\5\20\t") - buf.write("\2uv\7\33\2\2vw\5\16\b\2w\u00a1\3\2\2\2xy\7\37\2\2yz\5") - buf.write("\20\t\2z{\7\33\2\2{|\5\16\b\2|\u00a1\3\2\2\2}~\7 \2\2") - buf.write("~\177\5\22\n\2\177\u0080\7!\2\2\u0080\u0083\5\22\n\2\u0081") - buf.write("\u0082\7\"\2\2\u0082\u0084\5\22\n\2\u0083\u0081\3\2\2") - buf.write("\2\u0083\u0084\3\2\2\2\u0084\u0085\3\2\2\2\u0085\u0086") - buf.write("\7\33\2\2\u0086\u0087\5\16\b\2\u0087\u00a1\3\2\2\2\u0088") - buf.write("\u0089\7#\2\2\u0089\u008a\7I\2\2\u008a\u0090\7$\2\2\u008b") - buf.write("\u008c\5\f\7\2\u008c\u008d\7\31\2\2\u008d\u008f\3\2\2") - buf.write("\2\u008e\u008b\3\2\2\2\u008f\u0092\3\2\2\2\u0090\u008e") - buf.write("\3\2\2\2\u0090\u0091\3\2\2\2\u0091\u0094\3\2\2\2\u0092") - buf.write("\u0090\3\2\2\2\u0093\u0095\5\f\7\2\u0094\u0093\3\2\2\2") - buf.write("\u0094\u0095\3\2\2\2\u0095\u0096\3\2\2\2\u0096\u0098\7") - buf.write("%\2\2\u0097\u0099\5\36\20\2\u0098\u0097\3\2\2\2\u0098") - buf.write("\u0099\3\2\2\2\u0099\u009e\3\2\2\2\u009a\u009b\7&\2\2") - buf.write("\u009b\u009f\5\16\b\2\u009c\u009d\7\'\2\2\u009d\u009f") - buf.write("\7\3\2\2\u009e\u009a\3\2\2\2\u009e\u009c\3\2\2\2\u009f") - buf.write("\u00a1\3\2\2\2\u00a0`\3\2\2\2\u00a0s\3\2\2\2\u00a0x\3") - buf.write("\2\2\2\u00a0}\3\2\2\2\u00a0\u0088\3\2\2\2\u00a1\13\3\2") - buf.write("\2\2\u00a2\u00a3\5\36\20\2\u00a3\u00a6\7I\2\2\u00a4\u00a5") - buf.write("\7(\2\2\u00a5\u00a7\5\20\t\2\u00a6\u00a4\3\2\2\2\u00a6") - buf.write("\u00a7\3\2\2\2\u00a7\r\3\2\2\2\u00a8\u00aa\7)\2\2\u00a9") - buf.write("\u00ab\5\4\3\2\u00aa\u00a9\3\2\2\2\u00ab\u00ac\3\2\2\2") - buf.write("\u00ac\u00aa\3\2\2\2\u00ac\u00ad\3\2\2\2\u00ad\u00ae\3") - buf.write("\2\2\2\u00ae\u00af\7*\2\2\u00af\17\3\2\2\2\u00b0\u00b1") - buf.write("\b\t\1\2\u00b1\u00de\5\32\16\2\u00b2\u00b3\7$\2\2\u00b3") - buf.write("\u00b4\5\22\n\2\u00b4\u00b5\7%\2\2\u00b5\u00de\3\2\2\2") - buf.write("\u00b6\u00bc\7+\2\2\u00b7\u00b8\5\20\t\2\u00b8\u00b9\7") - buf.write("\31\2\2\u00b9\u00bb\3\2\2\2\u00ba\u00b7\3\2\2\2\u00bb") - buf.write("\u00be\3\2\2\2\u00bc\u00ba\3\2\2\2\u00bc\u00bd\3\2\2\2") - buf.write("\u00bd\u00c0\3\2\2\2\u00be\u00bc\3\2\2\2\u00bf\u00c1\5") - buf.write("\20\t\2\u00c0\u00bf\3\2\2\2\u00c0\u00c1\3\2\2\2\u00c1") - buf.write("\u00c2\3\2\2\2\u00c2\u00de\7,\2\2\u00c3\u00c4\7+\2\2\u00c4") - buf.write("\u00c6\5\20\t\2\u00c5\u00c7\5\26\f\2\u00c6\u00c5\3\2\2") - buf.write("\2\u00c7\u00c8\3\2\2\2\u00c8\u00c6\3\2\2\2\u00c8\u00c9") - buf.write("\3\2\2\2\u00c9\u00ca\3\2\2\2\u00ca\u00cb\7,\2\2\u00cb") - buf.write("\u00de\3\2\2\2\u00cc\u00cd\t\4\2\2\u00cd\u00de\5\20\t") - buf.write("\21\u00ce\u00cf\7\67\2\2\u00cf\u00de\5\20\t\7\u00d0\u00d5") - buf.write("\7;\2\2\u00d1\u00d2\7I\2\2\u00d2\u00d4\7\31\2\2\u00d3") - buf.write("\u00d1\3\2\2\2\u00d4\u00d7\3\2\2\2\u00d5\u00d3\3\2\2\2") - buf.write("\u00d5\u00d6\3\2\2\2\u00d6\u00d9\3\2\2\2\u00d7\u00d5\3") - buf.write("\2\2\2\u00d8\u00da\7I\2\2\u00d9\u00d8\3\2\2\2\u00d9\u00da") - buf.write("\3\2\2\2\u00da\u00db\3\2\2\2\u00db\u00dc\7<\2\2\u00dc") - buf.write("\u00de\5\20\t\3\u00dd\u00b0\3\2\2\2\u00dd\u00b2\3\2\2") - buf.write("\2\u00dd\u00b6\3\2\2\2\u00dd\u00c3\3\2\2\2\u00dd\u00cc") - buf.write("\3\2\2\2\u00dd\u00ce\3\2\2\2\u00dd\u00d0\3\2\2\2\u00de") - buf.write("\u0120\3\2\2\2\u00df\u00e0\f\22\2\2\u00e0\u00e1\7\13\2") - buf.write("\2\u00e1\u011f\5\20\t\22\u00e2\u00e3\f\20\2\2\u00e3\u00e4") - buf.write("\t\5\2\2\u00e4\u011f\5\20\t\21\u00e5\u00e6\f\17\2\2\u00e6") - buf.write("\u00e7\t\6\2\2\u00e7\u011f\5\20\t\20\u00e8\u00e9\f\16") - buf.write("\2\2\u00e9\u00ea\t\7\2\2\u00ea\u011f\5\20\t\17\u00eb\u00ec") - buf.write("\f\r\2\2\u00ec\u00ed\7\23\2\2\u00ed\u011f\5\20\t\16\u00ee") - buf.write("\u00ef\f\f\2\2\u00ef\u00f0\7\24\2\2\u00f0\u011f\5\20\t") - buf.write("\r\u00f1\u00f2\f\13\2\2\u00f2\u00f3\7\25\2\2\u00f3\u011f") - buf.write("\5\20\t\f\u00f4\u00f5\f\n\2\2\u00f5\u00f6\t\b\2\2\u00f6") - buf.write("\u011f\5\20\t\13\u00f7\u00f8\f\b\2\2\u00f8\u00f9\t\t\2") - buf.write("\2\u00f9\u011f\5\20\t\b\u00fa\u00fb\f\6\2\2\u00fb\u00fc") - buf.write("\78\2\2\u00fc\u011f\5\20\t\6\u00fd\u00fe\f\5\2\2\u00fe") - buf.write("\u00ff\79\2\2\u00ff\u011f\5\20\t\5\u0100\u0101\f\4\2\2") - buf.write("\u0101\u0102\7:\2\2\u0102\u0103\5\20\t\2\u0103\u0104\7") - buf.write("(\2\2\u0104\u0105\5\20\t\4\u0105\u011f\3\2\2\2\u0106\u0107") - buf.write("\f\25\2\2\u0107\u0108\7+\2\2\u0108\u0109\5\22\n\2\u0109") - buf.write("\u010a\7,\2\2\u010a\u011f\3\2\2\2\u010b\u010c\f\24\2\2") - buf.write("\u010c\u010d\7-\2\2\u010d\u011f\7I\2\2\u010e\u010f\f\23") - buf.write("\2\2\u010f\u0115\7$\2\2\u0110\u0111\5\30\r\2\u0111\u0112") - buf.write("\7\31\2\2\u0112\u0114\3\2\2\2\u0113\u0110\3\2\2\2\u0114") - buf.write("\u0117\3\2\2\2\u0115\u0113\3\2\2\2\u0115\u0116\3\2\2\2") - buf.write("\u0116\u0119\3\2\2\2\u0117\u0115\3\2\2\2\u0118\u011a\5") - buf.write("\30\r\2\u0119\u0118\3\2\2\2\u0119\u011a\3\2\2\2\u011a") - buf.write("\u011b\3\2\2\2\u011b\u011f\7%\2\2\u011c\u011d\f\t\2\2") - buf.write("\u011d\u011f\7\60\2\2\u011e\u00df\3\2\2\2\u011e\u00e2") - buf.write("\3\2\2\2\u011e\u00e5\3\2\2\2\u011e\u00e8\3\2\2\2\u011e") - buf.write("\u00eb\3\2\2\2\u011e\u00ee\3\2\2\2\u011e\u00f1\3\2\2\2") - buf.write("\u011e\u00f4\3\2\2\2\u011e\u00f7\3\2\2\2\u011e\u00fa\3") - buf.write("\2\2\2\u011e\u00fd\3\2\2\2\u011e\u0100\3\2\2\2\u011e\u0106") - buf.write("\3\2\2\2\u011e\u010b\3\2\2\2\u011e\u010e\3\2\2\2\u011e") - buf.write("\u011c\3\2\2\2\u011f\u0122\3\2\2\2\u0120\u011e\3\2\2\2") - buf.write("\u0120\u0121\3\2\2\2\u0121\21\3\2\2\2\u0122\u0120\3\2") - buf.write("\2\2\u0123\u0124\5\20\t\2\u0124\u0125\7\31\2\2\u0125\u0127") - buf.write("\3\2\2\2\u0126\u0123\3\2\2\2\u0127\u012a\3\2\2\2\u0128") - buf.write("\u0126\3\2\2\2\u0128\u0129\3\2\2\2\u0129\u012b\3\2\2\2") - buf.write("\u012a\u0128\3\2\2\2\u012b\u012c\5\20\t\2\u012c\23\3\2") - buf.write("\2\2\u012d\u012e\5\22\n\2\u012e\u012f\7\2\2\3\u012f\25") - buf.write("\3\2\2\2\u0130\u0131\7 \2\2\u0131\u0132\5\22\n\2\u0132") - buf.write("\u0133\7!\2\2\u0133\u0136\5\22\n\2\u0134\u0135\7\"\2\2") - buf.write("\u0135\u0137\5\22\n\2\u0136\u0134\3\2\2\2\u0136\u0137") - buf.write("\3\2\2\2\u0137\u013b\3\2\2\2\u0138\u0139\7\32\2\2\u0139") - buf.write("\u013b\5\20\t\2\u013a\u0130\3\2\2\2\u013a\u0138\3\2\2") - buf.write("\2\u013b\27\3\2\2\2\u013c\u013d\7I\2\2\u013d\u013f\7\n") - buf.write("\2\2\u013e\u013c\3\2\2\2\u013e\u013f\3\2\2\2\u013f\u0140") - buf.write("\3\2\2\2\u0140\u0141\5\20\t\2\u0141\31\3\2\2\2\u0142\u0149") - buf.write("\7E\2\2\u0143\u0149\7F\2\2\u0144\u0149\t\n\2\2\u0145\u0149") - buf.write("\7G\2\2\u0146\u0149\7H\2\2\u0147\u0149\7I\2\2\u0148\u0142") - buf.write("\3\2\2\2\u0148\u0143\3\2\2\2\u0148\u0144\3\2\2\2\u0148") - buf.write("\u0145\3\2\2\2\u0148\u0146\3\2\2\2\u0148\u0147\3\2\2\2") - buf.write("\u0149\33\3\2\2\2\u014a\u014b\7I\2\2\u014b\u014d\7\31") - buf.write("\2\2\u014c\u014a\3\2\2\2\u014d\u0150\3\2\2\2\u014e\u014c") - buf.write("\3\2\2\2\u014e\u014f\3\2\2\2\u014f\u0151\3\2\2\2\u0150") - buf.write("\u014e\3\2\2\2\u0151\u0152\7I\2\2\u0152\35\3\2\2\2\u0153") - buf.write("\u0154\b\20\1\2\u0154\u0160\t\13\2\2\u0155\u0156\7$\2") - buf.write("\2\u0156\u0157\5\36\20\2\u0157\u0158\7%\2\2\u0158\u0160") - buf.write("\3\2\2\2\u0159\u015a\7+\2\2\u015a\u015b\5\36\20\2\u015b") - buf.write("\u015c\7,\2\2\u015c\u0160\3\2\2\2\u015d\u015e\7<\2\2\u015e") - buf.write("\u0160\5\36\20\3\u015f\u0153\3\2\2\2\u015f\u0155\3\2\2") - buf.write("\2\u015f\u0159\3\2\2\2\u015f\u015d\3\2\2\2\u0160\u0169") - buf.write("\3\2\2\2\u0161\u0162\f\5\2\2\u0162\u0163\7\f\2\2\u0163") - buf.write("\u0168\5\36\20\5\u0164\u0165\f\4\2\2\u0165\u0166\7<\2") - buf.write("\2\u0166\u0168\5\36\20\4\u0167\u0161\3\2\2\2\u0167\u0164") - buf.write("\3\2\2\2\u0168\u016b\3\2\2\2\u0169\u0167\3\2\2\2\u0169") - buf.write("\u016a\3\2\2\2\u016a\37\3\2\2\2\u016b\u0169\3\2\2\2(#") - buf.write(",\66;AHTV]kq\u0083\u0090\u0094\u0098\u009e\u00a0\u00a6") - buf.write("\u00ac\u00bc\u00c0\u00c8\u00d5\u00d9\u00dd\u0115\u0119") - buf.write("\u011e\u0120\u0128\u0136\u013a\u013e\u0148\u014e\u015f") - buf.write("\u0167\u0169") + buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\5\t\u010f") + buf.write("\n\t\3\t\3\t\5\t\u0113\n\t\3\t\3\t\5\t\u0117\n\t\5\t\u0119") + buf.write("\n\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\7\t\u0124\n\t") + buf.write("\f\t\16\t\u0127\13\t\3\t\5\t\u012a\n\t\3\t\3\t\3\t\7\t") + buf.write("\u012f\n\t\f\t\16\t\u0132\13\t\3\n\3\n\3\n\7\n\u0137\n") + buf.write("\n\f\n\16\n\u013a\13\n\3\n\3\n\3\13\3\13\3\13\3\f\3\f") + buf.write("\3\f\3\f\3\f\3\f\5\f\u0147\n\f\3\f\3\f\5\f\u014b\n\f\3") + buf.write("\r\3\r\5\r\u014f\n\r\3\r\3\r\3\16\3\16\3\16\3\16\3\16") + buf.write("\3\16\5\16\u0159\n\16\3\17\3\17\7\17\u015d\n\17\f\17\16") + buf.write("\17\u0160\13\17\3\17\3\17\3\20\3\20\3\20\3\20\3\20\3\20") + buf.write("\3\20\3\20\3\20\3\20\3\20\3\20\5\20\u0170\n\20\3\20\3") + buf.write("\20\3\20\3\20\3\20\3\20\7\20\u0178\n\20\f\20\16\20\u017b") + buf.write("\13\20\3\20\2\4\20\36\21\2\4\6\b\n\f\16\20\22\24\26\30") + buf.write("\32\34\36\2\f\3\2\13\25\3\2\26\27\4\2\17\20..\3\2\f\16") + buf.write("\3\2\17\20\3\2\21\22\3\2/\60\3\2\61\66\3\2=>\3\2?D\2\u01bc") + buf.write("\2#\3\2\2\2\4,\3\2\2\2\6V\3\2\2\2\bX\3\2\2\2\n\u00a0\3") + buf.write("\2\2\2\f\u00a2\3\2\2\2\16\u00a8\3\2\2\2\20\u00dd\3\2\2") + buf.write("\2\22\u0138\3\2\2\2\24\u013d\3\2\2\2\26\u014a\3\2\2\2") + buf.write("\30\u014e\3\2\2\2\32\u0158\3\2\2\2\34\u015e\3\2\2\2\36") + buf.write("\u016f\3\2\2\2 \"\5\4\3\2! \3\2\2\2\"%\3\2\2\2#!\3\2\2") + buf.write("\2#$\3\2\2\2$&\3\2\2\2%#\3\2\2\2&\'\7\2\2\3\'\3\3\2\2") + buf.write("\2()\5\6\4\2)*\7\3\2\2*-\3\2\2\2+-\5\n\6\2,(\3\2\2\2,") + buf.write("+\3\2\2\2-\5\3\2\2\2./\7\4\2\2/\66\7I\2\2\60\61\7\5\2") + buf.write("\2\61\67\5\34\17\2\62\63\7\6\2\2\63\67\5\34\17\2\64\65") + buf.write("\7\7\2\2\65\67\7I\2\2\66\60\3\2\2\2\66\62\3\2\2\2\66\64") + buf.write("\3\2\2\2\66\67\3\2\2\2\67W\3\2\2\28W\7\b\2\29;\7\t\2\2") + buf.write(":<\5\22\n\2;:\3\2\2\2;<\3\2\2\2\5\36\20\2") + buf.write(">A\7I\2\2?@\7\n\2\2@B\5\22\n\2A?\3\2\2\2AB\3\2\2\2BW\3") + buf.write("\2\2\2CD\5\b\5\2DE\7\n\2\2EG\3\2\2\2FC\3\2\2\2GJ\3\2\2") + buf.write("\2HF\3\2\2\2HI\3\2\2\2IK\3\2\2\2JH\3\2\2\2KW\5\22\n\2") + buf.write("LM\5\20\t\2MN\t\2\2\2NO\7\n\2\2OP\5\20\t\2PW\3\2\2\2Q") + buf.write("W\t\3\2\2RT\7\30\2\2SU\5\22\n\2TS\3\2\2\2TU\3\2\2\2UW") + buf.write("\3\2\2\2V.\3\2\2\2V8\3\2\2\2V9\3\2\2\2V=\3\2\2\2VH\3\2") + buf.write("\2\2VL\3\2\2\2VQ\3\2\2\2VR\3\2\2\2W\7\3\2\2\2X]\5\20\t") + buf.write("\2YZ\7\31\2\2Z\\\5\20\t\2[Y\3\2\2\2\\_\3\2\2\2][\3\2\2") + buf.write("\2]^\3\2\2\2^\t\3\2\2\2_]\3\2\2\2`a\7\32\2\2ab\5\20\t") + buf.write("\2bc\7\33\2\2ck\5\16\b\2de\7\34\2\2ef\5\20\t\2fg\7\33") + buf.write("\2\2gh\5\16\b\2hj\3\2\2\2id\3\2\2\2jm\3\2\2\2ki\3\2\2") + buf.write("\2kl\3\2\2\2lq\3\2\2\2mk\3\2\2\2no\7\35\2\2op\7\33\2\2") + buf.write("pr\5\16\b\2qn\3\2\2\2qr\3\2\2\2r\u00a1\3\2\2\2st\7\36") + buf.write("\2\2tu\5\20\t\2uv\7\33\2\2vw\5\16\b\2w\u00a1\3\2\2\2x") + buf.write("y\7\37\2\2yz\5\20\t\2z{\7\33\2\2{|\5\16\b\2|\u00a1\3\2") + buf.write("\2\2}~\7 \2\2~\177\5\22\n\2\177\u0080\7!\2\2\u0080\u0083") + buf.write("\5\22\n\2\u0081\u0082\7\"\2\2\u0082\u0084\5\22\n\2\u0083") + buf.write("\u0081\3\2\2\2\u0083\u0084\3\2\2\2\u0084\u0085\3\2\2\2") + buf.write("\u0085\u0086\7\33\2\2\u0086\u0087\5\16\b\2\u0087\u00a1") + buf.write("\3\2\2\2\u0088\u0089\7#\2\2\u0089\u008a\7I\2\2\u008a\u0090") + buf.write("\7$\2\2\u008b\u008c\5\f\7\2\u008c\u008d\7\31\2\2\u008d") + buf.write("\u008f\3\2\2\2\u008e\u008b\3\2\2\2\u008f\u0092\3\2\2\2") + buf.write("\u0090\u008e\3\2\2\2\u0090\u0091\3\2\2\2\u0091\u0094\3") + buf.write("\2\2\2\u0092\u0090\3\2\2\2\u0093\u0095\5\f\7\2\u0094\u0093") + buf.write("\3\2\2\2\u0094\u0095\3\2\2\2\u0095\u0096\3\2\2\2\u0096") + buf.write("\u0098\7%\2\2\u0097\u0099\5\36\20\2\u0098\u0097\3\2\2") + buf.write("\2\u0098\u0099\3\2\2\2\u0099\u009e\3\2\2\2\u009a\u009b") + buf.write("\7&\2\2\u009b\u009f\5\16\b\2\u009c\u009d\7\'\2\2\u009d") + buf.write("\u009f\7\3\2\2\u009e\u009a\3\2\2\2\u009e\u009c\3\2\2\2") + buf.write("\u009f\u00a1\3\2\2\2\u00a0`\3\2\2\2\u00a0s\3\2\2\2\u00a0") + buf.write("x\3\2\2\2\u00a0}\3\2\2\2\u00a0\u0088\3\2\2\2\u00a1\13") + buf.write("\3\2\2\2\u00a2\u00a3\5\36\20\2\u00a3\u00a6\7I\2\2\u00a4") + buf.write("\u00a5\7(\2\2\u00a5\u00a7\5\20\t\2\u00a6\u00a4\3\2\2\2") + buf.write("\u00a6\u00a7\3\2\2\2\u00a7\r\3\2\2\2\u00a8\u00aa\7)\2") + buf.write("\2\u00a9\u00ab\5\4\3\2\u00aa\u00a9\3\2\2\2\u00ab\u00ac") + buf.write("\3\2\2\2\u00ac\u00aa\3\2\2\2\u00ac\u00ad\3\2\2\2\u00ad") + buf.write("\u00ae\3\2\2\2\u00ae\u00af\7*\2\2\u00af\17\3\2\2\2\u00b0") + buf.write("\u00b1\b\t\1\2\u00b1\u00de\5\32\16\2\u00b2\u00b3\7$\2") + buf.write("\2\u00b3\u00b4\5\22\n\2\u00b4\u00b5\7%\2\2\u00b5\u00de") + buf.write("\3\2\2\2\u00b6\u00bc\7+\2\2\u00b7\u00b8\5\20\t\2\u00b8") + buf.write("\u00b9\7\31\2\2\u00b9\u00bb\3\2\2\2\u00ba\u00b7\3\2\2") + buf.write("\2\u00bb\u00be\3\2\2\2\u00bc\u00ba\3\2\2\2\u00bc\u00bd") + buf.write("\3\2\2\2\u00bd\u00c0\3\2\2\2\u00be\u00bc\3\2\2\2\u00bf") + buf.write("\u00c1\5\20\t\2\u00c0\u00bf\3\2\2\2\u00c0\u00c1\3\2\2") + buf.write("\2\u00c1\u00c2\3\2\2\2\u00c2\u00de\7,\2\2\u00c3\u00c4") + buf.write("\7+\2\2\u00c4\u00c6\5\20\t\2\u00c5\u00c7\5\26\f\2\u00c6") + buf.write("\u00c5\3\2\2\2\u00c7\u00c8\3\2\2\2\u00c8\u00c6\3\2\2\2") + buf.write("\u00c8\u00c9\3\2\2\2\u00c9\u00ca\3\2\2\2\u00ca\u00cb\7") + buf.write(",\2\2\u00cb\u00de\3\2\2\2\u00cc\u00cd\t\4\2\2\u00cd\u00de") + buf.write("\5\20\t\21\u00ce\u00cf\7\67\2\2\u00cf\u00de\5\20\t\7\u00d0") + buf.write("\u00d5\7;\2\2\u00d1\u00d2\7I\2\2\u00d2\u00d4\7\31\2\2") + buf.write("\u00d3\u00d1\3\2\2\2\u00d4\u00d7\3\2\2\2\u00d5\u00d3\3") + buf.write("\2\2\2\u00d5\u00d6\3\2\2\2\u00d6\u00d9\3\2\2\2\u00d7\u00d5") + buf.write("\3\2\2\2\u00d8\u00da\7I\2\2\u00d9\u00d8\3\2\2\2\u00d9") + buf.write("\u00da\3\2\2\2\u00da\u00db\3\2\2\2\u00db\u00dc\7<\2\2") + buf.write("\u00dc\u00de\5\20\t\3\u00dd\u00b0\3\2\2\2\u00dd\u00b2") + buf.write("\3\2\2\2\u00dd\u00b6\3\2\2\2\u00dd\u00c3\3\2\2\2\u00dd") + buf.write("\u00cc\3\2\2\2\u00dd\u00ce\3\2\2\2\u00dd\u00d0\3\2\2\2") + buf.write("\u00de\u0130\3\2\2\2\u00df\u00e0\f\22\2\2\u00e0\u00e1") + buf.write("\7\13\2\2\u00e1\u012f\5\20\t\22\u00e2\u00e3\f\20\2\2\u00e3") + buf.write("\u00e4\t\5\2\2\u00e4\u012f\5\20\t\21\u00e5\u00e6\f\17") + buf.write("\2\2\u00e6\u00e7\t\6\2\2\u00e7\u012f\5\20\t\20\u00e8\u00e9") + buf.write("\f\16\2\2\u00e9\u00ea\t\7\2\2\u00ea\u012f\5\20\t\17\u00eb") + buf.write("\u00ec\f\r\2\2\u00ec\u00ed\7\23\2\2\u00ed\u012f\5\20\t") + buf.write("\16\u00ee\u00ef\f\f\2\2\u00ef\u00f0\7\24\2\2\u00f0\u012f") + buf.write("\5\20\t\r\u00f1\u00f2\f\13\2\2\u00f2\u00f3\7\25\2\2\u00f3") + buf.write("\u012f\5\20\t\f\u00f4\u00f5\f\n\2\2\u00f5\u00f6\t\b\2") + buf.write("\2\u00f6\u012f\5\20\t\13\u00f7\u00f8\f\b\2\2\u00f8\u00f9") + buf.write("\t\t\2\2\u00f9\u012f\5\20\t\b\u00fa\u00fb\f\6\2\2\u00fb") + buf.write("\u00fc\78\2\2\u00fc\u012f\5\20\t\6\u00fd\u00fe\f\5\2\2") + buf.write("\u00fe\u00ff\79\2\2\u00ff\u012f\5\20\t\5\u0100\u0101\f") + buf.write("\4\2\2\u0101\u0102\7:\2\2\u0102\u0103\5\20\t\2\u0103\u0104") + buf.write("\7(\2\2\u0104\u0105\5\20\t\4\u0105\u012f\3\2\2\2\u0106") + buf.write("\u0107\f\26\2\2\u0107\u0108\7+\2\2\u0108\u0109\5\22\n") + buf.write("\2\u0109\u010a\7,\2\2\u010a\u012f\3\2\2\2\u010b\u010c") + buf.write("\f\25\2\2\u010c\u010e\7+\2\2\u010d\u010f\5\20\t\2\u010e") + buf.write("\u010d\3\2\2\2\u010e\u010f\3\2\2\2\u010f\u0110\3\2\2\2") + buf.write("\u0110\u0112\7(\2\2\u0111\u0113\5\20\t\2\u0112\u0111\3") + buf.write("\2\2\2\u0112\u0113\3\2\2\2\u0113\u0118\3\2\2\2\u0114\u0116") + buf.write("\7(\2\2\u0115\u0117\5\20\t\2\u0116\u0115\3\2\2\2\u0116") + buf.write("\u0117\3\2\2\2\u0117\u0119\3\2\2\2\u0118\u0114\3\2\2\2") + buf.write("\u0118\u0119\3\2\2\2\u0119\u011a\3\2\2\2\u011a\u012f\7") + buf.write(",\2\2\u011b\u011c\f\24\2\2\u011c\u011d\7-\2\2\u011d\u012f") + buf.write("\7I\2\2\u011e\u011f\f\23\2\2\u011f\u0125\7$\2\2\u0120") + buf.write("\u0121\5\30\r\2\u0121\u0122\7\31\2\2\u0122\u0124\3\2\2") + buf.write("\2\u0123\u0120\3\2\2\2\u0124\u0127\3\2\2\2\u0125\u0123") + buf.write("\3\2\2\2\u0125\u0126\3\2\2\2\u0126\u0129\3\2\2\2\u0127") + buf.write("\u0125\3\2\2\2\u0128\u012a\5\30\r\2\u0129\u0128\3\2\2") + buf.write("\2\u0129\u012a\3\2\2\2\u012a\u012b\3\2\2\2\u012b\u012f") + buf.write("\7%\2\2\u012c\u012d\f\t\2\2\u012d\u012f\7\60\2\2\u012e") + buf.write("\u00df\3\2\2\2\u012e\u00e2\3\2\2\2\u012e\u00e5\3\2\2\2") + buf.write("\u012e\u00e8\3\2\2\2\u012e\u00eb\3\2\2\2\u012e\u00ee\3") + buf.write("\2\2\2\u012e\u00f1\3\2\2\2\u012e\u00f4\3\2\2\2\u012e\u00f7") + buf.write("\3\2\2\2\u012e\u00fa\3\2\2\2\u012e\u00fd\3\2\2\2\u012e") + buf.write("\u0100\3\2\2\2\u012e\u0106\3\2\2\2\u012e\u010b\3\2\2\2") + buf.write("\u012e\u011b\3\2\2\2\u012e\u011e\3\2\2\2\u012e\u012c\3") + buf.write("\2\2\2\u012f\u0132\3\2\2\2\u0130\u012e\3\2\2\2\u0130\u0131") + buf.write("\3\2\2\2\u0131\21\3\2\2\2\u0132\u0130\3\2\2\2\u0133\u0134") + buf.write("\5\20\t\2\u0134\u0135\7\31\2\2\u0135\u0137\3\2\2\2\u0136") + buf.write("\u0133\3\2\2\2\u0137\u013a\3\2\2\2\u0138\u0136\3\2\2\2") + buf.write("\u0138\u0139\3\2\2\2\u0139\u013b\3\2\2\2\u013a\u0138\3") + buf.write("\2\2\2\u013b\u013c\5\20\t\2\u013c\23\3\2\2\2\u013d\u013e") + buf.write("\5\22\n\2\u013e\u013f\7\2\2\3\u013f\25\3\2\2\2\u0140\u0141") + buf.write("\7 \2\2\u0141\u0142\5\22\n\2\u0142\u0143\7!\2\2\u0143") + buf.write("\u0146\5\22\n\2\u0144\u0145\7\"\2\2\u0145\u0147\5\22\n") + buf.write("\2\u0146\u0144\3\2\2\2\u0146\u0147\3\2\2\2\u0147\u014b") + buf.write("\3\2\2\2\u0148\u0149\7\32\2\2\u0149\u014b\5\20\t\2\u014a") + buf.write("\u0140\3\2\2\2\u014a\u0148\3\2\2\2\u014b\27\3\2\2\2\u014c") + buf.write("\u014d\7I\2\2\u014d\u014f\7\n\2\2\u014e\u014c\3\2\2\2") + buf.write("\u014e\u014f\3\2\2\2\u014f\u0150\3\2\2\2\u0150\u0151\5") + buf.write("\20\t\2\u0151\31\3\2\2\2\u0152\u0159\7E\2\2\u0153\u0159") + buf.write("\7F\2\2\u0154\u0159\t\n\2\2\u0155\u0159\7G\2\2\u0156\u0159") + buf.write("\7H\2\2\u0157\u0159\7I\2\2\u0158\u0152\3\2\2\2\u0158\u0153") + buf.write("\3\2\2\2\u0158\u0154\3\2\2\2\u0158\u0155\3\2\2\2\u0158") + buf.write("\u0156\3\2\2\2\u0158\u0157\3\2\2\2\u0159\33\3\2\2\2\u015a") + buf.write("\u015b\7I\2\2\u015b\u015d\7\31\2\2\u015c\u015a\3\2\2\2") + buf.write("\u015d\u0160\3\2\2\2\u015e\u015c\3\2\2\2\u015e\u015f\3") + buf.write("\2\2\2\u015f\u0161\3\2\2\2\u0160\u015e\3\2\2\2\u0161\u0162") + buf.write("\7I\2\2\u0162\35\3\2\2\2\u0163\u0164\b\20\1\2\u0164\u0170") + buf.write("\t\13\2\2\u0165\u0166\7$\2\2\u0166\u0167\5\36\20\2\u0167") + buf.write("\u0168\7%\2\2\u0168\u0170\3\2\2\2\u0169\u016a\7+\2\2\u016a") + buf.write("\u016b\5\36\20\2\u016b\u016c\7,\2\2\u016c\u0170\3\2\2") + buf.write("\2\u016d\u016e\7<\2\2\u016e\u0170\5\36\20\3\u016f\u0163") + buf.write("\3\2\2\2\u016f\u0165\3\2\2\2\u016f\u0169\3\2\2\2\u016f") + buf.write("\u016d\3\2\2\2\u0170\u0179\3\2\2\2\u0171\u0172\f\5\2\2") + buf.write("\u0172\u0173\7\f\2\2\u0173\u0178\5\36\20\5\u0174\u0175") + buf.write("\f\4\2\2\u0175\u0176\7<\2\2\u0176\u0178\5\36\20\4\u0177") + buf.write("\u0171\3\2\2\2\u0177\u0174\3\2\2\2\u0178\u017b\3\2\2\2") + buf.write("\u0179\u0177\3\2\2\2\u0179\u017a\3\2\2\2\u017a\37\3\2") + buf.write("\2\2\u017b\u0179\3\2\2\2,#,\66;AHTV]kq\u0083\u0090\u0094") + buf.write("\u0098\u009e\u00a0\u00a6\u00ac\u00bc\u00c0\u00c8\u00d5") + buf.write("\u00d9\u00dd\u010e\u0112\u0116\u0118\u0125\u0129\u012e") + buf.write("\u0130\u0138\u0146\u014a\u014e\u0158\u015e\u016f\u0177") + buf.write("\u0179") return buf.getvalue() @@ -1500,6 +1509,29 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) + class ExprSliceContext(ExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext + super().__init__(parser) + self.e1 = None # ExprContext + self.e2 = None # ExprContext + self.e3 = None # ExprContext + self.copyFrom(ctx) + + def expr(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(PyxellParser.ExprContext) + else: + return self.getTypedRuleContext(PyxellParser.ExprContext,i) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExprSlice" ): + return visitor.visitExprSlice(self) + else: + return visitor.visitChildren(self) + + class ExprBinaryOpContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext @@ -1715,17 +1747,17 @@ def expr(self, _p:int=0): self._ctx.stop = self._input.LT(-1) - self.state = 286 + self.state = 302 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,28,self._ctx) + _alt = self._interp.adaptivePredict(self._input,32,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 284 + self.state = 300 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,27,self._ctx) + la_ = self._interp.adaptivePredict(self._input,31,self._ctx) if la_ == 1: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) @@ -1920,9 +1952,9 @@ def expr(self, _p:int=0): localctx = PyxellParser.ExprIndexContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 260 - if not self.precpred(self._ctx, 19): + if not self.precpred(self._ctx, 20): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 19)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 20)") self.state = 261 self.match(PyxellParser.T__40) self.state = 262 @@ -1932,67 +1964,114 @@ def expr(self, _p:int=0): pass elif la_ == 14: - localctx = PyxellParser.ExprAttrContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + localctx = PyxellParser.ExprSliceContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 265 + if not self.precpred(self._ctx, 19): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 19)") + self.state = 266 + self.match(PyxellParser.T__40) + self.state = 268 + self._errHandler.sync(self) + _la = self._input.LA(1) + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__52 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 267 + localctx.e1 = self.expr(0) + + + self.state = 270 + self.match(PyxellParser.T__37) + self.state = 272 + self._errHandler.sync(self) + _la = self._input.LA(1) + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__52 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 271 + localctx.e2 = self.expr(0) + + + self.state = 278 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==PyxellParser.T__37: + self.state = 274 + self.match(PyxellParser.T__37) + self.state = 276 + self._errHandler.sync(self) + _la = self._input.LA(1) + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__52 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 275 + localctx.e3 = self.expr(0) + + + + + self.state = 280 + self.match(PyxellParser.T__41) + pass + + elif la_ == 15: + localctx = PyxellParser.ExprAttrContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) + self.state = 281 if not self.precpred(self._ctx, 18): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 18)") - self.state = 266 + self.state = 282 self.match(PyxellParser.T__42) - self.state = 267 + self.state = 283 self.match(PyxellParser.ID) pass - elif la_ == 15: + elif la_ == 16: localctx = PyxellParser.ExprCallContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 268 + self.state = 284 if not self.precpred(self._ctx, 17): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 17)") - self.state = 269 + self.state = 285 self.match(PyxellParser.T__33) - self.state = 275 + self.state = 291 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,25,self._ctx) + _alt = self._interp.adaptivePredict(self._input,29,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 270 + self.state = 286 self.call_arg() - self.state = 271 + self.state = 287 self.match(PyxellParser.T__22) - self.state = 277 + self.state = 293 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,25,self._ctx) + _alt = self._interp.adaptivePredict(self._input,29,self._ctx) - self.state = 279 + self.state = 295 self._errHandler.sync(self) _la = self._input.LA(1) if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__52 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 278 + self.state = 294 self.call_arg() - self.state = 281 + self.state = 297 self.match(PyxellParser.T__34) pass - elif la_ == 16: + elif la_ == 17: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 282 + self.state = 298 if not self.precpred(self._ctx, 7): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") - self.state = 283 + self.state = 299 localctx.dots = self.match(PyxellParser.T__45) pass - self.state = 288 + self.state = 304 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,28,self._ctx) + _alt = self._interp.adaptivePredict(self._input,32,self._ctx) except RecognitionException as re: localctx.exception = re @@ -2047,20 +2126,20 @@ def tuple_expr(self): try: localctx = PyxellParser.ExprTupleContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 294 + self.state = 310 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,29,self._ctx) + _alt = self._interp.adaptivePredict(self._input,33,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 289 + self.state = 305 self.expr(0) - self.state = 290 + self.state = 306 self.match(PyxellParser.T__22) - self.state = 296 + self.state = 312 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,29,self._ctx) + _alt = self._interp.adaptivePredict(self._input,33,self._ctx) - self.state = 297 + self.state = 313 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -2114,9 +2193,9 @@ def interpolation_expr(self): try: localctx = PyxellParser.ExprInterpolationContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 299 + self.state = 315 self.tuple_expr() - self.state = 300 + self.state = 316 self.match(PyxellParser.EOF) except RecognitionException as re: localctx.exception = re @@ -2187,27 +2266,27 @@ def comprehension(self): self.enterRule(localctx, 20, self.RULE_comprehension) self._la = 0 # Token type try: - self.state = 312 + self.state = 328 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__29]: localctx = PyxellParser.ComprehensionGeneratorContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 302 + self.state = 318 self.match(PyxellParser.T__29) - self.state = 303 + self.state = 319 self.tuple_expr() - self.state = 304 + self.state = 320 self.match(PyxellParser.T__30) - self.state = 305 + self.state = 321 self.tuple_expr() - self.state = 308 + self.state = 324 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__31: - self.state = 306 + self.state = 322 self.match(PyxellParser.T__31) - self.state = 307 + self.state = 323 self.tuple_expr() @@ -2215,9 +2294,9 @@ def comprehension(self): elif token in [PyxellParser.T__23]: localctx = PyxellParser.ComprehensionFilterContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 310 + self.state = 326 self.match(PyxellParser.T__23) - self.state = 311 + self.state = 327 self.expr(0) pass else: @@ -2275,17 +2354,17 @@ def call_arg(self): try: localctx = PyxellParser.CallArgContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 316 + self.state = 332 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,32,self._ctx) + la_ = self._interp.adaptivePredict(self._input,36,self._ctx) if la_ == 1: - self.state = 314 + self.state = 330 self.match(PyxellParser.ID) - self.state = 315 + self.state = 331 self.match(PyxellParser.T__7) - self.state = 318 + self.state = 334 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -2413,25 +2492,25 @@ def atom(self): self.enterRule(localctx, 24, self.RULE_atom) self._la = 0 # Token type try: - self.state = 326 + self.state = 342 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: localctx = PyxellParser.AtomIntContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 320 + self.state = 336 self.match(PyxellParser.INT) pass elif token in [PyxellParser.FLOAT]: localctx = PyxellParser.AtomFloatContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 321 + self.state = 337 self.match(PyxellParser.FLOAT) pass elif token in [PyxellParser.T__58, PyxellParser.T__59]: localctx = PyxellParser.AtomBoolContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 322 + self.state = 338 _la = self._input.LA(1) if not(_la==PyxellParser.T__58 or _la==PyxellParser.T__59): self._errHandler.recoverInline(self) @@ -2442,19 +2521,19 @@ def atom(self): elif token in [PyxellParser.CHAR]: localctx = PyxellParser.AtomCharContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 323 + self.state = 339 self.match(PyxellParser.CHAR) pass elif token in [PyxellParser.STRING]: localctx = PyxellParser.AtomStringContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 324 + self.state = 340 self.match(PyxellParser.STRING) pass elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) self.enterOuterAlt(localctx, 6) - self.state = 325 + self.state = 341 self.match(PyxellParser.ID) pass else: @@ -2499,20 +2578,20 @@ def id_list(self): self.enterRule(localctx, 26, self.RULE_id_list) try: self.enterOuterAlt(localctx, 1) - self.state = 332 + self.state = 348 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,34,self._ctx) + _alt = self._interp.adaptivePredict(self._input,38,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 328 + self.state = 344 self.match(PyxellParser.ID) - self.state = 329 + self.state = 345 self.match(PyxellParser.T__22) - self.state = 334 + self.state = 350 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,34,self._ctx) + _alt = self._interp.adaptivePredict(self._input,38,self._ctx) - self.state = 335 + self.state = 351 self.match(PyxellParser.ID) except RecognitionException as re: localctx.exception = re @@ -2654,7 +2733,7 @@ def typ(self, _p:int=0): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 349 + self.state = 365 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__60, PyxellParser.T__61, PyxellParser.T__62, PyxellParser.T__63, PyxellParser.T__64, PyxellParser.T__65]: @@ -2662,7 +2741,7 @@ def typ(self, _p:int=0): self._ctx = localctx _prevctx = localctx - self.state = 338 + self.state = 354 _la = self._input.LA(1) if not(((((_la - 61)) & ~0x3f) == 0 and ((1 << (_la - 61)) & ((1 << (PyxellParser.T__60 - 61)) | (1 << (PyxellParser.T__61 - 61)) | (1 << (PyxellParser.T__62 - 61)) | (1 << (PyxellParser.T__63 - 61)) | (1 << (PyxellParser.T__64 - 61)) | (1 << (PyxellParser.T__65 - 61)))) != 0)): self._errHandler.recoverInline(self) @@ -2674,78 +2753,78 @@ def typ(self, _p:int=0): localctx = PyxellParser.TypeParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 339 + self.state = 355 self.match(PyxellParser.T__33) - self.state = 340 + self.state = 356 self.typ(0) - self.state = 341 + self.state = 357 self.match(PyxellParser.T__34) pass elif token in [PyxellParser.T__40]: localctx = PyxellParser.TypeArrayContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 343 + self.state = 359 self.match(PyxellParser.T__40) - self.state = 344 + self.state = 360 self.typ(0) - self.state = 345 + self.state = 361 self.match(PyxellParser.T__41) pass elif token in [PyxellParser.T__57]: localctx = PyxellParser.TypeFunc0Context(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 347 + self.state = 363 self.match(PyxellParser.T__57) - self.state = 348 + self.state = 364 self.typ(1) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 359 + self.state = 375 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,37,self._ctx) + _alt = self._interp.adaptivePredict(self._input,41,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 357 + self.state = 373 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,36,self._ctx) + la_ = self._interp.adaptivePredict(self._input,40,self._ctx) if la_ == 1: localctx = PyxellParser.TypeTupleContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 351 + self.state = 367 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 352 + self.state = 368 self.match(PyxellParser.T__9) - self.state = 353 + self.state = 369 self.typ(3) pass elif la_ == 2: localctx = PyxellParser.TypeFuncContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 354 + self.state = 370 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 355 + self.state = 371 self.match(PyxellParser.T__57) - self.state = 356 + self.state = 372 self.typ(2) pass - self.state = 361 + self.state = 377 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,37,self._ctx) + _alt = self._interp.adaptivePredict(self._input,41,self._ctx) except RecognitionException as re: localctx.exception = re @@ -2818,27 +2897,31 @@ def expr_sempred(self, localctx:ExprContext, predIndex:int): if predIndex == 12: - return self.precpred(self._ctx, 19) + return self.precpred(self._ctx, 20) if predIndex == 13: - return self.precpred(self._ctx, 18) + return self.precpred(self._ctx, 19) if predIndex == 14: - return self.precpred(self._ctx, 17) + return self.precpred(self._ctx, 18) if predIndex == 15: + return self.precpred(self._ctx, 17) + + + if predIndex == 16: return self.precpred(self._ctx, 7) def typ_sempred(self, localctx:TypContext, predIndex:int): - if predIndex == 16: + if predIndex == 17: return self.precpred(self._ctx, 3) - if predIndex == 17: + if predIndex == 18: return self.precpred(self._ctx, 2) diff --git a/src/antlr/PyxellVisitor.py b/src/antlr/PyxellVisitor.py index 71059fdb..13f8ec5d 100644 --- a/src/antlr/PyxellVisitor.py +++ b/src/antlr/PyxellVisitor.py @@ -154,6 +154,11 @@ def visitExprCond(self, ctx:PyxellParser.ExprCondContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#ExprSlice. + def visitExprSlice(self, ctx:PyxellParser.ExprSliceContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#ExprBinaryOp. def visitExprBinaryOp(self, ctx:PyxellParser.ExprBinaryOpContext): return self.visitChildren(ctx) diff --git a/src/ast.py b/src/ast.py index b99d8d26..ae8346f6 100644 --- a/src/ast.py +++ b/src/ast.py @@ -200,6 +200,13 @@ def visitExprIndex(self, ctx): 'exprs': [self.visit(ctx.expr()), self.visit(ctx.tuple_expr())], } + def visitExprSlice(self, ctx): + return { + **_node(ctx, 'ExprSlice'), + 'expr': self.visit(ctx.expr(0)), + 'slice': self.visit([ctx.e1, ctx.e2, ctx.e3]), + } + def visitExprAttr(self, ctx): return { **_node(ctx, 'ExprAttr'), diff --git a/src/compiler.py b/src/compiler.py index 7830f46c..d9b68bbd 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -722,14 +722,14 @@ def array(self, subtype, values, length=None): result = self.malloc(type) if length is None: - length = len(values) + length = vInt(len(values)) - memory = self.malloc(tPtr(subtype), vInt(length)) + memory = self.malloc(tPtr(subtype), length) for i, value in enumerate(values): self.builder.store(value, self.builder.gep(memory, [vInt(i)])) self.builder.store(memory, self.builder.gep(result, [vInt(0), vIndex(0)])) - self.builder.store(vInt(length), self.builder.gep(result, [vInt(0), vIndex(1)])) + self.builder.store(length, self.builder.gep(result, [vInt(0), vIndex(1)])) return result @@ -749,6 +749,9 @@ def convert_lambda(self, expr): ids = [] def convert_expr(expr): + if expr is None: + return + nonlocal ids node = expr['node'] @@ -757,6 +760,12 @@ def convert_expr(expr): **expr, 'exprs': lmap(convert_expr, expr['exprs']), } + if node == 'ExprSlice': + return { + **expr, + 'expr': convert_expr(expr['expr']), + 'slice': lmap(convert_expr, expr['slice']), + } if node == 'ExprArrayComprehension': return { **expr, @@ -880,8 +889,9 @@ def compileStmtAssg(self, node): self.assign(lvalue, expr, self.extract(value, i)) def compileStmtAssgExpr(self, node): - ptr = self.lvalue(node, node['exprs'][0]) - value = self.binaryop(node, node['op'], self.builder.load(ptr), self.compile(node['exprs'][1])) + exprs = node['exprs'] + ptr = self.lvalue(node, exprs[0]) + value = self.binaryop(node, node['op'], self.builder.load(ptr), self.compile(exprs[1])) self.builder.store(value, ptr) def compileStmtAppend(self, node): @@ -1030,7 +1040,7 @@ def prepare(iterable, step): conditions.append(cond) getters.append(getter) - _steps = lmap(self.compile, node['steps']) or [vInt(1)] + _steps = lmap(self.compile, node.get('steps', [])) or [vInt(1)] if len(_steps) == 1: _steps *= len(iterables) elif len(_steps) != len(iterables): @@ -1214,7 +1224,7 @@ def compileExprArrayComprehension(self, node): self.compile(stmt) type = self.compile(value).type - self.assign(node, array, self.array(type, [], length=4)) + self.assign(node, array, self.array(type, [], length=vInt(4))) self.assign(node, index, vInt(0)) inner_stmt['node'] = 'StmtAppend' @@ -1232,6 +1242,51 @@ def compileExprArrayComprehension(self, node): def compileExprIndex(self, node): return self.builder.load(self.index(node, *node['exprs'])) + def compileExprSlice(self, node): + slice = node['slice'] + + n = len(self.env) + array, length, start, end, step, index = [{ + 'node': 'AtomId', + 'id': f'slice_{name}{n}', # FIXME + } for name in ['array', 'length', 'start', 'end', 'step', 'index']] + + self.assign(node, array, self.compile(node['expr'])) + + with self.no_output(): + type = self.compile(array).type + + if not type.isCollection(): + self.throw(node, err.NotIndexable(type)) + + self.assign(node, length, self.compile(parse_expr('{t}.length'.format(t=array['id'])))) + + if slice[2] is None: + self.assign(node, step, vInt(1)) + else: + self.assign(node, step, self.cast(slice[2], self.compile(slice[2]), tInt)) + + if slice[0] is None: + self.assign(node, start, self.compile(parse_expr('{c} > 0 ? 0 : {l}'.format(c=step['id'], l=length['id'])))) + else: + self.assign(node, start, self.cast(slice[0], self.compile(slice[0]), tInt)) + self.assign(node, start, self.compile(parse_expr('{a} < 0 ? {a} + {l} : {a}'.format(a=start['id'], l=length['id'])))) + self.assign(node, start, self.compile(parse_expr('{a} < 0 ? 0 : {a} > {l} ? {l} : {a}'.format(a=start['id'], l=length['id'])))) + + if slice[1] is None: + self.assign(node, end, self.compile(parse_expr('{c} > 0 ? {l} : 0'.format(c=step['id'], l=length['id'])))) + else: + self.assign(node, end, self.cast(slice[1], self.compile(slice[1]), tInt)) + self.assign(node, end, self.compile(parse_expr('{b} < 0 ? {b} + {l} : {b}'.format(b=end['id'], l=length['id'])))) + self.assign(node, end, self.compile(parse_expr('{b} < 0 ? 0 : {b} > {l} ? {l} : {b}'.format(b=end['id'], l=length['id'])))) + + self.assign(node, start, self.compile(parse_expr('{c} < 0 ? {a} - 1 : {a}'.format(a=start['id'], c=step['id'])))) + self.assign(node, end, self.compile(parse_expr('{c} < 0 ? {b} - 1 : {b}'.format(b=end['id'], c=step['id'])))) + + result = self.compile(parse_expr('[{t}[{i}] for {i} in {a}...{b} step {c}]'.format(t=array['id'], a=start['id'], b=end['id'], c=step['id'], i=index['id']))) + + return self.builder.call(self.get(node, 'CharArray_asString'), [result]) if type == tString else result + def compileExprAttr(self, node): obj, value = self.attribute(node, node['expr'], node['attr']) return value diff --git a/test/bad/arrays/slice04.err b/test/bad/arrays/slice04.err index 0cc6e1f8..63261bf3 100644 --- a/test/bad/arrays/slice04.err +++ b/test/bad/arrays/slice04.err @@ -1 +1 @@ -Invalid slice syntax. \ No newline at end of file +Syntax error. \ No newline at end of file diff --git a/test/bad/arrays/slice05.err b/test/bad/arrays/slice05.err new file mode 100644 index 00000000..607bbcd4 --- /dev/null +++ b/test/bad/arrays/slice05.err @@ -0,0 +1 @@ +Type `Char` is not indexable. \ No newline at end of file diff --git a/test/bad/arrays/slice05.px b/test/bad/arrays/slice05.px new file mode 100644 index 00000000..35bbea48 --- /dev/null +++ b/test/bad/arrays/slice05.px @@ -0,0 +1,2 @@ + +'a'[:] diff --git a/test/good/functions/lambda10.out b/test/good/functions/lambda10.out index 0051876b..f3da9165 100644 --- a/test/good/functions/lambda10.out +++ b/test/good/functions/lambda10.out @@ -1,3 +1,3 @@ -d,e -a,b,c -e,b +[d, e] +[a, b, c] +[e, b] diff --git a/test/good/functions/lambda10.px b/test/good/functions/lambda10.px index fa6eea95..cf28202f 100644 --- a/test/good/functions/lambda10.px +++ b/test/good/functions/lambda10.px @@ -3,6 +3,6 @@ func f(Int n, Int->[Char] g) [Char] def return g(n) a = [c for c in "abcde"] -print f(-2, a[_:]).join(",") -print f(3, a[:_]).join(",") -print f(-3, a[::_]).join(",") +print f(-2, a[_:]) +print f(3, a[:_]) +print f(-3, a[::_]) From 136a9b864c28a2272ec420f68ccaee0a1f6b2657 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sun, 10 Nov 2019 11:16:32 +0100 Subject: [PATCH 059/100] Fix variable scope in comprehensions --- src/compiler.py | 83 ++++++++++++++-------------- test/bad/arrays/comprehension08.err | 1 + test/bad/arrays/comprehension08.px | 3 + test/good/arrays/comprehension11.out | 2 + test/good/arrays/comprehension11.px | 5 ++ 5 files changed, 54 insertions(+), 40 deletions(-) create mode 100644 test/bad/arrays/comprehension08.err create mode 100644 test/bad/arrays/comprehension08.px create mode 100644 test/good/arrays/comprehension11.out create mode 100644 test/good/arrays/comprehension11.px diff --git a/src/compiler.py b/src/compiler.py index d9b68bbd..7d989097 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -266,7 +266,7 @@ def declare(self, node, type, id, redeclare=False, initialize=False): return ptr - def lvalue(self, node, expr, declare=None, initialize=False): + def lvalue(self, node, expr, declare=None, override=False, initialize=False): if expr['node'] == 'AtomId': id = expr['id'] @@ -274,6 +274,8 @@ def lvalue(self, node, expr, declare=None, initialize=False): if declare is None: self.throw(node, err.UndeclaredIdentifier(id)) self.declare(node, declare, id) + elif override: + self.declare(node, declare, id, redeclare=True) if initialize: self.initialized.add(id) @@ -286,7 +288,7 @@ def lvalue(self, node, expr, declare=None, initialize=False): self.throw(node, err.NotLvalue()) def assign(self, node, expr, value): - ptr = self.lvalue(node, expr, declare=value.type, initialize=True) + ptr = self.lvalue(node, expr, declare=value.type, override=expr.get('override', False), initialize=True) value = self.cast(node, value, ptr.type.pointee) self.builder.store(value, ptr) @@ -1186,10 +1188,9 @@ def compileExprArray(self, node): def compileExprArrayComprehension(self, node): expr = node['expr'] - n = len(self.env) value, array, index = [{ 'node': 'AtomId', - 'id': f'$cpr_{name}{n}', + 'id': f'__cpr_{name}{len(self.env)}', } for name in ['value', 'array', 'index']] stmt = inner_stmt = { @@ -1206,6 +1207,7 @@ def compileExprArrayComprehension(self, node): stmt = { **cpr, 'node': 'StmtFor', + 'vars': [{**var, 'override': True} for var in cpr['vars']], 'block': stmt, } elif cpr['node'] == 'ComprehensionFilter': @@ -1224,18 +1226,19 @@ def compileExprArrayComprehension(self, node): self.compile(stmt) type = self.compile(value).type - self.assign(node, array, self.array(type, [], length=vInt(4))) - self.assign(node, index, vInt(0)) + with self.local(): + self.assign(node, array, self.array(type, [], length=vInt(4))) + self.assign(node, index, vInt(0)) - inner_stmt['node'] = 'StmtAppend' - inner_stmt['array'] = array - inner_stmt['index'] = index + inner_stmt['node'] = 'StmtAppend' + inner_stmt['array'] = array + inner_stmt['index'] = index - self.compile(stmt) + self.compile(stmt) - result = self.compile(array) - length = self.compile(index) - self.builder.store(length, self.builder.gep(result, [vInt(0), vIndex(1)])) + result = self.compile(array) + length = self.compile(index) + self.builder.store(length, self.builder.gep(result, [vInt(0), vIndex(1)])) return result @@ -1245,45 +1248,45 @@ def compileExprIndex(self, node): def compileExprSlice(self, node): slice = node['slice'] - n = len(self.env) array, length, start, end, step, index = [{ 'node': 'AtomId', - 'id': f'slice_{name}{n}', # FIXME + 'id': f'__slice_{name}{len(self.env)}', } for name in ['array', 'length', 'start', 'end', 'step', 'index']] - self.assign(node, array, self.compile(node['expr'])) + with self.local(): + self.assign(node, array, self.compile(node['expr'])) - with self.no_output(): - type = self.compile(array).type + with self.no_output(): + type = self.compile(array).type - if not type.isCollection(): - self.throw(node, err.NotIndexable(type)) + if not type.isCollection(): + self.throw(node, err.NotIndexable(type)) - self.assign(node, length, self.compile(parse_expr('{t}.length'.format(t=array['id'])))) + self.assign(node, length, self.compile(parse_expr('{t}.length'.format(t=array['id'])))) - if slice[2] is None: - self.assign(node, step, vInt(1)) - else: - self.assign(node, step, self.cast(slice[2], self.compile(slice[2]), tInt)) + if slice[2] is None: + self.assign(node, step, vInt(1)) + else: + self.assign(node, step, self.cast(slice[2], self.compile(slice[2]), tInt)) - if slice[0] is None: - self.assign(node, start, self.compile(parse_expr('{c} > 0 ? 0 : {l}'.format(c=step['id'], l=length['id'])))) - else: - self.assign(node, start, self.cast(slice[0], self.compile(slice[0]), tInt)) - self.assign(node, start, self.compile(parse_expr('{a} < 0 ? {a} + {l} : {a}'.format(a=start['id'], l=length['id'])))) - self.assign(node, start, self.compile(parse_expr('{a} < 0 ? 0 : {a} > {l} ? {l} : {a}'.format(a=start['id'], l=length['id'])))) + if slice[0] is None: + self.assign(node, start, self.compile(parse_expr('{c} > 0 ? 0 : {l}'.format(c=step['id'], l=length['id'])))) + else: + self.assign(node, start, self.cast(slice[0], self.compile(slice[0]), tInt)) + self.assign(node, start, self.compile(parse_expr('{a} < 0 ? {a} + {l} : {a}'.format(a=start['id'], l=length['id'])))) + self.assign(node, start, self.compile(parse_expr('{a} < 0 ? 0 : {a} > {l} ? {l} : {a}'.format(a=start['id'], l=length['id'])))) - if slice[1] is None: - self.assign(node, end, self.compile(parse_expr('{c} > 0 ? {l} : 0'.format(c=step['id'], l=length['id'])))) - else: - self.assign(node, end, self.cast(slice[1], self.compile(slice[1]), tInt)) - self.assign(node, end, self.compile(parse_expr('{b} < 0 ? {b} + {l} : {b}'.format(b=end['id'], l=length['id'])))) - self.assign(node, end, self.compile(parse_expr('{b} < 0 ? 0 : {b} > {l} ? {l} : {b}'.format(b=end['id'], l=length['id'])))) + if slice[1] is None: + self.assign(node, end, self.compile(parse_expr('{c} > 0 ? {l} : 0'.format(c=step['id'], l=length['id'])))) + else: + self.assign(node, end, self.cast(slice[1], self.compile(slice[1]), tInt)) + self.assign(node, end, self.compile(parse_expr('{b} < 0 ? {b} + {l} : {b}'.format(b=end['id'], l=length['id'])))) + self.assign(node, end, self.compile(parse_expr('{b} < 0 ? 0 : {b} > {l} ? {l} : {b}'.format(b=end['id'], l=length['id'])))) - self.assign(node, start, self.compile(parse_expr('{c} < 0 ? {a} - 1 : {a}'.format(a=start['id'], c=step['id'])))) - self.assign(node, end, self.compile(parse_expr('{c} < 0 ? {b} - 1 : {b}'.format(b=end['id'], c=step['id'])))) + self.assign(node, start, self.compile(parse_expr('{c} < 0 ? {a} - 1 : {a}'.format(a=start['id'], c=step['id'])))) + self.assign(node, end, self.compile(parse_expr('{c} < 0 ? {b} - 1 : {b}'.format(b=end['id'], c=step['id'])))) - result = self.compile(parse_expr('[{t}[{i}] for {i} in {a}...{b} step {c}]'.format(t=array['id'], a=start['id'], b=end['id'], c=step['id'], i=index['id']))) + result = self.compile(parse_expr('[{t}[{i}] for {i} in {a}...{b} step {c}]'.format(t=array['id'], a=start['id'], b=end['id'], c=step['id'], i=index['id']))) return self.builder.call(self.get(node, 'CharArray_asString'), [result]) if type == tString else result diff --git a/test/bad/arrays/comprehension08.err b/test/bad/arrays/comprehension08.err new file mode 100644 index 00000000..d94292c6 --- /dev/null +++ b/test/bad/arrays/comprehension08.err @@ -0,0 +1 @@ +Undeclared identifier `i`. \ No newline at end of file diff --git a/test/bad/arrays/comprehension08.px b/test/bad/arrays/comprehension08.px new file mode 100644 index 00000000..9179ad26 --- /dev/null +++ b/test/bad/arrays/comprehension08.px @@ -0,0 +1,3 @@ + +[i for i in 0...10] +print i diff --git a/test/good/arrays/comprehension11.out b/test/good/arrays/comprehension11.out new file mode 100644 index 00000000..89b967c6 --- /dev/null +++ b/test/good/arrays/comprehension11.out @@ -0,0 +1,2 @@ +[1a, 2b] +0 false diff --git a/test/good/arrays/comprehension11.px b/test/good/arrays/comprehension11.px new file mode 100644 index 00000000..29285aa4 --- /dev/null +++ b/test/good/arrays/comprehension11.px @@ -0,0 +1,5 @@ + +i = 0 +c = false +print ["{i}{c}" for i in ["I"] for i, c in 1..2, 'a'..'b'] +print i, c From 4506f49da6c04dadc565d35e00f1310c12e2918d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Mon, 11 Nov 2019 18:26:45 +0100 Subject: [PATCH 060/100] Nullable types --- src/Pyxell.g4 | 3 + src/antlr/Pyxell.interp | 6 +- src/antlr/Pyxell.tokens | 66 ++-- src/antlr/PyxellLexer.interp | 8 +- src/antlr/PyxellLexer.py | 430 +++++++++++---------- src/antlr/PyxellLexer.tokens | 66 ++-- src/antlr/PyxellParser.py | 623 +++++++++++++++++------------- src/antlr/PyxellVisitor.py | 10 + src/ast.py | 8 + src/compiler.py | 63 ++- src/errors.py | 1 + src/types.py | 36 +- test/bad/nullables/nullable02.err | 2 +- test/bad/nullables/nullable04.err | 2 +- test/good/nullables/nullable05.px | 1 + 15 files changed, 747 insertions(+), 578 deletions(-) diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index 75716505..3d489e64 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -49,6 +49,7 @@ expr | expr '[' e1=expr? (':' e2=expr? (':' e3=expr?)?) ']' # ExprSlice | expr '.' ID # ExprAttr | expr '(' (call_arg ',')* call_arg? ')' # ExprCall + | expr op='!' # ExprUnaryOp | expr op='^' expr # ExprBinaryOp | op=('+' | '-' | '~') expr # ExprUnaryOp | expr op=('*' | '/' | '%') expr # ExprBinaryOp @@ -90,6 +91,7 @@ atom | ('true' | 'false') # AtomBool | CHAR # AtomChar | STRING # AtomString + | 'null' # AtomNull | ID # AtomId ; @@ -101,6 +103,7 @@ typ : ('Void' | 'Int' | 'Float' | 'Bool' | 'Char' | 'String') # TypePrimitive | '(' typ ')' # TypeParentheses | '[' typ ']' # TypeArray + | typ '?' # TypeNullable | typ '*' typ # TypeTuple | typ '->' typ # TypeFunc | '->' typ # TypeFunc0 diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index c9234860..4b58ba6d 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -43,6 +43,7 @@ null '[' ']' '.' +'!' '~' '..' '...' @@ -60,6 +61,7 @@ null '->' 'true' 'false' +'null' 'Void' 'Int' 'Float' @@ -143,6 +145,8 @@ null null null null +null +null INT FLOAT CHAR @@ -171,4 +175,4 @@ typ atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 76, 381, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 3, 2, 7, 2, 34, 10, 2, 12, 2, 14, 2, 37, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 45, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 55, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 60, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 66, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 71, 10, 4, 12, 4, 14, 4, 74, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 85, 10, 4, 5, 4, 87, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 92, 10, 5, 12, 5, 14, 5, 95, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 106, 10, 6, 12, 6, 14, 6, 109, 11, 6, 3, 6, 3, 6, 3, 6, 5, 6, 114, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 132, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 143, 10, 6, 12, 6, 14, 6, 146, 11, 6, 3, 6, 5, 6, 149, 10, 6, 3, 6, 3, 6, 5, 6, 153, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 159, 10, 6, 5, 6, 161, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 167, 10, 7, 3, 8, 3, 8, 6, 8, 171, 10, 8, 13, 8, 14, 8, 172, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 187, 10, 9, 12, 9, 14, 9, 190, 11, 9, 3, 9, 5, 9, 193, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 6, 9, 199, 10, 9, 13, 9, 14, 9, 200, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 212, 10, 9, 12, 9, 14, 9, 215, 11, 9, 3, 9, 5, 9, 218, 10, 9, 3, 9, 3, 9, 5, 9, 222, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 271, 10, 9, 3, 9, 3, 9, 5, 9, 275, 10, 9, 3, 9, 3, 9, 5, 9, 279, 10, 9, 5, 9, 281, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 292, 10, 9, 12, 9, 14, 9, 295, 11, 9, 3, 9, 5, 9, 298, 10, 9, 3, 9, 3, 9, 3, 9, 7, 9, 303, 10, 9, 12, 9, 14, 9, 306, 11, 9, 3, 10, 3, 10, 3, 10, 7, 10, 311, 10, 10, 12, 10, 14, 10, 314, 11, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 327, 10, 12, 3, 12, 3, 12, 5, 12, 331, 10, 12, 3, 13, 3, 13, 5, 13, 335, 10, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 345, 10, 14, 3, 15, 3, 15, 7, 15, 349, 10, 15, 12, 15, 14, 15, 352, 11, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 368, 10, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 7, 16, 376, 10, 16, 12, 16, 14, 16, 379, 11, 16, 3, 16, 2, 4, 16, 30, 17, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 2, 12, 3, 2, 11, 21, 3, 2, 22, 23, 4, 2, 15, 16, 46, 46, 3, 2, 12, 14, 3, 2, 15, 16, 3, 2, 17, 18, 3, 2, 47, 48, 3, 2, 49, 54, 3, 2, 61, 62, 3, 2, 63, 68, 2, 444, 2, 35, 3, 2, 2, 2, 4, 44, 3, 2, 2, 2, 6, 86, 3, 2, 2, 2, 8, 88, 3, 2, 2, 2, 10, 160, 3, 2, 2, 2, 12, 162, 3, 2, 2, 2, 14, 168, 3, 2, 2, 2, 16, 221, 3, 2, 2, 2, 18, 312, 3, 2, 2, 2, 20, 317, 3, 2, 2, 2, 22, 330, 3, 2, 2, 2, 24, 334, 3, 2, 2, 2, 26, 344, 3, 2, 2, 2, 28, 350, 3, 2, 2, 2, 30, 367, 3, 2, 2, 2, 32, 34, 5, 4, 3, 2, 33, 32, 3, 2, 2, 2, 34, 37, 3, 2, 2, 2, 35, 33, 3, 2, 2, 2, 35, 36, 3, 2, 2, 2, 36, 38, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 38, 39, 7, 2, 2, 3, 39, 3, 3, 2, 2, 2, 40, 41, 5, 6, 4, 2, 41, 42, 7, 3, 2, 2, 42, 45, 3, 2, 2, 2, 43, 45, 5, 10, 6, 2, 44, 40, 3, 2, 2, 2, 44, 43, 3, 2, 2, 2, 45, 5, 3, 2, 2, 2, 46, 47, 7, 4, 2, 2, 47, 54, 7, 73, 2, 2, 48, 49, 7, 5, 2, 2, 49, 55, 5, 28, 15, 2, 50, 51, 7, 6, 2, 2, 51, 55, 5, 28, 15, 2, 52, 53, 7, 7, 2, 2, 53, 55, 7, 73, 2, 2, 54, 48, 3, 2, 2, 2, 54, 50, 3, 2, 2, 2, 54, 52, 3, 2, 2, 2, 54, 55, 3, 2, 2, 2, 55, 87, 3, 2, 2, 2, 56, 87, 7, 8, 2, 2, 57, 59, 7, 9, 2, 2, 58, 60, 5, 18, 10, 2, 59, 58, 3, 2, 2, 2, 59, 60, 3, 2, 2, 2, 60, 87, 3, 2, 2, 2, 61, 62, 5, 30, 16, 2, 62, 65, 7, 73, 2, 2, 63, 64, 7, 10, 2, 2, 64, 66, 5, 18, 10, 2, 65, 63, 3, 2, 2, 2, 65, 66, 3, 2, 2, 2, 66, 87, 3, 2, 2, 2, 67, 68, 5, 8, 5, 2, 68, 69, 7, 10, 2, 2, 69, 71, 3, 2, 2, 2, 70, 67, 3, 2, 2, 2, 71, 74, 3, 2, 2, 2, 72, 70, 3, 2, 2, 2, 72, 73, 3, 2, 2, 2, 73, 75, 3, 2, 2, 2, 74, 72, 3, 2, 2, 2, 75, 87, 5, 18, 10, 2, 76, 77, 5, 16, 9, 2, 77, 78, 9, 2, 2, 2, 78, 79, 7, 10, 2, 2, 79, 80, 5, 16, 9, 2, 80, 87, 3, 2, 2, 2, 81, 87, 9, 3, 2, 2, 82, 84, 7, 24, 2, 2, 83, 85, 5, 18, 10, 2, 84, 83, 3, 2, 2, 2, 84, 85, 3, 2, 2, 2, 85, 87, 3, 2, 2, 2, 86, 46, 3, 2, 2, 2, 86, 56, 3, 2, 2, 2, 86, 57, 3, 2, 2, 2, 86, 61, 3, 2, 2, 2, 86, 72, 3, 2, 2, 2, 86, 76, 3, 2, 2, 2, 86, 81, 3, 2, 2, 2, 86, 82, 3, 2, 2, 2, 87, 7, 3, 2, 2, 2, 88, 93, 5, 16, 9, 2, 89, 90, 7, 25, 2, 2, 90, 92, 5, 16, 9, 2, 91, 89, 3, 2, 2, 2, 92, 95, 3, 2, 2, 2, 93, 91, 3, 2, 2, 2, 93, 94, 3, 2, 2, 2, 94, 9, 3, 2, 2, 2, 95, 93, 3, 2, 2, 2, 96, 97, 7, 26, 2, 2, 97, 98, 5, 16, 9, 2, 98, 99, 7, 27, 2, 2, 99, 107, 5, 14, 8, 2, 100, 101, 7, 28, 2, 2, 101, 102, 5, 16, 9, 2, 102, 103, 7, 27, 2, 2, 103, 104, 5, 14, 8, 2, 104, 106, 3, 2, 2, 2, 105, 100, 3, 2, 2, 2, 106, 109, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 107, 108, 3, 2, 2, 2, 108, 113, 3, 2, 2, 2, 109, 107, 3, 2, 2, 2, 110, 111, 7, 29, 2, 2, 111, 112, 7, 27, 2, 2, 112, 114, 5, 14, 8, 2, 113, 110, 3, 2, 2, 2, 113, 114, 3, 2, 2, 2, 114, 161, 3, 2, 2, 2, 115, 116, 7, 30, 2, 2, 116, 117, 5, 16, 9, 2, 117, 118, 7, 27, 2, 2, 118, 119, 5, 14, 8, 2, 119, 161, 3, 2, 2, 2, 120, 121, 7, 31, 2, 2, 121, 122, 5, 16, 9, 2, 122, 123, 7, 27, 2, 2, 123, 124, 5, 14, 8, 2, 124, 161, 3, 2, 2, 2, 125, 126, 7, 32, 2, 2, 126, 127, 5, 18, 10, 2, 127, 128, 7, 33, 2, 2, 128, 131, 5, 18, 10, 2, 129, 130, 7, 34, 2, 2, 130, 132, 5, 18, 10, 2, 131, 129, 3, 2, 2, 2, 131, 132, 3, 2, 2, 2, 132, 133, 3, 2, 2, 2, 133, 134, 7, 27, 2, 2, 134, 135, 5, 14, 8, 2, 135, 161, 3, 2, 2, 2, 136, 137, 7, 35, 2, 2, 137, 138, 7, 73, 2, 2, 138, 144, 7, 36, 2, 2, 139, 140, 5, 12, 7, 2, 140, 141, 7, 25, 2, 2, 141, 143, 3, 2, 2, 2, 142, 139, 3, 2, 2, 2, 143, 146, 3, 2, 2, 2, 144, 142, 3, 2, 2, 2, 144, 145, 3, 2, 2, 2, 145, 148, 3, 2, 2, 2, 146, 144, 3, 2, 2, 2, 147, 149, 5, 12, 7, 2, 148, 147, 3, 2, 2, 2, 148, 149, 3, 2, 2, 2, 149, 150, 3, 2, 2, 2, 150, 152, 7, 37, 2, 2, 151, 153, 5, 30, 16, 2, 152, 151, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 158, 3, 2, 2, 2, 154, 155, 7, 38, 2, 2, 155, 159, 5, 14, 8, 2, 156, 157, 7, 39, 2, 2, 157, 159, 7, 3, 2, 2, 158, 154, 3, 2, 2, 2, 158, 156, 3, 2, 2, 2, 159, 161, 3, 2, 2, 2, 160, 96, 3, 2, 2, 2, 160, 115, 3, 2, 2, 2, 160, 120, 3, 2, 2, 2, 160, 125, 3, 2, 2, 2, 160, 136, 3, 2, 2, 2, 161, 11, 3, 2, 2, 2, 162, 163, 5, 30, 16, 2, 163, 166, 7, 73, 2, 2, 164, 165, 7, 40, 2, 2, 165, 167, 5, 16, 9, 2, 166, 164, 3, 2, 2, 2, 166, 167, 3, 2, 2, 2, 167, 13, 3, 2, 2, 2, 168, 170, 7, 41, 2, 2, 169, 171, 5, 4, 3, 2, 170, 169, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 170, 3, 2, 2, 2, 172, 173, 3, 2, 2, 2, 173, 174, 3, 2, 2, 2, 174, 175, 7, 42, 2, 2, 175, 15, 3, 2, 2, 2, 176, 177, 8, 9, 1, 2, 177, 222, 5, 26, 14, 2, 178, 179, 7, 36, 2, 2, 179, 180, 5, 18, 10, 2, 180, 181, 7, 37, 2, 2, 181, 222, 3, 2, 2, 2, 182, 188, 7, 43, 2, 2, 183, 184, 5, 16, 9, 2, 184, 185, 7, 25, 2, 2, 185, 187, 3, 2, 2, 2, 186, 183, 3, 2, 2, 2, 187, 190, 3, 2, 2, 2, 188, 186, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 192, 3, 2, 2, 2, 190, 188, 3, 2, 2, 2, 191, 193, 5, 16, 9, 2, 192, 191, 3, 2, 2, 2, 192, 193, 3, 2, 2, 2, 193, 194, 3, 2, 2, 2, 194, 222, 7, 44, 2, 2, 195, 196, 7, 43, 2, 2, 196, 198, 5, 16, 9, 2, 197, 199, 5, 22, 12, 2, 198, 197, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 198, 3, 2, 2, 2, 200, 201, 3, 2, 2, 2, 201, 202, 3, 2, 2, 2, 202, 203, 7, 44, 2, 2, 203, 222, 3, 2, 2, 2, 204, 205, 9, 4, 2, 2, 205, 222, 5, 16, 9, 17, 206, 207, 7, 55, 2, 2, 207, 222, 5, 16, 9, 7, 208, 213, 7, 59, 2, 2, 209, 210, 7, 73, 2, 2, 210, 212, 7, 25, 2, 2, 211, 209, 3, 2, 2, 2, 212, 215, 3, 2, 2, 2, 213, 211, 3, 2, 2, 2, 213, 214, 3, 2, 2, 2, 214, 217, 3, 2, 2, 2, 215, 213, 3, 2, 2, 2, 216, 218, 7, 73, 2, 2, 217, 216, 3, 2, 2, 2, 217, 218, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 220, 7, 60, 2, 2, 220, 222, 5, 16, 9, 3, 221, 176, 3, 2, 2, 2, 221, 178, 3, 2, 2, 2, 221, 182, 3, 2, 2, 2, 221, 195, 3, 2, 2, 2, 221, 204, 3, 2, 2, 2, 221, 206, 3, 2, 2, 2, 221, 208, 3, 2, 2, 2, 222, 304, 3, 2, 2, 2, 223, 224, 12, 18, 2, 2, 224, 225, 7, 11, 2, 2, 225, 303, 5, 16, 9, 18, 226, 227, 12, 16, 2, 2, 227, 228, 9, 5, 2, 2, 228, 303, 5, 16, 9, 17, 229, 230, 12, 15, 2, 2, 230, 231, 9, 6, 2, 2, 231, 303, 5, 16, 9, 16, 232, 233, 12, 14, 2, 2, 233, 234, 9, 7, 2, 2, 234, 303, 5, 16, 9, 15, 235, 236, 12, 13, 2, 2, 236, 237, 7, 19, 2, 2, 237, 303, 5, 16, 9, 14, 238, 239, 12, 12, 2, 2, 239, 240, 7, 20, 2, 2, 240, 303, 5, 16, 9, 13, 241, 242, 12, 11, 2, 2, 242, 243, 7, 21, 2, 2, 243, 303, 5, 16, 9, 12, 244, 245, 12, 10, 2, 2, 245, 246, 9, 8, 2, 2, 246, 303, 5, 16, 9, 11, 247, 248, 12, 8, 2, 2, 248, 249, 9, 9, 2, 2, 249, 303, 5, 16, 9, 8, 250, 251, 12, 6, 2, 2, 251, 252, 7, 56, 2, 2, 252, 303, 5, 16, 9, 6, 253, 254, 12, 5, 2, 2, 254, 255, 7, 57, 2, 2, 255, 303, 5, 16, 9, 5, 256, 257, 12, 4, 2, 2, 257, 258, 7, 58, 2, 2, 258, 259, 5, 16, 9, 2, 259, 260, 7, 40, 2, 2, 260, 261, 5, 16, 9, 4, 261, 303, 3, 2, 2, 2, 262, 263, 12, 22, 2, 2, 263, 264, 7, 43, 2, 2, 264, 265, 5, 18, 10, 2, 265, 266, 7, 44, 2, 2, 266, 303, 3, 2, 2, 2, 267, 268, 12, 21, 2, 2, 268, 270, 7, 43, 2, 2, 269, 271, 5, 16, 9, 2, 270, 269, 3, 2, 2, 2, 270, 271, 3, 2, 2, 2, 271, 272, 3, 2, 2, 2, 272, 274, 7, 40, 2, 2, 273, 275, 5, 16, 9, 2, 274, 273, 3, 2, 2, 2, 274, 275, 3, 2, 2, 2, 275, 280, 3, 2, 2, 2, 276, 278, 7, 40, 2, 2, 277, 279, 5, 16, 9, 2, 278, 277, 3, 2, 2, 2, 278, 279, 3, 2, 2, 2, 279, 281, 3, 2, 2, 2, 280, 276, 3, 2, 2, 2, 280, 281, 3, 2, 2, 2, 281, 282, 3, 2, 2, 2, 282, 303, 7, 44, 2, 2, 283, 284, 12, 20, 2, 2, 284, 285, 7, 45, 2, 2, 285, 303, 7, 73, 2, 2, 286, 287, 12, 19, 2, 2, 287, 293, 7, 36, 2, 2, 288, 289, 5, 24, 13, 2, 289, 290, 7, 25, 2, 2, 290, 292, 3, 2, 2, 2, 291, 288, 3, 2, 2, 2, 292, 295, 3, 2, 2, 2, 293, 291, 3, 2, 2, 2, 293, 294, 3, 2, 2, 2, 294, 297, 3, 2, 2, 2, 295, 293, 3, 2, 2, 2, 296, 298, 5, 24, 13, 2, 297, 296, 3, 2, 2, 2, 297, 298, 3, 2, 2, 2, 298, 299, 3, 2, 2, 2, 299, 303, 7, 37, 2, 2, 300, 301, 12, 9, 2, 2, 301, 303, 7, 48, 2, 2, 302, 223, 3, 2, 2, 2, 302, 226, 3, 2, 2, 2, 302, 229, 3, 2, 2, 2, 302, 232, 3, 2, 2, 2, 302, 235, 3, 2, 2, 2, 302, 238, 3, 2, 2, 2, 302, 241, 3, 2, 2, 2, 302, 244, 3, 2, 2, 2, 302, 247, 3, 2, 2, 2, 302, 250, 3, 2, 2, 2, 302, 253, 3, 2, 2, 2, 302, 256, 3, 2, 2, 2, 302, 262, 3, 2, 2, 2, 302, 267, 3, 2, 2, 2, 302, 283, 3, 2, 2, 2, 302, 286, 3, 2, 2, 2, 302, 300, 3, 2, 2, 2, 303, 306, 3, 2, 2, 2, 304, 302, 3, 2, 2, 2, 304, 305, 3, 2, 2, 2, 305, 17, 3, 2, 2, 2, 306, 304, 3, 2, 2, 2, 307, 308, 5, 16, 9, 2, 308, 309, 7, 25, 2, 2, 309, 311, 3, 2, 2, 2, 310, 307, 3, 2, 2, 2, 311, 314, 3, 2, 2, 2, 312, 310, 3, 2, 2, 2, 312, 313, 3, 2, 2, 2, 313, 315, 3, 2, 2, 2, 314, 312, 3, 2, 2, 2, 315, 316, 5, 16, 9, 2, 316, 19, 3, 2, 2, 2, 317, 318, 5, 18, 10, 2, 318, 319, 7, 2, 2, 3, 319, 21, 3, 2, 2, 2, 320, 321, 7, 32, 2, 2, 321, 322, 5, 18, 10, 2, 322, 323, 7, 33, 2, 2, 323, 326, 5, 18, 10, 2, 324, 325, 7, 34, 2, 2, 325, 327, 5, 18, 10, 2, 326, 324, 3, 2, 2, 2, 326, 327, 3, 2, 2, 2, 327, 331, 3, 2, 2, 2, 328, 329, 7, 26, 2, 2, 329, 331, 5, 16, 9, 2, 330, 320, 3, 2, 2, 2, 330, 328, 3, 2, 2, 2, 331, 23, 3, 2, 2, 2, 332, 333, 7, 73, 2, 2, 333, 335, 7, 10, 2, 2, 334, 332, 3, 2, 2, 2, 334, 335, 3, 2, 2, 2, 335, 336, 3, 2, 2, 2, 336, 337, 5, 16, 9, 2, 337, 25, 3, 2, 2, 2, 338, 345, 7, 69, 2, 2, 339, 345, 7, 70, 2, 2, 340, 345, 9, 10, 2, 2, 341, 345, 7, 71, 2, 2, 342, 345, 7, 72, 2, 2, 343, 345, 7, 73, 2, 2, 344, 338, 3, 2, 2, 2, 344, 339, 3, 2, 2, 2, 344, 340, 3, 2, 2, 2, 344, 341, 3, 2, 2, 2, 344, 342, 3, 2, 2, 2, 344, 343, 3, 2, 2, 2, 345, 27, 3, 2, 2, 2, 346, 347, 7, 73, 2, 2, 347, 349, 7, 25, 2, 2, 348, 346, 3, 2, 2, 2, 349, 352, 3, 2, 2, 2, 350, 348, 3, 2, 2, 2, 350, 351, 3, 2, 2, 2, 351, 353, 3, 2, 2, 2, 352, 350, 3, 2, 2, 2, 353, 354, 7, 73, 2, 2, 354, 29, 3, 2, 2, 2, 355, 356, 8, 16, 1, 2, 356, 368, 9, 11, 2, 2, 357, 358, 7, 36, 2, 2, 358, 359, 5, 30, 16, 2, 359, 360, 7, 37, 2, 2, 360, 368, 3, 2, 2, 2, 361, 362, 7, 43, 2, 2, 362, 363, 5, 30, 16, 2, 363, 364, 7, 44, 2, 2, 364, 368, 3, 2, 2, 2, 365, 366, 7, 60, 2, 2, 366, 368, 5, 30, 16, 3, 367, 355, 3, 2, 2, 2, 367, 357, 3, 2, 2, 2, 367, 361, 3, 2, 2, 2, 367, 365, 3, 2, 2, 2, 368, 377, 3, 2, 2, 2, 369, 370, 12, 5, 2, 2, 370, 371, 7, 12, 2, 2, 371, 376, 5, 30, 16, 5, 372, 373, 12, 4, 2, 2, 373, 374, 7, 60, 2, 2, 374, 376, 5, 30, 16, 4, 375, 369, 3, 2, 2, 2, 375, 372, 3, 2, 2, 2, 376, 379, 3, 2, 2, 2, 377, 375, 3, 2, 2, 2, 377, 378, 3, 2, 2, 2, 378, 31, 3, 2, 2, 2, 379, 377, 3, 2, 2, 2, 44, 35, 44, 54, 59, 65, 72, 84, 86, 93, 107, 113, 131, 144, 148, 152, 158, 160, 166, 172, 188, 192, 200, 213, 217, 221, 270, 274, 278, 280, 293, 297, 302, 304, 312, 326, 330, 334, 344, 350, 367, 375, 377] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 78, 386, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 3, 2, 7, 2, 34, 10, 2, 12, 2, 14, 2, 37, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 45, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 55, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 60, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 66, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 71, 10, 4, 12, 4, 14, 4, 74, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 85, 10, 4, 5, 4, 87, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 92, 10, 5, 12, 5, 14, 5, 95, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 106, 10, 6, 12, 6, 14, 6, 109, 11, 6, 3, 6, 3, 6, 3, 6, 5, 6, 114, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 132, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 143, 10, 6, 12, 6, 14, 6, 146, 11, 6, 3, 6, 5, 6, 149, 10, 6, 3, 6, 3, 6, 5, 6, 153, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 159, 10, 6, 5, 6, 161, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 167, 10, 7, 3, 8, 3, 8, 6, 8, 171, 10, 8, 13, 8, 14, 8, 172, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 187, 10, 9, 12, 9, 14, 9, 190, 11, 9, 3, 9, 5, 9, 193, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 6, 9, 199, 10, 9, 13, 9, 14, 9, 200, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 212, 10, 9, 12, 9, 14, 9, 215, 11, 9, 3, 9, 5, 9, 218, 10, 9, 3, 9, 3, 9, 5, 9, 222, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 271, 10, 9, 3, 9, 3, 9, 5, 9, 275, 10, 9, 3, 9, 3, 9, 5, 9, 279, 10, 9, 5, 9, 281, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 292, 10, 9, 12, 9, 14, 9, 295, 11, 9, 3, 9, 5, 9, 298, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 305, 10, 9, 12, 9, 14, 9, 308, 11, 9, 3, 10, 3, 10, 3, 10, 7, 10, 313, 10, 10, 12, 10, 14, 10, 316, 11, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 329, 10, 12, 3, 12, 3, 12, 5, 12, 333, 10, 12, 3, 13, 3, 13, 5, 13, 337, 10, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 348, 10, 14, 3, 15, 3, 15, 7, 15, 352, 10, 15, 12, 15, 14, 15, 355, 11, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 371, 10, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 7, 16, 381, 10, 16, 12, 16, 14, 16, 384, 11, 16, 3, 16, 2, 4, 16, 30, 17, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 2, 12, 3, 2, 11, 21, 3, 2, 22, 23, 4, 2, 15, 16, 47, 47, 3, 2, 12, 14, 3, 2, 15, 16, 3, 2, 17, 18, 3, 2, 48, 49, 3, 2, 50, 55, 3, 2, 62, 63, 3, 2, 65, 70, 2, 452, 2, 35, 3, 2, 2, 2, 4, 44, 3, 2, 2, 2, 6, 86, 3, 2, 2, 2, 8, 88, 3, 2, 2, 2, 10, 160, 3, 2, 2, 2, 12, 162, 3, 2, 2, 2, 14, 168, 3, 2, 2, 2, 16, 221, 3, 2, 2, 2, 18, 314, 3, 2, 2, 2, 20, 319, 3, 2, 2, 2, 22, 332, 3, 2, 2, 2, 24, 336, 3, 2, 2, 2, 26, 347, 3, 2, 2, 2, 28, 353, 3, 2, 2, 2, 30, 370, 3, 2, 2, 2, 32, 34, 5, 4, 3, 2, 33, 32, 3, 2, 2, 2, 34, 37, 3, 2, 2, 2, 35, 33, 3, 2, 2, 2, 35, 36, 3, 2, 2, 2, 36, 38, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 38, 39, 7, 2, 2, 3, 39, 3, 3, 2, 2, 2, 40, 41, 5, 6, 4, 2, 41, 42, 7, 3, 2, 2, 42, 45, 3, 2, 2, 2, 43, 45, 5, 10, 6, 2, 44, 40, 3, 2, 2, 2, 44, 43, 3, 2, 2, 2, 45, 5, 3, 2, 2, 2, 46, 47, 7, 4, 2, 2, 47, 54, 7, 75, 2, 2, 48, 49, 7, 5, 2, 2, 49, 55, 5, 28, 15, 2, 50, 51, 7, 6, 2, 2, 51, 55, 5, 28, 15, 2, 52, 53, 7, 7, 2, 2, 53, 55, 7, 75, 2, 2, 54, 48, 3, 2, 2, 2, 54, 50, 3, 2, 2, 2, 54, 52, 3, 2, 2, 2, 54, 55, 3, 2, 2, 2, 55, 87, 3, 2, 2, 2, 56, 87, 7, 8, 2, 2, 57, 59, 7, 9, 2, 2, 58, 60, 5, 18, 10, 2, 59, 58, 3, 2, 2, 2, 59, 60, 3, 2, 2, 2, 60, 87, 3, 2, 2, 2, 61, 62, 5, 30, 16, 2, 62, 65, 7, 75, 2, 2, 63, 64, 7, 10, 2, 2, 64, 66, 5, 18, 10, 2, 65, 63, 3, 2, 2, 2, 65, 66, 3, 2, 2, 2, 66, 87, 3, 2, 2, 2, 67, 68, 5, 8, 5, 2, 68, 69, 7, 10, 2, 2, 69, 71, 3, 2, 2, 2, 70, 67, 3, 2, 2, 2, 71, 74, 3, 2, 2, 2, 72, 70, 3, 2, 2, 2, 72, 73, 3, 2, 2, 2, 73, 75, 3, 2, 2, 2, 74, 72, 3, 2, 2, 2, 75, 87, 5, 18, 10, 2, 76, 77, 5, 16, 9, 2, 77, 78, 9, 2, 2, 2, 78, 79, 7, 10, 2, 2, 79, 80, 5, 16, 9, 2, 80, 87, 3, 2, 2, 2, 81, 87, 9, 3, 2, 2, 82, 84, 7, 24, 2, 2, 83, 85, 5, 18, 10, 2, 84, 83, 3, 2, 2, 2, 84, 85, 3, 2, 2, 2, 85, 87, 3, 2, 2, 2, 86, 46, 3, 2, 2, 2, 86, 56, 3, 2, 2, 2, 86, 57, 3, 2, 2, 2, 86, 61, 3, 2, 2, 2, 86, 72, 3, 2, 2, 2, 86, 76, 3, 2, 2, 2, 86, 81, 3, 2, 2, 2, 86, 82, 3, 2, 2, 2, 87, 7, 3, 2, 2, 2, 88, 93, 5, 16, 9, 2, 89, 90, 7, 25, 2, 2, 90, 92, 5, 16, 9, 2, 91, 89, 3, 2, 2, 2, 92, 95, 3, 2, 2, 2, 93, 91, 3, 2, 2, 2, 93, 94, 3, 2, 2, 2, 94, 9, 3, 2, 2, 2, 95, 93, 3, 2, 2, 2, 96, 97, 7, 26, 2, 2, 97, 98, 5, 16, 9, 2, 98, 99, 7, 27, 2, 2, 99, 107, 5, 14, 8, 2, 100, 101, 7, 28, 2, 2, 101, 102, 5, 16, 9, 2, 102, 103, 7, 27, 2, 2, 103, 104, 5, 14, 8, 2, 104, 106, 3, 2, 2, 2, 105, 100, 3, 2, 2, 2, 106, 109, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 107, 108, 3, 2, 2, 2, 108, 113, 3, 2, 2, 2, 109, 107, 3, 2, 2, 2, 110, 111, 7, 29, 2, 2, 111, 112, 7, 27, 2, 2, 112, 114, 5, 14, 8, 2, 113, 110, 3, 2, 2, 2, 113, 114, 3, 2, 2, 2, 114, 161, 3, 2, 2, 2, 115, 116, 7, 30, 2, 2, 116, 117, 5, 16, 9, 2, 117, 118, 7, 27, 2, 2, 118, 119, 5, 14, 8, 2, 119, 161, 3, 2, 2, 2, 120, 121, 7, 31, 2, 2, 121, 122, 5, 16, 9, 2, 122, 123, 7, 27, 2, 2, 123, 124, 5, 14, 8, 2, 124, 161, 3, 2, 2, 2, 125, 126, 7, 32, 2, 2, 126, 127, 5, 18, 10, 2, 127, 128, 7, 33, 2, 2, 128, 131, 5, 18, 10, 2, 129, 130, 7, 34, 2, 2, 130, 132, 5, 18, 10, 2, 131, 129, 3, 2, 2, 2, 131, 132, 3, 2, 2, 2, 132, 133, 3, 2, 2, 2, 133, 134, 7, 27, 2, 2, 134, 135, 5, 14, 8, 2, 135, 161, 3, 2, 2, 2, 136, 137, 7, 35, 2, 2, 137, 138, 7, 75, 2, 2, 138, 144, 7, 36, 2, 2, 139, 140, 5, 12, 7, 2, 140, 141, 7, 25, 2, 2, 141, 143, 3, 2, 2, 2, 142, 139, 3, 2, 2, 2, 143, 146, 3, 2, 2, 2, 144, 142, 3, 2, 2, 2, 144, 145, 3, 2, 2, 2, 145, 148, 3, 2, 2, 2, 146, 144, 3, 2, 2, 2, 147, 149, 5, 12, 7, 2, 148, 147, 3, 2, 2, 2, 148, 149, 3, 2, 2, 2, 149, 150, 3, 2, 2, 2, 150, 152, 7, 37, 2, 2, 151, 153, 5, 30, 16, 2, 152, 151, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 158, 3, 2, 2, 2, 154, 155, 7, 38, 2, 2, 155, 159, 5, 14, 8, 2, 156, 157, 7, 39, 2, 2, 157, 159, 7, 3, 2, 2, 158, 154, 3, 2, 2, 2, 158, 156, 3, 2, 2, 2, 159, 161, 3, 2, 2, 2, 160, 96, 3, 2, 2, 2, 160, 115, 3, 2, 2, 2, 160, 120, 3, 2, 2, 2, 160, 125, 3, 2, 2, 2, 160, 136, 3, 2, 2, 2, 161, 11, 3, 2, 2, 2, 162, 163, 5, 30, 16, 2, 163, 166, 7, 75, 2, 2, 164, 165, 7, 40, 2, 2, 165, 167, 5, 16, 9, 2, 166, 164, 3, 2, 2, 2, 166, 167, 3, 2, 2, 2, 167, 13, 3, 2, 2, 2, 168, 170, 7, 41, 2, 2, 169, 171, 5, 4, 3, 2, 170, 169, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 170, 3, 2, 2, 2, 172, 173, 3, 2, 2, 2, 173, 174, 3, 2, 2, 2, 174, 175, 7, 42, 2, 2, 175, 15, 3, 2, 2, 2, 176, 177, 8, 9, 1, 2, 177, 222, 5, 26, 14, 2, 178, 179, 7, 36, 2, 2, 179, 180, 5, 18, 10, 2, 180, 181, 7, 37, 2, 2, 181, 222, 3, 2, 2, 2, 182, 188, 7, 43, 2, 2, 183, 184, 5, 16, 9, 2, 184, 185, 7, 25, 2, 2, 185, 187, 3, 2, 2, 2, 186, 183, 3, 2, 2, 2, 187, 190, 3, 2, 2, 2, 188, 186, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 192, 3, 2, 2, 2, 190, 188, 3, 2, 2, 2, 191, 193, 5, 16, 9, 2, 192, 191, 3, 2, 2, 2, 192, 193, 3, 2, 2, 2, 193, 194, 3, 2, 2, 2, 194, 222, 7, 44, 2, 2, 195, 196, 7, 43, 2, 2, 196, 198, 5, 16, 9, 2, 197, 199, 5, 22, 12, 2, 198, 197, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 198, 3, 2, 2, 2, 200, 201, 3, 2, 2, 2, 201, 202, 3, 2, 2, 2, 202, 203, 7, 44, 2, 2, 203, 222, 3, 2, 2, 2, 204, 205, 9, 4, 2, 2, 205, 222, 5, 16, 9, 17, 206, 207, 7, 56, 2, 2, 207, 222, 5, 16, 9, 7, 208, 213, 7, 60, 2, 2, 209, 210, 7, 75, 2, 2, 210, 212, 7, 25, 2, 2, 211, 209, 3, 2, 2, 2, 212, 215, 3, 2, 2, 2, 213, 211, 3, 2, 2, 2, 213, 214, 3, 2, 2, 2, 214, 217, 3, 2, 2, 2, 215, 213, 3, 2, 2, 2, 216, 218, 7, 75, 2, 2, 217, 216, 3, 2, 2, 2, 217, 218, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 220, 7, 61, 2, 2, 220, 222, 5, 16, 9, 3, 221, 176, 3, 2, 2, 2, 221, 178, 3, 2, 2, 2, 221, 182, 3, 2, 2, 2, 221, 195, 3, 2, 2, 2, 221, 204, 3, 2, 2, 2, 221, 206, 3, 2, 2, 2, 221, 208, 3, 2, 2, 2, 222, 306, 3, 2, 2, 2, 223, 224, 12, 18, 2, 2, 224, 225, 7, 11, 2, 2, 225, 305, 5, 16, 9, 18, 226, 227, 12, 16, 2, 2, 227, 228, 9, 5, 2, 2, 228, 305, 5, 16, 9, 17, 229, 230, 12, 15, 2, 2, 230, 231, 9, 6, 2, 2, 231, 305, 5, 16, 9, 16, 232, 233, 12, 14, 2, 2, 233, 234, 9, 7, 2, 2, 234, 305, 5, 16, 9, 15, 235, 236, 12, 13, 2, 2, 236, 237, 7, 19, 2, 2, 237, 305, 5, 16, 9, 14, 238, 239, 12, 12, 2, 2, 239, 240, 7, 20, 2, 2, 240, 305, 5, 16, 9, 13, 241, 242, 12, 11, 2, 2, 242, 243, 7, 21, 2, 2, 243, 305, 5, 16, 9, 12, 244, 245, 12, 10, 2, 2, 245, 246, 9, 8, 2, 2, 246, 305, 5, 16, 9, 11, 247, 248, 12, 8, 2, 2, 248, 249, 9, 9, 2, 2, 249, 305, 5, 16, 9, 8, 250, 251, 12, 6, 2, 2, 251, 252, 7, 57, 2, 2, 252, 305, 5, 16, 9, 6, 253, 254, 12, 5, 2, 2, 254, 255, 7, 58, 2, 2, 255, 305, 5, 16, 9, 5, 256, 257, 12, 4, 2, 2, 257, 258, 7, 59, 2, 2, 258, 259, 5, 16, 9, 2, 259, 260, 7, 40, 2, 2, 260, 261, 5, 16, 9, 4, 261, 305, 3, 2, 2, 2, 262, 263, 12, 23, 2, 2, 263, 264, 7, 43, 2, 2, 264, 265, 5, 18, 10, 2, 265, 266, 7, 44, 2, 2, 266, 305, 3, 2, 2, 2, 267, 268, 12, 22, 2, 2, 268, 270, 7, 43, 2, 2, 269, 271, 5, 16, 9, 2, 270, 269, 3, 2, 2, 2, 270, 271, 3, 2, 2, 2, 271, 272, 3, 2, 2, 2, 272, 274, 7, 40, 2, 2, 273, 275, 5, 16, 9, 2, 274, 273, 3, 2, 2, 2, 274, 275, 3, 2, 2, 2, 275, 280, 3, 2, 2, 2, 276, 278, 7, 40, 2, 2, 277, 279, 5, 16, 9, 2, 278, 277, 3, 2, 2, 2, 278, 279, 3, 2, 2, 2, 279, 281, 3, 2, 2, 2, 280, 276, 3, 2, 2, 2, 280, 281, 3, 2, 2, 2, 281, 282, 3, 2, 2, 2, 282, 305, 7, 44, 2, 2, 283, 284, 12, 21, 2, 2, 284, 285, 7, 45, 2, 2, 285, 305, 7, 75, 2, 2, 286, 287, 12, 20, 2, 2, 287, 293, 7, 36, 2, 2, 288, 289, 5, 24, 13, 2, 289, 290, 7, 25, 2, 2, 290, 292, 3, 2, 2, 2, 291, 288, 3, 2, 2, 2, 292, 295, 3, 2, 2, 2, 293, 291, 3, 2, 2, 2, 293, 294, 3, 2, 2, 2, 294, 297, 3, 2, 2, 2, 295, 293, 3, 2, 2, 2, 296, 298, 5, 24, 13, 2, 297, 296, 3, 2, 2, 2, 297, 298, 3, 2, 2, 2, 298, 299, 3, 2, 2, 2, 299, 305, 7, 37, 2, 2, 300, 301, 12, 19, 2, 2, 301, 305, 7, 46, 2, 2, 302, 303, 12, 9, 2, 2, 303, 305, 7, 49, 2, 2, 304, 223, 3, 2, 2, 2, 304, 226, 3, 2, 2, 2, 304, 229, 3, 2, 2, 2, 304, 232, 3, 2, 2, 2, 304, 235, 3, 2, 2, 2, 304, 238, 3, 2, 2, 2, 304, 241, 3, 2, 2, 2, 304, 244, 3, 2, 2, 2, 304, 247, 3, 2, 2, 2, 304, 250, 3, 2, 2, 2, 304, 253, 3, 2, 2, 2, 304, 256, 3, 2, 2, 2, 304, 262, 3, 2, 2, 2, 304, 267, 3, 2, 2, 2, 304, 283, 3, 2, 2, 2, 304, 286, 3, 2, 2, 2, 304, 300, 3, 2, 2, 2, 304, 302, 3, 2, 2, 2, 305, 308, 3, 2, 2, 2, 306, 304, 3, 2, 2, 2, 306, 307, 3, 2, 2, 2, 307, 17, 3, 2, 2, 2, 308, 306, 3, 2, 2, 2, 309, 310, 5, 16, 9, 2, 310, 311, 7, 25, 2, 2, 311, 313, 3, 2, 2, 2, 312, 309, 3, 2, 2, 2, 313, 316, 3, 2, 2, 2, 314, 312, 3, 2, 2, 2, 314, 315, 3, 2, 2, 2, 315, 317, 3, 2, 2, 2, 316, 314, 3, 2, 2, 2, 317, 318, 5, 16, 9, 2, 318, 19, 3, 2, 2, 2, 319, 320, 5, 18, 10, 2, 320, 321, 7, 2, 2, 3, 321, 21, 3, 2, 2, 2, 322, 323, 7, 32, 2, 2, 323, 324, 5, 18, 10, 2, 324, 325, 7, 33, 2, 2, 325, 328, 5, 18, 10, 2, 326, 327, 7, 34, 2, 2, 327, 329, 5, 18, 10, 2, 328, 326, 3, 2, 2, 2, 328, 329, 3, 2, 2, 2, 329, 333, 3, 2, 2, 2, 330, 331, 7, 26, 2, 2, 331, 333, 5, 16, 9, 2, 332, 322, 3, 2, 2, 2, 332, 330, 3, 2, 2, 2, 333, 23, 3, 2, 2, 2, 334, 335, 7, 75, 2, 2, 335, 337, 7, 10, 2, 2, 336, 334, 3, 2, 2, 2, 336, 337, 3, 2, 2, 2, 337, 338, 3, 2, 2, 2, 338, 339, 5, 16, 9, 2, 339, 25, 3, 2, 2, 2, 340, 348, 7, 71, 2, 2, 341, 348, 7, 72, 2, 2, 342, 348, 9, 10, 2, 2, 343, 348, 7, 73, 2, 2, 344, 348, 7, 74, 2, 2, 345, 348, 7, 64, 2, 2, 346, 348, 7, 75, 2, 2, 347, 340, 3, 2, 2, 2, 347, 341, 3, 2, 2, 2, 347, 342, 3, 2, 2, 2, 347, 343, 3, 2, 2, 2, 347, 344, 3, 2, 2, 2, 347, 345, 3, 2, 2, 2, 347, 346, 3, 2, 2, 2, 348, 27, 3, 2, 2, 2, 349, 350, 7, 75, 2, 2, 350, 352, 7, 25, 2, 2, 351, 349, 3, 2, 2, 2, 352, 355, 3, 2, 2, 2, 353, 351, 3, 2, 2, 2, 353, 354, 3, 2, 2, 2, 354, 356, 3, 2, 2, 2, 355, 353, 3, 2, 2, 2, 356, 357, 7, 75, 2, 2, 357, 29, 3, 2, 2, 2, 358, 359, 8, 16, 1, 2, 359, 371, 9, 11, 2, 2, 360, 361, 7, 36, 2, 2, 361, 362, 5, 30, 16, 2, 362, 363, 7, 37, 2, 2, 363, 371, 3, 2, 2, 2, 364, 365, 7, 43, 2, 2, 365, 366, 5, 30, 16, 2, 366, 367, 7, 44, 2, 2, 367, 371, 3, 2, 2, 2, 368, 369, 7, 61, 2, 2, 369, 371, 5, 30, 16, 3, 370, 358, 3, 2, 2, 2, 370, 360, 3, 2, 2, 2, 370, 364, 3, 2, 2, 2, 370, 368, 3, 2, 2, 2, 371, 382, 3, 2, 2, 2, 372, 373, 12, 5, 2, 2, 373, 374, 7, 12, 2, 2, 374, 381, 5, 30, 16, 5, 375, 376, 12, 4, 2, 2, 376, 377, 7, 61, 2, 2, 377, 381, 5, 30, 16, 4, 378, 379, 12, 6, 2, 2, 379, 381, 7, 59, 2, 2, 380, 372, 3, 2, 2, 2, 380, 375, 3, 2, 2, 2, 380, 378, 3, 2, 2, 2, 381, 384, 3, 2, 2, 2, 382, 380, 3, 2, 2, 2, 382, 383, 3, 2, 2, 2, 383, 31, 3, 2, 2, 2, 384, 382, 3, 2, 2, 2, 44, 35, 44, 54, 59, 65, 72, 84, 86, 93, 107, 113, 131, 144, 148, 152, 158, 160, 166, 172, 188, 192, 200, 213, 217, 221, 270, 274, 278, 280, 293, 297, 304, 306, 314, 328, 332, 336, 347, 353, 370, 380, 382] \ No newline at end of file diff --git a/src/antlr/Pyxell.tokens b/src/antlr/Pyxell.tokens index f94f0b97..b5318ded 100644 --- a/src/antlr/Pyxell.tokens +++ b/src/antlr/Pyxell.tokens @@ -64,14 +64,16 @@ T__62=63 T__63=64 T__64=65 T__65=66 -INT=67 -FLOAT=68 -CHAR=69 -STRING=70 -ID=71 -COMMENT=72 -WS=73 -ERR=74 +T__66=67 +T__67=68 +INT=69 +FLOAT=70 +CHAR=71 +STRING=72 +ID=73 +COMMENT=74 +WS=75 +ERR=76 ';'=1 'use'=2 'only'=3 @@ -115,26 +117,28 @@ ERR=74 '['=41 ']'=42 '.'=43 -'~'=44 -'..'=45 -'...'=46 -'=='=47 -'!='=48 -'<'=49 -'<='=50 -'>'=51 -'>='=52 -'not'=53 -'and'=54 -'or'=55 -'?'=56 -'lambda'=57 -'->'=58 -'true'=59 -'false'=60 -'Void'=61 -'Int'=62 -'Float'=63 -'Bool'=64 -'Char'=65 -'String'=66 +'!'=44 +'~'=45 +'..'=46 +'...'=47 +'=='=48 +'!='=49 +'<'=50 +'<='=51 +'>'=52 +'>='=53 +'not'=54 +'and'=55 +'or'=56 +'?'=57 +'lambda'=58 +'->'=59 +'true'=60 +'false'=61 +'null'=62 +'Void'=63 +'Int'=64 +'Float'=65 +'Bool'=66 +'Char'=67 +'String'=68 diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp index c4873a51..75ae5d62 100644 --- a/src/antlr/PyxellLexer.interp +++ b/src/antlr/PyxellLexer.interp @@ -43,6 +43,7 @@ null '[' ']' '.' +'!' '~' '..' '...' @@ -60,6 +61,7 @@ null '->' 'true' 'false' +'null' 'Void' 'Int' 'Float' @@ -143,6 +145,8 @@ null null null null +null +null INT FLOAT CHAR @@ -219,6 +223,8 @@ T__62 T__63 T__64 T__65 +T__66 +T__67 INT FLOAT CHAR @@ -239,4 +245,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 76, 487, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 6, 68, 404, 10, 68, 13, 68, 14, 68, 405, 3, 69, 6, 69, 409, 10, 69, 13, 69, 14, 69, 410, 3, 69, 3, 69, 6, 69, 415, 10, 69, 13, 69, 14, 69, 416, 3, 69, 3, 69, 5, 69, 421, 10, 69, 3, 69, 6, 69, 424, 10, 69, 13, 69, 14, 69, 425, 5, 69, 428, 10, 69, 3, 70, 3, 70, 3, 70, 3, 70, 7, 70, 434, 10, 70, 12, 70, 14, 70, 437, 11, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 3, 71, 7, 71, 445, 10, 71, 12, 71, 14, 71, 448, 11, 71, 3, 71, 3, 71, 3, 72, 3, 72, 7, 72, 454, 10, 72, 12, 72, 14, 72, 457, 11, 72, 3, 73, 3, 73, 3, 74, 3, 74, 3, 75, 3, 75, 3, 75, 5, 75, 466, 10, 75, 3, 76, 3, 76, 3, 76, 3, 76, 7, 76, 472, 10, 76, 12, 76, 14, 76, 475, 11, 76, 3, 76, 3, 76, 3, 77, 6, 77, 480, 10, 77, 13, 77, 14, 77, 481, 3, 77, 3, 77, 3, 78, 3, 78, 2, 2, 79, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 2, 147, 2, 149, 2, 151, 74, 153, 75, 155, 76, 3, 2, 11, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 4, 2, 12, 12, 14, 15, 5, 2, 11, 12, 15, 15, 34, 34, 2, 498, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 3, 157, 3, 2, 2, 2, 5, 159, 3, 2, 2, 2, 7, 163, 3, 2, 2, 2, 9, 168, 3, 2, 2, 2, 11, 175, 3, 2, 2, 2, 13, 178, 3, 2, 2, 2, 15, 183, 3, 2, 2, 2, 17, 189, 3, 2, 2, 2, 19, 191, 3, 2, 2, 2, 21, 193, 3, 2, 2, 2, 23, 195, 3, 2, 2, 2, 25, 197, 3, 2, 2, 2, 27, 199, 3, 2, 2, 2, 29, 201, 3, 2, 2, 2, 31, 203, 3, 2, 2, 2, 33, 206, 3, 2, 2, 2, 35, 209, 3, 2, 2, 2, 37, 211, 3, 2, 2, 2, 39, 213, 3, 2, 2, 2, 41, 215, 3, 2, 2, 2, 43, 221, 3, 2, 2, 2, 45, 230, 3, 2, 2, 2, 47, 237, 3, 2, 2, 2, 49, 239, 3, 2, 2, 2, 51, 242, 3, 2, 2, 2, 53, 245, 3, 2, 2, 2, 55, 250, 3, 2, 2, 2, 57, 255, 3, 2, 2, 2, 59, 261, 3, 2, 2, 2, 61, 267, 3, 2, 2, 2, 63, 271, 3, 2, 2, 2, 65, 274, 3, 2, 2, 2, 67, 279, 3, 2, 2, 2, 69, 284, 3, 2, 2, 2, 71, 286, 3, 2, 2, 2, 73, 288, 3, 2, 2, 2, 75, 292, 3, 2, 2, 2, 77, 299, 3, 2, 2, 2, 79, 301, 3, 2, 2, 2, 81, 303, 3, 2, 2, 2, 83, 305, 3, 2, 2, 2, 85, 307, 3, 2, 2, 2, 87, 309, 3, 2, 2, 2, 89, 311, 3, 2, 2, 2, 91, 313, 3, 2, 2, 2, 93, 316, 3, 2, 2, 2, 95, 320, 3, 2, 2, 2, 97, 323, 3, 2, 2, 2, 99, 326, 3, 2, 2, 2, 101, 328, 3, 2, 2, 2, 103, 331, 3, 2, 2, 2, 105, 333, 3, 2, 2, 2, 107, 336, 3, 2, 2, 2, 109, 340, 3, 2, 2, 2, 111, 344, 3, 2, 2, 2, 113, 347, 3, 2, 2, 2, 115, 349, 3, 2, 2, 2, 117, 356, 3, 2, 2, 2, 119, 359, 3, 2, 2, 2, 121, 364, 3, 2, 2, 2, 123, 370, 3, 2, 2, 2, 125, 375, 3, 2, 2, 2, 127, 379, 3, 2, 2, 2, 129, 385, 3, 2, 2, 2, 131, 390, 3, 2, 2, 2, 133, 395, 3, 2, 2, 2, 135, 403, 3, 2, 2, 2, 137, 408, 3, 2, 2, 2, 139, 429, 3, 2, 2, 2, 141, 440, 3, 2, 2, 2, 143, 451, 3, 2, 2, 2, 145, 458, 3, 2, 2, 2, 147, 460, 3, 2, 2, 2, 149, 465, 3, 2, 2, 2, 151, 467, 3, 2, 2, 2, 153, 479, 3, 2, 2, 2, 155, 485, 3, 2, 2, 2, 157, 158, 7, 61, 2, 2, 158, 4, 3, 2, 2, 2, 159, 160, 7, 119, 2, 2, 160, 161, 7, 117, 2, 2, 161, 162, 7, 103, 2, 2, 162, 6, 3, 2, 2, 2, 163, 164, 7, 113, 2, 2, 164, 165, 7, 112, 2, 2, 165, 166, 7, 110, 2, 2, 166, 167, 7, 123, 2, 2, 167, 8, 3, 2, 2, 2, 168, 169, 7, 106, 2, 2, 169, 170, 7, 107, 2, 2, 170, 171, 7, 102, 2, 2, 171, 172, 7, 107, 2, 2, 172, 173, 7, 112, 2, 2, 173, 174, 7, 105, 2, 2, 174, 10, 3, 2, 2, 2, 175, 176, 7, 99, 2, 2, 176, 177, 7, 117, 2, 2, 177, 12, 3, 2, 2, 2, 178, 179, 7, 117, 2, 2, 179, 180, 7, 109, 2, 2, 180, 181, 7, 107, 2, 2, 181, 182, 7, 114, 2, 2, 182, 14, 3, 2, 2, 2, 183, 184, 7, 114, 2, 2, 184, 185, 7, 116, 2, 2, 185, 186, 7, 107, 2, 2, 186, 187, 7, 112, 2, 2, 187, 188, 7, 118, 2, 2, 188, 16, 3, 2, 2, 2, 189, 190, 7, 63, 2, 2, 190, 18, 3, 2, 2, 2, 191, 192, 7, 96, 2, 2, 192, 20, 3, 2, 2, 2, 193, 194, 7, 44, 2, 2, 194, 22, 3, 2, 2, 2, 195, 196, 7, 49, 2, 2, 196, 24, 3, 2, 2, 2, 197, 198, 7, 39, 2, 2, 198, 26, 3, 2, 2, 2, 199, 200, 7, 45, 2, 2, 200, 28, 3, 2, 2, 2, 201, 202, 7, 47, 2, 2, 202, 30, 3, 2, 2, 2, 203, 204, 7, 62, 2, 2, 204, 205, 7, 62, 2, 2, 205, 32, 3, 2, 2, 2, 206, 207, 7, 64, 2, 2, 207, 208, 7, 64, 2, 2, 208, 34, 3, 2, 2, 2, 209, 210, 7, 40, 2, 2, 210, 36, 3, 2, 2, 2, 211, 212, 7, 38, 2, 2, 212, 38, 3, 2, 2, 2, 213, 214, 7, 126, 2, 2, 214, 40, 3, 2, 2, 2, 215, 216, 7, 100, 2, 2, 216, 217, 7, 116, 2, 2, 217, 218, 7, 103, 2, 2, 218, 219, 7, 99, 2, 2, 219, 220, 7, 109, 2, 2, 220, 42, 3, 2, 2, 2, 221, 222, 7, 101, 2, 2, 222, 223, 7, 113, 2, 2, 223, 224, 7, 112, 2, 2, 224, 225, 7, 118, 2, 2, 225, 226, 7, 107, 2, 2, 226, 227, 7, 112, 2, 2, 227, 228, 7, 119, 2, 2, 228, 229, 7, 103, 2, 2, 229, 44, 3, 2, 2, 2, 230, 231, 7, 116, 2, 2, 231, 232, 7, 103, 2, 2, 232, 233, 7, 118, 2, 2, 233, 234, 7, 119, 2, 2, 234, 235, 7, 116, 2, 2, 235, 236, 7, 112, 2, 2, 236, 46, 3, 2, 2, 2, 237, 238, 7, 46, 2, 2, 238, 48, 3, 2, 2, 2, 239, 240, 7, 107, 2, 2, 240, 241, 7, 104, 2, 2, 241, 50, 3, 2, 2, 2, 242, 243, 7, 102, 2, 2, 243, 244, 7, 113, 2, 2, 244, 52, 3, 2, 2, 2, 245, 246, 7, 103, 2, 2, 246, 247, 7, 110, 2, 2, 247, 248, 7, 107, 2, 2, 248, 249, 7, 104, 2, 2, 249, 54, 3, 2, 2, 2, 250, 251, 7, 103, 2, 2, 251, 252, 7, 110, 2, 2, 252, 253, 7, 117, 2, 2, 253, 254, 7, 103, 2, 2, 254, 56, 3, 2, 2, 2, 255, 256, 7, 121, 2, 2, 256, 257, 7, 106, 2, 2, 257, 258, 7, 107, 2, 2, 258, 259, 7, 110, 2, 2, 259, 260, 7, 103, 2, 2, 260, 58, 3, 2, 2, 2, 261, 262, 7, 119, 2, 2, 262, 263, 7, 112, 2, 2, 263, 264, 7, 118, 2, 2, 264, 265, 7, 107, 2, 2, 265, 266, 7, 110, 2, 2, 266, 60, 3, 2, 2, 2, 267, 268, 7, 104, 2, 2, 268, 269, 7, 113, 2, 2, 269, 270, 7, 116, 2, 2, 270, 62, 3, 2, 2, 2, 271, 272, 7, 107, 2, 2, 272, 273, 7, 112, 2, 2, 273, 64, 3, 2, 2, 2, 274, 275, 7, 117, 2, 2, 275, 276, 7, 118, 2, 2, 276, 277, 7, 103, 2, 2, 277, 278, 7, 114, 2, 2, 278, 66, 3, 2, 2, 2, 279, 280, 7, 104, 2, 2, 280, 281, 7, 119, 2, 2, 281, 282, 7, 112, 2, 2, 282, 283, 7, 101, 2, 2, 283, 68, 3, 2, 2, 2, 284, 285, 7, 42, 2, 2, 285, 70, 3, 2, 2, 2, 286, 287, 7, 43, 2, 2, 287, 72, 3, 2, 2, 2, 288, 289, 7, 102, 2, 2, 289, 290, 7, 103, 2, 2, 290, 291, 7, 104, 2, 2, 291, 74, 3, 2, 2, 2, 292, 293, 7, 103, 2, 2, 293, 294, 7, 122, 2, 2, 294, 295, 7, 118, 2, 2, 295, 296, 7, 103, 2, 2, 296, 297, 7, 116, 2, 2, 297, 298, 7, 112, 2, 2, 298, 76, 3, 2, 2, 2, 299, 300, 7, 60, 2, 2, 300, 78, 3, 2, 2, 2, 301, 302, 7, 125, 2, 2, 302, 80, 3, 2, 2, 2, 303, 304, 7, 127, 2, 2, 304, 82, 3, 2, 2, 2, 305, 306, 7, 93, 2, 2, 306, 84, 3, 2, 2, 2, 307, 308, 7, 95, 2, 2, 308, 86, 3, 2, 2, 2, 309, 310, 7, 48, 2, 2, 310, 88, 3, 2, 2, 2, 311, 312, 7, 128, 2, 2, 312, 90, 3, 2, 2, 2, 313, 314, 7, 48, 2, 2, 314, 315, 7, 48, 2, 2, 315, 92, 3, 2, 2, 2, 316, 317, 7, 48, 2, 2, 317, 318, 7, 48, 2, 2, 318, 319, 7, 48, 2, 2, 319, 94, 3, 2, 2, 2, 320, 321, 7, 63, 2, 2, 321, 322, 7, 63, 2, 2, 322, 96, 3, 2, 2, 2, 323, 324, 7, 35, 2, 2, 324, 325, 7, 63, 2, 2, 325, 98, 3, 2, 2, 2, 326, 327, 7, 62, 2, 2, 327, 100, 3, 2, 2, 2, 328, 329, 7, 62, 2, 2, 329, 330, 7, 63, 2, 2, 330, 102, 3, 2, 2, 2, 331, 332, 7, 64, 2, 2, 332, 104, 3, 2, 2, 2, 333, 334, 7, 64, 2, 2, 334, 335, 7, 63, 2, 2, 335, 106, 3, 2, 2, 2, 336, 337, 7, 112, 2, 2, 337, 338, 7, 113, 2, 2, 338, 339, 7, 118, 2, 2, 339, 108, 3, 2, 2, 2, 340, 341, 7, 99, 2, 2, 341, 342, 7, 112, 2, 2, 342, 343, 7, 102, 2, 2, 343, 110, 3, 2, 2, 2, 344, 345, 7, 113, 2, 2, 345, 346, 7, 116, 2, 2, 346, 112, 3, 2, 2, 2, 347, 348, 7, 65, 2, 2, 348, 114, 3, 2, 2, 2, 349, 350, 7, 110, 2, 2, 350, 351, 7, 99, 2, 2, 351, 352, 7, 111, 2, 2, 352, 353, 7, 100, 2, 2, 353, 354, 7, 102, 2, 2, 354, 355, 7, 99, 2, 2, 355, 116, 3, 2, 2, 2, 356, 357, 7, 47, 2, 2, 357, 358, 7, 64, 2, 2, 358, 118, 3, 2, 2, 2, 359, 360, 7, 118, 2, 2, 360, 361, 7, 116, 2, 2, 361, 362, 7, 119, 2, 2, 362, 363, 7, 103, 2, 2, 363, 120, 3, 2, 2, 2, 364, 365, 7, 104, 2, 2, 365, 366, 7, 99, 2, 2, 366, 367, 7, 110, 2, 2, 367, 368, 7, 117, 2, 2, 368, 369, 7, 103, 2, 2, 369, 122, 3, 2, 2, 2, 370, 371, 7, 88, 2, 2, 371, 372, 7, 113, 2, 2, 372, 373, 7, 107, 2, 2, 373, 374, 7, 102, 2, 2, 374, 124, 3, 2, 2, 2, 375, 376, 7, 75, 2, 2, 376, 377, 7, 112, 2, 2, 377, 378, 7, 118, 2, 2, 378, 126, 3, 2, 2, 2, 379, 380, 7, 72, 2, 2, 380, 381, 7, 110, 2, 2, 381, 382, 7, 113, 2, 2, 382, 383, 7, 99, 2, 2, 383, 384, 7, 118, 2, 2, 384, 128, 3, 2, 2, 2, 385, 386, 7, 68, 2, 2, 386, 387, 7, 113, 2, 2, 387, 388, 7, 113, 2, 2, 388, 389, 7, 110, 2, 2, 389, 130, 3, 2, 2, 2, 390, 391, 7, 69, 2, 2, 391, 392, 7, 106, 2, 2, 392, 393, 7, 99, 2, 2, 393, 394, 7, 116, 2, 2, 394, 132, 3, 2, 2, 2, 395, 396, 7, 85, 2, 2, 396, 397, 7, 118, 2, 2, 397, 398, 7, 116, 2, 2, 398, 399, 7, 107, 2, 2, 399, 400, 7, 112, 2, 2, 400, 401, 7, 105, 2, 2, 401, 134, 3, 2, 2, 2, 402, 404, 5, 145, 73, 2, 403, 402, 3, 2, 2, 2, 404, 405, 3, 2, 2, 2, 405, 403, 3, 2, 2, 2, 405, 406, 3, 2, 2, 2, 406, 136, 3, 2, 2, 2, 407, 409, 5, 145, 73, 2, 408, 407, 3, 2, 2, 2, 409, 410, 3, 2, 2, 2, 410, 408, 3, 2, 2, 2, 410, 411, 3, 2, 2, 2, 411, 412, 3, 2, 2, 2, 412, 414, 7, 48, 2, 2, 413, 415, 5, 145, 73, 2, 414, 413, 3, 2, 2, 2, 415, 416, 3, 2, 2, 2, 416, 414, 3, 2, 2, 2, 416, 417, 3, 2, 2, 2, 417, 427, 3, 2, 2, 2, 418, 420, 7, 103, 2, 2, 419, 421, 7, 47, 2, 2, 420, 419, 3, 2, 2, 2, 420, 421, 3, 2, 2, 2, 421, 423, 3, 2, 2, 2, 422, 424, 5, 145, 73, 2, 423, 422, 3, 2, 2, 2, 424, 425, 3, 2, 2, 2, 425, 423, 3, 2, 2, 2, 425, 426, 3, 2, 2, 2, 426, 428, 3, 2, 2, 2, 427, 418, 3, 2, 2, 2, 427, 428, 3, 2, 2, 2, 428, 138, 3, 2, 2, 2, 429, 435, 7, 41, 2, 2, 430, 434, 10, 2, 2, 2, 431, 432, 7, 94, 2, 2, 432, 434, 9, 3, 2, 2, 433, 430, 3, 2, 2, 2, 433, 431, 3, 2, 2, 2, 434, 437, 3, 2, 2, 2, 435, 433, 3, 2, 2, 2, 435, 436, 3, 2, 2, 2, 436, 438, 3, 2, 2, 2, 437, 435, 3, 2, 2, 2, 438, 439, 7, 41, 2, 2, 439, 140, 3, 2, 2, 2, 440, 446, 7, 36, 2, 2, 441, 445, 10, 4, 2, 2, 442, 443, 7, 94, 2, 2, 443, 445, 9, 5, 2, 2, 444, 441, 3, 2, 2, 2, 444, 442, 3, 2, 2, 2, 445, 448, 3, 2, 2, 2, 446, 444, 3, 2, 2, 2, 446, 447, 3, 2, 2, 2, 447, 449, 3, 2, 2, 2, 448, 446, 3, 2, 2, 2, 449, 450, 7, 36, 2, 2, 450, 142, 3, 2, 2, 2, 451, 455, 5, 147, 74, 2, 452, 454, 5, 149, 75, 2, 453, 452, 3, 2, 2, 2, 454, 457, 3, 2, 2, 2, 455, 453, 3, 2, 2, 2, 455, 456, 3, 2, 2, 2, 456, 144, 3, 2, 2, 2, 457, 455, 3, 2, 2, 2, 458, 459, 9, 6, 2, 2, 459, 146, 3, 2, 2, 2, 460, 461, 9, 7, 2, 2, 461, 148, 3, 2, 2, 2, 462, 466, 5, 147, 74, 2, 463, 466, 5, 145, 73, 2, 464, 466, 9, 8, 2, 2, 465, 462, 3, 2, 2, 2, 465, 463, 3, 2, 2, 2, 465, 464, 3, 2, 2, 2, 466, 150, 3, 2, 2, 2, 467, 468, 7, 47, 2, 2, 468, 469, 7, 47, 2, 2, 469, 473, 3, 2, 2, 2, 470, 472, 10, 9, 2, 2, 471, 470, 3, 2, 2, 2, 472, 475, 3, 2, 2, 2, 473, 471, 3, 2, 2, 2, 473, 474, 3, 2, 2, 2, 474, 476, 3, 2, 2, 2, 475, 473, 3, 2, 2, 2, 476, 477, 8, 76, 2, 2, 477, 152, 3, 2, 2, 2, 478, 480, 9, 10, 2, 2, 479, 478, 3, 2, 2, 2, 480, 481, 3, 2, 2, 2, 481, 479, 3, 2, 2, 2, 481, 482, 3, 2, 2, 2, 482, 483, 3, 2, 2, 2, 483, 484, 8, 77, 2, 2, 484, 154, 3, 2, 2, 2, 485, 486, 11, 2, 2, 2, 486, 156, 3, 2, 2, 2, 17, 2, 405, 410, 416, 420, 425, 427, 433, 435, 444, 446, 455, 465, 473, 481, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 78, 498, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 70, 6, 70, 415, 10, 70, 13, 70, 14, 70, 416, 3, 71, 6, 71, 420, 10, 71, 13, 71, 14, 71, 421, 3, 71, 3, 71, 6, 71, 426, 10, 71, 13, 71, 14, 71, 427, 3, 71, 3, 71, 5, 71, 432, 10, 71, 3, 71, 6, 71, 435, 10, 71, 13, 71, 14, 71, 436, 5, 71, 439, 10, 71, 3, 72, 3, 72, 3, 72, 3, 72, 7, 72, 445, 10, 72, 12, 72, 14, 72, 448, 11, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 7, 73, 456, 10, 73, 12, 73, 14, 73, 459, 11, 73, 3, 73, 3, 73, 3, 74, 3, 74, 7, 74, 465, 10, 74, 12, 74, 14, 74, 468, 11, 74, 3, 75, 3, 75, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 5, 77, 477, 10, 77, 3, 78, 3, 78, 3, 78, 3, 78, 7, 78, 483, 10, 78, 12, 78, 14, 78, 486, 11, 78, 3, 78, 3, 78, 3, 79, 6, 79, 491, 10, 79, 13, 79, 14, 79, 492, 3, 79, 3, 79, 3, 80, 3, 80, 2, 2, 81, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 74, 147, 75, 149, 2, 151, 2, 153, 2, 155, 76, 157, 77, 159, 78, 3, 2, 11, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 4, 2, 12, 12, 14, 15, 5, 2, 11, 12, 15, 15, 34, 34, 2, 509, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 3, 161, 3, 2, 2, 2, 5, 163, 3, 2, 2, 2, 7, 167, 3, 2, 2, 2, 9, 172, 3, 2, 2, 2, 11, 179, 3, 2, 2, 2, 13, 182, 3, 2, 2, 2, 15, 187, 3, 2, 2, 2, 17, 193, 3, 2, 2, 2, 19, 195, 3, 2, 2, 2, 21, 197, 3, 2, 2, 2, 23, 199, 3, 2, 2, 2, 25, 201, 3, 2, 2, 2, 27, 203, 3, 2, 2, 2, 29, 205, 3, 2, 2, 2, 31, 207, 3, 2, 2, 2, 33, 210, 3, 2, 2, 2, 35, 213, 3, 2, 2, 2, 37, 215, 3, 2, 2, 2, 39, 217, 3, 2, 2, 2, 41, 219, 3, 2, 2, 2, 43, 225, 3, 2, 2, 2, 45, 234, 3, 2, 2, 2, 47, 241, 3, 2, 2, 2, 49, 243, 3, 2, 2, 2, 51, 246, 3, 2, 2, 2, 53, 249, 3, 2, 2, 2, 55, 254, 3, 2, 2, 2, 57, 259, 3, 2, 2, 2, 59, 265, 3, 2, 2, 2, 61, 271, 3, 2, 2, 2, 63, 275, 3, 2, 2, 2, 65, 278, 3, 2, 2, 2, 67, 283, 3, 2, 2, 2, 69, 288, 3, 2, 2, 2, 71, 290, 3, 2, 2, 2, 73, 292, 3, 2, 2, 2, 75, 296, 3, 2, 2, 2, 77, 303, 3, 2, 2, 2, 79, 305, 3, 2, 2, 2, 81, 307, 3, 2, 2, 2, 83, 309, 3, 2, 2, 2, 85, 311, 3, 2, 2, 2, 87, 313, 3, 2, 2, 2, 89, 315, 3, 2, 2, 2, 91, 317, 3, 2, 2, 2, 93, 319, 3, 2, 2, 2, 95, 322, 3, 2, 2, 2, 97, 326, 3, 2, 2, 2, 99, 329, 3, 2, 2, 2, 101, 332, 3, 2, 2, 2, 103, 334, 3, 2, 2, 2, 105, 337, 3, 2, 2, 2, 107, 339, 3, 2, 2, 2, 109, 342, 3, 2, 2, 2, 111, 346, 3, 2, 2, 2, 113, 350, 3, 2, 2, 2, 115, 353, 3, 2, 2, 2, 117, 355, 3, 2, 2, 2, 119, 362, 3, 2, 2, 2, 121, 365, 3, 2, 2, 2, 123, 370, 3, 2, 2, 2, 125, 376, 3, 2, 2, 2, 127, 381, 3, 2, 2, 2, 129, 386, 3, 2, 2, 2, 131, 390, 3, 2, 2, 2, 133, 396, 3, 2, 2, 2, 135, 401, 3, 2, 2, 2, 137, 406, 3, 2, 2, 2, 139, 414, 3, 2, 2, 2, 141, 419, 3, 2, 2, 2, 143, 440, 3, 2, 2, 2, 145, 451, 3, 2, 2, 2, 147, 462, 3, 2, 2, 2, 149, 469, 3, 2, 2, 2, 151, 471, 3, 2, 2, 2, 153, 476, 3, 2, 2, 2, 155, 478, 3, 2, 2, 2, 157, 490, 3, 2, 2, 2, 159, 496, 3, 2, 2, 2, 161, 162, 7, 61, 2, 2, 162, 4, 3, 2, 2, 2, 163, 164, 7, 119, 2, 2, 164, 165, 7, 117, 2, 2, 165, 166, 7, 103, 2, 2, 166, 6, 3, 2, 2, 2, 167, 168, 7, 113, 2, 2, 168, 169, 7, 112, 2, 2, 169, 170, 7, 110, 2, 2, 170, 171, 7, 123, 2, 2, 171, 8, 3, 2, 2, 2, 172, 173, 7, 106, 2, 2, 173, 174, 7, 107, 2, 2, 174, 175, 7, 102, 2, 2, 175, 176, 7, 107, 2, 2, 176, 177, 7, 112, 2, 2, 177, 178, 7, 105, 2, 2, 178, 10, 3, 2, 2, 2, 179, 180, 7, 99, 2, 2, 180, 181, 7, 117, 2, 2, 181, 12, 3, 2, 2, 2, 182, 183, 7, 117, 2, 2, 183, 184, 7, 109, 2, 2, 184, 185, 7, 107, 2, 2, 185, 186, 7, 114, 2, 2, 186, 14, 3, 2, 2, 2, 187, 188, 7, 114, 2, 2, 188, 189, 7, 116, 2, 2, 189, 190, 7, 107, 2, 2, 190, 191, 7, 112, 2, 2, 191, 192, 7, 118, 2, 2, 192, 16, 3, 2, 2, 2, 193, 194, 7, 63, 2, 2, 194, 18, 3, 2, 2, 2, 195, 196, 7, 96, 2, 2, 196, 20, 3, 2, 2, 2, 197, 198, 7, 44, 2, 2, 198, 22, 3, 2, 2, 2, 199, 200, 7, 49, 2, 2, 200, 24, 3, 2, 2, 2, 201, 202, 7, 39, 2, 2, 202, 26, 3, 2, 2, 2, 203, 204, 7, 45, 2, 2, 204, 28, 3, 2, 2, 2, 205, 206, 7, 47, 2, 2, 206, 30, 3, 2, 2, 2, 207, 208, 7, 62, 2, 2, 208, 209, 7, 62, 2, 2, 209, 32, 3, 2, 2, 2, 210, 211, 7, 64, 2, 2, 211, 212, 7, 64, 2, 2, 212, 34, 3, 2, 2, 2, 213, 214, 7, 40, 2, 2, 214, 36, 3, 2, 2, 2, 215, 216, 7, 38, 2, 2, 216, 38, 3, 2, 2, 2, 217, 218, 7, 126, 2, 2, 218, 40, 3, 2, 2, 2, 219, 220, 7, 100, 2, 2, 220, 221, 7, 116, 2, 2, 221, 222, 7, 103, 2, 2, 222, 223, 7, 99, 2, 2, 223, 224, 7, 109, 2, 2, 224, 42, 3, 2, 2, 2, 225, 226, 7, 101, 2, 2, 226, 227, 7, 113, 2, 2, 227, 228, 7, 112, 2, 2, 228, 229, 7, 118, 2, 2, 229, 230, 7, 107, 2, 2, 230, 231, 7, 112, 2, 2, 231, 232, 7, 119, 2, 2, 232, 233, 7, 103, 2, 2, 233, 44, 3, 2, 2, 2, 234, 235, 7, 116, 2, 2, 235, 236, 7, 103, 2, 2, 236, 237, 7, 118, 2, 2, 237, 238, 7, 119, 2, 2, 238, 239, 7, 116, 2, 2, 239, 240, 7, 112, 2, 2, 240, 46, 3, 2, 2, 2, 241, 242, 7, 46, 2, 2, 242, 48, 3, 2, 2, 2, 243, 244, 7, 107, 2, 2, 244, 245, 7, 104, 2, 2, 245, 50, 3, 2, 2, 2, 246, 247, 7, 102, 2, 2, 247, 248, 7, 113, 2, 2, 248, 52, 3, 2, 2, 2, 249, 250, 7, 103, 2, 2, 250, 251, 7, 110, 2, 2, 251, 252, 7, 107, 2, 2, 252, 253, 7, 104, 2, 2, 253, 54, 3, 2, 2, 2, 254, 255, 7, 103, 2, 2, 255, 256, 7, 110, 2, 2, 256, 257, 7, 117, 2, 2, 257, 258, 7, 103, 2, 2, 258, 56, 3, 2, 2, 2, 259, 260, 7, 121, 2, 2, 260, 261, 7, 106, 2, 2, 261, 262, 7, 107, 2, 2, 262, 263, 7, 110, 2, 2, 263, 264, 7, 103, 2, 2, 264, 58, 3, 2, 2, 2, 265, 266, 7, 119, 2, 2, 266, 267, 7, 112, 2, 2, 267, 268, 7, 118, 2, 2, 268, 269, 7, 107, 2, 2, 269, 270, 7, 110, 2, 2, 270, 60, 3, 2, 2, 2, 271, 272, 7, 104, 2, 2, 272, 273, 7, 113, 2, 2, 273, 274, 7, 116, 2, 2, 274, 62, 3, 2, 2, 2, 275, 276, 7, 107, 2, 2, 276, 277, 7, 112, 2, 2, 277, 64, 3, 2, 2, 2, 278, 279, 7, 117, 2, 2, 279, 280, 7, 118, 2, 2, 280, 281, 7, 103, 2, 2, 281, 282, 7, 114, 2, 2, 282, 66, 3, 2, 2, 2, 283, 284, 7, 104, 2, 2, 284, 285, 7, 119, 2, 2, 285, 286, 7, 112, 2, 2, 286, 287, 7, 101, 2, 2, 287, 68, 3, 2, 2, 2, 288, 289, 7, 42, 2, 2, 289, 70, 3, 2, 2, 2, 290, 291, 7, 43, 2, 2, 291, 72, 3, 2, 2, 2, 292, 293, 7, 102, 2, 2, 293, 294, 7, 103, 2, 2, 294, 295, 7, 104, 2, 2, 295, 74, 3, 2, 2, 2, 296, 297, 7, 103, 2, 2, 297, 298, 7, 122, 2, 2, 298, 299, 7, 118, 2, 2, 299, 300, 7, 103, 2, 2, 300, 301, 7, 116, 2, 2, 301, 302, 7, 112, 2, 2, 302, 76, 3, 2, 2, 2, 303, 304, 7, 60, 2, 2, 304, 78, 3, 2, 2, 2, 305, 306, 7, 125, 2, 2, 306, 80, 3, 2, 2, 2, 307, 308, 7, 127, 2, 2, 308, 82, 3, 2, 2, 2, 309, 310, 7, 93, 2, 2, 310, 84, 3, 2, 2, 2, 311, 312, 7, 95, 2, 2, 312, 86, 3, 2, 2, 2, 313, 314, 7, 48, 2, 2, 314, 88, 3, 2, 2, 2, 315, 316, 7, 35, 2, 2, 316, 90, 3, 2, 2, 2, 317, 318, 7, 128, 2, 2, 318, 92, 3, 2, 2, 2, 319, 320, 7, 48, 2, 2, 320, 321, 7, 48, 2, 2, 321, 94, 3, 2, 2, 2, 322, 323, 7, 48, 2, 2, 323, 324, 7, 48, 2, 2, 324, 325, 7, 48, 2, 2, 325, 96, 3, 2, 2, 2, 326, 327, 7, 63, 2, 2, 327, 328, 7, 63, 2, 2, 328, 98, 3, 2, 2, 2, 329, 330, 7, 35, 2, 2, 330, 331, 7, 63, 2, 2, 331, 100, 3, 2, 2, 2, 332, 333, 7, 62, 2, 2, 333, 102, 3, 2, 2, 2, 334, 335, 7, 62, 2, 2, 335, 336, 7, 63, 2, 2, 336, 104, 3, 2, 2, 2, 337, 338, 7, 64, 2, 2, 338, 106, 3, 2, 2, 2, 339, 340, 7, 64, 2, 2, 340, 341, 7, 63, 2, 2, 341, 108, 3, 2, 2, 2, 342, 343, 7, 112, 2, 2, 343, 344, 7, 113, 2, 2, 344, 345, 7, 118, 2, 2, 345, 110, 3, 2, 2, 2, 346, 347, 7, 99, 2, 2, 347, 348, 7, 112, 2, 2, 348, 349, 7, 102, 2, 2, 349, 112, 3, 2, 2, 2, 350, 351, 7, 113, 2, 2, 351, 352, 7, 116, 2, 2, 352, 114, 3, 2, 2, 2, 353, 354, 7, 65, 2, 2, 354, 116, 3, 2, 2, 2, 355, 356, 7, 110, 2, 2, 356, 357, 7, 99, 2, 2, 357, 358, 7, 111, 2, 2, 358, 359, 7, 100, 2, 2, 359, 360, 7, 102, 2, 2, 360, 361, 7, 99, 2, 2, 361, 118, 3, 2, 2, 2, 362, 363, 7, 47, 2, 2, 363, 364, 7, 64, 2, 2, 364, 120, 3, 2, 2, 2, 365, 366, 7, 118, 2, 2, 366, 367, 7, 116, 2, 2, 367, 368, 7, 119, 2, 2, 368, 369, 7, 103, 2, 2, 369, 122, 3, 2, 2, 2, 370, 371, 7, 104, 2, 2, 371, 372, 7, 99, 2, 2, 372, 373, 7, 110, 2, 2, 373, 374, 7, 117, 2, 2, 374, 375, 7, 103, 2, 2, 375, 124, 3, 2, 2, 2, 376, 377, 7, 112, 2, 2, 377, 378, 7, 119, 2, 2, 378, 379, 7, 110, 2, 2, 379, 380, 7, 110, 2, 2, 380, 126, 3, 2, 2, 2, 381, 382, 7, 88, 2, 2, 382, 383, 7, 113, 2, 2, 383, 384, 7, 107, 2, 2, 384, 385, 7, 102, 2, 2, 385, 128, 3, 2, 2, 2, 386, 387, 7, 75, 2, 2, 387, 388, 7, 112, 2, 2, 388, 389, 7, 118, 2, 2, 389, 130, 3, 2, 2, 2, 390, 391, 7, 72, 2, 2, 391, 392, 7, 110, 2, 2, 392, 393, 7, 113, 2, 2, 393, 394, 7, 99, 2, 2, 394, 395, 7, 118, 2, 2, 395, 132, 3, 2, 2, 2, 396, 397, 7, 68, 2, 2, 397, 398, 7, 113, 2, 2, 398, 399, 7, 113, 2, 2, 399, 400, 7, 110, 2, 2, 400, 134, 3, 2, 2, 2, 401, 402, 7, 69, 2, 2, 402, 403, 7, 106, 2, 2, 403, 404, 7, 99, 2, 2, 404, 405, 7, 116, 2, 2, 405, 136, 3, 2, 2, 2, 406, 407, 7, 85, 2, 2, 407, 408, 7, 118, 2, 2, 408, 409, 7, 116, 2, 2, 409, 410, 7, 107, 2, 2, 410, 411, 7, 112, 2, 2, 411, 412, 7, 105, 2, 2, 412, 138, 3, 2, 2, 2, 413, 415, 5, 149, 75, 2, 414, 413, 3, 2, 2, 2, 415, 416, 3, 2, 2, 2, 416, 414, 3, 2, 2, 2, 416, 417, 3, 2, 2, 2, 417, 140, 3, 2, 2, 2, 418, 420, 5, 149, 75, 2, 419, 418, 3, 2, 2, 2, 420, 421, 3, 2, 2, 2, 421, 419, 3, 2, 2, 2, 421, 422, 3, 2, 2, 2, 422, 423, 3, 2, 2, 2, 423, 425, 7, 48, 2, 2, 424, 426, 5, 149, 75, 2, 425, 424, 3, 2, 2, 2, 426, 427, 3, 2, 2, 2, 427, 425, 3, 2, 2, 2, 427, 428, 3, 2, 2, 2, 428, 438, 3, 2, 2, 2, 429, 431, 7, 103, 2, 2, 430, 432, 7, 47, 2, 2, 431, 430, 3, 2, 2, 2, 431, 432, 3, 2, 2, 2, 432, 434, 3, 2, 2, 2, 433, 435, 5, 149, 75, 2, 434, 433, 3, 2, 2, 2, 435, 436, 3, 2, 2, 2, 436, 434, 3, 2, 2, 2, 436, 437, 3, 2, 2, 2, 437, 439, 3, 2, 2, 2, 438, 429, 3, 2, 2, 2, 438, 439, 3, 2, 2, 2, 439, 142, 3, 2, 2, 2, 440, 446, 7, 41, 2, 2, 441, 445, 10, 2, 2, 2, 442, 443, 7, 94, 2, 2, 443, 445, 9, 3, 2, 2, 444, 441, 3, 2, 2, 2, 444, 442, 3, 2, 2, 2, 445, 448, 3, 2, 2, 2, 446, 444, 3, 2, 2, 2, 446, 447, 3, 2, 2, 2, 447, 449, 3, 2, 2, 2, 448, 446, 3, 2, 2, 2, 449, 450, 7, 41, 2, 2, 450, 144, 3, 2, 2, 2, 451, 457, 7, 36, 2, 2, 452, 456, 10, 4, 2, 2, 453, 454, 7, 94, 2, 2, 454, 456, 9, 5, 2, 2, 455, 452, 3, 2, 2, 2, 455, 453, 3, 2, 2, 2, 456, 459, 3, 2, 2, 2, 457, 455, 3, 2, 2, 2, 457, 458, 3, 2, 2, 2, 458, 460, 3, 2, 2, 2, 459, 457, 3, 2, 2, 2, 460, 461, 7, 36, 2, 2, 461, 146, 3, 2, 2, 2, 462, 466, 5, 151, 76, 2, 463, 465, 5, 153, 77, 2, 464, 463, 3, 2, 2, 2, 465, 468, 3, 2, 2, 2, 466, 464, 3, 2, 2, 2, 466, 467, 3, 2, 2, 2, 467, 148, 3, 2, 2, 2, 468, 466, 3, 2, 2, 2, 469, 470, 9, 6, 2, 2, 470, 150, 3, 2, 2, 2, 471, 472, 9, 7, 2, 2, 472, 152, 3, 2, 2, 2, 473, 477, 5, 151, 76, 2, 474, 477, 5, 149, 75, 2, 475, 477, 9, 8, 2, 2, 476, 473, 3, 2, 2, 2, 476, 474, 3, 2, 2, 2, 476, 475, 3, 2, 2, 2, 477, 154, 3, 2, 2, 2, 478, 479, 7, 47, 2, 2, 479, 480, 7, 47, 2, 2, 480, 484, 3, 2, 2, 2, 481, 483, 10, 9, 2, 2, 482, 481, 3, 2, 2, 2, 483, 486, 3, 2, 2, 2, 484, 482, 3, 2, 2, 2, 484, 485, 3, 2, 2, 2, 485, 487, 3, 2, 2, 2, 486, 484, 3, 2, 2, 2, 487, 488, 8, 78, 2, 2, 488, 156, 3, 2, 2, 2, 489, 491, 9, 10, 2, 2, 490, 489, 3, 2, 2, 2, 491, 492, 3, 2, 2, 2, 492, 490, 3, 2, 2, 2, 492, 493, 3, 2, 2, 2, 493, 494, 3, 2, 2, 2, 494, 495, 8, 79, 2, 2, 495, 158, 3, 2, 2, 2, 496, 497, 11, 2, 2, 2, 497, 160, 3, 2, 2, 2, 17, 2, 416, 421, 427, 431, 436, 438, 444, 446, 455, 457, 466, 476, 484, 492, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py index c72ec433..3c1ec1d9 100644 --- a/src/antlr/PyxellLexer.py +++ b/src/antlr/PyxellLexer.py @@ -8,8 +8,8 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2L") - buf.write("\u01e7\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2N") + buf.write("\u01f2\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") @@ -20,200 +20,205 @@ def serializedATN(): buf.write("\t\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:") buf.write("\4;\t;\4<\t<\4=\t=\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\t") buf.write("C\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I\tI\4J\tJ\4K\tK\4L\t") - buf.write("L\4M\tM\4N\tN\3\2\3\2\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4") - buf.write("\3\4\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3\6\3\7\3\7\3") - buf.write("\7\3\7\3\7\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3\t\3\n\3\n\3\13") - buf.write("\3\13\3\f\3\f\3\r\3\r\3\16\3\16\3\17\3\17\3\20\3\20\3") - buf.write("\20\3\21\3\21\3\21\3\22\3\22\3\23\3\23\3\24\3\24\3\25") - buf.write("\3\25\3\25\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\26") - buf.write("\3\26\3\26\3\26\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\30") - buf.write("\3\30\3\31\3\31\3\31\3\32\3\32\3\32\3\33\3\33\3\33\3\33") - buf.write("\3\33\3\34\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35") - buf.write("\3\35\3\36\3\36\3\36\3\36\3\36\3\36\3\37\3\37\3\37\3\37") - buf.write("\3 \3 \3 \3!\3!\3!\3!\3!\3\"\3\"\3\"\3\"\3\"\3#\3#\3$") - buf.write("\3$\3%\3%\3%\3%\3&\3&\3&\3&\3&\3&\3&\3\'\3\'\3(\3(\3)") - buf.write("\3)\3*\3*\3+\3+\3,\3,\3-\3-\3.\3.\3.\3/\3/\3/\3/\3\60") - buf.write("\3\60\3\60\3\61\3\61\3\61\3\62\3\62\3\63\3\63\3\63\3\64") - buf.write("\3\64\3\65\3\65\3\65\3\66\3\66\3\66\3\66\3\67\3\67\3\67") - buf.write("\3\67\38\38\38\39\39\3:\3:\3:\3:\3:\3:\3:\3;\3;\3;\3<") - buf.write("\3<\3<\3<\3<\3=\3=\3=\3=\3=\3=\3>\3>\3>\3>\3>\3?\3?\3") - buf.write("?\3?\3@\3@\3@\3@\3@\3@\3A\3A\3A\3A\3A\3B\3B\3B\3B\3B\3") - buf.write("C\3C\3C\3C\3C\3C\3C\3D\6D\u0194\nD\rD\16D\u0195\3E\6E") - buf.write("\u0199\nE\rE\16E\u019a\3E\3E\6E\u019f\nE\rE\16E\u01a0") - buf.write("\3E\3E\5E\u01a5\nE\3E\6E\u01a8\nE\rE\16E\u01a9\5E\u01ac") - buf.write("\nE\3F\3F\3F\3F\7F\u01b2\nF\fF\16F\u01b5\13F\3F\3F\3G") - buf.write("\3G\3G\3G\7G\u01bd\nG\fG\16G\u01c0\13G\3G\3G\3H\3H\7H") - buf.write("\u01c6\nH\fH\16H\u01c9\13H\3I\3I\3J\3J\3K\3K\3K\5K\u01d2") - buf.write("\nK\3L\3L\3L\3L\7L\u01d8\nL\fL\16L\u01db\13L\3L\3L\3M") - buf.write("\6M\u01e0\nM\rM\16M\u01e1\3M\3M\3N\3N\2\2O\3\3\5\4\7\5") - buf.write("\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35") - buf.write("\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33") - buf.write("\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[") - buf.write("/]\60_\61a\62c\63e\64g\65i\66k\67m8o9q:s;u{?}@\177") - buf.write("A\u0081B\u0083C\u0085D\u0087E\u0089F\u008bG\u008dH\u008f") - buf.write("I\u0091\2\u0093\2\u0095\2\u0097J\u0099K\u009bL\3\2\13") - buf.write("\4\2))^^\6\2))^^ppvv\4\2$$^^\6\2$$^^ppvv\3\2\62;\5\2C") - buf.write("\\aac|\4\2))aa\4\2\f\f\16\17\5\2\13\f\17\17\"\"\2\u01f2") - buf.write("\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13") - buf.write("\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3") - buf.write("\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2") - buf.write("\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2") - buf.write("%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2") - buf.write("\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67") - buf.write("\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2") - buf.write("A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2") - buf.write("\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2") - buf.write("\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2") - buf.write("\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3") - buf.write("\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2q") - buf.write("\3\2\2\2\2s\3\2\2\2\2u\3\2\2\2\2w\3\2\2\2\2y\3\2\2\2\2") - buf.write("{\3\2\2\2\2}\3\2\2\2\2\177\3\2\2\2\2\u0081\3\2\2\2\2\u0083") - buf.write("\3\2\2\2\2\u0085\3\2\2\2\2\u0087\3\2\2\2\2\u0089\3\2\2") - buf.write("\2\2\u008b\3\2\2\2\2\u008d\3\2\2\2\2\u008f\3\2\2\2\2\u0097") - buf.write("\3\2\2\2\2\u0099\3\2\2\2\2\u009b\3\2\2\2\3\u009d\3\2\2") - buf.write("\2\5\u009f\3\2\2\2\7\u00a3\3\2\2\2\t\u00a8\3\2\2\2\13") - buf.write("\u00af\3\2\2\2\r\u00b2\3\2\2\2\17\u00b7\3\2\2\2\21\u00bd") - buf.write("\3\2\2\2\23\u00bf\3\2\2\2\25\u00c1\3\2\2\2\27\u00c3\3") - buf.write("\2\2\2\31\u00c5\3\2\2\2\33\u00c7\3\2\2\2\35\u00c9\3\2") - buf.write("\2\2\37\u00cb\3\2\2\2!\u00ce\3\2\2\2#\u00d1\3\2\2\2%\u00d3") - buf.write("\3\2\2\2\'\u00d5\3\2\2\2)\u00d7\3\2\2\2+\u00dd\3\2\2\2") - buf.write("-\u00e6\3\2\2\2/\u00ed\3\2\2\2\61\u00ef\3\2\2\2\63\u00f2") - buf.write("\3\2\2\2\65\u00f5\3\2\2\2\67\u00fa\3\2\2\29\u00ff\3\2") - buf.write("\2\2;\u0105\3\2\2\2=\u010b\3\2\2\2?\u010f\3\2\2\2A\u0112") - buf.write("\3\2\2\2C\u0117\3\2\2\2E\u011c\3\2\2\2G\u011e\3\2\2\2") - buf.write("I\u0120\3\2\2\2K\u0124\3\2\2\2M\u012b\3\2\2\2O\u012d\3") - buf.write("\2\2\2Q\u012f\3\2\2\2S\u0131\3\2\2\2U\u0133\3\2\2\2W\u0135") - buf.write("\3\2\2\2Y\u0137\3\2\2\2[\u0139\3\2\2\2]\u013c\3\2\2\2") - buf.write("_\u0140\3\2\2\2a\u0143\3\2\2\2c\u0146\3\2\2\2e\u0148\3") - buf.write("\2\2\2g\u014b\3\2\2\2i\u014d\3\2\2\2k\u0150\3\2\2\2m\u0154") - buf.write("\3\2\2\2o\u0158\3\2\2\2q\u015b\3\2\2\2s\u015d\3\2\2\2") - buf.write("u\u0164\3\2\2\2w\u0167\3\2\2\2y\u016c\3\2\2\2{\u0172\3") - buf.write("\2\2\2}\u0177\3\2\2\2\177\u017b\3\2\2\2\u0081\u0181\3") - buf.write("\2\2\2\u0083\u0186\3\2\2\2\u0085\u018b\3\2\2\2\u0087\u0193") - buf.write("\3\2\2\2\u0089\u0198\3\2\2\2\u008b\u01ad\3\2\2\2\u008d") - buf.write("\u01b8\3\2\2\2\u008f\u01c3\3\2\2\2\u0091\u01ca\3\2\2\2") - buf.write("\u0093\u01cc\3\2\2\2\u0095\u01d1\3\2\2\2\u0097\u01d3\3") - buf.write("\2\2\2\u0099\u01df\3\2\2\2\u009b\u01e5\3\2\2\2\u009d\u009e") - buf.write("\7=\2\2\u009e\4\3\2\2\2\u009f\u00a0\7w\2\2\u00a0\u00a1") - buf.write("\7u\2\2\u00a1\u00a2\7g\2\2\u00a2\6\3\2\2\2\u00a3\u00a4") - buf.write("\7q\2\2\u00a4\u00a5\7p\2\2\u00a5\u00a6\7n\2\2\u00a6\u00a7") - buf.write("\7{\2\2\u00a7\b\3\2\2\2\u00a8\u00a9\7j\2\2\u00a9\u00aa") - buf.write("\7k\2\2\u00aa\u00ab\7f\2\2\u00ab\u00ac\7k\2\2\u00ac\u00ad") - buf.write("\7p\2\2\u00ad\u00ae\7i\2\2\u00ae\n\3\2\2\2\u00af\u00b0") - buf.write("\7c\2\2\u00b0\u00b1\7u\2\2\u00b1\f\3\2\2\2\u00b2\u00b3") - buf.write("\7u\2\2\u00b3\u00b4\7m\2\2\u00b4\u00b5\7k\2\2\u00b5\u00b6") - buf.write("\7r\2\2\u00b6\16\3\2\2\2\u00b7\u00b8\7r\2\2\u00b8\u00b9") - buf.write("\7t\2\2\u00b9\u00ba\7k\2\2\u00ba\u00bb\7p\2\2\u00bb\u00bc") - buf.write("\7v\2\2\u00bc\20\3\2\2\2\u00bd\u00be\7?\2\2\u00be\22\3") - buf.write("\2\2\2\u00bf\u00c0\7`\2\2\u00c0\24\3\2\2\2\u00c1\u00c2") - buf.write("\7,\2\2\u00c2\26\3\2\2\2\u00c3\u00c4\7\61\2\2\u00c4\30") - buf.write("\3\2\2\2\u00c5\u00c6\7\'\2\2\u00c6\32\3\2\2\2\u00c7\u00c8") - buf.write("\7-\2\2\u00c8\34\3\2\2\2\u00c9\u00ca\7/\2\2\u00ca\36\3") - buf.write("\2\2\2\u00cb\u00cc\7>\2\2\u00cc\u00cd\7>\2\2\u00cd \3") - buf.write("\2\2\2\u00ce\u00cf\7@\2\2\u00cf\u00d0\7@\2\2\u00d0\"\3") - buf.write("\2\2\2\u00d1\u00d2\7(\2\2\u00d2$\3\2\2\2\u00d3\u00d4\7") - buf.write("&\2\2\u00d4&\3\2\2\2\u00d5\u00d6\7~\2\2\u00d6(\3\2\2\2") - buf.write("\u00d7\u00d8\7d\2\2\u00d8\u00d9\7t\2\2\u00d9\u00da\7g") - buf.write("\2\2\u00da\u00db\7c\2\2\u00db\u00dc\7m\2\2\u00dc*\3\2") - buf.write("\2\2\u00dd\u00de\7e\2\2\u00de\u00df\7q\2\2\u00df\u00e0") - buf.write("\7p\2\2\u00e0\u00e1\7v\2\2\u00e1\u00e2\7k\2\2\u00e2\u00e3") - buf.write("\7p\2\2\u00e3\u00e4\7w\2\2\u00e4\u00e5\7g\2\2\u00e5,\3") - buf.write("\2\2\2\u00e6\u00e7\7t\2\2\u00e7\u00e8\7g\2\2\u00e8\u00e9") - buf.write("\7v\2\2\u00e9\u00ea\7w\2\2\u00ea\u00eb\7t\2\2\u00eb\u00ec") - buf.write("\7p\2\2\u00ec.\3\2\2\2\u00ed\u00ee\7.\2\2\u00ee\60\3\2") - buf.write("\2\2\u00ef\u00f0\7k\2\2\u00f0\u00f1\7h\2\2\u00f1\62\3") - buf.write("\2\2\2\u00f2\u00f3\7f\2\2\u00f3\u00f4\7q\2\2\u00f4\64") - buf.write("\3\2\2\2\u00f5\u00f6\7g\2\2\u00f6\u00f7\7n\2\2\u00f7\u00f8") - buf.write("\7k\2\2\u00f8\u00f9\7h\2\2\u00f9\66\3\2\2\2\u00fa\u00fb") - buf.write("\7g\2\2\u00fb\u00fc\7n\2\2\u00fc\u00fd\7u\2\2\u00fd\u00fe") - buf.write("\7g\2\2\u00fe8\3\2\2\2\u00ff\u0100\7y\2\2\u0100\u0101") - buf.write("\7j\2\2\u0101\u0102\7k\2\2\u0102\u0103\7n\2\2\u0103\u0104") - buf.write("\7g\2\2\u0104:\3\2\2\2\u0105\u0106\7w\2\2\u0106\u0107") - buf.write("\7p\2\2\u0107\u0108\7v\2\2\u0108\u0109\7k\2\2\u0109\u010a") - buf.write("\7n\2\2\u010a<\3\2\2\2\u010b\u010c\7h\2\2\u010c\u010d") - buf.write("\7q\2\2\u010d\u010e\7t\2\2\u010e>\3\2\2\2\u010f\u0110") - buf.write("\7k\2\2\u0110\u0111\7p\2\2\u0111@\3\2\2\2\u0112\u0113") - buf.write("\7u\2\2\u0113\u0114\7v\2\2\u0114\u0115\7g\2\2\u0115\u0116") - buf.write("\7r\2\2\u0116B\3\2\2\2\u0117\u0118\7h\2\2\u0118\u0119") - buf.write("\7w\2\2\u0119\u011a\7p\2\2\u011a\u011b\7e\2\2\u011bD\3") - buf.write("\2\2\2\u011c\u011d\7*\2\2\u011dF\3\2\2\2\u011e\u011f\7") - buf.write("+\2\2\u011fH\3\2\2\2\u0120\u0121\7f\2\2\u0121\u0122\7") - buf.write("g\2\2\u0122\u0123\7h\2\2\u0123J\3\2\2\2\u0124\u0125\7") - buf.write("g\2\2\u0125\u0126\7z\2\2\u0126\u0127\7v\2\2\u0127\u0128") - buf.write("\7g\2\2\u0128\u0129\7t\2\2\u0129\u012a\7p\2\2\u012aL\3") - buf.write("\2\2\2\u012b\u012c\7<\2\2\u012cN\3\2\2\2\u012d\u012e\7") - buf.write("}\2\2\u012eP\3\2\2\2\u012f\u0130\7\177\2\2\u0130R\3\2") - buf.write("\2\2\u0131\u0132\7]\2\2\u0132T\3\2\2\2\u0133\u0134\7_") - buf.write("\2\2\u0134V\3\2\2\2\u0135\u0136\7\60\2\2\u0136X\3\2\2") - buf.write("\2\u0137\u0138\7\u0080\2\2\u0138Z\3\2\2\2\u0139\u013a") - buf.write("\7\60\2\2\u013a\u013b\7\60\2\2\u013b\\\3\2\2\2\u013c\u013d") - buf.write("\7\60\2\2\u013d\u013e\7\60\2\2\u013e\u013f\7\60\2\2\u013f") - buf.write("^\3\2\2\2\u0140\u0141\7?\2\2\u0141\u0142\7?\2\2\u0142") - buf.write("`\3\2\2\2\u0143\u0144\7#\2\2\u0144\u0145\7?\2\2\u0145") - buf.write("b\3\2\2\2\u0146\u0147\7>\2\2\u0147d\3\2\2\2\u0148\u0149") - buf.write("\7>\2\2\u0149\u014a\7?\2\2\u014af\3\2\2\2\u014b\u014c") - buf.write("\7@\2\2\u014ch\3\2\2\2\u014d\u014e\7@\2\2\u014e\u014f") - buf.write("\7?\2\2\u014fj\3\2\2\2\u0150\u0151\7p\2\2\u0151\u0152") - buf.write("\7q\2\2\u0152\u0153\7v\2\2\u0153l\3\2\2\2\u0154\u0155") - buf.write("\7c\2\2\u0155\u0156\7p\2\2\u0156\u0157\7f\2\2\u0157n\3") - buf.write("\2\2\2\u0158\u0159\7q\2\2\u0159\u015a\7t\2\2\u015ap\3") - buf.write("\2\2\2\u015b\u015c\7A\2\2\u015cr\3\2\2\2\u015d\u015e\7") - buf.write("n\2\2\u015e\u015f\7c\2\2\u015f\u0160\7o\2\2\u0160\u0161") - buf.write("\7d\2\2\u0161\u0162\7f\2\2\u0162\u0163\7c\2\2\u0163t\3") - buf.write("\2\2\2\u0164\u0165\7/\2\2\u0165\u0166\7@\2\2\u0166v\3") - buf.write("\2\2\2\u0167\u0168\7v\2\2\u0168\u0169\7t\2\2\u0169\u016a") - buf.write("\7w\2\2\u016a\u016b\7g\2\2\u016bx\3\2\2\2\u016c\u016d") - buf.write("\7h\2\2\u016d\u016e\7c\2\2\u016e\u016f\7n\2\2\u016f\u0170") - buf.write("\7u\2\2\u0170\u0171\7g\2\2\u0171z\3\2\2\2\u0172\u0173") - buf.write("\7X\2\2\u0173\u0174\7q\2\2\u0174\u0175\7k\2\2\u0175\u0176") - buf.write("\7f\2\2\u0176|\3\2\2\2\u0177\u0178\7K\2\2\u0178\u0179") - buf.write("\7p\2\2\u0179\u017a\7v\2\2\u017a~\3\2\2\2\u017b\u017c") - buf.write("\7H\2\2\u017c\u017d\7n\2\2\u017d\u017e\7q\2\2\u017e\u017f") - buf.write("\7c\2\2\u017f\u0180\7v\2\2\u0180\u0080\3\2\2\2\u0181\u0182") - buf.write("\7D\2\2\u0182\u0183\7q\2\2\u0183\u0184\7q\2\2\u0184\u0185") - buf.write("\7n\2\2\u0185\u0082\3\2\2\2\u0186\u0187\7E\2\2\u0187\u0188") - buf.write("\7j\2\2\u0188\u0189\7c\2\2\u0189\u018a\7t\2\2\u018a\u0084") - buf.write("\3\2\2\2\u018b\u018c\7U\2\2\u018c\u018d\7v\2\2\u018d\u018e") - buf.write("\7t\2\2\u018e\u018f\7k\2\2\u018f\u0190\7p\2\2\u0190\u0191") - buf.write("\7i\2\2\u0191\u0086\3\2\2\2\u0192\u0194\5\u0091I\2\u0193") - buf.write("\u0192\3\2\2\2\u0194\u0195\3\2\2\2\u0195\u0193\3\2\2\2") - buf.write("\u0195\u0196\3\2\2\2\u0196\u0088\3\2\2\2\u0197\u0199\5") - buf.write("\u0091I\2\u0198\u0197\3\2\2\2\u0199\u019a\3\2\2\2\u019a") - buf.write("\u0198\3\2\2\2\u019a\u019b\3\2\2\2\u019b\u019c\3\2\2\2") - buf.write("\u019c\u019e\7\60\2\2\u019d\u019f\5\u0091I\2\u019e\u019d") - buf.write("\3\2\2\2\u019f\u01a0\3\2\2\2\u01a0\u019e\3\2\2\2\u01a0") - buf.write("\u01a1\3\2\2\2\u01a1\u01ab\3\2\2\2\u01a2\u01a4\7g\2\2") - buf.write("\u01a3\u01a5\7/\2\2\u01a4\u01a3\3\2\2\2\u01a4\u01a5\3") - buf.write("\2\2\2\u01a5\u01a7\3\2\2\2\u01a6\u01a8\5\u0091I\2\u01a7") - buf.write("\u01a6\3\2\2\2\u01a8\u01a9\3\2\2\2\u01a9\u01a7\3\2\2\2") - buf.write("\u01a9\u01aa\3\2\2\2\u01aa\u01ac\3\2\2\2\u01ab\u01a2\3") - buf.write("\2\2\2\u01ab\u01ac\3\2\2\2\u01ac\u008a\3\2\2\2\u01ad\u01b3") - buf.write("\7)\2\2\u01ae\u01b2\n\2\2\2\u01af\u01b0\7^\2\2\u01b0\u01b2") - buf.write("\t\3\2\2\u01b1\u01ae\3\2\2\2\u01b1\u01af\3\2\2\2\u01b2") - buf.write("\u01b5\3\2\2\2\u01b3\u01b1\3\2\2\2\u01b3\u01b4\3\2\2\2") - buf.write("\u01b4\u01b6\3\2\2\2\u01b5\u01b3\3\2\2\2\u01b6\u01b7\7") - buf.write(")\2\2\u01b7\u008c\3\2\2\2\u01b8\u01be\7$\2\2\u01b9\u01bd") - buf.write("\n\4\2\2\u01ba\u01bb\7^\2\2\u01bb\u01bd\t\5\2\2\u01bc") - buf.write("\u01b9\3\2\2\2\u01bc\u01ba\3\2\2\2\u01bd\u01c0\3\2\2\2") - buf.write("\u01be\u01bc\3\2\2\2\u01be\u01bf\3\2\2\2\u01bf\u01c1\3") - buf.write("\2\2\2\u01c0\u01be\3\2\2\2\u01c1\u01c2\7$\2\2\u01c2\u008e") - buf.write("\3\2\2\2\u01c3\u01c7\5\u0093J\2\u01c4\u01c6\5\u0095K\2") - buf.write("\u01c5\u01c4\3\2\2\2\u01c6\u01c9\3\2\2\2\u01c7\u01c5\3") - buf.write("\2\2\2\u01c7\u01c8\3\2\2\2\u01c8\u0090\3\2\2\2\u01c9\u01c7") - buf.write("\3\2\2\2\u01ca\u01cb\t\6\2\2\u01cb\u0092\3\2\2\2\u01cc") - buf.write("\u01cd\t\7\2\2\u01cd\u0094\3\2\2\2\u01ce\u01d2\5\u0093") - buf.write("J\2\u01cf\u01d2\5\u0091I\2\u01d0\u01d2\t\b\2\2\u01d1\u01ce") - buf.write("\3\2\2\2\u01d1\u01cf\3\2\2\2\u01d1\u01d0\3\2\2\2\u01d2") - buf.write("\u0096\3\2\2\2\u01d3\u01d4\7/\2\2\u01d4\u01d5\7/\2\2\u01d5") - buf.write("\u01d9\3\2\2\2\u01d6\u01d8\n\t\2\2\u01d7\u01d6\3\2\2\2") - buf.write("\u01d8\u01db\3\2\2\2\u01d9\u01d7\3\2\2\2\u01d9\u01da\3") - buf.write("\2\2\2\u01da\u01dc\3\2\2\2\u01db\u01d9\3\2\2\2\u01dc\u01dd") - buf.write("\bL\2\2\u01dd\u0098\3\2\2\2\u01de\u01e0\t\n\2\2\u01df") - buf.write("\u01de\3\2\2\2\u01e0\u01e1\3\2\2\2\u01e1\u01df\3\2\2\2") - buf.write("\u01e1\u01e2\3\2\2\2\u01e2\u01e3\3\2\2\2\u01e3\u01e4\b") - buf.write("M\2\2\u01e4\u009a\3\2\2\2\u01e5\u01e6\13\2\2\2\u01e6\u009c") - buf.write("\3\2\2\2\21\2\u0195\u019a\u01a0\u01a4\u01a9\u01ab\u01b1") - buf.write("\u01b3\u01bc\u01be\u01c7\u01d1\u01d9\u01e1\3\b\2\2") + buf.write("L\4M\tM\4N\tN\4O\tO\4P\tP\3\2\3\2\3\3\3\3\3\3\3\3\3\4") + buf.write("\3\4\3\4\3\4\3\4\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3") + buf.write("\6\3\7\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3\t") + buf.write("\3\n\3\n\3\13\3\13\3\f\3\f\3\r\3\r\3\16\3\16\3\17\3\17") + buf.write("\3\20\3\20\3\20\3\21\3\21\3\21\3\22\3\22\3\23\3\23\3\24") + buf.write("\3\24\3\25\3\25\3\25\3\25\3\25\3\25\3\26\3\26\3\26\3\26") + buf.write("\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27\3\27\3\27") + buf.write("\3\27\3\30\3\30\3\31\3\31\3\31\3\32\3\32\3\32\3\33\3\33") + buf.write("\3\33\3\33\3\33\3\34\3\34\3\34\3\34\3\34\3\35\3\35\3\35") + buf.write("\3\35\3\35\3\35\3\36\3\36\3\36\3\36\3\36\3\36\3\37\3\37") + buf.write("\3\37\3\37\3 \3 \3 \3!\3!\3!\3!\3!\3\"\3\"\3\"\3\"\3\"") + buf.write("\3#\3#\3$\3$\3%\3%\3%\3%\3&\3&\3&\3&\3&\3&\3&\3\'\3\'") + buf.write("\3(\3(\3)\3)\3*\3*\3+\3+\3,\3,\3-\3-\3.\3.\3/\3/\3/\3") + buf.write("\60\3\60\3\60\3\60\3\61\3\61\3\61\3\62\3\62\3\62\3\63") + buf.write("\3\63\3\64\3\64\3\64\3\65\3\65\3\66\3\66\3\66\3\67\3\67") + buf.write("\3\67\3\67\38\38\38\38\39\39\39\3:\3:\3;\3;\3;\3;\3;\3") + buf.write(";\3;\3<\3<\3<\3=\3=\3=\3=\3=\3>\3>\3>\3>\3>\3>\3?\3?\3") + buf.write("?\3?\3?\3@\3@\3@\3@\3@\3A\3A\3A\3A\3B\3B\3B\3B\3B\3B\3") + buf.write("C\3C\3C\3C\3C\3D\3D\3D\3D\3D\3E\3E\3E\3E\3E\3E\3E\3F\6") + buf.write("F\u019f\nF\rF\16F\u01a0\3G\6G\u01a4\nG\rG\16G\u01a5\3") + buf.write("G\3G\6G\u01aa\nG\rG\16G\u01ab\3G\3G\5G\u01b0\nG\3G\6G") + buf.write("\u01b3\nG\rG\16G\u01b4\5G\u01b7\nG\3H\3H\3H\3H\7H\u01bd") + buf.write("\nH\fH\16H\u01c0\13H\3H\3H\3I\3I\3I\3I\7I\u01c8\nI\fI") + buf.write("\16I\u01cb\13I\3I\3I\3J\3J\7J\u01d1\nJ\fJ\16J\u01d4\13") + buf.write("J\3K\3K\3L\3L\3M\3M\3M\5M\u01dd\nM\3N\3N\3N\3N\7N\u01e3") + buf.write("\nN\fN\16N\u01e6\13N\3N\3N\3O\6O\u01eb\nO\rO\16O\u01ec") + buf.write("\3O\3O\3P\3P\2\2Q\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23") + buf.write("\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25") + buf.write(")\26+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A") + buf.write("\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65") + buf.write("i\66k\67m8o9q:s;u{?}@\177A\u0081B\u0083C\u0085D\u0087") + buf.write("E\u0089F\u008bG\u008dH\u008fI\u0091J\u0093K\u0095\2\u0097") + buf.write("\2\u0099\2\u009bL\u009dM\u009fN\3\2\13\4\2))^^\6\2))^") + buf.write("^ppvv\4\2$$^^\6\2$$^^ppvv\3\2\62;\5\2C\\aac|\4\2))aa\4") + buf.write("\2\f\f\16\17\5\2\13\f\17\17\"\"\2\u01fd\2\3\3\2\2\2\2") + buf.write("\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3") + buf.write("\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2") + buf.write("\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2") + buf.write("\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3") + buf.write("\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61") + buf.write("\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2") + buf.write("\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3") + buf.write("\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M") + buf.write("\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2") + buf.write("W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2") + buf.write("\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2") + buf.write("\2\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2\2s\3\2") + buf.write("\2\2\2u\3\2\2\2\2w\3\2\2\2\2y\3\2\2\2\2{\3\2\2\2\2}\3") + buf.write("\2\2\2\2\177\3\2\2\2\2\u0081\3\2\2\2\2\u0083\3\2\2\2\2") + buf.write("\u0085\3\2\2\2\2\u0087\3\2\2\2\2\u0089\3\2\2\2\2\u008b") + buf.write("\3\2\2\2\2\u008d\3\2\2\2\2\u008f\3\2\2\2\2\u0091\3\2\2") + buf.write("\2\2\u0093\3\2\2\2\2\u009b\3\2\2\2\2\u009d\3\2\2\2\2\u009f") + buf.write("\3\2\2\2\3\u00a1\3\2\2\2\5\u00a3\3\2\2\2\7\u00a7\3\2\2") + buf.write("\2\t\u00ac\3\2\2\2\13\u00b3\3\2\2\2\r\u00b6\3\2\2\2\17") + buf.write("\u00bb\3\2\2\2\21\u00c1\3\2\2\2\23\u00c3\3\2\2\2\25\u00c5") + buf.write("\3\2\2\2\27\u00c7\3\2\2\2\31\u00c9\3\2\2\2\33\u00cb\3") + buf.write("\2\2\2\35\u00cd\3\2\2\2\37\u00cf\3\2\2\2!\u00d2\3\2\2") + buf.write("\2#\u00d5\3\2\2\2%\u00d7\3\2\2\2\'\u00d9\3\2\2\2)\u00db") + buf.write("\3\2\2\2+\u00e1\3\2\2\2-\u00ea\3\2\2\2/\u00f1\3\2\2\2") + buf.write("\61\u00f3\3\2\2\2\63\u00f6\3\2\2\2\65\u00f9\3\2\2\2\67") + buf.write("\u00fe\3\2\2\29\u0103\3\2\2\2;\u0109\3\2\2\2=\u010f\3") + buf.write("\2\2\2?\u0113\3\2\2\2A\u0116\3\2\2\2C\u011b\3\2\2\2E\u0120") + buf.write("\3\2\2\2G\u0122\3\2\2\2I\u0124\3\2\2\2K\u0128\3\2\2\2") + buf.write("M\u012f\3\2\2\2O\u0131\3\2\2\2Q\u0133\3\2\2\2S\u0135\3") + buf.write("\2\2\2U\u0137\3\2\2\2W\u0139\3\2\2\2Y\u013b\3\2\2\2[\u013d") + buf.write("\3\2\2\2]\u013f\3\2\2\2_\u0142\3\2\2\2a\u0146\3\2\2\2") + buf.write("c\u0149\3\2\2\2e\u014c\3\2\2\2g\u014e\3\2\2\2i\u0151\3") + buf.write("\2\2\2k\u0153\3\2\2\2m\u0156\3\2\2\2o\u015a\3\2\2\2q\u015e") + buf.write("\3\2\2\2s\u0161\3\2\2\2u\u0163\3\2\2\2w\u016a\3\2\2\2") + buf.write("y\u016d\3\2\2\2{\u0172\3\2\2\2}\u0178\3\2\2\2\177\u017d") + buf.write("\3\2\2\2\u0081\u0182\3\2\2\2\u0083\u0186\3\2\2\2\u0085") + buf.write("\u018c\3\2\2\2\u0087\u0191\3\2\2\2\u0089\u0196\3\2\2\2") + buf.write("\u008b\u019e\3\2\2\2\u008d\u01a3\3\2\2\2\u008f\u01b8\3") + buf.write("\2\2\2\u0091\u01c3\3\2\2\2\u0093\u01ce\3\2\2\2\u0095\u01d5") + buf.write("\3\2\2\2\u0097\u01d7\3\2\2\2\u0099\u01dc\3\2\2\2\u009b") + buf.write("\u01de\3\2\2\2\u009d\u01ea\3\2\2\2\u009f\u01f0\3\2\2\2") + buf.write("\u00a1\u00a2\7=\2\2\u00a2\4\3\2\2\2\u00a3\u00a4\7w\2\2") + buf.write("\u00a4\u00a5\7u\2\2\u00a5\u00a6\7g\2\2\u00a6\6\3\2\2\2") + buf.write("\u00a7\u00a8\7q\2\2\u00a8\u00a9\7p\2\2\u00a9\u00aa\7n") + buf.write("\2\2\u00aa\u00ab\7{\2\2\u00ab\b\3\2\2\2\u00ac\u00ad\7") + buf.write("j\2\2\u00ad\u00ae\7k\2\2\u00ae\u00af\7f\2\2\u00af\u00b0") + buf.write("\7k\2\2\u00b0\u00b1\7p\2\2\u00b1\u00b2\7i\2\2\u00b2\n") + buf.write("\3\2\2\2\u00b3\u00b4\7c\2\2\u00b4\u00b5\7u\2\2\u00b5\f") + buf.write("\3\2\2\2\u00b6\u00b7\7u\2\2\u00b7\u00b8\7m\2\2\u00b8\u00b9") + buf.write("\7k\2\2\u00b9\u00ba\7r\2\2\u00ba\16\3\2\2\2\u00bb\u00bc") + buf.write("\7r\2\2\u00bc\u00bd\7t\2\2\u00bd\u00be\7k\2\2\u00be\u00bf") + buf.write("\7p\2\2\u00bf\u00c0\7v\2\2\u00c0\20\3\2\2\2\u00c1\u00c2") + buf.write("\7?\2\2\u00c2\22\3\2\2\2\u00c3\u00c4\7`\2\2\u00c4\24\3") + buf.write("\2\2\2\u00c5\u00c6\7,\2\2\u00c6\26\3\2\2\2\u00c7\u00c8") + buf.write("\7\61\2\2\u00c8\30\3\2\2\2\u00c9\u00ca\7\'\2\2\u00ca\32") + buf.write("\3\2\2\2\u00cb\u00cc\7-\2\2\u00cc\34\3\2\2\2\u00cd\u00ce") + buf.write("\7/\2\2\u00ce\36\3\2\2\2\u00cf\u00d0\7>\2\2\u00d0\u00d1") + buf.write("\7>\2\2\u00d1 \3\2\2\2\u00d2\u00d3\7@\2\2\u00d3\u00d4") + buf.write("\7@\2\2\u00d4\"\3\2\2\2\u00d5\u00d6\7(\2\2\u00d6$\3\2") + buf.write("\2\2\u00d7\u00d8\7&\2\2\u00d8&\3\2\2\2\u00d9\u00da\7~") + buf.write("\2\2\u00da(\3\2\2\2\u00db\u00dc\7d\2\2\u00dc\u00dd\7t") + buf.write("\2\2\u00dd\u00de\7g\2\2\u00de\u00df\7c\2\2\u00df\u00e0") + buf.write("\7m\2\2\u00e0*\3\2\2\2\u00e1\u00e2\7e\2\2\u00e2\u00e3") + buf.write("\7q\2\2\u00e3\u00e4\7p\2\2\u00e4\u00e5\7v\2\2\u00e5\u00e6") + buf.write("\7k\2\2\u00e6\u00e7\7p\2\2\u00e7\u00e8\7w\2\2\u00e8\u00e9") + buf.write("\7g\2\2\u00e9,\3\2\2\2\u00ea\u00eb\7t\2\2\u00eb\u00ec") + buf.write("\7g\2\2\u00ec\u00ed\7v\2\2\u00ed\u00ee\7w\2\2\u00ee\u00ef") + buf.write("\7t\2\2\u00ef\u00f0\7p\2\2\u00f0.\3\2\2\2\u00f1\u00f2") + buf.write("\7.\2\2\u00f2\60\3\2\2\2\u00f3\u00f4\7k\2\2\u00f4\u00f5") + buf.write("\7h\2\2\u00f5\62\3\2\2\2\u00f6\u00f7\7f\2\2\u00f7\u00f8") + buf.write("\7q\2\2\u00f8\64\3\2\2\2\u00f9\u00fa\7g\2\2\u00fa\u00fb") + buf.write("\7n\2\2\u00fb\u00fc\7k\2\2\u00fc\u00fd\7h\2\2\u00fd\66") + buf.write("\3\2\2\2\u00fe\u00ff\7g\2\2\u00ff\u0100\7n\2\2\u0100\u0101") + buf.write("\7u\2\2\u0101\u0102\7g\2\2\u01028\3\2\2\2\u0103\u0104") + buf.write("\7y\2\2\u0104\u0105\7j\2\2\u0105\u0106\7k\2\2\u0106\u0107") + buf.write("\7n\2\2\u0107\u0108\7g\2\2\u0108:\3\2\2\2\u0109\u010a") + buf.write("\7w\2\2\u010a\u010b\7p\2\2\u010b\u010c\7v\2\2\u010c\u010d") + buf.write("\7k\2\2\u010d\u010e\7n\2\2\u010e<\3\2\2\2\u010f\u0110") + buf.write("\7h\2\2\u0110\u0111\7q\2\2\u0111\u0112\7t\2\2\u0112>\3") + buf.write("\2\2\2\u0113\u0114\7k\2\2\u0114\u0115\7p\2\2\u0115@\3") + buf.write("\2\2\2\u0116\u0117\7u\2\2\u0117\u0118\7v\2\2\u0118\u0119") + buf.write("\7g\2\2\u0119\u011a\7r\2\2\u011aB\3\2\2\2\u011b\u011c") + buf.write("\7h\2\2\u011c\u011d\7w\2\2\u011d\u011e\7p\2\2\u011e\u011f") + buf.write("\7e\2\2\u011fD\3\2\2\2\u0120\u0121\7*\2\2\u0121F\3\2\2") + buf.write("\2\u0122\u0123\7+\2\2\u0123H\3\2\2\2\u0124\u0125\7f\2") + buf.write("\2\u0125\u0126\7g\2\2\u0126\u0127\7h\2\2\u0127J\3\2\2") + buf.write("\2\u0128\u0129\7g\2\2\u0129\u012a\7z\2\2\u012a\u012b\7") + buf.write("v\2\2\u012b\u012c\7g\2\2\u012c\u012d\7t\2\2\u012d\u012e") + buf.write("\7p\2\2\u012eL\3\2\2\2\u012f\u0130\7<\2\2\u0130N\3\2\2") + buf.write("\2\u0131\u0132\7}\2\2\u0132P\3\2\2\2\u0133\u0134\7\177") + buf.write("\2\2\u0134R\3\2\2\2\u0135\u0136\7]\2\2\u0136T\3\2\2\2") + buf.write("\u0137\u0138\7_\2\2\u0138V\3\2\2\2\u0139\u013a\7\60\2") + buf.write("\2\u013aX\3\2\2\2\u013b\u013c\7#\2\2\u013cZ\3\2\2\2\u013d") + buf.write("\u013e\7\u0080\2\2\u013e\\\3\2\2\2\u013f\u0140\7\60\2") + buf.write("\2\u0140\u0141\7\60\2\2\u0141^\3\2\2\2\u0142\u0143\7\60") + buf.write("\2\2\u0143\u0144\7\60\2\2\u0144\u0145\7\60\2\2\u0145`") + buf.write("\3\2\2\2\u0146\u0147\7?\2\2\u0147\u0148\7?\2\2\u0148b") + buf.write("\3\2\2\2\u0149\u014a\7#\2\2\u014a\u014b\7?\2\2\u014bd") + buf.write("\3\2\2\2\u014c\u014d\7>\2\2\u014df\3\2\2\2\u014e\u014f") + buf.write("\7>\2\2\u014f\u0150\7?\2\2\u0150h\3\2\2\2\u0151\u0152") + buf.write("\7@\2\2\u0152j\3\2\2\2\u0153\u0154\7@\2\2\u0154\u0155") + buf.write("\7?\2\2\u0155l\3\2\2\2\u0156\u0157\7p\2\2\u0157\u0158") + buf.write("\7q\2\2\u0158\u0159\7v\2\2\u0159n\3\2\2\2\u015a\u015b") + buf.write("\7c\2\2\u015b\u015c\7p\2\2\u015c\u015d\7f\2\2\u015dp\3") + buf.write("\2\2\2\u015e\u015f\7q\2\2\u015f\u0160\7t\2\2\u0160r\3") + buf.write("\2\2\2\u0161\u0162\7A\2\2\u0162t\3\2\2\2\u0163\u0164\7") + buf.write("n\2\2\u0164\u0165\7c\2\2\u0165\u0166\7o\2\2\u0166\u0167") + buf.write("\7d\2\2\u0167\u0168\7f\2\2\u0168\u0169\7c\2\2\u0169v\3") + buf.write("\2\2\2\u016a\u016b\7/\2\2\u016b\u016c\7@\2\2\u016cx\3") + buf.write("\2\2\2\u016d\u016e\7v\2\2\u016e\u016f\7t\2\2\u016f\u0170") + buf.write("\7w\2\2\u0170\u0171\7g\2\2\u0171z\3\2\2\2\u0172\u0173") + buf.write("\7h\2\2\u0173\u0174\7c\2\2\u0174\u0175\7n\2\2\u0175\u0176") + buf.write("\7u\2\2\u0176\u0177\7g\2\2\u0177|\3\2\2\2\u0178\u0179") + buf.write("\7p\2\2\u0179\u017a\7w\2\2\u017a\u017b\7n\2\2\u017b\u017c") + buf.write("\7n\2\2\u017c~\3\2\2\2\u017d\u017e\7X\2\2\u017e\u017f") + buf.write("\7q\2\2\u017f\u0180\7k\2\2\u0180\u0181\7f\2\2\u0181\u0080") + buf.write("\3\2\2\2\u0182\u0183\7K\2\2\u0183\u0184\7p\2\2\u0184\u0185") + buf.write("\7v\2\2\u0185\u0082\3\2\2\2\u0186\u0187\7H\2\2\u0187\u0188") + buf.write("\7n\2\2\u0188\u0189\7q\2\2\u0189\u018a\7c\2\2\u018a\u018b") + buf.write("\7v\2\2\u018b\u0084\3\2\2\2\u018c\u018d\7D\2\2\u018d\u018e") + buf.write("\7q\2\2\u018e\u018f\7q\2\2\u018f\u0190\7n\2\2\u0190\u0086") + buf.write("\3\2\2\2\u0191\u0192\7E\2\2\u0192\u0193\7j\2\2\u0193\u0194") + buf.write("\7c\2\2\u0194\u0195\7t\2\2\u0195\u0088\3\2\2\2\u0196\u0197") + buf.write("\7U\2\2\u0197\u0198\7v\2\2\u0198\u0199\7t\2\2\u0199\u019a") + buf.write("\7k\2\2\u019a\u019b\7p\2\2\u019b\u019c\7i\2\2\u019c\u008a") + buf.write("\3\2\2\2\u019d\u019f\5\u0095K\2\u019e\u019d\3\2\2\2\u019f") + buf.write("\u01a0\3\2\2\2\u01a0\u019e\3\2\2\2\u01a0\u01a1\3\2\2\2") + buf.write("\u01a1\u008c\3\2\2\2\u01a2\u01a4\5\u0095K\2\u01a3\u01a2") + buf.write("\3\2\2\2\u01a4\u01a5\3\2\2\2\u01a5\u01a3\3\2\2\2\u01a5") + buf.write("\u01a6\3\2\2\2\u01a6\u01a7\3\2\2\2\u01a7\u01a9\7\60\2") + buf.write("\2\u01a8\u01aa\5\u0095K\2\u01a9\u01a8\3\2\2\2\u01aa\u01ab") + buf.write("\3\2\2\2\u01ab\u01a9\3\2\2\2\u01ab\u01ac\3\2\2\2\u01ac") + buf.write("\u01b6\3\2\2\2\u01ad\u01af\7g\2\2\u01ae\u01b0\7/\2\2\u01af") + buf.write("\u01ae\3\2\2\2\u01af\u01b0\3\2\2\2\u01b0\u01b2\3\2\2\2") + buf.write("\u01b1\u01b3\5\u0095K\2\u01b2\u01b1\3\2\2\2\u01b3\u01b4") + buf.write("\3\2\2\2\u01b4\u01b2\3\2\2\2\u01b4\u01b5\3\2\2\2\u01b5") + buf.write("\u01b7\3\2\2\2\u01b6\u01ad\3\2\2\2\u01b6\u01b7\3\2\2\2") + buf.write("\u01b7\u008e\3\2\2\2\u01b8\u01be\7)\2\2\u01b9\u01bd\n") + buf.write("\2\2\2\u01ba\u01bb\7^\2\2\u01bb\u01bd\t\3\2\2\u01bc\u01b9") + buf.write("\3\2\2\2\u01bc\u01ba\3\2\2\2\u01bd\u01c0\3\2\2\2\u01be") + buf.write("\u01bc\3\2\2\2\u01be\u01bf\3\2\2\2\u01bf\u01c1\3\2\2\2") + buf.write("\u01c0\u01be\3\2\2\2\u01c1\u01c2\7)\2\2\u01c2\u0090\3") + buf.write("\2\2\2\u01c3\u01c9\7$\2\2\u01c4\u01c8\n\4\2\2\u01c5\u01c6") + buf.write("\7^\2\2\u01c6\u01c8\t\5\2\2\u01c7\u01c4\3\2\2\2\u01c7") + buf.write("\u01c5\3\2\2\2\u01c8\u01cb\3\2\2\2\u01c9\u01c7\3\2\2\2") + buf.write("\u01c9\u01ca\3\2\2\2\u01ca\u01cc\3\2\2\2\u01cb\u01c9\3") + buf.write("\2\2\2\u01cc\u01cd\7$\2\2\u01cd\u0092\3\2\2\2\u01ce\u01d2") + buf.write("\5\u0097L\2\u01cf\u01d1\5\u0099M\2\u01d0\u01cf\3\2\2\2") + buf.write("\u01d1\u01d4\3\2\2\2\u01d2\u01d0\3\2\2\2\u01d2\u01d3\3") + buf.write("\2\2\2\u01d3\u0094\3\2\2\2\u01d4\u01d2\3\2\2\2\u01d5\u01d6") + buf.write("\t\6\2\2\u01d6\u0096\3\2\2\2\u01d7\u01d8\t\7\2\2\u01d8") + buf.write("\u0098\3\2\2\2\u01d9\u01dd\5\u0097L\2\u01da\u01dd\5\u0095") + buf.write("K\2\u01db\u01dd\t\b\2\2\u01dc\u01d9\3\2\2\2\u01dc\u01da") + buf.write("\3\2\2\2\u01dc\u01db\3\2\2\2\u01dd\u009a\3\2\2\2\u01de") + buf.write("\u01df\7/\2\2\u01df\u01e0\7/\2\2\u01e0\u01e4\3\2\2\2\u01e1") + buf.write("\u01e3\n\t\2\2\u01e2\u01e1\3\2\2\2\u01e3\u01e6\3\2\2\2") + buf.write("\u01e4\u01e2\3\2\2\2\u01e4\u01e5\3\2\2\2\u01e5\u01e7\3") + buf.write("\2\2\2\u01e6\u01e4\3\2\2\2\u01e7\u01e8\bN\2\2\u01e8\u009c") + buf.write("\3\2\2\2\u01e9\u01eb\t\n\2\2\u01ea\u01e9\3\2\2\2\u01eb") + buf.write("\u01ec\3\2\2\2\u01ec\u01ea\3\2\2\2\u01ec\u01ed\3\2\2\2") + buf.write("\u01ed\u01ee\3\2\2\2\u01ee\u01ef\bO\2\2\u01ef\u009e\3") + buf.write("\2\2\2\u01f0\u01f1\13\2\2\2\u01f1\u00a0\3\2\2\2\21\2\u01a0") + buf.write("\u01a5\u01ab\u01af\u01b4\u01b6\u01bc\u01be\u01c7\u01c9") + buf.write("\u01d2\u01dc\u01e4\u01ec\3\b\2\2") return buf.getvalue() @@ -289,14 +294,16 @@ class PyxellLexer(Lexer): T__63 = 64 T__64 = 65 T__65 = 66 - INT = 67 - FLOAT = 68 - CHAR = 69 - STRING = 70 - ID = 71 - COMMENT = 72 - WS = 73 - ERR = 74 + T__66 = 67 + T__67 = 68 + INT = 69 + FLOAT = 70 + CHAR = 71 + STRING = 72 + ID = 73 + COMMENT = 74 + WS = 75 + ERR = 76 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -308,10 +315,11 @@ class PyxellLexer(Lexer): "'&'", "'$'", "'|'", "'break'", "'continue'", "'return'", "','", "'if'", "'do'", "'elif'", "'else'", "'while'", "'until'", "'for'", "'in'", "'step'", "'func'", "'('", "')'", "'def'", "'extern'", - "':'", "'{'", "'}'", "'['", "']'", "'.'", "'~'", "'..'", "'...'", - "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", "'not'", "'and'", - "'or'", "'?'", "'lambda'", "'->'", "'true'", "'false'", "'Void'", - "'Int'", "'Float'", "'Bool'", "'Char'", "'String'" ] + "':'", "'{'", "'}'", "'['", "']'", "'.'", "'!'", "'~'", "'..'", + "'...'", "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", "'not'", + "'and'", "'or'", "'?'", "'lambda'", "'->'", "'true'", "'false'", + "'null'", "'Void'", "'Int'", "'Float'", "'Bool'", "'Char'", + "'String'" ] symbolicNames = [ "", "INT", "FLOAT", "CHAR", "STRING", "ID", "COMMENT", "WS", "ERR" ] @@ -326,9 +334,9 @@ class PyxellLexer(Lexer): "T__44", "T__45", "T__46", "T__47", "T__48", "T__49", "T__50", "T__51", "T__52", "T__53", "T__54", "T__55", "T__56", "T__57", "T__58", "T__59", "T__60", "T__61", - "T__62", "T__63", "T__64", "T__65", "INT", "FLOAT", "CHAR", - "STRING", "ID", "DIGIT", "ID_START", "ID_CONT", "COMMENT", - "WS", "ERR" ] + "T__62", "T__63", "T__64", "T__65", "T__66", "T__67", + "INT", "FLOAT", "CHAR", "STRING", "ID", "DIGIT", "ID_START", + "ID_CONT", "COMMENT", "WS", "ERR" ] grammarFileName = "Pyxell.g4" diff --git a/src/antlr/PyxellLexer.tokens b/src/antlr/PyxellLexer.tokens index f94f0b97..b5318ded 100644 --- a/src/antlr/PyxellLexer.tokens +++ b/src/antlr/PyxellLexer.tokens @@ -64,14 +64,16 @@ T__62=63 T__63=64 T__64=65 T__65=66 -INT=67 -FLOAT=68 -CHAR=69 -STRING=70 -ID=71 -COMMENT=72 -WS=73 -ERR=74 +T__66=67 +T__67=68 +INT=69 +FLOAT=70 +CHAR=71 +STRING=72 +ID=73 +COMMENT=74 +WS=75 +ERR=76 ';'=1 'use'=2 'only'=3 @@ -115,26 +117,28 @@ ERR=74 '['=41 ']'=42 '.'=43 -'~'=44 -'..'=45 -'...'=46 -'=='=47 -'!='=48 -'<'=49 -'<='=50 -'>'=51 -'>='=52 -'not'=53 -'and'=54 -'or'=55 -'?'=56 -'lambda'=57 -'->'=58 -'true'=59 -'false'=60 -'Void'=61 -'Int'=62 -'Float'=63 -'Bool'=64 -'Char'=65 -'String'=66 +'!'=44 +'~'=45 +'..'=46 +'...'=47 +'=='=48 +'!='=49 +'<'=50 +'<='=51 +'>'=52 +'>='=53 +'not'=54 +'and'=55 +'or'=56 +'?'=57 +'lambda'=58 +'->'=59 +'true'=60 +'false'=61 +'null'=62 +'Void'=63 +'Int'=64 +'Float'=65 +'Bool'=66 +'Char'=67 +'String'=68 diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index a38034f9..4cec0482 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -8,8 +8,8 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3L") - buf.write("\u017d\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3N") + buf.write("\u0182\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16") buf.write("\t\16\4\17\t\17\4\20\t\20\3\2\7\2\"\n\2\f\2\16\2%\13\2") buf.write("\3\2\3\2\3\3\3\3\3\3\3\3\5\3-\n\3\3\4\3\4\3\4\3\4\3\4") @@ -34,164 +34,167 @@ def serializedATN(): buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\5\t\u010f") buf.write("\n\t\3\t\3\t\5\t\u0113\n\t\3\t\3\t\5\t\u0117\n\t\5\t\u0119") buf.write("\n\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\7\t\u0124\n\t") - buf.write("\f\t\16\t\u0127\13\t\3\t\5\t\u012a\n\t\3\t\3\t\3\t\7\t") - buf.write("\u012f\n\t\f\t\16\t\u0132\13\t\3\n\3\n\3\n\7\n\u0137\n") - buf.write("\n\f\n\16\n\u013a\13\n\3\n\3\n\3\13\3\13\3\13\3\f\3\f") - buf.write("\3\f\3\f\3\f\3\f\5\f\u0147\n\f\3\f\3\f\5\f\u014b\n\f\3") - buf.write("\r\3\r\5\r\u014f\n\r\3\r\3\r\3\16\3\16\3\16\3\16\3\16") - buf.write("\3\16\5\16\u0159\n\16\3\17\3\17\7\17\u015d\n\17\f\17\16") - buf.write("\17\u0160\13\17\3\17\3\17\3\20\3\20\3\20\3\20\3\20\3\20") - buf.write("\3\20\3\20\3\20\3\20\3\20\3\20\5\20\u0170\n\20\3\20\3") - buf.write("\20\3\20\3\20\3\20\3\20\7\20\u0178\n\20\f\20\16\20\u017b") - buf.write("\13\20\3\20\2\4\20\36\21\2\4\6\b\n\f\16\20\22\24\26\30") - buf.write("\32\34\36\2\f\3\2\13\25\3\2\26\27\4\2\17\20..\3\2\f\16") - buf.write("\3\2\17\20\3\2\21\22\3\2/\60\3\2\61\66\3\2=>\3\2?D\2\u01bc") - buf.write("\2#\3\2\2\2\4,\3\2\2\2\6V\3\2\2\2\bX\3\2\2\2\n\u00a0\3") - buf.write("\2\2\2\f\u00a2\3\2\2\2\16\u00a8\3\2\2\2\20\u00dd\3\2\2") - buf.write("\2\22\u0138\3\2\2\2\24\u013d\3\2\2\2\26\u014a\3\2\2\2") - buf.write("\30\u014e\3\2\2\2\32\u0158\3\2\2\2\34\u015e\3\2\2\2\36") - buf.write("\u016f\3\2\2\2 \"\5\4\3\2! \3\2\2\2\"%\3\2\2\2#!\3\2\2") - buf.write("\2#$\3\2\2\2$&\3\2\2\2%#\3\2\2\2&\'\7\2\2\3\'\3\3\2\2") - buf.write("\2()\5\6\4\2)*\7\3\2\2*-\3\2\2\2+-\5\n\6\2,(\3\2\2\2,") - buf.write("+\3\2\2\2-\5\3\2\2\2./\7\4\2\2/\66\7I\2\2\60\61\7\5\2") - buf.write("\2\61\67\5\34\17\2\62\63\7\6\2\2\63\67\5\34\17\2\64\65") - buf.write("\7\7\2\2\65\67\7I\2\2\66\60\3\2\2\2\66\62\3\2\2\2\66\64") - buf.write("\3\2\2\2\66\67\3\2\2\2\67W\3\2\2\28W\7\b\2\29;\7\t\2\2") - buf.write(":<\5\22\n\2;:\3\2\2\2;<\3\2\2\2\5\36\20\2") - buf.write(">A\7I\2\2?@\7\n\2\2@B\5\22\n\2A?\3\2\2\2AB\3\2\2\2BW\3") - buf.write("\2\2\2CD\5\b\5\2DE\7\n\2\2EG\3\2\2\2FC\3\2\2\2GJ\3\2\2") - buf.write("\2HF\3\2\2\2HI\3\2\2\2IK\3\2\2\2JH\3\2\2\2KW\5\22\n\2") - buf.write("LM\5\20\t\2MN\t\2\2\2NO\7\n\2\2OP\5\20\t\2PW\3\2\2\2Q") - buf.write("W\t\3\2\2RT\7\30\2\2SU\5\22\n\2TS\3\2\2\2TU\3\2\2\2UW") - buf.write("\3\2\2\2V.\3\2\2\2V8\3\2\2\2V9\3\2\2\2V=\3\2\2\2VH\3\2") - buf.write("\2\2VL\3\2\2\2VQ\3\2\2\2VR\3\2\2\2W\7\3\2\2\2X]\5\20\t") - buf.write("\2YZ\7\31\2\2Z\\\5\20\t\2[Y\3\2\2\2\\_\3\2\2\2][\3\2\2") - buf.write("\2]^\3\2\2\2^\t\3\2\2\2_]\3\2\2\2`a\7\32\2\2ab\5\20\t") - buf.write("\2bc\7\33\2\2ck\5\16\b\2de\7\34\2\2ef\5\20\t\2fg\7\33") - buf.write("\2\2gh\5\16\b\2hj\3\2\2\2id\3\2\2\2jm\3\2\2\2ki\3\2\2") - buf.write("\2kl\3\2\2\2lq\3\2\2\2mk\3\2\2\2no\7\35\2\2op\7\33\2\2") - buf.write("pr\5\16\b\2qn\3\2\2\2qr\3\2\2\2r\u00a1\3\2\2\2st\7\36") - buf.write("\2\2tu\5\20\t\2uv\7\33\2\2vw\5\16\b\2w\u00a1\3\2\2\2x") - buf.write("y\7\37\2\2yz\5\20\t\2z{\7\33\2\2{|\5\16\b\2|\u00a1\3\2") - buf.write("\2\2}~\7 \2\2~\177\5\22\n\2\177\u0080\7!\2\2\u0080\u0083") - buf.write("\5\22\n\2\u0081\u0082\7\"\2\2\u0082\u0084\5\22\n\2\u0083") - buf.write("\u0081\3\2\2\2\u0083\u0084\3\2\2\2\u0084\u0085\3\2\2\2") - buf.write("\u0085\u0086\7\33\2\2\u0086\u0087\5\16\b\2\u0087\u00a1") - buf.write("\3\2\2\2\u0088\u0089\7#\2\2\u0089\u008a\7I\2\2\u008a\u0090") - buf.write("\7$\2\2\u008b\u008c\5\f\7\2\u008c\u008d\7\31\2\2\u008d") - buf.write("\u008f\3\2\2\2\u008e\u008b\3\2\2\2\u008f\u0092\3\2\2\2") - buf.write("\u0090\u008e\3\2\2\2\u0090\u0091\3\2\2\2\u0091\u0094\3") - buf.write("\2\2\2\u0092\u0090\3\2\2\2\u0093\u0095\5\f\7\2\u0094\u0093") - buf.write("\3\2\2\2\u0094\u0095\3\2\2\2\u0095\u0096\3\2\2\2\u0096") - buf.write("\u0098\7%\2\2\u0097\u0099\5\36\20\2\u0098\u0097\3\2\2") - buf.write("\2\u0098\u0099\3\2\2\2\u0099\u009e\3\2\2\2\u009a\u009b") - buf.write("\7&\2\2\u009b\u009f\5\16\b\2\u009c\u009d\7\'\2\2\u009d") - buf.write("\u009f\7\3\2\2\u009e\u009a\3\2\2\2\u009e\u009c\3\2\2\2") - buf.write("\u009f\u00a1\3\2\2\2\u00a0`\3\2\2\2\u00a0s\3\2\2\2\u00a0") - buf.write("x\3\2\2\2\u00a0}\3\2\2\2\u00a0\u0088\3\2\2\2\u00a1\13") - buf.write("\3\2\2\2\u00a2\u00a3\5\36\20\2\u00a3\u00a6\7I\2\2\u00a4") - buf.write("\u00a5\7(\2\2\u00a5\u00a7\5\20\t\2\u00a6\u00a4\3\2\2\2") - buf.write("\u00a6\u00a7\3\2\2\2\u00a7\r\3\2\2\2\u00a8\u00aa\7)\2") - buf.write("\2\u00a9\u00ab\5\4\3\2\u00aa\u00a9\3\2\2\2\u00ab\u00ac") - buf.write("\3\2\2\2\u00ac\u00aa\3\2\2\2\u00ac\u00ad\3\2\2\2\u00ad") - buf.write("\u00ae\3\2\2\2\u00ae\u00af\7*\2\2\u00af\17\3\2\2\2\u00b0") - buf.write("\u00b1\b\t\1\2\u00b1\u00de\5\32\16\2\u00b2\u00b3\7$\2") - buf.write("\2\u00b3\u00b4\5\22\n\2\u00b4\u00b5\7%\2\2\u00b5\u00de") - buf.write("\3\2\2\2\u00b6\u00bc\7+\2\2\u00b7\u00b8\5\20\t\2\u00b8") - buf.write("\u00b9\7\31\2\2\u00b9\u00bb\3\2\2\2\u00ba\u00b7\3\2\2") - buf.write("\2\u00bb\u00be\3\2\2\2\u00bc\u00ba\3\2\2\2\u00bc\u00bd") - buf.write("\3\2\2\2\u00bd\u00c0\3\2\2\2\u00be\u00bc\3\2\2\2\u00bf") - buf.write("\u00c1\5\20\t\2\u00c0\u00bf\3\2\2\2\u00c0\u00c1\3\2\2") - buf.write("\2\u00c1\u00c2\3\2\2\2\u00c2\u00de\7,\2\2\u00c3\u00c4") - buf.write("\7+\2\2\u00c4\u00c6\5\20\t\2\u00c5\u00c7\5\26\f\2\u00c6") - buf.write("\u00c5\3\2\2\2\u00c7\u00c8\3\2\2\2\u00c8\u00c6\3\2\2\2") - buf.write("\u00c8\u00c9\3\2\2\2\u00c9\u00ca\3\2\2\2\u00ca\u00cb\7") - buf.write(",\2\2\u00cb\u00de\3\2\2\2\u00cc\u00cd\t\4\2\2\u00cd\u00de") - buf.write("\5\20\t\21\u00ce\u00cf\7\67\2\2\u00cf\u00de\5\20\t\7\u00d0") - buf.write("\u00d5\7;\2\2\u00d1\u00d2\7I\2\2\u00d2\u00d4\7\31\2\2") - buf.write("\u00d3\u00d1\3\2\2\2\u00d4\u00d7\3\2\2\2\u00d5\u00d3\3") - buf.write("\2\2\2\u00d5\u00d6\3\2\2\2\u00d6\u00d9\3\2\2\2\u00d7\u00d5") - buf.write("\3\2\2\2\u00d8\u00da\7I\2\2\u00d9\u00d8\3\2\2\2\u00d9") - buf.write("\u00da\3\2\2\2\u00da\u00db\3\2\2\2\u00db\u00dc\7<\2\2") - buf.write("\u00dc\u00de\5\20\t\3\u00dd\u00b0\3\2\2\2\u00dd\u00b2") - buf.write("\3\2\2\2\u00dd\u00b6\3\2\2\2\u00dd\u00c3\3\2\2\2\u00dd") - buf.write("\u00cc\3\2\2\2\u00dd\u00ce\3\2\2\2\u00dd\u00d0\3\2\2\2") - buf.write("\u00de\u0130\3\2\2\2\u00df\u00e0\f\22\2\2\u00e0\u00e1") - buf.write("\7\13\2\2\u00e1\u012f\5\20\t\22\u00e2\u00e3\f\20\2\2\u00e3") - buf.write("\u00e4\t\5\2\2\u00e4\u012f\5\20\t\21\u00e5\u00e6\f\17") - buf.write("\2\2\u00e6\u00e7\t\6\2\2\u00e7\u012f\5\20\t\20\u00e8\u00e9") - buf.write("\f\16\2\2\u00e9\u00ea\t\7\2\2\u00ea\u012f\5\20\t\17\u00eb") - buf.write("\u00ec\f\r\2\2\u00ec\u00ed\7\23\2\2\u00ed\u012f\5\20\t") - buf.write("\16\u00ee\u00ef\f\f\2\2\u00ef\u00f0\7\24\2\2\u00f0\u012f") - buf.write("\5\20\t\r\u00f1\u00f2\f\13\2\2\u00f2\u00f3\7\25\2\2\u00f3") - buf.write("\u012f\5\20\t\f\u00f4\u00f5\f\n\2\2\u00f5\u00f6\t\b\2") - buf.write("\2\u00f6\u012f\5\20\t\13\u00f7\u00f8\f\b\2\2\u00f8\u00f9") - buf.write("\t\t\2\2\u00f9\u012f\5\20\t\b\u00fa\u00fb\f\6\2\2\u00fb") - buf.write("\u00fc\78\2\2\u00fc\u012f\5\20\t\6\u00fd\u00fe\f\5\2\2") - buf.write("\u00fe\u00ff\79\2\2\u00ff\u012f\5\20\t\5\u0100\u0101\f") - buf.write("\4\2\2\u0101\u0102\7:\2\2\u0102\u0103\5\20\t\2\u0103\u0104") - buf.write("\7(\2\2\u0104\u0105\5\20\t\4\u0105\u012f\3\2\2\2\u0106") - buf.write("\u0107\f\26\2\2\u0107\u0108\7+\2\2\u0108\u0109\5\22\n") - buf.write("\2\u0109\u010a\7,\2\2\u010a\u012f\3\2\2\2\u010b\u010c") - buf.write("\f\25\2\2\u010c\u010e\7+\2\2\u010d\u010f\5\20\t\2\u010e") - buf.write("\u010d\3\2\2\2\u010e\u010f\3\2\2\2\u010f\u0110\3\2\2\2") - buf.write("\u0110\u0112\7(\2\2\u0111\u0113\5\20\t\2\u0112\u0111\3") - buf.write("\2\2\2\u0112\u0113\3\2\2\2\u0113\u0118\3\2\2\2\u0114\u0116") - buf.write("\7(\2\2\u0115\u0117\5\20\t\2\u0116\u0115\3\2\2\2\u0116") - buf.write("\u0117\3\2\2\2\u0117\u0119\3\2\2\2\u0118\u0114\3\2\2\2") - buf.write("\u0118\u0119\3\2\2\2\u0119\u011a\3\2\2\2\u011a\u012f\7") - buf.write(",\2\2\u011b\u011c\f\24\2\2\u011c\u011d\7-\2\2\u011d\u012f") - buf.write("\7I\2\2\u011e\u011f\f\23\2\2\u011f\u0125\7$\2\2\u0120") - buf.write("\u0121\5\30\r\2\u0121\u0122\7\31\2\2\u0122\u0124\3\2\2") - buf.write("\2\u0123\u0120\3\2\2\2\u0124\u0127\3\2\2\2\u0125\u0123") - buf.write("\3\2\2\2\u0125\u0126\3\2\2\2\u0126\u0129\3\2\2\2\u0127") - buf.write("\u0125\3\2\2\2\u0128\u012a\5\30\r\2\u0129\u0128\3\2\2") - buf.write("\2\u0129\u012a\3\2\2\2\u012a\u012b\3\2\2\2\u012b\u012f") - buf.write("\7%\2\2\u012c\u012d\f\t\2\2\u012d\u012f\7\60\2\2\u012e") - buf.write("\u00df\3\2\2\2\u012e\u00e2\3\2\2\2\u012e\u00e5\3\2\2\2") - buf.write("\u012e\u00e8\3\2\2\2\u012e\u00eb\3\2\2\2\u012e\u00ee\3") - buf.write("\2\2\2\u012e\u00f1\3\2\2\2\u012e\u00f4\3\2\2\2\u012e\u00f7") - buf.write("\3\2\2\2\u012e\u00fa\3\2\2\2\u012e\u00fd\3\2\2\2\u012e") - buf.write("\u0100\3\2\2\2\u012e\u0106\3\2\2\2\u012e\u010b\3\2\2\2") - buf.write("\u012e\u011b\3\2\2\2\u012e\u011e\3\2\2\2\u012e\u012c\3") - buf.write("\2\2\2\u012f\u0132\3\2\2\2\u0130\u012e\3\2\2\2\u0130\u0131") - buf.write("\3\2\2\2\u0131\21\3\2\2\2\u0132\u0130\3\2\2\2\u0133\u0134") - buf.write("\5\20\t\2\u0134\u0135\7\31\2\2\u0135\u0137\3\2\2\2\u0136") - buf.write("\u0133\3\2\2\2\u0137\u013a\3\2\2\2\u0138\u0136\3\2\2\2") - buf.write("\u0138\u0139\3\2\2\2\u0139\u013b\3\2\2\2\u013a\u0138\3") - buf.write("\2\2\2\u013b\u013c\5\20\t\2\u013c\23\3\2\2\2\u013d\u013e") - buf.write("\5\22\n\2\u013e\u013f\7\2\2\3\u013f\25\3\2\2\2\u0140\u0141") - buf.write("\7 \2\2\u0141\u0142\5\22\n\2\u0142\u0143\7!\2\2\u0143") - buf.write("\u0146\5\22\n\2\u0144\u0145\7\"\2\2\u0145\u0147\5\22\n") - buf.write("\2\u0146\u0144\3\2\2\2\u0146\u0147\3\2\2\2\u0147\u014b") - buf.write("\3\2\2\2\u0148\u0149\7\32\2\2\u0149\u014b\5\20\t\2\u014a") - buf.write("\u0140\3\2\2\2\u014a\u0148\3\2\2\2\u014b\27\3\2\2\2\u014c") - buf.write("\u014d\7I\2\2\u014d\u014f\7\n\2\2\u014e\u014c\3\2\2\2") - buf.write("\u014e\u014f\3\2\2\2\u014f\u0150\3\2\2\2\u0150\u0151\5") - buf.write("\20\t\2\u0151\31\3\2\2\2\u0152\u0159\7E\2\2\u0153\u0159") - buf.write("\7F\2\2\u0154\u0159\t\n\2\2\u0155\u0159\7G\2\2\u0156\u0159") - buf.write("\7H\2\2\u0157\u0159\7I\2\2\u0158\u0152\3\2\2\2\u0158\u0153") - buf.write("\3\2\2\2\u0158\u0154\3\2\2\2\u0158\u0155\3\2\2\2\u0158") - buf.write("\u0156\3\2\2\2\u0158\u0157\3\2\2\2\u0159\33\3\2\2\2\u015a") - buf.write("\u015b\7I\2\2\u015b\u015d\7\31\2\2\u015c\u015a\3\2\2\2") - buf.write("\u015d\u0160\3\2\2\2\u015e\u015c\3\2\2\2\u015e\u015f\3") - buf.write("\2\2\2\u015f\u0161\3\2\2\2\u0160\u015e\3\2\2\2\u0161\u0162") - buf.write("\7I\2\2\u0162\35\3\2\2\2\u0163\u0164\b\20\1\2\u0164\u0170") - buf.write("\t\13\2\2\u0165\u0166\7$\2\2\u0166\u0167\5\36\20\2\u0167") - buf.write("\u0168\7%\2\2\u0168\u0170\3\2\2\2\u0169\u016a\7+\2\2\u016a") - buf.write("\u016b\5\36\20\2\u016b\u016c\7,\2\2\u016c\u0170\3\2\2") - buf.write("\2\u016d\u016e\7<\2\2\u016e\u0170\5\36\20\3\u016f\u0163") - buf.write("\3\2\2\2\u016f\u0165\3\2\2\2\u016f\u0169\3\2\2\2\u016f") - buf.write("\u016d\3\2\2\2\u0170\u0179\3\2\2\2\u0171\u0172\f\5\2\2") - buf.write("\u0172\u0173\7\f\2\2\u0173\u0178\5\36\20\5\u0174\u0175") - buf.write("\f\4\2\2\u0175\u0176\7<\2\2\u0176\u0178\5\36\20\4\u0177") - buf.write("\u0171\3\2\2\2\u0177\u0174\3\2\2\2\u0178\u017b\3\2\2\2") - buf.write("\u0179\u0177\3\2\2\2\u0179\u017a\3\2\2\2\u017a\37\3\2") - buf.write("\2\2\u017b\u0179\3\2\2\2,#,\66;AHTV]kq\u0083\u0090\u0094") - buf.write("\u0098\u009e\u00a0\u00a6\u00ac\u00bc\u00c0\u00c8\u00d5") - buf.write("\u00d9\u00dd\u010e\u0112\u0116\u0118\u0125\u0129\u012e") - buf.write("\u0130\u0138\u0146\u014a\u014e\u0158\u015e\u016f\u0177") - buf.write("\u0179") + buf.write("\f\t\16\t\u0127\13\t\3\t\5\t\u012a\n\t\3\t\3\t\3\t\3\t") + buf.write("\3\t\7\t\u0131\n\t\f\t\16\t\u0134\13\t\3\n\3\n\3\n\7\n") + buf.write("\u0139\n\n\f\n\16\n\u013c\13\n\3\n\3\n\3\13\3\13\3\13") + buf.write("\3\f\3\f\3\f\3\f\3\f\3\f\5\f\u0149\n\f\3\f\3\f\5\f\u014d") + buf.write("\n\f\3\r\3\r\5\r\u0151\n\r\3\r\3\r\3\16\3\16\3\16\3\16") + buf.write("\3\16\3\16\3\16\5\16\u015c\n\16\3\17\3\17\7\17\u0160\n") + buf.write("\17\f\17\16\17\u0163\13\17\3\17\3\17\3\20\3\20\3\20\3") + buf.write("\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\5\20\u0173") + buf.write("\n\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\7\20\u017d") + buf.write("\n\20\f\20\16\20\u0180\13\20\3\20\2\4\20\36\21\2\4\6\b") + buf.write("\n\f\16\20\22\24\26\30\32\34\36\2\f\3\2\13\25\3\2\26\27") + buf.write("\4\2\17\20//\3\2\f\16\3\2\17\20\3\2\21\22\3\2\60\61\3") + buf.write("\2\62\67\3\2>?\3\2AF\2\u01c4\2#\3\2\2\2\4,\3\2\2\2\6V") + buf.write("\3\2\2\2\bX\3\2\2\2\n\u00a0\3\2\2\2\f\u00a2\3\2\2\2\16") + buf.write("\u00a8\3\2\2\2\20\u00dd\3\2\2\2\22\u013a\3\2\2\2\24\u013f") + buf.write("\3\2\2\2\26\u014c\3\2\2\2\30\u0150\3\2\2\2\32\u015b\3") + buf.write("\2\2\2\34\u0161\3\2\2\2\36\u0172\3\2\2\2 \"\5\4\3\2! ") + buf.write("\3\2\2\2\"%\3\2\2\2#!\3\2\2\2#$\3\2\2\2$&\3\2\2\2%#\3") + buf.write("\2\2\2&\'\7\2\2\3\'\3\3\2\2\2()\5\6\4\2)*\7\3\2\2*-\3") + buf.write("\2\2\2+-\5\n\6\2,(\3\2\2\2,+\3\2\2\2-\5\3\2\2\2./\7\4") + buf.write("\2\2/\66\7K\2\2\60\61\7\5\2\2\61\67\5\34\17\2\62\63\7") + buf.write("\6\2\2\63\67\5\34\17\2\64\65\7\7\2\2\65\67\7K\2\2\66\60") + buf.write("\3\2\2\2\66\62\3\2\2\2\66\64\3\2\2\2\66\67\3\2\2\2\67") + buf.write("W\3\2\2\28W\7\b\2\29;\7\t\2\2:<\5\22\n\2;:\3\2\2\2;<\3") + buf.write("\2\2\2\5\36\20\2>A\7K\2\2?@\7\n\2\2@B\5\22") + buf.write("\n\2A?\3\2\2\2AB\3\2\2\2BW\3\2\2\2CD\5\b\5\2DE\7\n\2\2") + buf.write("EG\3\2\2\2FC\3\2\2\2GJ\3\2\2\2HF\3\2\2\2HI\3\2\2\2IK\3") + buf.write("\2\2\2JH\3\2\2\2KW\5\22\n\2LM\5\20\t\2MN\t\2\2\2NO\7\n") + buf.write("\2\2OP\5\20\t\2PW\3\2\2\2QW\t\3\2\2RT\7\30\2\2SU\5\22") + buf.write("\n\2TS\3\2\2\2TU\3\2\2\2UW\3\2\2\2V.\3\2\2\2V8\3\2\2\2") + buf.write("V9\3\2\2\2V=\3\2\2\2VH\3\2\2\2VL\3\2\2\2VQ\3\2\2\2VR\3") + buf.write("\2\2\2W\7\3\2\2\2X]\5\20\t\2YZ\7\31\2\2Z\\\5\20\t\2[Y") + buf.write("\3\2\2\2\\_\3\2\2\2][\3\2\2\2]^\3\2\2\2^\t\3\2\2\2_]\3") + buf.write("\2\2\2`a\7\32\2\2ab\5\20\t\2bc\7\33\2\2ck\5\16\b\2de\7") + buf.write("\34\2\2ef\5\20\t\2fg\7\33\2\2gh\5\16\b\2hj\3\2\2\2id\3") + buf.write("\2\2\2jm\3\2\2\2ki\3\2\2\2kl\3\2\2\2lq\3\2\2\2mk\3\2\2") + buf.write("\2no\7\35\2\2op\7\33\2\2pr\5\16\b\2qn\3\2\2\2qr\3\2\2") + buf.write("\2r\u00a1\3\2\2\2st\7\36\2\2tu\5\20\t\2uv\7\33\2\2vw\5") + buf.write("\16\b\2w\u00a1\3\2\2\2xy\7\37\2\2yz\5\20\t\2z{\7\33\2") + buf.write("\2{|\5\16\b\2|\u00a1\3\2\2\2}~\7 \2\2~\177\5\22\n\2\177") + buf.write("\u0080\7!\2\2\u0080\u0083\5\22\n\2\u0081\u0082\7\"\2\2") + buf.write("\u0082\u0084\5\22\n\2\u0083\u0081\3\2\2\2\u0083\u0084") + buf.write("\3\2\2\2\u0084\u0085\3\2\2\2\u0085\u0086\7\33\2\2\u0086") + buf.write("\u0087\5\16\b\2\u0087\u00a1\3\2\2\2\u0088\u0089\7#\2\2") + buf.write("\u0089\u008a\7K\2\2\u008a\u0090\7$\2\2\u008b\u008c\5\f") + buf.write("\7\2\u008c\u008d\7\31\2\2\u008d\u008f\3\2\2\2\u008e\u008b") + buf.write("\3\2\2\2\u008f\u0092\3\2\2\2\u0090\u008e\3\2\2\2\u0090") + buf.write("\u0091\3\2\2\2\u0091\u0094\3\2\2\2\u0092\u0090\3\2\2\2") + buf.write("\u0093\u0095\5\f\7\2\u0094\u0093\3\2\2\2\u0094\u0095\3") + buf.write("\2\2\2\u0095\u0096\3\2\2\2\u0096\u0098\7%\2\2\u0097\u0099") + buf.write("\5\36\20\2\u0098\u0097\3\2\2\2\u0098\u0099\3\2\2\2\u0099") + buf.write("\u009e\3\2\2\2\u009a\u009b\7&\2\2\u009b\u009f\5\16\b\2") + buf.write("\u009c\u009d\7\'\2\2\u009d\u009f\7\3\2\2\u009e\u009a\3") + buf.write("\2\2\2\u009e\u009c\3\2\2\2\u009f\u00a1\3\2\2\2\u00a0`") + buf.write("\3\2\2\2\u00a0s\3\2\2\2\u00a0x\3\2\2\2\u00a0}\3\2\2\2") + buf.write("\u00a0\u0088\3\2\2\2\u00a1\13\3\2\2\2\u00a2\u00a3\5\36") + buf.write("\20\2\u00a3\u00a6\7K\2\2\u00a4\u00a5\7(\2\2\u00a5\u00a7") + buf.write("\5\20\t\2\u00a6\u00a4\3\2\2\2\u00a6\u00a7\3\2\2\2\u00a7") + buf.write("\r\3\2\2\2\u00a8\u00aa\7)\2\2\u00a9\u00ab\5\4\3\2\u00aa") + buf.write("\u00a9\3\2\2\2\u00ab\u00ac\3\2\2\2\u00ac\u00aa\3\2\2\2") + buf.write("\u00ac\u00ad\3\2\2\2\u00ad\u00ae\3\2\2\2\u00ae\u00af\7") + buf.write("*\2\2\u00af\17\3\2\2\2\u00b0\u00b1\b\t\1\2\u00b1\u00de") + buf.write("\5\32\16\2\u00b2\u00b3\7$\2\2\u00b3\u00b4\5\22\n\2\u00b4") + buf.write("\u00b5\7%\2\2\u00b5\u00de\3\2\2\2\u00b6\u00bc\7+\2\2\u00b7") + buf.write("\u00b8\5\20\t\2\u00b8\u00b9\7\31\2\2\u00b9\u00bb\3\2\2") + buf.write("\2\u00ba\u00b7\3\2\2\2\u00bb\u00be\3\2\2\2\u00bc\u00ba") + buf.write("\3\2\2\2\u00bc\u00bd\3\2\2\2\u00bd\u00c0\3\2\2\2\u00be") + buf.write("\u00bc\3\2\2\2\u00bf\u00c1\5\20\t\2\u00c0\u00bf\3\2\2") + buf.write("\2\u00c0\u00c1\3\2\2\2\u00c1\u00c2\3\2\2\2\u00c2\u00de") + buf.write("\7,\2\2\u00c3\u00c4\7+\2\2\u00c4\u00c6\5\20\t\2\u00c5") + buf.write("\u00c7\5\26\f\2\u00c6\u00c5\3\2\2\2\u00c7\u00c8\3\2\2") + buf.write("\2\u00c8\u00c6\3\2\2\2\u00c8\u00c9\3\2\2\2\u00c9\u00ca") + buf.write("\3\2\2\2\u00ca\u00cb\7,\2\2\u00cb\u00de\3\2\2\2\u00cc") + buf.write("\u00cd\t\4\2\2\u00cd\u00de\5\20\t\21\u00ce\u00cf\78\2") + buf.write("\2\u00cf\u00de\5\20\t\7\u00d0\u00d5\7<\2\2\u00d1\u00d2") + buf.write("\7K\2\2\u00d2\u00d4\7\31\2\2\u00d3\u00d1\3\2\2\2\u00d4") + buf.write("\u00d7\3\2\2\2\u00d5\u00d3\3\2\2\2\u00d5\u00d6\3\2\2\2") + buf.write("\u00d6\u00d9\3\2\2\2\u00d7\u00d5\3\2\2\2\u00d8\u00da\7") + buf.write("K\2\2\u00d9\u00d8\3\2\2\2\u00d9\u00da\3\2\2\2\u00da\u00db") + buf.write("\3\2\2\2\u00db\u00dc\7=\2\2\u00dc\u00de\5\20\t\3\u00dd") + buf.write("\u00b0\3\2\2\2\u00dd\u00b2\3\2\2\2\u00dd\u00b6\3\2\2\2") + buf.write("\u00dd\u00c3\3\2\2\2\u00dd\u00cc\3\2\2\2\u00dd\u00ce\3") + buf.write("\2\2\2\u00dd\u00d0\3\2\2\2\u00de\u0132\3\2\2\2\u00df\u00e0") + buf.write("\f\22\2\2\u00e0\u00e1\7\13\2\2\u00e1\u0131\5\20\t\22\u00e2") + buf.write("\u00e3\f\20\2\2\u00e3\u00e4\t\5\2\2\u00e4\u0131\5\20\t") + buf.write("\21\u00e5\u00e6\f\17\2\2\u00e6\u00e7\t\6\2\2\u00e7\u0131") + buf.write("\5\20\t\20\u00e8\u00e9\f\16\2\2\u00e9\u00ea\t\7\2\2\u00ea") + buf.write("\u0131\5\20\t\17\u00eb\u00ec\f\r\2\2\u00ec\u00ed\7\23") + buf.write("\2\2\u00ed\u0131\5\20\t\16\u00ee\u00ef\f\f\2\2\u00ef\u00f0") + buf.write("\7\24\2\2\u00f0\u0131\5\20\t\r\u00f1\u00f2\f\13\2\2\u00f2") + buf.write("\u00f3\7\25\2\2\u00f3\u0131\5\20\t\f\u00f4\u00f5\f\n\2") + buf.write("\2\u00f5\u00f6\t\b\2\2\u00f6\u0131\5\20\t\13\u00f7\u00f8") + buf.write("\f\b\2\2\u00f8\u00f9\t\t\2\2\u00f9\u0131\5\20\t\b\u00fa") + buf.write("\u00fb\f\6\2\2\u00fb\u00fc\79\2\2\u00fc\u0131\5\20\t\6") + buf.write("\u00fd\u00fe\f\5\2\2\u00fe\u00ff\7:\2\2\u00ff\u0131\5") + buf.write("\20\t\5\u0100\u0101\f\4\2\2\u0101\u0102\7;\2\2\u0102\u0103") + buf.write("\5\20\t\2\u0103\u0104\7(\2\2\u0104\u0105\5\20\t\4\u0105") + buf.write("\u0131\3\2\2\2\u0106\u0107\f\27\2\2\u0107\u0108\7+\2\2") + buf.write("\u0108\u0109\5\22\n\2\u0109\u010a\7,\2\2\u010a\u0131\3") + buf.write("\2\2\2\u010b\u010c\f\26\2\2\u010c\u010e\7+\2\2\u010d\u010f") + buf.write("\5\20\t\2\u010e\u010d\3\2\2\2\u010e\u010f\3\2\2\2\u010f") + buf.write("\u0110\3\2\2\2\u0110\u0112\7(\2\2\u0111\u0113\5\20\t\2") + buf.write("\u0112\u0111\3\2\2\2\u0112\u0113\3\2\2\2\u0113\u0118\3") + buf.write("\2\2\2\u0114\u0116\7(\2\2\u0115\u0117\5\20\t\2\u0116\u0115") + buf.write("\3\2\2\2\u0116\u0117\3\2\2\2\u0117\u0119\3\2\2\2\u0118") + buf.write("\u0114\3\2\2\2\u0118\u0119\3\2\2\2\u0119\u011a\3\2\2\2") + buf.write("\u011a\u0131\7,\2\2\u011b\u011c\f\25\2\2\u011c\u011d\7") + buf.write("-\2\2\u011d\u0131\7K\2\2\u011e\u011f\f\24\2\2\u011f\u0125") + buf.write("\7$\2\2\u0120\u0121\5\30\r\2\u0121\u0122\7\31\2\2\u0122") + buf.write("\u0124\3\2\2\2\u0123\u0120\3\2\2\2\u0124\u0127\3\2\2\2") + buf.write("\u0125\u0123\3\2\2\2\u0125\u0126\3\2\2\2\u0126\u0129\3") + buf.write("\2\2\2\u0127\u0125\3\2\2\2\u0128\u012a\5\30\r\2\u0129") + buf.write("\u0128\3\2\2\2\u0129\u012a\3\2\2\2\u012a\u012b\3\2\2\2") + buf.write("\u012b\u0131\7%\2\2\u012c\u012d\f\23\2\2\u012d\u0131\7") + buf.write(".\2\2\u012e\u012f\f\t\2\2\u012f\u0131\7\61\2\2\u0130\u00df") + buf.write("\3\2\2\2\u0130\u00e2\3\2\2\2\u0130\u00e5\3\2\2\2\u0130") + buf.write("\u00e8\3\2\2\2\u0130\u00eb\3\2\2\2\u0130\u00ee\3\2\2\2") + buf.write("\u0130\u00f1\3\2\2\2\u0130\u00f4\3\2\2\2\u0130\u00f7\3") + buf.write("\2\2\2\u0130\u00fa\3\2\2\2\u0130\u00fd\3\2\2\2\u0130\u0100") + buf.write("\3\2\2\2\u0130\u0106\3\2\2\2\u0130\u010b\3\2\2\2\u0130") + buf.write("\u011b\3\2\2\2\u0130\u011e\3\2\2\2\u0130\u012c\3\2\2\2") + buf.write("\u0130\u012e\3\2\2\2\u0131\u0134\3\2\2\2\u0132\u0130\3") + buf.write("\2\2\2\u0132\u0133\3\2\2\2\u0133\21\3\2\2\2\u0134\u0132") + buf.write("\3\2\2\2\u0135\u0136\5\20\t\2\u0136\u0137\7\31\2\2\u0137") + buf.write("\u0139\3\2\2\2\u0138\u0135\3\2\2\2\u0139\u013c\3\2\2\2") + buf.write("\u013a\u0138\3\2\2\2\u013a\u013b\3\2\2\2\u013b\u013d\3") + buf.write("\2\2\2\u013c\u013a\3\2\2\2\u013d\u013e\5\20\t\2\u013e") + buf.write("\23\3\2\2\2\u013f\u0140\5\22\n\2\u0140\u0141\7\2\2\3\u0141") + buf.write("\25\3\2\2\2\u0142\u0143\7 \2\2\u0143\u0144\5\22\n\2\u0144") + buf.write("\u0145\7!\2\2\u0145\u0148\5\22\n\2\u0146\u0147\7\"\2\2") + buf.write("\u0147\u0149\5\22\n\2\u0148\u0146\3\2\2\2\u0148\u0149") + buf.write("\3\2\2\2\u0149\u014d\3\2\2\2\u014a\u014b\7\32\2\2\u014b") + buf.write("\u014d\5\20\t\2\u014c\u0142\3\2\2\2\u014c\u014a\3\2\2") + buf.write("\2\u014d\27\3\2\2\2\u014e\u014f\7K\2\2\u014f\u0151\7\n") + buf.write("\2\2\u0150\u014e\3\2\2\2\u0150\u0151\3\2\2\2\u0151\u0152") + buf.write("\3\2\2\2\u0152\u0153\5\20\t\2\u0153\31\3\2\2\2\u0154\u015c") + buf.write("\7G\2\2\u0155\u015c\7H\2\2\u0156\u015c\t\n\2\2\u0157\u015c") + buf.write("\7I\2\2\u0158\u015c\7J\2\2\u0159\u015c\7@\2\2\u015a\u015c") + buf.write("\7K\2\2\u015b\u0154\3\2\2\2\u015b\u0155\3\2\2\2\u015b") + buf.write("\u0156\3\2\2\2\u015b\u0157\3\2\2\2\u015b\u0158\3\2\2\2") + buf.write("\u015b\u0159\3\2\2\2\u015b\u015a\3\2\2\2\u015c\33\3\2") + buf.write("\2\2\u015d\u015e\7K\2\2\u015e\u0160\7\31\2\2\u015f\u015d") + buf.write("\3\2\2\2\u0160\u0163\3\2\2\2\u0161\u015f\3\2\2\2\u0161") + buf.write("\u0162\3\2\2\2\u0162\u0164\3\2\2\2\u0163\u0161\3\2\2\2") + buf.write("\u0164\u0165\7K\2\2\u0165\35\3\2\2\2\u0166\u0167\b\20") + buf.write("\1\2\u0167\u0173\t\13\2\2\u0168\u0169\7$\2\2\u0169\u016a") + buf.write("\5\36\20\2\u016a\u016b\7%\2\2\u016b\u0173\3\2\2\2\u016c") + buf.write("\u016d\7+\2\2\u016d\u016e\5\36\20\2\u016e\u016f\7,\2\2") + buf.write("\u016f\u0173\3\2\2\2\u0170\u0171\7=\2\2\u0171\u0173\5") + buf.write("\36\20\3\u0172\u0166\3\2\2\2\u0172\u0168\3\2\2\2\u0172") + buf.write("\u016c\3\2\2\2\u0172\u0170\3\2\2\2\u0173\u017e\3\2\2\2") + buf.write("\u0174\u0175\f\5\2\2\u0175\u0176\7\f\2\2\u0176\u017d\5") + buf.write("\36\20\5\u0177\u0178\f\4\2\2\u0178\u0179\7=\2\2\u0179") + buf.write("\u017d\5\36\20\4\u017a\u017b\f\6\2\2\u017b\u017d\7;\2") + buf.write("\2\u017c\u0174\3\2\2\2\u017c\u0177\3\2\2\2\u017c\u017a") + buf.write("\3\2\2\2\u017d\u0180\3\2\2\2\u017e\u017c\3\2\2\2\u017e") + buf.write("\u017f\3\2\2\2\u017f\37\3\2\2\2\u0180\u017e\3\2\2\2,#") + buf.write(",\66;AHTV]kq\u0083\u0090\u0094\u0098\u009e\u00a0\u00a6") + buf.write("\u00ac\u00bc\u00c0\u00c8\u00d5\u00d9\u00dd\u010e\u0112") + buf.write("\u0116\u0118\u0125\u0129\u0130\u0132\u013a\u0148\u014c") + buf.write("\u0150\u015b\u0161\u0172\u017c\u017e") return buf.getvalue() @@ -212,10 +215,10 @@ class PyxellParser ( Parser ): "'if'", "'do'", "'elif'", "'else'", "'while'", "'until'", "'for'", "'in'", "'step'", "'func'", "'('", "')'", "'def'", "'extern'", "':'", "'{'", "'}'", "'['", "']'", - "'.'", "'~'", "'..'", "'...'", "'=='", "'!='", "'<'", - "'<='", "'>'", "'>='", "'not'", "'and'", "'or'", "'?'", - "'lambda'", "'->'", "'true'", "'false'", "'Void'", - "'Int'", "'Float'", "'Bool'", "'Char'", "'String'" ] + "'.'", "'!'", "'~'", "'..'", "'...'", "'=='", "'!='", + "'<'", "'<='", "'>'", "'>='", "'not'", "'and'", "'or'", + "'?'", "'lambda'", "'->'", "'true'", "'false'", "'null'", + "'Void'", "'Int'", "'Float'", "'Bool'", "'Char'", "'String'" ] symbolicNames = [ "", "", "", "", "", "", "", "", @@ -233,8 +236,9 @@ class PyxellParser ( Parser ): "", "", "", "", "", "", "", "", "", "", "", "", - "", "", "", "INT", "FLOAT", - "CHAR", "STRING", "ID", "COMMENT", "WS", "ERR" ] + "", "", "", "", + "", "INT", "FLOAT", "CHAR", "STRING", "ID", + "COMMENT", "WS", "ERR" ] RULE_program = 0 RULE_stmt = 1 @@ -323,14 +327,16 @@ class PyxellParser ( Parser ): T__63=64 T__64=65 T__65=66 - INT=67 - FLOAT=68 - CHAR=69 - STRING=70 - ID=71 - COMMENT=72 - WS=73 - ERR=74 + T__66=67 + T__67=68 + INT=69 + FLOAT=70 + CHAR=71 + STRING=72 + ID=73 + COMMENT=74 + WS=75 + ERR=76 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -379,7 +385,7 @@ def program(self): self.state = 33 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__40) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__52) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0): + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__40) | (1 << PyxellParser.T__44) | (1 << PyxellParser.T__53) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.T__66 - 64)) | (1 << (PyxellParser.T__67 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0): self.state = 30 self.stmt() self.state = 35 @@ -431,7 +437,7 @@ def stmt(self): self.state = 42 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__1, PyxellParser.T__5, PyxellParser.T__6, PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__19, PyxellParser.T__20, PyxellParser.T__21, PyxellParser.T__33, PyxellParser.T__40, PyxellParser.T__43, PyxellParser.T__52, PyxellParser.T__56, PyxellParser.T__57, PyxellParser.T__58, PyxellParser.T__59, PyxellParser.T__60, PyxellParser.T__61, PyxellParser.T__62, PyxellParser.T__63, PyxellParser.T__64, PyxellParser.T__65, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: + if token in [PyxellParser.T__1, PyxellParser.T__5, PyxellParser.T__6, PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__19, PyxellParser.T__20, PyxellParser.T__21, PyxellParser.T__33, PyxellParser.T__40, PyxellParser.T__44, PyxellParser.T__53, PyxellParser.T__57, PyxellParser.T__58, PyxellParser.T__59, PyxellParser.T__60, PyxellParser.T__61, PyxellParser.T__62, PyxellParser.T__63, PyxellParser.T__64, PyxellParser.T__65, PyxellParser.T__66, PyxellParser.T__67, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: self.enterOuterAlt(localctx, 1) self.state = 38 self.simple_stmt() @@ -685,7 +691,7 @@ def simple_stmt(self): self.state = 57 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__52 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__44 - 13)) | (1 << (PyxellParser.T__53 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): self.state = 56 self.tuple_expr() @@ -771,7 +777,7 @@ def simple_stmt(self): self.state = 82 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__52 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__44 - 13)) | (1 << (PyxellParser.T__53 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): self.state = 81 self.tuple_expr() @@ -1102,7 +1108,7 @@ def compound_stmt(self): self.state = 146 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 34)) & ~0x3f) == 0 and ((1 << (_la - 34)) & ((1 << (PyxellParser.T__33 - 34)) | (1 << (PyxellParser.T__40 - 34)) | (1 << (PyxellParser.T__57 - 34)) | (1 << (PyxellParser.T__60 - 34)) | (1 << (PyxellParser.T__61 - 34)) | (1 << (PyxellParser.T__62 - 34)) | (1 << (PyxellParser.T__63 - 34)) | (1 << (PyxellParser.T__64 - 34)) | (1 << (PyxellParser.T__65 - 34)))) != 0): + if ((((_la - 34)) & ~0x3f) == 0 and ((1 << (_la - 34)) & ((1 << (PyxellParser.T__33 - 34)) | (1 << (PyxellParser.T__40 - 34)) | (1 << (PyxellParser.T__58 - 34)) | (1 << (PyxellParser.T__62 - 34)) | (1 << (PyxellParser.T__63 - 34)) | (1 << (PyxellParser.T__64 - 34)) | (1 << (PyxellParser.T__65 - 34)) | (1 << (PyxellParser.T__66 - 34)) | (1 << (PyxellParser.T__67 - 34)))) != 0): self.state = 145 self.func_arg() @@ -1112,7 +1118,7 @@ def compound_stmt(self): self.state = 150 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 34)) & ~0x3f) == 0 and ((1 << (_la - 34)) & ((1 << (PyxellParser.T__33 - 34)) | (1 << (PyxellParser.T__40 - 34)) | (1 << (PyxellParser.T__57 - 34)) | (1 << (PyxellParser.T__60 - 34)) | (1 << (PyxellParser.T__61 - 34)) | (1 << (PyxellParser.T__62 - 34)) | (1 << (PyxellParser.T__63 - 34)) | (1 << (PyxellParser.T__64 - 34)) | (1 << (PyxellParser.T__65 - 34)))) != 0): + if ((((_la - 34)) & ~0x3f) == 0 and ((1 << (_la - 34)) & ((1 << (PyxellParser.T__33 - 34)) | (1 << (PyxellParser.T__40 - 34)) | (1 << (PyxellParser.T__58 - 34)) | (1 << (PyxellParser.T__62 - 34)) | (1 << (PyxellParser.T__63 - 34)) | (1 << (PyxellParser.T__64 - 34)) | (1 << (PyxellParser.T__65 - 34)) | (1 << (PyxellParser.T__66 - 34)) | (1 << (PyxellParser.T__67 - 34)))) != 0): self.state = 149 localctx.ret = self.typ(0) @@ -1261,7 +1267,7 @@ def block(self): self.state = 170 self._errHandler.sync(self) _la = self._input.LA(1) - if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__40) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__52) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0)): + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__40) | (1 << PyxellParser.T__44) | (1 << PyxellParser.T__53) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.T__66 - 64)) | (1 << (PyxellParser.T__67 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0)): break self.state = 172 @@ -1653,7 +1659,7 @@ def expr(self, _p:int=0): self.state = 190 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__52 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__44 - 13)) | (1 << (PyxellParser.T__53 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): self.state = 189 self.expr(0) @@ -1693,7 +1699,7 @@ def expr(self, _p:int=0): self.state = 202 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__43))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__44))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -1707,7 +1713,7 @@ def expr(self, _p:int=0): self._ctx = localctx _prevctx = localctx self.state = 204 - localctx.op = self.match(PyxellParser.T__52) + localctx.op = self.match(PyxellParser.T__53) self.state = 205 self.expr(5) pass @@ -1717,7 +1723,7 @@ def expr(self, _p:int=0): self._ctx = localctx _prevctx = localctx self.state = 206 - self.match(PyxellParser.T__56) + self.match(PyxellParser.T__57) self.state = 211 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,22,self._ctx) @@ -1740,14 +1746,14 @@ def expr(self, _p:int=0): self.state = 217 - self.match(PyxellParser.T__57) + self.match(PyxellParser.T__58) self.state = 218 self.expr(1) pass self._ctx.stop = self._input.LT(-1) - self.state = 302 + self.state = 304 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,32,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: @@ -1755,7 +1761,7 @@ def expr(self, _p:int=0): if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 300 + self.state = 302 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,31,self._ctx) if la_ == 1: @@ -1877,7 +1883,7 @@ def expr(self, _p:int=0): self.state = 243 localctx.dots = self._input.LT(1) _la = self._input.LA(1) - if not(_la==PyxellParser.T__44 or _la==PyxellParser.T__45): + if not(_la==PyxellParser.T__45 or _la==PyxellParser.T__46): localctx.dots = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -1896,7 +1902,7 @@ def expr(self, _p:int=0): self.state = 246 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__46) | (1 << PyxellParser.T__47) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__49) | (1 << PyxellParser.T__50) | (1 << PyxellParser.T__51))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__47) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__49) | (1 << PyxellParser.T__50) | (1 << PyxellParser.T__51) | (1 << PyxellParser.T__52))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -1913,7 +1919,7 @@ def expr(self, _p:int=0): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") self.state = 249 - localctx.op = self.match(PyxellParser.T__53) + localctx.op = self.match(PyxellParser.T__54) self.state = 250 self.expr(4) pass @@ -1926,7 +1932,7 @@ def expr(self, _p:int=0): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") self.state = 252 - localctx.op = self.match(PyxellParser.T__54) + localctx.op = self.match(PyxellParser.T__55) self.state = 253 self.expr(3) pass @@ -1939,7 +1945,7 @@ def expr(self, _p:int=0): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") self.state = 255 - self.match(PyxellParser.T__55) + self.match(PyxellParser.T__56) self.state = 256 self.expr(0) self.state = 257 @@ -1952,9 +1958,9 @@ def expr(self, _p:int=0): localctx = PyxellParser.ExprIndexContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 260 - if not self.precpred(self._ctx, 20): + if not self.precpred(self._ctx, 21): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 20)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 21)") self.state = 261 self.match(PyxellParser.T__40) self.state = 262 @@ -1967,15 +1973,15 @@ def expr(self, _p:int=0): localctx = PyxellParser.ExprSliceContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 265 - if not self.precpred(self._ctx, 19): + if not self.precpred(self._ctx, 20): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 19)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 20)") self.state = 266 self.match(PyxellParser.T__40) self.state = 268 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__52 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__44 - 13)) | (1 << (PyxellParser.T__53 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): self.state = 267 localctx.e1 = self.expr(0) @@ -1985,7 +1991,7 @@ def expr(self, _p:int=0): self.state = 272 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__52 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__44 - 13)) | (1 << (PyxellParser.T__53 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): self.state = 271 localctx.e2 = self.expr(0) @@ -1999,7 +2005,7 @@ def expr(self, _p:int=0): self.state = 276 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__52 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__44 - 13)) | (1 << (PyxellParser.T__53 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): self.state = 275 localctx.e3 = self.expr(0) @@ -2014,9 +2020,9 @@ def expr(self, _p:int=0): localctx = PyxellParser.ExprAttrContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 281 - if not self.precpred(self._ctx, 18): + if not self.precpred(self._ctx, 19): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 18)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 19)") self.state = 282 self.match(PyxellParser.T__42) self.state = 283 @@ -2027,9 +2033,9 @@ def expr(self, _p:int=0): localctx = PyxellParser.ExprCallContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 284 - if not self.precpred(self._ctx, 17): + if not self.precpred(self._ctx, 18): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 17)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 18)") self.state = 285 self.match(PyxellParser.T__33) self.state = 291 @@ -2048,7 +2054,7 @@ def expr(self, _p:int=0): self.state = 295 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__52 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__44 - 13)) | (1 << (PyxellParser.T__53 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): self.state = 294 self.call_arg() @@ -2058,18 +2064,29 @@ def expr(self, _p:int=0): pass elif la_ == 17: - localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + localctx = PyxellParser.ExprUnaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 298 + if not self.precpred(self._ctx, 17): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 17)") + self.state = 299 + localctx.op = self.match(PyxellParser.T__43) + pass + + elif la_ == 18: + localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) + self.state = 300 if not self.precpred(self._ctx, 7): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") - self.state = 299 - localctx.dots = self.match(PyxellParser.T__45) + self.state = 301 + localctx.dots = self.match(PyxellParser.T__46) pass - self.state = 304 + self.state = 306 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,32,self._ctx) @@ -2126,20 +2143,20 @@ def tuple_expr(self): try: localctx = PyxellParser.ExprTupleContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 310 + self.state = 312 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,33,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 305 + self.state = 307 self.expr(0) - self.state = 306 + self.state = 308 self.match(PyxellParser.T__22) - self.state = 312 + self.state = 314 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,33,self._ctx) - self.state = 313 + self.state = 315 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -2193,9 +2210,9 @@ def interpolation_expr(self): try: localctx = PyxellParser.ExprInterpolationContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 315 + self.state = 317 self.tuple_expr() - self.state = 316 + self.state = 318 self.match(PyxellParser.EOF) except RecognitionException as re: localctx.exception = re @@ -2266,27 +2283,27 @@ def comprehension(self): self.enterRule(localctx, 20, self.RULE_comprehension) self._la = 0 # Token type try: - self.state = 328 + self.state = 330 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__29]: localctx = PyxellParser.ComprehensionGeneratorContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 318 + self.state = 320 self.match(PyxellParser.T__29) - self.state = 319 + self.state = 321 self.tuple_expr() - self.state = 320 + self.state = 322 self.match(PyxellParser.T__30) - self.state = 321 + self.state = 323 self.tuple_expr() - self.state = 324 + self.state = 326 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__31: - self.state = 322 + self.state = 324 self.match(PyxellParser.T__31) - self.state = 323 + self.state = 325 self.tuple_expr() @@ -2294,9 +2311,9 @@ def comprehension(self): elif token in [PyxellParser.T__23]: localctx = PyxellParser.ComprehensionFilterContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 326 + self.state = 328 self.match(PyxellParser.T__23) - self.state = 327 + self.state = 329 self.expr(0) pass else: @@ -2354,17 +2371,17 @@ def call_arg(self): try: localctx = PyxellParser.CallArgContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 332 + self.state = 334 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,36,self._ctx) if la_ == 1: - self.state = 330 + self.state = 332 self.match(PyxellParser.ID) - self.state = 331 + self.state = 333 self.match(PyxellParser.T__7) - self.state = 334 + self.state = 336 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -2421,6 +2438,20 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) + class AtomNullContext(AtomContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.AtomContext + super().__init__(parser) + self.copyFrom(ctx) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAtomNull" ): + return visitor.visitAtomNull(self) + else: + return visitor.visitChildren(self) + + class AtomIntContext(AtomContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.AtomContext @@ -2492,27 +2523,27 @@ def atom(self): self.enterRule(localctx, 24, self.RULE_atom) self._la = 0 # Token type try: - self.state = 342 + self.state = 345 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: localctx = PyxellParser.AtomIntContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 336 + self.state = 338 self.match(PyxellParser.INT) pass elif token in [PyxellParser.FLOAT]: localctx = PyxellParser.AtomFloatContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 337 + self.state = 339 self.match(PyxellParser.FLOAT) pass - elif token in [PyxellParser.T__58, PyxellParser.T__59]: + elif token in [PyxellParser.T__59, PyxellParser.T__60]: localctx = PyxellParser.AtomBoolContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 338 + self.state = 340 _la = self._input.LA(1) - if not(_la==PyxellParser.T__58 or _la==PyxellParser.T__59): + if not(_la==PyxellParser.T__59 or _la==PyxellParser.T__60): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -2521,19 +2552,25 @@ def atom(self): elif token in [PyxellParser.CHAR]: localctx = PyxellParser.AtomCharContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 339 + self.state = 341 self.match(PyxellParser.CHAR) pass elif token in [PyxellParser.STRING]: localctx = PyxellParser.AtomStringContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 340 + self.state = 342 self.match(PyxellParser.STRING) pass + elif token in [PyxellParser.T__61]: + localctx = PyxellParser.AtomNullContext(self, localctx) + self.enterOuterAlt(localctx, 6) + self.state = 343 + self.match(PyxellParser.T__61) + pass elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) - self.enterOuterAlt(localctx, 6) - self.state = 341 + self.enterOuterAlt(localctx, 7) + self.state = 344 self.match(PyxellParser.ID) pass else: @@ -2578,20 +2615,20 @@ def id_list(self): self.enterRule(localctx, 26, self.RULE_id_list) try: self.enterOuterAlt(localctx, 1) - self.state = 348 + self.state = 351 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,38,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 344 + self.state = 347 self.match(PyxellParser.ID) - self.state = 345 + self.state = 348 self.match(PyxellParser.T__22) - self.state = 350 + self.state = 353 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,38,self._ctx) - self.state = 351 + self.state = 354 self.match(PyxellParser.ID) except RecognitionException as re: localctx.exception = re @@ -2688,6 +2725,23 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) + class TypeNullableContext(TypContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.TypContext + super().__init__(parser) + self.copyFrom(ctx) + + def typ(self): + return self.getTypedRuleContext(PyxellParser.TypContext,0) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeNullable" ): + return visitor.visitTypeNullable(self) + else: + return visitor.visitChildren(self) + + class TypeFuncContext(TypContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.TypContext @@ -2733,17 +2787,17 @@ def typ(self, _p:int=0): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 365 + self.state = 368 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__60, PyxellParser.T__61, PyxellParser.T__62, PyxellParser.T__63, PyxellParser.T__64, PyxellParser.T__65]: + if token in [PyxellParser.T__62, PyxellParser.T__63, PyxellParser.T__64, PyxellParser.T__65, PyxellParser.T__66, PyxellParser.T__67]: localctx = PyxellParser.TypePrimitiveContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 354 + self.state = 357 _la = self._input.LA(1) - if not(((((_la - 61)) & ~0x3f) == 0 and ((1 << (_la - 61)) & ((1 << (PyxellParser.T__60 - 61)) | (1 << (PyxellParser.T__61 - 61)) | (1 << (PyxellParser.T__62 - 61)) | (1 << (PyxellParser.T__63 - 61)) | (1 << (PyxellParser.T__64 - 61)) | (1 << (PyxellParser.T__65 - 61)))) != 0)): + if not(((((_la - 63)) & ~0x3f) == 0 and ((1 << (_la - 63)) & ((1 << (PyxellParser.T__62 - 63)) | (1 << (PyxellParser.T__63 - 63)) | (1 << (PyxellParser.T__64 - 63)) | (1 << (PyxellParser.T__65 - 63)) | (1 << (PyxellParser.T__66 - 63)) | (1 << (PyxellParser.T__67 - 63)))) != 0)): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -2753,38 +2807,38 @@ def typ(self, _p:int=0): localctx = PyxellParser.TypeParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 355 + self.state = 358 self.match(PyxellParser.T__33) - self.state = 356 + self.state = 359 self.typ(0) - self.state = 357 + self.state = 360 self.match(PyxellParser.T__34) pass elif token in [PyxellParser.T__40]: localctx = PyxellParser.TypeArrayContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 359 + self.state = 362 self.match(PyxellParser.T__40) - self.state = 360 + self.state = 363 self.typ(0) - self.state = 361 + self.state = 364 self.match(PyxellParser.T__41) pass - elif token in [PyxellParser.T__57]: + elif token in [PyxellParser.T__58]: localctx = PyxellParser.TypeFunc0Context(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 363 - self.match(PyxellParser.T__57) - self.state = 364 + self.state = 366 + self.match(PyxellParser.T__58) + self.state = 367 self.typ(1) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 375 + self.state = 380 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,41,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: @@ -2792,37 +2846,48 @@ def typ(self, _p:int=0): if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 373 + self.state = 378 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,40,self._ctx) if la_ == 1: localctx = PyxellParser.TypeTupleContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 367 + self.state = 370 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 368 + self.state = 371 self.match(PyxellParser.T__9) - self.state = 369 + self.state = 372 self.typ(3) pass elif la_ == 2: localctx = PyxellParser.TypeFuncContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 370 + self.state = 373 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 371 - self.match(PyxellParser.T__57) - self.state = 372 + self.state = 374 + self.match(PyxellParser.T__58) + self.state = 375 self.typ(2) pass + elif la_ == 3: + localctx = PyxellParser.TypeNullableContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) + self.state = 376 + if not self.precpred(self._ctx, 4): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") + self.state = 377 + self.match(PyxellParser.T__56) + pass + - self.state = 377 + self.state = 382 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,41,self._ctx) @@ -2897,34 +2962,42 @@ def expr_sempred(self, localctx:ExprContext, predIndex:int): if predIndex == 12: - return self.precpred(self._ctx, 20) + return self.precpred(self._ctx, 21) if predIndex == 13: - return self.precpred(self._ctx, 19) + return self.precpred(self._ctx, 20) if predIndex == 14: - return self.precpred(self._ctx, 18) + return self.precpred(self._ctx, 19) if predIndex == 15: - return self.precpred(self._ctx, 17) + return self.precpred(self._ctx, 18) if predIndex == 16: + return self.precpred(self._ctx, 17) + + + if predIndex == 17: return self.precpred(self._ctx, 7) def typ_sempred(self, localctx:TypContext, predIndex:int): - if predIndex == 17: + if predIndex == 18: return self.precpred(self._ctx, 3) - if predIndex == 18: + if predIndex == 19: return self.precpred(self._ctx, 2) + if predIndex == 20: + return self.precpred(self._ctx, 4) + + diff --git a/src/antlr/PyxellVisitor.py b/src/antlr/PyxellVisitor.py index 13f8ec5d..7c3b1854 100644 --- a/src/antlr/PyxellVisitor.py +++ b/src/antlr/PyxellVisitor.py @@ -224,6 +224,11 @@ def visitAtomString(self, ctx:PyxellParser.AtomStringContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#AtomNull. + def visitAtomNull(self, ctx:PyxellParser.AtomNullContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#AtomId. def visitAtomId(self, ctx:PyxellParser.AtomIdContext): return self.visitChildren(ctx) @@ -254,6 +259,11 @@ def visitTypeFunc0(self, ctx:PyxellParser.TypeFunc0Context): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#TypeNullable. + def visitTypeNullable(self, ctx:PyxellParser.TypeNullableContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#TypeFunc. def visitTypeFunc(self, ctx:PyxellParser.TypeFuncContext): return self.visitChildren(ctx) diff --git a/src/ast.py b/src/ast.py index ae8346f6..3f7c7026 100644 --- a/src/ast.py +++ b/src/ast.py @@ -330,6 +330,11 @@ def visitAtomString(self, ctx): 'string': ast.literal_eval(self.visit(ctx.STRING())), } + def visitAtomNull(self, ctx): + return { + **_node(ctx, 'AtomNull'), + } + def visitAtomId(self, ctx): id = self.visit(ctx.ID()) if id == '_': @@ -358,6 +363,9 @@ def visitTypeParentheses(self, ctx): def visitTypeArray(self, ctx): return tArray(self.visit(ctx.typ())) + def visitTypeNullable(self, ctx): + return tNullable(self.visit(ctx.typ())) + def visitTypeTuple(self, ctx): types = [] while True: diff --git a/src/compiler.py b/src/compiler.py index 7d989097..ac6d40fb 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -222,8 +222,10 @@ def call(self, name, *values): return self.builder.call(func, values) def cast(self, node, value, type): - if not types_compatible(value.type, type): + if not can_cast(value.type, type): self.throw(node, err.IllegalAssignment(value.type, type)) + if not value.type.isNullable() and type.isNullable(): + return self.cast(node, self.nullable(value), type) return value if value.type == type else self.builder.bitcast(value, type) def unify(self, node, *values): @@ -297,7 +299,7 @@ def inc(self, ptr, step=vInt(1)): self.builder.store(add(self.builder.load(ptr), step), ptr) def sizeof(self, type, length=vInt(1)): - return self.builder.ptrtoint(self.builder.gep(vNull(type), [length]), tInt) + return self.builder.ptrtoint(self.builder.gep(vNull(tPtr(type)), [length]), tInt) def malloc(self, type, length=vInt(1)): size = self.sizeof(type.pointee, length) @@ -319,17 +321,23 @@ def memcpy(self, dest, src, length): return self.builder.call(self.builtins['memcpy'], [dest, src, size]) def unaryop(self, node, op, value): - if op in ('+', '-'): - types = [tInt, tFloat] - elif op == '~': - types = [tInt] - elif op == 'not': - types = [tBool] - - if value.type not in types: - self.throw(node, err.NoUnaryOperator(op, value.type)) - - if op == '+': + if op == '!': + if not value.type.isNullable(): + self.throw(node, err.NotNullable(value.type)) + else: + if op in ('+', '-'): + types = [tInt, tFloat] + elif op == '~': + types = [tInt] + elif op == 'not': + types = [tBool] + + if value.type not in types: + self.throw(node, err.NoUnaryOperator(op, value.type)) + + if op == '!': + return self.extract(value) + elif op == '+': return value elif op == '-': if value.type == tInt: @@ -610,22 +618,24 @@ def write(self, str): self.builder.call(self.builtins['putchar'], [vChar(char)]) def print(self, node, value): - if value.type == tInt: + type = value.type + + if type == tInt: self.call('writeInt', value) - elif value.type == tFloat: + elif type == tFloat: self.call('writeFloat', value) - elif value.type == tBool: + elif type == tBool: self.call('writeBool', value) - elif value.type == tChar: + elif type == tChar: self.call('writeChar', value) - elif value.type.isString(): + elif type.isString(): self.call('write', value) - elif value.type.isArray(): + elif type.isArray(): self.write('[') length = self.extract(value, 1) @@ -650,6 +660,13 @@ def print(self, node, value): self.write(']') + elif type.isNullable(): + with self.builder.if_else(self.builder.icmp_signed('!=', value, vNull(type))) as (label_if, label_else): + with label_if: + self.print(node, self.extract(value)) + with label_else: + self.write('null') + elif value.type.isTuple(): for i in range(len(value.type.elements)): if i > 0: @@ -735,6 +752,11 @@ def array(self, subtype, values, length=None): return result + def nullable(self, value): + ptr = self.malloc(tNullable(value.type)) + self.builder.store(value, self.builder.gep(ptr, [vInt(0)])) + return ptr + def tuple(self, values): if len(values) == 1: return values[0] @@ -1489,6 +1511,9 @@ def compileAtomString(self, node): 'position': [e.line+node['position'][0]-1, e.column+node['position'][1]+1], }, str(e).partition(': ')[2][:-1]) + def compileAtomNull(self, node): + return vNull(tNullable(tUnknown)) + def compileAtomId(self, node): return self.get(node, node['id']) diff --git a/src/errors.py b/src/errors.py index 408660ff..850d9988 100644 --- a/src/errors.py +++ b/src/errors.py @@ -32,6 +32,7 @@ class PyxellError(Exception): NotIterable = lambda t: f"Type `{t.show()}` is not iterable" NotLvalue = lambda: f"Expression cannot be assigned to" NotFunction = lambda t: f"Type `{t.show()}` is not a function" + NotNullable = lambda t: f"Type `{t.show()}` is not nullable" NotPrintable = lambda t: f"Variable of type `{t.show()}` cannot be printed" RedeclaredIdentifier = lambda id: f"Identifier `{id}` is already declared" RepeatedArgument = lambda id: f"Repeated argument `{id}`" diff --git a/src/types.py b/src/types.py index 86b7aa45..56cd0c6b 100644 --- a/src/types.py +++ b/src/types.py @@ -7,9 +7,9 @@ __all__ = [ - 'tVoid', 'tInt', 'tFloat', 'tBool', 'tChar', 'tPtr', 'tString', 'tArray', 'tTuple', 'tFunc', 'tUnknown', + 'tVoid', 'tInt', 'tFloat', 'tBool', 'tChar', 'tPtr', 'tString', 'tArray', 'tNullable', 'tTuple', 'tFunc', 'tUnknown', 'Arg', - 'types_compatible', 'unify_types', + 'can_cast', 'unify_types', 'vInt', 'vFloat', 'vBool', 'vFalse', 'vTrue', 'vChar', 'vNull', 'vIndex', ] @@ -72,6 +72,17 @@ def isArray(type): return getattr(type, 'kind', None) == 'array' +def tNullable(subtype): + type = tPtr(subtype) + type.subtype = subtype + type.kind = 'nullable' + return type + +@extend_class(ll.Type) +def isNullable(type): + return getattr(type, 'kind', None) == 'nullable' + + def tTuple(elements): type = tPtr(CustomStructType(elements, 'tuple')) type.elements = elements @@ -117,14 +128,18 @@ def isUnknown(type): return False -def types_compatible(type1, type2): +def can_cast(type1, type2): if type1 == type2: return True if type1.isArray() and type2.isArray(): - return types_compatible(type1.subtype, type2.subtype) + return can_cast(type1.subtype, type2.subtype) + if type1.isNullable() and type2.isNullable(): + return can_cast(type1.subtype, type2.subtype) + if type2.isNullable(): + return can_cast(type1, type2.subtype) if type1.isTuple() and type2.isTuple(): return len(type1.elements) == len(type2.elements) and \ - all(types_compatible(t1, t2) for t1, t2 in zip(type1.elements, type2.elements)) + all(can_cast(t1, t2) for t1, t2 in zip(type1.elements, type2.elements)) if type1 == tUnknown or type2 == tUnknown: return True return False @@ -138,6 +153,9 @@ def unify_types(type1, type2): if type1.isArray() and type2.isArray(): subtype = unify_types(type1.subtype, type2.subtype) return tArray(subtype) if subtype else None + if type1.isNullable() or type2.isNullable(): + subtype = unify_types(type1.subtype if type1.isNullable() else type1, type2.subtype if type2.isNullable() else type2) + return tNullable(subtype) if subtype else None if type1.isTuple() and type2.isTuple(): elems = [unify_types(t1, t2) for t1, t2 in zip(type1.elements, type2.elements)] return tTuple(elems) if all(elems) and len(type1.elements) == len(type2.elements) else None @@ -164,10 +182,14 @@ def show(type): return 'String' if type.isArray(): return f'[{type.subtype.show()}]' + if type.isNullable(): + return f'{type.subtype.show()}?' if type.isTuple(): return '*'.join(t.show() for t in type.elements) if type.isFunc(): return '->'.join(arg.type.show() for arg in type.args) + '->' + type.ret.show() + if type == tUnknown: + return '' return str(type) @@ -191,8 +213,8 @@ def vBool(b): def vChar(c): return ll.Constant(tChar, ord(c)) -def vNull(type=tChar): - return ll.Constant(tPtr(type), 'null') +def vNull(type): + return ll.Constant(type, 'null') def vIndex(i): return ll.Constant(ll.IntType(32), i) diff --git a/test/bad/nullables/nullable02.err b/test/bad/nullables/nullable02.err index 5d89a8a8..c7dfc2a6 100644 --- a/test/bad/nullables/nullable02.err +++ b/test/bad/nullables/nullable02.err @@ -1 +1 @@ -Illegal assignment from `?` to `Char`. \ No newline at end of file +Illegal assignment from `?` to `Char`. \ No newline at end of file diff --git a/test/bad/nullables/nullable04.err b/test/bad/nullables/nullable04.err index 88ac9ead..a575da90 100644 --- a/test/bad/nullables/nullable04.err +++ b/test/bad/nullables/nullable04.err @@ -1 +1 @@ -Illegal assignment from `?` to `[Int]`. \ No newline at end of file +Illegal assignment from `?` to `[Int]`. \ No newline at end of file diff --git a/test/good/nullables/nullable05.px b/test/good/nullables/nullable05.px index ccbc2c4d..41758bf9 100644 --- a/test/good/nullables/nullable05.px +++ b/test/good/nullables/nullable05.px @@ -1,5 +1,6 @@ Int? x = 0 +i = 0 for i in 1..10^9 do x = null print i, x From c4ecb40515b39fec0c8a5961f58d26f1ef17c5bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Mon, 11 Nov 2019 20:27:35 +0100 Subject: [PATCH 061/100] Code cleanup --- src/compiler.py | 57 +++++++++++++++++++++++++++---------------------- src/types.py | 5 +---- 2 files changed, 32 insertions(+), 30 deletions(-) diff --git a/src/compiler.py b/src/compiler.py index ac6d40fb..9317b7dc 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -131,8 +131,11 @@ def get(self, node, id, load=True): ptr = self.env[id] return self.builder.load(ptr) if load else ptr - def extract(self, value, *indices): - return self.builder.load(self.builder.gep(value, [vInt(0), *map(vIndex, indices)])) + def extract(self, ptr, *indices): + return self.builder.load(self.builder.gep(ptr, [vInt(0), *[ll.Constant(ll.IntType(32), i) for i in indices]])) + + def insert(self, value, ptr, *indices): + return self.builder.store(value, self.builder.gep(ptr, [vInt(0), *[ll.Constant(ll.IntType(32), i) for i in indices]])) def index(self, node, *exprs, lvalue=False): collection, index = [self.compile(expr) for expr in exprs] @@ -388,10 +391,10 @@ def binaryop(self, node, op, left, right): cond = self.builder.icmp_signed('<', self.builder.load(index), length) self.builder.cbranch(cond, label_start, label_end) - value = self.malloc(type) - self.builder.store(dest, self.builder.gep(value, [vInt(0), vIndex(0)])) - self.builder.store(length, self.builder.gep(value, [vInt(0), vIndex(1)])) - return value + result = self.malloc(type) + self.insert(dest, result, 0) + self.insert(length, result, 1) + return result elif left.type == tInt and right.type.isCollection(): return self.binaryop(node, op, right, left) @@ -450,10 +453,10 @@ def binaryop(self, node, op, left, right): self.memcpy(array, array1, length1) self.memcpy(self.builder.gep(array, [length1]), array2, length2) - value = self.malloc(type) - self.builder.store(array, self.builder.gep(value, [vInt(0), vIndex(0)])) - self.builder.store(length, self.builder.gep(value, [vInt(0), vIndex(1)])) - return value + result = self.malloc(type) + self.insert(array, result, 0) + self.insert(length, result, 1) + return result elif left.type == tString and right.type == tChar: return self.binaryop(node, op, left, self.call('Char_toString', right)) @@ -681,16 +684,17 @@ def print(self, node, value): def string(self, lit): const = ll.Constant(ll.ArrayType(tChar, len(lit)), [vChar(c) for c in lit]) - result = self.malloc(tString) array = ll.GlobalVariable(self.module, const.type, self.module.get_unique_name('str')) array.global_constant = True array.initializer = const - memory = self.builder.gep(array, [vInt(0), vInt(0)]) - self.builder.store(memory, self.builder.gep(result, [vInt(0), vIndex(0)])) - self.builder.store(vInt(const.type.count), self.builder.gep(result, [vInt(0), vIndex(1)])) + memory = self.builder.gep(array, [vInt(0), vInt(0)]) + length = vInt(const.type.count) + result = self.malloc(tString) + self.insert(memory, result, 0) + self.insert(length, result, 1) return result def convert_string(self, node, lit): @@ -738,7 +742,6 @@ def convert_string(self, node, lit): def array(self, subtype, values, length=None): type = tArray(subtype) - result = self.malloc(type) if length is None: length = vInt(len(values)) @@ -747,15 +750,15 @@ def array(self, subtype, values, length=None): for i, value in enumerate(values): self.builder.store(value, self.builder.gep(memory, [vInt(i)])) - self.builder.store(memory, self.builder.gep(result, [vInt(0), vIndex(0)])) - self.builder.store(length, self.builder.gep(result, [vInt(0), vIndex(1)])) - + result = self.malloc(type) + self.insert(memory, result, 0) + self.insert(length, result, 1) return result def nullable(self, value): - ptr = self.malloc(tNullable(value.type)) - self.builder.store(value, self.builder.gep(ptr, [vInt(0)])) - return ptr + result = self.malloc(tNullable(value.type)) + self.insert(value, result) + return result def tuple(self, values): if len(values) == 1: @@ -765,7 +768,7 @@ def tuple(self, values): result = self.malloc(type) for i, value in enumerate(values): - self.builder.store(value, self.builder.gep(result, [vInt(0), vIndex(i)])) + self.insert(value, result, i) return result @@ -927,12 +930,13 @@ def compileStmtAppend(self, node): with self.builder.if_then(self.builder.icmp_signed('==', index, length)): length = self.builder.shl(length, vInt(1)) memory = self.realloc(self.extract(array, 0), length) - self.builder.store(memory, self.builder.gep(array, [vInt(0), vIndex(0)])) - self.builder.store(length, self.builder.gep(array, [vInt(0), vIndex(1)])) + self.insert(memory, array, 0) + self.insert(length, array, 1) value = self.compile(node['expr']) self.builder.store(value, self.builder.gep(self.extract(array, 0), [index])) - self.builder.store(self.builder.add(index, vInt(1)), self.lvalue(node, node['index'])) + + self.inc(self.lvalue(node, node['index'])) def compileStmtIf(self, node): exprs = node['exprs'] @@ -1260,7 +1264,7 @@ def compileExprArrayComprehension(self, node): result = self.compile(array) length = self.compile(index) - self.builder.store(length, self.builder.gep(result, [vInt(0), vIndex(1)])) + self.insert(length, result, 1) return result @@ -1310,6 +1314,7 @@ def compileExprSlice(self, node): result = self.compile(parse_expr('[{t}[{i}] for {i} in {a}...{b} step {c}]'.format(t=array['id'], a=start['id'], b=end['id'], c=step['id'], i=index['id']))) + # `CharArray_asString` is used directly, because `.join` would copy the array redundantly. return self.builder.call(self.get(node, 'CharArray_asString'), [result]) if type == tString else result def compileExprAttr(self, node): diff --git a/src/types.py b/src/types.py index 56cd0c6b..ad81aacb 100644 --- a/src/types.py +++ b/src/types.py @@ -10,7 +10,7 @@ 'tVoid', 'tInt', 'tFloat', 'tBool', 'tChar', 'tPtr', 'tString', 'tArray', 'tNullable', 'tTuple', 'tFunc', 'tUnknown', 'Arg', 'can_cast', 'unify_types', - 'vInt', 'vFloat', 'vBool', 'vFalse', 'vTrue', 'vChar', 'vNull', 'vIndex', + 'vInt', 'vFloat', 'vBool', 'vFalse', 'vTrue', 'vChar', 'vNull', ] @@ -215,6 +215,3 @@ def vChar(c): def vNull(type): return ll.Constant(type, 'null') - -def vIndex(i): - return ll.Constant(ll.IntType(32), i) From 60e22788fab3459fdefc553abdb82dafdefa8a04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Wed, 13 Nov 2019 21:10:54 +0100 Subject: [PATCH 062/100] Safe attributes and calls --- src/Pyxell.g4 | 2 +- src/antlr/Pyxell.interp | 4 +- src/antlr/Pyxell.tokens | 30 +- src/antlr/PyxellLexer.interp | 4 +- src/antlr/PyxellLexer.py | 82 +++--- src/antlr/PyxellLexer.tokens | 30 +- src/antlr/PyxellParser.py | 556 ++++++++++++++++++----------------- src/ast.py | 1 + src/compiler.py | 67 ++++- test/bad/nullables/op06.err | 1 + test/bad/nullables/op06.px | 3 + test/good/nullables/op04.px | 1 - test/good/nullables/op07.out | 1 + test/good/nullables/op07.px | 3 + 14 files changed, 430 insertions(+), 355 deletions(-) create mode 100644 test/bad/nullables/op06.err create mode 100644 test/bad/nullables/op06.px create mode 100644 test/good/nullables/op07.out create mode 100644 test/good/nullables/op07.px diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index 3d489e64..fa4d55bf 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -47,7 +47,7 @@ expr | '[' expr comprehension+ ']' # ExprArrayComprehension | expr '[' tuple_expr ']' # ExprIndex | expr '[' e1=expr? (':' e2=expr? (':' e3=expr?)?) ']' # ExprSlice - | expr '.' ID # ExprAttr + | expr safe='?'? '.' ID # ExprAttr | expr '(' (call_arg ',')* call_arg? ')' # ExprCall | expr op='!' # ExprUnaryOp | expr op='^' expr # ExprBinaryOp diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index 4b58ba6d..a5a23993 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -42,6 +42,7 @@ null '}' '[' ']' +'?' '.' '!' '~' @@ -56,7 +57,6 @@ null 'not' 'and' 'or' -'?' 'lambda' '->' 'true' @@ -175,4 +175,4 @@ typ atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 78, 386, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 3, 2, 7, 2, 34, 10, 2, 12, 2, 14, 2, 37, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 45, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 55, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 60, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 66, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 71, 10, 4, 12, 4, 14, 4, 74, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 85, 10, 4, 5, 4, 87, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 92, 10, 5, 12, 5, 14, 5, 95, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 106, 10, 6, 12, 6, 14, 6, 109, 11, 6, 3, 6, 3, 6, 3, 6, 5, 6, 114, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 132, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 143, 10, 6, 12, 6, 14, 6, 146, 11, 6, 3, 6, 5, 6, 149, 10, 6, 3, 6, 3, 6, 5, 6, 153, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 159, 10, 6, 5, 6, 161, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 167, 10, 7, 3, 8, 3, 8, 6, 8, 171, 10, 8, 13, 8, 14, 8, 172, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 187, 10, 9, 12, 9, 14, 9, 190, 11, 9, 3, 9, 5, 9, 193, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 6, 9, 199, 10, 9, 13, 9, 14, 9, 200, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 212, 10, 9, 12, 9, 14, 9, 215, 11, 9, 3, 9, 5, 9, 218, 10, 9, 3, 9, 3, 9, 5, 9, 222, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 271, 10, 9, 3, 9, 3, 9, 5, 9, 275, 10, 9, 3, 9, 3, 9, 5, 9, 279, 10, 9, 5, 9, 281, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 292, 10, 9, 12, 9, 14, 9, 295, 11, 9, 3, 9, 5, 9, 298, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 305, 10, 9, 12, 9, 14, 9, 308, 11, 9, 3, 10, 3, 10, 3, 10, 7, 10, 313, 10, 10, 12, 10, 14, 10, 316, 11, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 329, 10, 12, 3, 12, 3, 12, 5, 12, 333, 10, 12, 3, 13, 3, 13, 5, 13, 337, 10, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 348, 10, 14, 3, 15, 3, 15, 7, 15, 352, 10, 15, 12, 15, 14, 15, 355, 11, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 371, 10, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 7, 16, 381, 10, 16, 12, 16, 14, 16, 384, 11, 16, 3, 16, 2, 4, 16, 30, 17, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 2, 12, 3, 2, 11, 21, 3, 2, 22, 23, 4, 2, 15, 16, 47, 47, 3, 2, 12, 14, 3, 2, 15, 16, 3, 2, 17, 18, 3, 2, 48, 49, 3, 2, 50, 55, 3, 2, 62, 63, 3, 2, 65, 70, 2, 452, 2, 35, 3, 2, 2, 2, 4, 44, 3, 2, 2, 2, 6, 86, 3, 2, 2, 2, 8, 88, 3, 2, 2, 2, 10, 160, 3, 2, 2, 2, 12, 162, 3, 2, 2, 2, 14, 168, 3, 2, 2, 2, 16, 221, 3, 2, 2, 2, 18, 314, 3, 2, 2, 2, 20, 319, 3, 2, 2, 2, 22, 332, 3, 2, 2, 2, 24, 336, 3, 2, 2, 2, 26, 347, 3, 2, 2, 2, 28, 353, 3, 2, 2, 2, 30, 370, 3, 2, 2, 2, 32, 34, 5, 4, 3, 2, 33, 32, 3, 2, 2, 2, 34, 37, 3, 2, 2, 2, 35, 33, 3, 2, 2, 2, 35, 36, 3, 2, 2, 2, 36, 38, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 38, 39, 7, 2, 2, 3, 39, 3, 3, 2, 2, 2, 40, 41, 5, 6, 4, 2, 41, 42, 7, 3, 2, 2, 42, 45, 3, 2, 2, 2, 43, 45, 5, 10, 6, 2, 44, 40, 3, 2, 2, 2, 44, 43, 3, 2, 2, 2, 45, 5, 3, 2, 2, 2, 46, 47, 7, 4, 2, 2, 47, 54, 7, 75, 2, 2, 48, 49, 7, 5, 2, 2, 49, 55, 5, 28, 15, 2, 50, 51, 7, 6, 2, 2, 51, 55, 5, 28, 15, 2, 52, 53, 7, 7, 2, 2, 53, 55, 7, 75, 2, 2, 54, 48, 3, 2, 2, 2, 54, 50, 3, 2, 2, 2, 54, 52, 3, 2, 2, 2, 54, 55, 3, 2, 2, 2, 55, 87, 3, 2, 2, 2, 56, 87, 7, 8, 2, 2, 57, 59, 7, 9, 2, 2, 58, 60, 5, 18, 10, 2, 59, 58, 3, 2, 2, 2, 59, 60, 3, 2, 2, 2, 60, 87, 3, 2, 2, 2, 61, 62, 5, 30, 16, 2, 62, 65, 7, 75, 2, 2, 63, 64, 7, 10, 2, 2, 64, 66, 5, 18, 10, 2, 65, 63, 3, 2, 2, 2, 65, 66, 3, 2, 2, 2, 66, 87, 3, 2, 2, 2, 67, 68, 5, 8, 5, 2, 68, 69, 7, 10, 2, 2, 69, 71, 3, 2, 2, 2, 70, 67, 3, 2, 2, 2, 71, 74, 3, 2, 2, 2, 72, 70, 3, 2, 2, 2, 72, 73, 3, 2, 2, 2, 73, 75, 3, 2, 2, 2, 74, 72, 3, 2, 2, 2, 75, 87, 5, 18, 10, 2, 76, 77, 5, 16, 9, 2, 77, 78, 9, 2, 2, 2, 78, 79, 7, 10, 2, 2, 79, 80, 5, 16, 9, 2, 80, 87, 3, 2, 2, 2, 81, 87, 9, 3, 2, 2, 82, 84, 7, 24, 2, 2, 83, 85, 5, 18, 10, 2, 84, 83, 3, 2, 2, 2, 84, 85, 3, 2, 2, 2, 85, 87, 3, 2, 2, 2, 86, 46, 3, 2, 2, 2, 86, 56, 3, 2, 2, 2, 86, 57, 3, 2, 2, 2, 86, 61, 3, 2, 2, 2, 86, 72, 3, 2, 2, 2, 86, 76, 3, 2, 2, 2, 86, 81, 3, 2, 2, 2, 86, 82, 3, 2, 2, 2, 87, 7, 3, 2, 2, 2, 88, 93, 5, 16, 9, 2, 89, 90, 7, 25, 2, 2, 90, 92, 5, 16, 9, 2, 91, 89, 3, 2, 2, 2, 92, 95, 3, 2, 2, 2, 93, 91, 3, 2, 2, 2, 93, 94, 3, 2, 2, 2, 94, 9, 3, 2, 2, 2, 95, 93, 3, 2, 2, 2, 96, 97, 7, 26, 2, 2, 97, 98, 5, 16, 9, 2, 98, 99, 7, 27, 2, 2, 99, 107, 5, 14, 8, 2, 100, 101, 7, 28, 2, 2, 101, 102, 5, 16, 9, 2, 102, 103, 7, 27, 2, 2, 103, 104, 5, 14, 8, 2, 104, 106, 3, 2, 2, 2, 105, 100, 3, 2, 2, 2, 106, 109, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 107, 108, 3, 2, 2, 2, 108, 113, 3, 2, 2, 2, 109, 107, 3, 2, 2, 2, 110, 111, 7, 29, 2, 2, 111, 112, 7, 27, 2, 2, 112, 114, 5, 14, 8, 2, 113, 110, 3, 2, 2, 2, 113, 114, 3, 2, 2, 2, 114, 161, 3, 2, 2, 2, 115, 116, 7, 30, 2, 2, 116, 117, 5, 16, 9, 2, 117, 118, 7, 27, 2, 2, 118, 119, 5, 14, 8, 2, 119, 161, 3, 2, 2, 2, 120, 121, 7, 31, 2, 2, 121, 122, 5, 16, 9, 2, 122, 123, 7, 27, 2, 2, 123, 124, 5, 14, 8, 2, 124, 161, 3, 2, 2, 2, 125, 126, 7, 32, 2, 2, 126, 127, 5, 18, 10, 2, 127, 128, 7, 33, 2, 2, 128, 131, 5, 18, 10, 2, 129, 130, 7, 34, 2, 2, 130, 132, 5, 18, 10, 2, 131, 129, 3, 2, 2, 2, 131, 132, 3, 2, 2, 2, 132, 133, 3, 2, 2, 2, 133, 134, 7, 27, 2, 2, 134, 135, 5, 14, 8, 2, 135, 161, 3, 2, 2, 2, 136, 137, 7, 35, 2, 2, 137, 138, 7, 75, 2, 2, 138, 144, 7, 36, 2, 2, 139, 140, 5, 12, 7, 2, 140, 141, 7, 25, 2, 2, 141, 143, 3, 2, 2, 2, 142, 139, 3, 2, 2, 2, 143, 146, 3, 2, 2, 2, 144, 142, 3, 2, 2, 2, 144, 145, 3, 2, 2, 2, 145, 148, 3, 2, 2, 2, 146, 144, 3, 2, 2, 2, 147, 149, 5, 12, 7, 2, 148, 147, 3, 2, 2, 2, 148, 149, 3, 2, 2, 2, 149, 150, 3, 2, 2, 2, 150, 152, 7, 37, 2, 2, 151, 153, 5, 30, 16, 2, 152, 151, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 158, 3, 2, 2, 2, 154, 155, 7, 38, 2, 2, 155, 159, 5, 14, 8, 2, 156, 157, 7, 39, 2, 2, 157, 159, 7, 3, 2, 2, 158, 154, 3, 2, 2, 2, 158, 156, 3, 2, 2, 2, 159, 161, 3, 2, 2, 2, 160, 96, 3, 2, 2, 2, 160, 115, 3, 2, 2, 2, 160, 120, 3, 2, 2, 2, 160, 125, 3, 2, 2, 2, 160, 136, 3, 2, 2, 2, 161, 11, 3, 2, 2, 2, 162, 163, 5, 30, 16, 2, 163, 166, 7, 75, 2, 2, 164, 165, 7, 40, 2, 2, 165, 167, 5, 16, 9, 2, 166, 164, 3, 2, 2, 2, 166, 167, 3, 2, 2, 2, 167, 13, 3, 2, 2, 2, 168, 170, 7, 41, 2, 2, 169, 171, 5, 4, 3, 2, 170, 169, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 170, 3, 2, 2, 2, 172, 173, 3, 2, 2, 2, 173, 174, 3, 2, 2, 2, 174, 175, 7, 42, 2, 2, 175, 15, 3, 2, 2, 2, 176, 177, 8, 9, 1, 2, 177, 222, 5, 26, 14, 2, 178, 179, 7, 36, 2, 2, 179, 180, 5, 18, 10, 2, 180, 181, 7, 37, 2, 2, 181, 222, 3, 2, 2, 2, 182, 188, 7, 43, 2, 2, 183, 184, 5, 16, 9, 2, 184, 185, 7, 25, 2, 2, 185, 187, 3, 2, 2, 2, 186, 183, 3, 2, 2, 2, 187, 190, 3, 2, 2, 2, 188, 186, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 192, 3, 2, 2, 2, 190, 188, 3, 2, 2, 2, 191, 193, 5, 16, 9, 2, 192, 191, 3, 2, 2, 2, 192, 193, 3, 2, 2, 2, 193, 194, 3, 2, 2, 2, 194, 222, 7, 44, 2, 2, 195, 196, 7, 43, 2, 2, 196, 198, 5, 16, 9, 2, 197, 199, 5, 22, 12, 2, 198, 197, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 198, 3, 2, 2, 2, 200, 201, 3, 2, 2, 2, 201, 202, 3, 2, 2, 2, 202, 203, 7, 44, 2, 2, 203, 222, 3, 2, 2, 2, 204, 205, 9, 4, 2, 2, 205, 222, 5, 16, 9, 17, 206, 207, 7, 56, 2, 2, 207, 222, 5, 16, 9, 7, 208, 213, 7, 60, 2, 2, 209, 210, 7, 75, 2, 2, 210, 212, 7, 25, 2, 2, 211, 209, 3, 2, 2, 2, 212, 215, 3, 2, 2, 2, 213, 211, 3, 2, 2, 2, 213, 214, 3, 2, 2, 2, 214, 217, 3, 2, 2, 2, 215, 213, 3, 2, 2, 2, 216, 218, 7, 75, 2, 2, 217, 216, 3, 2, 2, 2, 217, 218, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 220, 7, 61, 2, 2, 220, 222, 5, 16, 9, 3, 221, 176, 3, 2, 2, 2, 221, 178, 3, 2, 2, 2, 221, 182, 3, 2, 2, 2, 221, 195, 3, 2, 2, 2, 221, 204, 3, 2, 2, 2, 221, 206, 3, 2, 2, 2, 221, 208, 3, 2, 2, 2, 222, 306, 3, 2, 2, 2, 223, 224, 12, 18, 2, 2, 224, 225, 7, 11, 2, 2, 225, 305, 5, 16, 9, 18, 226, 227, 12, 16, 2, 2, 227, 228, 9, 5, 2, 2, 228, 305, 5, 16, 9, 17, 229, 230, 12, 15, 2, 2, 230, 231, 9, 6, 2, 2, 231, 305, 5, 16, 9, 16, 232, 233, 12, 14, 2, 2, 233, 234, 9, 7, 2, 2, 234, 305, 5, 16, 9, 15, 235, 236, 12, 13, 2, 2, 236, 237, 7, 19, 2, 2, 237, 305, 5, 16, 9, 14, 238, 239, 12, 12, 2, 2, 239, 240, 7, 20, 2, 2, 240, 305, 5, 16, 9, 13, 241, 242, 12, 11, 2, 2, 242, 243, 7, 21, 2, 2, 243, 305, 5, 16, 9, 12, 244, 245, 12, 10, 2, 2, 245, 246, 9, 8, 2, 2, 246, 305, 5, 16, 9, 11, 247, 248, 12, 8, 2, 2, 248, 249, 9, 9, 2, 2, 249, 305, 5, 16, 9, 8, 250, 251, 12, 6, 2, 2, 251, 252, 7, 57, 2, 2, 252, 305, 5, 16, 9, 6, 253, 254, 12, 5, 2, 2, 254, 255, 7, 58, 2, 2, 255, 305, 5, 16, 9, 5, 256, 257, 12, 4, 2, 2, 257, 258, 7, 59, 2, 2, 258, 259, 5, 16, 9, 2, 259, 260, 7, 40, 2, 2, 260, 261, 5, 16, 9, 4, 261, 305, 3, 2, 2, 2, 262, 263, 12, 23, 2, 2, 263, 264, 7, 43, 2, 2, 264, 265, 5, 18, 10, 2, 265, 266, 7, 44, 2, 2, 266, 305, 3, 2, 2, 2, 267, 268, 12, 22, 2, 2, 268, 270, 7, 43, 2, 2, 269, 271, 5, 16, 9, 2, 270, 269, 3, 2, 2, 2, 270, 271, 3, 2, 2, 2, 271, 272, 3, 2, 2, 2, 272, 274, 7, 40, 2, 2, 273, 275, 5, 16, 9, 2, 274, 273, 3, 2, 2, 2, 274, 275, 3, 2, 2, 2, 275, 280, 3, 2, 2, 2, 276, 278, 7, 40, 2, 2, 277, 279, 5, 16, 9, 2, 278, 277, 3, 2, 2, 2, 278, 279, 3, 2, 2, 2, 279, 281, 3, 2, 2, 2, 280, 276, 3, 2, 2, 2, 280, 281, 3, 2, 2, 2, 281, 282, 3, 2, 2, 2, 282, 305, 7, 44, 2, 2, 283, 284, 12, 21, 2, 2, 284, 285, 7, 45, 2, 2, 285, 305, 7, 75, 2, 2, 286, 287, 12, 20, 2, 2, 287, 293, 7, 36, 2, 2, 288, 289, 5, 24, 13, 2, 289, 290, 7, 25, 2, 2, 290, 292, 3, 2, 2, 2, 291, 288, 3, 2, 2, 2, 292, 295, 3, 2, 2, 2, 293, 291, 3, 2, 2, 2, 293, 294, 3, 2, 2, 2, 294, 297, 3, 2, 2, 2, 295, 293, 3, 2, 2, 2, 296, 298, 5, 24, 13, 2, 297, 296, 3, 2, 2, 2, 297, 298, 3, 2, 2, 2, 298, 299, 3, 2, 2, 2, 299, 305, 7, 37, 2, 2, 300, 301, 12, 19, 2, 2, 301, 305, 7, 46, 2, 2, 302, 303, 12, 9, 2, 2, 303, 305, 7, 49, 2, 2, 304, 223, 3, 2, 2, 2, 304, 226, 3, 2, 2, 2, 304, 229, 3, 2, 2, 2, 304, 232, 3, 2, 2, 2, 304, 235, 3, 2, 2, 2, 304, 238, 3, 2, 2, 2, 304, 241, 3, 2, 2, 2, 304, 244, 3, 2, 2, 2, 304, 247, 3, 2, 2, 2, 304, 250, 3, 2, 2, 2, 304, 253, 3, 2, 2, 2, 304, 256, 3, 2, 2, 2, 304, 262, 3, 2, 2, 2, 304, 267, 3, 2, 2, 2, 304, 283, 3, 2, 2, 2, 304, 286, 3, 2, 2, 2, 304, 300, 3, 2, 2, 2, 304, 302, 3, 2, 2, 2, 305, 308, 3, 2, 2, 2, 306, 304, 3, 2, 2, 2, 306, 307, 3, 2, 2, 2, 307, 17, 3, 2, 2, 2, 308, 306, 3, 2, 2, 2, 309, 310, 5, 16, 9, 2, 310, 311, 7, 25, 2, 2, 311, 313, 3, 2, 2, 2, 312, 309, 3, 2, 2, 2, 313, 316, 3, 2, 2, 2, 314, 312, 3, 2, 2, 2, 314, 315, 3, 2, 2, 2, 315, 317, 3, 2, 2, 2, 316, 314, 3, 2, 2, 2, 317, 318, 5, 16, 9, 2, 318, 19, 3, 2, 2, 2, 319, 320, 5, 18, 10, 2, 320, 321, 7, 2, 2, 3, 321, 21, 3, 2, 2, 2, 322, 323, 7, 32, 2, 2, 323, 324, 5, 18, 10, 2, 324, 325, 7, 33, 2, 2, 325, 328, 5, 18, 10, 2, 326, 327, 7, 34, 2, 2, 327, 329, 5, 18, 10, 2, 328, 326, 3, 2, 2, 2, 328, 329, 3, 2, 2, 2, 329, 333, 3, 2, 2, 2, 330, 331, 7, 26, 2, 2, 331, 333, 5, 16, 9, 2, 332, 322, 3, 2, 2, 2, 332, 330, 3, 2, 2, 2, 333, 23, 3, 2, 2, 2, 334, 335, 7, 75, 2, 2, 335, 337, 7, 10, 2, 2, 336, 334, 3, 2, 2, 2, 336, 337, 3, 2, 2, 2, 337, 338, 3, 2, 2, 2, 338, 339, 5, 16, 9, 2, 339, 25, 3, 2, 2, 2, 340, 348, 7, 71, 2, 2, 341, 348, 7, 72, 2, 2, 342, 348, 9, 10, 2, 2, 343, 348, 7, 73, 2, 2, 344, 348, 7, 74, 2, 2, 345, 348, 7, 64, 2, 2, 346, 348, 7, 75, 2, 2, 347, 340, 3, 2, 2, 2, 347, 341, 3, 2, 2, 2, 347, 342, 3, 2, 2, 2, 347, 343, 3, 2, 2, 2, 347, 344, 3, 2, 2, 2, 347, 345, 3, 2, 2, 2, 347, 346, 3, 2, 2, 2, 348, 27, 3, 2, 2, 2, 349, 350, 7, 75, 2, 2, 350, 352, 7, 25, 2, 2, 351, 349, 3, 2, 2, 2, 352, 355, 3, 2, 2, 2, 353, 351, 3, 2, 2, 2, 353, 354, 3, 2, 2, 2, 354, 356, 3, 2, 2, 2, 355, 353, 3, 2, 2, 2, 356, 357, 7, 75, 2, 2, 357, 29, 3, 2, 2, 2, 358, 359, 8, 16, 1, 2, 359, 371, 9, 11, 2, 2, 360, 361, 7, 36, 2, 2, 361, 362, 5, 30, 16, 2, 362, 363, 7, 37, 2, 2, 363, 371, 3, 2, 2, 2, 364, 365, 7, 43, 2, 2, 365, 366, 5, 30, 16, 2, 366, 367, 7, 44, 2, 2, 367, 371, 3, 2, 2, 2, 368, 369, 7, 61, 2, 2, 369, 371, 5, 30, 16, 3, 370, 358, 3, 2, 2, 2, 370, 360, 3, 2, 2, 2, 370, 364, 3, 2, 2, 2, 370, 368, 3, 2, 2, 2, 371, 382, 3, 2, 2, 2, 372, 373, 12, 5, 2, 2, 373, 374, 7, 12, 2, 2, 374, 381, 5, 30, 16, 5, 375, 376, 12, 4, 2, 2, 376, 377, 7, 61, 2, 2, 377, 381, 5, 30, 16, 4, 378, 379, 12, 6, 2, 2, 379, 381, 7, 59, 2, 2, 380, 372, 3, 2, 2, 2, 380, 375, 3, 2, 2, 2, 380, 378, 3, 2, 2, 2, 381, 384, 3, 2, 2, 2, 382, 380, 3, 2, 2, 2, 382, 383, 3, 2, 2, 2, 383, 31, 3, 2, 2, 2, 384, 382, 3, 2, 2, 2, 44, 35, 44, 54, 59, 65, 72, 84, 86, 93, 107, 113, 131, 144, 148, 152, 158, 160, 166, 172, 188, 192, 200, 213, 217, 221, 270, 274, 278, 280, 293, 297, 304, 306, 314, 328, 332, 336, 347, 353, 370, 380, 382] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 78, 389, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 3, 2, 7, 2, 34, 10, 2, 12, 2, 14, 2, 37, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 45, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 55, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 60, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 66, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 71, 10, 4, 12, 4, 14, 4, 74, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 85, 10, 4, 5, 4, 87, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 92, 10, 5, 12, 5, 14, 5, 95, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 106, 10, 6, 12, 6, 14, 6, 109, 11, 6, 3, 6, 3, 6, 3, 6, 5, 6, 114, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 132, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 143, 10, 6, 12, 6, 14, 6, 146, 11, 6, 3, 6, 5, 6, 149, 10, 6, 3, 6, 3, 6, 5, 6, 153, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 159, 10, 6, 5, 6, 161, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 167, 10, 7, 3, 8, 3, 8, 6, 8, 171, 10, 8, 13, 8, 14, 8, 172, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 187, 10, 9, 12, 9, 14, 9, 190, 11, 9, 3, 9, 5, 9, 193, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 6, 9, 199, 10, 9, 13, 9, 14, 9, 200, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 212, 10, 9, 12, 9, 14, 9, 215, 11, 9, 3, 9, 5, 9, 218, 10, 9, 3, 9, 3, 9, 5, 9, 222, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 271, 10, 9, 3, 9, 3, 9, 5, 9, 275, 10, 9, 3, 9, 3, 9, 5, 9, 279, 10, 9, 5, 9, 281, 10, 9, 3, 9, 3, 9, 3, 9, 5, 9, 286, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 295, 10, 9, 12, 9, 14, 9, 298, 11, 9, 3, 9, 5, 9, 301, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 308, 10, 9, 12, 9, 14, 9, 311, 11, 9, 3, 10, 3, 10, 3, 10, 7, 10, 316, 10, 10, 12, 10, 14, 10, 319, 11, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 332, 10, 12, 3, 12, 3, 12, 5, 12, 336, 10, 12, 3, 13, 3, 13, 5, 13, 340, 10, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 351, 10, 14, 3, 15, 3, 15, 7, 15, 355, 10, 15, 12, 15, 14, 15, 358, 11, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 374, 10, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 7, 16, 384, 10, 16, 12, 16, 14, 16, 387, 11, 16, 3, 16, 2, 4, 16, 30, 17, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 2, 12, 3, 2, 11, 21, 3, 2, 22, 23, 4, 2, 15, 16, 48, 48, 3, 2, 12, 14, 3, 2, 15, 16, 3, 2, 17, 18, 3, 2, 49, 50, 3, 2, 51, 56, 3, 2, 62, 63, 3, 2, 65, 70, 2, 456, 2, 35, 3, 2, 2, 2, 4, 44, 3, 2, 2, 2, 6, 86, 3, 2, 2, 2, 8, 88, 3, 2, 2, 2, 10, 160, 3, 2, 2, 2, 12, 162, 3, 2, 2, 2, 14, 168, 3, 2, 2, 2, 16, 221, 3, 2, 2, 2, 18, 317, 3, 2, 2, 2, 20, 322, 3, 2, 2, 2, 22, 335, 3, 2, 2, 2, 24, 339, 3, 2, 2, 2, 26, 350, 3, 2, 2, 2, 28, 356, 3, 2, 2, 2, 30, 373, 3, 2, 2, 2, 32, 34, 5, 4, 3, 2, 33, 32, 3, 2, 2, 2, 34, 37, 3, 2, 2, 2, 35, 33, 3, 2, 2, 2, 35, 36, 3, 2, 2, 2, 36, 38, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 38, 39, 7, 2, 2, 3, 39, 3, 3, 2, 2, 2, 40, 41, 5, 6, 4, 2, 41, 42, 7, 3, 2, 2, 42, 45, 3, 2, 2, 2, 43, 45, 5, 10, 6, 2, 44, 40, 3, 2, 2, 2, 44, 43, 3, 2, 2, 2, 45, 5, 3, 2, 2, 2, 46, 47, 7, 4, 2, 2, 47, 54, 7, 75, 2, 2, 48, 49, 7, 5, 2, 2, 49, 55, 5, 28, 15, 2, 50, 51, 7, 6, 2, 2, 51, 55, 5, 28, 15, 2, 52, 53, 7, 7, 2, 2, 53, 55, 7, 75, 2, 2, 54, 48, 3, 2, 2, 2, 54, 50, 3, 2, 2, 2, 54, 52, 3, 2, 2, 2, 54, 55, 3, 2, 2, 2, 55, 87, 3, 2, 2, 2, 56, 87, 7, 8, 2, 2, 57, 59, 7, 9, 2, 2, 58, 60, 5, 18, 10, 2, 59, 58, 3, 2, 2, 2, 59, 60, 3, 2, 2, 2, 60, 87, 3, 2, 2, 2, 61, 62, 5, 30, 16, 2, 62, 65, 7, 75, 2, 2, 63, 64, 7, 10, 2, 2, 64, 66, 5, 18, 10, 2, 65, 63, 3, 2, 2, 2, 65, 66, 3, 2, 2, 2, 66, 87, 3, 2, 2, 2, 67, 68, 5, 8, 5, 2, 68, 69, 7, 10, 2, 2, 69, 71, 3, 2, 2, 2, 70, 67, 3, 2, 2, 2, 71, 74, 3, 2, 2, 2, 72, 70, 3, 2, 2, 2, 72, 73, 3, 2, 2, 2, 73, 75, 3, 2, 2, 2, 74, 72, 3, 2, 2, 2, 75, 87, 5, 18, 10, 2, 76, 77, 5, 16, 9, 2, 77, 78, 9, 2, 2, 2, 78, 79, 7, 10, 2, 2, 79, 80, 5, 16, 9, 2, 80, 87, 3, 2, 2, 2, 81, 87, 9, 3, 2, 2, 82, 84, 7, 24, 2, 2, 83, 85, 5, 18, 10, 2, 84, 83, 3, 2, 2, 2, 84, 85, 3, 2, 2, 2, 85, 87, 3, 2, 2, 2, 86, 46, 3, 2, 2, 2, 86, 56, 3, 2, 2, 2, 86, 57, 3, 2, 2, 2, 86, 61, 3, 2, 2, 2, 86, 72, 3, 2, 2, 2, 86, 76, 3, 2, 2, 2, 86, 81, 3, 2, 2, 2, 86, 82, 3, 2, 2, 2, 87, 7, 3, 2, 2, 2, 88, 93, 5, 16, 9, 2, 89, 90, 7, 25, 2, 2, 90, 92, 5, 16, 9, 2, 91, 89, 3, 2, 2, 2, 92, 95, 3, 2, 2, 2, 93, 91, 3, 2, 2, 2, 93, 94, 3, 2, 2, 2, 94, 9, 3, 2, 2, 2, 95, 93, 3, 2, 2, 2, 96, 97, 7, 26, 2, 2, 97, 98, 5, 16, 9, 2, 98, 99, 7, 27, 2, 2, 99, 107, 5, 14, 8, 2, 100, 101, 7, 28, 2, 2, 101, 102, 5, 16, 9, 2, 102, 103, 7, 27, 2, 2, 103, 104, 5, 14, 8, 2, 104, 106, 3, 2, 2, 2, 105, 100, 3, 2, 2, 2, 106, 109, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 107, 108, 3, 2, 2, 2, 108, 113, 3, 2, 2, 2, 109, 107, 3, 2, 2, 2, 110, 111, 7, 29, 2, 2, 111, 112, 7, 27, 2, 2, 112, 114, 5, 14, 8, 2, 113, 110, 3, 2, 2, 2, 113, 114, 3, 2, 2, 2, 114, 161, 3, 2, 2, 2, 115, 116, 7, 30, 2, 2, 116, 117, 5, 16, 9, 2, 117, 118, 7, 27, 2, 2, 118, 119, 5, 14, 8, 2, 119, 161, 3, 2, 2, 2, 120, 121, 7, 31, 2, 2, 121, 122, 5, 16, 9, 2, 122, 123, 7, 27, 2, 2, 123, 124, 5, 14, 8, 2, 124, 161, 3, 2, 2, 2, 125, 126, 7, 32, 2, 2, 126, 127, 5, 18, 10, 2, 127, 128, 7, 33, 2, 2, 128, 131, 5, 18, 10, 2, 129, 130, 7, 34, 2, 2, 130, 132, 5, 18, 10, 2, 131, 129, 3, 2, 2, 2, 131, 132, 3, 2, 2, 2, 132, 133, 3, 2, 2, 2, 133, 134, 7, 27, 2, 2, 134, 135, 5, 14, 8, 2, 135, 161, 3, 2, 2, 2, 136, 137, 7, 35, 2, 2, 137, 138, 7, 75, 2, 2, 138, 144, 7, 36, 2, 2, 139, 140, 5, 12, 7, 2, 140, 141, 7, 25, 2, 2, 141, 143, 3, 2, 2, 2, 142, 139, 3, 2, 2, 2, 143, 146, 3, 2, 2, 2, 144, 142, 3, 2, 2, 2, 144, 145, 3, 2, 2, 2, 145, 148, 3, 2, 2, 2, 146, 144, 3, 2, 2, 2, 147, 149, 5, 12, 7, 2, 148, 147, 3, 2, 2, 2, 148, 149, 3, 2, 2, 2, 149, 150, 3, 2, 2, 2, 150, 152, 7, 37, 2, 2, 151, 153, 5, 30, 16, 2, 152, 151, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 158, 3, 2, 2, 2, 154, 155, 7, 38, 2, 2, 155, 159, 5, 14, 8, 2, 156, 157, 7, 39, 2, 2, 157, 159, 7, 3, 2, 2, 158, 154, 3, 2, 2, 2, 158, 156, 3, 2, 2, 2, 159, 161, 3, 2, 2, 2, 160, 96, 3, 2, 2, 2, 160, 115, 3, 2, 2, 2, 160, 120, 3, 2, 2, 2, 160, 125, 3, 2, 2, 2, 160, 136, 3, 2, 2, 2, 161, 11, 3, 2, 2, 2, 162, 163, 5, 30, 16, 2, 163, 166, 7, 75, 2, 2, 164, 165, 7, 40, 2, 2, 165, 167, 5, 16, 9, 2, 166, 164, 3, 2, 2, 2, 166, 167, 3, 2, 2, 2, 167, 13, 3, 2, 2, 2, 168, 170, 7, 41, 2, 2, 169, 171, 5, 4, 3, 2, 170, 169, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 170, 3, 2, 2, 2, 172, 173, 3, 2, 2, 2, 173, 174, 3, 2, 2, 2, 174, 175, 7, 42, 2, 2, 175, 15, 3, 2, 2, 2, 176, 177, 8, 9, 1, 2, 177, 222, 5, 26, 14, 2, 178, 179, 7, 36, 2, 2, 179, 180, 5, 18, 10, 2, 180, 181, 7, 37, 2, 2, 181, 222, 3, 2, 2, 2, 182, 188, 7, 43, 2, 2, 183, 184, 5, 16, 9, 2, 184, 185, 7, 25, 2, 2, 185, 187, 3, 2, 2, 2, 186, 183, 3, 2, 2, 2, 187, 190, 3, 2, 2, 2, 188, 186, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 192, 3, 2, 2, 2, 190, 188, 3, 2, 2, 2, 191, 193, 5, 16, 9, 2, 192, 191, 3, 2, 2, 2, 192, 193, 3, 2, 2, 2, 193, 194, 3, 2, 2, 2, 194, 222, 7, 44, 2, 2, 195, 196, 7, 43, 2, 2, 196, 198, 5, 16, 9, 2, 197, 199, 5, 22, 12, 2, 198, 197, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 198, 3, 2, 2, 2, 200, 201, 3, 2, 2, 2, 201, 202, 3, 2, 2, 2, 202, 203, 7, 44, 2, 2, 203, 222, 3, 2, 2, 2, 204, 205, 9, 4, 2, 2, 205, 222, 5, 16, 9, 17, 206, 207, 7, 57, 2, 2, 207, 222, 5, 16, 9, 7, 208, 213, 7, 60, 2, 2, 209, 210, 7, 75, 2, 2, 210, 212, 7, 25, 2, 2, 211, 209, 3, 2, 2, 2, 212, 215, 3, 2, 2, 2, 213, 211, 3, 2, 2, 2, 213, 214, 3, 2, 2, 2, 214, 217, 3, 2, 2, 2, 215, 213, 3, 2, 2, 2, 216, 218, 7, 75, 2, 2, 217, 216, 3, 2, 2, 2, 217, 218, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 220, 7, 61, 2, 2, 220, 222, 5, 16, 9, 3, 221, 176, 3, 2, 2, 2, 221, 178, 3, 2, 2, 2, 221, 182, 3, 2, 2, 2, 221, 195, 3, 2, 2, 2, 221, 204, 3, 2, 2, 2, 221, 206, 3, 2, 2, 2, 221, 208, 3, 2, 2, 2, 222, 309, 3, 2, 2, 2, 223, 224, 12, 18, 2, 2, 224, 225, 7, 11, 2, 2, 225, 308, 5, 16, 9, 18, 226, 227, 12, 16, 2, 2, 227, 228, 9, 5, 2, 2, 228, 308, 5, 16, 9, 17, 229, 230, 12, 15, 2, 2, 230, 231, 9, 6, 2, 2, 231, 308, 5, 16, 9, 16, 232, 233, 12, 14, 2, 2, 233, 234, 9, 7, 2, 2, 234, 308, 5, 16, 9, 15, 235, 236, 12, 13, 2, 2, 236, 237, 7, 19, 2, 2, 237, 308, 5, 16, 9, 14, 238, 239, 12, 12, 2, 2, 239, 240, 7, 20, 2, 2, 240, 308, 5, 16, 9, 13, 241, 242, 12, 11, 2, 2, 242, 243, 7, 21, 2, 2, 243, 308, 5, 16, 9, 12, 244, 245, 12, 10, 2, 2, 245, 246, 9, 8, 2, 2, 246, 308, 5, 16, 9, 11, 247, 248, 12, 8, 2, 2, 248, 249, 9, 9, 2, 2, 249, 308, 5, 16, 9, 8, 250, 251, 12, 6, 2, 2, 251, 252, 7, 58, 2, 2, 252, 308, 5, 16, 9, 6, 253, 254, 12, 5, 2, 2, 254, 255, 7, 59, 2, 2, 255, 308, 5, 16, 9, 5, 256, 257, 12, 4, 2, 2, 257, 258, 7, 45, 2, 2, 258, 259, 5, 16, 9, 2, 259, 260, 7, 40, 2, 2, 260, 261, 5, 16, 9, 4, 261, 308, 3, 2, 2, 2, 262, 263, 12, 23, 2, 2, 263, 264, 7, 43, 2, 2, 264, 265, 5, 18, 10, 2, 265, 266, 7, 44, 2, 2, 266, 308, 3, 2, 2, 2, 267, 268, 12, 22, 2, 2, 268, 270, 7, 43, 2, 2, 269, 271, 5, 16, 9, 2, 270, 269, 3, 2, 2, 2, 270, 271, 3, 2, 2, 2, 271, 272, 3, 2, 2, 2, 272, 274, 7, 40, 2, 2, 273, 275, 5, 16, 9, 2, 274, 273, 3, 2, 2, 2, 274, 275, 3, 2, 2, 2, 275, 280, 3, 2, 2, 2, 276, 278, 7, 40, 2, 2, 277, 279, 5, 16, 9, 2, 278, 277, 3, 2, 2, 2, 278, 279, 3, 2, 2, 2, 279, 281, 3, 2, 2, 2, 280, 276, 3, 2, 2, 2, 280, 281, 3, 2, 2, 2, 281, 282, 3, 2, 2, 2, 282, 308, 7, 44, 2, 2, 283, 285, 12, 21, 2, 2, 284, 286, 7, 45, 2, 2, 285, 284, 3, 2, 2, 2, 285, 286, 3, 2, 2, 2, 286, 287, 3, 2, 2, 2, 287, 288, 7, 46, 2, 2, 288, 308, 7, 75, 2, 2, 289, 290, 12, 20, 2, 2, 290, 296, 7, 36, 2, 2, 291, 292, 5, 24, 13, 2, 292, 293, 7, 25, 2, 2, 293, 295, 3, 2, 2, 2, 294, 291, 3, 2, 2, 2, 295, 298, 3, 2, 2, 2, 296, 294, 3, 2, 2, 2, 296, 297, 3, 2, 2, 2, 297, 300, 3, 2, 2, 2, 298, 296, 3, 2, 2, 2, 299, 301, 5, 24, 13, 2, 300, 299, 3, 2, 2, 2, 300, 301, 3, 2, 2, 2, 301, 302, 3, 2, 2, 2, 302, 308, 7, 37, 2, 2, 303, 304, 12, 19, 2, 2, 304, 308, 7, 47, 2, 2, 305, 306, 12, 9, 2, 2, 306, 308, 7, 50, 2, 2, 307, 223, 3, 2, 2, 2, 307, 226, 3, 2, 2, 2, 307, 229, 3, 2, 2, 2, 307, 232, 3, 2, 2, 2, 307, 235, 3, 2, 2, 2, 307, 238, 3, 2, 2, 2, 307, 241, 3, 2, 2, 2, 307, 244, 3, 2, 2, 2, 307, 247, 3, 2, 2, 2, 307, 250, 3, 2, 2, 2, 307, 253, 3, 2, 2, 2, 307, 256, 3, 2, 2, 2, 307, 262, 3, 2, 2, 2, 307, 267, 3, 2, 2, 2, 307, 283, 3, 2, 2, 2, 307, 289, 3, 2, 2, 2, 307, 303, 3, 2, 2, 2, 307, 305, 3, 2, 2, 2, 308, 311, 3, 2, 2, 2, 309, 307, 3, 2, 2, 2, 309, 310, 3, 2, 2, 2, 310, 17, 3, 2, 2, 2, 311, 309, 3, 2, 2, 2, 312, 313, 5, 16, 9, 2, 313, 314, 7, 25, 2, 2, 314, 316, 3, 2, 2, 2, 315, 312, 3, 2, 2, 2, 316, 319, 3, 2, 2, 2, 317, 315, 3, 2, 2, 2, 317, 318, 3, 2, 2, 2, 318, 320, 3, 2, 2, 2, 319, 317, 3, 2, 2, 2, 320, 321, 5, 16, 9, 2, 321, 19, 3, 2, 2, 2, 322, 323, 5, 18, 10, 2, 323, 324, 7, 2, 2, 3, 324, 21, 3, 2, 2, 2, 325, 326, 7, 32, 2, 2, 326, 327, 5, 18, 10, 2, 327, 328, 7, 33, 2, 2, 328, 331, 5, 18, 10, 2, 329, 330, 7, 34, 2, 2, 330, 332, 5, 18, 10, 2, 331, 329, 3, 2, 2, 2, 331, 332, 3, 2, 2, 2, 332, 336, 3, 2, 2, 2, 333, 334, 7, 26, 2, 2, 334, 336, 5, 16, 9, 2, 335, 325, 3, 2, 2, 2, 335, 333, 3, 2, 2, 2, 336, 23, 3, 2, 2, 2, 337, 338, 7, 75, 2, 2, 338, 340, 7, 10, 2, 2, 339, 337, 3, 2, 2, 2, 339, 340, 3, 2, 2, 2, 340, 341, 3, 2, 2, 2, 341, 342, 5, 16, 9, 2, 342, 25, 3, 2, 2, 2, 343, 351, 7, 71, 2, 2, 344, 351, 7, 72, 2, 2, 345, 351, 9, 10, 2, 2, 346, 351, 7, 73, 2, 2, 347, 351, 7, 74, 2, 2, 348, 351, 7, 64, 2, 2, 349, 351, 7, 75, 2, 2, 350, 343, 3, 2, 2, 2, 350, 344, 3, 2, 2, 2, 350, 345, 3, 2, 2, 2, 350, 346, 3, 2, 2, 2, 350, 347, 3, 2, 2, 2, 350, 348, 3, 2, 2, 2, 350, 349, 3, 2, 2, 2, 351, 27, 3, 2, 2, 2, 352, 353, 7, 75, 2, 2, 353, 355, 7, 25, 2, 2, 354, 352, 3, 2, 2, 2, 355, 358, 3, 2, 2, 2, 356, 354, 3, 2, 2, 2, 356, 357, 3, 2, 2, 2, 357, 359, 3, 2, 2, 2, 358, 356, 3, 2, 2, 2, 359, 360, 7, 75, 2, 2, 360, 29, 3, 2, 2, 2, 361, 362, 8, 16, 1, 2, 362, 374, 9, 11, 2, 2, 363, 364, 7, 36, 2, 2, 364, 365, 5, 30, 16, 2, 365, 366, 7, 37, 2, 2, 366, 374, 3, 2, 2, 2, 367, 368, 7, 43, 2, 2, 368, 369, 5, 30, 16, 2, 369, 370, 7, 44, 2, 2, 370, 374, 3, 2, 2, 2, 371, 372, 7, 61, 2, 2, 372, 374, 5, 30, 16, 3, 373, 361, 3, 2, 2, 2, 373, 363, 3, 2, 2, 2, 373, 367, 3, 2, 2, 2, 373, 371, 3, 2, 2, 2, 374, 385, 3, 2, 2, 2, 375, 376, 12, 5, 2, 2, 376, 377, 7, 12, 2, 2, 377, 384, 5, 30, 16, 5, 378, 379, 12, 4, 2, 2, 379, 380, 7, 61, 2, 2, 380, 384, 5, 30, 16, 4, 381, 382, 12, 6, 2, 2, 382, 384, 7, 45, 2, 2, 383, 375, 3, 2, 2, 2, 383, 378, 3, 2, 2, 2, 383, 381, 3, 2, 2, 2, 384, 387, 3, 2, 2, 2, 385, 383, 3, 2, 2, 2, 385, 386, 3, 2, 2, 2, 386, 31, 3, 2, 2, 2, 387, 385, 3, 2, 2, 2, 45, 35, 44, 54, 59, 65, 72, 84, 86, 93, 107, 113, 131, 144, 148, 152, 158, 160, 166, 172, 188, 192, 200, 213, 217, 221, 270, 274, 278, 280, 285, 296, 300, 307, 309, 317, 331, 335, 339, 350, 356, 373, 383, 385] \ No newline at end of file diff --git a/src/antlr/Pyxell.tokens b/src/antlr/Pyxell.tokens index b5318ded..a3ded172 100644 --- a/src/antlr/Pyxell.tokens +++ b/src/antlr/Pyxell.tokens @@ -116,21 +116,21 @@ ERR=76 '}'=40 '['=41 ']'=42 -'.'=43 -'!'=44 -'~'=45 -'..'=46 -'...'=47 -'=='=48 -'!='=49 -'<'=50 -'<='=51 -'>'=52 -'>='=53 -'not'=54 -'and'=55 -'or'=56 -'?'=57 +'?'=43 +'.'=44 +'!'=45 +'~'=46 +'..'=47 +'...'=48 +'=='=49 +'!='=50 +'<'=51 +'<='=52 +'>'=53 +'>='=54 +'not'=55 +'and'=56 +'or'=57 'lambda'=58 '->'=59 'true'=60 diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp index 75ae5d62..e4fcb9c2 100644 --- a/src/antlr/PyxellLexer.interp +++ b/src/antlr/PyxellLexer.interp @@ -42,6 +42,7 @@ null '}' '[' ']' +'?' '.' '!' '~' @@ -56,7 +57,6 @@ null 'not' 'and' 'or' -'?' 'lambda' '->' 'true' @@ -245,4 +245,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 78, 498, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 70, 6, 70, 415, 10, 70, 13, 70, 14, 70, 416, 3, 71, 6, 71, 420, 10, 71, 13, 71, 14, 71, 421, 3, 71, 3, 71, 6, 71, 426, 10, 71, 13, 71, 14, 71, 427, 3, 71, 3, 71, 5, 71, 432, 10, 71, 3, 71, 6, 71, 435, 10, 71, 13, 71, 14, 71, 436, 5, 71, 439, 10, 71, 3, 72, 3, 72, 3, 72, 3, 72, 7, 72, 445, 10, 72, 12, 72, 14, 72, 448, 11, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 7, 73, 456, 10, 73, 12, 73, 14, 73, 459, 11, 73, 3, 73, 3, 73, 3, 74, 3, 74, 7, 74, 465, 10, 74, 12, 74, 14, 74, 468, 11, 74, 3, 75, 3, 75, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 5, 77, 477, 10, 77, 3, 78, 3, 78, 3, 78, 3, 78, 7, 78, 483, 10, 78, 12, 78, 14, 78, 486, 11, 78, 3, 78, 3, 78, 3, 79, 6, 79, 491, 10, 79, 13, 79, 14, 79, 492, 3, 79, 3, 79, 3, 80, 3, 80, 2, 2, 81, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 74, 147, 75, 149, 2, 151, 2, 153, 2, 155, 76, 157, 77, 159, 78, 3, 2, 11, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 4, 2, 12, 12, 14, 15, 5, 2, 11, 12, 15, 15, 34, 34, 2, 509, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 3, 161, 3, 2, 2, 2, 5, 163, 3, 2, 2, 2, 7, 167, 3, 2, 2, 2, 9, 172, 3, 2, 2, 2, 11, 179, 3, 2, 2, 2, 13, 182, 3, 2, 2, 2, 15, 187, 3, 2, 2, 2, 17, 193, 3, 2, 2, 2, 19, 195, 3, 2, 2, 2, 21, 197, 3, 2, 2, 2, 23, 199, 3, 2, 2, 2, 25, 201, 3, 2, 2, 2, 27, 203, 3, 2, 2, 2, 29, 205, 3, 2, 2, 2, 31, 207, 3, 2, 2, 2, 33, 210, 3, 2, 2, 2, 35, 213, 3, 2, 2, 2, 37, 215, 3, 2, 2, 2, 39, 217, 3, 2, 2, 2, 41, 219, 3, 2, 2, 2, 43, 225, 3, 2, 2, 2, 45, 234, 3, 2, 2, 2, 47, 241, 3, 2, 2, 2, 49, 243, 3, 2, 2, 2, 51, 246, 3, 2, 2, 2, 53, 249, 3, 2, 2, 2, 55, 254, 3, 2, 2, 2, 57, 259, 3, 2, 2, 2, 59, 265, 3, 2, 2, 2, 61, 271, 3, 2, 2, 2, 63, 275, 3, 2, 2, 2, 65, 278, 3, 2, 2, 2, 67, 283, 3, 2, 2, 2, 69, 288, 3, 2, 2, 2, 71, 290, 3, 2, 2, 2, 73, 292, 3, 2, 2, 2, 75, 296, 3, 2, 2, 2, 77, 303, 3, 2, 2, 2, 79, 305, 3, 2, 2, 2, 81, 307, 3, 2, 2, 2, 83, 309, 3, 2, 2, 2, 85, 311, 3, 2, 2, 2, 87, 313, 3, 2, 2, 2, 89, 315, 3, 2, 2, 2, 91, 317, 3, 2, 2, 2, 93, 319, 3, 2, 2, 2, 95, 322, 3, 2, 2, 2, 97, 326, 3, 2, 2, 2, 99, 329, 3, 2, 2, 2, 101, 332, 3, 2, 2, 2, 103, 334, 3, 2, 2, 2, 105, 337, 3, 2, 2, 2, 107, 339, 3, 2, 2, 2, 109, 342, 3, 2, 2, 2, 111, 346, 3, 2, 2, 2, 113, 350, 3, 2, 2, 2, 115, 353, 3, 2, 2, 2, 117, 355, 3, 2, 2, 2, 119, 362, 3, 2, 2, 2, 121, 365, 3, 2, 2, 2, 123, 370, 3, 2, 2, 2, 125, 376, 3, 2, 2, 2, 127, 381, 3, 2, 2, 2, 129, 386, 3, 2, 2, 2, 131, 390, 3, 2, 2, 2, 133, 396, 3, 2, 2, 2, 135, 401, 3, 2, 2, 2, 137, 406, 3, 2, 2, 2, 139, 414, 3, 2, 2, 2, 141, 419, 3, 2, 2, 2, 143, 440, 3, 2, 2, 2, 145, 451, 3, 2, 2, 2, 147, 462, 3, 2, 2, 2, 149, 469, 3, 2, 2, 2, 151, 471, 3, 2, 2, 2, 153, 476, 3, 2, 2, 2, 155, 478, 3, 2, 2, 2, 157, 490, 3, 2, 2, 2, 159, 496, 3, 2, 2, 2, 161, 162, 7, 61, 2, 2, 162, 4, 3, 2, 2, 2, 163, 164, 7, 119, 2, 2, 164, 165, 7, 117, 2, 2, 165, 166, 7, 103, 2, 2, 166, 6, 3, 2, 2, 2, 167, 168, 7, 113, 2, 2, 168, 169, 7, 112, 2, 2, 169, 170, 7, 110, 2, 2, 170, 171, 7, 123, 2, 2, 171, 8, 3, 2, 2, 2, 172, 173, 7, 106, 2, 2, 173, 174, 7, 107, 2, 2, 174, 175, 7, 102, 2, 2, 175, 176, 7, 107, 2, 2, 176, 177, 7, 112, 2, 2, 177, 178, 7, 105, 2, 2, 178, 10, 3, 2, 2, 2, 179, 180, 7, 99, 2, 2, 180, 181, 7, 117, 2, 2, 181, 12, 3, 2, 2, 2, 182, 183, 7, 117, 2, 2, 183, 184, 7, 109, 2, 2, 184, 185, 7, 107, 2, 2, 185, 186, 7, 114, 2, 2, 186, 14, 3, 2, 2, 2, 187, 188, 7, 114, 2, 2, 188, 189, 7, 116, 2, 2, 189, 190, 7, 107, 2, 2, 190, 191, 7, 112, 2, 2, 191, 192, 7, 118, 2, 2, 192, 16, 3, 2, 2, 2, 193, 194, 7, 63, 2, 2, 194, 18, 3, 2, 2, 2, 195, 196, 7, 96, 2, 2, 196, 20, 3, 2, 2, 2, 197, 198, 7, 44, 2, 2, 198, 22, 3, 2, 2, 2, 199, 200, 7, 49, 2, 2, 200, 24, 3, 2, 2, 2, 201, 202, 7, 39, 2, 2, 202, 26, 3, 2, 2, 2, 203, 204, 7, 45, 2, 2, 204, 28, 3, 2, 2, 2, 205, 206, 7, 47, 2, 2, 206, 30, 3, 2, 2, 2, 207, 208, 7, 62, 2, 2, 208, 209, 7, 62, 2, 2, 209, 32, 3, 2, 2, 2, 210, 211, 7, 64, 2, 2, 211, 212, 7, 64, 2, 2, 212, 34, 3, 2, 2, 2, 213, 214, 7, 40, 2, 2, 214, 36, 3, 2, 2, 2, 215, 216, 7, 38, 2, 2, 216, 38, 3, 2, 2, 2, 217, 218, 7, 126, 2, 2, 218, 40, 3, 2, 2, 2, 219, 220, 7, 100, 2, 2, 220, 221, 7, 116, 2, 2, 221, 222, 7, 103, 2, 2, 222, 223, 7, 99, 2, 2, 223, 224, 7, 109, 2, 2, 224, 42, 3, 2, 2, 2, 225, 226, 7, 101, 2, 2, 226, 227, 7, 113, 2, 2, 227, 228, 7, 112, 2, 2, 228, 229, 7, 118, 2, 2, 229, 230, 7, 107, 2, 2, 230, 231, 7, 112, 2, 2, 231, 232, 7, 119, 2, 2, 232, 233, 7, 103, 2, 2, 233, 44, 3, 2, 2, 2, 234, 235, 7, 116, 2, 2, 235, 236, 7, 103, 2, 2, 236, 237, 7, 118, 2, 2, 237, 238, 7, 119, 2, 2, 238, 239, 7, 116, 2, 2, 239, 240, 7, 112, 2, 2, 240, 46, 3, 2, 2, 2, 241, 242, 7, 46, 2, 2, 242, 48, 3, 2, 2, 2, 243, 244, 7, 107, 2, 2, 244, 245, 7, 104, 2, 2, 245, 50, 3, 2, 2, 2, 246, 247, 7, 102, 2, 2, 247, 248, 7, 113, 2, 2, 248, 52, 3, 2, 2, 2, 249, 250, 7, 103, 2, 2, 250, 251, 7, 110, 2, 2, 251, 252, 7, 107, 2, 2, 252, 253, 7, 104, 2, 2, 253, 54, 3, 2, 2, 2, 254, 255, 7, 103, 2, 2, 255, 256, 7, 110, 2, 2, 256, 257, 7, 117, 2, 2, 257, 258, 7, 103, 2, 2, 258, 56, 3, 2, 2, 2, 259, 260, 7, 121, 2, 2, 260, 261, 7, 106, 2, 2, 261, 262, 7, 107, 2, 2, 262, 263, 7, 110, 2, 2, 263, 264, 7, 103, 2, 2, 264, 58, 3, 2, 2, 2, 265, 266, 7, 119, 2, 2, 266, 267, 7, 112, 2, 2, 267, 268, 7, 118, 2, 2, 268, 269, 7, 107, 2, 2, 269, 270, 7, 110, 2, 2, 270, 60, 3, 2, 2, 2, 271, 272, 7, 104, 2, 2, 272, 273, 7, 113, 2, 2, 273, 274, 7, 116, 2, 2, 274, 62, 3, 2, 2, 2, 275, 276, 7, 107, 2, 2, 276, 277, 7, 112, 2, 2, 277, 64, 3, 2, 2, 2, 278, 279, 7, 117, 2, 2, 279, 280, 7, 118, 2, 2, 280, 281, 7, 103, 2, 2, 281, 282, 7, 114, 2, 2, 282, 66, 3, 2, 2, 2, 283, 284, 7, 104, 2, 2, 284, 285, 7, 119, 2, 2, 285, 286, 7, 112, 2, 2, 286, 287, 7, 101, 2, 2, 287, 68, 3, 2, 2, 2, 288, 289, 7, 42, 2, 2, 289, 70, 3, 2, 2, 2, 290, 291, 7, 43, 2, 2, 291, 72, 3, 2, 2, 2, 292, 293, 7, 102, 2, 2, 293, 294, 7, 103, 2, 2, 294, 295, 7, 104, 2, 2, 295, 74, 3, 2, 2, 2, 296, 297, 7, 103, 2, 2, 297, 298, 7, 122, 2, 2, 298, 299, 7, 118, 2, 2, 299, 300, 7, 103, 2, 2, 300, 301, 7, 116, 2, 2, 301, 302, 7, 112, 2, 2, 302, 76, 3, 2, 2, 2, 303, 304, 7, 60, 2, 2, 304, 78, 3, 2, 2, 2, 305, 306, 7, 125, 2, 2, 306, 80, 3, 2, 2, 2, 307, 308, 7, 127, 2, 2, 308, 82, 3, 2, 2, 2, 309, 310, 7, 93, 2, 2, 310, 84, 3, 2, 2, 2, 311, 312, 7, 95, 2, 2, 312, 86, 3, 2, 2, 2, 313, 314, 7, 48, 2, 2, 314, 88, 3, 2, 2, 2, 315, 316, 7, 35, 2, 2, 316, 90, 3, 2, 2, 2, 317, 318, 7, 128, 2, 2, 318, 92, 3, 2, 2, 2, 319, 320, 7, 48, 2, 2, 320, 321, 7, 48, 2, 2, 321, 94, 3, 2, 2, 2, 322, 323, 7, 48, 2, 2, 323, 324, 7, 48, 2, 2, 324, 325, 7, 48, 2, 2, 325, 96, 3, 2, 2, 2, 326, 327, 7, 63, 2, 2, 327, 328, 7, 63, 2, 2, 328, 98, 3, 2, 2, 2, 329, 330, 7, 35, 2, 2, 330, 331, 7, 63, 2, 2, 331, 100, 3, 2, 2, 2, 332, 333, 7, 62, 2, 2, 333, 102, 3, 2, 2, 2, 334, 335, 7, 62, 2, 2, 335, 336, 7, 63, 2, 2, 336, 104, 3, 2, 2, 2, 337, 338, 7, 64, 2, 2, 338, 106, 3, 2, 2, 2, 339, 340, 7, 64, 2, 2, 340, 341, 7, 63, 2, 2, 341, 108, 3, 2, 2, 2, 342, 343, 7, 112, 2, 2, 343, 344, 7, 113, 2, 2, 344, 345, 7, 118, 2, 2, 345, 110, 3, 2, 2, 2, 346, 347, 7, 99, 2, 2, 347, 348, 7, 112, 2, 2, 348, 349, 7, 102, 2, 2, 349, 112, 3, 2, 2, 2, 350, 351, 7, 113, 2, 2, 351, 352, 7, 116, 2, 2, 352, 114, 3, 2, 2, 2, 353, 354, 7, 65, 2, 2, 354, 116, 3, 2, 2, 2, 355, 356, 7, 110, 2, 2, 356, 357, 7, 99, 2, 2, 357, 358, 7, 111, 2, 2, 358, 359, 7, 100, 2, 2, 359, 360, 7, 102, 2, 2, 360, 361, 7, 99, 2, 2, 361, 118, 3, 2, 2, 2, 362, 363, 7, 47, 2, 2, 363, 364, 7, 64, 2, 2, 364, 120, 3, 2, 2, 2, 365, 366, 7, 118, 2, 2, 366, 367, 7, 116, 2, 2, 367, 368, 7, 119, 2, 2, 368, 369, 7, 103, 2, 2, 369, 122, 3, 2, 2, 2, 370, 371, 7, 104, 2, 2, 371, 372, 7, 99, 2, 2, 372, 373, 7, 110, 2, 2, 373, 374, 7, 117, 2, 2, 374, 375, 7, 103, 2, 2, 375, 124, 3, 2, 2, 2, 376, 377, 7, 112, 2, 2, 377, 378, 7, 119, 2, 2, 378, 379, 7, 110, 2, 2, 379, 380, 7, 110, 2, 2, 380, 126, 3, 2, 2, 2, 381, 382, 7, 88, 2, 2, 382, 383, 7, 113, 2, 2, 383, 384, 7, 107, 2, 2, 384, 385, 7, 102, 2, 2, 385, 128, 3, 2, 2, 2, 386, 387, 7, 75, 2, 2, 387, 388, 7, 112, 2, 2, 388, 389, 7, 118, 2, 2, 389, 130, 3, 2, 2, 2, 390, 391, 7, 72, 2, 2, 391, 392, 7, 110, 2, 2, 392, 393, 7, 113, 2, 2, 393, 394, 7, 99, 2, 2, 394, 395, 7, 118, 2, 2, 395, 132, 3, 2, 2, 2, 396, 397, 7, 68, 2, 2, 397, 398, 7, 113, 2, 2, 398, 399, 7, 113, 2, 2, 399, 400, 7, 110, 2, 2, 400, 134, 3, 2, 2, 2, 401, 402, 7, 69, 2, 2, 402, 403, 7, 106, 2, 2, 403, 404, 7, 99, 2, 2, 404, 405, 7, 116, 2, 2, 405, 136, 3, 2, 2, 2, 406, 407, 7, 85, 2, 2, 407, 408, 7, 118, 2, 2, 408, 409, 7, 116, 2, 2, 409, 410, 7, 107, 2, 2, 410, 411, 7, 112, 2, 2, 411, 412, 7, 105, 2, 2, 412, 138, 3, 2, 2, 2, 413, 415, 5, 149, 75, 2, 414, 413, 3, 2, 2, 2, 415, 416, 3, 2, 2, 2, 416, 414, 3, 2, 2, 2, 416, 417, 3, 2, 2, 2, 417, 140, 3, 2, 2, 2, 418, 420, 5, 149, 75, 2, 419, 418, 3, 2, 2, 2, 420, 421, 3, 2, 2, 2, 421, 419, 3, 2, 2, 2, 421, 422, 3, 2, 2, 2, 422, 423, 3, 2, 2, 2, 423, 425, 7, 48, 2, 2, 424, 426, 5, 149, 75, 2, 425, 424, 3, 2, 2, 2, 426, 427, 3, 2, 2, 2, 427, 425, 3, 2, 2, 2, 427, 428, 3, 2, 2, 2, 428, 438, 3, 2, 2, 2, 429, 431, 7, 103, 2, 2, 430, 432, 7, 47, 2, 2, 431, 430, 3, 2, 2, 2, 431, 432, 3, 2, 2, 2, 432, 434, 3, 2, 2, 2, 433, 435, 5, 149, 75, 2, 434, 433, 3, 2, 2, 2, 435, 436, 3, 2, 2, 2, 436, 434, 3, 2, 2, 2, 436, 437, 3, 2, 2, 2, 437, 439, 3, 2, 2, 2, 438, 429, 3, 2, 2, 2, 438, 439, 3, 2, 2, 2, 439, 142, 3, 2, 2, 2, 440, 446, 7, 41, 2, 2, 441, 445, 10, 2, 2, 2, 442, 443, 7, 94, 2, 2, 443, 445, 9, 3, 2, 2, 444, 441, 3, 2, 2, 2, 444, 442, 3, 2, 2, 2, 445, 448, 3, 2, 2, 2, 446, 444, 3, 2, 2, 2, 446, 447, 3, 2, 2, 2, 447, 449, 3, 2, 2, 2, 448, 446, 3, 2, 2, 2, 449, 450, 7, 41, 2, 2, 450, 144, 3, 2, 2, 2, 451, 457, 7, 36, 2, 2, 452, 456, 10, 4, 2, 2, 453, 454, 7, 94, 2, 2, 454, 456, 9, 5, 2, 2, 455, 452, 3, 2, 2, 2, 455, 453, 3, 2, 2, 2, 456, 459, 3, 2, 2, 2, 457, 455, 3, 2, 2, 2, 457, 458, 3, 2, 2, 2, 458, 460, 3, 2, 2, 2, 459, 457, 3, 2, 2, 2, 460, 461, 7, 36, 2, 2, 461, 146, 3, 2, 2, 2, 462, 466, 5, 151, 76, 2, 463, 465, 5, 153, 77, 2, 464, 463, 3, 2, 2, 2, 465, 468, 3, 2, 2, 2, 466, 464, 3, 2, 2, 2, 466, 467, 3, 2, 2, 2, 467, 148, 3, 2, 2, 2, 468, 466, 3, 2, 2, 2, 469, 470, 9, 6, 2, 2, 470, 150, 3, 2, 2, 2, 471, 472, 9, 7, 2, 2, 472, 152, 3, 2, 2, 2, 473, 477, 5, 151, 76, 2, 474, 477, 5, 149, 75, 2, 475, 477, 9, 8, 2, 2, 476, 473, 3, 2, 2, 2, 476, 474, 3, 2, 2, 2, 476, 475, 3, 2, 2, 2, 477, 154, 3, 2, 2, 2, 478, 479, 7, 47, 2, 2, 479, 480, 7, 47, 2, 2, 480, 484, 3, 2, 2, 2, 481, 483, 10, 9, 2, 2, 482, 481, 3, 2, 2, 2, 483, 486, 3, 2, 2, 2, 484, 482, 3, 2, 2, 2, 484, 485, 3, 2, 2, 2, 485, 487, 3, 2, 2, 2, 486, 484, 3, 2, 2, 2, 487, 488, 8, 78, 2, 2, 488, 156, 3, 2, 2, 2, 489, 491, 9, 10, 2, 2, 490, 489, 3, 2, 2, 2, 491, 492, 3, 2, 2, 2, 492, 490, 3, 2, 2, 2, 492, 493, 3, 2, 2, 2, 493, 494, 3, 2, 2, 2, 494, 495, 8, 79, 2, 2, 495, 158, 3, 2, 2, 2, 496, 497, 11, 2, 2, 2, 497, 160, 3, 2, 2, 2, 17, 2, 416, 421, 427, 431, 436, 438, 444, 446, 455, 457, 466, 476, 484, 492, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 78, 498, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 70, 6, 70, 415, 10, 70, 13, 70, 14, 70, 416, 3, 71, 6, 71, 420, 10, 71, 13, 71, 14, 71, 421, 3, 71, 3, 71, 6, 71, 426, 10, 71, 13, 71, 14, 71, 427, 3, 71, 3, 71, 5, 71, 432, 10, 71, 3, 71, 6, 71, 435, 10, 71, 13, 71, 14, 71, 436, 5, 71, 439, 10, 71, 3, 72, 3, 72, 3, 72, 3, 72, 7, 72, 445, 10, 72, 12, 72, 14, 72, 448, 11, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 7, 73, 456, 10, 73, 12, 73, 14, 73, 459, 11, 73, 3, 73, 3, 73, 3, 74, 3, 74, 7, 74, 465, 10, 74, 12, 74, 14, 74, 468, 11, 74, 3, 75, 3, 75, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 5, 77, 477, 10, 77, 3, 78, 3, 78, 3, 78, 3, 78, 7, 78, 483, 10, 78, 12, 78, 14, 78, 486, 11, 78, 3, 78, 3, 78, 3, 79, 6, 79, 491, 10, 79, 13, 79, 14, 79, 492, 3, 79, 3, 79, 3, 80, 3, 80, 2, 2, 81, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 74, 147, 75, 149, 2, 151, 2, 153, 2, 155, 76, 157, 77, 159, 78, 3, 2, 11, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 4, 2, 12, 12, 14, 15, 5, 2, 11, 12, 15, 15, 34, 34, 2, 509, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 3, 161, 3, 2, 2, 2, 5, 163, 3, 2, 2, 2, 7, 167, 3, 2, 2, 2, 9, 172, 3, 2, 2, 2, 11, 179, 3, 2, 2, 2, 13, 182, 3, 2, 2, 2, 15, 187, 3, 2, 2, 2, 17, 193, 3, 2, 2, 2, 19, 195, 3, 2, 2, 2, 21, 197, 3, 2, 2, 2, 23, 199, 3, 2, 2, 2, 25, 201, 3, 2, 2, 2, 27, 203, 3, 2, 2, 2, 29, 205, 3, 2, 2, 2, 31, 207, 3, 2, 2, 2, 33, 210, 3, 2, 2, 2, 35, 213, 3, 2, 2, 2, 37, 215, 3, 2, 2, 2, 39, 217, 3, 2, 2, 2, 41, 219, 3, 2, 2, 2, 43, 225, 3, 2, 2, 2, 45, 234, 3, 2, 2, 2, 47, 241, 3, 2, 2, 2, 49, 243, 3, 2, 2, 2, 51, 246, 3, 2, 2, 2, 53, 249, 3, 2, 2, 2, 55, 254, 3, 2, 2, 2, 57, 259, 3, 2, 2, 2, 59, 265, 3, 2, 2, 2, 61, 271, 3, 2, 2, 2, 63, 275, 3, 2, 2, 2, 65, 278, 3, 2, 2, 2, 67, 283, 3, 2, 2, 2, 69, 288, 3, 2, 2, 2, 71, 290, 3, 2, 2, 2, 73, 292, 3, 2, 2, 2, 75, 296, 3, 2, 2, 2, 77, 303, 3, 2, 2, 2, 79, 305, 3, 2, 2, 2, 81, 307, 3, 2, 2, 2, 83, 309, 3, 2, 2, 2, 85, 311, 3, 2, 2, 2, 87, 313, 3, 2, 2, 2, 89, 315, 3, 2, 2, 2, 91, 317, 3, 2, 2, 2, 93, 319, 3, 2, 2, 2, 95, 321, 3, 2, 2, 2, 97, 324, 3, 2, 2, 2, 99, 328, 3, 2, 2, 2, 101, 331, 3, 2, 2, 2, 103, 334, 3, 2, 2, 2, 105, 336, 3, 2, 2, 2, 107, 339, 3, 2, 2, 2, 109, 341, 3, 2, 2, 2, 111, 344, 3, 2, 2, 2, 113, 348, 3, 2, 2, 2, 115, 352, 3, 2, 2, 2, 117, 355, 3, 2, 2, 2, 119, 362, 3, 2, 2, 2, 121, 365, 3, 2, 2, 2, 123, 370, 3, 2, 2, 2, 125, 376, 3, 2, 2, 2, 127, 381, 3, 2, 2, 2, 129, 386, 3, 2, 2, 2, 131, 390, 3, 2, 2, 2, 133, 396, 3, 2, 2, 2, 135, 401, 3, 2, 2, 2, 137, 406, 3, 2, 2, 2, 139, 414, 3, 2, 2, 2, 141, 419, 3, 2, 2, 2, 143, 440, 3, 2, 2, 2, 145, 451, 3, 2, 2, 2, 147, 462, 3, 2, 2, 2, 149, 469, 3, 2, 2, 2, 151, 471, 3, 2, 2, 2, 153, 476, 3, 2, 2, 2, 155, 478, 3, 2, 2, 2, 157, 490, 3, 2, 2, 2, 159, 496, 3, 2, 2, 2, 161, 162, 7, 61, 2, 2, 162, 4, 3, 2, 2, 2, 163, 164, 7, 119, 2, 2, 164, 165, 7, 117, 2, 2, 165, 166, 7, 103, 2, 2, 166, 6, 3, 2, 2, 2, 167, 168, 7, 113, 2, 2, 168, 169, 7, 112, 2, 2, 169, 170, 7, 110, 2, 2, 170, 171, 7, 123, 2, 2, 171, 8, 3, 2, 2, 2, 172, 173, 7, 106, 2, 2, 173, 174, 7, 107, 2, 2, 174, 175, 7, 102, 2, 2, 175, 176, 7, 107, 2, 2, 176, 177, 7, 112, 2, 2, 177, 178, 7, 105, 2, 2, 178, 10, 3, 2, 2, 2, 179, 180, 7, 99, 2, 2, 180, 181, 7, 117, 2, 2, 181, 12, 3, 2, 2, 2, 182, 183, 7, 117, 2, 2, 183, 184, 7, 109, 2, 2, 184, 185, 7, 107, 2, 2, 185, 186, 7, 114, 2, 2, 186, 14, 3, 2, 2, 2, 187, 188, 7, 114, 2, 2, 188, 189, 7, 116, 2, 2, 189, 190, 7, 107, 2, 2, 190, 191, 7, 112, 2, 2, 191, 192, 7, 118, 2, 2, 192, 16, 3, 2, 2, 2, 193, 194, 7, 63, 2, 2, 194, 18, 3, 2, 2, 2, 195, 196, 7, 96, 2, 2, 196, 20, 3, 2, 2, 2, 197, 198, 7, 44, 2, 2, 198, 22, 3, 2, 2, 2, 199, 200, 7, 49, 2, 2, 200, 24, 3, 2, 2, 2, 201, 202, 7, 39, 2, 2, 202, 26, 3, 2, 2, 2, 203, 204, 7, 45, 2, 2, 204, 28, 3, 2, 2, 2, 205, 206, 7, 47, 2, 2, 206, 30, 3, 2, 2, 2, 207, 208, 7, 62, 2, 2, 208, 209, 7, 62, 2, 2, 209, 32, 3, 2, 2, 2, 210, 211, 7, 64, 2, 2, 211, 212, 7, 64, 2, 2, 212, 34, 3, 2, 2, 2, 213, 214, 7, 40, 2, 2, 214, 36, 3, 2, 2, 2, 215, 216, 7, 38, 2, 2, 216, 38, 3, 2, 2, 2, 217, 218, 7, 126, 2, 2, 218, 40, 3, 2, 2, 2, 219, 220, 7, 100, 2, 2, 220, 221, 7, 116, 2, 2, 221, 222, 7, 103, 2, 2, 222, 223, 7, 99, 2, 2, 223, 224, 7, 109, 2, 2, 224, 42, 3, 2, 2, 2, 225, 226, 7, 101, 2, 2, 226, 227, 7, 113, 2, 2, 227, 228, 7, 112, 2, 2, 228, 229, 7, 118, 2, 2, 229, 230, 7, 107, 2, 2, 230, 231, 7, 112, 2, 2, 231, 232, 7, 119, 2, 2, 232, 233, 7, 103, 2, 2, 233, 44, 3, 2, 2, 2, 234, 235, 7, 116, 2, 2, 235, 236, 7, 103, 2, 2, 236, 237, 7, 118, 2, 2, 237, 238, 7, 119, 2, 2, 238, 239, 7, 116, 2, 2, 239, 240, 7, 112, 2, 2, 240, 46, 3, 2, 2, 2, 241, 242, 7, 46, 2, 2, 242, 48, 3, 2, 2, 2, 243, 244, 7, 107, 2, 2, 244, 245, 7, 104, 2, 2, 245, 50, 3, 2, 2, 2, 246, 247, 7, 102, 2, 2, 247, 248, 7, 113, 2, 2, 248, 52, 3, 2, 2, 2, 249, 250, 7, 103, 2, 2, 250, 251, 7, 110, 2, 2, 251, 252, 7, 107, 2, 2, 252, 253, 7, 104, 2, 2, 253, 54, 3, 2, 2, 2, 254, 255, 7, 103, 2, 2, 255, 256, 7, 110, 2, 2, 256, 257, 7, 117, 2, 2, 257, 258, 7, 103, 2, 2, 258, 56, 3, 2, 2, 2, 259, 260, 7, 121, 2, 2, 260, 261, 7, 106, 2, 2, 261, 262, 7, 107, 2, 2, 262, 263, 7, 110, 2, 2, 263, 264, 7, 103, 2, 2, 264, 58, 3, 2, 2, 2, 265, 266, 7, 119, 2, 2, 266, 267, 7, 112, 2, 2, 267, 268, 7, 118, 2, 2, 268, 269, 7, 107, 2, 2, 269, 270, 7, 110, 2, 2, 270, 60, 3, 2, 2, 2, 271, 272, 7, 104, 2, 2, 272, 273, 7, 113, 2, 2, 273, 274, 7, 116, 2, 2, 274, 62, 3, 2, 2, 2, 275, 276, 7, 107, 2, 2, 276, 277, 7, 112, 2, 2, 277, 64, 3, 2, 2, 2, 278, 279, 7, 117, 2, 2, 279, 280, 7, 118, 2, 2, 280, 281, 7, 103, 2, 2, 281, 282, 7, 114, 2, 2, 282, 66, 3, 2, 2, 2, 283, 284, 7, 104, 2, 2, 284, 285, 7, 119, 2, 2, 285, 286, 7, 112, 2, 2, 286, 287, 7, 101, 2, 2, 287, 68, 3, 2, 2, 2, 288, 289, 7, 42, 2, 2, 289, 70, 3, 2, 2, 2, 290, 291, 7, 43, 2, 2, 291, 72, 3, 2, 2, 2, 292, 293, 7, 102, 2, 2, 293, 294, 7, 103, 2, 2, 294, 295, 7, 104, 2, 2, 295, 74, 3, 2, 2, 2, 296, 297, 7, 103, 2, 2, 297, 298, 7, 122, 2, 2, 298, 299, 7, 118, 2, 2, 299, 300, 7, 103, 2, 2, 300, 301, 7, 116, 2, 2, 301, 302, 7, 112, 2, 2, 302, 76, 3, 2, 2, 2, 303, 304, 7, 60, 2, 2, 304, 78, 3, 2, 2, 2, 305, 306, 7, 125, 2, 2, 306, 80, 3, 2, 2, 2, 307, 308, 7, 127, 2, 2, 308, 82, 3, 2, 2, 2, 309, 310, 7, 93, 2, 2, 310, 84, 3, 2, 2, 2, 311, 312, 7, 95, 2, 2, 312, 86, 3, 2, 2, 2, 313, 314, 7, 65, 2, 2, 314, 88, 3, 2, 2, 2, 315, 316, 7, 48, 2, 2, 316, 90, 3, 2, 2, 2, 317, 318, 7, 35, 2, 2, 318, 92, 3, 2, 2, 2, 319, 320, 7, 128, 2, 2, 320, 94, 3, 2, 2, 2, 321, 322, 7, 48, 2, 2, 322, 323, 7, 48, 2, 2, 323, 96, 3, 2, 2, 2, 324, 325, 7, 48, 2, 2, 325, 326, 7, 48, 2, 2, 326, 327, 7, 48, 2, 2, 327, 98, 3, 2, 2, 2, 328, 329, 7, 63, 2, 2, 329, 330, 7, 63, 2, 2, 330, 100, 3, 2, 2, 2, 331, 332, 7, 35, 2, 2, 332, 333, 7, 63, 2, 2, 333, 102, 3, 2, 2, 2, 334, 335, 7, 62, 2, 2, 335, 104, 3, 2, 2, 2, 336, 337, 7, 62, 2, 2, 337, 338, 7, 63, 2, 2, 338, 106, 3, 2, 2, 2, 339, 340, 7, 64, 2, 2, 340, 108, 3, 2, 2, 2, 341, 342, 7, 64, 2, 2, 342, 343, 7, 63, 2, 2, 343, 110, 3, 2, 2, 2, 344, 345, 7, 112, 2, 2, 345, 346, 7, 113, 2, 2, 346, 347, 7, 118, 2, 2, 347, 112, 3, 2, 2, 2, 348, 349, 7, 99, 2, 2, 349, 350, 7, 112, 2, 2, 350, 351, 7, 102, 2, 2, 351, 114, 3, 2, 2, 2, 352, 353, 7, 113, 2, 2, 353, 354, 7, 116, 2, 2, 354, 116, 3, 2, 2, 2, 355, 356, 7, 110, 2, 2, 356, 357, 7, 99, 2, 2, 357, 358, 7, 111, 2, 2, 358, 359, 7, 100, 2, 2, 359, 360, 7, 102, 2, 2, 360, 361, 7, 99, 2, 2, 361, 118, 3, 2, 2, 2, 362, 363, 7, 47, 2, 2, 363, 364, 7, 64, 2, 2, 364, 120, 3, 2, 2, 2, 365, 366, 7, 118, 2, 2, 366, 367, 7, 116, 2, 2, 367, 368, 7, 119, 2, 2, 368, 369, 7, 103, 2, 2, 369, 122, 3, 2, 2, 2, 370, 371, 7, 104, 2, 2, 371, 372, 7, 99, 2, 2, 372, 373, 7, 110, 2, 2, 373, 374, 7, 117, 2, 2, 374, 375, 7, 103, 2, 2, 375, 124, 3, 2, 2, 2, 376, 377, 7, 112, 2, 2, 377, 378, 7, 119, 2, 2, 378, 379, 7, 110, 2, 2, 379, 380, 7, 110, 2, 2, 380, 126, 3, 2, 2, 2, 381, 382, 7, 88, 2, 2, 382, 383, 7, 113, 2, 2, 383, 384, 7, 107, 2, 2, 384, 385, 7, 102, 2, 2, 385, 128, 3, 2, 2, 2, 386, 387, 7, 75, 2, 2, 387, 388, 7, 112, 2, 2, 388, 389, 7, 118, 2, 2, 389, 130, 3, 2, 2, 2, 390, 391, 7, 72, 2, 2, 391, 392, 7, 110, 2, 2, 392, 393, 7, 113, 2, 2, 393, 394, 7, 99, 2, 2, 394, 395, 7, 118, 2, 2, 395, 132, 3, 2, 2, 2, 396, 397, 7, 68, 2, 2, 397, 398, 7, 113, 2, 2, 398, 399, 7, 113, 2, 2, 399, 400, 7, 110, 2, 2, 400, 134, 3, 2, 2, 2, 401, 402, 7, 69, 2, 2, 402, 403, 7, 106, 2, 2, 403, 404, 7, 99, 2, 2, 404, 405, 7, 116, 2, 2, 405, 136, 3, 2, 2, 2, 406, 407, 7, 85, 2, 2, 407, 408, 7, 118, 2, 2, 408, 409, 7, 116, 2, 2, 409, 410, 7, 107, 2, 2, 410, 411, 7, 112, 2, 2, 411, 412, 7, 105, 2, 2, 412, 138, 3, 2, 2, 2, 413, 415, 5, 149, 75, 2, 414, 413, 3, 2, 2, 2, 415, 416, 3, 2, 2, 2, 416, 414, 3, 2, 2, 2, 416, 417, 3, 2, 2, 2, 417, 140, 3, 2, 2, 2, 418, 420, 5, 149, 75, 2, 419, 418, 3, 2, 2, 2, 420, 421, 3, 2, 2, 2, 421, 419, 3, 2, 2, 2, 421, 422, 3, 2, 2, 2, 422, 423, 3, 2, 2, 2, 423, 425, 7, 48, 2, 2, 424, 426, 5, 149, 75, 2, 425, 424, 3, 2, 2, 2, 426, 427, 3, 2, 2, 2, 427, 425, 3, 2, 2, 2, 427, 428, 3, 2, 2, 2, 428, 438, 3, 2, 2, 2, 429, 431, 7, 103, 2, 2, 430, 432, 7, 47, 2, 2, 431, 430, 3, 2, 2, 2, 431, 432, 3, 2, 2, 2, 432, 434, 3, 2, 2, 2, 433, 435, 5, 149, 75, 2, 434, 433, 3, 2, 2, 2, 435, 436, 3, 2, 2, 2, 436, 434, 3, 2, 2, 2, 436, 437, 3, 2, 2, 2, 437, 439, 3, 2, 2, 2, 438, 429, 3, 2, 2, 2, 438, 439, 3, 2, 2, 2, 439, 142, 3, 2, 2, 2, 440, 446, 7, 41, 2, 2, 441, 445, 10, 2, 2, 2, 442, 443, 7, 94, 2, 2, 443, 445, 9, 3, 2, 2, 444, 441, 3, 2, 2, 2, 444, 442, 3, 2, 2, 2, 445, 448, 3, 2, 2, 2, 446, 444, 3, 2, 2, 2, 446, 447, 3, 2, 2, 2, 447, 449, 3, 2, 2, 2, 448, 446, 3, 2, 2, 2, 449, 450, 7, 41, 2, 2, 450, 144, 3, 2, 2, 2, 451, 457, 7, 36, 2, 2, 452, 456, 10, 4, 2, 2, 453, 454, 7, 94, 2, 2, 454, 456, 9, 5, 2, 2, 455, 452, 3, 2, 2, 2, 455, 453, 3, 2, 2, 2, 456, 459, 3, 2, 2, 2, 457, 455, 3, 2, 2, 2, 457, 458, 3, 2, 2, 2, 458, 460, 3, 2, 2, 2, 459, 457, 3, 2, 2, 2, 460, 461, 7, 36, 2, 2, 461, 146, 3, 2, 2, 2, 462, 466, 5, 151, 76, 2, 463, 465, 5, 153, 77, 2, 464, 463, 3, 2, 2, 2, 465, 468, 3, 2, 2, 2, 466, 464, 3, 2, 2, 2, 466, 467, 3, 2, 2, 2, 467, 148, 3, 2, 2, 2, 468, 466, 3, 2, 2, 2, 469, 470, 9, 6, 2, 2, 470, 150, 3, 2, 2, 2, 471, 472, 9, 7, 2, 2, 472, 152, 3, 2, 2, 2, 473, 477, 5, 151, 76, 2, 474, 477, 5, 149, 75, 2, 475, 477, 9, 8, 2, 2, 476, 473, 3, 2, 2, 2, 476, 474, 3, 2, 2, 2, 476, 475, 3, 2, 2, 2, 477, 154, 3, 2, 2, 2, 478, 479, 7, 47, 2, 2, 479, 480, 7, 47, 2, 2, 480, 484, 3, 2, 2, 2, 481, 483, 10, 9, 2, 2, 482, 481, 3, 2, 2, 2, 483, 486, 3, 2, 2, 2, 484, 482, 3, 2, 2, 2, 484, 485, 3, 2, 2, 2, 485, 487, 3, 2, 2, 2, 486, 484, 3, 2, 2, 2, 487, 488, 8, 78, 2, 2, 488, 156, 3, 2, 2, 2, 489, 491, 9, 10, 2, 2, 490, 489, 3, 2, 2, 2, 491, 492, 3, 2, 2, 2, 492, 490, 3, 2, 2, 2, 492, 493, 3, 2, 2, 2, 493, 494, 3, 2, 2, 2, 494, 495, 8, 79, 2, 2, 495, 158, 3, 2, 2, 2, 496, 497, 11, 2, 2, 2, 497, 160, 3, 2, 2, 2, 17, 2, 416, 421, 427, 431, 436, 438, 444, 446, 455, 457, 466, 476, 484, 492, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py index 3c1ec1d9..38629b07 100644 --- a/src/antlr/PyxellLexer.py +++ b/src/antlr/PyxellLexer.py @@ -32,25 +32,25 @@ def serializedATN(): buf.write("\3\35\3\35\3\35\3\36\3\36\3\36\3\36\3\36\3\36\3\37\3\37") buf.write("\3\37\3\37\3 \3 \3 \3!\3!\3!\3!\3!\3\"\3\"\3\"\3\"\3\"") buf.write("\3#\3#\3$\3$\3%\3%\3%\3%\3&\3&\3&\3&\3&\3&\3&\3\'\3\'") - buf.write("\3(\3(\3)\3)\3*\3*\3+\3+\3,\3,\3-\3-\3.\3.\3/\3/\3/\3") - buf.write("\60\3\60\3\60\3\60\3\61\3\61\3\61\3\62\3\62\3\62\3\63") - buf.write("\3\63\3\64\3\64\3\64\3\65\3\65\3\66\3\66\3\66\3\67\3\67") - buf.write("\3\67\3\67\38\38\38\38\39\39\39\3:\3:\3;\3;\3;\3;\3;\3") - buf.write(";\3;\3<\3<\3<\3=\3=\3=\3=\3=\3>\3>\3>\3>\3>\3>\3?\3?\3") - buf.write("?\3?\3?\3@\3@\3@\3@\3@\3A\3A\3A\3A\3B\3B\3B\3B\3B\3B\3") - buf.write("C\3C\3C\3C\3C\3D\3D\3D\3D\3D\3E\3E\3E\3E\3E\3E\3E\3F\6") - buf.write("F\u019f\nF\rF\16F\u01a0\3G\6G\u01a4\nG\rG\16G\u01a5\3") - buf.write("G\3G\6G\u01aa\nG\rG\16G\u01ab\3G\3G\5G\u01b0\nG\3G\6G") - buf.write("\u01b3\nG\rG\16G\u01b4\5G\u01b7\nG\3H\3H\3H\3H\7H\u01bd") - buf.write("\nH\fH\16H\u01c0\13H\3H\3H\3I\3I\3I\3I\7I\u01c8\nI\fI") - buf.write("\16I\u01cb\13I\3I\3I\3J\3J\7J\u01d1\nJ\fJ\16J\u01d4\13") - buf.write("J\3K\3K\3L\3L\3M\3M\3M\5M\u01dd\nM\3N\3N\3N\3N\7N\u01e3") - buf.write("\nN\fN\16N\u01e6\13N\3N\3N\3O\6O\u01eb\nO\rO\16O\u01ec") - buf.write("\3O\3O\3P\3P\2\2Q\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23") - buf.write("\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25") - buf.write(")\26+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A") - buf.write("\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65") - buf.write("i\66k\67m8o9q:s;u{?}@\177A\u0081B\u0083C\u0085D\u0087") + buf.write("\3(\3(\3)\3)\3*\3*\3+\3+\3,\3,\3-\3-\3.\3.\3/\3/\3\60") + buf.write("\3\60\3\60\3\61\3\61\3\61\3\61\3\62\3\62\3\62\3\63\3\63") + buf.write("\3\63\3\64\3\64\3\65\3\65\3\65\3\66\3\66\3\67\3\67\3\67") + buf.write("\38\38\38\38\39\39\39\39\3:\3:\3:\3;\3;\3;\3;\3;\3;\3") + buf.write(";\3<\3<\3<\3=\3=\3=\3=\3=\3>\3>\3>\3>\3>\3>\3?\3?\3?\3") + buf.write("?\3?\3@\3@\3@\3@\3@\3A\3A\3A\3A\3B\3B\3B\3B\3B\3B\3C\3") + buf.write("C\3C\3C\3C\3D\3D\3D\3D\3D\3E\3E\3E\3E\3E\3E\3E\3F\6F\u019f") + buf.write("\nF\rF\16F\u01a0\3G\6G\u01a4\nG\rG\16G\u01a5\3G\3G\6G") + buf.write("\u01aa\nG\rG\16G\u01ab\3G\3G\5G\u01b0\nG\3G\6G\u01b3\n") + buf.write("G\rG\16G\u01b4\5G\u01b7\nG\3H\3H\3H\3H\7H\u01bd\nH\fH") + buf.write("\16H\u01c0\13H\3H\3H\3I\3I\3I\3I\7I\u01c8\nI\fI\16I\u01cb") + buf.write("\13I\3I\3I\3J\3J\7J\u01d1\nJ\fJ\16J\u01d4\13J\3K\3K\3") + buf.write("L\3L\3M\3M\3M\5M\u01dd\nM\3N\3N\3N\3N\7N\u01e3\nN\fN\16") + buf.write("N\u01e6\13N\3N\3N\3O\6O\u01eb\nO\rO\16O\u01ec\3O\3O\3") + buf.write("P\3P\2\2Q\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25") + buf.write("\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+") + buf.write("\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#E") + buf.write("$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k") + buf.write("\67m8o9q:s;u{?}@\177A\u0081B\u0083C\u0085D\u0087") buf.write("E\u0089F\u008bG\u008dH\u008fI\u0091J\u0093K\u0095\2\u0097") buf.write("\2\u0099\2\u009bL\u009dM\u009fN\3\2\13\4\2))^^\6\2))^") buf.write("^ppvv\4\2$$^^\6\2$$^^ppvv\3\2\62;\5\2C\\aac|\4\2))aa\4") @@ -85,10 +85,10 @@ def serializedATN(): buf.write("\3\2\2\2G\u0122\3\2\2\2I\u0124\3\2\2\2K\u0128\3\2\2\2") buf.write("M\u012f\3\2\2\2O\u0131\3\2\2\2Q\u0133\3\2\2\2S\u0135\3") buf.write("\2\2\2U\u0137\3\2\2\2W\u0139\3\2\2\2Y\u013b\3\2\2\2[\u013d") - buf.write("\3\2\2\2]\u013f\3\2\2\2_\u0142\3\2\2\2a\u0146\3\2\2\2") - buf.write("c\u0149\3\2\2\2e\u014c\3\2\2\2g\u014e\3\2\2\2i\u0151\3") - buf.write("\2\2\2k\u0153\3\2\2\2m\u0156\3\2\2\2o\u015a\3\2\2\2q\u015e") - buf.write("\3\2\2\2s\u0161\3\2\2\2u\u0163\3\2\2\2w\u016a\3\2\2\2") + buf.write("\3\2\2\2]\u013f\3\2\2\2_\u0141\3\2\2\2a\u0144\3\2\2\2") + buf.write("c\u0148\3\2\2\2e\u014b\3\2\2\2g\u014e\3\2\2\2i\u0150\3") + buf.write("\2\2\2k\u0153\3\2\2\2m\u0155\3\2\2\2o\u0158\3\2\2\2q\u015c") + buf.write("\3\2\2\2s\u0160\3\2\2\2u\u0163\3\2\2\2w\u016a\3\2\2\2") buf.write("y\u016d\3\2\2\2{\u0172\3\2\2\2}\u0178\3\2\2\2\177\u017d") buf.write("\3\2\2\2\u0081\u0182\3\2\2\2\u0083\u0186\3\2\2\2\u0085") buf.write("\u018c\3\2\2\2\u0087\u0191\3\2\2\2\u0089\u0196\3\2\2\2") @@ -146,21 +146,21 @@ def serializedATN(): buf.write("\7p\2\2\u012eL\3\2\2\2\u012f\u0130\7<\2\2\u0130N\3\2\2") buf.write("\2\u0131\u0132\7}\2\2\u0132P\3\2\2\2\u0133\u0134\7\177") buf.write("\2\2\u0134R\3\2\2\2\u0135\u0136\7]\2\2\u0136T\3\2\2\2") - buf.write("\u0137\u0138\7_\2\2\u0138V\3\2\2\2\u0139\u013a\7\60\2") - buf.write("\2\u013aX\3\2\2\2\u013b\u013c\7#\2\2\u013cZ\3\2\2\2\u013d") - buf.write("\u013e\7\u0080\2\2\u013e\\\3\2\2\2\u013f\u0140\7\60\2") - buf.write("\2\u0140\u0141\7\60\2\2\u0141^\3\2\2\2\u0142\u0143\7\60") - buf.write("\2\2\u0143\u0144\7\60\2\2\u0144\u0145\7\60\2\2\u0145`") - buf.write("\3\2\2\2\u0146\u0147\7?\2\2\u0147\u0148\7?\2\2\u0148b") - buf.write("\3\2\2\2\u0149\u014a\7#\2\2\u014a\u014b\7?\2\2\u014bd") - buf.write("\3\2\2\2\u014c\u014d\7>\2\2\u014df\3\2\2\2\u014e\u014f") - buf.write("\7>\2\2\u014f\u0150\7?\2\2\u0150h\3\2\2\2\u0151\u0152") - buf.write("\7@\2\2\u0152j\3\2\2\2\u0153\u0154\7@\2\2\u0154\u0155") - buf.write("\7?\2\2\u0155l\3\2\2\2\u0156\u0157\7p\2\2\u0157\u0158") - buf.write("\7q\2\2\u0158\u0159\7v\2\2\u0159n\3\2\2\2\u015a\u015b") - buf.write("\7c\2\2\u015b\u015c\7p\2\2\u015c\u015d\7f\2\2\u015dp\3") - buf.write("\2\2\2\u015e\u015f\7q\2\2\u015f\u0160\7t\2\2\u0160r\3") - buf.write("\2\2\2\u0161\u0162\7A\2\2\u0162t\3\2\2\2\u0163\u0164\7") + buf.write("\u0137\u0138\7_\2\2\u0138V\3\2\2\2\u0139\u013a\7A\2\2") + buf.write("\u013aX\3\2\2\2\u013b\u013c\7\60\2\2\u013cZ\3\2\2\2\u013d") + buf.write("\u013e\7#\2\2\u013e\\\3\2\2\2\u013f\u0140\7\u0080\2\2") + buf.write("\u0140^\3\2\2\2\u0141\u0142\7\60\2\2\u0142\u0143\7\60") + buf.write("\2\2\u0143`\3\2\2\2\u0144\u0145\7\60\2\2\u0145\u0146\7") + buf.write("\60\2\2\u0146\u0147\7\60\2\2\u0147b\3\2\2\2\u0148\u0149") + buf.write("\7?\2\2\u0149\u014a\7?\2\2\u014ad\3\2\2\2\u014b\u014c") + buf.write("\7#\2\2\u014c\u014d\7?\2\2\u014df\3\2\2\2\u014e\u014f") + buf.write("\7>\2\2\u014fh\3\2\2\2\u0150\u0151\7>\2\2\u0151\u0152") + buf.write("\7?\2\2\u0152j\3\2\2\2\u0153\u0154\7@\2\2\u0154l\3\2\2") + buf.write("\2\u0155\u0156\7@\2\2\u0156\u0157\7?\2\2\u0157n\3\2\2") + buf.write("\2\u0158\u0159\7p\2\2\u0159\u015a\7q\2\2\u015a\u015b\7") + buf.write("v\2\2\u015bp\3\2\2\2\u015c\u015d\7c\2\2\u015d\u015e\7") + buf.write("p\2\2\u015e\u015f\7f\2\2\u015fr\3\2\2\2\u0160\u0161\7") + buf.write("q\2\2\u0161\u0162\7t\2\2\u0162t\3\2\2\2\u0163\u0164\7") buf.write("n\2\2\u0164\u0165\7c\2\2\u0165\u0166\7o\2\2\u0166\u0167") buf.write("\7d\2\2\u0167\u0168\7f\2\2\u0168\u0169\7c\2\2\u0169v\3") buf.write("\2\2\2\u016a\u016b\7/\2\2\u016b\u016c\7@\2\2\u016cx\3") @@ -315,9 +315,9 @@ class PyxellLexer(Lexer): "'&'", "'$'", "'|'", "'break'", "'continue'", "'return'", "','", "'if'", "'do'", "'elif'", "'else'", "'while'", "'until'", "'for'", "'in'", "'step'", "'func'", "'('", "')'", "'def'", "'extern'", - "':'", "'{'", "'}'", "'['", "']'", "'.'", "'!'", "'~'", "'..'", - "'...'", "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", "'not'", - "'and'", "'or'", "'?'", "'lambda'", "'->'", "'true'", "'false'", + "':'", "'{'", "'}'", "'['", "']'", "'?'", "'.'", "'!'", "'~'", + "'..'", "'...'", "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", + "'not'", "'and'", "'or'", "'lambda'", "'->'", "'true'", "'false'", "'null'", "'Void'", "'Int'", "'Float'", "'Bool'", "'Char'", "'String'" ] diff --git a/src/antlr/PyxellLexer.tokens b/src/antlr/PyxellLexer.tokens index b5318ded..a3ded172 100644 --- a/src/antlr/PyxellLexer.tokens +++ b/src/antlr/PyxellLexer.tokens @@ -116,21 +116,21 @@ ERR=76 '}'=40 '['=41 ']'=42 -'.'=43 -'!'=44 -'~'=45 -'..'=46 -'...'=47 -'=='=48 -'!='=49 -'<'=50 -'<='=51 -'>'=52 -'>='=53 -'not'=54 -'and'=55 -'or'=56 -'?'=57 +'?'=43 +'.'=44 +'!'=45 +'~'=46 +'..'=47 +'...'=48 +'=='=49 +'!='=50 +'<'=51 +'<='=52 +'>'=53 +'>='=54 +'not'=55 +'and'=56 +'or'=57 'lambda'=58 '->'=59 'true'=60 diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index 4cec0482..8b5c8511 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -9,7 +9,7 @@ def serializedATN(): with StringIO() as buf: buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3N") - buf.write("\u0182\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\u0185\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16") buf.write("\t\16\4\17\t\17\4\20\t\20\3\2\7\2\"\n\2\f\2\16\2%\13\2") buf.write("\3\2\3\2\3\3\3\3\3\3\3\3\5\3-\n\3\3\4\3\4\3\4\3\4\3\4") @@ -33,168 +33,171 @@ def serializedATN(): buf.write("\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\5\t\u010f") buf.write("\n\t\3\t\3\t\5\t\u0113\n\t\3\t\3\t\5\t\u0117\n\t\5\t\u0119") - buf.write("\n\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\7\t\u0124\n\t") - buf.write("\f\t\16\t\u0127\13\t\3\t\5\t\u012a\n\t\3\t\3\t\3\t\3\t") - buf.write("\3\t\7\t\u0131\n\t\f\t\16\t\u0134\13\t\3\n\3\n\3\n\7\n") - buf.write("\u0139\n\n\f\n\16\n\u013c\13\n\3\n\3\n\3\13\3\13\3\13") - buf.write("\3\f\3\f\3\f\3\f\3\f\3\f\5\f\u0149\n\f\3\f\3\f\5\f\u014d") - buf.write("\n\f\3\r\3\r\5\r\u0151\n\r\3\r\3\r\3\16\3\16\3\16\3\16") - buf.write("\3\16\3\16\3\16\5\16\u015c\n\16\3\17\3\17\7\17\u0160\n") - buf.write("\17\f\17\16\17\u0163\13\17\3\17\3\17\3\20\3\20\3\20\3") - buf.write("\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\5\20\u0173") - buf.write("\n\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\7\20\u017d") - buf.write("\n\20\f\20\16\20\u0180\13\20\3\20\2\4\20\36\21\2\4\6\b") - buf.write("\n\f\16\20\22\24\26\30\32\34\36\2\f\3\2\13\25\3\2\26\27") - buf.write("\4\2\17\20//\3\2\f\16\3\2\17\20\3\2\21\22\3\2\60\61\3") - buf.write("\2\62\67\3\2>?\3\2AF\2\u01c4\2#\3\2\2\2\4,\3\2\2\2\6V") - buf.write("\3\2\2\2\bX\3\2\2\2\n\u00a0\3\2\2\2\f\u00a2\3\2\2\2\16") - buf.write("\u00a8\3\2\2\2\20\u00dd\3\2\2\2\22\u013a\3\2\2\2\24\u013f") - buf.write("\3\2\2\2\26\u014c\3\2\2\2\30\u0150\3\2\2\2\32\u015b\3") - buf.write("\2\2\2\34\u0161\3\2\2\2\36\u0172\3\2\2\2 \"\5\4\3\2! ") - buf.write("\3\2\2\2\"%\3\2\2\2#!\3\2\2\2#$\3\2\2\2$&\3\2\2\2%#\3") - buf.write("\2\2\2&\'\7\2\2\3\'\3\3\2\2\2()\5\6\4\2)*\7\3\2\2*-\3") - buf.write("\2\2\2+-\5\n\6\2,(\3\2\2\2,+\3\2\2\2-\5\3\2\2\2./\7\4") - buf.write("\2\2/\66\7K\2\2\60\61\7\5\2\2\61\67\5\34\17\2\62\63\7") - buf.write("\6\2\2\63\67\5\34\17\2\64\65\7\7\2\2\65\67\7K\2\2\66\60") - buf.write("\3\2\2\2\66\62\3\2\2\2\66\64\3\2\2\2\66\67\3\2\2\2\67") - buf.write("W\3\2\2\28W\7\b\2\29;\7\t\2\2:<\5\22\n\2;:\3\2\2\2;<\3") - buf.write("\2\2\2\5\36\20\2>A\7K\2\2?@\7\n\2\2@B\5\22") - buf.write("\n\2A?\3\2\2\2AB\3\2\2\2BW\3\2\2\2CD\5\b\5\2DE\7\n\2\2") - buf.write("EG\3\2\2\2FC\3\2\2\2GJ\3\2\2\2HF\3\2\2\2HI\3\2\2\2IK\3") - buf.write("\2\2\2JH\3\2\2\2KW\5\22\n\2LM\5\20\t\2MN\t\2\2\2NO\7\n") - buf.write("\2\2OP\5\20\t\2PW\3\2\2\2QW\t\3\2\2RT\7\30\2\2SU\5\22") - buf.write("\n\2TS\3\2\2\2TU\3\2\2\2UW\3\2\2\2V.\3\2\2\2V8\3\2\2\2") - buf.write("V9\3\2\2\2V=\3\2\2\2VH\3\2\2\2VL\3\2\2\2VQ\3\2\2\2VR\3") - buf.write("\2\2\2W\7\3\2\2\2X]\5\20\t\2YZ\7\31\2\2Z\\\5\20\t\2[Y") - buf.write("\3\2\2\2\\_\3\2\2\2][\3\2\2\2]^\3\2\2\2^\t\3\2\2\2_]\3") - buf.write("\2\2\2`a\7\32\2\2ab\5\20\t\2bc\7\33\2\2ck\5\16\b\2de\7") - buf.write("\34\2\2ef\5\20\t\2fg\7\33\2\2gh\5\16\b\2hj\3\2\2\2id\3") - buf.write("\2\2\2jm\3\2\2\2ki\3\2\2\2kl\3\2\2\2lq\3\2\2\2mk\3\2\2") - buf.write("\2no\7\35\2\2op\7\33\2\2pr\5\16\b\2qn\3\2\2\2qr\3\2\2") - buf.write("\2r\u00a1\3\2\2\2st\7\36\2\2tu\5\20\t\2uv\7\33\2\2vw\5") - buf.write("\16\b\2w\u00a1\3\2\2\2xy\7\37\2\2yz\5\20\t\2z{\7\33\2") - buf.write("\2{|\5\16\b\2|\u00a1\3\2\2\2}~\7 \2\2~\177\5\22\n\2\177") - buf.write("\u0080\7!\2\2\u0080\u0083\5\22\n\2\u0081\u0082\7\"\2\2") - buf.write("\u0082\u0084\5\22\n\2\u0083\u0081\3\2\2\2\u0083\u0084") - buf.write("\3\2\2\2\u0084\u0085\3\2\2\2\u0085\u0086\7\33\2\2\u0086") - buf.write("\u0087\5\16\b\2\u0087\u00a1\3\2\2\2\u0088\u0089\7#\2\2") - buf.write("\u0089\u008a\7K\2\2\u008a\u0090\7$\2\2\u008b\u008c\5\f") - buf.write("\7\2\u008c\u008d\7\31\2\2\u008d\u008f\3\2\2\2\u008e\u008b") - buf.write("\3\2\2\2\u008f\u0092\3\2\2\2\u0090\u008e\3\2\2\2\u0090") - buf.write("\u0091\3\2\2\2\u0091\u0094\3\2\2\2\u0092\u0090\3\2\2\2") - buf.write("\u0093\u0095\5\f\7\2\u0094\u0093\3\2\2\2\u0094\u0095\3") - buf.write("\2\2\2\u0095\u0096\3\2\2\2\u0096\u0098\7%\2\2\u0097\u0099") - buf.write("\5\36\20\2\u0098\u0097\3\2\2\2\u0098\u0099\3\2\2\2\u0099") - buf.write("\u009e\3\2\2\2\u009a\u009b\7&\2\2\u009b\u009f\5\16\b\2") - buf.write("\u009c\u009d\7\'\2\2\u009d\u009f\7\3\2\2\u009e\u009a\3") - buf.write("\2\2\2\u009e\u009c\3\2\2\2\u009f\u00a1\3\2\2\2\u00a0`") - buf.write("\3\2\2\2\u00a0s\3\2\2\2\u00a0x\3\2\2\2\u00a0}\3\2\2\2") - buf.write("\u00a0\u0088\3\2\2\2\u00a1\13\3\2\2\2\u00a2\u00a3\5\36") - buf.write("\20\2\u00a3\u00a6\7K\2\2\u00a4\u00a5\7(\2\2\u00a5\u00a7") - buf.write("\5\20\t\2\u00a6\u00a4\3\2\2\2\u00a6\u00a7\3\2\2\2\u00a7") - buf.write("\r\3\2\2\2\u00a8\u00aa\7)\2\2\u00a9\u00ab\5\4\3\2\u00aa") - buf.write("\u00a9\3\2\2\2\u00ab\u00ac\3\2\2\2\u00ac\u00aa\3\2\2\2") - buf.write("\u00ac\u00ad\3\2\2\2\u00ad\u00ae\3\2\2\2\u00ae\u00af\7") - buf.write("*\2\2\u00af\17\3\2\2\2\u00b0\u00b1\b\t\1\2\u00b1\u00de") - buf.write("\5\32\16\2\u00b2\u00b3\7$\2\2\u00b3\u00b4\5\22\n\2\u00b4") - buf.write("\u00b5\7%\2\2\u00b5\u00de\3\2\2\2\u00b6\u00bc\7+\2\2\u00b7") - buf.write("\u00b8\5\20\t\2\u00b8\u00b9\7\31\2\2\u00b9\u00bb\3\2\2") - buf.write("\2\u00ba\u00b7\3\2\2\2\u00bb\u00be\3\2\2\2\u00bc\u00ba") - buf.write("\3\2\2\2\u00bc\u00bd\3\2\2\2\u00bd\u00c0\3\2\2\2\u00be") - buf.write("\u00bc\3\2\2\2\u00bf\u00c1\5\20\t\2\u00c0\u00bf\3\2\2") - buf.write("\2\u00c0\u00c1\3\2\2\2\u00c1\u00c2\3\2\2\2\u00c2\u00de") - buf.write("\7,\2\2\u00c3\u00c4\7+\2\2\u00c4\u00c6\5\20\t\2\u00c5") - buf.write("\u00c7\5\26\f\2\u00c6\u00c5\3\2\2\2\u00c7\u00c8\3\2\2") - buf.write("\2\u00c8\u00c6\3\2\2\2\u00c8\u00c9\3\2\2\2\u00c9\u00ca") - buf.write("\3\2\2\2\u00ca\u00cb\7,\2\2\u00cb\u00de\3\2\2\2\u00cc") - buf.write("\u00cd\t\4\2\2\u00cd\u00de\5\20\t\21\u00ce\u00cf\78\2") - buf.write("\2\u00cf\u00de\5\20\t\7\u00d0\u00d5\7<\2\2\u00d1\u00d2") - buf.write("\7K\2\2\u00d2\u00d4\7\31\2\2\u00d3\u00d1\3\2\2\2\u00d4") - buf.write("\u00d7\3\2\2\2\u00d5\u00d3\3\2\2\2\u00d5\u00d6\3\2\2\2") - buf.write("\u00d6\u00d9\3\2\2\2\u00d7\u00d5\3\2\2\2\u00d8\u00da\7") - buf.write("K\2\2\u00d9\u00d8\3\2\2\2\u00d9\u00da\3\2\2\2\u00da\u00db") - buf.write("\3\2\2\2\u00db\u00dc\7=\2\2\u00dc\u00de\5\20\t\3\u00dd") - buf.write("\u00b0\3\2\2\2\u00dd\u00b2\3\2\2\2\u00dd\u00b6\3\2\2\2") - buf.write("\u00dd\u00c3\3\2\2\2\u00dd\u00cc\3\2\2\2\u00dd\u00ce\3") - buf.write("\2\2\2\u00dd\u00d0\3\2\2\2\u00de\u0132\3\2\2\2\u00df\u00e0") - buf.write("\f\22\2\2\u00e0\u00e1\7\13\2\2\u00e1\u0131\5\20\t\22\u00e2") - buf.write("\u00e3\f\20\2\2\u00e3\u00e4\t\5\2\2\u00e4\u0131\5\20\t") - buf.write("\21\u00e5\u00e6\f\17\2\2\u00e6\u00e7\t\6\2\2\u00e7\u0131") - buf.write("\5\20\t\20\u00e8\u00e9\f\16\2\2\u00e9\u00ea\t\7\2\2\u00ea") - buf.write("\u0131\5\20\t\17\u00eb\u00ec\f\r\2\2\u00ec\u00ed\7\23") - buf.write("\2\2\u00ed\u0131\5\20\t\16\u00ee\u00ef\f\f\2\2\u00ef\u00f0") - buf.write("\7\24\2\2\u00f0\u0131\5\20\t\r\u00f1\u00f2\f\13\2\2\u00f2") - buf.write("\u00f3\7\25\2\2\u00f3\u0131\5\20\t\f\u00f4\u00f5\f\n\2") - buf.write("\2\u00f5\u00f6\t\b\2\2\u00f6\u0131\5\20\t\13\u00f7\u00f8") - buf.write("\f\b\2\2\u00f8\u00f9\t\t\2\2\u00f9\u0131\5\20\t\b\u00fa") - buf.write("\u00fb\f\6\2\2\u00fb\u00fc\79\2\2\u00fc\u0131\5\20\t\6") - buf.write("\u00fd\u00fe\f\5\2\2\u00fe\u00ff\7:\2\2\u00ff\u0131\5") - buf.write("\20\t\5\u0100\u0101\f\4\2\2\u0101\u0102\7;\2\2\u0102\u0103") - buf.write("\5\20\t\2\u0103\u0104\7(\2\2\u0104\u0105\5\20\t\4\u0105") - buf.write("\u0131\3\2\2\2\u0106\u0107\f\27\2\2\u0107\u0108\7+\2\2") - buf.write("\u0108\u0109\5\22\n\2\u0109\u010a\7,\2\2\u010a\u0131\3") - buf.write("\2\2\2\u010b\u010c\f\26\2\2\u010c\u010e\7+\2\2\u010d\u010f") - buf.write("\5\20\t\2\u010e\u010d\3\2\2\2\u010e\u010f\3\2\2\2\u010f") - buf.write("\u0110\3\2\2\2\u0110\u0112\7(\2\2\u0111\u0113\5\20\t\2") - buf.write("\u0112\u0111\3\2\2\2\u0112\u0113\3\2\2\2\u0113\u0118\3") - buf.write("\2\2\2\u0114\u0116\7(\2\2\u0115\u0117\5\20\t\2\u0116\u0115") - buf.write("\3\2\2\2\u0116\u0117\3\2\2\2\u0117\u0119\3\2\2\2\u0118") - buf.write("\u0114\3\2\2\2\u0118\u0119\3\2\2\2\u0119\u011a\3\2\2\2") - buf.write("\u011a\u0131\7,\2\2\u011b\u011c\f\25\2\2\u011c\u011d\7") - buf.write("-\2\2\u011d\u0131\7K\2\2\u011e\u011f\f\24\2\2\u011f\u0125") - buf.write("\7$\2\2\u0120\u0121\5\30\r\2\u0121\u0122\7\31\2\2\u0122") - buf.write("\u0124\3\2\2\2\u0123\u0120\3\2\2\2\u0124\u0127\3\2\2\2") - buf.write("\u0125\u0123\3\2\2\2\u0125\u0126\3\2\2\2\u0126\u0129\3") - buf.write("\2\2\2\u0127\u0125\3\2\2\2\u0128\u012a\5\30\r\2\u0129") - buf.write("\u0128\3\2\2\2\u0129\u012a\3\2\2\2\u012a\u012b\3\2\2\2") - buf.write("\u012b\u0131\7%\2\2\u012c\u012d\f\23\2\2\u012d\u0131\7") - buf.write(".\2\2\u012e\u012f\f\t\2\2\u012f\u0131\7\61\2\2\u0130\u00df") - buf.write("\3\2\2\2\u0130\u00e2\3\2\2\2\u0130\u00e5\3\2\2\2\u0130") - buf.write("\u00e8\3\2\2\2\u0130\u00eb\3\2\2\2\u0130\u00ee\3\2\2\2") - buf.write("\u0130\u00f1\3\2\2\2\u0130\u00f4\3\2\2\2\u0130\u00f7\3") - buf.write("\2\2\2\u0130\u00fa\3\2\2\2\u0130\u00fd\3\2\2\2\u0130\u0100") - buf.write("\3\2\2\2\u0130\u0106\3\2\2\2\u0130\u010b\3\2\2\2\u0130") - buf.write("\u011b\3\2\2\2\u0130\u011e\3\2\2\2\u0130\u012c\3\2\2\2") - buf.write("\u0130\u012e\3\2\2\2\u0131\u0134\3\2\2\2\u0132\u0130\3") - buf.write("\2\2\2\u0132\u0133\3\2\2\2\u0133\21\3\2\2\2\u0134\u0132") - buf.write("\3\2\2\2\u0135\u0136\5\20\t\2\u0136\u0137\7\31\2\2\u0137") - buf.write("\u0139\3\2\2\2\u0138\u0135\3\2\2\2\u0139\u013c\3\2\2\2") - buf.write("\u013a\u0138\3\2\2\2\u013a\u013b\3\2\2\2\u013b\u013d\3") - buf.write("\2\2\2\u013c\u013a\3\2\2\2\u013d\u013e\5\20\t\2\u013e") - buf.write("\23\3\2\2\2\u013f\u0140\5\22\n\2\u0140\u0141\7\2\2\3\u0141") - buf.write("\25\3\2\2\2\u0142\u0143\7 \2\2\u0143\u0144\5\22\n\2\u0144") - buf.write("\u0145\7!\2\2\u0145\u0148\5\22\n\2\u0146\u0147\7\"\2\2") - buf.write("\u0147\u0149\5\22\n\2\u0148\u0146\3\2\2\2\u0148\u0149") - buf.write("\3\2\2\2\u0149\u014d\3\2\2\2\u014a\u014b\7\32\2\2\u014b") - buf.write("\u014d\5\20\t\2\u014c\u0142\3\2\2\2\u014c\u014a\3\2\2") - buf.write("\2\u014d\27\3\2\2\2\u014e\u014f\7K\2\2\u014f\u0151\7\n") - buf.write("\2\2\u0150\u014e\3\2\2\2\u0150\u0151\3\2\2\2\u0151\u0152") - buf.write("\3\2\2\2\u0152\u0153\5\20\t\2\u0153\31\3\2\2\2\u0154\u015c") - buf.write("\7G\2\2\u0155\u015c\7H\2\2\u0156\u015c\t\n\2\2\u0157\u015c") - buf.write("\7I\2\2\u0158\u015c\7J\2\2\u0159\u015c\7@\2\2\u015a\u015c") - buf.write("\7K\2\2\u015b\u0154\3\2\2\2\u015b\u0155\3\2\2\2\u015b") - buf.write("\u0156\3\2\2\2\u015b\u0157\3\2\2\2\u015b\u0158\3\2\2\2") - buf.write("\u015b\u0159\3\2\2\2\u015b\u015a\3\2\2\2\u015c\33\3\2") - buf.write("\2\2\u015d\u015e\7K\2\2\u015e\u0160\7\31\2\2\u015f\u015d") - buf.write("\3\2\2\2\u0160\u0163\3\2\2\2\u0161\u015f\3\2\2\2\u0161") - buf.write("\u0162\3\2\2\2\u0162\u0164\3\2\2\2\u0163\u0161\3\2\2\2") - buf.write("\u0164\u0165\7K\2\2\u0165\35\3\2\2\2\u0166\u0167\b\20") - buf.write("\1\2\u0167\u0173\t\13\2\2\u0168\u0169\7$\2\2\u0169\u016a") - buf.write("\5\36\20\2\u016a\u016b\7%\2\2\u016b\u0173\3\2\2\2\u016c") - buf.write("\u016d\7+\2\2\u016d\u016e\5\36\20\2\u016e\u016f\7,\2\2") - buf.write("\u016f\u0173\3\2\2\2\u0170\u0171\7=\2\2\u0171\u0173\5") - buf.write("\36\20\3\u0172\u0166\3\2\2\2\u0172\u0168\3\2\2\2\u0172") - buf.write("\u016c\3\2\2\2\u0172\u0170\3\2\2\2\u0173\u017e\3\2\2\2") - buf.write("\u0174\u0175\f\5\2\2\u0175\u0176\7\f\2\2\u0176\u017d\5") - buf.write("\36\20\5\u0177\u0178\f\4\2\2\u0178\u0179\7=\2\2\u0179") - buf.write("\u017d\5\36\20\4\u017a\u017b\f\6\2\2\u017b\u017d\7;\2") - buf.write("\2\u017c\u0174\3\2\2\2\u017c\u0177\3\2\2\2\u017c\u017a") - buf.write("\3\2\2\2\u017d\u0180\3\2\2\2\u017e\u017c\3\2\2\2\u017e") - buf.write("\u017f\3\2\2\2\u017f\37\3\2\2\2\u0180\u017e\3\2\2\2,#") - buf.write(",\66;AHTV]kq\u0083\u0090\u0094\u0098\u009e\u00a0\u00a6") - buf.write("\u00ac\u00bc\u00c0\u00c8\u00d5\u00d9\u00dd\u010e\u0112") - buf.write("\u0116\u0118\u0125\u0129\u0130\u0132\u013a\u0148\u014c") - buf.write("\u0150\u015b\u0161\u0172\u017c\u017e") + buf.write("\n\t\3\t\3\t\3\t\5\t\u011e\n\t\3\t\3\t\3\t\3\t\3\t\3\t") + buf.write("\3\t\7\t\u0127\n\t\f\t\16\t\u012a\13\t\3\t\5\t\u012d\n") + buf.write("\t\3\t\3\t\3\t\3\t\3\t\7\t\u0134\n\t\f\t\16\t\u0137\13") + buf.write("\t\3\n\3\n\3\n\7\n\u013c\n\n\f\n\16\n\u013f\13\n\3\n\3") + buf.write("\n\3\13\3\13\3\13\3\f\3\f\3\f\3\f\3\f\3\f\5\f\u014c\n") + buf.write("\f\3\f\3\f\5\f\u0150\n\f\3\r\3\r\5\r\u0154\n\r\3\r\3\r") + buf.write("\3\16\3\16\3\16\3\16\3\16\3\16\3\16\5\16\u015f\n\16\3") + buf.write("\17\3\17\7\17\u0163\n\17\f\17\16\17\u0166\13\17\3\17\3") + buf.write("\17\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20") + buf.write("\3\20\3\20\5\20\u0176\n\20\3\20\3\20\3\20\3\20\3\20\3") + buf.write("\20\3\20\3\20\7\20\u0180\n\20\f\20\16\20\u0183\13\20\3") + buf.write("\20\2\4\20\36\21\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36") + buf.write("\2\f\3\2\13\25\3\2\26\27\4\2\17\20\60\60\3\2\f\16\3\2") + buf.write("\17\20\3\2\21\22\3\2\61\62\3\2\638\3\2>?\3\2AF\2\u01c8") + buf.write("\2#\3\2\2\2\4,\3\2\2\2\6V\3\2\2\2\bX\3\2\2\2\n\u00a0\3") + buf.write("\2\2\2\f\u00a2\3\2\2\2\16\u00a8\3\2\2\2\20\u00dd\3\2\2") + buf.write("\2\22\u013d\3\2\2\2\24\u0142\3\2\2\2\26\u014f\3\2\2\2") + buf.write("\30\u0153\3\2\2\2\32\u015e\3\2\2\2\34\u0164\3\2\2\2\36") + buf.write("\u0175\3\2\2\2 \"\5\4\3\2! \3\2\2\2\"%\3\2\2\2#!\3\2\2") + buf.write("\2#$\3\2\2\2$&\3\2\2\2%#\3\2\2\2&\'\7\2\2\3\'\3\3\2\2") + buf.write("\2()\5\6\4\2)*\7\3\2\2*-\3\2\2\2+-\5\n\6\2,(\3\2\2\2,") + buf.write("+\3\2\2\2-\5\3\2\2\2./\7\4\2\2/\66\7K\2\2\60\61\7\5\2") + buf.write("\2\61\67\5\34\17\2\62\63\7\6\2\2\63\67\5\34\17\2\64\65") + buf.write("\7\7\2\2\65\67\7K\2\2\66\60\3\2\2\2\66\62\3\2\2\2\66\64") + buf.write("\3\2\2\2\66\67\3\2\2\2\67W\3\2\2\28W\7\b\2\29;\7\t\2\2") + buf.write(":<\5\22\n\2;:\3\2\2\2;<\3\2\2\2\5\36\20\2") + buf.write(">A\7K\2\2?@\7\n\2\2@B\5\22\n\2A?\3\2\2\2AB\3\2\2\2BW\3") + buf.write("\2\2\2CD\5\b\5\2DE\7\n\2\2EG\3\2\2\2FC\3\2\2\2GJ\3\2\2") + buf.write("\2HF\3\2\2\2HI\3\2\2\2IK\3\2\2\2JH\3\2\2\2KW\5\22\n\2") + buf.write("LM\5\20\t\2MN\t\2\2\2NO\7\n\2\2OP\5\20\t\2PW\3\2\2\2Q") + buf.write("W\t\3\2\2RT\7\30\2\2SU\5\22\n\2TS\3\2\2\2TU\3\2\2\2UW") + buf.write("\3\2\2\2V.\3\2\2\2V8\3\2\2\2V9\3\2\2\2V=\3\2\2\2VH\3\2") + buf.write("\2\2VL\3\2\2\2VQ\3\2\2\2VR\3\2\2\2W\7\3\2\2\2X]\5\20\t") + buf.write("\2YZ\7\31\2\2Z\\\5\20\t\2[Y\3\2\2\2\\_\3\2\2\2][\3\2\2") + buf.write("\2]^\3\2\2\2^\t\3\2\2\2_]\3\2\2\2`a\7\32\2\2ab\5\20\t") + buf.write("\2bc\7\33\2\2ck\5\16\b\2de\7\34\2\2ef\5\20\t\2fg\7\33") + buf.write("\2\2gh\5\16\b\2hj\3\2\2\2id\3\2\2\2jm\3\2\2\2ki\3\2\2") + buf.write("\2kl\3\2\2\2lq\3\2\2\2mk\3\2\2\2no\7\35\2\2op\7\33\2\2") + buf.write("pr\5\16\b\2qn\3\2\2\2qr\3\2\2\2r\u00a1\3\2\2\2st\7\36") + buf.write("\2\2tu\5\20\t\2uv\7\33\2\2vw\5\16\b\2w\u00a1\3\2\2\2x") + buf.write("y\7\37\2\2yz\5\20\t\2z{\7\33\2\2{|\5\16\b\2|\u00a1\3\2") + buf.write("\2\2}~\7 \2\2~\177\5\22\n\2\177\u0080\7!\2\2\u0080\u0083") + buf.write("\5\22\n\2\u0081\u0082\7\"\2\2\u0082\u0084\5\22\n\2\u0083") + buf.write("\u0081\3\2\2\2\u0083\u0084\3\2\2\2\u0084\u0085\3\2\2\2") + buf.write("\u0085\u0086\7\33\2\2\u0086\u0087\5\16\b\2\u0087\u00a1") + buf.write("\3\2\2\2\u0088\u0089\7#\2\2\u0089\u008a\7K\2\2\u008a\u0090") + buf.write("\7$\2\2\u008b\u008c\5\f\7\2\u008c\u008d\7\31\2\2\u008d") + buf.write("\u008f\3\2\2\2\u008e\u008b\3\2\2\2\u008f\u0092\3\2\2\2") + buf.write("\u0090\u008e\3\2\2\2\u0090\u0091\3\2\2\2\u0091\u0094\3") + buf.write("\2\2\2\u0092\u0090\3\2\2\2\u0093\u0095\5\f\7\2\u0094\u0093") + buf.write("\3\2\2\2\u0094\u0095\3\2\2\2\u0095\u0096\3\2\2\2\u0096") + buf.write("\u0098\7%\2\2\u0097\u0099\5\36\20\2\u0098\u0097\3\2\2") + buf.write("\2\u0098\u0099\3\2\2\2\u0099\u009e\3\2\2\2\u009a\u009b") + buf.write("\7&\2\2\u009b\u009f\5\16\b\2\u009c\u009d\7\'\2\2\u009d") + buf.write("\u009f\7\3\2\2\u009e\u009a\3\2\2\2\u009e\u009c\3\2\2\2") + buf.write("\u009f\u00a1\3\2\2\2\u00a0`\3\2\2\2\u00a0s\3\2\2\2\u00a0") + buf.write("x\3\2\2\2\u00a0}\3\2\2\2\u00a0\u0088\3\2\2\2\u00a1\13") + buf.write("\3\2\2\2\u00a2\u00a3\5\36\20\2\u00a3\u00a6\7K\2\2\u00a4") + buf.write("\u00a5\7(\2\2\u00a5\u00a7\5\20\t\2\u00a6\u00a4\3\2\2\2") + buf.write("\u00a6\u00a7\3\2\2\2\u00a7\r\3\2\2\2\u00a8\u00aa\7)\2") + buf.write("\2\u00a9\u00ab\5\4\3\2\u00aa\u00a9\3\2\2\2\u00ab\u00ac") + buf.write("\3\2\2\2\u00ac\u00aa\3\2\2\2\u00ac\u00ad\3\2\2\2\u00ad") + buf.write("\u00ae\3\2\2\2\u00ae\u00af\7*\2\2\u00af\17\3\2\2\2\u00b0") + buf.write("\u00b1\b\t\1\2\u00b1\u00de\5\32\16\2\u00b2\u00b3\7$\2") + buf.write("\2\u00b3\u00b4\5\22\n\2\u00b4\u00b5\7%\2\2\u00b5\u00de") + buf.write("\3\2\2\2\u00b6\u00bc\7+\2\2\u00b7\u00b8\5\20\t\2\u00b8") + buf.write("\u00b9\7\31\2\2\u00b9\u00bb\3\2\2\2\u00ba\u00b7\3\2\2") + buf.write("\2\u00bb\u00be\3\2\2\2\u00bc\u00ba\3\2\2\2\u00bc\u00bd") + buf.write("\3\2\2\2\u00bd\u00c0\3\2\2\2\u00be\u00bc\3\2\2\2\u00bf") + buf.write("\u00c1\5\20\t\2\u00c0\u00bf\3\2\2\2\u00c0\u00c1\3\2\2") + buf.write("\2\u00c1\u00c2\3\2\2\2\u00c2\u00de\7,\2\2\u00c3\u00c4") + buf.write("\7+\2\2\u00c4\u00c6\5\20\t\2\u00c5\u00c7\5\26\f\2\u00c6") + buf.write("\u00c5\3\2\2\2\u00c7\u00c8\3\2\2\2\u00c8\u00c6\3\2\2\2") + buf.write("\u00c8\u00c9\3\2\2\2\u00c9\u00ca\3\2\2\2\u00ca\u00cb\7") + buf.write(",\2\2\u00cb\u00de\3\2\2\2\u00cc\u00cd\t\4\2\2\u00cd\u00de") + buf.write("\5\20\t\21\u00ce\u00cf\79\2\2\u00cf\u00de\5\20\t\7\u00d0") + buf.write("\u00d5\7<\2\2\u00d1\u00d2\7K\2\2\u00d2\u00d4\7\31\2\2") + buf.write("\u00d3\u00d1\3\2\2\2\u00d4\u00d7\3\2\2\2\u00d5\u00d3\3") + buf.write("\2\2\2\u00d5\u00d6\3\2\2\2\u00d6\u00d9\3\2\2\2\u00d7\u00d5") + buf.write("\3\2\2\2\u00d8\u00da\7K\2\2\u00d9\u00d8\3\2\2\2\u00d9") + buf.write("\u00da\3\2\2\2\u00da\u00db\3\2\2\2\u00db\u00dc\7=\2\2") + buf.write("\u00dc\u00de\5\20\t\3\u00dd\u00b0\3\2\2\2\u00dd\u00b2") + buf.write("\3\2\2\2\u00dd\u00b6\3\2\2\2\u00dd\u00c3\3\2\2\2\u00dd") + buf.write("\u00cc\3\2\2\2\u00dd\u00ce\3\2\2\2\u00dd\u00d0\3\2\2\2") + buf.write("\u00de\u0135\3\2\2\2\u00df\u00e0\f\22\2\2\u00e0\u00e1") + buf.write("\7\13\2\2\u00e1\u0134\5\20\t\22\u00e2\u00e3\f\20\2\2\u00e3") + buf.write("\u00e4\t\5\2\2\u00e4\u0134\5\20\t\21\u00e5\u00e6\f\17") + buf.write("\2\2\u00e6\u00e7\t\6\2\2\u00e7\u0134\5\20\t\20\u00e8\u00e9") + buf.write("\f\16\2\2\u00e9\u00ea\t\7\2\2\u00ea\u0134\5\20\t\17\u00eb") + buf.write("\u00ec\f\r\2\2\u00ec\u00ed\7\23\2\2\u00ed\u0134\5\20\t") + buf.write("\16\u00ee\u00ef\f\f\2\2\u00ef\u00f0\7\24\2\2\u00f0\u0134") + buf.write("\5\20\t\r\u00f1\u00f2\f\13\2\2\u00f2\u00f3\7\25\2\2\u00f3") + buf.write("\u0134\5\20\t\f\u00f4\u00f5\f\n\2\2\u00f5\u00f6\t\b\2") + buf.write("\2\u00f6\u0134\5\20\t\13\u00f7\u00f8\f\b\2\2\u00f8\u00f9") + buf.write("\t\t\2\2\u00f9\u0134\5\20\t\b\u00fa\u00fb\f\6\2\2\u00fb") + buf.write("\u00fc\7:\2\2\u00fc\u0134\5\20\t\6\u00fd\u00fe\f\5\2\2") + buf.write("\u00fe\u00ff\7;\2\2\u00ff\u0134\5\20\t\5\u0100\u0101\f") + buf.write("\4\2\2\u0101\u0102\7-\2\2\u0102\u0103\5\20\t\2\u0103\u0104") + buf.write("\7(\2\2\u0104\u0105\5\20\t\4\u0105\u0134\3\2\2\2\u0106") + buf.write("\u0107\f\27\2\2\u0107\u0108\7+\2\2\u0108\u0109\5\22\n") + buf.write("\2\u0109\u010a\7,\2\2\u010a\u0134\3\2\2\2\u010b\u010c") + buf.write("\f\26\2\2\u010c\u010e\7+\2\2\u010d\u010f\5\20\t\2\u010e") + buf.write("\u010d\3\2\2\2\u010e\u010f\3\2\2\2\u010f\u0110\3\2\2\2") + buf.write("\u0110\u0112\7(\2\2\u0111\u0113\5\20\t\2\u0112\u0111\3") + buf.write("\2\2\2\u0112\u0113\3\2\2\2\u0113\u0118\3\2\2\2\u0114\u0116") + buf.write("\7(\2\2\u0115\u0117\5\20\t\2\u0116\u0115\3\2\2\2\u0116") + buf.write("\u0117\3\2\2\2\u0117\u0119\3\2\2\2\u0118\u0114\3\2\2\2") + buf.write("\u0118\u0119\3\2\2\2\u0119\u011a\3\2\2\2\u011a\u0134\7") + buf.write(",\2\2\u011b\u011d\f\25\2\2\u011c\u011e\7-\2\2\u011d\u011c") + buf.write("\3\2\2\2\u011d\u011e\3\2\2\2\u011e\u011f\3\2\2\2\u011f") + buf.write("\u0120\7.\2\2\u0120\u0134\7K\2\2\u0121\u0122\f\24\2\2") + buf.write("\u0122\u0128\7$\2\2\u0123\u0124\5\30\r\2\u0124\u0125\7") + buf.write("\31\2\2\u0125\u0127\3\2\2\2\u0126\u0123\3\2\2\2\u0127") + buf.write("\u012a\3\2\2\2\u0128\u0126\3\2\2\2\u0128\u0129\3\2\2\2") + buf.write("\u0129\u012c\3\2\2\2\u012a\u0128\3\2\2\2\u012b\u012d\5") + buf.write("\30\r\2\u012c\u012b\3\2\2\2\u012c\u012d\3\2\2\2\u012d") + buf.write("\u012e\3\2\2\2\u012e\u0134\7%\2\2\u012f\u0130\f\23\2\2") + buf.write("\u0130\u0134\7/\2\2\u0131\u0132\f\t\2\2\u0132\u0134\7") + buf.write("\62\2\2\u0133\u00df\3\2\2\2\u0133\u00e2\3\2\2\2\u0133") + buf.write("\u00e5\3\2\2\2\u0133\u00e8\3\2\2\2\u0133\u00eb\3\2\2\2") + buf.write("\u0133\u00ee\3\2\2\2\u0133\u00f1\3\2\2\2\u0133\u00f4\3") + buf.write("\2\2\2\u0133\u00f7\3\2\2\2\u0133\u00fa\3\2\2\2\u0133\u00fd") + buf.write("\3\2\2\2\u0133\u0100\3\2\2\2\u0133\u0106\3\2\2\2\u0133") + buf.write("\u010b\3\2\2\2\u0133\u011b\3\2\2\2\u0133\u0121\3\2\2\2") + buf.write("\u0133\u012f\3\2\2\2\u0133\u0131\3\2\2\2\u0134\u0137\3") + buf.write("\2\2\2\u0135\u0133\3\2\2\2\u0135\u0136\3\2\2\2\u0136\21") + buf.write("\3\2\2\2\u0137\u0135\3\2\2\2\u0138\u0139\5\20\t\2\u0139") + buf.write("\u013a\7\31\2\2\u013a\u013c\3\2\2\2\u013b\u0138\3\2\2") + buf.write("\2\u013c\u013f\3\2\2\2\u013d\u013b\3\2\2\2\u013d\u013e") + buf.write("\3\2\2\2\u013e\u0140\3\2\2\2\u013f\u013d\3\2\2\2\u0140") + buf.write("\u0141\5\20\t\2\u0141\23\3\2\2\2\u0142\u0143\5\22\n\2") + buf.write("\u0143\u0144\7\2\2\3\u0144\25\3\2\2\2\u0145\u0146\7 \2") + buf.write("\2\u0146\u0147\5\22\n\2\u0147\u0148\7!\2\2\u0148\u014b") + buf.write("\5\22\n\2\u0149\u014a\7\"\2\2\u014a\u014c\5\22\n\2\u014b") + buf.write("\u0149\3\2\2\2\u014b\u014c\3\2\2\2\u014c\u0150\3\2\2\2") + buf.write("\u014d\u014e\7\32\2\2\u014e\u0150\5\20\t\2\u014f\u0145") + buf.write("\3\2\2\2\u014f\u014d\3\2\2\2\u0150\27\3\2\2\2\u0151\u0152") + buf.write("\7K\2\2\u0152\u0154\7\n\2\2\u0153\u0151\3\2\2\2\u0153") + buf.write("\u0154\3\2\2\2\u0154\u0155\3\2\2\2\u0155\u0156\5\20\t") + buf.write("\2\u0156\31\3\2\2\2\u0157\u015f\7G\2\2\u0158\u015f\7H") + buf.write("\2\2\u0159\u015f\t\n\2\2\u015a\u015f\7I\2\2\u015b\u015f") + buf.write("\7J\2\2\u015c\u015f\7@\2\2\u015d\u015f\7K\2\2\u015e\u0157") + buf.write("\3\2\2\2\u015e\u0158\3\2\2\2\u015e\u0159\3\2\2\2\u015e") + buf.write("\u015a\3\2\2\2\u015e\u015b\3\2\2\2\u015e\u015c\3\2\2\2") + buf.write("\u015e\u015d\3\2\2\2\u015f\33\3\2\2\2\u0160\u0161\7K\2") + buf.write("\2\u0161\u0163\7\31\2\2\u0162\u0160\3\2\2\2\u0163\u0166") + buf.write("\3\2\2\2\u0164\u0162\3\2\2\2\u0164\u0165\3\2\2\2\u0165") + buf.write("\u0167\3\2\2\2\u0166\u0164\3\2\2\2\u0167\u0168\7K\2\2") + buf.write("\u0168\35\3\2\2\2\u0169\u016a\b\20\1\2\u016a\u0176\t\13") + buf.write("\2\2\u016b\u016c\7$\2\2\u016c\u016d\5\36\20\2\u016d\u016e") + buf.write("\7%\2\2\u016e\u0176\3\2\2\2\u016f\u0170\7+\2\2\u0170\u0171") + buf.write("\5\36\20\2\u0171\u0172\7,\2\2\u0172\u0176\3\2\2\2\u0173") + buf.write("\u0174\7=\2\2\u0174\u0176\5\36\20\3\u0175\u0169\3\2\2") + buf.write("\2\u0175\u016b\3\2\2\2\u0175\u016f\3\2\2\2\u0175\u0173") + buf.write("\3\2\2\2\u0176\u0181\3\2\2\2\u0177\u0178\f\5\2\2\u0178") + buf.write("\u0179\7\f\2\2\u0179\u0180\5\36\20\5\u017a\u017b\f\4\2") + buf.write("\2\u017b\u017c\7=\2\2\u017c\u0180\5\36\20\4\u017d\u017e") + buf.write("\f\6\2\2\u017e\u0180\7-\2\2\u017f\u0177\3\2\2\2\u017f") + buf.write("\u017a\3\2\2\2\u017f\u017d\3\2\2\2\u0180\u0183\3\2\2\2") + buf.write("\u0181\u017f\3\2\2\2\u0181\u0182\3\2\2\2\u0182\37\3\2") + buf.write("\2\2\u0183\u0181\3\2\2\2-#,\66;AHTV]kq\u0083\u0090\u0094") + buf.write("\u0098\u009e\u00a0\u00a6\u00ac\u00bc\u00c0\u00c8\u00d5") + buf.write("\u00d9\u00dd\u010e\u0112\u0116\u0118\u011d\u0128\u012c") + buf.write("\u0133\u0135\u013d\u014b\u014f\u0153\u015e\u0164\u0175") + buf.write("\u017f\u0181") return buf.getvalue() @@ -215,9 +218,9 @@ class PyxellParser ( Parser ): "'if'", "'do'", "'elif'", "'else'", "'while'", "'until'", "'for'", "'in'", "'step'", "'func'", "'('", "')'", "'def'", "'extern'", "':'", "'{'", "'}'", "'['", "']'", - "'.'", "'!'", "'~'", "'..'", "'...'", "'=='", "'!='", - "'<'", "'<='", "'>'", "'>='", "'not'", "'and'", "'or'", - "'?'", "'lambda'", "'->'", "'true'", "'false'", "'null'", + "'?'", "'.'", "'!'", "'~'", "'..'", "'...'", "'=='", + "'!='", "'<'", "'<='", "'>'", "'>='", "'not'", "'and'", + "'or'", "'lambda'", "'->'", "'true'", "'false'", "'null'", "'Void'", "'Int'", "'Float'", "'Bool'", "'Char'", "'String'" ] symbolicNames = [ "", "", "", "", @@ -385,7 +388,7 @@ def program(self): self.state = 33 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__40) | (1 << PyxellParser.T__44) | (1 << PyxellParser.T__53) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.T__66 - 64)) | (1 << (PyxellParser.T__67 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0): + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__40) | (1 << PyxellParser.T__45) | (1 << PyxellParser.T__54) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.T__66 - 64)) | (1 << (PyxellParser.T__67 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0): self.state = 30 self.stmt() self.state = 35 @@ -437,7 +440,7 @@ def stmt(self): self.state = 42 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__1, PyxellParser.T__5, PyxellParser.T__6, PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__19, PyxellParser.T__20, PyxellParser.T__21, PyxellParser.T__33, PyxellParser.T__40, PyxellParser.T__44, PyxellParser.T__53, PyxellParser.T__57, PyxellParser.T__58, PyxellParser.T__59, PyxellParser.T__60, PyxellParser.T__61, PyxellParser.T__62, PyxellParser.T__63, PyxellParser.T__64, PyxellParser.T__65, PyxellParser.T__66, PyxellParser.T__67, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: + if token in [PyxellParser.T__1, PyxellParser.T__5, PyxellParser.T__6, PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__19, PyxellParser.T__20, PyxellParser.T__21, PyxellParser.T__33, PyxellParser.T__40, PyxellParser.T__45, PyxellParser.T__54, PyxellParser.T__57, PyxellParser.T__58, PyxellParser.T__59, PyxellParser.T__60, PyxellParser.T__61, PyxellParser.T__62, PyxellParser.T__63, PyxellParser.T__64, PyxellParser.T__65, PyxellParser.T__66, PyxellParser.T__67, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: self.enterOuterAlt(localctx, 1) self.state = 38 self.simple_stmt() @@ -691,7 +694,7 @@ def simple_stmt(self): self.state = 57 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__44 - 13)) | (1 << (PyxellParser.T__53 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__54 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): self.state = 56 self.tuple_expr() @@ -777,7 +780,7 @@ def simple_stmt(self): self.state = 82 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__44 - 13)) | (1 << (PyxellParser.T__53 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__54 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): self.state = 81 self.tuple_expr() @@ -1267,7 +1270,7 @@ def block(self): self.state = 170 self._errHandler.sync(self) _la = self._input.LA(1) - if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__40) | (1 << PyxellParser.T__44) | (1 << PyxellParser.T__53) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.T__66 - 64)) | (1 << (PyxellParser.T__67 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0)): + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__40) | (1 << PyxellParser.T__45) | (1 << PyxellParser.T__54) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.T__66 - 64)) | (1 << (PyxellParser.T__67 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0)): break self.state = 172 @@ -1376,6 +1379,7 @@ class ExprAttrContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext super().__init__(parser) + self.safe = None # Token self.copyFrom(ctx) def expr(self): @@ -1659,7 +1663,7 @@ def expr(self, _p:int=0): self.state = 190 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__44 - 13)) | (1 << (PyxellParser.T__53 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__54 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): self.state = 189 self.expr(0) @@ -1699,7 +1703,7 @@ def expr(self, _p:int=0): self.state = 202 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__44))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__45))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -1713,7 +1717,7 @@ def expr(self, _p:int=0): self._ctx = localctx _prevctx = localctx self.state = 204 - localctx.op = self.match(PyxellParser.T__53) + localctx.op = self.match(PyxellParser.T__54) self.state = 205 self.expr(5) pass @@ -1753,17 +1757,17 @@ def expr(self, _p:int=0): self._ctx.stop = self._input.LT(-1) - self.state = 304 + self.state = 307 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,32,self._ctx) + _alt = self._interp.adaptivePredict(self._input,33,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 302 + self.state = 305 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,31,self._ctx) + la_ = self._interp.adaptivePredict(self._input,32,self._ctx) if la_ == 1: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) @@ -1883,7 +1887,7 @@ def expr(self, _p:int=0): self.state = 243 localctx.dots = self._input.LT(1) _la = self._input.LA(1) - if not(_la==PyxellParser.T__45 or _la==PyxellParser.T__46): + if not(_la==PyxellParser.T__46 or _la==PyxellParser.T__47): localctx.dots = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -1902,7 +1906,7 @@ def expr(self, _p:int=0): self.state = 246 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__47) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__49) | (1 << PyxellParser.T__50) | (1 << PyxellParser.T__51) | (1 << PyxellParser.T__52))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__48) | (1 << PyxellParser.T__49) | (1 << PyxellParser.T__50) | (1 << PyxellParser.T__51) | (1 << PyxellParser.T__52) | (1 << PyxellParser.T__53))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -1919,7 +1923,7 @@ def expr(self, _p:int=0): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") self.state = 249 - localctx.op = self.match(PyxellParser.T__54) + localctx.op = self.match(PyxellParser.T__55) self.state = 250 self.expr(4) pass @@ -1932,7 +1936,7 @@ def expr(self, _p:int=0): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") self.state = 252 - localctx.op = self.match(PyxellParser.T__55) + localctx.op = self.match(PyxellParser.T__56) self.state = 253 self.expr(3) pass @@ -1945,7 +1949,7 @@ def expr(self, _p:int=0): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") self.state = 255 - self.match(PyxellParser.T__56) + self.match(PyxellParser.T__42) self.state = 256 self.expr(0) self.state = 257 @@ -1981,7 +1985,7 @@ def expr(self, _p:int=0): self.state = 268 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__44 - 13)) | (1 << (PyxellParser.T__53 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__54 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): self.state = 267 localctx.e1 = self.expr(0) @@ -1991,7 +1995,7 @@ def expr(self, _p:int=0): self.state = 272 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__44 - 13)) | (1 << (PyxellParser.T__53 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__54 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): self.state = 271 localctx.e2 = self.expr(0) @@ -2005,7 +2009,7 @@ def expr(self, _p:int=0): self.state = 276 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__44 - 13)) | (1 << (PyxellParser.T__53 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__54 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): self.state = 275 localctx.e3 = self.expr(0) @@ -2023,72 +2027,80 @@ def expr(self, _p:int=0): if not self.precpred(self._ctx, 19): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 19)") - self.state = 282 - self.match(PyxellParser.T__42) self.state = 283 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==PyxellParser.T__42: + self.state = 282 + localctx.safe = self.match(PyxellParser.T__42) + + + self.state = 285 + self.match(PyxellParser.T__43) + self.state = 286 self.match(PyxellParser.ID) pass elif la_ == 16: localctx = PyxellParser.ExprCallContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 284 + self.state = 287 if not self.precpred(self._ctx, 18): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 18)") - self.state = 285 + self.state = 288 self.match(PyxellParser.T__33) - self.state = 291 + self.state = 294 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,29,self._ctx) + _alt = self._interp.adaptivePredict(self._input,30,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 286 + self.state = 289 self.call_arg() - self.state = 287 + self.state = 290 self.match(PyxellParser.T__22) - self.state = 293 + self.state = 296 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,29,self._ctx) + _alt = self._interp.adaptivePredict(self._input,30,self._ctx) - self.state = 295 + self.state = 298 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__44 - 13)) | (1 << (PyxellParser.T__53 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 294 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__54 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 297 self.call_arg() - self.state = 297 + self.state = 300 self.match(PyxellParser.T__34) pass elif la_ == 17: localctx = PyxellParser.ExprUnaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 298 + self.state = 301 if not self.precpred(self._ctx, 17): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 17)") - self.state = 299 - localctx.op = self.match(PyxellParser.T__43) + self.state = 302 + localctx.op = self.match(PyxellParser.T__44) pass elif la_ == 18: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 300 + self.state = 303 if not self.precpred(self._ctx, 7): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") - self.state = 301 - localctx.dots = self.match(PyxellParser.T__46) + self.state = 304 + localctx.dots = self.match(PyxellParser.T__47) pass - self.state = 306 + self.state = 309 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,32,self._ctx) + _alt = self._interp.adaptivePredict(self._input,33,self._ctx) except RecognitionException as re: localctx.exception = re @@ -2143,20 +2155,20 @@ def tuple_expr(self): try: localctx = PyxellParser.ExprTupleContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 312 + self.state = 315 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,33,self._ctx) + _alt = self._interp.adaptivePredict(self._input,34,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 307 + self.state = 310 self.expr(0) - self.state = 308 + self.state = 311 self.match(PyxellParser.T__22) - self.state = 314 + self.state = 317 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,33,self._ctx) + _alt = self._interp.adaptivePredict(self._input,34,self._ctx) - self.state = 315 + self.state = 318 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -2210,9 +2222,9 @@ def interpolation_expr(self): try: localctx = PyxellParser.ExprInterpolationContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 317 + self.state = 320 self.tuple_expr() - self.state = 318 + self.state = 321 self.match(PyxellParser.EOF) except RecognitionException as re: localctx.exception = re @@ -2283,27 +2295,27 @@ def comprehension(self): self.enterRule(localctx, 20, self.RULE_comprehension) self._la = 0 # Token type try: - self.state = 330 + self.state = 333 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__29]: localctx = PyxellParser.ComprehensionGeneratorContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 320 + self.state = 323 self.match(PyxellParser.T__29) - self.state = 321 + self.state = 324 self.tuple_expr() - self.state = 322 + self.state = 325 self.match(PyxellParser.T__30) - self.state = 323 - self.tuple_expr() self.state = 326 + self.tuple_expr() + self.state = 329 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__31: - self.state = 324 + self.state = 327 self.match(PyxellParser.T__31) - self.state = 325 + self.state = 328 self.tuple_expr() @@ -2311,9 +2323,9 @@ def comprehension(self): elif token in [PyxellParser.T__23]: localctx = PyxellParser.ComprehensionFilterContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 328 + self.state = 331 self.match(PyxellParser.T__23) - self.state = 329 + self.state = 332 self.expr(0) pass else: @@ -2371,17 +2383,17 @@ def call_arg(self): try: localctx = PyxellParser.CallArgContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 334 + self.state = 337 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,36,self._ctx) + la_ = self._interp.adaptivePredict(self._input,37,self._ctx) if la_ == 1: - self.state = 332 + self.state = 335 self.match(PyxellParser.ID) - self.state = 333 + self.state = 336 self.match(PyxellParser.T__7) - self.state = 336 + self.state = 339 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -2523,25 +2535,25 @@ def atom(self): self.enterRule(localctx, 24, self.RULE_atom) self._la = 0 # Token type try: - self.state = 345 + self.state = 348 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: localctx = PyxellParser.AtomIntContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 338 + self.state = 341 self.match(PyxellParser.INT) pass elif token in [PyxellParser.FLOAT]: localctx = PyxellParser.AtomFloatContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 339 + self.state = 342 self.match(PyxellParser.FLOAT) pass elif token in [PyxellParser.T__59, PyxellParser.T__60]: localctx = PyxellParser.AtomBoolContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 340 + self.state = 343 _la = self._input.LA(1) if not(_la==PyxellParser.T__59 or _la==PyxellParser.T__60): self._errHandler.recoverInline(self) @@ -2552,25 +2564,25 @@ def atom(self): elif token in [PyxellParser.CHAR]: localctx = PyxellParser.AtomCharContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 341 + self.state = 344 self.match(PyxellParser.CHAR) pass elif token in [PyxellParser.STRING]: localctx = PyxellParser.AtomStringContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 342 + self.state = 345 self.match(PyxellParser.STRING) pass elif token in [PyxellParser.T__61]: localctx = PyxellParser.AtomNullContext(self, localctx) self.enterOuterAlt(localctx, 6) - self.state = 343 + self.state = 346 self.match(PyxellParser.T__61) pass elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) self.enterOuterAlt(localctx, 7) - self.state = 344 + self.state = 347 self.match(PyxellParser.ID) pass else: @@ -2615,20 +2627,20 @@ def id_list(self): self.enterRule(localctx, 26, self.RULE_id_list) try: self.enterOuterAlt(localctx, 1) - self.state = 351 + self.state = 354 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,38,self._ctx) + _alt = self._interp.adaptivePredict(self._input,39,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 347 + self.state = 350 self.match(PyxellParser.ID) - self.state = 348 + self.state = 351 self.match(PyxellParser.T__22) - self.state = 353 + self.state = 356 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,38,self._ctx) + _alt = self._interp.adaptivePredict(self._input,39,self._ctx) - self.state = 354 + self.state = 357 self.match(PyxellParser.ID) except RecognitionException as re: localctx.exception = re @@ -2787,7 +2799,7 @@ def typ(self, _p:int=0): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 368 + self.state = 371 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__62, PyxellParser.T__63, PyxellParser.T__64, PyxellParser.T__65, PyxellParser.T__66, PyxellParser.T__67]: @@ -2795,7 +2807,7 @@ def typ(self, _p:int=0): self._ctx = localctx _prevctx = localctx - self.state = 357 + self.state = 360 _la = self._input.LA(1) if not(((((_la - 63)) & ~0x3f) == 0 and ((1 << (_la - 63)) & ((1 << (PyxellParser.T__62 - 63)) | (1 << (PyxellParser.T__63 - 63)) | (1 << (PyxellParser.T__64 - 63)) | (1 << (PyxellParser.T__65 - 63)) | (1 << (PyxellParser.T__66 - 63)) | (1 << (PyxellParser.T__67 - 63)))) != 0)): self._errHandler.recoverInline(self) @@ -2807,89 +2819,89 @@ def typ(self, _p:int=0): localctx = PyxellParser.TypeParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 358 + self.state = 361 self.match(PyxellParser.T__33) - self.state = 359 + self.state = 362 self.typ(0) - self.state = 360 + self.state = 363 self.match(PyxellParser.T__34) pass elif token in [PyxellParser.T__40]: localctx = PyxellParser.TypeArrayContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 362 + self.state = 365 self.match(PyxellParser.T__40) - self.state = 363 + self.state = 366 self.typ(0) - self.state = 364 + self.state = 367 self.match(PyxellParser.T__41) pass elif token in [PyxellParser.T__58]: localctx = PyxellParser.TypeFunc0Context(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 366 + self.state = 369 self.match(PyxellParser.T__58) - self.state = 367 + self.state = 370 self.typ(1) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 380 + self.state = 383 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,41,self._ctx) + _alt = self._interp.adaptivePredict(self._input,42,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 378 + self.state = 381 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,40,self._ctx) + la_ = self._interp.adaptivePredict(self._input,41,self._ctx) if la_ == 1: localctx = PyxellParser.TypeTupleContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 370 + self.state = 373 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 371 + self.state = 374 self.match(PyxellParser.T__9) - self.state = 372 + self.state = 375 self.typ(3) pass elif la_ == 2: localctx = PyxellParser.TypeFuncContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 373 + self.state = 376 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 374 + self.state = 377 self.match(PyxellParser.T__58) - self.state = 375 + self.state = 378 self.typ(2) pass elif la_ == 3: localctx = PyxellParser.TypeNullableContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 376 + self.state = 379 if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") - self.state = 377 - self.match(PyxellParser.T__56) + self.state = 380 + self.match(PyxellParser.T__42) pass - self.state = 382 + self.state = 385 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,41,self._ctx) + _alt = self._interp.adaptivePredict(self._input,42,self._ctx) except RecognitionException as re: localctx.exception = re diff --git a/src/ast.py b/src/ast.py index 3f7c7026..ccb27b53 100644 --- a/src/ast.py +++ b/src/ast.py @@ -212,6 +212,7 @@ def visitExprAttr(self, ctx): **_node(ctx, 'ExprAttr'), 'expr': self.visit(ctx.expr()), 'attr': self.visit(ctx.ID()), + 'safe': bool(ctx.safe), } def visitExprCall(self, ctx): diff --git a/src/compiler.py b/src/compiler.py index 9317b7dc..a73b0042 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -160,9 +160,12 @@ def attribute(self, node, expr, attr): return None, self.get(node, attr) obj = self.compile(expr) + return obj, self.attr(node, obj, attr) + + def attr(self, node, obj, attr): type = obj.type value = None - + if type == tInt: if attr == 'toString': value = self.get(node, 'Int_toString') @@ -218,7 +221,7 @@ def attribute(self, node, expr, attr): if value is None: self.throw(node, err.NoAttribute(type, attr)) - return obj, value + return value def call(self, name, *values): func = self.builder.load(self.env[name]) @@ -1318,14 +1321,51 @@ def compileExprSlice(self, node): return self.builder.call(self.get(node, 'CharArray_asString'), [result]) if type == tString else result def compileExprAttr(self, node): - obj, value = self.attribute(node, node['expr'], node['attr']) - return value + expr = node['expr'] + attr = node['attr'] + + if node.get('safe'): + obj = self.compile(expr) + if not obj.type.isNullable(): + self.throw(node, err.NotNullable(obj.type)) + + label_null = self.builder.basic_block + + with self.builder.if_then(self.builder.icmp_unsigned('!=', obj, vNull(obj.type))): + label_notnull = self.builder.basic_block + value = self.nullable(self.attr(node, self.extract(obj), attr)) + type = value.type + + phi = self.builder.phi(type) + phi.add_incoming(value, label_notnull) + phi.add_incoming(vNull(type), label_null) + return phi + + else: + obj, value = self.attribute(node, expr, attr) + return value def compileExprCall(self, node): expr = node['expr'] + safe_call = expr.get('safe', False) if expr['node'] == 'ExprAttr': - obj, func = self.attribute(expr, expr['expr'], expr['attr']) + if safe_call: + obj = self.compile(expr['expr']) + if not obj.type.isNullable(): + self.throw(node, err.NotNullable(obj.type)) + + label_null = self.builder.basic_block + label_notnull = self.builder.append_basic_block() + label_end = self.builder.append_basic_block() + + self.builder.cbranch(self.builder.icmp_unsigned('!=', obj, vNull(obj.type)), label_notnull, label_end) + self.builder.position_at_end(label_notnull) + + obj = self.extract(obj) + func = self.attr(expr, obj, expr['attr']) + else: + obj, func = self.attribute(expr, expr['expr'], expr['attr']) else: obj = None func = self.compile(expr) @@ -1404,7 +1444,22 @@ def compileExprCall(self, node): if obj: args.insert(0, obj) - return self.builder.call(func, args) + result = self.builder.call(func, args) + + if safe_call: + value = self.nullable(result) + type = value.type + + label_notnull = self.builder.basic_block + self.builder.branch(label_end) + self.builder.position_at_end(label_end) + + phi = self.builder.phi(type) + phi.add_incoming(value, label_notnull) + phi.add_incoming(vNull(type), label_null) + return phi + + return result def compileExprUnaryOp(self, node): return self.unaryop(node, node['op'], self.compile(node['expr'])) diff --git a/test/bad/nullables/op06.err b/test/bad/nullables/op06.err new file mode 100644 index 00000000..1f755131 --- /dev/null +++ b/test/bad/nullables/op06.err @@ -0,0 +1 @@ +Type `Int*Char` has no attribute `c`. \ No newline at end of file diff --git a/test/bad/nullables/op06.px b/test/bad/nullables/op06.px new file mode 100644 index 00000000..16458b12 --- /dev/null +++ b/test/bad/nullables/op06.px @@ -0,0 +1,3 @@ + +(Int*Char)? t = 1, 'b' +t?.c diff --git a/test/good/nullables/op04.px b/test/good/nullables/op04.px index 1552cd22..5b9724e7 100644 --- a/test/good/nullables/op04.px +++ b/test/good/nullables/op04.px @@ -4,4 +4,3 @@ a = [2, 3] * 5 print b?.length?.toString()?.length b = null print b?.length?.toString()?.length - diff --git a/test/good/nullables/op07.out b/test/good/nullables/op07.out new file mode 100644 index 00000000..9e64554a --- /dev/null +++ b/test/good/nullables/op07.out @@ -0,0 +1 @@ +X_Y diff --git a/test/good/nullables/op07.px b/test/good/nullables/op07.px new file mode 100644 index 00000000..c7a770bf --- /dev/null +++ b/test/good/nullables/op07.px @@ -0,0 +1,3 @@ + +[Char]? a = ['X', 'Y'] +print a?.join(a!.length > 2 or a!.length < 2 ? "" : "_") From e63f4529a014a06abd8b5637e390110bfe8a320a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Thu, 14 Nov 2019 18:38:48 +0100 Subject: [PATCH 063/100] New operator `is` for comparing against nulls Standard comparison of nullables is no longer allowed. --- src/Pyxell.g4 | 1 + src/antlr/Pyxell.interp | 6 +- src/antlr/Pyxell.tokens | 60 +-- src/antlr/PyxellLexer.interp | 8 +- src/antlr/PyxellLexer.py | 429 +++++++++--------- src/antlr/PyxellLexer.tokens | 60 +-- src/antlr/PyxellParser.py | 811 ++++++++++++++++++---------------- src/antlr/PyxellVisitor.py | 5 + src/ast.py | 7 + src/compiler.py | 11 +- src/errors.py | 1 + test/bad/nullables/cmp02.err | 1 + test/bad/nullables/cmp02.px | 3 + test/bad/nullables/cmp03.err | 1 + test/bad/nullables/cmp03.px | 2 + test/bad/nullables/cmp04.err | 1 + test/bad/nullables/cmp04.px | 4 + test/good/nullables/cmp01.px | 4 +- test/good/nullables/cmp02.px | 4 +- test/good/nullables/cmp03.out | 2 - test/good/nullables/cmp03.px | 4 +- test/good/nullables/cmp04.out | 3 +- test/good/nullables/cmp04.px | 4 +- test/good/nullables/cmp05.out | 2 - test/good/nullables/cmp05.px | 4 - test/good/nullables/cmp06.out | 3 - test/good/nullables/cmp06.px | 7 - test/good/nullables/cmp07.out | 3 - test/good/nullables/cmp07.px | 6 - 29 files changed, 768 insertions(+), 689 deletions(-) create mode 100644 test/bad/nullables/cmp02.err create mode 100644 test/bad/nullables/cmp02.px create mode 100644 test/bad/nullables/cmp03.err create mode 100644 test/bad/nullables/cmp03.px create mode 100644 test/bad/nullables/cmp04.err create mode 100644 test/bad/nullables/cmp04.px delete mode 100644 test/good/nullables/cmp05.out delete mode 100644 test/good/nullables/cmp05.px delete mode 100644 test/good/nullables/cmp06.out delete mode 100644 test/good/nullables/cmp06.px delete mode 100644 test/good/nullables/cmp07.out delete mode 100644 test/good/nullables/cmp07.px diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index fa4d55bf..6e157268 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -60,6 +60,7 @@ expr | expr op='|' expr # ExprBinaryOp | expr dots=('..' | '...') expr # ExprRange | expr dots='...' # ExprRange + | expr op=('is' | 'isn\'t') expr # ExprIs | expr op=('==' | '!=' | '<' | '<=' | '>' | '>=') expr # ExprCmp | op='not' expr # ExprUnaryOp | expr op='and' expr # ExprLogicalOp diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index a5a23993..0edc564c 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -48,6 +48,8 @@ null '~' '..' '...' +'is' +'isn\'t' '==' '!=' '<' @@ -147,6 +149,8 @@ null null null null +null +null INT FLOAT CHAR @@ -175,4 +179,4 @@ typ atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 78, 389, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 3, 2, 7, 2, 34, 10, 2, 12, 2, 14, 2, 37, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 45, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 55, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 60, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 66, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 71, 10, 4, 12, 4, 14, 4, 74, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 85, 10, 4, 5, 4, 87, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 92, 10, 5, 12, 5, 14, 5, 95, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 106, 10, 6, 12, 6, 14, 6, 109, 11, 6, 3, 6, 3, 6, 3, 6, 5, 6, 114, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 132, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 143, 10, 6, 12, 6, 14, 6, 146, 11, 6, 3, 6, 5, 6, 149, 10, 6, 3, 6, 3, 6, 5, 6, 153, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 159, 10, 6, 5, 6, 161, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 167, 10, 7, 3, 8, 3, 8, 6, 8, 171, 10, 8, 13, 8, 14, 8, 172, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 187, 10, 9, 12, 9, 14, 9, 190, 11, 9, 3, 9, 5, 9, 193, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 6, 9, 199, 10, 9, 13, 9, 14, 9, 200, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 212, 10, 9, 12, 9, 14, 9, 215, 11, 9, 3, 9, 5, 9, 218, 10, 9, 3, 9, 3, 9, 5, 9, 222, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 271, 10, 9, 3, 9, 3, 9, 5, 9, 275, 10, 9, 3, 9, 3, 9, 5, 9, 279, 10, 9, 5, 9, 281, 10, 9, 3, 9, 3, 9, 3, 9, 5, 9, 286, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 295, 10, 9, 12, 9, 14, 9, 298, 11, 9, 3, 9, 5, 9, 301, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 308, 10, 9, 12, 9, 14, 9, 311, 11, 9, 3, 10, 3, 10, 3, 10, 7, 10, 316, 10, 10, 12, 10, 14, 10, 319, 11, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 332, 10, 12, 3, 12, 3, 12, 5, 12, 336, 10, 12, 3, 13, 3, 13, 5, 13, 340, 10, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 351, 10, 14, 3, 15, 3, 15, 7, 15, 355, 10, 15, 12, 15, 14, 15, 358, 11, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 374, 10, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 7, 16, 384, 10, 16, 12, 16, 14, 16, 387, 11, 16, 3, 16, 2, 4, 16, 30, 17, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 2, 12, 3, 2, 11, 21, 3, 2, 22, 23, 4, 2, 15, 16, 48, 48, 3, 2, 12, 14, 3, 2, 15, 16, 3, 2, 17, 18, 3, 2, 49, 50, 3, 2, 51, 56, 3, 2, 62, 63, 3, 2, 65, 70, 2, 456, 2, 35, 3, 2, 2, 2, 4, 44, 3, 2, 2, 2, 6, 86, 3, 2, 2, 2, 8, 88, 3, 2, 2, 2, 10, 160, 3, 2, 2, 2, 12, 162, 3, 2, 2, 2, 14, 168, 3, 2, 2, 2, 16, 221, 3, 2, 2, 2, 18, 317, 3, 2, 2, 2, 20, 322, 3, 2, 2, 2, 22, 335, 3, 2, 2, 2, 24, 339, 3, 2, 2, 2, 26, 350, 3, 2, 2, 2, 28, 356, 3, 2, 2, 2, 30, 373, 3, 2, 2, 2, 32, 34, 5, 4, 3, 2, 33, 32, 3, 2, 2, 2, 34, 37, 3, 2, 2, 2, 35, 33, 3, 2, 2, 2, 35, 36, 3, 2, 2, 2, 36, 38, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 38, 39, 7, 2, 2, 3, 39, 3, 3, 2, 2, 2, 40, 41, 5, 6, 4, 2, 41, 42, 7, 3, 2, 2, 42, 45, 3, 2, 2, 2, 43, 45, 5, 10, 6, 2, 44, 40, 3, 2, 2, 2, 44, 43, 3, 2, 2, 2, 45, 5, 3, 2, 2, 2, 46, 47, 7, 4, 2, 2, 47, 54, 7, 75, 2, 2, 48, 49, 7, 5, 2, 2, 49, 55, 5, 28, 15, 2, 50, 51, 7, 6, 2, 2, 51, 55, 5, 28, 15, 2, 52, 53, 7, 7, 2, 2, 53, 55, 7, 75, 2, 2, 54, 48, 3, 2, 2, 2, 54, 50, 3, 2, 2, 2, 54, 52, 3, 2, 2, 2, 54, 55, 3, 2, 2, 2, 55, 87, 3, 2, 2, 2, 56, 87, 7, 8, 2, 2, 57, 59, 7, 9, 2, 2, 58, 60, 5, 18, 10, 2, 59, 58, 3, 2, 2, 2, 59, 60, 3, 2, 2, 2, 60, 87, 3, 2, 2, 2, 61, 62, 5, 30, 16, 2, 62, 65, 7, 75, 2, 2, 63, 64, 7, 10, 2, 2, 64, 66, 5, 18, 10, 2, 65, 63, 3, 2, 2, 2, 65, 66, 3, 2, 2, 2, 66, 87, 3, 2, 2, 2, 67, 68, 5, 8, 5, 2, 68, 69, 7, 10, 2, 2, 69, 71, 3, 2, 2, 2, 70, 67, 3, 2, 2, 2, 71, 74, 3, 2, 2, 2, 72, 70, 3, 2, 2, 2, 72, 73, 3, 2, 2, 2, 73, 75, 3, 2, 2, 2, 74, 72, 3, 2, 2, 2, 75, 87, 5, 18, 10, 2, 76, 77, 5, 16, 9, 2, 77, 78, 9, 2, 2, 2, 78, 79, 7, 10, 2, 2, 79, 80, 5, 16, 9, 2, 80, 87, 3, 2, 2, 2, 81, 87, 9, 3, 2, 2, 82, 84, 7, 24, 2, 2, 83, 85, 5, 18, 10, 2, 84, 83, 3, 2, 2, 2, 84, 85, 3, 2, 2, 2, 85, 87, 3, 2, 2, 2, 86, 46, 3, 2, 2, 2, 86, 56, 3, 2, 2, 2, 86, 57, 3, 2, 2, 2, 86, 61, 3, 2, 2, 2, 86, 72, 3, 2, 2, 2, 86, 76, 3, 2, 2, 2, 86, 81, 3, 2, 2, 2, 86, 82, 3, 2, 2, 2, 87, 7, 3, 2, 2, 2, 88, 93, 5, 16, 9, 2, 89, 90, 7, 25, 2, 2, 90, 92, 5, 16, 9, 2, 91, 89, 3, 2, 2, 2, 92, 95, 3, 2, 2, 2, 93, 91, 3, 2, 2, 2, 93, 94, 3, 2, 2, 2, 94, 9, 3, 2, 2, 2, 95, 93, 3, 2, 2, 2, 96, 97, 7, 26, 2, 2, 97, 98, 5, 16, 9, 2, 98, 99, 7, 27, 2, 2, 99, 107, 5, 14, 8, 2, 100, 101, 7, 28, 2, 2, 101, 102, 5, 16, 9, 2, 102, 103, 7, 27, 2, 2, 103, 104, 5, 14, 8, 2, 104, 106, 3, 2, 2, 2, 105, 100, 3, 2, 2, 2, 106, 109, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 107, 108, 3, 2, 2, 2, 108, 113, 3, 2, 2, 2, 109, 107, 3, 2, 2, 2, 110, 111, 7, 29, 2, 2, 111, 112, 7, 27, 2, 2, 112, 114, 5, 14, 8, 2, 113, 110, 3, 2, 2, 2, 113, 114, 3, 2, 2, 2, 114, 161, 3, 2, 2, 2, 115, 116, 7, 30, 2, 2, 116, 117, 5, 16, 9, 2, 117, 118, 7, 27, 2, 2, 118, 119, 5, 14, 8, 2, 119, 161, 3, 2, 2, 2, 120, 121, 7, 31, 2, 2, 121, 122, 5, 16, 9, 2, 122, 123, 7, 27, 2, 2, 123, 124, 5, 14, 8, 2, 124, 161, 3, 2, 2, 2, 125, 126, 7, 32, 2, 2, 126, 127, 5, 18, 10, 2, 127, 128, 7, 33, 2, 2, 128, 131, 5, 18, 10, 2, 129, 130, 7, 34, 2, 2, 130, 132, 5, 18, 10, 2, 131, 129, 3, 2, 2, 2, 131, 132, 3, 2, 2, 2, 132, 133, 3, 2, 2, 2, 133, 134, 7, 27, 2, 2, 134, 135, 5, 14, 8, 2, 135, 161, 3, 2, 2, 2, 136, 137, 7, 35, 2, 2, 137, 138, 7, 75, 2, 2, 138, 144, 7, 36, 2, 2, 139, 140, 5, 12, 7, 2, 140, 141, 7, 25, 2, 2, 141, 143, 3, 2, 2, 2, 142, 139, 3, 2, 2, 2, 143, 146, 3, 2, 2, 2, 144, 142, 3, 2, 2, 2, 144, 145, 3, 2, 2, 2, 145, 148, 3, 2, 2, 2, 146, 144, 3, 2, 2, 2, 147, 149, 5, 12, 7, 2, 148, 147, 3, 2, 2, 2, 148, 149, 3, 2, 2, 2, 149, 150, 3, 2, 2, 2, 150, 152, 7, 37, 2, 2, 151, 153, 5, 30, 16, 2, 152, 151, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 158, 3, 2, 2, 2, 154, 155, 7, 38, 2, 2, 155, 159, 5, 14, 8, 2, 156, 157, 7, 39, 2, 2, 157, 159, 7, 3, 2, 2, 158, 154, 3, 2, 2, 2, 158, 156, 3, 2, 2, 2, 159, 161, 3, 2, 2, 2, 160, 96, 3, 2, 2, 2, 160, 115, 3, 2, 2, 2, 160, 120, 3, 2, 2, 2, 160, 125, 3, 2, 2, 2, 160, 136, 3, 2, 2, 2, 161, 11, 3, 2, 2, 2, 162, 163, 5, 30, 16, 2, 163, 166, 7, 75, 2, 2, 164, 165, 7, 40, 2, 2, 165, 167, 5, 16, 9, 2, 166, 164, 3, 2, 2, 2, 166, 167, 3, 2, 2, 2, 167, 13, 3, 2, 2, 2, 168, 170, 7, 41, 2, 2, 169, 171, 5, 4, 3, 2, 170, 169, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 170, 3, 2, 2, 2, 172, 173, 3, 2, 2, 2, 173, 174, 3, 2, 2, 2, 174, 175, 7, 42, 2, 2, 175, 15, 3, 2, 2, 2, 176, 177, 8, 9, 1, 2, 177, 222, 5, 26, 14, 2, 178, 179, 7, 36, 2, 2, 179, 180, 5, 18, 10, 2, 180, 181, 7, 37, 2, 2, 181, 222, 3, 2, 2, 2, 182, 188, 7, 43, 2, 2, 183, 184, 5, 16, 9, 2, 184, 185, 7, 25, 2, 2, 185, 187, 3, 2, 2, 2, 186, 183, 3, 2, 2, 2, 187, 190, 3, 2, 2, 2, 188, 186, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 192, 3, 2, 2, 2, 190, 188, 3, 2, 2, 2, 191, 193, 5, 16, 9, 2, 192, 191, 3, 2, 2, 2, 192, 193, 3, 2, 2, 2, 193, 194, 3, 2, 2, 2, 194, 222, 7, 44, 2, 2, 195, 196, 7, 43, 2, 2, 196, 198, 5, 16, 9, 2, 197, 199, 5, 22, 12, 2, 198, 197, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 198, 3, 2, 2, 2, 200, 201, 3, 2, 2, 2, 201, 202, 3, 2, 2, 2, 202, 203, 7, 44, 2, 2, 203, 222, 3, 2, 2, 2, 204, 205, 9, 4, 2, 2, 205, 222, 5, 16, 9, 17, 206, 207, 7, 57, 2, 2, 207, 222, 5, 16, 9, 7, 208, 213, 7, 60, 2, 2, 209, 210, 7, 75, 2, 2, 210, 212, 7, 25, 2, 2, 211, 209, 3, 2, 2, 2, 212, 215, 3, 2, 2, 2, 213, 211, 3, 2, 2, 2, 213, 214, 3, 2, 2, 2, 214, 217, 3, 2, 2, 2, 215, 213, 3, 2, 2, 2, 216, 218, 7, 75, 2, 2, 217, 216, 3, 2, 2, 2, 217, 218, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 220, 7, 61, 2, 2, 220, 222, 5, 16, 9, 3, 221, 176, 3, 2, 2, 2, 221, 178, 3, 2, 2, 2, 221, 182, 3, 2, 2, 2, 221, 195, 3, 2, 2, 2, 221, 204, 3, 2, 2, 2, 221, 206, 3, 2, 2, 2, 221, 208, 3, 2, 2, 2, 222, 309, 3, 2, 2, 2, 223, 224, 12, 18, 2, 2, 224, 225, 7, 11, 2, 2, 225, 308, 5, 16, 9, 18, 226, 227, 12, 16, 2, 2, 227, 228, 9, 5, 2, 2, 228, 308, 5, 16, 9, 17, 229, 230, 12, 15, 2, 2, 230, 231, 9, 6, 2, 2, 231, 308, 5, 16, 9, 16, 232, 233, 12, 14, 2, 2, 233, 234, 9, 7, 2, 2, 234, 308, 5, 16, 9, 15, 235, 236, 12, 13, 2, 2, 236, 237, 7, 19, 2, 2, 237, 308, 5, 16, 9, 14, 238, 239, 12, 12, 2, 2, 239, 240, 7, 20, 2, 2, 240, 308, 5, 16, 9, 13, 241, 242, 12, 11, 2, 2, 242, 243, 7, 21, 2, 2, 243, 308, 5, 16, 9, 12, 244, 245, 12, 10, 2, 2, 245, 246, 9, 8, 2, 2, 246, 308, 5, 16, 9, 11, 247, 248, 12, 8, 2, 2, 248, 249, 9, 9, 2, 2, 249, 308, 5, 16, 9, 8, 250, 251, 12, 6, 2, 2, 251, 252, 7, 58, 2, 2, 252, 308, 5, 16, 9, 6, 253, 254, 12, 5, 2, 2, 254, 255, 7, 59, 2, 2, 255, 308, 5, 16, 9, 5, 256, 257, 12, 4, 2, 2, 257, 258, 7, 45, 2, 2, 258, 259, 5, 16, 9, 2, 259, 260, 7, 40, 2, 2, 260, 261, 5, 16, 9, 4, 261, 308, 3, 2, 2, 2, 262, 263, 12, 23, 2, 2, 263, 264, 7, 43, 2, 2, 264, 265, 5, 18, 10, 2, 265, 266, 7, 44, 2, 2, 266, 308, 3, 2, 2, 2, 267, 268, 12, 22, 2, 2, 268, 270, 7, 43, 2, 2, 269, 271, 5, 16, 9, 2, 270, 269, 3, 2, 2, 2, 270, 271, 3, 2, 2, 2, 271, 272, 3, 2, 2, 2, 272, 274, 7, 40, 2, 2, 273, 275, 5, 16, 9, 2, 274, 273, 3, 2, 2, 2, 274, 275, 3, 2, 2, 2, 275, 280, 3, 2, 2, 2, 276, 278, 7, 40, 2, 2, 277, 279, 5, 16, 9, 2, 278, 277, 3, 2, 2, 2, 278, 279, 3, 2, 2, 2, 279, 281, 3, 2, 2, 2, 280, 276, 3, 2, 2, 2, 280, 281, 3, 2, 2, 2, 281, 282, 3, 2, 2, 2, 282, 308, 7, 44, 2, 2, 283, 285, 12, 21, 2, 2, 284, 286, 7, 45, 2, 2, 285, 284, 3, 2, 2, 2, 285, 286, 3, 2, 2, 2, 286, 287, 3, 2, 2, 2, 287, 288, 7, 46, 2, 2, 288, 308, 7, 75, 2, 2, 289, 290, 12, 20, 2, 2, 290, 296, 7, 36, 2, 2, 291, 292, 5, 24, 13, 2, 292, 293, 7, 25, 2, 2, 293, 295, 3, 2, 2, 2, 294, 291, 3, 2, 2, 2, 295, 298, 3, 2, 2, 2, 296, 294, 3, 2, 2, 2, 296, 297, 3, 2, 2, 2, 297, 300, 3, 2, 2, 2, 298, 296, 3, 2, 2, 2, 299, 301, 5, 24, 13, 2, 300, 299, 3, 2, 2, 2, 300, 301, 3, 2, 2, 2, 301, 302, 3, 2, 2, 2, 302, 308, 7, 37, 2, 2, 303, 304, 12, 19, 2, 2, 304, 308, 7, 47, 2, 2, 305, 306, 12, 9, 2, 2, 306, 308, 7, 50, 2, 2, 307, 223, 3, 2, 2, 2, 307, 226, 3, 2, 2, 2, 307, 229, 3, 2, 2, 2, 307, 232, 3, 2, 2, 2, 307, 235, 3, 2, 2, 2, 307, 238, 3, 2, 2, 2, 307, 241, 3, 2, 2, 2, 307, 244, 3, 2, 2, 2, 307, 247, 3, 2, 2, 2, 307, 250, 3, 2, 2, 2, 307, 253, 3, 2, 2, 2, 307, 256, 3, 2, 2, 2, 307, 262, 3, 2, 2, 2, 307, 267, 3, 2, 2, 2, 307, 283, 3, 2, 2, 2, 307, 289, 3, 2, 2, 2, 307, 303, 3, 2, 2, 2, 307, 305, 3, 2, 2, 2, 308, 311, 3, 2, 2, 2, 309, 307, 3, 2, 2, 2, 309, 310, 3, 2, 2, 2, 310, 17, 3, 2, 2, 2, 311, 309, 3, 2, 2, 2, 312, 313, 5, 16, 9, 2, 313, 314, 7, 25, 2, 2, 314, 316, 3, 2, 2, 2, 315, 312, 3, 2, 2, 2, 316, 319, 3, 2, 2, 2, 317, 315, 3, 2, 2, 2, 317, 318, 3, 2, 2, 2, 318, 320, 3, 2, 2, 2, 319, 317, 3, 2, 2, 2, 320, 321, 5, 16, 9, 2, 321, 19, 3, 2, 2, 2, 322, 323, 5, 18, 10, 2, 323, 324, 7, 2, 2, 3, 324, 21, 3, 2, 2, 2, 325, 326, 7, 32, 2, 2, 326, 327, 5, 18, 10, 2, 327, 328, 7, 33, 2, 2, 328, 331, 5, 18, 10, 2, 329, 330, 7, 34, 2, 2, 330, 332, 5, 18, 10, 2, 331, 329, 3, 2, 2, 2, 331, 332, 3, 2, 2, 2, 332, 336, 3, 2, 2, 2, 333, 334, 7, 26, 2, 2, 334, 336, 5, 16, 9, 2, 335, 325, 3, 2, 2, 2, 335, 333, 3, 2, 2, 2, 336, 23, 3, 2, 2, 2, 337, 338, 7, 75, 2, 2, 338, 340, 7, 10, 2, 2, 339, 337, 3, 2, 2, 2, 339, 340, 3, 2, 2, 2, 340, 341, 3, 2, 2, 2, 341, 342, 5, 16, 9, 2, 342, 25, 3, 2, 2, 2, 343, 351, 7, 71, 2, 2, 344, 351, 7, 72, 2, 2, 345, 351, 9, 10, 2, 2, 346, 351, 7, 73, 2, 2, 347, 351, 7, 74, 2, 2, 348, 351, 7, 64, 2, 2, 349, 351, 7, 75, 2, 2, 350, 343, 3, 2, 2, 2, 350, 344, 3, 2, 2, 2, 350, 345, 3, 2, 2, 2, 350, 346, 3, 2, 2, 2, 350, 347, 3, 2, 2, 2, 350, 348, 3, 2, 2, 2, 350, 349, 3, 2, 2, 2, 351, 27, 3, 2, 2, 2, 352, 353, 7, 75, 2, 2, 353, 355, 7, 25, 2, 2, 354, 352, 3, 2, 2, 2, 355, 358, 3, 2, 2, 2, 356, 354, 3, 2, 2, 2, 356, 357, 3, 2, 2, 2, 357, 359, 3, 2, 2, 2, 358, 356, 3, 2, 2, 2, 359, 360, 7, 75, 2, 2, 360, 29, 3, 2, 2, 2, 361, 362, 8, 16, 1, 2, 362, 374, 9, 11, 2, 2, 363, 364, 7, 36, 2, 2, 364, 365, 5, 30, 16, 2, 365, 366, 7, 37, 2, 2, 366, 374, 3, 2, 2, 2, 367, 368, 7, 43, 2, 2, 368, 369, 5, 30, 16, 2, 369, 370, 7, 44, 2, 2, 370, 374, 3, 2, 2, 2, 371, 372, 7, 61, 2, 2, 372, 374, 5, 30, 16, 3, 373, 361, 3, 2, 2, 2, 373, 363, 3, 2, 2, 2, 373, 367, 3, 2, 2, 2, 373, 371, 3, 2, 2, 2, 374, 385, 3, 2, 2, 2, 375, 376, 12, 5, 2, 2, 376, 377, 7, 12, 2, 2, 377, 384, 5, 30, 16, 5, 378, 379, 12, 4, 2, 2, 379, 380, 7, 61, 2, 2, 380, 384, 5, 30, 16, 4, 381, 382, 12, 6, 2, 2, 382, 384, 7, 45, 2, 2, 383, 375, 3, 2, 2, 2, 383, 378, 3, 2, 2, 2, 383, 381, 3, 2, 2, 2, 384, 387, 3, 2, 2, 2, 385, 383, 3, 2, 2, 2, 385, 386, 3, 2, 2, 2, 386, 31, 3, 2, 2, 2, 387, 385, 3, 2, 2, 2, 45, 35, 44, 54, 59, 65, 72, 84, 86, 93, 107, 113, 131, 144, 148, 152, 158, 160, 166, 172, 188, 192, 200, 213, 217, 221, 270, 274, 278, 280, 285, 296, 300, 307, 309, 317, 331, 335, 339, 350, 356, 373, 383, 385] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 80, 392, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 3, 2, 7, 2, 34, 10, 2, 12, 2, 14, 2, 37, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 45, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 55, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 60, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 66, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 71, 10, 4, 12, 4, 14, 4, 74, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 85, 10, 4, 5, 4, 87, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 92, 10, 5, 12, 5, 14, 5, 95, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 106, 10, 6, 12, 6, 14, 6, 109, 11, 6, 3, 6, 3, 6, 3, 6, 5, 6, 114, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 132, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 143, 10, 6, 12, 6, 14, 6, 146, 11, 6, 3, 6, 5, 6, 149, 10, 6, 3, 6, 3, 6, 5, 6, 153, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 159, 10, 6, 5, 6, 161, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 167, 10, 7, 3, 8, 3, 8, 6, 8, 171, 10, 8, 13, 8, 14, 8, 172, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 187, 10, 9, 12, 9, 14, 9, 190, 11, 9, 3, 9, 5, 9, 193, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 6, 9, 199, 10, 9, 13, 9, 14, 9, 200, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 212, 10, 9, 12, 9, 14, 9, 215, 11, 9, 3, 9, 5, 9, 218, 10, 9, 3, 9, 3, 9, 5, 9, 222, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 274, 10, 9, 3, 9, 3, 9, 5, 9, 278, 10, 9, 3, 9, 3, 9, 5, 9, 282, 10, 9, 5, 9, 284, 10, 9, 3, 9, 3, 9, 3, 9, 5, 9, 289, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 298, 10, 9, 12, 9, 14, 9, 301, 11, 9, 3, 9, 5, 9, 304, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 311, 10, 9, 12, 9, 14, 9, 314, 11, 9, 3, 10, 3, 10, 3, 10, 7, 10, 319, 10, 10, 12, 10, 14, 10, 322, 11, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 335, 10, 12, 3, 12, 3, 12, 5, 12, 339, 10, 12, 3, 13, 3, 13, 5, 13, 343, 10, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 354, 10, 14, 3, 15, 3, 15, 7, 15, 358, 10, 15, 12, 15, 14, 15, 361, 11, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 377, 10, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 7, 16, 387, 10, 16, 12, 16, 14, 16, 390, 11, 16, 3, 16, 2, 4, 16, 30, 17, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 2, 13, 3, 2, 11, 21, 3, 2, 22, 23, 4, 2, 15, 16, 48, 48, 3, 2, 12, 14, 3, 2, 15, 16, 3, 2, 17, 18, 3, 2, 49, 50, 3, 2, 51, 52, 3, 2, 53, 58, 3, 2, 64, 65, 3, 2, 67, 72, 2, 460, 2, 35, 3, 2, 2, 2, 4, 44, 3, 2, 2, 2, 6, 86, 3, 2, 2, 2, 8, 88, 3, 2, 2, 2, 10, 160, 3, 2, 2, 2, 12, 162, 3, 2, 2, 2, 14, 168, 3, 2, 2, 2, 16, 221, 3, 2, 2, 2, 18, 320, 3, 2, 2, 2, 20, 325, 3, 2, 2, 2, 22, 338, 3, 2, 2, 2, 24, 342, 3, 2, 2, 2, 26, 353, 3, 2, 2, 2, 28, 359, 3, 2, 2, 2, 30, 376, 3, 2, 2, 2, 32, 34, 5, 4, 3, 2, 33, 32, 3, 2, 2, 2, 34, 37, 3, 2, 2, 2, 35, 33, 3, 2, 2, 2, 35, 36, 3, 2, 2, 2, 36, 38, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 38, 39, 7, 2, 2, 3, 39, 3, 3, 2, 2, 2, 40, 41, 5, 6, 4, 2, 41, 42, 7, 3, 2, 2, 42, 45, 3, 2, 2, 2, 43, 45, 5, 10, 6, 2, 44, 40, 3, 2, 2, 2, 44, 43, 3, 2, 2, 2, 45, 5, 3, 2, 2, 2, 46, 47, 7, 4, 2, 2, 47, 54, 7, 77, 2, 2, 48, 49, 7, 5, 2, 2, 49, 55, 5, 28, 15, 2, 50, 51, 7, 6, 2, 2, 51, 55, 5, 28, 15, 2, 52, 53, 7, 7, 2, 2, 53, 55, 7, 77, 2, 2, 54, 48, 3, 2, 2, 2, 54, 50, 3, 2, 2, 2, 54, 52, 3, 2, 2, 2, 54, 55, 3, 2, 2, 2, 55, 87, 3, 2, 2, 2, 56, 87, 7, 8, 2, 2, 57, 59, 7, 9, 2, 2, 58, 60, 5, 18, 10, 2, 59, 58, 3, 2, 2, 2, 59, 60, 3, 2, 2, 2, 60, 87, 3, 2, 2, 2, 61, 62, 5, 30, 16, 2, 62, 65, 7, 77, 2, 2, 63, 64, 7, 10, 2, 2, 64, 66, 5, 18, 10, 2, 65, 63, 3, 2, 2, 2, 65, 66, 3, 2, 2, 2, 66, 87, 3, 2, 2, 2, 67, 68, 5, 8, 5, 2, 68, 69, 7, 10, 2, 2, 69, 71, 3, 2, 2, 2, 70, 67, 3, 2, 2, 2, 71, 74, 3, 2, 2, 2, 72, 70, 3, 2, 2, 2, 72, 73, 3, 2, 2, 2, 73, 75, 3, 2, 2, 2, 74, 72, 3, 2, 2, 2, 75, 87, 5, 18, 10, 2, 76, 77, 5, 16, 9, 2, 77, 78, 9, 2, 2, 2, 78, 79, 7, 10, 2, 2, 79, 80, 5, 16, 9, 2, 80, 87, 3, 2, 2, 2, 81, 87, 9, 3, 2, 2, 82, 84, 7, 24, 2, 2, 83, 85, 5, 18, 10, 2, 84, 83, 3, 2, 2, 2, 84, 85, 3, 2, 2, 2, 85, 87, 3, 2, 2, 2, 86, 46, 3, 2, 2, 2, 86, 56, 3, 2, 2, 2, 86, 57, 3, 2, 2, 2, 86, 61, 3, 2, 2, 2, 86, 72, 3, 2, 2, 2, 86, 76, 3, 2, 2, 2, 86, 81, 3, 2, 2, 2, 86, 82, 3, 2, 2, 2, 87, 7, 3, 2, 2, 2, 88, 93, 5, 16, 9, 2, 89, 90, 7, 25, 2, 2, 90, 92, 5, 16, 9, 2, 91, 89, 3, 2, 2, 2, 92, 95, 3, 2, 2, 2, 93, 91, 3, 2, 2, 2, 93, 94, 3, 2, 2, 2, 94, 9, 3, 2, 2, 2, 95, 93, 3, 2, 2, 2, 96, 97, 7, 26, 2, 2, 97, 98, 5, 16, 9, 2, 98, 99, 7, 27, 2, 2, 99, 107, 5, 14, 8, 2, 100, 101, 7, 28, 2, 2, 101, 102, 5, 16, 9, 2, 102, 103, 7, 27, 2, 2, 103, 104, 5, 14, 8, 2, 104, 106, 3, 2, 2, 2, 105, 100, 3, 2, 2, 2, 106, 109, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 107, 108, 3, 2, 2, 2, 108, 113, 3, 2, 2, 2, 109, 107, 3, 2, 2, 2, 110, 111, 7, 29, 2, 2, 111, 112, 7, 27, 2, 2, 112, 114, 5, 14, 8, 2, 113, 110, 3, 2, 2, 2, 113, 114, 3, 2, 2, 2, 114, 161, 3, 2, 2, 2, 115, 116, 7, 30, 2, 2, 116, 117, 5, 16, 9, 2, 117, 118, 7, 27, 2, 2, 118, 119, 5, 14, 8, 2, 119, 161, 3, 2, 2, 2, 120, 121, 7, 31, 2, 2, 121, 122, 5, 16, 9, 2, 122, 123, 7, 27, 2, 2, 123, 124, 5, 14, 8, 2, 124, 161, 3, 2, 2, 2, 125, 126, 7, 32, 2, 2, 126, 127, 5, 18, 10, 2, 127, 128, 7, 33, 2, 2, 128, 131, 5, 18, 10, 2, 129, 130, 7, 34, 2, 2, 130, 132, 5, 18, 10, 2, 131, 129, 3, 2, 2, 2, 131, 132, 3, 2, 2, 2, 132, 133, 3, 2, 2, 2, 133, 134, 7, 27, 2, 2, 134, 135, 5, 14, 8, 2, 135, 161, 3, 2, 2, 2, 136, 137, 7, 35, 2, 2, 137, 138, 7, 77, 2, 2, 138, 144, 7, 36, 2, 2, 139, 140, 5, 12, 7, 2, 140, 141, 7, 25, 2, 2, 141, 143, 3, 2, 2, 2, 142, 139, 3, 2, 2, 2, 143, 146, 3, 2, 2, 2, 144, 142, 3, 2, 2, 2, 144, 145, 3, 2, 2, 2, 145, 148, 3, 2, 2, 2, 146, 144, 3, 2, 2, 2, 147, 149, 5, 12, 7, 2, 148, 147, 3, 2, 2, 2, 148, 149, 3, 2, 2, 2, 149, 150, 3, 2, 2, 2, 150, 152, 7, 37, 2, 2, 151, 153, 5, 30, 16, 2, 152, 151, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 158, 3, 2, 2, 2, 154, 155, 7, 38, 2, 2, 155, 159, 5, 14, 8, 2, 156, 157, 7, 39, 2, 2, 157, 159, 7, 3, 2, 2, 158, 154, 3, 2, 2, 2, 158, 156, 3, 2, 2, 2, 159, 161, 3, 2, 2, 2, 160, 96, 3, 2, 2, 2, 160, 115, 3, 2, 2, 2, 160, 120, 3, 2, 2, 2, 160, 125, 3, 2, 2, 2, 160, 136, 3, 2, 2, 2, 161, 11, 3, 2, 2, 2, 162, 163, 5, 30, 16, 2, 163, 166, 7, 77, 2, 2, 164, 165, 7, 40, 2, 2, 165, 167, 5, 16, 9, 2, 166, 164, 3, 2, 2, 2, 166, 167, 3, 2, 2, 2, 167, 13, 3, 2, 2, 2, 168, 170, 7, 41, 2, 2, 169, 171, 5, 4, 3, 2, 170, 169, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 170, 3, 2, 2, 2, 172, 173, 3, 2, 2, 2, 173, 174, 3, 2, 2, 2, 174, 175, 7, 42, 2, 2, 175, 15, 3, 2, 2, 2, 176, 177, 8, 9, 1, 2, 177, 222, 5, 26, 14, 2, 178, 179, 7, 36, 2, 2, 179, 180, 5, 18, 10, 2, 180, 181, 7, 37, 2, 2, 181, 222, 3, 2, 2, 2, 182, 188, 7, 43, 2, 2, 183, 184, 5, 16, 9, 2, 184, 185, 7, 25, 2, 2, 185, 187, 3, 2, 2, 2, 186, 183, 3, 2, 2, 2, 187, 190, 3, 2, 2, 2, 188, 186, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 192, 3, 2, 2, 2, 190, 188, 3, 2, 2, 2, 191, 193, 5, 16, 9, 2, 192, 191, 3, 2, 2, 2, 192, 193, 3, 2, 2, 2, 193, 194, 3, 2, 2, 2, 194, 222, 7, 44, 2, 2, 195, 196, 7, 43, 2, 2, 196, 198, 5, 16, 9, 2, 197, 199, 5, 22, 12, 2, 198, 197, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 198, 3, 2, 2, 2, 200, 201, 3, 2, 2, 2, 201, 202, 3, 2, 2, 2, 202, 203, 7, 44, 2, 2, 203, 222, 3, 2, 2, 2, 204, 205, 9, 4, 2, 2, 205, 222, 5, 16, 9, 18, 206, 207, 7, 59, 2, 2, 207, 222, 5, 16, 9, 7, 208, 213, 7, 62, 2, 2, 209, 210, 7, 77, 2, 2, 210, 212, 7, 25, 2, 2, 211, 209, 3, 2, 2, 2, 212, 215, 3, 2, 2, 2, 213, 211, 3, 2, 2, 2, 213, 214, 3, 2, 2, 2, 214, 217, 3, 2, 2, 2, 215, 213, 3, 2, 2, 2, 216, 218, 7, 77, 2, 2, 217, 216, 3, 2, 2, 2, 217, 218, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 220, 7, 63, 2, 2, 220, 222, 5, 16, 9, 3, 221, 176, 3, 2, 2, 2, 221, 178, 3, 2, 2, 2, 221, 182, 3, 2, 2, 2, 221, 195, 3, 2, 2, 2, 221, 204, 3, 2, 2, 2, 221, 206, 3, 2, 2, 2, 221, 208, 3, 2, 2, 2, 222, 312, 3, 2, 2, 2, 223, 224, 12, 19, 2, 2, 224, 225, 7, 11, 2, 2, 225, 311, 5, 16, 9, 19, 226, 227, 12, 17, 2, 2, 227, 228, 9, 5, 2, 2, 228, 311, 5, 16, 9, 18, 229, 230, 12, 16, 2, 2, 230, 231, 9, 6, 2, 2, 231, 311, 5, 16, 9, 17, 232, 233, 12, 15, 2, 2, 233, 234, 9, 7, 2, 2, 234, 311, 5, 16, 9, 16, 235, 236, 12, 14, 2, 2, 236, 237, 7, 19, 2, 2, 237, 311, 5, 16, 9, 15, 238, 239, 12, 13, 2, 2, 239, 240, 7, 20, 2, 2, 240, 311, 5, 16, 9, 14, 241, 242, 12, 12, 2, 2, 242, 243, 7, 21, 2, 2, 243, 311, 5, 16, 9, 13, 244, 245, 12, 11, 2, 2, 245, 246, 9, 8, 2, 2, 246, 311, 5, 16, 9, 12, 247, 248, 12, 9, 2, 2, 248, 249, 9, 9, 2, 2, 249, 311, 5, 16, 9, 10, 250, 251, 12, 8, 2, 2, 251, 252, 9, 10, 2, 2, 252, 311, 5, 16, 9, 8, 253, 254, 12, 6, 2, 2, 254, 255, 7, 60, 2, 2, 255, 311, 5, 16, 9, 6, 256, 257, 12, 5, 2, 2, 257, 258, 7, 61, 2, 2, 258, 311, 5, 16, 9, 5, 259, 260, 12, 4, 2, 2, 260, 261, 7, 45, 2, 2, 261, 262, 5, 16, 9, 2, 262, 263, 7, 40, 2, 2, 263, 264, 5, 16, 9, 4, 264, 311, 3, 2, 2, 2, 265, 266, 12, 24, 2, 2, 266, 267, 7, 43, 2, 2, 267, 268, 5, 18, 10, 2, 268, 269, 7, 44, 2, 2, 269, 311, 3, 2, 2, 2, 270, 271, 12, 23, 2, 2, 271, 273, 7, 43, 2, 2, 272, 274, 5, 16, 9, 2, 273, 272, 3, 2, 2, 2, 273, 274, 3, 2, 2, 2, 274, 275, 3, 2, 2, 2, 275, 277, 7, 40, 2, 2, 276, 278, 5, 16, 9, 2, 277, 276, 3, 2, 2, 2, 277, 278, 3, 2, 2, 2, 278, 283, 3, 2, 2, 2, 279, 281, 7, 40, 2, 2, 280, 282, 5, 16, 9, 2, 281, 280, 3, 2, 2, 2, 281, 282, 3, 2, 2, 2, 282, 284, 3, 2, 2, 2, 283, 279, 3, 2, 2, 2, 283, 284, 3, 2, 2, 2, 284, 285, 3, 2, 2, 2, 285, 311, 7, 44, 2, 2, 286, 288, 12, 22, 2, 2, 287, 289, 7, 45, 2, 2, 288, 287, 3, 2, 2, 2, 288, 289, 3, 2, 2, 2, 289, 290, 3, 2, 2, 2, 290, 291, 7, 46, 2, 2, 291, 311, 7, 77, 2, 2, 292, 293, 12, 21, 2, 2, 293, 299, 7, 36, 2, 2, 294, 295, 5, 24, 13, 2, 295, 296, 7, 25, 2, 2, 296, 298, 3, 2, 2, 2, 297, 294, 3, 2, 2, 2, 298, 301, 3, 2, 2, 2, 299, 297, 3, 2, 2, 2, 299, 300, 3, 2, 2, 2, 300, 303, 3, 2, 2, 2, 301, 299, 3, 2, 2, 2, 302, 304, 5, 24, 13, 2, 303, 302, 3, 2, 2, 2, 303, 304, 3, 2, 2, 2, 304, 305, 3, 2, 2, 2, 305, 311, 7, 37, 2, 2, 306, 307, 12, 20, 2, 2, 307, 311, 7, 47, 2, 2, 308, 309, 12, 10, 2, 2, 309, 311, 7, 50, 2, 2, 310, 223, 3, 2, 2, 2, 310, 226, 3, 2, 2, 2, 310, 229, 3, 2, 2, 2, 310, 232, 3, 2, 2, 2, 310, 235, 3, 2, 2, 2, 310, 238, 3, 2, 2, 2, 310, 241, 3, 2, 2, 2, 310, 244, 3, 2, 2, 2, 310, 247, 3, 2, 2, 2, 310, 250, 3, 2, 2, 2, 310, 253, 3, 2, 2, 2, 310, 256, 3, 2, 2, 2, 310, 259, 3, 2, 2, 2, 310, 265, 3, 2, 2, 2, 310, 270, 3, 2, 2, 2, 310, 286, 3, 2, 2, 2, 310, 292, 3, 2, 2, 2, 310, 306, 3, 2, 2, 2, 310, 308, 3, 2, 2, 2, 311, 314, 3, 2, 2, 2, 312, 310, 3, 2, 2, 2, 312, 313, 3, 2, 2, 2, 313, 17, 3, 2, 2, 2, 314, 312, 3, 2, 2, 2, 315, 316, 5, 16, 9, 2, 316, 317, 7, 25, 2, 2, 317, 319, 3, 2, 2, 2, 318, 315, 3, 2, 2, 2, 319, 322, 3, 2, 2, 2, 320, 318, 3, 2, 2, 2, 320, 321, 3, 2, 2, 2, 321, 323, 3, 2, 2, 2, 322, 320, 3, 2, 2, 2, 323, 324, 5, 16, 9, 2, 324, 19, 3, 2, 2, 2, 325, 326, 5, 18, 10, 2, 326, 327, 7, 2, 2, 3, 327, 21, 3, 2, 2, 2, 328, 329, 7, 32, 2, 2, 329, 330, 5, 18, 10, 2, 330, 331, 7, 33, 2, 2, 331, 334, 5, 18, 10, 2, 332, 333, 7, 34, 2, 2, 333, 335, 5, 18, 10, 2, 334, 332, 3, 2, 2, 2, 334, 335, 3, 2, 2, 2, 335, 339, 3, 2, 2, 2, 336, 337, 7, 26, 2, 2, 337, 339, 5, 16, 9, 2, 338, 328, 3, 2, 2, 2, 338, 336, 3, 2, 2, 2, 339, 23, 3, 2, 2, 2, 340, 341, 7, 77, 2, 2, 341, 343, 7, 10, 2, 2, 342, 340, 3, 2, 2, 2, 342, 343, 3, 2, 2, 2, 343, 344, 3, 2, 2, 2, 344, 345, 5, 16, 9, 2, 345, 25, 3, 2, 2, 2, 346, 354, 7, 73, 2, 2, 347, 354, 7, 74, 2, 2, 348, 354, 9, 11, 2, 2, 349, 354, 7, 75, 2, 2, 350, 354, 7, 76, 2, 2, 351, 354, 7, 66, 2, 2, 352, 354, 7, 77, 2, 2, 353, 346, 3, 2, 2, 2, 353, 347, 3, 2, 2, 2, 353, 348, 3, 2, 2, 2, 353, 349, 3, 2, 2, 2, 353, 350, 3, 2, 2, 2, 353, 351, 3, 2, 2, 2, 353, 352, 3, 2, 2, 2, 354, 27, 3, 2, 2, 2, 355, 356, 7, 77, 2, 2, 356, 358, 7, 25, 2, 2, 357, 355, 3, 2, 2, 2, 358, 361, 3, 2, 2, 2, 359, 357, 3, 2, 2, 2, 359, 360, 3, 2, 2, 2, 360, 362, 3, 2, 2, 2, 361, 359, 3, 2, 2, 2, 362, 363, 7, 77, 2, 2, 363, 29, 3, 2, 2, 2, 364, 365, 8, 16, 1, 2, 365, 377, 9, 12, 2, 2, 366, 367, 7, 36, 2, 2, 367, 368, 5, 30, 16, 2, 368, 369, 7, 37, 2, 2, 369, 377, 3, 2, 2, 2, 370, 371, 7, 43, 2, 2, 371, 372, 5, 30, 16, 2, 372, 373, 7, 44, 2, 2, 373, 377, 3, 2, 2, 2, 374, 375, 7, 63, 2, 2, 375, 377, 5, 30, 16, 3, 376, 364, 3, 2, 2, 2, 376, 366, 3, 2, 2, 2, 376, 370, 3, 2, 2, 2, 376, 374, 3, 2, 2, 2, 377, 388, 3, 2, 2, 2, 378, 379, 12, 5, 2, 2, 379, 380, 7, 12, 2, 2, 380, 387, 5, 30, 16, 5, 381, 382, 12, 4, 2, 2, 382, 383, 7, 63, 2, 2, 383, 387, 5, 30, 16, 4, 384, 385, 12, 6, 2, 2, 385, 387, 7, 45, 2, 2, 386, 378, 3, 2, 2, 2, 386, 381, 3, 2, 2, 2, 386, 384, 3, 2, 2, 2, 387, 390, 3, 2, 2, 2, 388, 386, 3, 2, 2, 2, 388, 389, 3, 2, 2, 2, 389, 31, 3, 2, 2, 2, 390, 388, 3, 2, 2, 2, 45, 35, 44, 54, 59, 65, 72, 84, 86, 93, 107, 113, 131, 144, 148, 152, 158, 160, 166, 172, 188, 192, 200, 213, 217, 221, 273, 277, 281, 283, 288, 299, 303, 310, 312, 320, 334, 338, 342, 353, 359, 376, 386, 388] \ No newline at end of file diff --git a/src/antlr/Pyxell.tokens b/src/antlr/Pyxell.tokens index a3ded172..3bde8676 100644 --- a/src/antlr/Pyxell.tokens +++ b/src/antlr/Pyxell.tokens @@ -66,14 +66,16 @@ T__64=65 T__65=66 T__66=67 T__67=68 -INT=69 -FLOAT=70 -CHAR=71 -STRING=72 -ID=73 -COMMENT=74 -WS=75 -ERR=76 +T__68=69 +T__69=70 +INT=71 +FLOAT=72 +CHAR=73 +STRING=74 +ID=75 +COMMENT=76 +WS=77 +ERR=78 ';'=1 'use'=2 'only'=3 @@ -122,23 +124,25 @@ ERR=76 '~'=46 '..'=47 '...'=48 -'=='=49 -'!='=50 -'<'=51 -'<='=52 -'>'=53 -'>='=54 -'not'=55 -'and'=56 -'or'=57 -'lambda'=58 -'->'=59 -'true'=60 -'false'=61 -'null'=62 -'Void'=63 -'Int'=64 -'Float'=65 -'Bool'=66 -'Char'=67 -'String'=68 +'is'=49 +'isn\'t'=50 +'=='=51 +'!='=52 +'<'=53 +'<='=54 +'>'=55 +'>='=56 +'not'=57 +'and'=58 +'or'=59 +'lambda'=60 +'->'=61 +'true'=62 +'false'=63 +'null'=64 +'Void'=65 +'Int'=66 +'Float'=67 +'Bool'=68 +'Char'=69 +'String'=70 diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp index e4fcb9c2..d50e2266 100644 --- a/src/antlr/PyxellLexer.interp +++ b/src/antlr/PyxellLexer.interp @@ -48,6 +48,8 @@ null '~' '..' '...' +'is' +'isn\'t' '==' '!=' '<' @@ -147,6 +149,8 @@ null null null null +null +null INT FLOAT CHAR @@ -225,6 +229,8 @@ T__64 T__65 T__66 T__67 +T__68 +T__69 INT FLOAT CHAR @@ -245,4 +251,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 78, 498, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 70, 6, 70, 415, 10, 70, 13, 70, 14, 70, 416, 3, 71, 6, 71, 420, 10, 71, 13, 71, 14, 71, 421, 3, 71, 3, 71, 6, 71, 426, 10, 71, 13, 71, 14, 71, 427, 3, 71, 3, 71, 5, 71, 432, 10, 71, 3, 71, 6, 71, 435, 10, 71, 13, 71, 14, 71, 436, 5, 71, 439, 10, 71, 3, 72, 3, 72, 3, 72, 3, 72, 7, 72, 445, 10, 72, 12, 72, 14, 72, 448, 11, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 7, 73, 456, 10, 73, 12, 73, 14, 73, 459, 11, 73, 3, 73, 3, 73, 3, 74, 3, 74, 7, 74, 465, 10, 74, 12, 74, 14, 74, 468, 11, 74, 3, 75, 3, 75, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 5, 77, 477, 10, 77, 3, 78, 3, 78, 3, 78, 3, 78, 7, 78, 483, 10, 78, 12, 78, 14, 78, 486, 11, 78, 3, 78, 3, 78, 3, 79, 6, 79, 491, 10, 79, 13, 79, 14, 79, 492, 3, 79, 3, 79, 3, 80, 3, 80, 2, 2, 81, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 74, 147, 75, 149, 2, 151, 2, 153, 2, 155, 76, 157, 77, 159, 78, 3, 2, 11, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 4, 2, 12, 12, 14, 15, 5, 2, 11, 12, 15, 15, 34, 34, 2, 509, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 3, 161, 3, 2, 2, 2, 5, 163, 3, 2, 2, 2, 7, 167, 3, 2, 2, 2, 9, 172, 3, 2, 2, 2, 11, 179, 3, 2, 2, 2, 13, 182, 3, 2, 2, 2, 15, 187, 3, 2, 2, 2, 17, 193, 3, 2, 2, 2, 19, 195, 3, 2, 2, 2, 21, 197, 3, 2, 2, 2, 23, 199, 3, 2, 2, 2, 25, 201, 3, 2, 2, 2, 27, 203, 3, 2, 2, 2, 29, 205, 3, 2, 2, 2, 31, 207, 3, 2, 2, 2, 33, 210, 3, 2, 2, 2, 35, 213, 3, 2, 2, 2, 37, 215, 3, 2, 2, 2, 39, 217, 3, 2, 2, 2, 41, 219, 3, 2, 2, 2, 43, 225, 3, 2, 2, 2, 45, 234, 3, 2, 2, 2, 47, 241, 3, 2, 2, 2, 49, 243, 3, 2, 2, 2, 51, 246, 3, 2, 2, 2, 53, 249, 3, 2, 2, 2, 55, 254, 3, 2, 2, 2, 57, 259, 3, 2, 2, 2, 59, 265, 3, 2, 2, 2, 61, 271, 3, 2, 2, 2, 63, 275, 3, 2, 2, 2, 65, 278, 3, 2, 2, 2, 67, 283, 3, 2, 2, 2, 69, 288, 3, 2, 2, 2, 71, 290, 3, 2, 2, 2, 73, 292, 3, 2, 2, 2, 75, 296, 3, 2, 2, 2, 77, 303, 3, 2, 2, 2, 79, 305, 3, 2, 2, 2, 81, 307, 3, 2, 2, 2, 83, 309, 3, 2, 2, 2, 85, 311, 3, 2, 2, 2, 87, 313, 3, 2, 2, 2, 89, 315, 3, 2, 2, 2, 91, 317, 3, 2, 2, 2, 93, 319, 3, 2, 2, 2, 95, 321, 3, 2, 2, 2, 97, 324, 3, 2, 2, 2, 99, 328, 3, 2, 2, 2, 101, 331, 3, 2, 2, 2, 103, 334, 3, 2, 2, 2, 105, 336, 3, 2, 2, 2, 107, 339, 3, 2, 2, 2, 109, 341, 3, 2, 2, 2, 111, 344, 3, 2, 2, 2, 113, 348, 3, 2, 2, 2, 115, 352, 3, 2, 2, 2, 117, 355, 3, 2, 2, 2, 119, 362, 3, 2, 2, 2, 121, 365, 3, 2, 2, 2, 123, 370, 3, 2, 2, 2, 125, 376, 3, 2, 2, 2, 127, 381, 3, 2, 2, 2, 129, 386, 3, 2, 2, 2, 131, 390, 3, 2, 2, 2, 133, 396, 3, 2, 2, 2, 135, 401, 3, 2, 2, 2, 137, 406, 3, 2, 2, 2, 139, 414, 3, 2, 2, 2, 141, 419, 3, 2, 2, 2, 143, 440, 3, 2, 2, 2, 145, 451, 3, 2, 2, 2, 147, 462, 3, 2, 2, 2, 149, 469, 3, 2, 2, 2, 151, 471, 3, 2, 2, 2, 153, 476, 3, 2, 2, 2, 155, 478, 3, 2, 2, 2, 157, 490, 3, 2, 2, 2, 159, 496, 3, 2, 2, 2, 161, 162, 7, 61, 2, 2, 162, 4, 3, 2, 2, 2, 163, 164, 7, 119, 2, 2, 164, 165, 7, 117, 2, 2, 165, 166, 7, 103, 2, 2, 166, 6, 3, 2, 2, 2, 167, 168, 7, 113, 2, 2, 168, 169, 7, 112, 2, 2, 169, 170, 7, 110, 2, 2, 170, 171, 7, 123, 2, 2, 171, 8, 3, 2, 2, 2, 172, 173, 7, 106, 2, 2, 173, 174, 7, 107, 2, 2, 174, 175, 7, 102, 2, 2, 175, 176, 7, 107, 2, 2, 176, 177, 7, 112, 2, 2, 177, 178, 7, 105, 2, 2, 178, 10, 3, 2, 2, 2, 179, 180, 7, 99, 2, 2, 180, 181, 7, 117, 2, 2, 181, 12, 3, 2, 2, 2, 182, 183, 7, 117, 2, 2, 183, 184, 7, 109, 2, 2, 184, 185, 7, 107, 2, 2, 185, 186, 7, 114, 2, 2, 186, 14, 3, 2, 2, 2, 187, 188, 7, 114, 2, 2, 188, 189, 7, 116, 2, 2, 189, 190, 7, 107, 2, 2, 190, 191, 7, 112, 2, 2, 191, 192, 7, 118, 2, 2, 192, 16, 3, 2, 2, 2, 193, 194, 7, 63, 2, 2, 194, 18, 3, 2, 2, 2, 195, 196, 7, 96, 2, 2, 196, 20, 3, 2, 2, 2, 197, 198, 7, 44, 2, 2, 198, 22, 3, 2, 2, 2, 199, 200, 7, 49, 2, 2, 200, 24, 3, 2, 2, 2, 201, 202, 7, 39, 2, 2, 202, 26, 3, 2, 2, 2, 203, 204, 7, 45, 2, 2, 204, 28, 3, 2, 2, 2, 205, 206, 7, 47, 2, 2, 206, 30, 3, 2, 2, 2, 207, 208, 7, 62, 2, 2, 208, 209, 7, 62, 2, 2, 209, 32, 3, 2, 2, 2, 210, 211, 7, 64, 2, 2, 211, 212, 7, 64, 2, 2, 212, 34, 3, 2, 2, 2, 213, 214, 7, 40, 2, 2, 214, 36, 3, 2, 2, 2, 215, 216, 7, 38, 2, 2, 216, 38, 3, 2, 2, 2, 217, 218, 7, 126, 2, 2, 218, 40, 3, 2, 2, 2, 219, 220, 7, 100, 2, 2, 220, 221, 7, 116, 2, 2, 221, 222, 7, 103, 2, 2, 222, 223, 7, 99, 2, 2, 223, 224, 7, 109, 2, 2, 224, 42, 3, 2, 2, 2, 225, 226, 7, 101, 2, 2, 226, 227, 7, 113, 2, 2, 227, 228, 7, 112, 2, 2, 228, 229, 7, 118, 2, 2, 229, 230, 7, 107, 2, 2, 230, 231, 7, 112, 2, 2, 231, 232, 7, 119, 2, 2, 232, 233, 7, 103, 2, 2, 233, 44, 3, 2, 2, 2, 234, 235, 7, 116, 2, 2, 235, 236, 7, 103, 2, 2, 236, 237, 7, 118, 2, 2, 237, 238, 7, 119, 2, 2, 238, 239, 7, 116, 2, 2, 239, 240, 7, 112, 2, 2, 240, 46, 3, 2, 2, 2, 241, 242, 7, 46, 2, 2, 242, 48, 3, 2, 2, 2, 243, 244, 7, 107, 2, 2, 244, 245, 7, 104, 2, 2, 245, 50, 3, 2, 2, 2, 246, 247, 7, 102, 2, 2, 247, 248, 7, 113, 2, 2, 248, 52, 3, 2, 2, 2, 249, 250, 7, 103, 2, 2, 250, 251, 7, 110, 2, 2, 251, 252, 7, 107, 2, 2, 252, 253, 7, 104, 2, 2, 253, 54, 3, 2, 2, 2, 254, 255, 7, 103, 2, 2, 255, 256, 7, 110, 2, 2, 256, 257, 7, 117, 2, 2, 257, 258, 7, 103, 2, 2, 258, 56, 3, 2, 2, 2, 259, 260, 7, 121, 2, 2, 260, 261, 7, 106, 2, 2, 261, 262, 7, 107, 2, 2, 262, 263, 7, 110, 2, 2, 263, 264, 7, 103, 2, 2, 264, 58, 3, 2, 2, 2, 265, 266, 7, 119, 2, 2, 266, 267, 7, 112, 2, 2, 267, 268, 7, 118, 2, 2, 268, 269, 7, 107, 2, 2, 269, 270, 7, 110, 2, 2, 270, 60, 3, 2, 2, 2, 271, 272, 7, 104, 2, 2, 272, 273, 7, 113, 2, 2, 273, 274, 7, 116, 2, 2, 274, 62, 3, 2, 2, 2, 275, 276, 7, 107, 2, 2, 276, 277, 7, 112, 2, 2, 277, 64, 3, 2, 2, 2, 278, 279, 7, 117, 2, 2, 279, 280, 7, 118, 2, 2, 280, 281, 7, 103, 2, 2, 281, 282, 7, 114, 2, 2, 282, 66, 3, 2, 2, 2, 283, 284, 7, 104, 2, 2, 284, 285, 7, 119, 2, 2, 285, 286, 7, 112, 2, 2, 286, 287, 7, 101, 2, 2, 287, 68, 3, 2, 2, 2, 288, 289, 7, 42, 2, 2, 289, 70, 3, 2, 2, 2, 290, 291, 7, 43, 2, 2, 291, 72, 3, 2, 2, 2, 292, 293, 7, 102, 2, 2, 293, 294, 7, 103, 2, 2, 294, 295, 7, 104, 2, 2, 295, 74, 3, 2, 2, 2, 296, 297, 7, 103, 2, 2, 297, 298, 7, 122, 2, 2, 298, 299, 7, 118, 2, 2, 299, 300, 7, 103, 2, 2, 300, 301, 7, 116, 2, 2, 301, 302, 7, 112, 2, 2, 302, 76, 3, 2, 2, 2, 303, 304, 7, 60, 2, 2, 304, 78, 3, 2, 2, 2, 305, 306, 7, 125, 2, 2, 306, 80, 3, 2, 2, 2, 307, 308, 7, 127, 2, 2, 308, 82, 3, 2, 2, 2, 309, 310, 7, 93, 2, 2, 310, 84, 3, 2, 2, 2, 311, 312, 7, 95, 2, 2, 312, 86, 3, 2, 2, 2, 313, 314, 7, 65, 2, 2, 314, 88, 3, 2, 2, 2, 315, 316, 7, 48, 2, 2, 316, 90, 3, 2, 2, 2, 317, 318, 7, 35, 2, 2, 318, 92, 3, 2, 2, 2, 319, 320, 7, 128, 2, 2, 320, 94, 3, 2, 2, 2, 321, 322, 7, 48, 2, 2, 322, 323, 7, 48, 2, 2, 323, 96, 3, 2, 2, 2, 324, 325, 7, 48, 2, 2, 325, 326, 7, 48, 2, 2, 326, 327, 7, 48, 2, 2, 327, 98, 3, 2, 2, 2, 328, 329, 7, 63, 2, 2, 329, 330, 7, 63, 2, 2, 330, 100, 3, 2, 2, 2, 331, 332, 7, 35, 2, 2, 332, 333, 7, 63, 2, 2, 333, 102, 3, 2, 2, 2, 334, 335, 7, 62, 2, 2, 335, 104, 3, 2, 2, 2, 336, 337, 7, 62, 2, 2, 337, 338, 7, 63, 2, 2, 338, 106, 3, 2, 2, 2, 339, 340, 7, 64, 2, 2, 340, 108, 3, 2, 2, 2, 341, 342, 7, 64, 2, 2, 342, 343, 7, 63, 2, 2, 343, 110, 3, 2, 2, 2, 344, 345, 7, 112, 2, 2, 345, 346, 7, 113, 2, 2, 346, 347, 7, 118, 2, 2, 347, 112, 3, 2, 2, 2, 348, 349, 7, 99, 2, 2, 349, 350, 7, 112, 2, 2, 350, 351, 7, 102, 2, 2, 351, 114, 3, 2, 2, 2, 352, 353, 7, 113, 2, 2, 353, 354, 7, 116, 2, 2, 354, 116, 3, 2, 2, 2, 355, 356, 7, 110, 2, 2, 356, 357, 7, 99, 2, 2, 357, 358, 7, 111, 2, 2, 358, 359, 7, 100, 2, 2, 359, 360, 7, 102, 2, 2, 360, 361, 7, 99, 2, 2, 361, 118, 3, 2, 2, 2, 362, 363, 7, 47, 2, 2, 363, 364, 7, 64, 2, 2, 364, 120, 3, 2, 2, 2, 365, 366, 7, 118, 2, 2, 366, 367, 7, 116, 2, 2, 367, 368, 7, 119, 2, 2, 368, 369, 7, 103, 2, 2, 369, 122, 3, 2, 2, 2, 370, 371, 7, 104, 2, 2, 371, 372, 7, 99, 2, 2, 372, 373, 7, 110, 2, 2, 373, 374, 7, 117, 2, 2, 374, 375, 7, 103, 2, 2, 375, 124, 3, 2, 2, 2, 376, 377, 7, 112, 2, 2, 377, 378, 7, 119, 2, 2, 378, 379, 7, 110, 2, 2, 379, 380, 7, 110, 2, 2, 380, 126, 3, 2, 2, 2, 381, 382, 7, 88, 2, 2, 382, 383, 7, 113, 2, 2, 383, 384, 7, 107, 2, 2, 384, 385, 7, 102, 2, 2, 385, 128, 3, 2, 2, 2, 386, 387, 7, 75, 2, 2, 387, 388, 7, 112, 2, 2, 388, 389, 7, 118, 2, 2, 389, 130, 3, 2, 2, 2, 390, 391, 7, 72, 2, 2, 391, 392, 7, 110, 2, 2, 392, 393, 7, 113, 2, 2, 393, 394, 7, 99, 2, 2, 394, 395, 7, 118, 2, 2, 395, 132, 3, 2, 2, 2, 396, 397, 7, 68, 2, 2, 397, 398, 7, 113, 2, 2, 398, 399, 7, 113, 2, 2, 399, 400, 7, 110, 2, 2, 400, 134, 3, 2, 2, 2, 401, 402, 7, 69, 2, 2, 402, 403, 7, 106, 2, 2, 403, 404, 7, 99, 2, 2, 404, 405, 7, 116, 2, 2, 405, 136, 3, 2, 2, 2, 406, 407, 7, 85, 2, 2, 407, 408, 7, 118, 2, 2, 408, 409, 7, 116, 2, 2, 409, 410, 7, 107, 2, 2, 410, 411, 7, 112, 2, 2, 411, 412, 7, 105, 2, 2, 412, 138, 3, 2, 2, 2, 413, 415, 5, 149, 75, 2, 414, 413, 3, 2, 2, 2, 415, 416, 3, 2, 2, 2, 416, 414, 3, 2, 2, 2, 416, 417, 3, 2, 2, 2, 417, 140, 3, 2, 2, 2, 418, 420, 5, 149, 75, 2, 419, 418, 3, 2, 2, 2, 420, 421, 3, 2, 2, 2, 421, 419, 3, 2, 2, 2, 421, 422, 3, 2, 2, 2, 422, 423, 3, 2, 2, 2, 423, 425, 7, 48, 2, 2, 424, 426, 5, 149, 75, 2, 425, 424, 3, 2, 2, 2, 426, 427, 3, 2, 2, 2, 427, 425, 3, 2, 2, 2, 427, 428, 3, 2, 2, 2, 428, 438, 3, 2, 2, 2, 429, 431, 7, 103, 2, 2, 430, 432, 7, 47, 2, 2, 431, 430, 3, 2, 2, 2, 431, 432, 3, 2, 2, 2, 432, 434, 3, 2, 2, 2, 433, 435, 5, 149, 75, 2, 434, 433, 3, 2, 2, 2, 435, 436, 3, 2, 2, 2, 436, 434, 3, 2, 2, 2, 436, 437, 3, 2, 2, 2, 437, 439, 3, 2, 2, 2, 438, 429, 3, 2, 2, 2, 438, 439, 3, 2, 2, 2, 439, 142, 3, 2, 2, 2, 440, 446, 7, 41, 2, 2, 441, 445, 10, 2, 2, 2, 442, 443, 7, 94, 2, 2, 443, 445, 9, 3, 2, 2, 444, 441, 3, 2, 2, 2, 444, 442, 3, 2, 2, 2, 445, 448, 3, 2, 2, 2, 446, 444, 3, 2, 2, 2, 446, 447, 3, 2, 2, 2, 447, 449, 3, 2, 2, 2, 448, 446, 3, 2, 2, 2, 449, 450, 7, 41, 2, 2, 450, 144, 3, 2, 2, 2, 451, 457, 7, 36, 2, 2, 452, 456, 10, 4, 2, 2, 453, 454, 7, 94, 2, 2, 454, 456, 9, 5, 2, 2, 455, 452, 3, 2, 2, 2, 455, 453, 3, 2, 2, 2, 456, 459, 3, 2, 2, 2, 457, 455, 3, 2, 2, 2, 457, 458, 3, 2, 2, 2, 458, 460, 3, 2, 2, 2, 459, 457, 3, 2, 2, 2, 460, 461, 7, 36, 2, 2, 461, 146, 3, 2, 2, 2, 462, 466, 5, 151, 76, 2, 463, 465, 5, 153, 77, 2, 464, 463, 3, 2, 2, 2, 465, 468, 3, 2, 2, 2, 466, 464, 3, 2, 2, 2, 466, 467, 3, 2, 2, 2, 467, 148, 3, 2, 2, 2, 468, 466, 3, 2, 2, 2, 469, 470, 9, 6, 2, 2, 470, 150, 3, 2, 2, 2, 471, 472, 9, 7, 2, 2, 472, 152, 3, 2, 2, 2, 473, 477, 5, 151, 76, 2, 474, 477, 5, 149, 75, 2, 475, 477, 9, 8, 2, 2, 476, 473, 3, 2, 2, 2, 476, 474, 3, 2, 2, 2, 476, 475, 3, 2, 2, 2, 477, 154, 3, 2, 2, 2, 478, 479, 7, 47, 2, 2, 479, 480, 7, 47, 2, 2, 480, 484, 3, 2, 2, 2, 481, 483, 10, 9, 2, 2, 482, 481, 3, 2, 2, 2, 483, 486, 3, 2, 2, 2, 484, 482, 3, 2, 2, 2, 484, 485, 3, 2, 2, 2, 485, 487, 3, 2, 2, 2, 486, 484, 3, 2, 2, 2, 487, 488, 8, 78, 2, 2, 488, 156, 3, 2, 2, 2, 489, 491, 9, 10, 2, 2, 490, 489, 3, 2, 2, 2, 491, 492, 3, 2, 2, 2, 492, 490, 3, 2, 2, 2, 492, 493, 3, 2, 2, 2, 493, 494, 3, 2, 2, 2, 494, 495, 8, 79, 2, 2, 495, 158, 3, 2, 2, 2, 496, 497, 11, 2, 2, 2, 497, 160, 3, 2, 2, 2, 17, 2, 416, 421, 427, 431, 436, 438, 444, 446, 455, 457, 466, 476, 484, 492, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 80, 511, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 72, 6, 72, 428, 10, 72, 13, 72, 14, 72, 429, 3, 73, 6, 73, 433, 10, 73, 13, 73, 14, 73, 434, 3, 73, 3, 73, 6, 73, 439, 10, 73, 13, 73, 14, 73, 440, 3, 73, 3, 73, 5, 73, 445, 10, 73, 3, 73, 6, 73, 448, 10, 73, 13, 73, 14, 73, 449, 5, 73, 452, 10, 73, 3, 74, 3, 74, 3, 74, 3, 74, 7, 74, 458, 10, 74, 12, 74, 14, 74, 461, 11, 74, 3, 74, 3, 74, 3, 75, 3, 75, 3, 75, 3, 75, 7, 75, 469, 10, 75, 12, 75, 14, 75, 472, 11, 75, 3, 75, 3, 75, 3, 76, 3, 76, 7, 76, 478, 10, 76, 12, 76, 14, 76, 481, 11, 76, 3, 77, 3, 77, 3, 78, 3, 78, 3, 79, 3, 79, 3, 79, 5, 79, 490, 10, 79, 3, 80, 3, 80, 3, 80, 3, 80, 7, 80, 496, 10, 80, 12, 80, 14, 80, 499, 11, 80, 3, 80, 3, 80, 3, 81, 6, 81, 504, 10, 81, 13, 81, 14, 81, 505, 3, 81, 3, 81, 3, 82, 3, 82, 2, 2, 83, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 74, 147, 75, 149, 76, 151, 77, 153, 2, 155, 2, 157, 2, 159, 78, 161, 79, 163, 80, 3, 2, 11, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 4, 2, 12, 12, 14, 15, 5, 2, 11, 12, 15, 15, 34, 34, 2, 522, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 2, 161, 3, 2, 2, 2, 2, 163, 3, 2, 2, 2, 3, 165, 3, 2, 2, 2, 5, 167, 3, 2, 2, 2, 7, 171, 3, 2, 2, 2, 9, 176, 3, 2, 2, 2, 11, 183, 3, 2, 2, 2, 13, 186, 3, 2, 2, 2, 15, 191, 3, 2, 2, 2, 17, 197, 3, 2, 2, 2, 19, 199, 3, 2, 2, 2, 21, 201, 3, 2, 2, 2, 23, 203, 3, 2, 2, 2, 25, 205, 3, 2, 2, 2, 27, 207, 3, 2, 2, 2, 29, 209, 3, 2, 2, 2, 31, 211, 3, 2, 2, 2, 33, 214, 3, 2, 2, 2, 35, 217, 3, 2, 2, 2, 37, 219, 3, 2, 2, 2, 39, 221, 3, 2, 2, 2, 41, 223, 3, 2, 2, 2, 43, 229, 3, 2, 2, 2, 45, 238, 3, 2, 2, 2, 47, 245, 3, 2, 2, 2, 49, 247, 3, 2, 2, 2, 51, 250, 3, 2, 2, 2, 53, 253, 3, 2, 2, 2, 55, 258, 3, 2, 2, 2, 57, 263, 3, 2, 2, 2, 59, 269, 3, 2, 2, 2, 61, 275, 3, 2, 2, 2, 63, 279, 3, 2, 2, 2, 65, 282, 3, 2, 2, 2, 67, 287, 3, 2, 2, 2, 69, 292, 3, 2, 2, 2, 71, 294, 3, 2, 2, 2, 73, 296, 3, 2, 2, 2, 75, 300, 3, 2, 2, 2, 77, 307, 3, 2, 2, 2, 79, 309, 3, 2, 2, 2, 81, 311, 3, 2, 2, 2, 83, 313, 3, 2, 2, 2, 85, 315, 3, 2, 2, 2, 87, 317, 3, 2, 2, 2, 89, 319, 3, 2, 2, 2, 91, 321, 3, 2, 2, 2, 93, 323, 3, 2, 2, 2, 95, 325, 3, 2, 2, 2, 97, 328, 3, 2, 2, 2, 99, 332, 3, 2, 2, 2, 101, 335, 3, 2, 2, 2, 103, 341, 3, 2, 2, 2, 105, 344, 3, 2, 2, 2, 107, 347, 3, 2, 2, 2, 109, 349, 3, 2, 2, 2, 111, 352, 3, 2, 2, 2, 113, 354, 3, 2, 2, 2, 115, 357, 3, 2, 2, 2, 117, 361, 3, 2, 2, 2, 119, 365, 3, 2, 2, 2, 121, 368, 3, 2, 2, 2, 123, 375, 3, 2, 2, 2, 125, 378, 3, 2, 2, 2, 127, 383, 3, 2, 2, 2, 129, 389, 3, 2, 2, 2, 131, 394, 3, 2, 2, 2, 133, 399, 3, 2, 2, 2, 135, 403, 3, 2, 2, 2, 137, 409, 3, 2, 2, 2, 139, 414, 3, 2, 2, 2, 141, 419, 3, 2, 2, 2, 143, 427, 3, 2, 2, 2, 145, 432, 3, 2, 2, 2, 147, 453, 3, 2, 2, 2, 149, 464, 3, 2, 2, 2, 151, 475, 3, 2, 2, 2, 153, 482, 3, 2, 2, 2, 155, 484, 3, 2, 2, 2, 157, 489, 3, 2, 2, 2, 159, 491, 3, 2, 2, 2, 161, 503, 3, 2, 2, 2, 163, 509, 3, 2, 2, 2, 165, 166, 7, 61, 2, 2, 166, 4, 3, 2, 2, 2, 167, 168, 7, 119, 2, 2, 168, 169, 7, 117, 2, 2, 169, 170, 7, 103, 2, 2, 170, 6, 3, 2, 2, 2, 171, 172, 7, 113, 2, 2, 172, 173, 7, 112, 2, 2, 173, 174, 7, 110, 2, 2, 174, 175, 7, 123, 2, 2, 175, 8, 3, 2, 2, 2, 176, 177, 7, 106, 2, 2, 177, 178, 7, 107, 2, 2, 178, 179, 7, 102, 2, 2, 179, 180, 7, 107, 2, 2, 180, 181, 7, 112, 2, 2, 181, 182, 7, 105, 2, 2, 182, 10, 3, 2, 2, 2, 183, 184, 7, 99, 2, 2, 184, 185, 7, 117, 2, 2, 185, 12, 3, 2, 2, 2, 186, 187, 7, 117, 2, 2, 187, 188, 7, 109, 2, 2, 188, 189, 7, 107, 2, 2, 189, 190, 7, 114, 2, 2, 190, 14, 3, 2, 2, 2, 191, 192, 7, 114, 2, 2, 192, 193, 7, 116, 2, 2, 193, 194, 7, 107, 2, 2, 194, 195, 7, 112, 2, 2, 195, 196, 7, 118, 2, 2, 196, 16, 3, 2, 2, 2, 197, 198, 7, 63, 2, 2, 198, 18, 3, 2, 2, 2, 199, 200, 7, 96, 2, 2, 200, 20, 3, 2, 2, 2, 201, 202, 7, 44, 2, 2, 202, 22, 3, 2, 2, 2, 203, 204, 7, 49, 2, 2, 204, 24, 3, 2, 2, 2, 205, 206, 7, 39, 2, 2, 206, 26, 3, 2, 2, 2, 207, 208, 7, 45, 2, 2, 208, 28, 3, 2, 2, 2, 209, 210, 7, 47, 2, 2, 210, 30, 3, 2, 2, 2, 211, 212, 7, 62, 2, 2, 212, 213, 7, 62, 2, 2, 213, 32, 3, 2, 2, 2, 214, 215, 7, 64, 2, 2, 215, 216, 7, 64, 2, 2, 216, 34, 3, 2, 2, 2, 217, 218, 7, 40, 2, 2, 218, 36, 3, 2, 2, 2, 219, 220, 7, 38, 2, 2, 220, 38, 3, 2, 2, 2, 221, 222, 7, 126, 2, 2, 222, 40, 3, 2, 2, 2, 223, 224, 7, 100, 2, 2, 224, 225, 7, 116, 2, 2, 225, 226, 7, 103, 2, 2, 226, 227, 7, 99, 2, 2, 227, 228, 7, 109, 2, 2, 228, 42, 3, 2, 2, 2, 229, 230, 7, 101, 2, 2, 230, 231, 7, 113, 2, 2, 231, 232, 7, 112, 2, 2, 232, 233, 7, 118, 2, 2, 233, 234, 7, 107, 2, 2, 234, 235, 7, 112, 2, 2, 235, 236, 7, 119, 2, 2, 236, 237, 7, 103, 2, 2, 237, 44, 3, 2, 2, 2, 238, 239, 7, 116, 2, 2, 239, 240, 7, 103, 2, 2, 240, 241, 7, 118, 2, 2, 241, 242, 7, 119, 2, 2, 242, 243, 7, 116, 2, 2, 243, 244, 7, 112, 2, 2, 244, 46, 3, 2, 2, 2, 245, 246, 7, 46, 2, 2, 246, 48, 3, 2, 2, 2, 247, 248, 7, 107, 2, 2, 248, 249, 7, 104, 2, 2, 249, 50, 3, 2, 2, 2, 250, 251, 7, 102, 2, 2, 251, 252, 7, 113, 2, 2, 252, 52, 3, 2, 2, 2, 253, 254, 7, 103, 2, 2, 254, 255, 7, 110, 2, 2, 255, 256, 7, 107, 2, 2, 256, 257, 7, 104, 2, 2, 257, 54, 3, 2, 2, 2, 258, 259, 7, 103, 2, 2, 259, 260, 7, 110, 2, 2, 260, 261, 7, 117, 2, 2, 261, 262, 7, 103, 2, 2, 262, 56, 3, 2, 2, 2, 263, 264, 7, 121, 2, 2, 264, 265, 7, 106, 2, 2, 265, 266, 7, 107, 2, 2, 266, 267, 7, 110, 2, 2, 267, 268, 7, 103, 2, 2, 268, 58, 3, 2, 2, 2, 269, 270, 7, 119, 2, 2, 270, 271, 7, 112, 2, 2, 271, 272, 7, 118, 2, 2, 272, 273, 7, 107, 2, 2, 273, 274, 7, 110, 2, 2, 274, 60, 3, 2, 2, 2, 275, 276, 7, 104, 2, 2, 276, 277, 7, 113, 2, 2, 277, 278, 7, 116, 2, 2, 278, 62, 3, 2, 2, 2, 279, 280, 7, 107, 2, 2, 280, 281, 7, 112, 2, 2, 281, 64, 3, 2, 2, 2, 282, 283, 7, 117, 2, 2, 283, 284, 7, 118, 2, 2, 284, 285, 7, 103, 2, 2, 285, 286, 7, 114, 2, 2, 286, 66, 3, 2, 2, 2, 287, 288, 7, 104, 2, 2, 288, 289, 7, 119, 2, 2, 289, 290, 7, 112, 2, 2, 290, 291, 7, 101, 2, 2, 291, 68, 3, 2, 2, 2, 292, 293, 7, 42, 2, 2, 293, 70, 3, 2, 2, 2, 294, 295, 7, 43, 2, 2, 295, 72, 3, 2, 2, 2, 296, 297, 7, 102, 2, 2, 297, 298, 7, 103, 2, 2, 298, 299, 7, 104, 2, 2, 299, 74, 3, 2, 2, 2, 300, 301, 7, 103, 2, 2, 301, 302, 7, 122, 2, 2, 302, 303, 7, 118, 2, 2, 303, 304, 7, 103, 2, 2, 304, 305, 7, 116, 2, 2, 305, 306, 7, 112, 2, 2, 306, 76, 3, 2, 2, 2, 307, 308, 7, 60, 2, 2, 308, 78, 3, 2, 2, 2, 309, 310, 7, 125, 2, 2, 310, 80, 3, 2, 2, 2, 311, 312, 7, 127, 2, 2, 312, 82, 3, 2, 2, 2, 313, 314, 7, 93, 2, 2, 314, 84, 3, 2, 2, 2, 315, 316, 7, 95, 2, 2, 316, 86, 3, 2, 2, 2, 317, 318, 7, 65, 2, 2, 318, 88, 3, 2, 2, 2, 319, 320, 7, 48, 2, 2, 320, 90, 3, 2, 2, 2, 321, 322, 7, 35, 2, 2, 322, 92, 3, 2, 2, 2, 323, 324, 7, 128, 2, 2, 324, 94, 3, 2, 2, 2, 325, 326, 7, 48, 2, 2, 326, 327, 7, 48, 2, 2, 327, 96, 3, 2, 2, 2, 328, 329, 7, 48, 2, 2, 329, 330, 7, 48, 2, 2, 330, 331, 7, 48, 2, 2, 331, 98, 3, 2, 2, 2, 332, 333, 7, 107, 2, 2, 333, 334, 7, 117, 2, 2, 334, 100, 3, 2, 2, 2, 335, 336, 7, 107, 2, 2, 336, 337, 7, 117, 2, 2, 337, 338, 7, 112, 2, 2, 338, 339, 7, 41, 2, 2, 339, 340, 7, 118, 2, 2, 340, 102, 3, 2, 2, 2, 341, 342, 7, 63, 2, 2, 342, 343, 7, 63, 2, 2, 343, 104, 3, 2, 2, 2, 344, 345, 7, 35, 2, 2, 345, 346, 7, 63, 2, 2, 346, 106, 3, 2, 2, 2, 347, 348, 7, 62, 2, 2, 348, 108, 3, 2, 2, 2, 349, 350, 7, 62, 2, 2, 350, 351, 7, 63, 2, 2, 351, 110, 3, 2, 2, 2, 352, 353, 7, 64, 2, 2, 353, 112, 3, 2, 2, 2, 354, 355, 7, 64, 2, 2, 355, 356, 7, 63, 2, 2, 356, 114, 3, 2, 2, 2, 357, 358, 7, 112, 2, 2, 358, 359, 7, 113, 2, 2, 359, 360, 7, 118, 2, 2, 360, 116, 3, 2, 2, 2, 361, 362, 7, 99, 2, 2, 362, 363, 7, 112, 2, 2, 363, 364, 7, 102, 2, 2, 364, 118, 3, 2, 2, 2, 365, 366, 7, 113, 2, 2, 366, 367, 7, 116, 2, 2, 367, 120, 3, 2, 2, 2, 368, 369, 7, 110, 2, 2, 369, 370, 7, 99, 2, 2, 370, 371, 7, 111, 2, 2, 371, 372, 7, 100, 2, 2, 372, 373, 7, 102, 2, 2, 373, 374, 7, 99, 2, 2, 374, 122, 3, 2, 2, 2, 375, 376, 7, 47, 2, 2, 376, 377, 7, 64, 2, 2, 377, 124, 3, 2, 2, 2, 378, 379, 7, 118, 2, 2, 379, 380, 7, 116, 2, 2, 380, 381, 7, 119, 2, 2, 381, 382, 7, 103, 2, 2, 382, 126, 3, 2, 2, 2, 383, 384, 7, 104, 2, 2, 384, 385, 7, 99, 2, 2, 385, 386, 7, 110, 2, 2, 386, 387, 7, 117, 2, 2, 387, 388, 7, 103, 2, 2, 388, 128, 3, 2, 2, 2, 389, 390, 7, 112, 2, 2, 390, 391, 7, 119, 2, 2, 391, 392, 7, 110, 2, 2, 392, 393, 7, 110, 2, 2, 393, 130, 3, 2, 2, 2, 394, 395, 7, 88, 2, 2, 395, 396, 7, 113, 2, 2, 396, 397, 7, 107, 2, 2, 397, 398, 7, 102, 2, 2, 398, 132, 3, 2, 2, 2, 399, 400, 7, 75, 2, 2, 400, 401, 7, 112, 2, 2, 401, 402, 7, 118, 2, 2, 402, 134, 3, 2, 2, 2, 403, 404, 7, 72, 2, 2, 404, 405, 7, 110, 2, 2, 405, 406, 7, 113, 2, 2, 406, 407, 7, 99, 2, 2, 407, 408, 7, 118, 2, 2, 408, 136, 3, 2, 2, 2, 409, 410, 7, 68, 2, 2, 410, 411, 7, 113, 2, 2, 411, 412, 7, 113, 2, 2, 412, 413, 7, 110, 2, 2, 413, 138, 3, 2, 2, 2, 414, 415, 7, 69, 2, 2, 415, 416, 7, 106, 2, 2, 416, 417, 7, 99, 2, 2, 417, 418, 7, 116, 2, 2, 418, 140, 3, 2, 2, 2, 419, 420, 7, 85, 2, 2, 420, 421, 7, 118, 2, 2, 421, 422, 7, 116, 2, 2, 422, 423, 7, 107, 2, 2, 423, 424, 7, 112, 2, 2, 424, 425, 7, 105, 2, 2, 425, 142, 3, 2, 2, 2, 426, 428, 5, 153, 77, 2, 427, 426, 3, 2, 2, 2, 428, 429, 3, 2, 2, 2, 429, 427, 3, 2, 2, 2, 429, 430, 3, 2, 2, 2, 430, 144, 3, 2, 2, 2, 431, 433, 5, 153, 77, 2, 432, 431, 3, 2, 2, 2, 433, 434, 3, 2, 2, 2, 434, 432, 3, 2, 2, 2, 434, 435, 3, 2, 2, 2, 435, 436, 3, 2, 2, 2, 436, 438, 7, 48, 2, 2, 437, 439, 5, 153, 77, 2, 438, 437, 3, 2, 2, 2, 439, 440, 3, 2, 2, 2, 440, 438, 3, 2, 2, 2, 440, 441, 3, 2, 2, 2, 441, 451, 3, 2, 2, 2, 442, 444, 7, 103, 2, 2, 443, 445, 7, 47, 2, 2, 444, 443, 3, 2, 2, 2, 444, 445, 3, 2, 2, 2, 445, 447, 3, 2, 2, 2, 446, 448, 5, 153, 77, 2, 447, 446, 3, 2, 2, 2, 448, 449, 3, 2, 2, 2, 449, 447, 3, 2, 2, 2, 449, 450, 3, 2, 2, 2, 450, 452, 3, 2, 2, 2, 451, 442, 3, 2, 2, 2, 451, 452, 3, 2, 2, 2, 452, 146, 3, 2, 2, 2, 453, 459, 7, 41, 2, 2, 454, 458, 10, 2, 2, 2, 455, 456, 7, 94, 2, 2, 456, 458, 9, 3, 2, 2, 457, 454, 3, 2, 2, 2, 457, 455, 3, 2, 2, 2, 458, 461, 3, 2, 2, 2, 459, 457, 3, 2, 2, 2, 459, 460, 3, 2, 2, 2, 460, 462, 3, 2, 2, 2, 461, 459, 3, 2, 2, 2, 462, 463, 7, 41, 2, 2, 463, 148, 3, 2, 2, 2, 464, 470, 7, 36, 2, 2, 465, 469, 10, 4, 2, 2, 466, 467, 7, 94, 2, 2, 467, 469, 9, 5, 2, 2, 468, 465, 3, 2, 2, 2, 468, 466, 3, 2, 2, 2, 469, 472, 3, 2, 2, 2, 470, 468, 3, 2, 2, 2, 470, 471, 3, 2, 2, 2, 471, 473, 3, 2, 2, 2, 472, 470, 3, 2, 2, 2, 473, 474, 7, 36, 2, 2, 474, 150, 3, 2, 2, 2, 475, 479, 5, 155, 78, 2, 476, 478, 5, 157, 79, 2, 477, 476, 3, 2, 2, 2, 478, 481, 3, 2, 2, 2, 479, 477, 3, 2, 2, 2, 479, 480, 3, 2, 2, 2, 480, 152, 3, 2, 2, 2, 481, 479, 3, 2, 2, 2, 482, 483, 9, 6, 2, 2, 483, 154, 3, 2, 2, 2, 484, 485, 9, 7, 2, 2, 485, 156, 3, 2, 2, 2, 486, 490, 5, 155, 78, 2, 487, 490, 5, 153, 77, 2, 488, 490, 9, 8, 2, 2, 489, 486, 3, 2, 2, 2, 489, 487, 3, 2, 2, 2, 489, 488, 3, 2, 2, 2, 490, 158, 3, 2, 2, 2, 491, 492, 7, 47, 2, 2, 492, 493, 7, 47, 2, 2, 493, 497, 3, 2, 2, 2, 494, 496, 10, 9, 2, 2, 495, 494, 3, 2, 2, 2, 496, 499, 3, 2, 2, 2, 497, 495, 3, 2, 2, 2, 497, 498, 3, 2, 2, 2, 498, 500, 3, 2, 2, 2, 499, 497, 3, 2, 2, 2, 500, 501, 8, 80, 2, 2, 501, 160, 3, 2, 2, 2, 502, 504, 9, 10, 2, 2, 503, 502, 3, 2, 2, 2, 504, 505, 3, 2, 2, 2, 505, 503, 3, 2, 2, 2, 505, 506, 3, 2, 2, 2, 506, 507, 3, 2, 2, 2, 507, 508, 8, 81, 2, 2, 508, 162, 3, 2, 2, 2, 509, 510, 11, 2, 2, 2, 510, 164, 3, 2, 2, 2, 17, 2, 429, 434, 440, 444, 449, 451, 457, 459, 468, 470, 479, 489, 497, 505, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py index 38629b07..6631d6f4 100644 --- a/src/antlr/PyxellLexer.py +++ b/src/antlr/PyxellLexer.py @@ -8,8 +8,8 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2N") - buf.write("\u01f2\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2P") + buf.write("\u01ff\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") @@ -20,205 +20,210 @@ def serializedATN(): buf.write("\t\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:") buf.write("\4;\t;\4<\t<\4=\t=\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\t") buf.write("C\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I\tI\4J\tJ\4K\tK\4L\t") - buf.write("L\4M\tM\4N\tN\4O\tO\4P\tP\3\2\3\2\3\3\3\3\3\3\3\3\3\4") - buf.write("\3\4\3\4\3\4\3\4\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3") - buf.write("\6\3\7\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3\t") - buf.write("\3\n\3\n\3\13\3\13\3\f\3\f\3\r\3\r\3\16\3\16\3\17\3\17") - buf.write("\3\20\3\20\3\20\3\21\3\21\3\21\3\22\3\22\3\23\3\23\3\24") - buf.write("\3\24\3\25\3\25\3\25\3\25\3\25\3\25\3\26\3\26\3\26\3\26") - buf.write("\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27\3\27\3\27") - buf.write("\3\27\3\30\3\30\3\31\3\31\3\31\3\32\3\32\3\32\3\33\3\33") - buf.write("\3\33\3\33\3\33\3\34\3\34\3\34\3\34\3\34\3\35\3\35\3\35") - buf.write("\3\35\3\35\3\35\3\36\3\36\3\36\3\36\3\36\3\36\3\37\3\37") - buf.write("\3\37\3\37\3 \3 \3 \3!\3!\3!\3!\3!\3\"\3\"\3\"\3\"\3\"") - buf.write("\3#\3#\3$\3$\3%\3%\3%\3%\3&\3&\3&\3&\3&\3&\3&\3\'\3\'") - buf.write("\3(\3(\3)\3)\3*\3*\3+\3+\3,\3,\3-\3-\3.\3.\3/\3/\3\60") - buf.write("\3\60\3\60\3\61\3\61\3\61\3\61\3\62\3\62\3\62\3\63\3\63") - buf.write("\3\63\3\64\3\64\3\65\3\65\3\65\3\66\3\66\3\67\3\67\3\67") - buf.write("\38\38\38\38\39\39\39\39\3:\3:\3:\3;\3;\3;\3;\3;\3;\3") - buf.write(";\3<\3<\3<\3=\3=\3=\3=\3=\3>\3>\3>\3>\3>\3>\3?\3?\3?\3") - buf.write("?\3?\3@\3@\3@\3@\3@\3A\3A\3A\3A\3B\3B\3B\3B\3B\3B\3C\3") - buf.write("C\3C\3C\3C\3D\3D\3D\3D\3D\3E\3E\3E\3E\3E\3E\3E\3F\6F\u019f") - buf.write("\nF\rF\16F\u01a0\3G\6G\u01a4\nG\rG\16G\u01a5\3G\3G\6G") - buf.write("\u01aa\nG\rG\16G\u01ab\3G\3G\5G\u01b0\nG\3G\6G\u01b3\n") - buf.write("G\rG\16G\u01b4\5G\u01b7\nG\3H\3H\3H\3H\7H\u01bd\nH\fH") - buf.write("\16H\u01c0\13H\3H\3H\3I\3I\3I\3I\7I\u01c8\nI\fI\16I\u01cb") - buf.write("\13I\3I\3I\3J\3J\7J\u01d1\nJ\fJ\16J\u01d4\13J\3K\3K\3") - buf.write("L\3L\3M\3M\3M\5M\u01dd\nM\3N\3N\3N\3N\7N\u01e3\nN\fN\16") - buf.write("N\u01e6\13N\3N\3N\3O\6O\u01eb\nO\rO\16O\u01ec\3O\3O\3") - buf.write("P\3P\2\2Q\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25") + buf.write("L\4M\tM\4N\tN\4O\tO\4P\tP\4Q\tQ\4R\tR\3\2\3\2\3\3\3\3") + buf.write("\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\5\3\5\3\5\3\5\3\5\3\5\3") + buf.write("\5\3\6\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\b\3\b") + buf.write("\3\b\3\t\3\t\3\n\3\n\3\13\3\13\3\f\3\f\3\r\3\r\3\16\3") + buf.write("\16\3\17\3\17\3\20\3\20\3\20\3\21\3\21\3\21\3\22\3\22") + buf.write("\3\23\3\23\3\24\3\24\3\25\3\25\3\25\3\25\3\25\3\25\3\26") + buf.write("\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27") + buf.write("\3\27\3\27\3\27\3\27\3\30\3\30\3\31\3\31\3\31\3\32\3\32") + buf.write("\3\32\3\33\3\33\3\33\3\33\3\33\3\34\3\34\3\34\3\34\3\34") + buf.write("\3\35\3\35\3\35\3\35\3\35\3\35\3\36\3\36\3\36\3\36\3\36") + buf.write("\3\36\3\37\3\37\3\37\3\37\3 \3 \3 \3!\3!\3!\3!\3!\3\"") + buf.write("\3\"\3\"\3\"\3\"\3#\3#\3$\3$\3%\3%\3%\3%\3&\3&\3&\3&\3") + buf.write("&\3&\3&\3\'\3\'\3(\3(\3)\3)\3*\3*\3+\3+\3,\3,\3-\3-\3") + buf.write(".\3.\3/\3/\3\60\3\60\3\60\3\61\3\61\3\61\3\61\3\62\3\62") + buf.write("\3\62\3\63\3\63\3\63\3\63\3\63\3\63\3\64\3\64\3\64\3\65") + buf.write("\3\65\3\65\3\66\3\66\3\67\3\67\3\67\38\38\39\39\39\3:") + buf.write("\3:\3:\3:\3;\3;\3;\3;\3<\3<\3<\3=\3=\3=\3=\3=\3=\3=\3") + buf.write(">\3>\3>\3?\3?\3?\3?\3?\3@\3@\3@\3@\3@\3@\3A\3A\3A\3A\3") + buf.write("A\3B\3B\3B\3B\3B\3C\3C\3C\3C\3D\3D\3D\3D\3D\3D\3E\3E\3") + buf.write("E\3E\3E\3F\3F\3F\3F\3F\3G\3G\3G\3G\3G\3G\3G\3H\6H\u01ac") + buf.write("\nH\rH\16H\u01ad\3I\6I\u01b1\nI\rI\16I\u01b2\3I\3I\6I") + buf.write("\u01b7\nI\rI\16I\u01b8\3I\3I\5I\u01bd\nI\3I\6I\u01c0\n") + buf.write("I\rI\16I\u01c1\5I\u01c4\nI\3J\3J\3J\3J\7J\u01ca\nJ\fJ") + buf.write("\16J\u01cd\13J\3J\3J\3K\3K\3K\3K\7K\u01d5\nK\fK\16K\u01d8") + buf.write("\13K\3K\3K\3L\3L\7L\u01de\nL\fL\16L\u01e1\13L\3M\3M\3") + buf.write("N\3N\3O\3O\3O\5O\u01ea\nO\3P\3P\3P\3P\7P\u01f0\nP\fP\16") + buf.write("P\u01f3\13P\3P\3P\3Q\6Q\u01f8\nQ\rQ\16Q\u01f9\3Q\3Q\3") + buf.write("R\3R\2\2S\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25") buf.write("\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+") buf.write("\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#E") buf.write("$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k") buf.write("\67m8o9q:s;u{?}@\177A\u0081B\u0083C\u0085D\u0087") - buf.write("E\u0089F\u008bG\u008dH\u008fI\u0091J\u0093K\u0095\2\u0097") - buf.write("\2\u0099\2\u009bL\u009dM\u009fN\3\2\13\4\2))^^\6\2))^") - buf.write("^ppvv\4\2$$^^\6\2$$^^ppvv\3\2\62;\5\2C\\aac|\4\2))aa\4") - buf.write("\2\f\f\16\17\5\2\13\f\17\17\"\"\2\u01fd\2\3\3\2\2\2\2") - buf.write("\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3") - buf.write("\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2") - buf.write("\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2") - buf.write("\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3") - buf.write("\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61") - buf.write("\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2") - buf.write("\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3") - buf.write("\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M") - buf.write("\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2") - buf.write("W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2") - buf.write("\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2") - buf.write("\2\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2\2s\3\2") - buf.write("\2\2\2u\3\2\2\2\2w\3\2\2\2\2y\3\2\2\2\2{\3\2\2\2\2}\3") - buf.write("\2\2\2\2\177\3\2\2\2\2\u0081\3\2\2\2\2\u0083\3\2\2\2\2") - buf.write("\u0085\3\2\2\2\2\u0087\3\2\2\2\2\u0089\3\2\2\2\2\u008b") - buf.write("\3\2\2\2\2\u008d\3\2\2\2\2\u008f\3\2\2\2\2\u0091\3\2\2") - buf.write("\2\2\u0093\3\2\2\2\2\u009b\3\2\2\2\2\u009d\3\2\2\2\2\u009f") - buf.write("\3\2\2\2\3\u00a1\3\2\2\2\5\u00a3\3\2\2\2\7\u00a7\3\2\2") - buf.write("\2\t\u00ac\3\2\2\2\13\u00b3\3\2\2\2\r\u00b6\3\2\2\2\17") - buf.write("\u00bb\3\2\2\2\21\u00c1\3\2\2\2\23\u00c3\3\2\2\2\25\u00c5") - buf.write("\3\2\2\2\27\u00c7\3\2\2\2\31\u00c9\3\2\2\2\33\u00cb\3") - buf.write("\2\2\2\35\u00cd\3\2\2\2\37\u00cf\3\2\2\2!\u00d2\3\2\2") - buf.write("\2#\u00d5\3\2\2\2%\u00d7\3\2\2\2\'\u00d9\3\2\2\2)\u00db") - buf.write("\3\2\2\2+\u00e1\3\2\2\2-\u00ea\3\2\2\2/\u00f1\3\2\2\2") - buf.write("\61\u00f3\3\2\2\2\63\u00f6\3\2\2\2\65\u00f9\3\2\2\2\67") - buf.write("\u00fe\3\2\2\29\u0103\3\2\2\2;\u0109\3\2\2\2=\u010f\3") - buf.write("\2\2\2?\u0113\3\2\2\2A\u0116\3\2\2\2C\u011b\3\2\2\2E\u0120") - buf.write("\3\2\2\2G\u0122\3\2\2\2I\u0124\3\2\2\2K\u0128\3\2\2\2") - buf.write("M\u012f\3\2\2\2O\u0131\3\2\2\2Q\u0133\3\2\2\2S\u0135\3") - buf.write("\2\2\2U\u0137\3\2\2\2W\u0139\3\2\2\2Y\u013b\3\2\2\2[\u013d") - buf.write("\3\2\2\2]\u013f\3\2\2\2_\u0141\3\2\2\2a\u0144\3\2\2\2") - buf.write("c\u0148\3\2\2\2e\u014b\3\2\2\2g\u014e\3\2\2\2i\u0150\3") - buf.write("\2\2\2k\u0153\3\2\2\2m\u0155\3\2\2\2o\u0158\3\2\2\2q\u015c") - buf.write("\3\2\2\2s\u0160\3\2\2\2u\u0163\3\2\2\2w\u016a\3\2\2\2") - buf.write("y\u016d\3\2\2\2{\u0172\3\2\2\2}\u0178\3\2\2\2\177\u017d") - buf.write("\3\2\2\2\u0081\u0182\3\2\2\2\u0083\u0186\3\2\2\2\u0085") - buf.write("\u018c\3\2\2\2\u0087\u0191\3\2\2\2\u0089\u0196\3\2\2\2") - buf.write("\u008b\u019e\3\2\2\2\u008d\u01a3\3\2\2\2\u008f\u01b8\3") - buf.write("\2\2\2\u0091\u01c3\3\2\2\2\u0093\u01ce\3\2\2\2\u0095\u01d5") - buf.write("\3\2\2\2\u0097\u01d7\3\2\2\2\u0099\u01dc\3\2\2\2\u009b") - buf.write("\u01de\3\2\2\2\u009d\u01ea\3\2\2\2\u009f\u01f0\3\2\2\2") - buf.write("\u00a1\u00a2\7=\2\2\u00a2\4\3\2\2\2\u00a3\u00a4\7w\2\2") - buf.write("\u00a4\u00a5\7u\2\2\u00a5\u00a6\7g\2\2\u00a6\6\3\2\2\2") - buf.write("\u00a7\u00a8\7q\2\2\u00a8\u00a9\7p\2\2\u00a9\u00aa\7n") - buf.write("\2\2\u00aa\u00ab\7{\2\2\u00ab\b\3\2\2\2\u00ac\u00ad\7") - buf.write("j\2\2\u00ad\u00ae\7k\2\2\u00ae\u00af\7f\2\2\u00af\u00b0") - buf.write("\7k\2\2\u00b0\u00b1\7p\2\2\u00b1\u00b2\7i\2\2\u00b2\n") - buf.write("\3\2\2\2\u00b3\u00b4\7c\2\2\u00b4\u00b5\7u\2\2\u00b5\f") - buf.write("\3\2\2\2\u00b6\u00b7\7u\2\2\u00b7\u00b8\7m\2\2\u00b8\u00b9") - buf.write("\7k\2\2\u00b9\u00ba\7r\2\2\u00ba\16\3\2\2\2\u00bb\u00bc") - buf.write("\7r\2\2\u00bc\u00bd\7t\2\2\u00bd\u00be\7k\2\2\u00be\u00bf") - buf.write("\7p\2\2\u00bf\u00c0\7v\2\2\u00c0\20\3\2\2\2\u00c1\u00c2") - buf.write("\7?\2\2\u00c2\22\3\2\2\2\u00c3\u00c4\7`\2\2\u00c4\24\3") - buf.write("\2\2\2\u00c5\u00c6\7,\2\2\u00c6\26\3\2\2\2\u00c7\u00c8") - buf.write("\7\61\2\2\u00c8\30\3\2\2\2\u00c9\u00ca\7\'\2\2\u00ca\32") - buf.write("\3\2\2\2\u00cb\u00cc\7-\2\2\u00cc\34\3\2\2\2\u00cd\u00ce") - buf.write("\7/\2\2\u00ce\36\3\2\2\2\u00cf\u00d0\7>\2\2\u00d0\u00d1") - buf.write("\7>\2\2\u00d1 \3\2\2\2\u00d2\u00d3\7@\2\2\u00d3\u00d4") - buf.write("\7@\2\2\u00d4\"\3\2\2\2\u00d5\u00d6\7(\2\2\u00d6$\3\2") - buf.write("\2\2\u00d7\u00d8\7&\2\2\u00d8&\3\2\2\2\u00d9\u00da\7~") - buf.write("\2\2\u00da(\3\2\2\2\u00db\u00dc\7d\2\2\u00dc\u00dd\7t") - buf.write("\2\2\u00dd\u00de\7g\2\2\u00de\u00df\7c\2\2\u00df\u00e0") - buf.write("\7m\2\2\u00e0*\3\2\2\2\u00e1\u00e2\7e\2\2\u00e2\u00e3") - buf.write("\7q\2\2\u00e3\u00e4\7p\2\2\u00e4\u00e5\7v\2\2\u00e5\u00e6") - buf.write("\7k\2\2\u00e6\u00e7\7p\2\2\u00e7\u00e8\7w\2\2\u00e8\u00e9") - buf.write("\7g\2\2\u00e9,\3\2\2\2\u00ea\u00eb\7t\2\2\u00eb\u00ec") - buf.write("\7g\2\2\u00ec\u00ed\7v\2\2\u00ed\u00ee\7w\2\2\u00ee\u00ef") - buf.write("\7t\2\2\u00ef\u00f0\7p\2\2\u00f0.\3\2\2\2\u00f1\u00f2") - buf.write("\7.\2\2\u00f2\60\3\2\2\2\u00f3\u00f4\7k\2\2\u00f4\u00f5") - buf.write("\7h\2\2\u00f5\62\3\2\2\2\u00f6\u00f7\7f\2\2\u00f7\u00f8") - buf.write("\7q\2\2\u00f8\64\3\2\2\2\u00f9\u00fa\7g\2\2\u00fa\u00fb") - buf.write("\7n\2\2\u00fb\u00fc\7k\2\2\u00fc\u00fd\7h\2\2\u00fd\66") - buf.write("\3\2\2\2\u00fe\u00ff\7g\2\2\u00ff\u0100\7n\2\2\u0100\u0101") - buf.write("\7u\2\2\u0101\u0102\7g\2\2\u01028\3\2\2\2\u0103\u0104") - buf.write("\7y\2\2\u0104\u0105\7j\2\2\u0105\u0106\7k\2\2\u0106\u0107") - buf.write("\7n\2\2\u0107\u0108\7g\2\2\u0108:\3\2\2\2\u0109\u010a") - buf.write("\7w\2\2\u010a\u010b\7p\2\2\u010b\u010c\7v\2\2\u010c\u010d") - buf.write("\7k\2\2\u010d\u010e\7n\2\2\u010e<\3\2\2\2\u010f\u0110") - buf.write("\7h\2\2\u0110\u0111\7q\2\2\u0111\u0112\7t\2\2\u0112>\3") - buf.write("\2\2\2\u0113\u0114\7k\2\2\u0114\u0115\7p\2\2\u0115@\3") - buf.write("\2\2\2\u0116\u0117\7u\2\2\u0117\u0118\7v\2\2\u0118\u0119") - buf.write("\7g\2\2\u0119\u011a\7r\2\2\u011aB\3\2\2\2\u011b\u011c") - buf.write("\7h\2\2\u011c\u011d\7w\2\2\u011d\u011e\7p\2\2\u011e\u011f") - buf.write("\7e\2\2\u011fD\3\2\2\2\u0120\u0121\7*\2\2\u0121F\3\2\2") - buf.write("\2\u0122\u0123\7+\2\2\u0123H\3\2\2\2\u0124\u0125\7f\2") - buf.write("\2\u0125\u0126\7g\2\2\u0126\u0127\7h\2\2\u0127J\3\2\2") - buf.write("\2\u0128\u0129\7g\2\2\u0129\u012a\7z\2\2\u012a\u012b\7") - buf.write("v\2\2\u012b\u012c\7g\2\2\u012c\u012d\7t\2\2\u012d\u012e") - buf.write("\7p\2\2\u012eL\3\2\2\2\u012f\u0130\7<\2\2\u0130N\3\2\2") - buf.write("\2\u0131\u0132\7}\2\2\u0132P\3\2\2\2\u0133\u0134\7\177") - buf.write("\2\2\u0134R\3\2\2\2\u0135\u0136\7]\2\2\u0136T\3\2\2\2") - buf.write("\u0137\u0138\7_\2\2\u0138V\3\2\2\2\u0139\u013a\7A\2\2") - buf.write("\u013aX\3\2\2\2\u013b\u013c\7\60\2\2\u013cZ\3\2\2\2\u013d") - buf.write("\u013e\7#\2\2\u013e\\\3\2\2\2\u013f\u0140\7\u0080\2\2") - buf.write("\u0140^\3\2\2\2\u0141\u0142\7\60\2\2\u0142\u0143\7\60") - buf.write("\2\2\u0143`\3\2\2\2\u0144\u0145\7\60\2\2\u0145\u0146\7") - buf.write("\60\2\2\u0146\u0147\7\60\2\2\u0147b\3\2\2\2\u0148\u0149") - buf.write("\7?\2\2\u0149\u014a\7?\2\2\u014ad\3\2\2\2\u014b\u014c") - buf.write("\7#\2\2\u014c\u014d\7?\2\2\u014df\3\2\2\2\u014e\u014f") - buf.write("\7>\2\2\u014fh\3\2\2\2\u0150\u0151\7>\2\2\u0151\u0152") - buf.write("\7?\2\2\u0152j\3\2\2\2\u0153\u0154\7@\2\2\u0154l\3\2\2") - buf.write("\2\u0155\u0156\7@\2\2\u0156\u0157\7?\2\2\u0157n\3\2\2") - buf.write("\2\u0158\u0159\7p\2\2\u0159\u015a\7q\2\2\u015a\u015b\7") - buf.write("v\2\2\u015bp\3\2\2\2\u015c\u015d\7c\2\2\u015d\u015e\7") - buf.write("p\2\2\u015e\u015f\7f\2\2\u015fr\3\2\2\2\u0160\u0161\7") - buf.write("q\2\2\u0161\u0162\7t\2\2\u0162t\3\2\2\2\u0163\u0164\7") - buf.write("n\2\2\u0164\u0165\7c\2\2\u0165\u0166\7o\2\2\u0166\u0167") - buf.write("\7d\2\2\u0167\u0168\7f\2\2\u0168\u0169\7c\2\2\u0169v\3") - buf.write("\2\2\2\u016a\u016b\7/\2\2\u016b\u016c\7@\2\2\u016cx\3") - buf.write("\2\2\2\u016d\u016e\7v\2\2\u016e\u016f\7t\2\2\u016f\u0170") - buf.write("\7w\2\2\u0170\u0171\7g\2\2\u0171z\3\2\2\2\u0172\u0173") - buf.write("\7h\2\2\u0173\u0174\7c\2\2\u0174\u0175\7n\2\2\u0175\u0176") - buf.write("\7u\2\2\u0176\u0177\7g\2\2\u0177|\3\2\2\2\u0178\u0179") - buf.write("\7p\2\2\u0179\u017a\7w\2\2\u017a\u017b\7n\2\2\u017b\u017c") - buf.write("\7n\2\2\u017c~\3\2\2\2\u017d\u017e\7X\2\2\u017e\u017f") - buf.write("\7q\2\2\u017f\u0180\7k\2\2\u0180\u0181\7f\2\2\u0181\u0080") - buf.write("\3\2\2\2\u0182\u0183\7K\2\2\u0183\u0184\7p\2\2\u0184\u0185") - buf.write("\7v\2\2\u0185\u0082\3\2\2\2\u0186\u0187\7H\2\2\u0187\u0188") - buf.write("\7n\2\2\u0188\u0189\7q\2\2\u0189\u018a\7c\2\2\u018a\u018b") - buf.write("\7v\2\2\u018b\u0084\3\2\2\2\u018c\u018d\7D\2\2\u018d\u018e") - buf.write("\7q\2\2\u018e\u018f\7q\2\2\u018f\u0190\7n\2\2\u0190\u0086") - buf.write("\3\2\2\2\u0191\u0192\7E\2\2\u0192\u0193\7j\2\2\u0193\u0194") - buf.write("\7c\2\2\u0194\u0195\7t\2\2\u0195\u0088\3\2\2\2\u0196\u0197") - buf.write("\7U\2\2\u0197\u0198\7v\2\2\u0198\u0199\7t\2\2\u0199\u019a") - buf.write("\7k\2\2\u019a\u019b\7p\2\2\u019b\u019c\7i\2\2\u019c\u008a") - buf.write("\3\2\2\2\u019d\u019f\5\u0095K\2\u019e\u019d\3\2\2\2\u019f") - buf.write("\u01a0\3\2\2\2\u01a0\u019e\3\2\2\2\u01a0\u01a1\3\2\2\2") - buf.write("\u01a1\u008c\3\2\2\2\u01a2\u01a4\5\u0095K\2\u01a3\u01a2") - buf.write("\3\2\2\2\u01a4\u01a5\3\2\2\2\u01a5\u01a3\3\2\2\2\u01a5") - buf.write("\u01a6\3\2\2\2\u01a6\u01a7\3\2\2\2\u01a7\u01a9\7\60\2") - buf.write("\2\u01a8\u01aa\5\u0095K\2\u01a9\u01a8\3\2\2\2\u01aa\u01ab") - buf.write("\3\2\2\2\u01ab\u01a9\3\2\2\2\u01ab\u01ac\3\2\2\2\u01ac") - buf.write("\u01b6\3\2\2\2\u01ad\u01af\7g\2\2\u01ae\u01b0\7/\2\2\u01af") - buf.write("\u01ae\3\2\2\2\u01af\u01b0\3\2\2\2\u01b0\u01b2\3\2\2\2") - buf.write("\u01b1\u01b3\5\u0095K\2\u01b2\u01b1\3\2\2\2\u01b3\u01b4") - buf.write("\3\2\2\2\u01b4\u01b2\3\2\2\2\u01b4\u01b5\3\2\2\2\u01b5") - buf.write("\u01b7\3\2\2\2\u01b6\u01ad\3\2\2\2\u01b6\u01b7\3\2\2\2") - buf.write("\u01b7\u008e\3\2\2\2\u01b8\u01be\7)\2\2\u01b9\u01bd\n") - buf.write("\2\2\2\u01ba\u01bb\7^\2\2\u01bb\u01bd\t\3\2\2\u01bc\u01b9") - buf.write("\3\2\2\2\u01bc\u01ba\3\2\2\2\u01bd\u01c0\3\2\2\2\u01be") - buf.write("\u01bc\3\2\2\2\u01be\u01bf\3\2\2\2\u01bf\u01c1\3\2\2\2") - buf.write("\u01c0\u01be\3\2\2\2\u01c1\u01c2\7)\2\2\u01c2\u0090\3") - buf.write("\2\2\2\u01c3\u01c9\7$\2\2\u01c4\u01c8\n\4\2\2\u01c5\u01c6") - buf.write("\7^\2\2\u01c6\u01c8\t\5\2\2\u01c7\u01c4\3\2\2\2\u01c7") - buf.write("\u01c5\3\2\2\2\u01c8\u01cb\3\2\2\2\u01c9\u01c7\3\2\2\2") - buf.write("\u01c9\u01ca\3\2\2\2\u01ca\u01cc\3\2\2\2\u01cb\u01c9\3") - buf.write("\2\2\2\u01cc\u01cd\7$\2\2\u01cd\u0092\3\2\2\2\u01ce\u01d2") - buf.write("\5\u0097L\2\u01cf\u01d1\5\u0099M\2\u01d0\u01cf\3\2\2\2") - buf.write("\u01d1\u01d4\3\2\2\2\u01d2\u01d0\3\2\2\2\u01d2\u01d3\3") - buf.write("\2\2\2\u01d3\u0094\3\2\2\2\u01d4\u01d2\3\2\2\2\u01d5\u01d6") - buf.write("\t\6\2\2\u01d6\u0096\3\2\2\2\u01d7\u01d8\t\7\2\2\u01d8") - buf.write("\u0098\3\2\2\2\u01d9\u01dd\5\u0097L\2\u01da\u01dd\5\u0095") - buf.write("K\2\u01db\u01dd\t\b\2\2\u01dc\u01d9\3\2\2\2\u01dc\u01da") - buf.write("\3\2\2\2\u01dc\u01db\3\2\2\2\u01dd\u009a\3\2\2\2\u01de") - buf.write("\u01df\7/\2\2\u01df\u01e0\7/\2\2\u01e0\u01e4\3\2\2\2\u01e1") - buf.write("\u01e3\n\t\2\2\u01e2\u01e1\3\2\2\2\u01e3\u01e6\3\2\2\2") - buf.write("\u01e4\u01e2\3\2\2\2\u01e4\u01e5\3\2\2\2\u01e5\u01e7\3") - buf.write("\2\2\2\u01e6\u01e4\3\2\2\2\u01e7\u01e8\bN\2\2\u01e8\u009c") - buf.write("\3\2\2\2\u01e9\u01eb\t\n\2\2\u01ea\u01e9\3\2\2\2\u01eb") - buf.write("\u01ec\3\2\2\2\u01ec\u01ea\3\2\2\2\u01ec\u01ed\3\2\2\2") - buf.write("\u01ed\u01ee\3\2\2\2\u01ee\u01ef\bO\2\2\u01ef\u009e\3") - buf.write("\2\2\2\u01f0\u01f1\13\2\2\2\u01f1\u00a0\3\2\2\2\21\2\u01a0") - buf.write("\u01a5\u01ab\u01af\u01b4\u01b6\u01bc\u01be\u01c7\u01c9") - buf.write("\u01d2\u01dc\u01e4\u01ec\3\b\2\2") + buf.write("E\u0089F\u008bG\u008dH\u008fI\u0091J\u0093K\u0095L\u0097") + buf.write("M\u0099\2\u009b\2\u009d\2\u009fN\u00a1O\u00a3P\3\2\13") + buf.write("\4\2))^^\6\2))^^ppvv\4\2$$^^\6\2$$^^ppvv\3\2\62;\5\2C") + buf.write("\\aac|\4\2))aa\4\2\f\f\16\17\5\2\13\f\17\17\"\"\2\u020a") + buf.write("\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13") + buf.write("\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3") + buf.write("\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2") + buf.write("\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2") + buf.write("%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2") + buf.write("\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67") + buf.write("\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2") + buf.write("A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2") + buf.write("\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2") + buf.write("\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2") + buf.write("\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3") + buf.write("\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2q") + buf.write("\3\2\2\2\2s\3\2\2\2\2u\3\2\2\2\2w\3\2\2\2\2y\3\2\2\2\2") + buf.write("{\3\2\2\2\2}\3\2\2\2\2\177\3\2\2\2\2\u0081\3\2\2\2\2\u0083") + buf.write("\3\2\2\2\2\u0085\3\2\2\2\2\u0087\3\2\2\2\2\u0089\3\2\2") + buf.write("\2\2\u008b\3\2\2\2\2\u008d\3\2\2\2\2\u008f\3\2\2\2\2\u0091") + buf.write("\3\2\2\2\2\u0093\3\2\2\2\2\u0095\3\2\2\2\2\u0097\3\2\2") + buf.write("\2\2\u009f\3\2\2\2\2\u00a1\3\2\2\2\2\u00a3\3\2\2\2\3\u00a5") + buf.write("\3\2\2\2\5\u00a7\3\2\2\2\7\u00ab\3\2\2\2\t\u00b0\3\2\2") + buf.write("\2\13\u00b7\3\2\2\2\r\u00ba\3\2\2\2\17\u00bf\3\2\2\2\21") + buf.write("\u00c5\3\2\2\2\23\u00c7\3\2\2\2\25\u00c9\3\2\2\2\27\u00cb") + buf.write("\3\2\2\2\31\u00cd\3\2\2\2\33\u00cf\3\2\2\2\35\u00d1\3") + buf.write("\2\2\2\37\u00d3\3\2\2\2!\u00d6\3\2\2\2#\u00d9\3\2\2\2") + buf.write("%\u00db\3\2\2\2\'\u00dd\3\2\2\2)\u00df\3\2\2\2+\u00e5") + buf.write("\3\2\2\2-\u00ee\3\2\2\2/\u00f5\3\2\2\2\61\u00f7\3\2\2") + buf.write("\2\63\u00fa\3\2\2\2\65\u00fd\3\2\2\2\67\u0102\3\2\2\2") + buf.write("9\u0107\3\2\2\2;\u010d\3\2\2\2=\u0113\3\2\2\2?\u0117\3") + buf.write("\2\2\2A\u011a\3\2\2\2C\u011f\3\2\2\2E\u0124\3\2\2\2G\u0126") + buf.write("\3\2\2\2I\u0128\3\2\2\2K\u012c\3\2\2\2M\u0133\3\2\2\2") + buf.write("O\u0135\3\2\2\2Q\u0137\3\2\2\2S\u0139\3\2\2\2U\u013b\3") + buf.write("\2\2\2W\u013d\3\2\2\2Y\u013f\3\2\2\2[\u0141\3\2\2\2]\u0143") + buf.write("\3\2\2\2_\u0145\3\2\2\2a\u0148\3\2\2\2c\u014c\3\2\2\2") + buf.write("e\u014f\3\2\2\2g\u0155\3\2\2\2i\u0158\3\2\2\2k\u015b\3") + buf.write("\2\2\2m\u015d\3\2\2\2o\u0160\3\2\2\2q\u0162\3\2\2\2s\u0165") + buf.write("\3\2\2\2u\u0169\3\2\2\2w\u016d\3\2\2\2y\u0170\3\2\2\2") + buf.write("{\u0177\3\2\2\2}\u017a\3\2\2\2\177\u017f\3\2\2\2\u0081") + buf.write("\u0185\3\2\2\2\u0083\u018a\3\2\2\2\u0085\u018f\3\2\2\2") + buf.write("\u0087\u0193\3\2\2\2\u0089\u0199\3\2\2\2\u008b\u019e\3") + buf.write("\2\2\2\u008d\u01a3\3\2\2\2\u008f\u01ab\3\2\2\2\u0091\u01b0") + buf.write("\3\2\2\2\u0093\u01c5\3\2\2\2\u0095\u01d0\3\2\2\2\u0097") + buf.write("\u01db\3\2\2\2\u0099\u01e2\3\2\2\2\u009b\u01e4\3\2\2\2") + buf.write("\u009d\u01e9\3\2\2\2\u009f\u01eb\3\2\2\2\u00a1\u01f7\3") + buf.write("\2\2\2\u00a3\u01fd\3\2\2\2\u00a5\u00a6\7=\2\2\u00a6\4") + buf.write("\3\2\2\2\u00a7\u00a8\7w\2\2\u00a8\u00a9\7u\2\2\u00a9\u00aa") + buf.write("\7g\2\2\u00aa\6\3\2\2\2\u00ab\u00ac\7q\2\2\u00ac\u00ad") + buf.write("\7p\2\2\u00ad\u00ae\7n\2\2\u00ae\u00af\7{\2\2\u00af\b") + buf.write("\3\2\2\2\u00b0\u00b1\7j\2\2\u00b1\u00b2\7k\2\2\u00b2\u00b3") + buf.write("\7f\2\2\u00b3\u00b4\7k\2\2\u00b4\u00b5\7p\2\2\u00b5\u00b6") + buf.write("\7i\2\2\u00b6\n\3\2\2\2\u00b7\u00b8\7c\2\2\u00b8\u00b9") + buf.write("\7u\2\2\u00b9\f\3\2\2\2\u00ba\u00bb\7u\2\2\u00bb\u00bc") + buf.write("\7m\2\2\u00bc\u00bd\7k\2\2\u00bd\u00be\7r\2\2\u00be\16") + buf.write("\3\2\2\2\u00bf\u00c0\7r\2\2\u00c0\u00c1\7t\2\2\u00c1\u00c2") + buf.write("\7k\2\2\u00c2\u00c3\7p\2\2\u00c3\u00c4\7v\2\2\u00c4\20") + buf.write("\3\2\2\2\u00c5\u00c6\7?\2\2\u00c6\22\3\2\2\2\u00c7\u00c8") + buf.write("\7`\2\2\u00c8\24\3\2\2\2\u00c9\u00ca\7,\2\2\u00ca\26\3") + buf.write("\2\2\2\u00cb\u00cc\7\61\2\2\u00cc\30\3\2\2\2\u00cd\u00ce") + buf.write("\7\'\2\2\u00ce\32\3\2\2\2\u00cf\u00d0\7-\2\2\u00d0\34") + buf.write("\3\2\2\2\u00d1\u00d2\7/\2\2\u00d2\36\3\2\2\2\u00d3\u00d4") + buf.write("\7>\2\2\u00d4\u00d5\7>\2\2\u00d5 \3\2\2\2\u00d6\u00d7") + buf.write("\7@\2\2\u00d7\u00d8\7@\2\2\u00d8\"\3\2\2\2\u00d9\u00da") + buf.write("\7(\2\2\u00da$\3\2\2\2\u00db\u00dc\7&\2\2\u00dc&\3\2\2") + buf.write("\2\u00dd\u00de\7~\2\2\u00de(\3\2\2\2\u00df\u00e0\7d\2") + buf.write("\2\u00e0\u00e1\7t\2\2\u00e1\u00e2\7g\2\2\u00e2\u00e3\7") + buf.write("c\2\2\u00e3\u00e4\7m\2\2\u00e4*\3\2\2\2\u00e5\u00e6\7") + buf.write("e\2\2\u00e6\u00e7\7q\2\2\u00e7\u00e8\7p\2\2\u00e8\u00e9") + buf.write("\7v\2\2\u00e9\u00ea\7k\2\2\u00ea\u00eb\7p\2\2\u00eb\u00ec") + buf.write("\7w\2\2\u00ec\u00ed\7g\2\2\u00ed,\3\2\2\2\u00ee\u00ef") + buf.write("\7t\2\2\u00ef\u00f0\7g\2\2\u00f0\u00f1\7v\2\2\u00f1\u00f2") + buf.write("\7w\2\2\u00f2\u00f3\7t\2\2\u00f3\u00f4\7p\2\2\u00f4.\3") + buf.write("\2\2\2\u00f5\u00f6\7.\2\2\u00f6\60\3\2\2\2\u00f7\u00f8") + buf.write("\7k\2\2\u00f8\u00f9\7h\2\2\u00f9\62\3\2\2\2\u00fa\u00fb") + buf.write("\7f\2\2\u00fb\u00fc\7q\2\2\u00fc\64\3\2\2\2\u00fd\u00fe") + buf.write("\7g\2\2\u00fe\u00ff\7n\2\2\u00ff\u0100\7k\2\2\u0100\u0101") + buf.write("\7h\2\2\u0101\66\3\2\2\2\u0102\u0103\7g\2\2\u0103\u0104") + buf.write("\7n\2\2\u0104\u0105\7u\2\2\u0105\u0106\7g\2\2\u01068\3") + buf.write("\2\2\2\u0107\u0108\7y\2\2\u0108\u0109\7j\2\2\u0109\u010a") + buf.write("\7k\2\2\u010a\u010b\7n\2\2\u010b\u010c\7g\2\2\u010c:\3") + buf.write("\2\2\2\u010d\u010e\7w\2\2\u010e\u010f\7p\2\2\u010f\u0110") + buf.write("\7v\2\2\u0110\u0111\7k\2\2\u0111\u0112\7n\2\2\u0112<\3") + buf.write("\2\2\2\u0113\u0114\7h\2\2\u0114\u0115\7q\2\2\u0115\u0116") + buf.write("\7t\2\2\u0116>\3\2\2\2\u0117\u0118\7k\2\2\u0118\u0119") + buf.write("\7p\2\2\u0119@\3\2\2\2\u011a\u011b\7u\2\2\u011b\u011c") + buf.write("\7v\2\2\u011c\u011d\7g\2\2\u011d\u011e\7r\2\2\u011eB\3") + buf.write("\2\2\2\u011f\u0120\7h\2\2\u0120\u0121\7w\2\2\u0121\u0122") + buf.write("\7p\2\2\u0122\u0123\7e\2\2\u0123D\3\2\2\2\u0124\u0125") + buf.write("\7*\2\2\u0125F\3\2\2\2\u0126\u0127\7+\2\2\u0127H\3\2\2") + buf.write("\2\u0128\u0129\7f\2\2\u0129\u012a\7g\2\2\u012a\u012b\7") + buf.write("h\2\2\u012bJ\3\2\2\2\u012c\u012d\7g\2\2\u012d\u012e\7") + buf.write("z\2\2\u012e\u012f\7v\2\2\u012f\u0130\7g\2\2\u0130\u0131") + buf.write("\7t\2\2\u0131\u0132\7p\2\2\u0132L\3\2\2\2\u0133\u0134") + buf.write("\7<\2\2\u0134N\3\2\2\2\u0135\u0136\7}\2\2\u0136P\3\2\2") + buf.write("\2\u0137\u0138\7\177\2\2\u0138R\3\2\2\2\u0139\u013a\7") + buf.write("]\2\2\u013aT\3\2\2\2\u013b\u013c\7_\2\2\u013cV\3\2\2\2") + buf.write("\u013d\u013e\7A\2\2\u013eX\3\2\2\2\u013f\u0140\7\60\2") + buf.write("\2\u0140Z\3\2\2\2\u0141\u0142\7#\2\2\u0142\\\3\2\2\2\u0143") + buf.write("\u0144\7\u0080\2\2\u0144^\3\2\2\2\u0145\u0146\7\60\2\2") + buf.write("\u0146\u0147\7\60\2\2\u0147`\3\2\2\2\u0148\u0149\7\60") + buf.write("\2\2\u0149\u014a\7\60\2\2\u014a\u014b\7\60\2\2\u014bb") + buf.write("\3\2\2\2\u014c\u014d\7k\2\2\u014d\u014e\7u\2\2\u014ed") + buf.write("\3\2\2\2\u014f\u0150\7k\2\2\u0150\u0151\7u\2\2\u0151\u0152") + buf.write("\7p\2\2\u0152\u0153\7)\2\2\u0153\u0154\7v\2\2\u0154f\3") + buf.write("\2\2\2\u0155\u0156\7?\2\2\u0156\u0157\7?\2\2\u0157h\3") + buf.write("\2\2\2\u0158\u0159\7#\2\2\u0159\u015a\7?\2\2\u015aj\3") + buf.write("\2\2\2\u015b\u015c\7>\2\2\u015cl\3\2\2\2\u015d\u015e\7") + buf.write(">\2\2\u015e\u015f\7?\2\2\u015fn\3\2\2\2\u0160\u0161\7") + buf.write("@\2\2\u0161p\3\2\2\2\u0162\u0163\7@\2\2\u0163\u0164\7") + buf.write("?\2\2\u0164r\3\2\2\2\u0165\u0166\7p\2\2\u0166\u0167\7") + buf.write("q\2\2\u0167\u0168\7v\2\2\u0168t\3\2\2\2\u0169\u016a\7") + buf.write("c\2\2\u016a\u016b\7p\2\2\u016b\u016c\7f\2\2\u016cv\3\2") + buf.write("\2\2\u016d\u016e\7q\2\2\u016e\u016f\7t\2\2\u016fx\3\2") + buf.write("\2\2\u0170\u0171\7n\2\2\u0171\u0172\7c\2\2\u0172\u0173") + buf.write("\7o\2\2\u0173\u0174\7d\2\2\u0174\u0175\7f\2\2\u0175\u0176") + buf.write("\7c\2\2\u0176z\3\2\2\2\u0177\u0178\7/\2\2\u0178\u0179") + buf.write("\7@\2\2\u0179|\3\2\2\2\u017a\u017b\7v\2\2\u017b\u017c") + buf.write("\7t\2\2\u017c\u017d\7w\2\2\u017d\u017e\7g\2\2\u017e~\3") + buf.write("\2\2\2\u017f\u0180\7h\2\2\u0180\u0181\7c\2\2\u0181\u0182") + buf.write("\7n\2\2\u0182\u0183\7u\2\2\u0183\u0184\7g\2\2\u0184\u0080") + buf.write("\3\2\2\2\u0185\u0186\7p\2\2\u0186\u0187\7w\2\2\u0187\u0188") + buf.write("\7n\2\2\u0188\u0189\7n\2\2\u0189\u0082\3\2\2\2\u018a\u018b") + buf.write("\7X\2\2\u018b\u018c\7q\2\2\u018c\u018d\7k\2\2\u018d\u018e") + buf.write("\7f\2\2\u018e\u0084\3\2\2\2\u018f\u0190\7K\2\2\u0190\u0191") + buf.write("\7p\2\2\u0191\u0192\7v\2\2\u0192\u0086\3\2\2\2\u0193\u0194") + buf.write("\7H\2\2\u0194\u0195\7n\2\2\u0195\u0196\7q\2\2\u0196\u0197") + buf.write("\7c\2\2\u0197\u0198\7v\2\2\u0198\u0088\3\2\2\2\u0199\u019a") + buf.write("\7D\2\2\u019a\u019b\7q\2\2\u019b\u019c\7q\2\2\u019c\u019d") + buf.write("\7n\2\2\u019d\u008a\3\2\2\2\u019e\u019f\7E\2\2\u019f\u01a0") + buf.write("\7j\2\2\u01a0\u01a1\7c\2\2\u01a1\u01a2\7t\2\2\u01a2\u008c") + buf.write("\3\2\2\2\u01a3\u01a4\7U\2\2\u01a4\u01a5\7v\2\2\u01a5\u01a6") + buf.write("\7t\2\2\u01a6\u01a7\7k\2\2\u01a7\u01a8\7p\2\2\u01a8\u01a9") + buf.write("\7i\2\2\u01a9\u008e\3\2\2\2\u01aa\u01ac\5\u0099M\2\u01ab") + buf.write("\u01aa\3\2\2\2\u01ac\u01ad\3\2\2\2\u01ad\u01ab\3\2\2\2") + buf.write("\u01ad\u01ae\3\2\2\2\u01ae\u0090\3\2\2\2\u01af\u01b1\5") + buf.write("\u0099M\2\u01b0\u01af\3\2\2\2\u01b1\u01b2\3\2\2\2\u01b2") + buf.write("\u01b0\3\2\2\2\u01b2\u01b3\3\2\2\2\u01b3\u01b4\3\2\2\2") + buf.write("\u01b4\u01b6\7\60\2\2\u01b5\u01b7\5\u0099M\2\u01b6\u01b5") + buf.write("\3\2\2\2\u01b7\u01b8\3\2\2\2\u01b8\u01b6\3\2\2\2\u01b8") + buf.write("\u01b9\3\2\2\2\u01b9\u01c3\3\2\2\2\u01ba\u01bc\7g\2\2") + buf.write("\u01bb\u01bd\7/\2\2\u01bc\u01bb\3\2\2\2\u01bc\u01bd\3") + buf.write("\2\2\2\u01bd\u01bf\3\2\2\2\u01be\u01c0\5\u0099M\2\u01bf") + buf.write("\u01be\3\2\2\2\u01c0\u01c1\3\2\2\2\u01c1\u01bf\3\2\2\2") + buf.write("\u01c1\u01c2\3\2\2\2\u01c2\u01c4\3\2\2\2\u01c3\u01ba\3") + buf.write("\2\2\2\u01c3\u01c4\3\2\2\2\u01c4\u0092\3\2\2\2\u01c5\u01cb") + buf.write("\7)\2\2\u01c6\u01ca\n\2\2\2\u01c7\u01c8\7^\2\2\u01c8\u01ca") + buf.write("\t\3\2\2\u01c9\u01c6\3\2\2\2\u01c9\u01c7\3\2\2\2\u01ca") + buf.write("\u01cd\3\2\2\2\u01cb\u01c9\3\2\2\2\u01cb\u01cc\3\2\2\2") + buf.write("\u01cc\u01ce\3\2\2\2\u01cd\u01cb\3\2\2\2\u01ce\u01cf\7") + buf.write(")\2\2\u01cf\u0094\3\2\2\2\u01d0\u01d6\7$\2\2\u01d1\u01d5") + buf.write("\n\4\2\2\u01d2\u01d3\7^\2\2\u01d3\u01d5\t\5\2\2\u01d4") + buf.write("\u01d1\3\2\2\2\u01d4\u01d2\3\2\2\2\u01d5\u01d8\3\2\2\2") + buf.write("\u01d6\u01d4\3\2\2\2\u01d6\u01d7\3\2\2\2\u01d7\u01d9\3") + buf.write("\2\2\2\u01d8\u01d6\3\2\2\2\u01d9\u01da\7$\2\2\u01da\u0096") + buf.write("\3\2\2\2\u01db\u01df\5\u009bN\2\u01dc\u01de\5\u009dO\2") + buf.write("\u01dd\u01dc\3\2\2\2\u01de\u01e1\3\2\2\2\u01df\u01dd\3") + buf.write("\2\2\2\u01df\u01e0\3\2\2\2\u01e0\u0098\3\2\2\2\u01e1\u01df") + buf.write("\3\2\2\2\u01e2\u01e3\t\6\2\2\u01e3\u009a\3\2\2\2\u01e4") + buf.write("\u01e5\t\7\2\2\u01e5\u009c\3\2\2\2\u01e6\u01ea\5\u009b") + buf.write("N\2\u01e7\u01ea\5\u0099M\2\u01e8\u01ea\t\b\2\2\u01e9\u01e6") + buf.write("\3\2\2\2\u01e9\u01e7\3\2\2\2\u01e9\u01e8\3\2\2\2\u01ea") + buf.write("\u009e\3\2\2\2\u01eb\u01ec\7/\2\2\u01ec\u01ed\7/\2\2\u01ed") + buf.write("\u01f1\3\2\2\2\u01ee\u01f0\n\t\2\2\u01ef\u01ee\3\2\2\2") + buf.write("\u01f0\u01f3\3\2\2\2\u01f1\u01ef\3\2\2\2\u01f1\u01f2\3") + buf.write("\2\2\2\u01f2\u01f4\3\2\2\2\u01f3\u01f1\3\2\2\2\u01f4\u01f5") + buf.write("\bP\2\2\u01f5\u00a0\3\2\2\2\u01f6\u01f8\t\n\2\2\u01f7") + buf.write("\u01f6\3\2\2\2\u01f8\u01f9\3\2\2\2\u01f9\u01f7\3\2\2\2") + buf.write("\u01f9\u01fa\3\2\2\2\u01fa\u01fb\3\2\2\2\u01fb\u01fc\b") + buf.write("Q\2\2\u01fc\u00a2\3\2\2\2\u01fd\u01fe\13\2\2\2\u01fe\u00a4") + buf.write("\3\2\2\2\21\2\u01ad\u01b2\u01b8\u01bc\u01c1\u01c3\u01c9") + buf.write("\u01cb\u01d4\u01d6\u01df\u01e9\u01f1\u01f9\3\b\2\2") return buf.getvalue() @@ -296,14 +301,16 @@ class PyxellLexer(Lexer): T__65 = 66 T__66 = 67 T__67 = 68 - INT = 69 - FLOAT = 70 - CHAR = 71 - STRING = 72 - ID = 73 - COMMENT = 74 - WS = 75 - ERR = 76 + T__68 = 69 + T__69 = 70 + INT = 71 + FLOAT = 72 + CHAR = 73 + STRING = 74 + ID = 75 + COMMENT = 76 + WS = 77 + ERR = 78 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -316,10 +323,10 @@ class PyxellLexer(Lexer): "'if'", "'do'", "'elif'", "'else'", "'while'", "'until'", "'for'", "'in'", "'step'", "'func'", "'('", "')'", "'def'", "'extern'", "':'", "'{'", "'}'", "'['", "']'", "'?'", "'.'", "'!'", "'~'", - "'..'", "'...'", "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", - "'not'", "'and'", "'or'", "'lambda'", "'->'", "'true'", "'false'", - "'null'", "'Void'", "'Int'", "'Float'", "'Bool'", "'Char'", - "'String'" ] + "'..'", "'...'", "'is'", "'isn't'", "'=='", "'!='", "'<'", "'<='", + "'>'", "'>='", "'not'", "'and'", "'or'", "'lambda'", "'->'", + "'true'", "'false'", "'null'", "'Void'", "'Int'", "'Float'", + "'Bool'", "'Char'", "'String'" ] symbolicNames = [ "", "INT", "FLOAT", "CHAR", "STRING", "ID", "COMMENT", "WS", "ERR" ] @@ -335,8 +342,8 @@ class PyxellLexer(Lexer): "T__50", "T__51", "T__52", "T__53", "T__54", "T__55", "T__56", "T__57", "T__58", "T__59", "T__60", "T__61", "T__62", "T__63", "T__64", "T__65", "T__66", "T__67", - "INT", "FLOAT", "CHAR", "STRING", "ID", "DIGIT", "ID_START", - "ID_CONT", "COMMENT", "WS", "ERR" ] + "T__68", "T__69", "INT", "FLOAT", "CHAR", "STRING", "ID", + "DIGIT", "ID_START", "ID_CONT", "COMMENT", "WS", "ERR" ] grammarFileName = "Pyxell.g4" diff --git a/src/antlr/PyxellLexer.tokens b/src/antlr/PyxellLexer.tokens index a3ded172..3bde8676 100644 --- a/src/antlr/PyxellLexer.tokens +++ b/src/antlr/PyxellLexer.tokens @@ -66,14 +66,16 @@ T__64=65 T__65=66 T__66=67 T__67=68 -INT=69 -FLOAT=70 -CHAR=71 -STRING=72 -ID=73 -COMMENT=74 -WS=75 -ERR=76 +T__68=69 +T__69=70 +INT=71 +FLOAT=72 +CHAR=73 +STRING=74 +ID=75 +COMMENT=76 +WS=77 +ERR=78 ';'=1 'use'=2 'only'=3 @@ -122,23 +124,25 @@ ERR=76 '~'=46 '..'=47 '...'=48 -'=='=49 -'!='=50 -'<'=51 -'<='=52 -'>'=53 -'>='=54 -'not'=55 -'and'=56 -'or'=57 -'lambda'=58 -'->'=59 -'true'=60 -'false'=61 -'null'=62 -'Void'=63 -'Int'=64 -'Float'=65 -'Bool'=66 -'Char'=67 -'String'=68 +'is'=49 +'isn\'t'=50 +'=='=51 +'!='=52 +'<'=53 +'<='=54 +'>'=55 +'>='=56 +'not'=57 +'and'=58 +'or'=59 +'lambda'=60 +'->'=61 +'true'=62 +'false'=63 +'null'=64 +'Void'=65 +'Int'=66 +'Float'=67 +'Bool'=68 +'Char'=69 +'String'=70 diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index 8b5c8511..f657e4f8 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -8,8 +8,8 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3N") - buf.write("\u0185\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3P") + buf.write("\u0188\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16") buf.write("\t\16\4\17\t\17\4\20\t\20\3\2\7\2\"\n\2\f\2\16\2%\13\2") buf.write("\3\2\3\2\3\3\3\3\3\3\3\3\5\3-\n\3\3\4\3\4\3\4\3\4\3\4") @@ -31,173 +31,175 @@ def serializedATN(): buf.write("\3\t\3\t\5\t\u00de\n\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") buf.write("\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") - buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\5\t\u010f") - buf.write("\n\t\3\t\3\t\5\t\u0113\n\t\3\t\3\t\5\t\u0117\n\t\5\t\u0119") - buf.write("\n\t\3\t\3\t\3\t\5\t\u011e\n\t\3\t\3\t\3\t\3\t\3\t\3\t") - buf.write("\3\t\7\t\u0127\n\t\f\t\16\t\u012a\13\t\3\t\5\t\u012d\n") - buf.write("\t\3\t\3\t\3\t\3\t\3\t\7\t\u0134\n\t\f\t\16\t\u0137\13") - buf.write("\t\3\n\3\n\3\n\7\n\u013c\n\n\f\n\16\n\u013f\13\n\3\n\3") - buf.write("\n\3\13\3\13\3\13\3\f\3\f\3\f\3\f\3\f\3\f\5\f\u014c\n") - buf.write("\f\3\f\3\f\5\f\u0150\n\f\3\r\3\r\5\r\u0154\n\r\3\r\3\r") - buf.write("\3\16\3\16\3\16\3\16\3\16\3\16\3\16\5\16\u015f\n\16\3") - buf.write("\17\3\17\7\17\u0163\n\17\f\17\16\17\u0166\13\17\3\17\3") - buf.write("\17\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20") - buf.write("\3\20\3\20\5\20\u0176\n\20\3\20\3\20\3\20\3\20\3\20\3") - buf.write("\20\3\20\3\20\7\20\u0180\n\20\f\20\16\20\u0183\13\20\3") - buf.write("\20\2\4\20\36\21\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36") - buf.write("\2\f\3\2\13\25\3\2\26\27\4\2\17\20\60\60\3\2\f\16\3\2") - buf.write("\17\20\3\2\21\22\3\2\61\62\3\2\638\3\2>?\3\2AF\2\u01c8") - buf.write("\2#\3\2\2\2\4,\3\2\2\2\6V\3\2\2\2\bX\3\2\2\2\n\u00a0\3") - buf.write("\2\2\2\f\u00a2\3\2\2\2\16\u00a8\3\2\2\2\20\u00dd\3\2\2") - buf.write("\2\22\u013d\3\2\2\2\24\u0142\3\2\2\2\26\u014f\3\2\2\2") - buf.write("\30\u0153\3\2\2\2\32\u015e\3\2\2\2\34\u0164\3\2\2\2\36") - buf.write("\u0175\3\2\2\2 \"\5\4\3\2! \3\2\2\2\"%\3\2\2\2#!\3\2\2") - buf.write("\2#$\3\2\2\2$&\3\2\2\2%#\3\2\2\2&\'\7\2\2\3\'\3\3\2\2") - buf.write("\2()\5\6\4\2)*\7\3\2\2*-\3\2\2\2+-\5\n\6\2,(\3\2\2\2,") - buf.write("+\3\2\2\2-\5\3\2\2\2./\7\4\2\2/\66\7K\2\2\60\61\7\5\2") - buf.write("\2\61\67\5\34\17\2\62\63\7\6\2\2\63\67\5\34\17\2\64\65") - buf.write("\7\7\2\2\65\67\7K\2\2\66\60\3\2\2\2\66\62\3\2\2\2\66\64") - buf.write("\3\2\2\2\66\67\3\2\2\2\67W\3\2\2\28W\7\b\2\29;\7\t\2\2") - buf.write(":<\5\22\n\2;:\3\2\2\2;<\3\2\2\2\5\36\20\2") - buf.write(">A\7K\2\2?@\7\n\2\2@B\5\22\n\2A?\3\2\2\2AB\3\2\2\2BW\3") - buf.write("\2\2\2CD\5\b\5\2DE\7\n\2\2EG\3\2\2\2FC\3\2\2\2GJ\3\2\2") - buf.write("\2HF\3\2\2\2HI\3\2\2\2IK\3\2\2\2JH\3\2\2\2KW\5\22\n\2") - buf.write("LM\5\20\t\2MN\t\2\2\2NO\7\n\2\2OP\5\20\t\2PW\3\2\2\2Q") - buf.write("W\t\3\2\2RT\7\30\2\2SU\5\22\n\2TS\3\2\2\2TU\3\2\2\2UW") - buf.write("\3\2\2\2V.\3\2\2\2V8\3\2\2\2V9\3\2\2\2V=\3\2\2\2VH\3\2") - buf.write("\2\2VL\3\2\2\2VQ\3\2\2\2VR\3\2\2\2W\7\3\2\2\2X]\5\20\t") - buf.write("\2YZ\7\31\2\2Z\\\5\20\t\2[Y\3\2\2\2\\_\3\2\2\2][\3\2\2") - buf.write("\2]^\3\2\2\2^\t\3\2\2\2_]\3\2\2\2`a\7\32\2\2ab\5\20\t") - buf.write("\2bc\7\33\2\2ck\5\16\b\2de\7\34\2\2ef\5\20\t\2fg\7\33") - buf.write("\2\2gh\5\16\b\2hj\3\2\2\2id\3\2\2\2jm\3\2\2\2ki\3\2\2") - buf.write("\2kl\3\2\2\2lq\3\2\2\2mk\3\2\2\2no\7\35\2\2op\7\33\2\2") - buf.write("pr\5\16\b\2qn\3\2\2\2qr\3\2\2\2r\u00a1\3\2\2\2st\7\36") - buf.write("\2\2tu\5\20\t\2uv\7\33\2\2vw\5\16\b\2w\u00a1\3\2\2\2x") - buf.write("y\7\37\2\2yz\5\20\t\2z{\7\33\2\2{|\5\16\b\2|\u00a1\3\2") - buf.write("\2\2}~\7 \2\2~\177\5\22\n\2\177\u0080\7!\2\2\u0080\u0083") - buf.write("\5\22\n\2\u0081\u0082\7\"\2\2\u0082\u0084\5\22\n\2\u0083") - buf.write("\u0081\3\2\2\2\u0083\u0084\3\2\2\2\u0084\u0085\3\2\2\2") - buf.write("\u0085\u0086\7\33\2\2\u0086\u0087\5\16\b\2\u0087\u00a1") - buf.write("\3\2\2\2\u0088\u0089\7#\2\2\u0089\u008a\7K\2\2\u008a\u0090") - buf.write("\7$\2\2\u008b\u008c\5\f\7\2\u008c\u008d\7\31\2\2\u008d") - buf.write("\u008f\3\2\2\2\u008e\u008b\3\2\2\2\u008f\u0092\3\2\2\2") - buf.write("\u0090\u008e\3\2\2\2\u0090\u0091\3\2\2\2\u0091\u0094\3") - buf.write("\2\2\2\u0092\u0090\3\2\2\2\u0093\u0095\5\f\7\2\u0094\u0093") - buf.write("\3\2\2\2\u0094\u0095\3\2\2\2\u0095\u0096\3\2\2\2\u0096") - buf.write("\u0098\7%\2\2\u0097\u0099\5\36\20\2\u0098\u0097\3\2\2") - buf.write("\2\u0098\u0099\3\2\2\2\u0099\u009e\3\2\2\2\u009a\u009b") - buf.write("\7&\2\2\u009b\u009f\5\16\b\2\u009c\u009d\7\'\2\2\u009d") - buf.write("\u009f\7\3\2\2\u009e\u009a\3\2\2\2\u009e\u009c\3\2\2\2") - buf.write("\u009f\u00a1\3\2\2\2\u00a0`\3\2\2\2\u00a0s\3\2\2\2\u00a0") - buf.write("x\3\2\2\2\u00a0}\3\2\2\2\u00a0\u0088\3\2\2\2\u00a1\13") - buf.write("\3\2\2\2\u00a2\u00a3\5\36\20\2\u00a3\u00a6\7K\2\2\u00a4") - buf.write("\u00a5\7(\2\2\u00a5\u00a7\5\20\t\2\u00a6\u00a4\3\2\2\2") - buf.write("\u00a6\u00a7\3\2\2\2\u00a7\r\3\2\2\2\u00a8\u00aa\7)\2") - buf.write("\2\u00a9\u00ab\5\4\3\2\u00aa\u00a9\3\2\2\2\u00ab\u00ac") - buf.write("\3\2\2\2\u00ac\u00aa\3\2\2\2\u00ac\u00ad\3\2\2\2\u00ad") - buf.write("\u00ae\3\2\2\2\u00ae\u00af\7*\2\2\u00af\17\3\2\2\2\u00b0") - buf.write("\u00b1\b\t\1\2\u00b1\u00de\5\32\16\2\u00b2\u00b3\7$\2") - buf.write("\2\u00b3\u00b4\5\22\n\2\u00b4\u00b5\7%\2\2\u00b5\u00de") - buf.write("\3\2\2\2\u00b6\u00bc\7+\2\2\u00b7\u00b8\5\20\t\2\u00b8") - buf.write("\u00b9\7\31\2\2\u00b9\u00bb\3\2\2\2\u00ba\u00b7\3\2\2") - buf.write("\2\u00bb\u00be\3\2\2\2\u00bc\u00ba\3\2\2\2\u00bc\u00bd") - buf.write("\3\2\2\2\u00bd\u00c0\3\2\2\2\u00be\u00bc\3\2\2\2\u00bf") - buf.write("\u00c1\5\20\t\2\u00c0\u00bf\3\2\2\2\u00c0\u00c1\3\2\2") - buf.write("\2\u00c1\u00c2\3\2\2\2\u00c2\u00de\7,\2\2\u00c3\u00c4") - buf.write("\7+\2\2\u00c4\u00c6\5\20\t\2\u00c5\u00c7\5\26\f\2\u00c6") - buf.write("\u00c5\3\2\2\2\u00c7\u00c8\3\2\2\2\u00c8\u00c6\3\2\2\2") - buf.write("\u00c8\u00c9\3\2\2\2\u00c9\u00ca\3\2\2\2\u00ca\u00cb\7") - buf.write(",\2\2\u00cb\u00de\3\2\2\2\u00cc\u00cd\t\4\2\2\u00cd\u00de") - buf.write("\5\20\t\21\u00ce\u00cf\79\2\2\u00cf\u00de\5\20\t\7\u00d0") - buf.write("\u00d5\7<\2\2\u00d1\u00d2\7K\2\2\u00d2\u00d4\7\31\2\2") - buf.write("\u00d3\u00d1\3\2\2\2\u00d4\u00d7\3\2\2\2\u00d5\u00d3\3") - buf.write("\2\2\2\u00d5\u00d6\3\2\2\2\u00d6\u00d9\3\2\2\2\u00d7\u00d5") - buf.write("\3\2\2\2\u00d8\u00da\7K\2\2\u00d9\u00d8\3\2\2\2\u00d9") - buf.write("\u00da\3\2\2\2\u00da\u00db\3\2\2\2\u00db\u00dc\7=\2\2") - buf.write("\u00dc\u00de\5\20\t\3\u00dd\u00b0\3\2\2\2\u00dd\u00b2") - buf.write("\3\2\2\2\u00dd\u00b6\3\2\2\2\u00dd\u00c3\3\2\2\2\u00dd") - buf.write("\u00cc\3\2\2\2\u00dd\u00ce\3\2\2\2\u00dd\u00d0\3\2\2\2") - buf.write("\u00de\u0135\3\2\2\2\u00df\u00e0\f\22\2\2\u00e0\u00e1") - buf.write("\7\13\2\2\u00e1\u0134\5\20\t\22\u00e2\u00e3\f\20\2\2\u00e3") - buf.write("\u00e4\t\5\2\2\u00e4\u0134\5\20\t\21\u00e5\u00e6\f\17") - buf.write("\2\2\u00e6\u00e7\t\6\2\2\u00e7\u0134\5\20\t\20\u00e8\u00e9") - buf.write("\f\16\2\2\u00e9\u00ea\t\7\2\2\u00ea\u0134\5\20\t\17\u00eb") - buf.write("\u00ec\f\r\2\2\u00ec\u00ed\7\23\2\2\u00ed\u0134\5\20\t") - buf.write("\16\u00ee\u00ef\f\f\2\2\u00ef\u00f0\7\24\2\2\u00f0\u0134") - buf.write("\5\20\t\r\u00f1\u00f2\f\13\2\2\u00f2\u00f3\7\25\2\2\u00f3") - buf.write("\u0134\5\20\t\f\u00f4\u00f5\f\n\2\2\u00f5\u00f6\t\b\2") - buf.write("\2\u00f6\u0134\5\20\t\13\u00f7\u00f8\f\b\2\2\u00f8\u00f9") - buf.write("\t\t\2\2\u00f9\u0134\5\20\t\b\u00fa\u00fb\f\6\2\2\u00fb") - buf.write("\u00fc\7:\2\2\u00fc\u0134\5\20\t\6\u00fd\u00fe\f\5\2\2") - buf.write("\u00fe\u00ff\7;\2\2\u00ff\u0134\5\20\t\5\u0100\u0101\f") - buf.write("\4\2\2\u0101\u0102\7-\2\2\u0102\u0103\5\20\t\2\u0103\u0104") - buf.write("\7(\2\2\u0104\u0105\5\20\t\4\u0105\u0134\3\2\2\2\u0106") - buf.write("\u0107\f\27\2\2\u0107\u0108\7+\2\2\u0108\u0109\5\22\n") - buf.write("\2\u0109\u010a\7,\2\2\u010a\u0134\3\2\2\2\u010b\u010c") - buf.write("\f\26\2\2\u010c\u010e\7+\2\2\u010d\u010f\5\20\t\2\u010e") - buf.write("\u010d\3\2\2\2\u010e\u010f\3\2\2\2\u010f\u0110\3\2\2\2") - buf.write("\u0110\u0112\7(\2\2\u0111\u0113\5\20\t\2\u0112\u0111\3") - buf.write("\2\2\2\u0112\u0113\3\2\2\2\u0113\u0118\3\2\2\2\u0114\u0116") - buf.write("\7(\2\2\u0115\u0117\5\20\t\2\u0116\u0115\3\2\2\2\u0116") - buf.write("\u0117\3\2\2\2\u0117\u0119\3\2\2\2\u0118\u0114\3\2\2\2") - buf.write("\u0118\u0119\3\2\2\2\u0119\u011a\3\2\2\2\u011a\u0134\7") - buf.write(",\2\2\u011b\u011d\f\25\2\2\u011c\u011e\7-\2\2\u011d\u011c") - buf.write("\3\2\2\2\u011d\u011e\3\2\2\2\u011e\u011f\3\2\2\2\u011f") - buf.write("\u0120\7.\2\2\u0120\u0134\7K\2\2\u0121\u0122\f\24\2\2") - buf.write("\u0122\u0128\7$\2\2\u0123\u0124\5\30\r\2\u0124\u0125\7") - buf.write("\31\2\2\u0125\u0127\3\2\2\2\u0126\u0123\3\2\2\2\u0127") - buf.write("\u012a\3\2\2\2\u0128\u0126\3\2\2\2\u0128\u0129\3\2\2\2") - buf.write("\u0129\u012c\3\2\2\2\u012a\u0128\3\2\2\2\u012b\u012d\5") - buf.write("\30\r\2\u012c\u012b\3\2\2\2\u012c\u012d\3\2\2\2\u012d") - buf.write("\u012e\3\2\2\2\u012e\u0134\7%\2\2\u012f\u0130\f\23\2\2") - buf.write("\u0130\u0134\7/\2\2\u0131\u0132\f\t\2\2\u0132\u0134\7") - buf.write("\62\2\2\u0133\u00df\3\2\2\2\u0133\u00e2\3\2\2\2\u0133") - buf.write("\u00e5\3\2\2\2\u0133\u00e8\3\2\2\2\u0133\u00eb\3\2\2\2") - buf.write("\u0133\u00ee\3\2\2\2\u0133\u00f1\3\2\2\2\u0133\u00f4\3") - buf.write("\2\2\2\u0133\u00f7\3\2\2\2\u0133\u00fa\3\2\2\2\u0133\u00fd") - buf.write("\3\2\2\2\u0133\u0100\3\2\2\2\u0133\u0106\3\2\2\2\u0133") - buf.write("\u010b\3\2\2\2\u0133\u011b\3\2\2\2\u0133\u0121\3\2\2\2") - buf.write("\u0133\u012f\3\2\2\2\u0133\u0131\3\2\2\2\u0134\u0137\3") - buf.write("\2\2\2\u0135\u0133\3\2\2\2\u0135\u0136\3\2\2\2\u0136\21") - buf.write("\3\2\2\2\u0137\u0135\3\2\2\2\u0138\u0139\5\20\t\2\u0139") - buf.write("\u013a\7\31\2\2\u013a\u013c\3\2\2\2\u013b\u0138\3\2\2") - buf.write("\2\u013c\u013f\3\2\2\2\u013d\u013b\3\2\2\2\u013d\u013e") - buf.write("\3\2\2\2\u013e\u0140\3\2\2\2\u013f\u013d\3\2\2\2\u0140") - buf.write("\u0141\5\20\t\2\u0141\23\3\2\2\2\u0142\u0143\5\22\n\2") - buf.write("\u0143\u0144\7\2\2\3\u0144\25\3\2\2\2\u0145\u0146\7 \2") - buf.write("\2\u0146\u0147\5\22\n\2\u0147\u0148\7!\2\2\u0148\u014b") - buf.write("\5\22\n\2\u0149\u014a\7\"\2\2\u014a\u014c\5\22\n\2\u014b") - buf.write("\u0149\3\2\2\2\u014b\u014c\3\2\2\2\u014c\u0150\3\2\2\2") - buf.write("\u014d\u014e\7\32\2\2\u014e\u0150\5\20\t\2\u014f\u0145") - buf.write("\3\2\2\2\u014f\u014d\3\2\2\2\u0150\27\3\2\2\2\u0151\u0152") - buf.write("\7K\2\2\u0152\u0154\7\n\2\2\u0153\u0151\3\2\2\2\u0153") - buf.write("\u0154\3\2\2\2\u0154\u0155\3\2\2\2\u0155\u0156\5\20\t") - buf.write("\2\u0156\31\3\2\2\2\u0157\u015f\7G\2\2\u0158\u015f\7H") - buf.write("\2\2\u0159\u015f\t\n\2\2\u015a\u015f\7I\2\2\u015b\u015f") - buf.write("\7J\2\2\u015c\u015f\7@\2\2\u015d\u015f\7K\2\2\u015e\u0157") - buf.write("\3\2\2\2\u015e\u0158\3\2\2\2\u015e\u0159\3\2\2\2\u015e") - buf.write("\u015a\3\2\2\2\u015e\u015b\3\2\2\2\u015e\u015c\3\2\2\2") - buf.write("\u015e\u015d\3\2\2\2\u015f\33\3\2\2\2\u0160\u0161\7K\2") - buf.write("\2\u0161\u0163\7\31\2\2\u0162\u0160\3\2\2\2\u0163\u0166") - buf.write("\3\2\2\2\u0164\u0162\3\2\2\2\u0164\u0165\3\2\2\2\u0165") - buf.write("\u0167\3\2\2\2\u0166\u0164\3\2\2\2\u0167\u0168\7K\2\2") - buf.write("\u0168\35\3\2\2\2\u0169\u016a\b\20\1\2\u016a\u0176\t\13") - buf.write("\2\2\u016b\u016c\7$\2\2\u016c\u016d\5\36\20\2\u016d\u016e") - buf.write("\7%\2\2\u016e\u0176\3\2\2\2\u016f\u0170\7+\2\2\u0170\u0171") - buf.write("\5\36\20\2\u0171\u0172\7,\2\2\u0172\u0176\3\2\2\2\u0173") - buf.write("\u0174\7=\2\2\u0174\u0176\5\36\20\3\u0175\u0169\3\2\2") - buf.write("\2\u0175\u016b\3\2\2\2\u0175\u016f\3\2\2\2\u0175\u0173") - buf.write("\3\2\2\2\u0176\u0181\3\2\2\2\u0177\u0178\f\5\2\2\u0178") - buf.write("\u0179\7\f\2\2\u0179\u0180\5\36\20\5\u017a\u017b\f\4\2") - buf.write("\2\u017b\u017c\7=\2\2\u017c\u0180\5\36\20\4\u017d\u017e") - buf.write("\f\6\2\2\u017e\u0180\7-\2\2\u017f\u0177\3\2\2\2\u017f") - buf.write("\u017a\3\2\2\2\u017f\u017d\3\2\2\2\u0180\u0183\3\2\2\2") - buf.write("\u0181\u017f\3\2\2\2\u0181\u0182\3\2\2\2\u0182\37\3\2") - buf.write("\2\2\u0183\u0181\3\2\2\2-#,\66;AHTV]kq\u0083\u0090\u0094") + buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") + buf.write("\t\3\t\5\t\u0112\n\t\3\t\3\t\5\t\u0116\n\t\3\t\3\t\5\t") + buf.write("\u011a\n\t\5\t\u011c\n\t\3\t\3\t\3\t\5\t\u0121\n\t\3\t") + buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\7\t\u012a\n\t\f\t\16\t\u012d") + buf.write("\13\t\3\t\5\t\u0130\n\t\3\t\3\t\3\t\3\t\3\t\7\t\u0137") + buf.write("\n\t\f\t\16\t\u013a\13\t\3\n\3\n\3\n\7\n\u013f\n\n\f\n") + buf.write("\16\n\u0142\13\n\3\n\3\n\3\13\3\13\3\13\3\f\3\f\3\f\3") + buf.write("\f\3\f\3\f\5\f\u014f\n\f\3\f\3\f\5\f\u0153\n\f\3\r\3\r") + buf.write("\5\r\u0157\n\r\3\r\3\r\3\16\3\16\3\16\3\16\3\16\3\16\3") + buf.write("\16\5\16\u0162\n\16\3\17\3\17\7\17\u0166\n\17\f\17\16") + buf.write("\17\u0169\13\17\3\17\3\17\3\20\3\20\3\20\3\20\3\20\3\20") + buf.write("\3\20\3\20\3\20\3\20\3\20\3\20\5\20\u0179\n\20\3\20\3") + buf.write("\20\3\20\3\20\3\20\3\20\3\20\3\20\7\20\u0183\n\20\f\20") + buf.write("\16\20\u0186\13\20\3\20\2\4\20\36\21\2\4\6\b\n\f\16\20") + buf.write("\22\24\26\30\32\34\36\2\r\3\2\13\25\3\2\26\27\4\2\17\20") + buf.write("\60\60\3\2\f\16\3\2\17\20\3\2\21\22\3\2\61\62\3\2\63\64") + buf.write("\3\2\65:\3\2@A\3\2CH\2\u01cc\2#\3\2\2\2\4,\3\2\2\2\6V") + buf.write("\3\2\2\2\bX\3\2\2\2\n\u00a0\3\2\2\2\f\u00a2\3\2\2\2\16") + buf.write("\u00a8\3\2\2\2\20\u00dd\3\2\2\2\22\u0140\3\2\2\2\24\u0145") + buf.write("\3\2\2\2\26\u0152\3\2\2\2\30\u0156\3\2\2\2\32\u0161\3") + buf.write("\2\2\2\34\u0167\3\2\2\2\36\u0178\3\2\2\2 \"\5\4\3\2! ") + buf.write("\3\2\2\2\"%\3\2\2\2#!\3\2\2\2#$\3\2\2\2$&\3\2\2\2%#\3") + buf.write("\2\2\2&\'\7\2\2\3\'\3\3\2\2\2()\5\6\4\2)*\7\3\2\2*-\3") + buf.write("\2\2\2+-\5\n\6\2,(\3\2\2\2,+\3\2\2\2-\5\3\2\2\2./\7\4") + buf.write("\2\2/\66\7M\2\2\60\61\7\5\2\2\61\67\5\34\17\2\62\63\7") + buf.write("\6\2\2\63\67\5\34\17\2\64\65\7\7\2\2\65\67\7M\2\2\66\60") + buf.write("\3\2\2\2\66\62\3\2\2\2\66\64\3\2\2\2\66\67\3\2\2\2\67") + buf.write("W\3\2\2\28W\7\b\2\29;\7\t\2\2:<\5\22\n\2;:\3\2\2\2;<\3") + buf.write("\2\2\2\5\36\20\2>A\7M\2\2?@\7\n\2\2@B\5\22") + buf.write("\n\2A?\3\2\2\2AB\3\2\2\2BW\3\2\2\2CD\5\b\5\2DE\7\n\2\2") + buf.write("EG\3\2\2\2FC\3\2\2\2GJ\3\2\2\2HF\3\2\2\2HI\3\2\2\2IK\3") + buf.write("\2\2\2JH\3\2\2\2KW\5\22\n\2LM\5\20\t\2MN\t\2\2\2NO\7\n") + buf.write("\2\2OP\5\20\t\2PW\3\2\2\2QW\t\3\2\2RT\7\30\2\2SU\5\22") + buf.write("\n\2TS\3\2\2\2TU\3\2\2\2UW\3\2\2\2V.\3\2\2\2V8\3\2\2\2") + buf.write("V9\3\2\2\2V=\3\2\2\2VH\3\2\2\2VL\3\2\2\2VQ\3\2\2\2VR\3") + buf.write("\2\2\2W\7\3\2\2\2X]\5\20\t\2YZ\7\31\2\2Z\\\5\20\t\2[Y") + buf.write("\3\2\2\2\\_\3\2\2\2][\3\2\2\2]^\3\2\2\2^\t\3\2\2\2_]\3") + buf.write("\2\2\2`a\7\32\2\2ab\5\20\t\2bc\7\33\2\2ck\5\16\b\2de\7") + buf.write("\34\2\2ef\5\20\t\2fg\7\33\2\2gh\5\16\b\2hj\3\2\2\2id\3") + buf.write("\2\2\2jm\3\2\2\2ki\3\2\2\2kl\3\2\2\2lq\3\2\2\2mk\3\2\2") + buf.write("\2no\7\35\2\2op\7\33\2\2pr\5\16\b\2qn\3\2\2\2qr\3\2\2") + buf.write("\2r\u00a1\3\2\2\2st\7\36\2\2tu\5\20\t\2uv\7\33\2\2vw\5") + buf.write("\16\b\2w\u00a1\3\2\2\2xy\7\37\2\2yz\5\20\t\2z{\7\33\2") + buf.write("\2{|\5\16\b\2|\u00a1\3\2\2\2}~\7 \2\2~\177\5\22\n\2\177") + buf.write("\u0080\7!\2\2\u0080\u0083\5\22\n\2\u0081\u0082\7\"\2\2") + buf.write("\u0082\u0084\5\22\n\2\u0083\u0081\3\2\2\2\u0083\u0084") + buf.write("\3\2\2\2\u0084\u0085\3\2\2\2\u0085\u0086\7\33\2\2\u0086") + buf.write("\u0087\5\16\b\2\u0087\u00a1\3\2\2\2\u0088\u0089\7#\2\2") + buf.write("\u0089\u008a\7M\2\2\u008a\u0090\7$\2\2\u008b\u008c\5\f") + buf.write("\7\2\u008c\u008d\7\31\2\2\u008d\u008f\3\2\2\2\u008e\u008b") + buf.write("\3\2\2\2\u008f\u0092\3\2\2\2\u0090\u008e\3\2\2\2\u0090") + buf.write("\u0091\3\2\2\2\u0091\u0094\3\2\2\2\u0092\u0090\3\2\2\2") + buf.write("\u0093\u0095\5\f\7\2\u0094\u0093\3\2\2\2\u0094\u0095\3") + buf.write("\2\2\2\u0095\u0096\3\2\2\2\u0096\u0098\7%\2\2\u0097\u0099") + buf.write("\5\36\20\2\u0098\u0097\3\2\2\2\u0098\u0099\3\2\2\2\u0099") + buf.write("\u009e\3\2\2\2\u009a\u009b\7&\2\2\u009b\u009f\5\16\b\2") + buf.write("\u009c\u009d\7\'\2\2\u009d\u009f\7\3\2\2\u009e\u009a\3") + buf.write("\2\2\2\u009e\u009c\3\2\2\2\u009f\u00a1\3\2\2\2\u00a0`") + buf.write("\3\2\2\2\u00a0s\3\2\2\2\u00a0x\3\2\2\2\u00a0}\3\2\2\2") + buf.write("\u00a0\u0088\3\2\2\2\u00a1\13\3\2\2\2\u00a2\u00a3\5\36") + buf.write("\20\2\u00a3\u00a6\7M\2\2\u00a4\u00a5\7(\2\2\u00a5\u00a7") + buf.write("\5\20\t\2\u00a6\u00a4\3\2\2\2\u00a6\u00a7\3\2\2\2\u00a7") + buf.write("\r\3\2\2\2\u00a8\u00aa\7)\2\2\u00a9\u00ab\5\4\3\2\u00aa") + buf.write("\u00a9\3\2\2\2\u00ab\u00ac\3\2\2\2\u00ac\u00aa\3\2\2\2") + buf.write("\u00ac\u00ad\3\2\2\2\u00ad\u00ae\3\2\2\2\u00ae\u00af\7") + buf.write("*\2\2\u00af\17\3\2\2\2\u00b0\u00b1\b\t\1\2\u00b1\u00de") + buf.write("\5\32\16\2\u00b2\u00b3\7$\2\2\u00b3\u00b4\5\22\n\2\u00b4") + buf.write("\u00b5\7%\2\2\u00b5\u00de\3\2\2\2\u00b6\u00bc\7+\2\2\u00b7") + buf.write("\u00b8\5\20\t\2\u00b8\u00b9\7\31\2\2\u00b9\u00bb\3\2\2") + buf.write("\2\u00ba\u00b7\3\2\2\2\u00bb\u00be\3\2\2\2\u00bc\u00ba") + buf.write("\3\2\2\2\u00bc\u00bd\3\2\2\2\u00bd\u00c0\3\2\2\2\u00be") + buf.write("\u00bc\3\2\2\2\u00bf\u00c1\5\20\t\2\u00c0\u00bf\3\2\2") + buf.write("\2\u00c0\u00c1\3\2\2\2\u00c1\u00c2\3\2\2\2\u00c2\u00de") + buf.write("\7,\2\2\u00c3\u00c4\7+\2\2\u00c4\u00c6\5\20\t\2\u00c5") + buf.write("\u00c7\5\26\f\2\u00c6\u00c5\3\2\2\2\u00c7\u00c8\3\2\2") + buf.write("\2\u00c8\u00c6\3\2\2\2\u00c8\u00c9\3\2\2\2\u00c9\u00ca") + buf.write("\3\2\2\2\u00ca\u00cb\7,\2\2\u00cb\u00de\3\2\2\2\u00cc") + buf.write("\u00cd\t\4\2\2\u00cd\u00de\5\20\t\22\u00ce\u00cf\7;\2") + buf.write("\2\u00cf\u00de\5\20\t\7\u00d0\u00d5\7>\2\2\u00d1\u00d2") + buf.write("\7M\2\2\u00d2\u00d4\7\31\2\2\u00d3\u00d1\3\2\2\2\u00d4") + buf.write("\u00d7\3\2\2\2\u00d5\u00d3\3\2\2\2\u00d5\u00d6\3\2\2\2") + buf.write("\u00d6\u00d9\3\2\2\2\u00d7\u00d5\3\2\2\2\u00d8\u00da\7") + buf.write("M\2\2\u00d9\u00d8\3\2\2\2\u00d9\u00da\3\2\2\2\u00da\u00db") + buf.write("\3\2\2\2\u00db\u00dc\7?\2\2\u00dc\u00de\5\20\t\3\u00dd") + buf.write("\u00b0\3\2\2\2\u00dd\u00b2\3\2\2\2\u00dd\u00b6\3\2\2\2") + buf.write("\u00dd\u00c3\3\2\2\2\u00dd\u00cc\3\2\2\2\u00dd\u00ce\3") + buf.write("\2\2\2\u00dd\u00d0\3\2\2\2\u00de\u0138\3\2\2\2\u00df\u00e0") + buf.write("\f\23\2\2\u00e0\u00e1\7\13\2\2\u00e1\u0137\5\20\t\23\u00e2") + buf.write("\u00e3\f\21\2\2\u00e3\u00e4\t\5\2\2\u00e4\u0137\5\20\t") + buf.write("\22\u00e5\u00e6\f\20\2\2\u00e6\u00e7\t\6\2\2\u00e7\u0137") + buf.write("\5\20\t\21\u00e8\u00e9\f\17\2\2\u00e9\u00ea\t\7\2\2\u00ea") + buf.write("\u0137\5\20\t\20\u00eb\u00ec\f\16\2\2\u00ec\u00ed\7\23") + buf.write("\2\2\u00ed\u0137\5\20\t\17\u00ee\u00ef\f\r\2\2\u00ef\u00f0") + buf.write("\7\24\2\2\u00f0\u0137\5\20\t\16\u00f1\u00f2\f\f\2\2\u00f2") + buf.write("\u00f3\7\25\2\2\u00f3\u0137\5\20\t\r\u00f4\u00f5\f\13") + buf.write("\2\2\u00f5\u00f6\t\b\2\2\u00f6\u0137\5\20\t\f\u00f7\u00f8") + buf.write("\f\t\2\2\u00f8\u00f9\t\t\2\2\u00f9\u0137\5\20\t\n\u00fa") + buf.write("\u00fb\f\b\2\2\u00fb\u00fc\t\n\2\2\u00fc\u0137\5\20\t") + buf.write("\b\u00fd\u00fe\f\6\2\2\u00fe\u00ff\7<\2\2\u00ff\u0137") + buf.write("\5\20\t\6\u0100\u0101\f\5\2\2\u0101\u0102\7=\2\2\u0102") + buf.write("\u0137\5\20\t\5\u0103\u0104\f\4\2\2\u0104\u0105\7-\2\2") + buf.write("\u0105\u0106\5\20\t\2\u0106\u0107\7(\2\2\u0107\u0108\5") + buf.write("\20\t\4\u0108\u0137\3\2\2\2\u0109\u010a\f\30\2\2\u010a") + buf.write("\u010b\7+\2\2\u010b\u010c\5\22\n\2\u010c\u010d\7,\2\2") + buf.write("\u010d\u0137\3\2\2\2\u010e\u010f\f\27\2\2\u010f\u0111") + buf.write("\7+\2\2\u0110\u0112\5\20\t\2\u0111\u0110\3\2\2\2\u0111") + buf.write("\u0112\3\2\2\2\u0112\u0113\3\2\2\2\u0113\u0115\7(\2\2") + buf.write("\u0114\u0116\5\20\t\2\u0115\u0114\3\2\2\2\u0115\u0116") + buf.write("\3\2\2\2\u0116\u011b\3\2\2\2\u0117\u0119\7(\2\2\u0118") + buf.write("\u011a\5\20\t\2\u0119\u0118\3\2\2\2\u0119\u011a\3\2\2") + buf.write("\2\u011a\u011c\3\2\2\2\u011b\u0117\3\2\2\2\u011b\u011c") + buf.write("\3\2\2\2\u011c\u011d\3\2\2\2\u011d\u0137\7,\2\2\u011e") + buf.write("\u0120\f\26\2\2\u011f\u0121\7-\2\2\u0120\u011f\3\2\2\2") + buf.write("\u0120\u0121\3\2\2\2\u0121\u0122\3\2\2\2\u0122\u0123\7") + buf.write(".\2\2\u0123\u0137\7M\2\2\u0124\u0125\f\25\2\2\u0125\u012b") + buf.write("\7$\2\2\u0126\u0127\5\30\r\2\u0127\u0128\7\31\2\2\u0128") + buf.write("\u012a\3\2\2\2\u0129\u0126\3\2\2\2\u012a\u012d\3\2\2\2") + buf.write("\u012b\u0129\3\2\2\2\u012b\u012c\3\2\2\2\u012c\u012f\3") + buf.write("\2\2\2\u012d\u012b\3\2\2\2\u012e\u0130\5\30\r\2\u012f") + buf.write("\u012e\3\2\2\2\u012f\u0130\3\2\2\2\u0130\u0131\3\2\2\2") + buf.write("\u0131\u0137\7%\2\2\u0132\u0133\f\24\2\2\u0133\u0137\7") + buf.write("/\2\2\u0134\u0135\f\n\2\2\u0135\u0137\7\62\2\2\u0136\u00df") + buf.write("\3\2\2\2\u0136\u00e2\3\2\2\2\u0136\u00e5\3\2\2\2\u0136") + buf.write("\u00e8\3\2\2\2\u0136\u00eb\3\2\2\2\u0136\u00ee\3\2\2\2") + buf.write("\u0136\u00f1\3\2\2\2\u0136\u00f4\3\2\2\2\u0136\u00f7\3") + buf.write("\2\2\2\u0136\u00fa\3\2\2\2\u0136\u00fd\3\2\2\2\u0136\u0100") + buf.write("\3\2\2\2\u0136\u0103\3\2\2\2\u0136\u0109\3\2\2\2\u0136") + buf.write("\u010e\3\2\2\2\u0136\u011e\3\2\2\2\u0136\u0124\3\2\2\2") + buf.write("\u0136\u0132\3\2\2\2\u0136\u0134\3\2\2\2\u0137\u013a\3") + buf.write("\2\2\2\u0138\u0136\3\2\2\2\u0138\u0139\3\2\2\2\u0139\21") + buf.write("\3\2\2\2\u013a\u0138\3\2\2\2\u013b\u013c\5\20\t\2\u013c") + buf.write("\u013d\7\31\2\2\u013d\u013f\3\2\2\2\u013e\u013b\3\2\2") + buf.write("\2\u013f\u0142\3\2\2\2\u0140\u013e\3\2\2\2\u0140\u0141") + buf.write("\3\2\2\2\u0141\u0143\3\2\2\2\u0142\u0140\3\2\2\2\u0143") + buf.write("\u0144\5\20\t\2\u0144\23\3\2\2\2\u0145\u0146\5\22\n\2") + buf.write("\u0146\u0147\7\2\2\3\u0147\25\3\2\2\2\u0148\u0149\7 \2") + buf.write("\2\u0149\u014a\5\22\n\2\u014a\u014b\7!\2\2\u014b\u014e") + buf.write("\5\22\n\2\u014c\u014d\7\"\2\2\u014d\u014f\5\22\n\2\u014e") + buf.write("\u014c\3\2\2\2\u014e\u014f\3\2\2\2\u014f\u0153\3\2\2\2") + buf.write("\u0150\u0151\7\32\2\2\u0151\u0153\5\20\t\2\u0152\u0148") + buf.write("\3\2\2\2\u0152\u0150\3\2\2\2\u0153\27\3\2\2\2\u0154\u0155") + buf.write("\7M\2\2\u0155\u0157\7\n\2\2\u0156\u0154\3\2\2\2\u0156") + buf.write("\u0157\3\2\2\2\u0157\u0158\3\2\2\2\u0158\u0159\5\20\t") + buf.write("\2\u0159\31\3\2\2\2\u015a\u0162\7I\2\2\u015b\u0162\7J") + buf.write("\2\2\u015c\u0162\t\13\2\2\u015d\u0162\7K\2\2\u015e\u0162") + buf.write("\7L\2\2\u015f\u0162\7B\2\2\u0160\u0162\7M\2\2\u0161\u015a") + buf.write("\3\2\2\2\u0161\u015b\3\2\2\2\u0161\u015c\3\2\2\2\u0161") + buf.write("\u015d\3\2\2\2\u0161\u015e\3\2\2\2\u0161\u015f\3\2\2\2") + buf.write("\u0161\u0160\3\2\2\2\u0162\33\3\2\2\2\u0163\u0164\7M\2") + buf.write("\2\u0164\u0166\7\31\2\2\u0165\u0163\3\2\2\2\u0166\u0169") + buf.write("\3\2\2\2\u0167\u0165\3\2\2\2\u0167\u0168\3\2\2\2\u0168") + buf.write("\u016a\3\2\2\2\u0169\u0167\3\2\2\2\u016a\u016b\7M\2\2") + buf.write("\u016b\35\3\2\2\2\u016c\u016d\b\20\1\2\u016d\u0179\t\f") + buf.write("\2\2\u016e\u016f\7$\2\2\u016f\u0170\5\36\20\2\u0170\u0171") + buf.write("\7%\2\2\u0171\u0179\3\2\2\2\u0172\u0173\7+\2\2\u0173\u0174") + buf.write("\5\36\20\2\u0174\u0175\7,\2\2\u0175\u0179\3\2\2\2\u0176") + buf.write("\u0177\7?\2\2\u0177\u0179\5\36\20\3\u0178\u016c\3\2\2") + buf.write("\2\u0178\u016e\3\2\2\2\u0178\u0172\3\2\2\2\u0178\u0176") + buf.write("\3\2\2\2\u0179\u0184\3\2\2\2\u017a\u017b\f\5\2\2\u017b") + buf.write("\u017c\7\f\2\2\u017c\u0183\5\36\20\5\u017d\u017e\f\4\2") + buf.write("\2\u017e\u017f\7?\2\2\u017f\u0183\5\36\20\4\u0180\u0181") + buf.write("\f\6\2\2\u0181\u0183\7-\2\2\u0182\u017a\3\2\2\2\u0182") + buf.write("\u017d\3\2\2\2\u0182\u0180\3\2\2\2\u0183\u0186\3\2\2\2") + buf.write("\u0184\u0182\3\2\2\2\u0184\u0185\3\2\2\2\u0185\37\3\2") + buf.write("\2\2\u0186\u0184\3\2\2\2-#,\66;AHTV]kq\u0083\u0090\u0094") buf.write("\u0098\u009e\u00a0\u00a6\u00ac\u00bc\u00c0\u00c8\u00d5") - buf.write("\u00d9\u00dd\u010e\u0112\u0116\u0118\u011d\u0128\u012c") - buf.write("\u0133\u0135\u013d\u014b\u014f\u0153\u015e\u0164\u0175") - buf.write("\u017f\u0181") + buf.write("\u00d9\u00dd\u0111\u0115\u0119\u011b\u0120\u012b\u012f") + buf.write("\u0136\u0138\u0140\u014e\u0152\u0156\u0161\u0167\u0178") + buf.write("\u0182\u0184") return buf.getvalue() @@ -218,10 +220,11 @@ class PyxellParser ( Parser ): "'if'", "'do'", "'elif'", "'else'", "'while'", "'until'", "'for'", "'in'", "'step'", "'func'", "'('", "')'", "'def'", "'extern'", "':'", "'{'", "'}'", "'['", "']'", - "'?'", "'.'", "'!'", "'~'", "'..'", "'...'", "'=='", - "'!='", "'<'", "'<='", "'>'", "'>='", "'not'", "'and'", - "'or'", "'lambda'", "'->'", "'true'", "'false'", "'null'", - "'Void'", "'Int'", "'Float'", "'Bool'", "'Char'", "'String'" ] + "'?'", "'.'", "'!'", "'~'", "'..'", "'...'", "'is'", + "'isn't'", "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", + "'not'", "'and'", "'or'", "'lambda'", "'->'", "'true'", + "'false'", "'null'", "'Void'", "'Int'", "'Float'", + "'Bool'", "'Char'", "'String'" ] symbolicNames = [ "", "", "", "", "", "", "", "", @@ -240,8 +243,8 @@ class PyxellParser ( Parser ): "", "", "", "", "", "", "", "", "", "", "", "", - "", "INT", "FLOAT", "CHAR", "STRING", "ID", - "COMMENT", "WS", "ERR" ] + "", "", "", "INT", "FLOAT", + "CHAR", "STRING", "ID", "COMMENT", "WS", "ERR" ] RULE_program = 0 RULE_stmt = 1 @@ -332,14 +335,16 @@ class PyxellParser ( Parser ): T__65=66 T__66=67 T__67=68 - INT=69 - FLOAT=70 - CHAR=71 - STRING=72 - ID=73 - COMMENT=74 - WS=75 - ERR=76 + T__68=69 + T__69=70 + INT=71 + FLOAT=72 + CHAR=73 + STRING=74 + ID=75 + COMMENT=76 + WS=77 + ERR=78 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -388,7 +393,7 @@ def program(self): self.state = 33 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__40) | (1 << PyxellParser.T__45) | (1 << PyxellParser.T__54) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.T__66 - 64)) | (1 << (PyxellParser.T__67 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0): + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__40) | (1 << PyxellParser.T__45) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.T__66 - 64)) | (1 << (PyxellParser.T__67 - 64)) | (1 << (PyxellParser.T__68 - 64)) | (1 << (PyxellParser.T__69 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0): self.state = 30 self.stmt() self.state = 35 @@ -440,7 +445,7 @@ def stmt(self): self.state = 42 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__1, PyxellParser.T__5, PyxellParser.T__6, PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__19, PyxellParser.T__20, PyxellParser.T__21, PyxellParser.T__33, PyxellParser.T__40, PyxellParser.T__45, PyxellParser.T__54, PyxellParser.T__57, PyxellParser.T__58, PyxellParser.T__59, PyxellParser.T__60, PyxellParser.T__61, PyxellParser.T__62, PyxellParser.T__63, PyxellParser.T__64, PyxellParser.T__65, PyxellParser.T__66, PyxellParser.T__67, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: + if token in [PyxellParser.T__1, PyxellParser.T__5, PyxellParser.T__6, PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__19, PyxellParser.T__20, PyxellParser.T__21, PyxellParser.T__33, PyxellParser.T__40, PyxellParser.T__45, PyxellParser.T__56, PyxellParser.T__59, PyxellParser.T__60, PyxellParser.T__61, PyxellParser.T__62, PyxellParser.T__63, PyxellParser.T__64, PyxellParser.T__65, PyxellParser.T__66, PyxellParser.T__67, PyxellParser.T__68, PyxellParser.T__69, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: self.enterOuterAlt(localctx, 1) self.state = 38 self.simple_stmt() @@ -694,7 +699,7 @@ def simple_stmt(self): self.state = 57 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__54 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): self.state = 56 self.tuple_expr() @@ -780,7 +785,7 @@ def simple_stmt(self): self.state = 82 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__54 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): self.state = 81 self.tuple_expr() @@ -1111,7 +1116,7 @@ def compound_stmt(self): self.state = 146 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 34)) & ~0x3f) == 0 and ((1 << (_la - 34)) & ((1 << (PyxellParser.T__33 - 34)) | (1 << (PyxellParser.T__40 - 34)) | (1 << (PyxellParser.T__58 - 34)) | (1 << (PyxellParser.T__62 - 34)) | (1 << (PyxellParser.T__63 - 34)) | (1 << (PyxellParser.T__64 - 34)) | (1 << (PyxellParser.T__65 - 34)) | (1 << (PyxellParser.T__66 - 34)) | (1 << (PyxellParser.T__67 - 34)))) != 0): + if ((((_la - 34)) & ~0x3f) == 0 and ((1 << (_la - 34)) & ((1 << (PyxellParser.T__33 - 34)) | (1 << (PyxellParser.T__40 - 34)) | (1 << (PyxellParser.T__60 - 34)) | (1 << (PyxellParser.T__64 - 34)) | (1 << (PyxellParser.T__65 - 34)) | (1 << (PyxellParser.T__66 - 34)) | (1 << (PyxellParser.T__67 - 34)) | (1 << (PyxellParser.T__68 - 34)) | (1 << (PyxellParser.T__69 - 34)))) != 0): self.state = 145 self.func_arg() @@ -1121,7 +1126,7 @@ def compound_stmt(self): self.state = 150 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 34)) & ~0x3f) == 0 and ((1 << (_la - 34)) & ((1 << (PyxellParser.T__33 - 34)) | (1 << (PyxellParser.T__40 - 34)) | (1 << (PyxellParser.T__58 - 34)) | (1 << (PyxellParser.T__62 - 34)) | (1 << (PyxellParser.T__63 - 34)) | (1 << (PyxellParser.T__64 - 34)) | (1 << (PyxellParser.T__65 - 34)) | (1 << (PyxellParser.T__66 - 34)) | (1 << (PyxellParser.T__67 - 34)))) != 0): + if ((((_la - 34)) & ~0x3f) == 0 and ((1 << (_la - 34)) & ((1 << (PyxellParser.T__33 - 34)) | (1 << (PyxellParser.T__40 - 34)) | (1 << (PyxellParser.T__60 - 34)) | (1 << (PyxellParser.T__64 - 34)) | (1 << (PyxellParser.T__65 - 34)) | (1 << (PyxellParser.T__66 - 34)) | (1 << (PyxellParser.T__67 - 34)) | (1 << (PyxellParser.T__68 - 34)) | (1 << (PyxellParser.T__69 - 34)))) != 0): self.state = 149 localctx.ret = self.typ(0) @@ -1270,7 +1275,7 @@ def block(self): self.state = 170 self._errHandler.sync(self) _la = self._input.LA(1) - if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__40) | (1 << PyxellParser.T__45) | (1 << PyxellParser.T__54) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.T__66 - 64)) | (1 << (PyxellParser.T__67 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0)): + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__40) | (1 << PyxellParser.T__45) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.T__66 - 64)) | (1 << (PyxellParser.T__67 - 64)) | (1 << (PyxellParser.T__68 - 64)) | (1 << (PyxellParser.T__69 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0)): break self.state = 172 @@ -1476,6 +1481,27 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) + class ExprIsContext(ExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext + super().__init__(parser) + self.op = None # Token + self.copyFrom(ctx) + + def expr(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(PyxellParser.ExprContext) + else: + return self.getTypedRuleContext(PyxellParser.ExprContext,i) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExprIs" ): + return visitor.visitExprIs(self) + else: + return visitor.visitChildren(self) + + class ExprCallContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext @@ -1663,7 +1689,7 @@ def expr(self, _p:int=0): self.state = 190 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__54 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): self.state = 189 self.expr(0) @@ -1709,7 +1735,7 @@ def expr(self, _p:int=0): self._errHandler.reportMatch(self) self.consume() self.state = 203 - self.expr(15) + self.expr(16) pass elif la_ == 6: @@ -1717,7 +1743,7 @@ def expr(self, _p:int=0): self._ctx = localctx _prevctx = localctx self.state = 204 - localctx.op = self.match(PyxellParser.T__54) + localctx.op = self.match(PyxellParser.T__56) self.state = 205 self.expr(5) pass @@ -1727,7 +1753,7 @@ def expr(self, _p:int=0): self._ctx = localctx _prevctx = localctx self.state = 206 - self.match(PyxellParser.T__57) + self.match(PyxellParser.T__59) self.state = 211 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,22,self._ctx) @@ -1750,14 +1776,14 @@ def expr(self, _p:int=0): self.state = 217 - self.match(PyxellParser.T__58) + self.match(PyxellParser.T__60) self.state = 218 self.expr(1) pass self._ctx.stop = self._input.LT(-1) - self.state = 307 + self.state = 310 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,33,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: @@ -1765,29 +1791,29 @@ def expr(self, _p:int=0): if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 305 + self.state = 308 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,32,self._ctx) if la_ == 1: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 221 - if not self.precpred(self._ctx, 16): + if not self.precpred(self._ctx, 17): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 16)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 17)") self.state = 222 localctx.op = self.match(PyxellParser.T__8) self.state = 223 - self.expr(16) + self.expr(17) pass elif la_ == 2: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 224 - if not self.precpred(self._ctx, 14): + if not self.precpred(self._ctx, 15): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 14)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 15)") self.state = 225 localctx.op = self._input.LT(1) _la = self._input.LA(1) @@ -1797,16 +1823,16 @@ def expr(self, _p:int=0): self._errHandler.reportMatch(self) self.consume() self.state = 226 - self.expr(15) + self.expr(16) pass elif la_ == 3: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 227 - if not self.precpred(self._ctx, 13): + if not self.precpred(self._ctx, 14): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 14)") self.state = 228 localctx.op = self._input.LT(1) _la = self._input.LA(1) @@ -1816,16 +1842,16 @@ def expr(self, _p:int=0): self._errHandler.reportMatch(self) self.consume() self.state = 229 - self.expr(14) + self.expr(15) pass elif la_ == 4: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 230 - if not self.precpred(self._ctx, 12): + if not self.precpred(self._ctx, 13): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 12)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") self.state = 231 localctx.op = self._input.LT(1) _la = self._input.LA(1) @@ -1835,55 +1861,55 @@ def expr(self, _p:int=0): self._errHandler.reportMatch(self) self.consume() self.state = 232 - self.expr(13) + self.expr(14) pass elif la_ == 5: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 233 - if not self.precpred(self._ctx, 11): + if not self.precpred(self._ctx, 12): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 12)") self.state = 234 localctx.op = self.match(PyxellParser.T__16) self.state = 235 - self.expr(12) + self.expr(13) pass elif la_ == 6: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 236 - if not self.precpred(self._ctx, 10): + if not self.precpred(self._ctx, 11): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") self.state = 237 localctx.op = self.match(PyxellParser.T__17) self.state = 238 - self.expr(11) + self.expr(12) pass elif la_ == 7: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 239 - if not self.precpred(self._ctx, 9): + if not self.precpred(self._ctx, 10): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") self.state = 240 localctx.op = self.match(PyxellParser.T__18) self.state = 241 - self.expr(10) + self.expr(11) pass elif la_ == 8: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 242 - if not self.precpred(self._ctx, 8): + if not self.precpred(self._ctx, 9): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") self.state = 243 localctx.dots = self._input.LT(1) _la = self._input.LA(1) @@ -1893,212 +1919,231 @@ def expr(self, _p:int=0): self._errHandler.reportMatch(self) self.consume() self.state = 244 - self.expr(9) + self.expr(10) pass elif la_ == 9: - localctx = PyxellParser.ExprCmpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + localctx = PyxellParser.ExprIsContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 245 - if not self.precpred(self._ctx, 6): + if not self.precpred(self._ctx, 7): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") self.state = 246 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__48) | (1 << PyxellParser.T__49) | (1 << PyxellParser.T__50) | (1 << PyxellParser.T__51) | (1 << PyxellParser.T__52) | (1 << PyxellParser.T__53))) != 0)): + if not(_la==PyxellParser.T__48 or _la==PyxellParser.T__49): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() self.state = 247 - self.expr(6) + self.expr(8) pass elif la_ == 10: - localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + localctx = PyxellParser.ExprCmpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 248 - if not self.precpred(self._ctx, 4): + if not self.precpred(self._ctx, 6): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") self.state = 249 - localctx.op = self.match(PyxellParser.T__55) + localctx.op = self._input.LT(1) + _la = self._input.LA(1) + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__50) | (1 << PyxellParser.T__51) | (1 << PyxellParser.T__52) | (1 << PyxellParser.T__53) | (1 << PyxellParser.T__54) | (1 << PyxellParser.T__55))) != 0)): + localctx.op = self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() self.state = 250 - self.expr(4) + self.expr(6) pass elif la_ == 11: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 251 - if not self.precpred(self._ctx, 3): + if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") self.state = 252 - localctx.op = self.match(PyxellParser.T__56) + localctx.op = self.match(PyxellParser.T__57) self.state = 253 - self.expr(3) + self.expr(4) pass elif la_ == 12: - localctx = PyxellParser.ExprCondContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 254 + if not self.precpred(self._ctx, 3): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") + self.state = 255 + localctx.op = self.match(PyxellParser.T__58) + self.state = 256 + self.expr(3) + pass + + elif la_ == 13: + localctx = PyxellParser.ExprCondContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) + self.state = 257 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 255 + self.state = 258 self.match(PyxellParser.T__42) - self.state = 256 + self.state = 259 self.expr(0) - self.state = 257 + self.state = 260 self.match(PyxellParser.T__37) - self.state = 258 + self.state = 261 self.expr(2) pass - elif la_ == 13: + elif la_ == 14: localctx = PyxellParser.ExprIndexContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 260 - if not self.precpred(self._ctx, 21): + self.state = 263 + if not self.precpred(self._ctx, 22): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 21)") - self.state = 261 + raise FailedPredicateException(self, "self.precpred(self._ctx, 22)") + self.state = 264 self.match(PyxellParser.T__40) - self.state = 262 + self.state = 265 self.tuple_expr() - self.state = 263 + self.state = 266 self.match(PyxellParser.T__41) pass - elif la_ == 14: + elif la_ == 15: localctx = PyxellParser.ExprSliceContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 265 - if not self.precpred(self._ctx, 20): + self.state = 268 + if not self.precpred(self._ctx, 21): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 20)") - self.state = 266 + raise FailedPredicateException(self, "self.precpred(self._ctx, 21)") + self.state = 269 self.match(PyxellParser.T__40) - self.state = 268 + self.state = 271 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__54 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 267 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 270 localctx.e1 = self.expr(0) - self.state = 270 + self.state = 273 self.match(PyxellParser.T__37) - self.state = 272 + self.state = 275 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__54 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 271 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 274 localctx.e2 = self.expr(0) - self.state = 278 + self.state = 281 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__37: - self.state = 274 + self.state = 277 self.match(PyxellParser.T__37) - self.state = 276 + self.state = 279 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__54 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 275 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 278 localctx.e3 = self.expr(0) - self.state = 280 + self.state = 283 self.match(PyxellParser.T__41) pass - elif la_ == 15: + elif la_ == 16: localctx = PyxellParser.ExprAttrContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 281 - if not self.precpred(self._ctx, 19): + self.state = 284 + if not self.precpred(self._ctx, 20): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 19)") - self.state = 283 + raise FailedPredicateException(self, "self.precpred(self._ctx, 20)") + self.state = 286 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__42: - self.state = 282 + self.state = 285 localctx.safe = self.match(PyxellParser.T__42) - self.state = 285 + self.state = 288 self.match(PyxellParser.T__43) - self.state = 286 + self.state = 289 self.match(PyxellParser.ID) pass - elif la_ == 16: + elif la_ == 17: localctx = PyxellParser.ExprCallContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 287 - if not self.precpred(self._ctx, 18): + self.state = 290 + if not self.precpred(self._ctx, 19): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 18)") - self.state = 288 + raise FailedPredicateException(self, "self.precpred(self._ctx, 19)") + self.state = 291 self.match(PyxellParser.T__33) - self.state = 294 + self.state = 297 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,30,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 289 + self.state = 292 self.call_arg() - self.state = 290 + self.state = 293 self.match(PyxellParser.T__22) - self.state = 296 + self.state = 299 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,30,self._ctx) - self.state = 298 + self.state = 301 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__54 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 297 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 300 self.call_arg() - self.state = 300 + self.state = 303 self.match(PyxellParser.T__34) pass - elif la_ == 17: + elif la_ == 18: localctx = PyxellParser.ExprUnaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 301 - if not self.precpred(self._ctx, 17): + self.state = 304 + if not self.precpred(self._ctx, 18): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 17)") - self.state = 302 + raise FailedPredicateException(self, "self.precpred(self._ctx, 18)") + self.state = 305 localctx.op = self.match(PyxellParser.T__44) pass - elif la_ == 18: + elif la_ == 19: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 303 - if not self.precpred(self._ctx, 7): + self.state = 306 + if not self.precpred(self._ctx, 8): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") - self.state = 304 + raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") + self.state = 307 localctx.dots = self.match(PyxellParser.T__47) pass - self.state = 309 + self.state = 312 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,33,self._ctx) @@ -2155,20 +2200,20 @@ def tuple_expr(self): try: localctx = PyxellParser.ExprTupleContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 315 + self.state = 318 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,34,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 310 + self.state = 313 self.expr(0) - self.state = 311 + self.state = 314 self.match(PyxellParser.T__22) - self.state = 317 + self.state = 320 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,34,self._ctx) - self.state = 318 + self.state = 321 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -2222,9 +2267,9 @@ def interpolation_expr(self): try: localctx = PyxellParser.ExprInterpolationContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 320 + self.state = 323 self.tuple_expr() - self.state = 321 + self.state = 324 self.match(PyxellParser.EOF) except RecognitionException as re: localctx.exception = re @@ -2295,27 +2340,27 @@ def comprehension(self): self.enterRule(localctx, 20, self.RULE_comprehension) self._la = 0 # Token type try: - self.state = 333 + self.state = 336 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__29]: localctx = PyxellParser.ComprehensionGeneratorContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 323 + self.state = 326 self.match(PyxellParser.T__29) - self.state = 324 + self.state = 327 self.tuple_expr() - self.state = 325 + self.state = 328 self.match(PyxellParser.T__30) - self.state = 326 - self.tuple_expr() self.state = 329 + self.tuple_expr() + self.state = 332 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__31: - self.state = 327 + self.state = 330 self.match(PyxellParser.T__31) - self.state = 328 + self.state = 331 self.tuple_expr() @@ -2323,9 +2368,9 @@ def comprehension(self): elif token in [PyxellParser.T__23]: localctx = PyxellParser.ComprehensionFilterContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 331 + self.state = 334 self.match(PyxellParser.T__23) - self.state = 332 + self.state = 335 self.expr(0) pass else: @@ -2383,17 +2428,17 @@ def call_arg(self): try: localctx = PyxellParser.CallArgContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 337 + self.state = 340 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,37,self._ctx) if la_ == 1: - self.state = 335 + self.state = 338 self.match(PyxellParser.ID) - self.state = 336 + self.state = 339 self.match(PyxellParser.T__7) - self.state = 339 + self.state = 342 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -2535,27 +2580,27 @@ def atom(self): self.enterRule(localctx, 24, self.RULE_atom) self._la = 0 # Token type try: - self.state = 348 + self.state = 351 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: localctx = PyxellParser.AtomIntContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 341 + self.state = 344 self.match(PyxellParser.INT) pass elif token in [PyxellParser.FLOAT]: localctx = PyxellParser.AtomFloatContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 342 + self.state = 345 self.match(PyxellParser.FLOAT) pass - elif token in [PyxellParser.T__59, PyxellParser.T__60]: + elif token in [PyxellParser.T__61, PyxellParser.T__62]: localctx = PyxellParser.AtomBoolContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 343 + self.state = 346 _la = self._input.LA(1) - if not(_la==PyxellParser.T__59 or _la==PyxellParser.T__60): + if not(_la==PyxellParser.T__61 or _la==PyxellParser.T__62): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -2564,25 +2609,25 @@ def atom(self): elif token in [PyxellParser.CHAR]: localctx = PyxellParser.AtomCharContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 344 + self.state = 347 self.match(PyxellParser.CHAR) pass elif token in [PyxellParser.STRING]: localctx = PyxellParser.AtomStringContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 345 + self.state = 348 self.match(PyxellParser.STRING) pass - elif token in [PyxellParser.T__61]: + elif token in [PyxellParser.T__63]: localctx = PyxellParser.AtomNullContext(self, localctx) self.enterOuterAlt(localctx, 6) - self.state = 346 - self.match(PyxellParser.T__61) + self.state = 349 + self.match(PyxellParser.T__63) pass elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) self.enterOuterAlt(localctx, 7) - self.state = 347 + self.state = 350 self.match(PyxellParser.ID) pass else: @@ -2627,20 +2672,20 @@ def id_list(self): self.enterRule(localctx, 26, self.RULE_id_list) try: self.enterOuterAlt(localctx, 1) - self.state = 354 + self.state = 357 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,39,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 350 + self.state = 353 self.match(PyxellParser.ID) - self.state = 351 + self.state = 354 self.match(PyxellParser.T__22) - self.state = 356 + self.state = 359 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,39,self._ctx) - self.state = 357 + self.state = 360 self.match(PyxellParser.ID) except RecognitionException as re: localctx.exception = re @@ -2799,17 +2844,17 @@ def typ(self, _p:int=0): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 371 + self.state = 374 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__62, PyxellParser.T__63, PyxellParser.T__64, PyxellParser.T__65, PyxellParser.T__66, PyxellParser.T__67]: + if token in [PyxellParser.T__64, PyxellParser.T__65, PyxellParser.T__66, PyxellParser.T__67, PyxellParser.T__68, PyxellParser.T__69]: localctx = PyxellParser.TypePrimitiveContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 360 + self.state = 363 _la = self._input.LA(1) - if not(((((_la - 63)) & ~0x3f) == 0 and ((1 << (_la - 63)) & ((1 << (PyxellParser.T__62 - 63)) | (1 << (PyxellParser.T__63 - 63)) | (1 << (PyxellParser.T__64 - 63)) | (1 << (PyxellParser.T__65 - 63)) | (1 << (PyxellParser.T__66 - 63)) | (1 << (PyxellParser.T__67 - 63)))) != 0)): + if not(((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & ((1 << (PyxellParser.T__64 - 65)) | (1 << (PyxellParser.T__65 - 65)) | (1 << (PyxellParser.T__66 - 65)) | (1 << (PyxellParser.T__67 - 65)) | (1 << (PyxellParser.T__68 - 65)) | (1 << (PyxellParser.T__69 - 65)))) != 0)): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -2819,38 +2864,38 @@ def typ(self, _p:int=0): localctx = PyxellParser.TypeParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 361 + self.state = 364 self.match(PyxellParser.T__33) - self.state = 362 + self.state = 365 self.typ(0) - self.state = 363 + self.state = 366 self.match(PyxellParser.T__34) pass elif token in [PyxellParser.T__40]: localctx = PyxellParser.TypeArrayContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 365 + self.state = 368 self.match(PyxellParser.T__40) - self.state = 366 + self.state = 369 self.typ(0) - self.state = 367 + self.state = 370 self.match(PyxellParser.T__41) pass - elif token in [PyxellParser.T__58]: + elif token in [PyxellParser.T__60]: localctx = PyxellParser.TypeFunc0Context(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 369 - self.match(PyxellParser.T__58) - self.state = 370 + self.state = 372 + self.match(PyxellParser.T__60) + self.state = 373 self.typ(1) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 383 + self.state = 386 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,42,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: @@ -2858,48 +2903,48 @@ def typ(self, _p:int=0): if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 381 + self.state = 384 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,41,self._ctx) if la_ == 1: localctx = PyxellParser.TypeTupleContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 373 + self.state = 376 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 374 + self.state = 377 self.match(PyxellParser.T__9) - self.state = 375 + self.state = 378 self.typ(3) pass elif la_ == 2: localctx = PyxellParser.TypeFuncContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 376 + self.state = 379 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 377 - self.match(PyxellParser.T__58) - self.state = 378 + self.state = 380 + self.match(PyxellParser.T__60) + self.state = 381 self.typ(2) pass elif la_ == 3: localctx = PyxellParser.TypeNullableContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 379 + self.state = 382 if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") - self.state = 380 + self.state = 383 self.match(PyxellParser.T__42) pass - self.state = 385 + self.state = 388 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,42,self._ctx) @@ -2926,87 +2971,91 @@ def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): def expr_sempred(self, localctx:ExprContext, predIndex:int): if predIndex == 0: - return self.precpred(self._ctx, 16) + return self.precpred(self._ctx, 17) if predIndex == 1: - return self.precpred(self._ctx, 14) + return self.precpred(self._ctx, 15) if predIndex == 2: - return self.precpred(self._ctx, 13) + return self.precpred(self._ctx, 14) if predIndex == 3: - return self.precpred(self._ctx, 12) + return self.precpred(self._ctx, 13) if predIndex == 4: - return self.precpred(self._ctx, 11) + return self.precpred(self._ctx, 12) if predIndex == 5: - return self.precpred(self._ctx, 10) + return self.precpred(self._ctx, 11) if predIndex == 6: - return self.precpred(self._ctx, 9) + return self.precpred(self._ctx, 10) if predIndex == 7: - return self.precpred(self._ctx, 8) + return self.precpred(self._ctx, 9) if predIndex == 8: - return self.precpred(self._ctx, 6) + return self.precpred(self._ctx, 7) if predIndex == 9: - return self.precpred(self._ctx, 4) + return self.precpred(self._ctx, 6) if predIndex == 10: - return self.precpred(self._ctx, 3) + return self.precpred(self._ctx, 4) if predIndex == 11: - return self.precpred(self._ctx, 2) + return self.precpred(self._ctx, 3) if predIndex == 12: - return self.precpred(self._ctx, 21) + return self.precpred(self._ctx, 2) if predIndex == 13: - return self.precpred(self._ctx, 20) + return self.precpred(self._ctx, 22) if predIndex == 14: - return self.precpred(self._ctx, 19) + return self.precpred(self._ctx, 21) if predIndex == 15: - return self.precpred(self._ctx, 18) + return self.precpred(self._ctx, 20) if predIndex == 16: - return self.precpred(self._ctx, 17) + return self.precpred(self._ctx, 19) if predIndex == 17: - return self.precpred(self._ctx, 7) + return self.precpred(self._ctx, 18) - def typ_sempred(self, localctx:TypContext, predIndex:int): if predIndex == 18: - return self.precpred(self._ctx, 3) + return self.precpred(self._ctx, 8) + def typ_sempred(self, localctx:TypContext, predIndex:int): if predIndex == 19: - return self.precpred(self._ctx, 2) + return self.precpred(self._ctx, 3) if predIndex == 20: + return self.precpred(self._ctx, 2) + + + if predIndex == 21: return self.precpred(self._ctx, 4) diff --git a/src/antlr/PyxellVisitor.py b/src/antlr/PyxellVisitor.py index 7c3b1854..cd1805b0 100644 --- a/src/antlr/PyxellVisitor.py +++ b/src/antlr/PyxellVisitor.py @@ -144,6 +144,11 @@ def visitExprArrayComprehension(self, ctx:PyxellParser.ExprArrayComprehensionCon return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#ExprIs. + def visitExprIs(self, ctx:PyxellParser.ExprIsContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#ExprCall. def visitExprCall(self, ctx:PyxellParser.ExprCallContext): return self.visitChildren(ctx) diff --git a/src/ast.py b/src/ast.py index ccb27b53..d9bab0fd 100644 --- a/src/ast.py +++ b/src/ast.py @@ -250,6 +250,13 @@ def visitExprRange(self, ctx): 'inclusive': ctx.dots.text == '..', } + def visitExprIs(self, ctx): + return { + **_node(ctx, 'ExprIs'), + 'exprs': self.visit(ctx.expr()), + 'not': ctx.op.text != 'is', + } + def visitExprCmp(self, ctx): exprs = [] ops = [] diff --git a/src/compiler.py b/src/compiler.py index a73b0042..f4af77e4 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -316,6 +316,7 @@ def realloc(self, ptr, length=vInt(1)): type = ptr.type size = self.sizeof(type.pointee, length) ptr = self.builder.bitcast(ptr, tPtr()) + ptr = self.builder.bitcast(ptr, tPtr()) ptr = self.builder.call(self.builtins['realloc'], [ptr, size]) return self.builder.bitcast(ptr, type) @@ -785,7 +786,7 @@ def convert_expr(expr): nonlocal ids node = expr['node'] - if node in ['ExprArray', 'ExprIndex', 'ExprBinaryOp', 'ExprRange', 'ExprCmp', 'ExprLogicalOp', 'ExprCond', 'ExprTuple']: + if node in ['ExprArray', 'ExprIndex', 'ExprBinaryOp', 'ExprRange', 'ExprIs', 'ExprCmp', 'ExprLogicalOp', 'ExprCond', 'ExprTuple']: return { **expr, 'exprs': lmap(convert_expr, expr['exprs']), @@ -1470,6 +1471,14 @@ def compileExprBinaryOp(self, node): def compileExprRange(self, node): self.throw(node, err.IllegalRange()) + def compileExprIs(self, node): + left, right = map(self.compile, node['exprs']) + if not left.type.isNullable() or not right.type.isNullable() or unify_types(left.type, right.type) is None: + self.throw(node, err.NoStrictComparison(left.type, right.type)) + + left, right = self.unify(node, left, right) + return self.builder.icmp_unsigned('!=' if node.get('not') else '==', left, right) + def compileExprCmp(self, node): exprs = node['exprs'] ops = node['ops'] diff --git a/src/errors.py b/src/errors.py index 850d9988..7e8ffbb2 100644 --- a/src/errors.py +++ b/src/errors.py @@ -26,6 +26,7 @@ class PyxellError(Exception): MissingReturn = lambda id: f"Not all code paths return a value in function `{id}`" NoAttribute = lambda t, id: f"Type `{t.show()}` has no attribute `{id}`" NoBinaryOperator = lambda op, t1, t2: f"No binary operator `{op}` defined for `{t1.show()}` and `{t2.show()}`" + NoStrictComparison = lambda t1, t2: f"Strict comparison cannot be used for `{t1.show()}` and `{t2.show()}`" NoUnaryOperator = lambda op, t: f"No unary operator `{op}` defined for `{t.show()}`" NotComparable = lambda t1, t2: f"Cannot compare `{t1.show()}` with `{t2.show()}`" NotIndexable = lambda t: f"Type `{t.show()}` is not indexable" diff --git a/test/bad/nullables/cmp02.err b/test/bad/nullables/cmp02.err new file mode 100644 index 00000000..45341bcf --- /dev/null +++ b/test/bad/nullables/cmp02.err @@ -0,0 +1 @@ +Cannot compare `Int?` with `Int?`. \ No newline at end of file diff --git a/test/bad/nullables/cmp02.px b/test/bad/nullables/cmp02.px new file mode 100644 index 00000000..6ca45c99 --- /dev/null +++ b/test/bad/nullables/cmp02.px @@ -0,0 +1,3 @@ + +Int? x = 4 +x < x diff --git a/test/bad/nullables/cmp03.err b/test/bad/nullables/cmp03.err new file mode 100644 index 00000000..d416b607 --- /dev/null +++ b/test/bad/nullables/cmp03.err @@ -0,0 +1 @@ +Strict comparison cannot be used for `Int` and `Int`. \ No newline at end of file diff --git a/test/bad/nullables/cmp03.px b/test/bad/nullables/cmp03.px new file mode 100644 index 00000000..6fcd9ea4 --- /dev/null +++ b/test/bad/nullables/cmp03.px @@ -0,0 +1,2 @@ + +1 is 2 diff --git a/test/bad/nullables/cmp04.err b/test/bad/nullables/cmp04.err new file mode 100644 index 00000000..47448708 --- /dev/null +++ b/test/bad/nullables/cmp04.err @@ -0,0 +1 @@ +Strict comparison cannot be used for `Bool?` and `Char?`. \ No newline at end of file diff --git a/test/bad/nullables/cmp04.px b/test/bad/nullables/cmp04.px new file mode 100644 index 00000000..27eb7d5b --- /dev/null +++ b/test/bad/nullables/cmp04.px @@ -0,0 +1,4 @@ + +Bool? b = null +Char? c = null +b is c diff --git a/test/good/nullables/cmp01.px b/test/good/nullables/cmp01.px index 6874bd41..f0fca655 100644 --- a/test/good/nullables/cmp01.px +++ b/test/good/nullables/cmp01.px @@ -1,3 +1,3 @@ -print null == null -print null != null +print null is null +print null isn't null diff --git a/test/good/nullables/cmp02.px b/test/good/nullables/cmp02.px index 47e632e5..7cf90b95 100644 --- a/test/good/nullables/cmp02.px +++ b/test/good/nullables/cmp02.px @@ -1,4 +1,4 @@ Int? x = null -print x == null, x != null -print x != x, x == x +print x is null, x isn't null +print x isn't x, x is x diff --git a/test/good/nullables/cmp03.out b/test/good/nullables/cmp03.out index eed40375..c508d536 100644 --- a/test/good/nullables/cmp03.out +++ b/test/good/nullables/cmp03.out @@ -1,3 +1 @@ false -true -false diff --git a/test/good/nullables/cmp03.px b/test/good/nullables/cmp03.px index 7dd1c66c..d2e80e8b 100644 --- a/test/good/nullables/cmp03.px +++ b/test/good/nullables/cmp03.px @@ -1,6 +1,4 @@ String? s s = "null" -print s == null -print "null" == s -print s != "null" +print s is null diff --git a/test/good/nullables/cmp04.out b/test/good/nullables/cmp04.out index 8108250c..836a5934 100644 --- a/test/good/nullables/cmp04.out +++ b/test/good/nullables/cmp04.out @@ -1,2 +1 @@ -false true -false true +true false diff --git a/test/good/nullables/cmp04.px b/test/good/nullables/cmp04.px index 264505c2..6fd0d861 100644 --- a/test/good/nullables/cmp04.px +++ b/test/good/nullables/cmp04.px @@ -1,3 +1,3 @@ -print null < null, null <= null -print null > null, null >= null +[Int?]? x = [42, null] +print x![0]! == 42, null isn't x![1] diff --git a/test/good/nullables/cmp05.out b/test/good/nullables/cmp05.out deleted file mode 100644 index 6f6466d2..00000000 --- a/test/good/nullables/cmp05.out +++ /dev/null @@ -1,2 +0,0 @@ -true false -true false diff --git a/test/good/nullables/cmp05.px b/test/good/nullables/cmp05.px deleted file mode 100644 index eaa07c1e..00000000 --- a/test/good/nullables/cmp05.px +++ /dev/null @@ -1,4 +0,0 @@ - -[Int?]? x = [42, null] -print x == x!, x! != x -print x![0] == 42, null != x![1] diff --git a/test/good/nullables/cmp06.out b/test/good/nullables/cmp06.out deleted file mode 100644 index 87f8d93a..00000000 --- a/test/good/nullables/cmp06.out +++ /dev/null @@ -1,3 +0,0 @@ -true -false -true diff --git a/test/good/nullables/cmp06.px b/test/good/nullables/cmp06.px deleted file mode 100644 index 5e6250db..00000000 --- a/test/good/nullables/cmp06.px +++ /dev/null @@ -1,7 +0,0 @@ - -Int? x = null -print x < 1 -print -1 < x - -x = 0 -print -1 < x < 1 diff --git a/test/good/nullables/cmp07.out b/test/good/nullables/cmp07.out deleted file mode 100644 index 53655e34..00000000 --- a/test/good/nullables/cmp07.out +++ /dev/null @@ -1,3 +0,0 @@ -false true -true false -true true diff --git a/test/good/nullables/cmp07.px b/test/good/nullables/cmp07.px deleted file mode 100644 index 1ef5e87f..00000000 --- a/test/good/nullables/cmp07.px +++ /dev/null @@ -1,6 +0,0 @@ - -[Char?] a = ['a', null] -[Char?] b = [ null, 'b'] -print a < b, a > b -print a[::-1] <= b, a >= b[::-1] -print a[1:] < b, a <= b[1:] From 6c59e17d69f5afe6243fb03c734b4e6e36ae81b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Thu, 14 Nov 2019 19:08:20 +0100 Subject: [PATCH 064/100] Code refactoring --- src/compiler.py | 266 +++++++++++++++++----------------- src/errors.py | 1 - src/types.py | 2 +- test/bad/strings/format04.err | 2 +- 4 files changed, 132 insertions(+), 139 deletions(-) diff --git a/src/compiler.py b/src/compiler.py index f4af77e4..cfba4c29 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -55,6 +55,13 @@ def run_main(self, ast): def compile(self, node): return getattr(self, 'compile'+node['node'])(node) + def expr(self, code, **params): + return self.compile(parse_expr(code.format(**params))) + + def throw(self, node, msg): + line, column = node.get('position', (1, 1)) + raise err(msg, line, column) + def llvm_ir(self): return str(self.module) @@ -119,10 +126,6 @@ def block(self): self.builder.function.blocks.append(label_end) self.builder.position_at_end(label_end) - def throw(self, node, msg): - line, column = node.get('position', (1, 1)) - raise err(msg, line, column) - def get(self, node, id, load=True): if id not in self.env: self.throw(node, err.UndeclaredIdentifier(id)) @@ -152,6 +155,23 @@ def index(self, node, *exprs, lvalue=False): self.throw(node, err.NotIndexable(collection.type)) + def safe(self, node, value, callback_notnull, callback_null): + if not value.type.isNullable(): + self.throw(node, err.NotNullable(value.type)) + + with self.builder.if_else(self.builder.icmp_unsigned('!=', value, vNull())) as (label_notnull, label_null): + with label_notnull: + value_notnull = callback_notnull() + label_notnull = self.builder.basic_block + with label_null: + value_null = callback_null() + label_null = self.builder.basic_block + + phi = self.builder.phi(value_notnull.type) + phi.add_incoming(value_notnull, label_notnull) + phi.add_incoming(value_null, label_null) + return phi + def attribute(self, node, expr, attr): if expr['node'] == 'AtomId': id = expr['id'] @@ -719,9 +739,13 @@ def convert_string(self, node, lit): for i, tag in enumerate(tags): try: expr = parse_expr(tag) - except err: - self.throw(node, err.InvalidExpression(tag)) - exprs[i*2+1] ={ + except err as e: + self.throw({ + **node, + 'position': [e.line+node['position'][0]-1, e.column+node['position'][1]+1], + }, err.InvalidSyntax()) + + exprs[i*2+1] = { 'node': 'ExprCall', 'expr': { 'node': 'ExprAttr', @@ -1292,7 +1316,7 @@ def compileExprSlice(self, node): if not type.isCollection(): self.throw(node, err.NotIndexable(type)) - self.assign(node, length, self.compile(parse_expr('{t}.length'.format(t=array['id'])))) + self.assign(node, length, self.expr('{t}.length', t=array['id'])) if slice[2] is None: self.assign(node, step, vInt(1)) @@ -1300,23 +1324,23 @@ def compileExprSlice(self, node): self.assign(node, step, self.cast(slice[2], self.compile(slice[2]), tInt)) if slice[0] is None: - self.assign(node, start, self.compile(parse_expr('{c} > 0 ? 0 : {l}'.format(c=step['id'], l=length['id'])))) + self.assign(node, start, self.expr('{c} > 0 ? 0 : {l}', c=step['id'], l=length['id'])) else: self.assign(node, start, self.cast(slice[0], self.compile(slice[0]), tInt)) - self.assign(node, start, self.compile(parse_expr('{a} < 0 ? {a} + {l} : {a}'.format(a=start['id'], l=length['id'])))) - self.assign(node, start, self.compile(parse_expr('{a} < 0 ? 0 : {a} > {l} ? {l} : {a}'.format(a=start['id'], l=length['id'])))) + self.assign(node, start, self.expr('{a} < 0 ? {a} + {l} : {a}', a=start['id'], l=length['id'])) + self.assign(node, start, self.expr('{a} < 0 ? 0 : {a} > {l} ? {l} : {a}', a=start['id'], l=length['id'])) if slice[1] is None: - self.assign(node, end, self.compile(parse_expr('{c} > 0 ? {l} : 0'.format(c=step['id'], l=length['id'])))) + self.assign(node, end, self.expr('{c} > 0 ? {l} : 0', c=step['id'], l=length['id'])) else: self.assign(node, end, self.cast(slice[1], self.compile(slice[1]), tInt)) - self.assign(node, end, self.compile(parse_expr('{b} < 0 ? {b} + {l} : {b}'.format(b=end['id'], l=length['id'])))) - self.assign(node, end, self.compile(parse_expr('{b} < 0 ? 0 : {b} > {l} ? {l} : {b}'.format(b=end['id'], l=length['id'])))) + self.assign(node, end, self.expr('{b} < 0 ? {b} + {l} : {b}', b=end['id'], l=length['id'])) + self.assign(node, end, self.expr('{b} < 0 ? 0 : {b} > {l} ? {l} : {b}', b=end['id'], l=length['id'])) - self.assign(node, start, self.compile(parse_expr('{c} < 0 ? {a} - 1 : {a}'.format(a=start['id'], c=step['id'])))) - self.assign(node, end, self.compile(parse_expr('{c} < 0 ? {b} - 1 : {b}'.format(b=end['id'], c=step['id'])))) + self.assign(node, start, self.expr('{c} < 0 ? {a} - 1 : {a}', a=start['id'], c=step['id'])) + self.assign(node, end, self.expr('{c} < 0 ? {b} - 1 : {b}', b=end['id'], c=step['id'])) - result = self.compile(parse_expr('[{t}[{i}] for {i} in {a}...{b} step {c}]'.format(t=array['id'], a=start['id'], b=end['id'], c=step['id'], i=index['id']))) + result = self.expr('[{t}[{i}] for {i} in {a}...{b} step {c}]', t=array['id'], a=start['id'], b=end['id'], c=step['id'], i=index['id']) # `CharArray_asString` is used directly, because `.join` would copy the array redundantly. return self.builder.call(self.get(node, 'CharArray_asString'), [result]) if type == tString else result @@ -1327,140 +1351,110 @@ def compileExprAttr(self, node): if node.get('safe'): obj = self.compile(expr) - if not obj.type.isNullable(): - self.throw(node, err.NotNullable(obj.type)) - - label_null = self.builder.basic_block - - with self.builder.if_then(self.builder.icmp_unsigned('!=', obj, vNull(obj.type))): - label_notnull = self.builder.basic_block - value = self.nullable(self.attr(node, self.extract(obj), attr)) - type = value.type - - phi = self.builder.phi(type) - phi.add_incoming(value, label_notnull) - phi.add_incoming(vNull(type), label_null) - return phi + return self.safe(node, obj, lambda: self.nullable(self.attr(node, self.extract(obj), attr)), vNull) - else: - obj, value = self.attribute(node, expr, attr) - return value + obj, value = self.attribute(node, expr, attr) + return value def compileExprCall(self, node): expr = node['expr'] - safe_call = expr.get('safe', False) - if expr['node'] == 'ExprAttr': - if safe_call: - obj = self.compile(expr['expr']) - if not obj.type.isNullable(): - self.throw(node, err.NotNullable(obj.type)) - - label_null = self.builder.basic_block - label_notnull = self.builder.append_basic_block() - label_end = self.builder.append_basic_block() - - self.builder.cbranch(self.builder.icmp_unsigned('!=', obj, vNull(obj.type)), label_notnull, label_end) - self.builder.position_at_end(label_notnull) - - obj = self.extract(obj) - func = self.attr(expr, obj, expr['attr']) - else: - obj, func = self.attribute(expr, expr['expr'], expr['attr']) - else: - obj = None - func = self.compile(expr) - - if not func.type.isFunc(): - self.throw(node, err.NotFunction(func.type)) - - args = [] - pos_args = {} - named_args = {} + def call(obj, func): + if not func.type.isFunc(): + self.throw(node, err.NotFunction(func.type)) + + args = [] + pos_args = {} + named_args = {} + + for i, call_arg in enumerate(node['args']): + name = call_arg['name'] + expr = call_arg['expr'] + if name: + if name in named_args: + self.throw(node, err.RepeatedArgument(name)) + named_args[name] = expr + else: + if named_args: + self.throw(node, err.ExpectedNamedArgument()) + pos_args[i] = expr - for i, call_arg in enumerate(node['args']): - name = call_arg['name'] - expr = call_arg['expr'] - if name: + func_args = func.type.args[1:] if obj else func.type.args + for i, func_arg in enumerate(func_args): + name = func_arg.name if name in named_args: - self.throw(node, err.RepeatedArgument(name)) - named_args[name] = expr - else: - if named_args: - self.throw(node, err.ExpectedNamedArgument()) - pos_args[i] = expr - - func_args = func.type.args[1:] if obj else func.type.args - for i, func_arg in enumerate(func_args): - name = func_arg.name - if name in named_args: - if i in pos_args: - self.throw(node, err.RepeatedArgument(name)) - expr = named_args.pop(name) - elif i in pos_args: - expr = pos_args.pop(i) - elif func_arg.default: - expr = func_arg.default - else: - self.throw(node, err.TooFewArguments(func.type)) - - expr = self.convert_lambda(expr) - if expr['node'] == 'ExprLambda': - ids = expr['ids'] - type = func_arg.type - if not type.isFunc(): - self.throw(node, err.IllegalLambda()) - if len(ids) < len(type.args): - self.throw(node, err.TooFewArguments(type)) - if len(ids) > len(type.args): - self.throw(node, err.TooManyArguments(type)) - id = self.module.get_unique_name('lambda') - self.compile({ - **expr, - 'node': 'StmtFunc', - 'id': id, - 'args': [{ - 'type': arg.type, - 'name': name, - } for arg, name in zip(type.args, ids)], - 'ret': type.ret, - 'block': { + if i in pos_args: + self.throw(node, err.RepeatedArgument(name)) + expr = named_args.pop(name) + elif i in pos_args: + expr = pos_args.pop(i) + elif func_arg.default: + expr = func_arg.default + else: + self.throw(node, err.TooFewArguments(func.type)) + + expr = self.convert_lambda(expr) + if expr['node'] == 'ExprLambda': + ids = expr['ids'] + type = func_arg.type + if not type.isFunc(): + self.throw(node, err.IllegalLambda()) + if len(ids) < len(type.args): + self.throw(node, err.TooFewArguments(type)) + if len(ids) > len(type.args): + self.throw(node, err.TooManyArguments(type)) + id = self.module.get_unique_name('lambda') + self.compile({ **expr, - 'node': 'StmtReturn', - 'expr': expr['expr'], - }, - }) - value = self.get(expr, id) - else: - value = self.compile(expr) + 'node': 'StmtFunc', + 'id': id, + 'args': [{ + 'type': arg.type, + 'name': name, + } for arg, name in zip(type.args, ids)], + 'ret': type.ret, + 'block': { + **expr, + 'node': 'StmtReturn', + 'expr': expr['expr'], + }, + }) + value = self.get(expr, id) + else: + value = self.compile(expr) - value = self.cast(expr, value, func_arg.type) - args.append(value) + value = self.cast(expr, value, func_arg.type) + args.append(value) - if named_args: - self.throw(node, err.UnexpectedArgument(next(iter(named_args)))) - if pos_args: - self.throw(node, err.TooManyArguments(func.type)) + if named_args: + self.throw(node, err.UnexpectedArgument(next(iter(named_args)))) + if pos_args: + self.throw(node, err.TooManyArguments(func.type)) - if obj: - args.insert(0, obj) + if obj: + args.insert(0, obj) - result = self.builder.call(func, args) + return self.builder.call(func, args) - if safe_call: - value = self.nullable(result) - type = value.type + if expr['node'] == 'ExprAttr': + attr = expr['attr'] - label_notnull = self.builder.basic_block - self.builder.branch(label_end) - self.builder.position_at_end(label_end) + if expr.get('safe'): + obj = self.compile(expr['expr']) - phi = self.builder.phi(type) - phi.add_incoming(value, label_notnull) - phi.add_incoming(vNull(type), label_null) - return phi + def callback(): + value = self.extract(obj) + func = self.attr(node, value, attr) + return self.nullable(call(value, func)) - return result + return self.safe(node, obj, callback, vNull) + else: + obj, func = self.attribute(expr, expr['expr'], attr) + else: + obj = None + func = self.compile(expr) + + return call(obj, func) def compileExprUnaryOp(self, node): return self.unaryop(node, node['op'], self.compile(node['expr'])) @@ -1581,7 +1575,7 @@ def compileAtomString(self, node): }, str(e).partition(': ')[2][:-1]) def compileAtomNull(self, node): - return vNull(tNullable(tUnknown)) + return vNull() def compileAtomId(self, node): return self.get(node, node['id']) diff --git a/src/errors.py b/src/errors.py index 7e8ffbb2..c4b7aa80 100644 --- a/src/errors.py +++ b/src/errors.py @@ -19,7 +19,6 @@ class PyxellError(Exception): IllegalLambda = lambda: "Lambda expression cannot be used in this context" IllegalRange = lambda: "Range expression cannot be used in this context" InvalidDeclaration = lambda t: f"Cannot declare variable of type `{t.show()}`" - InvalidExpression = lambda e: f"Could not parse expression `{e}`" InvalidLoopStep = lambda: f"Incompatible number of loop variables and step expressions" InvalidModule = lambda id: f"Could not find module `{id}`" MissingDefault = lambda id: f"Missing default value for argument `{id}`" diff --git a/src/types.py b/src/types.py index ad81aacb..5dbc1133 100644 --- a/src/types.py +++ b/src/types.py @@ -213,5 +213,5 @@ def vBool(b): def vChar(c): return ll.Constant(tChar, ord(c)) -def vNull(type): +def vNull(type=tNullable(tUnknown)): return ll.Constant(type, 'null') diff --git a/test/bad/strings/format04.err b/test/bad/strings/format04.err index 263981e1..63261bf3 100644 --- a/test/bad/strings/format04.err +++ b/test/bad/strings/format04.err @@ -1 +1 @@ -Could not parse expression `1+(2+34-567))`. \ No newline at end of file +Syntax error. \ No newline at end of file From f65b5a6d85f9d8e84232c7d16d14159ec036db26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Thu, 14 Nov 2019 22:19:20 +0100 Subject: [PATCH 065/100] Null coalescing operator --- src/Pyxell.g4 | 3 +- src/antlr/Pyxell.interp | 4 +- src/antlr/Pyxell.tokens | 120 ++--- src/antlr/PyxellLexer.interp | 5 +- src/antlr/PyxellLexer.py | 448 ++++++++-------- src/antlr/PyxellLexer.tokens | 120 ++--- src/antlr/PyxellParser.py | 966 ++++++++++++++++++----------------- src/compiler.py | 31 +- test/bad/nullables/op05.err | 2 +- test/good/nullables/op05.out | 2 +- test/good/nullables/op05.px | 5 +- test/good/nullables/op06.out | 2 + test/good/nullables/op06.px | 2 + test/good/nullables/op07.out | 2 +- test/good/nullables/op07.px | 5 +- test/good/nullables/op08.out | 3 + test/good/nullables/op08.px | 10 + 17 files changed, 903 insertions(+), 827 deletions(-) create mode 100644 test/good/nullables/op08.out create mode 100644 test/good/nullables/op08.px diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index 6e157268..af7ed54d 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -15,7 +15,7 @@ simple_stmt | 'print' tuple_expr? # StmtPrint | typ ID ('=' tuple_expr)? # StmtDecl | (lvalue '=')* tuple_expr # StmtAssg - | expr op=('^' | '*' | '/' | '%' | '+' | '-' | '<<' | '>>' | '&' | '$' | '|') '=' expr # StmtAssgExpr + | expr op=('^' | '*' | '/' | '%' | '+' | '-' | '<<' | '>>' | '&' | '$' | '|' | '??') '=' expr # StmtAssgExpr | s=('break' | 'continue') # StmtLoopControl | 'return' tuple_expr? # StmtReturn ; @@ -65,6 +65,7 @@ expr | op='not' expr # ExprUnaryOp | expr op='and' expr # ExprLogicalOp | expr op='or' expr # ExprLogicalOp + | expr op='??' expr # ExprBinaryOp | expr '?' expr ':' expr # ExprCond | 'lambda' (ID ',')* ID? '->' expr # ExprLambda ; diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index 0edc564c..1d9a4d61 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -19,6 +19,7 @@ null '&' '$' '|' +'??' 'break' 'continue' 'return' @@ -151,6 +152,7 @@ null null null null +null INT FLOAT CHAR @@ -179,4 +181,4 @@ typ atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 80, 392, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 3, 2, 7, 2, 34, 10, 2, 12, 2, 14, 2, 37, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 45, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 55, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 60, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 66, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 71, 10, 4, 12, 4, 14, 4, 74, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 85, 10, 4, 5, 4, 87, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 92, 10, 5, 12, 5, 14, 5, 95, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 106, 10, 6, 12, 6, 14, 6, 109, 11, 6, 3, 6, 3, 6, 3, 6, 5, 6, 114, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 132, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 143, 10, 6, 12, 6, 14, 6, 146, 11, 6, 3, 6, 5, 6, 149, 10, 6, 3, 6, 3, 6, 5, 6, 153, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 159, 10, 6, 5, 6, 161, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 167, 10, 7, 3, 8, 3, 8, 6, 8, 171, 10, 8, 13, 8, 14, 8, 172, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 187, 10, 9, 12, 9, 14, 9, 190, 11, 9, 3, 9, 5, 9, 193, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 6, 9, 199, 10, 9, 13, 9, 14, 9, 200, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 212, 10, 9, 12, 9, 14, 9, 215, 11, 9, 3, 9, 5, 9, 218, 10, 9, 3, 9, 3, 9, 5, 9, 222, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 274, 10, 9, 3, 9, 3, 9, 5, 9, 278, 10, 9, 3, 9, 3, 9, 5, 9, 282, 10, 9, 5, 9, 284, 10, 9, 3, 9, 3, 9, 3, 9, 5, 9, 289, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 298, 10, 9, 12, 9, 14, 9, 301, 11, 9, 3, 9, 5, 9, 304, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 311, 10, 9, 12, 9, 14, 9, 314, 11, 9, 3, 10, 3, 10, 3, 10, 7, 10, 319, 10, 10, 12, 10, 14, 10, 322, 11, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 335, 10, 12, 3, 12, 3, 12, 5, 12, 339, 10, 12, 3, 13, 3, 13, 5, 13, 343, 10, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 354, 10, 14, 3, 15, 3, 15, 7, 15, 358, 10, 15, 12, 15, 14, 15, 361, 11, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 377, 10, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 7, 16, 387, 10, 16, 12, 16, 14, 16, 390, 11, 16, 3, 16, 2, 4, 16, 30, 17, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 2, 13, 3, 2, 11, 21, 3, 2, 22, 23, 4, 2, 15, 16, 48, 48, 3, 2, 12, 14, 3, 2, 15, 16, 3, 2, 17, 18, 3, 2, 49, 50, 3, 2, 51, 52, 3, 2, 53, 58, 3, 2, 64, 65, 3, 2, 67, 72, 2, 460, 2, 35, 3, 2, 2, 2, 4, 44, 3, 2, 2, 2, 6, 86, 3, 2, 2, 2, 8, 88, 3, 2, 2, 2, 10, 160, 3, 2, 2, 2, 12, 162, 3, 2, 2, 2, 14, 168, 3, 2, 2, 2, 16, 221, 3, 2, 2, 2, 18, 320, 3, 2, 2, 2, 20, 325, 3, 2, 2, 2, 22, 338, 3, 2, 2, 2, 24, 342, 3, 2, 2, 2, 26, 353, 3, 2, 2, 2, 28, 359, 3, 2, 2, 2, 30, 376, 3, 2, 2, 2, 32, 34, 5, 4, 3, 2, 33, 32, 3, 2, 2, 2, 34, 37, 3, 2, 2, 2, 35, 33, 3, 2, 2, 2, 35, 36, 3, 2, 2, 2, 36, 38, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 38, 39, 7, 2, 2, 3, 39, 3, 3, 2, 2, 2, 40, 41, 5, 6, 4, 2, 41, 42, 7, 3, 2, 2, 42, 45, 3, 2, 2, 2, 43, 45, 5, 10, 6, 2, 44, 40, 3, 2, 2, 2, 44, 43, 3, 2, 2, 2, 45, 5, 3, 2, 2, 2, 46, 47, 7, 4, 2, 2, 47, 54, 7, 77, 2, 2, 48, 49, 7, 5, 2, 2, 49, 55, 5, 28, 15, 2, 50, 51, 7, 6, 2, 2, 51, 55, 5, 28, 15, 2, 52, 53, 7, 7, 2, 2, 53, 55, 7, 77, 2, 2, 54, 48, 3, 2, 2, 2, 54, 50, 3, 2, 2, 2, 54, 52, 3, 2, 2, 2, 54, 55, 3, 2, 2, 2, 55, 87, 3, 2, 2, 2, 56, 87, 7, 8, 2, 2, 57, 59, 7, 9, 2, 2, 58, 60, 5, 18, 10, 2, 59, 58, 3, 2, 2, 2, 59, 60, 3, 2, 2, 2, 60, 87, 3, 2, 2, 2, 61, 62, 5, 30, 16, 2, 62, 65, 7, 77, 2, 2, 63, 64, 7, 10, 2, 2, 64, 66, 5, 18, 10, 2, 65, 63, 3, 2, 2, 2, 65, 66, 3, 2, 2, 2, 66, 87, 3, 2, 2, 2, 67, 68, 5, 8, 5, 2, 68, 69, 7, 10, 2, 2, 69, 71, 3, 2, 2, 2, 70, 67, 3, 2, 2, 2, 71, 74, 3, 2, 2, 2, 72, 70, 3, 2, 2, 2, 72, 73, 3, 2, 2, 2, 73, 75, 3, 2, 2, 2, 74, 72, 3, 2, 2, 2, 75, 87, 5, 18, 10, 2, 76, 77, 5, 16, 9, 2, 77, 78, 9, 2, 2, 2, 78, 79, 7, 10, 2, 2, 79, 80, 5, 16, 9, 2, 80, 87, 3, 2, 2, 2, 81, 87, 9, 3, 2, 2, 82, 84, 7, 24, 2, 2, 83, 85, 5, 18, 10, 2, 84, 83, 3, 2, 2, 2, 84, 85, 3, 2, 2, 2, 85, 87, 3, 2, 2, 2, 86, 46, 3, 2, 2, 2, 86, 56, 3, 2, 2, 2, 86, 57, 3, 2, 2, 2, 86, 61, 3, 2, 2, 2, 86, 72, 3, 2, 2, 2, 86, 76, 3, 2, 2, 2, 86, 81, 3, 2, 2, 2, 86, 82, 3, 2, 2, 2, 87, 7, 3, 2, 2, 2, 88, 93, 5, 16, 9, 2, 89, 90, 7, 25, 2, 2, 90, 92, 5, 16, 9, 2, 91, 89, 3, 2, 2, 2, 92, 95, 3, 2, 2, 2, 93, 91, 3, 2, 2, 2, 93, 94, 3, 2, 2, 2, 94, 9, 3, 2, 2, 2, 95, 93, 3, 2, 2, 2, 96, 97, 7, 26, 2, 2, 97, 98, 5, 16, 9, 2, 98, 99, 7, 27, 2, 2, 99, 107, 5, 14, 8, 2, 100, 101, 7, 28, 2, 2, 101, 102, 5, 16, 9, 2, 102, 103, 7, 27, 2, 2, 103, 104, 5, 14, 8, 2, 104, 106, 3, 2, 2, 2, 105, 100, 3, 2, 2, 2, 106, 109, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 107, 108, 3, 2, 2, 2, 108, 113, 3, 2, 2, 2, 109, 107, 3, 2, 2, 2, 110, 111, 7, 29, 2, 2, 111, 112, 7, 27, 2, 2, 112, 114, 5, 14, 8, 2, 113, 110, 3, 2, 2, 2, 113, 114, 3, 2, 2, 2, 114, 161, 3, 2, 2, 2, 115, 116, 7, 30, 2, 2, 116, 117, 5, 16, 9, 2, 117, 118, 7, 27, 2, 2, 118, 119, 5, 14, 8, 2, 119, 161, 3, 2, 2, 2, 120, 121, 7, 31, 2, 2, 121, 122, 5, 16, 9, 2, 122, 123, 7, 27, 2, 2, 123, 124, 5, 14, 8, 2, 124, 161, 3, 2, 2, 2, 125, 126, 7, 32, 2, 2, 126, 127, 5, 18, 10, 2, 127, 128, 7, 33, 2, 2, 128, 131, 5, 18, 10, 2, 129, 130, 7, 34, 2, 2, 130, 132, 5, 18, 10, 2, 131, 129, 3, 2, 2, 2, 131, 132, 3, 2, 2, 2, 132, 133, 3, 2, 2, 2, 133, 134, 7, 27, 2, 2, 134, 135, 5, 14, 8, 2, 135, 161, 3, 2, 2, 2, 136, 137, 7, 35, 2, 2, 137, 138, 7, 77, 2, 2, 138, 144, 7, 36, 2, 2, 139, 140, 5, 12, 7, 2, 140, 141, 7, 25, 2, 2, 141, 143, 3, 2, 2, 2, 142, 139, 3, 2, 2, 2, 143, 146, 3, 2, 2, 2, 144, 142, 3, 2, 2, 2, 144, 145, 3, 2, 2, 2, 145, 148, 3, 2, 2, 2, 146, 144, 3, 2, 2, 2, 147, 149, 5, 12, 7, 2, 148, 147, 3, 2, 2, 2, 148, 149, 3, 2, 2, 2, 149, 150, 3, 2, 2, 2, 150, 152, 7, 37, 2, 2, 151, 153, 5, 30, 16, 2, 152, 151, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 158, 3, 2, 2, 2, 154, 155, 7, 38, 2, 2, 155, 159, 5, 14, 8, 2, 156, 157, 7, 39, 2, 2, 157, 159, 7, 3, 2, 2, 158, 154, 3, 2, 2, 2, 158, 156, 3, 2, 2, 2, 159, 161, 3, 2, 2, 2, 160, 96, 3, 2, 2, 2, 160, 115, 3, 2, 2, 2, 160, 120, 3, 2, 2, 2, 160, 125, 3, 2, 2, 2, 160, 136, 3, 2, 2, 2, 161, 11, 3, 2, 2, 2, 162, 163, 5, 30, 16, 2, 163, 166, 7, 77, 2, 2, 164, 165, 7, 40, 2, 2, 165, 167, 5, 16, 9, 2, 166, 164, 3, 2, 2, 2, 166, 167, 3, 2, 2, 2, 167, 13, 3, 2, 2, 2, 168, 170, 7, 41, 2, 2, 169, 171, 5, 4, 3, 2, 170, 169, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 170, 3, 2, 2, 2, 172, 173, 3, 2, 2, 2, 173, 174, 3, 2, 2, 2, 174, 175, 7, 42, 2, 2, 175, 15, 3, 2, 2, 2, 176, 177, 8, 9, 1, 2, 177, 222, 5, 26, 14, 2, 178, 179, 7, 36, 2, 2, 179, 180, 5, 18, 10, 2, 180, 181, 7, 37, 2, 2, 181, 222, 3, 2, 2, 2, 182, 188, 7, 43, 2, 2, 183, 184, 5, 16, 9, 2, 184, 185, 7, 25, 2, 2, 185, 187, 3, 2, 2, 2, 186, 183, 3, 2, 2, 2, 187, 190, 3, 2, 2, 2, 188, 186, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 192, 3, 2, 2, 2, 190, 188, 3, 2, 2, 2, 191, 193, 5, 16, 9, 2, 192, 191, 3, 2, 2, 2, 192, 193, 3, 2, 2, 2, 193, 194, 3, 2, 2, 2, 194, 222, 7, 44, 2, 2, 195, 196, 7, 43, 2, 2, 196, 198, 5, 16, 9, 2, 197, 199, 5, 22, 12, 2, 198, 197, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 198, 3, 2, 2, 2, 200, 201, 3, 2, 2, 2, 201, 202, 3, 2, 2, 2, 202, 203, 7, 44, 2, 2, 203, 222, 3, 2, 2, 2, 204, 205, 9, 4, 2, 2, 205, 222, 5, 16, 9, 18, 206, 207, 7, 59, 2, 2, 207, 222, 5, 16, 9, 7, 208, 213, 7, 62, 2, 2, 209, 210, 7, 77, 2, 2, 210, 212, 7, 25, 2, 2, 211, 209, 3, 2, 2, 2, 212, 215, 3, 2, 2, 2, 213, 211, 3, 2, 2, 2, 213, 214, 3, 2, 2, 2, 214, 217, 3, 2, 2, 2, 215, 213, 3, 2, 2, 2, 216, 218, 7, 77, 2, 2, 217, 216, 3, 2, 2, 2, 217, 218, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 220, 7, 63, 2, 2, 220, 222, 5, 16, 9, 3, 221, 176, 3, 2, 2, 2, 221, 178, 3, 2, 2, 2, 221, 182, 3, 2, 2, 2, 221, 195, 3, 2, 2, 2, 221, 204, 3, 2, 2, 2, 221, 206, 3, 2, 2, 2, 221, 208, 3, 2, 2, 2, 222, 312, 3, 2, 2, 2, 223, 224, 12, 19, 2, 2, 224, 225, 7, 11, 2, 2, 225, 311, 5, 16, 9, 19, 226, 227, 12, 17, 2, 2, 227, 228, 9, 5, 2, 2, 228, 311, 5, 16, 9, 18, 229, 230, 12, 16, 2, 2, 230, 231, 9, 6, 2, 2, 231, 311, 5, 16, 9, 17, 232, 233, 12, 15, 2, 2, 233, 234, 9, 7, 2, 2, 234, 311, 5, 16, 9, 16, 235, 236, 12, 14, 2, 2, 236, 237, 7, 19, 2, 2, 237, 311, 5, 16, 9, 15, 238, 239, 12, 13, 2, 2, 239, 240, 7, 20, 2, 2, 240, 311, 5, 16, 9, 14, 241, 242, 12, 12, 2, 2, 242, 243, 7, 21, 2, 2, 243, 311, 5, 16, 9, 13, 244, 245, 12, 11, 2, 2, 245, 246, 9, 8, 2, 2, 246, 311, 5, 16, 9, 12, 247, 248, 12, 9, 2, 2, 248, 249, 9, 9, 2, 2, 249, 311, 5, 16, 9, 10, 250, 251, 12, 8, 2, 2, 251, 252, 9, 10, 2, 2, 252, 311, 5, 16, 9, 8, 253, 254, 12, 6, 2, 2, 254, 255, 7, 60, 2, 2, 255, 311, 5, 16, 9, 6, 256, 257, 12, 5, 2, 2, 257, 258, 7, 61, 2, 2, 258, 311, 5, 16, 9, 5, 259, 260, 12, 4, 2, 2, 260, 261, 7, 45, 2, 2, 261, 262, 5, 16, 9, 2, 262, 263, 7, 40, 2, 2, 263, 264, 5, 16, 9, 4, 264, 311, 3, 2, 2, 2, 265, 266, 12, 24, 2, 2, 266, 267, 7, 43, 2, 2, 267, 268, 5, 18, 10, 2, 268, 269, 7, 44, 2, 2, 269, 311, 3, 2, 2, 2, 270, 271, 12, 23, 2, 2, 271, 273, 7, 43, 2, 2, 272, 274, 5, 16, 9, 2, 273, 272, 3, 2, 2, 2, 273, 274, 3, 2, 2, 2, 274, 275, 3, 2, 2, 2, 275, 277, 7, 40, 2, 2, 276, 278, 5, 16, 9, 2, 277, 276, 3, 2, 2, 2, 277, 278, 3, 2, 2, 2, 278, 283, 3, 2, 2, 2, 279, 281, 7, 40, 2, 2, 280, 282, 5, 16, 9, 2, 281, 280, 3, 2, 2, 2, 281, 282, 3, 2, 2, 2, 282, 284, 3, 2, 2, 2, 283, 279, 3, 2, 2, 2, 283, 284, 3, 2, 2, 2, 284, 285, 3, 2, 2, 2, 285, 311, 7, 44, 2, 2, 286, 288, 12, 22, 2, 2, 287, 289, 7, 45, 2, 2, 288, 287, 3, 2, 2, 2, 288, 289, 3, 2, 2, 2, 289, 290, 3, 2, 2, 2, 290, 291, 7, 46, 2, 2, 291, 311, 7, 77, 2, 2, 292, 293, 12, 21, 2, 2, 293, 299, 7, 36, 2, 2, 294, 295, 5, 24, 13, 2, 295, 296, 7, 25, 2, 2, 296, 298, 3, 2, 2, 2, 297, 294, 3, 2, 2, 2, 298, 301, 3, 2, 2, 2, 299, 297, 3, 2, 2, 2, 299, 300, 3, 2, 2, 2, 300, 303, 3, 2, 2, 2, 301, 299, 3, 2, 2, 2, 302, 304, 5, 24, 13, 2, 303, 302, 3, 2, 2, 2, 303, 304, 3, 2, 2, 2, 304, 305, 3, 2, 2, 2, 305, 311, 7, 37, 2, 2, 306, 307, 12, 20, 2, 2, 307, 311, 7, 47, 2, 2, 308, 309, 12, 10, 2, 2, 309, 311, 7, 50, 2, 2, 310, 223, 3, 2, 2, 2, 310, 226, 3, 2, 2, 2, 310, 229, 3, 2, 2, 2, 310, 232, 3, 2, 2, 2, 310, 235, 3, 2, 2, 2, 310, 238, 3, 2, 2, 2, 310, 241, 3, 2, 2, 2, 310, 244, 3, 2, 2, 2, 310, 247, 3, 2, 2, 2, 310, 250, 3, 2, 2, 2, 310, 253, 3, 2, 2, 2, 310, 256, 3, 2, 2, 2, 310, 259, 3, 2, 2, 2, 310, 265, 3, 2, 2, 2, 310, 270, 3, 2, 2, 2, 310, 286, 3, 2, 2, 2, 310, 292, 3, 2, 2, 2, 310, 306, 3, 2, 2, 2, 310, 308, 3, 2, 2, 2, 311, 314, 3, 2, 2, 2, 312, 310, 3, 2, 2, 2, 312, 313, 3, 2, 2, 2, 313, 17, 3, 2, 2, 2, 314, 312, 3, 2, 2, 2, 315, 316, 5, 16, 9, 2, 316, 317, 7, 25, 2, 2, 317, 319, 3, 2, 2, 2, 318, 315, 3, 2, 2, 2, 319, 322, 3, 2, 2, 2, 320, 318, 3, 2, 2, 2, 320, 321, 3, 2, 2, 2, 321, 323, 3, 2, 2, 2, 322, 320, 3, 2, 2, 2, 323, 324, 5, 16, 9, 2, 324, 19, 3, 2, 2, 2, 325, 326, 5, 18, 10, 2, 326, 327, 7, 2, 2, 3, 327, 21, 3, 2, 2, 2, 328, 329, 7, 32, 2, 2, 329, 330, 5, 18, 10, 2, 330, 331, 7, 33, 2, 2, 331, 334, 5, 18, 10, 2, 332, 333, 7, 34, 2, 2, 333, 335, 5, 18, 10, 2, 334, 332, 3, 2, 2, 2, 334, 335, 3, 2, 2, 2, 335, 339, 3, 2, 2, 2, 336, 337, 7, 26, 2, 2, 337, 339, 5, 16, 9, 2, 338, 328, 3, 2, 2, 2, 338, 336, 3, 2, 2, 2, 339, 23, 3, 2, 2, 2, 340, 341, 7, 77, 2, 2, 341, 343, 7, 10, 2, 2, 342, 340, 3, 2, 2, 2, 342, 343, 3, 2, 2, 2, 343, 344, 3, 2, 2, 2, 344, 345, 5, 16, 9, 2, 345, 25, 3, 2, 2, 2, 346, 354, 7, 73, 2, 2, 347, 354, 7, 74, 2, 2, 348, 354, 9, 11, 2, 2, 349, 354, 7, 75, 2, 2, 350, 354, 7, 76, 2, 2, 351, 354, 7, 66, 2, 2, 352, 354, 7, 77, 2, 2, 353, 346, 3, 2, 2, 2, 353, 347, 3, 2, 2, 2, 353, 348, 3, 2, 2, 2, 353, 349, 3, 2, 2, 2, 353, 350, 3, 2, 2, 2, 353, 351, 3, 2, 2, 2, 353, 352, 3, 2, 2, 2, 354, 27, 3, 2, 2, 2, 355, 356, 7, 77, 2, 2, 356, 358, 7, 25, 2, 2, 357, 355, 3, 2, 2, 2, 358, 361, 3, 2, 2, 2, 359, 357, 3, 2, 2, 2, 359, 360, 3, 2, 2, 2, 360, 362, 3, 2, 2, 2, 361, 359, 3, 2, 2, 2, 362, 363, 7, 77, 2, 2, 363, 29, 3, 2, 2, 2, 364, 365, 8, 16, 1, 2, 365, 377, 9, 12, 2, 2, 366, 367, 7, 36, 2, 2, 367, 368, 5, 30, 16, 2, 368, 369, 7, 37, 2, 2, 369, 377, 3, 2, 2, 2, 370, 371, 7, 43, 2, 2, 371, 372, 5, 30, 16, 2, 372, 373, 7, 44, 2, 2, 373, 377, 3, 2, 2, 2, 374, 375, 7, 63, 2, 2, 375, 377, 5, 30, 16, 3, 376, 364, 3, 2, 2, 2, 376, 366, 3, 2, 2, 2, 376, 370, 3, 2, 2, 2, 376, 374, 3, 2, 2, 2, 377, 388, 3, 2, 2, 2, 378, 379, 12, 5, 2, 2, 379, 380, 7, 12, 2, 2, 380, 387, 5, 30, 16, 5, 381, 382, 12, 4, 2, 2, 382, 383, 7, 63, 2, 2, 383, 387, 5, 30, 16, 4, 384, 385, 12, 6, 2, 2, 385, 387, 7, 45, 2, 2, 386, 378, 3, 2, 2, 2, 386, 381, 3, 2, 2, 2, 386, 384, 3, 2, 2, 2, 387, 390, 3, 2, 2, 2, 388, 386, 3, 2, 2, 2, 388, 389, 3, 2, 2, 2, 389, 31, 3, 2, 2, 2, 390, 388, 3, 2, 2, 2, 45, 35, 44, 54, 59, 65, 72, 84, 86, 93, 107, 113, 131, 144, 148, 152, 158, 160, 166, 172, 188, 192, 200, 213, 217, 221, 273, 277, 281, 283, 288, 299, 303, 310, 312, 320, 334, 338, 342, 353, 359, 376, 386, 388] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 81, 395, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 3, 2, 7, 2, 34, 10, 2, 12, 2, 14, 2, 37, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 45, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 55, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 60, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 66, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 71, 10, 4, 12, 4, 14, 4, 74, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 85, 10, 4, 5, 4, 87, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 92, 10, 5, 12, 5, 14, 5, 95, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 106, 10, 6, 12, 6, 14, 6, 109, 11, 6, 3, 6, 3, 6, 3, 6, 5, 6, 114, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 132, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 143, 10, 6, 12, 6, 14, 6, 146, 11, 6, 3, 6, 5, 6, 149, 10, 6, 3, 6, 3, 6, 5, 6, 153, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 159, 10, 6, 5, 6, 161, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 167, 10, 7, 3, 8, 3, 8, 6, 8, 171, 10, 8, 13, 8, 14, 8, 172, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 187, 10, 9, 12, 9, 14, 9, 190, 11, 9, 3, 9, 5, 9, 193, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 6, 9, 199, 10, 9, 13, 9, 14, 9, 200, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 212, 10, 9, 12, 9, 14, 9, 215, 11, 9, 3, 9, 5, 9, 218, 10, 9, 3, 9, 3, 9, 5, 9, 222, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 277, 10, 9, 3, 9, 3, 9, 5, 9, 281, 10, 9, 3, 9, 3, 9, 5, 9, 285, 10, 9, 5, 9, 287, 10, 9, 3, 9, 3, 9, 3, 9, 5, 9, 292, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 301, 10, 9, 12, 9, 14, 9, 304, 11, 9, 3, 9, 5, 9, 307, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 314, 10, 9, 12, 9, 14, 9, 317, 11, 9, 3, 10, 3, 10, 3, 10, 7, 10, 322, 10, 10, 12, 10, 14, 10, 325, 11, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 338, 10, 12, 3, 12, 3, 12, 5, 12, 342, 10, 12, 3, 13, 3, 13, 5, 13, 346, 10, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 357, 10, 14, 3, 15, 3, 15, 7, 15, 361, 10, 15, 12, 15, 14, 15, 364, 11, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 380, 10, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 7, 16, 390, 10, 16, 12, 16, 14, 16, 393, 11, 16, 3, 16, 2, 4, 16, 30, 17, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 2, 13, 3, 2, 11, 22, 3, 2, 23, 24, 4, 2, 15, 16, 49, 49, 3, 2, 12, 14, 3, 2, 15, 16, 3, 2, 17, 18, 3, 2, 50, 51, 3, 2, 52, 53, 3, 2, 54, 59, 3, 2, 65, 66, 3, 2, 68, 73, 2, 464, 2, 35, 3, 2, 2, 2, 4, 44, 3, 2, 2, 2, 6, 86, 3, 2, 2, 2, 8, 88, 3, 2, 2, 2, 10, 160, 3, 2, 2, 2, 12, 162, 3, 2, 2, 2, 14, 168, 3, 2, 2, 2, 16, 221, 3, 2, 2, 2, 18, 323, 3, 2, 2, 2, 20, 328, 3, 2, 2, 2, 22, 341, 3, 2, 2, 2, 24, 345, 3, 2, 2, 2, 26, 356, 3, 2, 2, 2, 28, 362, 3, 2, 2, 2, 30, 379, 3, 2, 2, 2, 32, 34, 5, 4, 3, 2, 33, 32, 3, 2, 2, 2, 34, 37, 3, 2, 2, 2, 35, 33, 3, 2, 2, 2, 35, 36, 3, 2, 2, 2, 36, 38, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 38, 39, 7, 2, 2, 3, 39, 3, 3, 2, 2, 2, 40, 41, 5, 6, 4, 2, 41, 42, 7, 3, 2, 2, 42, 45, 3, 2, 2, 2, 43, 45, 5, 10, 6, 2, 44, 40, 3, 2, 2, 2, 44, 43, 3, 2, 2, 2, 45, 5, 3, 2, 2, 2, 46, 47, 7, 4, 2, 2, 47, 54, 7, 78, 2, 2, 48, 49, 7, 5, 2, 2, 49, 55, 5, 28, 15, 2, 50, 51, 7, 6, 2, 2, 51, 55, 5, 28, 15, 2, 52, 53, 7, 7, 2, 2, 53, 55, 7, 78, 2, 2, 54, 48, 3, 2, 2, 2, 54, 50, 3, 2, 2, 2, 54, 52, 3, 2, 2, 2, 54, 55, 3, 2, 2, 2, 55, 87, 3, 2, 2, 2, 56, 87, 7, 8, 2, 2, 57, 59, 7, 9, 2, 2, 58, 60, 5, 18, 10, 2, 59, 58, 3, 2, 2, 2, 59, 60, 3, 2, 2, 2, 60, 87, 3, 2, 2, 2, 61, 62, 5, 30, 16, 2, 62, 65, 7, 78, 2, 2, 63, 64, 7, 10, 2, 2, 64, 66, 5, 18, 10, 2, 65, 63, 3, 2, 2, 2, 65, 66, 3, 2, 2, 2, 66, 87, 3, 2, 2, 2, 67, 68, 5, 8, 5, 2, 68, 69, 7, 10, 2, 2, 69, 71, 3, 2, 2, 2, 70, 67, 3, 2, 2, 2, 71, 74, 3, 2, 2, 2, 72, 70, 3, 2, 2, 2, 72, 73, 3, 2, 2, 2, 73, 75, 3, 2, 2, 2, 74, 72, 3, 2, 2, 2, 75, 87, 5, 18, 10, 2, 76, 77, 5, 16, 9, 2, 77, 78, 9, 2, 2, 2, 78, 79, 7, 10, 2, 2, 79, 80, 5, 16, 9, 2, 80, 87, 3, 2, 2, 2, 81, 87, 9, 3, 2, 2, 82, 84, 7, 25, 2, 2, 83, 85, 5, 18, 10, 2, 84, 83, 3, 2, 2, 2, 84, 85, 3, 2, 2, 2, 85, 87, 3, 2, 2, 2, 86, 46, 3, 2, 2, 2, 86, 56, 3, 2, 2, 2, 86, 57, 3, 2, 2, 2, 86, 61, 3, 2, 2, 2, 86, 72, 3, 2, 2, 2, 86, 76, 3, 2, 2, 2, 86, 81, 3, 2, 2, 2, 86, 82, 3, 2, 2, 2, 87, 7, 3, 2, 2, 2, 88, 93, 5, 16, 9, 2, 89, 90, 7, 26, 2, 2, 90, 92, 5, 16, 9, 2, 91, 89, 3, 2, 2, 2, 92, 95, 3, 2, 2, 2, 93, 91, 3, 2, 2, 2, 93, 94, 3, 2, 2, 2, 94, 9, 3, 2, 2, 2, 95, 93, 3, 2, 2, 2, 96, 97, 7, 27, 2, 2, 97, 98, 5, 16, 9, 2, 98, 99, 7, 28, 2, 2, 99, 107, 5, 14, 8, 2, 100, 101, 7, 29, 2, 2, 101, 102, 5, 16, 9, 2, 102, 103, 7, 28, 2, 2, 103, 104, 5, 14, 8, 2, 104, 106, 3, 2, 2, 2, 105, 100, 3, 2, 2, 2, 106, 109, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 107, 108, 3, 2, 2, 2, 108, 113, 3, 2, 2, 2, 109, 107, 3, 2, 2, 2, 110, 111, 7, 30, 2, 2, 111, 112, 7, 28, 2, 2, 112, 114, 5, 14, 8, 2, 113, 110, 3, 2, 2, 2, 113, 114, 3, 2, 2, 2, 114, 161, 3, 2, 2, 2, 115, 116, 7, 31, 2, 2, 116, 117, 5, 16, 9, 2, 117, 118, 7, 28, 2, 2, 118, 119, 5, 14, 8, 2, 119, 161, 3, 2, 2, 2, 120, 121, 7, 32, 2, 2, 121, 122, 5, 16, 9, 2, 122, 123, 7, 28, 2, 2, 123, 124, 5, 14, 8, 2, 124, 161, 3, 2, 2, 2, 125, 126, 7, 33, 2, 2, 126, 127, 5, 18, 10, 2, 127, 128, 7, 34, 2, 2, 128, 131, 5, 18, 10, 2, 129, 130, 7, 35, 2, 2, 130, 132, 5, 18, 10, 2, 131, 129, 3, 2, 2, 2, 131, 132, 3, 2, 2, 2, 132, 133, 3, 2, 2, 2, 133, 134, 7, 28, 2, 2, 134, 135, 5, 14, 8, 2, 135, 161, 3, 2, 2, 2, 136, 137, 7, 36, 2, 2, 137, 138, 7, 78, 2, 2, 138, 144, 7, 37, 2, 2, 139, 140, 5, 12, 7, 2, 140, 141, 7, 26, 2, 2, 141, 143, 3, 2, 2, 2, 142, 139, 3, 2, 2, 2, 143, 146, 3, 2, 2, 2, 144, 142, 3, 2, 2, 2, 144, 145, 3, 2, 2, 2, 145, 148, 3, 2, 2, 2, 146, 144, 3, 2, 2, 2, 147, 149, 5, 12, 7, 2, 148, 147, 3, 2, 2, 2, 148, 149, 3, 2, 2, 2, 149, 150, 3, 2, 2, 2, 150, 152, 7, 38, 2, 2, 151, 153, 5, 30, 16, 2, 152, 151, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 158, 3, 2, 2, 2, 154, 155, 7, 39, 2, 2, 155, 159, 5, 14, 8, 2, 156, 157, 7, 40, 2, 2, 157, 159, 7, 3, 2, 2, 158, 154, 3, 2, 2, 2, 158, 156, 3, 2, 2, 2, 159, 161, 3, 2, 2, 2, 160, 96, 3, 2, 2, 2, 160, 115, 3, 2, 2, 2, 160, 120, 3, 2, 2, 2, 160, 125, 3, 2, 2, 2, 160, 136, 3, 2, 2, 2, 161, 11, 3, 2, 2, 2, 162, 163, 5, 30, 16, 2, 163, 166, 7, 78, 2, 2, 164, 165, 7, 41, 2, 2, 165, 167, 5, 16, 9, 2, 166, 164, 3, 2, 2, 2, 166, 167, 3, 2, 2, 2, 167, 13, 3, 2, 2, 2, 168, 170, 7, 42, 2, 2, 169, 171, 5, 4, 3, 2, 170, 169, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 170, 3, 2, 2, 2, 172, 173, 3, 2, 2, 2, 173, 174, 3, 2, 2, 2, 174, 175, 7, 43, 2, 2, 175, 15, 3, 2, 2, 2, 176, 177, 8, 9, 1, 2, 177, 222, 5, 26, 14, 2, 178, 179, 7, 37, 2, 2, 179, 180, 5, 18, 10, 2, 180, 181, 7, 38, 2, 2, 181, 222, 3, 2, 2, 2, 182, 188, 7, 44, 2, 2, 183, 184, 5, 16, 9, 2, 184, 185, 7, 26, 2, 2, 185, 187, 3, 2, 2, 2, 186, 183, 3, 2, 2, 2, 187, 190, 3, 2, 2, 2, 188, 186, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 192, 3, 2, 2, 2, 190, 188, 3, 2, 2, 2, 191, 193, 5, 16, 9, 2, 192, 191, 3, 2, 2, 2, 192, 193, 3, 2, 2, 2, 193, 194, 3, 2, 2, 2, 194, 222, 7, 45, 2, 2, 195, 196, 7, 44, 2, 2, 196, 198, 5, 16, 9, 2, 197, 199, 5, 22, 12, 2, 198, 197, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 198, 3, 2, 2, 2, 200, 201, 3, 2, 2, 2, 201, 202, 3, 2, 2, 2, 202, 203, 7, 45, 2, 2, 203, 222, 3, 2, 2, 2, 204, 205, 9, 4, 2, 2, 205, 222, 5, 16, 9, 19, 206, 207, 7, 60, 2, 2, 207, 222, 5, 16, 9, 8, 208, 213, 7, 63, 2, 2, 209, 210, 7, 78, 2, 2, 210, 212, 7, 26, 2, 2, 211, 209, 3, 2, 2, 2, 212, 215, 3, 2, 2, 2, 213, 211, 3, 2, 2, 2, 213, 214, 3, 2, 2, 2, 214, 217, 3, 2, 2, 2, 215, 213, 3, 2, 2, 2, 216, 218, 7, 78, 2, 2, 217, 216, 3, 2, 2, 2, 217, 218, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 220, 7, 64, 2, 2, 220, 222, 5, 16, 9, 3, 221, 176, 3, 2, 2, 2, 221, 178, 3, 2, 2, 2, 221, 182, 3, 2, 2, 2, 221, 195, 3, 2, 2, 2, 221, 204, 3, 2, 2, 2, 221, 206, 3, 2, 2, 2, 221, 208, 3, 2, 2, 2, 222, 315, 3, 2, 2, 2, 223, 224, 12, 20, 2, 2, 224, 225, 7, 11, 2, 2, 225, 314, 5, 16, 9, 20, 226, 227, 12, 18, 2, 2, 227, 228, 9, 5, 2, 2, 228, 314, 5, 16, 9, 19, 229, 230, 12, 17, 2, 2, 230, 231, 9, 6, 2, 2, 231, 314, 5, 16, 9, 18, 232, 233, 12, 16, 2, 2, 233, 234, 9, 7, 2, 2, 234, 314, 5, 16, 9, 17, 235, 236, 12, 15, 2, 2, 236, 237, 7, 19, 2, 2, 237, 314, 5, 16, 9, 16, 238, 239, 12, 14, 2, 2, 239, 240, 7, 20, 2, 2, 240, 314, 5, 16, 9, 15, 241, 242, 12, 13, 2, 2, 242, 243, 7, 21, 2, 2, 243, 314, 5, 16, 9, 14, 244, 245, 12, 12, 2, 2, 245, 246, 9, 8, 2, 2, 246, 314, 5, 16, 9, 13, 247, 248, 12, 10, 2, 2, 248, 249, 9, 9, 2, 2, 249, 314, 5, 16, 9, 11, 250, 251, 12, 9, 2, 2, 251, 252, 9, 10, 2, 2, 252, 314, 5, 16, 9, 9, 253, 254, 12, 7, 2, 2, 254, 255, 7, 61, 2, 2, 255, 314, 5, 16, 9, 7, 256, 257, 12, 6, 2, 2, 257, 258, 7, 62, 2, 2, 258, 314, 5, 16, 9, 6, 259, 260, 12, 5, 2, 2, 260, 261, 7, 22, 2, 2, 261, 314, 5, 16, 9, 5, 262, 263, 12, 4, 2, 2, 263, 264, 7, 46, 2, 2, 264, 265, 5, 16, 9, 2, 265, 266, 7, 41, 2, 2, 266, 267, 5, 16, 9, 4, 267, 314, 3, 2, 2, 2, 268, 269, 12, 25, 2, 2, 269, 270, 7, 44, 2, 2, 270, 271, 5, 18, 10, 2, 271, 272, 7, 45, 2, 2, 272, 314, 3, 2, 2, 2, 273, 274, 12, 24, 2, 2, 274, 276, 7, 44, 2, 2, 275, 277, 5, 16, 9, 2, 276, 275, 3, 2, 2, 2, 276, 277, 3, 2, 2, 2, 277, 278, 3, 2, 2, 2, 278, 280, 7, 41, 2, 2, 279, 281, 5, 16, 9, 2, 280, 279, 3, 2, 2, 2, 280, 281, 3, 2, 2, 2, 281, 286, 3, 2, 2, 2, 282, 284, 7, 41, 2, 2, 283, 285, 5, 16, 9, 2, 284, 283, 3, 2, 2, 2, 284, 285, 3, 2, 2, 2, 285, 287, 3, 2, 2, 2, 286, 282, 3, 2, 2, 2, 286, 287, 3, 2, 2, 2, 287, 288, 3, 2, 2, 2, 288, 314, 7, 45, 2, 2, 289, 291, 12, 23, 2, 2, 290, 292, 7, 46, 2, 2, 291, 290, 3, 2, 2, 2, 291, 292, 3, 2, 2, 2, 292, 293, 3, 2, 2, 2, 293, 294, 7, 47, 2, 2, 294, 314, 7, 78, 2, 2, 295, 296, 12, 22, 2, 2, 296, 302, 7, 37, 2, 2, 297, 298, 5, 24, 13, 2, 298, 299, 7, 26, 2, 2, 299, 301, 3, 2, 2, 2, 300, 297, 3, 2, 2, 2, 301, 304, 3, 2, 2, 2, 302, 300, 3, 2, 2, 2, 302, 303, 3, 2, 2, 2, 303, 306, 3, 2, 2, 2, 304, 302, 3, 2, 2, 2, 305, 307, 5, 24, 13, 2, 306, 305, 3, 2, 2, 2, 306, 307, 3, 2, 2, 2, 307, 308, 3, 2, 2, 2, 308, 314, 7, 38, 2, 2, 309, 310, 12, 21, 2, 2, 310, 314, 7, 48, 2, 2, 311, 312, 12, 11, 2, 2, 312, 314, 7, 51, 2, 2, 313, 223, 3, 2, 2, 2, 313, 226, 3, 2, 2, 2, 313, 229, 3, 2, 2, 2, 313, 232, 3, 2, 2, 2, 313, 235, 3, 2, 2, 2, 313, 238, 3, 2, 2, 2, 313, 241, 3, 2, 2, 2, 313, 244, 3, 2, 2, 2, 313, 247, 3, 2, 2, 2, 313, 250, 3, 2, 2, 2, 313, 253, 3, 2, 2, 2, 313, 256, 3, 2, 2, 2, 313, 259, 3, 2, 2, 2, 313, 262, 3, 2, 2, 2, 313, 268, 3, 2, 2, 2, 313, 273, 3, 2, 2, 2, 313, 289, 3, 2, 2, 2, 313, 295, 3, 2, 2, 2, 313, 309, 3, 2, 2, 2, 313, 311, 3, 2, 2, 2, 314, 317, 3, 2, 2, 2, 315, 313, 3, 2, 2, 2, 315, 316, 3, 2, 2, 2, 316, 17, 3, 2, 2, 2, 317, 315, 3, 2, 2, 2, 318, 319, 5, 16, 9, 2, 319, 320, 7, 26, 2, 2, 320, 322, 3, 2, 2, 2, 321, 318, 3, 2, 2, 2, 322, 325, 3, 2, 2, 2, 323, 321, 3, 2, 2, 2, 323, 324, 3, 2, 2, 2, 324, 326, 3, 2, 2, 2, 325, 323, 3, 2, 2, 2, 326, 327, 5, 16, 9, 2, 327, 19, 3, 2, 2, 2, 328, 329, 5, 18, 10, 2, 329, 330, 7, 2, 2, 3, 330, 21, 3, 2, 2, 2, 331, 332, 7, 33, 2, 2, 332, 333, 5, 18, 10, 2, 333, 334, 7, 34, 2, 2, 334, 337, 5, 18, 10, 2, 335, 336, 7, 35, 2, 2, 336, 338, 5, 18, 10, 2, 337, 335, 3, 2, 2, 2, 337, 338, 3, 2, 2, 2, 338, 342, 3, 2, 2, 2, 339, 340, 7, 27, 2, 2, 340, 342, 5, 16, 9, 2, 341, 331, 3, 2, 2, 2, 341, 339, 3, 2, 2, 2, 342, 23, 3, 2, 2, 2, 343, 344, 7, 78, 2, 2, 344, 346, 7, 10, 2, 2, 345, 343, 3, 2, 2, 2, 345, 346, 3, 2, 2, 2, 346, 347, 3, 2, 2, 2, 347, 348, 5, 16, 9, 2, 348, 25, 3, 2, 2, 2, 349, 357, 7, 74, 2, 2, 350, 357, 7, 75, 2, 2, 351, 357, 9, 11, 2, 2, 352, 357, 7, 76, 2, 2, 353, 357, 7, 77, 2, 2, 354, 357, 7, 67, 2, 2, 355, 357, 7, 78, 2, 2, 356, 349, 3, 2, 2, 2, 356, 350, 3, 2, 2, 2, 356, 351, 3, 2, 2, 2, 356, 352, 3, 2, 2, 2, 356, 353, 3, 2, 2, 2, 356, 354, 3, 2, 2, 2, 356, 355, 3, 2, 2, 2, 357, 27, 3, 2, 2, 2, 358, 359, 7, 78, 2, 2, 359, 361, 7, 26, 2, 2, 360, 358, 3, 2, 2, 2, 361, 364, 3, 2, 2, 2, 362, 360, 3, 2, 2, 2, 362, 363, 3, 2, 2, 2, 363, 365, 3, 2, 2, 2, 364, 362, 3, 2, 2, 2, 365, 366, 7, 78, 2, 2, 366, 29, 3, 2, 2, 2, 367, 368, 8, 16, 1, 2, 368, 380, 9, 12, 2, 2, 369, 370, 7, 37, 2, 2, 370, 371, 5, 30, 16, 2, 371, 372, 7, 38, 2, 2, 372, 380, 3, 2, 2, 2, 373, 374, 7, 44, 2, 2, 374, 375, 5, 30, 16, 2, 375, 376, 7, 45, 2, 2, 376, 380, 3, 2, 2, 2, 377, 378, 7, 64, 2, 2, 378, 380, 5, 30, 16, 3, 379, 367, 3, 2, 2, 2, 379, 369, 3, 2, 2, 2, 379, 373, 3, 2, 2, 2, 379, 377, 3, 2, 2, 2, 380, 391, 3, 2, 2, 2, 381, 382, 12, 5, 2, 2, 382, 383, 7, 12, 2, 2, 383, 390, 5, 30, 16, 5, 384, 385, 12, 4, 2, 2, 385, 386, 7, 64, 2, 2, 386, 390, 5, 30, 16, 4, 387, 388, 12, 6, 2, 2, 388, 390, 7, 46, 2, 2, 389, 381, 3, 2, 2, 2, 389, 384, 3, 2, 2, 2, 389, 387, 3, 2, 2, 2, 390, 393, 3, 2, 2, 2, 391, 389, 3, 2, 2, 2, 391, 392, 3, 2, 2, 2, 392, 31, 3, 2, 2, 2, 393, 391, 3, 2, 2, 2, 45, 35, 44, 54, 59, 65, 72, 84, 86, 93, 107, 113, 131, 144, 148, 152, 158, 160, 166, 172, 188, 192, 200, 213, 217, 221, 276, 280, 284, 286, 291, 302, 306, 313, 315, 323, 337, 341, 345, 356, 362, 379, 389, 391] \ No newline at end of file diff --git a/src/antlr/Pyxell.tokens b/src/antlr/Pyxell.tokens index 3bde8676..c629459f 100644 --- a/src/antlr/Pyxell.tokens +++ b/src/antlr/Pyxell.tokens @@ -68,14 +68,15 @@ T__66=67 T__67=68 T__68=69 T__69=70 -INT=71 -FLOAT=72 -CHAR=73 -STRING=74 -ID=75 -COMMENT=76 -WS=77 -ERR=78 +T__70=71 +INT=72 +FLOAT=73 +CHAR=74 +STRING=75 +ID=76 +COMMENT=77 +WS=78 +ERR=79 ';'=1 'use'=2 'only'=3 @@ -95,54 +96,55 @@ ERR=78 '&'=17 '$'=18 '|'=19 -'break'=20 -'continue'=21 -'return'=22 -','=23 -'if'=24 -'do'=25 -'elif'=26 -'else'=27 -'while'=28 -'until'=29 -'for'=30 -'in'=31 -'step'=32 -'func'=33 -'('=34 -')'=35 -'def'=36 -'extern'=37 -':'=38 -'{'=39 -'}'=40 -'['=41 -']'=42 -'?'=43 -'.'=44 -'!'=45 -'~'=46 -'..'=47 -'...'=48 -'is'=49 -'isn\'t'=50 -'=='=51 -'!='=52 -'<'=53 -'<='=54 -'>'=55 -'>='=56 -'not'=57 -'and'=58 -'or'=59 -'lambda'=60 -'->'=61 -'true'=62 -'false'=63 -'null'=64 -'Void'=65 -'Int'=66 -'Float'=67 -'Bool'=68 -'Char'=69 -'String'=70 +'??'=20 +'break'=21 +'continue'=22 +'return'=23 +','=24 +'if'=25 +'do'=26 +'elif'=27 +'else'=28 +'while'=29 +'until'=30 +'for'=31 +'in'=32 +'step'=33 +'func'=34 +'('=35 +')'=36 +'def'=37 +'extern'=38 +':'=39 +'{'=40 +'}'=41 +'['=42 +']'=43 +'?'=44 +'.'=45 +'!'=46 +'~'=47 +'..'=48 +'...'=49 +'is'=50 +'isn\'t'=51 +'=='=52 +'!='=53 +'<'=54 +'<='=55 +'>'=56 +'>='=57 +'not'=58 +'and'=59 +'or'=60 +'lambda'=61 +'->'=62 +'true'=63 +'false'=64 +'null'=65 +'Void'=66 +'Int'=67 +'Float'=68 +'Bool'=69 +'Char'=70 +'String'=71 diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp index d50e2266..f73fe2b5 100644 --- a/src/antlr/PyxellLexer.interp +++ b/src/antlr/PyxellLexer.interp @@ -19,6 +19,7 @@ null '&' '$' '|' +'??' 'break' 'continue' 'return' @@ -151,6 +152,7 @@ null null null null +null INT FLOAT CHAR @@ -231,6 +233,7 @@ T__66 T__67 T__68 T__69 +T__70 INT FLOAT CHAR @@ -251,4 +254,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 80, 511, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 72, 6, 72, 428, 10, 72, 13, 72, 14, 72, 429, 3, 73, 6, 73, 433, 10, 73, 13, 73, 14, 73, 434, 3, 73, 3, 73, 6, 73, 439, 10, 73, 13, 73, 14, 73, 440, 3, 73, 3, 73, 5, 73, 445, 10, 73, 3, 73, 6, 73, 448, 10, 73, 13, 73, 14, 73, 449, 5, 73, 452, 10, 73, 3, 74, 3, 74, 3, 74, 3, 74, 7, 74, 458, 10, 74, 12, 74, 14, 74, 461, 11, 74, 3, 74, 3, 74, 3, 75, 3, 75, 3, 75, 3, 75, 7, 75, 469, 10, 75, 12, 75, 14, 75, 472, 11, 75, 3, 75, 3, 75, 3, 76, 3, 76, 7, 76, 478, 10, 76, 12, 76, 14, 76, 481, 11, 76, 3, 77, 3, 77, 3, 78, 3, 78, 3, 79, 3, 79, 3, 79, 5, 79, 490, 10, 79, 3, 80, 3, 80, 3, 80, 3, 80, 7, 80, 496, 10, 80, 12, 80, 14, 80, 499, 11, 80, 3, 80, 3, 80, 3, 81, 6, 81, 504, 10, 81, 13, 81, 14, 81, 505, 3, 81, 3, 81, 3, 82, 3, 82, 2, 2, 83, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 74, 147, 75, 149, 76, 151, 77, 153, 2, 155, 2, 157, 2, 159, 78, 161, 79, 163, 80, 3, 2, 11, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 4, 2, 12, 12, 14, 15, 5, 2, 11, 12, 15, 15, 34, 34, 2, 522, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 2, 161, 3, 2, 2, 2, 2, 163, 3, 2, 2, 2, 3, 165, 3, 2, 2, 2, 5, 167, 3, 2, 2, 2, 7, 171, 3, 2, 2, 2, 9, 176, 3, 2, 2, 2, 11, 183, 3, 2, 2, 2, 13, 186, 3, 2, 2, 2, 15, 191, 3, 2, 2, 2, 17, 197, 3, 2, 2, 2, 19, 199, 3, 2, 2, 2, 21, 201, 3, 2, 2, 2, 23, 203, 3, 2, 2, 2, 25, 205, 3, 2, 2, 2, 27, 207, 3, 2, 2, 2, 29, 209, 3, 2, 2, 2, 31, 211, 3, 2, 2, 2, 33, 214, 3, 2, 2, 2, 35, 217, 3, 2, 2, 2, 37, 219, 3, 2, 2, 2, 39, 221, 3, 2, 2, 2, 41, 223, 3, 2, 2, 2, 43, 229, 3, 2, 2, 2, 45, 238, 3, 2, 2, 2, 47, 245, 3, 2, 2, 2, 49, 247, 3, 2, 2, 2, 51, 250, 3, 2, 2, 2, 53, 253, 3, 2, 2, 2, 55, 258, 3, 2, 2, 2, 57, 263, 3, 2, 2, 2, 59, 269, 3, 2, 2, 2, 61, 275, 3, 2, 2, 2, 63, 279, 3, 2, 2, 2, 65, 282, 3, 2, 2, 2, 67, 287, 3, 2, 2, 2, 69, 292, 3, 2, 2, 2, 71, 294, 3, 2, 2, 2, 73, 296, 3, 2, 2, 2, 75, 300, 3, 2, 2, 2, 77, 307, 3, 2, 2, 2, 79, 309, 3, 2, 2, 2, 81, 311, 3, 2, 2, 2, 83, 313, 3, 2, 2, 2, 85, 315, 3, 2, 2, 2, 87, 317, 3, 2, 2, 2, 89, 319, 3, 2, 2, 2, 91, 321, 3, 2, 2, 2, 93, 323, 3, 2, 2, 2, 95, 325, 3, 2, 2, 2, 97, 328, 3, 2, 2, 2, 99, 332, 3, 2, 2, 2, 101, 335, 3, 2, 2, 2, 103, 341, 3, 2, 2, 2, 105, 344, 3, 2, 2, 2, 107, 347, 3, 2, 2, 2, 109, 349, 3, 2, 2, 2, 111, 352, 3, 2, 2, 2, 113, 354, 3, 2, 2, 2, 115, 357, 3, 2, 2, 2, 117, 361, 3, 2, 2, 2, 119, 365, 3, 2, 2, 2, 121, 368, 3, 2, 2, 2, 123, 375, 3, 2, 2, 2, 125, 378, 3, 2, 2, 2, 127, 383, 3, 2, 2, 2, 129, 389, 3, 2, 2, 2, 131, 394, 3, 2, 2, 2, 133, 399, 3, 2, 2, 2, 135, 403, 3, 2, 2, 2, 137, 409, 3, 2, 2, 2, 139, 414, 3, 2, 2, 2, 141, 419, 3, 2, 2, 2, 143, 427, 3, 2, 2, 2, 145, 432, 3, 2, 2, 2, 147, 453, 3, 2, 2, 2, 149, 464, 3, 2, 2, 2, 151, 475, 3, 2, 2, 2, 153, 482, 3, 2, 2, 2, 155, 484, 3, 2, 2, 2, 157, 489, 3, 2, 2, 2, 159, 491, 3, 2, 2, 2, 161, 503, 3, 2, 2, 2, 163, 509, 3, 2, 2, 2, 165, 166, 7, 61, 2, 2, 166, 4, 3, 2, 2, 2, 167, 168, 7, 119, 2, 2, 168, 169, 7, 117, 2, 2, 169, 170, 7, 103, 2, 2, 170, 6, 3, 2, 2, 2, 171, 172, 7, 113, 2, 2, 172, 173, 7, 112, 2, 2, 173, 174, 7, 110, 2, 2, 174, 175, 7, 123, 2, 2, 175, 8, 3, 2, 2, 2, 176, 177, 7, 106, 2, 2, 177, 178, 7, 107, 2, 2, 178, 179, 7, 102, 2, 2, 179, 180, 7, 107, 2, 2, 180, 181, 7, 112, 2, 2, 181, 182, 7, 105, 2, 2, 182, 10, 3, 2, 2, 2, 183, 184, 7, 99, 2, 2, 184, 185, 7, 117, 2, 2, 185, 12, 3, 2, 2, 2, 186, 187, 7, 117, 2, 2, 187, 188, 7, 109, 2, 2, 188, 189, 7, 107, 2, 2, 189, 190, 7, 114, 2, 2, 190, 14, 3, 2, 2, 2, 191, 192, 7, 114, 2, 2, 192, 193, 7, 116, 2, 2, 193, 194, 7, 107, 2, 2, 194, 195, 7, 112, 2, 2, 195, 196, 7, 118, 2, 2, 196, 16, 3, 2, 2, 2, 197, 198, 7, 63, 2, 2, 198, 18, 3, 2, 2, 2, 199, 200, 7, 96, 2, 2, 200, 20, 3, 2, 2, 2, 201, 202, 7, 44, 2, 2, 202, 22, 3, 2, 2, 2, 203, 204, 7, 49, 2, 2, 204, 24, 3, 2, 2, 2, 205, 206, 7, 39, 2, 2, 206, 26, 3, 2, 2, 2, 207, 208, 7, 45, 2, 2, 208, 28, 3, 2, 2, 2, 209, 210, 7, 47, 2, 2, 210, 30, 3, 2, 2, 2, 211, 212, 7, 62, 2, 2, 212, 213, 7, 62, 2, 2, 213, 32, 3, 2, 2, 2, 214, 215, 7, 64, 2, 2, 215, 216, 7, 64, 2, 2, 216, 34, 3, 2, 2, 2, 217, 218, 7, 40, 2, 2, 218, 36, 3, 2, 2, 2, 219, 220, 7, 38, 2, 2, 220, 38, 3, 2, 2, 2, 221, 222, 7, 126, 2, 2, 222, 40, 3, 2, 2, 2, 223, 224, 7, 100, 2, 2, 224, 225, 7, 116, 2, 2, 225, 226, 7, 103, 2, 2, 226, 227, 7, 99, 2, 2, 227, 228, 7, 109, 2, 2, 228, 42, 3, 2, 2, 2, 229, 230, 7, 101, 2, 2, 230, 231, 7, 113, 2, 2, 231, 232, 7, 112, 2, 2, 232, 233, 7, 118, 2, 2, 233, 234, 7, 107, 2, 2, 234, 235, 7, 112, 2, 2, 235, 236, 7, 119, 2, 2, 236, 237, 7, 103, 2, 2, 237, 44, 3, 2, 2, 2, 238, 239, 7, 116, 2, 2, 239, 240, 7, 103, 2, 2, 240, 241, 7, 118, 2, 2, 241, 242, 7, 119, 2, 2, 242, 243, 7, 116, 2, 2, 243, 244, 7, 112, 2, 2, 244, 46, 3, 2, 2, 2, 245, 246, 7, 46, 2, 2, 246, 48, 3, 2, 2, 2, 247, 248, 7, 107, 2, 2, 248, 249, 7, 104, 2, 2, 249, 50, 3, 2, 2, 2, 250, 251, 7, 102, 2, 2, 251, 252, 7, 113, 2, 2, 252, 52, 3, 2, 2, 2, 253, 254, 7, 103, 2, 2, 254, 255, 7, 110, 2, 2, 255, 256, 7, 107, 2, 2, 256, 257, 7, 104, 2, 2, 257, 54, 3, 2, 2, 2, 258, 259, 7, 103, 2, 2, 259, 260, 7, 110, 2, 2, 260, 261, 7, 117, 2, 2, 261, 262, 7, 103, 2, 2, 262, 56, 3, 2, 2, 2, 263, 264, 7, 121, 2, 2, 264, 265, 7, 106, 2, 2, 265, 266, 7, 107, 2, 2, 266, 267, 7, 110, 2, 2, 267, 268, 7, 103, 2, 2, 268, 58, 3, 2, 2, 2, 269, 270, 7, 119, 2, 2, 270, 271, 7, 112, 2, 2, 271, 272, 7, 118, 2, 2, 272, 273, 7, 107, 2, 2, 273, 274, 7, 110, 2, 2, 274, 60, 3, 2, 2, 2, 275, 276, 7, 104, 2, 2, 276, 277, 7, 113, 2, 2, 277, 278, 7, 116, 2, 2, 278, 62, 3, 2, 2, 2, 279, 280, 7, 107, 2, 2, 280, 281, 7, 112, 2, 2, 281, 64, 3, 2, 2, 2, 282, 283, 7, 117, 2, 2, 283, 284, 7, 118, 2, 2, 284, 285, 7, 103, 2, 2, 285, 286, 7, 114, 2, 2, 286, 66, 3, 2, 2, 2, 287, 288, 7, 104, 2, 2, 288, 289, 7, 119, 2, 2, 289, 290, 7, 112, 2, 2, 290, 291, 7, 101, 2, 2, 291, 68, 3, 2, 2, 2, 292, 293, 7, 42, 2, 2, 293, 70, 3, 2, 2, 2, 294, 295, 7, 43, 2, 2, 295, 72, 3, 2, 2, 2, 296, 297, 7, 102, 2, 2, 297, 298, 7, 103, 2, 2, 298, 299, 7, 104, 2, 2, 299, 74, 3, 2, 2, 2, 300, 301, 7, 103, 2, 2, 301, 302, 7, 122, 2, 2, 302, 303, 7, 118, 2, 2, 303, 304, 7, 103, 2, 2, 304, 305, 7, 116, 2, 2, 305, 306, 7, 112, 2, 2, 306, 76, 3, 2, 2, 2, 307, 308, 7, 60, 2, 2, 308, 78, 3, 2, 2, 2, 309, 310, 7, 125, 2, 2, 310, 80, 3, 2, 2, 2, 311, 312, 7, 127, 2, 2, 312, 82, 3, 2, 2, 2, 313, 314, 7, 93, 2, 2, 314, 84, 3, 2, 2, 2, 315, 316, 7, 95, 2, 2, 316, 86, 3, 2, 2, 2, 317, 318, 7, 65, 2, 2, 318, 88, 3, 2, 2, 2, 319, 320, 7, 48, 2, 2, 320, 90, 3, 2, 2, 2, 321, 322, 7, 35, 2, 2, 322, 92, 3, 2, 2, 2, 323, 324, 7, 128, 2, 2, 324, 94, 3, 2, 2, 2, 325, 326, 7, 48, 2, 2, 326, 327, 7, 48, 2, 2, 327, 96, 3, 2, 2, 2, 328, 329, 7, 48, 2, 2, 329, 330, 7, 48, 2, 2, 330, 331, 7, 48, 2, 2, 331, 98, 3, 2, 2, 2, 332, 333, 7, 107, 2, 2, 333, 334, 7, 117, 2, 2, 334, 100, 3, 2, 2, 2, 335, 336, 7, 107, 2, 2, 336, 337, 7, 117, 2, 2, 337, 338, 7, 112, 2, 2, 338, 339, 7, 41, 2, 2, 339, 340, 7, 118, 2, 2, 340, 102, 3, 2, 2, 2, 341, 342, 7, 63, 2, 2, 342, 343, 7, 63, 2, 2, 343, 104, 3, 2, 2, 2, 344, 345, 7, 35, 2, 2, 345, 346, 7, 63, 2, 2, 346, 106, 3, 2, 2, 2, 347, 348, 7, 62, 2, 2, 348, 108, 3, 2, 2, 2, 349, 350, 7, 62, 2, 2, 350, 351, 7, 63, 2, 2, 351, 110, 3, 2, 2, 2, 352, 353, 7, 64, 2, 2, 353, 112, 3, 2, 2, 2, 354, 355, 7, 64, 2, 2, 355, 356, 7, 63, 2, 2, 356, 114, 3, 2, 2, 2, 357, 358, 7, 112, 2, 2, 358, 359, 7, 113, 2, 2, 359, 360, 7, 118, 2, 2, 360, 116, 3, 2, 2, 2, 361, 362, 7, 99, 2, 2, 362, 363, 7, 112, 2, 2, 363, 364, 7, 102, 2, 2, 364, 118, 3, 2, 2, 2, 365, 366, 7, 113, 2, 2, 366, 367, 7, 116, 2, 2, 367, 120, 3, 2, 2, 2, 368, 369, 7, 110, 2, 2, 369, 370, 7, 99, 2, 2, 370, 371, 7, 111, 2, 2, 371, 372, 7, 100, 2, 2, 372, 373, 7, 102, 2, 2, 373, 374, 7, 99, 2, 2, 374, 122, 3, 2, 2, 2, 375, 376, 7, 47, 2, 2, 376, 377, 7, 64, 2, 2, 377, 124, 3, 2, 2, 2, 378, 379, 7, 118, 2, 2, 379, 380, 7, 116, 2, 2, 380, 381, 7, 119, 2, 2, 381, 382, 7, 103, 2, 2, 382, 126, 3, 2, 2, 2, 383, 384, 7, 104, 2, 2, 384, 385, 7, 99, 2, 2, 385, 386, 7, 110, 2, 2, 386, 387, 7, 117, 2, 2, 387, 388, 7, 103, 2, 2, 388, 128, 3, 2, 2, 2, 389, 390, 7, 112, 2, 2, 390, 391, 7, 119, 2, 2, 391, 392, 7, 110, 2, 2, 392, 393, 7, 110, 2, 2, 393, 130, 3, 2, 2, 2, 394, 395, 7, 88, 2, 2, 395, 396, 7, 113, 2, 2, 396, 397, 7, 107, 2, 2, 397, 398, 7, 102, 2, 2, 398, 132, 3, 2, 2, 2, 399, 400, 7, 75, 2, 2, 400, 401, 7, 112, 2, 2, 401, 402, 7, 118, 2, 2, 402, 134, 3, 2, 2, 2, 403, 404, 7, 72, 2, 2, 404, 405, 7, 110, 2, 2, 405, 406, 7, 113, 2, 2, 406, 407, 7, 99, 2, 2, 407, 408, 7, 118, 2, 2, 408, 136, 3, 2, 2, 2, 409, 410, 7, 68, 2, 2, 410, 411, 7, 113, 2, 2, 411, 412, 7, 113, 2, 2, 412, 413, 7, 110, 2, 2, 413, 138, 3, 2, 2, 2, 414, 415, 7, 69, 2, 2, 415, 416, 7, 106, 2, 2, 416, 417, 7, 99, 2, 2, 417, 418, 7, 116, 2, 2, 418, 140, 3, 2, 2, 2, 419, 420, 7, 85, 2, 2, 420, 421, 7, 118, 2, 2, 421, 422, 7, 116, 2, 2, 422, 423, 7, 107, 2, 2, 423, 424, 7, 112, 2, 2, 424, 425, 7, 105, 2, 2, 425, 142, 3, 2, 2, 2, 426, 428, 5, 153, 77, 2, 427, 426, 3, 2, 2, 2, 428, 429, 3, 2, 2, 2, 429, 427, 3, 2, 2, 2, 429, 430, 3, 2, 2, 2, 430, 144, 3, 2, 2, 2, 431, 433, 5, 153, 77, 2, 432, 431, 3, 2, 2, 2, 433, 434, 3, 2, 2, 2, 434, 432, 3, 2, 2, 2, 434, 435, 3, 2, 2, 2, 435, 436, 3, 2, 2, 2, 436, 438, 7, 48, 2, 2, 437, 439, 5, 153, 77, 2, 438, 437, 3, 2, 2, 2, 439, 440, 3, 2, 2, 2, 440, 438, 3, 2, 2, 2, 440, 441, 3, 2, 2, 2, 441, 451, 3, 2, 2, 2, 442, 444, 7, 103, 2, 2, 443, 445, 7, 47, 2, 2, 444, 443, 3, 2, 2, 2, 444, 445, 3, 2, 2, 2, 445, 447, 3, 2, 2, 2, 446, 448, 5, 153, 77, 2, 447, 446, 3, 2, 2, 2, 448, 449, 3, 2, 2, 2, 449, 447, 3, 2, 2, 2, 449, 450, 3, 2, 2, 2, 450, 452, 3, 2, 2, 2, 451, 442, 3, 2, 2, 2, 451, 452, 3, 2, 2, 2, 452, 146, 3, 2, 2, 2, 453, 459, 7, 41, 2, 2, 454, 458, 10, 2, 2, 2, 455, 456, 7, 94, 2, 2, 456, 458, 9, 3, 2, 2, 457, 454, 3, 2, 2, 2, 457, 455, 3, 2, 2, 2, 458, 461, 3, 2, 2, 2, 459, 457, 3, 2, 2, 2, 459, 460, 3, 2, 2, 2, 460, 462, 3, 2, 2, 2, 461, 459, 3, 2, 2, 2, 462, 463, 7, 41, 2, 2, 463, 148, 3, 2, 2, 2, 464, 470, 7, 36, 2, 2, 465, 469, 10, 4, 2, 2, 466, 467, 7, 94, 2, 2, 467, 469, 9, 5, 2, 2, 468, 465, 3, 2, 2, 2, 468, 466, 3, 2, 2, 2, 469, 472, 3, 2, 2, 2, 470, 468, 3, 2, 2, 2, 470, 471, 3, 2, 2, 2, 471, 473, 3, 2, 2, 2, 472, 470, 3, 2, 2, 2, 473, 474, 7, 36, 2, 2, 474, 150, 3, 2, 2, 2, 475, 479, 5, 155, 78, 2, 476, 478, 5, 157, 79, 2, 477, 476, 3, 2, 2, 2, 478, 481, 3, 2, 2, 2, 479, 477, 3, 2, 2, 2, 479, 480, 3, 2, 2, 2, 480, 152, 3, 2, 2, 2, 481, 479, 3, 2, 2, 2, 482, 483, 9, 6, 2, 2, 483, 154, 3, 2, 2, 2, 484, 485, 9, 7, 2, 2, 485, 156, 3, 2, 2, 2, 486, 490, 5, 155, 78, 2, 487, 490, 5, 153, 77, 2, 488, 490, 9, 8, 2, 2, 489, 486, 3, 2, 2, 2, 489, 487, 3, 2, 2, 2, 489, 488, 3, 2, 2, 2, 490, 158, 3, 2, 2, 2, 491, 492, 7, 47, 2, 2, 492, 493, 7, 47, 2, 2, 493, 497, 3, 2, 2, 2, 494, 496, 10, 9, 2, 2, 495, 494, 3, 2, 2, 2, 496, 499, 3, 2, 2, 2, 497, 495, 3, 2, 2, 2, 497, 498, 3, 2, 2, 2, 498, 500, 3, 2, 2, 2, 499, 497, 3, 2, 2, 2, 500, 501, 8, 80, 2, 2, 501, 160, 3, 2, 2, 2, 502, 504, 9, 10, 2, 2, 503, 502, 3, 2, 2, 2, 504, 505, 3, 2, 2, 2, 505, 503, 3, 2, 2, 2, 505, 506, 3, 2, 2, 2, 506, 507, 3, 2, 2, 2, 507, 508, 8, 81, 2, 2, 508, 162, 3, 2, 2, 2, 509, 510, 11, 2, 2, 2, 510, 164, 3, 2, 2, 2, 17, 2, 429, 434, 440, 444, 449, 451, 457, 459, 468, 470, 479, 489, 497, 505, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 81, 516, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 73, 6, 73, 433, 10, 73, 13, 73, 14, 73, 434, 3, 74, 6, 74, 438, 10, 74, 13, 74, 14, 74, 439, 3, 74, 3, 74, 6, 74, 444, 10, 74, 13, 74, 14, 74, 445, 3, 74, 3, 74, 5, 74, 450, 10, 74, 3, 74, 6, 74, 453, 10, 74, 13, 74, 14, 74, 454, 5, 74, 457, 10, 74, 3, 75, 3, 75, 3, 75, 3, 75, 7, 75, 463, 10, 75, 12, 75, 14, 75, 466, 11, 75, 3, 75, 3, 75, 3, 76, 3, 76, 3, 76, 3, 76, 7, 76, 474, 10, 76, 12, 76, 14, 76, 477, 11, 76, 3, 76, 3, 76, 3, 77, 3, 77, 7, 77, 483, 10, 77, 12, 77, 14, 77, 486, 11, 77, 3, 78, 3, 78, 3, 79, 3, 79, 3, 80, 3, 80, 3, 80, 5, 80, 495, 10, 80, 3, 81, 3, 81, 3, 81, 3, 81, 7, 81, 501, 10, 81, 12, 81, 14, 81, 504, 11, 81, 3, 81, 3, 81, 3, 82, 6, 82, 509, 10, 82, 13, 82, 14, 82, 510, 3, 82, 3, 82, 3, 83, 3, 83, 2, 2, 84, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 74, 147, 75, 149, 76, 151, 77, 153, 78, 155, 2, 157, 2, 159, 2, 161, 79, 163, 80, 165, 81, 3, 2, 11, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 4, 2, 12, 12, 14, 15, 5, 2, 11, 12, 15, 15, 34, 34, 2, 527, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 161, 3, 2, 2, 2, 2, 163, 3, 2, 2, 2, 2, 165, 3, 2, 2, 2, 3, 167, 3, 2, 2, 2, 5, 169, 3, 2, 2, 2, 7, 173, 3, 2, 2, 2, 9, 178, 3, 2, 2, 2, 11, 185, 3, 2, 2, 2, 13, 188, 3, 2, 2, 2, 15, 193, 3, 2, 2, 2, 17, 199, 3, 2, 2, 2, 19, 201, 3, 2, 2, 2, 21, 203, 3, 2, 2, 2, 23, 205, 3, 2, 2, 2, 25, 207, 3, 2, 2, 2, 27, 209, 3, 2, 2, 2, 29, 211, 3, 2, 2, 2, 31, 213, 3, 2, 2, 2, 33, 216, 3, 2, 2, 2, 35, 219, 3, 2, 2, 2, 37, 221, 3, 2, 2, 2, 39, 223, 3, 2, 2, 2, 41, 225, 3, 2, 2, 2, 43, 228, 3, 2, 2, 2, 45, 234, 3, 2, 2, 2, 47, 243, 3, 2, 2, 2, 49, 250, 3, 2, 2, 2, 51, 252, 3, 2, 2, 2, 53, 255, 3, 2, 2, 2, 55, 258, 3, 2, 2, 2, 57, 263, 3, 2, 2, 2, 59, 268, 3, 2, 2, 2, 61, 274, 3, 2, 2, 2, 63, 280, 3, 2, 2, 2, 65, 284, 3, 2, 2, 2, 67, 287, 3, 2, 2, 2, 69, 292, 3, 2, 2, 2, 71, 297, 3, 2, 2, 2, 73, 299, 3, 2, 2, 2, 75, 301, 3, 2, 2, 2, 77, 305, 3, 2, 2, 2, 79, 312, 3, 2, 2, 2, 81, 314, 3, 2, 2, 2, 83, 316, 3, 2, 2, 2, 85, 318, 3, 2, 2, 2, 87, 320, 3, 2, 2, 2, 89, 322, 3, 2, 2, 2, 91, 324, 3, 2, 2, 2, 93, 326, 3, 2, 2, 2, 95, 328, 3, 2, 2, 2, 97, 330, 3, 2, 2, 2, 99, 333, 3, 2, 2, 2, 101, 337, 3, 2, 2, 2, 103, 340, 3, 2, 2, 2, 105, 346, 3, 2, 2, 2, 107, 349, 3, 2, 2, 2, 109, 352, 3, 2, 2, 2, 111, 354, 3, 2, 2, 2, 113, 357, 3, 2, 2, 2, 115, 359, 3, 2, 2, 2, 117, 362, 3, 2, 2, 2, 119, 366, 3, 2, 2, 2, 121, 370, 3, 2, 2, 2, 123, 373, 3, 2, 2, 2, 125, 380, 3, 2, 2, 2, 127, 383, 3, 2, 2, 2, 129, 388, 3, 2, 2, 2, 131, 394, 3, 2, 2, 2, 133, 399, 3, 2, 2, 2, 135, 404, 3, 2, 2, 2, 137, 408, 3, 2, 2, 2, 139, 414, 3, 2, 2, 2, 141, 419, 3, 2, 2, 2, 143, 424, 3, 2, 2, 2, 145, 432, 3, 2, 2, 2, 147, 437, 3, 2, 2, 2, 149, 458, 3, 2, 2, 2, 151, 469, 3, 2, 2, 2, 153, 480, 3, 2, 2, 2, 155, 487, 3, 2, 2, 2, 157, 489, 3, 2, 2, 2, 159, 494, 3, 2, 2, 2, 161, 496, 3, 2, 2, 2, 163, 508, 3, 2, 2, 2, 165, 514, 3, 2, 2, 2, 167, 168, 7, 61, 2, 2, 168, 4, 3, 2, 2, 2, 169, 170, 7, 119, 2, 2, 170, 171, 7, 117, 2, 2, 171, 172, 7, 103, 2, 2, 172, 6, 3, 2, 2, 2, 173, 174, 7, 113, 2, 2, 174, 175, 7, 112, 2, 2, 175, 176, 7, 110, 2, 2, 176, 177, 7, 123, 2, 2, 177, 8, 3, 2, 2, 2, 178, 179, 7, 106, 2, 2, 179, 180, 7, 107, 2, 2, 180, 181, 7, 102, 2, 2, 181, 182, 7, 107, 2, 2, 182, 183, 7, 112, 2, 2, 183, 184, 7, 105, 2, 2, 184, 10, 3, 2, 2, 2, 185, 186, 7, 99, 2, 2, 186, 187, 7, 117, 2, 2, 187, 12, 3, 2, 2, 2, 188, 189, 7, 117, 2, 2, 189, 190, 7, 109, 2, 2, 190, 191, 7, 107, 2, 2, 191, 192, 7, 114, 2, 2, 192, 14, 3, 2, 2, 2, 193, 194, 7, 114, 2, 2, 194, 195, 7, 116, 2, 2, 195, 196, 7, 107, 2, 2, 196, 197, 7, 112, 2, 2, 197, 198, 7, 118, 2, 2, 198, 16, 3, 2, 2, 2, 199, 200, 7, 63, 2, 2, 200, 18, 3, 2, 2, 2, 201, 202, 7, 96, 2, 2, 202, 20, 3, 2, 2, 2, 203, 204, 7, 44, 2, 2, 204, 22, 3, 2, 2, 2, 205, 206, 7, 49, 2, 2, 206, 24, 3, 2, 2, 2, 207, 208, 7, 39, 2, 2, 208, 26, 3, 2, 2, 2, 209, 210, 7, 45, 2, 2, 210, 28, 3, 2, 2, 2, 211, 212, 7, 47, 2, 2, 212, 30, 3, 2, 2, 2, 213, 214, 7, 62, 2, 2, 214, 215, 7, 62, 2, 2, 215, 32, 3, 2, 2, 2, 216, 217, 7, 64, 2, 2, 217, 218, 7, 64, 2, 2, 218, 34, 3, 2, 2, 2, 219, 220, 7, 40, 2, 2, 220, 36, 3, 2, 2, 2, 221, 222, 7, 38, 2, 2, 222, 38, 3, 2, 2, 2, 223, 224, 7, 126, 2, 2, 224, 40, 3, 2, 2, 2, 225, 226, 7, 65, 2, 2, 226, 227, 7, 65, 2, 2, 227, 42, 3, 2, 2, 2, 228, 229, 7, 100, 2, 2, 229, 230, 7, 116, 2, 2, 230, 231, 7, 103, 2, 2, 231, 232, 7, 99, 2, 2, 232, 233, 7, 109, 2, 2, 233, 44, 3, 2, 2, 2, 234, 235, 7, 101, 2, 2, 235, 236, 7, 113, 2, 2, 236, 237, 7, 112, 2, 2, 237, 238, 7, 118, 2, 2, 238, 239, 7, 107, 2, 2, 239, 240, 7, 112, 2, 2, 240, 241, 7, 119, 2, 2, 241, 242, 7, 103, 2, 2, 242, 46, 3, 2, 2, 2, 243, 244, 7, 116, 2, 2, 244, 245, 7, 103, 2, 2, 245, 246, 7, 118, 2, 2, 246, 247, 7, 119, 2, 2, 247, 248, 7, 116, 2, 2, 248, 249, 7, 112, 2, 2, 249, 48, 3, 2, 2, 2, 250, 251, 7, 46, 2, 2, 251, 50, 3, 2, 2, 2, 252, 253, 7, 107, 2, 2, 253, 254, 7, 104, 2, 2, 254, 52, 3, 2, 2, 2, 255, 256, 7, 102, 2, 2, 256, 257, 7, 113, 2, 2, 257, 54, 3, 2, 2, 2, 258, 259, 7, 103, 2, 2, 259, 260, 7, 110, 2, 2, 260, 261, 7, 107, 2, 2, 261, 262, 7, 104, 2, 2, 262, 56, 3, 2, 2, 2, 263, 264, 7, 103, 2, 2, 264, 265, 7, 110, 2, 2, 265, 266, 7, 117, 2, 2, 266, 267, 7, 103, 2, 2, 267, 58, 3, 2, 2, 2, 268, 269, 7, 121, 2, 2, 269, 270, 7, 106, 2, 2, 270, 271, 7, 107, 2, 2, 271, 272, 7, 110, 2, 2, 272, 273, 7, 103, 2, 2, 273, 60, 3, 2, 2, 2, 274, 275, 7, 119, 2, 2, 275, 276, 7, 112, 2, 2, 276, 277, 7, 118, 2, 2, 277, 278, 7, 107, 2, 2, 278, 279, 7, 110, 2, 2, 279, 62, 3, 2, 2, 2, 280, 281, 7, 104, 2, 2, 281, 282, 7, 113, 2, 2, 282, 283, 7, 116, 2, 2, 283, 64, 3, 2, 2, 2, 284, 285, 7, 107, 2, 2, 285, 286, 7, 112, 2, 2, 286, 66, 3, 2, 2, 2, 287, 288, 7, 117, 2, 2, 288, 289, 7, 118, 2, 2, 289, 290, 7, 103, 2, 2, 290, 291, 7, 114, 2, 2, 291, 68, 3, 2, 2, 2, 292, 293, 7, 104, 2, 2, 293, 294, 7, 119, 2, 2, 294, 295, 7, 112, 2, 2, 295, 296, 7, 101, 2, 2, 296, 70, 3, 2, 2, 2, 297, 298, 7, 42, 2, 2, 298, 72, 3, 2, 2, 2, 299, 300, 7, 43, 2, 2, 300, 74, 3, 2, 2, 2, 301, 302, 7, 102, 2, 2, 302, 303, 7, 103, 2, 2, 303, 304, 7, 104, 2, 2, 304, 76, 3, 2, 2, 2, 305, 306, 7, 103, 2, 2, 306, 307, 7, 122, 2, 2, 307, 308, 7, 118, 2, 2, 308, 309, 7, 103, 2, 2, 309, 310, 7, 116, 2, 2, 310, 311, 7, 112, 2, 2, 311, 78, 3, 2, 2, 2, 312, 313, 7, 60, 2, 2, 313, 80, 3, 2, 2, 2, 314, 315, 7, 125, 2, 2, 315, 82, 3, 2, 2, 2, 316, 317, 7, 127, 2, 2, 317, 84, 3, 2, 2, 2, 318, 319, 7, 93, 2, 2, 319, 86, 3, 2, 2, 2, 320, 321, 7, 95, 2, 2, 321, 88, 3, 2, 2, 2, 322, 323, 7, 65, 2, 2, 323, 90, 3, 2, 2, 2, 324, 325, 7, 48, 2, 2, 325, 92, 3, 2, 2, 2, 326, 327, 7, 35, 2, 2, 327, 94, 3, 2, 2, 2, 328, 329, 7, 128, 2, 2, 329, 96, 3, 2, 2, 2, 330, 331, 7, 48, 2, 2, 331, 332, 7, 48, 2, 2, 332, 98, 3, 2, 2, 2, 333, 334, 7, 48, 2, 2, 334, 335, 7, 48, 2, 2, 335, 336, 7, 48, 2, 2, 336, 100, 3, 2, 2, 2, 337, 338, 7, 107, 2, 2, 338, 339, 7, 117, 2, 2, 339, 102, 3, 2, 2, 2, 340, 341, 7, 107, 2, 2, 341, 342, 7, 117, 2, 2, 342, 343, 7, 112, 2, 2, 343, 344, 7, 41, 2, 2, 344, 345, 7, 118, 2, 2, 345, 104, 3, 2, 2, 2, 346, 347, 7, 63, 2, 2, 347, 348, 7, 63, 2, 2, 348, 106, 3, 2, 2, 2, 349, 350, 7, 35, 2, 2, 350, 351, 7, 63, 2, 2, 351, 108, 3, 2, 2, 2, 352, 353, 7, 62, 2, 2, 353, 110, 3, 2, 2, 2, 354, 355, 7, 62, 2, 2, 355, 356, 7, 63, 2, 2, 356, 112, 3, 2, 2, 2, 357, 358, 7, 64, 2, 2, 358, 114, 3, 2, 2, 2, 359, 360, 7, 64, 2, 2, 360, 361, 7, 63, 2, 2, 361, 116, 3, 2, 2, 2, 362, 363, 7, 112, 2, 2, 363, 364, 7, 113, 2, 2, 364, 365, 7, 118, 2, 2, 365, 118, 3, 2, 2, 2, 366, 367, 7, 99, 2, 2, 367, 368, 7, 112, 2, 2, 368, 369, 7, 102, 2, 2, 369, 120, 3, 2, 2, 2, 370, 371, 7, 113, 2, 2, 371, 372, 7, 116, 2, 2, 372, 122, 3, 2, 2, 2, 373, 374, 7, 110, 2, 2, 374, 375, 7, 99, 2, 2, 375, 376, 7, 111, 2, 2, 376, 377, 7, 100, 2, 2, 377, 378, 7, 102, 2, 2, 378, 379, 7, 99, 2, 2, 379, 124, 3, 2, 2, 2, 380, 381, 7, 47, 2, 2, 381, 382, 7, 64, 2, 2, 382, 126, 3, 2, 2, 2, 383, 384, 7, 118, 2, 2, 384, 385, 7, 116, 2, 2, 385, 386, 7, 119, 2, 2, 386, 387, 7, 103, 2, 2, 387, 128, 3, 2, 2, 2, 388, 389, 7, 104, 2, 2, 389, 390, 7, 99, 2, 2, 390, 391, 7, 110, 2, 2, 391, 392, 7, 117, 2, 2, 392, 393, 7, 103, 2, 2, 393, 130, 3, 2, 2, 2, 394, 395, 7, 112, 2, 2, 395, 396, 7, 119, 2, 2, 396, 397, 7, 110, 2, 2, 397, 398, 7, 110, 2, 2, 398, 132, 3, 2, 2, 2, 399, 400, 7, 88, 2, 2, 400, 401, 7, 113, 2, 2, 401, 402, 7, 107, 2, 2, 402, 403, 7, 102, 2, 2, 403, 134, 3, 2, 2, 2, 404, 405, 7, 75, 2, 2, 405, 406, 7, 112, 2, 2, 406, 407, 7, 118, 2, 2, 407, 136, 3, 2, 2, 2, 408, 409, 7, 72, 2, 2, 409, 410, 7, 110, 2, 2, 410, 411, 7, 113, 2, 2, 411, 412, 7, 99, 2, 2, 412, 413, 7, 118, 2, 2, 413, 138, 3, 2, 2, 2, 414, 415, 7, 68, 2, 2, 415, 416, 7, 113, 2, 2, 416, 417, 7, 113, 2, 2, 417, 418, 7, 110, 2, 2, 418, 140, 3, 2, 2, 2, 419, 420, 7, 69, 2, 2, 420, 421, 7, 106, 2, 2, 421, 422, 7, 99, 2, 2, 422, 423, 7, 116, 2, 2, 423, 142, 3, 2, 2, 2, 424, 425, 7, 85, 2, 2, 425, 426, 7, 118, 2, 2, 426, 427, 7, 116, 2, 2, 427, 428, 7, 107, 2, 2, 428, 429, 7, 112, 2, 2, 429, 430, 7, 105, 2, 2, 430, 144, 3, 2, 2, 2, 431, 433, 5, 155, 78, 2, 432, 431, 3, 2, 2, 2, 433, 434, 3, 2, 2, 2, 434, 432, 3, 2, 2, 2, 434, 435, 3, 2, 2, 2, 435, 146, 3, 2, 2, 2, 436, 438, 5, 155, 78, 2, 437, 436, 3, 2, 2, 2, 438, 439, 3, 2, 2, 2, 439, 437, 3, 2, 2, 2, 439, 440, 3, 2, 2, 2, 440, 441, 3, 2, 2, 2, 441, 443, 7, 48, 2, 2, 442, 444, 5, 155, 78, 2, 443, 442, 3, 2, 2, 2, 444, 445, 3, 2, 2, 2, 445, 443, 3, 2, 2, 2, 445, 446, 3, 2, 2, 2, 446, 456, 3, 2, 2, 2, 447, 449, 7, 103, 2, 2, 448, 450, 7, 47, 2, 2, 449, 448, 3, 2, 2, 2, 449, 450, 3, 2, 2, 2, 450, 452, 3, 2, 2, 2, 451, 453, 5, 155, 78, 2, 452, 451, 3, 2, 2, 2, 453, 454, 3, 2, 2, 2, 454, 452, 3, 2, 2, 2, 454, 455, 3, 2, 2, 2, 455, 457, 3, 2, 2, 2, 456, 447, 3, 2, 2, 2, 456, 457, 3, 2, 2, 2, 457, 148, 3, 2, 2, 2, 458, 464, 7, 41, 2, 2, 459, 463, 10, 2, 2, 2, 460, 461, 7, 94, 2, 2, 461, 463, 9, 3, 2, 2, 462, 459, 3, 2, 2, 2, 462, 460, 3, 2, 2, 2, 463, 466, 3, 2, 2, 2, 464, 462, 3, 2, 2, 2, 464, 465, 3, 2, 2, 2, 465, 467, 3, 2, 2, 2, 466, 464, 3, 2, 2, 2, 467, 468, 7, 41, 2, 2, 468, 150, 3, 2, 2, 2, 469, 475, 7, 36, 2, 2, 470, 474, 10, 4, 2, 2, 471, 472, 7, 94, 2, 2, 472, 474, 9, 5, 2, 2, 473, 470, 3, 2, 2, 2, 473, 471, 3, 2, 2, 2, 474, 477, 3, 2, 2, 2, 475, 473, 3, 2, 2, 2, 475, 476, 3, 2, 2, 2, 476, 478, 3, 2, 2, 2, 477, 475, 3, 2, 2, 2, 478, 479, 7, 36, 2, 2, 479, 152, 3, 2, 2, 2, 480, 484, 5, 157, 79, 2, 481, 483, 5, 159, 80, 2, 482, 481, 3, 2, 2, 2, 483, 486, 3, 2, 2, 2, 484, 482, 3, 2, 2, 2, 484, 485, 3, 2, 2, 2, 485, 154, 3, 2, 2, 2, 486, 484, 3, 2, 2, 2, 487, 488, 9, 6, 2, 2, 488, 156, 3, 2, 2, 2, 489, 490, 9, 7, 2, 2, 490, 158, 3, 2, 2, 2, 491, 495, 5, 157, 79, 2, 492, 495, 5, 155, 78, 2, 493, 495, 9, 8, 2, 2, 494, 491, 3, 2, 2, 2, 494, 492, 3, 2, 2, 2, 494, 493, 3, 2, 2, 2, 495, 160, 3, 2, 2, 2, 496, 497, 7, 47, 2, 2, 497, 498, 7, 47, 2, 2, 498, 502, 3, 2, 2, 2, 499, 501, 10, 9, 2, 2, 500, 499, 3, 2, 2, 2, 501, 504, 3, 2, 2, 2, 502, 500, 3, 2, 2, 2, 502, 503, 3, 2, 2, 2, 503, 505, 3, 2, 2, 2, 504, 502, 3, 2, 2, 2, 505, 506, 8, 81, 2, 2, 506, 162, 3, 2, 2, 2, 507, 509, 9, 10, 2, 2, 508, 507, 3, 2, 2, 2, 509, 510, 3, 2, 2, 2, 510, 508, 3, 2, 2, 2, 510, 511, 3, 2, 2, 2, 511, 512, 3, 2, 2, 2, 512, 513, 8, 82, 2, 2, 513, 164, 3, 2, 2, 2, 514, 515, 11, 2, 2, 2, 515, 166, 3, 2, 2, 2, 17, 2, 434, 439, 445, 449, 454, 456, 462, 464, 473, 475, 484, 494, 502, 510, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py index 6631d6f4..e64afe68 100644 --- a/src/antlr/PyxellLexer.py +++ b/src/antlr/PyxellLexer.py @@ -8,8 +8,8 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2P") - buf.write("\u01ff\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2Q") + buf.write("\u0204\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") @@ -20,210 +20,212 @@ def serializedATN(): buf.write("\t\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:") buf.write("\4;\t;\4<\t<\4=\t=\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\t") buf.write("C\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I\tI\4J\tJ\4K\tK\4L\t") - buf.write("L\4M\tM\4N\tN\4O\tO\4P\tP\4Q\tQ\4R\tR\3\2\3\2\3\3\3\3") - buf.write("\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\5\3\5\3\5\3\5\3\5\3\5\3") - buf.write("\5\3\6\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\b\3\b") - buf.write("\3\b\3\t\3\t\3\n\3\n\3\13\3\13\3\f\3\f\3\r\3\r\3\16\3") - buf.write("\16\3\17\3\17\3\20\3\20\3\20\3\21\3\21\3\21\3\22\3\22") - buf.write("\3\23\3\23\3\24\3\24\3\25\3\25\3\25\3\25\3\25\3\25\3\26") - buf.write("\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27") - buf.write("\3\27\3\27\3\27\3\27\3\30\3\30\3\31\3\31\3\31\3\32\3\32") - buf.write("\3\32\3\33\3\33\3\33\3\33\3\33\3\34\3\34\3\34\3\34\3\34") - buf.write("\3\35\3\35\3\35\3\35\3\35\3\35\3\36\3\36\3\36\3\36\3\36") - buf.write("\3\36\3\37\3\37\3\37\3\37\3 \3 \3 \3!\3!\3!\3!\3!\3\"") - buf.write("\3\"\3\"\3\"\3\"\3#\3#\3$\3$\3%\3%\3%\3%\3&\3&\3&\3&\3") - buf.write("&\3&\3&\3\'\3\'\3(\3(\3)\3)\3*\3*\3+\3+\3,\3,\3-\3-\3") - buf.write(".\3.\3/\3/\3\60\3\60\3\60\3\61\3\61\3\61\3\61\3\62\3\62") - buf.write("\3\62\3\63\3\63\3\63\3\63\3\63\3\63\3\64\3\64\3\64\3\65") - buf.write("\3\65\3\65\3\66\3\66\3\67\3\67\3\67\38\38\39\39\39\3:") - buf.write("\3:\3:\3:\3;\3;\3;\3;\3<\3<\3<\3=\3=\3=\3=\3=\3=\3=\3") - buf.write(">\3>\3>\3?\3?\3?\3?\3?\3@\3@\3@\3@\3@\3@\3A\3A\3A\3A\3") - buf.write("A\3B\3B\3B\3B\3B\3C\3C\3C\3C\3D\3D\3D\3D\3D\3D\3E\3E\3") - buf.write("E\3E\3E\3F\3F\3F\3F\3F\3G\3G\3G\3G\3G\3G\3G\3H\6H\u01ac") - buf.write("\nH\rH\16H\u01ad\3I\6I\u01b1\nI\rI\16I\u01b2\3I\3I\6I") - buf.write("\u01b7\nI\rI\16I\u01b8\3I\3I\5I\u01bd\nI\3I\6I\u01c0\n") - buf.write("I\rI\16I\u01c1\5I\u01c4\nI\3J\3J\3J\3J\7J\u01ca\nJ\fJ") - buf.write("\16J\u01cd\13J\3J\3J\3K\3K\3K\3K\7K\u01d5\nK\fK\16K\u01d8") - buf.write("\13K\3K\3K\3L\3L\7L\u01de\nL\fL\16L\u01e1\13L\3M\3M\3") - buf.write("N\3N\3O\3O\3O\5O\u01ea\nO\3P\3P\3P\3P\7P\u01f0\nP\fP\16") - buf.write("P\u01f3\13P\3P\3P\3Q\6Q\u01f8\nQ\rQ\16Q\u01f9\3Q\3Q\3") - buf.write("R\3R\2\2S\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25") - buf.write("\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+") - buf.write("\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#E") - buf.write("$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k") - buf.write("\67m8o9q:s;u{?}@\177A\u0081B\u0083C\u0085D\u0087") + buf.write("L\4M\tM\4N\tN\4O\tO\4P\tP\4Q\tQ\4R\tR\4S\tS\3\2\3\2\3") + buf.write("\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\5\3\5\3\5\3\5\3\5") + buf.write("\3\5\3\5\3\6\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3") + buf.write("\b\3\b\3\b\3\t\3\t\3\n\3\n\3\13\3\13\3\f\3\f\3\r\3\r\3") + buf.write("\16\3\16\3\17\3\17\3\20\3\20\3\20\3\21\3\21\3\21\3\22") + buf.write("\3\22\3\23\3\23\3\24\3\24\3\25\3\25\3\25\3\26\3\26\3\26") + buf.write("\3\26\3\26\3\26\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27") + buf.write("\3\27\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\31\3\31\3\32") + buf.write("\3\32\3\32\3\33\3\33\3\33\3\34\3\34\3\34\3\34\3\34\3\35") + buf.write("\3\35\3\35\3\35\3\35\3\36\3\36\3\36\3\36\3\36\3\36\3\37") + buf.write("\3\37\3\37\3\37\3\37\3\37\3 \3 \3 \3 \3!\3!\3!\3\"\3\"") + buf.write("\3\"\3\"\3\"\3#\3#\3#\3#\3#\3$\3$\3%\3%\3&\3&\3&\3&\3") + buf.write("\'\3\'\3\'\3\'\3\'\3\'\3\'\3(\3(\3)\3)\3*\3*\3+\3+\3,") + buf.write("\3,\3-\3-\3.\3.\3/\3/\3\60\3\60\3\61\3\61\3\61\3\62\3") + buf.write("\62\3\62\3\62\3\63\3\63\3\63\3\64\3\64\3\64\3\64\3\64") + buf.write("\3\64\3\65\3\65\3\65\3\66\3\66\3\66\3\67\3\67\38\38\3") + buf.write("8\39\39\3:\3:\3:\3;\3;\3;\3;\3<\3<\3<\3<\3=\3=\3=\3>\3") + buf.write(">\3>\3>\3>\3>\3>\3?\3?\3?\3@\3@\3@\3@\3@\3A\3A\3A\3A\3") + buf.write("A\3A\3B\3B\3B\3B\3B\3C\3C\3C\3C\3C\3D\3D\3D\3D\3E\3E\3") + buf.write("E\3E\3E\3E\3F\3F\3F\3F\3F\3G\3G\3G\3G\3G\3H\3H\3H\3H\3") + buf.write("H\3H\3H\3I\6I\u01b1\nI\rI\16I\u01b2\3J\6J\u01b6\nJ\rJ") + buf.write("\16J\u01b7\3J\3J\6J\u01bc\nJ\rJ\16J\u01bd\3J\3J\5J\u01c2") + buf.write("\nJ\3J\6J\u01c5\nJ\rJ\16J\u01c6\5J\u01c9\nJ\3K\3K\3K\3") + buf.write("K\7K\u01cf\nK\fK\16K\u01d2\13K\3K\3K\3L\3L\3L\3L\7L\u01da") + buf.write("\nL\fL\16L\u01dd\13L\3L\3L\3M\3M\7M\u01e3\nM\fM\16M\u01e6") + buf.write("\13M\3N\3N\3O\3O\3P\3P\3P\5P\u01ef\nP\3Q\3Q\3Q\3Q\7Q\u01f5") + buf.write("\nQ\fQ\16Q\u01f8\13Q\3Q\3Q\3R\6R\u01fd\nR\rR\16R\u01fe") + buf.write("\3R\3R\3S\3S\2\2T\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23") + buf.write("\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25") + buf.write(")\26+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A") + buf.write("\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65") + buf.write("i\66k\67m8o9q:s;u{?}@\177A\u0081B\u0083C\u0085D\u0087") buf.write("E\u0089F\u008bG\u008dH\u008fI\u0091J\u0093K\u0095L\u0097") - buf.write("M\u0099\2\u009b\2\u009d\2\u009fN\u00a1O\u00a3P\3\2\13") - buf.write("\4\2))^^\6\2))^^ppvv\4\2$$^^\6\2$$^^ppvv\3\2\62;\5\2C") - buf.write("\\aac|\4\2))aa\4\2\f\f\16\17\5\2\13\f\17\17\"\"\2\u020a") - buf.write("\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13") - buf.write("\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3") - buf.write("\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2") - buf.write("\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2") - buf.write("%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2") - buf.write("\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67") - buf.write("\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2") - buf.write("A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2") - buf.write("\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2") - buf.write("\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2") - buf.write("\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3") - buf.write("\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2q") - buf.write("\3\2\2\2\2s\3\2\2\2\2u\3\2\2\2\2w\3\2\2\2\2y\3\2\2\2\2") - buf.write("{\3\2\2\2\2}\3\2\2\2\2\177\3\2\2\2\2\u0081\3\2\2\2\2\u0083") - buf.write("\3\2\2\2\2\u0085\3\2\2\2\2\u0087\3\2\2\2\2\u0089\3\2\2") - buf.write("\2\2\u008b\3\2\2\2\2\u008d\3\2\2\2\2\u008f\3\2\2\2\2\u0091") - buf.write("\3\2\2\2\2\u0093\3\2\2\2\2\u0095\3\2\2\2\2\u0097\3\2\2") - buf.write("\2\2\u009f\3\2\2\2\2\u00a1\3\2\2\2\2\u00a3\3\2\2\2\3\u00a5") - buf.write("\3\2\2\2\5\u00a7\3\2\2\2\7\u00ab\3\2\2\2\t\u00b0\3\2\2") - buf.write("\2\13\u00b7\3\2\2\2\r\u00ba\3\2\2\2\17\u00bf\3\2\2\2\21") - buf.write("\u00c5\3\2\2\2\23\u00c7\3\2\2\2\25\u00c9\3\2\2\2\27\u00cb") - buf.write("\3\2\2\2\31\u00cd\3\2\2\2\33\u00cf\3\2\2\2\35\u00d1\3") - buf.write("\2\2\2\37\u00d3\3\2\2\2!\u00d6\3\2\2\2#\u00d9\3\2\2\2") - buf.write("%\u00db\3\2\2\2\'\u00dd\3\2\2\2)\u00df\3\2\2\2+\u00e5") - buf.write("\3\2\2\2-\u00ee\3\2\2\2/\u00f5\3\2\2\2\61\u00f7\3\2\2") - buf.write("\2\63\u00fa\3\2\2\2\65\u00fd\3\2\2\2\67\u0102\3\2\2\2") - buf.write("9\u0107\3\2\2\2;\u010d\3\2\2\2=\u0113\3\2\2\2?\u0117\3") - buf.write("\2\2\2A\u011a\3\2\2\2C\u011f\3\2\2\2E\u0124\3\2\2\2G\u0126") - buf.write("\3\2\2\2I\u0128\3\2\2\2K\u012c\3\2\2\2M\u0133\3\2\2\2") - buf.write("O\u0135\3\2\2\2Q\u0137\3\2\2\2S\u0139\3\2\2\2U\u013b\3") - buf.write("\2\2\2W\u013d\3\2\2\2Y\u013f\3\2\2\2[\u0141\3\2\2\2]\u0143") - buf.write("\3\2\2\2_\u0145\3\2\2\2a\u0148\3\2\2\2c\u014c\3\2\2\2") - buf.write("e\u014f\3\2\2\2g\u0155\3\2\2\2i\u0158\3\2\2\2k\u015b\3") - buf.write("\2\2\2m\u015d\3\2\2\2o\u0160\3\2\2\2q\u0162\3\2\2\2s\u0165") - buf.write("\3\2\2\2u\u0169\3\2\2\2w\u016d\3\2\2\2y\u0170\3\2\2\2") - buf.write("{\u0177\3\2\2\2}\u017a\3\2\2\2\177\u017f\3\2\2\2\u0081") - buf.write("\u0185\3\2\2\2\u0083\u018a\3\2\2\2\u0085\u018f\3\2\2\2") - buf.write("\u0087\u0193\3\2\2\2\u0089\u0199\3\2\2\2\u008b\u019e\3") - buf.write("\2\2\2\u008d\u01a3\3\2\2\2\u008f\u01ab\3\2\2\2\u0091\u01b0") - buf.write("\3\2\2\2\u0093\u01c5\3\2\2\2\u0095\u01d0\3\2\2\2\u0097") - buf.write("\u01db\3\2\2\2\u0099\u01e2\3\2\2\2\u009b\u01e4\3\2\2\2") - buf.write("\u009d\u01e9\3\2\2\2\u009f\u01eb\3\2\2\2\u00a1\u01f7\3") - buf.write("\2\2\2\u00a3\u01fd\3\2\2\2\u00a5\u00a6\7=\2\2\u00a6\4") - buf.write("\3\2\2\2\u00a7\u00a8\7w\2\2\u00a8\u00a9\7u\2\2\u00a9\u00aa") - buf.write("\7g\2\2\u00aa\6\3\2\2\2\u00ab\u00ac\7q\2\2\u00ac\u00ad") - buf.write("\7p\2\2\u00ad\u00ae\7n\2\2\u00ae\u00af\7{\2\2\u00af\b") - buf.write("\3\2\2\2\u00b0\u00b1\7j\2\2\u00b1\u00b2\7k\2\2\u00b2\u00b3") - buf.write("\7f\2\2\u00b3\u00b4\7k\2\2\u00b4\u00b5\7p\2\2\u00b5\u00b6") - buf.write("\7i\2\2\u00b6\n\3\2\2\2\u00b7\u00b8\7c\2\2\u00b8\u00b9") - buf.write("\7u\2\2\u00b9\f\3\2\2\2\u00ba\u00bb\7u\2\2\u00bb\u00bc") - buf.write("\7m\2\2\u00bc\u00bd\7k\2\2\u00bd\u00be\7r\2\2\u00be\16") - buf.write("\3\2\2\2\u00bf\u00c0\7r\2\2\u00c0\u00c1\7t\2\2\u00c1\u00c2") - buf.write("\7k\2\2\u00c2\u00c3\7p\2\2\u00c3\u00c4\7v\2\2\u00c4\20") - buf.write("\3\2\2\2\u00c5\u00c6\7?\2\2\u00c6\22\3\2\2\2\u00c7\u00c8") - buf.write("\7`\2\2\u00c8\24\3\2\2\2\u00c9\u00ca\7,\2\2\u00ca\26\3") - buf.write("\2\2\2\u00cb\u00cc\7\61\2\2\u00cc\30\3\2\2\2\u00cd\u00ce") - buf.write("\7\'\2\2\u00ce\32\3\2\2\2\u00cf\u00d0\7-\2\2\u00d0\34") - buf.write("\3\2\2\2\u00d1\u00d2\7/\2\2\u00d2\36\3\2\2\2\u00d3\u00d4") - buf.write("\7>\2\2\u00d4\u00d5\7>\2\2\u00d5 \3\2\2\2\u00d6\u00d7") - buf.write("\7@\2\2\u00d7\u00d8\7@\2\2\u00d8\"\3\2\2\2\u00d9\u00da") - buf.write("\7(\2\2\u00da$\3\2\2\2\u00db\u00dc\7&\2\2\u00dc&\3\2\2") - buf.write("\2\u00dd\u00de\7~\2\2\u00de(\3\2\2\2\u00df\u00e0\7d\2") - buf.write("\2\u00e0\u00e1\7t\2\2\u00e1\u00e2\7g\2\2\u00e2\u00e3\7") - buf.write("c\2\2\u00e3\u00e4\7m\2\2\u00e4*\3\2\2\2\u00e5\u00e6\7") - buf.write("e\2\2\u00e6\u00e7\7q\2\2\u00e7\u00e8\7p\2\2\u00e8\u00e9") - buf.write("\7v\2\2\u00e9\u00ea\7k\2\2\u00ea\u00eb\7p\2\2\u00eb\u00ec") - buf.write("\7w\2\2\u00ec\u00ed\7g\2\2\u00ed,\3\2\2\2\u00ee\u00ef") - buf.write("\7t\2\2\u00ef\u00f0\7g\2\2\u00f0\u00f1\7v\2\2\u00f1\u00f2") - buf.write("\7w\2\2\u00f2\u00f3\7t\2\2\u00f3\u00f4\7p\2\2\u00f4.\3") - buf.write("\2\2\2\u00f5\u00f6\7.\2\2\u00f6\60\3\2\2\2\u00f7\u00f8") - buf.write("\7k\2\2\u00f8\u00f9\7h\2\2\u00f9\62\3\2\2\2\u00fa\u00fb") - buf.write("\7f\2\2\u00fb\u00fc\7q\2\2\u00fc\64\3\2\2\2\u00fd\u00fe") - buf.write("\7g\2\2\u00fe\u00ff\7n\2\2\u00ff\u0100\7k\2\2\u0100\u0101") - buf.write("\7h\2\2\u0101\66\3\2\2\2\u0102\u0103\7g\2\2\u0103\u0104") - buf.write("\7n\2\2\u0104\u0105\7u\2\2\u0105\u0106\7g\2\2\u01068\3") - buf.write("\2\2\2\u0107\u0108\7y\2\2\u0108\u0109\7j\2\2\u0109\u010a") - buf.write("\7k\2\2\u010a\u010b\7n\2\2\u010b\u010c\7g\2\2\u010c:\3") - buf.write("\2\2\2\u010d\u010e\7w\2\2\u010e\u010f\7p\2\2\u010f\u0110") - buf.write("\7v\2\2\u0110\u0111\7k\2\2\u0111\u0112\7n\2\2\u0112<\3") - buf.write("\2\2\2\u0113\u0114\7h\2\2\u0114\u0115\7q\2\2\u0115\u0116") - buf.write("\7t\2\2\u0116>\3\2\2\2\u0117\u0118\7k\2\2\u0118\u0119") - buf.write("\7p\2\2\u0119@\3\2\2\2\u011a\u011b\7u\2\2\u011b\u011c") - buf.write("\7v\2\2\u011c\u011d\7g\2\2\u011d\u011e\7r\2\2\u011eB\3") - buf.write("\2\2\2\u011f\u0120\7h\2\2\u0120\u0121\7w\2\2\u0121\u0122") - buf.write("\7p\2\2\u0122\u0123\7e\2\2\u0123D\3\2\2\2\u0124\u0125") - buf.write("\7*\2\2\u0125F\3\2\2\2\u0126\u0127\7+\2\2\u0127H\3\2\2") - buf.write("\2\u0128\u0129\7f\2\2\u0129\u012a\7g\2\2\u012a\u012b\7") - buf.write("h\2\2\u012bJ\3\2\2\2\u012c\u012d\7g\2\2\u012d\u012e\7") - buf.write("z\2\2\u012e\u012f\7v\2\2\u012f\u0130\7g\2\2\u0130\u0131") - buf.write("\7t\2\2\u0131\u0132\7p\2\2\u0132L\3\2\2\2\u0133\u0134") - buf.write("\7<\2\2\u0134N\3\2\2\2\u0135\u0136\7}\2\2\u0136P\3\2\2") - buf.write("\2\u0137\u0138\7\177\2\2\u0138R\3\2\2\2\u0139\u013a\7") - buf.write("]\2\2\u013aT\3\2\2\2\u013b\u013c\7_\2\2\u013cV\3\2\2\2") - buf.write("\u013d\u013e\7A\2\2\u013eX\3\2\2\2\u013f\u0140\7\60\2") - buf.write("\2\u0140Z\3\2\2\2\u0141\u0142\7#\2\2\u0142\\\3\2\2\2\u0143") - buf.write("\u0144\7\u0080\2\2\u0144^\3\2\2\2\u0145\u0146\7\60\2\2") - buf.write("\u0146\u0147\7\60\2\2\u0147`\3\2\2\2\u0148\u0149\7\60") - buf.write("\2\2\u0149\u014a\7\60\2\2\u014a\u014b\7\60\2\2\u014bb") - buf.write("\3\2\2\2\u014c\u014d\7k\2\2\u014d\u014e\7u\2\2\u014ed") - buf.write("\3\2\2\2\u014f\u0150\7k\2\2\u0150\u0151\7u\2\2\u0151\u0152") - buf.write("\7p\2\2\u0152\u0153\7)\2\2\u0153\u0154\7v\2\2\u0154f\3") - buf.write("\2\2\2\u0155\u0156\7?\2\2\u0156\u0157\7?\2\2\u0157h\3") - buf.write("\2\2\2\u0158\u0159\7#\2\2\u0159\u015a\7?\2\2\u015aj\3") - buf.write("\2\2\2\u015b\u015c\7>\2\2\u015cl\3\2\2\2\u015d\u015e\7") - buf.write(">\2\2\u015e\u015f\7?\2\2\u015fn\3\2\2\2\u0160\u0161\7") - buf.write("@\2\2\u0161p\3\2\2\2\u0162\u0163\7@\2\2\u0163\u0164\7") - buf.write("?\2\2\u0164r\3\2\2\2\u0165\u0166\7p\2\2\u0166\u0167\7") - buf.write("q\2\2\u0167\u0168\7v\2\2\u0168t\3\2\2\2\u0169\u016a\7") - buf.write("c\2\2\u016a\u016b\7p\2\2\u016b\u016c\7f\2\2\u016cv\3\2") - buf.write("\2\2\u016d\u016e\7q\2\2\u016e\u016f\7t\2\2\u016fx\3\2") - buf.write("\2\2\u0170\u0171\7n\2\2\u0171\u0172\7c\2\2\u0172\u0173") - buf.write("\7o\2\2\u0173\u0174\7d\2\2\u0174\u0175\7f\2\2\u0175\u0176") - buf.write("\7c\2\2\u0176z\3\2\2\2\u0177\u0178\7/\2\2\u0178\u0179") - buf.write("\7@\2\2\u0179|\3\2\2\2\u017a\u017b\7v\2\2\u017b\u017c") - buf.write("\7t\2\2\u017c\u017d\7w\2\2\u017d\u017e\7g\2\2\u017e~\3") - buf.write("\2\2\2\u017f\u0180\7h\2\2\u0180\u0181\7c\2\2\u0181\u0182") - buf.write("\7n\2\2\u0182\u0183\7u\2\2\u0183\u0184\7g\2\2\u0184\u0080") - buf.write("\3\2\2\2\u0185\u0186\7p\2\2\u0186\u0187\7w\2\2\u0187\u0188") - buf.write("\7n\2\2\u0188\u0189\7n\2\2\u0189\u0082\3\2\2\2\u018a\u018b") - buf.write("\7X\2\2\u018b\u018c\7q\2\2\u018c\u018d\7k\2\2\u018d\u018e") - buf.write("\7f\2\2\u018e\u0084\3\2\2\2\u018f\u0190\7K\2\2\u0190\u0191") - buf.write("\7p\2\2\u0191\u0192\7v\2\2\u0192\u0086\3\2\2\2\u0193\u0194") - buf.write("\7H\2\2\u0194\u0195\7n\2\2\u0195\u0196\7q\2\2\u0196\u0197") - buf.write("\7c\2\2\u0197\u0198\7v\2\2\u0198\u0088\3\2\2\2\u0199\u019a") - buf.write("\7D\2\2\u019a\u019b\7q\2\2\u019b\u019c\7q\2\2\u019c\u019d") - buf.write("\7n\2\2\u019d\u008a\3\2\2\2\u019e\u019f\7E\2\2\u019f\u01a0") - buf.write("\7j\2\2\u01a0\u01a1\7c\2\2\u01a1\u01a2\7t\2\2\u01a2\u008c") - buf.write("\3\2\2\2\u01a3\u01a4\7U\2\2\u01a4\u01a5\7v\2\2\u01a5\u01a6") - buf.write("\7t\2\2\u01a6\u01a7\7k\2\2\u01a7\u01a8\7p\2\2\u01a8\u01a9") - buf.write("\7i\2\2\u01a9\u008e\3\2\2\2\u01aa\u01ac\5\u0099M\2\u01ab") - buf.write("\u01aa\3\2\2\2\u01ac\u01ad\3\2\2\2\u01ad\u01ab\3\2\2\2") - buf.write("\u01ad\u01ae\3\2\2\2\u01ae\u0090\3\2\2\2\u01af\u01b1\5") - buf.write("\u0099M\2\u01b0\u01af\3\2\2\2\u01b1\u01b2\3\2\2\2\u01b2") - buf.write("\u01b0\3\2\2\2\u01b2\u01b3\3\2\2\2\u01b3\u01b4\3\2\2\2") - buf.write("\u01b4\u01b6\7\60\2\2\u01b5\u01b7\5\u0099M\2\u01b6\u01b5") - buf.write("\3\2\2\2\u01b7\u01b8\3\2\2\2\u01b8\u01b6\3\2\2\2\u01b8") - buf.write("\u01b9\3\2\2\2\u01b9\u01c3\3\2\2\2\u01ba\u01bc\7g\2\2") - buf.write("\u01bb\u01bd\7/\2\2\u01bc\u01bb\3\2\2\2\u01bc\u01bd\3") - buf.write("\2\2\2\u01bd\u01bf\3\2\2\2\u01be\u01c0\5\u0099M\2\u01bf") - buf.write("\u01be\3\2\2\2\u01c0\u01c1\3\2\2\2\u01c1\u01bf\3\2\2\2") - buf.write("\u01c1\u01c2\3\2\2\2\u01c2\u01c4\3\2\2\2\u01c3\u01ba\3") - buf.write("\2\2\2\u01c3\u01c4\3\2\2\2\u01c4\u0092\3\2\2\2\u01c5\u01cb") - buf.write("\7)\2\2\u01c6\u01ca\n\2\2\2\u01c7\u01c8\7^\2\2\u01c8\u01ca") - buf.write("\t\3\2\2\u01c9\u01c6\3\2\2\2\u01c9\u01c7\3\2\2\2\u01ca") - buf.write("\u01cd\3\2\2\2\u01cb\u01c9\3\2\2\2\u01cb\u01cc\3\2\2\2") - buf.write("\u01cc\u01ce\3\2\2\2\u01cd\u01cb\3\2\2\2\u01ce\u01cf\7") - buf.write(")\2\2\u01cf\u0094\3\2\2\2\u01d0\u01d6\7$\2\2\u01d1\u01d5") - buf.write("\n\4\2\2\u01d2\u01d3\7^\2\2\u01d3\u01d5\t\5\2\2\u01d4") - buf.write("\u01d1\3\2\2\2\u01d4\u01d2\3\2\2\2\u01d5\u01d8\3\2\2\2") - buf.write("\u01d6\u01d4\3\2\2\2\u01d6\u01d7\3\2\2\2\u01d7\u01d9\3") - buf.write("\2\2\2\u01d8\u01d6\3\2\2\2\u01d9\u01da\7$\2\2\u01da\u0096") - buf.write("\3\2\2\2\u01db\u01df\5\u009bN\2\u01dc\u01de\5\u009dO\2") - buf.write("\u01dd\u01dc\3\2\2\2\u01de\u01e1\3\2\2\2\u01df\u01dd\3") - buf.write("\2\2\2\u01df\u01e0\3\2\2\2\u01e0\u0098\3\2\2\2\u01e1\u01df") - buf.write("\3\2\2\2\u01e2\u01e3\t\6\2\2\u01e3\u009a\3\2\2\2\u01e4") - buf.write("\u01e5\t\7\2\2\u01e5\u009c\3\2\2\2\u01e6\u01ea\5\u009b") - buf.write("N\2\u01e7\u01ea\5\u0099M\2\u01e8\u01ea\t\b\2\2\u01e9\u01e6") - buf.write("\3\2\2\2\u01e9\u01e7\3\2\2\2\u01e9\u01e8\3\2\2\2\u01ea") - buf.write("\u009e\3\2\2\2\u01eb\u01ec\7/\2\2\u01ec\u01ed\7/\2\2\u01ed") - buf.write("\u01f1\3\2\2\2\u01ee\u01f0\n\t\2\2\u01ef\u01ee\3\2\2\2") - buf.write("\u01f0\u01f3\3\2\2\2\u01f1\u01ef\3\2\2\2\u01f1\u01f2\3") - buf.write("\2\2\2\u01f2\u01f4\3\2\2\2\u01f3\u01f1\3\2\2\2\u01f4\u01f5") - buf.write("\bP\2\2\u01f5\u00a0\3\2\2\2\u01f6\u01f8\t\n\2\2\u01f7") - buf.write("\u01f6\3\2\2\2\u01f8\u01f9\3\2\2\2\u01f9\u01f7\3\2\2\2") - buf.write("\u01f9\u01fa\3\2\2\2\u01fa\u01fb\3\2\2\2\u01fb\u01fc\b") - buf.write("Q\2\2\u01fc\u00a2\3\2\2\2\u01fd\u01fe\13\2\2\2\u01fe\u00a4") - buf.write("\3\2\2\2\21\2\u01ad\u01b2\u01b8\u01bc\u01c1\u01c3\u01c9") - buf.write("\u01cb\u01d4\u01d6\u01df\u01e9\u01f1\u01f9\3\b\2\2") + buf.write("M\u0099N\u009b\2\u009d\2\u009f\2\u00a1O\u00a3P\u00a5Q") + buf.write("\3\2\13\4\2))^^\6\2))^^ppvv\4\2$$^^\6\2$$^^ppvv\3\2\62") + buf.write(";\5\2C\\aac|\4\2))aa\4\2\f\f\16\17\5\2\13\f\17\17\"\"") + buf.write("\2\u020f\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2") + buf.write("\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2") + buf.write("\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2") + buf.write("\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3") + buf.write("\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2") + buf.write("-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3") + buf.write("\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2") + buf.write("?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2") + buf.write("\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2") + buf.write("\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2") + buf.write("\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3") + buf.write("\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2o") + buf.write("\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2u\3\2\2\2\2w\3\2\2\2\2") + buf.write("y\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177\3\2\2\2\2\u0081") + buf.write("\3\2\2\2\2\u0083\3\2\2\2\2\u0085\3\2\2\2\2\u0087\3\2\2") + buf.write("\2\2\u0089\3\2\2\2\2\u008b\3\2\2\2\2\u008d\3\2\2\2\2\u008f") + buf.write("\3\2\2\2\2\u0091\3\2\2\2\2\u0093\3\2\2\2\2\u0095\3\2\2") + buf.write("\2\2\u0097\3\2\2\2\2\u0099\3\2\2\2\2\u00a1\3\2\2\2\2\u00a3") + buf.write("\3\2\2\2\2\u00a5\3\2\2\2\3\u00a7\3\2\2\2\5\u00a9\3\2\2") + buf.write("\2\7\u00ad\3\2\2\2\t\u00b2\3\2\2\2\13\u00b9\3\2\2\2\r") + buf.write("\u00bc\3\2\2\2\17\u00c1\3\2\2\2\21\u00c7\3\2\2\2\23\u00c9") + buf.write("\3\2\2\2\25\u00cb\3\2\2\2\27\u00cd\3\2\2\2\31\u00cf\3") + buf.write("\2\2\2\33\u00d1\3\2\2\2\35\u00d3\3\2\2\2\37\u00d5\3\2") + buf.write("\2\2!\u00d8\3\2\2\2#\u00db\3\2\2\2%\u00dd\3\2\2\2\'\u00df") + buf.write("\3\2\2\2)\u00e1\3\2\2\2+\u00e4\3\2\2\2-\u00ea\3\2\2\2") + buf.write("/\u00f3\3\2\2\2\61\u00fa\3\2\2\2\63\u00fc\3\2\2\2\65\u00ff") + buf.write("\3\2\2\2\67\u0102\3\2\2\29\u0107\3\2\2\2;\u010c\3\2\2") + buf.write("\2=\u0112\3\2\2\2?\u0118\3\2\2\2A\u011c\3\2\2\2C\u011f") + buf.write("\3\2\2\2E\u0124\3\2\2\2G\u0129\3\2\2\2I\u012b\3\2\2\2") + buf.write("K\u012d\3\2\2\2M\u0131\3\2\2\2O\u0138\3\2\2\2Q\u013a\3") + buf.write("\2\2\2S\u013c\3\2\2\2U\u013e\3\2\2\2W\u0140\3\2\2\2Y\u0142") + buf.write("\3\2\2\2[\u0144\3\2\2\2]\u0146\3\2\2\2_\u0148\3\2\2\2") + buf.write("a\u014a\3\2\2\2c\u014d\3\2\2\2e\u0151\3\2\2\2g\u0154\3") + buf.write("\2\2\2i\u015a\3\2\2\2k\u015d\3\2\2\2m\u0160\3\2\2\2o\u0162") + buf.write("\3\2\2\2q\u0165\3\2\2\2s\u0167\3\2\2\2u\u016a\3\2\2\2") + buf.write("w\u016e\3\2\2\2y\u0172\3\2\2\2{\u0175\3\2\2\2}\u017c\3") + buf.write("\2\2\2\177\u017f\3\2\2\2\u0081\u0184\3\2\2\2\u0083\u018a") + buf.write("\3\2\2\2\u0085\u018f\3\2\2\2\u0087\u0194\3\2\2\2\u0089") + buf.write("\u0198\3\2\2\2\u008b\u019e\3\2\2\2\u008d\u01a3\3\2\2\2") + buf.write("\u008f\u01a8\3\2\2\2\u0091\u01b0\3\2\2\2\u0093\u01b5\3") + buf.write("\2\2\2\u0095\u01ca\3\2\2\2\u0097\u01d5\3\2\2\2\u0099\u01e0") + buf.write("\3\2\2\2\u009b\u01e7\3\2\2\2\u009d\u01e9\3\2\2\2\u009f") + buf.write("\u01ee\3\2\2\2\u00a1\u01f0\3\2\2\2\u00a3\u01fc\3\2\2\2") + buf.write("\u00a5\u0202\3\2\2\2\u00a7\u00a8\7=\2\2\u00a8\4\3\2\2") + buf.write("\2\u00a9\u00aa\7w\2\2\u00aa\u00ab\7u\2\2\u00ab\u00ac\7") + buf.write("g\2\2\u00ac\6\3\2\2\2\u00ad\u00ae\7q\2\2\u00ae\u00af\7") + buf.write("p\2\2\u00af\u00b0\7n\2\2\u00b0\u00b1\7{\2\2\u00b1\b\3") + buf.write("\2\2\2\u00b2\u00b3\7j\2\2\u00b3\u00b4\7k\2\2\u00b4\u00b5") + buf.write("\7f\2\2\u00b5\u00b6\7k\2\2\u00b6\u00b7\7p\2\2\u00b7\u00b8") + buf.write("\7i\2\2\u00b8\n\3\2\2\2\u00b9\u00ba\7c\2\2\u00ba\u00bb") + buf.write("\7u\2\2\u00bb\f\3\2\2\2\u00bc\u00bd\7u\2\2\u00bd\u00be") + buf.write("\7m\2\2\u00be\u00bf\7k\2\2\u00bf\u00c0\7r\2\2\u00c0\16") + buf.write("\3\2\2\2\u00c1\u00c2\7r\2\2\u00c2\u00c3\7t\2\2\u00c3\u00c4") + buf.write("\7k\2\2\u00c4\u00c5\7p\2\2\u00c5\u00c6\7v\2\2\u00c6\20") + buf.write("\3\2\2\2\u00c7\u00c8\7?\2\2\u00c8\22\3\2\2\2\u00c9\u00ca") + buf.write("\7`\2\2\u00ca\24\3\2\2\2\u00cb\u00cc\7,\2\2\u00cc\26\3") + buf.write("\2\2\2\u00cd\u00ce\7\61\2\2\u00ce\30\3\2\2\2\u00cf\u00d0") + buf.write("\7\'\2\2\u00d0\32\3\2\2\2\u00d1\u00d2\7-\2\2\u00d2\34") + buf.write("\3\2\2\2\u00d3\u00d4\7/\2\2\u00d4\36\3\2\2\2\u00d5\u00d6") + buf.write("\7>\2\2\u00d6\u00d7\7>\2\2\u00d7 \3\2\2\2\u00d8\u00d9") + buf.write("\7@\2\2\u00d9\u00da\7@\2\2\u00da\"\3\2\2\2\u00db\u00dc") + buf.write("\7(\2\2\u00dc$\3\2\2\2\u00dd\u00de\7&\2\2\u00de&\3\2\2") + buf.write("\2\u00df\u00e0\7~\2\2\u00e0(\3\2\2\2\u00e1\u00e2\7A\2") + buf.write("\2\u00e2\u00e3\7A\2\2\u00e3*\3\2\2\2\u00e4\u00e5\7d\2") + buf.write("\2\u00e5\u00e6\7t\2\2\u00e6\u00e7\7g\2\2\u00e7\u00e8\7") + buf.write("c\2\2\u00e8\u00e9\7m\2\2\u00e9,\3\2\2\2\u00ea\u00eb\7") + buf.write("e\2\2\u00eb\u00ec\7q\2\2\u00ec\u00ed\7p\2\2\u00ed\u00ee") + buf.write("\7v\2\2\u00ee\u00ef\7k\2\2\u00ef\u00f0\7p\2\2\u00f0\u00f1") + buf.write("\7w\2\2\u00f1\u00f2\7g\2\2\u00f2.\3\2\2\2\u00f3\u00f4") + buf.write("\7t\2\2\u00f4\u00f5\7g\2\2\u00f5\u00f6\7v\2\2\u00f6\u00f7") + buf.write("\7w\2\2\u00f7\u00f8\7t\2\2\u00f8\u00f9\7p\2\2\u00f9\60") + buf.write("\3\2\2\2\u00fa\u00fb\7.\2\2\u00fb\62\3\2\2\2\u00fc\u00fd") + buf.write("\7k\2\2\u00fd\u00fe\7h\2\2\u00fe\64\3\2\2\2\u00ff\u0100") + buf.write("\7f\2\2\u0100\u0101\7q\2\2\u0101\66\3\2\2\2\u0102\u0103") + buf.write("\7g\2\2\u0103\u0104\7n\2\2\u0104\u0105\7k\2\2\u0105\u0106") + buf.write("\7h\2\2\u01068\3\2\2\2\u0107\u0108\7g\2\2\u0108\u0109") + buf.write("\7n\2\2\u0109\u010a\7u\2\2\u010a\u010b\7g\2\2\u010b:\3") + buf.write("\2\2\2\u010c\u010d\7y\2\2\u010d\u010e\7j\2\2\u010e\u010f") + buf.write("\7k\2\2\u010f\u0110\7n\2\2\u0110\u0111\7g\2\2\u0111<\3") + buf.write("\2\2\2\u0112\u0113\7w\2\2\u0113\u0114\7p\2\2\u0114\u0115") + buf.write("\7v\2\2\u0115\u0116\7k\2\2\u0116\u0117\7n\2\2\u0117>\3") + buf.write("\2\2\2\u0118\u0119\7h\2\2\u0119\u011a\7q\2\2\u011a\u011b") + buf.write("\7t\2\2\u011b@\3\2\2\2\u011c\u011d\7k\2\2\u011d\u011e") + buf.write("\7p\2\2\u011eB\3\2\2\2\u011f\u0120\7u\2\2\u0120\u0121") + buf.write("\7v\2\2\u0121\u0122\7g\2\2\u0122\u0123\7r\2\2\u0123D\3") + buf.write("\2\2\2\u0124\u0125\7h\2\2\u0125\u0126\7w\2\2\u0126\u0127") + buf.write("\7p\2\2\u0127\u0128\7e\2\2\u0128F\3\2\2\2\u0129\u012a") + buf.write("\7*\2\2\u012aH\3\2\2\2\u012b\u012c\7+\2\2\u012cJ\3\2\2") + buf.write("\2\u012d\u012e\7f\2\2\u012e\u012f\7g\2\2\u012f\u0130\7") + buf.write("h\2\2\u0130L\3\2\2\2\u0131\u0132\7g\2\2\u0132\u0133\7") + buf.write("z\2\2\u0133\u0134\7v\2\2\u0134\u0135\7g\2\2\u0135\u0136") + buf.write("\7t\2\2\u0136\u0137\7p\2\2\u0137N\3\2\2\2\u0138\u0139") + buf.write("\7<\2\2\u0139P\3\2\2\2\u013a\u013b\7}\2\2\u013bR\3\2\2") + buf.write("\2\u013c\u013d\7\177\2\2\u013dT\3\2\2\2\u013e\u013f\7") + buf.write("]\2\2\u013fV\3\2\2\2\u0140\u0141\7_\2\2\u0141X\3\2\2\2") + buf.write("\u0142\u0143\7A\2\2\u0143Z\3\2\2\2\u0144\u0145\7\60\2") + buf.write("\2\u0145\\\3\2\2\2\u0146\u0147\7#\2\2\u0147^\3\2\2\2\u0148") + buf.write("\u0149\7\u0080\2\2\u0149`\3\2\2\2\u014a\u014b\7\60\2\2") + buf.write("\u014b\u014c\7\60\2\2\u014cb\3\2\2\2\u014d\u014e\7\60") + buf.write("\2\2\u014e\u014f\7\60\2\2\u014f\u0150\7\60\2\2\u0150d") + buf.write("\3\2\2\2\u0151\u0152\7k\2\2\u0152\u0153\7u\2\2\u0153f") + buf.write("\3\2\2\2\u0154\u0155\7k\2\2\u0155\u0156\7u\2\2\u0156\u0157") + buf.write("\7p\2\2\u0157\u0158\7)\2\2\u0158\u0159\7v\2\2\u0159h\3") + buf.write("\2\2\2\u015a\u015b\7?\2\2\u015b\u015c\7?\2\2\u015cj\3") + buf.write("\2\2\2\u015d\u015e\7#\2\2\u015e\u015f\7?\2\2\u015fl\3") + buf.write("\2\2\2\u0160\u0161\7>\2\2\u0161n\3\2\2\2\u0162\u0163\7") + buf.write(">\2\2\u0163\u0164\7?\2\2\u0164p\3\2\2\2\u0165\u0166\7") + buf.write("@\2\2\u0166r\3\2\2\2\u0167\u0168\7@\2\2\u0168\u0169\7") + buf.write("?\2\2\u0169t\3\2\2\2\u016a\u016b\7p\2\2\u016b\u016c\7") + buf.write("q\2\2\u016c\u016d\7v\2\2\u016dv\3\2\2\2\u016e\u016f\7") + buf.write("c\2\2\u016f\u0170\7p\2\2\u0170\u0171\7f\2\2\u0171x\3\2") + buf.write("\2\2\u0172\u0173\7q\2\2\u0173\u0174\7t\2\2\u0174z\3\2") + buf.write("\2\2\u0175\u0176\7n\2\2\u0176\u0177\7c\2\2\u0177\u0178") + buf.write("\7o\2\2\u0178\u0179\7d\2\2\u0179\u017a\7f\2\2\u017a\u017b") + buf.write("\7c\2\2\u017b|\3\2\2\2\u017c\u017d\7/\2\2\u017d\u017e") + buf.write("\7@\2\2\u017e~\3\2\2\2\u017f\u0180\7v\2\2\u0180\u0181") + buf.write("\7t\2\2\u0181\u0182\7w\2\2\u0182\u0183\7g\2\2\u0183\u0080") + buf.write("\3\2\2\2\u0184\u0185\7h\2\2\u0185\u0186\7c\2\2\u0186\u0187") + buf.write("\7n\2\2\u0187\u0188\7u\2\2\u0188\u0189\7g\2\2\u0189\u0082") + buf.write("\3\2\2\2\u018a\u018b\7p\2\2\u018b\u018c\7w\2\2\u018c\u018d") + buf.write("\7n\2\2\u018d\u018e\7n\2\2\u018e\u0084\3\2\2\2\u018f\u0190") + buf.write("\7X\2\2\u0190\u0191\7q\2\2\u0191\u0192\7k\2\2\u0192\u0193") + buf.write("\7f\2\2\u0193\u0086\3\2\2\2\u0194\u0195\7K\2\2\u0195\u0196") + buf.write("\7p\2\2\u0196\u0197\7v\2\2\u0197\u0088\3\2\2\2\u0198\u0199") + buf.write("\7H\2\2\u0199\u019a\7n\2\2\u019a\u019b\7q\2\2\u019b\u019c") + buf.write("\7c\2\2\u019c\u019d\7v\2\2\u019d\u008a\3\2\2\2\u019e\u019f") + buf.write("\7D\2\2\u019f\u01a0\7q\2\2\u01a0\u01a1\7q\2\2\u01a1\u01a2") + buf.write("\7n\2\2\u01a2\u008c\3\2\2\2\u01a3\u01a4\7E\2\2\u01a4\u01a5") + buf.write("\7j\2\2\u01a5\u01a6\7c\2\2\u01a6\u01a7\7t\2\2\u01a7\u008e") + buf.write("\3\2\2\2\u01a8\u01a9\7U\2\2\u01a9\u01aa\7v\2\2\u01aa\u01ab") + buf.write("\7t\2\2\u01ab\u01ac\7k\2\2\u01ac\u01ad\7p\2\2\u01ad\u01ae") + buf.write("\7i\2\2\u01ae\u0090\3\2\2\2\u01af\u01b1\5\u009bN\2\u01b0") + buf.write("\u01af\3\2\2\2\u01b1\u01b2\3\2\2\2\u01b2\u01b0\3\2\2\2") + buf.write("\u01b2\u01b3\3\2\2\2\u01b3\u0092\3\2\2\2\u01b4\u01b6\5") + buf.write("\u009bN\2\u01b5\u01b4\3\2\2\2\u01b6\u01b7\3\2\2\2\u01b7") + buf.write("\u01b5\3\2\2\2\u01b7\u01b8\3\2\2\2\u01b8\u01b9\3\2\2\2") + buf.write("\u01b9\u01bb\7\60\2\2\u01ba\u01bc\5\u009bN\2\u01bb\u01ba") + buf.write("\3\2\2\2\u01bc\u01bd\3\2\2\2\u01bd\u01bb\3\2\2\2\u01bd") + buf.write("\u01be\3\2\2\2\u01be\u01c8\3\2\2\2\u01bf\u01c1\7g\2\2") + buf.write("\u01c0\u01c2\7/\2\2\u01c1\u01c0\3\2\2\2\u01c1\u01c2\3") + buf.write("\2\2\2\u01c2\u01c4\3\2\2\2\u01c3\u01c5\5\u009bN\2\u01c4") + buf.write("\u01c3\3\2\2\2\u01c5\u01c6\3\2\2\2\u01c6\u01c4\3\2\2\2") + buf.write("\u01c6\u01c7\3\2\2\2\u01c7\u01c9\3\2\2\2\u01c8\u01bf\3") + buf.write("\2\2\2\u01c8\u01c9\3\2\2\2\u01c9\u0094\3\2\2\2\u01ca\u01d0") + buf.write("\7)\2\2\u01cb\u01cf\n\2\2\2\u01cc\u01cd\7^\2\2\u01cd\u01cf") + buf.write("\t\3\2\2\u01ce\u01cb\3\2\2\2\u01ce\u01cc\3\2\2\2\u01cf") + buf.write("\u01d2\3\2\2\2\u01d0\u01ce\3\2\2\2\u01d0\u01d1\3\2\2\2") + buf.write("\u01d1\u01d3\3\2\2\2\u01d2\u01d0\3\2\2\2\u01d3\u01d4\7") + buf.write(")\2\2\u01d4\u0096\3\2\2\2\u01d5\u01db\7$\2\2\u01d6\u01da") + buf.write("\n\4\2\2\u01d7\u01d8\7^\2\2\u01d8\u01da\t\5\2\2\u01d9") + buf.write("\u01d6\3\2\2\2\u01d9\u01d7\3\2\2\2\u01da\u01dd\3\2\2\2") + buf.write("\u01db\u01d9\3\2\2\2\u01db\u01dc\3\2\2\2\u01dc\u01de\3") + buf.write("\2\2\2\u01dd\u01db\3\2\2\2\u01de\u01df\7$\2\2\u01df\u0098") + buf.write("\3\2\2\2\u01e0\u01e4\5\u009dO\2\u01e1\u01e3\5\u009fP\2") + buf.write("\u01e2\u01e1\3\2\2\2\u01e3\u01e6\3\2\2\2\u01e4\u01e2\3") + buf.write("\2\2\2\u01e4\u01e5\3\2\2\2\u01e5\u009a\3\2\2\2\u01e6\u01e4") + buf.write("\3\2\2\2\u01e7\u01e8\t\6\2\2\u01e8\u009c\3\2\2\2\u01e9") + buf.write("\u01ea\t\7\2\2\u01ea\u009e\3\2\2\2\u01eb\u01ef\5\u009d") + buf.write("O\2\u01ec\u01ef\5\u009bN\2\u01ed\u01ef\t\b\2\2\u01ee\u01eb") + buf.write("\3\2\2\2\u01ee\u01ec\3\2\2\2\u01ee\u01ed\3\2\2\2\u01ef") + buf.write("\u00a0\3\2\2\2\u01f0\u01f1\7/\2\2\u01f1\u01f2\7/\2\2\u01f2") + buf.write("\u01f6\3\2\2\2\u01f3\u01f5\n\t\2\2\u01f4\u01f3\3\2\2\2") + buf.write("\u01f5\u01f8\3\2\2\2\u01f6\u01f4\3\2\2\2\u01f6\u01f7\3") + buf.write("\2\2\2\u01f7\u01f9\3\2\2\2\u01f8\u01f6\3\2\2\2\u01f9\u01fa") + buf.write("\bQ\2\2\u01fa\u00a2\3\2\2\2\u01fb\u01fd\t\n\2\2\u01fc") + buf.write("\u01fb\3\2\2\2\u01fd\u01fe\3\2\2\2\u01fe\u01fc\3\2\2\2") + buf.write("\u01fe\u01ff\3\2\2\2\u01ff\u0200\3\2\2\2\u0200\u0201\b") + buf.write("R\2\2\u0201\u00a4\3\2\2\2\u0202\u0203\13\2\2\2\u0203\u00a6") + buf.write("\3\2\2\2\21\2\u01b2\u01b7\u01bd\u01c1\u01c6\u01c8\u01ce") + buf.write("\u01d0\u01d9\u01db\u01e4\u01ee\u01f6\u01fe\3\b\2\2") return buf.getvalue() @@ -303,14 +305,15 @@ class PyxellLexer(Lexer): T__67 = 68 T__68 = 69 T__69 = 70 - INT = 71 - FLOAT = 72 - CHAR = 73 - STRING = 74 - ID = 75 - COMMENT = 76 - WS = 77 - ERR = 78 + T__70 = 71 + INT = 72 + FLOAT = 73 + CHAR = 74 + STRING = 75 + ID = 76 + COMMENT = 77 + WS = 78 + ERR = 79 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -319,13 +322,13 @@ class PyxellLexer(Lexer): literalNames = [ "", "';'", "'use'", "'only'", "'hiding'", "'as'", "'skip'", "'print'", "'='", "'^'", "'*'", "'/'", "'%'", "'+'", "'-'", "'<<'", "'>>'", - "'&'", "'$'", "'|'", "'break'", "'continue'", "'return'", "','", - "'if'", "'do'", "'elif'", "'else'", "'while'", "'until'", "'for'", - "'in'", "'step'", "'func'", "'('", "')'", "'def'", "'extern'", - "':'", "'{'", "'}'", "'['", "']'", "'?'", "'.'", "'!'", "'~'", - "'..'", "'...'", "'is'", "'isn't'", "'=='", "'!='", "'<'", "'<='", - "'>'", "'>='", "'not'", "'and'", "'or'", "'lambda'", "'->'", - "'true'", "'false'", "'null'", "'Void'", "'Int'", "'Float'", + "'&'", "'$'", "'|'", "'??'", "'break'", "'continue'", "'return'", + "','", "'if'", "'do'", "'elif'", "'else'", "'while'", "'until'", + "'for'", "'in'", "'step'", "'func'", "'('", "')'", "'def'", + "'extern'", "':'", "'{'", "'}'", "'['", "']'", "'?'", "'.'", + "'!'", "'~'", "'..'", "'...'", "'is'", "'isn't'", "'=='", "'!='", + "'<'", "'<='", "'>'", "'>='", "'not'", "'and'", "'or'", "'lambda'", + "'->'", "'true'", "'false'", "'null'", "'Void'", "'Int'", "'Float'", "'Bool'", "'Char'", "'String'" ] symbolicNames = [ "", @@ -342,8 +345,9 @@ class PyxellLexer(Lexer): "T__50", "T__51", "T__52", "T__53", "T__54", "T__55", "T__56", "T__57", "T__58", "T__59", "T__60", "T__61", "T__62", "T__63", "T__64", "T__65", "T__66", "T__67", - "T__68", "T__69", "INT", "FLOAT", "CHAR", "STRING", "ID", - "DIGIT", "ID_START", "ID_CONT", "COMMENT", "WS", "ERR" ] + "T__68", "T__69", "T__70", "INT", "FLOAT", "CHAR", "STRING", + "ID", "DIGIT", "ID_START", "ID_CONT", "COMMENT", "WS", + "ERR" ] grammarFileName = "Pyxell.g4" diff --git a/src/antlr/PyxellLexer.tokens b/src/antlr/PyxellLexer.tokens index 3bde8676..c629459f 100644 --- a/src/antlr/PyxellLexer.tokens +++ b/src/antlr/PyxellLexer.tokens @@ -68,14 +68,15 @@ T__66=67 T__67=68 T__68=69 T__69=70 -INT=71 -FLOAT=72 -CHAR=73 -STRING=74 -ID=75 -COMMENT=76 -WS=77 -ERR=78 +T__70=71 +INT=72 +FLOAT=73 +CHAR=74 +STRING=75 +ID=76 +COMMENT=77 +WS=78 +ERR=79 ';'=1 'use'=2 'only'=3 @@ -95,54 +96,55 @@ ERR=78 '&'=17 '$'=18 '|'=19 -'break'=20 -'continue'=21 -'return'=22 -','=23 -'if'=24 -'do'=25 -'elif'=26 -'else'=27 -'while'=28 -'until'=29 -'for'=30 -'in'=31 -'step'=32 -'func'=33 -'('=34 -')'=35 -'def'=36 -'extern'=37 -':'=38 -'{'=39 -'}'=40 -'['=41 -']'=42 -'?'=43 -'.'=44 -'!'=45 -'~'=46 -'..'=47 -'...'=48 -'is'=49 -'isn\'t'=50 -'=='=51 -'!='=52 -'<'=53 -'<='=54 -'>'=55 -'>='=56 -'not'=57 -'and'=58 -'or'=59 -'lambda'=60 -'->'=61 -'true'=62 -'false'=63 -'null'=64 -'Void'=65 -'Int'=66 -'Float'=67 -'Bool'=68 -'Char'=69 -'String'=70 +'??'=20 +'break'=21 +'continue'=22 +'return'=23 +','=24 +'if'=25 +'do'=26 +'elif'=27 +'else'=28 +'while'=29 +'until'=30 +'for'=31 +'in'=32 +'step'=33 +'func'=34 +'('=35 +')'=36 +'def'=37 +'extern'=38 +':'=39 +'{'=40 +'}'=41 +'['=42 +']'=43 +'?'=44 +'.'=45 +'!'=46 +'~'=47 +'..'=48 +'...'=49 +'is'=50 +'isn\'t'=51 +'=='=52 +'!='=53 +'<'=54 +'<='=55 +'>'=56 +'>='=57 +'not'=58 +'and'=59 +'or'=60 +'lambda'=61 +'->'=62 +'true'=63 +'false'=64 +'null'=65 +'Void'=66 +'Int'=67 +'Float'=68 +'Bool'=69 +'Char'=70 +'String'=71 diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index f657e4f8..05228c45 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -8,8 +8,8 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3P") - buf.write("\u0188\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3Q") + buf.write("\u018b\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16") buf.write("\t\16\4\17\t\17\4\20\t\20\3\2\7\2\"\n\2\f\2\16\2%\13\2") buf.write("\3\2\3\2\3\3\3\3\3\3\3\3\5\3-\n\3\3\4\3\4\3\4\3\4\3\4") @@ -32,174 +32,175 @@ def serializedATN(): buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") buf.write("\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") - buf.write("\t\3\t\5\t\u0112\n\t\3\t\3\t\5\t\u0116\n\t\3\t\3\t\5\t") - buf.write("\u011a\n\t\5\t\u011c\n\t\3\t\3\t\3\t\5\t\u0121\n\t\3\t") - buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\7\t\u012a\n\t\f\t\16\t\u012d") - buf.write("\13\t\3\t\5\t\u0130\n\t\3\t\3\t\3\t\3\t\3\t\7\t\u0137") - buf.write("\n\t\f\t\16\t\u013a\13\t\3\n\3\n\3\n\7\n\u013f\n\n\f\n") - buf.write("\16\n\u0142\13\n\3\n\3\n\3\13\3\13\3\13\3\f\3\f\3\f\3") - buf.write("\f\3\f\3\f\5\f\u014f\n\f\3\f\3\f\5\f\u0153\n\f\3\r\3\r") - buf.write("\5\r\u0157\n\r\3\r\3\r\3\16\3\16\3\16\3\16\3\16\3\16\3") - buf.write("\16\5\16\u0162\n\16\3\17\3\17\7\17\u0166\n\17\f\17\16") - buf.write("\17\u0169\13\17\3\17\3\17\3\20\3\20\3\20\3\20\3\20\3\20") - buf.write("\3\20\3\20\3\20\3\20\3\20\3\20\5\20\u0179\n\20\3\20\3") - buf.write("\20\3\20\3\20\3\20\3\20\3\20\3\20\7\20\u0183\n\20\f\20") - buf.write("\16\20\u0186\13\20\3\20\2\4\20\36\21\2\4\6\b\n\f\16\20") - buf.write("\22\24\26\30\32\34\36\2\r\3\2\13\25\3\2\26\27\4\2\17\20") - buf.write("\60\60\3\2\f\16\3\2\17\20\3\2\21\22\3\2\61\62\3\2\63\64") - buf.write("\3\2\65:\3\2@A\3\2CH\2\u01cc\2#\3\2\2\2\4,\3\2\2\2\6V") - buf.write("\3\2\2\2\bX\3\2\2\2\n\u00a0\3\2\2\2\f\u00a2\3\2\2\2\16") - buf.write("\u00a8\3\2\2\2\20\u00dd\3\2\2\2\22\u0140\3\2\2\2\24\u0145") - buf.write("\3\2\2\2\26\u0152\3\2\2\2\30\u0156\3\2\2\2\32\u0161\3") - buf.write("\2\2\2\34\u0167\3\2\2\2\36\u0178\3\2\2\2 \"\5\4\3\2! ") - buf.write("\3\2\2\2\"%\3\2\2\2#!\3\2\2\2#$\3\2\2\2$&\3\2\2\2%#\3") - buf.write("\2\2\2&\'\7\2\2\3\'\3\3\2\2\2()\5\6\4\2)*\7\3\2\2*-\3") - buf.write("\2\2\2+-\5\n\6\2,(\3\2\2\2,+\3\2\2\2-\5\3\2\2\2./\7\4") - buf.write("\2\2/\66\7M\2\2\60\61\7\5\2\2\61\67\5\34\17\2\62\63\7") - buf.write("\6\2\2\63\67\5\34\17\2\64\65\7\7\2\2\65\67\7M\2\2\66\60") - buf.write("\3\2\2\2\66\62\3\2\2\2\66\64\3\2\2\2\66\67\3\2\2\2\67") - buf.write("W\3\2\2\28W\7\b\2\29;\7\t\2\2:<\5\22\n\2;:\3\2\2\2;<\3") - buf.write("\2\2\2\5\36\20\2>A\7M\2\2?@\7\n\2\2@B\5\22") - buf.write("\n\2A?\3\2\2\2AB\3\2\2\2BW\3\2\2\2CD\5\b\5\2DE\7\n\2\2") - buf.write("EG\3\2\2\2FC\3\2\2\2GJ\3\2\2\2HF\3\2\2\2HI\3\2\2\2IK\3") - buf.write("\2\2\2JH\3\2\2\2KW\5\22\n\2LM\5\20\t\2MN\t\2\2\2NO\7\n") - buf.write("\2\2OP\5\20\t\2PW\3\2\2\2QW\t\3\2\2RT\7\30\2\2SU\5\22") - buf.write("\n\2TS\3\2\2\2TU\3\2\2\2UW\3\2\2\2V.\3\2\2\2V8\3\2\2\2") - buf.write("V9\3\2\2\2V=\3\2\2\2VH\3\2\2\2VL\3\2\2\2VQ\3\2\2\2VR\3") - buf.write("\2\2\2W\7\3\2\2\2X]\5\20\t\2YZ\7\31\2\2Z\\\5\20\t\2[Y") - buf.write("\3\2\2\2\\_\3\2\2\2][\3\2\2\2]^\3\2\2\2^\t\3\2\2\2_]\3") - buf.write("\2\2\2`a\7\32\2\2ab\5\20\t\2bc\7\33\2\2ck\5\16\b\2de\7") - buf.write("\34\2\2ef\5\20\t\2fg\7\33\2\2gh\5\16\b\2hj\3\2\2\2id\3") - buf.write("\2\2\2jm\3\2\2\2ki\3\2\2\2kl\3\2\2\2lq\3\2\2\2mk\3\2\2") - buf.write("\2no\7\35\2\2op\7\33\2\2pr\5\16\b\2qn\3\2\2\2qr\3\2\2") - buf.write("\2r\u00a1\3\2\2\2st\7\36\2\2tu\5\20\t\2uv\7\33\2\2vw\5") - buf.write("\16\b\2w\u00a1\3\2\2\2xy\7\37\2\2yz\5\20\t\2z{\7\33\2") - buf.write("\2{|\5\16\b\2|\u00a1\3\2\2\2}~\7 \2\2~\177\5\22\n\2\177") - buf.write("\u0080\7!\2\2\u0080\u0083\5\22\n\2\u0081\u0082\7\"\2\2") - buf.write("\u0082\u0084\5\22\n\2\u0083\u0081\3\2\2\2\u0083\u0084") - buf.write("\3\2\2\2\u0084\u0085\3\2\2\2\u0085\u0086\7\33\2\2\u0086") - buf.write("\u0087\5\16\b\2\u0087\u00a1\3\2\2\2\u0088\u0089\7#\2\2") - buf.write("\u0089\u008a\7M\2\2\u008a\u0090\7$\2\2\u008b\u008c\5\f") - buf.write("\7\2\u008c\u008d\7\31\2\2\u008d\u008f\3\2\2\2\u008e\u008b") - buf.write("\3\2\2\2\u008f\u0092\3\2\2\2\u0090\u008e\3\2\2\2\u0090") - buf.write("\u0091\3\2\2\2\u0091\u0094\3\2\2\2\u0092\u0090\3\2\2\2") - buf.write("\u0093\u0095\5\f\7\2\u0094\u0093\3\2\2\2\u0094\u0095\3") - buf.write("\2\2\2\u0095\u0096\3\2\2\2\u0096\u0098\7%\2\2\u0097\u0099") - buf.write("\5\36\20\2\u0098\u0097\3\2\2\2\u0098\u0099\3\2\2\2\u0099") - buf.write("\u009e\3\2\2\2\u009a\u009b\7&\2\2\u009b\u009f\5\16\b\2") - buf.write("\u009c\u009d\7\'\2\2\u009d\u009f\7\3\2\2\u009e\u009a\3") - buf.write("\2\2\2\u009e\u009c\3\2\2\2\u009f\u00a1\3\2\2\2\u00a0`") - buf.write("\3\2\2\2\u00a0s\3\2\2\2\u00a0x\3\2\2\2\u00a0}\3\2\2\2") - buf.write("\u00a0\u0088\3\2\2\2\u00a1\13\3\2\2\2\u00a2\u00a3\5\36") - buf.write("\20\2\u00a3\u00a6\7M\2\2\u00a4\u00a5\7(\2\2\u00a5\u00a7") - buf.write("\5\20\t\2\u00a6\u00a4\3\2\2\2\u00a6\u00a7\3\2\2\2\u00a7") - buf.write("\r\3\2\2\2\u00a8\u00aa\7)\2\2\u00a9\u00ab\5\4\3\2\u00aa") - buf.write("\u00a9\3\2\2\2\u00ab\u00ac\3\2\2\2\u00ac\u00aa\3\2\2\2") - buf.write("\u00ac\u00ad\3\2\2\2\u00ad\u00ae\3\2\2\2\u00ae\u00af\7") - buf.write("*\2\2\u00af\17\3\2\2\2\u00b0\u00b1\b\t\1\2\u00b1\u00de") - buf.write("\5\32\16\2\u00b2\u00b3\7$\2\2\u00b3\u00b4\5\22\n\2\u00b4") - buf.write("\u00b5\7%\2\2\u00b5\u00de\3\2\2\2\u00b6\u00bc\7+\2\2\u00b7") - buf.write("\u00b8\5\20\t\2\u00b8\u00b9\7\31\2\2\u00b9\u00bb\3\2\2") - buf.write("\2\u00ba\u00b7\3\2\2\2\u00bb\u00be\3\2\2\2\u00bc\u00ba") - buf.write("\3\2\2\2\u00bc\u00bd\3\2\2\2\u00bd\u00c0\3\2\2\2\u00be") - buf.write("\u00bc\3\2\2\2\u00bf\u00c1\5\20\t\2\u00c0\u00bf\3\2\2") - buf.write("\2\u00c0\u00c1\3\2\2\2\u00c1\u00c2\3\2\2\2\u00c2\u00de") - buf.write("\7,\2\2\u00c3\u00c4\7+\2\2\u00c4\u00c6\5\20\t\2\u00c5") - buf.write("\u00c7\5\26\f\2\u00c6\u00c5\3\2\2\2\u00c7\u00c8\3\2\2") - buf.write("\2\u00c8\u00c6\3\2\2\2\u00c8\u00c9\3\2\2\2\u00c9\u00ca") - buf.write("\3\2\2\2\u00ca\u00cb\7,\2\2\u00cb\u00de\3\2\2\2\u00cc") - buf.write("\u00cd\t\4\2\2\u00cd\u00de\5\20\t\22\u00ce\u00cf\7;\2") - buf.write("\2\u00cf\u00de\5\20\t\7\u00d0\u00d5\7>\2\2\u00d1\u00d2") - buf.write("\7M\2\2\u00d2\u00d4\7\31\2\2\u00d3\u00d1\3\2\2\2\u00d4") - buf.write("\u00d7\3\2\2\2\u00d5\u00d3\3\2\2\2\u00d5\u00d6\3\2\2\2") - buf.write("\u00d6\u00d9\3\2\2\2\u00d7\u00d5\3\2\2\2\u00d8\u00da\7") - buf.write("M\2\2\u00d9\u00d8\3\2\2\2\u00d9\u00da\3\2\2\2\u00da\u00db") - buf.write("\3\2\2\2\u00db\u00dc\7?\2\2\u00dc\u00de\5\20\t\3\u00dd") - buf.write("\u00b0\3\2\2\2\u00dd\u00b2\3\2\2\2\u00dd\u00b6\3\2\2\2") - buf.write("\u00dd\u00c3\3\2\2\2\u00dd\u00cc\3\2\2\2\u00dd\u00ce\3") - buf.write("\2\2\2\u00dd\u00d0\3\2\2\2\u00de\u0138\3\2\2\2\u00df\u00e0") - buf.write("\f\23\2\2\u00e0\u00e1\7\13\2\2\u00e1\u0137\5\20\t\23\u00e2") - buf.write("\u00e3\f\21\2\2\u00e3\u00e4\t\5\2\2\u00e4\u0137\5\20\t") - buf.write("\22\u00e5\u00e6\f\20\2\2\u00e6\u00e7\t\6\2\2\u00e7\u0137") - buf.write("\5\20\t\21\u00e8\u00e9\f\17\2\2\u00e9\u00ea\t\7\2\2\u00ea") - buf.write("\u0137\5\20\t\20\u00eb\u00ec\f\16\2\2\u00ec\u00ed\7\23") - buf.write("\2\2\u00ed\u0137\5\20\t\17\u00ee\u00ef\f\r\2\2\u00ef\u00f0") - buf.write("\7\24\2\2\u00f0\u0137\5\20\t\16\u00f1\u00f2\f\f\2\2\u00f2") - buf.write("\u00f3\7\25\2\2\u00f3\u0137\5\20\t\r\u00f4\u00f5\f\13") - buf.write("\2\2\u00f5\u00f6\t\b\2\2\u00f6\u0137\5\20\t\f\u00f7\u00f8") - buf.write("\f\t\2\2\u00f8\u00f9\t\t\2\2\u00f9\u0137\5\20\t\n\u00fa") - buf.write("\u00fb\f\b\2\2\u00fb\u00fc\t\n\2\2\u00fc\u0137\5\20\t") - buf.write("\b\u00fd\u00fe\f\6\2\2\u00fe\u00ff\7<\2\2\u00ff\u0137") - buf.write("\5\20\t\6\u0100\u0101\f\5\2\2\u0101\u0102\7=\2\2\u0102") - buf.write("\u0137\5\20\t\5\u0103\u0104\f\4\2\2\u0104\u0105\7-\2\2") - buf.write("\u0105\u0106\5\20\t\2\u0106\u0107\7(\2\2\u0107\u0108\5") - buf.write("\20\t\4\u0108\u0137\3\2\2\2\u0109\u010a\f\30\2\2\u010a") - buf.write("\u010b\7+\2\2\u010b\u010c\5\22\n\2\u010c\u010d\7,\2\2") - buf.write("\u010d\u0137\3\2\2\2\u010e\u010f\f\27\2\2\u010f\u0111") - buf.write("\7+\2\2\u0110\u0112\5\20\t\2\u0111\u0110\3\2\2\2\u0111") - buf.write("\u0112\3\2\2\2\u0112\u0113\3\2\2\2\u0113\u0115\7(\2\2") - buf.write("\u0114\u0116\5\20\t\2\u0115\u0114\3\2\2\2\u0115\u0116") - buf.write("\3\2\2\2\u0116\u011b\3\2\2\2\u0117\u0119\7(\2\2\u0118") - buf.write("\u011a\5\20\t\2\u0119\u0118\3\2\2\2\u0119\u011a\3\2\2") - buf.write("\2\u011a\u011c\3\2\2\2\u011b\u0117\3\2\2\2\u011b\u011c") - buf.write("\3\2\2\2\u011c\u011d\3\2\2\2\u011d\u0137\7,\2\2\u011e") - buf.write("\u0120\f\26\2\2\u011f\u0121\7-\2\2\u0120\u011f\3\2\2\2") - buf.write("\u0120\u0121\3\2\2\2\u0121\u0122\3\2\2\2\u0122\u0123\7") - buf.write(".\2\2\u0123\u0137\7M\2\2\u0124\u0125\f\25\2\2\u0125\u012b") - buf.write("\7$\2\2\u0126\u0127\5\30\r\2\u0127\u0128\7\31\2\2\u0128") - buf.write("\u012a\3\2\2\2\u0129\u0126\3\2\2\2\u012a\u012d\3\2\2\2") - buf.write("\u012b\u0129\3\2\2\2\u012b\u012c\3\2\2\2\u012c\u012f\3") - buf.write("\2\2\2\u012d\u012b\3\2\2\2\u012e\u0130\5\30\r\2\u012f") - buf.write("\u012e\3\2\2\2\u012f\u0130\3\2\2\2\u0130\u0131\3\2\2\2") - buf.write("\u0131\u0137\7%\2\2\u0132\u0133\f\24\2\2\u0133\u0137\7") - buf.write("/\2\2\u0134\u0135\f\n\2\2\u0135\u0137\7\62\2\2\u0136\u00df") - buf.write("\3\2\2\2\u0136\u00e2\3\2\2\2\u0136\u00e5\3\2\2\2\u0136") - buf.write("\u00e8\3\2\2\2\u0136\u00eb\3\2\2\2\u0136\u00ee\3\2\2\2") - buf.write("\u0136\u00f1\3\2\2\2\u0136\u00f4\3\2\2\2\u0136\u00f7\3") - buf.write("\2\2\2\u0136\u00fa\3\2\2\2\u0136\u00fd\3\2\2\2\u0136\u0100") - buf.write("\3\2\2\2\u0136\u0103\3\2\2\2\u0136\u0109\3\2\2\2\u0136") - buf.write("\u010e\3\2\2\2\u0136\u011e\3\2\2\2\u0136\u0124\3\2\2\2") - buf.write("\u0136\u0132\3\2\2\2\u0136\u0134\3\2\2\2\u0137\u013a\3") - buf.write("\2\2\2\u0138\u0136\3\2\2\2\u0138\u0139\3\2\2\2\u0139\21") - buf.write("\3\2\2\2\u013a\u0138\3\2\2\2\u013b\u013c\5\20\t\2\u013c") - buf.write("\u013d\7\31\2\2\u013d\u013f\3\2\2\2\u013e\u013b\3\2\2") - buf.write("\2\u013f\u0142\3\2\2\2\u0140\u013e\3\2\2\2\u0140\u0141") - buf.write("\3\2\2\2\u0141\u0143\3\2\2\2\u0142\u0140\3\2\2\2\u0143") - buf.write("\u0144\5\20\t\2\u0144\23\3\2\2\2\u0145\u0146\5\22\n\2") - buf.write("\u0146\u0147\7\2\2\3\u0147\25\3\2\2\2\u0148\u0149\7 \2") - buf.write("\2\u0149\u014a\5\22\n\2\u014a\u014b\7!\2\2\u014b\u014e") - buf.write("\5\22\n\2\u014c\u014d\7\"\2\2\u014d\u014f\5\22\n\2\u014e") - buf.write("\u014c\3\2\2\2\u014e\u014f\3\2\2\2\u014f\u0153\3\2\2\2") - buf.write("\u0150\u0151\7\32\2\2\u0151\u0153\5\20\t\2\u0152\u0148") - buf.write("\3\2\2\2\u0152\u0150\3\2\2\2\u0153\27\3\2\2\2\u0154\u0155") - buf.write("\7M\2\2\u0155\u0157\7\n\2\2\u0156\u0154\3\2\2\2\u0156") - buf.write("\u0157\3\2\2\2\u0157\u0158\3\2\2\2\u0158\u0159\5\20\t") - buf.write("\2\u0159\31\3\2\2\2\u015a\u0162\7I\2\2\u015b\u0162\7J") - buf.write("\2\2\u015c\u0162\t\13\2\2\u015d\u0162\7K\2\2\u015e\u0162") - buf.write("\7L\2\2\u015f\u0162\7B\2\2\u0160\u0162\7M\2\2\u0161\u015a") - buf.write("\3\2\2\2\u0161\u015b\3\2\2\2\u0161\u015c\3\2\2\2\u0161") - buf.write("\u015d\3\2\2\2\u0161\u015e\3\2\2\2\u0161\u015f\3\2\2\2") - buf.write("\u0161\u0160\3\2\2\2\u0162\33\3\2\2\2\u0163\u0164\7M\2") - buf.write("\2\u0164\u0166\7\31\2\2\u0165\u0163\3\2\2\2\u0166\u0169") - buf.write("\3\2\2\2\u0167\u0165\3\2\2\2\u0167\u0168\3\2\2\2\u0168") - buf.write("\u016a\3\2\2\2\u0169\u0167\3\2\2\2\u016a\u016b\7M\2\2") - buf.write("\u016b\35\3\2\2\2\u016c\u016d\b\20\1\2\u016d\u0179\t\f") - buf.write("\2\2\u016e\u016f\7$\2\2\u016f\u0170\5\36\20\2\u0170\u0171") - buf.write("\7%\2\2\u0171\u0179\3\2\2\2\u0172\u0173\7+\2\2\u0173\u0174") - buf.write("\5\36\20\2\u0174\u0175\7,\2\2\u0175\u0179\3\2\2\2\u0176") - buf.write("\u0177\7?\2\2\u0177\u0179\5\36\20\3\u0178\u016c\3\2\2") - buf.write("\2\u0178\u016e\3\2\2\2\u0178\u0172\3\2\2\2\u0178\u0176") - buf.write("\3\2\2\2\u0179\u0184\3\2\2\2\u017a\u017b\f\5\2\2\u017b") - buf.write("\u017c\7\f\2\2\u017c\u0183\5\36\20\5\u017d\u017e\f\4\2") - buf.write("\2\u017e\u017f\7?\2\2\u017f\u0183\5\36\20\4\u0180\u0181") - buf.write("\f\6\2\2\u0181\u0183\7-\2\2\u0182\u017a\3\2\2\2\u0182") - buf.write("\u017d\3\2\2\2\u0182\u0180\3\2\2\2\u0183\u0186\3\2\2\2") - buf.write("\u0184\u0182\3\2\2\2\u0184\u0185\3\2\2\2\u0185\37\3\2") - buf.write("\2\2\u0186\u0184\3\2\2\2-#,\66;AHTV]kq\u0083\u0090\u0094") - buf.write("\u0098\u009e\u00a0\u00a6\u00ac\u00bc\u00c0\u00c8\u00d5") - buf.write("\u00d9\u00dd\u0111\u0115\u0119\u011b\u0120\u012b\u012f") - buf.write("\u0136\u0138\u0140\u014e\u0152\u0156\u0161\u0167\u0178") - buf.write("\u0182\u0184") + buf.write("\t\3\t\3\t\3\t\3\t\5\t\u0115\n\t\3\t\3\t\5\t\u0119\n\t") + buf.write("\3\t\3\t\5\t\u011d\n\t\5\t\u011f\n\t\3\t\3\t\3\t\5\t\u0124") + buf.write("\n\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\7\t\u012d\n\t\f\t\16") + buf.write("\t\u0130\13\t\3\t\5\t\u0133\n\t\3\t\3\t\3\t\3\t\3\t\7") + buf.write("\t\u013a\n\t\f\t\16\t\u013d\13\t\3\n\3\n\3\n\7\n\u0142") + buf.write("\n\n\f\n\16\n\u0145\13\n\3\n\3\n\3\13\3\13\3\13\3\f\3") + buf.write("\f\3\f\3\f\3\f\3\f\5\f\u0152\n\f\3\f\3\f\5\f\u0156\n\f") + buf.write("\3\r\3\r\5\r\u015a\n\r\3\r\3\r\3\16\3\16\3\16\3\16\3\16") + buf.write("\3\16\3\16\5\16\u0165\n\16\3\17\3\17\7\17\u0169\n\17\f") + buf.write("\17\16\17\u016c\13\17\3\17\3\17\3\20\3\20\3\20\3\20\3") + buf.write("\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\5\20\u017c\n\20") + buf.write("\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\7\20\u0186\n") + buf.write("\20\f\20\16\20\u0189\13\20\3\20\2\4\20\36\21\2\4\6\b\n") + buf.write("\f\16\20\22\24\26\30\32\34\36\2\r\3\2\13\26\3\2\27\30") + buf.write("\4\2\17\20\61\61\3\2\f\16\3\2\17\20\3\2\21\22\3\2\62\63") + buf.write("\3\2\64\65\3\2\66;\3\2AB\3\2DI\2\u01d0\2#\3\2\2\2\4,\3") + buf.write("\2\2\2\6V\3\2\2\2\bX\3\2\2\2\n\u00a0\3\2\2\2\f\u00a2\3") + buf.write("\2\2\2\16\u00a8\3\2\2\2\20\u00dd\3\2\2\2\22\u0143\3\2") + buf.write("\2\2\24\u0148\3\2\2\2\26\u0155\3\2\2\2\30\u0159\3\2\2") + buf.write("\2\32\u0164\3\2\2\2\34\u016a\3\2\2\2\36\u017b\3\2\2\2") + buf.write(" \"\5\4\3\2! \3\2\2\2\"%\3\2\2\2#!\3\2\2\2#$\3\2\2\2$") + buf.write("&\3\2\2\2%#\3\2\2\2&\'\7\2\2\3\'\3\3\2\2\2()\5\6\4\2)") + buf.write("*\7\3\2\2*-\3\2\2\2+-\5\n\6\2,(\3\2\2\2,+\3\2\2\2-\5\3") + buf.write("\2\2\2./\7\4\2\2/\66\7N\2\2\60\61\7\5\2\2\61\67\5\34\17") + buf.write("\2\62\63\7\6\2\2\63\67\5\34\17\2\64\65\7\7\2\2\65\67\7") + buf.write("N\2\2\66\60\3\2\2\2\66\62\3\2\2\2\66\64\3\2\2\2\66\67") + buf.write("\3\2\2\2\67W\3\2\2\28W\7\b\2\29;\7\t\2\2:<\5\22\n\2;:") + buf.write("\3\2\2\2;<\3\2\2\2\5\36\20\2>A\7N\2\2?@\7") + buf.write("\n\2\2@B\5\22\n\2A?\3\2\2\2AB\3\2\2\2BW\3\2\2\2CD\5\b") + buf.write("\5\2DE\7\n\2\2EG\3\2\2\2FC\3\2\2\2GJ\3\2\2\2HF\3\2\2\2") + buf.write("HI\3\2\2\2IK\3\2\2\2JH\3\2\2\2KW\5\22\n\2LM\5\20\t\2M") + buf.write("N\t\2\2\2NO\7\n\2\2OP\5\20\t\2PW\3\2\2\2QW\t\3\2\2RT\7") + buf.write("\31\2\2SU\5\22\n\2TS\3\2\2\2TU\3\2\2\2UW\3\2\2\2V.\3\2") + buf.write("\2\2V8\3\2\2\2V9\3\2\2\2V=\3\2\2\2VH\3\2\2\2VL\3\2\2\2") + buf.write("VQ\3\2\2\2VR\3\2\2\2W\7\3\2\2\2X]\5\20\t\2YZ\7\32\2\2") + buf.write("Z\\\5\20\t\2[Y\3\2\2\2\\_\3\2\2\2][\3\2\2\2]^\3\2\2\2") + buf.write("^\t\3\2\2\2_]\3\2\2\2`a\7\33\2\2ab\5\20\t\2bc\7\34\2\2") + buf.write("ck\5\16\b\2de\7\35\2\2ef\5\20\t\2fg\7\34\2\2gh\5\16\b") + buf.write("\2hj\3\2\2\2id\3\2\2\2jm\3\2\2\2ki\3\2\2\2kl\3\2\2\2l") + buf.write("q\3\2\2\2mk\3\2\2\2no\7\36\2\2op\7\34\2\2pr\5\16\b\2q") + buf.write("n\3\2\2\2qr\3\2\2\2r\u00a1\3\2\2\2st\7\37\2\2tu\5\20\t") + buf.write("\2uv\7\34\2\2vw\5\16\b\2w\u00a1\3\2\2\2xy\7 \2\2yz\5\20") + buf.write("\t\2z{\7\34\2\2{|\5\16\b\2|\u00a1\3\2\2\2}~\7!\2\2~\177") + buf.write("\5\22\n\2\177\u0080\7\"\2\2\u0080\u0083\5\22\n\2\u0081") + buf.write("\u0082\7#\2\2\u0082\u0084\5\22\n\2\u0083\u0081\3\2\2\2") + buf.write("\u0083\u0084\3\2\2\2\u0084\u0085\3\2\2\2\u0085\u0086\7") + buf.write("\34\2\2\u0086\u0087\5\16\b\2\u0087\u00a1\3\2\2\2\u0088") + buf.write("\u0089\7$\2\2\u0089\u008a\7N\2\2\u008a\u0090\7%\2\2\u008b") + buf.write("\u008c\5\f\7\2\u008c\u008d\7\32\2\2\u008d\u008f\3\2\2") + buf.write("\2\u008e\u008b\3\2\2\2\u008f\u0092\3\2\2\2\u0090\u008e") + buf.write("\3\2\2\2\u0090\u0091\3\2\2\2\u0091\u0094\3\2\2\2\u0092") + buf.write("\u0090\3\2\2\2\u0093\u0095\5\f\7\2\u0094\u0093\3\2\2\2") + buf.write("\u0094\u0095\3\2\2\2\u0095\u0096\3\2\2\2\u0096\u0098\7") + buf.write("&\2\2\u0097\u0099\5\36\20\2\u0098\u0097\3\2\2\2\u0098") + buf.write("\u0099\3\2\2\2\u0099\u009e\3\2\2\2\u009a\u009b\7\'\2\2") + buf.write("\u009b\u009f\5\16\b\2\u009c\u009d\7(\2\2\u009d\u009f\7") + buf.write("\3\2\2\u009e\u009a\3\2\2\2\u009e\u009c\3\2\2\2\u009f\u00a1") + buf.write("\3\2\2\2\u00a0`\3\2\2\2\u00a0s\3\2\2\2\u00a0x\3\2\2\2") + buf.write("\u00a0}\3\2\2\2\u00a0\u0088\3\2\2\2\u00a1\13\3\2\2\2\u00a2") + buf.write("\u00a3\5\36\20\2\u00a3\u00a6\7N\2\2\u00a4\u00a5\7)\2\2") + buf.write("\u00a5\u00a7\5\20\t\2\u00a6\u00a4\3\2\2\2\u00a6\u00a7") + buf.write("\3\2\2\2\u00a7\r\3\2\2\2\u00a8\u00aa\7*\2\2\u00a9\u00ab") + buf.write("\5\4\3\2\u00aa\u00a9\3\2\2\2\u00ab\u00ac\3\2\2\2\u00ac") + buf.write("\u00aa\3\2\2\2\u00ac\u00ad\3\2\2\2\u00ad\u00ae\3\2\2\2") + buf.write("\u00ae\u00af\7+\2\2\u00af\17\3\2\2\2\u00b0\u00b1\b\t\1") + buf.write("\2\u00b1\u00de\5\32\16\2\u00b2\u00b3\7%\2\2\u00b3\u00b4") + buf.write("\5\22\n\2\u00b4\u00b5\7&\2\2\u00b5\u00de\3\2\2\2\u00b6") + buf.write("\u00bc\7,\2\2\u00b7\u00b8\5\20\t\2\u00b8\u00b9\7\32\2") + buf.write("\2\u00b9\u00bb\3\2\2\2\u00ba\u00b7\3\2\2\2\u00bb\u00be") + buf.write("\3\2\2\2\u00bc\u00ba\3\2\2\2\u00bc\u00bd\3\2\2\2\u00bd") + buf.write("\u00c0\3\2\2\2\u00be\u00bc\3\2\2\2\u00bf\u00c1\5\20\t") + buf.write("\2\u00c0\u00bf\3\2\2\2\u00c0\u00c1\3\2\2\2\u00c1\u00c2") + buf.write("\3\2\2\2\u00c2\u00de\7-\2\2\u00c3\u00c4\7,\2\2\u00c4\u00c6") + buf.write("\5\20\t\2\u00c5\u00c7\5\26\f\2\u00c6\u00c5\3\2\2\2\u00c7") + buf.write("\u00c8\3\2\2\2\u00c8\u00c6\3\2\2\2\u00c8\u00c9\3\2\2\2") + buf.write("\u00c9\u00ca\3\2\2\2\u00ca\u00cb\7-\2\2\u00cb\u00de\3") + buf.write("\2\2\2\u00cc\u00cd\t\4\2\2\u00cd\u00de\5\20\t\23\u00ce") + buf.write("\u00cf\7<\2\2\u00cf\u00de\5\20\t\b\u00d0\u00d5\7?\2\2") + buf.write("\u00d1\u00d2\7N\2\2\u00d2\u00d4\7\32\2\2\u00d3\u00d1\3") + buf.write("\2\2\2\u00d4\u00d7\3\2\2\2\u00d5\u00d3\3\2\2\2\u00d5\u00d6") + buf.write("\3\2\2\2\u00d6\u00d9\3\2\2\2\u00d7\u00d5\3\2\2\2\u00d8") + buf.write("\u00da\7N\2\2\u00d9\u00d8\3\2\2\2\u00d9\u00da\3\2\2\2") + buf.write("\u00da\u00db\3\2\2\2\u00db\u00dc\7@\2\2\u00dc\u00de\5") + buf.write("\20\t\3\u00dd\u00b0\3\2\2\2\u00dd\u00b2\3\2\2\2\u00dd") + buf.write("\u00b6\3\2\2\2\u00dd\u00c3\3\2\2\2\u00dd\u00cc\3\2\2\2") + buf.write("\u00dd\u00ce\3\2\2\2\u00dd\u00d0\3\2\2\2\u00de\u013b\3") + buf.write("\2\2\2\u00df\u00e0\f\24\2\2\u00e0\u00e1\7\13\2\2\u00e1") + buf.write("\u013a\5\20\t\24\u00e2\u00e3\f\22\2\2\u00e3\u00e4\t\5") + buf.write("\2\2\u00e4\u013a\5\20\t\23\u00e5\u00e6\f\21\2\2\u00e6") + buf.write("\u00e7\t\6\2\2\u00e7\u013a\5\20\t\22\u00e8\u00e9\f\20") + buf.write("\2\2\u00e9\u00ea\t\7\2\2\u00ea\u013a\5\20\t\21\u00eb\u00ec") + buf.write("\f\17\2\2\u00ec\u00ed\7\23\2\2\u00ed\u013a\5\20\t\20\u00ee") + buf.write("\u00ef\f\16\2\2\u00ef\u00f0\7\24\2\2\u00f0\u013a\5\20") + buf.write("\t\17\u00f1\u00f2\f\r\2\2\u00f2\u00f3\7\25\2\2\u00f3\u013a") + buf.write("\5\20\t\16\u00f4\u00f5\f\f\2\2\u00f5\u00f6\t\b\2\2\u00f6") + buf.write("\u013a\5\20\t\r\u00f7\u00f8\f\n\2\2\u00f8\u00f9\t\t\2") + buf.write("\2\u00f9\u013a\5\20\t\13\u00fa\u00fb\f\t\2\2\u00fb\u00fc") + buf.write("\t\n\2\2\u00fc\u013a\5\20\t\t\u00fd\u00fe\f\7\2\2\u00fe") + buf.write("\u00ff\7=\2\2\u00ff\u013a\5\20\t\7\u0100\u0101\f\6\2\2") + buf.write("\u0101\u0102\7>\2\2\u0102\u013a\5\20\t\6\u0103\u0104\f") + buf.write("\5\2\2\u0104\u0105\7\26\2\2\u0105\u013a\5\20\t\5\u0106") + buf.write("\u0107\f\4\2\2\u0107\u0108\7.\2\2\u0108\u0109\5\20\t\2") + buf.write("\u0109\u010a\7)\2\2\u010a\u010b\5\20\t\4\u010b\u013a\3") + buf.write("\2\2\2\u010c\u010d\f\31\2\2\u010d\u010e\7,\2\2\u010e\u010f") + buf.write("\5\22\n\2\u010f\u0110\7-\2\2\u0110\u013a\3\2\2\2\u0111") + buf.write("\u0112\f\30\2\2\u0112\u0114\7,\2\2\u0113\u0115\5\20\t") + buf.write("\2\u0114\u0113\3\2\2\2\u0114\u0115\3\2\2\2\u0115\u0116") + buf.write("\3\2\2\2\u0116\u0118\7)\2\2\u0117\u0119\5\20\t\2\u0118") + buf.write("\u0117\3\2\2\2\u0118\u0119\3\2\2\2\u0119\u011e\3\2\2\2") + buf.write("\u011a\u011c\7)\2\2\u011b\u011d\5\20\t\2\u011c\u011b\3") + buf.write("\2\2\2\u011c\u011d\3\2\2\2\u011d\u011f\3\2\2\2\u011e\u011a") + buf.write("\3\2\2\2\u011e\u011f\3\2\2\2\u011f\u0120\3\2\2\2\u0120") + buf.write("\u013a\7-\2\2\u0121\u0123\f\27\2\2\u0122\u0124\7.\2\2") + buf.write("\u0123\u0122\3\2\2\2\u0123\u0124\3\2\2\2\u0124\u0125\3") + buf.write("\2\2\2\u0125\u0126\7/\2\2\u0126\u013a\7N\2\2\u0127\u0128") + buf.write("\f\26\2\2\u0128\u012e\7%\2\2\u0129\u012a\5\30\r\2\u012a") + buf.write("\u012b\7\32\2\2\u012b\u012d\3\2\2\2\u012c\u0129\3\2\2") + buf.write("\2\u012d\u0130\3\2\2\2\u012e\u012c\3\2\2\2\u012e\u012f") + buf.write("\3\2\2\2\u012f\u0132\3\2\2\2\u0130\u012e\3\2\2\2\u0131") + buf.write("\u0133\5\30\r\2\u0132\u0131\3\2\2\2\u0132\u0133\3\2\2") + buf.write("\2\u0133\u0134\3\2\2\2\u0134\u013a\7&\2\2\u0135\u0136") + buf.write("\f\25\2\2\u0136\u013a\7\60\2\2\u0137\u0138\f\13\2\2\u0138") + buf.write("\u013a\7\63\2\2\u0139\u00df\3\2\2\2\u0139\u00e2\3\2\2") + buf.write("\2\u0139\u00e5\3\2\2\2\u0139\u00e8\3\2\2\2\u0139\u00eb") + buf.write("\3\2\2\2\u0139\u00ee\3\2\2\2\u0139\u00f1\3\2\2\2\u0139") + buf.write("\u00f4\3\2\2\2\u0139\u00f7\3\2\2\2\u0139\u00fa\3\2\2\2") + buf.write("\u0139\u00fd\3\2\2\2\u0139\u0100\3\2\2\2\u0139\u0103\3") + buf.write("\2\2\2\u0139\u0106\3\2\2\2\u0139\u010c\3\2\2\2\u0139\u0111") + buf.write("\3\2\2\2\u0139\u0121\3\2\2\2\u0139\u0127\3\2\2\2\u0139") + buf.write("\u0135\3\2\2\2\u0139\u0137\3\2\2\2\u013a\u013d\3\2\2\2") + buf.write("\u013b\u0139\3\2\2\2\u013b\u013c\3\2\2\2\u013c\21\3\2") + buf.write("\2\2\u013d\u013b\3\2\2\2\u013e\u013f\5\20\t\2\u013f\u0140") + buf.write("\7\32\2\2\u0140\u0142\3\2\2\2\u0141\u013e\3\2\2\2\u0142") + buf.write("\u0145\3\2\2\2\u0143\u0141\3\2\2\2\u0143\u0144\3\2\2\2") + buf.write("\u0144\u0146\3\2\2\2\u0145\u0143\3\2\2\2\u0146\u0147\5") + buf.write("\20\t\2\u0147\23\3\2\2\2\u0148\u0149\5\22\n\2\u0149\u014a") + buf.write("\7\2\2\3\u014a\25\3\2\2\2\u014b\u014c\7!\2\2\u014c\u014d") + buf.write("\5\22\n\2\u014d\u014e\7\"\2\2\u014e\u0151\5\22\n\2\u014f") + buf.write("\u0150\7#\2\2\u0150\u0152\5\22\n\2\u0151\u014f\3\2\2\2") + buf.write("\u0151\u0152\3\2\2\2\u0152\u0156\3\2\2\2\u0153\u0154\7") + buf.write("\33\2\2\u0154\u0156\5\20\t\2\u0155\u014b\3\2\2\2\u0155") + buf.write("\u0153\3\2\2\2\u0156\27\3\2\2\2\u0157\u0158\7N\2\2\u0158") + buf.write("\u015a\7\n\2\2\u0159\u0157\3\2\2\2\u0159\u015a\3\2\2\2") + buf.write("\u015a\u015b\3\2\2\2\u015b\u015c\5\20\t\2\u015c\31\3\2") + buf.write("\2\2\u015d\u0165\7J\2\2\u015e\u0165\7K\2\2\u015f\u0165") + buf.write("\t\13\2\2\u0160\u0165\7L\2\2\u0161\u0165\7M\2\2\u0162") + buf.write("\u0165\7C\2\2\u0163\u0165\7N\2\2\u0164\u015d\3\2\2\2\u0164") + buf.write("\u015e\3\2\2\2\u0164\u015f\3\2\2\2\u0164\u0160\3\2\2\2") + buf.write("\u0164\u0161\3\2\2\2\u0164\u0162\3\2\2\2\u0164\u0163\3") + buf.write("\2\2\2\u0165\33\3\2\2\2\u0166\u0167\7N\2\2\u0167\u0169") + buf.write("\7\32\2\2\u0168\u0166\3\2\2\2\u0169\u016c\3\2\2\2\u016a") + buf.write("\u0168\3\2\2\2\u016a\u016b\3\2\2\2\u016b\u016d\3\2\2\2") + buf.write("\u016c\u016a\3\2\2\2\u016d\u016e\7N\2\2\u016e\35\3\2\2") + buf.write("\2\u016f\u0170\b\20\1\2\u0170\u017c\t\f\2\2\u0171\u0172") + buf.write("\7%\2\2\u0172\u0173\5\36\20\2\u0173\u0174\7&\2\2\u0174") + buf.write("\u017c\3\2\2\2\u0175\u0176\7,\2\2\u0176\u0177\5\36\20") + buf.write("\2\u0177\u0178\7-\2\2\u0178\u017c\3\2\2\2\u0179\u017a") + buf.write("\7@\2\2\u017a\u017c\5\36\20\3\u017b\u016f\3\2\2\2\u017b") + buf.write("\u0171\3\2\2\2\u017b\u0175\3\2\2\2\u017b\u0179\3\2\2\2") + buf.write("\u017c\u0187\3\2\2\2\u017d\u017e\f\5\2\2\u017e\u017f\7") + buf.write("\f\2\2\u017f\u0186\5\36\20\5\u0180\u0181\f\4\2\2\u0181") + buf.write("\u0182\7@\2\2\u0182\u0186\5\36\20\4\u0183\u0184\f\6\2") + buf.write("\2\u0184\u0186\7.\2\2\u0185\u017d\3\2\2\2\u0185\u0180") + buf.write("\3\2\2\2\u0185\u0183\3\2\2\2\u0186\u0189\3\2\2\2\u0187") + buf.write("\u0185\3\2\2\2\u0187\u0188\3\2\2\2\u0188\37\3\2\2\2\u0189") + buf.write("\u0187\3\2\2\2-#,\66;AHTV]kq\u0083\u0090\u0094\u0098\u009e") + buf.write("\u00a0\u00a6\u00ac\u00bc\u00c0\u00c8\u00d5\u00d9\u00dd") + buf.write("\u0114\u0118\u011c\u011e\u0123\u012e\u0132\u0139\u013b") + buf.write("\u0143\u0151\u0155\u0159\u0164\u016a\u017b\u0185\u0187") return buf.getvalue() @@ -216,14 +217,14 @@ class PyxellParser ( Parser ): literalNames = [ "", "';'", "'use'", "'only'", "'hiding'", "'as'", "'skip'", "'print'", "'='", "'^'", "'*'", "'/'", "'%'", "'+'", "'-'", "'<<'", "'>>'", "'&'", "'$'", - "'|'", "'break'", "'continue'", "'return'", "','", - "'if'", "'do'", "'elif'", "'else'", "'while'", "'until'", - "'for'", "'in'", "'step'", "'func'", "'('", "')'", - "'def'", "'extern'", "':'", "'{'", "'}'", "'['", "']'", - "'?'", "'.'", "'!'", "'~'", "'..'", "'...'", "'is'", - "'isn't'", "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", - "'not'", "'and'", "'or'", "'lambda'", "'->'", "'true'", - "'false'", "'null'", "'Void'", "'Int'", "'Float'", + "'|'", "'??'", "'break'", "'continue'", "'return'", + "','", "'if'", "'do'", "'elif'", "'else'", "'while'", + "'until'", "'for'", "'in'", "'step'", "'func'", "'('", + "')'", "'def'", "'extern'", "':'", "'{'", "'}'", "'['", + "']'", "'?'", "'.'", "'!'", "'~'", "'..'", "'...'", + "'is'", "'isn't'", "'=='", "'!='", "'<'", "'<='", "'>'", + "'>='", "'not'", "'and'", "'or'", "'lambda'", "'->'", + "'true'", "'false'", "'null'", "'Void'", "'Int'", "'Float'", "'Bool'", "'Char'", "'String'" ] symbolicNames = [ "", "", "", "", @@ -243,8 +244,9 @@ class PyxellParser ( Parser ): "", "", "", "", "", "", "", "", "", "", "", "", - "", "", "", "INT", "FLOAT", - "CHAR", "STRING", "ID", "COMMENT", "WS", "ERR" ] + "", "", "", "", + "INT", "FLOAT", "CHAR", "STRING", "ID", "COMMENT", + "WS", "ERR" ] RULE_program = 0 RULE_stmt = 1 @@ -337,14 +339,15 @@ class PyxellParser ( Parser ): T__67=68 T__68=69 T__69=70 - INT=71 - FLOAT=72 - CHAR=73 - STRING=74 - ID=75 - COMMENT=76 - WS=77 - ERR=78 + T__70=71 + INT=72 + FLOAT=73 + CHAR=74 + STRING=75 + ID=76 + COMMENT=77 + WS=78 + ERR=79 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -393,7 +396,7 @@ def program(self): self.state = 33 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__40) | (1 << PyxellParser.T__45) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.T__66 - 64)) | (1 << (PyxellParser.T__67 - 64)) | (1 << (PyxellParser.T__68 - 64)) | (1 << (PyxellParser.T__69 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0): + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__46) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.T__66 - 64)) | (1 << (PyxellParser.T__67 - 64)) | (1 << (PyxellParser.T__68 - 64)) | (1 << (PyxellParser.T__69 - 64)) | (1 << (PyxellParser.T__70 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0): self.state = 30 self.stmt() self.state = 35 @@ -445,14 +448,14 @@ def stmt(self): self.state = 42 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__1, PyxellParser.T__5, PyxellParser.T__6, PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__19, PyxellParser.T__20, PyxellParser.T__21, PyxellParser.T__33, PyxellParser.T__40, PyxellParser.T__45, PyxellParser.T__56, PyxellParser.T__59, PyxellParser.T__60, PyxellParser.T__61, PyxellParser.T__62, PyxellParser.T__63, PyxellParser.T__64, PyxellParser.T__65, PyxellParser.T__66, PyxellParser.T__67, PyxellParser.T__68, PyxellParser.T__69, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: + if token in [PyxellParser.T__1, PyxellParser.T__5, PyxellParser.T__6, PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__20, PyxellParser.T__21, PyxellParser.T__22, PyxellParser.T__34, PyxellParser.T__41, PyxellParser.T__46, PyxellParser.T__57, PyxellParser.T__60, PyxellParser.T__61, PyxellParser.T__62, PyxellParser.T__63, PyxellParser.T__64, PyxellParser.T__65, PyxellParser.T__66, PyxellParser.T__67, PyxellParser.T__68, PyxellParser.T__69, PyxellParser.T__70, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: self.enterOuterAlt(localctx, 1) self.state = 38 self.simple_stmt() self.state = 39 self.match(PyxellParser.T__0) pass - elif token in [PyxellParser.T__23, PyxellParser.T__27, PyxellParser.T__28, PyxellParser.T__29, PyxellParser.T__32]: + elif token in [PyxellParser.T__24, PyxellParser.T__28, PyxellParser.T__29, PyxellParser.T__30, PyxellParser.T__33]: self.enterOuterAlt(localctx, 2) self.state = 41 self.compound_stmt() @@ -699,7 +702,7 @@ def simple_stmt(self): self.state = 57 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__34 - 13)) | (1 << (PyxellParser.T__41 - 13)) | (1 << (PyxellParser.T__46 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): self.state = 56 self.tuple_expr() @@ -753,7 +756,7 @@ def simple_stmt(self): self.state = 75 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__11) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__14) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__17) | (1 << PyxellParser.T__18))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__11) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__14) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__17) | (1 << PyxellParser.T__18) | (1 << PyxellParser.T__19))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -770,7 +773,7 @@ def simple_stmt(self): self.state = 79 localctx.s = self._input.LT(1) _la = self._input.LA(1) - if not(_la==PyxellParser.T__19 or _la==PyxellParser.T__20): + if not(_la==PyxellParser.T__20 or _la==PyxellParser.T__21): localctx.s = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -781,11 +784,11 @@ def simple_stmt(self): localctx = PyxellParser.StmtReturnContext(self, localctx) self.enterOuterAlt(localctx, 8) self.state = 80 - self.match(PyxellParser.T__21) + self.match(PyxellParser.T__22) self.state = 82 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__34 - 13)) | (1 << (PyxellParser.T__41 - 13)) | (1 << (PyxellParser.T__46 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): self.state = 81 self.tuple_expr() @@ -839,9 +842,9 @@ def lvalue(self): self.state = 91 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==PyxellParser.T__22: + while _la==PyxellParser.T__23: self.state = 87 - self.match(PyxellParser.T__22) + self.match(PyxellParser.T__23) self.state = 88 self.expr(0) self.state = 93 @@ -1001,27 +1004,27 @@ def compound_stmt(self): self.state = 158 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__23]: + if token in [PyxellParser.T__24]: localctx = PyxellParser.StmtIfContext(self, localctx) self.enterOuterAlt(localctx, 1) self.state = 94 - self.match(PyxellParser.T__23) + self.match(PyxellParser.T__24) self.state = 95 self.expr(0) self.state = 96 - self.match(PyxellParser.T__24) + self.match(PyxellParser.T__25) self.state = 97 self.block() self.state = 105 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==PyxellParser.T__25: + while _la==PyxellParser.T__26: self.state = 98 - self.match(PyxellParser.T__25) + self.match(PyxellParser.T__26) self.state = 99 self.expr(0) self.state = 100 - self.match(PyxellParser.T__24) + self.match(PyxellParser.T__25) self.state = 101 self.block() self.state = 107 @@ -1031,75 +1034,75 @@ def compound_stmt(self): self.state = 111 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__26: + if _la==PyxellParser.T__27: self.state = 108 - self.match(PyxellParser.T__26) + self.match(PyxellParser.T__27) self.state = 109 - self.match(PyxellParser.T__24) + self.match(PyxellParser.T__25) self.state = 110 self.block() pass - elif token in [PyxellParser.T__27]: + elif token in [PyxellParser.T__28]: localctx = PyxellParser.StmtWhileContext(self, localctx) self.enterOuterAlt(localctx, 2) self.state = 113 - self.match(PyxellParser.T__27) + self.match(PyxellParser.T__28) self.state = 114 self.expr(0) self.state = 115 - self.match(PyxellParser.T__24) + self.match(PyxellParser.T__25) self.state = 116 self.block() pass - elif token in [PyxellParser.T__28]: + elif token in [PyxellParser.T__29]: localctx = PyxellParser.StmtUntilContext(self, localctx) self.enterOuterAlt(localctx, 3) self.state = 118 - self.match(PyxellParser.T__28) + self.match(PyxellParser.T__29) self.state = 119 self.expr(0) self.state = 120 - self.match(PyxellParser.T__24) + self.match(PyxellParser.T__25) self.state = 121 self.block() pass - elif token in [PyxellParser.T__29]: + elif token in [PyxellParser.T__30]: localctx = PyxellParser.StmtForContext(self, localctx) self.enterOuterAlt(localctx, 4) self.state = 123 - self.match(PyxellParser.T__29) + self.match(PyxellParser.T__30) self.state = 124 self.tuple_expr() self.state = 125 - self.match(PyxellParser.T__30) + self.match(PyxellParser.T__31) self.state = 126 self.tuple_expr() self.state = 129 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__31: + if _la==PyxellParser.T__32: self.state = 127 - self.match(PyxellParser.T__31) + self.match(PyxellParser.T__32) self.state = 128 self.tuple_expr() self.state = 131 - self.match(PyxellParser.T__24) + self.match(PyxellParser.T__25) self.state = 132 self.block() pass - elif token in [PyxellParser.T__32]: + elif token in [PyxellParser.T__33]: localctx = PyxellParser.StmtFuncContext(self, localctx) self.enterOuterAlt(localctx, 5) self.state = 134 - self.match(PyxellParser.T__32) + self.match(PyxellParser.T__33) self.state = 135 self.match(PyxellParser.ID) self.state = 136 - self.match(PyxellParser.T__33) + self.match(PyxellParser.T__34) self.state = 142 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,12,self._ctx) @@ -1108,7 +1111,7 @@ def compound_stmt(self): self.state = 137 self.func_arg() self.state = 138 - self.match(PyxellParser.T__22) + self.match(PyxellParser.T__23) self.state = 144 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,12,self._ctx) @@ -1116,17 +1119,17 @@ def compound_stmt(self): self.state = 146 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 34)) & ~0x3f) == 0 and ((1 << (_la - 34)) & ((1 << (PyxellParser.T__33 - 34)) | (1 << (PyxellParser.T__40 - 34)) | (1 << (PyxellParser.T__60 - 34)) | (1 << (PyxellParser.T__64 - 34)) | (1 << (PyxellParser.T__65 - 34)) | (1 << (PyxellParser.T__66 - 34)) | (1 << (PyxellParser.T__67 - 34)) | (1 << (PyxellParser.T__68 - 34)) | (1 << (PyxellParser.T__69 - 34)))) != 0): + if ((((_la - 35)) & ~0x3f) == 0 and ((1 << (_la - 35)) & ((1 << (PyxellParser.T__34 - 35)) | (1 << (PyxellParser.T__41 - 35)) | (1 << (PyxellParser.T__61 - 35)) | (1 << (PyxellParser.T__65 - 35)) | (1 << (PyxellParser.T__66 - 35)) | (1 << (PyxellParser.T__67 - 35)) | (1 << (PyxellParser.T__68 - 35)) | (1 << (PyxellParser.T__69 - 35)) | (1 << (PyxellParser.T__70 - 35)))) != 0): self.state = 145 self.func_arg() self.state = 148 - self.match(PyxellParser.T__34) + self.match(PyxellParser.T__35) self.state = 150 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 34)) & ~0x3f) == 0 and ((1 << (_la - 34)) & ((1 << (PyxellParser.T__33 - 34)) | (1 << (PyxellParser.T__40 - 34)) | (1 << (PyxellParser.T__60 - 34)) | (1 << (PyxellParser.T__64 - 34)) | (1 << (PyxellParser.T__65 - 34)) | (1 << (PyxellParser.T__66 - 34)) | (1 << (PyxellParser.T__67 - 34)) | (1 << (PyxellParser.T__68 - 34)) | (1 << (PyxellParser.T__69 - 34)))) != 0): + if ((((_la - 35)) & ~0x3f) == 0 and ((1 << (_la - 35)) & ((1 << (PyxellParser.T__34 - 35)) | (1 << (PyxellParser.T__41 - 35)) | (1 << (PyxellParser.T__61 - 35)) | (1 << (PyxellParser.T__65 - 35)) | (1 << (PyxellParser.T__66 - 35)) | (1 << (PyxellParser.T__67 - 35)) | (1 << (PyxellParser.T__68 - 35)) | (1 << (PyxellParser.T__69 - 35)) | (1 << (PyxellParser.T__70 - 35)))) != 0): self.state = 149 localctx.ret = self.typ(0) @@ -1134,15 +1137,15 @@ def compound_stmt(self): self.state = 156 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__35]: + if token in [PyxellParser.T__36]: self.state = 152 - self.match(PyxellParser.T__35) + self.match(PyxellParser.T__36) self.state = 153 self.block() pass - elif token in [PyxellParser.T__36]: + elif token in [PyxellParser.T__37]: self.state = 154 - self.match(PyxellParser.T__36) + self.match(PyxellParser.T__37) self.state = 155 self.match(PyxellParser.T__0) pass @@ -1216,9 +1219,9 @@ def func_arg(self): self.state = 164 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__37: + if _la==PyxellParser.T__38: self.state = 162 - self.match(PyxellParser.T__37) + self.match(PyxellParser.T__38) self.state = 163 self.expr(0) @@ -1265,7 +1268,7 @@ def block(self): try: self.enterOuterAlt(localctx, 1) self.state = 166 - self.match(PyxellParser.T__38) + self.match(PyxellParser.T__39) self.state = 168 self._errHandler.sync(self) _la = self._input.LA(1) @@ -1275,11 +1278,11 @@ def block(self): self.state = 170 self._errHandler.sync(self) _la = self._input.LA(1) - if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__19) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__23) | (1 << PyxellParser.T__27) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__32) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__40) | (1 << PyxellParser.T__45) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.T__66 - 64)) | (1 << (PyxellParser.T__67 - 64)) | (1 << (PyxellParser.T__68 - 64)) | (1 << (PyxellParser.T__69 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0)): + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__46) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.T__66 - 64)) | (1 << (PyxellParser.T__67 - 64)) | (1 << (PyxellParser.T__68 - 64)) | (1 << (PyxellParser.T__69 - 64)) | (1 << (PyxellParser.T__70 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0)): break self.state = 172 - self.match(PyxellParser.T__39) + self.match(PyxellParser.T__40) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -1660,11 +1663,11 @@ def expr(self, _p:int=0): self._ctx = localctx _prevctx = localctx self.state = 176 - self.match(PyxellParser.T__33) + self.match(PyxellParser.T__34) self.state = 177 self.tuple_expr() self.state = 178 - self.match(PyxellParser.T__34) + self.match(PyxellParser.T__35) pass elif la_ == 3: @@ -1672,7 +1675,7 @@ def expr(self, _p:int=0): self._ctx = localctx _prevctx = localctx self.state = 180 - self.match(PyxellParser.T__40) + self.match(PyxellParser.T__41) self.state = 186 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,19,self._ctx) @@ -1681,7 +1684,7 @@ def expr(self, _p:int=0): self.state = 181 self.expr(0) self.state = 182 - self.match(PyxellParser.T__22) + self.match(PyxellParser.T__23) self.state = 188 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,19,self._ctx) @@ -1689,13 +1692,13 @@ def expr(self, _p:int=0): self.state = 190 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__34 - 13)) | (1 << (PyxellParser.T__41 - 13)) | (1 << (PyxellParser.T__46 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): self.state = 189 self.expr(0) self.state = 192 - self.match(PyxellParser.T__41) + self.match(PyxellParser.T__42) pass elif la_ == 4: @@ -1703,7 +1706,7 @@ def expr(self, _p:int=0): self._ctx = localctx _prevctx = localctx self.state = 193 - self.match(PyxellParser.T__40) + self.match(PyxellParser.T__41) self.state = 194 self.expr(0) self.state = 196 @@ -1715,11 +1718,11 @@ def expr(self, _p:int=0): self.state = 198 self._errHandler.sync(self) _la = self._input.LA(1) - if not (_la==PyxellParser.T__23 or _la==PyxellParser.T__29): + if not (_la==PyxellParser.T__24 or _la==PyxellParser.T__30): break self.state = 200 - self.match(PyxellParser.T__41) + self.match(PyxellParser.T__42) pass elif la_ == 5: @@ -1729,13 +1732,13 @@ def expr(self, _p:int=0): self.state = 202 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__45))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__46))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() self.state = 203 - self.expr(16) + self.expr(17) pass elif la_ == 6: @@ -1743,9 +1746,9 @@ def expr(self, _p:int=0): self._ctx = localctx _prevctx = localctx self.state = 204 - localctx.op = self.match(PyxellParser.T__56) + localctx.op = self.match(PyxellParser.T__57) self.state = 205 - self.expr(5) + self.expr(6) pass elif la_ == 7: @@ -1753,7 +1756,7 @@ def expr(self, _p:int=0): self._ctx = localctx _prevctx = localctx self.state = 206 - self.match(PyxellParser.T__59) + self.match(PyxellParser.T__60) self.state = 211 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,22,self._ctx) @@ -1762,7 +1765,7 @@ def expr(self, _p:int=0): self.state = 207 self.match(PyxellParser.ID) self.state = 208 - self.match(PyxellParser.T__22) + self.match(PyxellParser.T__23) self.state = 213 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,22,self._ctx) @@ -1776,14 +1779,14 @@ def expr(self, _p:int=0): self.state = 217 - self.match(PyxellParser.T__60) + self.match(PyxellParser.T__61) self.state = 218 self.expr(1) pass self._ctx.stop = self._input.LT(-1) - self.state = 310 + self.state = 313 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,33,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: @@ -1791,29 +1794,29 @@ def expr(self, _p:int=0): if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 308 + self.state = 311 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,32,self._ctx) if la_ == 1: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 221 - if not self.precpred(self._ctx, 17): + if not self.precpred(self._ctx, 18): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 17)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 18)") self.state = 222 localctx.op = self.match(PyxellParser.T__8) self.state = 223 - self.expr(17) + self.expr(18) pass elif la_ == 2: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 224 - if not self.precpred(self._ctx, 15): + if not self.precpred(self._ctx, 16): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 15)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 16)") self.state = 225 localctx.op = self._input.LT(1) _la = self._input.LA(1) @@ -1823,16 +1826,16 @@ def expr(self, _p:int=0): self._errHandler.reportMatch(self) self.consume() self.state = 226 - self.expr(16) + self.expr(17) pass elif la_ == 3: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 227 - if not self.precpred(self._ctx, 14): + if not self.precpred(self._ctx, 15): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 14)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 15)") self.state = 228 localctx.op = self._input.LT(1) _la = self._input.LA(1) @@ -1842,16 +1845,16 @@ def expr(self, _p:int=0): self._errHandler.reportMatch(self) self.consume() self.state = 229 - self.expr(15) + self.expr(16) pass elif la_ == 4: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 230 - if not self.precpred(self._ctx, 13): + if not self.precpred(self._ctx, 14): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 14)") self.state = 231 localctx.op = self._input.LT(1) _la = self._input.LA(1) @@ -1861,289 +1864,302 @@ def expr(self, _p:int=0): self._errHandler.reportMatch(self) self.consume() self.state = 232 - self.expr(14) + self.expr(15) pass elif la_ == 5: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 233 - if not self.precpred(self._ctx, 12): + if not self.precpred(self._ctx, 13): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 12)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") self.state = 234 localctx.op = self.match(PyxellParser.T__16) self.state = 235 - self.expr(13) + self.expr(14) pass elif la_ == 6: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 236 - if not self.precpred(self._ctx, 11): + if not self.precpred(self._ctx, 12): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 12)") self.state = 237 localctx.op = self.match(PyxellParser.T__17) self.state = 238 - self.expr(12) + self.expr(13) pass elif la_ == 7: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 239 - if not self.precpred(self._ctx, 10): + if not self.precpred(self._ctx, 11): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") self.state = 240 localctx.op = self.match(PyxellParser.T__18) self.state = 241 - self.expr(11) + self.expr(12) pass elif la_ == 8: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 242 - if not self.precpred(self._ctx, 9): + if not self.precpred(self._ctx, 10): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") self.state = 243 localctx.dots = self._input.LT(1) _la = self._input.LA(1) - if not(_la==PyxellParser.T__46 or _la==PyxellParser.T__47): + if not(_la==PyxellParser.T__47 or _la==PyxellParser.T__48): localctx.dots = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() self.state = 244 - self.expr(10) + self.expr(11) pass elif la_ == 9: localctx = PyxellParser.ExprIsContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 245 - if not self.precpred(self._ctx, 7): + if not self.precpred(self._ctx, 8): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") self.state = 246 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not(_la==PyxellParser.T__48 or _la==PyxellParser.T__49): + if not(_la==PyxellParser.T__49 or _la==PyxellParser.T__50): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() self.state = 247 - self.expr(8) + self.expr(9) pass elif la_ == 10: localctx = PyxellParser.ExprCmpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 248 - if not self.precpred(self._ctx, 6): + if not self.precpred(self._ctx, 7): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") self.state = 249 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__50) | (1 << PyxellParser.T__51) | (1 << PyxellParser.T__52) | (1 << PyxellParser.T__53) | (1 << PyxellParser.T__54) | (1 << PyxellParser.T__55))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__51) | (1 << PyxellParser.T__52) | (1 << PyxellParser.T__53) | (1 << PyxellParser.T__54) | (1 << PyxellParser.T__55) | (1 << PyxellParser.T__56))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() self.state = 250 - self.expr(6) + self.expr(7) pass elif la_ == 11: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 251 - if not self.precpred(self._ctx, 4): + if not self.precpred(self._ctx, 5): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") self.state = 252 - localctx.op = self.match(PyxellParser.T__57) + localctx.op = self.match(PyxellParser.T__58) self.state = 253 - self.expr(4) + self.expr(5) pass elif la_ == 12: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 254 - if not self.precpred(self._ctx, 3): + if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") self.state = 255 - localctx.op = self.match(PyxellParser.T__58) + localctx.op = self.match(PyxellParser.T__59) self.state = 256 - self.expr(3) + self.expr(4) pass elif la_ == 13: - localctx = PyxellParser.ExprCondContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 257 - if not self.precpred(self._ctx, 2): + if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") + raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") self.state = 258 - self.match(PyxellParser.T__42) + localctx.op = self.match(PyxellParser.T__19) self.state = 259 - self.expr(0) + self.expr(3) + pass + + elif la_ == 14: + localctx = PyxellParser.ExprCondContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) self.state = 260 - self.match(PyxellParser.T__37) + if not self.precpred(self._ctx, 2): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") self.state = 261 + self.match(PyxellParser.T__43) + self.state = 262 + self.expr(0) + self.state = 263 + self.match(PyxellParser.T__38) + self.state = 264 self.expr(2) pass - elif la_ == 14: + elif la_ == 15: localctx = PyxellParser.ExprIndexContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 263 - if not self.precpred(self._ctx, 22): - from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 22)") - self.state = 264 - self.match(PyxellParser.T__40) - self.state = 265 - self.tuple_expr() self.state = 266 + if not self.precpred(self._ctx, 23): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 23)") + self.state = 267 self.match(PyxellParser.T__41) + self.state = 268 + self.tuple_expr() + self.state = 269 + self.match(PyxellParser.T__42) pass - elif la_ == 15: + elif la_ == 16: localctx = PyxellParser.ExprSliceContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 268 - if not self.precpred(self._ctx, 21): - from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 21)") - self.state = 269 - self.match(PyxellParser.T__40) self.state = 271 + if not self.precpred(self._ctx, 22): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 22)") + self.state = 272 + self.match(PyxellParser.T__41) + self.state = 274 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 270 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__34 - 13)) | (1 << (PyxellParser.T__41 - 13)) | (1 << (PyxellParser.T__46 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 273 localctx.e1 = self.expr(0) - self.state = 273 - self.match(PyxellParser.T__37) - self.state = 275 + self.state = 276 + self.match(PyxellParser.T__38) + self.state = 278 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 274 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__34 - 13)) | (1 << (PyxellParser.T__41 - 13)) | (1 << (PyxellParser.T__46 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 277 localctx.e2 = self.expr(0) - self.state = 281 + self.state = 284 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__37: - self.state = 277 - self.match(PyxellParser.T__37) - self.state = 279 + if _la==PyxellParser.T__38: + self.state = 280 + self.match(PyxellParser.T__38) + self.state = 282 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 278 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__34 - 13)) | (1 << (PyxellParser.T__41 - 13)) | (1 << (PyxellParser.T__46 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 281 localctx.e3 = self.expr(0) - self.state = 283 - self.match(PyxellParser.T__41) + self.state = 286 + self.match(PyxellParser.T__42) pass - elif la_ == 16: + elif la_ == 17: localctx = PyxellParser.ExprAttrContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 284 - if not self.precpred(self._ctx, 20): + self.state = 287 + if not self.precpred(self._ctx, 21): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 20)") - self.state = 286 + raise FailedPredicateException(self, "self.precpred(self._ctx, 21)") + self.state = 289 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__42: - self.state = 285 - localctx.safe = self.match(PyxellParser.T__42) + if _la==PyxellParser.T__43: + self.state = 288 + localctx.safe = self.match(PyxellParser.T__43) - self.state = 288 - self.match(PyxellParser.T__43) - self.state = 289 + self.state = 291 + self.match(PyxellParser.T__44) + self.state = 292 self.match(PyxellParser.ID) pass - elif la_ == 17: + elif la_ == 18: localctx = PyxellParser.ExprCallContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 290 - if not self.precpred(self._ctx, 19): + self.state = 293 + if not self.precpred(self._ctx, 20): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 19)") - self.state = 291 - self.match(PyxellParser.T__33) - self.state = 297 + raise FailedPredicateException(self, "self.precpred(self._ctx, 20)") + self.state = 294 + self.match(PyxellParser.T__34) + self.state = 300 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,30,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 292 + self.state = 295 self.call_arg() - self.state = 293 - self.match(PyxellParser.T__22) - self.state = 299 + self.state = 296 + self.match(PyxellParser.T__23) + self.state = 302 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,30,self._ctx) - self.state = 301 + self.state = 304 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__33 - 13)) | (1 << (PyxellParser.T__40 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__56 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 300 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__34 - 13)) | (1 << (PyxellParser.T__41 - 13)) | (1 << (PyxellParser.T__46 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 303 self.call_arg() - self.state = 303 - self.match(PyxellParser.T__34) + self.state = 306 + self.match(PyxellParser.T__35) pass - elif la_ == 18: + elif la_ == 19: localctx = PyxellParser.ExprUnaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 304 - if not self.precpred(self._ctx, 18): + self.state = 307 + if not self.precpred(self._ctx, 19): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 18)") - self.state = 305 - localctx.op = self.match(PyxellParser.T__44) + raise FailedPredicateException(self, "self.precpred(self._ctx, 19)") + self.state = 308 + localctx.op = self.match(PyxellParser.T__45) pass - elif la_ == 19: + elif la_ == 20: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 306 - if not self.precpred(self._ctx, 8): + self.state = 309 + if not self.precpred(self._ctx, 9): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") - self.state = 307 - localctx.dots = self.match(PyxellParser.T__47) + raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") + self.state = 310 + localctx.dots = self.match(PyxellParser.T__48) pass - self.state = 312 + self.state = 315 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,33,self._ctx) @@ -2200,20 +2216,20 @@ def tuple_expr(self): try: localctx = PyxellParser.ExprTupleContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 318 + self.state = 321 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,34,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 313 + self.state = 316 self.expr(0) - self.state = 314 - self.match(PyxellParser.T__22) - self.state = 320 + self.state = 317 + self.match(PyxellParser.T__23) + self.state = 323 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,34,self._ctx) - self.state = 321 + self.state = 324 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -2267,9 +2283,9 @@ def interpolation_expr(self): try: localctx = PyxellParser.ExprInterpolationContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 323 + self.state = 326 self.tuple_expr() - self.state = 324 + self.state = 327 self.match(PyxellParser.EOF) except RecognitionException as re: localctx.exception = re @@ -2340,37 +2356,37 @@ def comprehension(self): self.enterRule(localctx, 20, self.RULE_comprehension) self._la = 0 # Token type try: - self.state = 336 + self.state = 339 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__29]: + if token in [PyxellParser.T__30]: localctx = PyxellParser.ComprehensionGeneratorContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 326 - self.match(PyxellParser.T__29) - self.state = 327 - self.tuple_expr() - self.state = 328 - self.match(PyxellParser.T__30) self.state = 329 + self.match(PyxellParser.T__30) + self.state = 330 self.tuple_expr() + self.state = 331 + self.match(PyxellParser.T__31) self.state = 332 + self.tuple_expr() + self.state = 335 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__31: - self.state = 330 - self.match(PyxellParser.T__31) - self.state = 331 + if _la==PyxellParser.T__32: + self.state = 333 + self.match(PyxellParser.T__32) + self.state = 334 self.tuple_expr() pass - elif token in [PyxellParser.T__23]: + elif token in [PyxellParser.T__24]: localctx = PyxellParser.ComprehensionFilterContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 334 - self.match(PyxellParser.T__23) - self.state = 335 + self.state = 337 + self.match(PyxellParser.T__24) + self.state = 338 self.expr(0) pass else: @@ -2428,17 +2444,17 @@ def call_arg(self): try: localctx = PyxellParser.CallArgContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 340 + self.state = 343 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,37,self._ctx) if la_ == 1: - self.state = 338 + self.state = 341 self.match(PyxellParser.ID) - self.state = 339 + self.state = 342 self.match(PyxellParser.T__7) - self.state = 342 + self.state = 345 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -2580,27 +2596,27 @@ def atom(self): self.enterRule(localctx, 24, self.RULE_atom) self._la = 0 # Token type try: - self.state = 351 + self.state = 354 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: localctx = PyxellParser.AtomIntContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 344 + self.state = 347 self.match(PyxellParser.INT) pass elif token in [PyxellParser.FLOAT]: localctx = PyxellParser.AtomFloatContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 345 + self.state = 348 self.match(PyxellParser.FLOAT) pass - elif token in [PyxellParser.T__61, PyxellParser.T__62]: + elif token in [PyxellParser.T__62, PyxellParser.T__63]: localctx = PyxellParser.AtomBoolContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 346 + self.state = 349 _la = self._input.LA(1) - if not(_la==PyxellParser.T__61 or _la==PyxellParser.T__62): + if not(_la==PyxellParser.T__62 or _la==PyxellParser.T__63): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -2609,25 +2625,25 @@ def atom(self): elif token in [PyxellParser.CHAR]: localctx = PyxellParser.AtomCharContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 347 + self.state = 350 self.match(PyxellParser.CHAR) pass elif token in [PyxellParser.STRING]: localctx = PyxellParser.AtomStringContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 348 + self.state = 351 self.match(PyxellParser.STRING) pass - elif token in [PyxellParser.T__63]: + elif token in [PyxellParser.T__64]: localctx = PyxellParser.AtomNullContext(self, localctx) self.enterOuterAlt(localctx, 6) - self.state = 349 - self.match(PyxellParser.T__63) + self.state = 352 + self.match(PyxellParser.T__64) pass elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) self.enterOuterAlt(localctx, 7) - self.state = 350 + self.state = 353 self.match(PyxellParser.ID) pass else: @@ -2672,20 +2688,20 @@ def id_list(self): self.enterRule(localctx, 26, self.RULE_id_list) try: self.enterOuterAlt(localctx, 1) - self.state = 357 + self.state = 360 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,39,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 353 + self.state = 356 self.match(PyxellParser.ID) - self.state = 354 - self.match(PyxellParser.T__22) - self.state = 359 + self.state = 357 + self.match(PyxellParser.T__23) + self.state = 362 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,39,self._ctx) - self.state = 360 + self.state = 363 self.match(PyxellParser.ID) except RecognitionException as re: localctx.exception = re @@ -2844,58 +2860,58 @@ def typ(self, _p:int=0): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 374 + self.state = 377 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__64, PyxellParser.T__65, PyxellParser.T__66, PyxellParser.T__67, PyxellParser.T__68, PyxellParser.T__69]: + if token in [PyxellParser.T__65, PyxellParser.T__66, PyxellParser.T__67, PyxellParser.T__68, PyxellParser.T__69, PyxellParser.T__70]: localctx = PyxellParser.TypePrimitiveContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 363 + self.state = 366 _la = self._input.LA(1) - if not(((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & ((1 << (PyxellParser.T__64 - 65)) | (1 << (PyxellParser.T__65 - 65)) | (1 << (PyxellParser.T__66 - 65)) | (1 << (PyxellParser.T__67 - 65)) | (1 << (PyxellParser.T__68 - 65)) | (1 << (PyxellParser.T__69 - 65)))) != 0)): + if not(((((_la - 66)) & ~0x3f) == 0 and ((1 << (_la - 66)) & ((1 << (PyxellParser.T__65 - 66)) | (1 << (PyxellParser.T__66 - 66)) | (1 << (PyxellParser.T__67 - 66)) | (1 << (PyxellParser.T__68 - 66)) | (1 << (PyxellParser.T__69 - 66)) | (1 << (PyxellParser.T__70 - 66)))) != 0)): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() pass - elif token in [PyxellParser.T__33]: + elif token in [PyxellParser.T__34]: localctx = PyxellParser.TypeParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 364 - self.match(PyxellParser.T__33) - self.state = 365 - self.typ(0) - self.state = 366 + self.state = 367 self.match(PyxellParser.T__34) + self.state = 368 + self.typ(0) + self.state = 369 + self.match(PyxellParser.T__35) pass - elif token in [PyxellParser.T__40]: + elif token in [PyxellParser.T__41]: localctx = PyxellParser.TypeArrayContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 368 - self.match(PyxellParser.T__40) - self.state = 369 - self.typ(0) - self.state = 370 + self.state = 371 self.match(PyxellParser.T__41) + self.state = 372 + self.typ(0) + self.state = 373 + self.match(PyxellParser.T__42) pass - elif token in [PyxellParser.T__60]: + elif token in [PyxellParser.T__61]: localctx = PyxellParser.TypeFunc0Context(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 372 - self.match(PyxellParser.T__60) - self.state = 373 + self.state = 375 + self.match(PyxellParser.T__61) + self.state = 376 self.typ(1) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 386 + self.state = 389 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,42,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: @@ -2903,48 +2919,48 @@ def typ(self, _p:int=0): if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 384 + self.state = 387 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,41,self._ctx) if la_ == 1: localctx = PyxellParser.TypeTupleContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 376 + self.state = 379 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 377 + self.state = 380 self.match(PyxellParser.T__9) - self.state = 378 + self.state = 381 self.typ(3) pass elif la_ == 2: localctx = PyxellParser.TypeFuncContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 379 + self.state = 382 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 380 - self.match(PyxellParser.T__60) - self.state = 381 + self.state = 383 + self.match(PyxellParser.T__61) + self.state = 384 self.typ(2) pass elif la_ == 3: localctx = PyxellParser.TypeNullableContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 382 + self.state = 385 if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") - self.state = 383 - self.match(PyxellParser.T__42) + self.state = 386 + self.match(PyxellParser.T__43) pass - self.state = 388 + self.state = 391 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,42,self._ctx) @@ -2971,91 +2987,95 @@ def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): def expr_sempred(self, localctx:ExprContext, predIndex:int): if predIndex == 0: - return self.precpred(self._ctx, 17) + return self.precpred(self._ctx, 18) if predIndex == 1: - return self.precpred(self._ctx, 15) + return self.precpred(self._ctx, 16) if predIndex == 2: - return self.precpred(self._ctx, 14) + return self.precpred(self._ctx, 15) if predIndex == 3: - return self.precpred(self._ctx, 13) + return self.precpred(self._ctx, 14) if predIndex == 4: - return self.precpred(self._ctx, 12) + return self.precpred(self._ctx, 13) if predIndex == 5: - return self.precpred(self._ctx, 11) + return self.precpred(self._ctx, 12) if predIndex == 6: - return self.precpred(self._ctx, 10) + return self.precpred(self._ctx, 11) if predIndex == 7: - return self.precpred(self._ctx, 9) + return self.precpred(self._ctx, 10) if predIndex == 8: - return self.precpred(self._ctx, 7) + return self.precpred(self._ctx, 8) if predIndex == 9: - return self.precpred(self._ctx, 6) + return self.precpred(self._ctx, 7) if predIndex == 10: - return self.precpred(self._ctx, 4) + return self.precpred(self._ctx, 5) if predIndex == 11: - return self.precpred(self._ctx, 3) + return self.precpred(self._ctx, 4) if predIndex == 12: - return self.precpred(self._ctx, 2) + return self.precpred(self._ctx, 3) if predIndex == 13: - return self.precpred(self._ctx, 22) + return self.precpred(self._ctx, 2) if predIndex == 14: - return self.precpred(self._ctx, 21) + return self.precpred(self._ctx, 23) if predIndex == 15: - return self.precpred(self._ctx, 20) + return self.precpred(self._ctx, 22) if predIndex == 16: - return self.precpred(self._ctx, 19) + return self.precpred(self._ctx, 21) if predIndex == 17: - return self.precpred(self._ctx, 18) + return self.precpred(self._ctx, 20) if predIndex == 18: - return self.precpred(self._ctx, 8) + return self.precpred(self._ctx, 19) - def typ_sempred(self, localctx:TypContext, predIndex:int): if predIndex == 19: - return self.precpred(self._ctx, 3) + return self.precpred(self._ctx, 9) + def typ_sempred(self, localctx:TypContext, predIndex:int): if predIndex == 20: - return self.precpred(self._ctx, 2) + return self.precpred(self._ctx, 3) if predIndex == 21: + return self.precpred(self._ctx, 2) + + + if predIndex == 22: return self.precpred(self._ctx, 4) diff --git a/src/compiler.py b/src/compiler.py index cfba4c29..f60c4d23 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -945,9 +945,20 @@ def compileStmtAssg(self, node): def compileStmtAssgExpr(self, node): exprs = node['exprs'] + op = node['op'] ptr = self.lvalue(node, exprs[0]) - value = self.binaryop(node, node['op'], self.builder.load(ptr), self.compile(exprs[1])) - self.builder.store(value, ptr) + left = self.builder.load(ptr) + + if op == '??': + with self.builder.if_then(self.builder.icmp_unsigned('==', left, vNull())): + right = self.compile(exprs[1]) + if not left.type.isNullable() or not can_cast(left.type.subtype, right.type): + self.throw(node, err.NoBinaryOperator(op, left.type, right.type)) + self.builder.store(self.nullable(right), ptr) + else: + right = self.compile(exprs[1]) + value = self.binaryop(node, op, left, right) + self.builder.store(value, ptr) def compileStmtAppend(self, node): # Special instruction for array comprehension. @@ -1460,7 +1471,21 @@ def compileExprUnaryOp(self, node): return self.unaryop(node, node['op'], self.compile(node['expr'])) def compileExprBinaryOp(self, node): - return self.binaryop(node, node['op'], *map(self.compile, node['exprs'])) + op = node['op'] + exprs = node['exprs'] + + if op == '??': + left = self.compile(exprs[0]) + + def callback(): + right = self.compile(exprs[1]) + if not can_cast(left.type.subtype, right.type): + self.throw(node, err.NoBinaryOperator(op, left.type, right.type)) + return right + + return self.safe(node, left, lambda: self.extract(left), callback) + + return self.binaryop(node, op, *map(self.compile, exprs)) def compileExprRange(self, node): self.throw(node, err.IllegalRange()) diff --git a/test/bad/nullables/op05.err b/test/bad/nullables/op05.err index 97a5a7d8..89d291e5 100644 --- a/test/bad/nullables/op05.err +++ b/test/bad/nullables/op05.err @@ -1 +1 @@ -Cannot settle type of the expression. \ No newline at end of file +No binary operator `??` defined for `Int?` and `Float`. \ No newline at end of file diff --git a/test/good/nullables/op05.out b/test/good/nullables/op05.out index a1e2647d..9e64554a 100644 --- a/test/good/nullables/op05.out +++ b/test/good/nullables/op05.out @@ -1 +1 @@ -? +X_Y diff --git a/test/good/nullables/op05.px b/test/good/nullables/op05.px index 9b4c4043..c7a770bf 100644 --- a/test/good/nullables/op05.px +++ b/test/good/nullables/op05.px @@ -1,4 +1,3 @@ -String? s = null -s ??= "?" -print s ?? "" +[Char]? a = ['X', 'Y'] +print a?.join(a!.length > 2 or a!.length < 2 ? "" : "_") diff --git a/test/good/nullables/op06.out b/test/good/nullables/op06.out index 8bedf704..3aec8e5d 100644 --- a/test/good/nullables/op06.out +++ b/test/good/nullables/op06.out @@ -1,3 +1,5 @@ null 0 0 +5 +6 diff --git a/test/good/nullables/op06.px b/test/good/nullables/op06.px index bb07a4ee..f626d85b 100644 --- a/test/good/nullables/op06.px +++ b/test/good/nullables/op06.px @@ -5,3 +5,5 @@ func f(Int? x) Int? def Int x = f(null) ?? f(0) ?? f(null)! print x + +print (f(5) ?? f(3)!) + 1 diff --git a/test/good/nullables/op07.out b/test/good/nullables/op07.out index 9e64554a..a1e2647d 100644 --- a/test/good/nullables/op07.out +++ b/test/good/nullables/op07.out @@ -1 +1 @@ -X_Y +? diff --git a/test/good/nullables/op07.px b/test/good/nullables/op07.px index c7a770bf..9b4c4043 100644 --- a/test/good/nullables/op07.px +++ b/test/good/nullables/op07.px @@ -1,3 +1,4 @@ -[Char]? a = ['X', 'Y'] -print a?.join(a!.length > 2 or a!.length < 2 ? "" : "_") +String? s = null +s ??= "?" +print s ?? "" diff --git a/test/good/nullables/op08.out b/test/good/nullables/op08.out new file mode 100644 index 00000000..483a5ddb --- /dev/null +++ b/test/good/nullables/op08.out @@ -0,0 +1,3 @@ +[null] +[a] +a diff --git a/test/good/nullables/op08.px b/test/good/nullables/op08.px new file mode 100644 index 00000000..733fa2da --- /dev/null +++ b/test/good/nullables/op08.px @@ -0,0 +1,10 @@ + +[Char?] a = [null] + +func f() [Char?] def + print a + return a + +f()[0] ??= 'a' +f()[0] ??= 'b' +print a[0] From e599874d47e3cfb9b811f720e4f52b2ffa20e5e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Fri, 15 Nov 2019 20:34:30 +0100 Subject: [PATCH 066/100] Nullable index operator --- src/Pyxell.g4 | 2 +- src/antlr/Pyxell.interp | 2 +- src/antlr/PyxellParser.py | 561 ++++++++++++++++++----------------- src/ast.py | 1 + src/compiler.py | 20 +- src/types.py | 21 +- test/bad/nullables/op07.err | 1 + test/bad/nullables/op07.px | 2 + test/bad/nullables/op08.err | 1 + test/bad/nullables/op08.px | 3 + test/bad/nullables/op09.err | 1 + test/bad/nullables/op09.px | 3 + test/good/nullables/op09.out | 4 + test/good/nullables/op09.px | 10 + test/good/nullables/op10.out | 2 + test/good/nullables/op10.px | 7 + 16 files changed, 352 insertions(+), 289 deletions(-) create mode 100644 test/bad/nullables/op07.err create mode 100644 test/bad/nullables/op07.px create mode 100644 test/bad/nullables/op08.err create mode 100644 test/bad/nullables/op08.px create mode 100644 test/bad/nullables/op09.err create mode 100644 test/bad/nullables/op09.px create mode 100644 test/good/nullables/op09.out create mode 100644 test/good/nullables/op09.px create mode 100644 test/good/nullables/op10.out create mode 100644 test/good/nullables/op10.px diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index af7ed54d..a1cd1995 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -45,7 +45,7 @@ expr | '(' tuple_expr ')' # ExprParentheses | '[' (expr ',')* expr? ']' # ExprArray | '[' expr comprehension+ ']' # ExprArrayComprehension - | expr '[' tuple_expr ']' # ExprIndex + | expr safe='?'? '[' tuple_expr ']' # ExprIndex | expr '[' e1=expr? (':' e2=expr? (':' e3=expr?)?) ']' # ExprSlice | expr safe='?'? '.' ID # ExprAttr | expr '(' (call_arg ',')* call_arg? ')' # ExprCall diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index 1d9a4d61..5499a830 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -181,4 +181,4 @@ typ atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 81, 395, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 3, 2, 7, 2, 34, 10, 2, 12, 2, 14, 2, 37, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 45, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 55, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 60, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 66, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 71, 10, 4, 12, 4, 14, 4, 74, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 85, 10, 4, 5, 4, 87, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 92, 10, 5, 12, 5, 14, 5, 95, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 106, 10, 6, 12, 6, 14, 6, 109, 11, 6, 3, 6, 3, 6, 3, 6, 5, 6, 114, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 132, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 143, 10, 6, 12, 6, 14, 6, 146, 11, 6, 3, 6, 5, 6, 149, 10, 6, 3, 6, 3, 6, 5, 6, 153, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 159, 10, 6, 5, 6, 161, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 167, 10, 7, 3, 8, 3, 8, 6, 8, 171, 10, 8, 13, 8, 14, 8, 172, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 187, 10, 9, 12, 9, 14, 9, 190, 11, 9, 3, 9, 5, 9, 193, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 6, 9, 199, 10, 9, 13, 9, 14, 9, 200, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 212, 10, 9, 12, 9, 14, 9, 215, 11, 9, 3, 9, 5, 9, 218, 10, 9, 3, 9, 3, 9, 5, 9, 222, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 277, 10, 9, 3, 9, 3, 9, 5, 9, 281, 10, 9, 3, 9, 3, 9, 5, 9, 285, 10, 9, 5, 9, 287, 10, 9, 3, 9, 3, 9, 3, 9, 5, 9, 292, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 301, 10, 9, 12, 9, 14, 9, 304, 11, 9, 3, 9, 5, 9, 307, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 314, 10, 9, 12, 9, 14, 9, 317, 11, 9, 3, 10, 3, 10, 3, 10, 7, 10, 322, 10, 10, 12, 10, 14, 10, 325, 11, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 338, 10, 12, 3, 12, 3, 12, 5, 12, 342, 10, 12, 3, 13, 3, 13, 5, 13, 346, 10, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 357, 10, 14, 3, 15, 3, 15, 7, 15, 361, 10, 15, 12, 15, 14, 15, 364, 11, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 380, 10, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 7, 16, 390, 10, 16, 12, 16, 14, 16, 393, 11, 16, 3, 16, 2, 4, 16, 30, 17, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 2, 13, 3, 2, 11, 22, 3, 2, 23, 24, 4, 2, 15, 16, 49, 49, 3, 2, 12, 14, 3, 2, 15, 16, 3, 2, 17, 18, 3, 2, 50, 51, 3, 2, 52, 53, 3, 2, 54, 59, 3, 2, 65, 66, 3, 2, 68, 73, 2, 464, 2, 35, 3, 2, 2, 2, 4, 44, 3, 2, 2, 2, 6, 86, 3, 2, 2, 2, 8, 88, 3, 2, 2, 2, 10, 160, 3, 2, 2, 2, 12, 162, 3, 2, 2, 2, 14, 168, 3, 2, 2, 2, 16, 221, 3, 2, 2, 2, 18, 323, 3, 2, 2, 2, 20, 328, 3, 2, 2, 2, 22, 341, 3, 2, 2, 2, 24, 345, 3, 2, 2, 2, 26, 356, 3, 2, 2, 2, 28, 362, 3, 2, 2, 2, 30, 379, 3, 2, 2, 2, 32, 34, 5, 4, 3, 2, 33, 32, 3, 2, 2, 2, 34, 37, 3, 2, 2, 2, 35, 33, 3, 2, 2, 2, 35, 36, 3, 2, 2, 2, 36, 38, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 38, 39, 7, 2, 2, 3, 39, 3, 3, 2, 2, 2, 40, 41, 5, 6, 4, 2, 41, 42, 7, 3, 2, 2, 42, 45, 3, 2, 2, 2, 43, 45, 5, 10, 6, 2, 44, 40, 3, 2, 2, 2, 44, 43, 3, 2, 2, 2, 45, 5, 3, 2, 2, 2, 46, 47, 7, 4, 2, 2, 47, 54, 7, 78, 2, 2, 48, 49, 7, 5, 2, 2, 49, 55, 5, 28, 15, 2, 50, 51, 7, 6, 2, 2, 51, 55, 5, 28, 15, 2, 52, 53, 7, 7, 2, 2, 53, 55, 7, 78, 2, 2, 54, 48, 3, 2, 2, 2, 54, 50, 3, 2, 2, 2, 54, 52, 3, 2, 2, 2, 54, 55, 3, 2, 2, 2, 55, 87, 3, 2, 2, 2, 56, 87, 7, 8, 2, 2, 57, 59, 7, 9, 2, 2, 58, 60, 5, 18, 10, 2, 59, 58, 3, 2, 2, 2, 59, 60, 3, 2, 2, 2, 60, 87, 3, 2, 2, 2, 61, 62, 5, 30, 16, 2, 62, 65, 7, 78, 2, 2, 63, 64, 7, 10, 2, 2, 64, 66, 5, 18, 10, 2, 65, 63, 3, 2, 2, 2, 65, 66, 3, 2, 2, 2, 66, 87, 3, 2, 2, 2, 67, 68, 5, 8, 5, 2, 68, 69, 7, 10, 2, 2, 69, 71, 3, 2, 2, 2, 70, 67, 3, 2, 2, 2, 71, 74, 3, 2, 2, 2, 72, 70, 3, 2, 2, 2, 72, 73, 3, 2, 2, 2, 73, 75, 3, 2, 2, 2, 74, 72, 3, 2, 2, 2, 75, 87, 5, 18, 10, 2, 76, 77, 5, 16, 9, 2, 77, 78, 9, 2, 2, 2, 78, 79, 7, 10, 2, 2, 79, 80, 5, 16, 9, 2, 80, 87, 3, 2, 2, 2, 81, 87, 9, 3, 2, 2, 82, 84, 7, 25, 2, 2, 83, 85, 5, 18, 10, 2, 84, 83, 3, 2, 2, 2, 84, 85, 3, 2, 2, 2, 85, 87, 3, 2, 2, 2, 86, 46, 3, 2, 2, 2, 86, 56, 3, 2, 2, 2, 86, 57, 3, 2, 2, 2, 86, 61, 3, 2, 2, 2, 86, 72, 3, 2, 2, 2, 86, 76, 3, 2, 2, 2, 86, 81, 3, 2, 2, 2, 86, 82, 3, 2, 2, 2, 87, 7, 3, 2, 2, 2, 88, 93, 5, 16, 9, 2, 89, 90, 7, 26, 2, 2, 90, 92, 5, 16, 9, 2, 91, 89, 3, 2, 2, 2, 92, 95, 3, 2, 2, 2, 93, 91, 3, 2, 2, 2, 93, 94, 3, 2, 2, 2, 94, 9, 3, 2, 2, 2, 95, 93, 3, 2, 2, 2, 96, 97, 7, 27, 2, 2, 97, 98, 5, 16, 9, 2, 98, 99, 7, 28, 2, 2, 99, 107, 5, 14, 8, 2, 100, 101, 7, 29, 2, 2, 101, 102, 5, 16, 9, 2, 102, 103, 7, 28, 2, 2, 103, 104, 5, 14, 8, 2, 104, 106, 3, 2, 2, 2, 105, 100, 3, 2, 2, 2, 106, 109, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 107, 108, 3, 2, 2, 2, 108, 113, 3, 2, 2, 2, 109, 107, 3, 2, 2, 2, 110, 111, 7, 30, 2, 2, 111, 112, 7, 28, 2, 2, 112, 114, 5, 14, 8, 2, 113, 110, 3, 2, 2, 2, 113, 114, 3, 2, 2, 2, 114, 161, 3, 2, 2, 2, 115, 116, 7, 31, 2, 2, 116, 117, 5, 16, 9, 2, 117, 118, 7, 28, 2, 2, 118, 119, 5, 14, 8, 2, 119, 161, 3, 2, 2, 2, 120, 121, 7, 32, 2, 2, 121, 122, 5, 16, 9, 2, 122, 123, 7, 28, 2, 2, 123, 124, 5, 14, 8, 2, 124, 161, 3, 2, 2, 2, 125, 126, 7, 33, 2, 2, 126, 127, 5, 18, 10, 2, 127, 128, 7, 34, 2, 2, 128, 131, 5, 18, 10, 2, 129, 130, 7, 35, 2, 2, 130, 132, 5, 18, 10, 2, 131, 129, 3, 2, 2, 2, 131, 132, 3, 2, 2, 2, 132, 133, 3, 2, 2, 2, 133, 134, 7, 28, 2, 2, 134, 135, 5, 14, 8, 2, 135, 161, 3, 2, 2, 2, 136, 137, 7, 36, 2, 2, 137, 138, 7, 78, 2, 2, 138, 144, 7, 37, 2, 2, 139, 140, 5, 12, 7, 2, 140, 141, 7, 26, 2, 2, 141, 143, 3, 2, 2, 2, 142, 139, 3, 2, 2, 2, 143, 146, 3, 2, 2, 2, 144, 142, 3, 2, 2, 2, 144, 145, 3, 2, 2, 2, 145, 148, 3, 2, 2, 2, 146, 144, 3, 2, 2, 2, 147, 149, 5, 12, 7, 2, 148, 147, 3, 2, 2, 2, 148, 149, 3, 2, 2, 2, 149, 150, 3, 2, 2, 2, 150, 152, 7, 38, 2, 2, 151, 153, 5, 30, 16, 2, 152, 151, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 158, 3, 2, 2, 2, 154, 155, 7, 39, 2, 2, 155, 159, 5, 14, 8, 2, 156, 157, 7, 40, 2, 2, 157, 159, 7, 3, 2, 2, 158, 154, 3, 2, 2, 2, 158, 156, 3, 2, 2, 2, 159, 161, 3, 2, 2, 2, 160, 96, 3, 2, 2, 2, 160, 115, 3, 2, 2, 2, 160, 120, 3, 2, 2, 2, 160, 125, 3, 2, 2, 2, 160, 136, 3, 2, 2, 2, 161, 11, 3, 2, 2, 2, 162, 163, 5, 30, 16, 2, 163, 166, 7, 78, 2, 2, 164, 165, 7, 41, 2, 2, 165, 167, 5, 16, 9, 2, 166, 164, 3, 2, 2, 2, 166, 167, 3, 2, 2, 2, 167, 13, 3, 2, 2, 2, 168, 170, 7, 42, 2, 2, 169, 171, 5, 4, 3, 2, 170, 169, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 170, 3, 2, 2, 2, 172, 173, 3, 2, 2, 2, 173, 174, 3, 2, 2, 2, 174, 175, 7, 43, 2, 2, 175, 15, 3, 2, 2, 2, 176, 177, 8, 9, 1, 2, 177, 222, 5, 26, 14, 2, 178, 179, 7, 37, 2, 2, 179, 180, 5, 18, 10, 2, 180, 181, 7, 38, 2, 2, 181, 222, 3, 2, 2, 2, 182, 188, 7, 44, 2, 2, 183, 184, 5, 16, 9, 2, 184, 185, 7, 26, 2, 2, 185, 187, 3, 2, 2, 2, 186, 183, 3, 2, 2, 2, 187, 190, 3, 2, 2, 2, 188, 186, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 192, 3, 2, 2, 2, 190, 188, 3, 2, 2, 2, 191, 193, 5, 16, 9, 2, 192, 191, 3, 2, 2, 2, 192, 193, 3, 2, 2, 2, 193, 194, 3, 2, 2, 2, 194, 222, 7, 45, 2, 2, 195, 196, 7, 44, 2, 2, 196, 198, 5, 16, 9, 2, 197, 199, 5, 22, 12, 2, 198, 197, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 198, 3, 2, 2, 2, 200, 201, 3, 2, 2, 2, 201, 202, 3, 2, 2, 2, 202, 203, 7, 45, 2, 2, 203, 222, 3, 2, 2, 2, 204, 205, 9, 4, 2, 2, 205, 222, 5, 16, 9, 19, 206, 207, 7, 60, 2, 2, 207, 222, 5, 16, 9, 8, 208, 213, 7, 63, 2, 2, 209, 210, 7, 78, 2, 2, 210, 212, 7, 26, 2, 2, 211, 209, 3, 2, 2, 2, 212, 215, 3, 2, 2, 2, 213, 211, 3, 2, 2, 2, 213, 214, 3, 2, 2, 2, 214, 217, 3, 2, 2, 2, 215, 213, 3, 2, 2, 2, 216, 218, 7, 78, 2, 2, 217, 216, 3, 2, 2, 2, 217, 218, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 220, 7, 64, 2, 2, 220, 222, 5, 16, 9, 3, 221, 176, 3, 2, 2, 2, 221, 178, 3, 2, 2, 2, 221, 182, 3, 2, 2, 2, 221, 195, 3, 2, 2, 2, 221, 204, 3, 2, 2, 2, 221, 206, 3, 2, 2, 2, 221, 208, 3, 2, 2, 2, 222, 315, 3, 2, 2, 2, 223, 224, 12, 20, 2, 2, 224, 225, 7, 11, 2, 2, 225, 314, 5, 16, 9, 20, 226, 227, 12, 18, 2, 2, 227, 228, 9, 5, 2, 2, 228, 314, 5, 16, 9, 19, 229, 230, 12, 17, 2, 2, 230, 231, 9, 6, 2, 2, 231, 314, 5, 16, 9, 18, 232, 233, 12, 16, 2, 2, 233, 234, 9, 7, 2, 2, 234, 314, 5, 16, 9, 17, 235, 236, 12, 15, 2, 2, 236, 237, 7, 19, 2, 2, 237, 314, 5, 16, 9, 16, 238, 239, 12, 14, 2, 2, 239, 240, 7, 20, 2, 2, 240, 314, 5, 16, 9, 15, 241, 242, 12, 13, 2, 2, 242, 243, 7, 21, 2, 2, 243, 314, 5, 16, 9, 14, 244, 245, 12, 12, 2, 2, 245, 246, 9, 8, 2, 2, 246, 314, 5, 16, 9, 13, 247, 248, 12, 10, 2, 2, 248, 249, 9, 9, 2, 2, 249, 314, 5, 16, 9, 11, 250, 251, 12, 9, 2, 2, 251, 252, 9, 10, 2, 2, 252, 314, 5, 16, 9, 9, 253, 254, 12, 7, 2, 2, 254, 255, 7, 61, 2, 2, 255, 314, 5, 16, 9, 7, 256, 257, 12, 6, 2, 2, 257, 258, 7, 62, 2, 2, 258, 314, 5, 16, 9, 6, 259, 260, 12, 5, 2, 2, 260, 261, 7, 22, 2, 2, 261, 314, 5, 16, 9, 5, 262, 263, 12, 4, 2, 2, 263, 264, 7, 46, 2, 2, 264, 265, 5, 16, 9, 2, 265, 266, 7, 41, 2, 2, 266, 267, 5, 16, 9, 4, 267, 314, 3, 2, 2, 2, 268, 269, 12, 25, 2, 2, 269, 270, 7, 44, 2, 2, 270, 271, 5, 18, 10, 2, 271, 272, 7, 45, 2, 2, 272, 314, 3, 2, 2, 2, 273, 274, 12, 24, 2, 2, 274, 276, 7, 44, 2, 2, 275, 277, 5, 16, 9, 2, 276, 275, 3, 2, 2, 2, 276, 277, 3, 2, 2, 2, 277, 278, 3, 2, 2, 2, 278, 280, 7, 41, 2, 2, 279, 281, 5, 16, 9, 2, 280, 279, 3, 2, 2, 2, 280, 281, 3, 2, 2, 2, 281, 286, 3, 2, 2, 2, 282, 284, 7, 41, 2, 2, 283, 285, 5, 16, 9, 2, 284, 283, 3, 2, 2, 2, 284, 285, 3, 2, 2, 2, 285, 287, 3, 2, 2, 2, 286, 282, 3, 2, 2, 2, 286, 287, 3, 2, 2, 2, 287, 288, 3, 2, 2, 2, 288, 314, 7, 45, 2, 2, 289, 291, 12, 23, 2, 2, 290, 292, 7, 46, 2, 2, 291, 290, 3, 2, 2, 2, 291, 292, 3, 2, 2, 2, 292, 293, 3, 2, 2, 2, 293, 294, 7, 47, 2, 2, 294, 314, 7, 78, 2, 2, 295, 296, 12, 22, 2, 2, 296, 302, 7, 37, 2, 2, 297, 298, 5, 24, 13, 2, 298, 299, 7, 26, 2, 2, 299, 301, 3, 2, 2, 2, 300, 297, 3, 2, 2, 2, 301, 304, 3, 2, 2, 2, 302, 300, 3, 2, 2, 2, 302, 303, 3, 2, 2, 2, 303, 306, 3, 2, 2, 2, 304, 302, 3, 2, 2, 2, 305, 307, 5, 24, 13, 2, 306, 305, 3, 2, 2, 2, 306, 307, 3, 2, 2, 2, 307, 308, 3, 2, 2, 2, 308, 314, 7, 38, 2, 2, 309, 310, 12, 21, 2, 2, 310, 314, 7, 48, 2, 2, 311, 312, 12, 11, 2, 2, 312, 314, 7, 51, 2, 2, 313, 223, 3, 2, 2, 2, 313, 226, 3, 2, 2, 2, 313, 229, 3, 2, 2, 2, 313, 232, 3, 2, 2, 2, 313, 235, 3, 2, 2, 2, 313, 238, 3, 2, 2, 2, 313, 241, 3, 2, 2, 2, 313, 244, 3, 2, 2, 2, 313, 247, 3, 2, 2, 2, 313, 250, 3, 2, 2, 2, 313, 253, 3, 2, 2, 2, 313, 256, 3, 2, 2, 2, 313, 259, 3, 2, 2, 2, 313, 262, 3, 2, 2, 2, 313, 268, 3, 2, 2, 2, 313, 273, 3, 2, 2, 2, 313, 289, 3, 2, 2, 2, 313, 295, 3, 2, 2, 2, 313, 309, 3, 2, 2, 2, 313, 311, 3, 2, 2, 2, 314, 317, 3, 2, 2, 2, 315, 313, 3, 2, 2, 2, 315, 316, 3, 2, 2, 2, 316, 17, 3, 2, 2, 2, 317, 315, 3, 2, 2, 2, 318, 319, 5, 16, 9, 2, 319, 320, 7, 26, 2, 2, 320, 322, 3, 2, 2, 2, 321, 318, 3, 2, 2, 2, 322, 325, 3, 2, 2, 2, 323, 321, 3, 2, 2, 2, 323, 324, 3, 2, 2, 2, 324, 326, 3, 2, 2, 2, 325, 323, 3, 2, 2, 2, 326, 327, 5, 16, 9, 2, 327, 19, 3, 2, 2, 2, 328, 329, 5, 18, 10, 2, 329, 330, 7, 2, 2, 3, 330, 21, 3, 2, 2, 2, 331, 332, 7, 33, 2, 2, 332, 333, 5, 18, 10, 2, 333, 334, 7, 34, 2, 2, 334, 337, 5, 18, 10, 2, 335, 336, 7, 35, 2, 2, 336, 338, 5, 18, 10, 2, 337, 335, 3, 2, 2, 2, 337, 338, 3, 2, 2, 2, 338, 342, 3, 2, 2, 2, 339, 340, 7, 27, 2, 2, 340, 342, 5, 16, 9, 2, 341, 331, 3, 2, 2, 2, 341, 339, 3, 2, 2, 2, 342, 23, 3, 2, 2, 2, 343, 344, 7, 78, 2, 2, 344, 346, 7, 10, 2, 2, 345, 343, 3, 2, 2, 2, 345, 346, 3, 2, 2, 2, 346, 347, 3, 2, 2, 2, 347, 348, 5, 16, 9, 2, 348, 25, 3, 2, 2, 2, 349, 357, 7, 74, 2, 2, 350, 357, 7, 75, 2, 2, 351, 357, 9, 11, 2, 2, 352, 357, 7, 76, 2, 2, 353, 357, 7, 77, 2, 2, 354, 357, 7, 67, 2, 2, 355, 357, 7, 78, 2, 2, 356, 349, 3, 2, 2, 2, 356, 350, 3, 2, 2, 2, 356, 351, 3, 2, 2, 2, 356, 352, 3, 2, 2, 2, 356, 353, 3, 2, 2, 2, 356, 354, 3, 2, 2, 2, 356, 355, 3, 2, 2, 2, 357, 27, 3, 2, 2, 2, 358, 359, 7, 78, 2, 2, 359, 361, 7, 26, 2, 2, 360, 358, 3, 2, 2, 2, 361, 364, 3, 2, 2, 2, 362, 360, 3, 2, 2, 2, 362, 363, 3, 2, 2, 2, 363, 365, 3, 2, 2, 2, 364, 362, 3, 2, 2, 2, 365, 366, 7, 78, 2, 2, 366, 29, 3, 2, 2, 2, 367, 368, 8, 16, 1, 2, 368, 380, 9, 12, 2, 2, 369, 370, 7, 37, 2, 2, 370, 371, 5, 30, 16, 2, 371, 372, 7, 38, 2, 2, 372, 380, 3, 2, 2, 2, 373, 374, 7, 44, 2, 2, 374, 375, 5, 30, 16, 2, 375, 376, 7, 45, 2, 2, 376, 380, 3, 2, 2, 2, 377, 378, 7, 64, 2, 2, 378, 380, 5, 30, 16, 3, 379, 367, 3, 2, 2, 2, 379, 369, 3, 2, 2, 2, 379, 373, 3, 2, 2, 2, 379, 377, 3, 2, 2, 2, 380, 391, 3, 2, 2, 2, 381, 382, 12, 5, 2, 2, 382, 383, 7, 12, 2, 2, 383, 390, 5, 30, 16, 5, 384, 385, 12, 4, 2, 2, 385, 386, 7, 64, 2, 2, 386, 390, 5, 30, 16, 4, 387, 388, 12, 6, 2, 2, 388, 390, 7, 46, 2, 2, 389, 381, 3, 2, 2, 2, 389, 384, 3, 2, 2, 2, 389, 387, 3, 2, 2, 2, 390, 393, 3, 2, 2, 2, 391, 389, 3, 2, 2, 2, 391, 392, 3, 2, 2, 2, 392, 31, 3, 2, 2, 2, 393, 391, 3, 2, 2, 2, 45, 35, 44, 54, 59, 65, 72, 84, 86, 93, 107, 113, 131, 144, 148, 152, 158, 160, 166, 172, 188, 192, 200, 213, 217, 221, 276, 280, 284, 286, 291, 302, 306, 313, 315, 323, 337, 341, 345, 356, 362, 379, 389, 391] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 81, 398, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 3, 2, 7, 2, 34, 10, 2, 12, 2, 14, 2, 37, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 45, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 55, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 60, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 66, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 71, 10, 4, 12, 4, 14, 4, 74, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 85, 10, 4, 5, 4, 87, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 92, 10, 5, 12, 5, 14, 5, 95, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 106, 10, 6, 12, 6, 14, 6, 109, 11, 6, 3, 6, 3, 6, 3, 6, 5, 6, 114, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 132, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 143, 10, 6, 12, 6, 14, 6, 146, 11, 6, 3, 6, 5, 6, 149, 10, 6, 3, 6, 3, 6, 5, 6, 153, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 159, 10, 6, 5, 6, 161, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 167, 10, 7, 3, 8, 3, 8, 6, 8, 171, 10, 8, 13, 8, 14, 8, 172, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 187, 10, 9, 12, 9, 14, 9, 190, 11, 9, 3, 9, 5, 9, 193, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 6, 9, 199, 10, 9, 13, 9, 14, 9, 200, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 212, 10, 9, 12, 9, 14, 9, 215, 11, 9, 3, 9, 5, 9, 218, 10, 9, 3, 9, 3, 9, 5, 9, 222, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 271, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 280, 10, 9, 3, 9, 3, 9, 5, 9, 284, 10, 9, 3, 9, 3, 9, 5, 9, 288, 10, 9, 5, 9, 290, 10, 9, 3, 9, 3, 9, 3, 9, 5, 9, 295, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 304, 10, 9, 12, 9, 14, 9, 307, 11, 9, 3, 9, 5, 9, 310, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 317, 10, 9, 12, 9, 14, 9, 320, 11, 9, 3, 10, 3, 10, 3, 10, 7, 10, 325, 10, 10, 12, 10, 14, 10, 328, 11, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 341, 10, 12, 3, 12, 3, 12, 5, 12, 345, 10, 12, 3, 13, 3, 13, 5, 13, 349, 10, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 360, 10, 14, 3, 15, 3, 15, 7, 15, 364, 10, 15, 12, 15, 14, 15, 367, 11, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 383, 10, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 7, 16, 393, 10, 16, 12, 16, 14, 16, 396, 11, 16, 3, 16, 2, 4, 16, 30, 17, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 2, 13, 3, 2, 11, 22, 3, 2, 23, 24, 4, 2, 15, 16, 49, 49, 3, 2, 12, 14, 3, 2, 15, 16, 3, 2, 17, 18, 3, 2, 50, 51, 3, 2, 52, 53, 3, 2, 54, 59, 3, 2, 65, 66, 3, 2, 68, 73, 2, 468, 2, 35, 3, 2, 2, 2, 4, 44, 3, 2, 2, 2, 6, 86, 3, 2, 2, 2, 8, 88, 3, 2, 2, 2, 10, 160, 3, 2, 2, 2, 12, 162, 3, 2, 2, 2, 14, 168, 3, 2, 2, 2, 16, 221, 3, 2, 2, 2, 18, 326, 3, 2, 2, 2, 20, 331, 3, 2, 2, 2, 22, 344, 3, 2, 2, 2, 24, 348, 3, 2, 2, 2, 26, 359, 3, 2, 2, 2, 28, 365, 3, 2, 2, 2, 30, 382, 3, 2, 2, 2, 32, 34, 5, 4, 3, 2, 33, 32, 3, 2, 2, 2, 34, 37, 3, 2, 2, 2, 35, 33, 3, 2, 2, 2, 35, 36, 3, 2, 2, 2, 36, 38, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 38, 39, 7, 2, 2, 3, 39, 3, 3, 2, 2, 2, 40, 41, 5, 6, 4, 2, 41, 42, 7, 3, 2, 2, 42, 45, 3, 2, 2, 2, 43, 45, 5, 10, 6, 2, 44, 40, 3, 2, 2, 2, 44, 43, 3, 2, 2, 2, 45, 5, 3, 2, 2, 2, 46, 47, 7, 4, 2, 2, 47, 54, 7, 78, 2, 2, 48, 49, 7, 5, 2, 2, 49, 55, 5, 28, 15, 2, 50, 51, 7, 6, 2, 2, 51, 55, 5, 28, 15, 2, 52, 53, 7, 7, 2, 2, 53, 55, 7, 78, 2, 2, 54, 48, 3, 2, 2, 2, 54, 50, 3, 2, 2, 2, 54, 52, 3, 2, 2, 2, 54, 55, 3, 2, 2, 2, 55, 87, 3, 2, 2, 2, 56, 87, 7, 8, 2, 2, 57, 59, 7, 9, 2, 2, 58, 60, 5, 18, 10, 2, 59, 58, 3, 2, 2, 2, 59, 60, 3, 2, 2, 2, 60, 87, 3, 2, 2, 2, 61, 62, 5, 30, 16, 2, 62, 65, 7, 78, 2, 2, 63, 64, 7, 10, 2, 2, 64, 66, 5, 18, 10, 2, 65, 63, 3, 2, 2, 2, 65, 66, 3, 2, 2, 2, 66, 87, 3, 2, 2, 2, 67, 68, 5, 8, 5, 2, 68, 69, 7, 10, 2, 2, 69, 71, 3, 2, 2, 2, 70, 67, 3, 2, 2, 2, 71, 74, 3, 2, 2, 2, 72, 70, 3, 2, 2, 2, 72, 73, 3, 2, 2, 2, 73, 75, 3, 2, 2, 2, 74, 72, 3, 2, 2, 2, 75, 87, 5, 18, 10, 2, 76, 77, 5, 16, 9, 2, 77, 78, 9, 2, 2, 2, 78, 79, 7, 10, 2, 2, 79, 80, 5, 16, 9, 2, 80, 87, 3, 2, 2, 2, 81, 87, 9, 3, 2, 2, 82, 84, 7, 25, 2, 2, 83, 85, 5, 18, 10, 2, 84, 83, 3, 2, 2, 2, 84, 85, 3, 2, 2, 2, 85, 87, 3, 2, 2, 2, 86, 46, 3, 2, 2, 2, 86, 56, 3, 2, 2, 2, 86, 57, 3, 2, 2, 2, 86, 61, 3, 2, 2, 2, 86, 72, 3, 2, 2, 2, 86, 76, 3, 2, 2, 2, 86, 81, 3, 2, 2, 2, 86, 82, 3, 2, 2, 2, 87, 7, 3, 2, 2, 2, 88, 93, 5, 16, 9, 2, 89, 90, 7, 26, 2, 2, 90, 92, 5, 16, 9, 2, 91, 89, 3, 2, 2, 2, 92, 95, 3, 2, 2, 2, 93, 91, 3, 2, 2, 2, 93, 94, 3, 2, 2, 2, 94, 9, 3, 2, 2, 2, 95, 93, 3, 2, 2, 2, 96, 97, 7, 27, 2, 2, 97, 98, 5, 16, 9, 2, 98, 99, 7, 28, 2, 2, 99, 107, 5, 14, 8, 2, 100, 101, 7, 29, 2, 2, 101, 102, 5, 16, 9, 2, 102, 103, 7, 28, 2, 2, 103, 104, 5, 14, 8, 2, 104, 106, 3, 2, 2, 2, 105, 100, 3, 2, 2, 2, 106, 109, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 107, 108, 3, 2, 2, 2, 108, 113, 3, 2, 2, 2, 109, 107, 3, 2, 2, 2, 110, 111, 7, 30, 2, 2, 111, 112, 7, 28, 2, 2, 112, 114, 5, 14, 8, 2, 113, 110, 3, 2, 2, 2, 113, 114, 3, 2, 2, 2, 114, 161, 3, 2, 2, 2, 115, 116, 7, 31, 2, 2, 116, 117, 5, 16, 9, 2, 117, 118, 7, 28, 2, 2, 118, 119, 5, 14, 8, 2, 119, 161, 3, 2, 2, 2, 120, 121, 7, 32, 2, 2, 121, 122, 5, 16, 9, 2, 122, 123, 7, 28, 2, 2, 123, 124, 5, 14, 8, 2, 124, 161, 3, 2, 2, 2, 125, 126, 7, 33, 2, 2, 126, 127, 5, 18, 10, 2, 127, 128, 7, 34, 2, 2, 128, 131, 5, 18, 10, 2, 129, 130, 7, 35, 2, 2, 130, 132, 5, 18, 10, 2, 131, 129, 3, 2, 2, 2, 131, 132, 3, 2, 2, 2, 132, 133, 3, 2, 2, 2, 133, 134, 7, 28, 2, 2, 134, 135, 5, 14, 8, 2, 135, 161, 3, 2, 2, 2, 136, 137, 7, 36, 2, 2, 137, 138, 7, 78, 2, 2, 138, 144, 7, 37, 2, 2, 139, 140, 5, 12, 7, 2, 140, 141, 7, 26, 2, 2, 141, 143, 3, 2, 2, 2, 142, 139, 3, 2, 2, 2, 143, 146, 3, 2, 2, 2, 144, 142, 3, 2, 2, 2, 144, 145, 3, 2, 2, 2, 145, 148, 3, 2, 2, 2, 146, 144, 3, 2, 2, 2, 147, 149, 5, 12, 7, 2, 148, 147, 3, 2, 2, 2, 148, 149, 3, 2, 2, 2, 149, 150, 3, 2, 2, 2, 150, 152, 7, 38, 2, 2, 151, 153, 5, 30, 16, 2, 152, 151, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 158, 3, 2, 2, 2, 154, 155, 7, 39, 2, 2, 155, 159, 5, 14, 8, 2, 156, 157, 7, 40, 2, 2, 157, 159, 7, 3, 2, 2, 158, 154, 3, 2, 2, 2, 158, 156, 3, 2, 2, 2, 159, 161, 3, 2, 2, 2, 160, 96, 3, 2, 2, 2, 160, 115, 3, 2, 2, 2, 160, 120, 3, 2, 2, 2, 160, 125, 3, 2, 2, 2, 160, 136, 3, 2, 2, 2, 161, 11, 3, 2, 2, 2, 162, 163, 5, 30, 16, 2, 163, 166, 7, 78, 2, 2, 164, 165, 7, 41, 2, 2, 165, 167, 5, 16, 9, 2, 166, 164, 3, 2, 2, 2, 166, 167, 3, 2, 2, 2, 167, 13, 3, 2, 2, 2, 168, 170, 7, 42, 2, 2, 169, 171, 5, 4, 3, 2, 170, 169, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 170, 3, 2, 2, 2, 172, 173, 3, 2, 2, 2, 173, 174, 3, 2, 2, 2, 174, 175, 7, 43, 2, 2, 175, 15, 3, 2, 2, 2, 176, 177, 8, 9, 1, 2, 177, 222, 5, 26, 14, 2, 178, 179, 7, 37, 2, 2, 179, 180, 5, 18, 10, 2, 180, 181, 7, 38, 2, 2, 181, 222, 3, 2, 2, 2, 182, 188, 7, 44, 2, 2, 183, 184, 5, 16, 9, 2, 184, 185, 7, 26, 2, 2, 185, 187, 3, 2, 2, 2, 186, 183, 3, 2, 2, 2, 187, 190, 3, 2, 2, 2, 188, 186, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 192, 3, 2, 2, 2, 190, 188, 3, 2, 2, 2, 191, 193, 5, 16, 9, 2, 192, 191, 3, 2, 2, 2, 192, 193, 3, 2, 2, 2, 193, 194, 3, 2, 2, 2, 194, 222, 7, 45, 2, 2, 195, 196, 7, 44, 2, 2, 196, 198, 5, 16, 9, 2, 197, 199, 5, 22, 12, 2, 198, 197, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 198, 3, 2, 2, 2, 200, 201, 3, 2, 2, 2, 201, 202, 3, 2, 2, 2, 202, 203, 7, 45, 2, 2, 203, 222, 3, 2, 2, 2, 204, 205, 9, 4, 2, 2, 205, 222, 5, 16, 9, 19, 206, 207, 7, 60, 2, 2, 207, 222, 5, 16, 9, 8, 208, 213, 7, 63, 2, 2, 209, 210, 7, 78, 2, 2, 210, 212, 7, 26, 2, 2, 211, 209, 3, 2, 2, 2, 212, 215, 3, 2, 2, 2, 213, 211, 3, 2, 2, 2, 213, 214, 3, 2, 2, 2, 214, 217, 3, 2, 2, 2, 215, 213, 3, 2, 2, 2, 216, 218, 7, 78, 2, 2, 217, 216, 3, 2, 2, 2, 217, 218, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 220, 7, 64, 2, 2, 220, 222, 5, 16, 9, 3, 221, 176, 3, 2, 2, 2, 221, 178, 3, 2, 2, 2, 221, 182, 3, 2, 2, 2, 221, 195, 3, 2, 2, 2, 221, 204, 3, 2, 2, 2, 221, 206, 3, 2, 2, 2, 221, 208, 3, 2, 2, 2, 222, 318, 3, 2, 2, 2, 223, 224, 12, 20, 2, 2, 224, 225, 7, 11, 2, 2, 225, 317, 5, 16, 9, 20, 226, 227, 12, 18, 2, 2, 227, 228, 9, 5, 2, 2, 228, 317, 5, 16, 9, 19, 229, 230, 12, 17, 2, 2, 230, 231, 9, 6, 2, 2, 231, 317, 5, 16, 9, 18, 232, 233, 12, 16, 2, 2, 233, 234, 9, 7, 2, 2, 234, 317, 5, 16, 9, 17, 235, 236, 12, 15, 2, 2, 236, 237, 7, 19, 2, 2, 237, 317, 5, 16, 9, 16, 238, 239, 12, 14, 2, 2, 239, 240, 7, 20, 2, 2, 240, 317, 5, 16, 9, 15, 241, 242, 12, 13, 2, 2, 242, 243, 7, 21, 2, 2, 243, 317, 5, 16, 9, 14, 244, 245, 12, 12, 2, 2, 245, 246, 9, 8, 2, 2, 246, 317, 5, 16, 9, 13, 247, 248, 12, 10, 2, 2, 248, 249, 9, 9, 2, 2, 249, 317, 5, 16, 9, 11, 250, 251, 12, 9, 2, 2, 251, 252, 9, 10, 2, 2, 252, 317, 5, 16, 9, 9, 253, 254, 12, 7, 2, 2, 254, 255, 7, 61, 2, 2, 255, 317, 5, 16, 9, 7, 256, 257, 12, 6, 2, 2, 257, 258, 7, 62, 2, 2, 258, 317, 5, 16, 9, 6, 259, 260, 12, 5, 2, 2, 260, 261, 7, 22, 2, 2, 261, 317, 5, 16, 9, 5, 262, 263, 12, 4, 2, 2, 263, 264, 7, 46, 2, 2, 264, 265, 5, 16, 9, 2, 265, 266, 7, 41, 2, 2, 266, 267, 5, 16, 9, 4, 267, 317, 3, 2, 2, 2, 268, 270, 12, 25, 2, 2, 269, 271, 7, 46, 2, 2, 270, 269, 3, 2, 2, 2, 270, 271, 3, 2, 2, 2, 271, 272, 3, 2, 2, 2, 272, 273, 7, 44, 2, 2, 273, 274, 5, 18, 10, 2, 274, 275, 7, 45, 2, 2, 275, 317, 3, 2, 2, 2, 276, 277, 12, 24, 2, 2, 277, 279, 7, 44, 2, 2, 278, 280, 5, 16, 9, 2, 279, 278, 3, 2, 2, 2, 279, 280, 3, 2, 2, 2, 280, 281, 3, 2, 2, 2, 281, 283, 7, 41, 2, 2, 282, 284, 5, 16, 9, 2, 283, 282, 3, 2, 2, 2, 283, 284, 3, 2, 2, 2, 284, 289, 3, 2, 2, 2, 285, 287, 7, 41, 2, 2, 286, 288, 5, 16, 9, 2, 287, 286, 3, 2, 2, 2, 287, 288, 3, 2, 2, 2, 288, 290, 3, 2, 2, 2, 289, 285, 3, 2, 2, 2, 289, 290, 3, 2, 2, 2, 290, 291, 3, 2, 2, 2, 291, 317, 7, 45, 2, 2, 292, 294, 12, 23, 2, 2, 293, 295, 7, 46, 2, 2, 294, 293, 3, 2, 2, 2, 294, 295, 3, 2, 2, 2, 295, 296, 3, 2, 2, 2, 296, 297, 7, 47, 2, 2, 297, 317, 7, 78, 2, 2, 298, 299, 12, 22, 2, 2, 299, 305, 7, 37, 2, 2, 300, 301, 5, 24, 13, 2, 301, 302, 7, 26, 2, 2, 302, 304, 3, 2, 2, 2, 303, 300, 3, 2, 2, 2, 304, 307, 3, 2, 2, 2, 305, 303, 3, 2, 2, 2, 305, 306, 3, 2, 2, 2, 306, 309, 3, 2, 2, 2, 307, 305, 3, 2, 2, 2, 308, 310, 5, 24, 13, 2, 309, 308, 3, 2, 2, 2, 309, 310, 3, 2, 2, 2, 310, 311, 3, 2, 2, 2, 311, 317, 7, 38, 2, 2, 312, 313, 12, 21, 2, 2, 313, 317, 7, 48, 2, 2, 314, 315, 12, 11, 2, 2, 315, 317, 7, 51, 2, 2, 316, 223, 3, 2, 2, 2, 316, 226, 3, 2, 2, 2, 316, 229, 3, 2, 2, 2, 316, 232, 3, 2, 2, 2, 316, 235, 3, 2, 2, 2, 316, 238, 3, 2, 2, 2, 316, 241, 3, 2, 2, 2, 316, 244, 3, 2, 2, 2, 316, 247, 3, 2, 2, 2, 316, 250, 3, 2, 2, 2, 316, 253, 3, 2, 2, 2, 316, 256, 3, 2, 2, 2, 316, 259, 3, 2, 2, 2, 316, 262, 3, 2, 2, 2, 316, 268, 3, 2, 2, 2, 316, 276, 3, 2, 2, 2, 316, 292, 3, 2, 2, 2, 316, 298, 3, 2, 2, 2, 316, 312, 3, 2, 2, 2, 316, 314, 3, 2, 2, 2, 317, 320, 3, 2, 2, 2, 318, 316, 3, 2, 2, 2, 318, 319, 3, 2, 2, 2, 319, 17, 3, 2, 2, 2, 320, 318, 3, 2, 2, 2, 321, 322, 5, 16, 9, 2, 322, 323, 7, 26, 2, 2, 323, 325, 3, 2, 2, 2, 324, 321, 3, 2, 2, 2, 325, 328, 3, 2, 2, 2, 326, 324, 3, 2, 2, 2, 326, 327, 3, 2, 2, 2, 327, 329, 3, 2, 2, 2, 328, 326, 3, 2, 2, 2, 329, 330, 5, 16, 9, 2, 330, 19, 3, 2, 2, 2, 331, 332, 5, 18, 10, 2, 332, 333, 7, 2, 2, 3, 333, 21, 3, 2, 2, 2, 334, 335, 7, 33, 2, 2, 335, 336, 5, 18, 10, 2, 336, 337, 7, 34, 2, 2, 337, 340, 5, 18, 10, 2, 338, 339, 7, 35, 2, 2, 339, 341, 5, 18, 10, 2, 340, 338, 3, 2, 2, 2, 340, 341, 3, 2, 2, 2, 341, 345, 3, 2, 2, 2, 342, 343, 7, 27, 2, 2, 343, 345, 5, 16, 9, 2, 344, 334, 3, 2, 2, 2, 344, 342, 3, 2, 2, 2, 345, 23, 3, 2, 2, 2, 346, 347, 7, 78, 2, 2, 347, 349, 7, 10, 2, 2, 348, 346, 3, 2, 2, 2, 348, 349, 3, 2, 2, 2, 349, 350, 3, 2, 2, 2, 350, 351, 5, 16, 9, 2, 351, 25, 3, 2, 2, 2, 352, 360, 7, 74, 2, 2, 353, 360, 7, 75, 2, 2, 354, 360, 9, 11, 2, 2, 355, 360, 7, 76, 2, 2, 356, 360, 7, 77, 2, 2, 357, 360, 7, 67, 2, 2, 358, 360, 7, 78, 2, 2, 359, 352, 3, 2, 2, 2, 359, 353, 3, 2, 2, 2, 359, 354, 3, 2, 2, 2, 359, 355, 3, 2, 2, 2, 359, 356, 3, 2, 2, 2, 359, 357, 3, 2, 2, 2, 359, 358, 3, 2, 2, 2, 360, 27, 3, 2, 2, 2, 361, 362, 7, 78, 2, 2, 362, 364, 7, 26, 2, 2, 363, 361, 3, 2, 2, 2, 364, 367, 3, 2, 2, 2, 365, 363, 3, 2, 2, 2, 365, 366, 3, 2, 2, 2, 366, 368, 3, 2, 2, 2, 367, 365, 3, 2, 2, 2, 368, 369, 7, 78, 2, 2, 369, 29, 3, 2, 2, 2, 370, 371, 8, 16, 1, 2, 371, 383, 9, 12, 2, 2, 372, 373, 7, 37, 2, 2, 373, 374, 5, 30, 16, 2, 374, 375, 7, 38, 2, 2, 375, 383, 3, 2, 2, 2, 376, 377, 7, 44, 2, 2, 377, 378, 5, 30, 16, 2, 378, 379, 7, 45, 2, 2, 379, 383, 3, 2, 2, 2, 380, 381, 7, 64, 2, 2, 381, 383, 5, 30, 16, 3, 382, 370, 3, 2, 2, 2, 382, 372, 3, 2, 2, 2, 382, 376, 3, 2, 2, 2, 382, 380, 3, 2, 2, 2, 383, 394, 3, 2, 2, 2, 384, 385, 12, 5, 2, 2, 385, 386, 7, 12, 2, 2, 386, 393, 5, 30, 16, 5, 387, 388, 12, 4, 2, 2, 388, 389, 7, 64, 2, 2, 389, 393, 5, 30, 16, 4, 390, 391, 12, 6, 2, 2, 391, 393, 7, 46, 2, 2, 392, 384, 3, 2, 2, 2, 392, 387, 3, 2, 2, 2, 392, 390, 3, 2, 2, 2, 393, 396, 3, 2, 2, 2, 394, 392, 3, 2, 2, 2, 394, 395, 3, 2, 2, 2, 395, 31, 3, 2, 2, 2, 396, 394, 3, 2, 2, 2, 46, 35, 44, 54, 59, 65, 72, 84, 86, 93, 107, 113, 131, 144, 148, 152, 158, 160, 166, 172, 188, 192, 200, 213, 217, 221, 270, 279, 283, 287, 289, 294, 305, 309, 316, 318, 326, 340, 344, 348, 359, 365, 382, 392, 394] \ No newline at end of file diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index 05228c45..76d9a4fd 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -9,7 +9,7 @@ def serializedATN(): with StringIO() as buf: buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3Q") - buf.write("\u018b\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\u018e\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16") buf.write("\t\16\4\17\t\17\4\20\t\20\3\2\7\2\"\n\2\f\2\16\2%\13\2") buf.write("\3\2\3\2\3\3\3\3\3\3\3\3\5\3-\n\3\3\4\3\4\3\4\3\4\3\4") @@ -31,176 +31,178 @@ def serializedATN(): buf.write("\3\t\3\t\5\t\u00de\n\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") buf.write("\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") - buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") - buf.write("\t\3\t\3\t\3\t\3\t\5\t\u0115\n\t\3\t\3\t\5\t\u0119\n\t") - buf.write("\3\t\3\t\5\t\u011d\n\t\5\t\u011f\n\t\3\t\3\t\3\t\5\t\u0124") - buf.write("\n\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\7\t\u012d\n\t\f\t\16") - buf.write("\t\u0130\13\t\3\t\5\t\u0133\n\t\3\t\3\t\3\t\3\t\3\t\7") - buf.write("\t\u013a\n\t\f\t\16\t\u013d\13\t\3\n\3\n\3\n\7\n\u0142") - buf.write("\n\n\f\n\16\n\u0145\13\n\3\n\3\n\3\13\3\13\3\13\3\f\3") - buf.write("\f\3\f\3\f\3\f\3\f\5\f\u0152\n\f\3\f\3\f\5\f\u0156\n\f") - buf.write("\3\r\3\r\5\r\u015a\n\r\3\r\3\r\3\16\3\16\3\16\3\16\3\16") - buf.write("\3\16\3\16\5\16\u0165\n\16\3\17\3\17\7\17\u0169\n\17\f") - buf.write("\17\16\17\u016c\13\17\3\17\3\17\3\20\3\20\3\20\3\20\3") - buf.write("\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\5\20\u017c\n\20") - buf.write("\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\7\20\u0186\n") - buf.write("\20\f\20\16\20\u0189\13\20\3\20\2\4\20\36\21\2\4\6\b\n") - buf.write("\f\16\20\22\24\26\30\32\34\36\2\r\3\2\13\26\3\2\27\30") - buf.write("\4\2\17\20\61\61\3\2\f\16\3\2\17\20\3\2\21\22\3\2\62\63") - buf.write("\3\2\64\65\3\2\66;\3\2AB\3\2DI\2\u01d0\2#\3\2\2\2\4,\3") - buf.write("\2\2\2\6V\3\2\2\2\bX\3\2\2\2\n\u00a0\3\2\2\2\f\u00a2\3") - buf.write("\2\2\2\16\u00a8\3\2\2\2\20\u00dd\3\2\2\2\22\u0143\3\2") - buf.write("\2\2\24\u0148\3\2\2\2\26\u0155\3\2\2\2\30\u0159\3\2\2") - buf.write("\2\32\u0164\3\2\2\2\34\u016a\3\2\2\2\36\u017b\3\2\2\2") - buf.write(" \"\5\4\3\2! \3\2\2\2\"%\3\2\2\2#!\3\2\2\2#$\3\2\2\2$") - buf.write("&\3\2\2\2%#\3\2\2\2&\'\7\2\2\3\'\3\3\2\2\2()\5\6\4\2)") - buf.write("*\7\3\2\2*-\3\2\2\2+-\5\n\6\2,(\3\2\2\2,+\3\2\2\2-\5\3") - buf.write("\2\2\2./\7\4\2\2/\66\7N\2\2\60\61\7\5\2\2\61\67\5\34\17") - buf.write("\2\62\63\7\6\2\2\63\67\5\34\17\2\64\65\7\7\2\2\65\67\7") - buf.write("N\2\2\66\60\3\2\2\2\66\62\3\2\2\2\66\64\3\2\2\2\66\67") - buf.write("\3\2\2\2\67W\3\2\2\28W\7\b\2\29;\7\t\2\2:<\5\22\n\2;:") - buf.write("\3\2\2\2;<\3\2\2\2\5\36\20\2>A\7N\2\2?@\7") - buf.write("\n\2\2@B\5\22\n\2A?\3\2\2\2AB\3\2\2\2BW\3\2\2\2CD\5\b") - buf.write("\5\2DE\7\n\2\2EG\3\2\2\2FC\3\2\2\2GJ\3\2\2\2HF\3\2\2\2") - buf.write("HI\3\2\2\2IK\3\2\2\2JH\3\2\2\2KW\5\22\n\2LM\5\20\t\2M") - buf.write("N\t\2\2\2NO\7\n\2\2OP\5\20\t\2PW\3\2\2\2QW\t\3\2\2RT\7") - buf.write("\31\2\2SU\5\22\n\2TS\3\2\2\2TU\3\2\2\2UW\3\2\2\2V.\3\2") - buf.write("\2\2V8\3\2\2\2V9\3\2\2\2V=\3\2\2\2VH\3\2\2\2VL\3\2\2\2") - buf.write("VQ\3\2\2\2VR\3\2\2\2W\7\3\2\2\2X]\5\20\t\2YZ\7\32\2\2") - buf.write("Z\\\5\20\t\2[Y\3\2\2\2\\_\3\2\2\2][\3\2\2\2]^\3\2\2\2") - buf.write("^\t\3\2\2\2_]\3\2\2\2`a\7\33\2\2ab\5\20\t\2bc\7\34\2\2") - buf.write("ck\5\16\b\2de\7\35\2\2ef\5\20\t\2fg\7\34\2\2gh\5\16\b") - buf.write("\2hj\3\2\2\2id\3\2\2\2jm\3\2\2\2ki\3\2\2\2kl\3\2\2\2l") - buf.write("q\3\2\2\2mk\3\2\2\2no\7\36\2\2op\7\34\2\2pr\5\16\b\2q") - buf.write("n\3\2\2\2qr\3\2\2\2r\u00a1\3\2\2\2st\7\37\2\2tu\5\20\t") - buf.write("\2uv\7\34\2\2vw\5\16\b\2w\u00a1\3\2\2\2xy\7 \2\2yz\5\20") - buf.write("\t\2z{\7\34\2\2{|\5\16\b\2|\u00a1\3\2\2\2}~\7!\2\2~\177") - buf.write("\5\22\n\2\177\u0080\7\"\2\2\u0080\u0083\5\22\n\2\u0081") - buf.write("\u0082\7#\2\2\u0082\u0084\5\22\n\2\u0083\u0081\3\2\2\2") - buf.write("\u0083\u0084\3\2\2\2\u0084\u0085\3\2\2\2\u0085\u0086\7") - buf.write("\34\2\2\u0086\u0087\5\16\b\2\u0087\u00a1\3\2\2\2\u0088") - buf.write("\u0089\7$\2\2\u0089\u008a\7N\2\2\u008a\u0090\7%\2\2\u008b") - buf.write("\u008c\5\f\7\2\u008c\u008d\7\32\2\2\u008d\u008f\3\2\2") - buf.write("\2\u008e\u008b\3\2\2\2\u008f\u0092\3\2\2\2\u0090\u008e") - buf.write("\3\2\2\2\u0090\u0091\3\2\2\2\u0091\u0094\3\2\2\2\u0092") - buf.write("\u0090\3\2\2\2\u0093\u0095\5\f\7\2\u0094\u0093\3\2\2\2") - buf.write("\u0094\u0095\3\2\2\2\u0095\u0096\3\2\2\2\u0096\u0098\7") - buf.write("&\2\2\u0097\u0099\5\36\20\2\u0098\u0097\3\2\2\2\u0098") - buf.write("\u0099\3\2\2\2\u0099\u009e\3\2\2\2\u009a\u009b\7\'\2\2") - buf.write("\u009b\u009f\5\16\b\2\u009c\u009d\7(\2\2\u009d\u009f\7") - buf.write("\3\2\2\u009e\u009a\3\2\2\2\u009e\u009c\3\2\2\2\u009f\u00a1") - buf.write("\3\2\2\2\u00a0`\3\2\2\2\u00a0s\3\2\2\2\u00a0x\3\2\2\2") - buf.write("\u00a0}\3\2\2\2\u00a0\u0088\3\2\2\2\u00a1\13\3\2\2\2\u00a2") - buf.write("\u00a3\5\36\20\2\u00a3\u00a6\7N\2\2\u00a4\u00a5\7)\2\2") - buf.write("\u00a5\u00a7\5\20\t\2\u00a6\u00a4\3\2\2\2\u00a6\u00a7") - buf.write("\3\2\2\2\u00a7\r\3\2\2\2\u00a8\u00aa\7*\2\2\u00a9\u00ab") - buf.write("\5\4\3\2\u00aa\u00a9\3\2\2\2\u00ab\u00ac\3\2\2\2\u00ac") - buf.write("\u00aa\3\2\2\2\u00ac\u00ad\3\2\2\2\u00ad\u00ae\3\2\2\2") - buf.write("\u00ae\u00af\7+\2\2\u00af\17\3\2\2\2\u00b0\u00b1\b\t\1") - buf.write("\2\u00b1\u00de\5\32\16\2\u00b2\u00b3\7%\2\2\u00b3\u00b4") - buf.write("\5\22\n\2\u00b4\u00b5\7&\2\2\u00b5\u00de\3\2\2\2\u00b6") - buf.write("\u00bc\7,\2\2\u00b7\u00b8\5\20\t\2\u00b8\u00b9\7\32\2") - buf.write("\2\u00b9\u00bb\3\2\2\2\u00ba\u00b7\3\2\2\2\u00bb\u00be") - buf.write("\3\2\2\2\u00bc\u00ba\3\2\2\2\u00bc\u00bd\3\2\2\2\u00bd") - buf.write("\u00c0\3\2\2\2\u00be\u00bc\3\2\2\2\u00bf\u00c1\5\20\t") - buf.write("\2\u00c0\u00bf\3\2\2\2\u00c0\u00c1\3\2\2\2\u00c1\u00c2") - buf.write("\3\2\2\2\u00c2\u00de\7-\2\2\u00c3\u00c4\7,\2\2\u00c4\u00c6") - buf.write("\5\20\t\2\u00c5\u00c7\5\26\f\2\u00c6\u00c5\3\2\2\2\u00c7") - buf.write("\u00c8\3\2\2\2\u00c8\u00c6\3\2\2\2\u00c8\u00c9\3\2\2\2") - buf.write("\u00c9\u00ca\3\2\2\2\u00ca\u00cb\7-\2\2\u00cb\u00de\3") - buf.write("\2\2\2\u00cc\u00cd\t\4\2\2\u00cd\u00de\5\20\t\23\u00ce") - buf.write("\u00cf\7<\2\2\u00cf\u00de\5\20\t\b\u00d0\u00d5\7?\2\2") - buf.write("\u00d1\u00d2\7N\2\2\u00d2\u00d4\7\32\2\2\u00d3\u00d1\3") - buf.write("\2\2\2\u00d4\u00d7\3\2\2\2\u00d5\u00d3\3\2\2\2\u00d5\u00d6") - buf.write("\3\2\2\2\u00d6\u00d9\3\2\2\2\u00d7\u00d5\3\2\2\2\u00d8") - buf.write("\u00da\7N\2\2\u00d9\u00d8\3\2\2\2\u00d9\u00da\3\2\2\2") - buf.write("\u00da\u00db\3\2\2\2\u00db\u00dc\7@\2\2\u00dc\u00de\5") - buf.write("\20\t\3\u00dd\u00b0\3\2\2\2\u00dd\u00b2\3\2\2\2\u00dd") - buf.write("\u00b6\3\2\2\2\u00dd\u00c3\3\2\2\2\u00dd\u00cc\3\2\2\2") - buf.write("\u00dd\u00ce\3\2\2\2\u00dd\u00d0\3\2\2\2\u00de\u013b\3") - buf.write("\2\2\2\u00df\u00e0\f\24\2\2\u00e0\u00e1\7\13\2\2\u00e1") - buf.write("\u013a\5\20\t\24\u00e2\u00e3\f\22\2\2\u00e3\u00e4\t\5") - buf.write("\2\2\u00e4\u013a\5\20\t\23\u00e5\u00e6\f\21\2\2\u00e6") - buf.write("\u00e7\t\6\2\2\u00e7\u013a\5\20\t\22\u00e8\u00e9\f\20") - buf.write("\2\2\u00e9\u00ea\t\7\2\2\u00ea\u013a\5\20\t\21\u00eb\u00ec") - buf.write("\f\17\2\2\u00ec\u00ed\7\23\2\2\u00ed\u013a\5\20\t\20\u00ee") - buf.write("\u00ef\f\16\2\2\u00ef\u00f0\7\24\2\2\u00f0\u013a\5\20") - buf.write("\t\17\u00f1\u00f2\f\r\2\2\u00f2\u00f3\7\25\2\2\u00f3\u013a") - buf.write("\5\20\t\16\u00f4\u00f5\f\f\2\2\u00f5\u00f6\t\b\2\2\u00f6") - buf.write("\u013a\5\20\t\r\u00f7\u00f8\f\n\2\2\u00f8\u00f9\t\t\2") - buf.write("\2\u00f9\u013a\5\20\t\13\u00fa\u00fb\f\t\2\2\u00fb\u00fc") - buf.write("\t\n\2\2\u00fc\u013a\5\20\t\t\u00fd\u00fe\f\7\2\2\u00fe") - buf.write("\u00ff\7=\2\2\u00ff\u013a\5\20\t\7\u0100\u0101\f\6\2\2") - buf.write("\u0101\u0102\7>\2\2\u0102\u013a\5\20\t\6\u0103\u0104\f") - buf.write("\5\2\2\u0104\u0105\7\26\2\2\u0105\u013a\5\20\t\5\u0106") - buf.write("\u0107\f\4\2\2\u0107\u0108\7.\2\2\u0108\u0109\5\20\t\2") - buf.write("\u0109\u010a\7)\2\2\u010a\u010b\5\20\t\4\u010b\u013a\3") - buf.write("\2\2\2\u010c\u010d\f\31\2\2\u010d\u010e\7,\2\2\u010e\u010f") - buf.write("\5\22\n\2\u010f\u0110\7-\2\2\u0110\u013a\3\2\2\2\u0111") - buf.write("\u0112\f\30\2\2\u0112\u0114\7,\2\2\u0113\u0115\5\20\t") - buf.write("\2\u0114\u0113\3\2\2\2\u0114\u0115\3\2\2\2\u0115\u0116") - buf.write("\3\2\2\2\u0116\u0118\7)\2\2\u0117\u0119\5\20\t\2\u0118") - buf.write("\u0117\3\2\2\2\u0118\u0119\3\2\2\2\u0119\u011e\3\2\2\2") - buf.write("\u011a\u011c\7)\2\2\u011b\u011d\5\20\t\2\u011c\u011b\3") - buf.write("\2\2\2\u011c\u011d\3\2\2\2\u011d\u011f\3\2\2\2\u011e\u011a") - buf.write("\3\2\2\2\u011e\u011f\3\2\2\2\u011f\u0120\3\2\2\2\u0120") - buf.write("\u013a\7-\2\2\u0121\u0123\f\27\2\2\u0122\u0124\7.\2\2") - buf.write("\u0123\u0122\3\2\2\2\u0123\u0124\3\2\2\2\u0124\u0125\3") - buf.write("\2\2\2\u0125\u0126\7/\2\2\u0126\u013a\7N\2\2\u0127\u0128") - buf.write("\f\26\2\2\u0128\u012e\7%\2\2\u0129\u012a\5\30\r\2\u012a") - buf.write("\u012b\7\32\2\2\u012b\u012d\3\2\2\2\u012c\u0129\3\2\2") - buf.write("\2\u012d\u0130\3\2\2\2\u012e\u012c\3\2\2\2\u012e\u012f") - buf.write("\3\2\2\2\u012f\u0132\3\2\2\2\u0130\u012e\3\2\2\2\u0131") - buf.write("\u0133\5\30\r\2\u0132\u0131\3\2\2\2\u0132\u0133\3\2\2") - buf.write("\2\u0133\u0134\3\2\2\2\u0134\u013a\7&\2\2\u0135\u0136") - buf.write("\f\25\2\2\u0136\u013a\7\60\2\2\u0137\u0138\f\13\2\2\u0138") - buf.write("\u013a\7\63\2\2\u0139\u00df\3\2\2\2\u0139\u00e2\3\2\2") - buf.write("\2\u0139\u00e5\3\2\2\2\u0139\u00e8\3\2\2\2\u0139\u00eb") - buf.write("\3\2\2\2\u0139\u00ee\3\2\2\2\u0139\u00f1\3\2\2\2\u0139") - buf.write("\u00f4\3\2\2\2\u0139\u00f7\3\2\2\2\u0139\u00fa\3\2\2\2") - buf.write("\u0139\u00fd\3\2\2\2\u0139\u0100\3\2\2\2\u0139\u0103\3") - buf.write("\2\2\2\u0139\u0106\3\2\2\2\u0139\u010c\3\2\2\2\u0139\u0111") - buf.write("\3\2\2\2\u0139\u0121\3\2\2\2\u0139\u0127\3\2\2\2\u0139") - buf.write("\u0135\3\2\2\2\u0139\u0137\3\2\2\2\u013a\u013d\3\2\2\2") - buf.write("\u013b\u0139\3\2\2\2\u013b\u013c\3\2\2\2\u013c\21\3\2") - buf.write("\2\2\u013d\u013b\3\2\2\2\u013e\u013f\5\20\t\2\u013f\u0140") - buf.write("\7\32\2\2\u0140\u0142\3\2\2\2\u0141\u013e\3\2\2\2\u0142") - buf.write("\u0145\3\2\2\2\u0143\u0141\3\2\2\2\u0143\u0144\3\2\2\2") - buf.write("\u0144\u0146\3\2\2\2\u0145\u0143\3\2\2\2\u0146\u0147\5") - buf.write("\20\t\2\u0147\23\3\2\2\2\u0148\u0149\5\22\n\2\u0149\u014a") - buf.write("\7\2\2\3\u014a\25\3\2\2\2\u014b\u014c\7!\2\2\u014c\u014d") - buf.write("\5\22\n\2\u014d\u014e\7\"\2\2\u014e\u0151\5\22\n\2\u014f") - buf.write("\u0150\7#\2\2\u0150\u0152\5\22\n\2\u0151\u014f\3\2\2\2") - buf.write("\u0151\u0152\3\2\2\2\u0152\u0156\3\2\2\2\u0153\u0154\7") - buf.write("\33\2\2\u0154\u0156\5\20\t\2\u0155\u014b\3\2\2\2\u0155") - buf.write("\u0153\3\2\2\2\u0156\27\3\2\2\2\u0157\u0158\7N\2\2\u0158") - buf.write("\u015a\7\n\2\2\u0159\u0157\3\2\2\2\u0159\u015a\3\2\2\2") - buf.write("\u015a\u015b\3\2\2\2\u015b\u015c\5\20\t\2\u015c\31\3\2") - buf.write("\2\2\u015d\u0165\7J\2\2\u015e\u0165\7K\2\2\u015f\u0165") - buf.write("\t\13\2\2\u0160\u0165\7L\2\2\u0161\u0165\7M\2\2\u0162") - buf.write("\u0165\7C\2\2\u0163\u0165\7N\2\2\u0164\u015d\3\2\2\2\u0164") - buf.write("\u015e\3\2\2\2\u0164\u015f\3\2\2\2\u0164\u0160\3\2\2\2") - buf.write("\u0164\u0161\3\2\2\2\u0164\u0162\3\2\2\2\u0164\u0163\3") - buf.write("\2\2\2\u0165\33\3\2\2\2\u0166\u0167\7N\2\2\u0167\u0169") - buf.write("\7\32\2\2\u0168\u0166\3\2\2\2\u0169\u016c\3\2\2\2\u016a") - buf.write("\u0168\3\2\2\2\u016a\u016b\3\2\2\2\u016b\u016d\3\2\2\2") - buf.write("\u016c\u016a\3\2\2\2\u016d\u016e\7N\2\2\u016e\35\3\2\2") - buf.write("\2\u016f\u0170\b\20\1\2\u0170\u017c\t\f\2\2\u0171\u0172") - buf.write("\7%\2\2\u0172\u0173\5\36\20\2\u0173\u0174\7&\2\2\u0174") - buf.write("\u017c\3\2\2\2\u0175\u0176\7,\2\2\u0176\u0177\5\36\20") - buf.write("\2\u0177\u0178\7-\2\2\u0178\u017c\3\2\2\2\u0179\u017a") - buf.write("\7@\2\2\u017a\u017c\5\36\20\3\u017b\u016f\3\2\2\2\u017b") - buf.write("\u0171\3\2\2\2\u017b\u0175\3\2\2\2\u017b\u0179\3\2\2\2") - buf.write("\u017c\u0187\3\2\2\2\u017d\u017e\f\5\2\2\u017e\u017f\7") - buf.write("\f\2\2\u017f\u0186\5\36\20\5\u0180\u0181\f\4\2\2\u0181") - buf.write("\u0182\7@\2\2\u0182\u0186\5\36\20\4\u0183\u0184\f\6\2") - buf.write("\2\u0184\u0186\7.\2\2\u0185\u017d\3\2\2\2\u0185\u0180") - buf.write("\3\2\2\2\u0185\u0183\3\2\2\2\u0186\u0189\3\2\2\2\u0187") - buf.write("\u0185\3\2\2\2\u0187\u0188\3\2\2\2\u0188\37\3\2\2\2\u0189") - buf.write("\u0187\3\2\2\2-#,\66;AHTV]kq\u0083\u0090\u0094\u0098\u009e") - buf.write("\u00a0\u00a6\u00ac\u00bc\u00c0\u00c8\u00d5\u00d9\u00dd") - buf.write("\u0114\u0118\u011c\u011e\u0123\u012e\u0132\u0139\u013b") - buf.write("\u0143\u0151\u0155\u0159\u0164\u016a\u017b\u0185\u0187") + buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\5\t\u010f") + buf.write("\n\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\5\t\u0118\n\t\3\t\3\t") + buf.write("\5\t\u011c\n\t\3\t\3\t\5\t\u0120\n\t\5\t\u0122\n\t\3\t") + buf.write("\3\t\3\t\5\t\u0127\n\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\7\t") + buf.write("\u0130\n\t\f\t\16\t\u0133\13\t\3\t\5\t\u0136\n\t\3\t\3") + buf.write("\t\3\t\3\t\3\t\7\t\u013d\n\t\f\t\16\t\u0140\13\t\3\n\3") + buf.write("\n\3\n\7\n\u0145\n\n\f\n\16\n\u0148\13\n\3\n\3\n\3\13") + buf.write("\3\13\3\13\3\f\3\f\3\f\3\f\3\f\3\f\5\f\u0155\n\f\3\f\3") + buf.write("\f\5\f\u0159\n\f\3\r\3\r\5\r\u015d\n\r\3\r\3\r\3\16\3") + buf.write("\16\3\16\3\16\3\16\3\16\3\16\5\16\u0168\n\16\3\17\3\17") + buf.write("\7\17\u016c\n\17\f\17\16\17\u016f\13\17\3\17\3\17\3\20") + buf.write("\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20") + buf.write("\5\20\u017f\n\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3") + buf.write("\20\7\20\u0189\n\20\f\20\16\20\u018c\13\20\3\20\2\4\20") + buf.write("\36\21\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36\2\r\3\2") + buf.write("\13\26\3\2\27\30\4\2\17\20\61\61\3\2\f\16\3\2\17\20\3") + buf.write("\2\21\22\3\2\62\63\3\2\64\65\3\2\66;\3\2AB\3\2DI\2\u01d4") + buf.write("\2#\3\2\2\2\4,\3\2\2\2\6V\3\2\2\2\bX\3\2\2\2\n\u00a0\3") + buf.write("\2\2\2\f\u00a2\3\2\2\2\16\u00a8\3\2\2\2\20\u00dd\3\2\2") + buf.write("\2\22\u0146\3\2\2\2\24\u014b\3\2\2\2\26\u0158\3\2\2\2") + buf.write("\30\u015c\3\2\2\2\32\u0167\3\2\2\2\34\u016d\3\2\2\2\36") + buf.write("\u017e\3\2\2\2 \"\5\4\3\2! \3\2\2\2\"%\3\2\2\2#!\3\2\2") + buf.write("\2#$\3\2\2\2$&\3\2\2\2%#\3\2\2\2&\'\7\2\2\3\'\3\3\2\2") + buf.write("\2()\5\6\4\2)*\7\3\2\2*-\3\2\2\2+-\5\n\6\2,(\3\2\2\2,") + buf.write("+\3\2\2\2-\5\3\2\2\2./\7\4\2\2/\66\7N\2\2\60\61\7\5\2") + buf.write("\2\61\67\5\34\17\2\62\63\7\6\2\2\63\67\5\34\17\2\64\65") + buf.write("\7\7\2\2\65\67\7N\2\2\66\60\3\2\2\2\66\62\3\2\2\2\66\64") + buf.write("\3\2\2\2\66\67\3\2\2\2\67W\3\2\2\28W\7\b\2\29;\7\t\2\2") + buf.write(":<\5\22\n\2;:\3\2\2\2;<\3\2\2\2\5\36\20\2") + buf.write(">A\7N\2\2?@\7\n\2\2@B\5\22\n\2A?\3\2\2\2AB\3\2\2\2BW\3") + buf.write("\2\2\2CD\5\b\5\2DE\7\n\2\2EG\3\2\2\2FC\3\2\2\2GJ\3\2\2") + buf.write("\2HF\3\2\2\2HI\3\2\2\2IK\3\2\2\2JH\3\2\2\2KW\5\22\n\2") + buf.write("LM\5\20\t\2MN\t\2\2\2NO\7\n\2\2OP\5\20\t\2PW\3\2\2\2Q") + buf.write("W\t\3\2\2RT\7\31\2\2SU\5\22\n\2TS\3\2\2\2TU\3\2\2\2UW") + buf.write("\3\2\2\2V.\3\2\2\2V8\3\2\2\2V9\3\2\2\2V=\3\2\2\2VH\3\2") + buf.write("\2\2VL\3\2\2\2VQ\3\2\2\2VR\3\2\2\2W\7\3\2\2\2X]\5\20\t") + buf.write("\2YZ\7\32\2\2Z\\\5\20\t\2[Y\3\2\2\2\\_\3\2\2\2][\3\2\2") + buf.write("\2]^\3\2\2\2^\t\3\2\2\2_]\3\2\2\2`a\7\33\2\2ab\5\20\t") + buf.write("\2bc\7\34\2\2ck\5\16\b\2de\7\35\2\2ef\5\20\t\2fg\7\34") + buf.write("\2\2gh\5\16\b\2hj\3\2\2\2id\3\2\2\2jm\3\2\2\2ki\3\2\2") + buf.write("\2kl\3\2\2\2lq\3\2\2\2mk\3\2\2\2no\7\36\2\2op\7\34\2\2") + buf.write("pr\5\16\b\2qn\3\2\2\2qr\3\2\2\2r\u00a1\3\2\2\2st\7\37") + buf.write("\2\2tu\5\20\t\2uv\7\34\2\2vw\5\16\b\2w\u00a1\3\2\2\2x") + buf.write("y\7 \2\2yz\5\20\t\2z{\7\34\2\2{|\5\16\b\2|\u00a1\3\2\2") + buf.write("\2}~\7!\2\2~\177\5\22\n\2\177\u0080\7\"\2\2\u0080\u0083") + buf.write("\5\22\n\2\u0081\u0082\7#\2\2\u0082\u0084\5\22\n\2\u0083") + buf.write("\u0081\3\2\2\2\u0083\u0084\3\2\2\2\u0084\u0085\3\2\2\2") + buf.write("\u0085\u0086\7\34\2\2\u0086\u0087\5\16\b\2\u0087\u00a1") + buf.write("\3\2\2\2\u0088\u0089\7$\2\2\u0089\u008a\7N\2\2\u008a\u0090") + buf.write("\7%\2\2\u008b\u008c\5\f\7\2\u008c\u008d\7\32\2\2\u008d") + buf.write("\u008f\3\2\2\2\u008e\u008b\3\2\2\2\u008f\u0092\3\2\2\2") + buf.write("\u0090\u008e\3\2\2\2\u0090\u0091\3\2\2\2\u0091\u0094\3") + buf.write("\2\2\2\u0092\u0090\3\2\2\2\u0093\u0095\5\f\7\2\u0094\u0093") + buf.write("\3\2\2\2\u0094\u0095\3\2\2\2\u0095\u0096\3\2\2\2\u0096") + buf.write("\u0098\7&\2\2\u0097\u0099\5\36\20\2\u0098\u0097\3\2\2") + buf.write("\2\u0098\u0099\3\2\2\2\u0099\u009e\3\2\2\2\u009a\u009b") + buf.write("\7\'\2\2\u009b\u009f\5\16\b\2\u009c\u009d\7(\2\2\u009d") + buf.write("\u009f\7\3\2\2\u009e\u009a\3\2\2\2\u009e\u009c\3\2\2\2") + buf.write("\u009f\u00a1\3\2\2\2\u00a0`\3\2\2\2\u00a0s\3\2\2\2\u00a0") + buf.write("x\3\2\2\2\u00a0}\3\2\2\2\u00a0\u0088\3\2\2\2\u00a1\13") + buf.write("\3\2\2\2\u00a2\u00a3\5\36\20\2\u00a3\u00a6\7N\2\2\u00a4") + buf.write("\u00a5\7)\2\2\u00a5\u00a7\5\20\t\2\u00a6\u00a4\3\2\2\2") + buf.write("\u00a6\u00a7\3\2\2\2\u00a7\r\3\2\2\2\u00a8\u00aa\7*\2") + buf.write("\2\u00a9\u00ab\5\4\3\2\u00aa\u00a9\3\2\2\2\u00ab\u00ac") + buf.write("\3\2\2\2\u00ac\u00aa\3\2\2\2\u00ac\u00ad\3\2\2\2\u00ad") + buf.write("\u00ae\3\2\2\2\u00ae\u00af\7+\2\2\u00af\17\3\2\2\2\u00b0") + buf.write("\u00b1\b\t\1\2\u00b1\u00de\5\32\16\2\u00b2\u00b3\7%\2") + buf.write("\2\u00b3\u00b4\5\22\n\2\u00b4\u00b5\7&\2\2\u00b5\u00de") + buf.write("\3\2\2\2\u00b6\u00bc\7,\2\2\u00b7\u00b8\5\20\t\2\u00b8") + buf.write("\u00b9\7\32\2\2\u00b9\u00bb\3\2\2\2\u00ba\u00b7\3\2\2") + buf.write("\2\u00bb\u00be\3\2\2\2\u00bc\u00ba\3\2\2\2\u00bc\u00bd") + buf.write("\3\2\2\2\u00bd\u00c0\3\2\2\2\u00be\u00bc\3\2\2\2\u00bf") + buf.write("\u00c1\5\20\t\2\u00c0\u00bf\3\2\2\2\u00c0\u00c1\3\2\2") + buf.write("\2\u00c1\u00c2\3\2\2\2\u00c2\u00de\7-\2\2\u00c3\u00c4") + buf.write("\7,\2\2\u00c4\u00c6\5\20\t\2\u00c5\u00c7\5\26\f\2\u00c6") + buf.write("\u00c5\3\2\2\2\u00c7\u00c8\3\2\2\2\u00c8\u00c6\3\2\2\2") + buf.write("\u00c8\u00c9\3\2\2\2\u00c9\u00ca\3\2\2\2\u00ca\u00cb\7") + buf.write("-\2\2\u00cb\u00de\3\2\2\2\u00cc\u00cd\t\4\2\2\u00cd\u00de") + buf.write("\5\20\t\23\u00ce\u00cf\7<\2\2\u00cf\u00de\5\20\t\b\u00d0") + buf.write("\u00d5\7?\2\2\u00d1\u00d2\7N\2\2\u00d2\u00d4\7\32\2\2") + buf.write("\u00d3\u00d1\3\2\2\2\u00d4\u00d7\3\2\2\2\u00d5\u00d3\3") + buf.write("\2\2\2\u00d5\u00d6\3\2\2\2\u00d6\u00d9\3\2\2\2\u00d7\u00d5") + buf.write("\3\2\2\2\u00d8\u00da\7N\2\2\u00d9\u00d8\3\2\2\2\u00d9") + buf.write("\u00da\3\2\2\2\u00da\u00db\3\2\2\2\u00db\u00dc\7@\2\2") + buf.write("\u00dc\u00de\5\20\t\3\u00dd\u00b0\3\2\2\2\u00dd\u00b2") + buf.write("\3\2\2\2\u00dd\u00b6\3\2\2\2\u00dd\u00c3\3\2\2\2\u00dd") + buf.write("\u00cc\3\2\2\2\u00dd\u00ce\3\2\2\2\u00dd\u00d0\3\2\2\2") + buf.write("\u00de\u013e\3\2\2\2\u00df\u00e0\f\24\2\2\u00e0\u00e1") + buf.write("\7\13\2\2\u00e1\u013d\5\20\t\24\u00e2\u00e3\f\22\2\2\u00e3") + buf.write("\u00e4\t\5\2\2\u00e4\u013d\5\20\t\23\u00e5\u00e6\f\21") + buf.write("\2\2\u00e6\u00e7\t\6\2\2\u00e7\u013d\5\20\t\22\u00e8\u00e9") + buf.write("\f\20\2\2\u00e9\u00ea\t\7\2\2\u00ea\u013d\5\20\t\21\u00eb") + buf.write("\u00ec\f\17\2\2\u00ec\u00ed\7\23\2\2\u00ed\u013d\5\20") + buf.write("\t\20\u00ee\u00ef\f\16\2\2\u00ef\u00f0\7\24\2\2\u00f0") + buf.write("\u013d\5\20\t\17\u00f1\u00f2\f\r\2\2\u00f2\u00f3\7\25") + buf.write("\2\2\u00f3\u013d\5\20\t\16\u00f4\u00f5\f\f\2\2\u00f5\u00f6") + buf.write("\t\b\2\2\u00f6\u013d\5\20\t\r\u00f7\u00f8\f\n\2\2\u00f8") + buf.write("\u00f9\t\t\2\2\u00f9\u013d\5\20\t\13\u00fa\u00fb\f\t\2") + buf.write("\2\u00fb\u00fc\t\n\2\2\u00fc\u013d\5\20\t\t\u00fd\u00fe") + buf.write("\f\7\2\2\u00fe\u00ff\7=\2\2\u00ff\u013d\5\20\t\7\u0100") + buf.write("\u0101\f\6\2\2\u0101\u0102\7>\2\2\u0102\u013d\5\20\t\6") + buf.write("\u0103\u0104\f\5\2\2\u0104\u0105\7\26\2\2\u0105\u013d") + buf.write("\5\20\t\5\u0106\u0107\f\4\2\2\u0107\u0108\7.\2\2\u0108") + buf.write("\u0109\5\20\t\2\u0109\u010a\7)\2\2\u010a\u010b\5\20\t") + buf.write("\4\u010b\u013d\3\2\2\2\u010c\u010e\f\31\2\2\u010d\u010f") + buf.write("\7.\2\2\u010e\u010d\3\2\2\2\u010e\u010f\3\2\2\2\u010f") + buf.write("\u0110\3\2\2\2\u0110\u0111\7,\2\2\u0111\u0112\5\22\n\2") + buf.write("\u0112\u0113\7-\2\2\u0113\u013d\3\2\2\2\u0114\u0115\f") + buf.write("\30\2\2\u0115\u0117\7,\2\2\u0116\u0118\5\20\t\2\u0117") + buf.write("\u0116\3\2\2\2\u0117\u0118\3\2\2\2\u0118\u0119\3\2\2\2") + buf.write("\u0119\u011b\7)\2\2\u011a\u011c\5\20\t\2\u011b\u011a\3") + buf.write("\2\2\2\u011b\u011c\3\2\2\2\u011c\u0121\3\2\2\2\u011d\u011f") + buf.write("\7)\2\2\u011e\u0120\5\20\t\2\u011f\u011e\3\2\2\2\u011f") + buf.write("\u0120\3\2\2\2\u0120\u0122\3\2\2\2\u0121\u011d\3\2\2\2") + buf.write("\u0121\u0122\3\2\2\2\u0122\u0123\3\2\2\2\u0123\u013d\7") + buf.write("-\2\2\u0124\u0126\f\27\2\2\u0125\u0127\7.\2\2\u0126\u0125") + buf.write("\3\2\2\2\u0126\u0127\3\2\2\2\u0127\u0128\3\2\2\2\u0128") + buf.write("\u0129\7/\2\2\u0129\u013d\7N\2\2\u012a\u012b\f\26\2\2") + buf.write("\u012b\u0131\7%\2\2\u012c\u012d\5\30\r\2\u012d\u012e\7") + buf.write("\32\2\2\u012e\u0130\3\2\2\2\u012f\u012c\3\2\2\2\u0130") + buf.write("\u0133\3\2\2\2\u0131\u012f\3\2\2\2\u0131\u0132\3\2\2\2") + buf.write("\u0132\u0135\3\2\2\2\u0133\u0131\3\2\2\2\u0134\u0136\5") + buf.write("\30\r\2\u0135\u0134\3\2\2\2\u0135\u0136\3\2\2\2\u0136") + buf.write("\u0137\3\2\2\2\u0137\u013d\7&\2\2\u0138\u0139\f\25\2\2") + buf.write("\u0139\u013d\7\60\2\2\u013a\u013b\f\13\2\2\u013b\u013d") + buf.write("\7\63\2\2\u013c\u00df\3\2\2\2\u013c\u00e2\3\2\2\2\u013c") + buf.write("\u00e5\3\2\2\2\u013c\u00e8\3\2\2\2\u013c\u00eb\3\2\2\2") + buf.write("\u013c\u00ee\3\2\2\2\u013c\u00f1\3\2\2\2\u013c\u00f4\3") + buf.write("\2\2\2\u013c\u00f7\3\2\2\2\u013c\u00fa\3\2\2\2\u013c\u00fd") + buf.write("\3\2\2\2\u013c\u0100\3\2\2\2\u013c\u0103\3\2\2\2\u013c") + buf.write("\u0106\3\2\2\2\u013c\u010c\3\2\2\2\u013c\u0114\3\2\2\2") + buf.write("\u013c\u0124\3\2\2\2\u013c\u012a\3\2\2\2\u013c\u0138\3") + buf.write("\2\2\2\u013c\u013a\3\2\2\2\u013d\u0140\3\2\2\2\u013e\u013c") + buf.write("\3\2\2\2\u013e\u013f\3\2\2\2\u013f\21\3\2\2\2\u0140\u013e") + buf.write("\3\2\2\2\u0141\u0142\5\20\t\2\u0142\u0143\7\32\2\2\u0143") + buf.write("\u0145\3\2\2\2\u0144\u0141\3\2\2\2\u0145\u0148\3\2\2\2") + buf.write("\u0146\u0144\3\2\2\2\u0146\u0147\3\2\2\2\u0147\u0149\3") + buf.write("\2\2\2\u0148\u0146\3\2\2\2\u0149\u014a\5\20\t\2\u014a") + buf.write("\23\3\2\2\2\u014b\u014c\5\22\n\2\u014c\u014d\7\2\2\3\u014d") + buf.write("\25\3\2\2\2\u014e\u014f\7!\2\2\u014f\u0150\5\22\n\2\u0150") + buf.write("\u0151\7\"\2\2\u0151\u0154\5\22\n\2\u0152\u0153\7#\2\2") + buf.write("\u0153\u0155\5\22\n\2\u0154\u0152\3\2\2\2\u0154\u0155") + buf.write("\3\2\2\2\u0155\u0159\3\2\2\2\u0156\u0157\7\33\2\2\u0157") + buf.write("\u0159\5\20\t\2\u0158\u014e\3\2\2\2\u0158\u0156\3\2\2") + buf.write("\2\u0159\27\3\2\2\2\u015a\u015b\7N\2\2\u015b\u015d\7\n") + buf.write("\2\2\u015c\u015a\3\2\2\2\u015c\u015d\3\2\2\2\u015d\u015e") + buf.write("\3\2\2\2\u015e\u015f\5\20\t\2\u015f\31\3\2\2\2\u0160\u0168") + buf.write("\7J\2\2\u0161\u0168\7K\2\2\u0162\u0168\t\13\2\2\u0163") + buf.write("\u0168\7L\2\2\u0164\u0168\7M\2\2\u0165\u0168\7C\2\2\u0166") + buf.write("\u0168\7N\2\2\u0167\u0160\3\2\2\2\u0167\u0161\3\2\2\2") + buf.write("\u0167\u0162\3\2\2\2\u0167\u0163\3\2\2\2\u0167\u0164\3") + buf.write("\2\2\2\u0167\u0165\3\2\2\2\u0167\u0166\3\2\2\2\u0168\33") + buf.write("\3\2\2\2\u0169\u016a\7N\2\2\u016a\u016c\7\32\2\2\u016b") + buf.write("\u0169\3\2\2\2\u016c\u016f\3\2\2\2\u016d\u016b\3\2\2\2") + buf.write("\u016d\u016e\3\2\2\2\u016e\u0170\3\2\2\2\u016f\u016d\3") + buf.write("\2\2\2\u0170\u0171\7N\2\2\u0171\35\3\2\2\2\u0172\u0173") + buf.write("\b\20\1\2\u0173\u017f\t\f\2\2\u0174\u0175\7%\2\2\u0175") + buf.write("\u0176\5\36\20\2\u0176\u0177\7&\2\2\u0177\u017f\3\2\2") + buf.write("\2\u0178\u0179\7,\2\2\u0179\u017a\5\36\20\2\u017a\u017b") + buf.write("\7-\2\2\u017b\u017f\3\2\2\2\u017c\u017d\7@\2\2\u017d\u017f") + buf.write("\5\36\20\3\u017e\u0172\3\2\2\2\u017e\u0174\3\2\2\2\u017e") + buf.write("\u0178\3\2\2\2\u017e\u017c\3\2\2\2\u017f\u018a\3\2\2\2") + buf.write("\u0180\u0181\f\5\2\2\u0181\u0182\7\f\2\2\u0182\u0189\5") + buf.write("\36\20\5\u0183\u0184\f\4\2\2\u0184\u0185\7@\2\2\u0185") + buf.write("\u0189\5\36\20\4\u0186\u0187\f\6\2\2\u0187\u0189\7.\2") + buf.write("\2\u0188\u0180\3\2\2\2\u0188\u0183\3\2\2\2\u0188\u0186") + buf.write("\3\2\2\2\u0189\u018c\3\2\2\2\u018a\u0188\3\2\2\2\u018a") + buf.write("\u018b\3\2\2\2\u018b\37\3\2\2\2\u018c\u018a\3\2\2\2.#") + buf.write(",\66;AHTV]kq\u0083\u0090\u0094\u0098\u009e\u00a0\u00a6") + buf.write("\u00ac\u00bc\u00c0\u00c8\u00d5\u00d9\u00dd\u010e\u0117") + buf.write("\u011b\u011f\u0121\u0126\u0131\u0135\u013c\u013e\u0146") + buf.write("\u0154\u0158\u015c\u0167\u016d\u017e\u0188\u018a") return buf.getvalue() @@ -1350,6 +1352,7 @@ class ExprIndexContext(ExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.ExprContext super().__init__(parser) + self.safe = None # Token self.copyFrom(ctx) def expr(self): @@ -1786,17 +1789,17 @@ def expr(self, _p:int=0): self._ctx.stop = self._input.LT(-1) - self.state = 313 + self.state = 316 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,33,self._ctx) + _alt = self._interp.adaptivePredict(self._input,34,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 311 + self.state = 314 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,32,self._ctx) + la_ = self._interp.adaptivePredict(self._input,33,self._ctx) if la_ == 1: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) @@ -2026,142 +2029,150 @@ def expr(self, _p:int=0): if not self.precpred(self._ctx, 23): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 23)") - self.state = 267 - self.match(PyxellParser.T__41) self.state = 268 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==PyxellParser.T__43: + self.state = 267 + localctx.safe = self.match(PyxellParser.T__43) + + + self.state = 270 + self.match(PyxellParser.T__41) + self.state = 271 self.tuple_expr() - self.state = 269 + self.state = 272 self.match(PyxellParser.T__42) pass elif la_ == 16: localctx = PyxellParser.ExprSliceContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 271 + self.state = 274 if not self.precpred(self._ctx, 22): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 22)") - self.state = 272 + self.state = 275 self.match(PyxellParser.T__41) - self.state = 274 + self.state = 277 self._errHandler.sync(self) _la = self._input.LA(1) if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__34 - 13)) | (1 << (PyxellParser.T__41 - 13)) | (1 << (PyxellParser.T__46 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 273 + self.state = 276 localctx.e1 = self.expr(0) - self.state = 276 + self.state = 279 self.match(PyxellParser.T__38) - self.state = 278 + self.state = 281 self._errHandler.sync(self) _la = self._input.LA(1) if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__34 - 13)) | (1 << (PyxellParser.T__41 - 13)) | (1 << (PyxellParser.T__46 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 277 + self.state = 280 localctx.e2 = self.expr(0) - self.state = 284 + self.state = 287 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__38: - self.state = 280 + self.state = 283 self.match(PyxellParser.T__38) - self.state = 282 + self.state = 285 self._errHandler.sync(self) _la = self._input.LA(1) if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__34 - 13)) | (1 << (PyxellParser.T__41 - 13)) | (1 << (PyxellParser.T__46 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 281 + self.state = 284 localctx.e3 = self.expr(0) - self.state = 286 + self.state = 289 self.match(PyxellParser.T__42) pass elif la_ == 17: localctx = PyxellParser.ExprAttrContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 287 + self.state = 290 if not self.precpred(self._ctx, 21): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 21)") - self.state = 289 + self.state = 292 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__43: - self.state = 288 + self.state = 291 localctx.safe = self.match(PyxellParser.T__43) - self.state = 291 + self.state = 294 self.match(PyxellParser.T__44) - self.state = 292 + self.state = 295 self.match(PyxellParser.ID) pass elif la_ == 18: localctx = PyxellParser.ExprCallContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 293 + self.state = 296 if not self.precpred(self._ctx, 20): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 20)") - self.state = 294 + self.state = 297 self.match(PyxellParser.T__34) - self.state = 300 + self.state = 303 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,30,self._ctx) + _alt = self._interp.adaptivePredict(self._input,31,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 295 + self.state = 298 self.call_arg() - self.state = 296 + self.state = 299 self.match(PyxellParser.T__23) - self.state = 302 + self.state = 305 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,30,self._ctx) + _alt = self._interp.adaptivePredict(self._input,31,self._ctx) - self.state = 304 + self.state = 307 self._errHandler.sync(self) _la = self._input.LA(1) if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__34 - 13)) | (1 << (PyxellParser.T__41 - 13)) | (1 << (PyxellParser.T__46 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 303 + self.state = 306 self.call_arg() - self.state = 306 + self.state = 309 self.match(PyxellParser.T__35) pass elif la_ == 19: localctx = PyxellParser.ExprUnaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 307 + self.state = 310 if not self.precpred(self._ctx, 19): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 19)") - self.state = 308 + self.state = 311 localctx.op = self.match(PyxellParser.T__45) pass elif la_ == 20: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 309 + self.state = 312 if not self.precpred(self._ctx, 9): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") - self.state = 310 + self.state = 313 localctx.dots = self.match(PyxellParser.T__48) pass - self.state = 315 + self.state = 318 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,33,self._ctx) + _alt = self._interp.adaptivePredict(self._input,34,self._ctx) except RecognitionException as re: localctx.exception = re @@ -2216,20 +2227,20 @@ def tuple_expr(self): try: localctx = PyxellParser.ExprTupleContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 321 + self.state = 324 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,34,self._ctx) + _alt = self._interp.adaptivePredict(self._input,35,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 316 + self.state = 319 self.expr(0) - self.state = 317 + self.state = 320 self.match(PyxellParser.T__23) - self.state = 323 + self.state = 326 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,34,self._ctx) + _alt = self._interp.adaptivePredict(self._input,35,self._ctx) - self.state = 324 + self.state = 327 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -2283,9 +2294,9 @@ def interpolation_expr(self): try: localctx = PyxellParser.ExprInterpolationContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 326 + self.state = 329 self.tuple_expr() - self.state = 327 + self.state = 330 self.match(PyxellParser.EOF) except RecognitionException as re: localctx.exception = re @@ -2356,27 +2367,27 @@ def comprehension(self): self.enterRule(localctx, 20, self.RULE_comprehension) self._la = 0 # Token type try: - self.state = 339 + self.state = 342 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__30]: localctx = PyxellParser.ComprehensionGeneratorContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 329 + self.state = 332 self.match(PyxellParser.T__30) - self.state = 330 + self.state = 333 self.tuple_expr() - self.state = 331 + self.state = 334 self.match(PyxellParser.T__31) - self.state = 332 - self.tuple_expr() self.state = 335 + self.tuple_expr() + self.state = 338 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__32: - self.state = 333 + self.state = 336 self.match(PyxellParser.T__32) - self.state = 334 + self.state = 337 self.tuple_expr() @@ -2384,9 +2395,9 @@ def comprehension(self): elif token in [PyxellParser.T__24]: localctx = PyxellParser.ComprehensionFilterContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 337 + self.state = 340 self.match(PyxellParser.T__24) - self.state = 338 + self.state = 341 self.expr(0) pass else: @@ -2444,17 +2455,17 @@ def call_arg(self): try: localctx = PyxellParser.CallArgContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 343 + self.state = 346 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,37,self._ctx) + la_ = self._interp.adaptivePredict(self._input,38,self._ctx) if la_ == 1: - self.state = 341 + self.state = 344 self.match(PyxellParser.ID) - self.state = 342 + self.state = 345 self.match(PyxellParser.T__7) - self.state = 345 + self.state = 348 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -2596,25 +2607,25 @@ def atom(self): self.enterRule(localctx, 24, self.RULE_atom) self._la = 0 # Token type try: - self.state = 354 + self.state = 357 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: localctx = PyxellParser.AtomIntContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 347 + self.state = 350 self.match(PyxellParser.INT) pass elif token in [PyxellParser.FLOAT]: localctx = PyxellParser.AtomFloatContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 348 + self.state = 351 self.match(PyxellParser.FLOAT) pass elif token in [PyxellParser.T__62, PyxellParser.T__63]: localctx = PyxellParser.AtomBoolContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 349 + self.state = 352 _la = self._input.LA(1) if not(_la==PyxellParser.T__62 or _la==PyxellParser.T__63): self._errHandler.recoverInline(self) @@ -2625,25 +2636,25 @@ def atom(self): elif token in [PyxellParser.CHAR]: localctx = PyxellParser.AtomCharContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 350 + self.state = 353 self.match(PyxellParser.CHAR) pass elif token in [PyxellParser.STRING]: localctx = PyxellParser.AtomStringContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 351 + self.state = 354 self.match(PyxellParser.STRING) pass elif token in [PyxellParser.T__64]: localctx = PyxellParser.AtomNullContext(self, localctx) self.enterOuterAlt(localctx, 6) - self.state = 352 + self.state = 355 self.match(PyxellParser.T__64) pass elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) self.enterOuterAlt(localctx, 7) - self.state = 353 + self.state = 356 self.match(PyxellParser.ID) pass else: @@ -2688,20 +2699,20 @@ def id_list(self): self.enterRule(localctx, 26, self.RULE_id_list) try: self.enterOuterAlt(localctx, 1) - self.state = 360 + self.state = 363 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,39,self._ctx) + _alt = self._interp.adaptivePredict(self._input,40,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 356 + self.state = 359 self.match(PyxellParser.ID) - self.state = 357 + self.state = 360 self.match(PyxellParser.T__23) - self.state = 362 + self.state = 365 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,39,self._ctx) + _alt = self._interp.adaptivePredict(self._input,40,self._ctx) - self.state = 363 + self.state = 366 self.match(PyxellParser.ID) except RecognitionException as re: localctx.exception = re @@ -2860,7 +2871,7 @@ def typ(self, _p:int=0): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 377 + self.state = 380 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__65, PyxellParser.T__66, PyxellParser.T__67, PyxellParser.T__68, PyxellParser.T__69, PyxellParser.T__70]: @@ -2868,7 +2879,7 @@ def typ(self, _p:int=0): self._ctx = localctx _prevctx = localctx - self.state = 366 + self.state = 369 _la = self._input.LA(1) if not(((((_la - 66)) & ~0x3f) == 0 and ((1 << (_la - 66)) & ((1 << (PyxellParser.T__65 - 66)) | (1 << (PyxellParser.T__66 - 66)) | (1 << (PyxellParser.T__67 - 66)) | (1 << (PyxellParser.T__68 - 66)) | (1 << (PyxellParser.T__69 - 66)) | (1 << (PyxellParser.T__70 - 66)))) != 0)): self._errHandler.recoverInline(self) @@ -2880,89 +2891,89 @@ def typ(self, _p:int=0): localctx = PyxellParser.TypeParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 367 + self.state = 370 self.match(PyxellParser.T__34) - self.state = 368 + self.state = 371 self.typ(0) - self.state = 369 + self.state = 372 self.match(PyxellParser.T__35) pass elif token in [PyxellParser.T__41]: localctx = PyxellParser.TypeArrayContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 371 + self.state = 374 self.match(PyxellParser.T__41) - self.state = 372 + self.state = 375 self.typ(0) - self.state = 373 + self.state = 376 self.match(PyxellParser.T__42) pass elif token in [PyxellParser.T__61]: localctx = PyxellParser.TypeFunc0Context(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 375 + self.state = 378 self.match(PyxellParser.T__61) - self.state = 376 + self.state = 379 self.typ(1) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 389 + self.state = 392 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,42,self._ctx) + _alt = self._interp.adaptivePredict(self._input,43,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 387 + self.state = 390 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,41,self._ctx) + la_ = self._interp.adaptivePredict(self._input,42,self._ctx) if la_ == 1: localctx = PyxellParser.TypeTupleContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 379 + self.state = 382 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 380 + self.state = 383 self.match(PyxellParser.T__9) - self.state = 381 + self.state = 384 self.typ(3) pass elif la_ == 2: localctx = PyxellParser.TypeFuncContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 382 + self.state = 385 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 383 + self.state = 386 self.match(PyxellParser.T__61) - self.state = 384 + self.state = 387 self.typ(2) pass elif la_ == 3: localctx = PyxellParser.TypeNullableContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 385 + self.state = 388 if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") - self.state = 386 + self.state = 389 self.match(PyxellParser.T__43) pass - self.state = 391 + self.state = 394 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,42,self._ctx) + _alt = self._interp.adaptivePredict(self._input,43,self._ctx) except RecognitionException as re: localctx.exception = re diff --git a/src/ast.py b/src/ast.py index d9bab0fd..afca7599 100644 --- a/src/ast.py +++ b/src/ast.py @@ -198,6 +198,7 @@ def visitExprIndex(self, ctx): return { **_node(ctx, 'ExprIndex'), 'exprs': [self.visit(ctx.expr()), self.visit(ctx.tuple_expr())], + 'safe': bool(ctx.safe), } def visitExprSlice(self, ctx): diff --git a/src/compiler.py b/src/compiler.py index f60c4d23..88ec1af5 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -140,14 +140,12 @@ def extract(self, ptr, *indices): def insert(self, value, ptr, *indices): return self.builder.store(value, self.builder.gep(ptr, [vInt(0), *[ll.Constant(ll.IntType(32), i) for i in indices]])) - def index(self, node, *exprs, lvalue=False): - collection, index = [self.compile(expr) for expr in exprs] - + def index(self, node, collection, index, lvalue=False): if collection.type.isCollection(): if lvalue and not collection.type.isArray(): - self.throw(exprs[0], err.NotLvalue()) + self.throw(node, err.NotLvalue()) - index = self.cast(exprs[1], index, tInt) + index = self.cast(node, index, tInt) length = self.extract(collection, 1) cmp = self.builder.icmp_signed('>=', index, vInt(0)) index = self.builder.select(cmp, index, self.builder.add(index, length)) @@ -310,8 +308,8 @@ def lvalue(self, node, expr, declare=None, override=False, initialize=False): return self.env[id] - elif expr['node'] == 'ExprIndex': - return self.index(node, *expr['exprs'], lvalue=True) + elif expr['node'] == 'ExprIndex' and not expr.get('safe'): + return self.index(node, *map(self.compile, expr['exprs']), lvalue=True) self.throw(node, err.NotLvalue()) @@ -1308,7 +1306,13 @@ def compileExprArrayComprehension(self, node): return result def compileExprIndex(self, node): - return self.builder.load(self.index(node, *node['exprs'])) + exprs = node['exprs'] + + if node.get('safe'): + collection = self.compile(exprs[0]) + return self.safe(node, collection, lambda: self.nullable(self.builder.load(self.index(node, self.extract(collection), self.compile(exprs[1])))), vNull) + + return self.builder.load(self.index(node, *map(self.compile, exprs))) def compileExprSlice(self, node): slice = node['slice'] diff --git a/src/types.py b/src/types.py index 5dbc1133..1041c009 100644 --- a/src/types.py +++ b/src/types.py @@ -41,6 +41,22 @@ def __hash__(self): return hash(CustomStructType) +class NullableType(ll.PointerType): + + def __init__(self, subtype): + super().__init__(subtype) + self.subtype = subtype + self.kind = 'nullable' + + def __eq__(self, other): + if not super().__eq__(other): + return False + return self.kind == other.kind + + def __hash__(self): + return hash(NullableType) + + tVoid = ll.VoidType() tInt = ll.IntType(64) tFloat = ll.DoubleType() @@ -73,10 +89,7 @@ def isArray(type): def tNullable(subtype): - type = tPtr(subtype) - type.subtype = subtype - type.kind = 'nullable' - return type + return NullableType(subtype) @extend_class(ll.Type) def isNullable(type): diff --git a/test/bad/nullables/op07.err b/test/bad/nullables/op07.err new file mode 100644 index 00000000..7e0517ff --- /dev/null +++ b/test/bad/nullables/op07.err @@ -0,0 +1 @@ +Type `[Int]` is not nullable. \ No newline at end of file diff --git a/test/bad/nullables/op07.px b/test/bad/nullables/op07.px new file mode 100644 index 00000000..c4b1d4b7 --- /dev/null +++ b/test/bad/nullables/op07.px @@ -0,0 +1,2 @@ + +[0]?[0] diff --git a/test/bad/nullables/op08.err b/test/bad/nullables/op08.err new file mode 100644 index 00000000..607bbcd4 --- /dev/null +++ b/test/bad/nullables/op08.err @@ -0,0 +1 @@ +Type `Char` is not indexable. \ No newline at end of file diff --git a/test/bad/nullables/op08.px b/test/bad/nullables/op08.px new file mode 100644 index 00000000..301054e6 --- /dev/null +++ b/test/bad/nullables/op08.px @@ -0,0 +1,3 @@ + +Char? c = 'c' +c?[0] diff --git a/test/bad/nullables/op09.err b/test/bad/nullables/op09.err new file mode 100644 index 00000000..815996d5 --- /dev/null +++ b/test/bad/nullables/op09.err @@ -0,0 +1 @@ +Expression cannot be assigned to. \ No newline at end of file diff --git a/test/bad/nullables/op09.px b/test/bad/nullables/op09.px new file mode 100644 index 00000000..2f7a75a4 --- /dev/null +++ b/test/bad/nullables/op09.px @@ -0,0 +1,3 @@ + +[Bool]? b = null +b?[0] = true diff --git a/test/good/nullables/op09.out b/test/good/nullables/op09.out new file mode 100644 index 00000000..8f2dc4df --- /dev/null +++ b/test/good/nullables/op09.out @@ -0,0 +1,4 @@ +0 +1 +3 5 +null diff --git a/test/good/nullables/op09.px b/test/good/nullables/op09.px new file mode 100644 index 00000000..8d0842c1 --- /dev/null +++ b/test/good/nullables/op09.px @@ -0,0 +1,10 @@ + +func f(Int i) Int def + print i + return i + +[Int]? a = [3, 5] +print a?[f(0)], a![f(1)] + +a = null +print a?[f(0)] diff --git a/test/good/nullables/op10.out b/test/good/nullables/op10.out new file mode 100644 index 00000000..ac0eca69 --- /dev/null +++ b/test/good/nullables/op10.out @@ -0,0 +1,2 @@ +null +c diff --git a/test/good/nullables/op10.px b/test/good/nullables/op10.px new file mode 100644 index 00000000..b077da83 --- /dev/null +++ b/test/good/nullables/op10.px @@ -0,0 +1,7 @@ + +String? s +s = null +print s?[-1] + +s = "abc" +print s?[-1] From d53cdd612c31f9743005aaf3b59b904386a9c098 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Fri, 15 Nov 2019 22:08:00 +0100 Subject: [PATCH 067/100] Fix slicing inside comprehensions --- src/compiler.py | 23 ++++++++++++----------- test/good/arrays/comprehension12.out | 1 + test/good/arrays/comprehension12.px | 2 ++ 3 files changed, 15 insertions(+), 11 deletions(-) create mode 100644 test/good/arrays/comprehension12.out create mode 100644 test/good/arrays/comprehension12.px diff --git a/src/compiler.py b/src/compiler.py index 88ec1af5..67d42fb2 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -29,6 +29,7 @@ class PyxellCompiler: def __init__(self): self.units = {} self._unit = None + self._keep_env = False self.builder = CustomIRBuilder() self.module = ll.Module() self.builtins = { @@ -86,7 +87,7 @@ def initialized(self, initialized): @contextmanager def local(self): - if getattr(self, 'prevent_local', False): + if self._keep_env: yield return env = self.env.copy() @@ -103,9 +104,10 @@ def unit(self, name): self._unit = _unit @contextmanager - def no_output(self, prevent_local=False): - if prevent_local: - self.prevent_local = True + def no_output(self, keep_env=False): + prev_keep_env = self._keep_env + if keep_env: + self._keep_env = True dummy_module = ll.Module() dummy_func = ll.Function(dummy_module, tFunc([]).pointee, 'dummy') dummy_label = dummy_func.append_basic_block('dummy') @@ -113,8 +115,8 @@ def no_output(self, prevent_local=False): self.builder.position_at_end(dummy_label) yield self.builder.position_at_end(prev_label) - if prevent_local: - self.prevent_local = False + if keep_env: + self._keep_env = prev_keep_env @contextmanager def block(self): @@ -1285,7 +1287,7 @@ def compileExprArrayComprehension(self, node): # A small hack to obtain type of the expression. with self.local(): - with self.no_output(prevent_local=True): + with self.no_output(keep_env=True): self.compile(stmt) type = self.compile(value).type @@ -1323,14 +1325,13 @@ def compileExprSlice(self, node): } for name in ['array', 'length', 'start', 'end', 'step', 'index']] with self.local(): - self.assign(node, array, self.compile(node['expr'])) - - with self.no_output(): - type = self.compile(array).type + collection = self.compile(node['expr']) + type = collection.type if not type.isCollection(): self.throw(node, err.NotIndexable(type)) + self.assign(node, array, collection) self.assign(node, length, self.expr('{t}.length', t=array['id'])) if slice[2] is None: diff --git a/test/good/arrays/comprehension12.out b/test/good/arrays/comprehension12.out new file mode 100644 index 00000000..4966a5ea --- /dev/null +++ b/test/good/arrays/comprehension12.out @@ -0,0 +1 @@ +[2, 1] diff --git a/test/good/arrays/comprehension12.px b/test/good/arrays/comprehension12.px new file mode 100644 index 00000000..ba08648d --- /dev/null +++ b/test/good/arrays/comprehension12.px @@ -0,0 +1,2 @@ + +print [x for x in [1, 2][::-1]] From 3534d211cc11a24a30fda9da097a41629edafd0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sat, 16 Nov 2019 21:44:58 +0100 Subject: [PATCH 068/100] Refactoring: type names --- src/Pyxell.g4 | 4 +- src/antlr/Pyxell.interp | 14 +- src/antlr/Pyxell.tokens | 28 +-- src/antlr/PyxellLexer.interp | 20 +- src/antlr/PyxellLexer.py | 425 +++++++++++++++++------------------ src/antlr/PyxellLexer.tokens | 28 +-- src/antlr/PyxellParser.py | 399 ++++++++++++++++---------------- src/antlr/PyxellVisitor.py | 10 +- src/ast.py | 51 +++-- src/compiler.py | 40 +++- src/errors.py | 1 + 11 files changed, 488 insertions(+), 532 deletions(-) diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index a1cd1995..6d33351d 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -102,7 +102,7 @@ id_list ; typ - : ('Void' | 'Int' | 'Float' | 'Bool' | 'Char' | 'String') # TypePrimitive + : ID # TypeName | '(' typ ')' # TypeParentheses | '[' typ ']' # TypeArray | typ '?' # TypeNullable @@ -119,7 +119,7 @@ ID : ID_START ID_CONT* ; fragment DIGIT : [0-9] ; fragment ID_START : [a-zA-Z_] ; -fragment ID_CONT : ID_START | DIGIT | [_'] ; +fragment ID_CONT : ID_START | DIGIT | ['] ; COMMENT : '--' ~[\r\n\f]* -> skip ; WS : [ \n\r\t]+ -> skip ; diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index 5499a830..9bc98f10 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -65,12 +65,6 @@ null 'true' 'false' 'null' -'Void' -'Int' -'Float' -'Bool' -'Char' -'String' null null null @@ -147,12 +141,6 @@ null null null null -null -null -null -null -null -null INT FLOAT CHAR @@ -181,4 +169,4 @@ typ atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 81, 398, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 3, 2, 7, 2, 34, 10, 2, 12, 2, 14, 2, 37, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 45, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 55, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 60, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 66, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 71, 10, 4, 12, 4, 14, 4, 74, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 85, 10, 4, 5, 4, 87, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 92, 10, 5, 12, 5, 14, 5, 95, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 106, 10, 6, 12, 6, 14, 6, 109, 11, 6, 3, 6, 3, 6, 3, 6, 5, 6, 114, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 132, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 143, 10, 6, 12, 6, 14, 6, 146, 11, 6, 3, 6, 5, 6, 149, 10, 6, 3, 6, 3, 6, 5, 6, 153, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 159, 10, 6, 5, 6, 161, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 167, 10, 7, 3, 8, 3, 8, 6, 8, 171, 10, 8, 13, 8, 14, 8, 172, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 187, 10, 9, 12, 9, 14, 9, 190, 11, 9, 3, 9, 5, 9, 193, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 6, 9, 199, 10, 9, 13, 9, 14, 9, 200, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 212, 10, 9, 12, 9, 14, 9, 215, 11, 9, 3, 9, 5, 9, 218, 10, 9, 3, 9, 3, 9, 5, 9, 222, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 271, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 280, 10, 9, 3, 9, 3, 9, 5, 9, 284, 10, 9, 3, 9, 3, 9, 5, 9, 288, 10, 9, 5, 9, 290, 10, 9, 3, 9, 3, 9, 3, 9, 5, 9, 295, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 304, 10, 9, 12, 9, 14, 9, 307, 11, 9, 3, 9, 5, 9, 310, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 317, 10, 9, 12, 9, 14, 9, 320, 11, 9, 3, 10, 3, 10, 3, 10, 7, 10, 325, 10, 10, 12, 10, 14, 10, 328, 11, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 341, 10, 12, 3, 12, 3, 12, 5, 12, 345, 10, 12, 3, 13, 3, 13, 5, 13, 349, 10, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 360, 10, 14, 3, 15, 3, 15, 7, 15, 364, 10, 15, 12, 15, 14, 15, 367, 11, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 383, 10, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 7, 16, 393, 10, 16, 12, 16, 14, 16, 396, 11, 16, 3, 16, 2, 4, 16, 30, 17, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 2, 13, 3, 2, 11, 22, 3, 2, 23, 24, 4, 2, 15, 16, 49, 49, 3, 2, 12, 14, 3, 2, 15, 16, 3, 2, 17, 18, 3, 2, 50, 51, 3, 2, 52, 53, 3, 2, 54, 59, 3, 2, 65, 66, 3, 2, 68, 73, 2, 468, 2, 35, 3, 2, 2, 2, 4, 44, 3, 2, 2, 2, 6, 86, 3, 2, 2, 2, 8, 88, 3, 2, 2, 2, 10, 160, 3, 2, 2, 2, 12, 162, 3, 2, 2, 2, 14, 168, 3, 2, 2, 2, 16, 221, 3, 2, 2, 2, 18, 326, 3, 2, 2, 2, 20, 331, 3, 2, 2, 2, 22, 344, 3, 2, 2, 2, 24, 348, 3, 2, 2, 2, 26, 359, 3, 2, 2, 2, 28, 365, 3, 2, 2, 2, 30, 382, 3, 2, 2, 2, 32, 34, 5, 4, 3, 2, 33, 32, 3, 2, 2, 2, 34, 37, 3, 2, 2, 2, 35, 33, 3, 2, 2, 2, 35, 36, 3, 2, 2, 2, 36, 38, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 38, 39, 7, 2, 2, 3, 39, 3, 3, 2, 2, 2, 40, 41, 5, 6, 4, 2, 41, 42, 7, 3, 2, 2, 42, 45, 3, 2, 2, 2, 43, 45, 5, 10, 6, 2, 44, 40, 3, 2, 2, 2, 44, 43, 3, 2, 2, 2, 45, 5, 3, 2, 2, 2, 46, 47, 7, 4, 2, 2, 47, 54, 7, 78, 2, 2, 48, 49, 7, 5, 2, 2, 49, 55, 5, 28, 15, 2, 50, 51, 7, 6, 2, 2, 51, 55, 5, 28, 15, 2, 52, 53, 7, 7, 2, 2, 53, 55, 7, 78, 2, 2, 54, 48, 3, 2, 2, 2, 54, 50, 3, 2, 2, 2, 54, 52, 3, 2, 2, 2, 54, 55, 3, 2, 2, 2, 55, 87, 3, 2, 2, 2, 56, 87, 7, 8, 2, 2, 57, 59, 7, 9, 2, 2, 58, 60, 5, 18, 10, 2, 59, 58, 3, 2, 2, 2, 59, 60, 3, 2, 2, 2, 60, 87, 3, 2, 2, 2, 61, 62, 5, 30, 16, 2, 62, 65, 7, 78, 2, 2, 63, 64, 7, 10, 2, 2, 64, 66, 5, 18, 10, 2, 65, 63, 3, 2, 2, 2, 65, 66, 3, 2, 2, 2, 66, 87, 3, 2, 2, 2, 67, 68, 5, 8, 5, 2, 68, 69, 7, 10, 2, 2, 69, 71, 3, 2, 2, 2, 70, 67, 3, 2, 2, 2, 71, 74, 3, 2, 2, 2, 72, 70, 3, 2, 2, 2, 72, 73, 3, 2, 2, 2, 73, 75, 3, 2, 2, 2, 74, 72, 3, 2, 2, 2, 75, 87, 5, 18, 10, 2, 76, 77, 5, 16, 9, 2, 77, 78, 9, 2, 2, 2, 78, 79, 7, 10, 2, 2, 79, 80, 5, 16, 9, 2, 80, 87, 3, 2, 2, 2, 81, 87, 9, 3, 2, 2, 82, 84, 7, 25, 2, 2, 83, 85, 5, 18, 10, 2, 84, 83, 3, 2, 2, 2, 84, 85, 3, 2, 2, 2, 85, 87, 3, 2, 2, 2, 86, 46, 3, 2, 2, 2, 86, 56, 3, 2, 2, 2, 86, 57, 3, 2, 2, 2, 86, 61, 3, 2, 2, 2, 86, 72, 3, 2, 2, 2, 86, 76, 3, 2, 2, 2, 86, 81, 3, 2, 2, 2, 86, 82, 3, 2, 2, 2, 87, 7, 3, 2, 2, 2, 88, 93, 5, 16, 9, 2, 89, 90, 7, 26, 2, 2, 90, 92, 5, 16, 9, 2, 91, 89, 3, 2, 2, 2, 92, 95, 3, 2, 2, 2, 93, 91, 3, 2, 2, 2, 93, 94, 3, 2, 2, 2, 94, 9, 3, 2, 2, 2, 95, 93, 3, 2, 2, 2, 96, 97, 7, 27, 2, 2, 97, 98, 5, 16, 9, 2, 98, 99, 7, 28, 2, 2, 99, 107, 5, 14, 8, 2, 100, 101, 7, 29, 2, 2, 101, 102, 5, 16, 9, 2, 102, 103, 7, 28, 2, 2, 103, 104, 5, 14, 8, 2, 104, 106, 3, 2, 2, 2, 105, 100, 3, 2, 2, 2, 106, 109, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 107, 108, 3, 2, 2, 2, 108, 113, 3, 2, 2, 2, 109, 107, 3, 2, 2, 2, 110, 111, 7, 30, 2, 2, 111, 112, 7, 28, 2, 2, 112, 114, 5, 14, 8, 2, 113, 110, 3, 2, 2, 2, 113, 114, 3, 2, 2, 2, 114, 161, 3, 2, 2, 2, 115, 116, 7, 31, 2, 2, 116, 117, 5, 16, 9, 2, 117, 118, 7, 28, 2, 2, 118, 119, 5, 14, 8, 2, 119, 161, 3, 2, 2, 2, 120, 121, 7, 32, 2, 2, 121, 122, 5, 16, 9, 2, 122, 123, 7, 28, 2, 2, 123, 124, 5, 14, 8, 2, 124, 161, 3, 2, 2, 2, 125, 126, 7, 33, 2, 2, 126, 127, 5, 18, 10, 2, 127, 128, 7, 34, 2, 2, 128, 131, 5, 18, 10, 2, 129, 130, 7, 35, 2, 2, 130, 132, 5, 18, 10, 2, 131, 129, 3, 2, 2, 2, 131, 132, 3, 2, 2, 2, 132, 133, 3, 2, 2, 2, 133, 134, 7, 28, 2, 2, 134, 135, 5, 14, 8, 2, 135, 161, 3, 2, 2, 2, 136, 137, 7, 36, 2, 2, 137, 138, 7, 78, 2, 2, 138, 144, 7, 37, 2, 2, 139, 140, 5, 12, 7, 2, 140, 141, 7, 26, 2, 2, 141, 143, 3, 2, 2, 2, 142, 139, 3, 2, 2, 2, 143, 146, 3, 2, 2, 2, 144, 142, 3, 2, 2, 2, 144, 145, 3, 2, 2, 2, 145, 148, 3, 2, 2, 2, 146, 144, 3, 2, 2, 2, 147, 149, 5, 12, 7, 2, 148, 147, 3, 2, 2, 2, 148, 149, 3, 2, 2, 2, 149, 150, 3, 2, 2, 2, 150, 152, 7, 38, 2, 2, 151, 153, 5, 30, 16, 2, 152, 151, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 158, 3, 2, 2, 2, 154, 155, 7, 39, 2, 2, 155, 159, 5, 14, 8, 2, 156, 157, 7, 40, 2, 2, 157, 159, 7, 3, 2, 2, 158, 154, 3, 2, 2, 2, 158, 156, 3, 2, 2, 2, 159, 161, 3, 2, 2, 2, 160, 96, 3, 2, 2, 2, 160, 115, 3, 2, 2, 2, 160, 120, 3, 2, 2, 2, 160, 125, 3, 2, 2, 2, 160, 136, 3, 2, 2, 2, 161, 11, 3, 2, 2, 2, 162, 163, 5, 30, 16, 2, 163, 166, 7, 78, 2, 2, 164, 165, 7, 41, 2, 2, 165, 167, 5, 16, 9, 2, 166, 164, 3, 2, 2, 2, 166, 167, 3, 2, 2, 2, 167, 13, 3, 2, 2, 2, 168, 170, 7, 42, 2, 2, 169, 171, 5, 4, 3, 2, 170, 169, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 170, 3, 2, 2, 2, 172, 173, 3, 2, 2, 2, 173, 174, 3, 2, 2, 2, 174, 175, 7, 43, 2, 2, 175, 15, 3, 2, 2, 2, 176, 177, 8, 9, 1, 2, 177, 222, 5, 26, 14, 2, 178, 179, 7, 37, 2, 2, 179, 180, 5, 18, 10, 2, 180, 181, 7, 38, 2, 2, 181, 222, 3, 2, 2, 2, 182, 188, 7, 44, 2, 2, 183, 184, 5, 16, 9, 2, 184, 185, 7, 26, 2, 2, 185, 187, 3, 2, 2, 2, 186, 183, 3, 2, 2, 2, 187, 190, 3, 2, 2, 2, 188, 186, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 192, 3, 2, 2, 2, 190, 188, 3, 2, 2, 2, 191, 193, 5, 16, 9, 2, 192, 191, 3, 2, 2, 2, 192, 193, 3, 2, 2, 2, 193, 194, 3, 2, 2, 2, 194, 222, 7, 45, 2, 2, 195, 196, 7, 44, 2, 2, 196, 198, 5, 16, 9, 2, 197, 199, 5, 22, 12, 2, 198, 197, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 198, 3, 2, 2, 2, 200, 201, 3, 2, 2, 2, 201, 202, 3, 2, 2, 2, 202, 203, 7, 45, 2, 2, 203, 222, 3, 2, 2, 2, 204, 205, 9, 4, 2, 2, 205, 222, 5, 16, 9, 19, 206, 207, 7, 60, 2, 2, 207, 222, 5, 16, 9, 8, 208, 213, 7, 63, 2, 2, 209, 210, 7, 78, 2, 2, 210, 212, 7, 26, 2, 2, 211, 209, 3, 2, 2, 2, 212, 215, 3, 2, 2, 2, 213, 211, 3, 2, 2, 2, 213, 214, 3, 2, 2, 2, 214, 217, 3, 2, 2, 2, 215, 213, 3, 2, 2, 2, 216, 218, 7, 78, 2, 2, 217, 216, 3, 2, 2, 2, 217, 218, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 220, 7, 64, 2, 2, 220, 222, 5, 16, 9, 3, 221, 176, 3, 2, 2, 2, 221, 178, 3, 2, 2, 2, 221, 182, 3, 2, 2, 2, 221, 195, 3, 2, 2, 2, 221, 204, 3, 2, 2, 2, 221, 206, 3, 2, 2, 2, 221, 208, 3, 2, 2, 2, 222, 318, 3, 2, 2, 2, 223, 224, 12, 20, 2, 2, 224, 225, 7, 11, 2, 2, 225, 317, 5, 16, 9, 20, 226, 227, 12, 18, 2, 2, 227, 228, 9, 5, 2, 2, 228, 317, 5, 16, 9, 19, 229, 230, 12, 17, 2, 2, 230, 231, 9, 6, 2, 2, 231, 317, 5, 16, 9, 18, 232, 233, 12, 16, 2, 2, 233, 234, 9, 7, 2, 2, 234, 317, 5, 16, 9, 17, 235, 236, 12, 15, 2, 2, 236, 237, 7, 19, 2, 2, 237, 317, 5, 16, 9, 16, 238, 239, 12, 14, 2, 2, 239, 240, 7, 20, 2, 2, 240, 317, 5, 16, 9, 15, 241, 242, 12, 13, 2, 2, 242, 243, 7, 21, 2, 2, 243, 317, 5, 16, 9, 14, 244, 245, 12, 12, 2, 2, 245, 246, 9, 8, 2, 2, 246, 317, 5, 16, 9, 13, 247, 248, 12, 10, 2, 2, 248, 249, 9, 9, 2, 2, 249, 317, 5, 16, 9, 11, 250, 251, 12, 9, 2, 2, 251, 252, 9, 10, 2, 2, 252, 317, 5, 16, 9, 9, 253, 254, 12, 7, 2, 2, 254, 255, 7, 61, 2, 2, 255, 317, 5, 16, 9, 7, 256, 257, 12, 6, 2, 2, 257, 258, 7, 62, 2, 2, 258, 317, 5, 16, 9, 6, 259, 260, 12, 5, 2, 2, 260, 261, 7, 22, 2, 2, 261, 317, 5, 16, 9, 5, 262, 263, 12, 4, 2, 2, 263, 264, 7, 46, 2, 2, 264, 265, 5, 16, 9, 2, 265, 266, 7, 41, 2, 2, 266, 267, 5, 16, 9, 4, 267, 317, 3, 2, 2, 2, 268, 270, 12, 25, 2, 2, 269, 271, 7, 46, 2, 2, 270, 269, 3, 2, 2, 2, 270, 271, 3, 2, 2, 2, 271, 272, 3, 2, 2, 2, 272, 273, 7, 44, 2, 2, 273, 274, 5, 18, 10, 2, 274, 275, 7, 45, 2, 2, 275, 317, 3, 2, 2, 2, 276, 277, 12, 24, 2, 2, 277, 279, 7, 44, 2, 2, 278, 280, 5, 16, 9, 2, 279, 278, 3, 2, 2, 2, 279, 280, 3, 2, 2, 2, 280, 281, 3, 2, 2, 2, 281, 283, 7, 41, 2, 2, 282, 284, 5, 16, 9, 2, 283, 282, 3, 2, 2, 2, 283, 284, 3, 2, 2, 2, 284, 289, 3, 2, 2, 2, 285, 287, 7, 41, 2, 2, 286, 288, 5, 16, 9, 2, 287, 286, 3, 2, 2, 2, 287, 288, 3, 2, 2, 2, 288, 290, 3, 2, 2, 2, 289, 285, 3, 2, 2, 2, 289, 290, 3, 2, 2, 2, 290, 291, 3, 2, 2, 2, 291, 317, 7, 45, 2, 2, 292, 294, 12, 23, 2, 2, 293, 295, 7, 46, 2, 2, 294, 293, 3, 2, 2, 2, 294, 295, 3, 2, 2, 2, 295, 296, 3, 2, 2, 2, 296, 297, 7, 47, 2, 2, 297, 317, 7, 78, 2, 2, 298, 299, 12, 22, 2, 2, 299, 305, 7, 37, 2, 2, 300, 301, 5, 24, 13, 2, 301, 302, 7, 26, 2, 2, 302, 304, 3, 2, 2, 2, 303, 300, 3, 2, 2, 2, 304, 307, 3, 2, 2, 2, 305, 303, 3, 2, 2, 2, 305, 306, 3, 2, 2, 2, 306, 309, 3, 2, 2, 2, 307, 305, 3, 2, 2, 2, 308, 310, 5, 24, 13, 2, 309, 308, 3, 2, 2, 2, 309, 310, 3, 2, 2, 2, 310, 311, 3, 2, 2, 2, 311, 317, 7, 38, 2, 2, 312, 313, 12, 21, 2, 2, 313, 317, 7, 48, 2, 2, 314, 315, 12, 11, 2, 2, 315, 317, 7, 51, 2, 2, 316, 223, 3, 2, 2, 2, 316, 226, 3, 2, 2, 2, 316, 229, 3, 2, 2, 2, 316, 232, 3, 2, 2, 2, 316, 235, 3, 2, 2, 2, 316, 238, 3, 2, 2, 2, 316, 241, 3, 2, 2, 2, 316, 244, 3, 2, 2, 2, 316, 247, 3, 2, 2, 2, 316, 250, 3, 2, 2, 2, 316, 253, 3, 2, 2, 2, 316, 256, 3, 2, 2, 2, 316, 259, 3, 2, 2, 2, 316, 262, 3, 2, 2, 2, 316, 268, 3, 2, 2, 2, 316, 276, 3, 2, 2, 2, 316, 292, 3, 2, 2, 2, 316, 298, 3, 2, 2, 2, 316, 312, 3, 2, 2, 2, 316, 314, 3, 2, 2, 2, 317, 320, 3, 2, 2, 2, 318, 316, 3, 2, 2, 2, 318, 319, 3, 2, 2, 2, 319, 17, 3, 2, 2, 2, 320, 318, 3, 2, 2, 2, 321, 322, 5, 16, 9, 2, 322, 323, 7, 26, 2, 2, 323, 325, 3, 2, 2, 2, 324, 321, 3, 2, 2, 2, 325, 328, 3, 2, 2, 2, 326, 324, 3, 2, 2, 2, 326, 327, 3, 2, 2, 2, 327, 329, 3, 2, 2, 2, 328, 326, 3, 2, 2, 2, 329, 330, 5, 16, 9, 2, 330, 19, 3, 2, 2, 2, 331, 332, 5, 18, 10, 2, 332, 333, 7, 2, 2, 3, 333, 21, 3, 2, 2, 2, 334, 335, 7, 33, 2, 2, 335, 336, 5, 18, 10, 2, 336, 337, 7, 34, 2, 2, 337, 340, 5, 18, 10, 2, 338, 339, 7, 35, 2, 2, 339, 341, 5, 18, 10, 2, 340, 338, 3, 2, 2, 2, 340, 341, 3, 2, 2, 2, 341, 345, 3, 2, 2, 2, 342, 343, 7, 27, 2, 2, 343, 345, 5, 16, 9, 2, 344, 334, 3, 2, 2, 2, 344, 342, 3, 2, 2, 2, 345, 23, 3, 2, 2, 2, 346, 347, 7, 78, 2, 2, 347, 349, 7, 10, 2, 2, 348, 346, 3, 2, 2, 2, 348, 349, 3, 2, 2, 2, 349, 350, 3, 2, 2, 2, 350, 351, 5, 16, 9, 2, 351, 25, 3, 2, 2, 2, 352, 360, 7, 74, 2, 2, 353, 360, 7, 75, 2, 2, 354, 360, 9, 11, 2, 2, 355, 360, 7, 76, 2, 2, 356, 360, 7, 77, 2, 2, 357, 360, 7, 67, 2, 2, 358, 360, 7, 78, 2, 2, 359, 352, 3, 2, 2, 2, 359, 353, 3, 2, 2, 2, 359, 354, 3, 2, 2, 2, 359, 355, 3, 2, 2, 2, 359, 356, 3, 2, 2, 2, 359, 357, 3, 2, 2, 2, 359, 358, 3, 2, 2, 2, 360, 27, 3, 2, 2, 2, 361, 362, 7, 78, 2, 2, 362, 364, 7, 26, 2, 2, 363, 361, 3, 2, 2, 2, 364, 367, 3, 2, 2, 2, 365, 363, 3, 2, 2, 2, 365, 366, 3, 2, 2, 2, 366, 368, 3, 2, 2, 2, 367, 365, 3, 2, 2, 2, 368, 369, 7, 78, 2, 2, 369, 29, 3, 2, 2, 2, 370, 371, 8, 16, 1, 2, 371, 383, 9, 12, 2, 2, 372, 373, 7, 37, 2, 2, 373, 374, 5, 30, 16, 2, 374, 375, 7, 38, 2, 2, 375, 383, 3, 2, 2, 2, 376, 377, 7, 44, 2, 2, 377, 378, 5, 30, 16, 2, 378, 379, 7, 45, 2, 2, 379, 383, 3, 2, 2, 2, 380, 381, 7, 64, 2, 2, 381, 383, 5, 30, 16, 3, 382, 370, 3, 2, 2, 2, 382, 372, 3, 2, 2, 2, 382, 376, 3, 2, 2, 2, 382, 380, 3, 2, 2, 2, 383, 394, 3, 2, 2, 2, 384, 385, 12, 5, 2, 2, 385, 386, 7, 12, 2, 2, 386, 393, 5, 30, 16, 5, 387, 388, 12, 4, 2, 2, 388, 389, 7, 64, 2, 2, 389, 393, 5, 30, 16, 4, 390, 391, 12, 6, 2, 2, 391, 393, 7, 46, 2, 2, 392, 384, 3, 2, 2, 2, 392, 387, 3, 2, 2, 2, 392, 390, 3, 2, 2, 2, 393, 396, 3, 2, 2, 2, 394, 392, 3, 2, 2, 2, 394, 395, 3, 2, 2, 2, 395, 31, 3, 2, 2, 2, 396, 394, 3, 2, 2, 2, 46, 35, 44, 54, 59, 65, 72, 84, 86, 93, 107, 113, 131, 144, 148, 152, 158, 160, 166, 172, 188, 192, 200, 213, 217, 221, 270, 279, 283, 287, 289, 294, 305, 309, 316, 318, 326, 340, 344, 348, 359, 365, 382, 392, 394] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 75, 398, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 3, 2, 7, 2, 34, 10, 2, 12, 2, 14, 2, 37, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 45, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 55, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 60, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 66, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 71, 10, 4, 12, 4, 14, 4, 74, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 85, 10, 4, 5, 4, 87, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 92, 10, 5, 12, 5, 14, 5, 95, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 106, 10, 6, 12, 6, 14, 6, 109, 11, 6, 3, 6, 3, 6, 3, 6, 5, 6, 114, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 132, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 143, 10, 6, 12, 6, 14, 6, 146, 11, 6, 3, 6, 5, 6, 149, 10, 6, 3, 6, 3, 6, 5, 6, 153, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 159, 10, 6, 5, 6, 161, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 167, 10, 7, 3, 8, 3, 8, 6, 8, 171, 10, 8, 13, 8, 14, 8, 172, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 187, 10, 9, 12, 9, 14, 9, 190, 11, 9, 3, 9, 5, 9, 193, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 6, 9, 199, 10, 9, 13, 9, 14, 9, 200, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 212, 10, 9, 12, 9, 14, 9, 215, 11, 9, 3, 9, 5, 9, 218, 10, 9, 3, 9, 3, 9, 5, 9, 222, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 271, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 280, 10, 9, 3, 9, 3, 9, 5, 9, 284, 10, 9, 3, 9, 3, 9, 5, 9, 288, 10, 9, 5, 9, 290, 10, 9, 3, 9, 3, 9, 3, 9, 5, 9, 295, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 304, 10, 9, 12, 9, 14, 9, 307, 11, 9, 3, 9, 5, 9, 310, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 317, 10, 9, 12, 9, 14, 9, 320, 11, 9, 3, 10, 3, 10, 3, 10, 7, 10, 325, 10, 10, 12, 10, 14, 10, 328, 11, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 341, 10, 12, 3, 12, 3, 12, 5, 12, 345, 10, 12, 3, 13, 3, 13, 5, 13, 349, 10, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 360, 10, 14, 3, 15, 3, 15, 7, 15, 364, 10, 15, 12, 15, 14, 15, 367, 11, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 383, 10, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 7, 16, 393, 10, 16, 12, 16, 14, 16, 396, 11, 16, 3, 16, 2, 4, 16, 30, 17, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 2, 12, 3, 2, 11, 22, 3, 2, 23, 24, 4, 2, 15, 16, 49, 49, 3, 2, 12, 14, 3, 2, 15, 16, 3, 2, 17, 18, 3, 2, 50, 51, 3, 2, 52, 53, 3, 2, 54, 59, 3, 2, 65, 66, 2, 468, 2, 35, 3, 2, 2, 2, 4, 44, 3, 2, 2, 2, 6, 86, 3, 2, 2, 2, 8, 88, 3, 2, 2, 2, 10, 160, 3, 2, 2, 2, 12, 162, 3, 2, 2, 2, 14, 168, 3, 2, 2, 2, 16, 221, 3, 2, 2, 2, 18, 326, 3, 2, 2, 2, 20, 331, 3, 2, 2, 2, 22, 344, 3, 2, 2, 2, 24, 348, 3, 2, 2, 2, 26, 359, 3, 2, 2, 2, 28, 365, 3, 2, 2, 2, 30, 382, 3, 2, 2, 2, 32, 34, 5, 4, 3, 2, 33, 32, 3, 2, 2, 2, 34, 37, 3, 2, 2, 2, 35, 33, 3, 2, 2, 2, 35, 36, 3, 2, 2, 2, 36, 38, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 38, 39, 7, 2, 2, 3, 39, 3, 3, 2, 2, 2, 40, 41, 5, 6, 4, 2, 41, 42, 7, 3, 2, 2, 42, 45, 3, 2, 2, 2, 43, 45, 5, 10, 6, 2, 44, 40, 3, 2, 2, 2, 44, 43, 3, 2, 2, 2, 45, 5, 3, 2, 2, 2, 46, 47, 7, 4, 2, 2, 47, 54, 7, 72, 2, 2, 48, 49, 7, 5, 2, 2, 49, 55, 5, 28, 15, 2, 50, 51, 7, 6, 2, 2, 51, 55, 5, 28, 15, 2, 52, 53, 7, 7, 2, 2, 53, 55, 7, 72, 2, 2, 54, 48, 3, 2, 2, 2, 54, 50, 3, 2, 2, 2, 54, 52, 3, 2, 2, 2, 54, 55, 3, 2, 2, 2, 55, 87, 3, 2, 2, 2, 56, 87, 7, 8, 2, 2, 57, 59, 7, 9, 2, 2, 58, 60, 5, 18, 10, 2, 59, 58, 3, 2, 2, 2, 59, 60, 3, 2, 2, 2, 60, 87, 3, 2, 2, 2, 61, 62, 5, 30, 16, 2, 62, 65, 7, 72, 2, 2, 63, 64, 7, 10, 2, 2, 64, 66, 5, 18, 10, 2, 65, 63, 3, 2, 2, 2, 65, 66, 3, 2, 2, 2, 66, 87, 3, 2, 2, 2, 67, 68, 5, 8, 5, 2, 68, 69, 7, 10, 2, 2, 69, 71, 3, 2, 2, 2, 70, 67, 3, 2, 2, 2, 71, 74, 3, 2, 2, 2, 72, 70, 3, 2, 2, 2, 72, 73, 3, 2, 2, 2, 73, 75, 3, 2, 2, 2, 74, 72, 3, 2, 2, 2, 75, 87, 5, 18, 10, 2, 76, 77, 5, 16, 9, 2, 77, 78, 9, 2, 2, 2, 78, 79, 7, 10, 2, 2, 79, 80, 5, 16, 9, 2, 80, 87, 3, 2, 2, 2, 81, 87, 9, 3, 2, 2, 82, 84, 7, 25, 2, 2, 83, 85, 5, 18, 10, 2, 84, 83, 3, 2, 2, 2, 84, 85, 3, 2, 2, 2, 85, 87, 3, 2, 2, 2, 86, 46, 3, 2, 2, 2, 86, 56, 3, 2, 2, 2, 86, 57, 3, 2, 2, 2, 86, 61, 3, 2, 2, 2, 86, 72, 3, 2, 2, 2, 86, 76, 3, 2, 2, 2, 86, 81, 3, 2, 2, 2, 86, 82, 3, 2, 2, 2, 87, 7, 3, 2, 2, 2, 88, 93, 5, 16, 9, 2, 89, 90, 7, 26, 2, 2, 90, 92, 5, 16, 9, 2, 91, 89, 3, 2, 2, 2, 92, 95, 3, 2, 2, 2, 93, 91, 3, 2, 2, 2, 93, 94, 3, 2, 2, 2, 94, 9, 3, 2, 2, 2, 95, 93, 3, 2, 2, 2, 96, 97, 7, 27, 2, 2, 97, 98, 5, 16, 9, 2, 98, 99, 7, 28, 2, 2, 99, 107, 5, 14, 8, 2, 100, 101, 7, 29, 2, 2, 101, 102, 5, 16, 9, 2, 102, 103, 7, 28, 2, 2, 103, 104, 5, 14, 8, 2, 104, 106, 3, 2, 2, 2, 105, 100, 3, 2, 2, 2, 106, 109, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 107, 108, 3, 2, 2, 2, 108, 113, 3, 2, 2, 2, 109, 107, 3, 2, 2, 2, 110, 111, 7, 30, 2, 2, 111, 112, 7, 28, 2, 2, 112, 114, 5, 14, 8, 2, 113, 110, 3, 2, 2, 2, 113, 114, 3, 2, 2, 2, 114, 161, 3, 2, 2, 2, 115, 116, 7, 31, 2, 2, 116, 117, 5, 16, 9, 2, 117, 118, 7, 28, 2, 2, 118, 119, 5, 14, 8, 2, 119, 161, 3, 2, 2, 2, 120, 121, 7, 32, 2, 2, 121, 122, 5, 16, 9, 2, 122, 123, 7, 28, 2, 2, 123, 124, 5, 14, 8, 2, 124, 161, 3, 2, 2, 2, 125, 126, 7, 33, 2, 2, 126, 127, 5, 18, 10, 2, 127, 128, 7, 34, 2, 2, 128, 131, 5, 18, 10, 2, 129, 130, 7, 35, 2, 2, 130, 132, 5, 18, 10, 2, 131, 129, 3, 2, 2, 2, 131, 132, 3, 2, 2, 2, 132, 133, 3, 2, 2, 2, 133, 134, 7, 28, 2, 2, 134, 135, 5, 14, 8, 2, 135, 161, 3, 2, 2, 2, 136, 137, 7, 36, 2, 2, 137, 138, 7, 72, 2, 2, 138, 144, 7, 37, 2, 2, 139, 140, 5, 12, 7, 2, 140, 141, 7, 26, 2, 2, 141, 143, 3, 2, 2, 2, 142, 139, 3, 2, 2, 2, 143, 146, 3, 2, 2, 2, 144, 142, 3, 2, 2, 2, 144, 145, 3, 2, 2, 2, 145, 148, 3, 2, 2, 2, 146, 144, 3, 2, 2, 2, 147, 149, 5, 12, 7, 2, 148, 147, 3, 2, 2, 2, 148, 149, 3, 2, 2, 2, 149, 150, 3, 2, 2, 2, 150, 152, 7, 38, 2, 2, 151, 153, 5, 30, 16, 2, 152, 151, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 158, 3, 2, 2, 2, 154, 155, 7, 39, 2, 2, 155, 159, 5, 14, 8, 2, 156, 157, 7, 40, 2, 2, 157, 159, 7, 3, 2, 2, 158, 154, 3, 2, 2, 2, 158, 156, 3, 2, 2, 2, 159, 161, 3, 2, 2, 2, 160, 96, 3, 2, 2, 2, 160, 115, 3, 2, 2, 2, 160, 120, 3, 2, 2, 2, 160, 125, 3, 2, 2, 2, 160, 136, 3, 2, 2, 2, 161, 11, 3, 2, 2, 2, 162, 163, 5, 30, 16, 2, 163, 166, 7, 72, 2, 2, 164, 165, 7, 41, 2, 2, 165, 167, 5, 16, 9, 2, 166, 164, 3, 2, 2, 2, 166, 167, 3, 2, 2, 2, 167, 13, 3, 2, 2, 2, 168, 170, 7, 42, 2, 2, 169, 171, 5, 4, 3, 2, 170, 169, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 170, 3, 2, 2, 2, 172, 173, 3, 2, 2, 2, 173, 174, 3, 2, 2, 2, 174, 175, 7, 43, 2, 2, 175, 15, 3, 2, 2, 2, 176, 177, 8, 9, 1, 2, 177, 222, 5, 26, 14, 2, 178, 179, 7, 37, 2, 2, 179, 180, 5, 18, 10, 2, 180, 181, 7, 38, 2, 2, 181, 222, 3, 2, 2, 2, 182, 188, 7, 44, 2, 2, 183, 184, 5, 16, 9, 2, 184, 185, 7, 26, 2, 2, 185, 187, 3, 2, 2, 2, 186, 183, 3, 2, 2, 2, 187, 190, 3, 2, 2, 2, 188, 186, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 192, 3, 2, 2, 2, 190, 188, 3, 2, 2, 2, 191, 193, 5, 16, 9, 2, 192, 191, 3, 2, 2, 2, 192, 193, 3, 2, 2, 2, 193, 194, 3, 2, 2, 2, 194, 222, 7, 45, 2, 2, 195, 196, 7, 44, 2, 2, 196, 198, 5, 16, 9, 2, 197, 199, 5, 22, 12, 2, 198, 197, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 198, 3, 2, 2, 2, 200, 201, 3, 2, 2, 2, 201, 202, 3, 2, 2, 2, 202, 203, 7, 45, 2, 2, 203, 222, 3, 2, 2, 2, 204, 205, 9, 4, 2, 2, 205, 222, 5, 16, 9, 19, 206, 207, 7, 60, 2, 2, 207, 222, 5, 16, 9, 8, 208, 213, 7, 63, 2, 2, 209, 210, 7, 72, 2, 2, 210, 212, 7, 26, 2, 2, 211, 209, 3, 2, 2, 2, 212, 215, 3, 2, 2, 2, 213, 211, 3, 2, 2, 2, 213, 214, 3, 2, 2, 2, 214, 217, 3, 2, 2, 2, 215, 213, 3, 2, 2, 2, 216, 218, 7, 72, 2, 2, 217, 216, 3, 2, 2, 2, 217, 218, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 220, 7, 64, 2, 2, 220, 222, 5, 16, 9, 3, 221, 176, 3, 2, 2, 2, 221, 178, 3, 2, 2, 2, 221, 182, 3, 2, 2, 2, 221, 195, 3, 2, 2, 2, 221, 204, 3, 2, 2, 2, 221, 206, 3, 2, 2, 2, 221, 208, 3, 2, 2, 2, 222, 318, 3, 2, 2, 2, 223, 224, 12, 20, 2, 2, 224, 225, 7, 11, 2, 2, 225, 317, 5, 16, 9, 20, 226, 227, 12, 18, 2, 2, 227, 228, 9, 5, 2, 2, 228, 317, 5, 16, 9, 19, 229, 230, 12, 17, 2, 2, 230, 231, 9, 6, 2, 2, 231, 317, 5, 16, 9, 18, 232, 233, 12, 16, 2, 2, 233, 234, 9, 7, 2, 2, 234, 317, 5, 16, 9, 17, 235, 236, 12, 15, 2, 2, 236, 237, 7, 19, 2, 2, 237, 317, 5, 16, 9, 16, 238, 239, 12, 14, 2, 2, 239, 240, 7, 20, 2, 2, 240, 317, 5, 16, 9, 15, 241, 242, 12, 13, 2, 2, 242, 243, 7, 21, 2, 2, 243, 317, 5, 16, 9, 14, 244, 245, 12, 12, 2, 2, 245, 246, 9, 8, 2, 2, 246, 317, 5, 16, 9, 13, 247, 248, 12, 10, 2, 2, 248, 249, 9, 9, 2, 2, 249, 317, 5, 16, 9, 11, 250, 251, 12, 9, 2, 2, 251, 252, 9, 10, 2, 2, 252, 317, 5, 16, 9, 9, 253, 254, 12, 7, 2, 2, 254, 255, 7, 61, 2, 2, 255, 317, 5, 16, 9, 7, 256, 257, 12, 6, 2, 2, 257, 258, 7, 62, 2, 2, 258, 317, 5, 16, 9, 6, 259, 260, 12, 5, 2, 2, 260, 261, 7, 22, 2, 2, 261, 317, 5, 16, 9, 5, 262, 263, 12, 4, 2, 2, 263, 264, 7, 46, 2, 2, 264, 265, 5, 16, 9, 2, 265, 266, 7, 41, 2, 2, 266, 267, 5, 16, 9, 4, 267, 317, 3, 2, 2, 2, 268, 270, 12, 25, 2, 2, 269, 271, 7, 46, 2, 2, 270, 269, 3, 2, 2, 2, 270, 271, 3, 2, 2, 2, 271, 272, 3, 2, 2, 2, 272, 273, 7, 44, 2, 2, 273, 274, 5, 18, 10, 2, 274, 275, 7, 45, 2, 2, 275, 317, 3, 2, 2, 2, 276, 277, 12, 24, 2, 2, 277, 279, 7, 44, 2, 2, 278, 280, 5, 16, 9, 2, 279, 278, 3, 2, 2, 2, 279, 280, 3, 2, 2, 2, 280, 281, 3, 2, 2, 2, 281, 283, 7, 41, 2, 2, 282, 284, 5, 16, 9, 2, 283, 282, 3, 2, 2, 2, 283, 284, 3, 2, 2, 2, 284, 289, 3, 2, 2, 2, 285, 287, 7, 41, 2, 2, 286, 288, 5, 16, 9, 2, 287, 286, 3, 2, 2, 2, 287, 288, 3, 2, 2, 2, 288, 290, 3, 2, 2, 2, 289, 285, 3, 2, 2, 2, 289, 290, 3, 2, 2, 2, 290, 291, 3, 2, 2, 2, 291, 317, 7, 45, 2, 2, 292, 294, 12, 23, 2, 2, 293, 295, 7, 46, 2, 2, 294, 293, 3, 2, 2, 2, 294, 295, 3, 2, 2, 2, 295, 296, 3, 2, 2, 2, 296, 297, 7, 47, 2, 2, 297, 317, 7, 72, 2, 2, 298, 299, 12, 22, 2, 2, 299, 305, 7, 37, 2, 2, 300, 301, 5, 24, 13, 2, 301, 302, 7, 26, 2, 2, 302, 304, 3, 2, 2, 2, 303, 300, 3, 2, 2, 2, 304, 307, 3, 2, 2, 2, 305, 303, 3, 2, 2, 2, 305, 306, 3, 2, 2, 2, 306, 309, 3, 2, 2, 2, 307, 305, 3, 2, 2, 2, 308, 310, 5, 24, 13, 2, 309, 308, 3, 2, 2, 2, 309, 310, 3, 2, 2, 2, 310, 311, 3, 2, 2, 2, 311, 317, 7, 38, 2, 2, 312, 313, 12, 21, 2, 2, 313, 317, 7, 48, 2, 2, 314, 315, 12, 11, 2, 2, 315, 317, 7, 51, 2, 2, 316, 223, 3, 2, 2, 2, 316, 226, 3, 2, 2, 2, 316, 229, 3, 2, 2, 2, 316, 232, 3, 2, 2, 2, 316, 235, 3, 2, 2, 2, 316, 238, 3, 2, 2, 2, 316, 241, 3, 2, 2, 2, 316, 244, 3, 2, 2, 2, 316, 247, 3, 2, 2, 2, 316, 250, 3, 2, 2, 2, 316, 253, 3, 2, 2, 2, 316, 256, 3, 2, 2, 2, 316, 259, 3, 2, 2, 2, 316, 262, 3, 2, 2, 2, 316, 268, 3, 2, 2, 2, 316, 276, 3, 2, 2, 2, 316, 292, 3, 2, 2, 2, 316, 298, 3, 2, 2, 2, 316, 312, 3, 2, 2, 2, 316, 314, 3, 2, 2, 2, 317, 320, 3, 2, 2, 2, 318, 316, 3, 2, 2, 2, 318, 319, 3, 2, 2, 2, 319, 17, 3, 2, 2, 2, 320, 318, 3, 2, 2, 2, 321, 322, 5, 16, 9, 2, 322, 323, 7, 26, 2, 2, 323, 325, 3, 2, 2, 2, 324, 321, 3, 2, 2, 2, 325, 328, 3, 2, 2, 2, 326, 324, 3, 2, 2, 2, 326, 327, 3, 2, 2, 2, 327, 329, 3, 2, 2, 2, 328, 326, 3, 2, 2, 2, 329, 330, 5, 16, 9, 2, 330, 19, 3, 2, 2, 2, 331, 332, 5, 18, 10, 2, 332, 333, 7, 2, 2, 3, 333, 21, 3, 2, 2, 2, 334, 335, 7, 33, 2, 2, 335, 336, 5, 18, 10, 2, 336, 337, 7, 34, 2, 2, 337, 340, 5, 18, 10, 2, 338, 339, 7, 35, 2, 2, 339, 341, 5, 18, 10, 2, 340, 338, 3, 2, 2, 2, 340, 341, 3, 2, 2, 2, 341, 345, 3, 2, 2, 2, 342, 343, 7, 27, 2, 2, 343, 345, 5, 16, 9, 2, 344, 334, 3, 2, 2, 2, 344, 342, 3, 2, 2, 2, 345, 23, 3, 2, 2, 2, 346, 347, 7, 72, 2, 2, 347, 349, 7, 10, 2, 2, 348, 346, 3, 2, 2, 2, 348, 349, 3, 2, 2, 2, 349, 350, 3, 2, 2, 2, 350, 351, 5, 16, 9, 2, 351, 25, 3, 2, 2, 2, 352, 360, 7, 68, 2, 2, 353, 360, 7, 69, 2, 2, 354, 360, 9, 11, 2, 2, 355, 360, 7, 70, 2, 2, 356, 360, 7, 71, 2, 2, 357, 360, 7, 67, 2, 2, 358, 360, 7, 72, 2, 2, 359, 352, 3, 2, 2, 2, 359, 353, 3, 2, 2, 2, 359, 354, 3, 2, 2, 2, 359, 355, 3, 2, 2, 2, 359, 356, 3, 2, 2, 2, 359, 357, 3, 2, 2, 2, 359, 358, 3, 2, 2, 2, 360, 27, 3, 2, 2, 2, 361, 362, 7, 72, 2, 2, 362, 364, 7, 26, 2, 2, 363, 361, 3, 2, 2, 2, 364, 367, 3, 2, 2, 2, 365, 363, 3, 2, 2, 2, 365, 366, 3, 2, 2, 2, 366, 368, 3, 2, 2, 2, 367, 365, 3, 2, 2, 2, 368, 369, 7, 72, 2, 2, 369, 29, 3, 2, 2, 2, 370, 371, 8, 16, 1, 2, 371, 383, 7, 72, 2, 2, 372, 373, 7, 37, 2, 2, 373, 374, 5, 30, 16, 2, 374, 375, 7, 38, 2, 2, 375, 383, 3, 2, 2, 2, 376, 377, 7, 44, 2, 2, 377, 378, 5, 30, 16, 2, 378, 379, 7, 45, 2, 2, 379, 383, 3, 2, 2, 2, 380, 381, 7, 64, 2, 2, 381, 383, 5, 30, 16, 3, 382, 370, 3, 2, 2, 2, 382, 372, 3, 2, 2, 2, 382, 376, 3, 2, 2, 2, 382, 380, 3, 2, 2, 2, 383, 394, 3, 2, 2, 2, 384, 385, 12, 5, 2, 2, 385, 386, 7, 12, 2, 2, 386, 393, 5, 30, 16, 5, 387, 388, 12, 4, 2, 2, 388, 389, 7, 64, 2, 2, 389, 393, 5, 30, 16, 4, 390, 391, 12, 6, 2, 2, 391, 393, 7, 46, 2, 2, 392, 384, 3, 2, 2, 2, 392, 387, 3, 2, 2, 2, 392, 390, 3, 2, 2, 2, 393, 396, 3, 2, 2, 2, 394, 392, 3, 2, 2, 2, 394, 395, 3, 2, 2, 2, 395, 31, 3, 2, 2, 2, 396, 394, 3, 2, 2, 2, 46, 35, 44, 54, 59, 65, 72, 84, 86, 93, 107, 113, 131, 144, 148, 152, 158, 160, 166, 172, 188, 192, 200, 213, 217, 221, 270, 279, 283, 287, 289, 294, 305, 309, 316, 318, 326, 340, 344, 348, 359, 365, 382, 392, 394] \ No newline at end of file diff --git a/src/antlr/Pyxell.tokens b/src/antlr/Pyxell.tokens index c629459f..cae091a4 100644 --- a/src/antlr/Pyxell.tokens +++ b/src/antlr/Pyxell.tokens @@ -63,20 +63,14 @@ T__61=62 T__62=63 T__63=64 T__64=65 -T__65=66 -T__66=67 -T__67=68 -T__68=69 -T__69=70 -T__70=71 -INT=72 -FLOAT=73 -CHAR=74 -STRING=75 -ID=76 -COMMENT=77 -WS=78 -ERR=79 +INT=66 +FLOAT=67 +CHAR=68 +STRING=69 +ID=70 +COMMENT=71 +WS=72 +ERR=73 ';'=1 'use'=2 'only'=3 @@ -142,9 +136,3 @@ ERR=79 'true'=63 'false'=64 'null'=65 -'Void'=66 -'Int'=67 -'Float'=68 -'Bool'=69 -'Char'=70 -'String'=71 diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp index f73fe2b5..5b617d6a 100644 --- a/src/antlr/PyxellLexer.interp +++ b/src/antlr/PyxellLexer.interp @@ -65,12 +65,6 @@ null 'true' 'false' 'null' -'Void' -'Int' -'Float' -'Bool' -'Char' -'String' null null null @@ -147,12 +141,6 @@ null null null null -null -null -null -null -null -null INT FLOAT CHAR @@ -228,12 +216,6 @@ T__61 T__62 T__63 T__64 -T__65 -T__66 -T__67 -T__68 -T__69 -T__70 INT FLOAT CHAR @@ -254,4 +236,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 81, 516, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 73, 6, 73, 433, 10, 73, 13, 73, 14, 73, 434, 3, 74, 6, 74, 438, 10, 74, 13, 74, 14, 74, 439, 3, 74, 3, 74, 6, 74, 444, 10, 74, 13, 74, 14, 74, 445, 3, 74, 3, 74, 5, 74, 450, 10, 74, 3, 74, 6, 74, 453, 10, 74, 13, 74, 14, 74, 454, 5, 74, 457, 10, 74, 3, 75, 3, 75, 3, 75, 3, 75, 7, 75, 463, 10, 75, 12, 75, 14, 75, 466, 11, 75, 3, 75, 3, 75, 3, 76, 3, 76, 3, 76, 3, 76, 7, 76, 474, 10, 76, 12, 76, 14, 76, 477, 11, 76, 3, 76, 3, 76, 3, 77, 3, 77, 7, 77, 483, 10, 77, 12, 77, 14, 77, 486, 11, 77, 3, 78, 3, 78, 3, 79, 3, 79, 3, 80, 3, 80, 3, 80, 5, 80, 495, 10, 80, 3, 81, 3, 81, 3, 81, 3, 81, 7, 81, 501, 10, 81, 12, 81, 14, 81, 504, 11, 81, 3, 81, 3, 81, 3, 82, 6, 82, 509, 10, 82, 13, 82, 14, 82, 510, 3, 82, 3, 82, 3, 83, 3, 83, 2, 2, 84, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 74, 147, 75, 149, 76, 151, 77, 153, 78, 155, 2, 157, 2, 159, 2, 161, 79, 163, 80, 165, 81, 3, 2, 11, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 4, 2, 41, 41, 97, 97, 4, 2, 12, 12, 14, 15, 5, 2, 11, 12, 15, 15, 34, 34, 2, 527, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 161, 3, 2, 2, 2, 2, 163, 3, 2, 2, 2, 2, 165, 3, 2, 2, 2, 3, 167, 3, 2, 2, 2, 5, 169, 3, 2, 2, 2, 7, 173, 3, 2, 2, 2, 9, 178, 3, 2, 2, 2, 11, 185, 3, 2, 2, 2, 13, 188, 3, 2, 2, 2, 15, 193, 3, 2, 2, 2, 17, 199, 3, 2, 2, 2, 19, 201, 3, 2, 2, 2, 21, 203, 3, 2, 2, 2, 23, 205, 3, 2, 2, 2, 25, 207, 3, 2, 2, 2, 27, 209, 3, 2, 2, 2, 29, 211, 3, 2, 2, 2, 31, 213, 3, 2, 2, 2, 33, 216, 3, 2, 2, 2, 35, 219, 3, 2, 2, 2, 37, 221, 3, 2, 2, 2, 39, 223, 3, 2, 2, 2, 41, 225, 3, 2, 2, 2, 43, 228, 3, 2, 2, 2, 45, 234, 3, 2, 2, 2, 47, 243, 3, 2, 2, 2, 49, 250, 3, 2, 2, 2, 51, 252, 3, 2, 2, 2, 53, 255, 3, 2, 2, 2, 55, 258, 3, 2, 2, 2, 57, 263, 3, 2, 2, 2, 59, 268, 3, 2, 2, 2, 61, 274, 3, 2, 2, 2, 63, 280, 3, 2, 2, 2, 65, 284, 3, 2, 2, 2, 67, 287, 3, 2, 2, 2, 69, 292, 3, 2, 2, 2, 71, 297, 3, 2, 2, 2, 73, 299, 3, 2, 2, 2, 75, 301, 3, 2, 2, 2, 77, 305, 3, 2, 2, 2, 79, 312, 3, 2, 2, 2, 81, 314, 3, 2, 2, 2, 83, 316, 3, 2, 2, 2, 85, 318, 3, 2, 2, 2, 87, 320, 3, 2, 2, 2, 89, 322, 3, 2, 2, 2, 91, 324, 3, 2, 2, 2, 93, 326, 3, 2, 2, 2, 95, 328, 3, 2, 2, 2, 97, 330, 3, 2, 2, 2, 99, 333, 3, 2, 2, 2, 101, 337, 3, 2, 2, 2, 103, 340, 3, 2, 2, 2, 105, 346, 3, 2, 2, 2, 107, 349, 3, 2, 2, 2, 109, 352, 3, 2, 2, 2, 111, 354, 3, 2, 2, 2, 113, 357, 3, 2, 2, 2, 115, 359, 3, 2, 2, 2, 117, 362, 3, 2, 2, 2, 119, 366, 3, 2, 2, 2, 121, 370, 3, 2, 2, 2, 123, 373, 3, 2, 2, 2, 125, 380, 3, 2, 2, 2, 127, 383, 3, 2, 2, 2, 129, 388, 3, 2, 2, 2, 131, 394, 3, 2, 2, 2, 133, 399, 3, 2, 2, 2, 135, 404, 3, 2, 2, 2, 137, 408, 3, 2, 2, 2, 139, 414, 3, 2, 2, 2, 141, 419, 3, 2, 2, 2, 143, 424, 3, 2, 2, 2, 145, 432, 3, 2, 2, 2, 147, 437, 3, 2, 2, 2, 149, 458, 3, 2, 2, 2, 151, 469, 3, 2, 2, 2, 153, 480, 3, 2, 2, 2, 155, 487, 3, 2, 2, 2, 157, 489, 3, 2, 2, 2, 159, 494, 3, 2, 2, 2, 161, 496, 3, 2, 2, 2, 163, 508, 3, 2, 2, 2, 165, 514, 3, 2, 2, 2, 167, 168, 7, 61, 2, 2, 168, 4, 3, 2, 2, 2, 169, 170, 7, 119, 2, 2, 170, 171, 7, 117, 2, 2, 171, 172, 7, 103, 2, 2, 172, 6, 3, 2, 2, 2, 173, 174, 7, 113, 2, 2, 174, 175, 7, 112, 2, 2, 175, 176, 7, 110, 2, 2, 176, 177, 7, 123, 2, 2, 177, 8, 3, 2, 2, 2, 178, 179, 7, 106, 2, 2, 179, 180, 7, 107, 2, 2, 180, 181, 7, 102, 2, 2, 181, 182, 7, 107, 2, 2, 182, 183, 7, 112, 2, 2, 183, 184, 7, 105, 2, 2, 184, 10, 3, 2, 2, 2, 185, 186, 7, 99, 2, 2, 186, 187, 7, 117, 2, 2, 187, 12, 3, 2, 2, 2, 188, 189, 7, 117, 2, 2, 189, 190, 7, 109, 2, 2, 190, 191, 7, 107, 2, 2, 191, 192, 7, 114, 2, 2, 192, 14, 3, 2, 2, 2, 193, 194, 7, 114, 2, 2, 194, 195, 7, 116, 2, 2, 195, 196, 7, 107, 2, 2, 196, 197, 7, 112, 2, 2, 197, 198, 7, 118, 2, 2, 198, 16, 3, 2, 2, 2, 199, 200, 7, 63, 2, 2, 200, 18, 3, 2, 2, 2, 201, 202, 7, 96, 2, 2, 202, 20, 3, 2, 2, 2, 203, 204, 7, 44, 2, 2, 204, 22, 3, 2, 2, 2, 205, 206, 7, 49, 2, 2, 206, 24, 3, 2, 2, 2, 207, 208, 7, 39, 2, 2, 208, 26, 3, 2, 2, 2, 209, 210, 7, 45, 2, 2, 210, 28, 3, 2, 2, 2, 211, 212, 7, 47, 2, 2, 212, 30, 3, 2, 2, 2, 213, 214, 7, 62, 2, 2, 214, 215, 7, 62, 2, 2, 215, 32, 3, 2, 2, 2, 216, 217, 7, 64, 2, 2, 217, 218, 7, 64, 2, 2, 218, 34, 3, 2, 2, 2, 219, 220, 7, 40, 2, 2, 220, 36, 3, 2, 2, 2, 221, 222, 7, 38, 2, 2, 222, 38, 3, 2, 2, 2, 223, 224, 7, 126, 2, 2, 224, 40, 3, 2, 2, 2, 225, 226, 7, 65, 2, 2, 226, 227, 7, 65, 2, 2, 227, 42, 3, 2, 2, 2, 228, 229, 7, 100, 2, 2, 229, 230, 7, 116, 2, 2, 230, 231, 7, 103, 2, 2, 231, 232, 7, 99, 2, 2, 232, 233, 7, 109, 2, 2, 233, 44, 3, 2, 2, 2, 234, 235, 7, 101, 2, 2, 235, 236, 7, 113, 2, 2, 236, 237, 7, 112, 2, 2, 237, 238, 7, 118, 2, 2, 238, 239, 7, 107, 2, 2, 239, 240, 7, 112, 2, 2, 240, 241, 7, 119, 2, 2, 241, 242, 7, 103, 2, 2, 242, 46, 3, 2, 2, 2, 243, 244, 7, 116, 2, 2, 244, 245, 7, 103, 2, 2, 245, 246, 7, 118, 2, 2, 246, 247, 7, 119, 2, 2, 247, 248, 7, 116, 2, 2, 248, 249, 7, 112, 2, 2, 249, 48, 3, 2, 2, 2, 250, 251, 7, 46, 2, 2, 251, 50, 3, 2, 2, 2, 252, 253, 7, 107, 2, 2, 253, 254, 7, 104, 2, 2, 254, 52, 3, 2, 2, 2, 255, 256, 7, 102, 2, 2, 256, 257, 7, 113, 2, 2, 257, 54, 3, 2, 2, 2, 258, 259, 7, 103, 2, 2, 259, 260, 7, 110, 2, 2, 260, 261, 7, 107, 2, 2, 261, 262, 7, 104, 2, 2, 262, 56, 3, 2, 2, 2, 263, 264, 7, 103, 2, 2, 264, 265, 7, 110, 2, 2, 265, 266, 7, 117, 2, 2, 266, 267, 7, 103, 2, 2, 267, 58, 3, 2, 2, 2, 268, 269, 7, 121, 2, 2, 269, 270, 7, 106, 2, 2, 270, 271, 7, 107, 2, 2, 271, 272, 7, 110, 2, 2, 272, 273, 7, 103, 2, 2, 273, 60, 3, 2, 2, 2, 274, 275, 7, 119, 2, 2, 275, 276, 7, 112, 2, 2, 276, 277, 7, 118, 2, 2, 277, 278, 7, 107, 2, 2, 278, 279, 7, 110, 2, 2, 279, 62, 3, 2, 2, 2, 280, 281, 7, 104, 2, 2, 281, 282, 7, 113, 2, 2, 282, 283, 7, 116, 2, 2, 283, 64, 3, 2, 2, 2, 284, 285, 7, 107, 2, 2, 285, 286, 7, 112, 2, 2, 286, 66, 3, 2, 2, 2, 287, 288, 7, 117, 2, 2, 288, 289, 7, 118, 2, 2, 289, 290, 7, 103, 2, 2, 290, 291, 7, 114, 2, 2, 291, 68, 3, 2, 2, 2, 292, 293, 7, 104, 2, 2, 293, 294, 7, 119, 2, 2, 294, 295, 7, 112, 2, 2, 295, 296, 7, 101, 2, 2, 296, 70, 3, 2, 2, 2, 297, 298, 7, 42, 2, 2, 298, 72, 3, 2, 2, 2, 299, 300, 7, 43, 2, 2, 300, 74, 3, 2, 2, 2, 301, 302, 7, 102, 2, 2, 302, 303, 7, 103, 2, 2, 303, 304, 7, 104, 2, 2, 304, 76, 3, 2, 2, 2, 305, 306, 7, 103, 2, 2, 306, 307, 7, 122, 2, 2, 307, 308, 7, 118, 2, 2, 308, 309, 7, 103, 2, 2, 309, 310, 7, 116, 2, 2, 310, 311, 7, 112, 2, 2, 311, 78, 3, 2, 2, 2, 312, 313, 7, 60, 2, 2, 313, 80, 3, 2, 2, 2, 314, 315, 7, 125, 2, 2, 315, 82, 3, 2, 2, 2, 316, 317, 7, 127, 2, 2, 317, 84, 3, 2, 2, 2, 318, 319, 7, 93, 2, 2, 319, 86, 3, 2, 2, 2, 320, 321, 7, 95, 2, 2, 321, 88, 3, 2, 2, 2, 322, 323, 7, 65, 2, 2, 323, 90, 3, 2, 2, 2, 324, 325, 7, 48, 2, 2, 325, 92, 3, 2, 2, 2, 326, 327, 7, 35, 2, 2, 327, 94, 3, 2, 2, 2, 328, 329, 7, 128, 2, 2, 329, 96, 3, 2, 2, 2, 330, 331, 7, 48, 2, 2, 331, 332, 7, 48, 2, 2, 332, 98, 3, 2, 2, 2, 333, 334, 7, 48, 2, 2, 334, 335, 7, 48, 2, 2, 335, 336, 7, 48, 2, 2, 336, 100, 3, 2, 2, 2, 337, 338, 7, 107, 2, 2, 338, 339, 7, 117, 2, 2, 339, 102, 3, 2, 2, 2, 340, 341, 7, 107, 2, 2, 341, 342, 7, 117, 2, 2, 342, 343, 7, 112, 2, 2, 343, 344, 7, 41, 2, 2, 344, 345, 7, 118, 2, 2, 345, 104, 3, 2, 2, 2, 346, 347, 7, 63, 2, 2, 347, 348, 7, 63, 2, 2, 348, 106, 3, 2, 2, 2, 349, 350, 7, 35, 2, 2, 350, 351, 7, 63, 2, 2, 351, 108, 3, 2, 2, 2, 352, 353, 7, 62, 2, 2, 353, 110, 3, 2, 2, 2, 354, 355, 7, 62, 2, 2, 355, 356, 7, 63, 2, 2, 356, 112, 3, 2, 2, 2, 357, 358, 7, 64, 2, 2, 358, 114, 3, 2, 2, 2, 359, 360, 7, 64, 2, 2, 360, 361, 7, 63, 2, 2, 361, 116, 3, 2, 2, 2, 362, 363, 7, 112, 2, 2, 363, 364, 7, 113, 2, 2, 364, 365, 7, 118, 2, 2, 365, 118, 3, 2, 2, 2, 366, 367, 7, 99, 2, 2, 367, 368, 7, 112, 2, 2, 368, 369, 7, 102, 2, 2, 369, 120, 3, 2, 2, 2, 370, 371, 7, 113, 2, 2, 371, 372, 7, 116, 2, 2, 372, 122, 3, 2, 2, 2, 373, 374, 7, 110, 2, 2, 374, 375, 7, 99, 2, 2, 375, 376, 7, 111, 2, 2, 376, 377, 7, 100, 2, 2, 377, 378, 7, 102, 2, 2, 378, 379, 7, 99, 2, 2, 379, 124, 3, 2, 2, 2, 380, 381, 7, 47, 2, 2, 381, 382, 7, 64, 2, 2, 382, 126, 3, 2, 2, 2, 383, 384, 7, 118, 2, 2, 384, 385, 7, 116, 2, 2, 385, 386, 7, 119, 2, 2, 386, 387, 7, 103, 2, 2, 387, 128, 3, 2, 2, 2, 388, 389, 7, 104, 2, 2, 389, 390, 7, 99, 2, 2, 390, 391, 7, 110, 2, 2, 391, 392, 7, 117, 2, 2, 392, 393, 7, 103, 2, 2, 393, 130, 3, 2, 2, 2, 394, 395, 7, 112, 2, 2, 395, 396, 7, 119, 2, 2, 396, 397, 7, 110, 2, 2, 397, 398, 7, 110, 2, 2, 398, 132, 3, 2, 2, 2, 399, 400, 7, 88, 2, 2, 400, 401, 7, 113, 2, 2, 401, 402, 7, 107, 2, 2, 402, 403, 7, 102, 2, 2, 403, 134, 3, 2, 2, 2, 404, 405, 7, 75, 2, 2, 405, 406, 7, 112, 2, 2, 406, 407, 7, 118, 2, 2, 407, 136, 3, 2, 2, 2, 408, 409, 7, 72, 2, 2, 409, 410, 7, 110, 2, 2, 410, 411, 7, 113, 2, 2, 411, 412, 7, 99, 2, 2, 412, 413, 7, 118, 2, 2, 413, 138, 3, 2, 2, 2, 414, 415, 7, 68, 2, 2, 415, 416, 7, 113, 2, 2, 416, 417, 7, 113, 2, 2, 417, 418, 7, 110, 2, 2, 418, 140, 3, 2, 2, 2, 419, 420, 7, 69, 2, 2, 420, 421, 7, 106, 2, 2, 421, 422, 7, 99, 2, 2, 422, 423, 7, 116, 2, 2, 423, 142, 3, 2, 2, 2, 424, 425, 7, 85, 2, 2, 425, 426, 7, 118, 2, 2, 426, 427, 7, 116, 2, 2, 427, 428, 7, 107, 2, 2, 428, 429, 7, 112, 2, 2, 429, 430, 7, 105, 2, 2, 430, 144, 3, 2, 2, 2, 431, 433, 5, 155, 78, 2, 432, 431, 3, 2, 2, 2, 433, 434, 3, 2, 2, 2, 434, 432, 3, 2, 2, 2, 434, 435, 3, 2, 2, 2, 435, 146, 3, 2, 2, 2, 436, 438, 5, 155, 78, 2, 437, 436, 3, 2, 2, 2, 438, 439, 3, 2, 2, 2, 439, 437, 3, 2, 2, 2, 439, 440, 3, 2, 2, 2, 440, 441, 3, 2, 2, 2, 441, 443, 7, 48, 2, 2, 442, 444, 5, 155, 78, 2, 443, 442, 3, 2, 2, 2, 444, 445, 3, 2, 2, 2, 445, 443, 3, 2, 2, 2, 445, 446, 3, 2, 2, 2, 446, 456, 3, 2, 2, 2, 447, 449, 7, 103, 2, 2, 448, 450, 7, 47, 2, 2, 449, 448, 3, 2, 2, 2, 449, 450, 3, 2, 2, 2, 450, 452, 3, 2, 2, 2, 451, 453, 5, 155, 78, 2, 452, 451, 3, 2, 2, 2, 453, 454, 3, 2, 2, 2, 454, 452, 3, 2, 2, 2, 454, 455, 3, 2, 2, 2, 455, 457, 3, 2, 2, 2, 456, 447, 3, 2, 2, 2, 456, 457, 3, 2, 2, 2, 457, 148, 3, 2, 2, 2, 458, 464, 7, 41, 2, 2, 459, 463, 10, 2, 2, 2, 460, 461, 7, 94, 2, 2, 461, 463, 9, 3, 2, 2, 462, 459, 3, 2, 2, 2, 462, 460, 3, 2, 2, 2, 463, 466, 3, 2, 2, 2, 464, 462, 3, 2, 2, 2, 464, 465, 3, 2, 2, 2, 465, 467, 3, 2, 2, 2, 466, 464, 3, 2, 2, 2, 467, 468, 7, 41, 2, 2, 468, 150, 3, 2, 2, 2, 469, 475, 7, 36, 2, 2, 470, 474, 10, 4, 2, 2, 471, 472, 7, 94, 2, 2, 472, 474, 9, 5, 2, 2, 473, 470, 3, 2, 2, 2, 473, 471, 3, 2, 2, 2, 474, 477, 3, 2, 2, 2, 475, 473, 3, 2, 2, 2, 475, 476, 3, 2, 2, 2, 476, 478, 3, 2, 2, 2, 477, 475, 3, 2, 2, 2, 478, 479, 7, 36, 2, 2, 479, 152, 3, 2, 2, 2, 480, 484, 5, 157, 79, 2, 481, 483, 5, 159, 80, 2, 482, 481, 3, 2, 2, 2, 483, 486, 3, 2, 2, 2, 484, 482, 3, 2, 2, 2, 484, 485, 3, 2, 2, 2, 485, 154, 3, 2, 2, 2, 486, 484, 3, 2, 2, 2, 487, 488, 9, 6, 2, 2, 488, 156, 3, 2, 2, 2, 489, 490, 9, 7, 2, 2, 490, 158, 3, 2, 2, 2, 491, 495, 5, 157, 79, 2, 492, 495, 5, 155, 78, 2, 493, 495, 9, 8, 2, 2, 494, 491, 3, 2, 2, 2, 494, 492, 3, 2, 2, 2, 494, 493, 3, 2, 2, 2, 495, 160, 3, 2, 2, 2, 496, 497, 7, 47, 2, 2, 497, 498, 7, 47, 2, 2, 498, 502, 3, 2, 2, 2, 499, 501, 10, 9, 2, 2, 500, 499, 3, 2, 2, 2, 501, 504, 3, 2, 2, 2, 502, 500, 3, 2, 2, 2, 502, 503, 3, 2, 2, 2, 503, 505, 3, 2, 2, 2, 504, 502, 3, 2, 2, 2, 505, 506, 8, 81, 2, 2, 506, 162, 3, 2, 2, 2, 507, 509, 9, 10, 2, 2, 508, 507, 3, 2, 2, 2, 509, 510, 3, 2, 2, 2, 510, 508, 3, 2, 2, 2, 510, 511, 3, 2, 2, 2, 511, 512, 3, 2, 2, 2, 512, 513, 8, 82, 2, 2, 513, 164, 3, 2, 2, 2, 514, 515, 11, 2, 2, 2, 515, 166, 3, 2, 2, 2, 17, 2, 434, 439, 445, 449, 454, 456, 462, 464, 473, 475, 484, 494, 502, 510, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 75, 472, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 6, 67, 389, 10, 67, 13, 67, 14, 67, 390, 3, 68, 6, 68, 394, 10, 68, 13, 68, 14, 68, 395, 3, 68, 3, 68, 6, 68, 400, 10, 68, 13, 68, 14, 68, 401, 3, 68, 3, 68, 5, 68, 406, 10, 68, 3, 68, 6, 68, 409, 10, 68, 13, 68, 14, 68, 410, 5, 68, 413, 10, 68, 3, 69, 3, 69, 3, 69, 3, 69, 7, 69, 419, 10, 69, 12, 69, 14, 69, 422, 11, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, 7, 70, 430, 10, 70, 12, 70, 14, 70, 433, 11, 70, 3, 70, 3, 70, 3, 71, 3, 71, 7, 71, 439, 10, 71, 12, 71, 14, 71, 442, 11, 71, 3, 72, 3, 72, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 5, 74, 451, 10, 74, 3, 75, 3, 75, 3, 75, 3, 75, 7, 75, 457, 10, 75, 12, 75, 14, 75, 460, 11, 75, 3, 75, 3, 75, 3, 76, 6, 76, 465, 10, 76, 13, 76, 14, 76, 466, 3, 76, 3, 76, 3, 77, 3, 77, 2, 2, 78, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 2, 145, 2, 147, 2, 149, 73, 151, 74, 153, 75, 3, 2, 11, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 3, 2, 41, 41, 4, 2, 12, 12, 14, 15, 5, 2, 11, 12, 15, 15, 34, 34, 2, 483, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 3, 155, 3, 2, 2, 2, 5, 157, 3, 2, 2, 2, 7, 161, 3, 2, 2, 2, 9, 166, 3, 2, 2, 2, 11, 173, 3, 2, 2, 2, 13, 176, 3, 2, 2, 2, 15, 181, 3, 2, 2, 2, 17, 187, 3, 2, 2, 2, 19, 189, 3, 2, 2, 2, 21, 191, 3, 2, 2, 2, 23, 193, 3, 2, 2, 2, 25, 195, 3, 2, 2, 2, 27, 197, 3, 2, 2, 2, 29, 199, 3, 2, 2, 2, 31, 201, 3, 2, 2, 2, 33, 204, 3, 2, 2, 2, 35, 207, 3, 2, 2, 2, 37, 209, 3, 2, 2, 2, 39, 211, 3, 2, 2, 2, 41, 213, 3, 2, 2, 2, 43, 216, 3, 2, 2, 2, 45, 222, 3, 2, 2, 2, 47, 231, 3, 2, 2, 2, 49, 238, 3, 2, 2, 2, 51, 240, 3, 2, 2, 2, 53, 243, 3, 2, 2, 2, 55, 246, 3, 2, 2, 2, 57, 251, 3, 2, 2, 2, 59, 256, 3, 2, 2, 2, 61, 262, 3, 2, 2, 2, 63, 268, 3, 2, 2, 2, 65, 272, 3, 2, 2, 2, 67, 275, 3, 2, 2, 2, 69, 280, 3, 2, 2, 2, 71, 285, 3, 2, 2, 2, 73, 287, 3, 2, 2, 2, 75, 289, 3, 2, 2, 2, 77, 293, 3, 2, 2, 2, 79, 300, 3, 2, 2, 2, 81, 302, 3, 2, 2, 2, 83, 304, 3, 2, 2, 2, 85, 306, 3, 2, 2, 2, 87, 308, 3, 2, 2, 2, 89, 310, 3, 2, 2, 2, 91, 312, 3, 2, 2, 2, 93, 314, 3, 2, 2, 2, 95, 316, 3, 2, 2, 2, 97, 318, 3, 2, 2, 2, 99, 321, 3, 2, 2, 2, 101, 325, 3, 2, 2, 2, 103, 328, 3, 2, 2, 2, 105, 334, 3, 2, 2, 2, 107, 337, 3, 2, 2, 2, 109, 340, 3, 2, 2, 2, 111, 342, 3, 2, 2, 2, 113, 345, 3, 2, 2, 2, 115, 347, 3, 2, 2, 2, 117, 350, 3, 2, 2, 2, 119, 354, 3, 2, 2, 2, 121, 358, 3, 2, 2, 2, 123, 361, 3, 2, 2, 2, 125, 368, 3, 2, 2, 2, 127, 371, 3, 2, 2, 2, 129, 376, 3, 2, 2, 2, 131, 382, 3, 2, 2, 2, 133, 388, 3, 2, 2, 2, 135, 393, 3, 2, 2, 2, 137, 414, 3, 2, 2, 2, 139, 425, 3, 2, 2, 2, 141, 436, 3, 2, 2, 2, 143, 443, 3, 2, 2, 2, 145, 445, 3, 2, 2, 2, 147, 450, 3, 2, 2, 2, 149, 452, 3, 2, 2, 2, 151, 464, 3, 2, 2, 2, 153, 470, 3, 2, 2, 2, 155, 156, 7, 61, 2, 2, 156, 4, 3, 2, 2, 2, 157, 158, 7, 119, 2, 2, 158, 159, 7, 117, 2, 2, 159, 160, 7, 103, 2, 2, 160, 6, 3, 2, 2, 2, 161, 162, 7, 113, 2, 2, 162, 163, 7, 112, 2, 2, 163, 164, 7, 110, 2, 2, 164, 165, 7, 123, 2, 2, 165, 8, 3, 2, 2, 2, 166, 167, 7, 106, 2, 2, 167, 168, 7, 107, 2, 2, 168, 169, 7, 102, 2, 2, 169, 170, 7, 107, 2, 2, 170, 171, 7, 112, 2, 2, 171, 172, 7, 105, 2, 2, 172, 10, 3, 2, 2, 2, 173, 174, 7, 99, 2, 2, 174, 175, 7, 117, 2, 2, 175, 12, 3, 2, 2, 2, 176, 177, 7, 117, 2, 2, 177, 178, 7, 109, 2, 2, 178, 179, 7, 107, 2, 2, 179, 180, 7, 114, 2, 2, 180, 14, 3, 2, 2, 2, 181, 182, 7, 114, 2, 2, 182, 183, 7, 116, 2, 2, 183, 184, 7, 107, 2, 2, 184, 185, 7, 112, 2, 2, 185, 186, 7, 118, 2, 2, 186, 16, 3, 2, 2, 2, 187, 188, 7, 63, 2, 2, 188, 18, 3, 2, 2, 2, 189, 190, 7, 96, 2, 2, 190, 20, 3, 2, 2, 2, 191, 192, 7, 44, 2, 2, 192, 22, 3, 2, 2, 2, 193, 194, 7, 49, 2, 2, 194, 24, 3, 2, 2, 2, 195, 196, 7, 39, 2, 2, 196, 26, 3, 2, 2, 2, 197, 198, 7, 45, 2, 2, 198, 28, 3, 2, 2, 2, 199, 200, 7, 47, 2, 2, 200, 30, 3, 2, 2, 2, 201, 202, 7, 62, 2, 2, 202, 203, 7, 62, 2, 2, 203, 32, 3, 2, 2, 2, 204, 205, 7, 64, 2, 2, 205, 206, 7, 64, 2, 2, 206, 34, 3, 2, 2, 2, 207, 208, 7, 40, 2, 2, 208, 36, 3, 2, 2, 2, 209, 210, 7, 38, 2, 2, 210, 38, 3, 2, 2, 2, 211, 212, 7, 126, 2, 2, 212, 40, 3, 2, 2, 2, 213, 214, 7, 65, 2, 2, 214, 215, 7, 65, 2, 2, 215, 42, 3, 2, 2, 2, 216, 217, 7, 100, 2, 2, 217, 218, 7, 116, 2, 2, 218, 219, 7, 103, 2, 2, 219, 220, 7, 99, 2, 2, 220, 221, 7, 109, 2, 2, 221, 44, 3, 2, 2, 2, 222, 223, 7, 101, 2, 2, 223, 224, 7, 113, 2, 2, 224, 225, 7, 112, 2, 2, 225, 226, 7, 118, 2, 2, 226, 227, 7, 107, 2, 2, 227, 228, 7, 112, 2, 2, 228, 229, 7, 119, 2, 2, 229, 230, 7, 103, 2, 2, 230, 46, 3, 2, 2, 2, 231, 232, 7, 116, 2, 2, 232, 233, 7, 103, 2, 2, 233, 234, 7, 118, 2, 2, 234, 235, 7, 119, 2, 2, 235, 236, 7, 116, 2, 2, 236, 237, 7, 112, 2, 2, 237, 48, 3, 2, 2, 2, 238, 239, 7, 46, 2, 2, 239, 50, 3, 2, 2, 2, 240, 241, 7, 107, 2, 2, 241, 242, 7, 104, 2, 2, 242, 52, 3, 2, 2, 2, 243, 244, 7, 102, 2, 2, 244, 245, 7, 113, 2, 2, 245, 54, 3, 2, 2, 2, 246, 247, 7, 103, 2, 2, 247, 248, 7, 110, 2, 2, 248, 249, 7, 107, 2, 2, 249, 250, 7, 104, 2, 2, 250, 56, 3, 2, 2, 2, 251, 252, 7, 103, 2, 2, 252, 253, 7, 110, 2, 2, 253, 254, 7, 117, 2, 2, 254, 255, 7, 103, 2, 2, 255, 58, 3, 2, 2, 2, 256, 257, 7, 121, 2, 2, 257, 258, 7, 106, 2, 2, 258, 259, 7, 107, 2, 2, 259, 260, 7, 110, 2, 2, 260, 261, 7, 103, 2, 2, 261, 60, 3, 2, 2, 2, 262, 263, 7, 119, 2, 2, 263, 264, 7, 112, 2, 2, 264, 265, 7, 118, 2, 2, 265, 266, 7, 107, 2, 2, 266, 267, 7, 110, 2, 2, 267, 62, 3, 2, 2, 2, 268, 269, 7, 104, 2, 2, 269, 270, 7, 113, 2, 2, 270, 271, 7, 116, 2, 2, 271, 64, 3, 2, 2, 2, 272, 273, 7, 107, 2, 2, 273, 274, 7, 112, 2, 2, 274, 66, 3, 2, 2, 2, 275, 276, 7, 117, 2, 2, 276, 277, 7, 118, 2, 2, 277, 278, 7, 103, 2, 2, 278, 279, 7, 114, 2, 2, 279, 68, 3, 2, 2, 2, 280, 281, 7, 104, 2, 2, 281, 282, 7, 119, 2, 2, 282, 283, 7, 112, 2, 2, 283, 284, 7, 101, 2, 2, 284, 70, 3, 2, 2, 2, 285, 286, 7, 42, 2, 2, 286, 72, 3, 2, 2, 2, 287, 288, 7, 43, 2, 2, 288, 74, 3, 2, 2, 2, 289, 290, 7, 102, 2, 2, 290, 291, 7, 103, 2, 2, 291, 292, 7, 104, 2, 2, 292, 76, 3, 2, 2, 2, 293, 294, 7, 103, 2, 2, 294, 295, 7, 122, 2, 2, 295, 296, 7, 118, 2, 2, 296, 297, 7, 103, 2, 2, 297, 298, 7, 116, 2, 2, 298, 299, 7, 112, 2, 2, 299, 78, 3, 2, 2, 2, 300, 301, 7, 60, 2, 2, 301, 80, 3, 2, 2, 2, 302, 303, 7, 125, 2, 2, 303, 82, 3, 2, 2, 2, 304, 305, 7, 127, 2, 2, 305, 84, 3, 2, 2, 2, 306, 307, 7, 93, 2, 2, 307, 86, 3, 2, 2, 2, 308, 309, 7, 95, 2, 2, 309, 88, 3, 2, 2, 2, 310, 311, 7, 65, 2, 2, 311, 90, 3, 2, 2, 2, 312, 313, 7, 48, 2, 2, 313, 92, 3, 2, 2, 2, 314, 315, 7, 35, 2, 2, 315, 94, 3, 2, 2, 2, 316, 317, 7, 128, 2, 2, 317, 96, 3, 2, 2, 2, 318, 319, 7, 48, 2, 2, 319, 320, 7, 48, 2, 2, 320, 98, 3, 2, 2, 2, 321, 322, 7, 48, 2, 2, 322, 323, 7, 48, 2, 2, 323, 324, 7, 48, 2, 2, 324, 100, 3, 2, 2, 2, 325, 326, 7, 107, 2, 2, 326, 327, 7, 117, 2, 2, 327, 102, 3, 2, 2, 2, 328, 329, 7, 107, 2, 2, 329, 330, 7, 117, 2, 2, 330, 331, 7, 112, 2, 2, 331, 332, 7, 41, 2, 2, 332, 333, 7, 118, 2, 2, 333, 104, 3, 2, 2, 2, 334, 335, 7, 63, 2, 2, 335, 336, 7, 63, 2, 2, 336, 106, 3, 2, 2, 2, 337, 338, 7, 35, 2, 2, 338, 339, 7, 63, 2, 2, 339, 108, 3, 2, 2, 2, 340, 341, 7, 62, 2, 2, 341, 110, 3, 2, 2, 2, 342, 343, 7, 62, 2, 2, 343, 344, 7, 63, 2, 2, 344, 112, 3, 2, 2, 2, 345, 346, 7, 64, 2, 2, 346, 114, 3, 2, 2, 2, 347, 348, 7, 64, 2, 2, 348, 349, 7, 63, 2, 2, 349, 116, 3, 2, 2, 2, 350, 351, 7, 112, 2, 2, 351, 352, 7, 113, 2, 2, 352, 353, 7, 118, 2, 2, 353, 118, 3, 2, 2, 2, 354, 355, 7, 99, 2, 2, 355, 356, 7, 112, 2, 2, 356, 357, 7, 102, 2, 2, 357, 120, 3, 2, 2, 2, 358, 359, 7, 113, 2, 2, 359, 360, 7, 116, 2, 2, 360, 122, 3, 2, 2, 2, 361, 362, 7, 110, 2, 2, 362, 363, 7, 99, 2, 2, 363, 364, 7, 111, 2, 2, 364, 365, 7, 100, 2, 2, 365, 366, 7, 102, 2, 2, 366, 367, 7, 99, 2, 2, 367, 124, 3, 2, 2, 2, 368, 369, 7, 47, 2, 2, 369, 370, 7, 64, 2, 2, 370, 126, 3, 2, 2, 2, 371, 372, 7, 118, 2, 2, 372, 373, 7, 116, 2, 2, 373, 374, 7, 119, 2, 2, 374, 375, 7, 103, 2, 2, 375, 128, 3, 2, 2, 2, 376, 377, 7, 104, 2, 2, 377, 378, 7, 99, 2, 2, 378, 379, 7, 110, 2, 2, 379, 380, 7, 117, 2, 2, 380, 381, 7, 103, 2, 2, 381, 130, 3, 2, 2, 2, 382, 383, 7, 112, 2, 2, 383, 384, 7, 119, 2, 2, 384, 385, 7, 110, 2, 2, 385, 386, 7, 110, 2, 2, 386, 132, 3, 2, 2, 2, 387, 389, 5, 143, 72, 2, 388, 387, 3, 2, 2, 2, 389, 390, 3, 2, 2, 2, 390, 388, 3, 2, 2, 2, 390, 391, 3, 2, 2, 2, 391, 134, 3, 2, 2, 2, 392, 394, 5, 143, 72, 2, 393, 392, 3, 2, 2, 2, 394, 395, 3, 2, 2, 2, 395, 393, 3, 2, 2, 2, 395, 396, 3, 2, 2, 2, 396, 397, 3, 2, 2, 2, 397, 399, 7, 48, 2, 2, 398, 400, 5, 143, 72, 2, 399, 398, 3, 2, 2, 2, 400, 401, 3, 2, 2, 2, 401, 399, 3, 2, 2, 2, 401, 402, 3, 2, 2, 2, 402, 412, 3, 2, 2, 2, 403, 405, 7, 103, 2, 2, 404, 406, 7, 47, 2, 2, 405, 404, 3, 2, 2, 2, 405, 406, 3, 2, 2, 2, 406, 408, 3, 2, 2, 2, 407, 409, 5, 143, 72, 2, 408, 407, 3, 2, 2, 2, 409, 410, 3, 2, 2, 2, 410, 408, 3, 2, 2, 2, 410, 411, 3, 2, 2, 2, 411, 413, 3, 2, 2, 2, 412, 403, 3, 2, 2, 2, 412, 413, 3, 2, 2, 2, 413, 136, 3, 2, 2, 2, 414, 420, 7, 41, 2, 2, 415, 419, 10, 2, 2, 2, 416, 417, 7, 94, 2, 2, 417, 419, 9, 3, 2, 2, 418, 415, 3, 2, 2, 2, 418, 416, 3, 2, 2, 2, 419, 422, 3, 2, 2, 2, 420, 418, 3, 2, 2, 2, 420, 421, 3, 2, 2, 2, 421, 423, 3, 2, 2, 2, 422, 420, 3, 2, 2, 2, 423, 424, 7, 41, 2, 2, 424, 138, 3, 2, 2, 2, 425, 431, 7, 36, 2, 2, 426, 430, 10, 4, 2, 2, 427, 428, 7, 94, 2, 2, 428, 430, 9, 5, 2, 2, 429, 426, 3, 2, 2, 2, 429, 427, 3, 2, 2, 2, 430, 433, 3, 2, 2, 2, 431, 429, 3, 2, 2, 2, 431, 432, 3, 2, 2, 2, 432, 434, 3, 2, 2, 2, 433, 431, 3, 2, 2, 2, 434, 435, 7, 36, 2, 2, 435, 140, 3, 2, 2, 2, 436, 440, 5, 145, 73, 2, 437, 439, 5, 147, 74, 2, 438, 437, 3, 2, 2, 2, 439, 442, 3, 2, 2, 2, 440, 438, 3, 2, 2, 2, 440, 441, 3, 2, 2, 2, 441, 142, 3, 2, 2, 2, 442, 440, 3, 2, 2, 2, 443, 444, 9, 6, 2, 2, 444, 144, 3, 2, 2, 2, 445, 446, 9, 7, 2, 2, 446, 146, 3, 2, 2, 2, 447, 451, 5, 145, 73, 2, 448, 451, 5, 143, 72, 2, 449, 451, 9, 8, 2, 2, 450, 447, 3, 2, 2, 2, 450, 448, 3, 2, 2, 2, 450, 449, 3, 2, 2, 2, 451, 148, 3, 2, 2, 2, 452, 453, 7, 47, 2, 2, 453, 454, 7, 47, 2, 2, 454, 458, 3, 2, 2, 2, 455, 457, 10, 9, 2, 2, 456, 455, 3, 2, 2, 2, 457, 460, 3, 2, 2, 2, 458, 456, 3, 2, 2, 2, 458, 459, 3, 2, 2, 2, 459, 461, 3, 2, 2, 2, 460, 458, 3, 2, 2, 2, 461, 462, 8, 75, 2, 2, 462, 150, 3, 2, 2, 2, 463, 465, 9, 10, 2, 2, 464, 463, 3, 2, 2, 2, 465, 466, 3, 2, 2, 2, 466, 464, 3, 2, 2, 2, 466, 467, 3, 2, 2, 2, 467, 468, 3, 2, 2, 2, 468, 469, 8, 76, 2, 2, 469, 152, 3, 2, 2, 2, 470, 471, 11, 2, 2, 2, 471, 154, 3, 2, 2, 2, 17, 2, 390, 395, 401, 405, 410, 412, 418, 420, 429, 431, 440, 450, 458, 466, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py index e64afe68..d9521b91 100644 --- a/src/antlr/PyxellLexer.py +++ b/src/antlr/PyxellLexer.py @@ -8,8 +8,8 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2Q") - buf.write("\u0204\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2K") + buf.write("\u01d8\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") @@ -20,212 +20,195 @@ def serializedATN(): buf.write("\t\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:") buf.write("\4;\t;\4<\t<\4=\t=\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\t") buf.write("C\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I\tI\4J\tJ\4K\tK\4L\t") - buf.write("L\4M\tM\4N\tN\4O\tO\4P\tP\4Q\tQ\4R\tR\4S\tS\3\2\3\2\3") - buf.write("\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\5\3\5\3\5\3\5\3\5") - buf.write("\3\5\3\5\3\6\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3") - buf.write("\b\3\b\3\b\3\t\3\t\3\n\3\n\3\13\3\13\3\f\3\f\3\r\3\r\3") - buf.write("\16\3\16\3\17\3\17\3\20\3\20\3\20\3\21\3\21\3\21\3\22") - buf.write("\3\22\3\23\3\23\3\24\3\24\3\25\3\25\3\25\3\26\3\26\3\26") - buf.write("\3\26\3\26\3\26\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27") - buf.write("\3\27\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\31\3\31\3\32") - buf.write("\3\32\3\32\3\33\3\33\3\33\3\34\3\34\3\34\3\34\3\34\3\35") - buf.write("\3\35\3\35\3\35\3\35\3\36\3\36\3\36\3\36\3\36\3\36\3\37") - buf.write("\3\37\3\37\3\37\3\37\3\37\3 \3 \3 \3 \3!\3!\3!\3\"\3\"") - buf.write("\3\"\3\"\3\"\3#\3#\3#\3#\3#\3$\3$\3%\3%\3&\3&\3&\3&\3") - buf.write("\'\3\'\3\'\3\'\3\'\3\'\3\'\3(\3(\3)\3)\3*\3*\3+\3+\3,") - buf.write("\3,\3-\3-\3.\3.\3/\3/\3\60\3\60\3\61\3\61\3\61\3\62\3") - buf.write("\62\3\62\3\62\3\63\3\63\3\63\3\64\3\64\3\64\3\64\3\64") - buf.write("\3\64\3\65\3\65\3\65\3\66\3\66\3\66\3\67\3\67\38\38\3") - buf.write("8\39\39\3:\3:\3:\3;\3;\3;\3;\3<\3<\3<\3<\3=\3=\3=\3>\3") - buf.write(">\3>\3>\3>\3>\3>\3?\3?\3?\3@\3@\3@\3@\3@\3A\3A\3A\3A\3") - buf.write("A\3A\3B\3B\3B\3B\3B\3C\3C\3C\3C\3C\3D\3D\3D\3D\3E\3E\3") - buf.write("E\3E\3E\3E\3F\3F\3F\3F\3F\3G\3G\3G\3G\3G\3H\3H\3H\3H\3") - buf.write("H\3H\3H\3I\6I\u01b1\nI\rI\16I\u01b2\3J\6J\u01b6\nJ\rJ") - buf.write("\16J\u01b7\3J\3J\6J\u01bc\nJ\rJ\16J\u01bd\3J\3J\5J\u01c2") - buf.write("\nJ\3J\6J\u01c5\nJ\rJ\16J\u01c6\5J\u01c9\nJ\3K\3K\3K\3") - buf.write("K\7K\u01cf\nK\fK\16K\u01d2\13K\3K\3K\3L\3L\3L\3L\7L\u01da") - buf.write("\nL\fL\16L\u01dd\13L\3L\3L\3M\3M\7M\u01e3\nM\fM\16M\u01e6") - buf.write("\13M\3N\3N\3O\3O\3P\3P\3P\5P\u01ef\nP\3Q\3Q\3Q\3Q\7Q\u01f5") - buf.write("\nQ\fQ\16Q\u01f8\13Q\3Q\3Q\3R\6R\u01fd\nR\rR\16R\u01fe") - buf.write("\3R\3R\3S\3S\2\2T\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23") - buf.write("\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25") - buf.write(")\26+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A") - buf.write("\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65") - buf.write("i\66k\67m8o9q:s;u{?}@\177A\u0081B\u0083C\u0085D\u0087") - buf.write("E\u0089F\u008bG\u008dH\u008fI\u0091J\u0093K\u0095L\u0097") - buf.write("M\u0099N\u009b\2\u009d\2\u009f\2\u00a1O\u00a3P\u00a5Q") + buf.write("L\4M\tM\3\2\3\2\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3") + buf.write("\5\3\5\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3\6\3\7\3\7\3\7\3\7") + buf.write("\3\7\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3\t\3\n\3\n\3\13\3\13") + buf.write("\3\f\3\f\3\r\3\r\3\16\3\16\3\17\3\17\3\20\3\20\3\20\3") + buf.write("\21\3\21\3\21\3\22\3\22\3\23\3\23\3\24\3\24\3\25\3\25") + buf.write("\3\25\3\26\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27") + buf.write("\3\27\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\30\3\30\3\30") + buf.write("\3\30\3\31\3\31\3\32\3\32\3\32\3\33\3\33\3\33\3\34\3\34") + buf.write("\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35\3\36\3\36\3\36") + buf.write("\3\36\3\36\3\36\3\37\3\37\3\37\3\37\3\37\3\37\3 \3 \3") + buf.write(" \3 \3!\3!\3!\3\"\3\"\3\"\3\"\3\"\3#\3#\3#\3#\3#\3$\3") + buf.write("$\3%\3%\3&\3&\3&\3&\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3(\3(") + buf.write("\3)\3)\3*\3*\3+\3+\3,\3,\3-\3-\3.\3.\3/\3/\3\60\3\60\3") + buf.write("\61\3\61\3\61\3\62\3\62\3\62\3\62\3\63\3\63\3\63\3\64") + buf.write("\3\64\3\64\3\64\3\64\3\64\3\65\3\65\3\65\3\66\3\66\3\66") + buf.write("\3\67\3\67\38\38\38\39\39\3:\3:\3:\3;\3;\3;\3;\3<\3<\3") + buf.write("<\3<\3=\3=\3=\3>\3>\3>\3>\3>\3>\3>\3?\3?\3?\3@\3@\3@\3") + buf.write("@\3@\3A\3A\3A\3A\3A\3A\3B\3B\3B\3B\3B\3C\6C\u0185\nC\r") + buf.write("C\16C\u0186\3D\6D\u018a\nD\rD\16D\u018b\3D\3D\6D\u0190") + buf.write("\nD\rD\16D\u0191\3D\3D\5D\u0196\nD\3D\6D\u0199\nD\rD\16") + buf.write("D\u019a\5D\u019d\nD\3E\3E\3E\3E\7E\u01a3\nE\fE\16E\u01a6") + buf.write("\13E\3E\3E\3F\3F\3F\3F\7F\u01ae\nF\fF\16F\u01b1\13F\3") + buf.write("F\3F\3G\3G\7G\u01b7\nG\fG\16G\u01ba\13G\3H\3H\3I\3I\3") + buf.write("J\3J\3J\5J\u01c3\nJ\3K\3K\3K\3K\7K\u01c9\nK\fK\16K\u01cc") + buf.write("\13K\3K\3K\3L\6L\u01d1\nL\rL\16L\u01d2\3L\3L\3M\3M\2\2") + buf.write("N\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31") + buf.write("\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31") + buf.write("\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O") + buf.write(")Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k\67m8o9q:s;") + buf.write("u{?}@\177A\u0081B\u0083C\u0085D\u0087E\u0089F\u008b") + buf.write("G\u008dH\u008f\2\u0091\2\u0093\2\u0095I\u0097J\u0099K") buf.write("\3\2\13\4\2))^^\6\2))^^ppvv\4\2$$^^\6\2$$^^ppvv\3\2\62") - buf.write(";\5\2C\\aac|\4\2))aa\4\2\f\f\16\17\5\2\13\f\17\17\"\"") - buf.write("\2\u020f\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2") - buf.write("\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2") - buf.write("\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2") - buf.write("\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3") - buf.write("\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2") - buf.write("-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3") - buf.write("\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2") - buf.write("?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2") - buf.write("\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2") - buf.write("\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2") - buf.write("\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3") - buf.write("\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2o") - buf.write("\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2u\3\2\2\2\2w\3\2\2\2\2") - buf.write("y\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177\3\2\2\2\2\u0081") - buf.write("\3\2\2\2\2\u0083\3\2\2\2\2\u0085\3\2\2\2\2\u0087\3\2\2") - buf.write("\2\2\u0089\3\2\2\2\2\u008b\3\2\2\2\2\u008d\3\2\2\2\2\u008f") - buf.write("\3\2\2\2\2\u0091\3\2\2\2\2\u0093\3\2\2\2\2\u0095\3\2\2") - buf.write("\2\2\u0097\3\2\2\2\2\u0099\3\2\2\2\2\u00a1\3\2\2\2\2\u00a3") - buf.write("\3\2\2\2\2\u00a5\3\2\2\2\3\u00a7\3\2\2\2\5\u00a9\3\2\2") - buf.write("\2\7\u00ad\3\2\2\2\t\u00b2\3\2\2\2\13\u00b9\3\2\2\2\r") - buf.write("\u00bc\3\2\2\2\17\u00c1\3\2\2\2\21\u00c7\3\2\2\2\23\u00c9") - buf.write("\3\2\2\2\25\u00cb\3\2\2\2\27\u00cd\3\2\2\2\31\u00cf\3") - buf.write("\2\2\2\33\u00d1\3\2\2\2\35\u00d3\3\2\2\2\37\u00d5\3\2") - buf.write("\2\2!\u00d8\3\2\2\2#\u00db\3\2\2\2%\u00dd\3\2\2\2\'\u00df") - buf.write("\3\2\2\2)\u00e1\3\2\2\2+\u00e4\3\2\2\2-\u00ea\3\2\2\2") - buf.write("/\u00f3\3\2\2\2\61\u00fa\3\2\2\2\63\u00fc\3\2\2\2\65\u00ff") - buf.write("\3\2\2\2\67\u0102\3\2\2\29\u0107\3\2\2\2;\u010c\3\2\2") - buf.write("\2=\u0112\3\2\2\2?\u0118\3\2\2\2A\u011c\3\2\2\2C\u011f") - buf.write("\3\2\2\2E\u0124\3\2\2\2G\u0129\3\2\2\2I\u012b\3\2\2\2") - buf.write("K\u012d\3\2\2\2M\u0131\3\2\2\2O\u0138\3\2\2\2Q\u013a\3") - buf.write("\2\2\2S\u013c\3\2\2\2U\u013e\3\2\2\2W\u0140\3\2\2\2Y\u0142") - buf.write("\3\2\2\2[\u0144\3\2\2\2]\u0146\3\2\2\2_\u0148\3\2\2\2") - buf.write("a\u014a\3\2\2\2c\u014d\3\2\2\2e\u0151\3\2\2\2g\u0154\3") - buf.write("\2\2\2i\u015a\3\2\2\2k\u015d\3\2\2\2m\u0160\3\2\2\2o\u0162") - buf.write("\3\2\2\2q\u0165\3\2\2\2s\u0167\3\2\2\2u\u016a\3\2\2\2") - buf.write("w\u016e\3\2\2\2y\u0172\3\2\2\2{\u0175\3\2\2\2}\u017c\3") - buf.write("\2\2\2\177\u017f\3\2\2\2\u0081\u0184\3\2\2\2\u0083\u018a") - buf.write("\3\2\2\2\u0085\u018f\3\2\2\2\u0087\u0194\3\2\2\2\u0089") - buf.write("\u0198\3\2\2\2\u008b\u019e\3\2\2\2\u008d\u01a3\3\2\2\2") - buf.write("\u008f\u01a8\3\2\2\2\u0091\u01b0\3\2\2\2\u0093\u01b5\3") - buf.write("\2\2\2\u0095\u01ca\3\2\2\2\u0097\u01d5\3\2\2\2\u0099\u01e0") - buf.write("\3\2\2\2\u009b\u01e7\3\2\2\2\u009d\u01e9\3\2\2\2\u009f") - buf.write("\u01ee\3\2\2\2\u00a1\u01f0\3\2\2\2\u00a3\u01fc\3\2\2\2") - buf.write("\u00a5\u0202\3\2\2\2\u00a7\u00a8\7=\2\2\u00a8\4\3\2\2") - buf.write("\2\u00a9\u00aa\7w\2\2\u00aa\u00ab\7u\2\2\u00ab\u00ac\7") - buf.write("g\2\2\u00ac\6\3\2\2\2\u00ad\u00ae\7q\2\2\u00ae\u00af\7") - buf.write("p\2\2\u00af\u00b0\7n\2\2\u00b0\u00b1\7{\2\2\u00b1\b\3") - buf.write("\2\2\2\u00b2\u00b3\7j\2\2\u00b3\u00b4\7k\2\2\u00b4\u00b5") - buf.write("\7f\2\2\u00b5\u00b6\7k\2\2\u00b6\u00b7\7p\2\2\u00b7\u00b8") - buf.write("\7i\2\2\u00b8\n\3\2\2\2\u00b9\u00ba\7c\2\2\u00ba\u00bb") - buf.write("\7u\2\2\u00bb\f\3\2\2\2\u00bc\u00bd\7u\2\2\u00bd\u00be") - buf.write("\7m\2\2\u00be\u00bf\7k\2\2\u00bf\u00c0\7r\2\2\u00c0\16") - buf.write("\3\2\2\2\u00c1\u00c2\7r\2\2\u00c2\u00c3\7t\2\2\u00c3\u00c4") - buf.write("\7k\2\2\u00c4\u00c5\7p\2\2\u00c5\u00c6\7v\2\2\u00c6\20") - buf.write("\3\2\2\2\u00c7\u00c8\7?\2\2\u00c8\22\3\2\2\2\u00c9\u00ca") - buf.write("\7`\2\2\u00ca\24\3\2\2\2\u00cb\u00cc\7,\2\2\u00cc\26\3") - buf.write("\2\2\2\u00cd\u00ce\7\61\2\2\u00ce\30\3\2\2\2\u00cf\u00d0") - buf.write("\7\'\2\2\u00d0\32\3\2\2\2\u00d1\u00d2\7-\2\2\u00d2\34") - buf.write("\3\2\2\2\u00d3\u00d4\7/\2\2\u00d4\36\3\2\2\2\u00d5\u00d6") - buf.write("\7>\2\2\u00d6\u00d7\7>\2\2\u00d7 \3\2\2\2\u00d8\u00d9") - buf.write("\7@\2\2\u00d9\u00da\7@\2\2\u00da\"\3\2\2\2\u00db\u00dc") - buf.write("\7(\2\2\u00dc$\3\2\2\2\u00dd\u00de\7&\2\2\u00de&\3\2\2") - buf.write("\2\u00df\u00e0\7~\2\2\u00e0(\3\2\2\2\u00e1\u00e2\7A\2") - buf.write("\2\u00e2\u00e3\7A\2\2\u00e3*\3\2\2\2\u00e4\u00e5\7d\2") - buf.write("\2\u00e5\u00e6\7t\2\2\u00e6\u00e7\7g\2\2\u00e7\u00e8\7") - buf.write("c\2\2\u00e8\u00e9\7m\2\2\u00e9,\3\2\2\2\u00ea\u00eb\7") - buf.write("e\2\2\u00eb\u00ec\7q\2\2\u00ec\u00ed\7p\2\2\u00ed\u00ee") - buf.write("\7v\2\2\u00ee\u00ef\7k\2\2\u00ef\u00f0\7p\2\2\u00f0\u00f1") - buf.write("\7w\2\2\u00f1\u00f2\7g\2\2\u00f2.\3\2\2\2\u00f3\u00f4") - buf.write("\7t\2\2\u00f4\u00f5\7g\2\2\u00f5\u00f6\7v\2\2\u00f6\u00f7") - buf.write("\7w\2\2\u00f7\u00f8\7t\2\2\u00f8\u00f9\7p\2\2\u00f9\60") - buf.write("\3\2\2\2\u00fa\u00fb\7.\2\2\u00fb\62\3\2\2\2\u00fc\u00fd") - buf.write("\7k\2\2\u00fd\u00fe\7h\2\2\u00fe\64\3\2\2\2\u00ff\u0100") - buf.write("\7f\2\2\u0100\u0101\7q\2\2\u0101\66\3\2\2\2\u0102\u0103") - buf.write("\7g\2\2\u0103\u0104\7n\2\2\u0104\u0105\7k\2\2\u0105\u0106") - buf.write("\7h\2\2\u01068\3\2\2\2\u0107\u0108\7g\2\2\u0108\u0109") - buf.write("\7n\2\2\u0109\u010a\7u\2\2\u010a\u010b\7g\2\2\u010b:\3") - buf.write("\2\2\2\u010c\u010d\7y\2\2\u010d\u010e\7j\2\2\u010e\u010f") - buf.write("\7k\2\2\u010f\u0110\7n\2\2\u0110\u0111\7g\2\2\u0111<\3") - buf.write("\2\2\2\u0112\u0113\7w\2\2\u0113\u0114\7p\2\2\u0114\u0115") - buf.write("\7v\2\2\u0115\u0116\7k\2\2\u0116\u0117\7n\2\2\u0117>\3") - buf.write("\2\2\2\u0118\u0119\7h\2\2\u0119\u011a\7q\2\2\u011a\u011b") - buf.write("\7t\2\2\u011b@\3\2\2\2\u011c\u011d\7k\2\2\u011d\u011e") - buf.write("\7p\2\2\u011eB\3\2\2\2\u011f\u0120\7u\2\2\u0120\u0121") - buf.write("\7v\2\2\u0121\u0122\7g\2\2\u0122\u0123\7r\2\2\u0123D\3") - buf.write("\2\2\2\u0124\u0125\7h\2\2\u0125\u0126\7w\2\2\u0126\u0127") - buf.write("\7p\2\2\u0127\u0128\7e\2\2\u0128F\3\2\2\2\u0129\u012a") - buf.write("\7*\2\2\u012aH\3\2\2\2\u012b\u012c\7+\2\2\u012cJ\3\2\2") - buf.write("\2\u012d\u012e\7f\2\2\u012e\u012f\7g\2\2\u012f\u0130\7") - buf.write("h\2\2\u0130L\3\2\2\2\u0131\u0132\7g\2\2\u0132\u0133\7") - buf.write("z\2\2\u0133\u0134\7v\2\2\u0134\u0135\7g\2\2\u0135\u0136") - buf.write("\7t\2\2\u0136\u0137\7p\2\2\u0137N\3\2\2\2\u0138\u0139") - buf.write("\7<\2\2\u0139P\3\2\2\2\u013a\u013b\7}\2\2\u013bR\3\2\2") - buf.write("\2\u013c\u013d\7\177\2\2\u013dT\3\2\2\2\u013e\u013f\7") - buf.write("]\2\2\u013fV\3\2\2\2\u0140\u0141\7_\2\2\u0141X\3\2\2\2") - buf.write("\u0142\u0143\7A\2\2\u0143Z\3\2\2\2\u0144\u0145\7\60\2") - buf.write("\2\u0145\\\3\2\2\2\u0146\u0147\7#\2\2\u0147^\3\2\2\2\u0148") - buf.write("\u0149\7\u0080\2\2\u0149`\3\2\2\2\u014a\u014b\7\60\2\2") - buf.write("\u014b\u014c\7\60\2\2\u014cb\3\2\2\2\u014d\u014e\7\60") - buf.write("\2\2\u014e\u014f\7\60\2\2\u014f\u0150\7\60\2\2\u0150d") - buf.write("\3\2\2\2\u0151\u0152\7k\2\2\u0152\u0153\7u\2\2\u0153f") - buf.write("\3\2\2\2\u0154\u0155\7k\2\2\u0155\u0156\7u\2\2\u0156\u0157") - buf.write("\7p\2\2\u0157\u0158\7)\2\2\u0158\u0159\7v\2\2\u0159h\3") - buf.write("\2\2\2\u015a\u015b\7?\2\2\u015b\u015c\7?\2\2\u015cj\3") - buf.write("\2\2\2\u015d\u015e\7#\2\2\u015e\u015f\7?\2\2\u015fl\3") - buf.write("\2\2\2\u0160\u0161\7>\2\2\u0161n\3\2\2\2\u0162\u0163\7") - buf.write(">\2\2\u0163\u0164\7?\2\2\u0164p\3\2\2\2\u0165\u0166\7") - buf.write("@\2\2\u0166r\3\2\2\2\u0167\u0168\7@\2\2\u0168\u0169\7") - buf.write("?\2\2\u0169t\3\2\2\2\u016a\u016b\7p\2\2\u016b\u016c\7") - buf.write("q\2\2\u016c\u016d\7v\2\2\u016dv\3\2\2\2\u016e\u016f\7") - buf.write("c\2\2\u016f\u0170\7p\2\2\u0170\u0171\7f\2\2\u0171x\3\2") - buf.write("\2\2\u0172\u0173\7q\2\2\u0173\u0174\7t\2\2\u0174z\3\2") - buf.write("\2\2\u0175\u0176\7n\2\2\u0176\u0177\7c\2\2\u0177\u0178") - buf.write("\7o\2\2\u0178\u0179\7d\2\2\u0179\u017a\7f\2\2\u017a\u017b") - buf.write("\7c\2\2\u017b|\3\2\2\2\u017c\u017d\7/\2\2\u017d\u017e") - buf.write("\7@\2\2\u017e~\3\2\2\2\u017f\u0180\7v\2\2\u0180\u0181") - buf.write("\7t\2\2\u0181\u0182\7w\2\2\u0182\u0183\7g\2\2\u0183\u0080") - buf.write("\3\2\2\2\u0184\u0185\7h\2\2\u0185\u0186\7c\2\2\u0186\u0187") - buf.write("\7n\2\2\u0187\u0188\7u\2\2\u0188\u0189\7g\2\2\u0189\u0082") - buf.write("\3\2\2\2\u018a\u018b\7p\2\2\u018b\u018c\7w\2\2\u018c\u018d") - buf.write("\7n\2\2\u018d\u018e\7n\2\2\u018e\u0084\3\2\2\2\u018f\u0190") - buf.write("\7X\2\2\u0190\u0191\7q\2\2\u0191\u0192\7k\2\2\u0192\u0193") - buf.write("\7f\2\2\u0193\u0086\3\2\2\2\u0194\u0195\7K\2\2\u0195\u0196") - buf.write("\7p\2\2\u0196\u0197\7v\2\2\u0197\u0088\3\2\2\2\u0198\u0199") - buf.write("\7H\2\2\u0199\u019a\7n\2\2\u019a\u019b\7q\2\2\u019b\u019c") - buf.write("\7c\2\2\u019c\u019d\7v\2\2\u019d\u008a\3\2\2\2\u019e\u019f") - buf.write("\7D\2\2\u019f\u01a0\7q\2\2\u01a0\u01a1\7q\2\2\u01a1\u01a2") - buf.write("\7n\2\2\u01a2\u008c\3\2\2\2\u01a3\u01a4\7E\2\2\u01a4\u01a5") - buf.write("\7j\2\2\u01a5\u01a6\7c\2\2\u01a6\u01a7\7t\2\2\u01a7\u008e") - buf.write("\3\2\2\2\u01a8\u01a9\7U\2\2\u01a9\u01aa\7v\2\2\u01aa\u01ab") - buf.write("\7t\2\2\u01ab\u01ac\7k\2\2\u01ac\u01ad\7p\2\2\u01ad\u01ae") - buf.write("\7i\2\2\u01ae\u0090\3\2\2\2\u01af\u01b1\5\u009bN\2\u01b0") - buf.write("\u01af\3\2\2\2\u01b1\u01b2\3\2\2\2\u01b2\u01b0\3\2\2\2") - buf.write("\u01b2\u01b3\3\2\2\2\u01b3\u0092\3\2\2\2\u01b4\u01b6\5") - buf.write("\u009bN\2\u01b5\u01b4\3\2\2\2\u01b6\u01b7\3\2\2\2\u01b7") - buf.write("\u01b5\3\2\2\2\u01b7\u01b8\3\2\2\2\u01b8\u01b9\3\2\2\2") - buf.write("\u01b9\u01bb\7\60\2\2\u01ba\u01bc\5\u009bN\2\u01bb\u01ba") - buf.write("\3\2\2\2\u01bc\u01bd\3\2\2\2\u01bd\u01bb\3\2\2\2\u01bd") - buf.write("\u01be\3\2\2\2\u01be\u01c8\3\2\2\2\u01bf\u01c1\7g\2\2") - buf.write("\u01c0\u01c2\7/\2\2\u01c1\u01c0\3\2\2\2\u01c1\u01c2\3") - buf.write("\2\2\2\u01c2\u01c4\3\2\2\2\u01c3\u01c5\5\u009bN\2\u01c4") - buf.write("\u01c3\3\2\2\2\u01c5\u01c6\3\2\2\2\u01c6\u01c4\3\2\2\2") - buf.write("\u01c6\u01c7\3\2\2\2\u01c7\u01c9\3\2\2\2\u01c8\u01bf\3") - buf.write("\2\2\2\u01c8\u01c9\3\2\2\2\u01c9\u0094\3\2\2\2\u01ca\u01d0") - buf.write("\7)\2\2\u01cb\u01cf\n\2\2\2\u01cc\u01cd\7^\2\2\u01cd\u01cf") - buf.write("\t\3\2\2\u01ce\u01cb\3\2\2\2\u01ce\u01cc\3\2\2\2\u01cf") - buf.write("\u01d2\3\2\2\2\u01d0\u01ce\3\2\2\2\u01d0\u01d1\3\2\2\2") - buf.write("\u01d1\u01d3\3\2\2\2\u01d2\u01d0\3\2\2\2\u01d3\u01d4\7") - buf.write(")\2\2\u01d4\u0096\3\2\2\2\u01d5\u01db\7$\2\2\u01d6\u01da") - buf.write("\n\4\2\2\u01d7\u01d8\7^\2\2\u01d8\u01da\t\5\2\2\u01d9") - buf.write("\u01d6\3\2\2\2\u01d9\u01d7\3\2\2\2\u01da\u01dd\3\2\2\2") - buf.write("\u01db\u01d9\3\2\2\2\u01db\u01dc\3\2\2\2\u01dc\u01de\3") - buf.write("\2\2\2\u01dd\u01db\3\2\2\2\u01de\u01df\7$\2\2\u01df\u0098") - buf.write("\3\2\2\2\u01e0\u01e4\5\u009dO\2\u01e1\u01e3\5\u009fP\2") - buf.write("\u01e2\u01e1\3\2\2\2\u01e3\u01e6\3\2\2\2\u01e4\u01e2\3") - buf.write("\2\2\2\u01e4\u01e5\3\2\2\2\u01e5\u009a\3\2\2\2\u01e6\u01e4") - buf.write("\3\2\2\2\u01e7\u01e8\t\6\2\2\u01e8\u009c\3\2\2\2\u01e9") - buf.write("\u01ea\t\7\2\2\u01ea\u009e\3\2\2\2\u01eb\u01ef\5\u009d") - buf.write("O\2\u01ec\u01ef\5\u009bN\2\u01ed\u01ef\t\b\2\2\u01ee\u01eb") - buf.write("\3\2\2\2\u01ee\u01ec\3\2\2\2\u01ee\u01ed\3\2\2\2\u01ef") - buf.write("\u00a0\3\2\2\2\u01f0\u01f1\7/\2\2\u01f1\u01f2\7/\2\2\u01f2") - buf.write("\u01f6\3\2\2\2\u01f3\u01f5\n\t\2\2\u01f4\u01f3\3\2\2\2") - buf.write("\u01f5\u01f8\3\2\2\2\u01f6\u01f4\3\2\2\2\u01f6\u01f7\3") - buf.write("\2\2\2\u01f7\u01f9\3\2\2\2\u01f8\u01f6\3\2\2\2\u01f9\u01fa") - buf.write("\bQ\2\2\u01fa\u00a2\3\2\2\2\u01fb\u01fd\t\n\2\2\u01fc") - buf.write("\u01fb\3\2\2\2\u01fd\u01fe\3\2\2\2\u01fe\u01fc\3\2\2\2") - buf.write("\u01fe\u01ff\3\2\2\2\u01ff\u0200\3\2\2\2\u0200\u0201\b") - buf.write("R\2\2\u0201\u00a4\3\2\2\2\u0202\u0203\13\2\2\2\u0203\u00a6") - buf.write("\3\2\2\2\21\2\u01b2\u01b7\u01bd\u01c1\u01c6\u01c8\u01ce") - buf.write("\u01d0\u01d9\u01db\u01e4\u01ee\u01f6\u01fe\3\b\2\2") + buf.write(";\5\2C\\aac|\3\2))\4\2\f\f\16\17\5\2\13\f\17\17\"\"\2") + buf.write("\u01e3\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2") + buf.write("\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2") + buf.write("\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33") + buf.write("\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2") + buf.write("\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2") + buf.write("\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2") + buf.write("\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2") + buf.write("\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3") + buf.write("\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S") + buf.write("\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2") + buf.write("]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2") + buf.write("\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2") + buf.write("\2\2q\3\2\2\2\2s\3\2\2\2\2u\3\2\2\2\2w\3\2\2\2\2y\3\2") + buf.write("\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177\3\2\2\2\2\u0081\3\2\2") + buf.write("\2\2\u0083\3\2\2\2\2\u0085\3\2\2\2\2\u0087\3\2\2\2\2\u0089") + buf.write("\3\2\2\2\2\u008b\3\2\2\2\2\u008d\3\2\2\2\2\u0095\3\2\2") + buf.write("\2\2\u0097\3\2\2\2\2\u0099\3\2\2\2\3\u009b\3\2\2\2\5\u009d") + buf.write("\3\2\2\2\7\u00a1\3\2\2\2\t\u00a6\3\2\2\2\13\u00ad\3\2") + buf.write("\2\2\r\u00b0\3\2\2\2\17\u00b5\3\2\2\2\21\u00bb\3\2\2\2") + buf.write("\23\u00bd\3\2\2\2\25\u00bf\3\2\2\2\27\u00c1\3\2\2\2\31") + buf.write("\u00c3\3\2\2\2\33\u00c5\3\2\2\2\35\u00c7\3\2\2\2\37\u00c9") + buf.write("\3\2\2\2!\u00cc\3\2\2\2#\u00cf\3\2\2\2%\u00d1\3\2\2\2") + buf.write("\'\u00d3\3\2\2\2)\u00d5\3\2\2\2+\u00d8\3\2\2\2-\u00de") + buf.write("\3\2\2\2/\u00e7\3\2\2\2\61\u00ee\3\2\2\2\63\u00f0\3\2") + buf.write("\2\2\65\u00f3\3\2\2\2\67\u00f6\3\2\2\29\u00fb\3\2\2\2") + buf.write(";\u0100\3\2\2\2=\u0106\3\2\2\2?\u010c\3\2\2\2A\u0110\3") + buf.write("\2\2\2C\u0113\3\2\2\2E\u0118\3\2\2\2G\u011d\3\2\2\2I\u011f") + buf.write("\3\2\2\2K\u0121\3\2\2\2M\u0125\3\2\2\2O\u012c\3\2\2\2") + buf.write("Q\u012e\3\2\2\2S\u0130\3\2\2\2U\u0132\3\2\2\2W\u0134\3") + buf.write("\2\2\2Y\u0136\3\2\2\2[\u0138\3\2\2\2]\u013a\3\2\2\2_\u013c") + buf.write("\3\2\2\2a\u013e\3\2\2\2c\u0141\3\2\2\2e\u0145\3\2\2\2") + buf.write("g\u0148\3\2\2\2i\u014e\3\2\2\2k\u0151\3\2\2\2m\u0154\3") + buf.write("\2\2\2o\u0156\3\2\2\2q\u0159\3\2\2\2s\u015b\3\2\2\2u\u015e") + buf.write("\3\2\2\2w\u0162\3\2\2\2y\u0166\3\2\2\2{\u0169\3\2\2\2") + buf.write("}\u0170\3\2\2\2\177\u0173\3\2\2\2\u0081\u0178\3\2\2\2") + buf.write("\u0083\u017e\3\2\2\2\u0085\u0184\3\2\2\2\u0087\u0189\3") + buf.write("\2\2\2\u0089\u019e\3\2\2\2\u008b\u01a9\3\2\2\2\u008d\u01b4") + buf.write("\3\2\2\2\u008f\u01bb\3\2\2\2\u0091\u01bd\3\2\2\2\u0093") + buf.write("\u01c2\3\2\2\2\u0095\u01c4\3\2\2\2\u0097\u01d0\3\2\2\2") + buf.write("\u0099\u01d6\3\2\2\2\u009b\u009c\7=\2\2\u009c\4\3\2\2") + buf.write("\2\u009d\u009e\7w\2\2\u009e\u009f\7u\2\2\u009f\u00a0\7") + buf.write("g\2\2\u00a0\6\3\2\2\2\u00a1\u00a2\7q\2\2\u00a2\u00a3\7") + buf.write("p\2\2\u00a3\u00a4\7n\2\2\u00a4\u00a5\7{\2\2\u00a5\b\3") + buf.write("\2\2\2\u00a6\u00a7\7j\2\2\u00a7\u00a8\7k\2\2\u00a8\u00a9") + buf.write("\7f\2\2\u00a9\u00aa\7k\2\2\u00aa\u00ab\7p\2\2\u00ab\u00ac") + buf.write("\7i\2\2\u00ac\n\3\2\2\2\u00ad\u00ae\7c\2\2\u00ae\u00af") + buf.write("\7u\2\2\u00af\f\3\2\2\2\u00b0\u00b1\7u\2\2\u00b1\u00b2") + buf.write("\7m\2\2\u00b2\u00b3\7k\2\2\u00b3\u00b4\7r\2\2\u00b4\16") + buf.write("\3\2\2\2\u00b5\u00b6\7r\2\2\u00b6\u00b7\7t\2\2\u00b7\u00b8") + buf.write("\7k\2\2\u00b8\u00b9\7p\2\2\u00b9\u00ba\7v\2\2\u00ba\20") + buf.write("\3\2\2\2\u00bb\u00bc\7?\2\2\u00bc\22\3\2\2\2\u00bd\u00be") + buf.write("\7`\2\2\u00be\24\3\2\2\2\u00bf\u00c0\7,\2\2\u00c0\26\3") + buf.write("\2\2\2\u00c1\u00c2\7\61\2\2\u00c2\30\3\2\2\2\u00c3\u00c4") + buf.write("\7\'\2\2\u00c4\32\3\2\2\2\u00c5\u00c6\7-\2\2\u00c6\34") + buf.write("\3\2\2\2\u00c7\u00c8\7/\2\2\u00c8\36\3\2\2\2\u00c9\u00ca") + buf.write("\7>\2\2\u00ca\u00cb\7>\2\2\u00cb \3\2\2\2\u00cc\u00cd") + buf.write("\7@\2\2\u00cd\u00ce\7@\2\2\u00ce\"\3\2\2\2\u00cf\u00d0") + buf.write("\7(\2\2\u00d0$\3\2\2\2\u00d1\u00d2\7&\2\2\u00d2&\3\2\2") + buf.write("\2\u00d3\u00d4\7~\2\2\u00d4(\3\2\2\2\u00d5\u00d6\7A\2") + buf.write("\2\u00d6\u00d7\7A\2\2\u00d7*\3\2\2\2\u00d8\u00d9\7d\2") + buf.write("\2\u00d9\u00da\7t\2\2\u00da\u00db\7g\2\2\u00db\u00dc\7") + buf.write("c\2\2\u00dc\u00dd\7m\2\2\u00dd,\3\2\2\2\u00de\u00df\7") + buf.write("e\2\2\u00df\u00e0\7q\2\2\u00e0\u00e1\7p\2\2\u00e1\u00e2") + buf.write("\7v\2\2\u00e2\u00e3\7k\2\2\u00e3\u00e4\7p\2\2\u00e4\u00e5") + buf.write("\7w\2\2\u00e5\u00e6\7g\2\2\u00e6.\3\2\2\2\u00e7\u00e8") + buf.write("\7t\2\2\u00e8\u00e9\7g\2\2\u00e9\u00ea\7v\2\2\u00ea\u00eb") + buf.write("\7w\2\2\u00eb\u00ec\7t\2\2\u00ec\u00ed\7p\2\2\u00ed\60") + buf.write("\3\2\2\2\u00ee\u00ef\7.\2\2\u00ef\62\3\2\2\2\u00f0\u00f1") + buf.write("\7k\2\2\u00f1\u00f2\7h\2\2\u00f2\64\3\2\2\2\u00f3\u00f4") + buf.write("\7f\2\2\u00f4\u00f5\7q\2\2\u00f5\66\3\2\2\2\u00f6\u00f7") + buf.write("\7g\2\2\u00f7\u00f8\7n\2\2\u00f8\u00f9\7k\2\2\u00f9\u00fa") + buf.write("\7h\2\2\u00fa8\3\2\2\2\u00fb\u00fc\7g\2\2\u00fc\u00fd") + buf.write("\7n\2\2\u00fd\u00fe\7u\2\2\u00fe\u00ff\7g\2\2\u00ff:\3") + buf.write("\2\2\2\u0100\u0101\7y\2\2\u0101\u0102\7j\2\2\u0102\u0103") + buf.write("\7k\2\2\u0103\u0104\7n\2\2\u0104\u0105\7g\2\2\u0105<\3") + buf.write("\2\2\2\u0106\u0107\7w\2\2\u0107\u0108\7p\2\2\u0108\u0109") + buf.write("\7v\2\2\u0109\u010a\7k\2\2\u010a\u010b\7n\2\2\u010b>\3") + buf.write("\2\2\2\u010c\u010d\7h\2\2\u010d\u010e\7q\2\2\u010e\u010f") + buf.write("\7t\2\2\u010f@\3\2\2\2\u0110\u0111\7k\2\2\u0111\u0112") + buf.write("\7p\2\2\u0112B\3\2\2\2\u0113\u0114\7u\2\2\u0114\u0115") + buf.write("\7v\2\2\u0115\u0116\7g\2\2\u0116\u0117\7r\2\2\u0117D\3") + buf.write("\2\2\2\u0118\u0119\7h\2\2\u0119\u011a\7w\2\2\u011a\u011b") + buf.write("\7p\2\2\u011b\u011c\7e\2\2\u011cF\3\2\2\2\u011d\u011e") + buf.write("\7*\2\2\u011eH\3\2\2\2\u011f\u0120\7+\2\2\u0120J\3\2\2") + buf.write("\2\u0121\u0122\7f\2\2\u0122\u0123\7g\2\2\u0123\u0124\7") + buf.write("h\2\2\u0124L\3\2\2\2\u0125\u0126\7g\2\2\u0126\u0127\7") + buf.write("z\2\2\u0127\u0128\7v\2\2\u0128\u0129\7g\2\2\u0129\u012a") + buf.write("\7t\2\2\u012a\u012b\7p\2\2\u012bN\3\2\2\2\u012c\u012d") + buf.write("\7<\2\2\u012dP\3\2\2\2\u012e\u012f\7}\2\2\u012fR\3\2\2") + buf.write("\2\u0130\u0131\7\177\2\2\u0131T\3\2\2\2\u0132\u0133\7") + buf.write("]\2\2\u0133V\3\2\2\2\u0134\u0135\7_\2\2\u0135X\3\2\2\2") + buf.write("\u0136\u0137\7A\2\2\u0137Z\3\2\2\2\u0138\u0139\7\60\2") + buf.write("\2\u0139\\\3\2\2\2\u013a\u013b\7#\2\2\u013b^\3\2\2\2\u013c") + buf.write("\u013d\7\u0080\2\2\u013d`\3\2\2\2\u013e\u013f\7\60\2\2") + buf.write("\u013f\u0140\7\60\2\2\u0140b\3\2\2\2\u0141\u0142\7\60") + buf.write("\2\2\u0142\u0143\7\60\2\2\u0143\u0144\7\60\2\2\u0144d") + buf.write("\3\2\2\2\u0145\u0146\7k\2\2\u0146\u0147\7u\2\2\u0147f") + buf.write("\3\2\2\2\u0148\u0149\7k\2\2\u0149\u014a\7u\2\2\u014a\u014b") + buf.write("\7p\2\2\u014b\u014c\7)\2\2\u014c\u014d\7v\2\2\u014dh\3") + buf.write("\2\2\2\u014e\u014f\7?\2\2\u014f\u0150\7?\2\2\u0150j\3") + buf.write("\2\2\2\u0151\u0152\7#\2\2\u0152\u0153\7?\2\2\u0153l\3") + buf.write("\2\2\2\u0154\u0155\7>\2\2\u0155n\3\2\2\2\u0156\u0157\7") + buf.write(">\2\2\u0157\u0158\7?\2\2\u0158p\3\2\2\2\u0159\u015a\7") + buf.write("@\2\2\u015ar\3\2\2\2\u015b\u015c\7@\2\2\u015c\u015d\7") + buf.write("?\2\2\u015dt\3\2\2\2\u015e\u015f\7p\2\2\u015f\u0160\7") + buf.write("q\2\2\u0160\u0161\7v\2\2\u0161v\3\2\2\2\u0162\u0163\7") + buf.write("c\2\2\u0163\u0164\7p\2\2\u0164\u0165\7f\2\2\u0165x\3\2") + buf.write("\2\2\u0166\u0167\7q\2\2\u0167\u0168\7t\2\2\u0168z\3\2") + buf.write("\2\2\u0169\u016a\7n\2\2\u016a\u016b\7c\2\2\u016b\u016c") + buf.write("\7o\2\2\u016c\u016d\7d\2\2\u016d\u016e\7f\2\2\u016e\u016f") + buf.write("\7c\2\2\u016f|\3\2\2\2\u0170\u0171\7/\2\2\u0171\u0172") + buf.write("\7@\2\2\u0172~\3\2\2\2\u0173\u0174\7v\2\2\u0174\u0175") + buf.write("\7t\2\2\u0175\u0176\7w\2\2\u0176\u0177\7g\2\2\u0177\u0080") + buf.write("\3\2\2\2\u0178\u0179\7h\2\2\u0179\u017a\7c\2\2\u017a\u017b") + buf.write("\7n\2\2\u017b\u017c\7u\2\2\u017c\u017d\7g\2\2\u017d\u0082") + buf.write("\3\2\2\2\u017e\u017f\7p\2\2\u017f\u0180\7w\2\2\u0180\u0181") + buf.write("\7n\2\2\u0181\u0182\7n\2\2\u0182\u0084\3\2\2\2\u0183\u0185") + buf.write("\5\u008fH\2\u0184\u0183\3\2\2\2\u0185\u0186\3\2\2\2\u0186") + buf.write("\u0184\3\2\2\2\u0186\u0187\3\2\2\2\u0187\u0086\3\2\2\2") + buf.write("\u0188\u018a\5\u008fH\2\u0189\u0188\3\2\2\2\u018a\u018b") + buf.write("\3\2\2\2\u018b\u0189\3\2\2\2\u018b\u018c\3\2\2\2\u018c") + buf.write("\u018d\3\2\2\2\u018d\u018f\7\60\2\2\u018e\u0190\5\u008f") + buf.write("H\2\u018f\u018e\3\2\2\2\u0190\u0191\3\2\2\2\u0191\u018f") + buf.write("\3\2\2\2\u0191\u0192\3\2\2\2\u0192\u019c\3\2\2\2\u0193") + buf.write("\u0195\7g\2\2\u0194\u0196\7/\2\2\u0195\u0194\3\2\2\2\u0195") + buf.write("\u0196\3\2\2\2\u0196\u0198\3\2\2\2\u0197\u0199\5\u008f") + buf.write("H\2\u0198\u0197\3\2\2\2\u0199\u019a\3\2\2\2\u019a\u0198") + buf.write("\3\2\2\2\u019a\u019b\3\2\2\2\u019b\u019d\3\2\2\2\u019c") + buf.write("\u0193\3\2\2\2\u019c\u019d\3\2\2\2\u019d\u0088\3\2\2\2") + buf.write("\u019e\u01a4\7)\2\2\u019f\u01a3\n\2\2\2\u01a0\u01a1\7") + buf.write("^\2\2\u01a1\u01a3\t\3\2\2\u01a2\u019f\3\2\2\2\u01a2\u01a0") + buf.write("\3\2\2\2\u01a3\u01a6\3\2\2\2\u01a4\u01a2\3\2\2\2\u01a4") + buf.write("\u01a5\3\2\2\2\u01a5\u01a7\3\2\2\2\u01a6\u01a4\3\2\2\2") + buf.write("\u01a7\u01a8\7)\2\2\u01a8\u008a\3\2\2\2\u01a9\u01af\7") + buf.write("$\2\2\u01aa\u01ae\n\4\2\2\u01ab\u01ac\7^\2\2\u01ac\u01ae") + buf.write("\t\5\2\2\u01ad\u01aa\3\2\2\2\u01ad\u01ab\3\2\2\2\u01ae") + buf.write("\u01b1\3\2\2\2\u01af\u01ad\3\2\2\2\u01af\u01b0\3\2\2\2") + buf.write("\u01b0\u01b2\3\2\2\2\u01b1\u01af\3\2\2\2\u01b2\u01b3\7") + buf.write("$\2\2\u01b3\u008c\3\2\2\2\u01b4\u01b8\5\u0091I\2\u01b5") + buf.write("\u01b7\5\u0093J\2\u01b6\u01b5\3\2\2\2\u01b7\u01ba\3\2") + buf.write("\2\2\u01b8\u01b6\3\2\2\2\u01b8\u01b9\3\2\2\2\u01b9\u008e") + buf.write("\3\2\2\2\u01ba\u01b8\3\2\2\2\u01bb\u01bc\t\6\2\2\u01bc") + buf.write("\u0090\3\2\2\2\u01bd\u01be\t\7\2\2\u01be\u0092\3\2\2\2") + buf.write("\u01bf\u01c3\5\u0091I\2\u01c0\u01c3\5\u008fH\2\u01c1\u01c3") + buf.write("\t\b\2\2\u01c2\u01bf\3\2\2\2\u01c2\u01c0\3\2\2\2\u01c2") + buf.write("\u01c1\3\2\2\2\u01c3\u0094\3\2\2\2\u01c4\u01c5\7/\2\2") + buf.write("\u01c5\u01c6\7/\2\2\u01c6\u01ca\3\2\2\2\u01c7\u01c9\n") + buf.write("\t\2\2\u01c8\u01c7\3\2\2\2\u01c9\u01cc\3\2\2\2\u01ca\u01c8") + buf.write("\3\2\2\2\u01ca\u01cb\3\2\2\2\u01cb\u01cd\3\2\2\2\u01cc") + buf.write("\u01ca\3\2\2\2\u01cd\u01ce\bK\2\2\u01ce\u0096\3\2\2\2") + buf.write("\u01cf\u01d1\t\n\2\2\u01d0\u01cf\3\2\2\2\u01d1\u01d2\3") + buf.write("\2\2\2\u01d2\u01d0\3\2\2\2\u01d2\u01d3\3\2\2\2\u01d3\u01d4") + buf.write("\3\2\2\2\u01d4\u01d5\bL\2\2\u01d5\u0098\3\2\2\2\u01d6") + buf.write("\u01d7\13\2\2\2\u01d7\u009a\3\2\2\2\21\2\u0186\u018b\u0191") + buf.write("\u0195\u019a\u019c\u01a2\u01a4\u01ad\u01af\u01b8\u01c2") + buf.write("\u01ca\u01d2\3\b\2\2") return buf.getvalue() @@ -300,20 +283,14 @@ class PyxellLexer(Lexer): T__62 = 63 T__63 = 64 T__64 = 65 - T__65 = 66 - T__66 = 67 - T__67 = 68 - T__68 = 69 - T__69 = 70 - T__70 = 71 - INT = 72 - FLOAT = 73 - CHAR = 74 - STRING = 75 - ID = 76 - COMMENT = 77 - WS = 78 - ERR = 79 + INT = 66 + FLOAT = 67 + CHAR = 68 + STRING = 69 + ID = 70 + COMMENT = 71 + WS = 72 + ERR = 73 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -328,8 +305,7 @@ class PyxellLexer(Lexer): "'extern'", "':'", "'{'", "'}'", "'['", "']'", "'?'", "'.'", "'!'", "'~'", "'..'", "'...'", "'is'", "'isn't'", "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", "'not'", "'and'", "'or'", "'lambda'", - "'->'", "'true'", "'false'", "'null'", "'Void'", "'Int'", "'Float'", - "'Bool'", "'Char'", "'String'" ] + "'->'", "'true'", "'false'", "'null'" ] symbolicNames = [ "", "INT", "FLOAT", "CHAR", "STRING", "ID", "COMMENT", "WS", "ERR" ] @@ -344,8 +320,7 @@ class PyxellLexer(Lexer): "T__44", "T__45", "T__46", "T__47", "T__48", "T__49", "T__50", "T__51", "T__52", "T__53", "T__54", "T__55", "T__56", "T__57", "T__58", "T__59", "T__60", "T__61", - "T__62", "T__63", "T__64", "T__65", "T__66", "T__67", - "T__68", "T__69", "T__70", "INT", "FLOAT", "CHAR", "STRING", + "T__62", "T__63", "T__64", "INT", "FLOAT", "CHAR", "STRING", "ID", "DIGIT", "ID_START", "ID_CONT", "COMMENT", "WS", "ERR" ] diff --git a/src/antlr/PyxellLexer.tokens b/src/antlr/PyxellLexer.tokens index c629459f..cae091a4 100644 --- a/src/antlr/PyxellLexer.tokens +++ b/src/antlr/PyxellLexer.tokens @@ -63,20 +63,14 @@ T__61=62 T__62=63 T__63=64 T__64=65 -T__65=66 -T__66=67 -T__67=68 -T__68=69 -T__69=70 -T__70=71 -INT=72 -FLOAT=73 -CHAR=74 -STRING=75 -ID=76 -COMMENT=77 -WS=78 -ERR=79 +INT=66 +FLOAT=67 +CHAR=68 +STRING=69 +ID=70 +COMMENT=71 +WS=72 +ERR=73 ';'=1 'use'=2 'only'=3 @@ -142,9 +136,3 @@ ERR=79 'true'=63 'false'=64 'null'=65 -'Void'=66 -'Int'=67 -'Float'=68 -'Bool'=69 -'Char'=70 -'String'=71 diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index 76d9a4fd..25c93a78 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -8,7 +8,7 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3Q") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3K") buf.write("\u018e\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16") buf.write("\t\16\4\17\t\17\4\20\t\20\3\2\7\2\"\n\2\f\2\16\2%\13\2") @@ -45,164 +45,164 @@ def serializedATN(): buf.write("\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20") buf.write("\5\20\u017f\n\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3") buf.write("\20\7\20\u0189\n\20\f\20\16\20\u018c\13\20\3\20\2\4\20") - buf.write("\36\21\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36\2\r\3\2") + buf.write("\36\21\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36\2\f\3\2") buf.write("\13\26\3\2\27\30\4\2\17\20\61\61\3\2\f\16\3\2\17\20\3") - buf.write("\2\21\22\3\2\62\63\3\2\64\65\3\2\66;\3\2AB\3\2DI\2\u01d4") - buf.write("\2#\3\2\2\2\4,\3\2\2\2\6V\3\2\2\2\bX\3\2\2\2\n\u00a0\3") - buf.write("\2\2\2\f\u00a2\3\2\2\2\16\u00a8\3\2\2\2\20\u00dd\3\2\2") - buf.write("\2\22\u0146\3\2\2\2\24\u014b\3\2\2\2\26\u0158\3\2\2\2") - buf.write("\30\u015c\3\2\2\2\32\u0167\3\2\2\2\34\u016d\3\2\2\2\36") - buf.write("\u017e\3\2\2\2 \"\5\4\3\2! \3\2\2\2\"%\3\2\2\2#!\3\2\2") - buf.write("\2#$\3\2\2\2$&\3\2\2\2%#\3\2\2\2&\'\7\2\2\3\'\3\3\2\2") - buf.write("\2()\5\6\4\2)*\7\3\2\2*-\3\2\2\2+-\5\n\6\2,(\3\2\2\2,") - buf.write("+\3\2\2\2-\5\3\2\2\2./\7\4\2\2/\66\7N\2\2\60\61\7\5\2") - buf.write("\2\61\67\5\34\17\2\62\63\7\6\2\2\63\67\5\34\17\2\64\65") - buf.write("\7\7\2\2\65\67\7N\2\2\66\60\3\2\2\2\66\62\3\2\2\2\66\64") - buf.write("\3\2\2\2\66\67\3\2\2\2\67W\3\2\2\28W\7\b\2\29;\7\t\2\2") - buf.write(":<\5\22\n\2;:\3\2\2\2;<\3\2\2\2\5\36\20\2") - buf.write(">A\7N\2\2?@\7\n\2\2@B\5\22\n\2A?\3\2\2\2AB\3\2\2\2BW\3") - buf.write("\2\2\2CD\5\b\5\2DE\7\n\2\2EG\3\2\2\2FC\3\2\2\2GJ\3\2\2") - buf.write("\2HF\3\2\2\2HI\3\2\2\2IK\3\2\2\2JH\3\2\2\2KW\5\22\n\2") - buf.write("LM\5\20\t\2MN\t\2\2\2NO\7\n\2\2OP\5\20\t\2PW\3\2\2\2Q") - buf.write("W\t\3\2\2RT\7\31\2\2SU\5\22\n\2TS\3\2\2\2TU\3\2\2\2UW") - buf.write("\3\2\2\2V.\3\2\2\2V8\3\2\2\2V9\3\2\2\2V=\3\2\2\2VH\3\2") - buf.write("\2\2VL\3\2\2\2VQ\3\2\2\2VR\3\2\2\2W\7\3\2\2\2X]\5\20\t") - buf.write("\2YZ\7\32\2\2Z\\\5\20\t\2[Y\3\2\2\2\\_\3\2\2\2][\3\2\2") - buf.write("\2]^\3\2\2\2^\t\3\2\2\2_]\3\2\2\2`a\7\33\2\2ab\5\20\t") - buf.write("\2bc\7\34\2\2ck\5\16\b\2de\7\35\2\2ef\5\20\t\2fg\7\34") - buf.write("\2\2gh\5\16\b\2hj\3\2\2\2id\3\2\2\2jm\3\2\2\2ki\3\2\2") - buf.write("\2kl\3\2\2\2lq\3\2\2\2mk\3\2\2\2no\7\36\2\2op\7\34\2\2") - buf.write("pr\5\16\b\2qn\3\2\2\2qr\3\2\2\2r\u00a1\3\2\2\2st\7\37") - buf.write("\2\2tu\5\20\t\2uv\7\34\2\2vw\5\16\b\2w\u00a1\3\2\2\2x") - buf.write("y\7 \2\2yz\5\20\t\2z{\7\34\2\2{|\5\16\b\2|\u00a1\3\2\2") - buf.write("\2}~\7!\2\2~\177\5\22\n\2\177\u0080\7\"\2\2\u0080\u0083") - buf.write("\5\22\n\2\u0081\u0082\7#\2\2\u0082\u0084\5\22\n\2\u0083") - buf.write("\u0081\3\2\2\2\u0083\u0084\3\2\2\2\u0084\u0085\3\2\2\2") - buf.write("\u0085\u0086\7\34\2\2\u0086\u0087\5\16\b\2\u0087\u00a1") - buf.write("\3\2\2\2\u0088\u0089\7$\2\2\u0089\u008a\7N\2\2\u008a\u0090") - buf.write("\7%\2\2\u008b\u008c\5\f\7\2\u008c\u008d\7\32\2\2\u008d") - buf.write("\u008f\3\2\2\2\u008e\u008b\3\2\2\2\u008f\u0092\3\2\2\2") - buf.write("\u0090\u008e\3\2\2\2\u0090\u0091\3\2\2\2\u0091\u0094\3") - buf.write("\2\2\2\u0092\u0090\3\2\2\2\u0093\u0095\5\f\7\2\u0094\u0093") - buf.write("\3\2\2\2\u0094\u0095\3\2\2\2\u0095\u0096\3\2\2\2\u0096") - buf.write("\u0098\7&\2\2\u0097\u0099\5\36\20\2\u0098\u0097\3\2\2") - buf.write("\2\u0098\u0099\3\2\2\2\u0099\u009e\3\2\2\2\u009a\u009b") - buf.write("\7\'\2\2\u009b\u009f\5\16\b\2\u009c\u009d\7(\2\2\u009d") - buf.write("\u009f\7\3\2\2\u009e\u009a\3\2\2\2\u009e\u009c\3\2\2\2") - buf.write("\u009f\u00a1\3\2\2\2\u00a0`\3\2\2\2\u00a0s\3\2\2\2\u00a0") - buf.write("x\3\2\2\2\u00a0}\3\2\2\2\u00a0\u0088\3\2\2\2\u00a1\13") - buf.write("\3\2\2\2\u00a2\u00a3\5\36\20\2\u00a3\u00a6\7N\2\2\u00a4") - buf.write("\u00a5\7)\2\2\u00a5\u00a7\5\20\t\2\u00a6\u00a4\3\2\2\2") - buf.write("\u00a6\u00a7\3\2\2\2\u00a7\r\3\2\2\2\u00a8\u00aa\7*\2") - buf.write("\2\u00a9\u00ab\5\4\3\2\u00aa\u00a9\3\2\2\2\u00ab\u00ac") - buf.write("\3\2\2\2\u00ac\u00aa\3\2\2\2\u00ac\u00ad\3\2\2\2\u00ad") - buf.write("\u00ae\3\2\2\2\u00ae\u00af\7+\2\2\u00af\17\3\2\2\2\u00b0") - buf.write("\u00b1\b\t\1\2\u00b1\u00de\5\32\16\2\u00b2\u00b3\7%\2") - buf.write("\2\u00b3\u00b4\5\22\n\2\u00b4\u00b5\7&\2\2\u00b5\u00de") - buf.write("\3\2\2\2\u00b6\u00bc\7,\2\2\u00b7\u00b8\5\20\t\2\u00b8") - buf.write("\u00b9\7\32\2\2\u00b9\u00bb\3\2\2\2\u00ba\u00b7\3\2\2") - buf.write("\2\u00bb\u00be\3\2\2\2\u00bc\u00ba\3\2\2\2\u00bc\u00bd") - buf.write("\3\2\2\2\u00bd\u00c0\3\2\2\2\u00be\u00bc\3\2\2\2\u00bf") - buf.write("\u00c1\5\20\t\2\u00c0\u00bf\3\2\2\2\u00c0\u00c1\3\2\2") - buf.write("\2\u00c1\u00c2\3\2\2\2\u00c2\u00de\7-\2\2\u00c3\u00c4") - buf.write("\7,\2\2\u00c4\u00c6\5\20\t\2\u00c5\u00c7\5\26\f\2\u00c6") - buf.write("\u00c5\3\2\2\2\u00c7\u00c8\3\2\2\2\u00c8\u00c6\3\2\2\2") - buf.write("\u00c8\u00c9\3\2\2\2\u00c9\u00ca\3\2\2\2\u00ca\u00cb\7") - buf.write("-\2\2\u00cb\u00de\3\2\2\2\u00cc\u00cd\t\4\2\2\u00cd\u00de") - buf.write("\5\20\t\23\u00ce\u00cf\7<\2\2\u00cf\u00de\5\20\t\b\u00d0") - buf.write("\u00d5\7?\2\2\u00d1\u00d2\7N\2\2\u00d2\u00d4\7\32\2\2") - buf.write("\u00d3\u00d1\3\2\2\2\u00d4\u00d7\3\2\2\2\u00d5\u00d3\3") - buf.write("\2\2\2\u00d5\u00d6\3\2\2\2\u00d6\u00d9\3\2\2\2\u00d7\u00d5") - buf.write("\3\2\2\2\u00d8\u00da\7N\2\2\u00d9\u00d8\3\2\2\2\u00d9") - buf.write("\u00da\3\2\2\2\u00da\u00db\3\2\2\2\u00db\u00dc\7@\2\2") - buf.write("\u00dc\u00de\5\20\t\3\u00dd\u00b0\3\2\2\2\u00dd\u00b2") - buf.write("\3\2\2\2\u00dd\u00b6\3\2\2\2\u00dd\u00c3\3\2\2\2\u00dd") - buf.write("\u00cc\3\2\2\2\u00dd\u00ce\3\2\2\2\u00dd\u00d0\3\2\2\2") - buf.write("\u00de\u013e\3\2\2\2\u00df\u00e0\f\24\2\2\u00e0\u00e1") - buf.write("\7\13\2\2\u00e1\u013d\5\20\t\24\u00e2\u00e3\f\22\2\2\u00e3") - buf.write("\u00e4\t\5\2\2\u00e4\u013d\5\20\t\23\u00e5\u00e6\f\21") - buf.write("\2\2\u00e6\u00e7\t\6\2\2\u00e7\u013d\5\20\t\22\u00e8\u00e9") - buf.write("\f\20\2\2\u00e9\u00ea\t\7\2\2\u00ea\u013d\5\20\t\21\u00eb") - buf.write("\u00ec\f\17\2\2\u00ec\u00ed\7\23\2\2\u00ed\u013d\5\20") - buf.write("\t\20\u00ee\u00ef\f\16\2\2\u00ef\u00f0\7\24\2\2\u00f0") - buf.write("\u013d\5\20\t\17\u00f1\u00f2\f\r\2\2\u00f2\u00f3\7\25") - buf.write("\2\2\u00f3\u013d\5\20\t\16\u00f4\u00f5\f\f\2\2\u00f5\u00f6") - buf.write("\t\b\2\2\u00f6\u013d\5\20\t\r\u00f7\u00f8\f\n\2\2\u00f8") - buf.write("\u00f9\t\t\2\2\u00f9\u013d\5\20\t\13\u00fa\u00fb\f\t\2") - buf.write("\2\u00fb\u00fc\t\n\2\2\u00fc\u013d\5\20\t\t\u00fd\u00fe") - buf.write("\f\7\2\2\u00fe\u00ff\7=\2\2\u00ff\u013d\5\20\t\7\u0100") - buf.write("\u0101\f\6\2\2\u0101\u0102\7>\2\2\u0102\u013d\5\20\t\6") - buf.write("\u0103\u0104\f\5\2\2\u0104\u0105\7\26\2\2\u0105\u013d") - buf.write("\5\20\t\5\u0106\u0107\f\4\2\2\u0107\u0108\7.\2\2\u0108") - buf.write("\u0109\5\20\t\2\u0109\u010a\7)\2\2\u010a\u010b\5\20\t") - buf.write("\4\u010b\u013d\3\2\2\2\u010c\u010e\f\31\2\2\u010d\u010f") - buf.write("\7.\2\2\u010e\u010d\3\2\2\2\u010e\u010f\3\2\2\2\u010f") - buf.write("\u0110\3\2\2\2\u0110\u0111\7,\2\2\u0111\u0112\5\22\n\2") - buf.write("\u0112\u0113\7-\2\2\u0113\u013d\3\2\2\2\u0114\u0115\f") - buf.write("\30\2\2\u0115\u0117\7,\2\2\u0116\u0118\5\20\t\2\u0117") - buf.write("\u0116\3\2\2\2\u0117\u0118\3\2\2\2\u0118\u0119\3\2\2\2") - buf.write("\u0119\u011b\7)\2\2\u011a\u011c\5\20\t\2\u011b\u011a\3") - buf.write("\2\2\2\u011b\u011c\3\2\2\2\u011c\u0121\3\2\2\2\u011d\u011f") - buf.write("\7)\2\2\u011e\u0120\5\20\t\2\u011f\u011e\3\2\2\2\u011f") - buf.write("\u0120\3\2\2\2\u0120\u0122\3\2\2\2\u0121\u011d\3\2\2\2") - buf.write("\u0121\u0122\3\2\2\2\u0122\u0123\3\2\2\2\u0123\u013d\7") - buf.write("-\2\2\u0124\u0126\f\27\2\2\u0125\u0127\7.\2\2\u0126\u0125") - buf.write("\3\2\2\2\u0126\u0127\3\2\2\2\u0127\u0128\3\2\2\2\u0128") - buf.write("\u0129\7/\2\2\u0129\u013d\7N\2\2\u012a\u012b\f\26\2\2") - buf.write("\u012b\u0131\7%\2\2\u012c\u012d\5\30\r\2\u012d\u012e\7") - buf.write("\32\2\2\u012e\u0130\3\2\2\2\u012f\u012c\3\2\2\2\u0130") - buf.write("\u0133\3\2\2\2\u0131\u012f\3\2\2\2\u0131\u0132\3\2\2\2") - buf.write("\u0132\u0135\3\2\2\2\u0133\u0131\3\2\2\2\u0134\u0136\5") - buf.write("\30\r\2\u0135\u0134\3\2\2\2\u0135\u0136\3\2\2\2\u0136") - buf.write("\u0137\3\2\2\2\u0137\u013d\7&\2\2\u0138\u0139\f\25\2\2") - buf.write("\u0139\u013d\7\60\2\2\u013a\u013b\f\13\2\2\u013b\u013d") - buf.write("\7\63\2\2\u013c\u00df\3\2\2\2\u013c\u00e2\3\2\2\2\u013c") - buf.write("\u00e5\3\2\2\2\u013c\u00e8\3\2\2\2\u013c\u00eb\3\2\2\2") - buf.write("\u013c\u00ee\3\2\2\2\u013c\u00f1\3\2\2\2\u013c\u00f4\3") - buf.write("\2\2\2\u013c\u00f7\3\2\2\2\u013c\u00fa\3\2\2\2\u013c\u00fd") - buf.write("\3\2\2\2\u013c\u0100\3\2\2\2\u013c\u0103\3\2\2\2\u013c") - buf.write("\u0106\3\2\2\2\u013c\u010c\3\2\2\2\u013c\u0114\3\2\2\2") - buf.write("\u013c\u0124\3\2\2\2\u013c\u012a\3\2\2\2\u013c\u0138\3") - buf.write("\2\2\2\u013c\u013a\3\2\2\2\u013d\u0140\3\2\2\2\u013e\u013c") - buf.write("\3\2\2\2\u013e\u013f\3\2\2\2\u013f\21\3\2\2\2\u0140\u013e") - buf.write("\3\2\2\2\u0141\u0142\5\20\t\2\u0142\u0143\7\32\2\2\u0143") - buf.write("\u0145\3\2\2\2\u0144\u0141\3\2\2\2\u0145\u0148\3\2\2\2") - buf.write("\u0146\u0144\3\2\2\2\u0146\u0147\3\2\2\2\u0147\u0149\3") - buf.write("\2\2\2\u0148\u0146\3\2\2\2\u0149\u014a\5\20\t\2\u014a") - buf.write("\23\3\2\2\2\u014b\u014c\5\22\n\2\u014c\u014d\7\2\2\3\u014d") - buf.write("\25\3\2\2\2\u014e\u014f\7!\2\2\u014f\u0150\5\22\n\2\u0150") - buf.write("\u0151\7\"\2\2\u0151\u0154\5\22\n\2\u0152\u0153\7#\2\2") - buf.write("\u0153\u0155\5\22\n\2\u0154\u0152\3\2\2\2\u0154\u0155") - buf.write("\3\2\2\2\u0155\u0159\3\2\2\2\u0156\u0157\7\33\2\2\u0157") - buf.write("\u0159\5\20\t\2\u0158\u014e\3\2\2\2\u0158\u0156\3\2\2") - buf.write("\2\u0159\27\3\2\2\2\u015a\u015b\7N\2\2\u015b\u015d\7\n") - buf.write("\2\2\u015c\u015a\3\2\2\2\u015c\u015d\3\2\2\2\u015d\u015e") - buf.write("\3\2\2\2\u015e\u015f\5\20\t\2\u015f\31\3\2\2\2\u0160\u0168") - buf.write("\7J\2\2\u0161\u0168\7K\2\2\u0162\u0168\t\13\2\2\u0163") - buf.write("\u0168\7L\2\2\u0164\u0168\7M\2\2\u0165\u0168\7C\2\2\u0166") - buf.write("\u0168\7N\2\2\u0167\u0160\3\2\2\2\u0167\u0161\3\2\2\2") - buf.write("\u0167\u0162\3\2\2\2\u0167\u0163\3\2\2\2\u0167\u0164\3") - buf.write("\2\2\2\u0167\u0165\3\2\2\2\u0167\u0166\3\2\2\2\u0168\33") - buf.write("\3\2\2\2\u0169\u016a\7N\2\2\u016a\u016c\7\32\2\2\u016b") - buf.write("\u0169\3\2\2\2\u016c\u016f\3\2\2\2\u016d\u016b\3\2\2\2") - buf.write("\u016d\u016e\3\2\2\2\u016e\u0170\3\2\2\2\u016f\u016d\3") - buf.write("\2\2\2\u0170\u0171\7N\2\2\u0171\35\3\2\2\2\u0172\u0173") - buf.write("\b\20\1\2\u0173\u017f\t\f\2\2\u0174\u0175\7%\2\2\u0175") - buf.write("\u0176\5\36\20\2\u0176\u0177\7&\2\2\u0177\u017f\3\2\2") - buf.write("\2\u0178\u0179\7,\2\2\u0179\u017a\5\36\20\2\u017a\u017b") - buf.write("\7-\2\2\u017b\u017f\3\2\2\2\u017c\u017d\7@\2\2\u017d\u017f") - buf.write("\5\36\20\3\u017e\u0172\3\2\2\2\u017e\u0174\3\2\2\2\u017e") - buf.write("\u0178\3\2\2\2\u017e\u017c\3\2\2\2\u017f\u018a\3\2\2\2") - buf.write("\u0180\u0181\f\5\2\2\u0181\u0182\7\f\2\2\u0182\u0189\5") - buf.write("\36\20\5\u0183\u0184\f\4\2\2\u0184\u0185\7@\2\2\u0185") - buf.write("\u0189\5\36\20\4\u0186\u0187\f\6\2\2\u0187\u0189\7.\2") - buf.write("\2\u0188\u0180\3\2\2\2\u0188\u0183\3\2\2\2\u0188\u0186") - buf.write("\3\2\2\2\u0189\u018c\3\2\2\2\u018a\u0188\3\2\2\2\u018a") - buf.write("\u018b\3\2\2\2\u018b\37\3\2\2\2\u018c\u018a\3\2\2\2.#") - buf.write(",\66;AHTV]kq\u0083\u0090\u0094\u0098\u009e\u00a0\u00a6") - buf.write("\u00ac\u00bc\u00c0\u00c8\u00d5\u00d9\u00dd\u010e\u0117") - buf.write("\u011b\u011f\u0121\u0126\u0131\u0135\u013c\u013e\u0146") - buf.write("\u0154\u0158\u015c\u0167\u016d\u017e\u0188\u018a") + buf.write("\2\21\22\3\2\62\63\3\2\64\65\3\2\66;\3\2AB\2\u01d4\2#") + buf.write("\3\2\2\2\4,\3\2\2\2\6V\3\2\2\2\bX\3\2\2\2\n\u00a0\3\2") + buf.write("\2\2\f\u00a2\3\2\2\2\16\u00a8\3\2\2\2\20\u00dd\3\2\2\2") + buf.write("\22\u0146\3\2\2\2\24\u014b\3\2\2\2\26\u0158\3\2\2\2\30") + buf.write("\u015c\3\2\2\2\32\u0167\3\2\2\2\34\u016d\3\2\2\2\36\u017e") + buf.write("\3\2\2\2 \"\5\4\3\2! \3\2\2\2\"%\3\2\2\2#!\3\2\2\2#$\3") + buf.write("\2\2\2$&\3\2\2\2%#\3\2\2\2&\'\7\2\2\3\'\3\3\2\2\2()\5") + buf.write("\6\4\2)*\7\3\2\2*-\3\2\2\2+-\5\n\6\2,(\3\2\2\2,+\3\2\2") + buf.write("\2-\5\3\2\2\2./\7\4\2\2/\66\7H\2\2\60\61\7\5\2\2\61\67") + buf.write("\5\34\17\2\62\63\7\6\2\2\63\67\5\34\17\2\64\65\7\7\2\2") + buf.write("\65\67\7H\2\2\66\60\3\2\2\2\66\62\3\2\2\2\66\64\3\2\2") + buf.write("\2\66\67\3\2\2\2\67W\3\2\2\28W\7\b\2\29;\7\t\2\2:<\5\22") + buf.write("\n\2;:\3\2\2\2;<\3\2\2\2\5\36\20\2>A\7H\2") + buf.write("\2?@\7\n\2\2@B\5\22\n\2A?\3\2\2\2AB\3\2\2\2BW\3\2\2\2") + buf.write("CD\5\b\5\2DE\7\n\2\2EG\3\2\2\2FC\3\2\2\2GJ\3\2\2\2HF\3") + buf.write("\2\2\2HI\3\2\2\2IK\3\2\2\2JH\3\2\2\2KW\5\22\n\2LM\5\20") + buf.write("\t\2MN\t\2\2\2NO\7\n\2\2OP\5\20\t\2PW\3\2\2\2QW\t\3\2") + buf.write("\2RT\7\31\2\2SU\5\22\n\2TS\3\2\2\2TU\3\2\2\2UW\3\2\2\2") + buf.write("V.\3\2\2\2V8\3\2\2\2V9\3\2\2\2V=\3\2\2\2VH\3\2\2\2VL\3") + buf.write("\2\2\2VQ\3\2\2\2VR\3\2\2\2W\7\3\2\2\2X]\5\20\t\2YZ\7\32") + buf.write("\2\2Z\\\5\20\t\2[Y\3\2\2\2\\_\3\2\2\2][\3\2\2\2]^\3\2") + buf.write("\2\2^\t\3\2\2\2_]\3\2\2\2`a\7\33\2\2ab\5\20\t\2bc\7\34") + buf.write("\2\2ck\5\16\b\2de\7\35\2\2ef\5\20\t\2fg\7\34\2\2gh\5\16") + buf.write("\b\2hj\3\2\2\2id\3\2\2\2jm\3\2\2\2ki\3\2\2\2kl\3\2\2\2") + buf.write("lq\3\2\2\2mk\3\2\2\2no\7\36\2\2op\7\34\2\2pr\5\16\b\2") + buf.write("qn\3\2\2\2qr\3\2\2\2r\u00a1\3\2\2\2st\7\37\2\2tu\5\20") + buf.write("\t\2uv\7\34\2\2vw\5\16\b\2w\u00a1\3\2\2\2xy\7 \2\2yz\5") + buf.write("\20\t\2z{\7\34\2\2{|\5\16\b\2|\u00a1\3\2\2\2}~\7!\2\2") + buf.write("~\177\5\22\n\2\177\u0080\7\"\2\2\u0080\u0083\5\22\n\2") + buf.write("\u0081\u0082\7#\2\2\u0082\u0084\5\22\n\2\u0083\u0081\3") + buf.write("\2\2\2\u0083\u0084\3\2\2\2\u0084\u0085\3\2\2\2\u0085\u0086") + buf.write("\7\34\2\2\u0086\u0087\5\16\b\2\u0087\u00a1\3\2\2\2\u0088") + buf.write("\u0089\7$\2\2\u0089\u008a\7H\2\2\u008a\u0090\7%\2\2\u008b") + buf.write("\u008c\5\f\7\2\u008c\u008d\7\32\2\2\u008d\u008f\3\2\2") + buf.write("\2\u008e\u008b\3\2\2\2\u008f\u0092\3\2\2\2\u0090\u008e") + buf.write("\3\2\2\2\u0090\u0091\3\2\2\2\u0091\u0094\3\2\2\2\u0092") + buf.write("\u0090\3\2\2\2\u0093\u0095\5\f\7\2\u0094\u0093\3\2\2\2") + buf.write("\u0094\u0095\3\2\2\2\u0095\u0096\3\2\2\2\u0096\u0098\7") + buf.write("&\2\2\u0097\u0099\5\36\20\2\u0098\u0097\3\2\2\2\u0098") + buf.write("\u0099\3\2\2\2\u0099\u009e\3\2\2\2\u009a\u009b\7\'\2\2") + buf.write("\u009b\u009f\5\16\b\2\u009c\u009d\7(\2\2\u009d\u009f\7") + buf.write("\3\2\2\u009e\u009a\3\2\2\2\u009e\u009c\3\2\2\2\u009f\u00a1") + buf.write("\3\2\2\2\u00a0`\3\2\2\2\u00a0s\3\2\2\2\u00a0x\3\2\2\2") + buf.write("\u00a0}\3\2\2\2\u00a0\u0088\3\2\2\2\u00a1\13\3\2\2\2\u00a2") + buf.write("\u00a3\5\36\20\2\u00a3\u00a6\7H\2\2\u00a4\u00a5\7)\2\2") + buf.write("\u00a5\u00a7\5\20\t\2\u00a6\u00a4\3\2\2\2\u00a6\u00a7") + buf.write("\3\2\2\2\u00a7\r\3\2\2\2\u00a8\u00aa\7*\2\2\u00a9\u00ab") + buf.write("\5\4\3\2\u00aa\u00a9\3\2\2\2\u00ab\u00ac\3\2\2\2\u00ac") + buf.write("\u00aa\3\2\2\2\u00ac\u00ad\3\2\2\2\u00ad\u00ae\3\2\2\2") + buf.write("\u00ae\u00af\7+\2\2\u00af\17\3\2\2\2\u00b0\u00b1\b\t\1") + buf.write("\2\u00b1\u00de\5\32\16\2\u00b2\u00b3\7%\2\2\u00b3\u00b4") + buf.write("\5\22\n\2\u00b4\u00b5\7&\2\2\u00b5\u00de\3\2\2\2\u00b6") + buf.write("\u00bc\7,\2\2\u00b7\u00b8\5\20\t\2\u00b8\u00b9\7\32\2") + buf.write("\2\u00b9\u00bb\3\2\2\2\u00ba\u00b7\3\2\2\2\u00bb\u00be") + buf.write("\3\2\2\2\u00bc\u00ba\3\2\2\2\u00bc\u00bd\3\2\2\2\u00bd") + buf.write("\u00c0\3\2\2\2\u00be\u00bc\3\2\2\2\u00bf\u00c1\5\20\t") + buf.write("\2\u00c0\u00bf\3\2\2\2\u00c0\u00c1\3\2\2\2\u00c1\u00c2") + buf.write("\3\2\2\2\u00c2\u00de\7-\2\2\u00c3\u00c4\7,\2\2\u00c4\u00c6") + buf.write("\5\20\t\2\u00c5\u00c7\5\26\f\2\u00c6\u00c5\3\2\2\2\u00c7") + buf.write("\u00c8\3\2\2\2\u00c8\u00c6\3\2\2\2\u00c8\u00c9\3\2\2\2") + buf.write("\u00c9\u00ca\3\2\2\2\u00ca\u00cb\7-\2\2\u00cb\u00de\3") + buf.write("\2\2\2\u00cc\u00cd\t\4\2\2\u00cd\u00de\5\20\t\23\u00ce") + buf.write("\u00cf\7<\2\2\u00cf\u00de\5\20\t\b\u00d0\u00d5\7?\2\2") + buf.write("\u00d1\u00d2\7H\2\2\u00d2\u00d4\7\32\2\2\u00d3\u00d1\3") + buf.write("\2\2\2\u00d4\u00d7\3\2\2\2\u00d5\u00d3\3\2\2\2\u00d5\u00d6") + buf.write("\3\2\2\2\u00d6\u00d9\3\2\2\2\u00d7\u00d5\3\2\2\2\u00d8") + buf.write("\u00da\7H\2\2\u00d9\u00d8\3\2\2\2\u00d9\u00da\3\2\2\2") + buf.write("\u00da\u00db\3\2\2\2\u00db\u00dc\7@\2\2\u00dc\u00de\5") + buf.write("\20\t\3\u00dd\u00b0\3\2\2\2\u00dd\u00b2\3\2\2\2\u00dd") + buf.write("\u00b6\3\2\2\2\u00dd\u00c3\3\2\2\2\u00dd\u00cc\3\2\2\2") + buf.write("\u00dd\u00ce\3\2\2\2\u00dd\u00d0\3\2\2\2\u00de\u013e\3") + buf.write("\2\2\2\u00df\u00e0\f\24\2\2\u00e0\u00e1\7\13\2\2\u00e1") + buf.write("\u013d\5\20\t\24\u00e2\u00e3\f\22\2\2\u00e3\u00e4\t\5") + buf.write("\2\2\u00e4\u013d\5\20\t\23\u00e5\u00e6\f\21\2\2\u00e6") + buf.write("\u00e7\t\6\2\2\u00e7\u013d\5\20\t\22\u00e8\u00e9\f\20") + buf.write("\2\2\u00e9\u00ea\t\7\2\2\u00ea\u013d\5\20\t\21\u00eb\u00ec") + buf.write("\f\17\2\2\u00ec\u00ed\7\23\2\2\u00ed\u013d\5\20\t\20\u00ee") + buf.write("\u00ef\f\16\2\2\u00ef\u00f0\7\24\2\2\u00f0\u013d\5\20") + buf.write("\t\17\u00f1\u00f2\f\r\2\2\u00f2\u00f3\7\25\2\2\u00f3\u013d") + buf.write("\5\20\t\16\u00f4\u00f5\f\f\2\2\u00f5\u00f6\t\b\2\2\u00f6") + buf.write("\u013d\5\20\t\r\u00f7\u00f8\f\n\2\2\u00f8\u00f9\t\t\2") + buf.write("\2\u00f9\u013d\5\20\t\13\u00fa\u00fb\f\t\2\2\u00fb\u00fc") + buf.write("\t\n\2\2\u00fc\u013d\5\20\t\t\u00fd\u00fe\f\7\2\2\u00fe") + buf.write("\u00ff\7=\2\2\u00ff\u013d\5\20\t\7\u0100\u0101\f\6\2\2") + buf.write("\u0101\u0102\7>\2\2\u0102\u013d\5\20\t\6\u0103\u0104\f") + buf.write("\5\2\2\u0104\u0105\7\26\2\2\u0105\u013d\5\20\t\5\u0106") + buf.write("\u0107\f\4\2\2\u0107\u0108\7.\2\2\u0108\u0109\5\20\t\2") + buf.write("\u0109\u010a\7)\2\2\u010a\u010b\5\20\t\4\u010b\u013d\3") + buf.write("\2\2\2\u010c\u010e\f\31\2\2\u010d\u010f\7.\2\2\u010e\u010d") + buf.write("\3\2\2\2\u010e\u010f\3\2\2\2\u010f\u0110\3\2\2\2\u0110") + buf.write("\u0111\7,\2\2\u0111\u0112\5\22\n\2\u0112\u0113\7-\2\2") + buf.write("\u0113\u013d\3\2\2\2\u0114\u0115\f\30\2\2\u0115\u0117") + buf.write("\7,\2\2\u0116\u0118\5\20\t\2\u0117\u0116\3\2\2\2\u0117") + buf.write("\u0118\3\2\2\2\u0118\u0119\3\2\2\2\u0119\u011b\7)\2\2") + buf.write("\u011a\u011c\5\20\t\2\u011b\u011a\3\2\2\2\u011b\u011c") + buf.write("\3\2\2\2\u011c\u0121\3\2\2\2\u011d\u011f\7)\2\2\u011e") + buf.write("\u0120\5\20\t\2\u011f\u011e\3\2\2\2\u011f\u0120\3\2\2") + buf.write("\2\u0120\u0122\3\2\2\2\u0121\u011d\3\2\2\2\u0121\u0122") + buf.write("\3\2\2\2\u0122\u0123\3\2\2\2\u0123\u013d\7-\2\2\u0124") + buf.write("\u0126\f\27\2\2\u0125\u0127\7.\2\2\u0126\u0125\3\2\2\2") + buf.write("\u0126\u0127\3\2\2\2\u0127\u0128\3\2\2\2\u0128\u0129\7") + buf.write("/\2\2\u0129\u013d\7H\2\2\u012a\u012b\f\26\2\2\u012b\u0131") + buf.write("\7%\2\2\u012c\u012d\5\30\r\2\u012d\u012e\7\32\2\2\u012e") + buf.write("\u0130\3\2\2\2\u012f\u012c\3\2\2\2\u0130\u0133\3\2\2\2") + buf.write("\u0131\u012f\3\2\2\2\u0131\u0132\3\2\2\2\u0132\u0135\3") + buf.write("\2\2\2\u0133\u0131\3\2\2\2\u0134\u0136\5\30\r\2\u0135") + buf.write("\u0134\3\2\2\2\u0135\u0136\3\2\2\2\u0136\u0137\3\2\2\2") + buf.write("\u0137\u013d\7&\2\2\u0138\u0139\f\25\2\2\u0139\u013d\7") + buf.write("\60\2\2\u013a\u013b\f\13\2\2\u013b\u013d\7\63\2\2\u013c") + buf.write("\u00df\3\2\2\2\u013c\u00e2\3\2\2\2\u013c\u00e5\3\2\2\2") + buf.write("\u013c\u00e8\3\2\2\2\u013c\u00eb\3\2\2\2\u013c\u00ee\3") + buf.write("\2\2\2\u013c\u00f1\3\2\2\2\u013c\u00f4\3\2\2\2\u013c\u00f7") + buf.write("\3\2\2\2\u013c\u00fa\3\2\2\2\u013c\u00fd\3\2\2\2\u013c") + buf.write("\u0100\3\2\2\2\u013c\u0103\3\2\2\2\u013c\u0106\3\2\2\2") + buf.write("\u013c\u010c\3\2\2\2\u013c\u0114\3\2\2\2\u013c\u0124\3") + buf.write("\2\2\2\u013c\u012a\3\2\2\2\u013c\u0138\3\2\2\2\u013c\u013a") + buf.write("\3\2\2\2\u013d\u0140\3\2\2\2\u013e\u013c\3\2\2\2\u013e") + buf.write("\u013f\3\2\2\2\u013f\21\3\2\2\2\u0140\u013e\3\2\2\2\u0141") + buf.write("\u0142\5\20\t\2\u0142\u0143\7\32\2\2\u0143\u0145\3\2\2") + buf.write("\2\u0144\u0141\3\2\2\2\u0145\u0148\3\2\2\2\u0146\u0144") + buf.write("\3\2\2\2\u0146\u0147\3\2\2\2\u0147\u0149\3\2\2\2\u0148") + buf.write("\u0146\3\2\2\2\u0149\u014a\5\20\t\2\u014a\23\3\2\2\2\u014b") + buf.write("\u014c\5\22\n\2\u014c\u014d\7\2\2\3\u014d\25\3\2\2\2\u014e") + buf.write("\u014f\7!\2\2\u014f\u0150\5\22\n\2\u0150\u0151\7\"\2\2") + buf.write("\u0151\u0154\5\22\n\2\u0152\u0153\7#\2\2\u0153\u0155\5") + buf.write("\22\n\2\u0154\u0152\3\2\2\2\u0154\u0155\3\2\2\2\u0155") + buf.write("\u0159\3\2\2\2\u0156\u0157\7\33\2\2\u0157\u0159\5\20\t") + buf.write("\2\u0158\u014e\3\2\2\2\u0158\u0156\3\2\2\2\u0159\27\3") + buf.write("\2\2\2\u015a\u015b\7H\2\2\u015b\u015d\7\n\2\2\u015c\u015a") + buf.write("\3\2\2\2\u015c\u015d\3\2\2\2\u015d\u015e\3\2\2\2\u015e") + buf.write("\u015f\5\20\t\2\u015f\31\3\2\2\2\u0160\u0168\7D\2\2\u0161") + buf.write("\u0168\7E\2\2\u0162\u0168\t\13\2\2\u0163\u0168\7F\2\2") + buf.write("\u0164\u0168\7G\2\2\u0165\u0168\7C\2\2\u0166\u0168\7H") + buf.write("\2\2\u0167\u0160\3\2\2\2\u0167\u0161\3\2\2\2\u0167\u0162") + buf.write("\3\2\2\2\u0167\u0163\3\2\2\2\u0167\u0164\3\2\2\2\u0167") + buf.write("\u0165\3\2\2\2\u0167\u0166\3\2\2\2\u0168\33\3\2\2\2\u0169") + buf.write("\u016a\7H\2\2\u016a\u016c\7\32\2\2\u016b\u0169\3\2\2\2") + buf.write("\u016c\u016f\3\2\2\2\u016d\u016b\3\2\2\2\u016d\u016e\3") + buf.write("\2\2\2\u016e\u0170\3\2\2\2\u016f\u016d\3\2\2\2\u0170\u0171") + buf.write("\7H\2\2\u0171\35\3\2\2\2\u0172\u0173\b\20\1\2\u0173\u017f") + buf.write("\7H\2\2\u0174\u0175\7%\2\2\u0175\u0176\5\36\20\2\u0176") + buf.write("\u0177\7&\2\2\u0177\u017f\3\2\2\2\u0178\u0179\7,\2\2\u0179") + buf.write("\u017a\5\36\20\2\u017a\u017b\7-\2\2\u017b\u017f\3\2\2") + buf.write("\2\u017c\u017d\7@\2\2\u017d\u017f\5\36\20\3\u017e\u0172") + buf.write("\3\2\2\2\u017e\u0174\3\2\2\2\u017e\u0178\3\2\2\2\u017e") + buf.write("\u017c\3\2\2\2\u017f\u018a\3\2\2\2\u0180\u0181\f\5\2\2") + buf.write("\u0181\u0182\7\f\2\2\u0182\u0189\5\36\20\5\u0183\u0184") + buf.write("\f\4\2\2\u0184\u0185\7@\2\2\u0185\u0189\5\36\20\4\u0186") + buf.write("\u0187\f\6\2\2\u0187\u0189\7.\2\2\u0188\u0180\3\2\2\2") + buf.write("\u0188\u0183\3\2\2\2\u0188\u0186\3\2\2\2\u0189\u018c\3") + buf.write("\2\2\2\u018a\u0188\3\2\2\2\u018a\u018b\3\2\2\2\u018b\37") + buf.write("\3\2\2\2\u018c\u018a\3\2\2\2.#,\66;AHTV]kq\u0083\u0090") + buf.write("\u0094\u0098\u009e\u00a0\u00a6\u00ac\u00bc\u00c0\u00c8") + buf.write("\u00d5\u00d9\u00dd\u010e\u0117\u011b\u011f\u0121\u0126") + buf.write("\u0131\u0135\u013c\u013e\u0146\u0154\u0158\u015c\u0167") + buf.write("\u016d\u017e\u0188\u018a") return buf.getvalue() @@ -226,8 +226,7 @@ class PyxellParser ( Parser ): "']'", "'?'", "'.'", "'!'", "'~'", "'..'", "'...'", "'is'", "'isn't'", "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", "'not'", "'and'", "'or'", "'lambda'", "'->'", - "'true'", "'false'", "'null'", "'Void'", "'Int'", "'Float'", - "'Bool'", "'Char'", "'String'" ] + "'true'", "'false'", "'null'" ] symbolicNames = [ "", "", "", "", "", "", "", "", @@ -245,10 +244,8 @@ class PyxellParser ( Parser ): "", "", "", "", "", "", "", "", "", "", "", "", - "", "", "", "", - "", "", "", "", - "INT", "FLOAT", "CHAR", "STRING", "ID", "COMMENT", - "WS", "ERR" ] + "", "", "INT", "FLOAT", "CHAR", + "STRING", "ID", "COMMENT", "WS", "ERR" ] RULE_program = 0 RULE_stmt = 1 @@ -336,20 +333,14 @@ class PyxellParser ( Parser ): T__62=63 T__63=64 T__64=65 - T__65=66 - T__66=67 - T__67=68 - T__68=69 - T__69=70 - T__70=71 - INT=72 - FLOAT=73 - CHAR=74 - STRING=75 - ID=76 - COMMENT=77 - WS=78 - ERR=79 + INT=66 + FLOAT=67 + CHAR=68 + STRING=69 + ID=70 + COMMENT=71 + WS=72 + ERR=73 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -398,7 +389,7 @@ def program(self): self.state = 33 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__46) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.T__66 - 64)) | (1 << (PyxellParser.T__67 - 64)) | (1 << (PyxellParser.T__68 - 64)) | (1 << (PyxellParser.T__69 - 64)) | (1 << (PyxellParser.T__70 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0): + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__46) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0): self.state = 30 self.stmt() self.state = 35 @@ -450,7 +441,7 @@ def stmt(self): self.state = 42 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__1, PyxellParser.T__5, PyxellParser.T__6, PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__20, PyxellParser.T__21, PyxellParser.T__22, PyxellParser.T__34, PyxellParser.T__41, PyxellParser.T__46, PyxellParser.T__57, PyxellParser.T__60, PyxellParser.T__61, PyxellParser.T__62, PyxellParser.T__63, PyxellParser.T__64, PyxellParser.T__65, PyxellParser.T__66, PyxellParser.T__67, PyxellParser.T__68, PyxellParser.T__69, PyxellParser.T__70, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: + if token in [PyxellParser.T__1, PyxellParser.T__5, PyxellParser.T__6, PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__20, PyxellParser.T__21, PyxellParser.T__22, PyxellParser.T__34, PyxellParser.T__41, PyxellParser.T__46, PyxellParser.T__57, PyxellParser.T__60, PyxellParser.T__61, PyxellParser.T__62, PyxellParser.T__63, PyxellParser.T__64, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: self.enterOuterAlt(localctx, 1) self.state = 38 self.simple_stmt() @@ -1121,7 +1112,7 @@ def compound_stmt(self): self.state = 146 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 35)) & ~0x3f) == 0 and ((1 << (_la - 35)) & ((1 << (PyxellParser.T__34 - 35)) | (1 << (PyxellParser.T__41 - 35)) | (1 << (PyxellParser.T__61 - 35)) | (1 << (PyxellParser.T__65 - 35)) | (1 << (PyxellParser.T__66 - 35)) | (1 << (PyxellParser.T__67 - 35)) | (1 << (PyxellParser.T__68 - 35)) | (1 << (PyxellParser.T__69 - 35)) | (1 << (PyxellParser.T__70 - 35)))) != 0): + if ((((_la - 35)) & ~0x3f) == 0 and ((1 << (_la - 35)) & ((1 << (PyxellParser.T__34 - 35)) | (1 << (PyxellParser.T__41 - 35)) | (1 << (PyxellParser.T__61 - 35)) | (1 << (PyxellParser.ID - 35)))) != 0): self.state = 145 self.func_arg() @@ -1131,7 +1122,7 @@ def compound_stmt(self): self.state = 150 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 35)) & ~0x3f) == 0 and ((1 << (_la - 35)) & ((1 << (PyxellParser.T__34 - 35)) | (1 << (PyxellParser.T__41 - 35)) | (1 << (PyxellParser.T__61 - 35)) | (1 << (PyxellParser.T__65 - 35)) | (1 << (PyxellParser.T__66 - 35)) | (1 << (PyxellParser.T__67 - 35)) | (1 << (PyxellParser.T__68 - 35)) | (1 << (PyxellParser.T__69 - 35)) | (1 << (PyxellParser.T__70 - 35)))) != 0): + if ((((_la - 35)) & ~0x3f) == 0 and ((1 << (_la - 35)) & ((1 << (PyxellParser.T__34 - 35)) | (1 << (PyxellParser.T__41 - 35)) | (1 << (PyxellParser.T__61 - 35)) | (1 << (PyxellParser.ID - 35)))) != 0): self.state = 149 localctx.ret = self.typ(0) @@ -1280,7 +1271,7 @@ def block(self): self.state = 170 self._errHandler.sync(self) _la = self._input.LA(1) - if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__46) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.T__66 - 64)) | (1 << (PyxellParser.T__67 - 64)) | (1 << (PyxellParser.T__68 - 64)) | (1 << (PyxellParser.T__69 - 64)) | (1 << (PyxellParser.T__70 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0)): + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__46) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0)): break self.state = 172 @@ -2772,6 +2763,22 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) + class TypeNameContext(TypContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.TypContext + super().__init__(parser) + self.copyFrom(ctx) + + def ID(self): + return self.getToken(PyxellParser.ID, 0) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeName" ): + return visitor.visitTypeName(self) + else: + return visitor.visitChildren(self) + + class TypeTupleContext(TypContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.TypContext @@ -2846,20 +2853,6 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) - class TypePrimitiveContext(TypContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.TypContext - super().__init__(parser) - self.copyFrom(ctx) - - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitTypePrimitive" ): - return visitor.visitTypePrimitive(self) - else: - return visitor.visitChildren(self) - - def typ(self, _p:int=0): _parentctx = self._ctx @@ -2868,24 +2861,18 @@ def typ(self, _p:int=0): _prevctx = localctx _startState = 28 self.enterRecursionRule(localctx, 28, self.RULE_typ, _p) - self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 380 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__65, PyxellParser.T__66, PyxellParser.T__67, PyxellParser.T__68, PyxellParser.T__69, PyxellParser.T__70]: - localctx = PyxellParser.TypePrimitiveContext(self, localctx) + if token in [PyxellParser.ID]: + localctx = PyxellParser.TypeNameContext(self, localctx) self._ctx = localctx _prevctx = localctx self.state = 369 - _la = self._input.LA(1) - if not(((((_la - 66)) & ~0x3f) == 0 and ((1 << (_la - 66)) & ((1 << (PyxellParser.T__65 - 66)) | (1 << (PyxellParser.T__66 - 66)) | (1 << (PyxellParser.T__67 - 66)) | (1 << (PyxellParser.T__68 - 66)) | (1 << (PyxellParser.T__69 - 66)) | (1 << (PyxellParser.T__70 - 66)))) != 0)): - self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() + self.match(PyxellParser.ID) pass elif token in [PyxellParser.T__34]: localctx = PyxellParser.TypeParenthesesContext(self, localctx) diff --git a/src/antlr/PyxellVisitor.py b/src/antlr/PyxellVisitor.py index cd1805b0..d7d705dd 100644 --- a/src/antlr/PyxellVisitor.py +++ b/src/antlr/PyxellVisitor.py @@ -254,6 +254,11 @@ def visitTypeArray(self, ctx:PyxellParser.TypeArrayContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#TypeName. + def visitTypeName(self, ctx:PyxellParser.TypeNameContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#TypeTuple. def visitTypeTuple(self, ctx:PyxellParser.TypeTupleContext): return self.visitChildren(ctx) @@ -274,10 +279,5 @@ def visitTypeFunc(self, ctx:PyxellParser.TypeFuncContext): return self.visitChildren(ctx) - # Visit a parse tree produced by PyxellParser#TypePrimitive. - def visitTypePrimitive(self, ctx:PyxellParser.TypePrimitiveContext): - return self.visitChildren(ctx) - - del PyxellParser \ No newline at end of file diff --git a/src/ast.py b/src/ast.py index afca7599..9ca3b9f7 100644 --- a/src/ast.py +++ b/src/ast.py @@ -142,7 +142,7 @@ def visitStmtFunc(self, ctx): **_node(ctx, 'StmtFunc'), 'id': self.visit(ctx.ID()), 'args': self.visit(ctx.func_arg()), - 'ret': self.visit(ctx.ret) or tVoid, + 'ret': self.visit(ctx.ret), 'block': self.visit(ctx.block()), } @@ -312,13 +312,13 @@ def visitExprInterpolation(self, ctx): def visitAtomInt(self, ctx): return { **_node(ctx, 'AtomInt'), - 'int': int(self.visit(ctx.INT())), + 'int': int(ctx.getText()), } def visitAtomFloat(self, ctx): return { **_node(ctx, 'AtomFloat'), - 'float': float(self.visit(ctx.FLOAT())), + 'float': float(ctx.getText()), } def visitAtomBool(self, ctx): @@ -330,13 +330,13 @@ def visitAtomBool(self, ctx): def visitAtomChar(self, ctx): return { **_node(ctx, 'AtomChar'), - 'char': ast.literal_eval(self.visit(ctx.CHAR())), + 'char': ast.literal_eval(ctx.getText()), } def visitAtomString(self, ctx): return { **_node(ctx, 'AtomString'), - 'string': ast.literal_eval(self.visit(ctx.STRING())), + 'string': ast.literal_eval(ctx.getText()), } def visitAtomNull(self, ctx): @@ -345,7 +345,7 @@ def visitAtomNull(self, ctx): } def visitAtomId(self, ctx): - id = self.visit(ctx.ID()) + id = ctx.getText() if id == '_': return _node(ctx, 'AtomStub') return { @@ -356,24 +356,26 @@ def visitAtomId(self, ctx): ### Types ### - def visitTypePrimitive(self, ctx): + def visitTypeName(self, ctx): return { - 'Void': tVoid, - 'Int': tInt, - 'Float': tFloat, - 'Bool': tBool, - 'Char': tChar, - 'String': tString, - }[ctx.getText()] + **_node(ctx, 'TypeName'), + 'name': ctx.getText(), + } def visitTypeParentheses(self, ctx): return self.visit(ctx.typ()) def visitTypeArray(self, ctx): - return tArray(self.visit(ctx.typ())) + return { + **_node(ctx, 'TypeArray'), + 'subtype': self.visit(ctx.typ()), + } def visitTypeNullable(self, ctx): - return tNullable(self.visit(ctx.typ())) + return { + **_node(ctx, 'TypeNullable'), + 'subtype': self.visit(ctx.typ()), + } def visitTypeTuple(self, ctx): types = [] @@ -385,7 +387,10 @@ def visitTypeTuple(self, ctx): types.append(self.visit(ctx.typ(1))) if len(types) == 1: return types[0] - return tTuple(types) + return { + **_node(ctx, 'TypeTuple'), + 'elements': types, + } def visitTypeFunc(self, ctx): types = [] @@ -395,7 +400,15 @@ def visitTypeFunc(self, ctx): break ctx = ctx.typ(1) types.append(self.visit(ctx.typ(1))) - return tFunc(types[:-1], types[-1]) + return { + **_node(ctx, 'TypeFunc'), + 'args': types[:-1], + 'ret': types[-1], + } def visitTypeFunc0(self, ctx): - return tFunc([], self.visit(ctx.typ())) + return { + **_node(ctx, 'TypeFunc'), + 'args': [], + 'ret': self.visit(ctx.typ()), + } diff --git a/src/compiler.py b/src/compiler.py index 67d42fb2..167cc40c 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -54,6 +54,8 @@ def run_main(self, ast): self.builder.ret(ll.Constant(tInt, 0)) def compile(self, node): + if not isinstance(node, dict): + return node return getattr(self, 'compile'+node['node'])(node) def expr(self, code, **params): @@ -915,7 +917,7 @@ def compileStmtPrint(self, node): self.write('\n') def compileStmtDecl(self, node): - type = node['type'] + type = self.compile(node['type']) id = node['id'] expr = node['expr'] ptr = self.declare(node, type, id, initialize=bool(expr)) @@ -1169,7 +1171,7 @@ def compileStmtFunc(self, node): args = [] expect_default = False for arg in node['args']: - type = arg['type'] + type = self.compile(arg['type']) name = arg['name'] default = arg.get('default') if default: @@ -1180,7 +1182,7 @@ def compileStmtFunc(self, node): self.throw(arg, err.MissingDefault(name)) args.append(Arg(type, name, default)) - ret_type = node['ret'] + ret_type = self.compile(node['ret']) or tVoid func_type = tFunc(args, ret_type) func_def = node['block'] @@ -1612,3 +1614,35 @@ def compileAtomId(self, node): def compileAtomStub(self, node): self.throw(node, err.IllegalLambda()) + + + ### Types ### + + def compileTypeName(self, node): + name = node['name'] + + type = { + 'Void': tVoid, + 'Int': tInt, + 'Float': tFloat, + 'Bool': tBool, + 'Char': tChar, + 'String': tString, + }.get(name) + + if type is None: + self.throw(node, err.NotType(name)) + + return type + + def compileTypeArray(self, node): + return tArray(self.compile(node['subtype'])) + + def compileTypeNullable(self, node): + return tNullable(self.compile(node['subtype'])) + + def compileTypeTuple(self, node): + return tTuple(lmap(self.compile, node['elements'])) + + def compileTypeFunc(self, node): + return tFunc(lmap(self.compile, node['args']), self.compile(node['ret']) or tVoid) diff --git a/src/errors.py b/src/errors.py index c4b7aa80..0a7b6b2a 100644 --- a/src/errors.py +++ b/src/errors.py @@ -34,6 +34,7 @@ class PyxellError(Exception): NotFunction = lambda t: f"Type `{t.show()}` is not a function" NotNullable = lambda t: f"Type `{t.show()}` is not nullable" NotPrintable = lambda t: f"Variable of type `{t.show()}` cannot be printed" + NotType = lambda id: f"Identifier `{id}` does not represent a type" RedeclaredIdentifier = lambda id: f"Identifier `{id}` is already declared" RepeatedArgument = lambda id: f"Repeated argument `{id}`" TooFewArguments = lambda t: f"Too few arguments for function `{t.show()}`" From 8cce372a027d03d0db6cee1ddeea4d7281938266 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sat, 16 Nov 2019 23:09:06 +0100 Subject: [PATCH 069/100] Fix unification of ints and floats Implicit conversion allowed in arithmetic operations and comparisons only. --- src/compiler.py | 29 ++++++++++++++++------------- src/types.py | 2 -- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/compiler.py b/src/compiler.py index 167cc40c..568a81e4 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -267,13 +267,7 @@ def unify(self, node, *values): if type is None: self.throw(node, err.UnknownType()) - for i, value in enumerate(values): - if value.type == tInt and type == tFloat: - values[i] = self.builder.sitofp(value, type) - else: - values[i] = self.cast(node, value, type) - - return values + return [self.cast(node, value, type) for value in values] def declare(self, node, type, id, redeclare=False, initialize=False): if type == tVoid: @@ -377,8 +371,11 @@ def unaryop(self, node, op, value): return self.builder.not_(value) def binaryop(self, node, op, left, right): - if left.type in (tInt, tFloat) and right.type in (tInt, tFloat): - left, right = self.unify(node, left, right) + if left.type != right.type and left.type in (tInt, tFloat) and right.type in (tInt, tFloat): + if left.type == tInt: + left = self.builder.sitofp(left, tFloat) + else: + right = self.builder.sitofp(right, tFloat) if op == '^': if left.type == right.type == tInt: @@ -517,10 +514,16 @@ def binaryop(self, node, op, left, right): self.throw(node, err.NoBinaryOperator(op, left.type, right.type)) def cmp(self, node, op, left, right): - try: - left, right = self.unify(node, left, right) - except err: - self.throw(node, err.NotComparable(left.type, right.type)) + if left.type != right.type and left.type in (tInt, tFloat) and right.type in (tInt, tFloat): + if left.type == tInt: + left = self.builder.sitofp(left, tFloat) + else: + right = self.builder.sitofp(right, tFloat) + else: + try: + left, right = self.unify(node, left, right) + except err: + self.throw(node, err.NotComparable(left.type, right.type)) if left.type in (tInt, tChar): return self.builder.icmp_signed(op, left, right) diff --git a/src/types.py b/src/types.py index 1041c009..78171f38 100644 --- a/src/types.py +++ b/src/types.py @@ -161,8 +161,6 @@ def can_cast(type1, type2): def unify_types(type1, type2): if type1 == type2: return type1 - if type1 == tFloat and type2 == tInt or type1 == tInt and type2 == tFloat: - return tFloat if type1.isArray() and type2.isArray(): subtype = unify_types(type1.subtype, type2.subtype) return tArray(subtype) if subtype else None From 2915ee5ff869e95824975502353c328b5fbb43ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sun, 17 Nov 2019 14:51:09 +0100 Subject: [PATCH 070/100] Compile only used functions This also concerns type checking. --- src/compiler.py | 127 ++++++++++++++++++------------- src/types.py | 63 ++++++++++----- test/bad/functions/args01.px | 2 + test/bad/functions/args02.px | 2 + test/bad/functions/nested01.px | 1 + test/bad/functions/nested02.px | 3 + test/bad/functions/nested03.px | 3 + test/bad/functions/return01.px | 2 + test/bad/functions/return02.px | 2 + test/bad/functions/return03.px | 2 + test/bad/functions/return04.px | 2 + test/bad/functions/return06.px | 2 + test/bad/functions/type04.px | 2 + test/bad/functions/void03.px | 2 + test/bad/nullables/nullable04.px | 2 + 15 files changed, 141 insertions(+), 76 deletions(-) diff --git a/src/compiler.py b/src/compiler.py index 568a81e4..d15b3cf5 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -135,8 +135,10 @@ def get(self, node, id, load=True): self.throw(node, err.UndeclaredIdentifier(id)) if id not in self.initialized: self.throw(node, err.UninitializedIdentifier(id)) - ptr = self.env[id] - return self.builder.load(ptr) if load else ptr + result = self.env[id] + if result.isTemplate(): + result = self.function(node, result) + return self.builder.load(result) if load else result def extract(self, ptr, *indices): return self.builder.load(self.builder.gep(ptr, [vInt(0), *[ll.Constant(ll.IntType(32), i) for i in indices]])) @@ -245,9 +247,8 @@ def attr(self, node, obj, attr): return value - def call(self, name, *values): - func = self.builder.load(self.env[name]) - return self.builder.call(func, values) + def call(self, node, name, *values): + return self.builder.call(self.get(node, name), values) def cast(self, node, value, type): if not can_cast(value.type, type): @@ -379,10 +380,10 @@ def binaryop(self, node, op, left, right): if op == '^': if left.type == right.type == tInt: - return self.call('Int_pow', left, right) + return self.call(node, 'Int_pow', left, right) elif left.type == right.type == tFloat: - return self.call('Float_pow', left, right) + return self.call(node, 'Float_pow', left, right) else: self.throw(node, err.NoBinaryOperator(op, left.type, right.type)) @@ -482,10 +483,10 @@ def binaryop(self, node, op, left, right): return result elif left.type == tString and right.type == tChar: - return self.binaryop(node, op, left, self.call('Char_toString', right)) + return self.binaryop(node, op, left, self.call(node, 'Char_toString', right)) elif left.type == tChar and right.type == tString: - return self.binaryop(node, op, self.call('Char_toString', left), right) + return self.binaryop(node, op, self.call(node, 'Char_toString', left), right) else: self.throw(node, err.NoBinaryOperator(op, left.type, right.type)) @@ -653,19 +654,19 @@ def print(self, node, value): type = value.type if type == tInt: - self.call('writeInt', value) + self.call(node, 'writeInt', value) elif type == tFloat: - self.call('writeFloat', value) + self.call(node, 'writeFloat', value) elif type == tBool: - self.call('writeBool', value) + self.call(node, 'writeBool', value) elif type == tChar: - self.call('writeChar', value) + self.call(node, 'writeChar', value) elif type.isString(): - self.call('write', value) + self.call(node, 'write', value) elif type.isArray(): self.write('[') @@ -874,6 +875,56 @@ def convert_expr(expr): } return expr + def function(self, node, template): + if template.compiled: + return template.compiled + + id = template.id + type = template.type + body = template.body + + if not body: # `extern` + template.compiled = ll.GlobalVariable(self.module, type, self.module.get_unique_name('f.'+id)) + return template.compiled + + args = type.args + ret = type.ret + + func = ll.Function(self.module, type.pointee, self.module.get_unique_name('def.'+id)) + + func_ptr = ll.GlobalVariable(self.module, type, self.module.get_unique_name(id)) + func_ptr.initializer = func + template.compiled = func_ptr + + prev_label = self.builder.basic_block + entry = func.append_basic_block('entry') + self.builder.position_at_end(entry) + + with self.local(): + self.env = template.env + + self.env['#return'] = ret + self.env.pop('#continue', None) + self.env.pop('#break', None) + + for arg, value in zip(args, func.args): + ptr = self.declare(node, arg.type, arg.name, redeclare=True, initialize=True) + self.env[arg.name] = ptr + self.builder.store(value, ptr) + + self.compile(body) + + if ret == tVoid: + self.builder.ret_void() + else: + if '#return' not in self.initialized: + self.throw(node, err.MissingReturn(id)) + self.builder.ret(ret.default()) + + self.builder.position_at_end(prev_label) + + return template.compiled + ### Statements ### @@ -1170,6 +1221,7 @@ def compileStmtLoopControl(self, node): def compileStmtFunc(self, node): id = node['id'] + self.initialized.add(id) args = [] expect_default = False @@ -1186,46 +1238,11 @@ def compileStmtFunc(self, node): args.append(Arg(type, name, default)) ret_type = self.compile(node['ret']) or tVoid - func_type = tFunc(args, ret_type) - func_def = node['block'] - - if not func_def: # `extern` - func_ptr = ll.GlobalVariable(self.module, func_type, self.module.get_unique_name('f.'+id)) - self.env[id] = func_ptr - self.initialized.add(id) - return - - func = ll.Function(self.module, func_type.pointee, self.module.get_unique_name('def.'+id)) - func_ptr = ll.GlobalVariable(self.module, func_type, self.module.get_unique_name(id)) - func_ptr.initializer = func - self.env[id] = func_ptr - self.initialized.add(id) - - prev_label = self.builder.basic_block - entry = func.append_basic_block('entry') - self.builder.position_at_end(entry) - with self.local(): - self.env['#return'] = ret_type - self.env.pop('#continue', None) - self.env.pop('#break', None) - - for (type, id, default), value in zip(args, func.args): - ptr = self.declare(node, type, id, redeclare=True, initialize=True) - self.env[id] = ptr - self.builder.store(value, ptr) - - self.compile(func_def) - - if ret_type == tVoid: - self.builder.ret_void() - else: - if '#return' not in self.initialized: - self.throw(node, err.MissingReturn(id)) - self.builder.ret(ret_type.default()) - - self.builder.position_at_end(prev_label) + func = FunctionTemplate(id, func_type, node['block']) + self.env[id] = func + func.env = self.env.copy() def compileStmtReturn(self, node): try: @@ -1380,7 +1397,7 @@ def compileExprAttr(self, node): def compileExprCall(self, node): expr = node['expr'] - def call(obj, func): + def _call(obj, func): if not func.type.isFunc(): self.throw(node, err.NotFunction(func.type)) @@ -1466,7 +1483,7 @@ def call(obj, func): def callback(): value = self.extract(obj) func = self.attr(node, value, attr) - return self.nullable(call(value, func)) + return self.nullable(_call(value, func)) return self.safe(node, obj, callback, vNull) else: @@ -1475,7 +1492,7 @@ def callback(): obj = None func = self.compile(expr) - return call(obj, func) + return _call(obj, func) def compileExprUnaryOp(self, node): return self.unaryop(node, node['op'], self.compile(node['expr'])) diff --git a/src/types.py b/src/types.py index 78171f38..35638c18 100644 --- a/src/types.py +++ b/src/types.py @@ -11,19 +11,11 @@ 'Arg', 'can_cast', 'unify_types', 'vInt', 'vFloat', 'vBool', 'vFalse', 'vTrue', 'vChar', 'vNull', + 'FunctionTemplate', ] -class UnknownType(ll.Type): - - def _to_string(self): - return 'i8*' - - def __eq__(self, other): - return isinstance(other, UnknownType) - - def __hash__(self): - return hash(UnknownType) +Type = ll.Type class CustomStructType(ll.LiteralStructType): @@ -35,7 +27,7 @@ def __init__(self, elements, kind): def __eq__(self, other): if not super().__eq__(other): return False - return self.kind == other.kind + return self.kind == getattr(other, 'kind', None) def __hash__(self): return hash(CustomStructType) @@ -51,12 +43,24 @@ def __init__(self, subtype): def __eq__(self, other): if not super().__eq__(other): return False - return self.kind == other.kind + return self.kind == getattr(other, 'kind', None) def __hash__(self): return hash(NullableType) +class UnknownType(Type): + + def _to_string(self): + return 'i8*' + + def __eq__(self, other): + return isinstance(other, UnknownType) + + def __hash__(self): + return hash(UnknownType) + + tVoid = ll.VoidType() tInt = ll.IntType(64) tFloat = ll.DoubleType() @@ -73,7 +77,7 @@ def tPtr(type=tChar): tString = tPtr(CustomStructType([tPtr(), tInt], 'string')) tString.subtype = tChar -@extend_class(ll.Type) +@extend_class(Type) def isString(type): return getattr(type, 'kind', None) == 'string' @@ -83,7 +87,7 @@ def tArray(subtype): type.subtype = subtype return type -@extend_class(ll.Type) +@extend_class(Type) def isArray(type): return getattr(type, 'kind', None) == 'array' @@ -91,7 +95,7 @@ def isArray(type): def tNullable(subtype): return NullableType(subtype) -@extend_class(ll.Type) +@extend_class(Type) def isNullable(type): return getattr(type, 'kind', None) == 'nullable' @@ -101,7 +105,7 @@ def tTuple(elements): type.elements = elements return type -@extend_class(ll.Type) +@extend_class(Type) def isTuple(type): return getattr(type, 'kind', None) == 'tuple' @@ -116,19 +120,19 @@ def tFunc(args, ret=tVoid): type.kind = 'function' return type -@extend_class(ll.Type) +@extend_class(Type) def isFunc(type): return getattr(type, 'kind', None) == 'function' -@extend_class(ll.Type) +@extend_class(Type) def isCollection(type): return type == tString or type.isArray() tUnknown = UnknownType() -@extend_class(ll.Type) +@extend_class(Type) def isUnknown(type): if type == tUnknown: return True @@ -177,7 +181,7 @@ def unify_types(type1, type2): return None -@extend_class(ll.Type) +@extend_class(Type) def show(type): if type == tVoid: return 'Void' @@ -204,7 +208,7 @@ def show(type): return str(type) -@extend_class(ll.Type) +@extend_class(Type) def default(type): return ll.Constant(type, 0 if type in (tInt, tFloat, tBool, tChar) else 'null') @@ -226,3 +230,20 @@ def vChar(c): def vNull(type=tNullable(tUnknown)): return ll.Constant(type, 'null') + + +@extend_class(ll.Value) +def isTemplate(value): + return False + +class FunctionTemplate: + + def __init__(self, id, type, body): + self.id = id + self.type = type + self.body = body + self.env = None + self.compiled = None + + def isTemplate(self): + return True diff --git a/test/bad/functions/args01.px b/test/bad/functions/args01.px index c88c95f1..e6d8ccb7 100644 --- a/test/bad/functions/args01.px +++ b/test/bad/functions/args01.px @@ -1,3 +1,5 @@ func f(Int x, Char y) Bool def return x == y + +f() diff --git a/test/bad/functions/args02.px b/test/bad/functions/args02.px index d1854175..8c57f40c 100644 --- a/test/bad/functions/args02.px +++ b/test/bad/functions/args02.px @@ -2,3 +2,5 @@ func f(String s) def s = 5 return + +f() diff --git a/test/bad/functions/nested01.px b/test/bad/functions/nested01.px index 1cff6f2a..b5bb2b74 100644 --- a/test/bad/functions/nested01.px +++ b/test/bad/functions/nested01.px @@ -3,4 +3,5 @@ for i in 1..2 do func f() Int def break return 0 + f() print i diff --git a/test/bad/functions/nested02.px b/test/bad/functions/nested02.px index 2c72e48c..a0304b61 100644 --- a/test/bad/functions/nested02.px +++ b/test/bad/functions/nested02.px @@ -4,4 +4,7 @@ func f() def func g() def print x return + g() return + +f() diff --git a/test/bad/functions/nested03.px b/test/bad/functions/nested03.px index 824867de..b0b2c374 100644 --- a/test/bad/functions/nested03.px +++ b/test/bad/functions/nested03.px @@ -4,3 +4,6 @@ func f() def return 1 func g2() Int def return g1() + 1 + g2() + +f() diff --git a/test/bad/functions/return01.px b/test/bad/functions/return01.px index f7ce2599..65ebf487 100644 --- a/test/bad/functions/return01.px +++ b/test/bad/functions/return01.px @@ -1,3 +1,5 @@ func f() Int def return true + +f() diff --git a/test/bad/functions/return02.px b/test/bad/functions/return02.px index 57e22d16..cb57d986 100644 --- a/test/bad/functions/return02.px +++ b/test/bad/functions/return02.px @@ -1,3 +1,5 @@ func f() String def return + +f() diff --git a/test/bad/functions/return03.px b/test/bad/functions/return03.px index ebd093c9..5359dbd6 100644 --- a/test/bad/functions/return03.px +++ b/test/bad/functions/return03.px @@ -1,3 +1,5 @@ func f() def return 'r' + +f() diff --git a/test/bad/functions/return04.px b/test/bad/functions/return04.px index 295d46d6..8744735b 100644 --- a/test/bad/functions/return04.px +++ b/test/bad/functions/return04.px @@ -1,3 +1,5 @@ func f(Int x) Bool def return x + +f() diff --git a/test/bad/functions/return06.px b/test/bad/functions/return06.px index dc577b9f..4056603f 100644 --- a/test/bad/functions/return06.px +++ b/test/bad/functions/return06.px @@ -1,3 +1,5 @@ func f() Int def skip + +f() diff --git a/test/bad/functions/type04.px b/test/bad/functions/type04.px index ae2c0563..e17d0561 100644 --- a/test/bad/functions/type04.px +++ b/test/bad/functions/type04.px @@ -1,3 +1,5 @@ func id(Int->String f) Int->String def return id + +id() diff --git a/test/bad/functions/void03.px b/test/bad/functions/void03.px index 2f741c2b..c9832c8f 100644 --- a/test/bad/functions/void03.px +++ b/test/bad/functions/void03.px @@ -1,3 +1,5 @@ func f(Void v) def return + +f() diff --git a/test/bad/nullables/nullable04.px b/test/bad/nullables/nullable04.px index 7658eccc..1cc0a451 100644 --- a/test/bad/nullables/nullable04.px +++ b/test/bad/nullables/nullable04.px @@ -1,3 +1,5 @@ func f() [Int] def return null + +f() From 6ba92c0624db5fa83b99040c30eb655f0ddd5d70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sun, 17 Nov 2019 21:35:30 +0100 Subject: [PATCH 071/100] Generic functions Simplified syntax, resembling templates in C++. Fixed several bugs and added new tests. --- README.md | 10 +- lib/std.px | 40 + src/Pyxell.g4 | 4 +- src/antlr/Pyxell.interp | 6 +- src/antlr/Pyxell.tokens | 44 +- src/antlr/PyxellLexer.interp | 6 +- src/antlr/PyxellLexer.py | 108 +- src/antlr/PyxellLexer.tokens | 44 +- src/antlr/PyxellParser.py | 957 +++++++++--------- src/antlr/PyxellVisitor.py | 4 +- src/ast.py | 8 +- src/compiler.py | 327 +++--- src/errors.py | 2 + src/types.py | 127 ++- test.py | 4 + test/bad/generics/call01.err | 2 +- test/bad/generics/call01.px | 4 +- test/bad/generics/call02.err | 2 +- test/bad/generics/call02.px | 9 +- test/bad/generics/call03.err | 2 +- test/bad/generics/call03.px | 10 +- test/bad/generics/call04.err | 1 - test/bad/generics/call04.px | 6 - test/bad/generics/def01.px | 4 +- test/bad/generics/def02.err | 2 +- test/bad/generics/def02.px | 2 +- test/bad/generics/def03.px | 4 +- test/bad/generics/def04.px | 4 +- test/bad/generics/def05.px | 4 +- test/bad/generics/def06.px | 4 +- test/bad/generics/def07.err | 1 + test/bad/generics/def07.px | 5 + test/bad/generics/def08.err | 1 + test/bad/generics/def08.px | 5 + test/bad/generics/print01.err | 2 +- test/bad/generics/print01.px | 4 +- test/bad/generics/print02.err | 2 +- test/bad/generics/print02.px | 4 +- test/bad/generics/print03.err | 2 +- test/bad/generics/print03.px | 4 +- test/bad/generics/print04.err | 2 +- test/bad/generics/print04.px | 4 +- test/bad/generics/type01.err | 2 +- test/bad/generics/type01.px | 4 +- test/bad/generics/type02.err | 2 +- test/bad/generics/type02.px | 4 +- test/bad/generics/type03.err | 2 +- test/bad/generics/type03.px | 4 +- test/bad/generics/type04.err | 2 +- test/bad/generics/type04.px | 6 +- test/bad/generics/type05.err | 2 +- test/bad/generics/type05.px | 4 +- test/bad/generics/type06.err | 2 +- test/bad/generics/type06.px | 4 +- test/bad/generics/type07.err | 2 +- test/bad/generics/type07.px | 4 +- test/bad/generics/type08.err | 2 +- test/bad/generics/type08.px | 2 +- test/bad/generics/type09.px | 2 +- test/bad/generics/type10.err | 2 +- test/bad/generics/type10.px | 2 +- test/bad/generics/type11.err | 1 + test/bad/generics/type11.px | 5 + test/good/generics/{any01.out => basic01.out} | 0 test/good/generics/{any01.px => basic01.px} | 2 +- test/good/generics/{any02.out => basic02.out} | 0 test/good/generics/{any02.px => basic02.px} | 2 +- test/good/generics/{any03.out => basic03.out} | 0 test/good/generics/{any03.px => basic03.px} | 2 +- test/good/generics/{any04.out => basic04.out} | 0 test/good/generics/{any04.px => basic04.px} | 2 +- test/good/generics/{any05.out => basic05.out} | 0 test/good/generics/{any05.px => basic05.px} | 2 +- test/good/generics/{num01.out => basic06.out} | 0 test/good/generics/{num01.px => basic06.px} | 2 +- test/good/generics/{num02.out => basic07.out} | 0 test/good/generics/{num02.px => basic07.px} | 2 +- test/good/generics/{num03.out => basic08.out} | 0 test/good/generics/{num03.px => basic08.px} | 2 +- test/good/generics/basic09.out | 1 + test/good/generics/basic09.px | 6 + test/good/generics/basic10.out | 2 + test/good/generics/basic10.px | 8 + test/good/generics/complex01.px | 2 +- test/good/generics/complex02.px | 2 +- test/good/generics/complex03.out | 3 +- test/good/generics/complex03.px | 10 +- test/good/generics/complex04.out | 3 +- test/good/generics/complex04.px | 10 +- test/good/generics/complex05.out | 2 +- test/good/generics/complex05.px | 7 +- test/good/generics/complex06.out | 4 +- test/good/generics/complex06.px | 19 +- test/good/generics/func01.out | 2 + test/good/generics/func01.px | 8 + test/good/generics/func02.out | 2 + test/good/generics/func02.px | 6 + test/good/generics/func03.out | 1 + test/good/generics/func03.px | 5 + test/good/generics/func04.out | 3 + test/good/generics/func04.px | 16 + .../generics/{complex07.out => func05.out} | 0 .../good/generics/{complex07.px => func05.px} | 2 +- test/good/generics/func06.out | 2 + test/good/generics/func06.px | 6 + test/good/generics/nested01.out | 2 + test/good/generics/nested01.px | 12 + test/good/libraries/std03.px | 2 +- 108 files changed, 1191 insertions(+), 820 deletions(-) delete mode 100644 test/bad/generics/call04.err delete mode 100644 test/bad/generics/call04.px create mode 100644 test/bad/generics/def07.err create mode 100644 test/bad/generics/def07.px create mode 100644 test/bad/generics/def08.err create mode 100644 test/bad/generics/def08.px create mode 100644 test/bad/generics/type11.err create mode 100644 test/bad/generics/type11.px rename test/good/generics/{any01.out => basic01.out} (100%) rename test/good/generics/{any01.px => basic01.px} (59%) rename test/good/generics/{any02.out => basic02.out} (100%) rename test/good/generics/{any02.px => basic02.px} (77%) rename test/good/generics/{any03.out => basic03.out} (100%) rename test/good/generics/{any03.px => basic03.px} (56%) rename test/good/generics/{any04.out => basic04.out} (100%) rename test/good/generics/{any04.px => basic04.px} (62%) rename test/good/generics/{any05.out => basic05.out} (100%) rename test/good/generics/{any05.px => basic05.px} (66%) rename test/good/generics/{num01.out => basic06.out} (100%) rename test/good/generics/{num01.px => basic06.px} (66%) rename test/good/generics/{num02.out => basic07.out} (100%) rename test/good/generics/{num02.px => basic07.px} (78%) rename test/good/generics/{num03.out => basic08.out} (100%) rename test/good/generics/{num03.px => basic08.px} (62%) create mode 100644 test/good/generics/basic09.out create mode 100644 test/good/generics/basic09.px create mode 100644 test/good/generics/basic10.out create mode 100644 test/good/generics/basic10.px create mode 100644 test/good/generics/func01.out create mode 100644 test/good/generics/func01.px create mode 100644 test/good/generics/func02.out create mode 100644 test/good/generics/func02.px create mode 100644 test/good/generics/func03.out create mode 100644 test/good/generics/func03.px create mode 100644 test/good/generics/func04.out create mode 100644 test/good/generics/func04.px rename test/good/generics/{complex07.out => func05.out} (100%) rename test/good/generics/{complex07.px => func05.px} (69%) create mode 100644 test/good/generics/func06.out create mode 100644 test/good/generics/func06.px create mode 100644 test/good/generics/nested01.out create mode 100644 test/good/generics/nested01.px diff --git a/README.md b/README.md index 1bc52fd8..cb59ac7b 100644 --- a/README.md +++ b/README.md @@ -40,12 +40,12 @@ for x, i in a, 0... do ``` ``` -func fold(T,T->T f, T a, [T] t) T def - for x in t do - a = f(a, x) - return a +func reduce'(A->B->A f, A r, [B] b) A def + for x in b do + r = f(r, x) + return r -print fold(_*_, 1, [2, 3, 4]) -- factorial +print reduce'(_*_, 1, [2, 3, 4]) -- 24 ``` ``` diff --git a/lib/std.px b/lib/std.px index 83b8c225..b394110a 100644 --- a/lib/std.px +++ b/lib/std.px @@ -15,6 +15,46 @@ func readInt() Int extern func readChar() Char extern +func min(T a, T b) T def + return a < b ? a : b + +func max(T a, T b) T def + return b < a ? a : b + +func clamp(T x, T a, T b) T def + return min(max(x, a), b) + +func abs(T x) T def + return x >= 0 ? x : -x + +func sign(T x) Int def + return x > 0 ? 1 : x < 0 ? -1 : 0 + + +func all(A->Bool f, [A] a) Bool def + for x in a do + if not f(x) do + return false + return true + +func any(A->Bool f, [A] a) Bool def + for x in a do + if f(x) do + return true + return false + +func filter(A->Bool f, [A] a) [A] def + return [x for x in a if f(x)] + +func map(A->B f, [A] a) [B] def + return [f(x) for x in a] + +func reduce(A->B->A f, A r, [B] b) A def + for x in b do + r = f(r, x) + return r + + func Int_pow(Int b, Int e) Int def if e < 0 do return 0 diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index 6d33351d..4e6b7ab8 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -29,7 +29,7 @@ compound_stmt | 'while' expr 'do' block # StmtWhile | 'until' expr 'do' block # StmtUntil | 'for' tuple_expr 'in' tuple_expr ('step' tuple_expr)? 'do' block # StmtFor - | 'func' ID '(' (func_arg ',')* func_arg? ')' (ret=typ)? ('def' block | 'extern' ';') # StmtFunc + | 'func' ID ('<' typevars=id_list '>')? '(' (func_arg ',')* func_arg? ')' (ret=typ)? ('def' block | 'extern' ';') # StmtFunc ; func_arg @@ -98,7 +98,7 @@ atom ; id_list - : (ID ',')* ID + : (ID ',')* ID # IdList ; typ diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index 9bc98f10..ab079754 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -34,6 +34,8 @@ null 'in' 'step' 'func' +'<' +'>' '(' ')' 'def' @@ -53,9 +55,7 @@ null 'isn\'t' '==' '!=' -'<' '<=' -'>' '>=' 'not' 'and' @@ -169,4 +169,4 @@ typ atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 75, 398, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 3, 2, 7, 2, 34, 10, 2, 12, 2, 14, 2, 37, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 45, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 55, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 60, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 66, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 71, 10, 4, 12, 4, 14, 4, 74, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 85, 10, 4, 5, 4, 87, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 92, 10, 5, 12, 5, 14, 5, 95, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 106, 10, 6, 12, 6, 14, 6, 109, 11, 6, 3, 6, 3, 6, 3, 6, 5, 6, 114, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 132, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 143, 10, 6, 12, 6, 14, 6, 146, 11, 6, 3, 6, 5, 6, 149, 10, 6, 3, 6, 3, 6, 5, 6, 153, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 159, 10, 6, 5, 6, 161, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 167, 10, 7, 3, 8, 3, 8, 6, 8, 171, 10, 8, 13, 8, 14, 8, 172, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 187, 10, 9, 12, 9, 14, 9, 190, 11, 9, 3, 9, 5, 9, 193, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 6, 9, 199, 10, 9, 13, 9, 14, 9, 200, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 212, 10, 9, 12, 9, 14, 9, 215, 11, 9, 3, 9, 5, 9, 218, 10, 9, 3, 9, 3, 9, 5, 9, 222, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 271, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 280, 10, 9, 3, 9, 3, 9, 5, 9, 284, 10, 9, 3, 9, 3, 9, 5, 9, 288, 10, 9, 5, 9, 290, 10, 9, 3, 9, 3, 9, 3, 9, 5, 9, 295, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 304, 10, 9, 12, 9, 14, 9, 307, 11, 9, 3, 9, 5, 9, 310, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 317, 10, 9, 12, 9, 14, 9, 320, 11, 9, 3, 10, 3, 10, 3, 10, 7, 10, 325, 10, 10, 12, 10, 14, 10, 328, 11, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 341, 10, 12, 3, 12, 3, 12, 5, 12, 345, 10, 12, 3, 13, 3, 13, 5, 13, 349, 10, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 360, 10, 14, 3, 15, 3, 15, 7, 15, 364, 10, 15, 12, 15, 14, 15, 367, 11, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 383, 10, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 7, 16, 393, 10, 16, 12, 16, 14, 16, 396, 11, 16, 3, 16, 2, 4, 16, 30, 17, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 2, 12, 3, 2, 11, 22, 3, 2, 23, 24, 4, 2, 15, 16, 49, 49, 3, 2, 12, 14, 3, 2, 15, 16, 3, 2, 17, 18, 3, 2, 50, 51, 3, 2, 52, 53, 3, 2, 54, 59, 3, 2, 65, 66, 2, 468, 2, 35, 3, 2, 2, 2, 4, 44, 3, 2, 2, 2, 6, 86, 3, 2, 2, 2, 8, 88, 3, 2, 2, 2, 10, 160, 3, 2, 2, 2, 12, 162, 3, 2, 2, 2, 14, 168, 3, 2, 2, 2, 16, 221, 3, 2, 2, 2, 18, 326, 3, 2, 2, 2, 20, 331, 3, 2, 2, 2, 22, 344, 3, 2, 2, 2, 24, 348, 3, 2, 2, 2, 26, 359, 3, 2, 2, 2, 28, 365, 3, 2, 2, 2, 30, 382, 3, 2, 2, 2, 32, 34, 5, 4, 3, 2, 33, 32, 3, 2, 2, 2, 34, 37, 3, 2, 2, 2, 35, 33, 3, 2, 2, 2, 35, 36, 3, 2, 2, 2, 36, 38, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 38, 39, 7, 2, 2, 3, 39, 3, 3, 2, 2, 2, 40, 41, 5, 6, 4, 2, 41, 42, 7, 3, 2, 2, 42, 45, 3, 2, 2, 2, 43, 45, 5, 10, 6, 2, 44, 40, 3, 2, 2, 2, 44, 43, 3, 2, 2, 2, 45, 5, 3, 2, 2, 2, 46, 47, 7, 4, 2, 2, 47, 54, 7, 72, 2, 2, 48, 49, 7, 5, 2, 2, 49, 55, 5, 28, 15, 2, 50, 51, 7, 6, 2, 2, 51, 55, 5, 28, 15, 2, 52, 53, 7, 7, 2, 2, 53, 55, 7, 72, 2, 2, 54, 48, 3, 2, 2, 2, 54, 50, 3, 2, 2, 2, 54, 52, 3, 2, 2, 2, 54, 55, 3, 2, 2, 2, 55, 87, 3, 2, 2, 2, 56, 87, 7, 8, 2, 2, 57, 59, 7, 9, 2, 2, 58, 60, 5, 18, 10, 2, 59, 58, 3, 2, 2, 2, 59, 60, 3, 2, 2, 2, 60, 87, 3, 2, 2, 2, 61, 62, 5, 30, 16, 2, 62, 65, 7, 72, 2, 2, 63, 64, 7, 10, 2, 2, 64, 66, 5, 18, 10, 2, 65, 63, 3, 2, 2, 2, 65, 66, 3, 2, 2, 2, 66, 87, 3, 2, 2, 2, 67, 68, 5, 8, 5, 2, 68, 69, 7, 10, 2, 2, 69, 71, 3, 2, 2, 2, 70, 67, 3, 2, 2, 2, 71, 74, 3, 2, 2, 2, 72, 70, 3, 2, 2, 2, 72, 73, 3, 2, 2, 2, 73, 75, 3, 2, 2, 2, 74, 72, 3, 2, 2, 2, 75, 87, 5, 18, 10, 2, 76, 77, 5, 16, 9, 2, 77, 78, 9, 2, 2, 2, 78, 79, 7, 10, 2, 2, 79, 80, 5, 16, 9, 2, 80, 87, 3, 2, 2, 2, 81, 87, 9, 3, 2, 2, 82, 84, 7, 25, 2, 2, 83, 85, 5, 18, 10, 2, 84, 83, 3, 2, 2, 2, 84, 85, 3, 2, 2, 2, 85, 87, 3, 2, 2, 2, 86, 46, 3, 2, 2, 2, 86, 56, 3, 2, 2, 2, 86, 57, 3, 2, 2, 2, 86, 61, 3, 2, 2, 2, 86, 72, 3, 2, 2, 2, 86, 76, 3, 2, 2, 2, 86, 81, 3, 2, 2, 2, 86, 82, 3, 2, 2, 2, 87, 7, 3, 2, 2, 2, 88, 93, 5, 16, 9, 2, 89, 90, 7, 26, 2, 2, 90, 92, 5, 16, 9, 2, 91, 89, 3, 2, 2, 2, 92, 95, 3, 2, 2, 2, 93, 91, 3, 2, 2, 2, 93, 94, 3, 2, 2, 2, 94, 9, 3, 2, 2, 2, 95, 93, 3, 2, 2, 2, 96, 97, 7, 27, 2, 2, 97, 98, 5, 16, 9, 2, 98, 99, 7, 28, 2, 2, 99, 107, 5, 14, 8, 2, 100, 101, 7, 29, 2, 2, 101, 102, 5, 16, 9, 2, 102, 103, 7, 28, 2, 2, 103, 104, 5, 14, 8, 2, 104, 106, 3, 2, 2, 2, 105, 100, 3, 2, 2, 2, 106, 109, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 107, 108, 3, 2, 2, 2, 108, 113, 3, 2, 2, 2, 109, 107, 3, 2, 2, 2, 110, 111, 7, 30, 2, 2, 111, 112, 7, 28, 2, 2, 112, 114, 5, 14, 8, 2, 113, 110, 3, 2, 2, 2, 113, 114, 3, 2, 2, 2, 114, 161, 3, 2, 2, 2, 115, 116, 7, 31, 2, 2, 116, 117, 5, 16, 9, 2, 117, 118, 7, 28, 2, 2, 118, 119, 5, 14, 8, 2, 119, 161, 3, 2, 2, 2, 120, 121, 7, 32, 2, 2, 121, 122, 5, 16, 9, 2, 122, 123, 7, 28, 2, 2, 123, 124, 5, 14, 8, 2, 124, 161, 3, 2, 2, 2, 125, 126, 7, 33, 2, 2, 126, 127, 5, 18, 10, 2, 127, 128, 7, 34, 2, 2, 128, 131, 5, 18, 10, 2, 129, 130, 7, 35, 2, 2, 130, 132, 5, 18, 10, 2, 131, 129, 3, 2, 2, 2, 131, 132, 3, 2, 2, 2, 132, 133, 3, 2, 2, 2, 133, 134, 7, 28, 2, 2, 134, 135, 5, 14, 8, 2, 135, 161, 3, 2, 2, 2, 136, 137, 7, 36, 2, 2, 137, 138, 7, 72, 2, 2, 138, 144, 7, 37, 2, 2, 139, 140, 5, 12, 7, 2, 140, 141, 7, 26, 2, 2, 141, 143, 3, 2, 2, 2, 142, 139, 3, 2, 2, 2, 143, 146, 3, 2, 2, 2, 144, 142, 3, 2, 2, 2, 144, 145, 3, 2, 2, 2, 145, 148, 3, 2, 2, 2, 146, 144, 3, 2, 2, 2, 147, 149, 5, 12, 7, 2, 148, 147, 3, 2, 2, 2, 148, 149, 3, 2, 2, 2, 149, 150, 3, 2, 2, 2, 150, 152, 7, 38, 2, 2, 151, 153, 5, 30, 16, 2, 152, 151, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 158, 3, 2, 2, 2, 154, 155, 7, 39, 2, 2, 155, 159, 5, 14, 8, 2, 156, 157, 7, 40, 2, 2, 157, 159, 7, 3, 2, 2, 158, 154, 3, 2, 2, 2, 158, 156, 3, 2, 2, 2, 159, 161, 3, 2, 2, 2, 160, 96, 3, 2, 2, 2, 160, 115, 3, 2, 2, 2, 160, 120, 3, 2, 2, 2, 160, 125, 3, 2, 2, 2, 160, 136, 3, 2, 2, 2, 161, 11, 3, 2, 2, 2, 162, 163, 5, 30, 16, 2, 163, 166, 7, 72, 2, 2, 164, 165, 7, 41, 2, 2, 165, 167, 5, 16, 9, 2, 166, 164, 3, 2, 2, 2, 166, 167, 3, 2, 2, 2, 167, 13, 3, 2, 2, 2, 168, 170, 7, 42, 2, 2, 169, 171, 5, 4, 3, 2, 170, 169, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 170, 3, 2, 2, 2, 172, 173, 3, 2, 2, 2, 173, 174, 3, 2, 2, 2, 174, 175, 7, 43, 2, 2, 175, 15, 3, 2, 2, 2, 176, 177, 8, 9, 1, 2, 177, 222, 5, 26, 14, 2, 178, 179, 7, 37, 2, 2, 179, 180, 5, 18, 10, 2, 180, 181, 7, 38, 2, 2, 181, 222, 3, 2, 2, 2, 182, 188, 7, 44, 2, 2, 183, 184, 5, 16, 9, 2, 184, 185, 7, 26, 2, 2, 185, 187, 3, 2, 2, 2, 186, 183, 3, 2, 2, 2, 187, 190, 3, 2, 2, 2, 188, 186, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 192, 3, 2, 2, 2, 190, 188, 3, 2, 2, 2, 191, 193, 5, 16, 9, 2, 192, 191, 3, 2, 2, 2, 192, 193, 3, 2, 2, 2, 193, 194, 3, 2, 2, 2, 194, 222, 7, 45, 2, 2, 195, 196, 7, 44, 2, 2, 196, 198, 5, 16, 9, 2, 197, 199, 5, 22, 12, 2, 198, 197, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 198, 3, 2, 2, 2, 200, 201, 3, 2, 2, 2, 201, 202, 3, 2, 2, 2, 202, 203, 7, 45, 2, 2, 203, 222, 3, 2, 2, 2, 204, 205, 9, 4, 2, 2, 205, 222, 5, 16, 9, 19, 206, 207, 7, 60, 2, 2, 207, 222, 5, 16, 9, 8, 208, 213, 7, 63, 2, 2, 209, 210, 7, 72, 2, 2, 210, 212, 7, 26, 2, 2, 211, 209, 3, 2, 2, 2, 212, 215, 3, 2, 2, 2, 213, 211, 3, 2, 2, 2, 213, 214, 3, 2, 2, 2, 214, 217, 3, 2, 2, 2, 215, 213, 3, 2, 2, 2, 216, 218, 7, 72, 2, 2, 217, 216, 3, 2, 2, 2, 217, 218, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 220, 7, 64, 2, 2, 220, 222, 5, 16, 9, 3, 221, 176, 3, 2, 2, 2, 221, 178, 3, 2, 2, 2, 221, 182, 3, 2, 2, 2, 221, 195, 3, 2, 2, 2, 221, 204, 3, 2, 2, 2, 221, 206, 3, 2, 2, 2, 221, 208, 3, 2, 2, 2, 222, 318, 3, 2, 2, 2, 223, 224, 12, 20, 2, 2, 224, 225, 7, 11, 2, 2, 225, 317, 5, 16, 9, 20, 226, 227, 12, 18, 2, 2, 227, 228, 9, 5, 2, 2, 228, 317, 5, 16, 9, 19, 229, 230, 12, 17, 2, 2, 230, 231, 9, 6, 2, 2, 231, 317, 5, 16, 9, 18, 232, 233, 12, 16, 2, 2, 233, 234, 9, 7, 2, 2, 234, 317, 5, 16, 9, 17, 235, 236, 12, 15, 2, 2, 236, 237, 7, 19, 2, 2, 237, 317, 5, 16, 9, 16, 238, 239, 12, 14, 2, 2, 239, 240, 7, 20, 2, 2, 240, 317, 5, 16, 9, 15, 241, 242, 12, 13, 2, 2, 242, 243, 7, 21, 2, 2, 243, 317, 5, 16, 9, 14, 244, 245, 12, 12, 2, 2, 245, 246, 9, 8, 2, 2, 246, 317, 5, 16, 9, 13, 247, 248, 12, 10, 2, 2, 248, 249, 9, 9, 2, 2, 249, 317, 5, 16, 9, 11, 250, 251, 12, 9, 2, 2, 251, 252, 9, 10, 2, 2, 252, 317, 5, 16, 9, 9, 253, 254, 12, 7, 2, 2, 254, 255, 7, 61, 2, 2, 255, 317, 5, 16, 9, 7, 256, 257, 12, 6, 2, 2, 257, 258, 7, 62, 2, 2, 258, 317, 5, 16, 9, 6, 259, 260, 12, 5, 2, 2, 260, 261, 7, 22, 2, 2, 261, 317, 5, 16, 9, 5, 262, 263, 12, 4, 2, 2, 263, 264, 7, 46, 2, 2, 264, 265, 5, 16, 9, 2, 265, 266, 7, 41, 2, 2, 266, 267, 5, 16, 9, 4, 267, 317, 3, 2, 2, 2, 268, 270, 12, 25, 2, 2, 269, 271, 7, 46, 2, 2, 270, 269, 3, 2, 2, 2, 270, 271, 3, 2, 2, 2, 271, 272, 3, 2, 2, 2, 272, 273, 7, 44, 2, 2, 273, 274, 5, 18, 10, 2, 274, 275, 7, 45, 2, 2, 275, 317, 3, 2, 2, 2, 276, 277, 12, 24, 2, 2, 277, 279, 7, 44, 2, 2, 278, 280, 5, 16, 9, 2, 279, 278, 3, 2, 2, 2, 279, 280, 3, 2, 2, 2, 280, 281, 3, 2, 2, 2, 281, 283, 7, 41, 2, 2, 282, 284, 5, 16, 9, 2, 283, 282, 3, 2, 2, 2, 283, 284, 3, 2, 2, 2, 284, 289, 3, 2, 2, 2, 285, 287, 7, 41, 2, 2, 286, 288, 5, 16, 9, 2, 287, 286, 3, 2, 2, 2, 287, 288, 3, 2, 2, 2, 288, 290, 3, 2, 2, 2, 289, 285, 3, 2, 2, 2, 289, 290, 3, 2, 2, 2, 290, 291, 3, 2, 2, 2, 291, 317, 7, 45, 2, 2, 292, 294, 12, 23, 2, 2, 293, 295, 7, 46, 2, 2, 294, 293, 3, 2, 2, 2, 294, 295, 3, 2, 2, 2, 295, 296, 3, 2, 2, 2, 296, 297, 7, 47, 2, 2, 297, 317, 7, 72, 2, 2, 298, 299, 12, 22, 2, 2, 299, 305, 7, 37, 2, 2, 300, 301, 5, 24, 13, 2, 301, 302, 7, 26, 2, 2, 302, 304, 3, 2, 2, 2, 303, 300, 3, 2, 2, 2, 304, 307, 3, 2, 2, 2, 305, 303, 3, 2, 2, 2, 305, 306, 3, 2, 2, 2, 306, 309, 3, 2, 2, 2, 307, 305, 3, 2, 2, 2, 308, 310, 5, 24, 13, 2, 309, 308, 3, 2, 2, 2, 309, 310, 3, 2, 2, 2, 310, 311, 3, 2, 2, 2, 311, 317, 7, 38, 2, 2, 312, 313, 12, 21, 2, 2, 313, 317, 7, 48, 2, 2, 314, 315, 12, 11, 2, 2, 315, 317, 7, 51, 2, 2, 316, 223, 3, 2, 2, 2, 316, 226, 3, 2, 2, 2, 316, 229, 3, 2, 2, 2, 316, 232, 3, 2, 2, 2, 316, 235, 3, 2, 2, 2, 316, 238, 3, 2, 2, 2, 316, 241, 3, 2, 2, 2, 316, 244, 3, 2, 2, 2, 316, 247, 3, 2, 2, 2, 316, 250, 3, 2, 2, 2, 316, 253, 3, 2, 2, 2, 316, 256, 3, 2, 2, 2, 316, 259, 3, 2, 2, 2, 316, 262, 3, 2, 2, 2, 316, 268, 3, 2, 2, 2, 316, 276, 3, 2, 2, 2, 316, 292, 3, 2, 2, 2, 316, 298, 3, 2, 2, 2, 316, 312, 3, 2, 2, 2, 316, 314, 3, 2, 2, 2, 317, 320, 3, 2, 2, 2, 318, 316, 3, 2, 2, 2, 318, 319, 3, 2, 2, 2, 319, 17, 3, 2, 2, 2, 320, 318, 3, 2, 2, 2, 321, 322, 5, 16, 9, 2, 322, 323, 7, 26, 2, 2, 323, 325, 3, 2, 2, 2, 324, 321, 3, 2, 2, 2, 325, 328, 3, 2, 2, 2, 326, 324, 3, 2, 2, 2, 326, 327, 3, 2, 2, 2, 327, 329, 3, 2, 2, 2, 328, 326, 3, 2, 2, 2, 329, 330, 5, 16, 9, 2, 330, 19, 3, 2, 2, 2, 331, 332, 5, 18, 10, 2, 332, 333, 7, 2, 2, 3, 333, 21, 3, 2, 2, 2, 334, 335, 7, 33, 2, 2, 335, 336, 5, 18, 10, 2, 336, 337, 7, 34, 2, 2, 337, 340, 5, 18, 10, 2, 338, 339, 7, 35, 2, 2, 339, 341, 5, 18, 10, 2, 340, 338, 3, 2, 2, 2, 340, 341, 3, 2, 2, 2, 341, 345, 3, 2, 2, 2, 342, 343, 7, 27, 2, 2, 343, 345, 5, 16, 9, 2, 344, 334, 3, 2, 2, 2, 344, 342, 3, 2, 2, 2, 345, 23, 3, 2, 2, 2, 346, 347, 7, 72, 2, 2, 347, 349, 7, 10, 2, 2, 348, 346, 3, 2, 2, 2, 348, 349, 3, 2, 2, 2, 349, 350, 3, 2, 2, 2, 350, 351, 5, 16, 9, 2, 351, 25, 3, 2, 2, 2, 352, 360, 7, 68, 2, 2, 353, 360, 7, 69, 2, 2, 354, 360, 9, 11, 2, 2, 355, 360, 7, 70, 2, 2, 356, 360, 7, 71, 2, 2, 357, 360, 7, 67, 2, 2, 358, 360, 7, 72, 2, 2, 359, 352, 3, 2, 2, 2, 359, 353, 3, 2, 2, 2, 359, 354, 3, 2, 2, 2, 359, 355, 3, 2, 2, 2, 359, 356, 3, 2, 2, 2, 359, 357, 3, 2, 2, 2, 359, 358, 3, 2, 2, 2, 360, 27, 3, 2, 2, 2, 361, 362, 7, 72, 2, 2, 362, 364, 7, 26, 2, 2, 363, 361, 3, 2, 2, 2, 364, 367, 3, 2, 2, 2, 365, 363, 3, 2, 2, 2, 365, 366, 3, 2, 2, 2, 366, 368, 3, 2, 2, 2, 367, 365, 3, 2, 2, 2, 368, 369, 7, 72, 2, 2, 369, 29, 3, 2, 2, 2, 370, 371, 8, 16, 1, 2, 371, 383, 7, 72, 2, 2, 372, 373, 7, 37, 2, 2, 373, 374, 5, 30, 16, 2, 374, 375, 7, 38, 2, 2, 375, 383, 3, 2, 2, 2, 376, 377, 7, 44, 2, 2, 377, 378, 5, 30, 16, 2, 378, 379, 7, 45, 2, 2, 379, 383, 3, 2, 2, 2, 380, 381, 7, 64, 2, 2, 381, 383, 5, 30, 16, 3, 382, 370, 3, 2, 2, 2, 382, 372, 3, 2, 2, 2, 382, 376, 3, 2, 2, 2, 382, 380, 3, 2, 2, 2, 383, 394, 3, 2, 2, 2, 384, 385, 12, 5, 2, 2, 385, 386, 7, 12, 2, 2, 386, 393, 5, 30, 16, 5, 387, 388, 12, 4, 2, 2, 388, 389, 7, 64, 2, 2, 389, 393, 5, 30, 16, 4, 390, 391, 12, 6, 2, 2, 391, 393, 7, 46, 2, 2, 392, 384, 3, 2, 2, 2, 392, 387, 3, 2, 2, 2, 392, 390, 3, 2, 2, 2, 393, 396, 3, 2, 2, 2, 394, 392, 3, 2, 2, 2, 394, 395, 3, 2, 2, 2, 395, 31, 3, 2, 2, 2, 396, 394, 3, 2, 2, 2, 46, 35, 44, 54, 59, 65, 72, 84, 86, 93, 107, 113, 131, 144, 148, 152, 158, 160, 166, 172, 188, 192, 200, 213, 217, 221, 270, 279, 283, 287, 289, 294, 305, 309, 316, 318, 326, 340, 344, 348, 359, 365, 382, 392, 394] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 75, 404, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 3, 2, 7, 2, 34, 10, 2, 12, 2, 14, 2, 37, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 45, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 55, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 60, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 66, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 71, 10, 4, 12, 4, 14, 4, 74, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 85, 10, 4, 5, 4, 87, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 92, 10, 5, 12, 5, 14, 5, 95, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 106, 10, 6, 12, 6, 14, 6, 109, 11, 6, 3, 6, 3, 6, 3, 6, 5, 6, 114, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 132, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 143, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 149, 10, 6, 12, 6, 14, 6, 152, 11, 6, 3, 6, 5, 6, 155, 10, 6, 3, 6, 3, 6, 5, 6, 159, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 165, 10, 6, 5, 6, 167, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 173, 10, 7, 3, 8, 3, 8, 6, 8, 177, 10, 8, 13, 8, 14, 8, 178, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 193, 10, 9, 12, 9, 14, 9, 196, 11, 9, 3, 9, 5, 9, 199, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 6, 9, 205, 10, 9, 13, 9, 14, 9, 206, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 218, 10, 9, 12, 9, 14, 9, 221, 11, 9, 3, 9, 5, 9, 224, 10, 9, 3, 9, 3, 9, 5, 9, 228, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 277, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 286, 10, 9, 3, 9, 3, 9, 5, 9, 290, 10, 9, 3, 9, 3, 9, 5, 9, 294, 10, 9, 5, 9, 296, 10, 9, 3, 9, 3, 9, 3, 9, 5, 9, 301, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 310, 10, 9, 12, 9, 14, 9, 313, 11, 9, 3, 9, 5, 9, 316, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 323, 10, 9, 12, 9, 14, 9, 326, 11, 9, 3, 10, 3, 10, 3, 10, 7, 10, 331, 10, 10, 12, 10, 14, 10, 334, 11, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 347, 10, 12, 3, 12, 3, 12, 5, 12, 351, 10, 12, 3, 13, 3, 13, 5, 13, 355, 10, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 366, 10, 14, 3, 15, 3, 15, 7, 15, 370, 10, 15, 12, 15, 14, 15, 373, 11, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 389, 10, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 7, 16, 399, 10, 16, 12, 16, 14, 16, 402, 11, 16, 3, 16, 2, 4, 16, 30, 17, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 2, 12, 3, 2, 11, 22, 3, 2, 23, 24, 4, 2, 15, 16, 51, 51, 3, 2, 12, 14, 3, 2, 15, 16, 3, 2, 17, 18, 3, 2, 52, 53, 3, 2, 54, 55, 4, 2, 37, 38, 56, 59, 3, 2, 65, 66, 2, 475, 2, 35, 3, 2, 2, 2, 4, 44, 3, 2, 2, 2, 6, 86, 3, 2, 2, 2, 8, 88, 3, 2, 2, 2, 10, 166, 3, 2, 2, 2, 12, 168, 3, 2, 2, 2, 14, 174, 3, 2, 2, 2, 16, 227, 3, 2, 2, 2, 18, 332, 3, 2, 2, 2, 20, 337, 3, 2, 2, 2, 22, 350, 3, 2, 2, 2, 24, 354, 3, 2, 2, 2, 26, 365, 3, 2, 2, 2, 28, 371, 3, 2, 2, 2, 30, 388, 3, 2, 2, 2, 32, 34, 5, 4, 3, 2, 33, 32, 3, 2, 2, 2, 34, 37, 3, 2, 2, 2, 35, 33, 3, 2, 2, 2, 35, 36, 3, 2, 2, 2, 36, 38, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 38, 39, 7, 2, 2, 3, 39, 3, 3, 2, 2, 2, 40, 41, 5, 6, 4, 2, 41, 42, 7, 3, 2, 2, 42, 45, 3, 2, 2, 2, 43, 45, 5, 10, 6, 2, 44, 40, 3, 2, 2, 2, 44, 43, 3, 2, 2, 2, 45, 5, 3, 2, 2, 2, 46, 47, 7, 4, 2, 2, 47, 54, 7, 72, 2, 2, 48, 49, 7, 5, 2, 2, 49, 55, 5, 28, 15, 2, 50, 51, 7, 6, 2, 2, 51, 55, 5, 28, 15, 2, 52, 53, 7, 7, 2, 2, 53, 55, 7, 72, 2, 2, 54, 48, 3, 2, 2, 2, 54, 50, 3, 2, 2, 2, 54, 52, 3, 2, 2, 2, 54, 55, 3, 2, 2, 2, 55, 87, 3, 2, 2, 2, 56, 87, 7, 8, 2, 2, 57, 59, 7, 9, 2, 2, 58, 60, 5, 18, 10, 2, 59, 58, 3, 2, 2, 2, 59, 60, 3, 2, 2, 2, 60, 87, 3, 2, 2, 2, 61, 62, 5, 30, 16, 2, 62, 65, 7, 72, 2, 2, 63, 64, 7, 10, 2, 2, 64, 66, 5, 18, 10, 2, 65, 63, 3, 2, 2, 2, 65, 66, 3, 2, 2, 2, 66, 87, 3, 2, 2, 2, 67, 68, 5, 8, 5, 2, 68, 69, 7, 10, 2, 2, 69, 71, 3, 2, 2, 2, 70, 67, 3, 2, 2, 2, 71, 74, 3, 2, 2, 2, 72, 70, 3, 2, 2, 2, 72, 73, 3, 2, 2, 2, 73, 75, 3, 2, 2, 2, 74, 72, 3, 2, 2, 2, 75, 87, 5, 18, 10, 2, 76, 77, 5, 16, 9, 2, 77, 78, 9, 2, 2, 2, 78, 79, 7, 10, 2, 2, 79, 80, 5, 16, 9, 2, 80, 87, 3, 2, 2, 2, 81, 87, 9, 3, 2, 2, 82, 84, 7, 25, 2, 2, 83, 85, 5, 18, 10, 2, 84, 83, 3, 2, 2, 2, 84, 85, 3, 2, 2, 2, 85, 87, 3, 2, 2, 2, 86, 46, 3, 2, 2, 2, 86, 56, 3, 2, 2, 2, 86, 57, 3, 2, 2, 2, 86, 61, 3, 2, 2, 2, 86, 72, 3, 2, 2, 2, 86, 76, 3, 2, 2, 2, 86, 81, 3, 2, 2, 2, 86, 82, 3, 2, 2, 2, 87, 7, 3, 2, 2, 2, 88, 93, 5, 16, 9, 2, 89, 90, 7, 26, 2, 2, 90, 92, 5, 16, 9, 2, 91, 89, 3, 2, 2, 2, 92, 95, 3, 2, 2, 2, 93, 91, 3, 2, 2, 2, 93, 94, 3, 2, 2, 2, 94, 9, 3, 2, 2, 2, 95, 93, 3, 2, 2, 2, 96, 97, 7, 27, 2, 2, 97, 98, 5, 16, 9, 2, 98, 99, 7, 28, 2, 2, 99, 107, 5, 14, 8, 2, 100, 101, 7, 29, 2, 2, 101, 102, 5, 16, 9, 2, 102, 103, 7, 28, 2, 2, 103, 104, 5, 14, 8, 2, 104, 106, 3, 2, 2, 2, 105, 100, 3, 2, 2, 2, 106, 109, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 107, 108, 3, 2, 2, 2, 108, 113, 3, 2, 2, 2, 109, 107, 3, 2, 2, 2, 110, 111, 7, 30, 2, 2, 111, 112, 7, 28, 2, 2, 112, 114, 5, 14, 8, 2, 113, 110, 3, 2, 2, 2, 113, 114, 3, 2, 2, 2, 114, 167, 3, 2, 2, 2, 115, 116, 7, 31, 2, 2, 116, 117, 5, 16, 9, 2, 117, 118, 7, 28, 2, 2, 118, 119, 5, 14, 8, 2, 119, 167, 3, 2, 2, 2, 120, 121, 7, 32, 2, 2, 121, 122, 5, 16, 9, 2, 122, 123, 7, 28, 2, 2, 123, 124, 5, 14, 8, 2, 124, 167, 3, 2, 2, 2, 125, 126, 7, 33, 2, 2, 126, 127, 5, 18, 10, 2, 127, 128, 7, 34, 2, 2, 128, 131, 5, 18, 10, 2, 129, 130, 7, 35, 2, 2, 130, 132, 5, 18, 10, 2, 131, 129, 3, 2, 2, 2, 131, 132, 3, 2, 2, 2, 132, 133, 3, 2, 2, 2, 133, 134, 7, 28, 2, 2, 134, 135, 5, 14, 8, 2, 135, 167, 3, 2, 2, 2, 136, 137, 7, 36, 2, 2, 137, 142, 7, 72, 2, 2, 138, 139, 7, 37, 2, 2, 139, 140, 5, 28, 15, 2, 140, 141, 7, 38, 2, 2, 141, 143, 3, 2, 2, 2, 142, 138, 3, 2, 2, 2, 142, 143, 3, 2, 2, 2, 143, 144, 3, 2, 2, 2, 144, 150, 7, 39, 2, 2, 145, 146, 5, 12, 7, 2, 146, 147, 7, 26, 2, 2, 147, 149, 3, 2, 2, 2, 148, 145, 3, 2, 2, 2, 149, 152, 3, 2, 2, 2, 150, 148, 3, 2, 2, 2, 150, 151, 3, 2, 2, 2, 151, 154, 3, 2, 2, 2, 152, 150, 3, 2, 2, 2, 153, 155, 5, 12, 7, 2, 154, 153, 3, 2, 2, 2, 154, 155, 3, 2, 2, 2, 155, 156, 3, 2, 2, 2, 156, 158, 7, 40, 2, 2, 157, 159, 5, 30, 16, 2, 158, 157, 3, 2, 2, 2, 158, 159, 3, 2, 2, 2, 159, 164, 3, 2, 2, 2, 160, 161, 7, 41, 2, 2, 161, 165, 5, 14, 8, 2, 162, 163, 7, 42, 2, 2, 163, 165, 7, 3, 2, 2, 164, 160, 3, 2, 2, 2, 164, 162, 3, 2, 2, 2, 165, 167, 3, 2, 2, 2, 166, 96, 3, 2, 2, 2, 166, 115, 3, 2, 2, 2, 166, 120, 3, 2, 2, 2, 166, 125, 3, 2, 2, 2, 166, 136, 3, 2, 2, 2, 167, 11, 3, 2, 2, 2, 168, 169, 5, 30, 16, 2, 169, 172, 7, 72, 2, 2, 170, 171, 7, 43, 2, 2, 171, 173, 5, 16, 9, 2, 172, 170, 3, 2, 2, 2, 172, 173, 3, 2, 2, 2, 173, 13, 3, 2, 2, 2, 174, 176, 7, 44, 2, 2, 175, 177, 5, 4, 3, 2, 176, 175, 3, 2, 2, 2, 177, 178, 3, 2, 2, 2, 178, 176, 3, 2, 2, 2, 178, 179, 3, 2, 2, 2, 179, 180, 3, 2, 2, 2, 180, 181, 7, 45, 2, 2, 181, 15, 3, 2, 2, 2, 182, 183, 8, 9, 1, 2, 183, 228, 5, 26, 14, 2, 184, 185, 7, 39, 2, 2, 185, 186, 5, 18, 10, 2, 186, 187, 7, 40, 2, 2, 187, 228, 3, 2, 2, 2, 188, 194, 7, 46, 2, 2, 189, 190, 5, 16, 9, 2, 190, 191, 7, 26, 2, 2, 191, 193, 3, 2, 2, 2, 192, 189, 3, 2, 2, 2, 193, 196, 3, 2, 2, 2, 194, 192, 3, 2, 2, 2, 194, 195, 3, 2, 2, 2, 195, 198, 3, 2, 2, 2, 196, 194, 3, 2, 2, 2, 197, 199, 5, 16, 9, 2, 198, 197, 3, 2, 2, 2, 198, 199, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 228, 7, 47, 2, 2, 201, 202, 7, 46, 2, 2, 202, 204, 5, 16, 9, 2, 203, 205, 5, 22, 12, 2, 204, 203, 3, 2, 2, 2, 205, 206, 3, 2, 2, 2, 206, 204, 3, 2, 2, 2, 206, 207, 3, 2, 2, 2, 207, 208, 3, 2, 2, 2, 208, 209, 7, 47, 2, 2, 209, 228, 3, 2, 2, 2, 210, 211, 9, 4, 2, 2, 211, 228, 5, 16, 9, 19, 212, 213, 7, 60, 2, 2, 213, 228, 5, 16, 9, 8, 214, 219, 7, 63, 2, 2, 215, 216, 7, 72, 2, 2, 216, 218, 7, 26, 2, 2, 217, 215, 3, 2, 2, 2, 218, 221, 3, 2, 2, 2, 219, 217, 3, 2, 2, 2, 219, 220, 3, 2, 2, 2, 220, 223, 3, 2, 2, 2, 221, 219, 3, 2, 2, 2, 222, 224, 7, 72, 2, 2, 223, 222, 3, 2, 2, 2, 223, 224, 3, 2, 2, 2, 224, 225, 3, 2, 2, 2, 225, 226, 7, 64, 2, 2, 226, 228, 5, 16, 9, 3, 227, 182, 3, 2, 2, 2, 227, 184, 3, 2, 2, 2, 227, 188, 3, 2, 2, 2, 227, 201, 3, 2, 2, 2, 227, 210, 3, 2, 2, 2, 227, 212, 3, 2, 2, 2, 227, 214, 3, 2, 2, 2, 228, 324, 3, 2, 2, 2, 229, 230, 12, 20, 2, 2, 230, 231, 7, 11, 2, 2, 231, 323, 5, 16, 9, 20, 232, 233, 12, 18, 2, 2, 233, 234, 9, 5, 2, 2, 234, 323, 5, 16, 9, 19, 235, 236, 12, 17, 2, 2, 236, 237, 9, 6, 2, 2, 237, 323, 5, 16, 9, 18, 238, 239, 12, 16, 2, 2, 239, 240, 9, 7, 2, 2, 240, 323, 5, 16, 9, 17, 241, 242, 12, 15, 2, 2, 242, 243, 7, 19, 2, 2, 243, 323, 5, 16, 9, 16, 244, 245, 12, 14, 2, 2, 245, 246, 7, 20, 2, 2, 246, 323, 5, 16, 9, 15, 247, 248, 12, 13, 2, 2, 248, 249, 7, 21, 2, 2, 249, 323, 5, 16, 9, 14, 250, 251, 12, 12, 2, 2, 251, 252, 9, 8, 2, 2, 252, 323, 5, 16, 9, 13, 253, 254, 12, 10, 2, 2, 254, 255, 9, 9, 2, 2, 255, 323, 5, 16, 9, 11, 256, 257, 12, 9, 2, 2, 257, 258, 9, 10, 2, 2, 258, 323, 5, 16, 9, 9, 259, 260, 12, 7, 2, 2, 260, 261, 7, 61, 2, 2, 261, 323, 5, 16, 9, 7, 262, 263, 12, 6, 2, 2, 263, 264, 7, 62, 2, 2, 264, 323, 5, 16, 9, 6, 265, 266, 12, 5, 2, 2, 266, 267, 7, 22, 2, 2, 267, 323, 5, 16, 9, 5, 268, 269, 12, 4, 2, 2, 269, 270, 7, 48, 2, 2, 270, 271, 5, 16, 9, 2, 271, 272, 7, 43, 2, 2, 272, 273, 5, 16, 9, 4, 273, 323, 3, 2, 2, 2, 274, 276, 12, 25, 2, 2, 275, 277, 7, 48, 2, 2, 276, 275, 3, 2, 2, 2, 276, 277, 3, 2, 2, 2, 277, 278, 3, 2, 2, 2, 278, 279, 7, 46, 2, 2, 279, 280, 5, 18, 10, 2, 280, 281, 7, 47, 2, 2, 281, 323, 3, 2, 2, 2, 282, 283, 12, 24, 2, 2, 283, 285, 7, 46, 2, 2, 284, 286, 5, 16, 9, 2, 285, 284, 3, 2, 2, 2, 285, 286, 3, 2, 2, 2, 286, 287, 3, 2, 2, 2, 287, 289, 7, 43, 2, 2, 288, 290, 5, 16, 9, 2, 289, 288, 3, 2, 2, 2, 289, 290, 3, 2, 2, 2, 290, 295, 3, 2, 2, 2, 291, 293, 7, 43, 2, 2, 292, 294, 5, 16, 9, 2, 293, 292, 3, 2, 2, 2, 293, 294, 3, 2, 2, 2, 294, 296, 3, 2, 2, 2, 295, 291, 3, 2, 2, 2, 295, 296, 3, 2, 2, 2, 296, 297, 3, 2, 2, 2, 297, 323, 7, 47, 2, 2, 298, 300, 12, 23, 2, 2, 299, 301, 7, 48, 2, 2, 300, 299, 3, 2, 2, 2, 300, 301, 3, 2, 2, 2, 301, 302, 3, 2, 2, 2, 302, 303, 7, 49, 2, 2, 303, 323, 7, 72, 2, 2, 304, 305, 12, 22, 2, 2, 305, 311, 7, 39, 2, 2, 306, 307, 5, 24, 13, 2, 307, 308, 7, 26, 2, 2, 308, 310, 3, 2, 2, 2, 309, 306, 3, 2, 2, 2, 310, 313, 3, 2, 2, 2, 311, 309, 3, 2, 2, 2, 311, 312, 3, 2, 2, 2, 312, 315, 3, 2, 2, 2, 313, 311, 3, 2, 2, 2, 314, 316, 5, 24, 13, 2, 315, 314, 3, 2, 2, 2, 315, 316, 3, 2, 2, 2, 316, 317, 3, 2, 2, 2, 317, 323, 7, 40, 2, 2, 318, 319, 12, 21, 2, 2, 319, 323, 7, 50, 2, 2, 320, 321, 12, 11, 2, 2, 321, 323, 7, 53, 2, 2, 322, 229, 3, 2, 2, 2, 322, 232, 3, 2, 2, 2, 322, 235, 3, 2, 2, 2, 322, 238, 3, 2, 2, 2, 322, 241, 3, 2, 2, 2, 322, 244, 3, 2, 2, 2, 322, 247, 3, 2, 2, 2, 322, 250, 3, 2, 2, 2, 322, 253, 3, 2, 2, 2, 322, 256, 3, 2, 2, 2, 322, 259, 3, 2, 2, 2, 322, 262, 3, 2, 2, 2, 322, 265, 3, 2, 2, 2, 322, 268, 3, 2, 2, 2, 322, 274, 3, 2, 2, 2, 322, 282, 3, 2, 2, 2, 322, 298, 3, 2, 2, 2, 322, 304, 3, 2, 2, 2, 322, 318, 3, 2, 2, 2, 322, 320, 3, 2, 2, 2, 323, 326, 3, 2, 2, 2, 324, 322, 3, 2, 2, 2, 324, 325, 3, 2, 2, 2, 325, 17, 3, 2, 2, 2, 326, 324, 3, 2, 2, 2, 327, 328, 5, 16, 9, 2, 328, 329, 7, 26, 2, 2, 329, 331, 3, 2, 2, 2, 330, 327, 3, 2, 2, 2, 331, 334, 3, 2, 2, 2, 332, 330, 3, 2, 2, 2, 332, 333, 3, 2, 2, 2, 333, 335, 3, 2, 2, 2, 334, 332, 3, 2, 2, 2, 335, 336, 5, 16, 9, 2, 336, 19, 3, 2, 2, 2, 337, 338, 5, 18, 10, 2, 338, 339, 7, 2, 2, 3, 339, 21, 3, 2, 2, 2, 340, 341, 7, 33, 2, 2, 341, 342, 5, 18, 10, 2, 342, 343, 7, 34, 2, 2, 343, 346, 5, 18, 10, 2, 344, 345, 7, 35, 2, 2, 345, 347, 5, 18, 10, 2, 346, 344, 3, 2, 2, 2, 346, 347, 3, 2, 2, 2, 347, 351, 3, 2, 2, 2, 348, 349, 7, 27, 2, 2, 349, 351, 5, 16, 9, 2, 350, 340, 3, 2, 2, 2, 350, 348, 3, 2, 2, 2, 351, 23, 3, 2, 2, 2, 352, 353, 7, 72, 2, 2, 353, 355, 7, 10, 2, 2, 354, 352, 3, 2, 2, 2, 354, 355, 3, 2, 2, 2, 355, 356, 3, 2, 2, 2, 356, 357, 5, 16, 9, 2, 357, 25, 3, 2, 2, 2, 358, 366, 7, 68, 2, 2, 359, 366, 7, 69, 2, 2, 360, 366, 9, 11, 2, 2, 361, 366, 7, 70, 2, 2, 362, 366, 7, 71, 2, 2, 363, 366, 7, 67, 2, 2, 364, 366, 7, 72, 2, 2, 365, 358, 3, 2, 2, 2, 365, 359, 3, 2, 2, 2, 365, 360, 3, 2, 2, 2, 365, 361, 3, 2, 2, 2, 365, 362, 3, 2, 2, 2, 365, 363, 3, 2, 2, 2, 365, 364, 3, 2, 2, 2, 366, 27, 3, 2, 2, 2, 367, 368, 7, 72, 2, 2, 368, 370, 7, 26, 2, 2, 369, 367, 3, 2, 2, 2, 370, 373, 3, 2, 2, 2, 371, 369, 3, 2, 2, 2, 371, 372, 3, 2, 2, 2, 372, 374, 3, 2, 2, 2, 373, 371, 3, 2, 2, 2, 374, 375, 7, 72, 2, 2, 375, 29, 3, 2, 2, 2, 376, 377, 8, 16, 1, 2, 377, 389, 7, 72, 2, 2, 378, 379, 7, 39, 2, 2, 379, 380, 5, 30, 16, 2, 380, 381, 7, 40, 2, 2, 381, 389, 3, 2, 2, 2, 382, 383, 7, 46, 2, 2, 383, 384, 5, 30, 16, 2, 384, 385, 7, 47, 2, 2, 385, 389, 3, 2, 2, 2, 386, 387, 7, 64, 2, 2, 387, 389, 5, 30, 16, 3, 388, 376, 3, 2, 2, 2, 388, 378, 3, 2, 2, 2, 388, 382, 3, 2, 2, 2, 388, 386, 3, 2, 2, 2, 389, 400, 3, 2, 2, 2, 390, 391, 12, 5, 2, 2, 391, 392, 7, 12, 2, 2, 392, 399, 5, 30, 16, 5, 393, 394, 12, 4, 2, 2, 394, 395, 7, 64, 2, 2, 395, 399, 5, 30, 16, 4, 396, 397, 12, 6, 2, 2, 397, 399, 7, 48, 2, 2, 398, 390, 3, 2, 2, 2, 398, 393, 3, 2, 2, 2, 398, 396, 3, 2, 2, 2, 399, 402, 3, 2, 2, 2, 400, 398, 3, 2, 2, 2, 400, 401, 3, 2, 2, 2, 401, 31, 3, 2, 2, 2, 402, 400, 3, 2, 2, 2, 47, 35, 44, 54, 59, 65, 72, 84, 86, 93, 107, 113, 131, 142, 150, 154, 158, 164, 166, 172, 178, 194, 198, 206, 219, 223, 227, 276, 285, 289, 293, 295, 300, 311, 315, 322, 324, 332, 346, 350, 354, 365, 371, 388, 398, 400] \ No newline at end of file diff --git a/src/antlr/Pyxell.tokens b/src/antlr/Pyxell.tokens index cae091a4..18963984 100644 --- a/src/antlr/Pyxell.tokens +++ b/src/antlr/Pyxell.tokens @@ -105,28 +105,28 @@ ERR=73 'in'=32 'step'=33 'func'=34 -'('=35 -')'=36 -'def'=37 -'extern'=38 -':'=39 -'{'=40 -'}'=41 -'['=42 -']'=43 -'?'=44 -'.'=45 -'!'=46 -'~'=47 -'..'=48 -'...'=49 -'is'=50 -'isn\'t'=51 -'=='=52 -'!='=53 -'<'=54 -'<='=55 -'>'=56 +'<'=35 +'>'=36 +'('=37 +')'=38 +'def'=39 +'extern'=40 +':'=41 +'{'=42 +'}'=43 +'['=44 +']'=45 +'?'=46 +'.'=47 +'!'=48 +'~'=49 +'..'=50 +'...'=51 +'is'=52 +'isn\'t'=53 +'=='=54 +'!='=55 +'<='=56 '>='=57 'not'=58 'and'=59 diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp index 5b617d6a..a890e91a 100644 --- a/src/antlr/PyxellLexer.interp +++ b/src/antlr/PyxellLexer.interp @@ -34,6 +34,8 @@ null 'in' 'step' 'func' +'<' +'>' '(' ')' 'def' @@ -53,9 +55,7 @@ null 'isn\'t' '==' '!=' -'<' '<=' -'>' '>=' 'not' 'and' @@ -236,4 +236,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 75, 472, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 6, 67, 389, 10, 67, 13, 67, 14, 67, 390, 3, 68, 6, 68, 394, 10, 68, 13, 68, 14, 68, 395, 3, 68, 3, 68, 6, 68, 400, 10, 68, 13, 68, 14, 68, 401, 3, 68, 3, 68, 5, 68, 406, 10, 68, 3, 68, 6, 68, 409, 10, 68, 13, 68, 14, 68, 410, 5, 68, 413, 10, 68, 3, 69, 3, 69, 3, 69, 3, 69, 7, 69, 419, 10, 69, 12, 69, 14, 69, 422, 11, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, 7, 70, 430, 10, 70, 12, 70, 14, 70, 433, 11, 70, 3, 70, 3, 70, 3, 71, 3, 71, 7, 71, 439, 10, 71, 12, 71, 14, 71, 442, 11, 71, 3, 72, 3, 72, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 5, 74, 451, 10, 74, 3, 75, 3, 75, 3, 75, 3, 75, 7, 75, 457, 10, 75, 12, 75, 14, 75, 460, 11, 75, 3, 75, 3, 75, 3, 76, 6, 76, 465, 10, 76, 13, 76, 14, 76, 466, 3, 76, 3, 76, 3, 77, 3, 77, 2, 2, 78, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 2, 145, 2, 147, 2, 149, 73, 151, 74, 153, 75, 3, 2, 11, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 3, 2, 41, 41, 4, 2, 12, 12, 14, 15, 5, 2, 11, 12, 15, 15, 34, 34, 2, 483, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 3, 155, 3, 2, 2, 2, 5, 157, 3, 2, 2, 2, 7, 161, 3, 2, 2, 2, 9, 166, 3, 2, 2, 2, 11, 173, 3, 2, 2, 2, 13, 176, 3, 2, 2, 2, 15, 181, 3, 2, 2, 2, 17, 187, 3, 2, 2, 2, 19, 189, 3, 2, 2, 2, 21, 191, 3, 2, 2, 2, 23, 193, 3, 2, 2, 2, 25, 195, 3, 2, 2, 2, 27, 197, 3, 2, 2, 2, 29, 199, 3, 2, 2, 2, 31, 201, 3, 2, 2, 2, 33, 204, 3, 2, 2, 2, 35, 207, 3, 2, 2, 2, 37, 209, 3, 2, 2, 2, 39, 211, 3, 2, 2, 2, 41, 213, 3, 2, 2, 2, 43, 216, 3, 2, 2, 2, 45, 222, 3, 2, 2, 2, 47, 231, 3, 2, 2, 2, 49, 238, 3, 2, 2, 2, 51, 240, 3, 2, 2, 2, 53, 243, 3, 2, 2, 2, 55, 246, 3, 2, 2, 2, 57, 251, 3, 2, 2, 2, 59, 256, 3, 2, 2, 2, 61, 262, 3, 2, 2, 2, 63, 268, 3, 2, 2, 2, 65, 272, 3, 2, 2, 2, 67, 275, 3, 2, 2, 2, 69, 280, 3, 2, 2, 2, 71, 285, 3, 2, 2, 2, 73, 287, 3, 2, 2, 2, 75, 289, 3, 2, 2, 2, 77, 293, 3, 2, 2, 2, 79, 300, 3, 2, 2, 2, 81, 302, 3, 2, 2, 2, 83, 304, 3, 2, 2, 2, 85, 306, 3, 2, 2, 2, 87, 308, 3, 2, 2, 2, 89, 310, 3, 2, 2, 2, 91, 312, 3, 2, 2, 2, 93, 314, 3, 2, 2, 2, 95, 316, 3, 2, 2, 2, 97, 318, 3, 2, 2, 2, 99, 321, 3, 2, 2, 2, 101, 325, 3, 2, 2, 2, 103, 328, 3, 2, 2, 2, 105, 334, 3, 2, 2, 2, 107, 337, 3, 2, 2, 2, 109, 340, 3, 2, 2, 2, 111, 342, 3, 2, 2, 2, 113, 345, 3, 2, 2, 2, 115, 347, 3, 2, 2, 2, 117, 350, 3, 2, 2, 2, 119, 354, 3, 2, 2, 2, 121, 358, 3, 2, 2, 2, 123, 361, 3, 2, 2, 2, 125, 368, 3, 2, 2, 2, 127, 371, 3, 2, 2, 2, 129, 376, 3, 2, 2, 2, 131, 382, 3, 2, 2, 2, 133, 388, 3, 2, 2, 2, 135, 393, 3, 2, 2, 2, 137, 414, 3, 2, 2, 2, 139, 425, 3, 2, 2, 2, 141, 436, 3, 2, 2, 2, 143, 443, 3, 2, 2, 2, 145, 445, 3, 2, 2, 2, 147, 450, 3, 2, 2, 2, 149, 452, 3, 2, 2, 2, 151, 464, 3, 2, 2, 2, 153, 470, 3, 2, 2, 2, 155, 156, 7, 61, 2, 2, 156, 4, 3, 2, 2, 2, 157, 158, 7, 119, 2, 2, 158, 159, 7, 117, 2, 2, 159, 160, 7, 103, 2, 2, 160, 6, 3, 2, 2, 2, 161, 162, 7, 113, 2, 2, 162, 163, 7, 112, 2, 2, 163, 164, 7, 110, 2, 2, 164, 165, 7, 123, 2, 2, 165, 8, 3, 2, 2, 2, 166, 167, 7, 106, 2, 2, 167, 168, 7, 107, 2, 2, 168, 169, 7, 102, 2, 2, 169, 170, 7, 107, 2, 2, 170, 171, 7, 112, 2, 2, 171, 172, 7, 105, 2, 2, 172, 10, 3, 2, 2, 2, 173, 174, 7, 99, 2, 2, 174, 175, 7, 117, 2, 2, 175, 12, 3, 2, 2, 2, 176, 177, 7, 117, 2, 2, 177, 178, 7, 109, 2, 2, 178, 179, 7, 107, 2, 2, 179, 180, 7, 114, 2, 2, 180, 14, 3, 2, 2, 2, 181, 182, 7, 114, 2, 2, 182, 183, 7, 116, 2, 2, 183, 184, 7, 107, 2, 2, 184, 185, 7, 112, 2, 2, 185, 186, 7, 118, 2, 2, 186, 16, 3, 2, 2, 2, 187, 188, 7, 63, 2, 2, 188, 18, 3, 2, 2, 2, 189, 190, 7, 96, 2, 2, 190, 20, 3, 2, 2, 2, 191, 192, 7, 44, 2, 2, 192, 22, 3, 2, 2, 2, 193, 194, 7, 49, 2, 2, 194, 24, 3, 2, 2, 2, 195, 196, 7, 39, 2, 2, 196, 26, 3, 2, 2, 2, 197, 198, 7, 45, 2, 2, 198, 28, 3, 2, 2, 2, 199, 200, 7, 47, 2, 2, 200, 30, 3, 2, 2, 2, 201, 202, 7, 62, 2, 2, 202, 203, 7, 62, 2, 2, 203, 32, 3, 2, 2, 2, 204, 205, 7, 64, 2, 2, 205, 206, 7, 64, 2, 2, 206, 34, 3, 2, 2, 2, 207, 208, 7, 40, 2, 2, 208, 36, 3, 2, 2, 2, 209, 210, 7, 38, 2, 2, 210, 38, 3, 2, 2, 2, 211, 212, 7, 126, 2, 2, 212, 40, 3, 2, 2, 2, 213, 214, 7, 65, 2, 2, 214, 215, 7, 65, 2, 2, 215, 42, 3, 2, 2, 2, 216, 217, 7, 100, 2, 2, 217, 218, 7, 116, 2, 2, 218, 219, 7, 103, 2, 2, 219, 220, 7, 99, 2, 2, 220, 221, 7, 109, 2, 2, 221, 44, 3, 2, 2, 2, 222, 223, 7, 101, 2, 2, 223, 224, 7, 113, 2, 2, 224, 225, 7, 112, 2, 2, 225, 226, 7, 118, 2, 2, 226, 227, 7, 107, 2, 2, 227, 228, 7, 112, 2, 2, 228, 229, 7, 119, 2, 2, 229, 230, 7, 103, 2, 2, 230, 46, 3, 2, 2, 2, 231, 232, 7, 116, 2, 2, 232, 233, 7, 103, 2, 2, 233, 234, 7, 118, 2, 2, 234, 235, 7, 119, 2, 2, 235, 236, 7, 116, 2, 2, 236, 237, 7, 112, 2, 2, 237, 48, 3, 2, 2, 2, 238, 239, 7, 46, 2, 2, 239, 50, 3, 2, 2, 2, 240, 241, 7, 107, 2, 2, 241, 242, 7, 104, 2, 2, 242, 52, 3, 2, 2, 2, 243, 244, 7, 102, 2, 2, 244, 245, 7, 113, 2, 2, 245, 54, 3, 2, 2, 2, 246, 247, 7, 103, 2, 2, 247, 248, 7, 110, 2, 2, 248, 249, 7, 107, 2, 2, 249, 250, 7, 104, 2, 2, 250, 56, 3, 2, 2, 2, 251, 252, 7, 103, 2, 2, 252, 253, 7, 110, 2, 2, 253, 254, 7, 117, 2, 2, 254, 255, 7, 103, 2, 2, 255, 58, 3, 2, 2, 2, 256, 257, 7, 121, 2, 2, 257, 258, 7, 106, 2, 2, 258, 259, 7, 107, 2, 2, 259, 260, 7, 110, 2, 2, 260, 261, 7, 103, 2, 2, 261, 60, 3, 2, 2, 2, 262, 263, 7, 119, 2, 2, 263, 264, 7, 112, 2, 2, 264, 265, 7, 118, 2, 2, 265, 266, 7, 107, 2, 2, 266, 267, 7, 110, 2, 2, 267, 62, 3, 2, 2, 2, 268, 269, 7, 104, 2, 2, 269, 270, 7, 113, 2, 2, 270, 271, 7, 116, 2, 2, 271, 64, 3, 2, 2, 2, 272, 273, 7, 107, 2, 2, 273, 274, 7, 112, 2, 2, 274, 66, 3, 2, 2, 2, 275, 276, 7, 117, 2, 2, 276, 277, 7, 118, 2, 2, 277, 278, 7, 103, 2, 2, 278, 279, 7, 114, 2, 2, 279, 68, 3, 2, 2, 2, 280, 281, 7, 104, 2, 2, 281, 282, 7, 119, 2, 2, 282, 283, 7, 112, 2, 2, 283, 284, 7, 101, 2, 2, 284, 70, 3, 2, 2, 2, 285, 286, 7, 42, 2, 2, 286, 72, 3, 2, 2, 2, 287, 288, 7, 43, 2, 2, 288, 74, 3, 2, 2, 2, 289, 290, 7, 102, 2, 2, 290, 291, 7, 103, 2, 2, 291, 292, 7, 104, 2, 2, 292, 76, 3, 2, 2, 2, 293, 294, 7, 103, 2, 2, 294, 295, 7, 122, 2, 2, 295, 296, 7, 118, 2, 2, 296, 297, 7, 103, 2, 2, 297, 298, 7, 116, 2, 2, 298, 299, 7, 112, 2, 2, 299, 78, 3, 2, 2, 2, 300, 301, 7, 60, 2, 2, 301, 80, 3, 2, 2, 2, 302, 303, 7, 125, 2, 2, 303, 82, 3, 2, 2, 2, 304, 305, 7, 127, 2, 2, 305, 84, 3, 2, 2, 2, 306, 307, 7, 93, 2, 2, 307, 86, 3, 2, 2, 2, 308, 309, 7, 95, 2, 2, 309, 88, 3, 2, 2, 2, 310, 311, 7, 65, 2, 2, 311, 90, 3, 2, 2, 2, 312, 313, 7, 48, 2, 2, 313, 92, 3, 2, 2, 2, 314, 315, 7, 35, 2, 2, 315, 94, 3, 2, 2, 2, 316, 317, 7, 128, 2, 2, 317, 96, 3, 2, 2, 2, 318, 319, 7, 48, 2, 2, 319, 320, 7, 48, 2, 2, 320, 98, 3, 2, 2, 2, 321, 322, 7, 48, 2, 2, 322, 323, 7, 48, 2, 2, 323, 324, 7, 48, 2, 2, 324, 100, 3, 2, 2, 2, 325, 326, 7, 107, 2, 2, 326, 327, 7, 117, 2, 2, 327, 102, 3, 2, 2, 2, 328, 329, 7, 107, 2, 2, 329, 330, 7, 117, 2, 2, 330, 331, 7, 112, 2, 2, 331, 332, 7, 41, 2, 2, 332, 333, 7, 118, 2, 2, 333, 104, 3, 2, 2, 2, 334, 335, 7, 63, 2, 2, 335, 336, 7, 63, 2, 2, 336, 106, 3, 2, 2, 2, 337, 338, 7, 35, 2, 2, 338, 339, 7, 63, 2, 2, 339, 108, 3, 2, 2, 2, 340, 341, 7, 62, 2, 2, 341, 110, 3, 2, 2, 2, 342, 343, 7, 62, 2, 2, 343, 344, 7, 63, 2, 2, 344, 112, 3, 2, 2, 2, 345, 346, 7, 64, 2, 2, 346, 114, 3, 2, 2, 2, 347, 348, 7, 64, 2, 2, 348, 349, 7, 63, 2, 2, 349, 116, 3, 2, 2, 2, 350, 351, 7, 112, 2, 2, 351, 352, 7, 113, 2, 2, 352, 353, 7, 118, 2, 2, 353, 118, 3, 2, 2, 2, 354, 355, 7, 99, 2, 2, 355, 356, 7, 112, 2, 2, 356, 357, 7, 102, 2, 2, 357, 120, 3, 2, 2, 2, 358, 359, 7, 113, 2, 2, 359, 360, 7, 116, 2, 2, 360, 122, 3, 2, 2, 2, 361, 362, 7, 110, 2, 2, 362, 363, 7, 99, 2, 2, 363, 364, 7, 111, 2, 2, 364, 365, 7, 100, 2, 2, 365, 366, 7, 102, 2, 2, 366, 367, 7, 99, 2, 2, 367, 124, 3, 2, 2, 2, 368, 369, 7, 47, 2, 2, 369, 370, 7, 64, 2, 2, 370, 126, 3, 2, 2, 2, 371, 372, 7, 118, 2, 2, 372, 373, 7, 116, 2, 2, 373, 374, 7, 119, 2, 2, 374, 375, 7, 103, 2, 2, 375, 128, 3, 2, 2, 2, 376, 377, 7, 104, 2, 2, 377, 378, 7, 99, 2, 2, 378, 379, 7, 110, 2, 2, 379, 380, 7, 117, 2, 2, 380, 381, 7, 103, 2, 2, 381, 130, 3, 2, 2, 2, 382, 383, 7, 112, 2, 2, 383, 384, 7, 119, 2, 2, 384, 385, 7, 110, 2, 2, 385, 386, 7, 110, 2, 2, 386, 132, 3, 2, 2, 2, 387, 389, 5, 143, 72, 2, 388, 387, 3, 2, 2, 2, 389, 390, 3, 2, 2, 2, 390, 388, 3, 2, 2, 2, 390, 391, 3, 2, 2, 2, 391, 134, 3, 2, 2, 2, 392, 394, 5, 143, 72, 2, 393, 392, 3, 2, 2, 2, 394, 395, 3, 2, 2, 2, 395, 393, 3, 2, 2, 2, 395, 396, 3, 2, 2, 2, 396, 397, 3, 2, 2, 2, 397, 399, 7, 48, 2, 2, 398, 400, 5, 143, 72, 2, 399, 398, 3, 2, 2, 2, 400, 401, 3, 2, 2, 2, 401, 399, 3, 2, 2, 2, 401, 402, 3, 2, 2, 2, 402, 412, 3, 2, 2, 2, 403, 405, 7, 103, 2, 2, 404, 406, 7, 47, 2, 2, 405, 404, 3, 2, 2, 2, 405, 406, 3, 2, 2, 2, 406, 408, 3, 2, 2, 2, 407, 409, 5, 143, 72, 2, 408, 407, 3, 2, 2, 2, 409, 410, 3, 2, 2, 2, 410, 408, 3, 2, 2, 2, 410, 411, 3, 2, 2, 2, 411, 413, 3, 2, 2, 2, 412, 403, 3, 2, 2, 2, 412, 413, 3, 2, 2, 2, 413, 136, 3, 2, 2, 2, 414, 420, 7, 41, 2, 2, 415, 419, 10, 2, 2, 2, 416, 417, 7, 94, 2, 2, 417, 419, 9, 3, 2, 2, 418, 415, 3, 2, 2, 2, 418, 416, 3, 2, 2, 2, 419, 422, 3, 2, 2, 2, 420, 418, 3, 2, 2, 2, 420, 421, 3, 2, 2, 2, 421, 423, 3, 2, 2, 2, 422, 420, 3, 2, 2, 2, 423, 424, 7, 41, 2, 2, 424, 138, 3, 2, 2, 2, 425, 431, 7, 36, 2, 2, 426, 430, 10, 4, 2, 2, 427, 428, 7, 94, 2, 2, 428, 430, 9, 5, 2, 2, 429, 426, 3, 2, 2, 2, 429, 427, 3, 2, 2, 2, 430, 433, 3, 2, 2, 2, 431, 429, 3, 2, 2, 2, 431, 432, 3, 2, 2, 2, 432, 434, 3, 2, 2, 2, 433, 431, 3, 2, 2, 2, 434, 435, 7, 36, 2, 2, 435, 140, 3, 2, 2, 2, 436, 440, 5, 145, 73, 2, 437, 439, 5, 147, 74, 2, 438, 437, 3, 2, 2, 2, 439, 442, 3, 2, 2, 2, 440, 438, 3, 2, 2, 2, 440, 441, 3, 2, 2, 2, 441, 142, 3, 2, 2, 2, 442, 440, 3, 2, 2, 2, 443, 444, 9, 6, 2, 2, 444, 144, 3, 2, 2, 2, 445, 446, 9, 7, 2, 2, 446, 146, 3, 2, 2, 2, 447, 451, 5, 145, 73, 2, 448, 451, 5, 143, 72, 2, 449, 451, 9, 8, 2, 2, 450, 447, 3, 2, 2, 2, 450, 448, 3, 2, 2, 2, 450, 449, 3, 2, 2, 2, 451, 148, 3, 2, 2, 2, 452, 453, 7, 47, 2, 2, 453, 454, 7, 47, 2, 2, 454, 458, 3, 2, 2, 2, 455, 457, 10, 9, 2, 2, 456, 455, 3, 2, 2, 2, 457, 460, 3, 2, 2, 2, 458, 456, 3, 2, 2, 2, 458, 459, 3, 2, 2, 2, 459, 461, 3, 2, 2, 2, 460, 458, 3, 2, 2, 2, 461, 462, 8, 75, 2, 2, 462, 150, 3, 2, 2, 2, 463, 465, 9, 10, 2, 2, 464, 463, 3, 2, 2, 2, 465, 466, 3, 2, 2, 2, 466, 464, 3, 2, 2, 2, 466, 467, 3, 2, 2, 2, 467, 468, 3, 2, 2, 2, 468, 469, 8, 76, 2, 2, 469, 152, 3, 2, 2, 2, 470, 471, 11, 2, 2, 2, 471, 154, 3, 2, 2, 2, 17, 2, 390, 395, 401, 405, 410, 412, 418, 420, 429, 431, 440, 450, 458, 466, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 75, 472, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 6, 67, 389, 10, 67, 13, 67, 14, 67, 390, 3, 68, 6, 68, 394, 10, 68, 13, 68, 14, 68, 395, 3, 68, 3, 68, 6, 68, 400, 10, 68, 13, 68, 14, 68, 401, 3, 68, 3, 68, 5, 68, 406, 10, 68, 3, 68, 6, 68, 409, 10, 68, 13, 68, 14, 68, 410, 5, 68, 413, 10, 68, 3, 69, 3, 69, 3, 69, 3, 69, 7, 69, 419, 10, 69, 12, 69, 14, 69, 422, 11, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, 7, 70, 430, 10, 70, 12, 70, 14, 70, 433, 11, 70, 3, 70, 3, 70, 3, 71, 3, 71, 7, 71, 439, 10, 71, 12, 71, 14, 71, 442, 11, 71, 3, 72, 3, 72, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 5, 74, 451, 10, 74, 3, 75, 3, 75, 3, 75, 3, 75, 7, 75, 457, 10, 75, 12, 75, 14, 75, 460, 11, 75, 3, 75, 3, 75, 3, 76, 6, 76, 465, 10, 76, 13, 76, 14, 76, 466, 3, 76, 3, 76, 3, 77, 3, 77, 2, 2, 78, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 2, 145, 2, 147, 2, 149, 73, 151, 74, 153, 75, 3, 2, 11, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 3, 2, 41, 41, 4, 2, 12, 12, 14, 15, 5, 2, 11, 12, 15, 15, 34, 34, 2, 483, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 3, 155, 3, 2, 2, 2, 5, 157, 3, 2, 2, 2, 7, 161, 3, 2, 2, 2, 9, 166, 3, 2, 2, 2, 11, 173, 3, 2, 2, 2, 13, 176, 3, 2, 2, 2, 15, 181, 3, 2, 2, 2, 17, 187, 3, 2, 2, 2, 19, 189, 3, 2, 2, 2, 21, 191, 3, 2, 2, 2, 23, 193, 3, 2, 2, 2, 25, 195, 3, 2, 2, 2, 27, 197, 3, 2, 2, 2, 29, 199, 3, 2, 2, 2, 31, 201, 3, 2, 2, 2, 33, 204, 3, 2, 2, 2, 35, 207, 3, 2, 2, 2, 37, 209, 3, 2, 2, 2, 39, 211, 3, 2, 2, 2, 41, 213, 3, 2, 2, 2, 43, 216, 3, 2, 2, 2, 45, 222, 3, 2, 2, 2, 47, 231, 3, 2, 2, 2, 49, 238, 3, 2, 2, 2, 51, 240, 3, 2, 2, 2, 53, 243, 3, 2, 2, 2, 55, 246, 3, 2, 2, 2, 57, 251, 3, 2, 2, 2, 59, 256, 3, 2, 2, 2, 61, 262, 3, 2, 2, 2, 63, 268, 3, 2, 2, 2, 65, 272, 3, 2, 2, 2, 67, 275, 3, 2, 2, 2, 69, 280, 3, 2, 2, 2, 71, 285, 3, 2, 2, 2, 73, 287, 3, 2, 2, 2, 75, 289, 3, 2, 2, 2, 77, 291, 3, 2, 2, 2, 79, 293, 3, 2, 2, 2, 81, 297, 3, 2, 2, 2, 83, 304, 3, 2, 2, 2, 85, 306, 3, 2, 2, 2, 87, 308, 3, 2, 2, 2, 89, 310, 3, 2, 2, 2, 91, 312, 3, 2, 2, 2, 93, 314, 3, 2, 2, 2, 95, 316, 3, 2, 2, 2, 97, 318, 3, 2, 2, 2, 99, 320, 3, 2, 2, 2, 101, 322, 3, 2, 2, 2, 103, 325, 3, 2, 2, 2, 105, 329, 3, 2, 2, 2, 107, 332, 3, 2, 2, 2, 109, 338, 3, 2, 2, 2, 111, 341, 3, 2, 2, 2, 113, 344, 3, 2, 2, 2, 115, 347, 3, 2, 2, 2, 117, 350, 3, 2, 2, 2, 119, 354, 3, 2, 2, 2, 121, 358, 3, 2, 2, 2, 123, 361, 3, 2, 2, 2, 125, 368, 3, 2, 2, 2, 127, 371, 3, 2, 2, 2, 129, 376, 3, 2, 2, 2, 131, 382, 3, 2, 2, 2, 133, 388, 3, 2, 2, 2, 135, 393, 3, 2, 2, 2, 137, 414, 3, 2, 2, 2, 139, 425, 3, 2, 2, 2, 141, 436, 3, 2, 2, 2, 143, 443, 3, 2, 2, 2, 145, 445, 3, 2, 2, 2, 147, 450, 3, 2, 2, 2, 149, 452, 3, 2, 2, 2, 151, 464, 3, 2, 2, 2, 153, 470, 3, 2, 2, 2, 155, 156, 7, 61, 2, 2, 156, 4, 3, 2, 2, 2, 157, 158, 7, 119, 2, 2, 158, 159, 7, 117, 2, 2, 159, 160, 7, 103, 2, 2, 160, 6, 3, 2, 2, 2, 161, 162, 7, 113, 2, 2, 162, 163, 7, 112, 2, 2, 163, 164, 7, 110, 2, 2, 164, 165, 7, 123, 2, 2, 165, 8, 3, 2, 2, 2, 166, 167, 7, 106, 2, 2, 167, 168, 7, 107, 2, 2, 168, 169, 7, 102, 2, 2, 169, 170, 7, 107, 2, 2, 170, 171, 7, 112, 2, 2, 171, 172, 7, 105, 2, 2, 172, 10, 3, 2, 2, 2, 173, 174, 7, 99, 2, 2, 174, 175, 7, 117, 2, 2, 175, 12, 3, 2, 2, 2, 176, 177, 7, 117, 2, 2, 177, 178, 7, 109, 2, 2, 178, 179, 7, 107, 2, 2, 179, 180, 7, 114, 2, 2, 180, 14, 3, 2, 2, 2, 181, 182, 7, 114, 2, 2, 182, 183, 7, 116, 2, 2, 183, 184, 7, 107, 2, 2, 184, 185, 7, 112, 2, 2, 185, 186, 7, 118, 2, 2, 186, 16, 3, 2, 2, 2, 187, 188, 7, 63, 2, 2, 188, 18, 3, 2, 2, 2, 189, 190, 7, 96, 2, 2, 190, 20, 3, 2, 2, 2, 191, 192, 7, 44, 2, 2, 192, 22, 3, 2, 2, 2, 193, 194, 7, 49, 2, 2, 194, 24, 3, 2, 2, 2, 195, 196, 7, 39, 2, 2, 196, 26, 3, 2, 2, 2, 197, 198, 7, 45, 2, 2, 198, 28, 3, 2, 2, 2, 199, 200, 7, 47, 2, 2, 200, 30, 3, 2, 2, 2, 201, 202, 7, 62, 2, 2, 202, 203, 7, 62, 2, 2, 203, 32, 3, 2, 2, 2, 204, 205, 7, 64, 2, 2, 205, 206, 7, 64, 2, 2, 206, 34, 3, 2, 2, 2, 207, 208, 7, 40, 2, 2, 208, 36, 3, 2, 2, 2, 209, 210, 7, 38, 2, 2, 210, 38, 3, 2, 2, 2, 211, 212, 7, 126, 2, 2, 212, 40, 3, 2, 2, 2, 213, 214, 7, 65, 2, 2, 214, 215, 7, 65, 2, 2, 215, 42, 3, 2, 2, 2, 216, 217, 7, 100, 2, 2, 217, 218, 7, 116, 2, 2, 218, 219, 7, 103, 2, 2, 219, 220, 7, 99, 2, 2, 220, 221, 7, 109, 2, 2, 221, 44, 3, 2, 2, 2, 222, 223, 7, 101, 2, 2, 223, 224, 7, 113, 2, 2, 224, 225, 7, 112, 2, 2, 225, 226, 7, 118, 2, 2, 226, 227, 7, 107, 2, 2, 227, 228, 7, 112, 2, 2, 228, 229, 7, 119, 2, 2, 229, 230, 7, 103, 2, 2, 230, 46, 3, 2, 2, 2, 231, 232, 7, 116, 2, 2, 232, 233, 7, 103, 2, 2, 233, 234, 7, 118, 2, 2, 234, 235, 7, 119, 2, 2, 235, 236, 7, 116, 2, 2, 236, 237, 7, 112, 2, 2, 237, 48, 3, 2, 2, 2, 238, 239, 7, 46, 2, 2, 239, 50, 3, 2, 2, 2, 240, 241, 7, 107, 2, 2, 241, 242, 7, 104, 2, 2, 242, 52, 3, 2, 2, 2, 243, 244, 7, 102, 2, 2, 244, 245, 7, 113, 2, 2, 245, 54, 3, 2, 2, 2, 246, 247, 7, 103, 2, 2, 247, 248, 7, 110, 2, 2, 248, 249, 7, 107, 2, 2, 249, 250, 7, 104, 2, 2, 250, 56, 3, 2, 2, 2, 251, 252, 7, 103, 2, 2, 252, 253, 7, 110, 2, 2, 253, 254, 7, 117, 2, 2, 254, 255, 7, 103, 2, 2, 255, 58, 3, 2, 2, 2, 256, 257, 7, 121, 2, 2, 257, 258, 7, 106, 2, 2, 258, 259, 7, 107, 2, 2, 259, 260, 7, 110, 2, 2, 260, 261, 7, 103, 2, 2, 261, 60, 3, 2, 2, 2, 262, 263, 7, 119, 2, 2, 263, 264, 7, 112, 2, 2, 264, 265, 7, 118, 2, 2, 265, 266, 7, 107, 2, 2, 266, 267, 7, 110, 2, 2, 267, 62, 3, 2, 2, 2, 268, 269, 7, 104, 2, 2, 269, 270, 7, 113, 2, 2, 270, 271, 7, 116, 2, 2, 271, 64, 3, 2, 2, 2, 272, 273, 7, 107, 2, 2, 273, 274, 7, 112, 2, 2, 274, 66, 3, 2, 2, 2, 275, 276, 7, 117, 2, 2, 276, 277, 7, 118, 2, 2, 277, 278, 7, 103, 2, 2, 278, 279, 7, 114, 2, 2, 279, 68, 3, 2, 2, 2, 280, 281, 7, 104, 2, 2, 281, 282, 7, 119, 2, 2, 282, 283, 7, 112, 2, 2, 283, 284, 7, 101, 2, 2, 284, 70, 3, 2, 2, 2, 285, 286, 7, 62, 2, 2, 286, 72, 3, 2, 2, 2, 287, 288, 7, 64, 2, 2, 288, 74, 3, 2, 2, 2, 289, 290, 7, 42, 2, 2, 290, 76, 3, 2, 2, 2, 291, 292, 7, 43, 2, 2, 292, 78, 3, 2, 2, 2, 293, 294, 7, 102, 2, 2, 294, 295, 7, 103, 2, 2, 295, 296, 7, 104, 2, 2, 296, 80, 3, 2, 2, 2, 297, 298, 7, 103, 2, 2, 298, 299, 7, 122, 2, 2, 299, 300, 7, 118, 2, 2, 300, 301, 7, 103, 2, 2, 301, 302, 7, 116, 2, 2, 302, 303, 7, 112, 2, 2, 303, 82, 3, 2, 2, 2, 304, 305, 7, 60, 2, 2, 305, 84, 3, 2, 2, 2, 306, 307, 7, 125, 2, 2, 307, 86, 3, 2, 2, 2, 308, 309, 7, 127, 2, 2, 309, 88, 3, 2, 2, 2, 310, 311, 7, 93, 2, 2, 311, 90, 3, 2, 2, 2, 312, 313, 7, 95, 2, 2, 313, 92, 3, 2, 2, 2, 314, 315, 7, 65, 2, 2, 315, 94, 3, 2, 2, 2, 316, 317, 7, 48, 2, 2, 317, 96, 3, 2, 2, 2, 318, 319, 7, 35, 2, 2, 319, 98, 3, 2, 2, 2, 320, 321, 7, 128, 2, 2, 321, 100, 3, 2, 2, 2, 322, 323, 7, 48, 2, 2, 323, 324, 7, 48, 2, 2, 324, 102, 3, 2, 2, 2, 325, 326, 7, 48, 2, 2, 326, 327, 7, 48, 2, 2, 327, 328, 7, 48, 2, 2, 328, 104, 3, 2, 2, 2, 329, 330, 7, 107, 2, 2, 330, 331, 7, 117, 2, 2, 331, 106, 3, 2, 2, 2, 332, 333, 7, 107, 2, 2, 333, 334, 7, 117, 2, 2, 334, 335, 7, 112, 2, 2, 335, 336, 7, 41, 2, 2, 336, 337, 7, 118, 2, 2, 337, 108, 3, 2, 2, 2, 338, 339, 7, 63, 2, 2, 339, 340, 7, 63, 2, 2, 340, 110, 3, 2, 2, 2, 341, 342, 7, 35, 2, 2, 342, 343, 7, 63, 2, 2, 343, 112, 3, 2, 2, 2, 344, 345, 7, 62, 2, 2, 345, 346, 7, 63, 2, 2, 346, 114, 3, 2, 2, 2, 347, 348, 7, 64, 2, 2, 348, 349, 7, 63, 2, 2, 349, 116, 3, 2, 2, 2, 350, 351, 7, 112, 2, 2, 351, 352, 7, 113, 2, 2, 352, 353, 7, 118, 2, 2, 353, 118, 3, 2, 2, 2, 354, 355, 7, 99, 2, 2, 355, 356, 7, 112, 2, 2, 356, 357, 7, 102, 2, 2, 357, 120, 3, 2, 2, 2, 358, 359, 7, 113, 2, 2, 359, 360, 7, 116, 2, 2, 360, 122, 3, 2, 2, 2, 361, 362, 7, 110, 2, 2, 362, 363, 7, 99, 2, 2, 363, 364, 7, 111, 2, 2, 364, 365, 7, 100, 2, 2, 365, 366, 7, 102, 2, 2, 366, 367, 7, 99, 2, 2, 367, 124, 3, 2, 2, 2, 368, 369, 7, 47, 2, 2, 369, 370, 7, 64, 2, 2, 370, 126, 3, 2, 2, 2, 371, 372, 7, 118, 2, 2, 372, 373, 7, 116, 2, 2, 373, 374, 7, 119, 2, 2, 374, 375, 7, 103, 2, 2, 375, 128, 3, 2, 2, 2, 376, 377, 7, 104, 2, 2, 377, 378, 7, 99, 2, 2, 378, 379, 7, 110, 2, 2, 379, 380, 7, 117, 2, 2, 380, 381, 7, 103, 2, 2, 381, 130, 3, 2, 2, 2, 382, 383, 7, 112, 2, 2, 383, 384, 7, 119, 2, 2, 384, 385, 7, 110, 2, 2, 385, 386, 7, 110, 2, 2, 386, 132, 3, 2, 2, 2, 387, 389, 5, 143, 72, 2, 388, 387, 3, 2, 2, 2, 389, 390, 3, 2, 2, 2, 390, 388, 3, 2, 2, 2, 390, 391, 3, 2, 2, 2, 391, 134, 3, 2, 2, 2, 392, 394, 5, 143, 72, 2, 393, 392, 3, 2, 2, 2, 394, 395, 3, 2, 2, 2, 395, 393, 3, 2, 2, 2, 395, 396, 3, 2, 2, 2, 396, 397, 3, 2, 2, 2, 397, 399, 7, 48, 2, 2, 398, 400, 5, 143, 72, 2, 399, 398, 3, 2, 2, 2, 400, 401, 3, 2, 2, 2, 401, 399, 3, 2, 2, 2, 401, 402, 3, 2, 2, 2, 402, 412, 3, 2, 2, 2, 403, 405, 7, 103, 2, 2, 404, 406, 7, 47, 2, 2, 405, 404, 3, 2, 2, 2, 405, 406, 3, 2, 2, 2, 406, 408, 3, 2, 2, 2, 407, 409, 5, 143, 72, 2, 408, 407, 3, 2, 2, 2, 409, 410, 3, 2, 2, 2, 410, 408, 3, 2, 2, 2, 410, 411, 3, 2, 2, 2, 411, 413, 3, 2, 2, 2, 412, 403, 3, 2, 2, 2, 412, 413, 3, 2, 2, 2, 413, 136, 3, 2, 2, 2, 414, 420, 7, 41, 2, 2, 415, 419, 10, 2, 2, 2, 416, 417, 7, 94, 2, 2, 417, 419, 9, 3, 2, 2, 418, 415, 3, 2, 2, 2, 418, 416, 3, 2, 2, 2, 419, 422, 3, 2, 2, 2, 420, 418, 3, 2, 2, 2, 420, 421, 3, 2, 2, 2, 421, 423, 3, 2, 2, 2, 422, 420, 3, 2, 2, 2, 423, 424, 7, 41, 2, 2, 424, 138, 3, 2, 2, 2, 425, 431, 7, 36, 2, 2, 426, 430, 10, 4, 2, 2, 427, 428, 7, 94, 2, 2, 428, 430, 9, 5, 2, 2, 429, 426, 3, 2, 2, 2, 429, 427, 3, 2, 2, 2, 430, 433, 3, 2, 2, 2, 431, 429, 3, 2, 2, 2, 431, 432, 3, 2, 2, 2, 432, 434, 3, 2, 2, 2, 433, 431, 3, 2, 2, 2, 434, 435, 7, 36, 2, 2, 435, 140, 3, 2, 2, 2, 436, 440, 5, 145, 73, 2, 437, 439, 5, 147, 74, 2, 438, 437, 3, 2, 2, 2, 439, 442, 3, 2, 2, 2, 440, 438, 3, 2, 2, 2, 440, 441, 3, 2, 2, 2, 441, 142, 3, 2, 2, 2, 442, 440, 3, 2, 2, 2, 443, 444, 9, 6, 2, 2, 444, 144, 3, 2, 2, 2, 445, 446, 9, 7, 2, 2, 446, 146, 3, 2, 2, 2, 447, 451, 5, 145, 73, 2, 448, 451, 5, 143, 72, 2, 449, 451, 9, 8, 2, 2, 450, 447, 3, 2, 2, 2, 450, 448, 3, 2, 2, 2, 450, 449, 3, 2, 2, 2, 451, 148, 3, 2, 2, 2, 452, 453, 7, 47, 2, 2, 453, 454, 7, 47, 2, 2, 454, 458, 3, 2, 2, 2, 455, 457, 10, 9, 2, 2, 456, 455, 3, 2, 2, 2, 457, 460, 3, 2, 2, 2, 458, 456, 3, 2, 2, 2, 458, 459, 3, 2, 2, 2, 459, 461, 3, 2, 2, 2, 460, 458, 3, 2, 2, 2, 461, 462, 8, 75, 2, 2, 462, 150, 3, 2, 2, 2, 463, 465, 9, 10, 2, 2, 464, 463, 3, 2, 2, 2, 465, 466, 3, 2, 2, 2, 466, 464, 3, 2, 2, 2, 466, 467, 3, 2, 2, 2, 467, 468, 3, 2, 2, 2, 468, 469, 8, 76, 2, 2, 469, 152, 3, 2, 2, 2, 470, 471, 11, 2, 2, 2, 471, 154, 3, 2, 2, 2, 17, 2, 390, 395, 401, 405, 410, 412, 418, 420, 429, 431, 440, 450, 458, 466, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py index d9521b91..cf615f84 100644 --- a/src/antlr/PyxellLexer.py +++ b/src/antlr/PyxellLexer.py @@ -31,25 +31,25 @@ def serializedATN(): buf.write("\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35\3\36\3\36\3\36") buf.write("\3\36\3\36\3\36\3\37\3\37\3\37\3\37\3\37\3\37\3 \3 \3") buf.write(" \3 \3!\3!\3!\3\"\3\"\3\"\3\"\3\"\3#\3#\3#\3#\3#\3$\3") - buf.write("$\3%\3%\3&\3&\3&\3&\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3(\3(") - buf.write("\3)\3)\3*\3*\3+\3+\3,\3,\3-\3-\3.\3.\3/\3/\3\60\3\60\3") - buf.write("\61\3\61\3\61\3\62\3\62\3\62\3\62\3\63\3\63\3\63\3\64") - buf.write("\3\64\3\64\3\64\3\64\3\64\3\65\3\65\3\65\3\66\3\66\3\66") - buf.write("\3\67\3\67\38\38\38\39\39\3:\3:\3:\3;\3;\3;\3;\3<\3<\3") - buf.write("<\3<\3=\3=\3=\3>\3>\3>\3>\3>\3>\3>\3?\3?\3?\3@\3@\3@\3") - buf.write("@\3@\3A\3A\3A\3A\3A\3A\3B\3B\3B\3B\3B\3C\6C\u0185\nC\r") - buf.write("C\16C\u0186\3D\6D\u018a\nD\rD\16D\u018b\3D\3D\6D\u0190") - buf.write("\nD\rD\16D\u0191\3D\3D\5D\u0196\nD\3D\6D\u0199\nD\rD\16") - buf.write("D\u019a\5D\u019d\nD\3E\3E\3E\3E\7E\u01a3\nE\fE\16E\u01a6") - buf.write("\13E\3E\3E\3F\3F\3F\3F\7F\u01ae\nF\fF\16F\u01b1\13F\3") - buf.write("F\3F\3G\3G\7G\u01b7\nG\fG\16G\u01ba\13G\3H\3H\3I\3I\3") - buf.write("J\3J\3J\5J\u01c3\nJ\3K\3K\3K\3K\7K\u01c9\nK\fK\16K\u01cc") - buf.write("\13K\3K\3K\3L\6L\u01d1\nL\rL\16L\u01d2\3L\3L\3M\3M\2\2") - buf.write("N\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31") - buf.write("\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31") - buf.write("\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O") - buf.write(")Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k\67m8o9q:s;") - buf.write("u{?}@\177A\u0081B\u0083C\u0085D\u0087E\u0089F\u008b") + buf.write("$\3%\3%\3&\3&\3\'\3\'\3(\3(\3(\3(\3)\3)\3)\3)\3)\3)\3") + buf.write(")\3*\3*\3+\3+\3,\3,\3-\3-\3.\3.\3/\3/\3\60\3\60\3\61\3") + buf.write("\61\3\62\3\62\3\63\3\63\3\63\3\64\3\64\3\64\3\64\3\65") + buf.write("\3\65\3\65\3\66\3\66\3\66\3\66\3\66\3\66\3\67\3\67\3\67") + buf.write("\38\38\38\39\39\39\3:\3:\3:\3;\3;\3;\3;\3<\3<\3<\3<\3") + buf.write("=\3=\3=\3>\3>\3>\3>\3>\3>\3>\3?\3?\3?\3@\3@\3@\3@\3@\3") + buf.write("A\3A\3A\3A\3A\3A\3B\3B\3B\3B\3B\3C\6C\u0185\nC\rC\16C") + buf.write("\u0186\3D\6D\u018a\nD\rD\16D\u018b\3D\3D\6D\u0190\nD\r") + buf.write("D\16D\u0191\3D\3D\5D\u0196\nD\3D\6D\u0199\nD\rD\16D\u019a") + buf.write("\5D\u019d\nD\3E\3E\3E\3E\7E\u01a3\nE\fE\16E\u01a6\13E") + buf.write("\3E\3E\3F\3F\3F\3F\7F\u01ae\nF\fF\16F\u01b1\13F\3F\3F") + buf.write("\3G\3G\7G\u01b7\nG\fG\16G\u01ba\13G\3H\3H\3I\3I\3J\3J") + buf.write("\3J\5J\u01c3\nJ\3K\3K\3K\3K\7K\u01c9\nK\fK\16K\u01cc\13") + buf.write("K\3K\3K\3L\6L\u01d1\nL\rL\16L\u01d2\3L\3L\3M\3M\2\2N\3") + buf.write("\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16") + buf.write("\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61") + buf.write("\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*") + buf.write("S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k\67m8o9q:s;u{?}@\177A\u0081B\u0083C\u0085D\u0087E\u0089F\u008b") buf.write("G\u008dH\u008f\2\u0091\2\u0093\2\u0095I\u0097J\u0099K") buf.write("\3\2\13\4\2))^^\6\2))^^ppvv\4\2$$^^\6\2$$^^ppvv\3\2\62") buf.write(";\5\2C\\aac|\3\2))\4\2\f\f\16\17\5\2\13\f\17\17\"\"\2") @@ -80,12 +80,12 @@ def serializedATN(): buf.write("\2\2\65\u00f3\3\2\2\2\67\u00f6\3\2\2\29\u00fb\3\2\2\2") buf.write(";\u0100\3\2\2\2=\u0106\3\2\2\2?\u010c\3\2\2\2A\u0110\3") buf.write("\2\2\2C\u0113\3\2\2\2E\u0118\3\2\2\2G\u011d\3\2\2\2I\u011f") - buf.write("\3\2\2\2K\u0121\3\2\2\2M\u0125\3\2\2\2O\u012c\3\2\2\2") - buf.write("Q\u012e\3\2\2\2S\u0130\3\2\2\2U\u0132\3\2\2\2W\u0134\3") + buf.write("\3\2\2\2K\u0121\3\2\2\2M\u0123\3\2\2\2O\u0125\3\2\2\2") + buf.write("Q\u0129\3\2\2\2S\u0130\3\2\2\2U\u0132\3\2\2\2W\u0134\3") buf.write("\2\2\2Y\u0136\3\2\2\2[\u0138\3\2\2\2]\u013a\3\2\2\2_\u013c") - buf.write("\3\2\2\2a\u013e\3\2\2\2c\u0141\3\2\2\2e\u0145\3\2\2\2") - buf.write("g\u0148\3\2\2\2i\u014e\3\2\2\2k\u0151\3\2\2\2m\u0154\3") - buf.write("\2\2\2o\u0156\3\2\2\2q\u0159\3\2\2\2s\u015b\3\2\2\2u\u015e") + buf.write("\3\2\2\2a\u013e\3\2\2\2c\u0140\3\2\2\2e\u0142\3\2\2\2") + buf.write("g\u0145\3\2\2\2i\u0149\3\2\2\2k\u014c\3\2\2\2m\u0152\3") + buf.write("\2\2\2o\u0155\3\2\2\2q\u0158\3\2\2\2s\u015b\3\2\2\2u\u015e") buf.write("\3\2\2\2w\u0162\3\2\2\2y\u0166\3\2\2\2{\u0169\3\2\2\2") buf.write("}\u0170\3\2\2\2\177\u0173\3\2\2\2\u0081\u0178\3\2\2\2") buf.write("\u0083\u017e\3\2\2\2\u0085\u0184\3\2\2\2\u0087\u0189\3") @@ -136,32 +136,32 @@ def serializedATN(): buf.write("\7v\2\2\u0115\u0116\7g\2\2\u0116\u0117\7r\2\2\u0117D\3") buf.write("\2\2\2\u0118\u0119\7h\2\2\u0119\u011a\7w\2\2\u011a\u011b") buf.write("\7p\2\2\u011b\u011c\7e\2\2\u011cF\3\2\2\2\u011d\u011e") - buf.write("\7*\2\2\u011eH\3\2\2\2\u011f\u0120\7+\2\2\u0120J\3\2\2") - buf.write("\2\u0121\u0122\7f\2\2\u0122\u0123\7g\2\2\u0123\u0124\7") - buf.write("h\2\2\u0124L\3\2\2\2\u0125\u0126\7g\2\2\u0126\u0127\7") - buf.write("z\2\2\u0127\u0128\7v\2\2\u0128\u0129\7g\2\2\u0129\u012a") - buf.write("\7t\2\2\u012a\u012b\7p\2\2\u012bN\3\2\2\2\u012c\u012d") - buf.write("\7<\2\2\u012dP\3\2\2\2\u012e\u012f\7}\2\2\u012fR\3\2\2") - buf.write("\2\u0130\u0131\7\177\2\2\u0131T\3\2\2\2\u0132\u0133\7") - buf.write("]\2\2\u0133V\3\2\2\2\u0134\u0135\7_\2\2\u0135X\3\2\2\2") - buf.write("\u0136\u0137\7A\2\2\u0137Z\3\2\2\2\u0138\u0139\7\60\2") - buf.write("\2\u0139\\\3\2\2\2\u013a\u013b\7#\2\2\u013b^\3\2\2\2\u013c") - buf.write("\u013d\7\u0080\2\2\u013d`\3\2\2\2\u013e\u013f\7\60\2\2") - buf.write("\u013f\u0140\7\60\2\2\u0140b\3\2\2\2\u0141\u0142\7\60") - buf.write("\2\2\u0142\u0143\7\60\2\2\u0143\u0144\7\60\2\2\u0144d") - buf.write("\3\2\2\2\u0145\u0146\7k\2\2\u0146\u0147\7u\2\2\u0147f") - buf.write("\3\2\2\2\u0148\u0149\7k\2\2\u0149\u014a\7u\2\2\u014a\u014b") - buf.write("\7p\2\2\u014b\u014c\7)\2\2\u014c\u014d\7v\2\2\u014dh\3") - buf.write("\2\2\2\u014e\u014f\7?\2\2\u014f\u0150\7?\2\2\u0150j\3") - buf.write("\2\2\2\u0151\u0152\7#\2\2\u0152\u0153\7?\2\2\u0153l\3") - buf.write("\2\2\2\u0154\u0155\7>\2\2\u0155n\3\2\2\2\u0156\u0157\7") - buf.write(">\2\2\u0157\u0158\7?\2\2\u0158p\3\2\2\2\u0159\u015a\7") - buf.write("@\2\2\u015ar\3\2\2\2\u015b\u015c\7@\2\2\u015c\u015d\7") - buf.write("?\2\2\u015dt\3\2\2\2\u015e\u015f\7p\2\2\u015f\u0160\7") - buf.write("q\2\2\u0160\u0161\7v\2\2\u0161v\3\2\2\2\u0162\u0163\7") - buf.write("c\2\2\u0163\u0164\7p\2\2\u0164\u0165\7f\2\2\u0165x\3\2") - buf.write("\2\2\u0166\u0167\7q\2\2\u0167\u0168\7t\2\2\u0168z\3\2") - buf.write("\2\2\u0169\u016a\7n\2\2\u016a\u016b\7c\2\2\u016b\u016c") + buf.write("\7>\2\2\u011eH\3\2\2\2\u011f\u0120\7@\2\2\u0120J\3\2\2") + buf.write("\2\u0121\u0122\7*\2\2\u0122L\3\2\2\2\u0123\u0124\7+\2") + buf.write("\2\u0124N\3\2\2\2\u0125\u0126\7f\2\2\u0126\u0127\7g\2") + buf.write("\2\u0127\u0128\7h\2\2\u0128P\3\2\2\2\u0129\u012a\7g\2") + buf.write("\2\u012a\u012b\7z\2\2\u012b\u012c\7v\2\2\u012c\u012d\7") + buf.write("g\2\2\u012d\u012e\7t\2\2\u012e\u012f\7p\2\2\u012fR\3\2") + buf.write("\2\2\u0130\u0131\7<\2\2\u0131T\3\2\2\2\u0132\u0133\7}") + buf.write("\2\2\u0133V\3\2\2\2\u0134\u0135\7\177\2\2\u0135X\3\2\2") + buf.write("\2\u0136\u0137\7]\2\2\u0137Z\3\2\2\2\u0138\u0139\7_\2") + buf.write("\2\u0139\\\3\2\2\2\u013a\u013b\7A\2\2\u013b^\3\2\2\2\u013c") + buf.write("\u013d\7\60\2\2\u013d`\3\2\2\2\u013e\u013f\7#\2\2\u013f") + buf.write("b\3\2\2\2\u0140\u0141\7\u0080\2\2\u0141d\3\2\2\2\u0142") + buf.write("\u0143\7\60\2\2\u0143\u0144\7\60\2\2\u0144f\3\2\2\2\u0145") + buf.write("\u0146\7\60\2\2\u0146\u0147\7\60\2\2\u0147\u0148\7\60") + buf.write("\2\2\u0148h\3\2\2\2\u0149\u014a\7k\2\2\u014a\u014b\7u") + buf.write("\2\2\u014bj\3\2\2\2\u014c\u014d\7k\2\2\u014d\u014e\7u") + buf.write("\2\2\u014e\u014f\7p\2\2\u014f\u0150\7)\2\2\u0150\u0151") + buf.write("\7v\2\2\u0151l\3\2\2\2\u0152\u0153\7?\2\2\u0153\u0154") + buf.write("\7?\2\2\u0154n\3\2\2\2\u0155\u0156\7#\2\2\u0156\u0157") + buf.write("\7?\2\2\u0157p\3\2\2\2\u0158\u0159\7>\2\2\u0159\u015a") + buf.write("\7?\2\2\u015ar\3\2\2\2\u015b\u015c\7@\2\2\u015c\u015d") + buf.write("\7?\2\2\u015dt\3\2\2\2\u015e\u015f\7p\2\2\u015f\u0160") + buf.write("\7q\2\2\u0160\u0161\7v\2\2\u0161v\3\2\2\2\u0162\u0163") + buf.write("\7c\2\2\u0163\u0164\7p\2\2\u0164\u0165\7f\2\2\u0165x\3") + buf.write("\2\2\2\u0166\u0167\7q\2\2\u0167\u0168\7t\2\2\u0168z\3") + buf.write("\2\2\2\u0169\u016a\7n\2\2\u016a\u016b\7c\2\2\u016b\u016c") buf.write("\7o\2\2\u016c\u016d\7d\2\2\u016d\u016e\7f\2\2\u016e\u016f") buf.write("\7c\2\2\u016f|\3\2\2\2\u0170\u0171\7/\2\2\u0171\u0172") buf.write("\7@\2\2\u0172~\3\2\2\2\u0173\u0174\7v\2\2\u0174\u0175") @@ -301,10 +301,10 @@ class PyxellLexer(Lexer): "'='", "'^'", "'*'", "'/'", "'%'", "'+'", "'-'", "'<<'", "'>>'", "'&'", "'$'", "'|'", "'??'", "'break'", "'continue'", "'return'", "','", "'if'", "'do'", "'elif'", "'else'", "'while'", "'until'", - "'for'", "'in'", "'step'", "'func'", "'('", "')'", "'def'", - "'extern'", "':'", "'{'", "'}'", "'['", "']'", "'?'", "'.'", - "'!'", "'~'", "'..'", "'...'", "'is'", "'isn't'", "'=='", "'!='", - "'<'", "'<='", "'>'", "'>='", "'not'", "'and'", "'or'", "'lambda'", + "'for'", "'in'", "'step'", "'func'", "'<'", "'>'", "'('", "')'", + "'def'", "'extern'", "':'", "'{'", "'}'", "'['", "']'", "'?'", + "'.'", "'!'", "'~'", "'..'", "'...'", "'is'", "'isn't'", "'=='", + "'!='", "'<='", "'>='", "'not'", "'and'", "'or'", "'lambda'", "'->'", "'true'", "'false'", "'null'" ] symbolicNames = [ "", diff --git a/src/antlr/PyxellLexer.tokens b/src/antlr/PyxellLexer.tokens index cae091a4..18963984 100644 --- a/src/antlr/PyxellLexer.tokens +++ b/src/antlr/PyxellLexer.tokens @@ -105,28 +105,28 @@ ERR=73 'in'=32 'step'=33 'func'=34 -'('=35 -')'=36 -'def'=37 -'extern'=38 -':'=39 -'{'=40 -'}'=41 -'['=42 -']'=43 -'?'=44 -'.'=45 -'!'=46 -'~'=47 -'..'=48 -'...'=49 -'is'=50 -'isn\'t'=51 -'=='=52 -'!='=53 -'<'=54 -'<='=55 -'>'=56 +'<'=35 +'>'=36 +'('=37 +')'=38 +'def'=39 +'extern'=40 +':'=41 +'{'=42 +'}'=43 +'['=44 +']'=45 +'?'=46 +'.'=47 +'!'=48 +'~'=49 +'..'=50 +'...'=51 +'is'=52 +'isn\'t'=53 +'=='=54 +'!='=55 +'<='=56 '>='=57 'not'=58 'and'=59 diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index 25c93a78..281b3e90 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -9,7 +9,7 @@ def serializedATN(): with StringIO() as buf: buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3K") - buf.write("\u018e\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\u0194\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16") buf.write("\t\16\4\17\t\17\4\20\t\20\3\2\7\2\"\n\2\f\2\16\2%\13\2") buf.write("\3\2\3\2\3\3\3\3\3\3\3\3\5\3-\n\3\3\4\3\4\3\4\3\4\3\4") @@ -20,189 +20,193 @@ def serializedATN(): buf.write("\6\3\6\3\6\3\6\3\6\7\6j\n\6\f\6\16\6m\13\6\3\6\3\6\3\6") buf.write("\5\6r\n\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6") buf.write("\3\6\3\6\3\6\3\6\3\6\5\6\u0084\n\6\3\6\3\6\3\6\3\6\3\6") - buf.write("\3\6\3\6\3\6\3\6\7\6\u008f\n\6\f\6\16\6\u0092\13\6\3\6") - buf.write("\5\6\u0095\n\6\3\6\3\6\5\6\u0099\n\6\3\6\3\6\3\6\3\6\5") - buf.write("\6\u009f\n\6\5\6\u00a1\n\6\3\7\3\7\3\7\3\7\5\7\u00a7\n") - buf.write("\7\3\b\3\b\6\b\u00ab\n\b\r\b\16\b\u00ac\3\b\3\b\3\t\3") - buf.write("\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\7\t\u00bb\n\t\f\t\16") - buf.write("\t\u00be\13\t\3\t\5\t\u00c1\n\t\3\t\3\t\3\t\3\t\6\t\u00c7") - buf.write("\n\t\r\t\16\t\u00c8\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") - buf.write("\t\7\t\u00d4\n\t\f\t\16\t\u00d7\13\t\3\t\5\t\u00da\n\t") - buf.write("\3\t\3\t\5\t\u00de\n\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") + buf.write("\3\6\3\6\3\6\3\6\5\6\u008f\n\6\3\6\3\6\3\6\3\6\7\6\u0095") + buf.write("\n\6\f\6\16\6\u0098\13\6\3\6\5\6\u009b\n\6\3\6\3\6\5\6") + buf.write("\u009f\n\6\3\6\3\6\3\6\3\6\5\6\u00a5\n\6\5\6\u00a7\n\6") + buf.write("\3\7\3\7\3\7\3\7\5\7\u00ad\n\7\3\b\3\b\6\b\u00b1\n\b\r") + buf.write("\b\16\b\u00b2\3\b\3\b\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") + buf.write("\3\t\3\t\7\t\u00c1\n\t\f\t\16\t\u00c4\13\t\3\t\5\t\u00c7") + buf.write("\n\t\3\t\3\t\3\t\3\t\6\t\u00cd\n\t\r\t\16\t\u00ce\3\t") + buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\7\t\u00da\n\t\f\t\16") + buf.write("\t\u00dd\13\t\3\t\5\t\u00e0\n\t\3\t\3\t\5\t\u00e4\n\t") buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") buf.write("\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") - buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\5\t\u010f") - buf.write("\n\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\5\t\u0118\n\t\3\t\3\t") - buf.write("\5\t\u011c\n\t\3\t\3\t\5\t\u0120\n\t\5\t\u0122\n\t\3\t") - buf.write("\3\t\3\t\5\t\u0127\n\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\7\t") - buf.write("\u0130\n\t\f\t\16\t\u0133\13\t\3\t\5\t\u0136\n\t\3\t\3") - buf.write("\t\3\t\3\t\3\t\7\t\u013d\n\t\f\t\16\t\u0140\13\t\3\n\3") - buf.write("\n\3\n\7\n\u0145\n\n\f\n\16\n\u0148\13\n\3\n\3\n\3\13") - buf.write("\3\13\3\13\3\f\3\f\3\f\3\f\3\f\3\f\5\f\u0155\n\f\3\f\3") - buf.write("\f\5\f\u0159\n\f\3\r\3\r\5\r\u015d\n\r\3\r\3\r\3\16\3") - buf.write("\16\3\16\3\16\3\16\3\16\3\16\5\16\u0168\n\16\3\17\3\17") - buf.write("\7\17\u016c\n\17\f\17\16\17\u016f\13\17\3\17\3\17\3\20") - buf.write("\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20") - buf.write("\5\20\u017f\n\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3") - buf.write("\20\7\20\u0189\n\20\f\20\16\20\u018c\13\20\3\20\2\4\20") - buf.write("\36\21\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36\2\f\3\2") - buf.write("\13\26\3\2\27\30\4\2\17\20\61\61\3\2\f\16\3\2\17\20\3") - buf.write("\2\21\22\3\2\62\63\3\2\64\65\3\2\66;\3\2AB\2\u01d4\2#") - buf.write("\3\2\2\2\4,\3\2\2\2\6V\3\2\2\2\bX\3\2\2\2\n\u00a0\3\2") - buf.write("\2\2\f\u00a2\3\2\2\2\16\u00a8\3\2\2\2\20\u00dd\3\2\2\2") - buf.write("\22\u0146\3\2\2\2\24\u014b\3\2\2\2\26\u0158\3\2\2\2\30") - buf.write("\u015c\3\2\2\2\32\u0167\3\2\2\2\34\u016d\3\2\2\2\36\u017e") - buf.write("\3\2\2\2 \"\5\4\3\2! \3\2\2\2\"%\3\2\2\2#!\3\2\2\2#$\3") - buf.write("\2\2\2$&\3\2\2\2%#\3\2\2\2&\'\7\2\2\3\'\3\3\2\2\2()\5") - buf.write("\6\4\2)*\7\3\2\2*-\3\2\2\2+-\5\n\6\2,(\3\2\2\2,+\3\2\2") - buf.write("\2-\5\3\2\2\2./\7\4\2\2/\66\7H\2\2\60\61\7\5\2\2\61\67") - buf.write("\5\34\17\2\62\63\7\6\2\2\63\67\5\34\17\2\64\65\7\7\2\2") - buf.write("\65\67\7H\2\2\66\60\3\2\2\2\66\62\3\2\2\2\66\64\3\2\2") - buf.write("\2\66\67\3\2\2\2\67W\3\2\2\28W\7\b\2\29;\7\t\2\2:<\5\22") - buf.write("\n\2;:\3\2\2\2;<\3\2\2\2\5\36\20\2>A\7H\2") - buf.write("\2?@\7\n\2\2@B\5\22\n\2A?\3\2\2\2AB\3\2\2\2BW\3\2\2\2") - buf.write("CD\5\b\5\2DE\7\n\2\2EG\3\2\2\2FC\3\2\2\2GJ\3\2\2\2HF\3") - buf.write("\2\2\2HI\3\2\2\2IK\3\2\2\2JH\3\2\2\2KW\5\22\n\2LM\5\20") - buf.write("\t\2MN\t\2\2\2NO\7\n\2\2OP\5\20\t\2PW\3\2\2\2QW\t\3\2") - buf.write("\2RT\7\31\2\2SU\5\22\n\2TS\3\2\2\2TU\3\2\2\2UW\3\2\2\2") - buf.write("V.\3\2\2\2V8\3\2\2\2V9\3\2\2\2V=\3\2\2\2VH\3\2\2\2VL\3") - buf.write("\2\2\2VQ\3\2\2\2VR\3\2\2\2W\7\3\2\2\2X]\5\20\t\2YZ\7\32") - buf.write("\2\2Z\\\5\20\t\2[Y\3\2\2\2\\_\3\2\2\2][\3\2\2\2]^\3\2") - buf.write("\2\2^\t\3\2\2\2_]\3\2\2\2`a\7\33\2\2ab\5\20\t\2bc\7\34") - buf.write("\2\2ck\5\16\b\2de\7\35\2\2ef\5\20\t\2fg\7\34\2\2gh\5\16") - buf.write("\b\2hj\3\2\2\2id\3\2\2\2jm\3\2\2\2ki\3\2\2\2kl\3\2\2\2") - buf.write("lq\3\2\2\2mk\3\2\2\2no\7\36\2\2op\7\34\2\2pr\5\16\b\2") - buf.write("qn\3\2\2\2qr\3\2\2\2r\u00a1\3\2\2\2st\7\37\2\2tu\5\20") - buf.write("\t\2uv\7\34\2\2vw\5\16\b\2w\u00a1\3\2\2\2xy\7 \2\2yz\5") - buf.write("\20\t\2z{\7\34\2\2{|\5\16\b\2|\u00a1\3\2\2\2}~\7!\2\2") - buf.write("~\177\5\22\n\2\177\u0080\7\"\2\2\u0080\u0083\5\22\n\2") - buf.write("\u0081\u0082\7#\2\2\u0082\u0084\5\22\n\2\u0083\u0081\3") - buf.write("\2\2\2\u0083\u0084\3\2\2\2\u0084\u0085\3\2\2\2\u0085\u0086") - buf.write("\7\34\2\2\u0086\u0087\5\16\b\2\u0087\u00a1\3\2\2\2\u0088") - buf.write("\u0089\7$\2\2\u0089\u008a\7H\2\2\u008a\u0090\7%\2\2\u008b") - buf.write("\u008c\5\f\7\2\u008c\u008d\7\32\2\2\u008d\u008f\3\2\2") - buf.write("\2\u008e\u008b\3\2\2\2\u008f\u0092\3\2\2\2\u0090\u008e") - buf.write("\3\2\2\2\u0090\u0091\3\2\2\2\u0091\u0094\3\2\2\2\u0092") - buf.write("\u0090\3\2\2\2\u0093\u0095\5\f\7\2\u0094\u0093\3\2\2\2") - buf.write("\u0094\u0095\3\2\2\2\u0095\u0096\3\2\2\2\u0096\u0098\7") - buf.write("&\2\2\u0097\u0099\5\36\20\2\u0098\u0097\3\2\2\2\u0098") - buf.write("\u0099\3\2\2\2\u0099\u009e\3\2\2\2\u009a\u009b\7\'\2\2") - buf.write("\u009b\u009f\5\16\b\2\u009c\u009d\7(\2\2\u009d\u009f\7") - buf.write("\3\2\2\u009e\u009a\3\2\2\2\u009e\u009c\3\2\2\2\u009f\u00a1") - buf.write("\3\2\2\2\u00a0`\3\2\2\2\u00a0s\3\2\2\2\u00a0x\3\2\2\2") - buf.write("\u00a0}\3\2\2\2\u00a0\u0088\3\2\2\2\u00a1\13\3\2\2\2\u00a2") - buf.write("\u00a3\5\36\20\2\u00a3\u00a6\7H\2\2\u00a4\u00a5\7)\2\2") - buf.write("\u00a5\u00a7\5\20\t\2\u00a6\u00a4\3\2\2\2\u00a6\u00a7") - buf.write("\3\2\2\2\u00a7\r\3\2\2\2\u00a8\u00aa\7*\2\2\u00a9\u00ab") - buf.write("\5\4\3\2\u00aa\u00a9\3\2\2\2\u00ab\u00ac\3\2\2\2\u00ac") - buf.write("\u00aa\3\2\2\2\u00ac\u00ad\3\2\2\2\u00ad\u00ae\3\2\2\2") - buf.write("\u00ae\u00af\7+\2\2\u00af\17\3\2\2\2\u00b0\u00b1\b\t\1") - buf.write("\2\u00b1\u00de\5\32\16\2\u00b2\u00b3\7%\2\2\u00b3\u00b4") - buf.write("\5\22\n\2\u00b4\u00b5\7&\2\2\u00b5\u00de\3\2\2\2\u00b6") - buf.write("\u00bc\7,\2\2\u00b7\u00b8\5\20\t\2\u00b8\u00b9\7\32\2") - buf.write("\2\u00b9\u00bb\3\2\2\2\u00ba\u00b7\3\2\2\2\u00bb\u00be") - buf.write("\3\2\2\2\u00bc\u00ba\3\2\2\2\u00bc\u00bd\3\2\2\2\u00bd") - buf.write("\u00c0\3\2\2\2\u00be\u00bc\3\2\2\2\u00bf\u00c1\5\20\t") - buf.write("\2\u00c0\u00bf\3\2\2\2\u00c0\u00c1\3\2\2\2\u00c1\u00c2") - buf.write("\3\2\2\2\u00c2\u00de\7-\2\2\u00c3\u00c4\7,\2\2\u00c4\u00c6") - buf.write("\5\20\t\2\u00c5\u00c7\5\26\f\2\u00c6\u00c5\3\2\2\2\u00c7") - buf.write("\u00c8\3\2\2\2\u00c8\u00c6\3\2\2\2\u00c8\u00c9\3\2\2\2") - buf.write("\u00c9\u00ca\3\2\2\2\u00ca\u00cb\7-\2\2\u00cb\u00de\3") - buf.write("\2\2\2\u00cc\u00cd\t\4\2\2\u00cd\u00de\5\20\t\23\u00ce") - buf.write("\u00cf\7<\2\2\u00cf\u00de\5\20\t\b\u00d0\u00d5\7?\2\2") - buf.write("\u00d1\u00d2\7H\2\2\u00d2\u00d4\7\32\2\2\u00d3\u00d1\3") - buf.write("\2\2\2\u00d4\u00d7\3\2\2\2\u00d5\u00d3\3\2\2\2\u00d5\u00d6") - buf.write("\3\2\2\2\u00d6\u00d9\3\2\2\2\u00d7\u00d5\3\2\2\2\u00d8") - buf.write("\u00da\7H\2\2\u00d9\u00d8\3\2\2\2\u00d9\u00da\3\2\2\2") - buf.write("\u00da\u00db\3\2\2\2\u00db\u00dc\7@\2\2\u00dc\u00de\5") - buf.write("\20\t\3\u00dd\u00b0\3\2\2\2\u00dd\u00b2\3\2\2\2\u00dd") - buf.write("\u00b6\3\2\2\2\u00dd\u00c3\3\2\2\2\u00dd\u00cc\3\2\2\2") - buf.write("\u00dd\u00ce\3\2\2\2\u00dd\u00d0\3\2\2\2\u00de\u013e\3") - buf.write("\2\2\2\u00df\u00e0\f\24\2\2\u00e0\u00e1\7\13\2\2\u00e1") - buf.write("\u013d\5\20\t\24\u00e2\u00e3\f\22\2\2\u00e3\u00e4\t\5") - buf.write("\2\2\u00e4\u013d\5\20\t\23\u00e5\u00e6\f\21\2\2\u00e6") - buf.write("\u00e7\t\6\2\2\u00e7\u013d\5\20\t\22\u00e8\u00e9\f\20") - buf.write("\2\2\u00e9\u00ea\t\7\2\2\u00ea\u013d\5\20\t\21\u00eb\u00ec") - buf.write("\f\17\2\2\u00ec\u00ed\7\23\2\2\u00ed\u013d\5\20\t\20\u00ee") - buf.write("\u00ef\f\16\2\2\u00ef\u00f0\7\24\2\2\u00f0\u013d\5\20") - buf.write("\t\17\u00f1\u00f2\f\r\2\2\u00f2\u00f3\7\25\2\2\u00f3\u013d") - buf.write("\5\20\t\16\u00f4\u00f5\f\f\2\2\u00f5\u00f6\t\b\2\2\u00f6") - buf.write("\u013d\5\20\t\r\u00f7\u00f8\f\n\2\2\u00f8\u00f9\t\t\2") - buf.write("\2\u00f9\u013d\5\20\t\13\u00fa\u00fb\f\t\2\2\u00fb\u00fc") - buf.write("\t\n\2\2\u00fc\u013d\5\20\t\t\u00fd\u00fe\f\7\2\2\u00fe") - buf.write("\u00ff\7=\2\2\u00ff\u013d\5\20\t\7\u0100\u0101\f\6\2\2") - buf.write("\u0101\u0102\7>\2\2\u0102\u013d\5\20\t\6\u0103\u0104\f") - buf.write("\5\2\2\u0104\u0105\7\26\2\2\u0105\u013d\5\20\t\5\u0106") - buf.write("\u0107\f\4\2\2\u0107\u0108\7.\2\2\u0108\u0109\5\20\t\2") - buf.write("\u0109\u010a\7)\2\2\u010a\u010b\5\20\t\4\u010b\u013d\3") - buf.write("\2\2\2\u010c\u010e\f\31\2\2\u010d\u010f\7.\2\2\u010e\u010d") - buf.write("\3\2\2\2\u010e\u010f\3\2\2\2\u010f\u0110\3\2\2\2\u0110") - buf.write("\u0111\7,\2\2\u0111\u0112\5\22\n\2\u0112\u0113\7-\2\2") - buf.write("\u0113\u013d\3\2\2\2\u0114\u0115\f\30\2\2\u0115\u0117") - buf.write("\7,\2\2\u0116\u0118\5\20\t\2\u0117\u0116\3\2\2\2\u0117") - buf.write("\u0118\3\2\2\2\u0118\u0119\3\2\2\2\u0119\u011b\7)\2\2") - buf.write("\u011a\u011c\5\20\t\2\u011b\u011a\3\2\2\2\u011b\u011c") - buf.write("\3\2\2\2\u011c\u0121\3\2\2\2\u011d\u011f\7)\2\2\u011e") - buf.write("\u0120\5\20\t\2\u011f\u011e\3\2\2\2\u011f\u0120\3\2\2") - buf.write("\2\u0120\u0122\3\2\2\2\u0121\u011d\3\2\2\2\u0121\u0122") - buf.write("\3\2\2\2\u0122\u0123\3\2\2\2\u0123\u013d\7-\2\2\u0124") - buf.write("\u0126\f\27\2\2\u0125\u0127\7.\2\2\u0126\u0125\3\2\2\2") - buf.write("\u0126\u0127\3\2\2\2\u0127\u0128\3\2\2\2\u0128\u0129\7") - buf.write("/\2\2\u0129\u013d\7H\2\2\u012a\u012b\f\26\2\2\u012b\u0131") - buf.write("\7%\2\2\u012c\u012d\5\30\r\2\u012d\u012e\7\32\2\2\u012e") - buf.write("\u0130\3\2\2\2\u012f\u012c\3\2\2\2\u0130\u0133\3\2\2\2") - buf.write("\u0131\u012f\3\2\2\2\u0131\u0132\3\2\2\2\u0132\u0135\3") - buf.write("\2\2\2\u0133\u0131\3\2\2\2\u0134\u0136\5\30\r\2\u0135") - buf.write("\u0134\3\2\2\2\u0135\u0136\3\2\2\2\u0136\u0137\3\2\2\2") - buf.write("\u0137\u013d\7&\2\2\u0138\u0139\f\25\2\2\u0139\u013d\7") - buf.write("\60\2\2\u013a\u013b\f\13\2\2\u013b\u013d\7\63\2\2\u013c") - buf.write("\u00df\3\2\2\2\u013c\u00e2\3\2\2\2\u013c\u00e5\3\2\2\2") - buf.write("\u013c\u00e8\3\2\2\2\u013c\u00eb\3\2\2\2\u013c\u00ee\3") - buf.write("\2\2\2\u013c\u00f1\3\2\2\2\u013c\u00f4\3\2\2\2\u013c\u00f7") - buf.write("\3\2\2\2\u013c\u00fa\3\2\2\2\u013c\u00fd\3\2\2\2\u013c") - buf.write("\u0100\3\2\2\2\u013c\u0103\3\2\2\2\u013c\u0106\3\2\2\2") - buf.write("\u013c\u010c\3\2\2\2\u013c\u0114\3\2\2\2\u013c\u0124\3") - buf.write("\2\2\2\u013c\u012a\3\2\2\2\u013c\u0138\3\2\2\2\u013c\u013a") - buf.write("\3\2\2\2\u013d\u0140\3\2\2\2\u013e\u013c\3\2\2\2\u013e") - buf.write("\u013f\3\2\2\2\u013f\21\3\2\2\2\u0140\u013e\3\2\2\2\u0141") - buf.write("\u0142\5\20\t\2\u0142\u0143\7\32\2\2\u0143\u0145\3\2\2") - buf.write("\2\u0144\u0141\3\2\2\2\u0145\u0148\3\2\2\2\u0146\u0144") - buf.write("\3\2\2\2\u0146\u0147\3\2\2\2\u0147\u0149\3\2\2\2\u0148") - buf.write("\u0146\3\2\2\2\u0149\u014a\5\20\t\2\u014a\23\3\2\2\2\u014b") - buf.write("\u014c\5\22\n\2\u014c\u014d\7\2\2\3\u014d\25\3\2\2\2\u014e") - buf.write("\u014f\7!\2\2\u014f\u0150\5\22\n\2\u0150\u0151\7\"\2\2") - buf.write("\u0151\u0154\5\22\n\2\u0152\u0153\7#\2\2\u0153\u0155\5") - buf.write("\22\n\2\u0154\u0152\3\2\2\2\u0154\u0155\3\2\2\2\u0155") - buf.write("\u0159\3\2\2\2\u0156\u0157\7\33\2\2\u0157\u0159\5\20\t") - buf.write("\2\u0158\u014e\3\2\2\2\u0158\u0156\3\2\2\2\u0159\27\3") - buf.write("\2\2\2\u015a\u015b\7H\2\2\u015b\u015d\7\n\2\2\u015c\u015a") - buf.write("\3\2\2\2\u015c\u015d\3\2\2\2\u015d\u015e\3\2\2\2\u015e") - buf.write("\u015f\5\20\t\2\u015f\31\3\2\2\2\u0160\u0168\7D\2\2\u0161") - buf.write("\u0168\7E\2\2\u0162\u0168\t\13\2\2\u0163\u0168\7F\2\2") - buf.write("\u0164\u0168\7G\2\2\u0165\u0168\7C\2\2\u0166\u0168\7H") - buf.write("\2\2\u0167\u0160\3\2\2\2\u0167\u0161\3\2\2\2\u0167\u0162") - buf.write("\3\2\2\2\u0167\u0163\3\2\2\2\u0167\u0164\3\2\2\2\u0167") - buf.write("\u0165\3\2\2\2\u0167\u0166\3\2\2\2\u0168\33\3\2\2\2\u0169") - buf.write("\u016a\7H\2\2\u016a\u016c\7\32\2\2\u016b\u0169\3\2\2\2") - buf.write("\u016c\u016f\3\2\2\2\u016d\u016b\3\2\2\2\u016d\u016e\3") - buf.write("\2\2\2\u016e\u0170\3\2\2\2\u016f\u016d\3\2\2\2\u0170\u0171") - buf.write("\7H\2\2\u0171\35\3\2\2\2\u0172\u0173\b\20\1\2\u0173\u017f") - buf.write("\7H\2\2\u0174\u0175\7%\2\2\u0175\u0176\5\36\20\2\u0176") - buf.write("\u0177\7&\2\2\u0177\u017f\3\2\2\2\u0178\u0179\7,\2\2\u0179") - buf.write("\u017a\5\36\20\2\u017a\u017b\7-\2\2\u017b\u017f\3\2\2") - buf.write("\2\u017c\u017d\7@\2\2\u017d\u017f\5\36\20\3\u017e\u0172") - buf.write("\3\2\2\2\u017e\u0174\3\2\2\2\u017e\u0178\3\2\2\2\u017e") - buf.write("\u017c\3\2\2\2\u017f\u018a\3\2\2\2\u0180\u0181\f\5\2\2") - buf.write("\u0181\u0182\7\f\2\2\u0182\u0189\5\36\20\5\u0183\u0184") - buf.write("\f\4\2\2\u0184\u0185\7@\2\2\u0185\u0189\5\36\20\4\u0186") - buf.write("\u0187\f\6\2\2\u0187\u0189\7.\2\2\u0188\u0180\3\2\2\2") - buf.write("\u0188\u0183\3\2\2\2\u0188\u0186\3\2\2\2\u0189\u018c\3") - buf.write("\2\2\2\u018a\u0188\3\2\2\2\u018a\u018b\3\2\2\2\u018b\37") - buf.write("\3\2\2\2\u018c\u018a\3\2\2\2.#,\66;AHTV]kq\u0083\u0090") - buf.write("\u0094\u0098\u009e\u00a0\u00a6\u00ac\u00bc\u00c0\u00c8") - buf.write("\u00d5\u00d9\u00dd\u010e\u0117\u011b\u011f\u0121\u0126") - buf.write("\u0131\u0135\u013c\u013e\u0146\u0154\u0158\u015c\u0167") - buf.write("\u016d\u017e\u0188\u018a") + buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") + buf.write("\t\3\t\3\t\3\t\3\t\3\t\3\t\5\t\u0115\n\t\3\t\3\t\3\t\3") + buf.write("\t\3\t\3\t\3\t\5\t\u011e\n\t\3\t\3\t\5\t\u0122\n\t\3\t") + buf.write("\3\t\5\t\u0126\n\t\5\t\u0128\n\t\3\t\3\t\3\t\5\t\u012d") + buf.write("\n\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\7\t\u0136\n\t\f\t\16") + buf.write("\t\u0139\13\t\3\t\5\t\u013c\n\t\3\t\3\t\3\t\3\t\3\t\7") + buf.write("\t\u0143\n\t\f\t\16\t\u0146\13\t\3\n\3\n\3\n\7\n\u014b") + buf.write("\n\n\f\n\16\n\u014e\13\n\3\n\3\n\3\13\3\13\3\13\3\f\3") + buf.write("\f\3\f\3\f\3\f\3\f\5\f\u015b\n\f\3\f\3\f\5\f\u015f\n\f") + buf.write("\3\r\3\r\5\r\u0163\n\r\3\r\3\r\3\16\3\16\3\16\3\16\3\16") + buf.write("\3\16\3\16\5\16\u016e\n\16\3\17\3\17\7\17\u0172\n\17\f") + buf.write("\17\16\17\u0175\13\17\3\17\3\17\3\20\3\20\3\20\3\20\3") + buf.write("\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\5\20\u0185\n\20") + buf.write("\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\7\20\u018f\n") + buf.write("\20\f\20\16\20\u0192\13\20\3\20\2\4\20\36\21\2\4\6\b\n") + buf.write("\f\16\20\22\24\26\30\32\34\36\2\f\3\2\13\26\3\2\27\30") + buf.write("\4\2\17\20\63\63\3\2\f\16\3\2\17\20\3\2\21\22\3\2\64\65") + buf.write("\3\2\66\67\4\2%&8;\3\2AB\2\u01db\2#\3\2\2\2\4,\3\2\2\2") + buf.write("\6V\3\2\2\2\bX\3\2\2\2\n\u00a6\3\2\2\2\f\u00a8\3\2\2\2") + buf.write("\16\u00ae\3\2\2\2\20\u00e3\3\2\2\2\22\u014c\3\2\2\2\24") + buf.write("\u0151\3\2\2\2\26\u015e\3\2\2\2\30\u0162\3\2\2\2\32\u016d") + buf.write("\3\2\2\2\34\u0173\3\2\2\2\36\u0184\3\2\2\2 \"\5\4\3\2") + buf.write("! \3\2\2\2\"%\3\2\2\2#!\3\2\2\2#$\3\2\2\2$&\3\2\2\2%#") + buf.write("\3\2\2\2&\'\7\2\2\3\'\3\3\2\2\2()\5\6\4\2)*\7\3\2\2*-") + buf.write("\3\2\2\2+-\5\n\6\2,(\3\2\2\2,+\3\2\2\2-\5\3\2\2\2./\7") + buf.write("\4\2\2/\66\7H\2\2\60\61\7\5\2\2\61\67\5\34\17\2\62\63") + buf.write("\7\6\2\2\63\67\5\34\17\2\64\65\7\7\2\2\65\67\7H\2\2\66") + buf.write("\60\3\2\2\2\66\62\3\2\2\2\66\64\3\2\2\2\66\67\3\2\2\2") + buf.write("\67W\3\2\2\28W\7\b\2\29;\7\t\2\2:<\5\22\n\2;:\3\2\2\2") + buf.write(";<\3\2\2\2\5\36\20\2>A\7H\2\2?@\7\n\2\2@B") + buf.write("\5\22\n\2A?\3\2\2\2AB\3\2\2\2BW\3\2\2\2CD\5\b\5\2DE\7") + buf.write("\n\2\2EG\3\2\2\2FC\3\2\2\2GJ\3\2\2\2HF\3\2\2\2HI\3\2\2") + buf.write("\2IK\3\2\2\2JH\3\2\2\2KW\5\22\n\2LM\5\20\t\2MN\t\2\2\2") + buf.write("NO\7\n\2\2OP\5\20\t\2PW\3\2\2\2QW\t\3\2\2RT\7\31\2\2S") + buf.write("U\5\22\n\2TS\3\2\2\2TU\3\2\2\2UW\3\2\2\2V.\3\2\2\2V8\3") + buf.write("\2\2\2V9\3\2\2\2V=\3\2\2\2VH\3\2\2\2VL\3\2\2\2VQ\3\2\2") + buf.write("\2VR\3\2\2\2W\7\3\2\2\2X]\5\20\t\2YZ\7\32\2\2Z\\\5\20") + buf.write("\t\2[Y\3\2\2\2\\_\3\2\2\2][\3\2\2\2]^\3\2\2\2^\t\3\2\2") + buf.write("\2_]\3\2\2\2`a\7\33\2\2ab\5\20\t\2bc\7\34\2\2ck\5\16\b") + buf.write("\2de\7\35\2\2ef\5\20\t\2fg\7\34\2\2gh\5\16\b\2hj\3\2\2") + buf.write("\2id\3\2\2\2jm\3\2\2\2ki\3\2\2\2kl\3\2\2\2lq\3\2\2\2m") + buf.write("k\3\2\2\2no\7\36\2\2op\7\34\2\2pr\5\16\b\2qn\3\2\2\2q") + buf.write("r\3\2\2\2r\u00a7\3\2\2\2st\7\37\2\2tu\5\20\t\2uv\7\34") + buf.write("\2\2vw\5\16\b\2w\u00a7\3\2\2\2xy\7 \2\2yz\5\20\t\2z{\7") + buf.write("\34\2\2{|\5\16\b\2|\u00a7\3\2\2\2}~\7!\2\2~\177\5\22\n") + buf.write("\2\177\u0080\7\"\2\2\u0080\u0083\5\22\n\2\u0081\u0082") + buf.write("\7#\2\2\u0082\u0084\5\22\n\2\u0083\u0081\3\2\2\2\u0083") + buf.write("\u0084\3\2\2\2\u0084\u0085\3\2\2\2\u0085\u0086\7\34\2") + buf.write("\2\u0086\u0087\5\16\b\2\u0087\u00a7\3\2\2\2\u0088\u0089") + buf.write("\7$\2\2\u0089\u008e\7H\2\2\u008a\u008b\7%\2\2\u008b\u008c") + buf.write("\5\34\17\2\u008c\u008d\7&\2\2\u008d\u008f\3\2\2\2\u008e") + buf.write("\u008a\3\2\2\2\u008e\u008f\3\2\2\2\u008f\u0090\3\2\2\2") + buf.write("\u0090\u0096\7\'\2\2\u0091\u0092\5\f\7\2\u0092\u0093\7") + buf.write("\32\2\2\u0093\u0095\3\2\2\2\u0094\u0091\3\2\2\2\u0095") + buf.write("\u0098\3\2\2\2\u0096\u0094\3\2\2\2\u0096\u0097\3\2\2\2") + buf.write("\u0097\u009a\3\2\2\2\u0098\u0096\3\2\2\2\u0099\u009b\5") + buf.write("\f\7\2\u009a\u0099\3\2\2\2\u009a\u009b\3\2\2\2\u009b\u009c") + buf.write("\3\2\2\2\u009c\u009e\7(\2\2\u009d\u009f\5\36\20\2\u009e") + buf.write("\u009d\3\2\2\2\u009e\u009f\3\2\2\2\u009f\u00a4\3\2\2\2") + buf.write("\u00a0\u00a1\7)\2\2\u00a1\u00a5\5\16\b\2\u00a2\u00a3\7") + buf.write("*\2\2\u00a3\u00a5\7\3\2\2\u00a4\u00a0\3\2\2\2\u00a4\u00a2") + buf.write("\3\2\2\2\u00a5\u00a7\3\2\2\2\u00a6`\3\2\2\2\u00a6s\3\2") + buf.write("\2\2\u00a6x\3\2\2\2\u00a6}\3\2\2\2\u00a6\u0088\3\2\2\2") + buf.write("\u00a7\13\3\2\2\2\u00a8\u00a9\5\36\20\2\u00a9\u00ac\7") + buf.write("H\2\2\u00aa\u00ab\7+\2\2\u00ab\u00ad\5\20\t\2\u00ac\u00aa") + buf.write("\3\2\2\2\u00ac\u00ad\3\2\2\2\u00ad\r\3\2\2\2\u00ae\u00b0") + buf.write("\7,\2\2\u00af\u00b1\5\4\3\2\u00b0\u00af\3\2\2\2\u00b1") + buf.write("\u00b2\3\2\2\2\u00b2\u00b0\3\2\2\2\u00b2\u00b3\3\2\2\2") + buf.write("\u00b3\u00b4\3\2\2\2\u00b4\u00b5\7-\2\2\u00b5\17\3\2\2") + buf.write("\2\u00b6\u00b7\b\t\1\2\u00b7\u00e4\5\32\16\2\u00b8\u00b9") + buf.write("\7\'\2\2\u00b9\u00ba\5\22\n\2\u00ba\u00bb\7(\2\2\u00bb") + buf.write("\u00e4\3\2\2\2\u00bc\u00c2\7.\2\2\u00bd\u00be\5\20\t\2") + buf.write("\u00be\u00bf\7\32\2\2\u00bf\u00c1\3\2\2\2\u00c0\u00bd") + buf.write("\3\2\2\2\u00c1\u00c4\3\2\2\2\u00c2\u00c0\3\2\2\2\u00c2") + buf.write("\u00c3\3\2\2\2\u00c3\u00c6\3\2\2\2\u00c4\u00c2\3\2\2\2") + buf.write("\u00c5\u00c7\5\20\t\2\u00c6\u00c5\3\2\2\2\u00c6\u00c7") + buf.write("\3\2\2\2\u00c7\u00c8\3\2\2\2\u00c8\u00e4\7/\2\2\u00c9") + buf.write("\u00ca\7.\2\2\u00ca\u00cc\5\20\t\2\u00cb\u00cd\5\26\f") + buf.write("\2\u00cc\u00cb\3\2\2\2\u00cd\u00ce\3\2\2\2\u00ce\u00cc") + buf.write("\3\2\2\2\u00ce\u00cf\3\2\2\2\u00cf\u00d0\3\2\2\2\u00d0") + buf.write("\u00d1\7/\2\2\u00d1\u00e4\3\2\2\2\u00d2\u00d3\t\4\2\2") + buf.write("\u00d3\u00e4\5\20\t\23\u00d4\u00d5\7<\2\2\u00d5\u00e4") + buf.write("\5\20\t\b\u00d6\u00db\7?\2\2\u00d7\u00d8\7H\2\2\u00d8") + buf.write("\u00da\7\32\2\2\u00d9\u00d7\3\2\2\2\u00da\u00dd\3\2\2") + buf.write("\2\u00db\u00d9\3\2\2\2\u00db\u00dc\3\2\2\2\u00dc\u00df") + buf.write("\3\2\2\2\u00dd\u00db\3\2\2\2\u00de\u00e0\7H\2\2\u00df") + buf.write("\u00de\3\2\2\2\u00df\u00e0\3\2\2\2\u00e0\u00e1\3\2\2\2") + buf.write("\u00e1\u00e2\7@\2\2\u00e2\u00e4\5\20\t\3\u00e3\u00b6\3") + buf.write("\2\2\2\u00e3\u00b8\3\2\2\2\u00e3\u00bc\3\2\2\2\u00e3\u00c9") + buf.write("\3\2\2\2\u00e3\u00d2\3\2\2\2\u00e3\u00d4\3\2\2\2\u00e3") + buf.write("\u00d6\3\2\2\2\u00e4\u0144\3\2\2\2\u00e5\u00e6\f\24\2") + buf.write("\2\u00e6\u00e7\7\13\2\2\u00e7\u0143\5\20\t\24\u00e8\u00e9") + buf.write("\f\22\2\2\u00e9\u00ea\t\5\2\2\u00ea\u0143\5\20\t\23\u00eb") + buf.write("\u00ec\f\21\2\2\u00ec\u00ed\t\6\2\2\u00ed\u0143\5\20\t") + buf.write("\22\u00ee\u00ef\f\20\2\2\u00ef\u00f0\t\7\2\2\u00f0\u0143") + buf.write("\5\20\t\21\u00f1\u00f2\f\17\2\2\u00f2\u00f3\7\23\2\2\u00f3") + buf.write("\u0143\5\20\t\20\u00f4\u00f5\f\16\2\2\u00f5\u00f6\7\24") + buf.write("\2\2\u00f6\u0143\5\20\t\17\u00f7\u00f8\f\r\2\2\u00f8\u00f9") + buf.write("\7\25\2\2\u00f9\u0143\5\20\t\16\u00fa\u00fb\f\f\2\2\u00fb") + buf.write("\u00fc\t\b\2\2\u00fc\u0143\5\20\t\r\u00fd\u00fe\f\n\2") + buf.write("\2\u00fe\u00ff\t\t\2\2\u00ff\u0143\5\20\t\13\u0100\u0101") + buf.write("\f\t\2\2\u0101\u0102\t\n\2\2\u0102\u0143\5\20\t\t\u0103") + buf.write("\u0104\f\7\2\2\u0104\u0105\7=\2\2\u0105\u0143\5\20\t\7") + buf.write("\u0106\u0107\f\6\2\2\u0107\u0108\7>\2\2\u0108\u0143\5") + buf.write("\20\t\6\u0109\u010a\f\5\2\2\u010a\u010b\7\26\2\2\u010b") + buf.write("\u0143\5\20\t\5\u010c\u010d\f\4\2\2\u010d\u010e\7\60\2") + buf.write("\2\u010e\u010f\5\20\t\2\u010f\u0110\7+\2\2\u0110\u0111") + buf.write("\5\20\t\4\u0111\u0143\3\2\2\2\u0112\u0114\f\31\2\2\u0113") + buf.write("\u0115\7\60\2\2\u0114\u0113\3\2\2\2\u0114\u0115\3\2\2") + buf.write("\2\u0115\u0116\3\2\2\2\u0116\u0117\7.\2\2\u0117\u0118") + buf.write("\5\22\n\2\u0118\u0119\7/\2\2\u0119\u0143\3\2\2\2\u011a") + buf.write("\u011b\f\30\2\2\u011b\u011d\7.\2\2\u011c\u011e\5\20\t") + buf.write("\2\u011d\u011c\3\2\2\2\u011d\u011e\3\2\2\2\u011e\u011f") + buf.write("\3\2\2\2\u011f\u0121\7+\2\2\u0120\u0122\5\20\t\2\u0121") + buf.write("\u0120\3\2\2\2\u0121\u0122\3\2\2\2\u0122\u0127\3\2\2\2") + buf.write("\u0123\u0125\7+\2\2\u0124\u0126\5\20\t\2\u0125\u0124\3") + buf.write("\2\2\2\u0125\u0126\3\2\2\2\u0126\u0128\3\2\2\2\u0127\u0123") + buf.write("\3\2\2\2\u0127\u0128\3\2\2\2\u0128\u0129\3\2\2\2\u0129") + buf.write("\u0143\7/\2\2\u012a\u012c\f\27\2\2\u012b\u012d\7\60\2") + buf.write("\2\u012c\u012b\3\2\2\2\u012c\u012d\3\2\2\2\u012d\u012e") + buf.write("\3\2\2\2\u012e\u012f\7\61\2\2\u012f\u0143\7H\2\2\u0130") + buf.write("\u0131\f\26\2\2\u0131\u0137\7\'\2\2\u0132\u0133\5\30\r") + buf.write("\2\u0133\u0134\7\32\2\2\u0134\u0136\3\2\2\2\u0135\u0132") + buf.write("\3\2\2\2\u0136\u0139\3\2\2\2\u0137\u0135\3\2\2\2\u0137") + buf.write("\u0138\3\2\2\2\u0138\u013b\3\2\2\2\u0139\u0137\3\2\2\2") + buf.write("\u013a\u013c\5\30\r\2\u013b\u013a\3\2\2\2\u013b\u013c") + buf.write("\3\2\2\2\u013c\u013d\3\2\2\2\u013d\u0143\7(\2\2\u013e") + buf.write("\u013f\f\25\2\2\u013f\u0143\7\62\2\2\u0140\u0141\f\13") + buf.write("\2\2\u0141\u0143\7\65\2\2\u0142\u00e5\3\2\2\2\u0142\u00e8") + buf.write("\3\2\2\2\u0142\u00eb\3\2\2\2\u0142\u00ee\3\2\2\2\u0142") + buf.write("\u00f1\3\2\2\2\u0142\u00f4\3\2\2\2\u0142\u00f7\3\2\2\2") + buf.write("\u0142\u00fa\3\2\2\2\u0142\u00fd\3\2\2\2\u0142\u0100\3") + buf.write("\2\2\2\u0142\u0103\3\2\2\2\u0142\u0106\3\2\2\2\u0142\u0109") + buf.write("\3\2\2\2\u0142\u010c\3\2\2\2\u0142\u0112\3\2\2\2\u0142") + buf.write("\u011a\3\2\2\2\u0142\u012a\3\2\2\2\u0142\u0130\3\2\2\2") + buf.write("\u0142\u013e\3\2\2\2\u0142\u0140\3\2\2\2\u0143\u0146\3") + buf.write("\2\2\2\u0144\u0142\3\2\2\2\u0144\u0145\3\2\2\2\u0145\21") + buf.write("\3\2\2\2\u0146\u0144\3\2\2\2\u0147\u0148\5\20\t\2\u0148") + buf.write("\u0149\7\32\2\2\u0149\u014b\3\2\2\2\u014a\u0147\3\2\2") + buf.write("\2\u014b\u014e\3\2\2\2\u014c\u014a\3\2\2\2\u014c\u014d") + buf.write("\3\2\2\2\u014d\u014f\3\2\2\2\u014e\u014c\3\2\2\2\u014f") + buf.write("\u0150\5\20\t\2\u0150\23\3\2\2\2\u0151\u0152\5\22\n\2") + buf.write("\u0152\u0153\7\2\2\3\u0153\25\3\2\2\2\u0154\u0155\7!\2") + buf.write("\2\u0155\u0156\5\22\n\2\u0156\u0157\7\"\2\2\u0157\u015a") + buf.write("\5\22\n\2\u0158\u0159\7#\2\2\u0159\u015b\5\22\n\2\u015a") + buf.write("\u0158\3\2\2\2\u015a\u015b\3\2\2\2\u015b\u015f\3\2\2\2") + buf.write("\u015c\u015d\7\33\2\2\u015d\u015f\5\20\t\2\u015e\u0154") + buf.write("\3\2\2\2\u015e\u015c\3\2\2\2\u015f\27\3\2\2\2\u0160\u0161") + buf.write("\7H\2\2\u0161\u0163\7\n\2\2\u0162\u0160\3\2\2\2\u0162") + buf.write("\u0163\3\2\2\2\u0163\u0164\3\2\2\2\u0164\u0165\5\20\t") + buf.write("\2\u0165\31\3\2\2\2\u0166\u016e\7D\2\2\u0167\u016e\7E") + buf.write("\2\2\u0168\u016e\t\13\2\2\u0169\u016e\7F\2\2\u016a\u016e") + buf.write("\7G\2\2\u016b\u016e\7C\2\2\u016c\u016e\7H\2\2\u016d\u0166") + buf.write("\3\2\2\2\u016d\u0167\3\2\2\2\u016d\u0168\3\2\2\2\u016d") + buf.write("\u0169\3\2\2\2\u016d\u016a\3\2\2\2\u016d\u016b\3\2\2\2") + buf.write("\u016d\u016c\3\2\2\2\u016e\33\3\2\2\2\u016f\u0170\7H\2") + buf.write("\2\u0170\u0172\7\32\2\2\u0171\u016f\3\2\2\2\u0172\u0175") + buf.write("\3\2\2\2\u0173\u0171\3\2\2\2\u0173\u0174\3\2\2\2\u0174") + buf.write("\u0176\3\2\2\2\u0175\u0173\3\2\2\2\u0176\u0177\7H\2\2") + buf.write("\u0177\35\3\2\2\2\u0178\u0179\b\20\1\2\u0179\u0185\7H") + buf.write("\2\2\u017a\u017b\7\'\2\2\u017b\u017c\5\36\20\2\u017c\u017d") + buf.write("\7(\2\2\u017d\u0185\3\2\2\2\u017e\u017f\7.\2\2\u017f\u0180") + buf.write("\5\36\20\2\u0180\u0181\7/\2\2\u0181\u0185\3\2\2\2\u0182") + buf.write("\u0183\7@\2\2\u0183\u0185\5\36\20\3\u0184\u0178\3\2\2") + buf.write("\2\u0184\u017a\3\2\2\2\u0184\u017e\3\2\2\2\u0184\u0182") + buf.write("\3\2\2\2\u0185\u0190\3\2\2\2\u0186\u0187\f\5\2\2\u0187") + buf.write("\u0188\7\f\2\2\u0188\u018f\5\36\20\5\u0189\u018a\f\4\2") + buf.write("\2\u018a\u018b\7@\2\2\u018b\u018f\5\36\20\4\u018c\u018d") + buf.write("\f\6\2\2\u018d\u018f\7\60\2\2\u018e\u0186\3\2\2\2\u018e") + buf.write("\u0189\3\2\2\2\u018e\u018c\3\2\2\2\u018f\u0192\3\2\2\2") + buf.write("\u0190\u018e\3\2\2\2\u0190\u0191\3\2\2\2\u0191\37\3\2") + buf.write("\2\2\u0192\u0190\3\2\2\2/#,\66;AHTV]kq\u0083\u008e\u0096") + buf.write("\u009a\u009e\u00a4\u00a6\u00ac\u00b2\u00c2\u00c6\u00ce") + buf.write("\u00db\u00df\u00e3\u0114\u011d\u0121\u0125\u0127\u012c") + buf.write("\u0137\u013b\u0142\u0144\u014c\u015a\u015e\u0162\u016d") + buf.write("\u0173\u0184\u018e\u0190") return buf.getvalue() @@ -221,10 +225,10 @@ class PyxellParser ( Parser ): "'%'", "'+'", "'-'", "'<<'", "'>>'", "'&'", "'$'", "'|'", "'??'", "'break'", "'continue'", "'return'", "','", "'if'", "'do'", "'elif'", "'else'", "'while'", - "'until'", "'for'", "'in'", "'step'", "'func'", "'('", - "')'", "'def'", "'extern'", "':'", "'{'", "'}'", "'['", - "']'", "'?'", "'.'", "'!'", "'~'", "'..'", "'...'", - "'is'", "'isn't'", "'=='", "'!='", "'<'", "'<='", "'>'", + "'until'", "'for'", "'in'", "'step'", "'func'", "'<'", + "'>'", "'('", "')'", "'def'", "'extern'", "':'", "'{'", + "'}'", "'['", "']'", "'?'", "'.'", "'!'", "'~'", "'..'", + "'...'", "'is'", "'isn't'", "'=='", "'!='", "'<='", "'>='", "'not'", "'and'", "'or'", "'lambda'", "'->'", "'true'", "'false'", "'null'" ] @@ -389,7 +393,7 @@ def program(self): self.state = 33 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__46) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0): + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0): self.state = 30 self.stmt() self.state = 35 @@ -441,7 +445,7 @@ def stmt(self): self.state = 42 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__1, PyxellParser.T__5, PyxellParser.T__6, PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__20, PyxellParser.T__21, PyxellParser.T__22, PyxellParser.T__34, PyxellParser.T__41, PyxellParser.T__46, PyxellParser.T__57, PyxellParser.T__60, PyxellParser.T__61, PyxellParser.T__62, PyxellParser.T__63, PyxellParser.T__64, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: + if token in [PyxellParser.T__1, PyxellParser.T__5, PyxellParser.T__6, PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__20, PyxellParser.T__21, PyxellParser.T__22, PyxellParser.T__36, PyxellParser.T__43, PyxellParser.T__48, PyxellParser.T__57, PyxellParser.T__60, PyxellParser.T__61, PyxellParser.T__62, PyxellParser.T__63, PyxellParser.T__64, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: self.enterOuterAlt(localctx, 1) self.state = 38 self.simple_stmt() @@ -695,7 +699,7 @@ def simple_stmt(self): self.state = 57 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__34 - 13)) | (1 << (PyxellParser.T__41 - 13)) | (1 << (PyxellParser.T__46 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__36 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__48 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): self.state = 56 self.tuple_expr() @@ -781,7 +785,7 @@ def simple_stmt(self): self.state = 82 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__34 - 13)) | (1 << (PyxellParser.T__41 - 13)) | (1 << (PyxellParser.T__46 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__36 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__48 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): self.state = 81 self.tuple_expr() @@ -873,6 +877,7 @@ class StmtFuncContext(Compound_stmtContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Compound_stmtContext super().__init__(parser) + self.typevars = None # Id_listContext self.ret = None # TypContext self.copyFrom(ctx) @@ -887,6 +892,9 @@ def func_arg(self, i:int=None): else: return self.getTypedRuleContext(PyxellParser.Func_argContext,i) + def id_list(self): + return self.getTypedRuleContext(PyxellParser.Id_listContext,0) + def typ(self): return self.getTypedRuleContext(PyxellParser.TypContext,0) @@ -994,7 +1002,7 @@ def compound_stmt(self): self.enterRule(localctx, 8, self.RULE_compound_stmt) self._la = 0 # Token type try: - self.state = 158 + self.state = 164 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__24]: @@ -1094,52 +1102,64 @@ def compound_stmt(self): self.match(PyxellParser.T__33) self.state = 135 self.match(PyxellParser.ID) - self.state = 136 - self.match(PyxellParser.T__34) + self.state = 140 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==PyxellParser.T__34: + self.state = 136 + self.match(PyxellParser.T__34) + self.state = 137 + localctx.typevars = self.id_list() + self.state = 138 + self.match(PyxellParser.T__35) + + self.state = 142 + self.match(PyxellParser.T__36) + self.state = 148 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,12,self._ctx) + _alt = self._interp.adaptivePredict(self._input,13,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 137 + self.state = 143 self.func_arg() - self.state = 138 + self.state = 144 self.match(PyxellParser.T__23) - self.state = 144 + self.state = 150 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,12,self._ctx) + _alt = self._interp.adaptivePredict(self._input,13,self._ctx) - self.state = 146 + self.state = 152 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 35)) & ~0x3f) == 0 and ((1 << (_la - 35)) & ((1 << (PyxellParser.T__34 - 35)) | (1 << (PyxellParser.T__41 - 35)) | (1 << (PyxellParser.T__61 - 35)) | (1 << (PyxellParser.ID - 35)))) != 0): - self.state = 145 + if ((((_la - 37)) & ~0x3f) == 0 and ((1 << (_la - 37)) & ((1 << (PyxellParser.T__36 - 37)) | (1 << (PyxellParser.T__43 - 37)) | (1 << (PyxellParser.T__61 - 37)) | (1 << (PyxellParser.ID - 37)))) != 0): + self.state = 151 self.func_arg() - self.state = 148 - self.match(PyxellParser.T__35) - self.state = 150 + self.state = 154 + self.match(PyxellParser.T__37) + self.state = 156 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 35)) & ~0x3f) == 0 and ((1 << (_la - 35)) & ((1 << (PyxellParser.T__34 - 35)) | (1 << (PyxellParser.T__41 - 35)) | (1 << (PyxellParser.T__61 - 35)) | (1 << (PyxellParser.ID - 35)))) != 0): - self.state = 149 + if ((((_la - 37)) & ~0x3f) == 0 and ((1 << (_la - 37)) & ((1 << (PyxellParser.T__36 - 37)) | (1 << (PyxellParser.T__43 - 37)) | (1 << (PyxellParser.T__61 - 37)) | (1 << (PyxellParser.ID - 37)))) != 0): + self.state = 155 localctx.ret = self.typ(0) - self.state = 156 + self.state = 162 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__36]: - self.state = 152 - self.match(PyxellParser.T__36) - self.state = 153 + if token in [PyxellParser.T__38]: + self.state = 158 + self.match(PyxellParser.T__38) + self.state = 159 self.block() pass - elif token in [PyxellParser.T__37]: - self.state = 154 - self.match(PyxellParser.T__37) - self.state = 155 + elif token in [PyxellParser.T__39]: + self.state = 160 + self.match(PyxellParser.T__39) + self.state = 161 self.match(PyxellParser.T__0) pass else: @@ -1205,17 +1225,17 @@ def func_arg(self): try: localctx = PyxellParser.FuncArgContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 160 + self.state = 166 self.typ(0) - self.state = 161 + self.state = 167 self.match(PyxellParser.ID) - self.state = 164 + self.state = 170 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__38: - self.state = 162 - self.match(PyxellParser.T__38) - self.state = 163 + if _la==PyxellParser.T__40: + self.state = 168 + self.match(PyxellParser.T__40) + self.state = 169 self.expr(0) @@ -1260,22 +1280,22 @@ def block(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 166 - self.match(PyxellParser.T__39) - self.state = 168 + self.state = 172 + self.match(PyxellParser.T__41) + self.state = 174 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 167 + self.state = 173 self.stmt() - self.state = 170 + self.state = 176 self._errHandler.sync(self) _la = self._input.LA(1) - if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__34) | (1 << PyxellParser.T__41) | (1 << PyxellParser.T__46) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0)): + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0)): break - self.state = 172 - self.match(PyxellParser.T__40) + self.state = 178 + self.match(PyxellParser.T__42) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -1640,15 +1660,15 @@ def expr(self, _p:int=0): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 219 + self.state = 225 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,24,self._ctx) + la_ = self._interp.adaptivePredict(self._input,25,self._ctx) if la_ == 1: localctx = PyxellParser.ExprAtomContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 175 + self.state = 181 self.atom() pass @@ -1656,82 +1676,82 @@ def expr(self, _p:int=0): localctx = PyxellParser.ExprParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 176 - self.match(PyxellParser.T__34) - self.state = 177 + self.state = 182 + self.match(PyxellParser.T__36) + self.state = 183 self.tuple_expr() - self.state = 178 - self.match(PyxellParser.T__35) + self.state = 184 + self.match(PyxellParser.T__37) pass elif la_ == 3: localctx = PyxellParser.ExprArrayContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 180 - self.match(PyxellParser.T__41) self.state = 186 + self.match(PyxellParser.T__43) + self.state = 192 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,19,self._ctx) + _alt = self._interp.adaptivePredict(self._input,20,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 181 + self.state = 187 self.expr(0) - self.state = 182 + self.state = 188 self.match(PyxellParser.T__23) - self.state = 188 + self.state = 194 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,19,self._ctx) + _alt = self._interp.adaptivePredict(self._input,20,self._ctx) - self.state = 190 + self.state = 196 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__34 - 13)) | (1 << (PyxellParser.T__41 - 13)) | (1 << (PyxellParser.T__46 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 189 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__36 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__48 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 195 self.expr(0) - self.state = 192 - self.match(PyxellParser.T__42) + self.state = 198 + self.match(PyxellParser.T__44) pass elif la_ == 4: localctx = PyxellParser.ExprArrayComprehensionContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 193 - self.match(PyxellParser.T__41) - self.state = 194 + self.state = 199 + self.match(PyxellParser.T__43) + self.state = 200 self.expr(0) - self.state = 196 + self.state = 202 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 195 + self.state = 201 self.comprehension() - self.state = 198 + self.state = 204 self._errHandler.sync(self) _la = self._input.LA(1) if not (_la==PyxellParser.T__24 or _la==PyxellParser.T__30): break - self.state = 200 - self.match(PyxellParser.T__42) + self.state = 206 + self.match(PyxellParser.T__44) pass elif la_ == 5: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 202 + self.state = 208 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__46))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__48))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 203 + self.state = 209 self.expr(17) pass @@ -1739,9 +1759,9 @@ def expr(self, _p:int=0): localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 204 + self.state = 210 localctx.op = self.match(PyxellParser.T__57) - self.state = 205 + self.state = 211 self.expr(6) pass @@ -1749,69 +1769,69 @@ def expr(self, _p:int=0): localctx = PyxellParser.ExprLambdaContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 206 + self.state = 212 self.match(PyxellParser.T__60) - self.state = 211 + self.state = 217 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,22,self._ctx) + _alt = self._interp.adaptivePredict(self._input,23,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 207 + self.state = 213 self.match(PyxellParser.ID) - self.state = 208 + self.state = 214 self.match(PyxellParser.T__23) - self.state = 213 + self.state = 219 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,22,self._ctx) + _alt = self._interp.adaptivePredict(self._input,23,self._ctx) - self.state = 215 + self.state = 221 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.ID: - self.state = 214 + self.state = 220 self.match(PyxellParser.ID) - self.state = 217 + self.state = 223 self.match(PyxellParser.T__61) - self.state = 218 + self.state = 224 self.expr(1) pass self._ctx.stop = self._input.LT(-1) - self.state = 316 + self.state = 322 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,34,self._ctx) + _alt = self._interp.adaptivePredict(self._input,35,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 314 + self.state = 320 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,33,self._ctx) + la_ = self._interp.adaptivePredict(self._input,34,self._ctx) if la_ == 1: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 221 + self.state = 227 if not self.precpred(self._ctx, 18): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 18)") - self.state = 222 + self.state = 228 localctx.op = self.match(PyxellParser.T__8) - self.state = 223 + self.state = 229 self.expr(18) pass elif la_ == 2: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 224 + self.state = 230 if not self.precpred(self._ctx, 16): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 16)") - self.state = 225 + self.state = 231 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__9) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__11))) != 0)): @@ -1819,18 +1839,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 226 + self.state = 232 self.expr(17) pass elif la_ == 3: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 227 + self.state = 233 if not self.precpred(self._ctx, 15): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 15)") - self.state = 228 + self.state = 234 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__12 or _la==PyxellParser.T__13): @@ -1838,18 +1858,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 229 + self.state = 235 self.expr(16) pass elif la_ == 4: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 230 + self.state = 236 if not self.precpred(self._ctx, 14): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 14)") - self.state = 231 + self.state = 237 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__14 or _la==PyxellParser.T__15): @@ -1857,313 +1877,313 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 232 + self.state = 238 self.expr(15) pass elif la_ == 5: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 233 + self.state = 239 if not self.precpred(self._ctx, 13): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") - self.state = 234 + self.state = 240 localctx.op = self.match(PyxellParser.T__16) - self.state = 235 + self.state = 241 self.expr(14) pass elif la_ == 6: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 236 + self.state = 242 if not self.precpred(self._ctx, 12): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 12)") - self.state = 237 + self.state = 243 localctx.op = self.match(PyxellParser.T__17) - self.state = 238 + self.state = 244 self.expr(13) pass elif la_ == 7: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 239 + self.state = 245 if not self.precpred(self._ctx, 11): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") - self.state = 240 + self.state = 246 localctx.op = self.match(PyxellParser.T__18) - self.state = 241 + self.state = 247 self.expr(12) pass elif la_ == 8: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 242 + self.state = 248 if not self.precpred(self._ctx, 10): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") - self.state = 243 + self.state = 249 localctx.dots = self._input.LT(1) _la = self._input.LA(1) - if not(_la==PyxellParser.T__47 or _la==PyxellParser.T__48): + if not(_la==PyxellParser.T__49 or _la==PyxellParser.T__50): localctx.dots = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 244 + self.state = 250 self.expr(11) pass elif la_ == 9: localctx = PyxellParser.ExprIsContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 245 + self.state = 251 if not self.precpred(self._ctx, 8): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") - self.state = 246 + self.state = 252 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not(_la==PyxellParser.T__49 or _la==PyxellParser.T__50): + if not(_la==PyxellParser.T__51 or _la==PyxellParser.T__52): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 247 + self.state = 253 self.expr(9) pass elif la_ == 10: localctx = PyxellParser.ExprCmpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 248 + self.state = 254 if not self.precpred(self._ctx, 7): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") - self.state = 249 + self.state = 255 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__51) | (1 << PyxellParser.T__52) | (1 << PyxellParser.T__53) | (1 << PyxellParser.T__54) | (1 << PyxellParser.T__55) | (1 << PyxellParser.T__56))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__34) | (1 << PyxellParser.T__35) | (1 << PyxellParser.T__53) | (1 << PyxellParser.T__54) | (1 << PyxellParser.T__55) | (1 << PyxellParser.T__56))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 250 + self.state = 256 self.expr(7) pass elif la_ == 11: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 251 + self.state = 257 if not self.precpred(self._ctx, 5): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") - self.state = 252 + self.state = 258 localctx.op = self.match(PyxellParser.T__58) - self.state = 253 + self.state = 259 self.expr(5) pass elif la_ == 12: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 254 + self.state = 260 if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") - self.state = 255 + self.state = 261 localctx.op = self.match(PyxellParser.T__59) - self.state = 256 + self.state = 262 self.expr(4) pass elif la_ == 13: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 257 + self.state = 263 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 258 + self.state = 264 localctx.op = self.match(PyxellParser.T__19) - self.state = 259 + self.state = 265 self.expr(3) pass elif la_ == 14: localctx = PyxellParser.ExprCondContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 260 + self.state = 266 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 261 - self.match(PyxellParser.T__43) - self.state = 262 + self.state = 267 + self.match(PyxellParser.T__45) + self.state = 268 self.expr(0) - self.state = 263 - self.match(PyxellParser.T__38) - self.state = 264 + self.state = 269 + self.match(PyxellParser.T__40) + self.state = 270 self.expr(2) pass elif la_ == 15: localctx = PyxellParser.ExprIndexContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 266 + self.state = 272 if not self.precpred(self._ctx, 23): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 23)") - self.state = 268 + self.state = 274 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__43: - self.state = 267 - localctx.safe = self.match(PyxellParser.T__43) + if _la==PyxellParser.T__45: + self.state = 273 + localctx.safe = self.match(PyxellParser.T__45) - self.state = 270 - self.match(PyxellParser.T__41) - self.state = 271 + self.state = 276 + self.match(PyxellParser.T__43) + self.state = 277 self.tuple_expr() - self.state = 272 - self.match(PyxellParser.T__42) + self.state = 278 + self.match(PyxellParser.T__44) pass elif la_ == 16: localctx = PyxellParser.ExprSliceContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 274 + self.state = 280 if not self.precpred(self._ctx, 22): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 22)") - self.state = 275 - self.match(PyxellParser.T__41) - self.state = 277 + self.state = 281 + self.match(PyxellParser.T__43) + self.state = 283 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__34 - 13)) | (1 << (PyxellParser.T__41 - 13)) | (1 << (PyxellParser.T__46 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 276 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__36 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__48 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 282 localctx.e1 = self.expr(0) - self.state = 279 - self.match(PyxellParser.T__38) - self.state = 281 + self.state = 285 + self.match(PyxellParser.T__40) + self.state = 287 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__34 - 13)) | (1 << (PyxellParser.T__41 - 13)) | (1 << (PyxellParser.T__46 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 280 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__36 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__48 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 286 localctx.e2 = self.expr(0) - self.state = 287 + self.state = 293 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__38: - self.state = 283 - self.match(PyxellParser.T__38) - self.state = 285 + if _la==PyxellParser.T__40: + self.state = 289 + self.match(PyxellParser.T__40) + self.state = 291 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__34 - 13)) | (1 << (PyxellParser.T__41 - 13)) | (1 << (PyxellParser.T__46 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 284 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__36 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__48 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 290 localctx.e3 = self.expr(0) - self.state = 289 - self.match(PyxellParser.T__42) + self.state = 295 + self.match(PyxellParser.T__44) pass elif la_ == 17: localctx = PyxellParser.ExprAttrContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 290 + self.state = 296 if not self.precpred(self._ctx, 21): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 21)") - self.state = 292 + self.state = 298 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__43: - self.state = 291 - localctx.safe = self.match(PyxellParser.T__43) + if _la==PyxellParser.T__45: + self.state = 297 + localctx.safe = self.match(PyxellParser.T__45) - self.state = 294 - self.match(PyxellParser.T__44) - self.state = 295 + self.state = 300 + self.match(PyxellParser.T__46) + self.state = 301 self.match(PyxellParser.ID) pass elif la_ == 18: localctx = PyxellParser.ExprCallContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 296 + self.state = 302 if not self.precpred(self._ctx, 20): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 20)") - self.state = 297 - self.match(PyxellParser.T__34) self.state = 303 + self.match(PyxellParser.T__36) + self.state = 309 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,31,self._ctx) + _alt = self._interp.adaptivePredict(self._input,32,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 298 + self.state = 304 self.call_arg() - self.state = 299 + self.state = 305 self.match(PyxellParser.T__23) - self.state = 305 + self.state = 311 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,31,self._ctx) + _alt = self._interp.adaptivePredict(self._input,32,self._ctx) - self.state = 307 + self.state = 313 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__34 - 13)) | (1 << (PyxellParser.T__41 - 13)) | (1 << (PyxellParser.T__46 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 306 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__36 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__48 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 312 self.call_arg() - self.state = 309 - self.match(PyxellParser.T__35) + self.state = 315 + self.match(PyxellParser.T__37) pass elif la_ == 19: localctx = PyxellParser.ExprUnaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 310 + self.state = 316 if not self.precpred(self._ctx, 19): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 19)") - self.state = 311 - localctx.op = self.match(PyxellParser.T__45) + self.state = 317 + localctx.op = self.match(PyxellParser.T__47) pass elif la_ == 20: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 312 + self.state = 318 if not self.precpred(self._ctx, 9): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") - self.state = 313 - localctx.dots = self.match(PyxellParser.T__48) + self.state = 319 + localctx.dots = self.match(PyxellParser.T__50) pass - self.state = 318 + self.state = 324 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,34,self._ctx) + _alt = self._interp.adaptivePredict(self._input,35,self._ctx) except RecognitionException as re: localctx.exception = re @@ -2218,20 +2238,20 @@ def tuple_expr(self): try: localctx = PyxellParser.ExprTupleContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 324 + self.state = 330 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,35,self._ctx) + _alt = self._interp.adaptivePredict(self._input,36,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 319 + self.state = 325 self.expr(0) - self.state = 320 + self.state = 326 self.match(PyxellParser.T__23) - self.state = 326 + self.state = 332 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,35,self._ctx) + _alt = self._interp.adaptivePredict(self._input,36,self._ctx) - self.state = 327 + self.state = 333 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -2285,9 +2305,9 @@ def interpolation_expr(self): try: localctx = PyxellParser.ExprInterpolationContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 329 + self.state = 335 self.tuple_expr() - self.state = 330 + self.state = 336 self.match(PyxellParser.EOF) except RecognitionException as re: localctx.exception = re @@ -2358,27 +2378,27 @@ def comprehension(self): self.enterRule(localctx, 20, self.RULE_comprehension) self._la = 0 # Token type try: - self.state = 342 + self.state = 348 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__30]: localctx = PyxellParser.ComprehensionGeneratorContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 332 + self.state = 338 self.match(PyxellParser.T__30) - self.state = 333 + self.state = 339 self.tuple_expr() - self.state = 334 + self.state = 340 self.match(PyxellParser.T__31) - self.state = 335 + self.state = 341 self.tuple_expr() - self.state = 338 + self.state = 344 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__32: - self.state = 336 + self.state = 342 self.match(PyxellParser.T__32) - self.state = 337 + self.state = 343 self.tuple_expr() @@ -2386,9 +2406,9 @@ def comprehension(self): elif token in [PyxellParser.T__24]: localctx = PyxellParser.ComprehensionFilterContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 340 + self.state = 346 self.match(PyxellParser.T__24) - self.state = 341 + self.state = 347 self.expr(0) pass else: @@ -2446,17 +2466,17 @@ def call_arg(self): try: localctx = PyxellParser.CallArgContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 346 + self.state = 352 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,38,self._ctx) + la_ = self._interp.adaptivePredict(self._input,39,self._ctx) if la_ == 1: - self.state = 344 + self.state = 350 self.match(PyxellParser.ID) - self.state = 345 + self.state = 351 self.match(PyxellParser.T__7) - self.state = 348 + self.state = 354 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -2598,25 +2618,25 @@ def atom(self): self.enterRule(localctx, 24, self.RULE_atom) self._la = 0 # Token type try: - self.state = 357 + self.state = 363 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: localctx = PyxellParser.AtomIntContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 350 + self.state = 356 self.match(PyxellParser.INT) pass elif token in [PyxellParser.FLOAT]: localctx = PyxellParser.AtomFloatContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 351 + self.state = 357 self.match(PyxellParser.FLOAT) pass elif token in [PyxellParser.T__62, PyxellParser.T__63]: localctx = PyxellParser.AtomBoolContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 352 + self.state = 358 _la = self._input.LA(1) if not(_la==PyxellParser.T__62 or _la==PyxellParser.T__63): self._errHandler.recoverInline(self) @@ -2627,25 +2647,25 @@ def atom(self): elif token in [PyxellParser.CHAR]: localctx = PyxellParser.AtomCharContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 353 + self.state = 359 self.match(PyxellParser.CHAR) pass elif token in [PyxellParser.STRING]: localctx = PyxellParser.AtomStringContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 354 + self.state = 360 self.match(PyxellParser.STRING) pass elif token in [PyxellParser.T__64]: localctx = PyxellParser.AtomNullContext(self, localctx) self.enterOuterAlt(localctx, 6) - self.state = 355 + self.state = 361 self.match(PyxellParser.T__64) pass elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) self.enterOuterAlt(localctx, 7) - self.state = 356 + self.state = 362 self.match(PyxellParser.ID) pass else: @@ -2666,44 +2686,57 @@ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) self.parser = parser + + def getRuleIndex(self): + return PyxellParser.RULE_id_list + + + def copyFrom(self, ctx:ParserRuleContext): + super().copyFrom(ctx) + + + + class IdListContext(Id_listContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Id_listContext + super().__init__(parser) + self.copyFrom(ctx) + def ID(self, i:int=None): if i is None: return self.getTokens(PyxellParser.ID) else: return self.getToken(PyxellParser.ID, i) - def getRuleIndex(self): - return PyxellParser.RULE_id_list - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitId_list" ): - return visitor.visitId_list(self) + if hasattr( visitor, "visitIdList" ): + return visitor.visitIdList(self) else: return visitor.visitChildren(self) - def id_list(self): localctx = PyxellParser.Id_listContext(self, self._ctx, self.state) self.enterRule(localctx, 26, self.RULE_id_list) try: + localctx = PyxellParser.IdListContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 363 + self.state = 369 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,40,self._ctx) + _alt = self._interp.adaptivePredict(self._input,41,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 359 + self.state = 365 self.match(PyxellParser.ID) - self.state = 360 + self.state = 366 self.match(PyxellParser.T__23) - self.state = 365 + self.state = 371 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,40,self._ctx) + _alt = self._interp.adaptivePredict(self._input,41,self._ctx) - self.state = 366 + self.state = 372 self.match(PyxellParser.ID) except RecognitionException as re: localctx.exception = re @@ -2863,7 +2896,7 @@ def typ(self, _p:int=0): self.enterRecursionRule(localctx, 28, self.RULE_typ, _p) try: self.enterOuterAlt(localctx, 1) - self.state = 380 + self.state = 386 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.ID]: @@ -2871,96 +2904,96 @@ def typ(self, _p:int=0): self._ctx = localctx _prevctx = localctx - self.state = 369 + self.state = 375 self.match(PyxellParser.ID) pass - elif token in [PyxellParser.T__34]: + elif token in [PyxellParser.T__36]: localctx = PyxellParser.TypeParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 370 - self.match(PyxellParser.T__34) - self.state = 371 + self.state = 376 + self.match(PyxellParser.T__36) + self.state = 377 self.typ(0) - self.state = 372 - self.match(PyxellParser.T__35) + self.state = 378 + self.match(PyxellParser.T__37) pass - elif token in [PyxellParser.T__41]: + elif token in [PyxellParser.T__43]: localctx = PyxellParser.TypeArrayContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 374 - self.match(PyxellParser.T__41) - self.state = 375 + self.state = 380 + self.match(PyxellParser.T__43) + self.state = 381 self.typ(0) - self.state = 376 - self.match(PyxellParser.T__42) + self.state = 382 + self.match(PyxellParser.T__44) pass elif token in [PyxellParser.T__61]: localctx = PyxellParser.TypeFunc0Context(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 378 + self.state = 384 self.match(PyxellParser.T__61) - self.state = 379 + self.state = 385 self.typ(1) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 392 + self.state = 398 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,43,self._ctx) + _alt = self._interp.adaptivePredict(self._input,44,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 390 + self.state = 396 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,42,self._ctx) + la_ = self._interp.adaptivePredict(self._input,43,self._ctx) if la_ == 1: localctx = PyxellParser.TypeTupleContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 382 + self.state = 388 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 383 + self.state = 389 self.match(PyxellParser.T__9) - self.state = 384 + self.state = 390 self.typ(3) pass elif la_ == 2: localctx = PyxellParser.TypeFuncContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 385 + self.state = 391 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 386 + self.state = 392 self.match(PyxellParser.T__61) - self.state = 387 + self.state = 393 self.typ(2) pass elif la_ == 3: localctx = PyxellParser.TypeNullableContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 388 + self.state = 394 if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") - self.state = 389 - self.match(PyxellParser.T__43) + self.state = 395 + self.match(PyxellParser.T__45) pass - self.state = 394 + self.state = 400 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,43,self._ctx) + _alt = self._interp.adaptivePredict(self._input,44,self._ctx) except RecognitionException as re: localctx.exception = re diff --git a/src/antlr/PyxellVisitor.py b/src/antlr/PyxellVisitor.py index d7d705dd..929384a3 100644 --- a/src/antlr/PyxellVisitor.py +++ b/src/antlr/PyxellVisitor.py @@ -239,8 +239,8 @@ def visitAtomId(self, ctx:PyxellParser.AtomIdContext): return self.visitChildren(ctx) - # Visit a parse tree produced by PyxellParser#id_list. - def visitId_list(self, ctx:PyxellParser.Id_listContext): + # Visit a parse tree produced by PyxellParser#IdList. + def visitIdList(self, ctx:PyxellParser.IdListContext): return self.visitChildren(ctx) diff --git a/src/ast.py b/src/ast.py index 9ca3b9f7..bbca11e2 100644 --- a/src/ast.py +++ b/src/ast.py @@ -48,9 +48,9 @@ def visitStmt(self, ctx): def visitStmtUse(self, ctx): if ctx.only: - detail = ['only', *map(str, ctx.only.ID())] + detail = ['only', *self.visit(ctx.only)] elif ctx.hiding: - detail = ['hiding', *map(str, ctx.hiding.ID())] + detail = ['hiding', *self.visit(ctx.hiding)] elif ctx.as_: detail = ['as', ctx.as_.text] else: @@ -141,6 +141,7 @@ def visitStmtFunc(self, ctx): return { **_node(ctx, 'StmtFunc'), 'id': self.visit(ctx.ID()), + 'typevars': self.visit(ctx.typevars) or [], 'args': self.visit(ctx.func_arg()), 'ret': self.visit(ctx.ret), 'block': self.visit(ctx.block()), @@ -353,6 +354,9 @@ def visitAtomId(self, ctx): 'id': id, } + def visitIdList(self, ctx): + return self.visit(ctx.ID()) + ### Types ### diff --git a/src/compiler.py b/src/compiler.py index d15b3cf5..fe023de3 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -1,5 +1,6 @@ import re +from collections import defaultdict from contextlib import contextmanager import llvmlite.ir as ll @@ -130,13 +131,33 @@ def block(self): self.builder.function.blocks.append(label_end) self.builder.position_at_end(label_end) + def resolve_type(self, type): + if type.isVar(): + return self.env[type.name] + if type.isArray(): + return tArray(self.resolve_type(type.subtype)) + if type.isNullable(): + return tNullable(self.resolve_type(type.subtype)) + if type.isTuple(): + return tTuple([self.resolve_type(type) for type in type.elements]) + if type.isFunc(): + return tFunc([Arg(self.resolve_type(arg.type), arg.name, arg.default) for arg in type.args], self.resolve_type(type.ret)) + return type + + + ### Code generation ### + def get(self, node, id, load=True): if id not in self.env: self.throw(node, err.UndeclaredIdentifier(id)) + result = self.env[id] + if not isinstance(result, Value): + self.throw(node, err.NotVariable(id)) if id not in self.initialized: self.throw(node, err.UninitializedIdentifier(id)) - result = self.env[id] if result.isTemplate(): + if result.typevars: + return result result = self.function(node, result) return self.builder.load(result) if load else result @@ -260,13 +281,10 @@ def cast(self, node, value, type): def unify(self, node, *values): if not values: return [] - values = list(values) - type = values[0].type - for value in values[1:]: - type = unify_types(value.type, type) - if type is None: - self.throw(node, err.UnknownType()) + type = unify_types(*[value.type for value in values]) + if type is None: + self.throw(node, err.UnknownType()) return [self.cast(node, value, type) for value in values] @@ -876,54 +894,85 @@ def convert_expr(expr): return expr def function(self, node, template): - if template.compiled: - return template.compiled + real_types = tuple(self.env.get(name) for name in template.typevars) + + if real_types in template.compiled: + return template.compiled[real_types] id = template.id - type = template.type body = template.body if not body: # `extern` - template.compiled = ll.GlobalVariable(self.module, type, self.module.get_unique_name('f.'+id)) - return template.compiled + func_ptr = ll.GlobalVariable(self.module, template.type, self.module.get_unique_name('f.'+id)) + template.compiled[real_types] = func_ptr - args = type.args - ret = type.ret + else: + unknown_ret_type_variables = {name: tVar(name) for name in get_type_variables(template.type.ret) if name not in self.env} - func = ll.Function(self.module, type.pointee, self.module.get_unique_name('def.'+id)) + # Try to resolve any unresolved type variables in the return type by fake-compiling the function. + if unknown_ret_type_variables: + for name in unknown_ret_type_variables: + self.env[name] = tVar(name) - func_ptr = ll.GlobalVariable(self.module, type, self.module.get_unique_name(id)) - func_ptr.initializer = func - template.compiled = func_ptr + func_type = self.resolve_type(template.type) - prev_label = self.builder.basic_block - entry = func.append_basic_block('entry') - self.builder.position_at_end(entry) + with self.local(): + with self.no_output(): + self.env = template.env.copy() - with self.local(): - self.env = template.env - - self.env['#return'] = ret - self.env.pop('#continue', None) - self.env.pop('#break', None) + self.env['#return'] = func_type.ret - for arg, value in zip(args, func.args): - ptr = self.declare(node, arg.type, arg.name, redeclare=True, initialize=True) - self.env[arg.name] = ptr - self.builder.store(value, ptr) + for arg in func_type.args: + ptr = self.declare(node, arg.type, arg.name, redeclare=True, initialize=True) + self.env[arg.name] = ptr - self.compile(body) + self.compile(body) - if ret == tVoid: - self.builder.ret_void() - else: - if '#return' not in self.initialized: - self.throw(node, err.MissingReturn(id)) - self.builder.ret(ret.default()) + ret = self.env['#return'] - self.builder.position_at_end(prev_label) + # This is safe, since any type assignment errors have been found during the compilation. + self.env.update(type_variables_assignment(ret, func_type.ret)) + + real_types = tuple(self.env[name] for name in template.typevars) + func_type = self.resolve_type(template.type) + + func = ll.Function(self.module, func_type.pointee, self.module.get_unique_name('def.'+id)) + + func_ptr = ll.GlobalVariable(self.module, func_type, self.module.get_unique_name(id)) + func_ptr.initializer = func + template.compiled[real_types] = func_ptr + + prev_label = self.builder.basic_block + entry = func.append_basic_block('entry') + self.builder.position_at_end(entry) + + with self.local(): + self.env = template.env.copy() + + for name, type in zip(template.typevars, real_types): + self.env[name] = type + + self.env['#return'] = func_type.ret + self.env.pop('#continue', None) + self.env.pop('#break', None) + + for arg, value in zip(func_type.args, func.args): + ptr = self.declare(node, arg.type, arg.name, redeclare=True, initialize=True) + self.env[arg.name] = ptr + self.builder.store(value, ptr) + + self.compile(body) + + if func_type.ret == tVoid: + self.builder.ret_void() + else: + if '#return' not in self.initialized: + self.throw(node, err.MissingReturn(id)) + self.builder.ret(func_type.ret.default()) + + self.builder.position_at_end(prev_label) - return template.compiled + return func_ptr ### Statements ### @@ -971,7 +1020,7 @@ def compileStmtPrint(self, node): self.write('\n') def compileStmtDecl(self, node): - type = self.compile(node['type']) + type = self.resolve_type(self.compile(node['type'])) id = node['id'] expr = node['expr'] ptr = self.declare(node, type, id, initialize=bool(expr)) @@ -1223,26 +1272,32 @@ def compileStmtFunc(self, node): id = node['id'] self.initialized.add(id) - args = [] - expect_default = False - for arg in node['args']: - type = self.compile(arg['type']) - name = arg['name'] - default = arg.get('default') - if default: - with self.no_output(): - self.cast(default, self.compile(default), type) - expect_default = True - elif expect_default: - self.throw(arg, err.MissingDefault(name)) - args.append(Arg(type, name, default)) - - ret_type = self.compile(node['ret']) or tVoid - func_type = tFunc(args, ret_type) - - func = FunctionTemplate(id, func_type, node['block']) - self.env[id] = func - func.env = self.env.copy() + with self.local(): + typevars = node.get('typevars', []) + for name in typevars: + self.env[name] = tVar(name) + + args = [] + expect_default = False + for arg in node['args']: + type = self.compile(arg['type']) + name = arg['name'] + default = arg.get('default') + if default: + with self.no_output(): + self.cast(default, self.compile(default), type) + expect_default = True + elif expect_default: + self.throw(arg, err.MissingDefault(name)) + args.append(Arg(type, name, default)) + + ret_type = self.compile(node['ret']) or tVoid + func_type = tFunc(args, ret_type) + + env = self.env.copy() + func = FunctionTemplate(id, typevars, func_type, node['block'], env) + + self.env[id] = env[id] = func def compileStmtReturn(self, node): try: @@ -1254,7 +1309,18 @@ def compileStmtReturn(self, node): expr = node['expr'] if expr: - value = self.cast(node, self.compile(expr), type) + value = self.compile(expr) + + # Update unresolved type variables in the return type. + d = type_variables_assignment(value.type, type) + if d is None: + self.throw(node, err.IllegalAssignment(value.type, type)) + if d: + self.env.update(d) + type = self.env['#return'] = self.resolve_type(type) + + value = self.cast(node, value, type) + elif type != tVoid: self.throw(node, err.IllegalAssignment(tVoid, type)) @@ -1277,7 +1343,7 @@ def compileExprArrayComprehension(self, node): value, array, index = [{ 'node': 'AtomId', - 'id': f'__cpr_{name}{len(self.env)}', + 'id': f'__cpr_{len(self.env)}_{name}', } for name in ['value', 'array', 'index']] stmt = inner_stmt = { @@ -1343,7 +1409,7 @@ def compileExprSlice(self, node): array, length, start, end, step, index = [{ 'node': 'AtomId', - 'id': f'__slice_{name}{len(self.env)}', + 'id': f'__slice_{len(self.env)}_{name}', } for name in ['array', 'length', 'start', 'end', 'step', 'index']] with self.local(): @@ -1417,60 +1483,87 @@ def _call(obj, func): self.throw(node, err.ExpectedNamedArgument()) pos_args[i] = expr - func_args = func.type.args[1:] if obj else func.type.args - for i, func_arg in enumerate(func_args): - name = func_arg.name - if name in named_args: - if i in pos_args: - self.throw(node, err.RepeatedArgument(name)) - expr = named_args.pop(name) - elif i in pos_args: - expr = pos_args.pop(i) - elif func_arg.default: - expr = func_arg.default - else: - self.throw(node, err.TooFewArguments(func.type)) - - expr = self.convert_lambda(expr) - if expr['node'] == 'ExprLambda': - ids = expr['ids'] - type = func_arg.type - if not type.isFunc(): - self.throw(node, err.IllegalLambda()) - if len(ids) < len(type.args): - self.throw(node, err.TooFewArguments(type)) - if len(ids) > len(type.args): - self.throw(node, err.TooManyArguments(type)) - id = self.module.get_unique_name('lambda') - self.compile({ - **expr, - 'node': 'StmtFunc', - 'id': id, - 'args': [{ - 'type': arg.type, - 'name': name, - } for arg, name in zip(type.args, ids)], - 'ret': type.ret, - 'block': { + with self.local(): + func_args = func.type.args[1:] if obj else func.type.args + + type_variables = defaultdict(list) + + for i, func_arg in enumerate(func_args): + name = func_arg.name + if name in named_args: + if i in pos_args: + self.throw(node, err.RepeatedArgument(name)) + expr = named_args.pop(name) + elif i in pos_args: + expr = pos_args.pop(i) + elif func_arg.default: + expr = func_arg.default + else: + self.throw(node, err.TooFewArguments(func.type)) + + expr = self.convert_lambda(expr) + if expr['node'] == 'ExprLambda': + ids = expr['ids'] + type = func_arg.type + if not type.isFunc(): + self.throw(node, err.IllegalLambda()) + if len(ids) < len(type.args): + self.throw(node, err.TooFewArguments(type)) + if len(ids) > len(type.args): + self.throw(node, err.TooManyArguments(type)) + id = f'__lambda_{len(self.env)}' + self.compile({ **expr, - 'node': 'StmtReturn', - 'expr': expr['expr'], - }, - }) - value = self.get(expr, id) - else: - value = self.compile(expr) + 'node': 'StmtFunc', + 'id': id, + 'args': [{ + 'type': arg.type, + 'name': name, + } for arg, name in zip(type.args, ids)], + 'ret': type.ret, + 'block': { + **expr, + 'node': 'StmtReturn', + 'expr': expr['expr'], + }, + }) + expr = { + 'node': 'AtomId', + 'id': id, + } + args.append(expr) + + else: + value = self.compile(expr) + + d = type_variables_assignment(value.type, func_arg.type) + if d is None: + self.throw(node, err.IllegalAssignment(value.type, func_arg.type)) - value = self.cast(expr, value, func_arg.type) - args.append(value) + for name, type in d.items(): + type_variables[name].append(type) - if named_args: - self.throw(node, err.UnexpectedArgument(next(iter(named_args)))) - if pos_args: - self.throw(node, err.TooManyArguments(func.type)) + args.append(value) - if obj: - args.insert(0, obj) + for name, types in type_variables.items(): + type = unify_types(*types) + if type is None: + self.throw(node, err.InvalidArgumentTypes(tVar(name))) + + self.env[name] = type + + if named_args: + self.throw(node, err.UnexpectedArgument(next(iter(named_args)))) + if pos_args: + self.throw(node, err.TooManyArguments(func.type)) + + args = [self.cast(node, self.compile(arg), self.resolve_type(func_arg.type)) for arg, func_arg in zip(args, func_args)] + + if obj: + args.insert(0, obj) + + if func.isTemplate(): + func = self.builder.load(self.function(node, func)) return self.builder.call(func, args) @@ -1488,6 +1581,7 @@ def callback(): return self.safe(node, obj, callback, vNull) else: obj, func = self.attribute(expr, expr['expr'], attr) + else: obj = None func = self.compile(expr) @@ -1651,7 +1745,10 @@ def compileTypeName(self, node): }.get(name) if type is None: - self.throw(node, err.NotType(name)) + type = self.env.get(name) + if not isinstance(type, Type): + self.throw(node, err.NotType(name)) + return type return type diff --git a/src/errors.py b/src/errors.py index 0a7b6b2a..4f25f6a5 100644 --- a/src/errors.py +++ b/src/errors.py @@ -18,6 +18,7 @@ class PyxellError(Exception): IllegalAssignment = lambda t1, t2: f"Illegal assignment from `{t1.show()}` to `{t2.show()}`" IllegalLambda = lambda: "Lambda expression cannot be used in this context" IllegalRange = lambda: "Range expression cannot be used in this context" + InvalidArgumentTypes = lambda t: f"Cannot unify argument types for type variable `{t.show()}`" InvalidDeclaration = lambda t: f"Cannot declare variable of type `{t.show()}`" InvalidLoopStep = lambda: f"Incompatible number of loop variables and step expressions" InvalidModule = lambda id: f"Could not find module `{id}`" @@ -35,6 +36,7 @@ class PyxellError(Exception): NotNullable = lambda t: f"Type `{t.show()}` is not nullable" NotPrintable = lambda t: f"Variable of type `{t.show()}` cannot be printed" NotType = lambda id: f"Identifier `{id}` does not represent a type" + NotVariable = lambda id: f"Identifier `{id}` does not represent a variable" RedeclaredIdentifier = lambda id: f"Identifier `{id}` is already declared" RepeatedArgument = lambda id: f"Repeated argument `{id}`" TooFewArguments = lambda t: f"Too few arguments for function `{t.show()}`" diff --git a/src/types.py b/src/types.py index 35638c18..92ffd0f6 100644 --- a/src/types.py +++ b/src/types.py @@ -1,5 +1,5 @@ -from collections import namedtuple +from collections import defaultdict, namedtuple import llvmlite.ir as ll @@ -7,15 +7,17 @@ __all__ = [ - 'tVoid', 'tInt', 'tFloat', 'tBool', 'tChar', 'tPtr', 'tString', 'tArray', 'tNullable', 'tTuple', 'tFunc', 'tUnknown', + 'Type', 'Value', + 'tVoid', 'tInt', 'tFloat', 'tBool', 'tChar', 'tPtr', 'tString', 'tArray', 'tNullable', 'tTuple', 'tFunc', 'tVar', 'tUnknown', 'Arg', - 'can_cast', 'unify_types', + 'unify_types', 'type_variables_assignment', 'get_type_variables', 'can_cast', 'vInt', 'vFloat', 'vBool', 'vFalse', 'vTrue', 'vChar', 'vNull', 'FunctionTemplate', ] Type = ll.Type +Value = ll.Value class CustomStructType(ll.LiteralStructType): @@ -49,6 +51,20 @@ def __hash__(self): return hash(NullableType) +class VariableType(Type): + + def __init__(self, name): + super().__init__() + self.name = name + self.kind = 'variable' + + def __eq__(self, other): + return isinstance(other, VariableType) and self.name == other.name + + def __hash__(self): + return hash(VariableType) + + class UnknownType(Type): def _to_string(self): @@ -125,6 +141,14 @@ def isFunc(type): return getattr(type, 'kind', None) == 'function' +def tVar(name): + return VariableType(name) + +@extend_class(Type) +def isVar(type): + return getattr(type, 'kind', None) == 'variable' + + @extend_class(Type) def isCollection(type): return type == tString or type.isArray() @@ -145,42 +169,94 @@ def isUnknown(type): return False -def can_cast(type1, type2): - if type1 == type2: - return True - if type1.isArray() and type2.isArray(): - return can_cast(type1.subtype, type2.subtype) - if type1.isNullable() and type2.isNullable(): - return can_cast(type1.subtype, type2.subtype) - if type2.isNullable(): - return can_cast(type1, type2.subtype) - if type1.isTuple() and type2.isTuple(): - return len(type1.elements) == len(type2.elements) and \ - all(can_cast(t1, t2) for t1, t2 in zip(type1.elements, type2.elements)) - if type1 == tUnknown or type2 == tUnknown: - return True - return False +def unify_types(type1, *types): + if not types: + return type1 + type2, *types = types + if types: + return unify_types(unify_types(type1, type2), *types) + + if type1 is None or type2 is None: + return None -def unify_types(type1, type2): if type1 == type2: return type1 + if type1.isArray() and type2.isArray(): subtype = unify_types(type1.subtype, type2.subtype) return tArray(subtype) if subtype else None + if type1.isNullable() or type2.isNullable(): subtype = unify_types(type1.subtype if type1.isNullable() else type1, type2.subtype if type2.isNullable() else type2) return tNullable(subtype) if subtype else None + if type1.isTuple() and type2.isTuple(): elems = [unify_types(t1, t2) for t1, t2 in zip(type1.elements, type2.elements)] return tTuple(elems) if all(elems) and len(type1.elements) == len(type2.elements) else None + if type1 == tUnknown: return type2 if type2 == tUnknown: return type1 + + return None + + +def type_variables_assignment(type1, type2): + + if type1.isArray() and type2.isArray(): + return type_variables_assignment(type1.subtype, type2.subtype) + + if type1.isNullable() and type2.isNullable(): + return type_variables_assignment(type1.subtype, type2.subtype) + + if type2.isNullable(): + return type_variables_assignment(type1, type2.subtype) + + if type1.isTuple() and type2.isTuple(): + if len(type1.elements) != len(type2.elements): + return None + result = defaultdict(list) + for e1, e2 in zip(type1.elements, type2.elements): + d = type_variables_assignment(e1, e2) + if d is None: + return None + for name, type in d.items(): + result[name].append(type) + for name, types in result.items(): + type = unify_types(*types) + if type is None: + return None + result[name] = type + return result + + if type1.isFunc() and type2.isFunc(): + return type_variables_assignment( + tTuple([arg.type for arg in type1.args] + [type1.ret]), + tTuple([arg.type for arg in type2.args] + [type2.ret])) + + if type2.isVar(): + return {type2.name: type1} + + if type1 == tUnknown or type2 == tUnknown: + return {} + + if type1 == type2: + return {} + return None +def get_type_variables(type): + # For this to work properly, the condition `type1 == type2` in `type_variables_assignment` must be at the bottom. + return type_variables_assignment(type, type).keys() + + +def can_cast(type1, type2): + return type_variables_assignment(type1, type2) == {} + + @extend_class(Type) def show(type): if type == tVoid: @@ -203,6 +279,8 @@ def show(type): return '*'.join(t.show() for t in type.elements) if type.isFunc(): return '->'.join(arg.type.show() for arg in type.args) + '->' + type.ret.show() + if type.isVar(): + return type.name if type == tUnknown: return '' return str(type) @@ -232,18 +310,19 @@ def vNull(type=tNullable(tUnknown)): return ll.Constant(type, 'null') -@extend_class(ll.Value) +@extend_class(Value) def isTemplate(value): return False -class FunctionTemplate: +class FunctionTemplate(Value): - def __init__(self, id, type, body): + def __init__(self, id, typevars, type, body, env): self.id = id + self.typevars = typevars self.type = type self.body = body - self.env = None - self.compiled = None + self.env = env + self.compiled = {} def isTemplate(self): return True diff --git a/test.py b/test.py index 861ea327..b7e7f205 100644 --- a/test.py +++ b/test.py @@ -5,6 +5,7 @@ import glob import os import subprocess +import traceback from timeit import default_timer as timer from pathlib import Path @@ -67,6 +68,9 @@ except subprocess.CalledProcessError as e: print(f"{R}{e.output.decode()}{E}") continue + except Exception: + print(f"{R}{traceback.format_exc()}{E}") + continue if error_expected: print(f"{R}Program compiled successfully, but error expected.\n---\n> {error_expected}{E}") diff --git a/test/bad/generics/call01.err b/test/bad/generics/call01.err index 9137db88..e002df20 100644 --- a/test/bad/generics/call01.err +++ b/test/bad/generics/call01.err @@ -1 +1 @@ -Illegal assignment from `Char` to `T`. \ No newline at end of file +Cannot unify argument types for type variable `T`. \ No newline at end of file diff --git a/test/bad/generics/call01.px b/test/bad/generics/call01.px index 466d96cf..0e706f45 100644 --- a/test/bad/generics/call01.px +++ b/test/bad/generics/call01.px @@ -1,5 +1,5 @@ -func f(T x) def +func f(T x, T y) def return -f('x') +f(0, 0.0) diff --git a/test/bad/generics/call02.err b/test/bad/generics/call02.err index 22dd708a..27f4a5ad 100644 --- a/test/bad/generics/call02.err +++ b/test/bad/generics/call02.err @@ -1 +1 @@ -Illegal assignment from `Float` to `T`. \ No newline at end of file +Illegal assignment from `Char` to `Int`. \ No newline at end of file diff --git a/test/bad/generics/call02.px b/test/bad/generics/call02.px index 060914dc..d50312df 100644 --- a/test/bad/generics/call02.px +++ b/test/bad/generics/call02.px @@ -1,5 +1,8 @@ -func f(T x, T y) def - return +func f(Int x) Int def + return x -f(0, 0.0) +func g(T x) def + print f(x) + +g('0') diff --git a/test/bad/generics/call03.err b/test/bad/generics/call03.err index 11078459..e002df20 100644 --- a/test/bad/generics/call03.err +++ b/test/bad/generics/call03.err @@ -1 +1 @@ -Illegal assignment from `T` to `Int`. \ No newline at end of file +Cannot unify argument types for type variable `T`. \ No newline at end of file diff --git a/test/bad/generics/call03.px b/test/bad/generics/call03.px index 52f2d937..9edadfd2 100644 --- a/test/bad/generics/call03.px +++ b/test/bad/generics/call03.px @@ -1,6 +1,8 @@ -func f(Int x) Int def - return x +func f(T x, T y) def + return -func g(T x) def - print f(x) +func g(A x, B y) def + f(x, y) + +g('x', false) diff --git a/test/bad/generics/call04.err b/test/bad/generics/call04.err deleted file mode 100644 index 8111d847..00000000 --- a/test/bad/generics/call04.err +++ /dev/null @@ -1 +0,0 @@ -Illegal assignment from `A` to `T`. \ No newline at end of file diff --git a/test/bad/generics/call04.px b/test/bad/generics/call04.px deleted file mode 100644 index 9350d993..00000000 --- a/test/bad/generics/call04.px +++ /dev/null @@ -1,6 +0,0 @@ - -func f(T x, T y) def - return - -func g(A x, B y) def - f(x, y) diff --git a/test/bad/generics/def01.px b/test/bad/generics/def01.px index 0e99dc3f..f93de3ff 100644 --- a/test/bad/generics/def01.px +++ b/test/bad/generics/def01.px @@ -1,3 +1,5 @@ -func f<>(T x) def +func f(T x) def return + +f(2) diff --git a/test/bad/generics/def02.err b/test/bad/generics/def02.err index 718e5c37..63261bf3 100644 --- a/test/bad/generics/def02.err +++ b/test/bad/generics/def02.err @@ -1 +1 @@ -Type `Type` is not a class. \ No newline at end of file +Syntax error. \ No newline at end of file diff --git a/test/bad/generics/def02.px b/test/bad/generics/def02.px index 2bb6cf88..84a9228f 100644 --- a/test/bad/generics/def02.px +++ b/test/bad/generics/def02.px @@ -1,3 +1,3 @@ -func f() def +func f<>() def return diff --git a/test/bad/generics/def03.px b/test/bad/generics/def03.px index 0c760ce0..8e720fb4 100644 --- a/test/bad/generics/def03.px +++ b/test/bad/generics/def03.px @@ -1,3 +1,5 @@ -func f(T x) T def +func f(T x) T def return T + +f(true) diff --git a/test/bad/generics/def04.px b/test/bad/generics/def04.px index 9593013b..f3c62c7c 100644 --- a/test/bad/generics/def04.px +++ b/test/bad/generics/def04.px @@ -1,3 +1,5 @@ -func f(N x) def +func f(N x) def y = N + +f(4) diff --git a/test/bad/generics/def05.px b/test/bad/generics/def05.px index 53d5dbd5..5af8b8b9 100644 --- a/test/bad/generics/def05.px +++ b/test/bad/generics/def05.px @@ -1,3 +1,5 @@ -func f(T x: 3) def +func f(T x: 3) def return + +f(3.0) diff --git a/test/bad/generics/def06.px b/test/bad/generics/def06.px index 64cd883b..fdbfd408 100644 --- a/test/bad/generics/def06.px +++ b/test/bad/generics/def06.px @@ -1,3 +1,5 @@ -func f<>() T def +func f() T def return + +f() diff --git a/test/bad/generics/def07.err b/test/bad/generics/def07.err new file mode 100644 index 00000000..6f8b911b --- /dev/null +++ b/test/bad/generics/def07.err @@ -0,0 +1 @@ +Not all code paths return a value in function `f`. \ No newline at end of file diff --git a/test/bad/generics/def07.px b/test/bad/generics/def07.px new file mode 100644 index 00000000..ec04f778 --- /dev/null +++ b/test/bad/generics/def07.px @@ -0,0 +1,5 @@ + +func f() V def + skip + +f() diff --git a/test/bad/generics/def08.err b/test/bad/generics/def08.err new file mode 100644 index 00000000..3fecba4b --- /dev/null +++ b/test/bad/generics/def08.err @@ -0,0 +1 @@ +Illegal assignment from `B` to `B`. \ No newline at end of file diff --git a/test/bad/generics/def08.px b/test/bad/generics/def08.px new file mode 100644 index 00000000..57e64f78 --- /dev/null +++ b/test/bad/generics/def08.px @@ -0,0 +1,5 @@ + +func f(A x) B def + return f(x) + +print f(false) diff --git a/test/bad/generics/print01.err b/test/bad/generics/print01.err index e23f8768..76d8ab86 100644 --- a/test/bad/generics/print01.err +++ b/test/bad/generics/print01.err @@ -1 +1 @@ -Variable of type `T` cannot be printed. \ No newline at end of file +Variable of type `String->Void` cannot be printed. \ No newline at end of file diff --git a/test/bad/generics/print01.px b/test/bad/generics/print01.px index fae53865..da2e6a93 100644 --- a/test/bad/generics/print01.px +++ b/test/bad/generics/print01.px @@ -1,3 +1,5 @@ -func f(T x) def +func f(T x) def print x + +f(write) diff --git a/test/bad/generics/print02.err b/test/bad/generics/print02.err index 7b6a26a2..da5cefdc 100644 --- a/test/bad/generics/print02.err +++ b/test/bad/generics/print02.err @@ -1 +1 @@ -Variable of type `Char*T` cannot be printed. \ No newline at end of file +Variable of type `Char->Int` cannot be printed. \ No newline at end of file diff --git a/test/bad/generics/print02.px b/test/bad/generics/print02.px index 3ab5ed38..29dc8488 100644 --- a/test/bad/generics/print02.px +++ b/test/bad/generics/print02.px @@ -1,3 +1,5 @@ -func f(T x) def +func f(T x) def print 'x', x + +f(ord) diff --git a/test/bad/generics/print03.err b/test/bad/generics/print03.err index 6baa975a..3648a4dc 100644 --- a/test/bad/generics/print03.err +++ b/test/bad/generics/print03.err @@ -1 +1 @@ -Variable of type `Int->Char*Int` cannot be printed. \ No newline at end of file +Variable of type `Int->Char` cannot be printed. \ No newline at end of file diff --git a/test/bad/generics/print03.px b/test/bad/generics/print03.px index 395e15c4..12d43569 100644 --- a/test/bad/generics/print03.px +++ b/test/bad/generics/print03.px @@ -1,5 +1,5 @@ -func f(T x) T def +func f(T x) T def return x -print f(chr), f(2) +print [(f(chr), f(2))] diff --git a/test/bad/generics/print04.err b/test/bad/generics/print04.err index ff412438..da5cefdc 100644 --- a/test/bad/generics/print04.err +++ b/test/bad/generics/print04.err @@ -1 +1 @@ -Identifier `B` does not represent a type. \ No newline at end of file +Variable of type `Char->Int` cannot be printed. \ No newline at end of file diff --git a/test/bad/generics/print04.px b/test/bad/generics/print04.px index ca03c11d..3b41808f 100644 --- a/test/bad/generics/print04.px +++ b/test/bad/generics/print04.px @@ -1,5 +1,5 @@ -func f(A x, A->B f) B def +func f(A x, A->B f) B def return f(x) -print f([1], _) +print f(ord, _) diff --git a/test/bad/generics/type01.err b/test/bad/generics/type01.err index 11078459..ca114297 100644 --- a/test/bad/generics/type01.err +++ b/test/bad/generics/type01.err @@ -1 +1 @@ -Illegal assignment from `T` to `Int`. \ No newline at end of file +Illegal assignment from `String` to `Int`. \ No newline at end of file diff --git a/test/bad/generics/type01.px b/test/bad/generics/type01.px index c8084902..21fb384e 100644 --- a/test/bad/generics/type01.px +++ b/test/bad/generics/type01.px @@ -1,3 +1,5 @@ -func f(T x) Int def +func f(T x) Int def return x + +f("0") diff --git a/test/bad/generics/type02.err b/test/bad/generics/type02.err index c349faf0..4b41ddc7 100644 --- a/test/bad/generics/type02.err +++ b/test/bad/generics/type02.err @@ -1 +1 @@ -Illegal assignment from `Bool` to `T`. \ No newline at end of file +Illegal assignment from `Bool` to `String`. \ No newline at end of file diff --git a/test/bad/generics/type02.px b/test/bad/generics/type02.px index 015dae54..21334aa7 100644 --- a/test/bad/generics/type02.px +++ b/test/bad/generics/type02.px @@ -1,3 +1,5 @@ -func f(T x, Bool b) T def +func f(T x, Bool b) T def return b + +f("false", false) diff --git a/test/bad/generics/type03.err b/test/bad/generics/type03.err index 4ec9b7d7..32402f76 100644 --- a/test/bad/generics/type03.err +++ b/test/bad/generics/type03.err @@ -1 +1 @@ -No binary operator `+` defined for `T` and `T`. \ No newline at end of file +No binary operator `+` defined for `Int` and `String`. \ No newline at end of file diff --git a/test/bad/generics/type03.px b/test/bad/generics/type03.px index c4aeeaf4..e5e4f575 100644 --- a/test/bad/generics/type03.px +++ b/test/bad/generics/type03.px @@ -1,3 +1,5 @@ -func f(T x, T y) T def +func f(A x, B y) C def return x + y + +f(0, "") diff --git a/test/bad/generics/type04.err b/test/bad/generics/type04.err index a0fb3438..b65179c8 100644 --- a/test/bad/generics/type04.err +++ b/test/bad/generics/type04.err @@ -1 +1 @@ -No binary operator `-` defined for `A` and `B`. \ No newline at end of file +Illegal assignment from `[Float]` to `Int`. \ No newline at end of file diff --git a/test/bad/generics/type04.px b/test/bad/generics/type04.px index 5a91dc0b..d394a97a 100644 --- a/test/bad/generics/type04.px +++ b/test/bad/generics/type04.px @@ -1,3 +1,5 @@ -func f(A x, B y) def - print x - y +func f(A x, B y) A def + return x * y + +f(4, [4.2]) diff --git a/test/bad/generics/type05.err b/test/bad/generics/type05.err index 6f1073bb..4096295e 100644 --- a/test/bad/generics/type05.err +++ b/test/bad/generics/type05.err @@ -1 +1 @@ -Illegal assignment from `Int` to `T`. \ No newline at end of file +Illegal assignment from `Int` to `Float`. \ No newline at end of file diff --git a/test/bad/generics/type05.px b/test/bad/generics/type05.px index 3ad5deaa..4a95015c 100644 --- a/test/bad/generics/type05.px +++ b/test/bad/generics/type05.px @@ -1,3 +1,5 @@ -func f(T x) def +func f(T x) def x = 3 + +f(0.0) diff --git a/test/bad/generics/type06.err b/test/bad/generics/type06.err index db025fdb..ff7d7a2b 100644 --- a/test/bad/generics/type06.err +++ b/test/bad/generics/type06.err @@ -1 +1 @@ -Illegal assignment from `T` to `Float`. \ No newline at end of file +Illegal assignment from `Char` to `Float`. \ No newline at end of file diff --git a/test/bad/generics/type06.px b/test/bad/generics/type06.px index 80d280f8..331a64f6 100644 --- a/test/bad/generics/type06.px +++ b/test/bad/generics/type06.px @@ -1,4 +1,6 @@ -func f(T x) def +func f(T x) def n = 0.0 n = x + +f('x') diff --git a/test/bad/generics/type07.err b/test/bad/generics/type07.err index 2836489f..a4a53521 100644 --- a/test/bad/generics/type07.err +++ b/test/bad/generics/type07.err @@ -1 +1 @@ -Illegal assignment from `Char` to `B`. \ No newline at end of file +Illegal assignment from `Char*Int*String` to `A*B*A`. \ No newline at end of file diff --git a/test/bad/generics/type07.px b/test/bad/generics/type07.px index c2b6c6db..97e65207 100644 --- a/test/bad/generics/type07.px +++ b/test/bad/generics/type07.px @@ -1,5 +1,5 @@ -func f(A*B*C p) def +func f(A*B*A p) def return -f(('$', '$', '$')) +f(('$', 7, "$")) diff --git a/test/bad/generics/type08.err b/test/bad/generics/type08.err index 746acf93..4ae5e019 100644 --- a/test/bad/generics/type08.err +++ b/test/bad/generics/type08.err @@ -1 +1 @@ -Illegal assignment from `Int*Int` to `A*B*C`. \ No newline at end of file +Illegal assignment from `[Int*Int]` to `[A*B*C]`. \ No newline at end of file diff --git a/test/bad/generics/type08.px b/test/bad/generics/type08.px index 3241f1b7..8eb959e7 100644 --- a/test/bad/generics/type08.px +++ b/test/bad/generics/type08.px @@ -1,5 +1,5 @@ -func f([A*B*C] p) def +func f([A*B*C] p) def return f([(1, 2)]) diff --git a/test/bad/generics/type09.px b/test/bad/generics/type09.px index ecfbd2df..7bc0eb1e 100644 --- a/test/bad/generics/type09.px +++ b/test/bad/generics/type09.px @@ -1,5 +1,5 @@ -func f(A->B->C p) def +func f(A->B->C p) def return func g(Int x) Bool def diff --git a/test/bad/generics/type10.err b/test/bad/generics/type10.err index 845bcc7a..14bdc4b4 100644 --- a/test/bad/generics/type10.err +++ b/test/bad/generics/type10.err @@ -1 +1 @@ -Illegal assignment from `Bool` to `A`. \ No newline at end of file +Illegal assignment from `Int->Bool` to `A->A`. \ No newline at end of file diff --git a/test/bad/generics/type10.px b/test/bad/generics/type10.px index 1076ea31..fd318a50 100644 --- a/test/bad/generics/type10.px +++ b/test/bad/generics/type10.px @@ -1,5 +1,5 @@ -func f(A->A p) def +func f(A->A p) def return func g(Int x) Bool def diff --git a/test/bad/generics/type11.err b/test/bad/generics/type11.err new file mode 100644 index 00000000..f0427012 --- /dev/null +++ b/test/bad/generics/type11.err @@ -0,0 +1 @@ +Illegal assignment from `Bool*Int` to `B*B`. \ No newline at end of file diff --git a/test/bad/generics/type11.px b/test/bad/generics/type11.px new file mode 100644 index 00000000..f6ef6bda --- /dev/null +++ b/test/bad/generics/type11.px @@ -0,0 +1,5 @@ + +func f(A x) B*B def + return x, 2 + +f(true) diff --git a/test/good/generics/any01.out b/test/good/generics/basic01.out similarity index 100% rename from test/good/generics/any01.out rename to test/good/generics/basic01.out diff --git a/test/good/generics/any01.px b/test/good/generics/basic01.px similarity index 59% rename from test/good/generics/any01.px rename to test/good/generics/basic01.px index 7cd31a07..e29dc733 100644 --- a/test/good/generics/any01.px +++ b/test/good/generics/basic01.px @@ -1,5 +1,5 @@ -func f(T x) Int def +func f(T x) Int def return 42 print f(5) diff --git a/test/good/generics/any02.out b/test/good/generics/basic02.out similarity index 100% rename from test/good/generics/any02.out rename to test/good/generics/basic02.out diff --git a/test/good/generics/any02.px b/test/good/generics/basic02.px similarity index 77% rename from test/good/generics/any02.px rename to test/good/generics/basic02.px index b24ac3ee..fc59c191 100644 --- a/test/good/generics/any02.px +++ b/test/good/generics/basic02.px @@ -1,5 +1,5 @@ -func id(T x) T def +func id(T x) T def return x print id(6) - id(2.53) + id(1) diff --git a/test/good/generics/any03.out b/test/good/generics/basic03.out similarity index 100% rename from test/good/generics/any03.out rename to test/good/generics/basic03.out diff --git a/test/good/generics/any03.px b/test/good/generics/basic03.px similarity index 56% rename from test/good/generics/any03.px rename to test/good/generics/basic03.px index 29639f70..dc07f7ea 100644 --- a/test/good/generics/any03.px +++ b/test/good/generics/basic03.px @@ -1,7 +1,7 @@ T' = 'T' -func f'(T' t') T' def +func f'(T' t') T' def return t' print f'(T') diff --git a/test/good/generics/any04.out b/test/good/generics/basic04.out similarity index 100% rename from test/good/generics/any04.out rename to test/good/generics/basic04.out diff --git a/test/good/generics/any04.px b/test/good/generics/basic04.px similarity index 62% rename from test/good/generics/any04.px rename to test/good/generics/basic04.px index da710358..56263600 100644 --- a/test/good/generics/any04.px +++ b/test/good/generics/basic04.px @@ -1,5 +1,5 @@ -func tuple(Int a, T1 b, String c, T2 d) Int*T1*String*T2 def +func tuple(Int a, T1 b, String c, T2 d) Int*T1*String*T2 def return a, b, c, d print tuple(3, 5, "7", 0.12) diff --git a/test/good/generics/any05.out b/test/good/generics/basic05.out similarity index 100% rename from test/good/generics/any05.out rename to test/good/generics/basic05.out diff --git a/test/good/generics/any05.px b/test/good/generics/basic05.px similarity index 66% rename from test/good/generics/any05.px rename to test/good/generics/basic05.px index 6bff1942..9ef23abd 100644 --- a/test/good/generics/any05.px +++ b/test/good/generics/basic05.px @@ -1,5 +1,5 @@ -func array(T a, T b) [T] def +func array(T a, T b) [T] def return [a, b] print array(false, true)[1] diff --git a/test/good/generics/num01.out b/test/good/generics/basic06.out similarity index 100% rename from test/good/generics/num01.out rename to test/good/generics/basic06.out diff --git a/test/good/generics/num01.px b/test/good/generics/basic06.px similarity index 66% rename from test/good/generics/num01.px rename to test/good/generics/basic06.px index cf75b08e..59815eac 100644 --- a/test/good/generics/num01.px +++ b/test/good/generics/basic06.px @@ -1,5 +1,5 @@ -func add(A x, A y) A def +func add(A x, A y) A def return x + y print add(3, 4) / 2 diff --git a/test/good/generics/num02.out b/test/good/generics/basic07.out similarity index 100% rename from test/good/generics/num02.out rename to test/good/generics/basic07.out diff --git a/test/good/generics/num02.px b/test/good/generics/basic07.px similarity index 78% rename from test/good/generics/num02.px rename to test/good/generics/basic07.px index 571ce165..098fc48d 100644 --- a/test/good/generics/num02.px +++ b/test/good/generics/basic07.px @@ -1,5 +1,5 @@ -func diff(A x, A y) A def +func diff(A x, A y) A def if x >= y do return x-y else do diff --git a/test/good/generics/num03.out b/test/good/generics/basic08.out similarity index 100% rename from test/good/generics/num03.out rename to test/good/generics/basic08.out diff --git a/test/good/generics/num03.px b/test/good/generics/basic08.px similarity index 62% rename from test/good/generics/num03.px rename to test/good/generics/basic08.px index 36ebf8e9..d01fe359 100644 --- a/test/good/generics/num03.px +++ b/test/good/generics/basic08.px @@ -1,5 +1,5 @@ -func print'(A x) A def +func print'(A x) A def print x return x diff --git a/test/good/generics/basic09.out b/test/good/generics/basic09.out new file mode 100644 index 00000000..9daeafb9 --- /dev/null +++ b/test/good/generics/basic09.out @@ -0,0 +1 @@ +test diff --git a/test/good/generics/basic09.px b/test/good/generics/basic09.px new file mode 100644 index 00000000..1c3c083c --- /dev/null +++ b/test/good/generics/basic09.px @@ -0,0 +1,6 @@ + +func f(T x) T def + y = x + return y + +print f('t') + f("est") diff --git a/test/good/generics/basic10.out b/test/good/generics/basic10.out new file mode 100644 index 00000000..f6e83b79 --- /dev/null +++ b/test/good/generics/basic10.out @@ -0,0 +1,2 @@ +120 +1.875 diff --git a/test/good/generics/basic10.px b/test/good/generics/basic10.px new file mode 100644 index 00000000..98f0e8ea --- /dev/null +++ b/test/good/generics/basic10.px @@ -0,0 +1,8 @@ + +func f(T x) T def + if x > 0 do + return x * f(x-1) + return 1 + x - x + +print f(5) +print f(2.5) diff --git a/test/good/generics/complex01.px b/test/good/generics/complex01.px index 48a365fd..7ff161cd 100644 --- a/test/good/generics/complex01.px +++ b/test/good/generics/complex01.px @@ -1,5 +1,5 @@ -func get([[T]] a) [T] def +func get([[T]] a) [T] def return a[0] print get([[2, 3]])[1] diff --git a/test/good/generics/complex02.px b/test/good/generics/complex02.px index 4ac2d41d..a5dbac24 100644 --- a/test/good/generics/complex02.px +++ b/test/good/generics/complex02.px @@ -1,5 +1,5 @@ -func f(A*[B*C] p) B*A def +func f(A*[B*C] p) B*A def return p.b[0].a, p.a print f(('$', [(5, 'x')])) diff --git a/test/good/generics/complex03.out b/test/good/generics/complex03.out index af9ca13c..2df33d76 100644 --- a/test/good/generics/complex03.out +++ b/test/good/generics/complex03.out @@ -1,2 +1 @@ -24 -Test +5.6 diff --git a/test/good/generics/complex03.px b/test/good/generics/complex03.px index 70223b94..8d97772c 100644 --- a/test/good/generics/complex03.px +++ b/test/good/generics/complex03.px @@ -1,8 +1,8 @@ -func fold(T->T->T f, T a, [T] t) T def - for x in t do - a = f(a, x) +func f(T x) [T] def + T y = x*2 + [T] a + a = [x, y] return a -print fold(_*_, 1, [2, 3, 4]) -print fold(_+_, "", ["T", "est"]) +print f(1)[0] + f(2.3)[1] diff --git a/test/good/generics/complex04.out b/test/good/generics/complex04.out index cee27315..677154a8 100644 --- a/test/good/generics/complex04.out +++ b/test/good/generics/complex04.out @@ -1,2 +1 @@ -20.02 --1 +3 6 diff --git a/test/good/generics/complex04.px b/test/good/generics/complex04.px index 74d8dbca..d2275a99 100644 --- a/test/good/generics/complex04.px +++ b/test/good/generics/complex04.px @@ -1,6 +1,8 @@ -func call(A x, A->B f) def - print f(x) +func g(A x, C y) A*C def + return x, y -call(10.01, lambda x -> 2*x) -call(-5, lambda x -> x/5) +func f(A x, B y) A*B def + return g(x, y) + +print f(3, 6) diff --git a/test/good/generics/complex05.out b/test/good/generics/complex05.out index 7dc1d79d..94bcead0 100644 --- a/test/good/generics/complex05.out +++ b/test/good/generics/complex05.out @@ -1 +1 @@ --1-1-1 B +0.5 [x] diff --git a/test/good/generics/complex05.px b/test/good/generics/complex05.px index 45d69bb9..bb7335ba 100644 --- a/test/good/generics/complex05.px +++ b/test/good/generics/complex05.px @@ -1,6 +1,5 @@ -func call(A x, A->B f) B def - return f(x) +func f(A x) Float*[B] def + return 0.5, [x] -print call(-1.0, 3*_.toString()), - call(["ABC"], _[0][1]) +print f('x') diff --git a/test/good/generics/complex06.out b/test/good/generics/complex06.out index a6245b32..00b885d5 100644 --- a/test/good/generics/complex06.out +++ b/test/good/generics/complex06.out @@ -1,3 +1 @@ -97 --2.5 -4 +3 -7.89 null diff --git a/test/good/generics/complex06.px b/test/good/generics/complex06.px index 88feadc7..8039476c 100644 --- a/test/good/generics/complex06.px +++ b/test/good/generics/complex06.px @@ -1,16 +1,7 @@ -func call(A->B f, A x) def - print f(x) +func f(T? x) T? def + if x is null do + return null + return x! -func f(Char c) Int def - return ord(c) - -func g(Int n) Float def - return n + 0.5 - -func h(String s) Int def - return s.length - -call(f, 'a') -call(g, -3) -call(h, "____") +print f(3), f(x=-7.89), f(null) diff --git a/test/good/generics/func01.out b/test/good/generics/func01.out new file mode 100644 index 00000000..af9ca13c --- /dev/null +++ b/test/good/generics/func01.out @@ -0,0 +1,2 @@ +24 +Test diff --git a/test/good/generics/func01.px b/test/good/generics/func01.px new file mode 100644 index 00000000..a7f9f9c2 --- /dev/null +++ b/test/good/generics/func01.px @@ -0,0 +1,8 @@ + +func fold(T->T->T f, T a, [T] t) T def + for x in t do + a = f(a, x) + return a + +print fold(_*_, 1, [2, 3, 4]) +print fold(_+_, "", ["T", "est"]) diff --git a/test/good/generics/func02.out b/test/good/generics/func02.out new file mode 100644 index 00000000..cee27315 --- /dev/null +++ b/test/good/generics/func02.out @@ -0,0 +1,2 @@ +20.02 +-1 diff --git a/test/good/generics/func02.px b/test/good/generics/func02.px new file mode 100644 index 00000000..4192de55 --- /dev/null +++ b/test/good/generics/func02.px @@ -0,0 +1,6 @@ + +func call(A x, A->B f) def + print f(x) + +call(10.01, lambda x -> 2*x) +call(-5, lambda x -> x/5) diff --git a/test/good/generics/func03.out b/test/good/generics/func03.out new file mode 100644 index 00000000..7dc1d79d --- /dev/null +++ b/test/good/generics/func03.out @@ -0,0 +1 @@ +-1-1-1 B diff --git a/test/good/generics/func03.px b/test/good/generics/func03.px new file mode 100644 index 00000000..f6b01eaf --- /dev/null +++ b/test/good/generics/func03.px @@ -0,0 +1,5 @@ + +func call(A x, A->B f) B def + return f(x) + +print call(-1.0, 3*_.toString()), call(["ABC"], _[0][1]) diff --git a/test/good/generics/func04.out b/test/good/generics/func04.out new file mode 100644 index 00000000..a6245b32 --- /dev/null +++ b/test/good/generics/func04.out @@ -0,0 +1,3 @@ +97 +-2.5 +4 diff --git a/test/good/generics/func04.px b/test/good/generics/func04.px new file mode 100644 index 00000000..64846563 --- /dev/null +++ b/test/good/generics/func04.px @@ -0,0 +1,16 @@ + +func call(A->B f, A x) def + print f(x) + +func f(Char c) Int def + return ord(c) + +func g(Int n) Float def + return n + 0.5 + +func h(String s) Int def + return s.length + +call(f, 'a') +call(g, -3) +call(h, "____") diff --git a/test/good/generics/complex07.out b/test/good/generics/func05.out similarity index 100% rename from test/good/generics/complex07.out rename to test/good/generics/func05.out diff --git a/test/good/generics/complex07.px b/test/good/generics/func05.px similarity index 69% rename from test/good/generics/complex07.px rename to test/good/generics/func05.px index 21aac72c..bc4ee70b 100644 --- a/test/good/generics/complex07.px +++ b/test/good/generics/func05.px @@ -1,5 +1,5 @@ -func apply(A->B f, A x) B def +func apply(A->B f, A x) B def return f(x) x = apply(_+1, 2) diff --git a/test/good/generics/func06.out b/test/good/generics/func06.out new file mode 100644 index 00000000..488aaebe --- /dev/null +++ b/test/good/generics/func06.out @@ -0,0 +1,2 @@ +0123 7 +28 -0.8 diff --git a/test/good/generics/func06.px b/test/good/generics/func06.px new file mode 100644 index 00000000..366fe387 --- /dev/null +++ b/test/good/generics/func06.px @@ -0,0 +1,6 @@ + +func apply(A->B f, A->C g, C->C->C h, [A] a) B*C def + return f(a[0]), h(g(a[1]), g(a[2])) + +print apply('0'+_, _.length, _+_, ["123", "4567", "890"]) +print apply(_*7, _-1.0, _/_, [4, 5, -4, 0]) diff --git a/test/good/generics/nested01.out b/test/good/generics/nested01.out new file mode 100644 index 00000000..4c7760f9 --- /dev/null +++ b/test/good/generics/nested01.out @@ -0,0 +1,2 @@ +15 $ +-3.33 false diff --git a/test/good/generics/nested01.px b/test/good/generics/nested01.px new file mode 100644 index 00000000..f4199fc7 --- /dev/null +++ b/test/good/generics/nested01.px @@ -0,0 +1,12 @@ + +func f(A*B p) B*A def + func g1(A x) A def + return x + func g2(B x) B def + return x*3 + func h(C x) C def + return x + return h(g2(p.b)), h(g1(p.a)) + +print f(('$', 5)) +print f((false, -1.11)) diff --git a/test/good/libraries/std03.px b/test/good/libraries/std03.px index 97a2847e..82cf031c 100644 --- a/test/good/libraries/std03.px +++ b/test/good/libraries/std03.px @@ -1,4 +1,4 @@ print filter(_<'c', "abcadeab".toArray()).join() print map(chr(ord(_)+5), "1420".toArray()).join() -print reduce(ord(_)+_, 0, "XYZ".toArray()) +print reduce(_+ord(_), 0, "XYZ".toArray()) From 42eb2fee68cb45ca7a594c89802be0a5a6379ba8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Mon, 25 Nov 2019 20:25:06 +0100 Subject: [PATCH 072/100] Handle line continuations --- src/indentation.py | 14 +++++++++----- test/bad/basic/indent01.err | 1 + test/bad/basic/indent01.px | 4 ++++ test/bad/basic/indent02.err | 1 + test/bad/basic/indent02.px | 4 ++++ test/bad/basic/indent03.err | 1 + test/bad/basic/indent03.px | 4 ++++ test/bad/basic/indent04.err | 1 + test/bad/basic/indent04.px | 4 ++++ test/good/basic/line01.out | 1 + test/good/basic/line01.px | 4 ++++ test/good/basic/line02.out | 2 ++ test/good/basic/line02.px | 15 +++++++++++++++ 13 files changed, 51 insertions(+), 5 deletions(-) create mode 100644 test/bad/basic/indent01.err create mode 100644 test/bad/basic/indent01.px create mode 100644 test/bad/basic/indent02.err create mode 100644 test/bad/basic/indent02.px create mode 100644 test/bad/basic/indent03.err create mode 100644 test/bad/basic/indent03.px create mode 100644 test/bad/basic/indent04.err create mode 100644 test/bad/basic/indent04.px create mode 100644 test/good/basic/line01.out create mode 100644 test/good/basic/line01.px create mode 100644 test/good/basic/line02.out create mode 100644 test/good/basic/line02.px diff --git a/src/indentation.py b/src/indentation.py index cb3b5c29..aaec15b6 100644 --- a/src/indentation.py +++ b/src/indentation.py @@ -19,15 +19,15 @@ def transform_indented_code(code): # Skip line with comment or whitespace only. continue indent = match.group(1) - prev_indent = indents[-1] if new_block: - if not (indent.startswith(prev_indent) and len(indent) > len(indents[-1])): + if not (indent.startswith(indents[-1]) and len(indent) > len(indents[-1])): # New block must be indented more than the previous one. raise PyxellError(PyxellError.InvalidIndentation(), i+1) indents.append(indent) new_block = False - else: + elif indents[-1].startswith(indent): + # If the line is indented less than the current block, close the previous blocks. while indents: if indent == indents[-1]: break @@ -35,12 +35,16 @@ def transform_indented_code(code): lines[i-1] += '}' indents.pop() else: + # Indentation must match one of the previous blocks. raise PyxellError(PyxellError.InvalidIndentation(), i+1) - if re.search(r'\W(do|def)\s*(--.*)?$', line): + if re.search(r'[^\w\'](do|def)\s*(--.*)?$', line): + # If the line ends with a `do` or `def` keyword, start a new block. lines[i] += '\r{' new_block = True - else: + elif len(lines) == i+1 or not re.match(fr'{indents[-1]}\s', lines[i+1]): + # If the next line has a bigger indentation than the current block, assume it is a continuation of the expression. + # Otherwise, put a semicolon at the end of this line. lines[i] += '\r;' indents.pop() diff --git a/test/bad/basic/indent01.err b/test/bad/basic/indent01.err new file mode 100644 index 00000000..d7e8ba54 --- /dev/null +++ b/test/bad/basic/indent01.err @@ -0,0 +1 @@ +Indentation error. \ No newline at end of file diff --git a/test/bad/basic/indent01.px b/test/bad/basic/indent01.px new file mode 100644 index 00000000..e5af82f8 --- /dev/null +++ b/test/bad/basic/indent01.px @@ -0,0 +1,4 @@ + +if true do + x = 1 + y = 2 diff --git a/test/bad/basic/indent02.err b/test/bad/basic/indent02.err new file mode 100644 index 00000000..d7e8ba54 --- /dev/null +++ b/test/bad/basic/indent02.err @@ -0,0 +1 @@ +Indentation error. \ No newline at end of file diff --git a/test/bad/basic/indent02.px b/test/bad/basic/indent02.px new file mode 100644 index 00000000..4082e161 --- /dev/null +++ b/test/bad/basic/indent02.px @@ -0,0 +1,4 @@ + +if true do + x = 1 + + 2 diff --git a/test/bad/basic/indent03.err b/test/bad/basic/indent03.err new file mode 100644 index 00000000..63261bf3 --- /dev/null +++ b/test/bad/basic/indent03.err @@ -0,0 +1 @@ +Syntax error. \ No newline at end of file diff --git a/test/bad/basic/indent03.px b/test/bad/basic/indent03.px new file mode 100644 index 00000000..a220bd2f --- /dev/null +++ b/test/bad/basic/indent03.px @@ -0,0 +1,4 @@ + +if true do + x = 1 + + 2 diff --git a/test/bad/basic/indent04.err b/test/bad/basic/indent04.err new file mode 100644 index 00000000..63261bf3 --- /dev/null +++ b/test/bad/basic/indent04.err @@ -0,0 +1 @@ +Syntax error. \ No newline at end of file diff --git a/test/bad/basic/indent04.px b/test/bad/basic/indent04.px new file mode 100644 index 00000000..b3094728 --- /dev/null +++ b/test/bad/basic/indent04.px @@ -0,0 +1,4 @@ + +if true do + x = 1 + y = 2 diff --git a/test/good/basic/line01.out b/test/good/basic/line01.out new file mode 100644 index 00000000..d00491fd --- /dev/null +++ b/test/good/basic/line01.out @@ -0,0 +1 @@ +1 diff --git a/test/good/basic/line01.px b/test/good/basic/line01.px new file mode 100644 index 00000000..52308f20 --- /dev/null +++ b/test/good/basic/line01.px @@ -0,0 +1,4 @@ + +print 2 + + 3 + + -4 diff --git a/test/good/basic/line02.out b/test/good/basic/line02.out new file mode 100644 index 00000000..d0943d5f --- /dev/null +++ b/test/good/basic/line02.out @@ -0,0 +1,2 @@ +1 2 +true diff --git a/test/good/basic/line02.px b/test/good/basic/line02.px new file mode 100644 index 00000000..aeda1aa0 --- /dev/null +++ b/test/good/basic/line02.px @@ -0,0 +1,15 @@ + +_do = def'def = 1 +def'def += 1 +x = _do +y = def'def + +if x + + y + > 0 do + print _do, + def'def + print + true +else do + skip From 2252ac61f2048ab91149019c92c7a707b6c2d890 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Mon, 25 Nov 2019 20:58:53 +0100 Subject: [PATCH 073/100] Fix comments appearing after blocks --- src/indentation.py | 6 +++++- test/good/basic/comment01.out | 1 + test/good/basic/comment01.px | 4 ++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/indentation.py b/src/indentation.py index aaec15b6..f85d0291 100644 --- a/src/indentation.py +++ b/src/indentation.py @@ -9,6 +9,7 @@ def transform_indented_code(code): Adds braces and semicolons to the code with indents. """ lines = code.split('\n') + j = None indents = [''] new_block = False @@ -32,7 +33,8 @@ def transform_indented_code(code): if indent == indents[-1]: break elif indents[-1].startswith(indent): - lines[i-1] += '}' + # Add a closing bracket to the last non-empty line. + lines[j] += '}' indents.pop() else: # Indentation must match one of the previous blocks. @@ -47,6 +49,8 @@ def transform_indented_code(code): # Otherwise, put a semicolon at the end of this line. lines[i] += '\r;' + j = i + indents.pop() lines[-1] += '}' * len(indents) diff --git a/test/good/basic/comment01.out b/test/good/basic/comment01.out index 0cfbf088..7600dd4b 100644 --- a/test/good/basic/comment01.out +++ b/test/good/basic/comment01.out @@ -1 +1,2 @@ 2 +true diff --git a/test/good/basic/comment01.px b/test/good/basic/comment01.px index dda8d18c..92cbd149 100644 --- a/test/good/basic/comment01.px +++ b/test/good/basic/comment01.px @@ -10,4 +10,8 @@ if true do---; print false print x ----- 2 else do -- + print false + +---------- +print true From cafc7cf56e8f5a129795b5157af8b494e8526589 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Thu, 28 Nov 2019 18:20:39 +0100 Subject: [PATCH 074/100] Basic classes --- src/Pyxell.g4 | 5 + src/antlr/Pyxell.interp | 7 +- src/antlr/Pyxell.tokens | 64 +- src/antlr/PyxellLexer.interp | 7 +- src/antlr/PyxellLexer.py | 416 +++++------ src/antlr/PyxellLexer.tokens | 64 +- src/antlr/PyxellParser.py | 1309 +++++++++++++++++++--------------- src/antlr/PyxellVisitor.py | 10 + src/ast.py | 15 + src/compiler.py | 81 ++- src/errors.py | 1 + src/types.py | 17 +- 12 files changed, 1128 insertions(+), 868 deletions(-) diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index 4e6b7ab8..a315415e 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -30,12 +30,17 @@ compound_stmt | 'until' expr 'do' block # StmtUntil | 'for' tuple_expr 'in' tuple_expr ('step' tuple_expr)? 'do' block # StmtFor | 'func' ID ('<' typevars=id_list '>')? '(' (func_arg ',')* func_arg? ')' (ret=typ)? ('def' block | 'extern' ';') # StmtFunc + | 'class' ID 'def' '{' class_member+ '}' # StmtClass ; func_arg : typ ID (':' expr)? # FuncArg ; +class_member + : typ ID (':' tuple_expr) ? ';' # ClassField + ; + block : '{' stmt+ '}' ; diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index ab079754..62e022bb 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -40,9 +40,10 @@ null ')' 'def' 'extern' -':' +'class' '{' '}' +':' '[' ']' '?' @@ -141,6 +142,7 @@ null null null null +null INT FLOAT CHAR @@ -157,6 +159,7 @@ simple_stmt lvalue compound_stmt func_arg +class_member block expr tuple_expr @@ -169,4 +172,4 @@ typ atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 75, 404, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 3, 2, 7, 2, 34, 10, 2, 12, 2, 14, 2, 37, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 45, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 55, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 60, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 66, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 71, 10, 4, 12, 4, 14, 4, 74, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 85, 10, 4, 5, 4, 87, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 92, 10, 5, 12, 5, 14, 5, 95, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 106, 10, 6, 12, 6, 14, 6, 109, 11, 6, 3, 6, 3, 6, 3, 6, 5, 6, 114, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 132, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 143, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 149, 10, 6, 12, 6, 14, 6, 152, 11, 6, 3, 6, 5, 6, 155, 10, 6, 3, 6, 3, 6, 5, 6, 159, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 165, 10, 6, 5, 6, 167, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 173, 10, 7, 3, 8, 3, 8, 6, 8, 177, 10, 8, 13, 8, 14, 8, 178, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 193, 10, 9, 12, 9, 14, 9, 196, 11, 9, 3, 9, 5, 9, 199, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 6, 9, 205, 10, 9, 13, 9, 14, 9, 206, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 218, 10, 9, 12, 9, 14, 9, 221, 11, 9, 3, 9, 5, 9, 224, 10, 9, 3, 9, 3, 9, 5, 9, 228, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 277, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 286, 10, 9, 3, 9, 3, 9, 5, 9, 290, 10, 9, 3, 9, 3, 9, 5, 9, 294, 10, 9, 5, 9, 296, 10, 9, 3, 9, 3, 9, 3, 9, 5, 9, 301, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 310, 10, 9, 12, 9, 14, 9, 313, 11, 9, 3, 9, 5, 9, 316, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 323, 10, 9, 12, 9, 14, 9, 326, 11, 9, 3, 10, 3, 10, 3, 10, 7, 10, 331, 10, 10, 12, 10, 14, 10, 334, 11, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 347, 10, 12, 3, 12, 3, 12, 5, 12, 351, 10, 12, 3, 13, 3, 13, 5, 13, 355, 10, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 366, 10, 14, 3, 15, 3, 15, 7, 15, 370, 10, 15, 12, 15, 14, 15, 373, 11, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 389, 10, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 7, 16, 399, 10, 16, 12, 16, 14, 16, 402, 11, 16, 3, 16, 2, 4, 16, 30, 17, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 2, 12, 3, 2, 11, 22, 3, 2, 23, 24, 4, 2, 15, 16, 51, 51, 3, 2, 12, 14, 3, 2, 15, 16, 3, 2, 17, 18, 3, 2, 52, 53, 3, 2, 54, 55, 4, 2, 37, 38, 56, 59, 3, 2, 65, 66, 2, 475, 2, 35, 3, 2, 2, 2, 4, 44, 3, 2, 2, 2, 6, 86, 3, 2, 2, 2, 8, 88, 3, 2, 2, 2, 10, 166, 3, 2, 2, 2, 12, 168, 3, 2, 2, 2, 14, 174, 3, 2, 2, 2, 16, 227, 3, 2, 2, 2, 18, 332, 3, 2, 2, 2, 20, 337, 3, 2, 2, 2, 22, 350, 3, 2, 2, 2, 24, 354, 3, 2, 2, 2, 26, 365, 3, 2, 2, 2, 28, 371, 3, 2, 2, 2, 30, 388, 3, 2, 2, 2, 32, 34, 5, 4, 3, 2, 33, 32, 3, 2, 2, 2, 34, 37, 3, 2, 2, 2, 35, 33, 3, 2, 2, 2, 35, 36, 3, 2, 2, 2, 36, 38, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 38, 39, 7, 2, 2, 3, 39, 3, 3, 2, 2, 2, 40, 41, 5, 6, 4, 2, 41, 42, 7, 3, 2, 2, 42, 45, 3, 2, 2, 2, 43, 45, 5, 10, 6, 2, 44, 40, 3, 2, 2, 2, 44, 43, 3, 2, 2, 2, 45, 5, 3, 2, 2, 2, 46, 47, 7, 4, 2, 2, 47, 54, 7, 72, 2, 2, 48, 49, 7, 5, 2, 2, 49, 55, 5, 28, 15, 2, 50, 51, 7, 6, 2, 2, 51, 55, 5, 28, 15, 2, 52, 53, 7, 7, 2, 2, 53, 55, 7, 72, 2, 2, 54, 48, 3, 2, 2, 2, 54, 50, 3, 2, 2, 2, 54, 52, 3, 2, 2, 2, 54, 55, 3, 2, 2, 2, 55, 87, 3, 2, 2, 2, 56, 87, 7, 8, 2, 2, 57, 59, 7, 9, 2, 2, 58, 60, 5, 18, 10, 2, 59, 58, 3, 2, 2, 2, 59, 60, 3, 2, 2, 2, 60, 87, 3, 2, 2, 2, 61, 62, 5, 30, 16, 2, 62, 65, 7, 72, 2, 2, 63, 64, 7, 10, 2, 2, 64, 66, 5, 18, 10, 2, 65, 63, 3, 2, 2, 2, 65, 66, 3, 2, 2, 2, 66, 87, 3, 2, 2, 2, 67, 68, 5, 8, 5, 2, 68, 69, 7, 10, 2, 2, 69, 71, 3, 2, 2, 2, 70, 67, 3, 2, 2, 2, 71, 74, 3, 2, 2, 2, 72, 70, 3, 2, 2, 2, 72, 73, 3, 2, 2, 2, 73, 75, 3, 2, 2, 2, 74, 72, 3, 2, 2, 2, 75, 87, 5, 18, 10, 2, 76, 77, 5, 16, 9, 2, 77, 78, 9, 2, 2, 2, 78, 79, 7, 10, 2, 2, 79, 80, 5, 16, 9, 2, 80, 87, 3, 2, 2, 2, 81, 87, 9, 3, 2, 2, 82, 84, 7, 25, 2, 2, 83, 85, 5, 18, 10, 2, 84, 83, 3, 2, 2, 2, 84, 85, 3, 2, 2, 2, 85, 87, 3, 2, 2, 2, 86, 46, 3, 2, 2, 2, 86, 56, 3, 2, 2, 2, 86, 57, 3, 2, 2, 2, 86, 61, 3, 2, 2, 2, 86, 72, 3, 2, 2, 2, 86, 76, 3, 2, 2, 2, 86, 81, 3, 2, 2, 2, 86, 82, 3, 2, 2, 2, 87, 7, 3, 2, 2, 2, 88, 93, 5, 16, 9, 2, 89, 90, 7, 26, 2, 2, 90, 92, 5, 16, 9, 2, 91, 89, 3, 2, 2, 2, 92, 95, 3, 2, 2, 2, 93, 91, 3, 2, 2, 2, 93, 94, 3, 2, 2, 2, 94, 9, 3, 2, 2, 2, 95, 93, 3, 2, 2, 2, 96, 97, 7, 27, 2, 2, 97, 98, 5, 16, 9, 2, 98, 99, 7, 28, 2, 2, 99, 107, 5, 14, 8, 2, 100, 101, 7, 29, 2, 2, 101, 102, 5, 16, 9, 2, 102, 103, 7, 28, 2, 2, 103, 104, 5, 14, 8, 2, 104, 106, 3, 2, 2, 2, 105, 100, 3, 2, 2, 2, 106, 109, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 107, 108, 3, 2, 2, 2, 108, 113, 3, 2, 2, 2, 109, 107, 3, 2, 2, 2, 110, 111, 7, 30, 2, 2, 111, 112, 7, 28, 2, 2, 112, 114, 5, 14, 8, 2, 113, 110, 3, 2, 2, 2, 113, 114, 3, 2, 2, 2, 114, 167, 3, 2, 2, 2, 115, 116, 7, 31, 2, 2, 116, 117, 5, 16, 9, 2, 117, 118, 7, 28, 2, 2, 118, 119, 5, 14, 8, 2, 119, 167, 3, 2, 2, 2, 120, 121, 7, 32, 2, 2, 121, 122, 5, 16, 9, 2, 122, 123, 7, 28, 2, 2, 123, 124, 5, 14, 8, 2, 124, 167, 3, 2, 2, 2, 125, 126, 7, 33, 2, 2, 126, 127, 5, 18, 10, 2, 127, 128, 7, 34, 2, 2, 128, 131, 5, 18, 10, 2, 129, 130, 7, 35, 2, 2, 130, 132, 5, 18, 10, 2, 131, 129, 3, 2, 2, 2, 131, 132, 3, 2, 2, 2, 132, 133, 3, 2, 2, 2, 133, 134, 7, 28, 2, 2, 134, 135, 5, 14, 8, 2, 135, 167, 3, 2, 2, 2, 136, 137, 7, 36, 2, 2, 137, 142, 7, 72, 2, 2, 138, 139, 7, 37, 2, 2, 139, 140, 5, 28, 15, 2, 140, 141, 7, 38, 2, 2, 141, 143, 3, 2, 2, 2, 142, 138, 3, 2, 2, 2, 142, 143, 3, 2, 2, 2, 143, 144, 3, 2, 2, 2, 144, 150, 7, 39, 2, 2, 145, 146, 5, 12, 7, 2, 146, 147, 7, 26, 2, 2, 147, 149, 3, 2, 2, 2, 148, 145, 3, 2, 2, 2, 149, 152, 3, 2, 2, 2, 150, 148, 3, 2, 2, 2, 150, 151, 3, 2, 2, 2, 151, 154, 3, 2, 2, 2, 152, 150, 3, 2, 2, 2, 153, 155, 5, 12, 7, 2, 154, 153, 3, 2, 2, 2, 154, 155, 3, 2, 2, 2, 155, 156, 3, 2, 2, 2, 156, 158, 7, 40, 2, 2, 157, 159, 5, 30, 16, 2, 158, 157, 3, 2, 2, 2, 158, 159, 3, 2, 2, 2, 159, 164, 3, 2, 2, 2, 160, 161, 7, 41, 2, 2, 161, 165, 5, 14, 8, 2, 162, 163, 7, 42, 2, 2, 163, 165, 7, 3, 2, 2, 164, 160, 3, 2, 2, 2, 164, 162, 3, 2, 2, 2, 165, 167, 3, 2, 2, 2, 166, 96, 3, 2, 2, 2, 166, 115, 3, 2, 2, 2, 166, 120, 3, 2, 2, 2, 166, 125, 3, 2, 2, 2, 166, 136, 3, 2, 2, 2, 167, 11, 3, 2, 2, 2, 168, 169, 5, 30, 16, 2, 169, 172, 7, 72, 2, 2, 170, 171, 7, 43, 2, 2, 171, 173, 5, 16, 9, 2, 172, 170, 3, 2, 2, 2, 172, 173, 3, 2, 2, 2, 173, 13, 3, 2, 2, 2, 174, 176, 7, 44, 2, 2, 175, 177, 5, 4, 3, 2, 176, 175, 3, 2, 2, 2, 177, 178, 3, 2, 2, 2, 178, 176, 3, 2, 2, 2, 178, 179, 3, 2, 2, 2, 179, 180, 3, 2, 2, 2, 180, 181, 7, 45, 2, 2, 181, 15, 3, 2, 2, 2, 182, 183, 8, 9, 1, 2, 183, 228, 5, 26, 14, 2, 184, 185, 7, 39, 2, 2, 185, 186, 5, 18, 10, 2, 186, 187, 7, 40, 2, 2, 187, 228, 3, 2, 2, 2, 188, 194, 7, 46, 2, 2, 189, 190, 5, 16, 9, 2, 190, 191, 7, 26, 2, 2, 191, 193, 3, 2, 2, 2, 192, 189, 3, 2, 2, 2, 193, 196, 3, 2, 2, 2, 194, 192, 3, 2, 2, 2, 194, 195, 3, 2, 2, 2, 195, 198, 3, 2, 2, 2, 196, 194, 3, 2, 2, 2, 197, 199, 5, 16, 9, 2, 198, 197, 3, 2, 2, 2, 198, 199, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 228, 7, 47, 2, 2, 201, 202, 7, 46, 2, 2, 202, 204, 5, 16, 9, 2, 203, 205, 5, 22, 12, 2, 204, 203, 3, 2, 2, 2, 205, 206, 3, 2, 2, 2, 206, 204, 3, 2, 2, 2, 206, 207, 3, 2, 2, 2, 207, 208, 3, 2, 2, 2, 208, 209, 7, 47, 2, 2, 209, 228, 3, 2, 2, 2, 210, 211, 9, 4, 2, 2, 211, 228, 5, 16, 9, 19, 212, 213, 7, 60, 2, 2, 213, 228, 5, 16, 9, 8, 214, 219, 7, 63, 2, 2, 215, 216, 7, 72, 2, 2, 216, 218, 7, 26, 2, 2, 217, 215, 3, 2, 2, 2, 218, 221, 3, 2, 2, 2, 219, 217, 3, 2, 2, 2, 219, 220, 3, 2, 2, 2, 220, 223, 3, 2, 2, 2, 221, 219, 3, 2, 2, 2, 222, 224, 7, 72, 2, 2, 223, 222, 3, 2, 2, 2, 223, 224, 3, 2, 2, 2, 224, 225, 3, 2, 2, 2, 225, 226, 7, 64, 2, 2, 226, 228, 5, 16, 9, 3, 227, 182, 3, 2, 2, 2, 227, 184, 3, 2, 2, 2, 227, 188, 3, 2, 2, 2, 227, 201, 3, 2, 2, 2, 227, 210, 3, 2, 2, 2, 227, 212, 3, 2, 2, 2, 227, 214, 3, 2, 2, 2, 228, 324, 3, 2, 2, 2, 229, 230, 12, 20, 2, 2, 230, 231, 7, 11, 2, 2, 231, 323, 5, 16, 9, 20, 232, 233, 12, 18, 2, 2, 233, 234, 9, 5, 2, 2, 234, 323, 5, 16, 9, 19, 235, 236, 12, 17, 2, 2, 236, 237, 9, 6, 2, 2, 237, 323, 5, 16, 9, 18, 238, 239, 12, 16, 2, 2, 239, 240, 9, 7, 2, 2, 240, 323, 5, 16, 9, 17, 241, 242, 12, 15, 2, 2, 242, 243, 7, 19, 2, 2, 243, 323, 5, 16, 9, 16, 244, 245, 12, 14, 2, 2, 245, 246, 7, 20, 2, 2, 246, 323, 5, 16, 9, 15, 247, 248, 12, 13, 2, 2, 248, 249, 7, 21, 2, 2, 249, 323, 5, 16, 9, 14, 250, 251, 12, 12, 2, 2, 251, 252, 9, 8, 2, 2, 252, 323, 5, 16, 9, 13, 253, 254, 12, 10, 2, 2, 254, 255, 9, 9, 2, 2, 255, 323, 5, 16, 9, 11, 256, 257, 12, 9, 2, 2, 257, 258, 9, 10, 2, 2, 258, 323, 5, 16, 9, 9, 259, 260, 12, 7, 2, 2, 260, 261, 7, 61, 2, 2, 261, 323, 5, 16, 9, 7, 262, 263, 12, 6, 2, 2, 263, 264, 7, 62, 2, 2, 264, 323, 5, 16, 9, 6, 265, 266, 12, 5, 2, 2, 266, 267, 7, 22, 2, 2, 267, 323, 5, 16, 9, 5, 268, 269, 12, 4, 2, 2, 269, 270, 7, 48, 2, 2, 270, 271, 5, 16, 9, 2, 271, 272, 7, 43, 2, 2, 272, 273, 5, 16, 9, 4, 273, 323, 3, 2, 2, 2, 274, 276, 12, 25, 2, 2, 275, 277, 7, 48, 2, 2, 276, 275, 3, 2, 2, 2, 276, 277, 3, 2, 2, 2, 277, 278, 3, 2, 2, 2, 278, 279, 7, 46, 2, 2, 279, 280, 5, 18, 10, 2, 280, 281, 7, 47, 2, 2, 281, 323, 3, 2, 2, 2, 282, 283, 12, 24, 2, 2, 283, 285, 7, 46, 2, 2, 284, 286, 5, 16, 9, 2, 285, 284, 3, 2, 2, 2, 285, 286, 3, 2, 2, 2, 286, 287, 3, 2, 2, 2, 287, 289, 7, 43, 2, 2, 288, 290, 5, 16, 9, 2, 289, 288, 3, 2, 2, 2, 289, 290, 3, 2, 2, 2, 290, 295, 3, 2, 2, 2, 291, 293, 7, 43, 2, 2, 292, 294, 5, 16, 9, 2, 293, 292, 3, 2, 2, 2, 293, 294, 3, 2, 2, 2, 294, 296, 3, 2, 2, 2, 295, 291, 3, 2, 2, 2, 295, 296, 3, 2, 2, 2, 296, 297, 3, 2, 2, 2, 297, 323, 7, 47, 2, 2, 298, 300, 12, 23, 2, 2, 299, 301, 7, 48, 2, 2, 300, 299, 3, 2, 2, 2, 300, 301, 3, 2, 2, 2, 301, 302, 3, 2, 2, 2, 302, 303, 7, 49, 2, 2, 303, 323, 7, 72, 2, 2, 304, 305, 12, 22, 2, 2, 305, 311, 7, 39, 2, 2, 306, 307, 5, 24, 13, 2, 307, 308, 7, 26, 2, 2, 308, 310, 3, 2, 2, 2, 309, 306, 3, 2, 2, 2, 310, 313, 3, 2, 2, 2, 311, 309, 3, 2, 2, 2, 311, 312, 3, 2, 2, 2, 312, 315, 3, 2, 2, 2, 313, 311, 3, 2, 2, 2, 314, 316, 5, 24, 13, 2, 315, 314, 3, 2, 2, 2, 315, 316, 3, 2, 2, 2, 316, 317, 3, 2, 2, 2, 317, 323, 7, 40, 2, 2, 318, 319, 12, 21, 2, 2, 319, 323, 7, 50, 2, 2, 320, 321, 12, 11, 2, 2, 321, 323, 7, 53, 2, 2, 322, 229, 3, 2, 2, 2, 322, 232, 3, 2, 2, 2, 322, 235, 3, 2, 2, 2, 322, 238, 3, 2, 2, 2, 322, 241, 3, 2, 2, 2, 322, 244, 3, 2, 2, 2, 322, 247, 3, 2, 2, 2, 322, 250, 3, 2, 2, 2, 322, 253, 3, 2, 2, 2, 322, 256, 3, 2, 2, 2, 322, 259, 3, 2, 2, 2, 322, 262, 3, 2, 2, 2, 322, 265, 3, 2, 2, 2, 322, 268, 3, 2, 2, 2, 322, 274, 3, 2, 2, 2, 322, 282, 3, 2, 2, 2, 322, 298, 3, 2, 2, 2, 322, 304, 3, 2, 2, 2, 322, 318, 3, 2, 2, 2, 322, 320, 3, 2, 2, 2, 323, 326, 3, 2, 2, 2, 324, 322, 3, 2, 2, 2, 324, 325, 3, 2, 2, 2, 325, 17, 3, 2, 2, 2, 326, 324, 3, 2, 2, 2, 327, 328, 5, 16, 9, 2, 328, 329, 7, 26, 2, 2, 329, 331, 3, 2, 2, 2, 330, 327, 3, 2, 2, 2, 331, 334, 3, 2, 2, 2, 332, 330, 3, 2, 2, 2, 332, 333, 3, 2, 2, 2, 333, 335, 3, 2, 2, 2, 334, 332, 3, 2, 2, 2, 335, 336, 5, 16, 9, 2, 336, 19, 3, 2, 2, 2, 337, 338, 5, 18, 10, 2, 338, 339, 7, 2, 2, 3, 339, 21, 3, 2, 2, 2, 340, 341, 7, 33, 2, 2, 341, 342, 5, 18, 10, 2, 342, 343, 7, 34, 2, 2, 343, 346, 5, 18, 10, 2, 344, 345, 7, 35, 2, 2, 345, 347, 5, 18, 10, 2, 346, 344, 3, 2, 2, 2, 346, 347, 3, 2, 2, 2, 347, 351, 3, 2, 2, 2, 348, 349, 7, 27, 2, 2, 349, 351, 5, 16, 9, 2, 350, 340, 3, 2, 2, 2, 350, 348, 3, 2, 2, 2, 351, 23, 3, 2, 2, 2, 352, 353, 7, 72, 2, 2, 353, 355, 7, 10, 2, 2, 354, 352, 3, 2, 2, 2, 354, 355, 3, 2, 2, 2, 355, 356, 3, 2, 2, 2, 356, 357, 5, 16, 9, 2, 357, 25, 3, 2, 2, 2, 358, 366, 7, 68, 2, 2, 359, 366, 7, 69, 2, 2, 360, 366, 9, 11, 2, 2, 361, 366, 7, 70, 2, 2, 362, 366, 7, 71, 2, 2, 363, 366, 7, 67, 2, 2, 364, 366, 7, 72, 2, 2, 365, 358, 3, 2, 2, 2, 365, 359, 3, 2, 2, 2, 365, 360, 3, 2, 2, 2, 365, 361, 3, 2, 2, 2, 365, 362, 3, 2, 2, 2, 365, 363, 3, 2, 2, 2, 365, 364, 3, 2, 2, 2, 366, 27, 3, 2, 2, 2, 367, 368, 7, 72, 2, 2, 368, 370, 7, 26, 2, 2, 369, 367, 3, 2, 2, 2, 370, 373, 3, 2, 2, 2, 371, 369, 3, 2, 2, 2, 371, 372, 3, 2, 2, 2, 372, 374, 3, 2, 2, 2, 373, 371, 3, 2, 2, 2, 374, 375, 7, 72, 2, 2, 375, 29, 3, 2, 2, 2, 376, 377, 8, 16, 1, 2, 377, 389, 7, 72, 2, 2, 378, 379, 7, 39, 2, 2, 379, 380, 5, 30, 16, 2, 380, 381, 7, 40, 2, 2, 381, 389, 3, 2, 2, 2, 382, 383, 7, 46, 2, 2, 383, 384, 5, 30, 16, 2, 384, 385, 7, 47, 2, 2, 385, 389, 3, 2, 2, 2, 386, 387, 7, 64, 2, 2, 387, 389, 5, 30, 16, 3, 388, 376, 3, 2, 2, 2, 388, 378, 3, 2, 2, 2, 388, 382, 3, 2, 2, 2, 388, 386, 3, 2, 2, 2, 389, 400, 3, 2, 2, 2, 390, 391, 12, 5, 2, 2, 391, 392, 7, 12, 2, 2, 392, 399, 5, 30, 16, 5, 393, 394, 12, 4, 2, 2, 394, 395, 7, 64, 2, 2, 395, 399, 5, 30, 16, 4, 396, 397, 12, 6, 2, 2, 397, 399, 7, 48, 2, 2, 398, 390, 3, 2, 2, 2, 398, 393, 3, 2, 2, 2, 398, 396, 3, 2, 2, 2, 399, 402, 3, 2, 2, 2, 400, 398, 3, 2, 2, 2, 400, 401, 3, 2, 2, 2, 401, 31, 3, 2, 2, 2, 402, 400, 3, 2, 2, 2, 47, 35, 44, 54, 59, 65, 72, 84, 86, 93, 107, 113, 131, 142, 150, 154, 158, 164, 166, 172, 178, 194, 198, 206, 219, 223, 227, 276, 285, 289, 293, 295, 300, 311, 315, 322, 324, 332, 346, 350, 354, 365, 371, 388, 398, 400] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 76, 425, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 3, 2, 7, 2, 36, 10, 2, 12, 2, 14, 2, 39, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 47, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 57, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 62, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 68, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 73, 10, 4, 12, 4, 14, 4, 76, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 87, 10, 4, 5, 4, 89, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 94, 10, 5, 12, 5, 14, 5, 97, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 108, 10, 6, 12, 6, 14, 6, 111, 11, 6, 3, 6, 3, 6, 3, 6, 5, 6, 116, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 134, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 145, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 151, 10, 6, 12, 6, 14, 6, 154, 11, 6, 3, 6, 5, 6, 157, 10, 6, 3, 6, 3, 6, 5, 6, 161, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 167, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 6, 6, 174, 10, 6, 13, 6, 14, 6, 175, 3, 6, 3, 6, 5, 6, 180, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 186, 10, 7, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 192, 10, 8, 3, 8, 3, 8, 3, 9, 3, 9, 6, 9, 198, 10, 9, 13, 9, 14, 9, 199, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 214, 10, 10, 12, 10, 14, 10, 217, 11, 10, 3, 10, 5, 10, 220, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 6, 10, 226, 10, 10, 13, 10, 14, 10, 227, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 239, 10, 10, 12, 10, 14, 10, 242, 11, 10, 3, 10, 5, 10, 245, 10, 10, 3, 10, 3, 10, 5, 10, 249, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 298, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 307, 10, 10, 3, 10, 3, 10, 5, 10, 311, 10, 10, 3, 10, 3, 10, 5, 10, 315, 10, 10, 5, 10, 317, 10, 10, 3, 10, 3, 10, 3, 10, 5, 10, 322, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 331, 10, 10, 12, 10, 14, 10, 334, 11, 10, 3, 10, 5, 10, 337, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 344, 10, 10, 12, 10, 14, 10, 347, 11, 10, 3, 11, 3, 11, 3, 11, 7, 11, 352, 10, 11, 12, 11, 14, 11, 355, 11, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 368, 10, 13, 3, 13, 3, 13, 5, 13, 372, 10, 13, 3, 14, 3, 14, 5, 14, 376, 10, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 387, 10, 15, 3, 16, 3, 16, 7, 16, 391, 10, 16, 12, 16, 14, 16, 394, 11, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 5, 17, 410, 10, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 7, 17, 420, 10, 17, 12, 17, 14, 17, 423, 11, 17, 3, 17, 2, 4, 18, 32, 18, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 2, 12, 3, 2, 11, 22, 3, 2, 23, 24, 4, 2, 15, 16, 52, 52, 3, 2, 12, 14, 3, 2, 15, 16, 3, 2, 17, 18, 3, 2, 53, 54, 3, 2, 55, 56, 4, 2, 37, 38, 57, 60, 3, 2, 66, 67, 2, 498, 2, 37, 3, 2, 2, 2, 4, 46, 3, 2, 2, 2, 6, 88, 3, 2, 2, 2, 8, 90, 3, 2, 2, 2, 10, 179, 3, 2, 2, 2, 12, 181, 3, 2, 2, 2, 14, 187, 3, 2, 2, 2, 16, 195, 3, 2, 2, 2, 18, 248, 3, 2, 2, 2, 20, 353, 3, 2, 2, 2, 22, 358, 3, 2, 2, 2, 24, 371, 3, 2, 2, 2, 26, 375, 3, 2, 2, 2, 28, 386, 3, 2, 2, 2, 30, 392, 3, 2, 2, 2, 32, 409, 3, 2, 2, 2, 34, 36, 5, 4, 3, 2, 35, 34, 3, 2, 2, 2, 36, 39, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 37, 38, 3, 2, 2, 2, 38, 40, 3, 2, 2, 2, 39, 37, 3, 2, 2, 2, 40, 41, 7, 2, 2, 3, 41, 3, 3, 2, 2, 2, 42, 43, 5, 6, 4, 2, 43, 44, 7, 3, 2, 2, 44, 47, 3, 2, 2, 2, 45, 47, 5, 10, 6, 2, 46, 42, 3, 2, 2, 2, 46, 45, 3, 2, 2, 2, 47, 5, 3, 2, 2, 2, 48, 49, 7, 4, 2, 2, 49, 56, 7, 73, 2, 2, 50, 51, 7, 5, 2, 2, 51, 57, 5, 30, 16, 2, 52, 53, 7, 6, 2, 2, 53, 57, 5, 30, 16, 2, 54, 55, 7, 7, 2, 2, 55, 57, 7, 73, 2, 2, 56, 50, 3, 2, 2, 2, 56, 52, 3, 2, 2, 2, 56, 54, 3, 2, 2, 2, 56, 57, 3, 2, 2, 2, 57, 89, 3, 2, 2, 2, 58, 89, 7, 8, 2, 2, 59, 61, 7, 9, 2, 2, 60, 62, 5, 20, 11, 2, 61, 60, 3, 2, 2, 2, 61, 62, 3, 2, 2, 2, 62, 89, 3, 2, 2, 2, 63, 64, 5, 32, 17, 2, 64, 67, 7, 73, 2, 2, 65, 66, 7, 10, 2, 2, 66, 68, 5, 20, 11, 2, 67, 65, 3, 2, 2, 2, 67, 68, 3, 2, 2, 2, 68, 89, 3, 2, 2, 2, 69, 70, 5, 8, 5, 2, 70, 71, 7, 10, 2, 2, 71, 73, 3, 2, 2, 2, 72, 69, 3, 2, 2, 2, 73, 76, 3, 2, 2, 2, 74, 72, 3, 2, 2, 2, 74, 75, 3, 2, 2, 2, 75, 77, 3, 2, 2, 2, 76, 74, 3, 2, 2, 2, 77, 89, 5, 20, 11, 2, 78, 79, 5, 18, 10, 2, 79, 80, 9, 2, 2, 2, 80, 81, 7, 10, 2, 2, 81, 82, 5, 18, 10, 2, 82, 89, 3, 2, 2, 2, 83, 89, 9, 3, 2, 2, 84, 86, 7, 25, 2, 2, 85, 87, 5, 20, 11, 2, 86, 85, 3, 2, 2, 2, 86, 87, 3, 2, 2, 2, 87, 89, 3, 2, 2, 2, 88, 48, 3, 2, 2, 2, 88, 58, 3, 2, 2, 2, 88, 59, 3, 2, 2, 2, 88, 63, 3, 2, 2, 2, 88, 74, 3, 2, 2, 2, 88, 78, 3, 2, 2, 2, 88, 83, 3, 2, 2, 2, 88, 84, 3, 2, 2, 2, 89, 7, 3, 2, 2, 2, 90, 95, 5, 18, 10, 2, 91, 92, 7, 26, 2, 2, 92, 94, 5, 18, 10, 2, 93, 91, 3, 2, 2, 2, 94, 97, 3, 2, 2, 2, 95, 93, 3, 2, 2, 2, 95, 96, 3, 2, 2, 2, 96, 9, 3, 2, 2, 2, 97, 95, 3, 2, 2, 2, 98, 99, 7, 27, 2, 2, 99, 100, 5, 18, 10, 2, 100, 101, 7, 28, 2, 2, 101, 109, 5, 16, 9, 2, 102, 103, 7, 29, 2, 2, 103, 104, 5, 18, 10, 2, 104, 105, 7, 28, 2, 2, 105, 106, 5, 16, 9, 2, 106, 108, 3, 2, 2, 2, 107, 102, 3, 2, 2, 2, 108, 111, 3, 2, 2, 2, 109, 107, 3, 2, 2, 2, 109, 110, 3, 2, 2, 2, 110, 115, 3, 2, 2, 2, 111, 109, 3, 2, 2, 2, 112, 113, 7, 30, 2, 2, 113, 114, 7, 28, 2, 2, 114, 116, 5, 16, 9, 2, 115, 112, 3, 2, 2, 2, 115, 116, 3, 2, 2, 2, 116, 180, 3, 2, 2, 2, 117, 118, 7, 31, 2, 2, 118, 119, 5, 18, 10, 2, 119, 120, 7, 28, 2, 2, 120, 121, 5, 16, 9, 2, 121, 180, 3, 2, 2, 2, 122, 123, 7, 32, 2, 2, 123, 124, 5, 18, 10, 2, 124, 125, 7, 28, 2, 2, 125, 126, 5, 16, 9, 2, 126, 180, 3, 2, 2, 2, 127, 128, 7, 33, 2, 2, 128, 129, 5, 20, 11, 2, 129, 130, 7, 34, 2, 2, 130, 133, 5, 20, 11, 2, 131, 132, 7, 35, 2, 2, 132, 134, 5, 20, 11, 2, 133, 131, 3, 2, 2, 2, 133, 134, 3, 2, 2, 2, 134, 135, 3, 2, 2, 2, 135, 136, 7, 28, 2, 2, 136, 137, 5, 16, 9, 2, 137, 180, 3, 2, 2, 2, 138, 139, 7, 36, 2, 2, 139, 144, 7, 73, 2, 2, 140, 141, 7, 37, 2, 2, 141, 142, 5, 30, 16, 2, 142, 143, 7, 38, 2, 2, 143, 145, 3, 2, 2, 2, 144, 140, 3, 2, 2, 2, 144, 145, 3, 2, 2, 2, 145, 146, 3, 2, 2, 2, 146, 152, 7, 39, 2, 2, 147, 148, 5, 12, 7, 2, 148, 149, 7, 26, 2, 2, 149, 151, 3, 2, 2, 2, 150, 147, 3, 2, 2, 2, 151, 154, 3, 2, 2, 2, 152, 150, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 156, 3, 2, 2, 2, 154, 152, 3, 2, 2, 2, 155, 157, 5, 12, 7, 2, 156, 155, 3, 2, 2, 2, 156, 157, 3, 2, 2, 2, 157, 158, 3, 2, 2, 2, 158, 160, 7, 40, 2, 2, 159, 161, 5, 32, 17, 2, 160, 159, 3, 2, 2, 2, 160, 161, 3, 2, 2, 2, 161, 166, 3, 2, 2, 2, 162, 163, 7, 41, 2, 2, 163, 167, 5, 16, 9, 2, 164, 165, 7, 42, 2, 2, 165, 167, 7, 3, 2, 2, 166, 162, 3, 2, 2, 2, 166, 164, 3, 2, 2, 2, 167, 180, 3, 2, 2, 2, 168, 169, 7, 43, 2, 2, 169, 170, 7, 73, 2, 2, 170, 171, 7, 41, 2, 2, 171, 173, 7, 44, 2, 2, 172, 174, 5, 14, 8, 2, 173, 172, 3, 2, 2, 2, 174, 175, 3, 2, 2, 2, 175, 173, 3, 2, 2, 2, 175, 176, 3, 2, 2, 2, 176, 177, 3, 2, 2, 2, 177, 178, 7, 45, 2, 2, 178, 180, 3, 2, 2, 2, 179, 98, 3, 2, 2, 2, 179, 117, 3, 2, 2, 2, 179, 122, 3, 2, 2, 2, 179, 127, 3, 2, 2, 2, 179, 138, 3, 2, 2, 2, 179, 168, 3, 2, 2, 2, 180, 11, 3, 2, 2, 2, 181, 182, 5, 32, 17, 2, 182, 185, 7, 73, 2, 2, 183, 184, 7, 46, 2, 2, 184, 186, 5, 18, 10, 2, 185, 183, 3, 2, 2, 2, 185, 186, 3, 2, 2, 2, 186, 13, 3, 2, 2, 2, 187, 188, 5, 32, 17, 2, 188, 191, 7, 73, 2, 2, 189, 190, 7, 46, 2, 2, 190, 192, 5, 20, 11, 2, 191, 189, 3, 2, 2, 2, 191, 192, 3, 2, 2, 2, 192, 193, 3, 2, 2, 2, 193, 194, 7, 3, 2, 2, 194, 15, 3, 2, 2, 2, 195, 197, 7, 44, 2, 2, 196, 198, 5, 4, 3, 2, 197, 196, 3, 2, 2, 2, 198, 199, 3, 2, 2, 2, 199, 197, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 201, 3, 2, 2, 2, 201, 202, 7, 45, 2, 2, 202, 17, 3, 2, 2, 2, 203, 204, 8, 10, 1, 2, 204, 249, 5, 28, 15, 2, 205, 206, 7, 39, 2, 2, 206, 207, 5, 20, 11, 2, 207, 208, 7, 40, 2, 2, 208, 249, 3, 2, 2, 2, 209, 215, 7, 47, 2, 2, 210, 211, 5, 18, 10, 2, 211, 212, 7, 26, 2, 2, 212, 214, 3, 2, 2, 2, 213, 210, 3, 2, 2, 2, 214, 217, 3, 2, 2, 2, 215, 213, 3, 2, 2, 2, 215, 216, 3, 2, 2, 2, 216, 219, 3, 2, 2, 2, 217, 215, 3, 2, 2, 2, 218, 220, 5, 18, 10, 2, 219, 218, 3, 2, 2, 2, 219, 220, 3, 2, 2, 2, 220, 221, 3, 2, 2, 2, 221, 249, 7, 48, 2, 2, 222, 223, 7, 47, 2, 2, 223, 225, 5, 18, 10, 2, 224, 226, 5, 24, 13, 2, 225, 224, 3, 2, 2, 2, 226, 227, 3, 2, 2, 2, 227, 225, 3, 2, 2, 2, 227, 228, 3, 2, 2, 2, 228, 229, 3, 2, 2, 2, 229, 230, 7, 48, 2, 2, 230, 249, 3, 2, 2, 2, 231, 232, 9, 4, 2, 2, 232, 249, 5, 18, 10, 19, 233, 234, 7, 61, 2, 2, 234, 249, 5, 18, 10, 8, 235, 240, 7, 64, 2, 2, 236, 237, 7, 73, 2, 2, 237, 239, 7, 26, 2, 2, 238, 236, 3, 2, 2, 2, 239, 242, 3, 2, 2, 2, 240, 238, 3, 2, 2, 2, 240, 241, 3, 2, 2, 2, 241, 244, 3, 2, 2, 2, 242, 240, 3, 2, 2, 2, 243, 245, 7, 73, 2, 2, 244, 243, 3, 2, 2, 2, 244, 245, 3, 2, 2, 2, 245, 246, 3, 2, 2, 2, 246, 247, 7, 65, 2, 2, 247, 249, 5, 18, 10, 3, 248, 203, 3, 2, 2, 2, 248, 205, 3, 2, 2, 2, 248, 209, 3, 2, 2, 2, 248, 222, 3, 2, 2, 2, 248, 231, 3, 2, 2, 2, 248, 233, 3, 2, 2, 2, 248, 235, 3, 2, 2, 2, 249, 345, 3, 2, 2, 2, 250, 251, 12, 20, 2, 2, 251, 252, 7, 11, 2, 2, 252, 344, 5, 18, 10, 20, 253, 254, 12, 18, 2, 2, 254, 255, 9, 5, 2, 2, 255, 344, 5, 18, 10, 19, 256, 257, 12, 17, 2, 2, 257, 258, 9, 6, 2, 2, 258, 344, 5, 18, 10, 18, 259, 260, 12, 16, 2, 2, 260, 261, 9, 7, 2, 2, 261, 344, 5, 18, 10, 17, 262, 263, 12, 15, 2, 2, 263, 264, 7, 19, 2, 2, 264, 344, 5, 18, 10, 16, 265, 266, 12, 14, 2, 2, 266, 267, 7, 20, 2, 2, 267, 344, 5, 18, 10, 15, 268, 269, 12, 13, 2, 2, 269, 270, 7, 21, 2, 2, 270, 344, 5, 18, 10, 14, 271, 272, 12, 12, 2, 2, 272, 273, 9, 8, 2, 2, 273, 344, 5, 18, 10, 13, 274, 275, 12, 10, 2, 2, 275, 276, 9, 9, 2, 2, 276, 344, 5, 18, 10, 11, 277, 278, 12, 9, 2, 2, 278, 279, 9, 10, 2, 2, 279, 344, 5, 18, 10, 9, 280, 281, 12, 7, 2, 2, 281, 282, 7, 62, 2, 2, 282, 344, 5, 18, 10, 7, 283, 284, 12, 6, 2, 2, 284, 285, 7, 63, 2, 2, 285, 344, 5, 18, 10, 6, 286, 287, 12, 5, 2, 2, 287, 288, 7, 22, 2, 2, 288, 344, 5, 18, 10, 5, 289, 290, 12, 4, 2, 2, 290, 291, 7, 49, 2, 2, 291, 292, 5, 18, 10, 2, 292, 293, 7, 46, 2, 2, 293, 294, 5, 18, 10, 4, 294, 344, 3, 2, 2, 2, 295, 297, 12, 25, 2, 2, 296, 298, 7, 49, 2, 2, 297, 296, 3, 2, 2, 2, 297, 298, 3, 2, 2, 2, 298, 299, 3, 2, 2, 2, 299, 300, 7, 47, 2, 2, 300, 301, 5, 20, 11, 2, 301, 302, 7, 48, 2, 2, 302, 344, 3, 2, 2, 2, 303, 304, 12, 24, 2, 2, 304, 306, 7, 47, 2, 2, 305, 307, 5, 18, 10, 2, 306, 305, 3, 2, 2, 2, 306, 307, 3, 2, 2, 2, 307, 308, 3, 2, 2, 2, 308, 310, 7, 46, 2, 2, 309, 311, 5, 18, 10, 2, 310, 309, 3, 2, 2, 2, 310, 311, 3, 2, 2, 2, 311, 316, 3, 2, 2, 2, 312, 314, 7, 46, 2, 2, 313, 315, 5, 18, 10, 2, 314, 313, 3, 2, 2, 2, 314, 315, 3, 2, 2, 2, 315, 317, 3, 2, 2, 2, 316, 312, 3, 2, 2, 2, 316, 317, 3, 2, 2, 2, 317, 318, 3, 2, 2, 2, 318, 344, 7, 48, 2, 2, 319, 321, 12, 23, 2, 2, 320, 322, 7, 49, 2, 2, 321, 320, 3, 2, 2, 2, 321, 322, 3, 2, 2, 2, 322, 323, 3, 2, 2, 2, 323, 324, 7, 50, 2, 2, 324, 344, 7, 73, 2, 2, 325, 326, 12, 22, 2, 2, 326, 332, 7, 39, 2, 2, 327, 328, 5, 26, 14, 2, 328, 329, 7, 26, 2, 2, 329, 331, 3, 2, 2, 2, 330, 327, 3, 2, 2, 2, 331, 334, 3, 2, 2, 2, 332, 330, 3, 2, 2, 2, 332, 333, 3, 2, 2, 2, 333, 336, 3, 2, 2, 2, 334, 332, 3, 2, 2, 2, 335, 337, 5, 26, 14, 2, 336, 335, 3, 2, 2, 2, 336, 337, 3, 2, 2, 2, 337, 338, 3, 2, 2, 2, 338, 344, 7, 40, 2, 2, 339, 340, 12, 21, 2, 2, 340, 344, 7, 51, 2, 2, 341, 342, 12, 11, 2, 2, 342, 344, 7, 54, 2, 2, 343, 250, 3, 2, 2, 2, 343, 253, 3, 2, 2, 2, 343, 256, 3, 2, 2, 2, 343, 259, 3, 2, 2, 2, 343, 262, 3, 2, 2, 2, 343, 265, 3, 2, 2, 2, 343, 268, 3, 2, 2, 2, 343, 271, 3, 2, 2, 2, 343, 274, 3, 2, 2, 2, 343, 277, 3, 2, 2, 2, 343, 280, 3, 2, 2, 2, 343, 283, 3, 2, 2, 2, 343, 286, 3, 2, 2, 2, 343, 289, 3, 2, 2, 2, 343, 295, 3, 2, 2, 2, 343, 303, 3, 2, 2, 2, 343, 319, 3, 2, 2, 2, 343, 325, 3, 2, 2, 2, 343, 339, 3, 2, 2, 2, 343, 341, 3, 2, 2, 2, 344, 347, 3, 2, 2, 2, 345, 343, 3, 2, 2, 2, 345, 346, 3, 2, 2, 2, 346, 19, 3, 2, 2, 2, 347, 345, 3, 2, 2, 2, 348, 349, 5, 18, 10, 2, 349, 350, 7, 26, 2, 2, 350, 352, 3, 2, 2, 2, 351, 348, 3, 2, 2, 2, 352, 355, 3, 2, 2, 2, 353, 351, 3, 2, 2, 2, 353, 354, 3, 2, 2, 2, 354, 356, 3, 2, 2, 2, 355, 353, 3, 2, 2, 2, 356, 357, 5, 18, 10, 2, 357, 21, 3, 2, 2, 2, 358, 359, 5, 20, 11, 2, 359, 360, 7, 2, 2, 3, 360, 23, 3, 2, 2, 2, 361, 362, 7, 33, 2, 2, 362, 363, 5, 20, 11, 2, 363, 364, 7, 34, 2, 2, 364, 367, 5, 20, 11, 2, 365, 366, 7, 35, 2, 2, 366, 368, 5, 20, 11, 2, 367, 365, 3, 2, 2, 2, 367, 368, 3, 2, 2, 2, 368, 372, 3, 2, 2, 2, 369, 370, 7, 27, 2, 2, 370, 372, 5, 18, 10, 2, 371, 361, 3, 2, 2, 2, 371, 369, 3, 2, 2, 2, 372, 25, 3, 2, 2, 2, 373, 374, 7, 73, 2, 2, 374, 376, 7, 10, 2, 2, 375, 373, 3, 2, 2, 2, 375, 376, 3, 2, 2, 2, 376, 377, 3, 2, 2, 2, 377, 378, 5, 18, 10, 2, 378, 27, 3, 2, 2, 2, 379, 387, 7, 69, 2, 2, 380, 387, 7, 70, 2, 2, 381, 387, 9, 11, 2, 2, 382, 387, 7, 71, 2, 2, 383, 387, 7, 72, 2, 2, 384, 387, 7, 68, 2, 2, 385, 387, 7, 73, 2, 2, 386, 379, 3, 2, 2, 2, 386, 380, 3, 2, 2, 2, 386, 381, 3, 2, 2, 2, 386, 382, 3, 2, 2, 2, 386, 383, 3, 2, 2, 2, 386, 384, 3, 2, 2, 2, 386, 385, 3, 2, 2, 2, 387, 29, 3, 2, 2, 2, 388, 389, 7, 73, 2, 2, 389, 391, 7, 26, 2, 2, 390, 388, 3, 2, 2, 2, 391, 394, 3, 2, 2, 2, 392, 390, 3, 2, 2, 2, 392, 393, 3, 2, 2, 2, 393, 395, 3, 2, 2, 2, 394, 392, 3, 2, 2, 2, 395, 396, 7, 73, 2, 2, 396, 31, 3, 2, 2, 2, 397, 398, 8, 17, 1, 2, 398, 410, 7, 73, 2, 2, 399, 400, 7, 39, 2, 2, 400, 401, 5, 32, 17, 2, 401, 402, 7, 40, 2, 2, 402, 410, 3, 2, 2, 2, 403, 404, 7, 47, 2, 2, 404, 405, 5, 32, 17, 2, 405, 406, 7, 48, 2, 2, 406, 410, 3, 2, 2, 2, 407, 408, 7, 65, 2, 2, 408, 410, 5, 32, 17, 3, 409, 397, 3, 2, 2, 2, 409, 399, 3, 2, 2, 2, 409, 403, 3, 2, 2, 2, 409, 407, 3, 2, 2, 2, 410, 421, 3, 2, 2, 2, 411, 412, 12, 5, 2, 2, 412, 413, 7, 12, 2, 2, 413, 420, 5, 32, 17, 5, 414, 415, 12, 4, 2, 2, 415, 416, 7, 65, 2, 2, 416, 420, 5, 32, 17, 4, 417, 418, 12, 6, 2, 2, 418, 420, 7, 49, 2, 2, 419, 411, 3, 2, 2, 2, 419, 414, 3, 2, 2, 2, 419, 417, 3, 2, 2, 2, 420, 423, 3, 2, 2, 2, 421, 419, 3, 2, 2, 2, 421, 422, 3, 2, 2, 2, 422, 33, 3, 2, 2, 2, 423, 421, 3, 2, 2, 2, 49, 37, 46, 56, 61, 67, 74, 86, 88, 95, 109, 115, 133, 144, 152, 156, 160, 166, 175, 179, 185, 191, 199, 215, 219, 227, 240, 244, 248, 297, 306, 310, 314, 316, 321, 332, 336, 343, 345, 353, 367, 371, 375, 386, 392, 409, 419, 421] \ No newline at end of file diff --git a/src/antlr/Pyxell.tokens b/src/antlr/Pyxell.tokens index 18963984..c9e61a5d 100644 --- a/src/antlr/Pyxell.tokens +++ b/src/antlr/Pyxell.tokens @@ -63,14 +63,15 @@ T__61=62 T__62=63 T__63=64 T__64=65 -INT=66 -FLOAT=67 -CHAR=68 -STRING=69 -ID=70 -COMMENT=71 -WS=72 -ERR=73 +T__65=66 +INT=67 +FLOAT=68 +CHAR=69 +STRING=70 +ID=71 +COMMENT=72 +WS=73 +ERR=74 ';'=1 'use'=2 'only'=3 @@ -111,28 +112,29 @@ ERR=73 ')'=38 'def'=39 'extern'=40 -':'=41 +'class'=41 '{'=42 '}'=43 -'['=44 -']'=45 -'?'=46 -'.'=47 -'!'=48 -'~'=49 -'..'=50 -'...'=51 -'is'=52 -'isn\'t'=53 -'=='=54 -'!='=55 -'<='=56 -'>='=57 -'not'=58 -'and'=59 -'or'=60 -'lambda'=61 -'->'=62 -'true'=63 -'false'=64 -'null'=65 +':'=44 +'['=45 +']'=46 +'?'=47 +'.'=48 +'!'=49 +'~'=50 +'..'=51 +'...'=52 +'is'=53 +'isn\'t'=54 +'=='=55 +'!='=56 +'<='=57 +'>='=58 +'not'=59 +'and'=60 +'or'=61 +'lambda'=62 +'->'=63 +'true'=64 +'false'=65 +'null'=66 diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp index a890e91a..1179d301 100644 --- a/src/antlr/PyxellLexer.interp +++ b/src/antlr/PyxellLexer.interp @@ -40,9 +40,10 @@ null ')' 'def' 'extern' -':' +'class' '{' '}' +':' '[' ']' '?' @@ -141,6 +142,7 @@ null null null null +null INT FLOAT CHAR @@ -216,6 +218,7 @@ T__61 T__62 T__63 T__64 +T__65 INT FLOAT CHAR @@ -236,4 +239,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 75, 472, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 6, 67, 389, 10, 67, 13, 67, 14, 67, 390, 3, 68, 6, 68, 394, 10, 68, 13, 68, 14, 68, 395, 3, 68, 3, 68, 6, 68, 400, 10, 68, 13, 68, 14, 68, 401, 3, 68, 3, 68, 5, 68, 406, 10, 68, 3, 68, 6, 68, 409, 10, 68, 13, 68, 14, 68, 410, 5, 68, 413, 10, 68, 3, 69, 3, 69, 3, 69, 3, 69, 7, 69, 419, 10, 69, 12, 69, 14, 69, 422, 11, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, 7, 70, 430, 10, 70, 12, 70, 14, 70, 433, 11, 70, 3, 70, 3, 70, 3, 71, 3, 71, 7, 71, 439, 10, 71, 12, 71, 14, 71, 442, 11, 71, 3, 72, 3, 72, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 5, 74, 451, 10, 74, 3, 75, 3, 75, 3, 75, 3, 75, 7, 75, 457, 10, 75, 12, 75, 14, 75, 460, 11, 75, 3, 75, 3, 75, 3, 76, 6, 76, 465, 10, 76, 13, 76, 14, 76, 466, 3, 76, 3, 76, 3, 77, 3, 77, 2, 2, 78, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 2, 145, 2, 147, 2, 149, 73, 151, 74, 153, 75, 3, 2, 11, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 3, 2, 41, 41, 4, 2, 12, 12, 14, 15, 5, 2, 11, 12, 15, 15, 34, 34, 2, 483, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 3, 155, 3, 2, 2, 2, 5, 157, 3, 2, 2, 2, 7, 161, 3, 2, 2, 2, 9, 166, 3, 2, 2, 2, 11, 173, 3, 2, 2, 2, 13, 176, 3, 2, 2, 2, 15, 181, 3, 2, 2, 2, 17, 187, 3, 2, 2, 2, 19, 189, 3, 2, 2, 2, 21, 191, 3, 2, 2, 2, 23, 193, 3, 2, 2, 2, 25, 195, 3, 2, 2, 2, 27, 197, 3, 2, 2, 2, 29, 199, 3, 2, 2, 2, 31, 201, 3, 2, 2, 2, 33, 204, 3, 2, 2, 2, 35, 207, 3, 2, 2, 2, 37, 209, 3, 2, 2, 2, 39, 211, 3, 2, 2, 2, 41, 213, 3, 2, 2, 2, 43, 216, 3, 2, 2, 2, 45, 222, 3, 2, 2, 2, 47, 231, 3, 2, 2, 2, 49, 238, 3, 2, 2, 2, 51, 240, 3, 2, 2, 2, 53, 243, 3, 2, 2, 2, 55, 246, 3, 2, 2, 2, 57, 251, 3, 2, 2, 2, 59, 256, 3, 2, 2, 2, 61, 262, 3, 2, 2, 2, 63, 268, 3, 2, 2, 2, 65, 272, 3, 2, 2, 2, 67, 275, 3, 2, 2, 2, 69, 280, 3, 2, 2, 2, 71, 285, 3, 2, 2, 2, 73, 287, 3, 2, 2, 2, 75, 289, 3, 2, 2, 2, 77, 291, 3, 2, 2, 2, 79, 293, 3, 2, 2, 2, 81, 297, 3, 2, 2, 2, 83, 304, 3, 2, 2, 2, 85, 306, 3, 2, 2, 2, 87, 308, 3, 2, 2, 2, 89, 310, 3, 2, 2, 2, 91, 312, 3, 2, 2, 2, 93, 314, 3, 2, 2, 2, 95, 316, 3, 2, 2, 2, 97, 318, 3, 2, 2, 2, 99, 320, 3, 2, 2, 2, 101, 322, 3, 2, 2, 2, 103, 325, 3, 2, 2, 2, 105, 329, 3, 2, 2, 2, 107, 332, 3, 2, 2, 2, 109, 338, 3, 2, 2, 2, 111, 341, 3, 2, 2, 2, 113, 344, 3, 2, 2, 2, 115, 347, 3, 2, 2, 2, 117, 350, 3, 2, 2, 2, 119, 354, 3, 2, 2, 2, 121, 358, 3, 2, 2, 2, 123, 361, 3, 2, 2, 2, 125, 368, 3, 2, 2, 2, 127, 371, 3, 2, 2, 2, 129, 376, 3, 2, 2, 2, 131, 382, 3, 2, 2, 2, 133, 388, 3, 2, 2, 2, 135, 393, 3, 2, 2, 2, 137, 414, 3, 2, 2, 2, 139, 425, 3, 2, 2, 2, 141, 436, 3, 2, 2, 2, 143, 443, 3, 2, 2, 2, 145, 445, 3, 2, 2, 2, 147, 450, 3, 2, 2, 2, 149, 452, 3, 2, 2, 2, 151, 464, 3, 2, 2, 2, 153, 470, 3, 2, 2, 2, 155, 156, 7, 61, 2, 2, 156, 4, 3, 2, 2, 2, 157, 158, 7, 119, 2, 2, 158, 159, 7, 117, 2, 2, 159, 160, 7, 103, 2, 2, 160, 6, 3, 2, 2, 2, 161, 162, 7, 113, 2, 2, 162, 163, 7, 112, 2, 2, 163, 164, 7, 110, 2, 2, 164, 165, 7, 123, 2, 2, 165, 8, 3, 2, 2, 2, 166, 167, 7, 106, 2, 2, 167, 168, 7, 107, 2, 2, 168, 169, 7, 102, 2, 2, 169, 170, 7, 107, 2, 2, 170, 171, 7, 112, 2, 2, 171, 172, 7, 105, 2, 2, 172, 10, 3, 2, 2, 2, 173, 174, 7, 99, 2, 2, 174, 175, 7, 117, 2, 2, 175, 12, 3, 2, 2, 2, 176, 177, 7, 117, 2, 2, 177, 178, 7, 109, 2, 2, 178, 179, 7, 107, 2, 2, 179, 180, 7, 114, 2, 2, 180, 14, 3, 2, 2, 2, 181, 182, 7, 114, 2, 2, 182, 183, 7, 116, 2, 2, 183, 184, 7, 107, 2, 2, 184, 185, 7, 112, 2, 2, 185, 186, 7, 118, 2, 2, 186, 16, 3, 2, 2, 2, 187, 188, 7, 63, 2, 2, 188, 18, 3, 2, 2, 2, 189, 190, 7, 96, 2, 2, 190, 20, 3, 2, 2, 2, 191, 192, 7, 44, 2, 2, 192, 22, 3, 2, 2, 2, 193, 194, 7, 49, 2, 2, 194, 24, 3, 2, 2, 2, 195, 196, 7, 39, 2, 2, 196, 26, 3, 2, 2, 2, 197, 198, 7, 45, 2, 2, 198, 28, 3, 2, 2, 2, 199, 200, 7, 47, 2, 2, 200, 30, 3, 2, 2, 2, 201, 202, 7, 62, 2, 2, 202, 203, 7, 62, 2, 2, 203, 32, 3, 2, 2, 2, 204, 205, 7, 64, 2, 2, 205, 206, 7, 64, 2, 2, 206, 34, 3, 2, 2, 2, 207, 208, 7, 40, 2, 2, 208, 36, 3, 2, 2, 2, 209, 210, 7, 38, 2, 2, 210, 38, 3, 2, 2, 2, 211, 212, 7, 126, 2, 2, 212, 40, 3, 2, 2, 2, 213, 214, 7, 65, 2, 2, 214, 215, 7, 65, 2, 2, 215, 42, 3, 2, 2, 2, 216, 217, 7, 100, 2, 2, 217, 218, 7, 116, 2, 2, 218, 219, 7, 103, 2, 2, 219, 220, 7, 99, 2, 2, 220, 221, 7, 109, 2, 2, 221, 44, 3, 2, 2, 2, 222, 223, 7, 101, 2, 2, 223, 224, 7, 113, 2, 2, 224, 225, 7, 112, 2, 2, 225, 226, 7, 118, 2, 2, 226, 227, 7, 107, 2, 2, 227, 228, 7, 112, 2, 2, 228, 229, 7, 119, 2, 2, 229, 230, 7, 103, 2, 2, 230, 46, 3, 2, 2, 2, 231, 232, 7, 116, 2, 2, 232, 233, 7, 103, 2, 2, 233, 234, 7, 118, 2, 2, 234, 235, 7, 119, 2, 2, 235, 236, 7, 116, 2, 2, 236, 237, 7, 112, 2, 2, 237, 48, 3, 2, 2, 2, 238, 239, 7, 46, 2, 2, 239, 50, 3, 2, 2, 2, 240, 241, 7, 107, 2, 2, 241, 242, 7, 104, 2, 2, 242, 52, 3, 2, 2, 2, 243, 244, 7, 102, 2, 2, 244, 245, 7, 113, 2, 2, 245, 54, 3, 2, 2, 2, 246, 247, 7, 103, 2, 2, 247, 248, 7, 110, 2, 2, 248, 249, 7, 107, 2, 2, 249, 250, 7, 104, 2, 2, 250, 56, 3, 2, 2, 2, 251, 252, 7, 103, 2, 2, 252, 253, 7, 110, 2, 2, 253, 254, 7, 117, 2, 2, 254, 255, 7, 103, 2, 2, 255, 58, 3, 2, 2, 2, 256, 257, 7, 121, 2, 2, 257, 258, 7, 106, 2, 2, 258, 259, 7, 107, 2, 2, 259, 260, 7, 110, 2, 2, 260, 261, 7, 103, 2, 2, 261, 60, 3, 2, 2, 2, 262, 263, 7, 119, 2, 2, 263, 264, 7, 112, 2, 2, 264, 265, 7, 118, 2, 2, 265, 266, 7, 107, 2, 2, 266, 267, 7, 110, 2, 2, 267, 62, 3, 2, 2, 2, 268, 269, 7, 104, 2, 2, 269, 270, 7, 113, 2, 2, 270, 271, 7, 116, 2, 2, 271, 64, 3, 2, 2, 2, 272, 273, 7, 107, 2, 2, 273, 274, 7, 112, 2, 2, 274, 66, 3, 2, 2, 2, 275, 276, 7, 117, 2, 2, 276, 277, 7, 118, 2, 2, 277, 278, 7, 103, 2, 2, 278, 279, 7, 114, 2, 2, 279, 68, 3, 2, 2, 2, 280, 281, 7, 104, 2, 2, 281, 282, 7, 119, 2, 2, 282, 283, 7, 112, 2, 2, 283, 284, 7, 101, 2, 2, 284, 70, 3, 2, 2, 2, 285, 286, 7, 62, 2, 2, 286, 72, 3, 2, 2, 2, 287, 288, 7, 64, 2, 2, 288, 74, 3, 2, 2, 2, 289, 290, 7, 42, 2, 2, 290, 76, 3, 2, 2, 2, 291, 292, 7, 43, 2, 2, 292, 78, 3, 2, 2, 2, 293, 294, 7, 102, 2, 2, 294, 295, 7, 103, 2, 2, 295, 296, 7, 104, 2, 2, 296, 80, 3, 2, 2, 2, 297, 298, 7, 103, 2, 2, 298, 299, 7, 122, 2, 2, 299, 300, 7, 118, 2, 2, 300, 301, 7, 103, 2, 2, 301, 302, 7, 116, 2, 2, 302, 303, 7, 112, 2, 2, 303, 82, 3, 2, 2, 2, 304, 305, 7, 60, 2, 2, 305, 84, 3, 2, 2, 2, 306, 307, 7, 125, 2, 2, 307, 86, 3, 2, 2, 2, 308, 309, 7, 127, 2, 2, 309, 88, 3, 2, 2, 2, 310, 311, 7, 93, 2, 2, 311, 90, 3, 2, 2, 2, 312, 313, 7, 95, 2, 2, 313, 92, 3, 2, 2, 2, 314, 315, 7, 65, 2, 2, 315, 94, 3, 2, 2, 2, 316, 317, 7, 48, 2, 2, 317, 96, 3, 2, 2, 2, 318, 319, 7, 35, 2, 2, 319, 98, 3, 2, 2, 2, 320, 321, 7, 128, 2, 2, 321, 100, 3, 2, 2, 2, 322, 323, 7, 48, 2, 2, 323, 324, 7, 48, 2, 2, 324, 102, 3, 2, 2, 2, 325, 326, 7, 48, 2, 2, 326, 327, 7, 48, 2, 2, 327, 328, 7, 48, 2, 2, 328, 104, 3, 2, 2, 2, 329, 330, 7, 107, 2, 2, 330, 331, 7, 117, 2, 2, 331, 106, 3, 2, 2, 2, 332, 333, 7, 107, 2, 2, 333, 334, 7, 117, 2, 2, 334, 335, 7, 112, 2, 2, 335, 336, 7, 41, 2, 2, 336, 337, 7, 118, 2, 2, 337, 108, 3, 2, 2, 2, 338, 339, 7, 63, 2, 2, 339, 340, 7, 63, 2, 2, 340, 110, 3, 2, 2, 2, 341, 342, 7, 35, 2, 2, 342, 343, 7, 63, 2, 2, 343, 112, 3, 2, 2, 2, 344, 345, 7, 62, 2, 2, 345, 346, 7, 63, 2, 2, 346, 114, 3, 2, 2, 2, 347, 348, 7, 64, 2, 2, 348, 349, 7, 63, 2, 2, 349, 116, 3, 2, 2, 2, 350, 351, 7, 112, 2, 2, 351, 352, 7, 113, 2, 2, 352, 353, 7, 118, 2, 2, 353, 118, 3, 2, 2, 2, 354, 355, 7, 99, 2, 2, 355, 356, 7, 112, 2, 2, 356, 357, 7, 102, 2, 2, 357, 120, 3, 2, 2, 2, 358, 359, 7, 113, 2, 2, 359, 360, 7, 116, 2, 2, 360, 122, 3, 2, 2, 2, 361, 362, 7, 110, 2, 2, 362, 363, 7, 99, 2, 2, 363, 364, 7, 111, 2, 2, 364, 365, 7, 100, 2, 2, 365, 366, 7, 102, 2, 2, 366, 367, 7, 99, 2, 2, 367, 124, 3, 2, 2, 2, 368, 369, 7, 47, 2, 2, 369, 370, 7, 64, 2, 2, 370, 126, 3, 2, 2, 2, 371, 372, 7, 118, 2, 2, 372, 373, 7, 116, 2, 2, 373, 374, 7, 119, 2, 2, 374, 375, 7, 103, 2, 2, 375, 128, 3, 2, 2, 2, 376, 377, 7, 104, 2, 2, 377, 378, 7, 99, 2, 2, 378, 379, 7, 110, 2, 2, 379, 380, 7, 117, 2, 2, 380, 381, 7, 103, 2, 2, 381, 130, 3, 2, 2, 2, 382, 383, 7, 112, 2, 2, 383, 384, 7, 119, 2, 2, 384, 385, 7, 110, 2, 2, 385, 386, 7, 110, 2, 2, 386, 132, 3, 2, 2, 2, 387, 389, 5, 143, 72, 2, 388, 387, 3, 2, 2, 2, 389, 390, 3, 2, 2, 2, 390, 388, 3, 2, 2, 2, 390, 391, 3, 2, 2, 2, 391, 134, 3, 2, 2, 2, 392, 394, 5, 143, 72, 2, 393, 392, 3, 2, 2, 2, 394, 395, 3, 2, 2, 2, 395, 393, 3, 2, 2, 2, 395, 396, 3, 2, 2, 2, 396, 397, 3, 2, 2, 2, 397, 399, 7, 48, 2, 2, 398, 400, 5, 143, 72, 2, 399, 398, 3, 2, 2, 2, 400, 401, 3, 2, 2, 2, 401, 399, 3, 2, 2, 2, 401, 402, 3, 2, 2, 2, 402, 412, 3, 2, 2, 2, 403, 405, 7, 103, 2, 2, 404, 406, 7, 47, 2, 2, 405, 404, 3, 2, 2, 2, 405, 406, 3, 2, 2, 2, 406, 408, 3, 2, 2, 2, 407, 409, 5, 143, 72, 2, 408, 407, 3, 2, 2, 2, 409, 410, 3, 2, 2, 2, 410, 408, 3, 2, 2, 2, 410, 411, 3, 2, 2, 2, 411, 413, 3, 2, 2, 2, 412, 403, 3, 2, 2, 2, 412, 413, 3, 2, 2, 2, 413, 136, 3, 2, 2, 2, 414, 420, 7, 41, 2, 2, 415, 419, 10, 2, 2, 2, 416, 417, 7, 94, 2, 2, 417, 419, 9, 3, 2, 2, 418, 415, 3, 2, 2, 2, 418, 416, 3, 2, 2, 2, 419, 422, 3, 2, 2, 2, 420, 418, 3, 2, 2, 2, 420, 421, 3, 2, 2, 2, 421, 423, 3, 2, 2, 2, 422, 420, 3, 2, 2, 2, 423, 424, 7, 41, 2, 2, 424, 138, 3, 2, 2, 2, 425, 431, 7, 36, 2, 2, 426, 430, 10, 4, 2, 2, 427, 428, 7, 94, 2, 2, 428, 430, 9, 5, 2, 2, 429, 426, 3, 2, 2, 2, 429, 427, 3, 2, 2, 2, 430, 433, 3, 2, 2, 2, 431, 429, 3, 2, 2, 2, 431, 432, 3, 2, 2, 2, 432, 434, 3, 2, 2, 2, 433, 431, 3, 2, 2, 2, 434, 435, 7, 36, 2, 2, 435, 140, 3, 2, 2, 2, 436, 440, 5, 145, 73, 2, 437, 439, 5, 147, 74, 2, 438, 437, 3, 2, 2, 2, 439, 442, 3, 2, 2, 2, 440, 438, 3, 2, 2, 2, 440, 441, 3, 2, 2, 2, 441, 142, 3, 2, 2, 2, 442, 440, 3, 2, 2, 2, 443, 444, 9, 6, 2, 2, 444, 144, 3, 2, 2, 2, 445, 446, 9, 7, 2, 2, 446, 146, 3, 2, 2, 2, 447, 451, 5, 145, 73, 2, 448, 451, 5, 143, 72, 2, 449, 451, 9, 8, 2, 2, 450, 447, 3, 2, 2, 2, 450, 448, 3, 2, 2, 2, 450, 449, 3, 2, 2, 2, 451, 148, 3, 2, 2, 2, 452, 453, 7, 47, 2, 2, 453, 454, 7, 47, 2, 2, 454, 458, 3, 2, 2, 2, 455, 457, 10, 9, 2, 2, 456, 455, 3, 2, 2, 2, 457, 460, 3, 2, 2, 2, 458, 456, 3, 2, 2, 2, 458, 459, 3, 2, 2, 2, 459, 461, 3, 2, 2, 2, 460, 458, 3, 2, 2, 2, 461, 462, 8, 75, 2, 2, 462, 150, 3, 2, 2, 2, 463, 465, 9, 10, 2, 2, 464, 463, 3, 2, 2, 2, 465, 466, 3, 2, 2, 2, 466, 464, 3, 2, 2, 2, 466, 467, 3, 2, 2, 2, 467, 468, 3, 2, 2, 2, 468, 469, 8, 76, 2, 2, 469, 152, 3, 2, 2, 2, 470, 471, 11, 2, 2, 2, 471, 154, 3, 2, 2, 2, 17, 2, 390, 395, 401, 405, 410, 412, 418, 420, 429, 431, 440, 450, 458, 466, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 76, 480, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 6, 68, 397, 10, 68, 13, 68, 14, 68, 398, 3, 69, 6, 69, 402, 10, 69, 13, 69, 14, 69, 403, 3, 69, 3, 69, 6, 69, 408, 10, 69, 13, 69, 14, 69, 409, 3, 69, 3, 69, 5, 69, 414, 10, 69, 3, 69, 6, 69, 417, 10, 69, 13, 69, 14, 69, 418, 5, 69, 421, 10, 69, 3, 70, 3, 70, 3, 70, 3, 70, 7, 70, 427, 10, 70, 12, 70, 14, 70, 430, 11, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 3, 71, 7, 71, 438, 10, 71, 12, 71, 14, 71, 441, 11, 71, 3, 71, 3, 71, 3, 72, 3, 72, 7, 72, 447, 10, 72, 12, 72, 14, 72, 450, 11, 72, 3, 73, 3, 73, 3, 74, 3, 74, 3, 75, 3, 75, 3, 75, 5, 75, 459, 10, 75, 3, 76, 3, 76, 3, 76, 3, 76, 7, 76, 465, 10, 76, 12, 76, 14, 76, 468, 11, 76, 3, 76, 3, 76, 3, 77, 6, 77, 473, 10, 77, 13, 77, 14, 77, 474, 3, 77, 3, 77, 3, 78, 3, 78, 2, 2, 79, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 2, 147, 2, 149, 2, 151, 74, 153, 75, 155, 76, 3, 2, 11, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 3, 2, 41, 41, 4, 2, 12, 12, 14, 15, 5, 2, 11, 12, 15, 15, 34, 34, 2, 491, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 3, 157, 3, 2, 2, 2, 5, 159, 3, 2, 2, 2, 7, 163, 3, 2, 2, 2, 9, 168, 3, 2, 2, 2, 11, 175, 3, 2, 2, 2, 13, 178, 3, 2, 2, 2, 15, 183, 3, 2, 2, 2, 17, 189, 3, 2, 2, 2, 19, 191, 3, 2, 2, 2, 21, 193, 3, 2, 2, 2, 23, 195, 3, 2, 2, 2, 25, 197, 3, 2, 2, 2, 27, 199, 3, 2, 2, 2, 29, 201, 3, 2, 2, 2, 31, 203, 3, 2, 2, 2, 33, 206, 3, 2, 2, 2, 35, 209, 3, 2, 2, 2, 37, 211, 3, 2, 2, 2, 39, 213, 3, 2, 2, 2, 41, 215, 3, 2, 2, 2, 43, 218, 3, 2, 2, 2, 45, 224, 3, 2, 2, 2, 47, 233, 3, 2, 2, 2, 49, 240, 3, 2, 2, 2, 51, 242, 3, 2, 2, 2, 53, 245, 3, 2, 2, 2, 55, 248, 3, 2, 2, 2, 57, 253, 3, 2, 2, 2, 59, 258, 3, 2, 2, 2, 61, 264, 3, 2, 2, 2, 63, 270, 3, 2, 2, 2, 65, 274, 3, 2, 2, 2, 67, 277, 3, 2, 2, 2, 69, 282, 3, 2, 2, 2, 71, 287, 3, 2, 2, 2, 73, 289, 3, 2, 2, 2, 75, 291, 3, 2, 2, 2, 77, 293, 3, 2, 2, 2, 79, 295, 3, 2, 2, 2, 81, 299, 3, 2, 2, 2, 83, 306, 3, 2, 2, 2, 85, 312, 3, 2, 2, 2, 87, 314, 3, 2, 2, 2, 89, 316, 3, 2, 2, 2, 91, 318, 3, 2, 2, 2, 93, 320, 3, 2, 2, 2, 95, 322, 3, 2, 2, 2, 97, 324, 3, 2, 2, 2, 99, 326, 3, 2, 2, 2, 101, 328, 3, 2, 2, 2, 103, 330, 3, 2, 2, 2, 105, 333, 3, 2, 2, 2, 107, 337, 3, 2, 2, 2, 109, 340, 3, 2, 2, 2, 111, 346, 3, 2, 2, 2, 113, 349, 3, 2, 2, 2, 115, 352, 3, 2, 2, 2, 117, 355, 3, 2, 2, 2, 119, 358, 3, 2, 2, 2, 121, 362, 3, 2, 2, 2, 123, 366, 3, 2, 2, 2, 125, 369, 3, 2, 2, 2, 127, 376, 3, 2, 2, 2, 129, 379, 3, 2, 2, 2, 131, 384, 3, 2, 2, 2, 133, 390, 3, 2, 2, 2, 135, 396, 3, 2, 2, 2, 137, 401, 3, 2, 2, 2, 139, 422, 3, 2, 2, 2, 141, 433, 3, 2, 2, 2, 143, 444, 3, 2, 2, 2, 145, 451, 3, 2, 2, 2, 147, 453, 3, 2, 2, 2, 149, 458, 3, 2, 2, 2, 151, 460, 3, 2, 2, 2, 153, 472, 3, 2, 2, 2, 155, 478, 3, 2, 2, 2, 157, 158, 7, 61, 2, 2, 158, 4, 3, 2, 2, 2, 159, 160, 7, 119, 2, 2, 160, 161, 7, 117, 2, 2, 161, 162, 7, 103, 2, 2, 162, 6, 3, 2, 2, 2, 163, 164, 7, 113, 2, 2, 164, 165, 7, 112, 2, 2, 165, 166, 7, 110, 2, 2, 166, 167, 7, 123, 2, 2, 167, 8, 3, 2, 2, 2, 168, 169, 7, 106, 2, 2, 169, 170, 7, 107, 2, 2, 170, 171, 7, 102, 2, 2, 171, 172, 7, 107, 2, 2, 172, 173, 7, 112, 2, 2, 173, 174, 7, 105, 2, 2, 174, 10, 3, 2, 2, 2, 175, 176, 7, 99, 2, 2, 176, 177, 7, 117, 2, 2, 177, 12, 3, 2, 2, 2, 178, 179, 7, 117, 2, 2, 179, 180, 7, 109, 2, 2, 180, 181, 7, 107, 2, 2, 181, 182, 7, 114, 2, 2, 182, 14, 3, 2, 2, 2, 183, 184, 7, 114, 2, 2, 184, 185, 7, 116, 2, 2, 185, 186, 7, 107, 2, 2, 186, 187, 7, 112, 2, 2, 187, 188, 7, 118, 2, 2, 188, 16, 3, 2, 2, 2, 189, 190, 7, 63, 2, 2, 190, 18, 3, 2, 2, 2, 191, 192, 7, 96, 2, 2, 192, 20, 3, 2, 2, 2, 193, 194, 7, 44, 2, 2, 194, 22, 3, 2, 2, 2, 195, 196, 7, 49, 2, 2, 196, 24, 3, 2, 2, 2, 197, 198, 7, 39, 2, 2, 198, 26, 3, 2, 2, 2, 199, 200, 7, 45, 2, 2, 200, 28, 3, 2, 2, 2, 201, 202, 7, 47, 2, 2, 202, 30, 3, 2, 2, 2, 203, 204, 7, 62, 2, 2, 204, 205, 7, 62, 2, 2, 205, 32, 3, 2, 2, 2, 206, 207, 7, 64, 2, 2, 207, 208, 7, 64, 2, 2, 208, 34, 3, 2, 2, 2, 209, 210, 7, 40, 2, 2, 210, 36, 3, 2, 2, 2, 211, 212, 7, 38, 2, 2, 212, 38, 3, 2, 2, 2, 213, 214, 7, 126, 2, 2, 214, 40, 3, 2, 2, 2, 215, 216, 7, 65, 2, 2, 216, 217, 7, 65, 2, 2, 217, 42, 3, 2, 2, 2, 218, 219, 7, 100, 2, 2, 219, 220, 7, 116, 2, 2, 220, 221, 7, 103, 2, 2, 221, 222, 7, 99, 2, 2, 222, 223, 7, 109, 2, 2, 223, 44, 3, 2, 2, 2, 224, 225, 7, 101, 2, 2, 225, 226, 7, 113, 2, 2, 226, 227, 7, 112, 2, 2, 227, 228, 7, 118, 2, 2, 228, 229, 7, 107, 2, 2, 229, 230, 7, 112, 2, 2, 230, 231, 7, 119, 2, 2, 231, 232, 7, 103, 2, 2, 232, 46, 3, 2, 2, 2, 233, 234, 7, 116, 2, 2, 234, 235, 7, 103, 2, 2, 235, 236, 7, 118, 2, 2, 236, 237, 7, 119, 2, 2, 237, 238, 7, 116, 2, 2, 238, 239, 7, 112, 2, 2, 239, 48, 3, 2, 2, 2, 240, 241, 7, 46, 2, 2, 241, 50, 3, 2, 2, 2, 242, 243, 7, 107, 2, 2, 243, 244, 7, 104, 2, 2, 244, 52, 3, 2, 2, 2, 245, 246, 7, 102, 2, 2, 246, 247, 7, 113, 2, 2, 247, 54, 3, 2, 2, 2, 248, 249, 7, 103, 2, 2, 249, 250, 7, 110, 2, 2, 250, 251, 7, 107, 2, 2, 251, 252, 7, 104, 2, 2, 252, 56, 3, 2, 2, 2, 253, 254, 7, 103, 2, 2, 254, 255, 7, 110, 2, 2, 255, 256, 7, 117, 2, 2, 256, 257, 7, 103, 2, 2, 257, 58, 3, 2, 2, 2, 258, 259, 7, 121, 2, 2, 259, 260, 7, 106, 2, 2, 260, 261, 7, 107, 2, 2, 261, 262, 7, 110, 2, 2, 262, 263, 7, 103, 2, 2, 263, 60, 3, 2, 2, 2, 264, 265, 7, 119, 2, 2, 265, 266, 7, 112, 2, 2, 266, 267, 7, 118, 2, 2, 267, 268, 7, 107, 2, 2, 268, 269, 7, 110, 2, 2, 269, 62, 3, 2, 2, 2, 270, 271, 7, 104, 2, 2, 271, 272, 7, 113, 2, 2, 272, 273, 7, 116, 2, 2, 273, 64, 3, 2, 2, 2, 274, 275, 7, 107, 2, 2, 275, 276, 7, 112, 2, 2, 276, 66, 3, 2, 2, 2, 277, 278, 7, 117, 2, 2, 278, 279, 7, 118, 2, 2, 279, 280, 7, 103, 2, 2, 280, 281, 7, 114, 2, 2, 281, 68, 3, 2, 2, 2, 282, 283, 7, 104, 2, 2, 283, 284, 7, 119, 2, 2, 284, 285, 7, 112, 2, 2, 285, 286, 7, 101, 2, 2, 286, 70, 3, 2, 2, 2, 287, 288, 7, 62, 2, 2, 288, 72, 3, 2, 2, 2, 289, 290, 7, 64, 2, 2, 290, 74, 3, 2, 2, 2, 291, 292, 7, 42, 2, 2, 292, 76, 3, 2, 2, 2, 293, 294, 7, 43, 2, 2, 294, 78, 3, 2, 2, 2, 295, 296, 7, 102, 2, 2, 296, 297, 7, 103, 2, 2, 297, 298, 7, 104, 2, 2, 298, 80, 3, 2, 2, 2, 299, 300, 7, 103, 2, 2, 300, 301, 7, 122, 2, 2, 301, 302, 7, 118, 2, 2, 302, 303, 7, 103, 2, 2, 303, 304, 7, 116, 2, 2, 304, 305, 7, 112, 2, 2, 305, 82, 3, 2, 2, 2, 306, 307, 7, 101, 2, 2, 307, 308, 7, 110, 2, 2, 308, 309, 7, 99, 2, 2, 309, 310, 7, 117, 2, 2, 310, 311, 7, 117, 2, 2, 311, 84, 3, 2, 2, 2, 312, 313, 7, 125, 2, 2, 313, 86, 3, 2, 2, 2, 314, 315, 7, 127, 2, 2, 315, 88, 3, 2, 2, 2, 316, 317, 7, 60, 2, 2, 317, 90, 3, 2, 2, 2, 318, 319, 7, 93, 2, 2, 319, 92, 3, 2, 2, 2, 320, 321, 7, 95, 2, 2, 321, 94, 3, 2, 2, 2, 322, 323, 7, 65, 2, 2, 323, 96, 3, 2, 2, 2, 324, 325, 7, 48, 2, 2, 325, 98, 3, 2, 2, 2, 326, 327, 7, 35, 2, 2, 327, 100, 3, 2, 2, 2, 328, 329, 7, 128, 2, 2, 329, 102, 3, 2, 2, 2, 330, 331, 7, 48, 2, 2, 331, 332, 7, 48, 2, 2, 332, 104, 3, 2, 2, 2, 333, 334, 7, 48, 2, 2, 334, 335, 7, 48, 2, 2, 335, 336, 7, 48, 2, 2, 336, 106, 3, 2, 2, 2, 337, 338, 7, 107, 2, 2, 338, 339, 7, 117, 2, 2, 339, 108, 3, 2, 2, 2, 340, 341, 7, 107, 2, 2, 341, 342, 7, 117, 2, 2, 342, 343, 7, 112, 2, 2, 343, 344, 7, 41, 2, 2, 344, 345, 7, 118, 2, 2, 345, 110, 3, 2, 2, 2, 346, 347, 7, 63, 2, 2, 347, 348, 7, 63, 2, 2, 348, 112, 3, 2, 2, 2, 349, 350, 7, 35, 2, 2, 350, 351, 7, 63, 2, 2, 351, 114, 3, 2, 2, 2, 352, 353, 7, 62, 2, 2, 353, 354, 7, 63, 2, 2, 354, 116, 3, 2, 2, 2, 355, 356, 7, 64, 2, 2, 356, 357, 7, 63, 2, 2, 357, 118, 3, 2, 2, 2, 358, 359, 7, 112, 2, 2, 359, 360, 7, 113, 2, 2, 360, 361, 7, 118, 2, 2, 361, 120, 3, 2, 2, 2, 362, 363, 7, 99, 2, 2, 363, 364, 7, 112, 2, 2, 364, 365, 7, 102, 2, 2, 365, 122, 3, 2, 2, 2, 366, 367, 7, 113, 2, 2, 367, 368, 7, 116, 2, 2, 368, 124, 3, 2, 2, 2, 369, 370, 7, 110, 2, 2, 370, 371, 7, 99, 2, 2, 371, 372, 7, 111, 2, 2, 372, 373, 7, 100, 2, 2, 373, 374, 7, 102, 2, 2, 374, 375, 7, 99, 2, 2, 375, 126, 3, 2, 2, 2, 376, 377, 7, 47, 2, 2, 377, 378, 7, 64, 2, 2, 378, 128, 3, 2, 2, 2, 379, 380, 7, 118, 2, 2, 380, 381, 7, 116, 2, 2, 381, 382, 7, 119, 2, 2, 382, 383, 7, 103, 2, 2, 383, 130, 3, 2, 2, 2, 384, 385, 7, 104, 2, 2, 385, 386, 7, 99, 2, 2, 386, 387, 7, 110, 2, 2, 387, 388, 7, 117, 2, 2, 388, 389, 7, 103, 2, 2, 389, 132, 3, 2, 2, 2, 390, 391, 7, 112, 2, 2, 391, 392, 7, 119, 2, 2, 392, 393, 7, 110, 2, 2, 393, 394, 7, 110, 2, 2, 394, 134, 3, 2, 2, 2, 395, 397, 5, 145, 73, 2, 396, 395, 3, 2, 2, 2, 397, 398, 3, 2, 2, 2, 398, 396, 3, 2, 2, 2, 398, 399, 3, 2, 2, 2, 399, 136, 3, 2, 2, 2, 400, 402, 5, 145, 73, 2, 401, 400, 3, 2, 2, 2, 402, 403, 3, 2, 2, 2, 403, 401, 3, 2, 2, 2, 403, 404, 3, 2, 2, 2, 404, 405, 3, 2, 2, 2, 405, 407, 7, 48, 2, 2, 406, 408, 5, 145, 73, 2, 407, 406, 3, 2, 2, 2, 408, 409, 3, 2, 2, 2, 409, 407, 3, 2, 2, 2, 409, 410, 3, 2, 2, 2, 410, 420, 3, 2, 2, 2, 411, 413, 7, 103, 2, 2, 412, 414, 7, 47, 2, 2, 413, 412, 3, 2, 2, 2, 413, 414, 3, 2, 2, 2, 414, 416, 3, 2, 2, 2, 415, 417, 5, 145, 73, 2, 416, 415, 3, 2, 2, 2, 417, 418, 3, 2, 2, 2, 418, 416, 3, 2, 2, 2, 418, 419, 3, 2, 2, 2, 419, 421, 3, 2, 2, 2, 420, 411, 3, 2, 2, 2, 420, 421, 3, 2, 2, 2, 421, 138, 3, 2, 2, 2, 422, 428, 7, 41, 2, 2, 423, 427, 10, 2, 2, 2, 424, 425, 7, 94, 2, 2, 425, 427, 9, 3, 2, 2, 426, 423, 3, 2, 2, 2, 426, 424, 3, 2, 2, 2, 427, 430, 3, 2, 2, 2, 428, 426, 3, 2, 2, 2, 428, 429, 3, 2, 2, 2, 429, 431, 3, 2, 2, 2, 430, 428, 3, 2, 2, 2, 431, 432, 7, 41, 2, 2, 432, 140, 3, 2, 2, 2, 433, 439, 7, 36, 2, 2, 434, 438, 10, 4, 2, 2, 435, 436, 7, 94, 2, 2, 436, 438, 9, 5, 2, 2, 437, 434, 3, 2, 2, 2, 437, 435, 3, 2, 2, 2, 438, 441, 3, 2, 2, 2, 439, 437, 3, 2, 2, 2, 439, 440, 3, 2, 2, 2, 440, 442, 3, 2, 2, 2, 441, 439, 3, 2, 2, 2, 442, 443, 7, 36, 2, 2, 443, 142, 3, 2, 2, 2, 444, 448, 5, 147, 74, 2, 445, 447, 5, 149, 75, 2, 446, 445, 3, 2, 2, 2, 447, 450, 3, 2, 2, 2, 448, 446, 3, 2, 2, 2, 448, 449, 3, 2, 2, 2, 449, 144, 3, 2, 2, 2, 450, 448, 3, 2, 2, 2, 451, 452, 9, 6, 2, 2, 452, 146, 3, 2, 2, 2, 453, 454, 9, 7, 2, 2, 454, 148, 3, 2, 2, 2, 455, 459, 5, 147, 74, 2, 456, 459, 5, 145, 73, 2, 457, 459, 9, 8, 2, 2, 458, 455, 3, 2, 2, 2, 458, 456, 3, 2, 2, 2, 458, 457, 3, 2, 2, 2, 459, 150, 3, 2, 2, 2, 460, 461, 7, 47, 2, 2, 461, 462, 7, 47, 2, 2, 462, 466, 3, 2, 2, 2, 463, 465, 10, 9, 2, 2, 464, 463, 3, 2, 2, 2, 465, 468, 3, 2, 2, 2, 466, 464, 3, 2, 2, 2, 466, 467, 3, 2, 2, 2, 467, 469, 3, 2, 2, 2, 468, 466, 3, 2, 2, 2, 469, 470, 8, 76, 2, 2, 470, 152, 3, 2, 2, 2, 471, 473, 9, 10, 2, 2, 472, 471, 3, 2, 2, 2, 473, 474, 3, 2, 2, 2, 474, 472, 3, 2, 2, 2, 474, 475, 3, 2, 2, 2, 475, 476, 3, 2, 2, 2, 476, 477, 8, 77, 2, 2, 477, 154, 3, 2, 2, 2, 478, 479, 11, 2, 2, 2, 479, 156, 3, 2, 2, 2, 17, 2, 398, 403, 409, 413, 418, 420, 426, 428, 437, 439, 448, 458, 466, 474, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py index cf615f84..a9370b98 100644 --- a/src/antlr/PyxellLexer.py +++ b/src/antlr/PyxellLexer.py @@ -8,8 +8,8 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2K") - buf.write("\u01d8\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2L") + buf.write("\u01e0\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") @@ -20,195 +20,198 @@ def serializedATN(): buf.write("\t\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:") buf.write("\4;\t;\4<\t<\4=\t=\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\t") buf.write("C\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I\tI\4J\tJ\4K\tK\4L\t") - buf.write("L\4M\tM\3\2\3\2\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3") - buf.write("\5\3\5\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3\6\3\7\3\7\3\7\3\7") - buf.write("\3\7\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3\t\3\n\3\n\3\13\3\13") - buf.write("\3\f\3\f\3\r\3\r\3\16\3\16\3\17\3\17\3\20\3\20\3\20\3") - buf.write("\21\3\21\3\21\3\22\3\22\3\23\3\23\3\24\3\24\3\25\3\25") - buf.write("\3\25\3\26\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27") - buf.write("\3\27\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\30\3\30\3\30") - buf.write("\3\30\3\31\3\31\3\32\3\32\3\32\3\33\3\33\3\33\3\34\3\34") - buf.write("\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35\3\36\3\36\3\36") - buf.write("\3\36\3\36\3\36\3\37\3\37\3\37\3\37\3\37\3\37\3 \3 \3") - buf.write(" \3 \3!\3!\3!\3\"\3\"\3\"\3\"\3\"\3#\3#\3#\3#\3#\3$\3") - buf.write("$\3%\3%\3&\3&\3\'\3\'\3(\3(\3(\3(\3)\3)\3)\3)\3)\3)\3") - buf.write(")\3*\3*\3+\3+\3,\3,\3-\3-\3.\3.\3/\3/\3\60\3\60\3\61\3") - buf.write("\61\3\62\3\62\3\63\3\63\3\63\3\64\3\64\3\64\3\64\3\65") - buf.write("\3\65\3\65\3\66\3\66\3\66\3\66\3\66\3\66\3\67\3\67\3\67") - buf.write("\38\38\38\39\39\39\3:\3:\3:\3;\3;\3;\3;\3<\3<\3<\3<\3") - buf.write("=\3=\3=\3>\3>\3>\3>\3>\3>\3>\3?\3?\3?\3@\3@\3@\3@\3@\3") - buf.write("A\3A\3A\3A\3A\3A\3B\3B\3B\3B\3B\3C\6C\u0185\nC\rC\16C") - buf.write("\u0186\3D\6D\u018a\nD\rD\16D\u018b\3D\3D\6D\u0190\nD\r") - buf.write("D\16D\u0191\3D\3D\5D\u0196\nD\3D\6D\u0199\nD\rD\16D\u019a") - buf.write("\5D\u019d\nD\3E\3E\3E\3E\7E\u01a3\nE\fE\16E\u01a6\13E") - buf.write("\3E\3E\3F\3F\3F\3F\7F\u01ae\nF\fF\16F\u01b1\13F\3F\3F") - buf.write("\3G\3G\7G\u01b7\nG\fG\16G\u01ba\13G\3H\3H\3I\3I\3J\3J") - buf.write("\3J\5J\u01c3\nJ\3K\3K\3K\3K\7K\u01c9\nK\fK\16K\u01cc\13") - buf.write("K\3K\3K\3L\6L\u01d1\nL\rL\16L\u01d2\3L\3L\3M\3M\2\2N\3") - buf.write("\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16") - buf.write("\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61") - buf.write("\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*") - buf.write("S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k\67m8o9q:s;u{?}@\177A\u0081B\u0083C\u0085D\u0087E\u0089F\u008b") - buf.write("G\u008dH\u008f\2\u0091\2\u0093\2\u0095I\u0097J\u0099K") - buf.write("\3\2\13\4\2))^^\6\2))^^ppvv\4\2$$^^\6\2$$^^ppvv\3\2\62") - buf.write(";\5\2C\\aac|\3\2))\4\2\f\f\16\17\5\2\13\f\17\17\"\"\2") - buf.write("\u01e3\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2") - buf.write("\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2") - buf.write("\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33") - buf.write("\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2") - buf.write("\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2") - buf.write("\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2") - buf.write("\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2") - buf.write("\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3") - buf.write("\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S") - buf.write("\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2") - buf.write("]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2") - buf.write("\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2") - buf.write("\2\2q\3\2\2\2\2s\3\2\2\2\2u\3\2\2\2\2w\3\2\2\2\2y\3\2") - buf.write("\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177\3\2\2\2\2\u0081\3\2\2") - buf.write("\2\2\u0083\3\2\2\2\2\u0085\3\2\2\2\2\u0087\3\2\2\2\2\u0089") - buf.write("\3\2\2\2\2\u008b\3\2\2\2\2\u008d\3\2\2\2\2\u0095\3\2\2") - buf.write("\2\2\u0097\3\2\2\2\2\u0099\3\2\2\2\3\u009b\3\2\2\2\5\u009d") - buf.write("\3\2\2\2\7\u00a1\3\2\2\2\t\u00a6\3\2\2\2\13\u00ad\3\2") - buf.write("\2\2\r\u00b0\3\2\2\2\17\u00b5\3\2\2\2\21\u00bb\3\2\2\2") - buf.write("\23\u00bd\3\2\2\2\25\u00bf\3\2\2\2\27\u00c1\3\2\2\2\31") - buf.write("\u00c3\3\2\2\2\33\u00c5\3\2\2\2\35\u00c7\3\2\2\2\37\u00c9") - buf.write("\3\2\2\2!\u00cc\3\2\2\2#\u00cf\3\2\2\2%\u00d1\3\2\2\2") - buf.write("\'\u00d3\3\2\2\2)\u00d5\3\2\2\2+\u00d8\3\2\2\2-\u00de") - buf.write("\3\2\2\2/\u00e7\3\2\2\2\61\u00ee\3\2\2\2\63\u00f0\3\2") - buf.write("\2\2\65\u00f3\3\2\2\2\67\u00f6\3\2\2\29\u00fb\3\2\2\2") - buf.write(";\u0100\3\2\2\2=\u0106\3\2\2\2?\u010c\3\2\2\2A\u0110\3") - buf.write("\2\2\2C\u0113\3\2\2\2E\u0118\3\2\2\2G\u011d\3\2\2\2I\u011f") - buf.write("\3\2\2\2K\u0121\3\2\2\2M\u0123\3\2\2\2O\u0125\3\2\2\2") - buf.write("Q\u0129\3\2\2\2S\u0130\3\2\2\2U\u0132\3\2\2\2W\u0134\3") - buf.write("\2\2\2Y\u0136\3\2\2\2[\u0138\3\2\2\2]\u013a\3\2\2\2_\u013c") - buf.write("\3\2\2\2a\u013e\3\2\2\2c\u0140\3\2\2\2e\u0142\3\2\2\2") - buf.write("g\u0145\3\2\2\2i\u0149\3\2\2\2k\u014c\3\2\2\2m\u0152\3") - buf.write("\2\2\2o\u0155\3\2\2\2q\u0158\3\2\2\2s\u015b\3\2\2\2u\u015e") - buf.write("\3\2\2\2w\u0162\3\2\2\2y\u0166\3\2\2\2{\u0169\3\2\2\2") - buf.write("}\u0170\3\2\2\2\177\u0173\3\2\2\2\u0081\u0178\3\2\2\2") - buf.write("\u0083\u017e\3\2\2\2\u0085\u0184\3\2\2\2\u0087\u0189\3") - buf.write("\2\2\2\u0089\u019e\3\2\2\2\u008b\u01a9\3\2\2\2\u008d\u01b4") - buf.write("\3\2\2\2\u008f\u01bb\3\2\2\2\u0091\u01bd\3\2\2\2\u0093") - buf.write("\u01c2\3\2\2\2\u0095\u01c4\3\2\2\2\u0097\u01d0\3\2\2\2") - buf.write("\u0099\u01d6\3\2\2\2\u009b\u009c\7=\2\2\u009c\4\3\2\2") - buf.write("\2\u009d\u009e\7w\2\2\u009e\u009f\7u\2\2\u009f\u00a0\7") - buf.write("g\2\2\u00a0\6\3\2\2\2\u00a1\u00a2\7q\2\2\u00a2\u00a3\7") - buf.write("p\2\2\u00a3\u00a4\7n\2\2\u00a4\u00a5\7{\2\2\u00a5\b\3") - buf.write("\2\2\2\u00a6\u00a7\7j\2\2\u00a7\u00a8\7k\2\2\u00a8\u00a9") - buf.write("\7f\2\2\u00a9\u00aa\7k\2\2\u00aa\u00ab\7p\2\2\u00ab\u00ac") - buf.write("\7i\2\2\u00ac\n\3\2\2\2\u00ad\u00ae\7c\2\2\u00ae\u00af") - buf.write("\7u\2\2\u00af\f\3\2\2\2\u00b0\u00b1\7u\2\2\u00b1\u00b2") - buf.write("\7m\2\2\u00b2\u00b3\7k\2\2\u00b3\u00b4\7r\2\2\u00b4\16") - buf.write("\3\2\2\2\u00b5\u00b6\7r\2\2\u00b6\u00b7\7t\2\2\u00b7\u00b8") - buf.write("\7k\2\2\u00b8\u00b9\7p\2\2\u00b9\u00ba\7v\2\2\u00ba\20") - buf.write("\3\2\2\2\u00bb\u00bc\7?\2\2\u00bc\22\3\2\2\2\u00bd\u00be") - buf.write("\7`\2\2\u00be\24\3\2\2\2\u00bf\u00c0\7,\2\2\u00c0\26\3") - buf.write("\2\2\2\u00c1\u00c2\7\61\2\2\u00c2\30\3\2\2\2\u00c3\u00c4") - buf.write("\7\'\2\2\u00c4\32\3\2\2\2\u00c5\u00c6\7-\2\2\u00c6\34") - buf.write("\3\2\2\2\u00c7\u00c8\7/\2\2\u00c8\36\3\2\2\2\u00c9\u00ca") - buf.write("\7>\2\2\u00ca\u00cb\7>\2\2\u00cb \3\2\2\2\u00cc\u00cd") - buf.write("\7@\2\2\u00cd\u00ce\7@\2\2\u00ce\"\3\2\2\2\u00cf\u00d0") - buf.write("\7(\2\2\u00d0$\3\2\2\2\u00d1\u00d2\7&\2\2\u00d2&\3\2\2") - buf.write("\2\u00d3\u00d4\7~\2\2\u00d4(\3\2\2\2\u00d5\u00d6\7A\2") - buf.write("\2\u00d6\u00d7\7A\2\2\u00d7*\3\2\2\2\u00d8\u00d9\7d\2") - buf.write("\2\u00d9\u00da\7t\2\2\u00da\u00db\7g\2\2\u00db\u00dc\7") - buf.write("c\2\2\u00dc\u00dd\7m\2\2\u00dd,\3\2\2\2\u00de\u00df\7") - buf.write("e\2\2\u00df\u00e0\7q\2\2\u00e0\u00e1\7p\2\2\u00e1\u00e2") - buf.write("\7v\2\2\u00e2\u00e3\7k\2\2\u00e3\u00e4\7p\2\2\u00e4\u00e5") - buf.write("\7w\2\2\u00e5\u00e6\7g\2\2\u00e6.\3\2\2\2\u00e7\u00e8") - buf.write("\7t\2\2\u00e8\u00e9\7g\2\2\u00e9\u00ea\7v\2\2\u00ea\u00eb") - buf.write("\7w\2\2\u00eb\u00ec\7t\2\2\u00ec\u00ed\7p\2\2\u00ed\60") - buf.write("\3\2\2\2\u00ee\u00ef\7.\2\2\u00ef\62\3\2\2\2\u00f0\u00f1") - buf.write("\7k\2\2\u00f1\u00f2\7h\2\2\u00f2\64\3\2\2\2\u00f3\u00f4") - buf.write("\7f\2\2\u00f4\u00f5\7q\2\2\u00f5\66\3\2\2\2\u00f6\u00f7") - buf.write("\7g\2\2\u00f7\u00f8\7n\2\2\u00f8\u00f9\7k\2\2\u00f9\u00fa") - buf.write("\7h\2\2\u00fa8\3\2\2\2\u00fb\u00fc\7g\2\2\u00fc\u00fd") - buf.write("\7n\2\2\u00fd\u00fe\7u\2\2\u00fe\u00ff\7g\2\2\u00ff:\3") - buf.write("\2\2\2\u0100\u0101\7y\2\2\u0101\u0102\7j\2\2\u0102\u0103") - buf.write("\7k\2\2\u0103\u0104\7n\2\2\u0104\u0105\7g\2\2\u0105<\3") - buf.write("\2\2\2\u0106\u0107\7w\2\2\u0107\u0108\7p\2\2\u0108\u0109") - buf.write("\7v\2\2\u0109\u010a\7k\2\2\u010a\u010b\7n\2\2\u010b>\3") - buf.write("\2\2\2\u010c\u010d\7h\2\2\u010d\u010e\7q\2\2\u010e\u010f") - buf.write("\7t\2\2\u010f@\3\2\2\2\u0110\u0111\7k\2\2\u0111\u0112") - buf.write("\7p\2\2\u0112B\3\2\2\2\u0113\u0114\7u\2\2\u0114\u0115") - buf.write("\7v\2\2\u0115\u0116\7g\2\2\u0116\u0117\7r\2\2\u0117D\3") - buf.write("\2\2\2\u0118\u0119\7h\2\2\u0119\u011a\7w\2\2\u011a\u011b") - buf.write("\7p\2\2\u011b\u011c\7e\2\2\u011cF\3\2\2\2\u011d\u011e") - buf.write("\7>\2\2\u011eH\3\2\2\2\u011f\u0120\7@\2\2\u0120J\3\2\2") - buf.write("\2\u0121\u0122\7*\2\2\u0122L\3\2\2\2\u0123\u0124\7+\2") - buf.write("\2\u0124N\3\2\2\2\u0125\u0126\7f\2\2\u0126\u0127\7g\2") - buf.write("\2\u0127\u0128\7h\2\2\u0128P\3\2\2\2\u0129\u012a\7g\2") - buf.write("\2\u012a\u012b\7z\2\2\u012b\u012c\7v\2\2\u012c\u012d\7") - buf.write("g\2\2\u012d\u012e\7t\2\2\u012e\u012f\7p\2\2\u012fR\3\2") - buf.write("\2\2\u0130\u0131\7<\2\2\u0131T\3\2\2\2\u0132\u0133\7}") - buf.write("\2\2\u0133V\3\2\2\2\u0134\u0135\7\177\2\2\u0135X\3\2\2") - buf.write("\2\u0136\u0137\7]\2\2\u0137Z\3\2\2\2\u0138\u0139\7_\2") - buf.write("\2\u0139\\\3\2\2\2\u013a\u013b\7A\2\2\u013b^\3\2\2\2\u013c") - buf.write("\u013d\7\60\2\2\u013d`\3\2\2\2\u013e\u013f\7#\2\2\u013f") - buf.write("b\3\2\2\2\u0140\u0141\7\u0080\2\2\u0141d\3\2\2\2\u0142") - buf.write("\u0143\7\60\2\2\u0143\u0144\7\60\2\2\u0144f\3\2\2\2\u0145") - buf.write("\u0146\7\60\2\2\u0146\u0147\7\60\2\2\u0147\u0148\7\60") - buf.write("\2\2\u0148h\3\2\2\2\u0149\u014a\7k\2\2\u014a\u014b\7u") - buf.write("\2\2\u014bj\3\2\2\2\u014c\u014d\7k\2\2\u014d\u014e\7u") - buf.write("\2\2\u014e\u014f\7p\2\2\u014f\u0150\7)\2\2\u0150\u0151") - buf.write("\7v\2\2\u0151l\3\2\2\2\u0152\u0153\7?\2\2\u0153\u0154") - buf.write("\7?\2\2\u0154n\3\2\2\2\u0155\u0156\7#\2\2\u0156\u0157") - buf.write("\7?\2\2\u0157p\3\2\2\2\u0158\u0159\7>\2\2\u0159\u015a") - buf.write("\7?\2\2\u015ar\3\2\2\2\u015b\u015c\7@\2\2\u015c\u015d") - buf.write("\7?\2\2\u015dt\3\2\2\2\u015e\u015f\7p\2\2\u015f\u0160") - buf.write("\7q\2\2\u0160\u0161\7v\2\2\u0161v\3\2\2\2\u0162\u0163") - buf.write("\7c\2\2\u0163\u0164\7p\2\2\u0164\u0165\7f\2\2\u0165x\3") - buf.write("\2\2\2\u0166\u0167\7q\2\2\u0167\u0168\7t\2\2\u0168z\3") - buf.write("\2\2\2\u0169\u016a\7n\2\2\u016a\u016b\7c\2\2\u016b\u016c") - buf.write("\7o\2\2\u016c\u016d\7d\2\2\u016d\u016e\7f\2\2\u016e\u016f") - buf.write("\7c\2\2\u016f|\3\2\2\2\u0170\u0171\7/\2\2\u0171\u0172") - buf.write("\7@\2\2\u0172~\3\2\2\2\u0173\u0174\7v\2\2\u0174\u0175") - buf.write("\7t\2\2\u0175\u0176\7w\2\2\u0176\u0177\7g\2\2\u0177\u0080") - buf.write("\3\2\2\2\u0178\u0179\7h\2\2\u0179\u017a\7c\2\2\u017a\u017b") - buf.write("\7n\2\2\u017b\u017c\7u\2\2\u017c\u017d\7g\2\2\u017d\u0082") - buf.write("\3\2\2\2\u017e\u017f\7p\2\2\u017f\u0180\7w\2\2\u0180\u0181") - buf.write("\7n\2\2\u0181\u0182\7n\2\2\u0182\u0084\3\2\2\2\u0183\u0185") - buf.write("\5\u008fH\2\u0184\u0183\3\2\2\2\u0185\u0186\3\2\2\2\u0186") - buf.write("\u0184\3\2\2\2\u0186\u0187\3\2\2\2\u0187\u0086\3\2\2\2") - buf.write("\u0188\u018a\5\u008fH\2\u0189\u0188\3\2\2\2\u018a\u018b") - buf.write("\3\2\2\2\u018b\u0189\3\2\2\2\u018b\u018c\3\2\2\2\u018c") - buf.write("\u018d\3\2\2\2\u018d\u018f\7\60\2\2\u018e\u0190\5\u008f") - buf.write("H\2\u018f\u018e\3\2\2\2\u0190\u0191\3\2\2\2\u0191\u018f") - buf.write("\3\2\2\2\u0191\u0192\3\2\2\2\u0192\u019c\3\2\2\2\u0193") - buf.write("\u0195\7g\2\2\u0194\u0196\7/\2\2\u0195\u0194\3\2\2\2\u0195") - buf.write("\u0196\3\2\2\2\u0196\u0198\3\2\2\2\u0197\u0199\5\u008f") - buf.write("H\2\u0198\u0197\3\2\2\2\u0199\u019a\3\2\2\2\u019a\u0198") - buf.write("\3\2\2\2\u019a\u019b\3\2\2\2\u019b\u019d\3\2\2\2\u019c") - buf.write("\u0193\3\2\2\2\u019c\u019d\3\2\2\2\u019d\u0088\3\2\2\2") - buf.write("\u019e\u01a4\7)\2\2\u019f\u01a3\n\2\2\2\u01a0\u01a1\7") - buf.write("^\2\2\u01a1\u01a3\t\3\2\2\u01a2\u019f\3\2\2\2\u01a2\u01a0") - buf.write("\3\2\2\2\u01a3\u01a6\3\2\2\2\u01a4\u01a2\3\2\2\2\u01a4") - buf.write("\u01a5\3\2\2\2\u01a5\u01a7\3\2\2\2\u01a6\u01a4\3\2\2\2") - buf.write("\u01a7\u01a8\7)\2\2\u01a8\u008a\3\2\2\2\u01a9\u01af\7") - buf.write("$\2\2\u01aa\u01ae\n\4\2\2\u01ab\u01ac\7^\2\2\u01ac\u01ae") - buf.write("\t\5\2\2\u01ad\u01aa\3\2\2\2\u01ad\u01ab\3\2\2\2\u01ae") - buf.write("\u01b1\3\2\2\2\u01af\u01ad\3\2\2\2\u01af\u01b0\3\2\2\2") - buf.write("\u01b0\u01b2\3\2\2\2\u01b1\u01af\3\2\2\2\u01b2\u01b3\7") - buf.write("$\2\2\u01b3\u008c\3\2\2\2\u01b4\u01b8\5\u0091I\2\u01b5") - buf.write("\u01b7\5\u0093J\2\u01b6\u01b5\3\2\2\2\u01b7\u01ba\3\2") - buf.write("\2\2\u01b8\u01b6\3\2\2\2\u01b8\u01b9\3\2\2\2\u01b9\u008e") - buf.write("\3\2\2\2\u01ba\u01b8\3\2\2\2\u01bb\u01bc\t\6\2\2\u01bc") - buf.write("\u0090\3\2\2\2\u01bd\u01be\t\7\2\2\u01be\u0092\3\2\2\2") - buf.write("\u01bf\u01c3\5\u0091I\2\u01c0\u01c3\5\u008fH\2\u01c1\u01c3") - buf.write("\t\b\2\2\u01c2\u01bf\3\2\2\2\u01c2\u01c0\3\2\2\2\u01c2") - buf.write("\u01c1\3\2\2\2\u01c3\u0094\3\2\2\2\u01c4\u01c5\7/\2\2") - buf.write("\u01c5\u01c6\7/\2\2\u01c6\u01ca\3\2\2\2\u01c7\u01c9\n") - buf.write("\t\2\2\u01c8\u01c7\3\2\2\2\u01c9\u01cc\3\2\2\2\u01ca\u01c8") - buf.write("\3\2\2\2\u01ca\u01cb\3\2\2\2\u01cb\u01cd\3\2\2\2\u01cc") - buf.write("\u01ca\3\2\2\2\u01cd\u01ce\bK\2\2\u01ce\u0096\3\2\2\2") - buf.write("\u01cf\u01d1\t\n\2\2\u01d0\u01cf\3\2\2\2\u01d1\u01d2\3") - buf.write("\2\2\2\u01d2\u01d0\3\2\2\2\u01d2\u01d3\3\2\2\2\u01d3\u01d4") - buf.write("\3\2\2\2\u01d4\u01d5\bL\2\2\u01d5\u0098\3\2\2\2\u01d6") - buf.write("\u01d7\13\2\2\2\u01d7\u009a\3\2\2\2\21\2\u0186\u018b\u0191") - buf.write("\u0195\u019a\u019c\u01a2\u01a4\u01ad\u01af\u01b8\u01c2") - buf.write("\u01ca\u01d2\3\b\2\2") + buf.write("L\4M\tM\4N\tN\3\2\3\2\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4") + buf.write("\3\4\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3\6\3\7\3\7\3") + buf.write("\7\3\7\3\7\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3\t\3\n\3\n\3\13") + buf.write("\3\13\3\f\3\f\3\r\3\r\3\16\3\16\3\17\3\17\3\20\3\20\3") + buf.write("\20\3\21\3\21\3\21\3\22\3\22\3\23\3\23\3\24\3\24\3\25") + buf.write("\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27") + buf.write("\3\27\3\27\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\30\3\30") + buf.write("\3\30\3\30\3\31\3\31\3\32\3\32\3\32\3\33\3\33\3\33\3\34") + buf.write("\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35\3\36\3\36") + buf.write("\3\36\3\36\3\36\3\36\3\37\3\37\3\37\3\37\3\37\3\37\3 ") + buf.write("\3 \3 \3 \3!\3!\3!\3\"\3\"\3\"\3\"\3\"\3#\3#\3#\3#\3#") + buf.write("\3$\3$\3%\3%\3&\3&\3\'\3\'\3(\3(\3(\3(\3)\3)\3)\3)\3)") + buf.write("\3)\3)\3*\3*\3*\3*\3*\3*\3+\3+\3,\3,\3-\3-\3.\3.\3/\3") + buf.write("/\3\60\3\60\3\61\3\61\3\62\3\62\3\63\3\63\3\64\3\64\3") + buf.write("\64\3\65\3\65\3\65\3\65\3\66\3\66\3\66\3\67\3\67\3\67") + buf.write("\3\67\3\67\3\67\38\38\38\39\39\39\3:\3:\3:\3;\3;\3;\3") + buf.write("<\3<\3<\3<\3=\3=\3=\3=\3>\3>\3>\3?\3?\3?\3?\3?\3?\3?\3") + buf.write("@\3@\3@\3A\3A\3A\3A\3A\3B\3B\3B\3B\3B\3B\3C\3C\3C\3C\3") + buf.write("C\3D\6D\u018d\nD\rD\16D\u018e\3E\6E\u0192\nE\rE\16E\u0193") + buf.write("\3E\3E\6E\u0198\nE\rE\16E\u0199\3E\3E\5E\u019e\nE\3E\6") + buf.write("E\u01a1\nE\rE\16E\u01a2\5E\u01a5\nE\3F\3F\3F\3F\7F\u01ab") + buf.write("\nF\fF\16F\u01ae\13F\3F\3F\3G\3G\3G\3G\7G\u01b6\nG\fG") + buf.write("\16G\u01b9\13G\3G\3G\3H\3H\7H\u01bf\nH\fH\16H\u01c2\13") + buf.write("H\3I\3I\3J\3J\3K\3K\3K\5K\u01cb\nK\3L\3L\3L\3L\7L\u01d1") + buf.write("\nL\fL\16L\u01d4\13L\3L\3L\3M\6M\u01d9\nM\rM\16M\u01da") + buf.write("\3M\3M\3N\3N\2\2O\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23") + buf.write("\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25") + buf.write(")\26+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A") + buf.write("\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65") + buf.write("i\66k\67m8o9q:s;u{?}@\177A\u0081B\u0083C\u0085D\u0087") + buf.write("E\u0089F\u008bG\u008dH\u008fI\u0091\2\u0093\2\u0095\2") + buf.write("\u0097J\u0099K\u009bL\3\2\13\4\2))^^\6\2))^^ppvv\4\2$") + buf.write("$^^\6\2$$^^ppvv\3\2\62;\5\2C\\aac|\3\2))\4\2\f\f\16\17") + buf.write("\5\2\13\f\17\17\"\"\2\u01eb\2\3\3\2\2\2\2\5\3\2\2\2\2") + buf.write("\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3") + buf.write("\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2") + buf.write("\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2") + buf.write("\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2") + buf.write("\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63") + buf.write("\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2") + buf.write("\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2") + buf.write("\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3") + buf.write("\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y") + buf.write("\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2") + buf.write("c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2") + buf.write("\2m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2u\3\2\2") + buf.write("\2\2w\3\2\2\2\2y\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177\3") + buf.write("\2\2\2\2\u0081\3\2\2\2\2\u0083\3\2\2\2\2\u0085\3\2\2\2") + buf.write("\2\u0087\3\2\2\2\2\u0089\3\2\2\2\2\u008b\3\2\2\2\2\u008d") + buf.write("\3\2\2\2\2\u008f\3\2\2\2\2\u0097\3\2\2\2\2\u0099\3\2\2") + buf.write("\2\2\u009b\3\2\2\2\3\u009d\3\2\2\2\5\u009f\3\2\2\2\7\u00a3") + buf.write("\3\2\2\2\t\u00a8\3\2\2\2\13\u00af\3\2\2\2\r\u00b2\3\2") + buf.write("\2\2\17\u00b7\3\2\2\2\21\u00bd\3\2\2\2\23\u00bf\3\2\2") + buf.write("\2\25\u00c1\3\2\2\2\27\u00c3\3\2\2\2\31\u00c5\3\2\2\2") + buf.write("\33\u00c7\3\2\2\2\35\u00c9\3\2\2\2\37\u00cb\3\2\2\2!\u00ce") + buf.write("\3\2\2\2#\u00d1\3\2\2\2%\u00d3\3\2\2\2\'\u00d5\3\2\2\2") + buf.write(")\u00d7\3\2\2\2+\u00da\3\2\2\2-\u00e0\3\2\2\2/\u00e9\3") + buf.write("\2\2\2\61\u00f0\3\2\2\2\63\u00f2\3\2\2\2\65\u00f5\3\2") + buf.write("\2\2\67\u00f8\3\2\2\29\u00fd\3\2\2\2;\u0102\3\2\2\2=\u0108") + buf.write("\3\2\2\2?\u010e\3\2\2\2A\u0112\3\2\2\2C\u0115\3\2\2\2") + buf.write("E\u011a\3\2\2\2G\u011f\3\2\2\2I\u0121\3\2\2\2K\u0123\3") + buf.write("\2\2\2M\u0125\3\2\2\2O\u0127\3\2\2\2Q\u012b\3\2\2\2S\u0132") + buf.write("\3\2\2\2U\u0138\3\2\2\2W\u013a\3\2\2\2Y\u013c\3\2\2\2") + buf.write("[\u013e\3\2\2\2]\u0140\3\2\2\2_\u0142\3\2\2\2a\u0144\3") + buf.write("\2\2\2c\u0146\3\2\2\2e\u0148\3\2\2\2g\u014a\3\2\2\2i\u014d") + buf.write("\3\2\2\2k\u0151\3\2\2\2m\u0154\3\2\2\2o\u015a\3\2\2\2") + buf.write("q\u015d\3\2\2\2s\u0160\3\2\2\2u\u0163\3\2\2\2w\u0166\3") + buf.write("\2\2\2y\u016a\3\2\2\2{\u016e\3\2\2\2}\u0171\3\2\2\2\177") + buf.write("\u0178\3\2\2\2\u0081\u017b\3\2\2\2\u0083\u0180\3\2\2\2") + buf.write("\u0085\u0186\3\2\2\2\u0087\u018c\3\2\2\2\u0089\u0191\3") + buf.write("\2\2\2\u008b\u01a6\3\2\2\2\u008d\u01b1\3\2\2\2\u008f\u01bc") + buf.write("\3\2\2\2\u0091\u01c3\3\2\2\2\u0093\u01c5\3\2\2\2\u0095") + buf.write("\u01ca\3\2\2\2\u0097\u01cc\3\2\2\2\u0099\u01d8\3\2\2\2") + buf.write("\u009b\u01de\3\2\2\2\u009d\u009e\7=\2\2\u009e\4\3\2\2") + buf.write("\2\u009f\u00a0\7w\2\2\u00a0\u00a1\7u\2\2\u00a1\u00a2\7") + buf.write("g\2\2\u00a2\6\3\2\2\2\u00a3\u00a4\7q\2\2\u00a4\u00a5\7") + buf.write("p\2\2\u00a5\u00a6\7n\2\2\u00a6\u00a7\7{\2\2\u00a7\b\3") + buf.write("\2\2\2\u00a8\u00a9\7j\2\2\u00a9\u00aa\7k\2\2\u00aa\u00ab") + buf.write("\7f\2\2\u00ab\u00ac\7k\2\2\u00ac\u00ad\7p\2\2\u00ad\u00ae") + buf.write("\7i\2\2\u00ae\n\3\2\2\2\u00af\u00b0\7c\2\2\u00b0\u00b1") + buf.write("\7u\2\2\u00b1\f\3\2\2\2\u00b2\u00b3\7u\2\2\u00b3\u00b4") + buf.write("\7m\2\2\u00b4\u00b5\7k\2\2\u00b5\u00b6\7r\2\2\u00b6\16") + buf.write("\3\2\2\2\u00b7\u00b8\7r\2\2\u00b8\u00b9\7t\2\2\u00b9\u00ba") + buf.write("\7k\2\2\u00ba\u00bb\7p\2\2\u00bb\u00bc\7v\2\2\u00bc\20") + buf.write("\3\2\2\2\u00bd\u00be\7?\2\2\u00be\22\3\2\2\2\u00bf\u00c0") + buf.write("\7`\2\2\u00c0\24\3\2\2\2\u00c1\u00c2\7,\2\2\u00c2\26\3") + buf.write("\2\2\2\u00c3\u00c4\7\61\2\2\u00c4\30\3\2\2\2\u00c5\u00c6") + buf.write("\7\'\2\2\u00c6\32\3\2\2\2\u00c7\u00c8\7-\2\2\u00c8\34") + buf.write("\3\2\2\2\u00c9\u00ca\7/\2\2\u00ca\36\3\2\2\2\u00cb\u00cc") + buf.write("\7>\2\2\u00cc\u00cd\7>\2\2\u00cd \3\2\2\2\u00ce\u00cf") + buf.write("\7@\2\2\u00cf\u00d0\7@\2\2\u00d0\"\3\2\2\2\u00d1\u00d2") + buf.write("\7(\2\2\u00d2$\3\2\2\2\u00d3\u00d4\7&\2\2\u00d4&\3\2\2") + buf.write("\2\u00d5\u00d6\7~\2\2\u00d6(\3\2\2\2\u00d7\u00d8\7A\2") + buf.write("\2\u00d8\u00d9\7A\2\2\u00d9*\3\2\2\2\u00da\u00db\7d\2") + buf.write("\2\u00db\u00dc\7t\2\2\u00dc\u00dd\7g\2\2\u00dd\u00de\7") + buf.write("c\2\2\u00de\u00df\7m\2\2\u00df,\3\2\2\2\u00e0\u00e1\7") + buf.write("e\2\2\u00e1\u00e2\7q\2\2\u00e2\u00e3\7p\2\2\u00e3\u00e4") + buf.write("\7v\2\2\u00e4\u00e5\7k\2\2\u00e5\u00e6\7p\2\2\u00e6\u00e7") + buf.write("\7w\2\2\u00e7\u00e8\7g\2\2\u00e8.\3\2\2\2\u00e9\u00ea") + buf.write("\7t\2\2\u00ea\u00eb\7g\2\2\u00eb\u00ec\7v\2\2\u00ec\u00ed") + buf.write("\7w\2\2\u00ed\u00ee\7t\2\2\u00ee\u00ef\7p\2\2\u00ef\60") + buf.write("\3\2\2\2\u00f0\u00f1\7.\2\2\u00f1\62\3\2\2\2\u00f2\u00f3") + buf.write("\7k\2\2\u00f3\u00f4\7h\2\2\u00f4\64\3\2\2\2\u00f5\u00f6") + buf.write("\7f\2\2\u00f6\u00f7\7q\2\2\u00f7\66\3\2\2\2\u00f8\u00f9") + buf.write("\7g\2\2\u00f9\u00fa\7n\2\2\u00fa\u00fb\7k\2\2\u00fb\u00fc") + buf.write("\7h\2\2\u00fc8\3\2\2\2\u00fd\u00fe\7g\2\2\u00fe\u00ff") + buf.write("\7n\2\2\u00ff\u0100\7u\2\2\u0100\u0101\7g\2\2\u0101:\3") + buf.write("\2\2\2\u0102\u0103\7y\2\2\u0103\u0104\7j\2\2\u0104\u0105") + buf.write("\7k\2\2\u0105\u0106\7n\2\2\u0106\u0107\7g\2\2\u0107<\3") + buf.write("\2\2\2\u0108\u0109\7w\2\2\u0109\u010a\7p\2\2\u010a\u010b") + buf.write("\7v\2\2\u010b\u010c\7k\2\2\u010c\u010d\7n\2\2\u010d>\3") + buf.write("\2\2\2\u010e\u010f\7h\2\2\u010f\u0110\7q\2\2\u0110\u0111") + buf.write("\7t\2\2\u0111@\3\2\2\2\u0112\u0113\7k\2\2\u0113\u0114") + buf.write("\7p\2\2\u0114B\3\2\2\2\u0115\u0116\7u\2\2\u0116\u0117") + buf.write("\7v\2\2\u0117\u0118\7g\2\2\u0118\u0119\7r\2\2\u0119D\3") + buf.write("\2\2\2\u011a\u011b\7h\2\2\u011b\u011c\7w\2\2\u011c\u011d") + buf.write("\7p\2\2\u011d\u011e\7e\2\2\u011eF\3\2\2\2\u011f\u0120") + buf.write("\7>\2\2\u0120H\3\2\2\2\u0121\u0122\7@\2\2\u0122J\3\2\2") + buf.write("\2\u0123\u0124\7*\2\2\u0124L\3\2\2\2\u0125\u0126\7+\2") + buf.write("\2\u0126N\3\2\2\2\u0127\u0128\7f\2\2\u0128\u0129\7g\2") + buf.write("\2\u0129\u012a\7h\2\2\u012aP\3\2\2\2\u012b\u012c\7g\2") + buf.write("\2\u012c\u012d\7z\2\2\u012d\u012e\7v\2\2\u012e\u012f\7") + buf.write("g\2\2\u012f\u0130\7t\2\2\u0130\u0131\7p\2\2\u0131R\3\2") + buf.write("\2\2\u0132\u0133\7e\2\2\u0133\u0134\7n\2\2\u0134\u0135") + buf.write("\7c\2\2\u0135\u0136\7u\2\2\u0136\u0137\7u\2\2\u0137T\3") + buf.write("\2\2\2\u0138\u0139\7}\2\2\u0139V\3\2\2\2\u013a\u013b\7") + buf.write("\177\2\2\u013bX\3\2\2\2\u013c\u013d\7<\2\2\u013dZ\3\2") + buf.write("\2\2\u013e\u013f\7]\2\2\u013f\\\3\2\2\2\u0140\u0141\7") + buf.write("_\2\2\u0141^\3\2\2\2\u0142\u0143\7A\2\2\u0143`\3\2\2\2") + buf.write("\u0144\u0145\7\60\2\2\u0145b\3\2\2\2\u0146\u0147\7#\2") + buf.write("\2\u0147d\3\2\2\2\u0148\u0149\7\u0080\2\2\u0149f\3\2\2") + buf.write("\2\u014a\u014b\7\60\2\2\u014b\u014c\7\60\2\2\u014ch\3") + buf.write("\2\2\2\u014d\u014e\7\60\2\2\u014e\u014f\7\60\2\2\u014f") + buf.write("\u0150\7\60\2\2\u0150j\3\2\2\2\u0151\u0152\7k\2\2\u0152") + buf.write("\u0153\7u\2\2\u0153l\3\2\2\2\u0154\u0155\7k\2\2\u0155") + buf.write("\u0156\7u\2\2\u0156\u0157\7p\2\2\u0157\u0158\7)\2\2\u0158") + buf.write("\u0159\7v\2\2\u0159n\3\2\2\2\u015a\u015b\7?\2\2\u015b") + buf.write("\u015c\7?\2\2\u015cp\3\2\2\2\u015d\u015e\7#\2\2\u015e") + buf.write("\u015f\7?\2\2\u015fr\3\2\2\2\u0160\u0161\7>\2\2\u0161") + buf.write("\u0162\7?\2\2\u0162t\3\2\2\2\u0163\u0164\7@\2\2\u0164") + buf.write("\u0165\7?\2\2\u0165v\3\2\2\2\u0166\u0167\7p\2\2\u0167") + buf.write("\u0168\7q\2\2\u0168\u0169\7v\2\2\u0169x\3\2\2\2\u016a") + buf.write("\u016b\7c\2\2\u016b\u016c\7p\2\2\u016c\u016d\7f\2\2\u016d") + buf.write("z\3\2\2\2\u016e\u016f\7q\2\2\u016f\u0170\7t\2\2\u0170") + buf.write("|\3\2\2\2\u0171\u0172\7n\2\2\u0172\u0173\7c\2\2\u0173") + buf.write("\u0174\7o\2\2\u0174\u0175\7d\2\2\u0175\u0176\7f\2\2\u0176") + buf.write("\u0177\7c\2\2\u0177~\3\2\2\2\u0178\u0179\7/\2\2\u0179") + buf.write("\u017a\7@\2\2\u017a\u0080\3\2\2\2\u017b\u017c\7v\2\2\u017c") + buf.write("\u017d\7t\2\2\u017d\u017e\7w\2\2\u017e\u017f\7g\2\2\u017f") + buf.write("\u0082\3\2\2\2\u0180\u0181\7h\2\2\u0181\u0182\7c\2\2\u0182") + buf.write("\u0183\7n\2\2\u0183\u0184\7u\2\2\u0184\u0185\7g\2\2\u0185") + buf.write("\u0084\3\2\2\2\u0186\u0187\7p\2\2\u0187\u0188\7w\2\2\u0188") + buf.write("\u0189\7n\2\2\u0189\u018a\7n\2\2\u018a\u0086\3\2\2\2\u018b") + buf.write("\u018d\5\u0091I\2\u018c\u018b\3\2\2\2\u018d\u018e\3\2") + buf.write("\2\2\u018e\u018c\3\2\2\2\u018e\u018f\3\2\2\2\u018f\u0088") + buf.write("\3\2\2\2\u0190\u0192\5\u0091I\2\u0191\u0190\3\2\2\2\u0192") + buf.write("\u0193\3\2\2\2\u0193\u0191\3\2\2\2\u0193\u0194\3\2\2\2") + buf.write("\u0194\u0195\3\2\2\2\u0195\u0197\7\60\2\2\u0196\u0198") + buf.write("\5\u0091I\2\u0197\u0196\3\2\2\2\u0198\u0199\3\2\2\2\u0199") + buf.write("\u0197\3\2\2\2\u0199\u019a\3\2\2\2\u019a\u01a4\3\2\2\2") + buf.write("\u019b\u019d\7g\2\2\u019c\u019e\7/\2\2\u019d\u019c\3\2") + buf.write("\2\2\u019d\u019e\3\2\2\2\u019e\u01a0\3\2\2\2\u019f\u01a1") + buf.write("\5\u0091I\2\u01a0\u019f\3\2\2\2\u01a1\u01a2\3\2\2\2\u01a2") + buf.write("\u01a0\3\2\2\2\u01a2\u01a3\3\2\2\2\u01a3\u01a5\3\2\2\2") + buf.write("\u01a4\u019b\3\2\2\2\u01a4\u01a5\3\2\2\2\u01a5\u008a\3") + buf.write("\2\2\2\u01a6\u01ac\7)\2\2\u01a7\u01ab\n\2\2\2\u01a8\u01a9") + buf.write("\7^\2\2\u01a9\u01ab\t\3\2\2\u01aa\u01a7\3\2\2\2\u01aa") + buf.write("\u01a8\3\2\2\2\u01ab\u01ae\3\2\2\2\u01ac\u01aa\3\2\2\2") + buf.write("\u01ac\u01ad\3\2\2\2\u01ad\u01af\3\2\2\2\u01ae\u01ac\3") + buf.write("\2\2\2\u01af\u01b0\7)\2\2\u01b0\u008c\3\2\2\2\u01b1\u01b7") + buf.write("\7$\2\2\u01b2\u01b6\n\4\2\2\u01b3\u01b4\7^\2\2\u01b4\u01b6") + buf.write("\t\5\2\2\u01b5\u01b2\3\2\2\2\u01b5\u01b3\3\2\2\2\u01b6") + buf.write("\u01b9\3\2\2\2\u01b7\u01b5\3\2\2\2\u01b7\u01b8\3\2\2\2") + buf.write("\u01b8\u01ba\3\2\2\2\u01b9\u01b7\3\2\2\2\u01ba\u01bb\7") + buf.write("$\2\2\u01bb\u008e\3\2\2\2\u01bc\u01c0\5\u0093J\2\u01bd") + buf.write("\u01bf\5\u0095K\2\u01be\u01bd\3\2\2\2\u01bf\u01c2\3\2") + buf.write("\2\2\u01c0\u01be\3\2\2\2\u01c0\u01c1\3\2\2\2\u01c1\u0090") + buf.write("\3\2\2\2\u01c2\u01c0\3\2\2\2\u01c3\u01c4\t\6\2\2\u01c4") + buf.write("\u0092\3\2\2\2\u01c5\u01c6\t\7\2\2\u01c6\u0094\3\2\2\2") + buf.write("\u01c7\u01cb\5\u0093J\2\u01c8\u01cb\5\u0091I\2\u01c9\u01cb") + buf.write("\t\b\2\2\u01ca\u01c7\3\2\2\2\u01ca\u01c8\3\2\2\2\u01ca") + buf.write("\u01c9\3\2\2\2\u01cb\u0096\3\2\2\2\u01cc\u01cd\7/\2\2") + buf.write("\u01cd\u01ce\7/\2\2\u01ce\u01d2\3\2\2\2\u01cf\u01d1\n") + buf.write("\t\2\2\u01d0\u01cf\3\2\2\2\u01d1\u01d4\3\2\2\2\u01d2\u01d0") + buf.write("\3\2\2\2\u01d2\u01d3\3\2\2\2\u01d3\u01d5\3\2\2\2\u01d4") + buf.write("\u01d2\3\2\2\2\u01d5\u01d6\bL\2\2\u01d6\u0098\3\2\2\2") + buf.write("\u01d7\u01d9\t\n\2\2\u01d8\u01d7\3\2\2\2\u01d9\u01da\3") + buf.write("\2\2\2\u01da\u01d8\3\2\2\2\u01da\u01db\3\2\2\2\u01db\u01dc") + buf.write("\3\2\2\2\u01dc\u01dd\bM\2\2\u01dd\u009a\3\2\2\2\u01de") + buf.write("\u01df\13\2\2\2\u01df\u009c\3\2\2\2\21\2\u018e\u0193\u0199") + buf.write("\u019d\u01a2\u01a4\u01aa\u01ac\u01b5\u01b7\u01c0\u01ca") + buf.write("\u01d2\u01da\3\b\2\2") return buf.getvalue() @@ -283,14 +286,15 @@ class PyxellLexer(Lexer): T__62 = 63 T__63 = 64 T__64 = 65 - INT = 66 - FLOAT = 67 - CHAR = 68 - STRING = 69 - ID = 70 - COMMENT = 71 - WS = 72 - ERR = 73 + T__65 = 66 + INT = 67 + FLOAT = 68 + CHAR = 69 + STRING = 70 + ID = 71 + COMMENT = 72 + WS = 73 + ERR = 74 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -302,10 +306,10 @@ class PyxellLexer(Lexer): "'&'", "'$'", "'|'", "'??'", "'break'", "'continue'", "'return'", "','", "'if'", "'do'", "'elif'", "'else'", "'while'", "'until'", "'for'", "'in'", "'step'", "'func'", "'<'", "'>'", "'('", "')'", - "'def'", "'extern'", "':'", "'{'", "'}'", "'['", "']'", "'?'", - "'.'", "'!'", "'~'", "'..'", "'...'", "'is'", "'isn't'", "'=='", - "'!='", "'<='", "'>='", "'not'", "'and'", "'or'", "'lambda'", - "'->'", "'true'", "'false'", "'null'" ] + "'def'", "'extern'", "'class'", "'{'", "'}'", "':'", "'['", + "']'", "'?'", "'.'", "'!'", "'~'", "'..'", "'...'", "'is'", + "'isn't'", "'=='", "'!='", "'<='", "'>='", "'not'", "'and'", + "'or'", "'lambda'", "'->'", "'true'", "'false'", "'null'" ] symbolicNames = [ "", "INT", "FLOAT", "CHAR", "STRING", "ID", "COMMENT", "WS", "ERR" ] @@ -320,9 +324,9 @@ class PyxellLexer(Lexer): "T__44", "T__45", "T__46", "T__47", "T__48", "T__49", "T__50", "T__51", "T__52", "T__53", "T__54", "T__55", "T__56", "T__57", "T__58", "T__59", "T__60", "T__61", - "T__62", "T__63", "T__64", "INT", "FLOAT", "CHAR", "STRING", - "ID", "DIGIT", "ID_START", "ID_CONT", "COMMENT", "WS", - "ERR" ] + "T__62", "T__63", "T__64", "T__65", "INT", "FLOAT", "CHAR", + "STRING", "ID", "DIGIT", "ID_START", "ID_CONT", "COMMENT", + "WS", "ERR" ] grammarFileName = "Pyxell.g4" diff --git a/src/antlr/PyxellLexer.tokens b/src/antlr/PyxellLexer.tokens index 18963984..c9e61a5d 100644 --- a/src/antlr/PyxellLexer.tokens +++ b/src/antlr/PyxellLexer.tokens @@ -63,14 +63,15 @@ T__61=62 T__62=63 T__63=64 T__64=65 -INT=66 -FLOAT=67 -CHAR=68 -STRING=69 -ID=70 -COMMENT=71 -WS=72 -ERR=73 +T__65=66 +INT=67 +FLOAT=68 +CHAR=69 +STRING=70 +ID=71 +COMMENT=72 +WS=73 +ERR=74 ';'=1 'use'=2 'only'=3 @@ -111,28 +112,29 @@ ERR=73 ')'=38 'def'=39 'extern'=40 -':'=41 +'class'=41 '{'=42 '}'=43 -'['=44 -']'=45 -'?'=46 -'.'=47 -'!'=48 -'~'=49 -'..'=50 -'...'=51 -'is'=52 -'isn\'t'=53 -'=='=54 -'!='=55 -'<='=56 -'>='=57 -'not'=58 -'and'=59 -'or'=60 -'lambda'=61 -'->'=62 -'true'=63 -'false'=64 -'null'=65 +':'=44 +'['=45 +']'=46 +'?'=47 +'.'=48 +'!'=49 +'~'=50 +'..'=51 +'...'=52 +'is'=53 +'isn\'t'=54 +'=='=55 +'!='=56 +'<='=57 +'>='=58 +'not'=59 +'and'=60 +'or'=61 +'lambda'=62 +'->'=63 +'true'=64 +'false'=65 +'null'=66 diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index 281b3e90..fe0e129a 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -8,205 +8,215 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3K") - buf.write("\u0194\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3L") + buf.write("\u01a9\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16") - buf.write("\t\16\4\17\t\17\4\20\t\20\3\2\7\2\"\n\2\f\2\16\2%\13\2") - buf.write("\3\2\3\2\3\3\3\3\3\3\3\3\5\3-\n\3\3\4\3\4\3\4\3\4\3\4") - buf.write("\3\4\3\4\3\4\5\4\67\n\4\3\4\3\4\3\4\5\4<\n\4\3\4\3\4\3") - buf.write("\4\3\4\5\4B\n\4\3\4\3\4\3\4\7\4G\n\4\f\4\16\4J\13\4\3") - buf.write("\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\5\4U\n\4\5\4W\n\4\3") - buf.write("\5\3\5\3\5\7\5\\\n\5\f\5\16\5_\13\5\3\6\3\6\3\6\3\6\3") - buf.write("\6\3\6\3\6\3\6\3\6\7\6j\n\6\f\6\16\6m\13\6\3\6\3\6\3\6") - buf.write("\5\6r\n\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6") - buf.write("\3\6\3\6\3\6\3\6\3\6\5\6\u0084\n\6\3\6\3\6\3\6\3\6\3\6") - buf.write("\3\6\3\6\3\6\3\6\5\6\u008f\n\6\3\6\3\6\3\6\3\6\7\6\u0095") - buf.write("\n\6\f\6\16\6\u0098\13\6\3\6\5\6\u009b\n\6\3\6\3\6\5\6") - buf.write("\u009f\n\6\3\6\3\6\3\6\3\6\5\6\u00a5\n\6\5\6\u00a7\n\6") - buf.write("\3\7\3\7\3\7\3\7\5\7\u00ad\n\7\3\b\3\b\6\b\u00b1\n\b\r") - buf.write("\b\16\b\u00b2\3\b\3\b\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") - buf.write("\3\t\3\t\7\t\u00c1\n\t\f\t\16\t\u00c4\13\t\3\t\5\t\u00c7") - buf.write("\n\t\3\t\3\t\3\t\3\t\6\t\u00cd\n\t\r\t\16\t\u00ce\3\t") - buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\7\t\u00da\n\t\f\t\16") - buf.write("\t\u00dd\13\t\3\t\5\t\u00e0\n\t\3\t\3\t\5\t\u00e4\n\t") - buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") - buf.write("\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") - buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") - buf.write("\t\3\t\3\t\3\t\3\t\3\t\3\t\5\t\u0115\n\t\3\t\3\t\3\t\3") - buf.write("\t\3\t\3\t\3\t\5\t\u011e\n\t\3\t\3\t\5\t\u0122\n\t\3\t") - buf.write("\3\t\5\t\u0126\n\t\5\t\u0128\n\t\3\t\3\t\3\t\5\t\u012d") - buf.write("\n\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\7\t\u0136\n\t\f\t\16") - buf.write("\t\u0139\13\t\3\t\5\t\u013c\n\t\3\t\3\t\3\t\3\t\3\t\7") - buf.write("\t\u0143\n\t\f\t\16\t\u0146\13\t\3\n\3\n\3\n\7\n\u014b") - buf.write("\n\n\f\n\16\n\u014e\13\n\3\n\3\n\3\13\3\13\3\13\3\f\3") - buf.write("\f\3\f\3\f\3\f\3\f\5\f\u015b\n\f\3\f\3\f\5\f\u015f\n\f") - buf.write("\3\r\3\r\5\r\u0163\n\r\3\r\3\r\3\16\3\16\3\16\3\16\3\16") - buf.write("\3\16\3\16\5\16\u016e\n\16\3\17\3\17\7\17\u0172\n\17\f") - buf.write("\17\16\17\u0175\13\17\3\17\3\17\3\20\3\20\3\20\3\20\3") - buf.write("\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\5\20\u0185\n\20") - buf.write("\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\7\20\u018f\n") - buf.write("\20\f\20\16\20\u0192\13\20\3\20\2\4\20\36\21\2\4\6\b\n") - buf.write("\f\16\20\22\24\26\30\32\34\36\2\f\3\2\13\26\3\2\27\30") - buf.write("\4\2\17\20\63\63\3\2\f\16\3\2\17\20\3\2\21\22\3\2\64\65") - buf.write("\3\2\66\67\4\2%&8;\3\2AB\2\u01db\2#\3\2\2\2\4,\3\2\2\2") - buf.write("\6V\3\2\2\2\bX\3\2\2\2\n\u00a6\3\2\2\2\f\u00a8\3\2\2\2") - buf.write("\16\u00ae\3\2\2\2\20\u00e3\3\2\2\2\22\u014c\3\2\2\2\24") - buf.write("\u0151\3\2\2\2\26\u015e\3\2\2\2\30\u0162\3\2\2\2\32\u016d") - buf.write("\3\2\2\2\34\u0173\3\2\2\2\36\u0184\3\2\2\2 \"\5\4\3\2") - buf.write("! \3\2\2\2\"%\3\2\2\2#!\3\2\2\2#$\3\2\2\2$&\3\2\2\2%#") - buf.write("\3\2\2\2&\'\7\2\2\3\'\3\3\2\2\2()\5\6\4\2)*\7\3\2\2*-") - buf.write("\3\2\2\2+-\5\n\6\2,(\3\2\2\2,+\3\2\2\2-\5\3\2\2\2./\7") - buf.write("\4\2\2/\66\7H\2\2\60\61\7\5\2\2\61\67\5\34\17\2\62\63") - buf.write("\7\6\2\2\63\67\5\34\17\2\64\65\7\7\2\2\65\67\7H\2\2\66") - buf.write("\60\3\2\2\2\66\62\3\2\2\2\66\64\3\2\2\2\66\67\3\2\2\2") - buf.write("\67W\3\2\2\28W\7\b\2\29;\7\t\2\2:<\5\22\n\2;:\3\2\2\2") - buf.write(";<\3\2\2\2\5\36\20\2>A\7H\2\2?@\7\n\2\2@B") - buf.write("\5\22\n\2A?\3\2\2\2AB\3\2\2\2BW\3\2\2\2CD\5\b\5\2DE\7") - buf.write("\n\2\2EG\3\2\2\2FC\3\2\2\2GJ\3\2\2\2HF\3\2\2\2HI\3\2\2") - buf.write("\2IK\3\2\2\2JH\3\2\2\2KW\5\22\n\2LM\5\20\t\2MN\t\2\2\2") - buf.write("NO\7\n\2\2OP\5\20\t\2PW\3\2\2\2QW\t\3\2\2RT\7\31\2\2S") - buf.write("U\5\22\n\2TS\3\2\2\2TU\3\2\2\2UW\3\2\2\2V.\3\2\2\2V8\3") - buf.write("\2\2\2V9\3\2\2\2V=\3\2\2\2VH\3\2\2\2VL\3\2\2\2VQ\3\2\2") - buf.write("\2VR\3\2\2\2W\7\3\2\2\2X]\5\20\t\2YZ\7\32\2\2Z\\\5\20") - buf.write("\t\2[Y\3\2\2\2\\_\3\2\2\2][\3\2\2\2]^\3\2\2\2^\t\3\2\2") - buf.write("\2_]\3\2\2\2`a\7\33\2\2ab\5\20\t\2bc\7\34\2\2ck\5\16\b") - buf.write("\2de\7\35\2\2ef\5\20\t\2fg\7\34\2\2gh\5\16\b\2hj\3\2\2") - buf.write("\2id\3\2\2\2jm\3\2\2\2ki\3\2\2\2kl\3\2\2\2lq\3\2\2\2m") - buf.write("k\3\2\2\2no\7\36\2\2op\7\34\2\2pr\5\16\b\2qn\3\2\2\2q") - buf.write("r\3\2\2\2r\u00a7\3\2\2\2st\7\37\2\2tu\5\20\t\2uv\7\34") - buf.write("\2\2vw\5\16\b\2w\u00a7\3\2\2\2xy\7 \2\2yz\5\20\t\2z{\7") - buf.write("\34\2\2{|\5\16\b\2|\u00a7\3\2\2\2}~\7!\2\2~\177\5\22\n") - buf.write("\2\177\u0080\7\"\2\2\u0080\u0083\5\22\n\2\u0081\u0082") - buf.write("\7#\2\2\u0082\u0084\5\22\n\2\u0083\u0081\3\2\2\2\u0083") - buf.write("\u0084\3\2\2\2\u0084\u0085\3\2\2\2\u0085\u0086\7\34\2") - buf.write("\2\u0086\u0087\5\16\b\2\u0087\u00a7\3\2\2\2\u0088\u0089") - buf.write("\7$\2\2\u0089\u008e\7H\2\2\u008a\u008b\7%\2\2\u008b\u008c") - buf.write("\5\34\17\2\u008c\u008d\7&\2\2\u008d\u008f\3\2\2\2\u008e") - buf.write("\u008a\3\2\2\2\u008e\u008f\3\2\2\2\u008f\u0090\3\2\2\2") - buf.write("\u0090\u0096\7\'\2\2\u0091\u0092\5\f\7\2\u0092\u0093\7") - buf.write("\32\2\2\u0093\u0095\3\2\2\2\u0094\u0091\3\2\2\2\u0095") - buf.write("\u0098\3\2\2\2\u0096\u0094\3\2\2\2\u0096\u0097\3\2\2\2") - buf.write("\u0097\u009a\3\2\2\2\u0098\u0096\3\2\2\2\u0099\u009b\5") - buf.write("\f\7\2\u009a\u0099\3\2\2\2\u009a\u009b\3\2\2\2\u009b\u009c") - buf.write("\3\2\2\2\u009c\u009e\7(\2\2\u009d\u009f\5\36\20\2\u009e") - buf.write("\u009d\3\2\2\2\u009e\u009f\3\2\2\2\u009f\u00a4\3\2\2\2") - buf.write("\u00a0\u00a1\7)\2\2\u00a1\u00a5\5\16\b\2\u00a2\u00a3\7") - buf.write("*\2\2\u00a3\u00a5\7\3\2\2\u00a4\u00a0\3\2\2\2\u00a4\u00a2") - buf.write("\3\2\2\2\u00a5\u00a7\3\2\2\2\u00a6`\3\2\2\2\u00a6s\3\2") - buf.write("\2\2\u00a6x\3\2\2\2\u00a6}\3\2\2\2\u00a6\u0088\3\2\2\2") - buf.write("\u00a7\13\3\2\2\2\u00a8\u00a9\5\36\20\2\u00a9\u00ac\7") - buf.write("H\2\2\u00aa\u00ab\7+\2\2\u00ab\u00ad\5\20\t\2\u00ac\u00aa") - buf.write("\3\2\2\2\u00ac\u00ad\3\2\2\2\u00ad\r\3\2\2\2\u00ae\u00b0") - buf.write("\7,\2\2\u00af\u00b1\5\4\3\2\u00b0\u00af\3\2\2\2\u00b1") - buf.write("\u00b2\3\2\2\2\u00b2\u00b0\3\2\2\2\u00b2\u00b3\3\2\2\2") - buf.write("\u00b3\u00b4\3\2\2\2\u00b4\u00b5\7-\2\2\u00b5\17\3\2\2") - buf.write("\2\u00b6\u00b7\b\t\1\2\u00b7\u00e4\5\32\16\2\u00b8\u00b9") - buf.write("\7\'\2\2\u00b9\u00ba\5\22\n\2\u00ba\u00bb\7(\2\2\u00bb") - buf.write("\u00e4\3\2\2\2\u00bc\u00c2\7.\2\2\u00bd\u00be\5\20\t\2") - buf.write("\u00be\u00bf\7\32\2\2\u00bf\u00c1\3\2\2\2\u00c0\u00bd") - buf.write("\3\2\2\2\u00c1\u00c4\3\2\2\2\u00c2\u00c0\3\2\2\2\u00c2") - buf.write("\u00c3\3\2\2\2\u00c3\u00c6\3\2\2\2\u00c4\u00c2\3\2\2\2") - buf.write("\u00c5\u00c7\5\20\t\2\u00c6\u00c5\3\2\2\2\u00c6\u00c7") - buf.write("\3\2\2\2\u00c7\u00c8\3\2\2\2\u00c8\u00e4\7/\2\2\u00c9") - buf.write("\u00ca\7.\2\2\u00ca\u00cc\5\20\t\2\u00cb\u00cd\5\26\f") - buf.write("\2\u00cc\u00cb\3\2\2\2\u00cd\u00ce\3\2\2\2\u00ce\u00cc") - buf.write("\3\2\2\2\u00ce\u00cf\3\2\2\2\u00cf\u00d0\3\2\2\2\u00d0") - buf.write("\u00d1\7/\2\2\u00d1\u00e4\3\2\2\2\u00d2\u00d3\t\4\2\2") - buf.write("\u00d3\u00e4\5\20\t\23\u00d4\u00d5\7<\2\2\u00d5\u00e4") - buf.write("\5\20\t\b\u00d6\u00db\7?\2\2\u00d7\u00d8\7H\2\2\u00d8") - buf.write("\u00da\7\32\2\2\u00d9\u00d7\3\2\2\2\u00da\u00dd\3\2\2") - buf.write("\2\u00db\u00d9\3\2\2\2\u00db\u00dc\3\2\2\2\u00dc\u00df") - buf.write("\3\2\2\2\u00dd\u00db\3\2\2\2\u00de\u00e0\7H\2\2\u00df") - buf.write("\u00de\3\2\2\2\u00df\u00e0\3\2\2\2\u00e0\u00e1\3\2\2\2") - buf.write("\u00e1\u00e2\7@\2\2\u00e2\u00e4\5\20\t\3\u00e3\u00b6\3") - buf.write("\2\2\2\u00e3\u00b8\3\2\2\2\u00e3\u00bc\3\2\2\2\u00e3\u00c9") - buf.write("\3\2\2\2\u00e3\u00d2\3\2\2\2\u00e3\u00d4\3\2\2\2\u00e3") - buf.write("\u00d6\3\2\2\2\u00e4\u0144\3\2\2\2\u00e5\u00e6\f\24\2") - buf.write("\2\u00e6\u00e7\7\13\2\2\u00e7\u0143\5\20\t\24\u00e8\u00e9") - buf.write("\f\22\2\2\u00e9\u00ea\t\5\2\2\u00ea\u0143\5\20\t\23\u00eb") - buf.write("\u00ec\f\21\2\2\u00ec\u00ed\t\6\2\2\u00ed\u0143\5\20\t") - buf.write("\22\u00ee\u00ef\f\20\2\2\u00ef\u00f0\t\7\2\2\u00f0\u0143") - buf.write("\5\20\t\21\u00f1\u00f2\f\17\2\2\u00f2\u00f3\7\23\2\2\u00f3") - buf.write("\u0143\5\20\t\20\u00f4\u00f5\f\16\2\2\u00f5\u00f6\7\24") - buf.write("\2\2\u00f6\u0143\5\20\t\17\u00f7\u00f8\f\r\2\2\u00f8\u00f9") - buf.write("\7\25\2\2\u00f9\u0143\5\20\t\16\u00fa\u00fb\f\f\2\2\u00fb") - buf.write("\u00fc\t\b\2\2\u00fc\u0143\5\20\t\r\u00fd\u00fe\f\n\2") - buf.write("\2\u00fe\u00ff\t\t\2\2\u00ff\u0143\5\20\t\13\u0100\u0101") - buf.write("\f\t\2\2\u0101\u0102\t\n\2\2\u0102\u0143\5\20\t\t\u0103") - buf.write("\u0104\f\7\2\2\u0104\u0105\7=\2\2\u0105\u0143\5\20\t\7") - buf.write("\u0106\u0107\f\6\2\2\u0107\u0108\7>\2\2\u0108\u0143\5") - buf.write("\20\t\6\u0109\u010a\f\5\2\2\u010a\u010b\7\26\2\2\u010b") - buf.write("\u0143\5\20\t\5\u010c\u010d\f\4\2\2\u010d\u010e\7\60\2") - buf.write("\2\u010e\u010f\5\20\t\2\u010f\u0110\7+\2\2\u0110\u0111") - buf.write("\5\20\t\4\u0111\u0143\3\2\2\2\u0112\u0114\f\31\2\2\u0113") - buf.write("\u0115\7\60\2\2\u0114\u0113\3\2\2\2\u0114\u0115\3\2\2") - buf.write("\2\u0115\u0116\3\2\2\2\u0116\u0117\7.\2\2\u0117\u0118") - buf.write("\5\22\n\2\u0118\u0119\7/\2\2\u0119\u0143\3\2\2\2\u011a") - buf.write("\u011b\f\30\2\2\u011b\u011d\7.\2\2\u011c\u011e\5\20\t") - buf.write("\2\u011d\u011c\3\2\2\2\u011d\u011e\3\2\2\2\u011e\u011f") - buf.write("\3\2\2\2\u011f\u0121\7+\2\2\u0120\u0122\5\20\t\2\u0121") - buf.write("\u0120\3\2\2\2\u0121\u0122\3\2\2\2\u0122\u0127\3\2\2\2") - buf.write("\u0123\u0125\7+\2\2\u0124\u0126\5\20\t\2\u0125\u0124\3") - buf.write("\2\2\2\u0125\u0126\3\2\2\2\u0126\u0128\3\2\2\2\u0127\u0123") - buf.write("\3\2\2\2\u0127\u0128\3\2\2\2\u0128\u0129\3\2\2\2\u0129") - buf.write("\u0143\7/\2\2\u012a\u012c\f\27\2\2\u012b\u012d\7\60\2") - buf.write("\2\u012c\u012b\3\2\2\2\u012c\u012d\3\2\2\2\u012d\u012e") - buf.write("\3\2\2\2\u012e\u012f\7\61\2\2\u012f\u0143\7H\2\2\u0130") - buf.write("\u0131\f\26\2\2\u0131\u0137\7\'\2\2\u0132\u0133\5\30\r") - buf.write("\2\u0133\u0134\7\32\2\2\u0134\u0136\3\2\2\2\u0135\u0132") - buf.write("\3\2\2\2\u0136\u0139\3\2\2\2\u0137\u0135\3\2\2\2\u0137") - buf.write("\u0138\3\2\2\2\u0138\u013b\3\2\2\2\u0139\u0137\3\2\2\2") - buf.write("\u013a\u013c\5\30\r\2\u013b\u013a\3\2\2\2\u013b\u013c") - buf.write("\3\2\2\2\u013c\u013d\3\2\2\2\u013d\u0143\7(\2\2\u013e") - buf.write("\u013f\f\25\2\2\u013f\u0143\7\62\2\2\u0140\u0141\f\13") - buf.write("\2\2\u0141\u0143\7\65\2\2\u0142\u00e5\3\2\2\2\u0142\u00e8") - buf.write("\3\2\2\2\u0142\u00eb\3\2\2\2\u0142\u00ee\3\2\2\2\u0142") - buf.write("\u00f1\3\2\2\2\u0142\u00f4\3\2\2\2\u0142\u00f7\3\2\2\2") - buf.write("\u0142\u00fa\3\2\2\2\u0142\u00fd\3\2\2\2\u0142\u0100\3") - buf.write("\2\2\2\u0142\u0103\3\2\2\2\u0142\u0106\3\2\2\2\u0142\u0109") - buf.write("\3\2\2\2\u0142\u010c\3\2\2\2\u0142\u0112\3\2\2\2\u0142") - buf.write("\u011a\3\2\2\2\u0142\u012a\3\2\2\2\u0142\u0130\3\2\2\2") - buf.write("\u0142\u013e\3\2\2\2\u0142\u0140\3\2\2\2\u0143\u0146\3") - buf.write("\2\2\2\u0144\u0142\3\2\2\2\u0144\u0145\3\2\2\2\u0145\21") - buf.write("\3\2\2\2\u0146\u0144\3\2\2\2\u0147\u0148\5\20\t\2\u0148") - buf.write("\u0149\7\32\2\2\u0149\u014b\3\2\2\2\u014a\u0147\3\2\2") - buf.write("\2\u014b\u014e\3\2\2\2\u014c\u014a\3\2\2\2\u014c\u014d") - buf.write("\3\2\2\2\u014d\u014f\3\2\2\2\u014e\u014c\3\2\2\2\u014f") - buf.write("\u0150\5\20\t\2\u0150\23\3\2\2\2\u0151\u0152\5\22\n\2") - buf.write("\u0152\u0153\7\2\2\3\u0153\25\3\2\2\2\u0154\u0155\7!\2") - buf.write("\2\u0155\u0156\5\22\n\2\u0156\u0157\7\"\2\2\u0157\u015a") - buf.write("\5\22\n\2\u0158\u0159\7#\2\2\u0159\u015b\5\22\n\2\u015a") - buf.write("\u0158\3\2\2\2\u015a\u015b\3\2\2\2\u015b\u015f\3\2\2\2") - buf.write("\u015c\u015d\7\33\2\2\u015d\u015f\5\20\t\2\u015e\u0154") - buf.write("\3\2\2\2\u015e\u015c\3\2\2\2\u015f\27\3\2\2\2\u0160\u0161") - buf.write("\7H\2\2\u0161\u0163\7\n\2\2\u0162\u0160\3\2\2\2\u0162") - buf.write("\u0163\3\2\2\2\u0163\u0164\3\2\2\2\u0164\u0165\5\20\t") - buf.write("\2\u0165\31\3\2\2\2\u0166\u016e\7D\2\2\u0167\u016e\7E") - buf.write("\2\2\u0168\u016e\t\13\2\2\u0169\u016e\7F\2\2\u016a\u016e") - buf.write("\7G\2\2\u016b\u016e\7C\2\2\u016c\u016e\7H\2\2\u016d\u0166") - buf.write("\3\2\2\2\u016d\u0167\3\2\2\2\u016d\u0168\3\2\2\2\u016d") - buf.write("\u0169\3\2\2\2\u016d\u016a\3\2\2\2\u016d\u016b\3\2\2\2") - buf.write("\u016d\u016c\3\2\2\2\u016e\33\3\2\2\2\u016f\u0170\7H\2") - buf.write("\2\u0170\u0172\7\32\2\2\u0171\u016f\3\2\2\2\u0172\u0175") - buf.write("\3\2\2\2\u0173\u0171\3\2\2\2\u0173\u0174\3\2\2\2\u0174") - buf.write("\u0176\3\2\2\2\u0175\u0173\3\2\2\2\u0176\u0177\7H\2\2") - buf.write("\u0177\35\3\2\2\2\u0178\u0179\b\20\1\2\u0179\u0185\7H") - buf.write("\2\2\u017a\u017b\7\'\2\2\u017b\u017c\5\36\20\2\u017c\u017d") - buf.write("\7(\2\2\u017d\u0185\3\2\2\2\u017e\u017f\7.\2\2\u017f\u0180") - buf.write("\5\36\20\2\u0180\u0181\7/\2\2\u0181\u0185\3\2\2\2\u0182") - buf.write("\u0183\7@\2\2\u0183\u0185\5\36\20\3\u0184\u0178\3\2\2") - buf.write("\2\u0184\u017a\3\2\2\2\u0184\u017e\3\2\2\2\u0184\u0182") - buf.write("\3\2\2\2\u0185\u0190\3\2\2\2\u0186\u0187\f\5\2\2\u0187") - buf.write("\u0188\7\f\2\2\u0188\u018f\5\36\20\5\u0189\u018a\f\4\2") - buf.write("\2\u018a\u018b\7@\2\2\u018b\u018f\5\36\20\4\u018c\u018d") - buf.write("\f\6\2\2\u018d\u018f\7\60\2\2\u018e\u0186\3\2\2\2\u018e") - buf.write("\u0189\3\2\2\2\u018e\u018c\3\2\2\2\u018f\u0192\3\2\2\2") - buf.write("\u0190\u018e\3\2\2\2\u0190\u0191\3\2\2\2\u0191\37\3\2") - buf.write("\2\2\u0192\u0190\3\2\2\2/#,\66;AHTV]kq\u0083\u008e\u0096") - buf.write("\u009a\u009e\u00a4\u00a6\u00ac\u00b2\u00c2\u00c6\u00ce") - buf.write("\u00db\u00df\u00e3\u0114\u011d\u0121\u0125\u0127\u012c") - buf.write("\u0137\u013b\u0142\u0144\u014c\u015a\u015e\u0162\u016d") - buf.write("\u0173\u0184\u018e\u0190") + buf.write("\t\16\4\17\t\17\4\20\t\20\4\21\t\21\3\2\7\2$\n\2\f\2\16") + buf.write("\2\'\13\2\3\2\3\2\3\3\3\3\3\3\3\3\5\3/\n\3\3\4\3\4\3\4") + buf.write("\3\4\3\4\3\4\3\4\3\4\5\49\n\4\3\4\3\4\3\4\5\4>\n\4\3\4") + buf.write("\3\4\3\4\3\4\5\4D\n\4\3\4\3\4\3\4\7\4I\n\4\f\4\16\4L\13") + buf.write("\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\5\4W\n\4\5\4Y\n") + buf.write("\4\3\5\3\5\3\5\7\5^\n\5\f\5\16\5a\13\5\3\6\3\6\3\6\3\6") + buf.write("\3\6\3\6\3\6\3\6\3\6\7\6l\n\6\f\6\16\6o\13\6\3\6\3\6\3") + buf.write("\6\5\6t\n\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3") + buf.write("\6\3\6\3\6\3\6\3\6\3\6\5\6\u0086\n\6\3\6\3\6\3\6\3\6\3") + buf.write("\6\3\6\3\6\3\6\3\6\5\6\u0091\n\6\3\6\3\6\3\6\3\6\7\6\u0097") + buf.write("\n\6\f\6\16\6\u009a\13\6\3\6\5\6\u009d\n\6\3\6\3\6\5\6") + buf.write("\u00a1\n\6\3\6\3\6\3\6\3\6\5\6\u00a7\n\6\3\6\3\6\3\6\3") + buf.write("\6\3\6\6\6\u00ae\n\6\r\6\16\6\u00af\3\6\3\6\5\6\u00b4") + buf.write("\n\6\3\7\3\7\3\7\3\7\5\7\u00ba\n\7\3\b\3\b\3\b\3\b\5\b") + buf.write("\u00c0\n\b\3\b\3\b\3\t\3\t\6\t\u00c6\n\t\r\t\16\t\u00c7") + buf.write("\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\7\n\u00d6") + buf.write("\n\n\f\n\16\n\u00d9\13\n\3\n\5\n\u00dc\n\n\3\n\3\n\3\n") + buf.write("\3\n\6\n\u00e2\n\n\r\n\16\n\u00e3\3\n\3\n\3\n\3\n\3\n") + buf.write("\3\n\3\n\3\n\3\n\7\n\u00ef\n\n\f\n\16\n\u00f2\13\n\3\n") + buf.write("\5\n\u00f5\n\n\3\n\3\n\5\n\u00f9\n\n\3\n\3\n\3\n\3\n\3") + buf.write("\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n") + buf.write("\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3") + buf.write("\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n") + buf.write("\3\n\3\n\5\n\u012a\n\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\5\n") + buf.write("\u0133\n\n\3\n\3\n\5\n\u0137\n\n\3\n\3\n\5\n\u013b\n\n") + buf.write("\5\n\u013d\n\n\3\n\3\n\3\n\5\n\u0142\n\n\3\n\3\n\3\n\3") + buf.write("\n\3\n\3\n\3\n\7\n\u014b\n\n\f\n\16\n\u014e\13\n\3\n\5") + buf.write("\n\u0151\n\n\3\n\3\n\3\n\3\n\3\n\7\n\u0158\n\n\f\n\16") + buf.write("\n\u015b\13\n\3\13\3\13\3\13\7\13\u0160\n\13\f\13\16\13") + buf.write("\u0163\13\13\3\13\3\13\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r") + buf.write("\3\r\5\r\u0170\n\r\3\r\3\r\5\r\u0174\n\r\3\16\3\16\5\16") + buf.write("\u0178\n\16\3\16\3\16\3\17\3\17\3\17\3\17\3\17\3\17\3") + buf.write("\17\5\17\u0183\n\17\3\20\3\20\7\20\u0187\n\20\f\20\16") + buf.write("\20\u018a\13\20\3\20\3\20\3\21\3\21\3\21\3\21\3\21\3\21") + buf.write("\3\21\3\21\3\21\3\21\3\21\3\21\5\21\u019a\n\21\3\21\3") + buf.write("\21\3\21\3\21\3\21\3\21\3\21\3\21\7\21\u01a4\n\21\f\21") + buf.write("\16\21\u01a7\13\21\3\21\2\4\22 \22\2\4\6\b\n\f\16\20\22") + buf.write("\24\26\30\32\34\36 \2\f\3\2\13\26\3\2\27\30\4\2\17\20") + buf.write("\64\64\3\2\f\16\3\2\17\20\3\2\21\22\3\2\65\66\3\2\678") + buf.write("\4\2%&9<\3\2BC\2\u01f2\2%\3\2\2\2\4.\3\2\2\2\6X\3\2\2") + buf.write("\2\bZ\3\2\2\2\n\u00b3\3\2\2\2\f\u00b5\3\2\2\2\16\u00bb") + buf.write("\3\2\2\2\20\u00c3\3\2\2\2\22\u00f8\3\2\2\2\24\u0161\3") + buf.write("\2\2\2\26\u0166\3\2\2\2\30\u0173\3\2\2\2\32\u0177\3\2") + buf.write("\2\2\34\u0182\3\2\2\2\36\u0188\3\2\2\2 \u0199\3\2\2\2") + buf.write("\"$\5\4\3\2#\"\3\2\2\2$\'\3\2\2\2%#\3\2\2\2%&\3\2\2\2") + buf.write("&(\3\2\2\2\'%\3\2\2\2()\7\2\2\3)\3\3\2\2\2*+\5\6\4\2+") + buf.write(",\7\3\2\2,/\3\2\2\2-/\5\n\6\2.*\3\2\2\2.-\3\2\2\2/\5\3") + buf.write("\2\2\2\60\61\7\4\2\2\618\7I\2\2\62\63\7\5\2\2\639\5\36") + buf.write("\20\2\64\65\7\6\2\2\659\5\36\20\2\66\67\7\7\2\2\679\7") + buf.write("I\2\28\62\3\2\2\28\64\3\2\2\28\66\3\2\2\289\3\2\2\29Y") + buf.write("\3\2\2\2:Y\7\b\2\2;=\7\t\2\2<>\5\24\13\2=<\3\2\2\2=>\3") + buf.write("\2\2\2>Y\3\2\2\2?@\5 \21\2@C\7I\2\2AB\7\n\2\2BD\5\24\13") + buf.write("\2CA\3\2\2\2CD\3\2\2\2DY\3\2\2\2EF\5\b\5\2FG\7\n\2\2G") + buf.write("I\3\2\2\2HE\3\2\2\2IL\3\2\2\2JH\3\2\2\2JK\3\2\2\2KM\3") + buf.write("\2\2\2LJ\3\2\2\2MY\5\24\13\2NO\5\22\n\2OP\t\2\2\2PQ\7") + buf.write("\n\2\2QR\5\22\n\2RY\3\2\2\2SY\t\3\2\2TV\7\31\2\2UW\5\24") + buf.write("\13\2VU\3\2\2\2VW\3\2\2\2WY\3\2\2\2X\60\3\2\2\2X:\3\2") + buf.write("\2\2X;\3\2\2\2X?\3\2\2\2XJ\3\2\2\2XN\3\2\2\2XS\3\2\2\2") + buf.write("XT\3\2\2\2Y\7\3\2\2\2Z_\5\22\n\2[\\\7\32\2\2\\^\5\22\n") + buf.write("\2][\3\2\2\2^a\3\2\2\2_]\3\2\2\2_`\3\2\2\2`\t\3\2\2\2") + buf.write("a_\3\2\2\2bc\7\33\2\2cd\5\22\n\2de\7\34\2\2em\5\20\t\2") + buf.write("fg\7\35\2\2gh\5\22\n\2hi\7\34\2\2ij\5\20\t\2jl\3\2\2\2") + buf.write("kf\3\2\2\2lo\3\2\2\2mk\3\2\2\2mn\3\2\2\2ns\3\2\2\2om\3") + buf.write("\2\2\2pq\7\36\2\2qr\7\34\2\2rt\5\20\t\2sp\3\2\2\2st\3") + buf.write("\2\2\2t\u00b4\3\2\2\2uv\7\37\2\2vw\5\22\n\2wx\7\34\2\2") + buf.write("xy\5\20\t\2y\u00b4\3\2\2\2z{\7 \2\2{|\5\22\n\2|}\7\34") + buf.write("\2\2}~\5\20\t\2~\u00b4\3\2\2\2\177\u0080\7!\2\2\u0080") + buf.write("\u0081\5\24\13\2\u0081\u0082\7\"\2\2\u0082\u0085\5\24") + buf.write("\13\2\u0083\u0084\7#\2\2\u0084\u0086\5\24\13\2\u0085\u0083") + buf.write("\3\2\2\2\u0085\u0086\3\2\2\2\u0086\u0087\3\2\2\2\u0087") + buf.write("\u0088\7\34\2\2\u0088\u0089\5\20\t\2\u0089\u00b4\3\2\2") + buf.write("\2\u008a\u008b\7$\2\2\u008b\u0090\7I\2\2\u008c\u008d\7") + buf.write("%\2\2\u008d\u008e\5\36\20\2\u008e\u008f\7&\2\2\u008f\u0091") + buf.write("\3\2\2\2\u0090\u008c\3\2\2\2\u0090\u0091\3\2\2\2\u0091") + buf.write("\u0092\3\2\2\2\u0092\u0098\7\'\2\2\u0093\u0094\5\f\7\2") + buf.write("\u0094\u0095\7\32\2\2\u0095\u0097\3\2\2\2\u0096\u0093") + buf.write("\3\2\2\2\u0097\u009a\3\2\2\2\u0098\u0096\3\2\2\2\u0098") + buf.write("\u0099\3\2\2\2\u0099\u009c\3\2\2\2\u009a\u0098\3\2\2\2") + buf.write("\u009b\u009d\5\f\7\2\u009c\u009b\3\2\2\2\u009c\u009d\3") + buf.write("\2\2\2\u009d\u009e\3\2\2\2\u009e\u00a0\7(\2\2\u009f\u00a1") + buf.write("\5 \21\2\u00a0\u009f\3\2\2\2\u00a0\u00a1\3\2\2\2\u00a1") + buf.write("\u00a6\3\2\2\2\u00a2\u00a3\7)\2\2\u00a3\u00a7\5\20\t\2") + buf.write("\u00a4\u00a5\7*\2\2\u00a5\u00a7\7\3\2\2\u00a6\u00a2\3") + buf.write("\2\2\2\u00a6\u00a4\3\2\2\2\u00a7\u00b4\3\2\2\2\u00a8\u00a9") + buf.write("\7+\2\2\u00a9\u00aa\7I\2\2\u00aa\u00ab\7)\2\2\u00ab\u00ad") + buf.write("\7,\2\2\u00ac\u00ae\5\16\b\2\u00ad\u00ac\3\2\2\2\u00ae") + buf.write("\u00af\3\2\2\2\u00af\u00ad\3\2\2\2\u00af\u00b0\3\2\2\2") + buf.write("\u00b0\u00b1\3\2\2\2\u00b1\u00b2\7-\2\2\u00b2\u00b4\3") + buf.write("\2\2\2\u00b3b\3\2\2\2\u00b3u\3\2\2\2\u00b3z\3\2\2\2\u00b3") + buf.write("\177\3\2\2\2\u00b3\u008a\3\2\2\2\u00b3\u00a8\3\2\2\2\u00b4") + buf.write("\13\3\2\2\2\u00b5\u00b6\5 \21\2\u00b6\u00b9\7I\2\2\u00b7") + buf.write("\u00b8\7.\2\2\u00b8\u00ba\5\22\n\2\u00b9\u00b7\3\2\2\2") + buf.write("\u00b9\u00ba\3\2\2\2\u00ba\r\3\2\2\2\u00bb\u00bc\5 \21") + buf.write("\2\u00bc\u00bf\7I\2\2\u00bd\u00be\7.\2\2\u00be\u00c0\5") + buf.write("\24\13\2\u00bf\u00bd\3\2\2\2\u00bf\u00c0\3\2\2\2\u00c0") + buf.write("\u00c1\3\2\2\2\u00c1\u00c2\7\3\2\2\u00c2\17\3\2\2\2\u00c3") + buf.write("\u00c5\7,\2\2\u00c4\u00c6\5\4\3\2\u00c5\u00c4\3\2\2\2") + buf.write("\u00c6\u00c7\3\2\2\2\u00c7\u00c5\3\2\2\2\u00c7\u00c8\3") + buf.write("\2\2\2\u00c8\u00c9\3\2\2\2\u00c9\u00ca\7-\2\2\u00ca\21") + buf.write("\3\2\2\2\u00cb\u00cc\b\n\1\2\u00cc\u00f9\5\34\17\2\u00cd") + buf.write("\u00ce\7\'\2\2\u00ce\u00cf\5\24\13\2\u00cf\u00d0\7(\2") + buf.write("\2\u00d0\u00f9\3\2\2\2\u00d1\u00d7\7/\2\2\u00d2\u00d3") + buf.write("\5\22\n\2\u00d3\u00d4\7\32\2\2\u00d4\u00d6\3\2\2\2\u00d5") + buf.write("\u00d2\3\2\2\2\u00d6\u00d9\3\2\2\2\u00d7\u00d5\3\2\2\2") + buf.write("\u00d7\u00d8\3\2\2\2\u00d8\u00db\3\2\2\2\u00d9\u00d7\3") + buf.write("\2\2\2\u00da\u00dc\5\22\n\2\u00db\u00da\3\2\2\2\u00db") + buf.write("\u00dc\3\2\2\2\u00dc\u00dd\3\2\2\2\u00dd\u00f9\7\60\2") + buf.write("\2\u00de\u00df\7/\2\2\u00df\u00e1\5\22\n\2\u00e0\u00e2") + buf.write("\5\30\r\2\u00e1\u00e0\3\2\2\2\u00e2\u00e3\3\2\2\2\u00e3") + buf.write("\u00e1\3\2\2\2\u00e3\u00e4\3\2\2\2\u00e4\u00e5\3\2\2\2") + buf.write("\u00e5\u00e6\7\60\2\2\u00e6\u00f9\3\2\2\2\u00e7\u00e8") + buf.write("\t\4\2\2\u00e8\u00f9\5\22\n\23\u00e9\u00ea\7=\2\2\u00ea") + buf.write("\u00f9\5\22\n\b\u00eb\u00f0\7@\2\2\u00ec\u00ed\7I\2\2") + buf.write("\u00ed\u00ef\7\32\2\2\u00ee\u00ec\3\2\2\2\u00ef\u00f2") + buf.write("\3\2\2\2\u00f0\u00ee\3\2\2\2\u00f0\u00f1\3\2\2\2\u00f1") + buf.write("\u00f4\3\2\2\2\u00f2\u00f0\3\2\2\2\u00f3\u00f5\7I\2\2") + buf.write("\u00f4\u00f3\3\2\2\2\u00f4\u00f5\3\2\2\2\u00f5\u00f6\3") + buf.write("\2\2\2\u00f6\u00f7\7A\2\2\u00f7\u00f9\5\22\n\3\u00f8\u00cb") + buf.write("\3\2\2\2\u00f8\u00cd\3\2\2\2\u00f8\u00d1\3\2\2\2\u00f8") + buf.write("\u00de\3\2\2\2\u00f8\u00e7\3\2\2\2\u00f8\u00e9\3\2\2\2") + buf.write("\u00f8\u00eb\3\2\2\2\u00f9\u0159\3\2\2\2\u00fa\u00fb\f") + buf.write("\24\2\2\u00fb\u00fc\7\13\2\2\u00fc\u0158\5\22\n\24\u00fd") + buf.write("\u00fe\f\22\2\2\u00fe\u00ff\t\5\2\2\u00ff\u0158\5\22\n") + buf.write("\23\u0100\u0101\f\21\2\2\u0101\u0102\t\6\2\2\u0102\u0158") + buf.write("\5\22\n\22\u0103\u0104\f\20\2\2\u0104\u0105\t\7\2\2\u0105") + buf.write("\u0158\5\22\n\21\u0106\u0107\f\17\2\2\u0107\u0108\7\23") + buf.write("\2\2\u0108\u0158\5\22\n\20\u0109\u010a\f\16\2\2\u010a") + buf.write("\u010b\7\24\2\2\u010b\u0158\5\22\n\17\u010c\u010d\f\r") + buf.write("\2\2\u010d\u010e\7\25\2\2\u010e\u0158\5\22\n\16\u010f") + buf.write("\u0110\f\f\2\2\u0110\u0111\t\b\2\2\u0111\u0158\5\22\n") + buf.write("\r\u0112\u0113\f\n\2\2\u0113\u0114\t\t\2\2\u0114\u0158") + buf.write("\5\22\n\13\u0115\u0116\f\t\2\2\u0116\u0117\t\n\2\2\u0117") + buf.write("\u0158\5\22\n\t\u0118\u0119\f\7\2\2\u0119\u011a\7>\2\2") + buf.write("\u011a\u0158\5\22\n\7\u011b\u011c\f\6\2\2\u011c\u011d") + buf.write("\7?\2\2\u011d\u0158\5\22\n\6\u011e\u011f\f\5\2\2\u011f") + buf.write("\u0120\7\26\2\2\u0120\u0158\5\22\n\5\u0121\u0122\f\4\2") + buf.write("\2\u0122\u0123\7\61\2\2\u0123\u0124\5\22\n\2\u0124\u0125") + buf.write("\7.\2\2\u0125\u0126\5\22\n\4\u0126\u0158\3\2\2\2\u0127") + buf.write("\u0129\f\31\2\2\u0128\u012a\7\61\2\2\u0129\u0128\3\2\2") + buf.write("\2\u0129\u012a\3\2\2\2\u012a\u012b\3\2\2\2\u012b\u012c") + buf.write("\7/\2\2\u012c\u012d\5\24\13\2\u012d\u012e\7\60\2\2\u012e") + buf.write("\u0158\3\2\2\2\u012f\u0130\f\30\2\2\u0130\u0132\7/\2\2") + buf.write("\u0131\u0133\5\22\n\2\u0132\u0131\3\2\2\2\u0132\u0133") + buf.write("\3\2\2\2\u0133\u0134\3\2\2\2\u0134\u0136\7.\2\2\u0135") + buf.write("\u0137\5\22\n\2\u0136\u0135\3\2\2\2\u0136\u0137\3\2\2") + buf.write("\2\u0137\u013c\3\2\2\2\u0138\u013a\7.\2\2\u0139\u013b") + buf.write("\5\22\n\2\u013a\u0139\3\2\2\2\u013a\u013b\3\2\2\2\u013b") + buf.write("\u013d\3\2\2\2\u013c\u0138\3\2\2\2\u013c\u013d\3\2\2\2") + buf.write("\u013d\u013e\3\2\2\2\u013e\u0158\7\60\2\2\u013f\u0141") + buf.write("\f\27\2\2\u0140\u0142\7\61\2\2\u0141\u0140\3\2\2\2\u0141") + buf.write("\u0142\3\2\2\2\u0142\u0143\3\2\2\2\u0143\u0144\7\62\2") + buf.write("\2\u0144\u0158\7I\2\2\u0145\u0146\f\26\2\2\u0146\u014c") + buf.write("\7\'\2\2\u0147\u0148\5\32\16\2\u0148\u0149\7\32\2\2\u0149") + buf.write("\u014b\3\2\2\2\u014a\u0147\3\2\2\2\u014b\u014e\3\2\2\2") + buf.write("\u014c\u014a\3\2\2\2\u014c\u014d\3\2\2\2\u014d\u0150\3") + buf.write("\2\2\2\u014e\u014c\3\2\2\2\u014f\u0151\5\32\16\2\u0150") + buf.write("\u014f\3\2\2\2\u0150\u0151\3\2\2\2\u0151\u0152\3\2\2\2") + buf.write("\u0152\u0158\7(\2\2\u0153\u0154\f\25\2\2\u0154\u0158\7") + buf.write("\63\2\2\u0155\u0156\f\13\2\2\u0156\u0158\7\66\2\2\u0157") + buf.write("\u00fa\3\2\2\2\u0157\u00fd\3\2\2\2\u0157\u0100\3\2\2\2") + buf.write("\u0157\u0103\3\2\2\2\u0157\u0106\3\2\2\2\u0157\u0109\3") + buf.write("\2\2\2\u0157\u010c\3\2\2\2\u0157\u010f\3\2\2\2\u0157\u0112") + buf.write("\3\2\2\2\u0157\u0115\3\2\2\2\u0157\u0118\3\2\2\2\u0157") + buf.write("\u011b\3\2\2\2\u0157\u011e\3\2\2\2\u0157\u0121\3\2\2\2") + buf.write("\u0157\u0127\3\2\2\2\u0157\u012f\3\2\2\2\u0157\u013f\3") + buf.write("\2\2\2\u0157\u0145\3\2\2\2\u0157\u0153\3\2\2\2\u0157\u0155") + buf.write("\3\2\2\2\u0158\u015b\3\2\2\2\u0159\u0157\3\2\2\2\u0159") + buf.write("\u015a\3\2\2\2\u015a\23\3\2\2\2\u015b\u0159\3\2\2\2\u015c") + buf.write("\u015d\5\22\n\2\u015d\u015e\7\32\2\2\u015e\u0160\3\2\2") + buf.write("\2\u015f\u015c\3\2\2\2\u0160\u0163\3\2\2\2\u0161\u015f") + buf.write("\3\2\2\2\u0161\u0162\3\2\2\2\u0162\u0164\3\2\2\2\u0163") + buf.write("\u0161\3\2\2\2\u0164\u0165\5\22\n\2\u0165\25\3\2\2\2\u0166") + buf.write("\u0167\5\24\13\2\u0167\u0168\7\2\2\3\u0168\27\3\2\2\2") + buf.write("\u0169\u016a\7!\2\2\u016a\u016b\5\24\13\2\u016b\u016c") + buf.write("\7\"\2\2\u016c\u016f\5\24\13\2\u016d\u016e\7#\2\2\u016e") + buf.write("\u0170\5\24\13\2\u016f\u016d\3\2\2\2\u016f\u0170\3\2\2") + buf.write("\2\u0170\u0174\3\2\2\2\u0171\u0172\7\33\2\2\u0172\u0174") + buf.write("\5\22\n\2\u0173\u0169\3\2\2\2\u0173\u0171\3\2\2\2\u0174") + buf.write("\31\3\2\2\2\u0175\u0176\7I\2\2\u0176\u0178\7\n\2\2\u0177") + buf.write("\u0175\3\2\2\2\u0177\u0178\3\2\2\2\u0178\u0179\3\2\2\2") + buf.write("\u0179\u017a\5\22\n\2\u017a\33\3\2\2\2\u017b\u0183\7E") + buf.write("\2\2\u017c\u0183\7F\2\2\u017d\u0183\t\13\2\2\u017e\u0183") + buf.write("\7G\2\2\u017f\u0183\7H\2\2\u0180\u0183\7D\2\2\u0181\u0183") + buf.write("\7I\2\2\u0182\u017b\3\2\2\2\u0182\u017c\3\2\2\2\u0182") + buf.write("\u017d\3\2\2\2\u0182\u017e\3\2\2\2\u0182\u017f\3\2\2\2") + buf.write("\u0182\u0180\3\2\2\2\u0182\u0181\3\2\2\2\u0183\35\3\2") + buf.write("\2\2\u0184\u0185\7I\2\2\u0185\u0187\7\32\2\2\u0186\u0184") + buf.write("\3\2\2\2\u0187\u018a\3\2\2\2\u0188\u0186\3\2\2\2\u0188") + buf.write("\u0189\3\2\2\2\u0189\u018b\3\2\2\2\u018a\u0188\3\2\2\2") + buf.write("\u018b\u018c\7I\2\2\u018c\37\3\2\2\2\u018d\u018e\b\21") + buf.write("\1\2\u018e\u019a\7I\2\2\u018f\u0190\7\'\2\2\u0190\u0191") + buf.write("\5 \21\2\u0191\u0192\7(\2\2\u0192\u019a\3\2\2\2\u0193") + buf.write("\u0194\7/\2\2\u0194\u0195\5 \21\2\u0195\u0196\7\60\2\2") + buf.write("\u0196\u019a\3\2\2\2\u0197\u0198\7A\2\2\u0198\u019a\5") + buf.write(" \21\3\u0199\u018d\3\2\2\2\u0199\u018f\3\2\2\2\u0199\u0193") + buf.write("\3\2\2\2\u0199\u0197\3\2\2\2\u019a\u01a5\3\2\2\2\u019b") + buf.write("\u019c\f\5\2\2\u019c\u019d\7\f\2\2\u019d\u01a4\5 \21\5") + buf.write("\u019e\u019f\f\4\2\2\u019f\u01a0\7A\2\2\u01a0\u01a4\5") + buf.write(" \21\4\u01a1\u01a2\f\6\2\2\u01a2\u01a4\7\61\2\2\u01a3") + buf.write("\u019b\3\2\2\2\u01a3\u019e\3\2\2\2\u01a3\u01a1\3\2\2\2") + buf.write("\u01a4\u01a7\3\2\2\2\u01a5\u01a3\3\2\2\2\u01a5\u01a6\3") + buf.write("\2\2\2\u01a6!\3\2\2\2\u01a7\u01a5\3\2\2\2\61%.8=CJVX_") + buf.write("ms\u0085\u0090\u0098\u009c\u00a0\u00a6\u00af\u00b3\u00b9") + buf.write("\u00bf\u00c7\u00d7\u00db\u00e3\u00f0\u00f4\u00f8\u0129") + buf.write("\u0132\u0136\u013a\u013c\u0141\u014c\u0150\u0157\u0159") + buf.write("\u0161\u016f\u0173\u0177\u0182\u0188\u0199\u01a3\u01a5") return buf.getvalue() @@ -226,11 +236,11 @@ class PyxellParser ( Parser ): "'|'", "'??'", "'break'", "'continue'", "'return'", "','", "'if'", "'do'", "'elif'", "'else'", "'while'", "'until'", "'for'", "'in'", "'step'", "'func'", "'<'", - "'>'", "'('", "')'", "'def'", "'extern'", "':'", "'{'", - "'}'", "'['", "']'", "'?'", "'.'", "'!'", "'~'", "'..'", - "'...'", "'is'", "'isn't'", "'=='", "'!='", "'<='", - "'>='", "'not'", "'and'", "'or'", "'lambda'", "'->'", - "'true'", "'false'", "'null'" ] + "'>'", "'('", "')'", "'def'", "'extern'", "'class'", + "'{'", "'}'", "':'", "'['", "']'", "'?'", "'.'", "'!'", + "'~'", "'..'", "'...'", "'is'", "'isn't'", "'=='", + "'!='", "'<='", "'>='", "'not'", "'and'", "'or'", "'lambda'", + "'->'", "'true'", "'false'", "'null'" ] symbolicNames = [ "", "", "", "", "", "", "", "", @@ -248,8 +258,8 @@ class PyxellParser ( Parser ): "", "", "", "", "", "", "", "", "", "", "", "", - "", "", "INT", "FLOAT", "CHAR", - "STRING", "ID", "COMMENT", "WS", "ERR" ] + "", "", "", "INT", "FLOAT", + "CHAR", "STRING", "ID", "COMMENT", "WS", "ERR" ] RULE_program = 0 RULE_stmt = 1 @@ -257,19 +267,21 @@ class PyxellParser ( Parser ): RULE_lvalue = 3 RULE_compound_stmt = 4 RULE_func_arg = 5 - RULE_block = 6 - RULE_expr = 7 - RULE_tuple_expr = 8 - RULE_interpolation_expr = 9 - RULE_comprehension = 10 - RULE_call_arg = 11 - RULE_atom = 12 - RULE_id_list = 13 - RULE_typ = 14 + RULE_class_member = 6 + RULE_block = 7 + RULE_expr = 8 + RULE_tuple_expr = 9 + RULE_interpolation_expr = 10 + RULE_comprehension = 11 + RULE_call_arg = 12 + RULE_atom = 13 + RULE_id_list = 14 + RULE_typ = 15 ruleNames = [ "program", "stmt", "simple_stmt", "lvalue", "compound_stmt", - "func_arg", "block", "expr", "tuple_expr", "interpolation_expr", - "comprehension", "call_arg", "atom", "id_list", "typ" ] + "func_arg", "class_member", "block", "expr", "tuple_expr", + "interpolation_expr", "comprehension", "call_arg", "atom", + "id_list", "typ" ] EOF = Token.EOF T__0=1 @@ -337,14 +349,15 @@ class PyxellParser ( Parser ): T__62=63 T__63=64 T__64=65 - INT=66 - FLOAT=67 - CHAR=68 - STRING=69 - ID=70 - COMMENT=71 - WS=72 - ERR=73 + T__65=66 + INT=67 + FLOAT=68 + CHAR=69 + STRING=70 + ID=71 + COMMENT=72 + WS=73 + ERR=74 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -390,17 +403,17 @@ def program(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 33 + self.state = 35 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0): - self.state = 30 + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__40) | (1 << PyxellParser.T__44) | (1 << PyxellParser.T__49) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0): + self.state = 32 self.stmt() - self.state = 35 + self.state = 37 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 36 + self.state = 38 self.match(PyxellParser.EOF) except RecognitionException as re: localctx.exception = re @@ -442,19 +455,19 @@ def stmt(self): localctx = PyxellParser.StmtContext(self, self._ctx, self.state) self.enterRule(localctx, 2, self.RULE_stmt) try: - self.state = 42 + self.state = 44 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__1, PyxellParser.T__5, PyxellParser.T__6, PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__20, PyxellParser.T__21, PyxellParser.T__22, PyxellParser.T__36, PyxellParser.T__43, PyxellParser.T__48, PyxellParser.T__57, PyxellParser.T__60, PyxellParser.T__61, PyxellParser.T__62, PyxellParser.T__63, PyxellParser.T__64, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: + if token in [PyxellParser.T__1, PyxellParser.T__5, PyxellParser.T__6, PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__20, PyxellParser.T__21, PyxellParser.T__22, PyxellParser.T__36, PyxellParser.T__44, PyxellParser.T__49, PyxellParser.T__58, PyxellParser.T__61, PyxellParser.T__62, PyxellParser.T__63, PyxellParser.T__64, PyxellParser.T__65, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: self.enterOuterAlt(localctx, 1) - self.state = 38 + self.state = 40 self.simple_stmt() - self.state = 39 + self.state = 41 self.match(PyxellParser.T__0) pass - elif token in [PyxellParser.T__24, PyxellParser.T__28, PyxellParser.T__29, PyxellParser.T__30, PyxellParser.T__33]: + elif token in [PyxellParser.T__24, PyxellParser.T__28, PyxellParser.T__29, PyxellParser.T__30, PyxellParser.T__33, PyxellParser.T__40]: self.enterOuterAlt(localctx, 2) - self.state = 41 + self.state = 43 self.compound_stmt() pass else: @@ -647,35 +660,35 @@ def simple_stmt(self): self.enterRule(localctx, 4, self.RULE_simple_stmt) self._la = 0 # Token type try: - self.state = 84 + self.state = 86 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,7,self._ctx) if la_ == 1: localctx = PyxellParser.StmtUseContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 44 + self.state = 46 self.match(PyxellParser.T__1) - self.state = 45 + self.state = 47 localctx.name = self.match(PyxellParser.ID) - self.state = 52 + self.state = 54 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__2]: - self.state = 46 + self.state = 48 self.match(PyxellParser.T__2) - self.state = 47 + self.state = 49 localctx.only = self.id_list() pass elif token in [PyxellParser.T__3]: - self.state = 48 + self.state = 50 self.match(PyxellParser.T__3) - self.state = 49 + self.state = 51 localctx.hiding = self.id_list() pass elif token in [PyxellParser.T__4]: - self.state = 50 + self.state = 52 self.match(PyxellParser.T__4) - self.state = 51 + self.state = 53 localctx.as_ = self.match(PyxellParser.ID) pass elif token in [PyxellParser.T__0]: @@ -687,20 +700,20 @@ def simple_stmt(self): elif la_ == 2: localctx = PyxellParser.StmtSkipContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 54 + self.state = 56 self.match(PyxellParser.T__5) pass elif la_ == 3: localctx = PyxellParser.StmtPrintContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 55 - self.match(PyxellParser.T__6) self.state = 57 + self.match(PyxellParser.T__6) + self.state = 59 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__36 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__48 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 56 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__36 - 13)) | (1 << (PyxellParser.T__44 - 13)) | (1 << (PyxellParser.T__49 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 58 self.tuple_expr() @@ -709,17 +722,17 @@ def simple_stmt(self): elif la_ == 4: localctx = PyxellParser.StmtDeclContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 59 + self.state = 61 self.typ(0) - self.state = 60 + self.state = 62 self.match(PyxellParser.ID) - self.state = 63 + self.state = 65 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__7: - self.state = 61 + self.state = 63 self.match(PyxellParser.T__7) - self.state = 62 + self.state = 64 self.tuple_expr() @@ -728,29 +741,29 @@ def simple_stmt(self): elif la_ == 5: localctx = PyxellParser.StmtAssgContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 70 + self.state = 72 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,5,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 65 + self.state = 67 self.lvalue() - self.state = 66 + self.state = 68 self.match(PyxellParser.T__7) - self.state = 72 + self.state = 74 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,5,self._ctx) - self.state = 73 + self.state = 75 self.tuple_expr() pass elif la_ == 6: localctx = PyxellParser.StmtAssgExprContext(self, localctx) self.enterOuterAlt(localctx, 6) - self.state = 74 + self.state = 76 self.expr(0) - self.state = 75 + self.state = 77 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__11) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__14) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__17) | (1 << PyxellParser.T__18) | (1 << PyxellParser.T__19))) != 0)): @@ -758,16 +771,16 @@ def simple_stmt(self): else: self._errHandler.reportMatch(self) self.consume() - self.state = 76 + self.state = 78 self.match(PyxellParser.T__7) - self.state = 77 + self.state = 79 self.expr(0) pass elif la_ == 7: localctx = PyxellParser.StmtLoopControlContext(self, localctx) self.enterOuterAlt(localctx, 7) - self.state = 79 + self.state = 81 localctx.s = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__20 or _la==PyxellParser.T__21): @@ -780,13 +793,13 @@ def simple_stmt(self): elif la_ == 8: localctx = PyxellParser.StmtReturnContext(self, localctx) self.enterOuterAlt(localctx, 8) - self.state = 80 - self.match(PyxellParser.T__22) self.state = 82 + self.match(PyxellParser.T__22) + self.state = 84 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__36 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__48 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 81 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__36 - 13)) | (1 << (PyxellParser.T__44 - 13)) | (1 << (PyxellParser.T__49 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 83 self.tuple_expr() @@ -834,17 +847,17 @@ def lvalue(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 86 + self.state = 88 self.expr(0) - self.state = 91 + self.state = 93 self._errHandler.sync(self) _la = self._input.LA(1) while _la==PyxellParser.T__23: - self.state = 87 + self.state = 89 self.match(PyxellParser.T__23) - self.state = 88 + self.state = 90 self.expr(0) - self.state = 93 + self.state = 95 self._errHandler.sync(self) _la = self._input.LA(1) @@ -906,6 +919,28 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) + class StmtClassContext(Compound_stmtContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Compound_stmtContext + super().__init__(parser) + self.copyFrom(ctx) + + def ID(self): + return self.getToken(PyxellParser.ID, 0) + def class_member(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(PyxellParser.Class_memberContext) + else: + return self.getTypedRuleContext(PyxellParser.Class_memberContext,i) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStmtClass" ): + return visitor.visitStmtClass(self) + else: + return visitor.visitChildren(self) + + class StmtWhileContext(Compound_stmtContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Compound_stmtContext @@ -1002,45 +1037,45 @@ def compound_stmt(self): self.enterRule(localctx, 8, self.RULE_compound_stmt) self._la = 0 # Token type try: - self.state = 164 + self.state = 177 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__24]: localctx = PyxellParser.StmtIfContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 94 + self.state = 96 self.match(PyxellParser.T__24) - self.state = 95 + self.state = 97 self.expr(0) - self.state = 96 + self.state = 98 self.match(PyxellParser.T__25) - self.state = 97 + self.state = 99 self.block() - self.state = 105 + self.state = 107 self._errHandler.sync(self) _la = self._input.LA(1) while _la==PyxellParser.T__26: - self.state = 98 + self.state = 100 self.match(PyxellParser.T__26) - self.state = 99 + self.state = 101 self.expr(0) - self.state = 100 + self.state = 102 self.match(PyxellParser.T__25) - self.state = 101 + self.state = 103 self.block() - self.state = 107 + self.state = 109 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 111 + self.state = 113 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__27: - self.state = 108 + self.state = 110 self.match(PyxellParser.T__27) - self.state = 109 + self.state = 111 self.match(PyxellParser.T__25) - self.state = 110 + self.state = 112 self.block() @@ -1048,123 +1083,149 @@ def compound_stmt(self): elif token in [PyxellParser.T__28]: localctx = PyxellParser.StmtWhileContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 113 + self.state = 115 self.match(PyxellParser.T__28) - self.state = 114 + self.state = 116 self.expr(0) - self.state = 115 + self.state = 117 self.match(PyxellParser.T__25) - self.state = 116 + self.state = 118 self.block() pass elif token in [PyxellParser.T__29]: localctx = PyxellParser.StmtUntilContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 118 + self.state = 120 self.match(PyxellParser.T__29) - self.state = 119 + self.state = 121 self.expr(0) - self.state = 120 + self.state = 122 self.match(PyxellParser.T__25) - self.state = 121 + self.state = 123 self.block() pass elif token in [PyxellParser.T__30]: localctx = PyxellParser.StmtForContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 123 + self.state = 125 self.match(PyxellParser.T__30) - self.state = 124 + self.state = 126 self.tuple_expr() - self.state = 125 + self.state = 127 self.match(PyxellParser.T__31) - self.state = 126 + self.state = 128 self.tuple_expr() - self.state = 129 + self.state = 131 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__32: - self.state = 127 + self.state = 129 self.match(PyxellParser.T__32) - self.state = 128 + self.state = 130 self.tuple_expr() - self.state = 131 + self.state = 133 self.match(PyxellParser.T__25) - self.state = 132 + self.state = 134 self.block() pass elif token in [PyxellParser.T__33]: localctx = PyxellParser.StmtFuncContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 134 + self.state = 136 self.match(PyxellParser.T__33) - self.state = 135 + self.state = 137 self.match(PyxellParser.ID) - self.state = 140 + self.state = 142 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__34: - self.state = 136 + self.state = 138 self.match(PyxellParser.T__34) - self.state = 137 + self.state = 139 localctx.typevars = self.id_list() - self.state = 138 + self.state = 140 self.match(PyxellParser.T__35) - self.state = 142 + self.state = 144 self.match(PyxellParser.T__36) - self.state = 148 + self.state = 150 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,13,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 143 + self.state = 145 self.func_arg() - self.state = 144 + self.state = 146 self.match(PyxellParser.T__23) - self.state = 150 + self.state = 152 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,13,self._ctx) - self.state = 152 + self.state = 154 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 37)) & ~0x3f) == 0 and ((1 << (_la - 37)) & ((1 << (PyxellParser.T__36 - 37)) | (1 << (PyxellParser.T__43 - 37)) | (1 << (PyxellParser.T__61 - 37)) | (1 << (PyxellParser.ID - 37)))) != 0): - self.state = 151 + if ((((_la - 37)) & ~0x3f) == 0 and ((1 << (_la - 37)) & ((1 << (PyxellParser.T__36 - 37)) | (1 << (PyxellParser.T__44 - 37)) | (1 << (PyxellParser.T__62 - 37)) | (1 << (PyxellParser.ID - 37)))) != 0): + self.state = 153 self.func_arg() - self.state = 154 - self.match(PyxellParser.T__37) self.state = 156 + self.match(PyxellParser.T__37) + self.state = 158 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 37)) & ~0x3f) == 0 and ((1 << (_la - 37)) & ((1 << (PyxellParser.T__36 - 37)) | (1 << (PyxellParser.T__43 - 37)) | (1 << (PyxellParser.T__61 - 37)) | (1 << (PyxellParser.ID - 37)))) != 0): - self.state = 155 + if ((((_la - 37)) & ~0x3f) == 0 and ((1 << (_la - 37)) & ((1 << (PyxellParser.T__36 - 37)) | (1 << (PyxellParser.T__44 - 37)) | (1 << (PyxellParser.T__62 - 37)) | (1 << (PyxellParser.ID - 37)))) != 0): + self.state = 157 localctx.ret = self.typ(0) - self.state = 162 + self.state = 164 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__38]: - self.state = 158 + self.state = 160 self.match(PyxellParser.T__38) - self.state = 159 + self.state = 161 self.block() pass elif token in [PyxellParser.T__39]: - self.state = 160 + self.state = 162 self.match(PyxellParser.T__39) - self.state = 161 + self.state = 163 self.match(PyxellParser.T__0) pass else: raise NoViableAltException(self) + pass + elif token in [PyxellParser.T__40]: + localctx = PyxellParser.StmtClassContext(self, localctx) + self.enterOuterAlt(localctx, 6) + self.state = 166 + self.match(PyxellParser.T__40) + self.state = 167 + self.match(PyxellParser.ID) + self.state = 168 + self.match(PyxellParser.T__38) + self.state = 169 + self.match(PyxellParser.T__41) + self.state = 171 + self._errHandler.sync(self) + _la = self._input.LA(1) + while True: + self.state = 170 + self.class_member() + self.state = 173 + self._errHandler.sync(self) + _la = self._input.LA(1) + if not (((((_la - 37)) & ~0x3f) == 0 and ((1 << (_la - 37)) & ((1 << (PyxellParser.T__36 - 37)) | (1 << (PyxellParser.T__44 - 37)) | (1 << (PyxellParser.T__62 - 37)) | (1 << (PyxellParser.ID - 37)))) != 0)): + break + + self.state = 175 + self.match(PyxellParser.T__42) pass else: raise NoViableAltException(self) @@ -1225,17 +1286,17 @@ def func_arg(self): try: localctx = PyxellParser.FuncArgContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 166 + self.state = 179 self.typ(0) - self.state = 167 + self.state = 180 self.match(PyxellParser.ID) - self.state = 170 + self.state = 183 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__40: - self.state = 168 - self.match(PyxellParser.T__40) - self.state = 169 + if _la==PyxellParser.T__43: + self.state = 181 + self.match(PyxellParser.T__43) + self.state = 182 self.expr(0) @@ -1248,6 +1309,78 @@ def func_arg(self): return localctx + class Class_memberContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + + def getRuleIndex(self): + return PyxellParser.RULE_class_member + + + def copyFrom(self, ctx:ParserRuleContext): + super().copyFrom(ctx) + + + + class ClassFieldContext(Class_memberContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Class_memberContext + super().__init__(parser) + self.copyFrom(ctx) + + def typ(self): + return self.getTypedRuleContext(PyxellParser.TypContext,0) + + def ID(self): + return self.getToken(PyxellParser.ID, 0) + def tuple_expr(self): + return self.getTypedRuleContext(PyxellParser.Tuple_exprContext,0) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitClassField" ): + return visitor.visitClassField(self) + else: + return visitor.visitChildren(self) + + + + def class_member(self): + + localctx = PyxellParser.Class_memberContext(self, self._ctx, self.state) + self.enterRule(localctx, 12, self.RULE_class_member) + self._la = 0 # Token type + try: + localctx = PyxellParser.ClassFieldContext(self, localctx) + self.enterOuterAlt(localctx, 1) + self.state = 185 + self.typ(0) + self.state = 186 + self.match(PyxellParser.ID) + self.state = 189 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==PyxellParser.T__43: + self.state = 187 + self.match(PyxellParser.T__43) + self.state = 188 + self.tuple_expr() + + + self.state = 191 + self.match(PyxellParser.T__0) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class BlockContext(ParserRuleContext): def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): @@ -1276,25 +1409,25 @@ def accept(self, visitor:ParseTreeVisitor): def block(self): localctx = PyxellParser.BlockContext(self, self._ctx, self.state) - self.enterRule(localctx, 12, self.RULE_block) + self.enterRule(localctx, 14, self.RULE_block) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 172 + self.state = 193 self.match(PyxellParser.T__41) - self.state = 174 + self.state = 195 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 173 + self.state = 194 self.stmt() - self.state = 176 + self.state = 197 self._errHandler.sync(self) _la = self._input.LA(1) - if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__43) | (1 << PyxellParser.T__48) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__60) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0)): + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__40) | (1 << PyxellParser.T__44) | (1 << PyxellParser.T__49) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0)): break - self.state = 178 + self.state = 199 self.match(PyxellParser.T__42) except RecognitionException as re: localctx.exception = re @@ -1655,20 +1788,20 @@ def expr(self, _p:int=0): _parentState = self.state localctx = PyxellParser.ExprContext(self, self._ctx, _parentState) _prevctx = localctx - _startState = 14 - self.enterRecursionRule(localctx, 14, self.RULE_expr, _p) + _startState = 16 + self.enterRecursionRule(localctx, 16, self.RULE_expr, _p) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 225 + self.state = 246 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,25,self._ctx) + la_ = self._interp.adaptivePredict(self._input,27,self._ctx) if la_ == 1: localctx = PyxellParser.ExprAtomContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 181 + self.state = 202 self.atom() pass @@ -1676,11 +1809,11 @@ def expr(self, _p:int=0): localctx = PyxellParser.ExprParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 182 + self.state = 203 self.match(PyxellParser.T__36) - self.state = 183 + self.state = 204 self.tuple_expr() - self.state = 184 + self.state = 205 self.match(PyxellParser.T__37) pass @@ -1688,70 +1821,70 @@ def expr(self, _p:int=0): localctx = PyxellParser.ExprArrayContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 186 - self.match(PyxellParser.T__43) - self.state = 192 + self.state = 207 + self.match(PyxellParser.T__44) + self.state = 213 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,20,self._ctx) + _alt = self._interp.adaptivePredict(self._input,22,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 187 + self.state = 208 self.expr(0) - self.state = 188 + self.state = 209 self.match(PyxellParser.T__23) - self.state = 194 + self.state = 215 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,20,self._ctx) + _alt = self._interp.adaptivePredict(self._input,22,self._ctx) - self.state = 196 + self.state = 217 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__36 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__48 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 195 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__36 - 13)) | (1 << (PyxellParser.T__44 - 13)) | (1 << (PyxellParser.T__49 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 216 self.expr(0) - self.state = 198 - self.match(PyxellParser.T__44) + self.state = 219 + self.match(PyxellParser.T__45) pass elif la_ == 4: localctx = PyxellParser.ExprArrayComprehensionContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 199 - self.match(PyxellParser.T__43) - self.state = 200 + self.state = 220 + self.match(PyxellParser.T__44) + self.state = 221 self.expr(0) - self.state = 202 + self.state = 223 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 201 + self.state = 222 self.comprehension() - self.state = 204 + self.state = 225 self._errHandler.sync(self) _la = self._input.LA(1) if not (_la==PyxellParser.T__24 or _la==PyxellParser.T__30): break - self.state = 206 - self.match(PyxellParser.T__44) + self.state = 227 + self.match(PyxellParser.T__45) pass elif la_ == 5: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 208 + self.state = 229 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__48))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__49))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 209 + self.state = 230 self.expr(17) pass @@ -1759,9 +1892,9 @@ def expr(self, _p:int=0): localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 210 - localctx.op = self.match(PyxellParser.T__57) - self.state = 211 + self.state = 231 + localctx.op = self.match(PyxellParser.T__58) + self.state = 232 self.expr(6) pass @@ -1769,69 +1902,69 @@ def expr(self, _p:int=0): localctx = PyxellParser.ExprLambdaContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 212 - self.match(PyxellParser.T__60) - self.state = 217 + self.state = 233 + self.match(PyxellParser.T__61) + self.state = 238 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,23,self._ctx) + _alt = self._interp.adaptivePredict(self._input,25,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 213 + self.state = 234 self.match(PyxellParser.ID) - self.state = 214 + self.state = 235 self.match(PyxellParser.T__23) - self.state = 219 + self.state = 240 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,23,self._ctx) + _alt = self._interp.adaptivePredict(self._input,25,self._ctx) - self.state = 221 + self.state = 242 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.ID: - self.state = 220 + self.state = 241 self.match(PyxellParser.ID) - self.state = 223 - self.match(PyxellParser.T__61) - self.state = 224 + self.state = 244 + self.match(PyxellParser.T__62) + self.state = 245 self.expr(1) pass self._ctx.stop = self._input.LT(-1) - self.state = 322 + self.state = 343 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,35,self._ctx) + _alt = self._interp.adaptivePredict(self._input,37,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 320 + self.state = 341 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,34,self._ctx) + la_ = self._interp.adaptivePredict(self._input,36,self._ctx) if la_ == 1: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 227 + self.state = 248 if not self.precpred(self._ctx, 18): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 18)") - self.state = 228 + self.state = 249 localctx.op = self.match(PyxellParser.T__8) - self.state = 229 + self.state = 250 self.expr(18) pass elif la_ == 2: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 230 + self.state = 251 if not self.precpred(self._ctx, 16): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 16)") - self.state = 231 + self.state = 252 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__9) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__11))) != 0)): @@ -1839,18 +1972,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 232 + self.state = 253 self.expr(17) pass elif la_ == 3: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 233 + self.state = 254 if not self.precpred(self._ctx, 15): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 15)") - self.state = 234 + self.state = 255 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__12 or _la==PyxellParser.T__13): @@ -1858,18 +1991,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 235 + self.state = 256 self.expr(16) pass elif la_ == 4: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 236 + self.state = 257 if not self.precpred(self._ctx, 14): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 14)") - self.state = 237 + self.state = 258 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__14 or _la==PyxellParser.T__15): @@ -1877,313 +2010,313 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 238 + self.state = 259 self.expr(15) pass elif la_ == 5: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 239 + self.state = 260 if not self.precpred(self._ctx, 13): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") - self.state = 240 + self.state = 261 localctx.op = self.match(PyxellParser.T__16) - self.state = 241 + self.state = 262 self.expr(14) pass elif la_ == 6: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 242 + self.state = 263 if not self.precpred(self._ctx, 12): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 12)") - self.state = 243 + self.state = 264 localctx.op = self.match(PyxellParser.T__17) - self.state = 244 + self.state = 265 self.expr(13) pass elif la_ == 7: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 245 + self.state = 266 if not self.precpred(self._ctx, 11): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") - self.state = 246 + self.state = 267 localctx.op = self.match(PyxellParser.T__18) - self.state = 247 + self.state = 268 self.expr(12) pass elif la_ == 8: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 248 + self.state = 269 if not self.precpred(self._ctx, 10): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") - self.state = 249 + self.state = 270 localctx.dots = self._input.LT(1) _la = self._input.LA(1) - if not(_la==PyxellParser.T__49 or _la==PyxellParser.T__50): + if not(_la==PyxellParser.T__50 or _la==PyxellParser.T__51): localctx.dots = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 250 + self.state = 271 self.expr(11) pass elif la_ == 9: localctx = PyxellParser.ExprIsContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 251 + self.state = 272 if not self.precpred(self._ctx, 8): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") - self.state = 252 + self.state = 273 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not(_la==PyxellParser.T__51 or _la==PyxellParser.T__52): + if not(_la==PyxellParser.T__52 or _la==PyxellParser.T__53): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 253 + self.state = 274 self.expr(9) pass elif la_ == 10: localctx = PyxellParser.ExprCmpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 254 + self.state = 275 if not self.precpred(self._ctx, 7): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") - self.state = 255 + self.state = 276 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__34) | (1 << PyxellParser.T__35) | (1 << PyxellParser.T__53) | (1 << PyxellParser.T__54) | (1 << PyxellParser.T__55) | (1 << PyxellParser.T__56))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__34) | (1 << PyxellParser.T__35) | (1 << PyxellParser.T__54) | (1 << PyxellParser.T__55) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 256 + self.state = 277 self.expr(7) pass elif la_ == 11: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 257 + self.state = 278 if not self.precpred(self._ctx, 5): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") - self.state = 258 - localctx.op = self.match(PyxellParser.T__58) - self.state = 259 + self.state = 279 + localctx.op = self.match(PyxellParser.T__59) + self.state = 280 self.expr(5) pass elif la_ == 12: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 260 + self.state = 281 if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") - self.state = 261 - localctx.op = self.match(PyxellParser.T__59) - self.state = 262 + self.state = 282 + localctx.op = self.match(PyxellParser.T__60) + self.state = 283 self.expr(4) pass elif la_ == 13: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 263 + self.state = 284 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 264 + self.state = 285 localctx.op = self.match(PyxellParser.T__19) - self.state = 265 + self.state = 286 self.expr(3) pass elif la_ == 14: localctx = PyxellParser.ExprCondContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 266 + self.state = 287 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 267 - self.match(PyxellParser.T__45) - self.state = 268 + self.state = 288 + self.match(PyxellParser.T__46) + self.state = 289 self.expr(0) - self.state = 269 - self.match(PyxellParser.T__40) - self.state = 270 + self.state = 290 + self.match(PyxellParser.T__43) + self.state = 291 self.expr(2) pass elif la_ == 15: localctx = PyxellParser.ExprIndexContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 272 + self.state = 293 if not self.precpred(self._ctx, 23): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 23)") - self.state = 274 + self.state = 295 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__45: - self.state = 273 - localctx.safe = self.match(PyxellParser.T__45) + if _la==PyxellParser.T__46: + self.state = 294 + localctx.safe = self.match(PyxellParser.T__46) - self.state = 276 - self.match(PyxellParser.T__43) - self.state = 277 - self.tuple_expr() - self.state = 278 + self.state = 297 self.match(PyxellParser.T__44) + self.state = 298 + self.tuple_expr() + self.state = 299 + self.match(PyxellParser.T__45) pass elif la_ == 16: localctx = PyxellParser.ExprSliceContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 280 + self.state = 301 if not self.precpred(self._ctx, 22): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 22)") - self.state = 281 - self.match(PyxellParser.T__43) - self.state = 283 + self.state = 302 + self.match(PyxellParser.T__44) + self.state = 304 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__36 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__48 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 282 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__36 - 13)) | (1 << (PyxellParser.T__44 - 13)) | (1 << (PyxellParser.T__49 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 303 localctx.e1 = self.expr(0) - self.state = 285 - self.match(PyxellParser.T__40) - self.state = 287 + self.state = 306 + self.match(PyxellParser.T__43) + self.state = 308 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__36 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__48 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 286 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__36 - 13)) | (1 << (PyxellParser.T__44 - 13)) | (1 << (PyxellParser.T__49 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 307 localctx.e2 = self.expr(0) - self.state = 293 + self.state = 314 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__40: - self.state = 289 - self.match(PyxellParser.T__40) - self.state = 291 + if _la==PyxellParser.T__43: + self.state = 310 + self.match(PyxellParser.T__43) + self.state = 312 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__36 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__48 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 290 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__36 - 13)) | (1 << (PyxellParser.T__44 - 13)) | (1 << (PyxellParser.T__49 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 311 localctx.e3 = self.expr(0) - self.state = 295 - self.match(PyxellParser.T__44) + self.state = 316 + self.match(PyxellParser.T__45) pass elif la_ == 17: localctx = PyxellParser.ExprAttrContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 296 + self.state = 317 if not self.precpred(self._ctx, 21): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 21)") - self.state = 298 + self.state = 319 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__45: - self.state = 297 - localctx.safe = self.match(PyxellParser.T__45) + if _la==PyxellParser.T__46: + self.state = 318 + localctx.safe = self.match(PyxellParser.T__46) - self.state = 300 - self.match(PyxellParser.T__46) - self.state = 301 + self.state = 321 + self.match(PyxellParser.T__47) + self.state = 322 self.match(PyxellParser.ID) pass elif la_ == 18: localctx = PyxellParser.ExprCallContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 302 + self.state = 323 if not self.precpred(self._ctx, 20): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 20)") - self.state = 303 + self.state = 324 self.match(PyxellParser.T__36) - self.state = 309 + self.state = 330 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,32,self._ctx) + _alt = self._interp.adaptivePredict(self._input,34,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 304 + self.state = 325 self.call_arg() - self.state = 305 + self.state = 326 self.match(PyxellParser.T__23) - self.state = 311 + self.state = 332 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,32,self._ctx) + _alt = self._interp.adaptivePredict(self._input,34,self._ctx) - self.state = 313 + self.state = 334 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__36 - 13)) | (1 << (PyxellParser.T__43 - 13)) | (1 << (PyxellParser.T__48 - 13)) | (1 << (PyxellParser.T__57 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 312 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__36 - 13)) | (1 << (PyxellParser.T__44 - 13)) | (1 << (PyxellParser.T__49 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 333 self.call_arg() - self.state = 315 + self.state = 336 self.match(PyxellParser.T__37) pass elif la_ == 19: localctx = PyxellParser.ExprUnaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 316 + self.state = 337 if not self.precpred(self._ctx, 19): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 19)") - self.state = 317 - localctx.op = self.match(PyxellParser.T__47) + self.state = 338 + localctx.op = self.match(PyxellParser.T__48) pass elif la_ == 20: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 318 + self.state = 339 if not self.precpred(self._ctx, 9): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") - self.state = 319 - localctx.dots = self.match(PyxellParser.T__50) + self.state = 340 + localctx.dots = self.match(PyxellParser.T__51) pass - self.state = 324 + self.state = 345 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,35,self._ctx) + _alt = self._interp.adaptivePredict(self._input,37,self._ctx) except RecognitionException as re: localctx.exception = re @@ -2234,24 +2367,24 @@ def accept(self, visitor:ParseTreeVisitor): def tuple_expr(self): localctx = PyxellParser.Tuple_exprContext(self, self._ctx, self.state) - self.enterRule(localctx, 16, self.RULE_tuple_expr) + self.enterRule(localctx, 18, self.RULE_tuple_expr) try: localctx = PyxellParser.ExprTupleContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 330 + self.state = 351 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,36,self._ctx) + _alt = self._interp.adaptivePredict(self._input,38,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 325 + self.state = 346 self.expr(0) - self.state = 326 + self.state = 347 self.match(PyxellParser.T__23) - self.state = 332 + self.state = 353 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,36,self._ctx) + _alt = self._interp.adaptivePredict(self._input,38,self._ctx) - self.state = 333 + self.state = 354 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -2301,13 +2434,13 @@ def accept(self, visitor:ParseTreeVisitor): def interpolation_expr(self): localctx = PyxellParser.Interpolation_exprContext(self, self._ctx, self.state) - self.enterRule(localctx, 18, self.RULE_interpolation_expr) + self.enterRule(localctx, 20, self.RULE_interpolation_expr) try: localctx = PyxellParser.ExprInterpolationContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 335 + self.state = 356 self.tuple_expr() - self.state = 336 + self.state = 357 self.match(PyxellParser.EOF) except RecognitionException as re: localctx.exception = re @@ -2375,30 +2508,30 @@ def accept(self, visitor:ParseTreeVisitor): def comprehension(self): localctx = PyxellParser.ComprehensionContext(self, self._ctx, self.state) - self.enterRule(localctx, 20, self.RULE_comprehension) + self.enterRule(localctx, 22, self.RULE_comprehension) self._la = 0 # Token type try: - self.state = 348 + self.state = 369 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__30]: localctx = PyxellParser.ComprehensionGeneratorContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 338 + self.state = 359 self.match(PyxellParser.T__30) - self.state = 339 + self.state = 360 self.tuple_expr() - self.state = 340 + self.state = 361 self.match(PyxellParser.T__31) - self.state = 341 + self.state = 362 self.tuple_expr() - self.state = 344 + self.state = 365 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__32: - self.state = 342 + self.state = 363 self.match(PyxellParser.T__32) - self.state = 343 + self.state = 364 self.tuple_expr() @@ -2406,9 +2539,9 @@ def comprehension(self): elif token in [PyxellParser.T__24]: localctx = PyxellParser.ComprehensionFilterContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 346 + self.state = 367 self.match(PyxellParser.T__24) - self.state = 347 + self.state = 368 self.expr(0) pass else: @@ -2462,21 +2595,21 @@ def accept(self, visitor:ParseTreeVisitor): def call_arg(self): localctx = PyxellParser.Call_argContext(self, self._ctx, self.state) - self.enterRule(localctx, 22, self.RULE_call_arg) + self.enterRule(localctx, 24, self.RULE_call_arg) try: localctx = PyxellParser.CallArgContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 352 + self.state = 373 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,39,self._ctx) + la_ = self._interp.adaptivePredict(self._input,41,self._ctx) if la_ == 1: - self.state = 350 + self.state = 371 self.match(PyxellParser.ID) - self.state = 351 + self.state = 372 self.match(PyxellParser.T__7) - self.state = 354 + self.state = 375 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -2615,30 +2748,30 @@ def accept(self, visitor:ParseTreeVisitor): def atom(self): localctx = PyxellParser.AtomContext(self, self._ctx, self.state) - self.enterRule(localctx, 24, self.RULE_atom) + self.enterRule(localctx, 26, self.RULE_atom) self._la = 0 # Token type try: - self.state = 363 + self.state = 384 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: localctx = PyxellParser.AtomIntContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 356 + self.state = 377 self.match(PyxellParser.INT) pass elif token in [PyxellParser.FLOAT]: localctx = PyxellParser.AtomFloatContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 357 + self.state = 378 self.match(PyxellParser.FLOAT) pass - elif token in [PyxellParser.T__62, PyxellParser.T__63]: + elif token in [PyxellParser.T__63, PyxellParser.T__64]: localctx = PyxellParser.AtomBoolContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 358 + self.state = 379 _la = self._input.LA(1) - if not(_la==PyxellParser.T__62 or _la==PyxellParser.T__63): + if not(_la==PyxellParser.T__63 or _la==PyxellParser.T__64): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -2647,25 +2780,25 @@ def atom(self): elif token in [PyxellParser.CHAR]: localctx = PyxellParser.AtomCharContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 359 + self.state = 380 self.match(PyxellParser.CHAR) pass elif token in [PyxellParser.STRING]: localctx = PyxellParser.AtomStringContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 360 + self.state = 381 self.match(PyxellParser.STRING) pass - elif token in [PyxellParser.T__64]: + elif token in [PyxellParser.T__65]: localctx = PyxellParser.AtomNullContext(self, localctx) self.enterOuterAlt(localctx, 6) - self.state = 361 - self.match(PyxellParser.T__64) + self.state = 382 + self.match(PyxellParser.T__65) pass elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) self.enterOuterAlt(localctx, 7) - self.state = 362 + self.state = 383 self.match(PyxellParser.ID) pass else: @@ -2719,24 +2852,24 @@ def accept(self, visitor:ParseTreeVisitor): def id_list(self): localctx = PyxellParser.Id_listContext(self, self._ctx, self.state) - self.enterRule(localctx, 26, self.RULE_id_list) + self.enterRule(localctx, 28, self.RULE_id_list) try: localctx = PyxellParser.IdListContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 369 + self.state = 390 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,41,self._ctx) + _alt = self._interp.adaptivePredict(self._input,43,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 365 + self.state = 386 self.match(PyxellParser.ID) - self.state = 366 + self.state = 387 self.match(PyxellParser.T__23) - self.state = 371 + self.state = 392 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,41,self._ctx) + _alt = self._interp.adaptivePredict(self._input,43,self._ctx) - self.state = 372 + self.state = 393 self.match(PyxellParser.ID) except RecognitionException as re: localctx.exception = re @@ -2892,11 +3025,11 @@ def typ(self, _p:int=0): _parentState = self.state localctx = PyxellParser.TypContext(self, self._ctx, _parentState) _prevctx = localctx - _startState = 28 - self.enterRecursionRule(localctx, 28, self.RULE_typ, _p) + _startState = 30 + self.enterRecursionRule(localctx, 30, self.RULE_typ, _p) try: self.enterOuterAlt(localctx, 1) - self.state = 386 + self.state = 407 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.ID]: @@ -2904,96 +3037,96 @@ def typ(self, _p:int=0): self._ctx = localctx _prevctx = localctx - self.state = 375 + self.state = 396 self.match(PyxellParser.ID) pass elif token in [PyxellParser.T__36]: localctx = PyxellParser.TypeParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 376 + self.state = 397 self.match(PyxellParser.T__36) - self.state = 377 + self.state = 398 self.typ(0) - self.state = 378 + self.state = 399 self.match(PyxellParser.T__37) pass - elif token in [PyxellParser.T__43]: + elif token in [PyxellParser.T__44]: localctx = PyxellParser.TypeArrayContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 380 - self.match(PyxellParser.T__43) - self.state = 381 - self.typ(0) - self.state = 382 + self.state = 401 self.match(PyxellParser.T__44) + self.state = 402 + self.typ(0) + self.state = 403 + self.match(PyxellParser.T__45) pass - elif token in [PyxellParser.T__61]: + elif token in [PyxellParser.T__62]: localctx = PyxellParser.TypeFunc0Context(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 384 - self.match(PyxellParser.T__61) - self.state = 385 + self.state = 405 + self.match(PyxellParser.T__62) + self.state = 406 self.typ(1) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 398 + self.state = 419 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,44,self._ctx) + _alt = self._interp.adaptivePredict(self._input,46,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 396 + self.state = 417 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,43,self._ctx) + la_ = self._interp.adaptivePredict(self._input,45,self._ctx) if la_ == 1: localctx = PyxellParser.TypeTupleContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 388 + self.state = 409 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 389 + self.state = 410 self.match(PyxellParser.T__9) - self.state = 390 + self.state = 411 self.typ(3) pass elif la_ == 2: localctx = PyxellParser.TypeFuncContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 391 + self.state = 412 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 392 - self.match(PyxellParser.T__61) - self.state = 393 + self.state = 413 + self.match(PyxellParser.T__62) + self.state = 414 self.typ(2) pass elif la_ == 3: localctx = PyxellParser.TypeNullableContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 394 + self.state = 415 if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") - self.state = 395 - self.match(PyxellParser.T__45) + self.state = 416 + self.match(PyxellParser.T__46) pass - self.state = 400 + self.state = 421 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,44,self._ctx) + _alt = self._interp.adaptivePredict(self._input,46,self._ctx) except RecognitionException as re: localctx.exception = re @@ -3008,8 +3141,8 @@ def typ(self, _p:int=0): def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): if self._predicates == None: self._predicates = dict() - self._predicates[7] = self.expr_sempred - self._predicates[14] = self.typ_sempred + self._predicates[8] = self.expr_sempred + self._predicates[15] = self.typ_sempred pred = self._predicates.get(ruleIndex, None) if pred is None: raise Exception("No predicate with index:" + str(ruleIndex)) diff --git a/src/antlr/PyxellVisitor.py b/src/antlr/PyxellVisitor.py index 929384a3..a9e90c19 100644 --- a/src/antlr/PyxellVisitor.py +++ b/src/antlr/PyxellVisitor.py @@ -89,11 +89,21 @@ def visitStmtFunc(self, ctx:PyxellParser.StmtFuncContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#StmtClass. + def visitStmtClass(self, ctx:PyxellParser.StmtClassContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#FuncArg. def visitFuncArg(self, ctx:PyxellParser.FuncArgContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#ClassField. + def visitClassField(self, ctx:PyxellParser.ClassFieldContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#block. def visitBlock(self, ctx:PyxellParser.BlockContext): return self.visitChildren(ctx) diff --git a/src/ast.py b/src/ast.py index bbca11e2..182e35bf 100644 --- a/src/ast.py +++ b/src/ast.py @@ -161,6 +161,21 @@ def visitStmtReturn(self, ctx): 'expr': self.visit(ctx.tuple_expr()), } + def visitStmtClass(self, ctx): + return { + **_node(ctx, 'StmtClass'), + 'id': self.visit(ctx.ID()), + 'members': self.visit(ctx.class_member()), + } + + def visitClassField(self, ctx): + return { + **_node(ctx, 'ClassField'), + 'type': self.visit(ctx.typ()), + 'name': self.visit(ctx.ID()), + 'default': self.visit(ctx.tuple_expr()), + } + ### Expressions ### diff --git a/src/compiler.py b/src/compiler.py index fe023de3..6fdcd194 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -32,7 +32,7 @@ def __init__(self): self._unit = None self._keep_env = False self.builder = CustomIRBuilder() - self.module = ll.Module() + self.module = ll.Module(context=ll.Context()) self.builtins = { 'malloc': ll.Function(self.module, tFunc([tInt], tPtr()).pointee, 'malloc'), 'realloc': ll.Function(self.module, tFunc([tPtr(), tInt], tPtr()).pointee, 'realloc'), @@ -151,6 +151,8 @@ def get(self, node, id, load=True): if id not in self.env: self.throw(node, err.UndeclaredIdentifier(id)) result = self.env[id] + if isinstance(result, Type) and result.isClass(): + result = result.constructor if not isinstance(result, Value): self.throw(node, err.NotVariable(id)) if id not in self.initialized: @@ -161,8 +163,9 @@ def get(self, node, id, load=True): result = self.function(node, result) return self.builder.load(result) if load else result - def extract(self, ptr, *indices): - return self.builder.load(self.builder.gep(ptr, [vInt(0), *[ll.Constant(ll.IntType(32), i) for i in indices]])) + def extract(self, ptr, *indices, load=True): + ptr = self.builder.gep(ptr, [vInt(0), *[ll.Constant(ll.IntType(32), i) for i in indices]]) + return self.builder.load(ptr) if load else ptr def insert(self, value, ptr, *indices): return self.builder.store(value, self.builder.gep(ptr, [vInt(0), *[ll.Constant(ll.IntType(32), i) for i in indices]])) @@ -176,7 +179,8 @@ def index(self, node, collection, index, lvalue=False): length = self.extract(collection, 1) cmp = self.builder.icmp_signed('>=', index, vInt(0)) index = self.builder.select(cmp, index, self.builder.add(index, length)) - return self.builder.gep(self.extract(collection, 0), [index]) + ptr = self.builder.gep(self.extract(collection, 0), [index]) + return ptr if lvalue else self.builder.load(ptr) self.throw(node, err.NotIndexable(collection.type)) @@ -263,11 +267,26 @@ def attr(self, node, obj, attr): if 0 <= index < len(type.elements): value = self.extract(obj, index) + elif type.isClass(): + value = self.member(node, obj, attr) + if value is None: self.throw(node, err.NoAttribute(type, attr)) return value + def member(self, node, obj, attr, lvalue=False): + if lvalue and not obj.type.isClass(): + self.throw(node, err.NotLvalue()) + + try: + index = list(obj.type.members.keys()).index(attr) + except ValueError: + self.throw(node, err.NoAttribute(obj.type, attr)) + + ptr = self.extract(obj, index, load=False) + return ptr if lvalue else self.builder.load(ptr) + def call(self, node, name, *values): return self.builder.call(self.get(node, name), values) @@ -328,6 +347,9 @@ def lvalue(self, node, expr, declare=None, override=False, initialize=False): elif expr['node'] == 'ExprIndex' and not expr.get('safe'): return self.index(node, *map(self.compile, expr['exprs']), lvalue=True) + elif expr['node'] == 'ExprAttr' and not expr.get('safe'): + return self.member(node, self.compile(expr['expr']), expr['attr'], lvalue=True) + self.throw(node, err.NotLvalue()) def assign(self, node, expr, value): @@ -658,6 +680,12 @@ def cmp(self, node, op, left, right): phi.add_incoming(vBool(op not in ('!=', '<', '>')), label_cont) return phi + elif left.type.isClass(): + if op not in ('==', '!='): + self.throw(node, err.NotComparable(left.type, right.type)) + + return self.builder.icmp_unsigned(op, left, right) + elif left.type == tUnknown: return vTrue @@ -1329,6 +1357,47 @@ def compileStmtReturn(self, node): else: self.builder.ret(value) + def compileStmtClass(self, node): + id = node['id'] + if id in self.env: + self.throw(node, err.RedeclaredIdentifier(id)) + self.initialized.add(id) + + members = {} + type = tClass(self.module.context, id, members) + self.env[id] = type + + for member in node['members']: + name = member['name'] + if name in members: + self.throw(member, err.RepeatedMember(name)) + members[name] = self.compile(member['type']) + + type.pointee.set_body(*members.values()) + + constructor_type = tFunc([], type) + constructor = ll.Function(self.module, constructor_type.pointee, self.module.get_unique_name('def.'+id+'.init')) + + constructor_ptr = ll.GlobalVariable(self.module, constructor_type, self.module.get_unique_name(id+'.init')) + constructor_ptr.initializer = constructor + type.constructor = constructor_ptr + + prev_label = self.builder.basic_block + entry = constructor.append_basic_block('entry') + self.builder.position_at_end(entry) + + obj = self.malloc(type) + + for i, member in enumerate(node['members']): + default = member.get('default') + if default: + value = self.cast(member, self.compile(default), self.compile(member['type'])) + self.insert(value, obj, i) + + self.builder.ret(obj) + + self.builder.position_at_end(prev_label) + ### Expressions ### @@ -1400,9 +1469,9 @@ def compileExprIndex(self, node): if node.get('safe'): collection = self.compile(exprs[0]) - return self.safe(node, collection, lambda: self.nullable(self.builder.load(self.index(node, self.extract(collection), self.compile(exprs[1])))), vNull) + return self.safe(node, collection, lambda: self.nullable(self.index(node, self.extract(collection), self.compile(exprs[1]))), vNull) - return self.builder.load(self.index(node, *map(self.compile, exprs))) + return self.index(node, *map(self.compile, exprs)) def compileExprSlice(self, node): slice = node['slice'] diff --git a/src/errors.py b/src/errors.py index 4f25f6a5..fa330749 100644 --- a/src/errors.py +++ b/src/errors.py @@ -39,6 +39,7 @@ class PyxellError(Exception): NotVariable = lambda id: f"Identifier `{id}` does not represent a variable" RedeclaredIdentifier = lambda id: f"Identifier `{id}` is already declared" RepeatedArgument = lambda id: f"Repeated argument `{id}`" + RepeatedMember = lambda id: f"Repeated member `{id}` in class definition" TooFewArguments = lambda t: f"Too few arguments for function `{t.show()}`" TooManyArguments = lambda t: f"Too many arguments for function `{t.show()}`" UndeclaredIdentifier = lambda id: f"Undeclared identifier `{id}`" diff --git a/src/types.py b/src/types.py index 92ffd0f6..f6d952c0 100644 --- a/src/types.py +++ b/src/types.py @@ -8,7 +8,7 @@ __all__ = [ 'Type', 'Value', - 'tVoid', 'tInt', 'tFloat', 'tBool', 'tChar', 'tPtr', 'tString', 'tArray', 'tNullable', 'tTuple', 'tFunc', 'tVar', 'tUnknown', + 'tVoid', 'tInt', 'tFloat', 'tBool', 'tChar', 'tPtr', 'tString', 'tArray', 'tNullable', 'tTuple', 'tFunc', 'tClass', 'tVar', 'tUnknown', 'Arg', 'unify_types', 'type_variables_assignment', 'get_type_variables', 'can_cast', 'vInt', 'vFloat', 'vBool', 'vFalse', 'vTrue', 'vChar', 'vNull', @@ -141,6 +141,19 @@ def isFunc(type): return getattr(type, 'kind', None) == 'function' +def tClass(context, name, members): + type = tPtr(context.get_identified_type(name)) + type.kind = 'class' + type.name = name + type.members = members + type.constructor = None + return type + +@extend_class(Type) +def isClass(type): + return getattr(type, 'kind', None) == 'class' + + def tVar(name): return VariableType(name) @@ -279,7 +292,7 @@ def show(type): return '*'.join(t.show() for t in type.elements) if type.isFunc(): return '->'.join(arg.type.show() for arg in type.args) + '->' + type.ret.show() - if type.isVar(): + if type.isClass() or type.isVar(): return type.name if type == tUnknown: return '' From 58c9eeaa54b050e64535d6004edc555ed362fd89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sat, 30 Nov 2019 19:13:09 +0100 Subject: [PATCH 075/100] Class methods --- src/Pyxell.g4 | 3 +- src/antlr/Pyxell.interp | 2 +- src/antlr/PyxellParser.py | 894 ++++++++++++++++++--------------- src/antlr/PyxellVisitor.py | 5 + src/ast.py | 11 +- src/compiler.py | 47 +- test/good/classes/method06.out | 3 + test/good/classes/method06.px | 15 + 8 files changed, 561 insertions(+), 419 deletions(-) create mode 100644 test/good/classes/method06.out create mode 100644 test/good/classes/method06.px diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index a315415e..2c7a9f8c 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -38,7 +38,8 @@ func_arg ; class_member - : typ ID (':' tuple_expr) ? ';' # ClassField + : typ ID (':' tuple_expr)? ';' # ClassField + | 'func' ID '(' (func_arg ',')* func_arg? ')' (ret=typ)? 'def' block # ClassMethod ; block diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index 62e022bb..52138ee1 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -172,4 +172,4 @@ typ atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 76, 425, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 3, 2, 7, 2, 36, 10, 2, 12, 2, 14, 2, 39, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 47, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 57, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 62, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 68, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 73, 10, 4, 12, 4, 14, 4, 76, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 87, 10, 4, 5, 4, 89, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 94, 10, 5, 12, 5, 14, 5, 97, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 108, 10, 6, 12, 6, 14, 6, 111, 11, 6, 3, 6, 3, 6, 3, 6, 5, 6, 116, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 134, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 145, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 151, 10, 6, 12, 6, 14, 6, 154, 11, 6, 3, 6, 5, 6, 157, 10, 6, 3, 6, 3, 6, 5, 6, 161, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 167, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 6, 6, 174, 10, 6, 13, 6, 14, 6, 175, 3, 6, 3, 6, 5, 6, 180, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 186, 10, 7, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 192, 10, 8, 3, 8, 3, 8, 3, 9, 3, 9, 6, 9, 198, 10, 9, 13, 9, 14, 9, 199, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 214, 10, 10, 12, 10, 14, 10, 217, 11, 10, 3, 10, 5, 10, 220, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 6, 10, 226, 10, 10, 13, 10, 14, 10, 227, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 239, 10, 10, 12, 10, 14, 10, 242, 11, 10, 3, 10, 5, 10, 245, 10, 10, 3, 10, 3, 10, 5, 10, 249, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 298, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 307, 10, 10, 3, 10, 3, 10, 5, 10, 311, 10, 10, 3, 10, 3, 10, 5, 10, 315, 10, 10, 5, 10, 317, 10, 10, 3, 10, 3, 10, 3, 10, 5, 10, 322, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 331, 10, 10, 12, 10, 14, 10, 334, 11, 10, 3, 10, 5, 10, 337, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 344, 10, 10, 12, 10, 14, 10, 347, 11, 10, 3, 11, 3, 11, 3, 11, 7, 11, 352, 10, 11, 12, 11, 14, 11, 355, 11, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 368, 10, 13, 3, 13, 3, 13, 5, 13, 372, 10, 13, 3, 14, 3, 14, 5, 14, 376, 10, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 387, 10, 15, 3, 16, 3, 16, 7, 16, 391, 10, 16, 12, 16, 14, 16, 394, 11, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 5, 17, 410, 10, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 7, 17, 420, 10, 17, 12, 17, 14, 17, 423, 11, 17, 3, 17, 2, 4, 18, 32, 18, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 2, 12, 3, 2, 11, 22, 3, 2, 23, 24, 4, 2, 15, 16, 52, 52, 3, 2, 12, 14, 3, 2, 15, 16, 3, 2, 17, 18, 3, 2, 53, 54, 3, 2, 55, 56, 4, 2, 37, 38, 57, 60, 3, 2, 66, 67, 2, 498, 2, 37, 3, 2, 2, 2, 4, 46, 3, 2, 2, 2, 6, 88, 3, 2, 2, 2, 8, 90, 3, 2, 2, 2, 10, 179, 3, 2, 2, 2, 12, 181, 3, 2, 2, 2, 14, 187, 3, 2, 2, 2, 16, 195, 3, 2, 2, 2, 18, 248, 3, 2, 2, 2, 20, 353, 3, 2, 2, 2, 22, 358, 3, 2, 2, 2, 24, 371, 3, 2, 2, 2, 26, 375, 3, 2, 2, 2, 28, 386, 3, 2, 2, 2, 30, 392, 3, 2, 2, 2, 32, 409, 3, 2, 2, 2, 34, 36, 5, 4, 3, 2, 35, 34, 3, 2, 2, 2, 36, 39, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 37, 38, 3, 2, 2, 2, 38, 40, 3, 2, 2, 2, 39, 37, 3, 2, 2, 2, 40, 41, 7, 2, 2, 3, 41, 3, 3, 2, 2, 2, 42, 43, 5, 6, 4, 2, 43, 44, 7, 3, 2, 2, 44, 47, 3, 2, 2, 2, 45, 47, 5, 10, 6, 2, 46, 42, 3, 2, 2, 2, 46, 45, 3, 2, 2, 2, 47, 5, 3, 2, 2, 2, 48, 49, 7, 4, 2, 2, 49, 56, 7, 73, 2, 2, 50, 51, 7, 5, 2, 2, 51, 57, 5, 30, 16, 2, 52, 53, 7, 6, 2, 2, 53, 57, 5, 30, 16, 2, 54, 55, 7, 7, 2, 2, 55, 57, 7, 73, 2, 2, 56, 50, 3, 2, 2, 2, 56, 52, 3, 2, 2, 2, 56, 54, 3, 2, 2, 2, 56, 57, 3, 2, 2, 2, 57, 89, 3, 2, 2, 2, 58, 89, 7, 8, 2, 2, 59, 61, 7, 9, 2, 2, 60, 62, 5, 20, 11, 2, 61, 60, 3, 2, 2, 2, 61, 62, 3, 2, 2, 2, 62, 89, 3, 2, 2, 2, 63, 64, 5, 32, 17, 2, 64, 67, 7, 73, 2, 2, 65, 66, 7, 10, 2, 2, 66, 68, 5, 20, 11, 2, 67, 65, 3, 2, 2, 2, 67, 68, 3, 2, 2, 2, 68, 89, 3, 2, 2, 2, 69, 70, 5, 8, 5, 2, 70, 71, 7, 10, 2, 2, 71, 73, 3, 2, 2, 2, 72, 69, 3, 2, 2, 2, 73, 76, 3, 2, 2, 2, 74, 72, 3, 2, 2, 2, 74, 75, 3, 2, 2, 2, 75, 77, 3, 2, 2, 2, 76, 74, 3, 2, 2, 2, 77, 89, 5, 20, 11, 2, 78, 79, 5, 18, 10, 2, 79, 80, 9, 2, 2, 2, 80, 81, 7, 10, 2, 2, 81, 82, 5, 18, 10, 2, 82, 89, 3, 2, 2, 2, 83, 89, 9, 3, 2, 2, 84, 86, 7, 25, 2, 2, 85, 87, 5, 20, 11, 2, 86, 85, 3, 2, 2, 2, 86, 87, 3, 2, 2, 2, 87, 89, 3, 2, 2, 2, 88, 48, 3, 2, 2, 2, 88, 58, 3, 2, 2, 2, 88, 59, 3, 2, 2, 2, 88, 63, 3, 2, 2, 2, 88, 74, 3, 2, 2, 2, 88, 78, 3, 2, 2, 2, 88, 83, 3, 2, 2, 2, 88, 84, 3, 2, 2, 2, 89, 7, 3, 2, 2, 2, 90, 95, 5, 18, 10, 2, 91, 92, 7, 26, 2, 2, 92, 94, 5, 18, 10, 2, 93, 91, 3, 2, 2, 2, 94, 97, 3, 2, 2, 2, 95, 93, 3, 2, 2, 2, 95, 96, 3, 2, 2, 2, 96, 9, 3, 2, 2, 2, 97, 95, 3, 2, 2, 2, 98, 99, 7, 27, 2, 2, 99, 100, 5, 18, 10, 2, 100, 101, 7, 28, 2, 2, 101, 109, 5, 16, 9, 2, 102, 103, 7, 29, 2, 2, 103, 104, 5, 18, 10, 2, 104, 105, 7, 28, 2, 2, 105, 106, 5, 16, 9, 2, 106, 108, 3, 2, 2, 2, 107, 102, 3, 2, 2, 2, 108, 111, 3, 2, 2, 2, 109, 107, 3, 2, 2, 2, 109, 110, 3, 2, 2, 2, 110, 115, 3, 2, 2, 2, 111, 109, 3, 2, 2, 2, 112, 113, 7, 30, 2, 2, 113, 114, 7, 28, 2, 2, 114, 116, 5, 16, 9, 2, 115, 112, 3, 2, 2, 2, 115, 116, 3, 2, 2, 2, 116, 180, 3, 2, 2, 2, 117, 118, 7, 31, 2, 2, 118, 119, 5, 18, 10, 2, 119, 120, 7, 28, 2, 2, 120, 121, 5, 16, 9, 2, 121, 180, 3, 2, 2, 2, 122, 123, 7, 32, 2, 2, 123, 124, 5, 18, 10, 2, 124, 125, 7, 28, 2, 2, 125, 126, 5, 16, 9, 2, 126, 180, 3, 2, 2, 2, 127, 128, 7, 33, 2, 2, 128, 129, 5, 20, 11, 2, 129, 130, 7, 34, 2, 2, 130, 133, 5, 20, 11, 2, 131, 132, 7, 35, 2, 2, 132, 134, 5, 20, 11, 2, 133, 131, 3, 2, 2, 2, 133, 134, 3, 2, 2, 2, 134, 135, 3, 2, 2, 2, 135, 136, 7, 28, 2, 2, 136, 137, 5, 16, 9, 2, 137, 180, 3, 2, 2, 2, 138, 139, 7, 36, 2, 2, 139, 144, 7, 73, 2, 2, 140, 141, 7, 37, 2, 2, 141, 142, 5, 30, 16, 2, 142, 143, 7, 38, 2, 2, 143, 145, 3, 2, 2, 2, 144, 140, 3, 2, 2, 2, 144, 145, 3, 2, 2, 2, 145, 146, 3, 2, 2, 2, 146, 152, 7, 39, 2, 2, 147, 148, 5, 12, 7, 2, 148, 149, 7, 26, 2, 2, 149, 151, 3, 2, 2, 2, 150, 147, 3, 2, 2, 2, 151, 154, 3, 2, 2, 2, 152, 150, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 156, 3, 2, 2, 2, 154, 152, 3, 2, 2, 2, 155, 157, 5, 12, 7, 2, 156, 155, 3, 2, 2, 2, 156, 157, 3, 2, 2, 2, 157, 158, 3, 2, 2, 2, 158, 160, 7, 40, 2, 2, 159, 161, 5, 32, 17, 2, 160, 159, 3, 2, 2, 2, 160, 161, 3, 2, 2, 2, 161, 166, 3, 2, 2, 2, 162, 163, 7, 41, 2, 2, 163, 167, 5, 16, 9, 2, 164, 165, 7, 42, 2, 2, 165, 167, 7, 3, 2, 2, 166, 162, 3, 2, 2, 2, 166, 164, 3, 2, 2, 2, 167, 180, 3, 2, 2, 2, 168, 169, 7, 43, 2, 2, 169, 170, 7, 73, 2, 2, 170, 171, 7, 41, 2, 2, 171, 173, 7, 44, 2, 2, 172, 174, 5, 14, 8, 2, 173, 172, 3, 2, 2, 2, 174, 175, 3, 2, 2, 2, 175, 173, 3, 2, 2, 2, 175, 176, 3, 2, 2, 2, 176, 177, 3, 2, 2, 2, 177, 178, 7, 45, 2, 2, 178, 180, 3, 2, 2, 2, 179, 98, 3, 2, 2, 2, 179, 117, 3, 2, 2, 2, 179, 122, 3, 2, 2, 2, 179, 127, 3, 2, 2, 2, 179, 138, 3, 2, 2, 2, 179, 168, 3, 2, 2, 2, 180, 11, 3, 2, 2, 2, 181, 182, 5, 32, 17, 2, 182, 185, 7, 73, 2, 2, 183, 184, 7, 46, 2, 2, 184, 186, 5, 18, 10, 2, 185, 183, 3, 2, 2, 2, 185, 186, 3, 2, 2, 2, 186, 13, 3, 2, 2, 2, 187, 188, 5, 32, 17, 2, 188, 191, 7, 73, 2, 2, 189, 190, 7, 46, 2, 2, 190, 192, 5, 20, 11, 2, 191, 189, 3, 2, 2, 2, 191, 192, 3, 2, 2, 2, 192, 193, 3, 2, 2, 2, 193, 194, 7, 3, 2, 2, 194, 15, 3, 2, 2, 2, 195, 197, 7, 44, 2, 2, 196, 198, 5, 4, 3, 2, 197, 196, 3, 2, 2, 2, 198, 199, 3, 2, 2, 2, 199, 197, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 201, 3, 2, 2, 2, 201, 202, 7, 45, 2, 2, 202, 17, 3, 2, 2, 2, 203, 204, 8, 10, 1, 2, 204, 249, 5, 28, 15, 2, 205, 206, 7, 39, 2, 2, 206, 207, 5, 20, 11, 2, 207, 208, 7, 40, 2, 2, 208, 249, 3, 2, 2, 2, 209, 215, 7, 47, 2, 2, 210, 211, 5, 18, 10, 2, 211, 212, 7, 26, 2, 2, 212, 214, 3, 2, 2, 2, 213, 210, 3, 2, 2, 2, 214, 217, 3, 2, 2, 2, 215, 213, 3, 2, 2, 2, 215, 216, 3, 2, 2, 2, 216, 219, 3, 2, 2, 2, 217, 215, 3, 2, 2, 2, 218, 220, 5, 18, 10, 2, 219, 218, 3, 2, 2, 2, 219, 220, 3, 2, 2, 2, 220, 221, 3, 2, 2, 2, 221, 249, 7, 48, 2, 2, 222, 223, 7, 47, 2, 2, 223, 225, 5, 18, 10, 2, 224, 226, 5, 24, 13, 2, 225, 224, 3, 2, 2, 2, 226, 227, 3, 2, 2, 2, 227, 225, 3, 2, 2, 2, 227, 228, 3, 2, 2, 2, 228, 229, 3, 2, 2, 2, 229, 230, 7, 48, 2, 2, 230, 249, 3, 2, 2, 2, 231, 232, 9, 4, 2, 2, 232, 249, 5, 18, 10, 19, 233, 234, 7, 61, 2, 2, 234, 249, 5, 18, 10, 8, 235, 240, 7, 64, 2, 2, 236, 237, 7, 73, 2, 2, 237, 239, 7, 26, 2, 2, 238, 236, 3, 2, 2, 2, 239, 242, 3, 2, 2, 2, 240, 238, 3, 2, 2, 2, 240, 241, 3, 2, 2, 2, 241, 244, 3, 2, 2, 2, 242, 240, 3, 2, 2, 2, 243, 245, 7, 73, 2, 2, 244, 243, 3, 2, 2, 2, 244, 245, 3, 2, 2, 2, 245, 246, 3, 2, 2, 2, 246, 247, 7, 65, 2, 2, 247, 249, 5, 18, 10, 3, 248, 203, 3, 2, 2, 2, 248, 205, 3, 2, 2, 2, 248, 209, 3, 2, 2, 2, 248, 222, 3, 2, 2, 2, 248, 231, 3, 2, 2, 2, 248, 233, 3, 2, 2, 2, 248, 235, 3, 2, 2, 2, 249, 345, 3, 2, 2, 2, 250, 251, 12, 20, 2, 2, 251, 252, 7, 11, 2, 2, 252, 344, 5, 18, 10, 20, 253, 254, 12, 18, 2, 2, 254, 255, 9, 5, 2, 2, 255, 344, 5, 18, 10, 19, 256, 257, 12, 17, 2, 2, 257, 258, 9, 6, 2, 2, 258, 344, 5, 18, 10, 18, 259, 260, 12, 16, 2, 2, 260, 261, 9, 7, 2, 2, 261, 344, 5, 18, 10, 17, 262, 263, 12, 15, 2, 2, 263, 264, 7, 19, 2, 2, 264, 344, 5, 18, 10, 16, 265, 266, 12, 14, 2, 2, 266, 267, 7, 20, 2, 2, 267, 344, 5, 18, 10, 15, 268, 269, 12, 13, 2, 2, 269, 270, 7, 21, 2, 2, 270, 344, 5, 18, 10, 14, 271, 272, 12, 12, 2, 2, 272, 273, 9, 8, 2, 2, 273, 344, 5, 18, 10, 13, 274, 275, 12, 10, 2, 2, 275, 276, 9, 9, 2, 2, 276, 344, 5, 18, 10, 11, 277, 278, 12, 9, 2, 2, 278, 279, 9, 10, 2, 2, 279, 344, 5, 18, 10, 9, 280, 281, 12, 7, 2, 2, 281, 282, 7, 62, 2, 2, 282, 344, 5, 18, 10, 7, 283, 284, 12, 6, 2, 2, 284, 285, 7, 63, 2, 2, 285, 344, 5, 18, 10, 6, 286, 287, 12, 5, 2, 2, 287, 288, 7, 22, 2, 2, 288, 344, 5, 18, 10, 5, 289, 290, 12, 4, 2, 2, 290, 291, 7, 49, 2, 2, 291, 292, 5, 18, 10, 2, 292, 293, 7, 46, 2, 2, 293, 294, 5, 18, 10, 4, 294, 344, 3, 2, 2, 2, 295, 297, 12, 25, 2, 2, 296, 298, 7, 49, 2, 2, 297, 296, 3, 2, 2, 2, 297, 298, 3, 2, 2, 2, 298, 299, 3, 2, 2, 2, 299, 300, 7, 47, 2, 2, 300, 301, 5, 20, 11, 2, 301, 302, 7, 48, 2, 2, 302, 344, 3, 2, 2, 2, 303, 304, 12, 24, 2, 2, 304, 306, 7, 47, 2, 2, 305, 307, 5, 18, 10, 2, 306, 305, 3, 2, 2, 2, 306, 307, 3, 2, 2, 2, 307, 308, 3, 2, 2, 2, 308, 310, 7, 46, 2, 2, 309, 311, 5, 18, 10, 2, 310, 309, 3, 2, 2, 2, 310, 311, 3, 2, 2, 2, 311, 316, 3, 2, 2, 2, 312, 314, 7, 46, 2, 2, 313, 315, 5, 18, 10, 2, 314, 313, 3, 2, 2, 2, 314, 315, 3, 2, 2, 2, 315, 317, 3, 2, 2, 2, 316, 312, 3, 2, 2, 2, 316, 317, 3, 2, 2, 2, 317, 318, 3, 2, 2, 2, 318, 344, 7, 48, 2, 2, 319, 321, 12, 23, 2, 2, 320, 322, 7, 49, 2, 2, 321, 320, 3, 2, 2, 2, 321, 322, 3, 2, 2, 2, 322, 323, 3, 2, 2, 2, 323, 324, 7, 50, 2, 2, 324, 344, 7, 73, 2, 2, 325, 326, 12, 22, 2, 2, 326, 332, 7, 39, 2, 2, 327, 328, 5, 26, 14, 2, 328, 329, 7, 26, 2, 2, 329, 331, 3, 2, 2, 2, 330, 327, 3, 2, 2, 2, 331, 334, 3, 2, 2, 2, 332, 330, 3, 2, 2, 2, 332, 333, 3, 2, 2, 2, 333, 336, 3, 2, 2, 2, 334, 332, 3, 2, 2, 2, 335, 337, 5, 26, 14, 2, 336, 335, 3, 2, 2, 2, 336, 337, 3, 2, 2, 2, 337, 338, 3, 2, 2, 2, 338, 344, 7, 40, 2, 2, 339, 340, 12, 21, 2, 2, 340, 344, 7, 51, 2, 2, 341, 342, 12, 11, 2, 2, 342, 344, 7, 54, 2, 2, 343, 250, 3, 2, 2, 2, 343, 253, 3, 2, 2, 2, 343, 256, 3, 2, 2, 2, 343, 259, 3, 2, 2, 2, 343, 262, 3, 2, 2, 2, 343, 265, 3, 2, 2, 2, 343, 268, 3, 2, 2, 2, 343, 271, 3, 2, 2, 2, 343, 274, 3, 2, 2, 2, 343, 277, 3, 2, 2, 2, 343, 280, 3, 2, 2, 2, 343, 283, 3, 2, 2, 2, 343, 286, 3, 2, 2, 2, 343, 289, 3, 2, 2, 2, 343, 295, 3, 2, 2, 2, 343, 303, 3, 2, 2, 2, 343, 319, 3, 2, 2, 2, 343, 325, 3, 2, 2, 2, 343, 339, 3, 2, 2, 2, 343, 341, 3, 2, 2, 2, 344, 347, 3, 2, 2, 2, 345, 343, 3, 2, 2, 2, 345, 346, 3, 2, 2, 2, 346, 19, 3, 2, 2, 2, 347, 345, 3, 2, 2, 2, 348, 349, 5, 18, 10, 2, 349, 350, 7, 26, 2, 2, 350, 352, 3, 2, 2, 2, 351, 348, 3, 2, 2, 2, 352, 355, 3, 2, 2, 2, 353, 351, 3, 2, 2, 2, 353, 354, 3, 2, 2, 2, 354, 356, 3, 2, 2, 2, 355, 353, 3, 2, 2, 2, 356, 357, 5, 18, 10, 2, 357, 21, 3, 2, 2, 2, 358, 359, 5, 20, 11, 2, 359, 360, 7, 2, 2, 3, 360, 23, 3, 2, 2, 2, 361, 362, 7, 33, 2, 2, 362, 363, 5, 20, 11, 2, 363, 364, 7, 34, 2, 2, 364, 367, 5, 20, 11, 2, 365, 366, 7, 35, 2, 2, 366, 368, 5, 20, 11, 2, 367, 365, 3, 2, 2, 2, 367, 368, 3, 2, 2, 2, 368, 372, 3, 2, 2, 2, 369, 370, 7, 27, 2, 2, 370, 372, 5, 18, 10, 2, 371, 361, 3, 2, 2, 2, 371, 369, 3, 2, 2, 2, 372, 25, 3, 2, 2, 2, 373, 374, 7, 73, 2, 2, 374, 376, 7, 10, 2, 2, 375, 373, 3, 2, 2, 2, 375, 376, 3, 2, 2, 2, 376, 377, 3, 2, 2, 2, 377, 378, 5, 18, 10, 2, 378, 27, 3, 2, 2, 2, 379, 387, 7, 69, 2, 2, 380, 387, 7, 70, 2, 2, 381, 387, 9, 11, 2, 2, 382, 387, 7, 71, 2, 2, 383, 387, 7, 72, 2, 2, 384, 387, 7, 68, 2, 2, 385, 387, 7, 73, 2, 2, 386, 379, 3, 2, 2, 2, 386, 380, 3, 2, 2, 2, 386, 381, 3, 2, 2, 2, 386, 382, 3, 2, 2, 2, 386, 383, 3, 2, 2, 2, 386, 384, 3, 2, 2, 2, 386, 385, 3, 2, 2, 2, 387, 29, 3, 2, 2, 2, 388, 389, 7, 73, 2, 2, 389, 391, 7, 26, 2, 2, 390, 388, 3, 2, 2, 2, 391, 394, 3, 2, 2, 2, 392, 390, 3, 2, 2, 2, 392, 393, 3, 2, 2, 2, 393, 395, 3, 2, 2, 2, 394, 392, 3, 2, 2, 2, 395, 396, 7, 73, 2, 2, 396, 31, 3, 2, 2, 2, 397, 398, 8, 17, 1, 2, 398, 410, 7, 73, 2, 2, 399, 400, 7, 39, 2, 2, 400, 401, 5, 32, 17, 2, 401, 402, 7, 40, 2, 2, 402, 410, 3, 2, 2, 2, 403, 404, 7, 47, 2, 2, 404, 405, 5, 32, 17, 2, 405, 406, 7, 48, 2, 2, 406, 410, 3, 2, 2, 2, 407, 408, 7, 65, 2, 2, 408, 410, 5, 32, 17, 3, 409, 397, 3, 2, 2, 2, 409, 399, 3, 2, 2, 2, 409, 403, 3, 2, 2, 2, 409, 407, 3, 2, 2, 2, 410, 421, 3, 2, 2, 2, 411, 412, 12, 5, 2, 2, 412, 413, 7, 12, 2, 2, 413, 420, 5, 32, 17, 5, 414, 415, 12, 4, 2, 2, 415, 416, 7, 65, 2, 2, 416, 420, 5, 32, 17, 4, 417, 418, 12, 6, 2, 2, 418, 420, 7, 49, 2, 2, 419, 411, 3, 2, 2, 2, 419, 414, 3, 2, 2, 2, 419, 417, 3, 2, 2, 2, 420, 423, 3, 2, 2, 2, 421, 419, 3, 2, 2, 2, 421, 422, 3, 2, 2, 2, 422, 33, 3, 2, 2, 2, 423, 421, 3, 2, 2, 2, 49, 37, 46, 56, 61, 67, 74, 86, 88, 95, 109, 115, 133, 144, 152, 156, 160, 166, 175, 179, 185, 191, 199, 215, 219, 227, 240, 244, 248, 297, 306, 310, 314, 316, 321, 332, 336, 343, 345, 353, 367, 371, 375, 386, 392, 409, 419, 421] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 76, 447, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 3, 2, 7, 2, 36, 10, 2, 12, 2, 14, 2, 39, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 47, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 57, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 62, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 68, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 73, 10, 4, 12, 4, 14, 4, 76, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 87, 10, 4, 5, 4, 89, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 94, 10, 5, 12, 5, 14, 5, 97, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 108, 10, 6, 12, 6, 14, 6, 111, 11, 6, 3, 6, 3, 6, 3, 6, 5, 6, 116, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 134, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 145, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 151, 10, 6, 12, 6, 14, 6, 154, 11, 6, 3, 6, 5, 6, 157, 10, 6, 3, 6, 3, 6, 5, 6, 161, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 167, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 6, 6, 174, 10, 6, 13, 6, 14, 6, 175, 3, 6, 3, 6, 5, 6, 180, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 186, 10, 7, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 192, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 202, 10, 8, 12, 8, 14, 8, 205, 11, 8, 3, 8, 5, 8, 208, 10, 8, 3, 8, 3, 8, 5, 8, 212, 10, 8, 3, 8, 3, 8, 5, 8, 216, 10, 8, 3, 9, 3, 9, 6, 9, 220, 10, 9, 13, 9, 14, 9, 221, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 236, 10, 10, 12, 10, 14, 10, 239, 11, 10, 3, 10, 5, 10, 242, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 6, 10, 248, 10, 10, 13, 10, 14, 10, 249, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 261, 10, 10, 12, 10, 14, 10, 264, 11, 10, 3, 10, 5, 10, 267, 10, 10, 3, 10, 3, 10, 5, 10, 271, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 320, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 329, 10, 10, 3, 10, 3, 10, 5, 10, 333, 10, 10, 3, 10, 3, 10, 5, 10, 337, 10, 10, 5, 10, 339, 10, 10, 3, 10, 3, 10, 3, 10, 5, 10, 344, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 353, 10, 10, 12, 10, 14, 10, 356, 11, 10, 3, 10, 5, 10, 359, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 366, 10, 10, 12, 10, 14, 10, 369, 11, 10, 3, 11, 3, 11, 3, 11, 7, 11, 374, 10, 11, 12, 11, 14, 11, 377, 11, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 390, 10, 13, 3, 13, 3, 13, 5, 13, 394, 10, 13, 3, 14, 3, 14, 5, 14, 398, 10, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 409, 10, 15, 3, 16, 3, 16, 7, 16, 413, 10, 16, 12, 16, 14, 16, 416, 11, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 5, 17, 432, 10, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 7, 17, 442, 10, 17, 12, 17, 14, 17, 445, 11, 17, 3, 17, 2, 4, 18, 32, 18, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 2, 12, 3, 2, 11, 22, 3, 2, 23, 24, 4, 2, 15, 16, 52, 52, 3, 2, 12, 14, 3, 2, 15, 16, 3, 2, 17, 18, 3, 2, 53, 54, 3, 2, 55, 56, 4, 2, 37, 38, 57, 60, 3, 2, 66, 67, 2, 524, 2, 37, 3, 2, 2, 2, 4, 46, 3, 2, 2, 2, 6, 88, 3, 2, 2, 2, 8, 90, 3, 2, 2, 2, 10, 179, 3, 2, 2, 2, 12, 181, 3, 2, 2, 2, 14, 215, 3, 2, 2, 2, 16, 217, 3, 2, 2, 2, 18, 270, 3, 2, 2, 2, 20, 375, 3, 2, 2, 2, 22, 380, 3, 2, 2, 2, 24, 393, 3, 2, 2, 2, 26, 397, 3, 2, 2, 2, 28, 408, 3, 2, 2, 2, 30, 414, 3, 2, 2, 2, 32, 431, 3, 2, 2, 2, 34, 36, 5, 4, 3, 2, 35, 34, 3, 2, 2, 2, 36, 39, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 37, 38, 3, 2, 2, 2, 38, 40, 3, 2, 2, 2, 39, 37, 3, 2, 2, 2, 40, 41, 7, 2, 2, 3, 41, 3, 3, 2, 2, 2, 42, 43, 5, 6, 4, 2, 43, 44, 7, 3, 2, 2, 44, 47, 3, 2, 2, 2, 45, 47, 5, 10, 6, 2, 46, 42, 3, 2, 2, 2, 46, 45, 3, 2, 2, 2, 47, 5, 3, 2, 2, 2, 48, 49, 7, 4, 2, 2, 49, 56, 7, 73, 2, 2, 50, 51, 7, 5, 2, 2, 51, 57, 5, 30, 16, 2, 52, 53, 7, 6, 2, 2, 53, 57, 5, 30, 16, 2, 54, 55, 7, 7, 2, 2, 55, 57, 7, 73, 2, 2, 56, 50, 3, 2, 2, 2, 56, 52, 3, 2, 2, 2, 56, 54, 3, 2, 2, 2, 56, 57, 3, 2, 2, 2, 57, 89, 3, 2, 2, 2, 58, 89, 7, 8, 2, 2, 59, 61, 7, 9, 2, 2, 60, 62, 5, 20, 11, 2, 61, 60, 3, 2, 2, 2, 61, 62, 3, 2, 2, 2, 62, 89, 3, 2, 2, 2, 63, 64, 5, 32, 17, 2, 64, 67, 7, 73, 2, 2, 65, 66, 7, 10, 2, 2, 66, 68, 5, 20, 11, 2, 67, 65, 3, 2, 2, 2, 67, 68, 3, 2, 2, 2, 68, 89, 3, 2, 2, 2, 69, 70, 5, 8, 5, 2, 70, 71, 7, 10, 2, 2, 71, 73, 3, 2, 2, 2, 72, 69, 3, 2, 2, 2, 73, 76, 3, 2, 2, 2, 74, 72, 3, 2, 2, 2, 74, 75, 3, 2, 2, 2, 75, 77, 3, 2, 2, 2, 76, 74, 3, 2, 2, 2, 77, 89, 5, 20, 11, 2, 78, 79, 5, 18, 10, 2, 79, 80, 9, 2, 2, 2, 80, 81, 7, 10, 2, 2, 81, 82, 5, 18, 10, 2, 82, 89, 3, 2, 2, 2, 83, 89, 9, 3, 2, 2, 84, 86, 7, 25, 2, 2, 85, 87, 5, 20, 11, 2, 86, 85, 3, 2, 2, 2, 86, 87, 3, 2, 2, 2, 87, 89, 3, 2, 2, 2, 88, 48, 3, 2, 2, 2, 88, 58, 3, 2, 2, 2, 88, 59, 3, 2, 2, 2, 88, 63, 3, 2, 2, 2, 88, 74, 3, 2, 2, 2, 88, 78, 3, 2, 2, 2, 88, 83, 3, 2, 2, 2, 88, 84, 3, 2, 2, 2, 89, 7, 3, 2, 2, 2, 90, 95, 5, 18, 10, 2, 91, 92, 7, 26, 2, 2, 92, 94, 5, 18, 10, 2, 93, 91, 3, 2, 2, 2, 94, 97, 3, 2, 2, 2, 95, 93, 3, 2, 2, 2, 95, 96, 3, 2, 2, 2, 96, 9, 3, 2, 2, 2, 97, 95, 3, 2, 2, 2, 98, 99, 7, 27, 2, 2, 99, 100, 5, 18, 10, 2, 100, 101, 7, 28, 2, 2, 101, 109, 5, 16, 9, 2, 102, 103, 7, 29, 2, 2, 103, 104, 5, 18, 10, 2, 104, 105, 7, 28, 2, 2, 105, 106, 5, 16, 9, 2, 106, 108, 3, 2, 2, 2, 107, 102, 3, 2, 2, 2, 108, 111, 3, 2, 2, 2, 109, 107, 3, 2, 2, 2, 109, 110, 3, 2, 2, 2, 110, 115, 3, 2, 2, 2, 111, 109, 3, 2, 2, 2, 112, 113, 7, 30, 2, 2, 113, 114, 7, 28, 2, 2, 114, 116, 5, 16, 9, 2, 115, 112, 3, 2, 2, 2, 115, 116, 3, 2, 2, 2, 116, 180, 3, 2, 2, 2, 117, 118, 7, 31, 2, 2, 118, 119, 5, 18, 10, 2, 119, 120, 7, 28, 2, 2, 120, 121, 5, 16, 9, 2, 121, 180, 3, 2, 2, 2, 122, 123, 7, 32, 2, 2, 123, 124, 5, 18, 10, 2, 124, 125, 7, 28, 2, 2, 125, 126, 5, 16, 9, 2, 126, 180, 3, 2, 2, 2, 127, 128, 7, 33, 2, 2, 128, 129, 5, 20, 11, 2, 129, 130, 7, 34, 2, 2, 130, 133, 5, 20, 11, 2, 131, 132, 7, 35, 2, 2, 132, 134, 5, 20, 11, 2, 133, 131, 3, 2, 2, 2, 133, 134, 3, 2, 2, 2, 134, 135, 3, 2, 2, 2, 135, 136, 7, 28, 2, 2, 136, 137, 5, 16, 9, 2, 137, 180, 3, 2, 2, 2, 138, 139, 7, 36, 2, 2, 139, 144, 7, 73, 2, 2, 140, 141, 7, 37, 2, 2, 141, 142, 5, 30, 16, 2, 142, 143, 7, 38, 2, 2, 143, 145, 3, 2, 2, 2, 144, 140, 3, 2, 2, 2, 144, 145, 3, 2, 2, 2, 145, 146, 3, 2, 2, 2, 146, 152, 7, 39, 2, 2, 147, 148, 5, 12, 7, 2, 148, 149, 7, 26, 2, 2, 149, 151, 3, 2, 2, 2, 150, 147, 3, 2, 2, 2, 151, 154, 3, 2, 2, 2, 152, 150, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 156, 3, 2, 2, 2, 154, 152, 3, 2, 2, 2, 155, 157, 5, 12, 7, 2, 156, 155, 3, 2, 2, 2, 156, 157, 3, 2, 2, 2, 157, 158, 3, 2, 2, 2, 158, 160, 7, 40, 2, 2, 159, 161, 5, 32, 17, 2, 160, 159, 3, 2, 2, 2, 160, 161, 3, 2, 2, 2, 161, 166, 3, 2, 2, 2, 162, 163, 7, 41, 2, 2, 163, 167, 5, 16, 9, 2, 164, 165, 7, 42, 2, 2, 165, 167, 7, 3, 2, 2, 166, 162, 3, 2, 2, 2, 166, 164, 3, 2, 2, 2, 167, 180, 3, 2, 2, 2, 168, 169, 7, 43, 2, 2, 169, 170, 7, 73, 2, 2, 170, 171, 7, 41, 2, 2, 171, 173, 7, 44, 2, 2, 172, 174, 5, 14, 8, 2, 173, 172, 3, 2, 2, 2, 174, 175, 3, 2, 2, 2, 175, 173, 3, 2, 2, 2, 175, 176, 3, 2, 2, 2, 176, 177, 3, 2, 2, 2, 177, 178, 7, 45, 2, 2, 178, 180, 3, 2, 2, 2, 179, 98, 3, 2, 2, 2, 179, 117, 3, 2, 2, 2, 179, 122, 3, 2, 2, 2, 179, 127, 3, 2, 2, 2, 179, 138, 3, 2, 2, 2, 179, 168, 3, 2, 2, 2, 180, 11, 3, 2, 2, 2, 181, 182, 5, 32, 17, 2, 182, 185, 7, 73, 2, 2, 183, 184, 7, 46, 2, 2, 184, 186, 5, 18, 10, 2, 185, 183, 3, 2, 2, 2, 185, 186, 3, 2, 2, 2, 186, 13, 3, 2, 2, 2, 187, 188, 5, 32, 17, 2, 188, 191, 7, 73, 2, 2, 189, 190, 7, 46, 2, 2, 190, 192, 5, 20, 11, 2, 191, 189, 3, 2, 2, 2, 191, 192, 3, 2, 2, 2, 192, 193, 3, 2, 2, 2, 193, 194, 7, 3, 2, 2, 194, 216, 3, 2, 2, 2, 195, 196, 7, 36, 2, 2, 196, 197, 7, 73, 2, 2, 197, 203, 7, 39, 2, 2, 198, 199, 5, 12, 7, 2, 199, 200, 7, 26, 2, 2, 200, 202, 3, 2, 2, 2, 201, 198, 3, 2, 2, 2, 202, 205, 3, 2, 2, 2, 203, 201, 3, 2, 2, 2, 203, 204, 3, 2, 2, 2, 204, 207, 3, 2, 2, 2, 205, 203, 3, 2, 2, 2, 206, 208, 5, 12, 7, 2, 207, 206, 3, 2, 2, 2, 207, 208, 3, 2, 2, 2, 208, 209, 3, 2, 2, 2, 209, 211, 7, 40, 2, 2, 210, 212, 5, 32, 17, 2, 211, 210, 3, 2, 2, 2, 211, 212, 3, 2, 2, 2, 212, 213, 3, 2, 2, 2, 213, 214, 7, 41, 2, 2, 214, 216, 5, 16, 9, 2, 215, 187, 3, 2, 2, 2, 215, 195, 3, 2, 2, 2, 216, 15, 3, 2, 2, 2, 217, 219, 7, 44, 2, 2, 218, 220, 5, 4, 3, 2, 219, 218, 3, 2, 2, 2, 220, 221, 3, 2, 2, 2, 221, 219, 3, 2, 2, 2, 221, 222, 3, 2, 2, 2, 222, 223, 3, 2, 2, 2, 223, 224, 7, 45, 2, 2, 224, 17, 3, 2, 2, 2, 225, 226, 8, 10, 1, 2, 226, 271, 5, 28, 15, 2, 227, 228, 7, 39, 2, 2, 228, 229, 5, 20, 11, 2, 229, 230, 7, 40, 2, 2, 230, 271, 3, 2, 2, 2, 231, 237, 7, 47, 2, 2, 232, 233, 5, 18, 10, 2, 233, 234, 7, 26, 2, 2, 234, 236, 3, 2, 2, 2, 235, 232, 3, 2, 2, 2, 236, 239, 3, 2, 2, 2, 237, 235, 3, 2, 2, 2, 237, 238, 3, 2, 2, 2, 238, 241, 3, 2, 2, 2, 239, 237, 3, 2, 2, 2, 240, 242, 5, 18, 10, 2, 241, 240, 3, 2, 2, 2, 241, 242, 3, 2, 2, 2, 242, 243, 3, 2, 2, 2, 243, 271, 7, 48, 2, 2, 244, 245, 7, 47, 2, 2, 245, 247, 5, 18, 10, 2, 246, 248, 5, 24, 13, 2, 247, 246, 3, 2, 2, 2, 248, 249, 3, 2, 2, 2, 249, 247, 3, 2, 2, 2, 249, 250, 3, 2, 2, 2, 250, 251, 3, 2, 2, 2, 251, 252, 7, 48, 2, 2, 252, 271, 3, 2, 2, 2, 253, 254, 9, 4, 2, 2, 254, 271, 5, 18, 10, 19, 255, 256, 7, 61, 2, 2, 256, 271, 5, 18, 10, 8, 257, 262, 7, 64, 2, 2, 258, 259, 7, 73, 2, 2, 259, 261, 7, 26, 2, 2, 260, 258, 3, 2, 2, 2, 261, 264, 3, 2, 2, 2, 262, 260, 3, 2, 2, 2, 262, 263, 3, 2, 2, 2, 263, 266, 3, 2, 2, 2, 264, 262, 3, 2, 2, 2, 265, 267, 7, 73, 2, 2, 266, 265, 3, 2, 2, 2, 266, 267, 3, 2, 2, 2, 267, 268, 3, 2, 2, 2, 268, 269, 7, 65, 2, 2, 269, 271, 5, 18, 10, 3, 270, 225, 3, 2, 2, 2, 270, 227, 3, 2, 2, 2, 270, 231, 3, 2, 2, 2, 270, 244, 3, 2, 2, 2, 270, 253, 3, 2, 2, 2, 270, 255, 3, 2, 2, 2, 270, 257, 3, 2, 2, 2, 271, 367, 3, 2, 2, 2, 272, 273, 12, 20, 2, 2, 273, 274, 7, 11, 2, 2, 274, 366, 5, 18, 10, 20, 275, 276, 12, 18, 2, 2, 276, 277, 9, 5, 2, 2, 277, 366, 5, 18, 10, 19, 278, 279, 12, 17, 2, 2, 279, 280, 9, 6, 2, 2, 280, 366, 5, 18, 10, 18, 281, 282, 12, 16, 2, 2, 282, 283, 9, 7, 2, 2, 283, 366, 5, 18, 10, 17, 284, 285, 12, 15, 2, 2, 285, 286, 7, 19, 2, 2, 286, 366, 5, 18, 10, 16, 287, 288, 12, 14, 2, 2, 288, 289, 7, 20, 2, 2, 289, 366, 5, 18, 10, 15, 290, 291, 12, 13, 2, 2, 291, 292, 7, 21, 2, 2, 292, 366, 5, 18, 10, 14, 293, 294, 12, 12, 2, 2, 294, 295, 9, 8, 2, 2, 295, 366, 5, 18, 10, 13, 296, 297, 12, 10, 2, 2, 297, 298, 9, 9, 2, 2, 298, 366, 5, 18, 10, 11, 299, 300, 12, 9, 2, 2, 300, 301, 9, 10, 2, 2, 301, 366, 5, 18, 10, 9, 302, 303, 12, 7, 2, 2, 303, 304, 7, 62, 2, 2, 304, 366, 5, 18, 10, 7, 305, 306, 12, 6, 2, 2, 306, 307, 7, 63, 2, 2, 307, 366, 5, 18, 10, 6, 308, 309, 12, 5, 2, 2, 309, 310, 7, 22, 2, 2, 310, 366, 5, 18, 10, 5, 311, 312, 12, 4, 2, 2, 312, 313, 7, 49, 2, 2, 313, 314, 5, 18, 10, 2, 314, 315, 7, 46, 2, 2, 315, 316, 5, 18, 10, 4, 316, 366, 3, 2, 2, 2, 317, 319, 12, 25, 2, 2, 318, 320, 7, 49, 2, 2, 319, 318, 3, 2, 2, 2, 319, 320, 3, 2, 2, 2, 320, 321, 3, 2, 2, 2, 321, 322, 7, 47, 2, 2, 322, 323, 5, 20, 11, 2, 323, 324, 7, 48, 2, 2, 324, 366, 3, 2, 2, 2, 325, 326, 12, 24, 2, 2, 326, 328, 7, 47, 2, 2, 327, 329, 5, 18, 10, 2, 328, 327, 3, 2, 2, 2, 328, 329, 3, 2, 2, 2, 329, 330, 3, 2, 2, 2, 330, 332, 7, 46, 2, 2, 331, 333, 5, 18, 10, 2, 332, 331, 3, 2, 2, 2, 332, 333, 3, 2, 2, 2, 333, 338, 3, 2, 2, 2, 334, 336, 7, 46, 2, 2, 335, 337, 5, 18, 10, 2, 336, 335, 3, 2, 2, 2, 336, 337, 3, 2, 2, 2, 337, 339, 3, 2, 2, 2, 338, 334, 3, 2, 2, 2, 338, 339, 3, 2, 2, 2, 339, 340, 3, 2, 2, 2, 340, 366, 7, 48, 2, 2, 341, 343, 12, 23, 2, 2, 342, 344, 7, 49, 2, 2, 343, 342, 3, 2, 2, 2, 343, 344, 3, 2, 2, 2, 344, 345, 3, 2, 2, 2, 345, 346, 7, 50, 2, 2, 346, 366, 7, 73, 2, 2, 347, 348, 12, 22, 2, 2, 348, 354, 7, 39, 2, 2, 349, 350, 5, 26, 14, 2, 350, 351, 7, 26, 2, 2, 351, 353, 3, 2, 2, 2, 352, 349, 3, 2, 2, 2, 353, 356, 3, 2, 2, 2, 354, 352, 3, 2, 2, 2, 354, 355, 3, 2, 2, 2, 355, 358, 3, 2, 2, 2, 356, 354, 3, 2, 2, 2, 357, 359, 5, 26, 14, 2, 358, 357, 3, 2, 2, 2, 358, 359, 3, 2, 2, 2, 359, 360, 3, 2, 2, 2, 360, 366, 7, 40, 2, 2, 361, 362, 12, 21, 2, 2, 362, 366, 7, 51, 2, 2, 363, 364, 12, 11, 2, 2, 364, 366, 7, 54, 2, 2, 365, 272, 3, 2, 2, 2, 365, 275, 3, 2, 2, 2, 365, 278, 3, 2, 2, 2, 365, 281, 3, 2, 2, 2, 365, 284, 3, 2, 2, 2, 365, 287, 3, 2, 2, 2, 365, 290, 3, 2, 2, 2, 365, 293, 3, 2, 2, 2, 365, 296, 3, 2, 2, 2, 365, 299, 3, 2, 2, 2, 365, 302, 3, 2, 2, 2, 365, 305, 3, 2, 2, 2, 365, 308, 3, 2, 2, 2, 365, 311, 3, 2, 2, 2, 365, 317, 3, 2, 2, 2, 365, 325, 3, 2, 2, 2, 365, 341, 3, 2, 2, 2, 365, 347, 3, 2, 2, 2, 365, 361, 3, 2, 2, 2, 365, 363, 3, 2, 2, 2, 366, 369, 3, 2, 2, 2, 367, 365, 3, 2, 2, 2, 367, 368, 3, 2, 2, 2, 368, 19, 3, 2, 2, 2, 369, 367, 3, 2, 2, 2, 370, 371, 5, 18, 10, 2, 371, 372, 7, 26, 2, 2, 372, 374, 3, 2, 2, 2, 373, 370, 3, 2, 2, 2, 374, 377, 3, 2, 2, 2, 375, 373, 3, 2, 2, 2, 375, 376, 3, 2, 2, 2, 376, 378, 3, 2, 2, 2, 377, 375, 3, 2, 2, 2, 378, 379, 5, 18, 10, 2, 379, 21, 3, 2, 2, 2, 380, 381, 5, 20, 11, 2, 381, 382, 7, 2, 2, 3, 382, 23, 3, 2, 2, 2, 383, 384, 7, 33, 2, 2, 384, 385, 5, 20, 11, 2, 385, 386, 7, 34, 2, 2, 386, 389, 5, 20, 11, 2, 387, 388, 7, 35, 2, 2, 388, 390, 5, 20, 11, 2, 389, 387, 3, 2, 2, 2, 389, 390, 3, 2, 2, 2, 390, 394, 3, 2, 2, 2, 391, 392, 7, 27, 2, 2, 392, 394, 5, 18, 10, 2, 393, 383, 3, 2, 2, 2, 393, 391, 3, 2, 2, 2, 394, 25, 3, 2, 2, 2, 395, 396, 7, 73, 2, 2, 396, 398, 7, 10, 2, 2, 397, 395, 3, 2, 2, 2, 397, 398, 3, 2, 2, 2, 398, 399, 3, 2, 2, 2, 399, 400, 5, 18, 10, 2, 400, 27, 3, 2, 2, 2, 401, 409, 7, 69, 2, 2, 402, 409, 7, 70, 2, 2, 403, 409, 9, 11, 2, 2, 404, 409, 7, 71, 2, 2, 405, 409, 7, 72, 2, 2, 406, 409, 7, 68, 2, 2, 407, 409, 7, 73, 2, 2, 408, 401, 3, 2, 2, 2, 408, 402, 3, 2, 2, 2, 408, 403, 3, 2, 2, 2, 408, 404, 3, 2, 2, 2, 408, 405, 3, 2, 2, 2, 408, 406, 3, 2, 2, 2, 408, 407, 3, 2, 2, 2, 409, 29, 3, 2, 2, 2, 410, 411, 7, 73, 2, 2, 411, 413, 7, 26, 2, 2, 412, 410, 3, 2, 2, 2, 413, 416, 3, 2, 2, 2, 414, 412, 3, 2, 2, 2, 414, 415, 3, 2, 2, 2, 415, 417, 3, 2, 2, 2, 416, 414, 3, 2, 2, 2, 417, 418, 7, 73, 2, 2, 418, 31, 3, 2, 2, 2, 419, 420, 8, 17, 1, 2, 420, 432, 7, 73, 2, 2, 421, 422, 7, 39, 2, 2, 422, 423, 5, 32, 17, 2, 423, 424, 7, 40, 2, 2, 424, 432, 3, 2, 2, 2, 425, 426, 7, 47, 2, 2, 426, 427, 5, 32, 17, 2, 427, 428, 7, 48, 2, 2, 428, 432, 3, 2, 2, 2, 429, 430, 7, 65, 2, 2, 430, 432, 5, 32, 17, 3, 431, 419, 3, 2, 2, 2, 431, 421, 3, 2, 2, 2, 431, 425, 3, 2, 2, 2, 431, 429, 3, 2, 2, 2, 432, 443, 3, 2, 2, 2, 433, 434, 12, 5, 2, 2, 434, 435, 7, 12, 2, 2, 435, 442, 5, 32, 17, 5, 436, 437, 12, 4, 2, 2, 437, 438, 7, 65, 2, 2, 438, 442, 5, 32, 17, 4, 439, 440, 12, 6, 2, 2, 440, 442, 7, 49, 2, 2, 441, 433, 3, 2, 2, 2, 441, 436, 3, 2, 2, 2, 441, 439, 3, 2, 2, 2, 442, 445, 3, 2, 2, 2, 443, 441, 3, 2, 2, 2, 443, 444, 3, 2, 2, 2, 444, 33, 3, 2, 2, 2, 445, 443, 3, 2, 2, 2, 53, 37, 46, 56, 61, 67, 74, 86, 88, 95, 109, 115, 133, 144, 152, 156, 160, 166, 175, 179, 185, 191, 203, 207, 211, 215, 221, 237, 241, 249, 262, 266, 270, 319, 328, 332, 336, 338, 343, 354, 358, 365, 367, 375, 389, 393, 397, 408, 414, 431, 441, 443] \ No newline at end of file diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index fe0e129a..fabd2e06 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -9,7 +9,7 @@ def serializedATN(): with StringIO() as buf: buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3L") - buf.write("\u01a9\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\u01bf\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16") buf.write("\t\16\4\17\t\17\4\20\t\20\4\21\t\21\3\2\7\2$\n\2\f\2\16") buf.write("\2\'\13\2\3\2\3\2\3\3\3\3\3\3\3\3\5\3/\n\3\3\4\3\4\3\4") @@ -25,198 +25,210 @@ def serializedATN(): buf.write("\u00a1\n\6\3\6\3\6\3\6\3\6\5\6\u00a7\n\6\3\6\3\6\3\6\3") buf.write("\6\3\6\6\6\u00ae\n\6\r\6\16\6\u00af\3\6\3\6\5\6\u00b4") buf.write("\n\6\3\7\3\7\3\7\3\7\5\7\u00ba\n\7\3\b\3\b\3\b\3\b\5\b") - buf.write("\u00c0\n\b\3\b\3\b\3\t\3\t\6\t\u00c6\n\t\r\t\16\t\u00c7") - buf.write("\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\7\n\u00d6") - buf.write("\n\n\f\n\16\n\u00d9\13\n\3\n\5\n\u00dc\n\n\3\n\3\n\3\n") - buf.write("\3\n\6\n\u00e2\n\n\r\n\16\n\u00e3\3\n\3\n\3\n\3\n\3\n") - buf.write("\3\n\3\n\3\n\3\n\7\n\u00ef\n\n\f\n\16\n\u00f2\13\n\3\n") - buf.write("\5\n\u00f5\n\n\3\n\3\n\5\n\u00f9\n\n\3\n\3\n\3\n\3\n\3") - buf.write("\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n") + buf.write("\u00c0\n\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\7\b\u00ca\n") + buf.write("\b\f\b\16\b\u00cd\13\b\3\b\5\b\u00d0\n\b\3\b\3\b\5\b\u00d4") + buf.write("\n\b\3\b\3\b\5\b\u00d8\n\b\3\t\3\t\6\t\u00dc\n\t\r\t\16") + buf.write("\t\u00dd\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3") + buf.write("\n\7\n\u00ec\n\n\f\n\16\n\u00ef\13\n\3\n\5\n\u00f2\n\n") + buf.write("\3\n\3\n\3\n\3\n\6\n\u00f8\n\n\r\n\16\n\u00f9\3\n\3\n") + buf.write("\3\n\3\n\3\n\3\n\3\n\3\n\3\n\7\n\u0105\n\n\f\n\16\n\u0108") + buf.write("\13\n\3\n\5\n\u010b\n\n\3\n\3\n\5\n\u010f\n\n\3\n\3\n") buf.write("\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3") buf.write("\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n") - buf.write("\3\n\3\n\5\n\u012a\n\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\5\n") - buf.write("\u0133\n\n\3\n\3\n\5\n\u0137\n\n\3\n\3\n\5\n\u013b\n\n") - buf.write("\5\n\u013d\n\n\3\n\3\n\3\n\5\n\u0142\n\n\3\n\3\n\3\n\3") - buf.write("\n\3\n\3\n\3\n\7\n\u014b\n\n\f\n\16\n\u014e\13\n\3\n\5") - buf.write("\n\u0151\n\n\3\n\3\n\3\n\3\n\3\n\7\n\u0158\n\n\f\n\16") - buf.write("\n\u015b\13\n\3\13\3\13\3\13\7\13\u0160\n\13\f\13\16\13") - buf.write("\u0163\13\13\3\13\3\13\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r") - buf.write("\3\r\5\r\u0170\n\r\3\r\3\r\5\r\u0174\n\r\3\16\3\16\5\16") - buf.write("\u0178\n\16\3\16\3\16\3\17\3\17\3\17\3\17\3\17\3\17\3") - buf.write("\17\5\17\u0183\n\17\3\20\3\20\7\20\u0187\n\20\f\20\16") - buf.write("\20\u018a\13\20\3\20\3\20\3\21\3\21\3\21\3\21\3\21\3\21") - buf.write("\3\21\3\21\3\21\3\21\3\21\3\21\5\21\u019a\n\21\3\21\3") - buf.write("\21\3\21\3\21\3\21\3\21\3\21\3\21\7\21\u01a4\n\21\f\21") - buf.write("\16\21\u01a7\13\21\3\21\2\4\22 \22\2\4\6\b\n\f\16\20\22") - buf.write("\24\26\30\32\34\36 \2\f\3\2\13\26\3\2\27\30\4\2\17\20") - buf.write("\64\64\3\2\f\16\3\2\17\20\3\2\21\22\3\2\65\66\3\2\678") - buf.write("\4\2%&9<\3\2BC\2\u01f2\2%\3\2\2\2\4.\3\2\2\2\6X\3\2\2") - buf.write("\2\bZ\3\2\2\2\n\u00b3\3\2\2\2\f\u00b5\3\2\2\2\16\u00bb") - buf.write("\3\2\2\2\20\u00c3\3\2\2\2\22\u00f8\3\2\2\2\24\u0161\3") - buf.write("\2\2\2\26\u0166\3\2\2\2\30\u0173\3\2\2\2\32\u0177\3\2") - buf.write("\2\2\34\u0182\3\2\2\2\36\u0188\3\2\2\2 \u0199\3\2\2\2") - buf.write("\"$\5\4\3\2#\"\3\2\2\2$\'\3\2\2\2%#\3\2\2\2%&\3\2\2\2") - buf.write("&(\3\2\2\2\'%\3\2\2\2()\7\2\2\3)\3\3\2\2\2*+\5\6\4\2+") - buf.write(",\7\3\2\2,/\3\2\2\2-/\5\n\6\2.*\3\2\2\2.-\3\2\2\2/\5\3") - buf.write("\2\2\2\60\61\7\4\2\2\618\7I\2\2\62\63\7\5\2\2\639\5\36") - buf.write("\20\2\64\65\7\6\2\2\659\5\36\20\2\66\67\7\7\2\2\679\7") - buf.write("I\2\28\62\3\2\2\28\64\3\2\2\28\66\3\2\2\289\3\2\2\29Y") - buf.write("\3\2\2\2:Y\7\b\2\2;=\7\t\2\2<>\5\24\13\2=<\3\2\2\2=>\3") - buf.write("\2\2\2>Y\3\2\2\2?@\5 \21\2@C\7I\2\2AB\7\n\2\2BD\5\24\13") - buf.write("\2CA\3\2\2\2CD\3\2\2\2DY\3\2\2\2EF\5\b\5\2FG\7\n\2\2G") - buf.write("I\3\2\2\2HE\3\2\2\2IL\3\2\2\2JH\3\2\2\2JK\3\2\2\2KM\3") - buf.write("\2\2\2LJ\3\2\2\2MY\5\24\13\2NO\5\22\n\2OP\t\2\2\2PQ\7") - buf.write("\n\2\2QR\5\22\n\2RY\3\2\2\2SY\t\3\2\2TV\7\31\2\2UW\5\24") - buf.write("\13\2VU\3\2\2\2VW\3\2\2\2WY\3\2\2\2X\60\3\2\2\2X:\3\2") - buf.write("\2\2X;\3\2\2\2X?\3\2\2\2XJ\3\2\2\2XN\3\2\2\2XS\3\2\2\2") - buf.write("XT\3\2\2\2Y\7\3\2\2\2Z_\5\22\n\2[\\\7\32\2\2\\^\5\22\n") - buf.write("\2][\3\2\2\2^a\3\2\2\2_]\3\2\2\2_`\3\2\2\2`\t\3\2\2\2") - buf.write("a_\3\2\2\2bc\7\33\2\2cd\5\22\n\2de\7\34\2\2em\5\20\t\2") - buf.write("fg\7\35\2\2gh\5\22\n\2hi\7\34\2\2ij\5\20\t\2jl\3\2\2\2") - buf.write("kf\3\2\2\2lo\3\2\2\2mk\3\2\2\2mn\3\2\2\2ns\3\2\2\2om\3") - buf.write("\2\2\2pq\7\36\2\2qr\7\34\2\2rt\5\20\t\2sp\3\2\2\2st\3") - buf.write("\2\2\2t\u00b4\3\2\2\2uv\7\37\2\2vw\5\22\n\2wx\7\34\2\2") - buf.write("xy\5\20\t\2y\u00b4\3\2\2\2z{\7 \2\2{|\5\22\n\2|}\7\34") - buf.write("\2\2}~\5\20\t\2~\u00b4\3\2\2\2\177\u0080\7!\2\2\u0080") - buf.write("\u0081\5\24\13\2\u0081\u0082\7\"\2\2\u0082\u0085\5\24") - buf.write("\13\2\u0083\u0084\7#\2\2\u0084\u0086\5\24\13\2\u0085\u0083") - buf.write("\3\2\2\2\u0085\u0086\3\2\2\2\u0086\u0087\3\2\2\2\u0087") - buf.write("\u0088\7\34\2\2\u0088\u0089\5\20\t\2\u0089\u00b4\3\2\2") - buf.write("\2\u008a\u008b\7$\2\2\u008b\u0090\7I\2\2\u008c\u008d\7") - buf.write("%\2\2\u008d\u008e\5\36\20\2\u008e\u008f\7&\2\2\u008f\u0091") - buf.write("\3\2\2\2\u0090\u008c\3\2\2\2\u0090\u0091\3\2\2\2\u0091") - buf.write("\u0092\3\2\2\2\u0092\u0098\7\'\2\2\u0093\u0094\5\f\7\2") - buf.write("\u0094\u0095\7\32\2\2\u0095\u0097\3\2\2\2\u0096\u0093") - buf.write("\3\2\2\2\u0097\u009a\3\2\2\2\u0098\u0096\3\2\2\2\u0098") - buf.write("\u0099\3\2\2\2\u0099\u009c\3\2\2\2\u009a\u0098\3\2\2\2") - buf.write("\u009b\u009d\5\f\7\2\u009c\u009b\3\2\2\2\u009c\u009d\3") - buf.write("\2\2\2\u009d\u009e\3\2\2\2\u009e\u00a0\7(\2\2\u009f\u00a1") - buf.write("\5 \21\2\u00a0\u009f\3\2\2\2\u00a0\u00a1\3\2\2\2\u00a1") - buf.write("\u00a6\3\2\2\2\u00a2\u00a3\7)\2\2\u00a3\u00a7\5\20\t\2") - buf.write("\u00a4\u00a5\7*\2\2\u00a5\u00a7\7\3\2\2\u00a6\u00a2\3") - buf.write("\2\2\2\u00a6\u00a4\3\2\2\2\u00a7\u00b4\3\2\2\2\u00a8\u00a9") - buf.write("\7+\2\2\u00a9\u00aa\7I\2\2\u00aa\u00ab\7)\2\2\u00ab\u00ad") - buf.write("\7,\2\2\u00ac\u00ae\5\16\b\2\u00ad\u00ac\3\2\2\2\u00ae") - buf.write("\u00af\3\2\2\2\u00af\u00ad\3\2\2\2\u00af\u00b0\3\2\2\2") - buf.write("\u00b0\u00b1\3\2\2\2\u00b1\u00b2\7-\2\2\u00b2\u00b4\3") - buf.write("\2\2\2\u00b3b\3\2\2\2\u00b3u\3\2\2\2\u00b3z\3\2\2\2\u00b3") - buf.write("\177\3\2\2\2\u00b3\u008a\3\2\2\2\u00b3\u00a8\3\2\2\2\u00b4") - buf.write("\13\3\2\2\2\u00b5\u00b6\5 \21\2\u00b6\u00b9\7I\2\2\u00b7") - buf.write("\u00b8\7.\2\2\u00b8\u00ba\5\22\n\2\u00b9\u00b7\3\2\2\2") - buf.write("\u00b9\u00ba\3\2\2\2\u00ba\r\3\2\2\2\u00bb\u00bc\5 \21") - buf.write("\2\u00bc\u00bf\7I\2\2\u00bd\u00be\7.\2\2\u00be\u00c0\5") - buf.write("\24\13\2\u00bf\u00bd\3\2\2\2\u00bf\u00c0\3\2\2\2\u00c0") - buf.write("\u00c1\3\2\2\2\u00c1\u00c2\7\3\2\2\u00c2\17\3\2\2\2\u00c3") - buf.write("\u00c5\7,\2\2\u00c4\u00c6\5\4\3\2\u00c5\u00c4\3\2\2\2") - buf.write("\u00c6\u00c7\3\2\2\2\u00c7\u00c5\3\2\2\2\u00c7\u00c8\3") - buf.write("\2\2\2\u00c8\u00c9\3\2\2\2\u00c9\u00ca\7-\2\2\u00ca\21") - buf.write("\3\2\2\2\u00cb\u00cc\b\n\1\2\u00cc\u00f9\5\34\17\2\u00cd") - buf.write("\u00ce\7\'\2\2\u00ce\u00cf\5\24\13\2\u00cf\u00d0\7(\2") - buf.write("\2\u00d0\u00f9\3\2\2\2\u00d1\u00d7\7/\2\2\u00d2\u00d3") - buf.write("\5\22\n\2\u00d3\u00d4\7\32\2\2\u00d4\u00d6\3\2\2\2\u00d5") - buf.write("\u00d2\3\2\2\2\u00d6\u00d9\3\2\2\2\u00d7\u00d5\3\2\2\2") - buf.write("\u00d7\u00d8\3\2\2\2\u00d8\u00db\3\2\2\2\u00d9\u00d7\3") - buf.write("\2\2\2\u00da\u00dc\5\22\n\2\u00db\u00da\3\2\2\2\u00db") - buf.write("\u00dc\3\2\2\2\u00dc\u00dd\3\2\2\2\u00dd\u00f9\7\60\2") - buf.write("\2\u00de\u00df\7/\2\2\u00df\u00e1\5\22\n\2\u00e0\u00e2") - buf.write("\5\30\r\2\u00e1\u00e0\3\2\2\2\u00e2\u00e3\3\2\2\2\u00e3") - buf.write("\u00e1\3\2\2\2\u00e3\u00e4\3\2\2\2\u00e4\u00e5\3\2\2\2") - buf.write("\u00e5\u00e6\7\60\2\2\u00e6\u00f9\3\2\2\2\u00e7\u00e8") - buf.write("\t\4\2\2\u00e8\u00f9\5\22\n\23\u00e9\u00ea\7=\2\2\u00ea") - buf.write("\u00f9\5\22\n\b\u00eb\u00f0\7@\2\2\u00ec\u00ed\7I\2\2") - buf.write("\u00ed\u00ef\7\32\2\2\u00ee\u00ec\3\2\2\2\u00ef\u00f2") - buf.write("\3\2\2\2\u00f0\u00ee\3\2\2\2\u00f0\u00f1\3\2\2\2\u00f1") - buf.write("\u00f4\3\2\2\2\u00f2\u00f0\3\2\2\2\u00f3\u00f5\7I\2\2") - buf.write("\u00f4\u00f3\3\2\2\2\u00f4\u00f5\3\2\2\2\u00f5\u00f6\3") - buf.write("\2\2\2\u00f6\u00f7\7A\2\2\u00f7\u00f9\5\22\n\3\u00f8\u00cb") - buf.write("\3\2\2\2\u00f8\u00cd\3\2\2\2\u00f8\u00d1\3\2\2\2\u00f8") - buf.write("\u00de\3\2\2\2\u00f8\u00e7\3\2\2\2\u00f8\u00e9\3\2\2\2") - buf.write("\u00f8\u00eb\3\2\2\2\u00f9\u0159\3\2\2\2\u00fa\u00fb\f") - buf.write("\24\2\2\u00fb\u00fc\7\13\2\2\u00fc\u0158\5\22\n\24\u00fd") - buf.write("\u00fe\f\22\2\2\u00fe\u00ff\t\5\2\2\u00ff\u0158\5\22\n") - buf.write("\23\u0100\u0101\f\21\2\2\u0101\u0102\t\6\2\2\u0102\u0158") - buf.write("\5\22\n\22\u0103\u0104\f\20\2\2\u0104\u0105\t\7\2\2\u0105") - buf.write("\u0158\5\22\n\21\u0106\u0107\f\17\2\2\u0107\u0108\7\23") - buf.write("\2\2\u0108\u0158\5\22\n\20\u0109\u010a\f\16\2\2\u010a") - buf.write("\u010b\7\24\2\2\u010b\u0158\5\22\n\17\u010c\u010d\f\r") - buf.write("\2\2\u010d\u010e\7\25\2\2\u010e\u0158\5\22\n\16\u010f") - buf.write("\u0110\f\f\2\2\u0110\u0111\t\b\2\2\u0111\u0158\5\22\n") - buf.write("\r\u0112\u0113\f\n\2\2\u0113\u0114\t\t\2\2\u0114\u0158") - buf.write("\5\22\n\13\u0115\u0116\f\t\2\2\u0116\u0117\t\n\2\2\u0117") - buf.write("\u0158\5\22\n\t\u0118\u0119\f\7\2\2\u0119\u011a\7>\2\2") - buf.write("\u011a\u0158\5\22\n\7\u011b\u011c\f\6\2\2\u011c\u011d") - buf.write("\7?\2\2\u011d\u0158\5\22\n\6\u011e\u011f\f\5\2\2\u011f") - buf.write("\u0120\7\26\2\2\u0120\u0158\5\22\n\5\u0121\u0122\f\4\2") - buf.write("\2\u0122\u0123\7\61\2\2\u0123\u0124\5\22\n\2\u0124\u0125") - buf.write("\7.\2\2\u0125\u0126\5\22\n\4\u0126\u0158\3\2\2\2\u0127") - buf.write("\u0129\f\31\2\2\u0128\u012a\7\61\2\2\u0129\u0128\3\2\2") - buf.write("\2\u0129\u012a\3\2\2\2\u012a\u012b\3\2\2\2\u012b\u012c") - buf.write("\7/\2\2\u012c\u012d\5\24\13\2\u012d\u012e\7\60\2\2\u012e") - buf.write("\u0158\3\2\2\2\u012f\u0130\f\30\2\2\u0130\u0132\7/\2\2") - buf.write("\u0131\u0133\5\22\n\2\u0132\u0131\3\2\2\2\u0132\u0133") - buf.write("\3\2\2\2\u0133\u0134\3\2\2\2\u0134\u0136\7.\2\2\u0135") - buf.write("\u0137\5\22\n\2\u0136\u0135\3\2\2\2\u0136\u0137\3\2\2") - buf.write("\2\u0137\u013c\3\2\2\2\u0138\u013a\7.\2\2\u0139\u013b") - buf.write("\5\22\n\2\u013a\u0139\3\2\2\2\u013a\u013b\3\2\2\2\u013b") - buf.write("\u013d\3\2\2\2\u013c\u0138\3\2\2\2\u013c\u013d\3\2\2\2") - buf.write("\u013d\u013e\3\2\2\2\u013e\u0158\7\60\2\2\u013f\u0141") - buf.write("\f\27\2\2\u0140\u0142\7\61\2\2\u0141\u0140\3\2\2\2\u0141") - buf.write("\u0142\3\2\2\2\u0142\u0143\3\2\2\2\u0143\u0144\7\62\2") - buf.write("\2\u0144\u0158\7I\2\2\u0145\u0146\f\26\2\2\u0146\u014c") - buf.write("\7\'\2\2\u0147\u0148\5\32\16\2\u0148\u0149\7\32\2\2\u0149") - buf.write("\u014b\3\2\2\2\u014a\u0147\3\2\2\2\u014b\u014e\3\2\2\2") - buf.write("\u014c\u014a\3\2\2\2\u014c\u014d\3\2\2\2\u014d\u0150\3") - buf.write("\2\2\2\u014e\u014c\3\2\2\2\u014f\u0151\5\32\16\2\u0150") - buf.write("\u014f\3\2\2\2\u0150\u0151\3\2\2\2\u0151\u0152\3\2\2\2") - buf.write("\u0152\u0158\7(\2\2\u0153\u0154\f\25\2\2\u0154\u0158\7") - buf.write("\63\2\2\u0155\u0156\f\13\2\2\u0156\u0158\7\66\2\2\u0157") - buf.write("\u00fa\3\2\2\2\u0157\u00fd\3\2\2\2\u0157\u0100\3\2\2\2") - buf.write("\u0157\u0103\3\2\2\2\u0157\u0106\3\2\2\2\u0157\u0109\3") - buf.write("\2\2\2\u0157\u010c\3\2\2\2\u0157\u010f\3\2\2\2\u0157\u0112") - buf.write("\3\2\2\2\u0157\u0115\3\2\2\2\u0157\u0118\3\2\2\2\u0157") - buf.write("\u011b\3\2\2\2\u0157\u011e\3\2\2\2\u0157\u0121\3\2\2\2") - buf.write("\u0157\u0127\3\2\2\2\u0157\u012f\3\2\2\2\u0157\u013f\3") - buf.write("\2\2\2\u0157\u0145\3\2\2\2\u0157\u0153\3\2\2\2\u0157\u0155") - buf.write("\3\2\2\2\u0158\u015b\3\2\2\2\u0159\u0157\3\2\2\2\u0159") - buf.write("\u015a\3\2\2\2\u015a\23\3\2\2\2\u015b\u0159\3\2\2\2\u015c") - buf.write("\u015d\5\22\n\2\u015d\u015e\7\32\2\2\u015e\u0160\3\2\2") - buf.write("\2\u015f\u015c\3\2\2\2\u0160\u0163\3\2\2\2\u0161\u015f") - buf.write("\3\2\2\2\u0161\u0162\3\2\2\2\u0162\u0164\3\2\2\2\u0163") - buf.write("\u0161\3\2\2\2\u0164\u0165\5\22\n\2\u0165\25\3\2\2\2\u0166") - buf.write("\u0167\5\24\13\2\u0167\u0168\7\2\2\3\u0168\27\3\2\2\2") - buf.write("\u0169\u016a\7!\2\2\u016a\u016b\5\24\13\2\u016b\u016c") - buf.write("\7\"\2\2\u016c\u016f\5\24\13\2\u016d\u016e\7#\2\2\u016e") - buf.write("\u0170\5\24\13\2\u016f\u016d\3\2\2\2\u016f\u0170\3\2\2") - buf.write("\2\u0170\u0174\3\2\2\2\u0171\u0172\7\33\2\2\u0172\u0174") - buf.write("\5\22\n\2\u0173\u0169\3\2\2\2\u0173\u0171\3\2\2\2\u0174") - buf.write("\31\3\2\2\2\u0175\u0176\7I\2\2\u0176\u0178\7\n\2\2\u0177") - buf.write("\u0175\3\2\2\2\u0177\u0178\3\2\2\2\u0178\u0179\3\2\2\2") - buf.write("\u0179\u017a\5\22\n\2\u017a\33\3\2\2\2\u017b\u0183\7E") - buf.write("\2\2\u017c\u0183\7F\2\2\u017d\u0183\t\13\2\2\u017e\u0183") - buf.write("\7G\2\2\u017f\u0183\7H\2\2\u0180\u0183\7D\2\2\u0181\u0183") - buf.write("\7I\2\2\u0182\u017b\3\2\2\2\u0182\u017c\3\2\2\2\u0182") - buf.write("\u017d\3\2\2\2\u0182\u017e\3\2\2\2\u0182\u017f\3\2\2\2") - buf.write("\u0182\u0180\3\2\2\2\u0182\u0181\3\2\2\2\u0183\35\3\2") - buf.write("\2\2\u0184\u0185\7I\2\2\u0185\u0187\7\32\2\2\u0186\u0184") - buf.write("\3\2\2\2\u0187\u018a\3\2\2\2\u0188\u0186\3\2\2\2\u0188") - buf.write("\u0189\3\2\2\2\u0189\u018b\3\2\2\2\u018a\u0188\3\2\2\2") - buf.write("\u018b\u018c\7I\2\2\u018c\37\3\2\2\2\u018d\u018e\b\21") - buf.write("\1\2\u018e\u019a\7I\2\2\u018f\u0190\7\'\2\2\u0190\u0191") - buf.write("\5 \21\2\u0191\u0192\7(\2\2\u0192\u019a\3\2\2\2\u0193") - buf.write("\u0194\7/\2\2\u0194\u0195\5 \21\2\u0195\u0196\7\60\2\2") - buf.write("\u0196\u019a\3\2\2\2\u0197\u0198\7A\2\2\u0198\u019a\5") - buf.write(" \21\3\u0199\u018d\3\2\2\2\u0199\u018f\3\2\2\2\u0199\u0193") - buf.write("\3\2\2\2\u0199\u0197\3\2\2\2\u019a\u01a5\3\2\2\2\u019b") - buf.write("\u019c\f\5\2\2\u019c\u019d\7\f\2\2\u019d\u01a4\5 \21\5") - buf.write("\u019e\u019f\f\4\2\2\u019f\u01a0\7A\2\2\u01a0\u01a4\5") - buf.write(" \21\4\u01a1\u01a2\f\6\2\2\u01a2\u01a4\7\61\2\2\u01a3") - buf.write("\u019b\3\2\2\2\u01a3\u019e\3\2\2\2\u01a3\u01a1\3\2\2\2") - buf.write("\u01a4\u01a7\3\2\2\2\u01a5\u01a3\3\2\2\2\u01a5\u01a6\3") - buf.write("\2\2\2\u01a6!\3\2\2\2\u01a7\u01a5\3\2\2\2\61%.8=CJVX_") - buf.write("ms\u0085\u0090\u0098\u009c\u00a0\u00a6\u00af\u00b3\u00b9") - buf.write("\u00bf\u00c7\u00d7\u00db\u00e3\u00f0\u00f4\u00f8\u0129") - buf.write("\u0132\u0136\u013a\u013c\u0141\u014c\u0150\u0157\u0159") - buf.write("\u0161\u016f\u0173\u0177\u0182\u0188\u0199\u01a3\u01a5") + buf.write("\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3") + buf.write("\n\3\n\3\n\3\n\3\n\5\n\u0140\n\n\3\n\3\n\3\n\3\n\3\n\3") + buf.write("\n\3\n\5\n\u0149\n\n\3\n\3\n\5\n\u014d\n\n\3\n\3\n\5\n") + buf.write("\u0151\n\n\5\n\u0153\n\n\3\n\3\n\3\n\5\n\u0158\n\n\3\n") + buf.write("\3\n\3\n\3\n\3\n\3\n\3\n\7\n\u0161\n\n\f\n\16\n\u0164") + buf.write("\13\n\3\n\5\n\u0167\n\n\3\n\3\n\3\n\3\n\3\n\7\n\u016e") + buf.write("\n\n\f\n\16\n\u0171\13\n\3\13\3\13\3\13\7\13\u0176\n\13") + buf.write("\f\13\16\13\u0179\13\13\3\13\3\13\3\f\3\f\3\f\3\r\3\r") + buf.write("\3\r\3\r\3\r\3\r\5\r\u0186\n\r\3\r\3\r\5\r\u018a\n\r\3") + buf.write("\16\3\16\5\16\u018e\n\16\3\16\3\16\3\17\3\17\3\17\3\17") + buf.write("\3\17\3\17\3\17\5\17\u0199\n\17\3\20\3\20\7\20\u019d\n") + buf.write("\20\f\20\16\20\u01a0\13\20\3\20\3\20\3\21\3\21\3\21\3") + buf.write("\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\5\21\u01b0") + buf.write("\n\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\7\21\u01ba") + buf.write("\n\21\f\21\16\21\u01bd\13\21\3\21\2\4\22 \22\2\4\6\b\n") + buf.write("\f\16\20\22\24\26\30\32\34\36 \2\f\3\2\13\26\3\2\27\30") + buf.write("\4\2\17\20\64\64\3\2\f\16\3\2\17\20\3\2\21\22\3\2\65\66") + buf.write("\3\2\678\4\2%&9<\3\2BC\2\u020c\2%\3\2\2\2\4.\3\2\2\2\6") + buf.write("X\3\2\2\2\bZ\3\2\2\2\n\u00b3\3\2\2\2\f\u00b5\3\2\2\2\16") + buf.write("\u00d7\3\2\2\2\20\u00d9\3\2\2\2\22\u010e\3\2\2\2\24\u0177") + buf.write("\3\2\2\2\26\u017c\3\2\2\2\30\u0189\3\2\2\2\32\u018d\3") + buf.write("\2\2\2\34\u0198\3\2\2\2\36\u019e\3\2\2\2 \u01af\3\2\2") + buf.write("\2\"$\5\4\3\2#\"\3\2\2\2$\'\3\2\2\2%#\3\2\2\2%&\3\2\2") + buf.write("\2&(\3\2\2\2\'%\3\2\2\2()\7\2\2\3)\3\3\2\2\2*+\5\6\4\2") + buf.write("+,\7\3\2\2,/\3\2\2\2-/\5\n\6\2.*\3\2\2\2.-\3\2\2\2/\5") + buf.write("\3\2\2\2\60\61\7\4\2\2\618\7I\2\2\62\63\7\5\2\2\639\5") + buf.write("\36\20\2\64\65\7\6\2\2\659\5\36\20\2\66\67\7\7\2\2\67") + buf.write("9\7I\2\28\62\3\2\2\28\64\3\2\2\28\66\3\2\2\289\3\2\2\2") + buf.write("9Y\3\2\2\2:Y\7\b\2\2;=\7\t\2\2<>\5\24\13\2=<\3\2\2\2=") + buf.write(">\3\2\2\2>Y\3\2\2\2?@\5 \21\2@C\7I\2\2AB\7\n\2\2BD\5\24") + buf.write("\13\2CA\3\2\2\2CD\3\2\2\2DY\3\2\2\2EF\5\b\5\2FG\7\n\2") + buf.write("\2GI\3\2\2\2HE\3\2\2\2IL\3\2\2\2JH\3\2\2\2JK\3\2\2\2K") + buf.write("M\3\2\2\2LJ\3\2\2\2MY\5\24\13\2NO\5\22\n\2OP\t\2\2\2P") + buf.write("Q\7\n\2\2QR\5\22\n\2RY\3\2\2\2SY\t\3\2\2TV\7\31\2\2UW") + buf.write("\5\24\13\2VU\3\2\2\2VW\3\2\2\2WY\3\2\2\2X\60\3\2\2\2X") + buf.write(":\3\2\2\2X;\3\2\2\2X?\3\2\2\2XJ\3\2\2\2XN\3\2\2\2XS\3") + buf.write("\2\2\2XT\3\2\2\2Y\7\3\2\2\2Z_\5\22\n\2[\\\7\32\2\2\\^") + buf.write("\5\22\n\2][\3\2\2\2^a\3\2\2\2_]\3\2\2\2_`\3\2\2\2`\t\3") + buf.write("\2\2\2a_\3\2\2\2bc\7\33\2\2cd\5\22\n\2de\7\34\2\2em\5") + buf.write("\20\t\2fg\7\35\2\2gh\5\22\n\2hi\7\34\2\2ij\5\20\t\2jl") + buf.write("\3\2\2\2kf\3\2\2\2lo\3\2\2\2mk\3\2\2\2mn\3\2\2\2ns\3\2") + buf.write("\2\2om\3\2\2\2pq\7\36\2\2qr\7\34\2\2rt\5\20\t\2sp\3\2") + buf.write("\2\2st\3\2\2\2t\u00b4\3\2\2\2uv\7\37\2\2vw\5\22\n\2wx") + buf.write("\7\34\2\2xy\5\20\t\2y\u00b4\3\2\2\2z{\7 \2\2{|\5\22\n") + buf.write("\2|}\7\34\2\2}~\5\20\t\2~\u00b4\3\2\2\2\177\u0080\7!\2") + buf.write("\2\u0080\u0081\5\24\13\2\u0081\u0082\7\"\2\2\u0082\u0085") + buf.write("\5\24\13\2\u0083\u0084\7#\2\2\u0084\u0086\5\24\13\2\u0085") + buf.write("\u0083\3\2\2\2\u0085\u0086\3\2\2\2\u0086\u0087\3\2\2\2") + buf.write("\u0087\u0088\7\34\2\2\u0088\u0089\5\20\t\2\u0089\u00b4") + buf.write("\3\2\2\2\u008a\u008b\7$\2\2\u008b\u0090\7I\2\2\u008c\u008d") + buf.write("\7%\2\2\u008d\u008e\5\36\20\2\u008e\u008f\7&\2\2\u008f") + buf.write("\u0091\3\2\2\2\u0090\u008c\3\2\2\2\u0090\u0091\3\2\2\2") + buf.write("\u0091\u0092\3\2\2\2\u0092\u0098\7\'\2\2\u0093\u0094\5") + buf.write("\f\7\2\u0094\u0095\7\32\2\2\u0095\u0097\3\2\2\2\u0096") + buf.write("\u0093\3\2\2\2\u0097\u009a\3\2\2\2\u0098\u0096\3\2\2\2") + buf.write("\u0098\u0099\3\2\2\2\u0099\u009c\3\2\2\2\u009a\u0098\3") + buf.write("\2\2\2\u009b\u009d\5\f\7\2\u009c\u009b\3\2\2\2\u009c\u009d") + buf.write("\3\2\2\2\u009d\u009e\3\2\2\2\u009e\u00a0\7(\2\2\u009f") + buf.write("\u00a1\5 \21\2\u00a0\u009f\3\2\2\2\u00a0\u00a1\3\2\2\2") + buf.write("\u00a1\u00a6\3\2\2\2\u00a2\u00a3\7)\2\2\u00a3\u00a7\5") + buf.write("\20\t\2\u00a4\u00a5\7*\2\2\u00a5\u00a7\7\3\2\2\u00a6\u00a2") + buf.write("\3\2\2\2\u00a6\u00a4\3\2\2\2\u00a7\u00b4\3\2\2\2\u00a8") + buf.write("\u00a9\7+\2\2\u00a9\u00aa\7I\2\2\u00aa\u00ab\7)\2\2\u00ab") + buf.write("\u00ad\7,\2\2\u00ac\u00ae\5\16\b\2\u00ad\u00ac\3\2\2\2") + buf.write("\u00ae\u00af\3\2\2\2\u00af\u00ad\3\2\2\2\u00af\u00b0\3") + buf.write("\2\2\2\u00b0\u00b1\3\2\2\2\u00b1\u00b2\7-\2\2\u00b2\u00b4") + buf.write("\3\2\2\2\u00b3b\3\2\2\2\u00b3u\3\2\2\2\u00b3z\3\2\2\2") + buf.write("\u00b3\177\3\2\2\2\u00b3\u008a\3\2\2\2\u00b3\u00a8\3\2") + buf.write("\2\2\u00b4\13\3\2\2\2\u00b5\u00b6\5 \21\2\u00b6\u00b9") + buf.write("\7I\2\2\u00b7\u00b8\7.\2\2\u00b8\u00ba\5\22\n\2\u00b9") + buf.write("\u00b7\3\2\2\2\u00b9\u00ba\3\2\2\2\u00ba\r\3\2\2\2\u00bb") + buf.write("\u00bc\5 \21\2\u00bc\u00bf\7I\2\2\u00bd\u00be\7.\2\2\u00be") + buf.write("\u00c0\5\24\13\2\u00bf\u00bd\3\2\2\2\u00bf\u00c0\3\2\2") + buf.write("\2\u00c0\u00c1\3\2\2\2\u00c1\u00c2\7\3\2\2\u00c2\u00d8") + buf.write("\3\2\2\2\u00c3\u00c4\7$\2\2\u00c4\u00c5\7I\2\2\u00c5\u00cb") + buf.write("\7\'\2\2\u00c6\u00c7\5\f\7\2\u00c7\u00c8\7\32\2\2\u00c8") + buf.write("\u00ca\3\2\2\2\u00c9\u00c6\3\2\2\2\u00ca\u00cd\3\2\2\2") + buf.write("\u00cb\u00c9\3\2\2\2\u00cb\u00cc\3\2\2\2\u00cc\u00cf\3") + buf.write("\2\2\2\u00cd\u00cb\3\2\2\2\u00ce\u00d0\5\f\7\2\u00cf\u00ce") + buf.write("\3\2\2\2\u00cf\u00d0\3\2\2\2\u00d0\u00d1\3\2\2\2\u00d1") + buf.write("\u00d3\7(\2\2\u00d2\u00d4\5 \21\2\u00d3\u00d2\3\2\2\2") + buf.write("\u00d3\u00d4\3\2\2\2\u00d4\u00d5\3\2\2\2\u00d5\u00d6\7") + buf.write(")\2\2\u00d6\u00d8\5\20\t\2\u00d7\u00bb\3\2\2\2\u00d7\u00c3") + buf.write("\3\2\2\2\u00d8\17\3\2\2\2\u00d9\u00db\7,\2\2\u00da\u00dc") + buf.write("\5\4\3\2\u00db\u00da\3\2\2\2\u00dc\u00dd\3\2\2\2\u00dd") + buf.write("\u00db\3\2\2\2\u00dd\u00de\3\2\2\2\u00de\u00df\3\2\2\2") + buf.write("\u00df\u00e0\7-\2\2\u00e0\21\3\2\2\2\u00e1\u00e2\b\n\1") + buf.write("\2\u00e2\u010f\5\34\17\2\u00e3\u00e4\7\'\2\2\u00e4\u00e5") + buf.write("\5\24\13\2\u00e5\u00e6\7(\2\2\u00e6\u010f\3\2\2\2\u00e7") + buf.write("\u00ed\7/\2\2\u00e8\u00e9\5\22\n\2\u00e9\u00ea\7\32\2") + buf.write("\2\u00ea\u00ec\3\2\2\2\u00eb\u00e8\3\2\2\2\u00ec\u00ef") + buf.write("\3\2\2\2\u00ed\u00eb\3\2\2\2\u00ed\u00ee\3\2\2\2\u00ee") + buf.write("\u00f1\3\2\2\2\u00ef\u00ed\3\2\2\2\u00f0\u00f2\5\22\n") + buf.write("\2\u00f1\u00f0\3\2\2\2\u00f1\u00f2\3\2\2\2\u00f2\u00f3") + buf.write("\3\2\2\2\u00f3\u010f\7\60\2\2\u00f4\u00f5\7/\2\2\u00f5") + buf.write("\u00f7\5\22\n\2\u00f6\u00f8\5\30\r\2\u00f7\u00f6\3\2\2") + buf.write("\2\u00f8\u00f9\3\2\2\2\u00f9\u00f7\3\2\2\2\u00f9\u00fa") + buf.write("\3\2\2\2\u00fa\u00fb\3\2\2\2\u00fb\u00fc\7\60\2\2\u00fc") + buf.write("\u010f\3\2\2\2\u00fd\u00fe\t\4\2\2\u00fe\u010f\5\22\n") + buf.write("\23\u00ff\u0100\7=\2\2\u0100\u010f\5\22\n\b\u0101\u0106") + buf.write("\7@\2\2\u0102\u0103\7I\2\2\u0103\u0105\7\32\2\2\u0104") + buf.write("\u0102\3\2\2\2\u0105\u0108\3\2\2\2\u0106\u0104\3\2\2\2") + buf.write("\u0106\u0107\3\2\2\2\u0107\u010a\3\2\2\2\u0108\u0106\3") + buf.write("\2\2\2\u0109\u010b\7I\2\2\u010a\u0109\3\2\2\2\u010a\u010b") + buf.write("\3\2\2\2\u010b\u010c\3\2\2\2\u010c\u010d\7A\2\2\u010d") + buf.write("\u010f\5\22\n\3\u010e\u00e1\3\2\2\2\u010e\u00e3\3\2\2") + buf.write("\2\u010e\u00e7\3\2\2\2\u010e\u00f4\3\2\2\2\u010e\u00fd") + buf.write("\3\2\2\2\u010e\u00ff\3\2\2\2\u010e\u0101\3\2\2\2\u010f") + buf.write("\u016f\3\2\2\2\u0110\u0111\f\24\2\2\u0111\u0112\7\13\2") + buf.write("\2\u0112\u016e\5\22\n\24\u0113\u0114\f\22\2\2\u0114\u0115") + buf.write("\t\5\2\2\u0115\u016e\5\22\n\23\u0116\u0117\f\21\2\2\u0117") + buf.write("\u0118\t\6\2\2\u0118\u016e\5\22\n\22\u0119\u011a\f\20") + buf.write("\2\2\u011a\u011b\t\7\2\2\u011b\u016e\5\22\n\21\u011c\u011d") + buf.write("\f\17\2\2\u011d\u011e\7\23\2\2\u011e\u016e\5\22\n\20\u011f") + buf.write("\u0120\f\16\2\2\u0120\u0121\7\24\2\2\u0121\u016e\5\22") + buf.write("\n\17\u0122\u0123\f\r\2\2\u0123\u0124\7\25\2\2\u0124\u016e") + buf.write("\5\22\n\16\u0125\u0126\f\f\2\2\u0126\u0127\t\b\2\2\u0127") + buf.write("\u016e\5\22\n\r\u0128\u0129\f\n\2\2\u0129\u012a\t\t\2") + buf.write("\2\u012a\u016e\5\22\n\13\u012b\u012c\f\t\2\2\u012c\u012d") + buf.write("\t\n\2\2\u012d\u016e\5\22\n\t\u012e\u012f\f\7\2\2\u012f") + buf.write("\u0130\7>\2\2\u0130\u016e\5\22\n\7\u0131\u0132\f\6\2\2") + buf.write("\u0132\u0133\7?\2\2\u0133\u016e\5\22\n\6\u0134\u0135\f") + buf.write("\5\2\2\u0135\u0136\7\26\2\2\u0136\u016e\5\22\n\5\u0137") + buf.write("\u0138\f\4\2\2\u0138\u0139\7\61\2\2\u0139\u013a\5\22\n") + buf.write("\2\u013a\u013b\7.\2\2\u013b\u013c\5\22\n\4\u013c\u016e") + buf.write("\3\2\2\2\u013d\u013f\f\31\2\2\u013e\u0140\7\61\2\2\u013f") + buf.write("\u013e\3\2\2\2\u013f\u0140\3\2\2\2\u0140\u0141\3\2\2\2") + buf.write("\u0141\u0142\7/\2\2\u0142\u0143\5\24\13\2\u0143\u0144") + buf.write("\7\60\2\2\u0144\u016e\3\2\2\2\u0145\u0146\f\30\2\2\u0146") + buf.write("\u0148\7/\2\2\u0147\u0149\5\22\n\2\u0148\u0147\3\2\2\2") + buf.write("\u0148\u0149\3\2\2\2\u0149\u014a\3\2\2\2\u014a\u014c\7") + buf.write(".\2\2\u014b\u014d\5\22\n\2\u014c\u014b\3\2\2\2\u014c\u014d") + buf.write("\3\2\2\2\u014d\u0152\3\2\2\2\u014e\u0150\7.\2\2\u014f") + buf.write("\u0151\5\22\n\2\u0150\u014f\3\2\2\2\u0150\u0151\3\2\2") + buf.write("\2\u0151\u0153\3\2\2\2\u0152\u014e\3\2\2\2\u0152\u0153") + buf.write("\3\2\2\2\u0153\u0154\3\2\2\2\u0154\u016e\7\60\2\2\u0155") + buf.write("\u0157\f\27\2\2\u0156\u0158\7\61\2\2\u0157\u0156\3\2\2") + buf.write("\2\u0157\u0158\3\2\2\2\u0158\u0159\3\2\2\2\u0159\u015a") + buf.write("\7\62\2\2\u015a\u016e\7I\2\2\u015b\u015c\f\26\2\2\u015c") + buf.write("\u0162\7\'\2\2\u015d\u015e\5\32\16\2\u015e\u015f\7\32") + buf.write("\2\2\u015f\u0161\3\2\2\2\u0160\u015d\3\2\2\2\u0161\u0164") + buf.write("\3\2\2\2\u0162\u0160\3\2\2\2\u0162\u0163\3\2\2\2\u0163") + buf.write("\u0166\3\2\2\2\u0164\u0162\3\2\2\2\u0165\u0167\5\32\16") + buf.write("\2\u0166\u0165\3\2\2\2\u0166\u0167\3\2\2\2\u0167\u0168") + buf.write("\3\2\2\2\u0168\u016e\7(\2\2\u0169\u016a\f\25\2\2\u016a") + buf.write("\u016e\7\63\2\2\u016b\u016c\f\13\2\2\u016c\u016e\7\66") + buf.write("\2\2\u016d\u0110\3\2\2\2\u016d\u0113\3\2\2\2\u016d\u0116") + buf.write("\3\2\2\2\u016d\u0119\3\2\2\2\u016d\u011c\3\2\2\2\u016d") + buf.write("\u011f\3\2\2\2\u016d\u0122\3\2\2\2\u016d\u0125\3\2\2\2") + buf.write("\u016d\u0128\3\2\2\2\u016d\u012b\3\2\2\2\u016d\u012e\3") + buf.write("\2\2\2\u016d\u0131\3\2\2\2\u016d\u0134\3\2\2\2\u016d\u0137") + buf.write("\3\2\2\2\u016d\u013d\3\2\2\2\u016d\u0145\3\2\2\2\u016d") + buf.write("\u0155\3\2\2\2\u016d\u015b\3\2\2\2\u016d\u0169\3\2\2\2") + buf.write("\u016d\u016b\3\2\2\2\u016e\u0171\3\2\2\2\u016f\u016d\3") + buf.write("\2\2\2\u016f\u0170\3\2\2\2\u0170\23\3\2\2\2\u0171\u016f") + buf.write("\3\2\2\2\u0172\u0173\5\22\n\2\u0173\u0174\7\32\2\2\u0174") + buf.write("\u0176\3\2\2\2\u0175\u0172\3\2\2\2\u0176\u0179\3\2\2\2") + buf.write("\u0177\u0175\3\2\2\2\u0177\u0178\3\2\2\2\u0178\u017a\3") + buf.write("\2\2\2\u0179\u0177\3\2\2\2\u017a\u017b\5\22\n\2\u017b") + buf.write("\25\3\2\2\2\u017c\u017d\5\24\13\2\u017d\u017e\7\2\2\3") + buf.write("\u017e\27\3\2\2\2\u017f\u0180\7!\2\2\u0180\u0181\5\24") + buf.write("\13\2\u0181\u0182\7\"\2\2\u0182\u0185\5\24\13\2\u0183") + buf.write("\u0184\7#\2\2\u0184\u0186\5\24\13\2\u0185\u0183\3\2\2") + buf.write("\2\u0185\u0186\3\2\2\2\u0186\u018a\3\2\2\2\u0187\u0188") + buf.write("\7\33\2\2\u0188\u018a\5\22\n\2\u0189\u017f\3\2\2\2\u0189") + buf.write("\u0187\3\2\2\2\u018a\31\3\2\2\2\u018b\u018c\7I\2\2\u018c") + buf.write("\u018e\7\n\2\2\u018d\u018b\3\2\2\2\u018d\u018e\3\2\2\2") + buf.write("\u018e\u018f\3\2\2\2\u018f\u0190\5\22\n\2\u0190\33\3\2") + buf.write("\2\2\u0191\u0199\7E\2\2\u0192\u0199\7F\2\2\u0193\u0199") + buf.write("\t\13\2\2\u0194\u0199\7G\2\2\u0195\u0199\7H\2\2\u0196") + buf.write("\u0199\7D\2\2\u0197\u0199\7I\2\2\u0198\u0191\3\2\2\2\u0198") + buf.write("\u0192\3\2\2\2\u0198\u0193\3\2\2\2\u0198\u0194\3\2\2\2") + buf.write("\u0198\u0195\3\2\2\2\u0198\u0196\3\2\2\2\u0198\u0197\3") + buf.write("\2\2\2\u0199\35\3\2\2\2\u019a\u019b\7I\2\2\u019b\u019d") + buf.write("\7\32\2\2\u019c\u019a\3\2\2\2\u019d\u01a0\3\2\2\2\u019e") + buf.write("\u019c\3\2\2\2\u019e\u019f\3\2\2\2\u019f\u01a1\3\2\2\2") + buf.write("\u01a0\u019e\3\2\2\2\u01a1\u01a2\7I\2\2\u01a2\37\3\2\2") + buf.write("\2\u01a3\u01a4\b\21\1\2\u01a4\u01b0\7I\2\2\u01a5\u01a6") + buf.write("\7\'\2\2\u01a6\u01a7\5 \21\2\u01a7\u01a8\7(\2\2\u01a8") + buf.write("\u01b0\3\2\2\2\u01a9\u01aa\7/\2\2\u01aa\u01ab\5 \21\2") + buf.write("\u01ab\u01ac\7\60\2\2\u01ac\u01b0\3\2\2\2\u01ad\u01ae") + buf.write("\7A\2\2\u01ae\u01b0\5 \21\3\u01af\u01a3\3\2\2\2\u01af") + buf.write("\u01a5\3\2\2\2\u01af\u01a9\3\2\2\2\u01af\u01ad\3\2\2\2") + buf.write("\u01b0\u01bb\3\2\2\2\u01b1\u01b2\f\5\2\2\u01b2\u01b3\7") + buf.write("\f\2\2\u01b3\u01ba\5 \21\5\u01b4\u01b5\f\4\2\2\u01b5\u01b6") + buf.write("\7A\2\2\u01b6\u01ba\5 \21\4\u01b7\u01b8\f\6\2\2\u01b8") + buf.write("\u01ba\7\61\2\2\u01b9\u01b1\3\2\2\2\u01b9\u01b4\3\2\2") + buf.write("\2\u01b9\u01b7\3\2\2\2\u01ba\u01bd\3\2\2\2\u01bb\u01b9") + buf.write("\3\2\2\2\u01bb\u01bc\3\2\2\2\u01bc!\3\2\2\2\u01bd\u01bb") + buf.write("\3\2\2\2\65%.8=CJVX_ms\u0085\u0090\u0098\u009c\u00a0\u00a6") + buf.write("\u00af\u00b3\u00b9\u00bf\u00cb\u00cf\u00d3\u00d7\u00dd") + buf.write("\u00ed\u00f1\u00f9\u0106\u010a\u010e\u013f\u0148\u014c") + buf.write("\u0150\u0152\u0157\u0162\u0166\u016d\u016f\u0177\u0185") + buf.write("\u0189\u018d\u0198\u019e\u01af\u01b9\u01bb") return buf.getvalue() @@ -1221,7 +1233,7 @@ def compound_stmt(self): self.state = 173 self._errHandler.sync(self) _la = self._input.LA(1) - if not (((((_la - 37)) & ~0x3f) == 0 and ((1 << (_la - 37)) & ((1 << (PyxellParser.T__36 - 37)) | (1 << (PyxellParser.T__44 - 37)) | (1 << (PyxellParser.T__62 - 37)) | (1 << (PyxellParser.ID - 37)))) != 0)): + if not (((((_la - 34)) & ~0x3f) == 0 and ((1 << (_la - 34)) & ((1 << (PyxellParser.T__33 - 34)) | (1 << (PyxellParser.T__36 - 34)) | (1 << (PyxellParser.T__44 - 34)) | (1 << (PyxellParser.T__62 - 34)) | (1 << (PyxellParser.ID - 34)))) != 0)): break self.state = 175 @@ -1325,6 +1337,35 @@ def copyFrom(self, ctx:ParserRuleContext): + class ClassMethodContext(Class_memberContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Class_memberContext + super().__init__(parser) + self.ret = None # TypContext + self.copyFrom(ctx) + + def ID(self): + return self.getToken(PyxellParser.ID, 0) + def block(self): + return self.getTypedRuleContext(PyxellParser.BlockContext,0) + + def func_arg(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(PyxellParser.Func_argContext) + else: + return self.getTypedRuleContext(PyxellParser.Func_argContext,i) + + def typ(self): + return self.getTypedRuleContext(PyxellParser.TypContext,0) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitClassMethod" ): + return visitor.visitClassMethod(self) + else: + return visitor.visitChildren(self) + + class ClassFieldContext(Class_memberContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Class_memberContext @@ -1354,24 +1395,77 @@ def class_member(self): self.enterRule(localctx, 12, self.RULE_class_member) self._la = 0 # Token type try: - localctx = PyxellParser.ClassFieldContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 185 - self.typ(0) - self.state = 186 - self.match(PyxellParser.ID) - self.state = 189 + self.state = 213 self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==PyxellParser.T__43: - self.state = 187 - self.match(PyxellParser.T__43) - self.state = 188 - self.tuple_expr() + token = self._input.LA(1) + if token in [PyxellParser.T__36, PyxellParser.T__44, PyxellParser.T__62, PyxellParser.ID]: + localctx = PyxellParser.ClassFieldContext(self, localctx) + self.enterOuterAlt(localctx, 1) + self.state = 185 + self.typ(0) + self.state = 186 + self.match(PyxellParser.ID) + self.state = 189 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==PyxellParser.T__43: + self.state = 187 + self.match(PyxellParser.T__43) + self.state = 188 + self.tuple_expr() - self.state = 191 - self.match(PyxellParser.T__0) + self.state = 191 + self.match(PyxellParser.T__0) + pass + elif token in [PyxellParser.T__33]: + localctx = PyxellParser.ClassMethodContext(self, localctx) + self.enterOuterAlt(localctx, 2) + self.state = 193 + self.match(PyxellParser.T__33) + self.state = 194 + self.match(PyxellParser.ID) + self.state = 195 + self.match(PyxellParser.T__36) + self.state = 201 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,21,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 196 + self.func_arg() + self.state = 197 + self.match(PyxellParser.T__23) + self.state = 203 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,21,self._ctx) + + self.state = 205 + self._errHandler.sync(self) + _la = self._input.LA(1) + if ((((_la - 37)) & ~0x3f) == 0 and ((1 << (_la - 37)) & ((1 << (PyxellParser.T__36 - 37)) | (1 << (PyxellParser.T__44 - 37)) | (1 << (PyxellParser.T__62 - 37)) | (1 << (PyxellParser.ID - 37)))) != 0): + self.state = 204 + self.func_arg() + + + self.state = 207 + self.match(PyxellParser.T__37) + self.state = 209 + self._errHandler.sync(self) + _la = self._input.LA(1) + if ((((_la - 37)) & ~0x3f) == 0 and ((1 << (_la - 37)) & ((1 << (PyxellParser.T__36 - 37)) | (1 << (PyxellParser.T__44 - 37)) | (1 << (PyxellParser.T__62 - 37)) | (1 << (PyxellParser.ID - 37)))) != 0): + self.state = 208 + localctx.ret = self.typ(0) + + + self.state = 211 + self.match(PyxellParser.T__38) + self.state = 212 + self.block() + pass + else: + raise NoViableAltException(self) + except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -1413,21 +1507,21 @@ def block(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 193 + self.state = 215 self.match(PyxellParser.T__41) - self.state = 195 + self.state = 217 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 194 + self.state = 216 self.stmt() - self.state = 197 + self.state = 219 self._errHandler.sync(self) _la = self._input.LA(1) if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__40) | (1 << PyxellParser.T__44) | (1 << PyxellParser.T__49) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0)): break - self.state = 199 + self.state = 221 self.match(PyxellParser.T__42) except RecognitionException as re: localctx.exception = re @@ -1793,15 +1887,15 @@ def expr(self, _p:int=0): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 246 + self.state = 268 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,27,self._ctx) + la_ = self._interp.adaptivePredict(self._input,31,self._ctx) if la_ == 1: localctx = PyxellParser.ExprAtomContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 202 + self.state = 224 self.atom() pass @@ -1809,11 +1903,11 @@ def expr(self, _p:int=0): localctx = PyxellParser.ExprParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 203 + self.state = 225 self.match(PyxellParser.T__36) - self.state = 204 + self.state = 226 self.tuple_expr() - self.state = 205 + self.state = 227 self.match(PyxellParser.T__37) pass @@ -1821,30 +1915,30 @@ def expr(self, _p:int=0): localctx = PyxellParser.ExprArrayContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 207 + self.state = 229 self.match(PyxellParser.T__44) - self.state = 213 + self.state = 235 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,22,self._ctx) + _alt = self._interp.adaptivePredict(self._input,26,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 208 + self.state = 230 self.expr(0) - self.state = 209 + self.state = 231 self.match(PyxellParser.T__23) - self.state = 215 + self.state = 237 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,22,self._ctx) + _alt = self._interp.adaptivePredict(self._input,26,self._ctx) - self.state = 217 + self.state = 239 self._errHandler.sync(self) _la = self._input.LA(1) if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__36 - 13)) | (1 << (PyxellParser.T__44 - 13)) | (1 << (PyxellParser.T__49 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 216 + self.state = 238 self.expr(0) - self.state = 219 + self.state = 241 self.match(PyxellParser.T__45) pass @@ -1852,23 +1946,23 @@ def expr(self, _p:int=0): localctx = PyxellParser.ExprArrayComprehensionContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 220 + self.state = 242 self.match(PyxellParser.T__44) - self.state = 221 + self.state = 243 self.expr(0) - self.state = 223 + self.state = 245 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 222 + self.state = 244 self.comprehension() - self.state = 225 + self.state = 247 self._errHandler.sync(self) _la = self._input.LA(1) if not (_la==PyxellParser.T__24 or _la==PyxellParser.T__30): break - self.state = 227 + self.state = 249 self.match(PyxellParser.T__45) pass @@ -1876,7 +1970,7 @@ def expr(self, _p:int=0): localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 229 + self.state = 251 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__49))) != 0)): @@ -1884,7 +1978,7 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 230 + self.state = 252 self.expr(17) pass @@ -1892,9 +1986,9 @@ def expr(self, _p:int=0): localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 231 + self.state = 253 localctx.op = self.match(PyxellParser.T__58) - self.state = 232 + self.state = 254 self.expr(6) pass @@ -1902,69 +1996,69 @@ def expr(self, _p:int=0): localctx = PyxellParser.ExprLambdaContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 233 + self.state = 255 self.match(PyxellParser.T__61) - self.state = 238 + self.state = 260 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,25,self._ctx) + _alt = self._interp.adaptivePredict(self._input,29,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 234 + self.state = 256 self.match(PyxellParser.ID) - self.state = 235 + self.state = 257 self.match(PyxellParser.T__23) - self.state = 240 + self.state = 262 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,25,self._ctx) + _alt = self._interp.adaptivePredict(self._input,29,self._ctx) - self.state = 242 + self.state = 264 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.ID: - self.state = 241 + self.state = 263 self.match(PyxellParser.ID) - self.state = 244 + self.state = 266 self.match(PyxellParser.T__62) - self.state = 245 + self.state = 267 self.expr(1) pass self._ctx.stop = self._input.LT(-1) - self.state = 343 + self.state = 365 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,37,self._ctx) + _alt = self._interp.adaptivePredict(self._input,41,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 341 + self.state = 363 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,36,self._ctx) + la_ = self._interp.adaptivePredict(self._input,40,self._ctx) if la_ == 1: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 248 + self.state = 270 if not self.precpred(self._ctx, 18): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 18)") - self.state = 249 + self.state = 271 localctx.op = self.match(PyxellParser.T__8) - self.state = 250 + self.state = 272 self.expr(18) pass elif la_ == 2: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 251 + self.state = 273 if not self.precpred(self._ctx, 16): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 16)") - self.state = 252 + self.state = 274 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__9) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__11))) != 0)): @@ -1972,18 +2066,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 253 + self.state = 275 self.expr(17) pass elif la_ == 3: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 254 + self.state = 276 if not self.precpred(self._ctx, 15): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 15)") - self.state = 255 + self.state = 277 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__12 or _la==PyxellParser.T__13): @@ -1991,18 +2085,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 256 + self.state = 278 self.expr(16) pass elif la_ == 4: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 257 + self.state = 279 if not self.precpred(self._ctx, 14): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 14)") - self.state = 258 + self.state = 280 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__14 or _la==PyxellParser.T__15): @@ -2010,57 +2104,57 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 259 + self.state = 281 self.expr(15) pass elif la_ == 5: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 260 + self.state = 282 if not self.precpred(self._ctx, 13): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") - self.state = 261 + self.state = 283 localctx.op = self.match(PyxellParser.T__16) - self.state = 262 + self.state = 284 self.expr(14) pass elif la_ == 6: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 263 + self.state = 285 if not self.precpred(self._ctx, 12): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 12)") - self.state = 264 + self.state = 286 localctx.op = self.match(PyxellParser.T__17) - self.state = 265 + self.state = 287 self.expr(13) pass elif la_ == 7: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 266 + self.state = 288 if not self.precpred(self._ctx, 11): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") - self.state = 267 + self.state = 289 localctx.op = self.match(PyxellParser.T__18) - self.state = 268 + self.state = 290 self.expr(12) pass elif la_ == 8: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 269 + self.state = 291 if not self.precpred(self._ctx, 10): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") - self.state = 270 + self.state = 292 localctx.dots = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__50 or _la==PyxellParser.T__51): @@ -2068,18 +2162,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 271 + self.state = 293 self.expr(11) pass elif la_ == 9: localctx = PyxellParser.ExprIsContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 272 + self.state = 294 if not self.precpred(self._ctx, 8): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") - self.state = 273 + self.state = 295 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__52 or _la==PyxellParser.T__53): @@ -2087,18 +2181,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 274 + self.state = 296 self.expr(9) pass elif la_ == 10: localctx = PyxellParser.ExprCmpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 275 + self.state = 297 if not self.precpred(self._ctx, 7): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") - self.state = 276 + self.state = 298 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__34) | (1 << PyxellParser.T__35) | (1 << PyxellParser.T__54) | (1 << PyxellParser.T__55) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57))) != 0)): @@ -2106,217 +2200,217 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 277 + self.state = 299 self.expr(7) pass elif la_ == 11: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 278 + self.state = 300 if not self.precpred(self._ctx, 5): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") - self.state = 279 + self.state = 301 localctx.op = self.match(PyxellParser.T__59) - self.state = 280 + self.state = 302 self.expr(5) pass elif la_ == 12: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 281 + self.state = 303 if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") - self.state = 282 + self.state = 304 localctx.op = self.match(PyxellParser.T__60) - self.state = 283 + self.state = 305 self.expr(4) pass elif la_ == 13: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 284 + self.state = 306 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 285 + self.state = 307 localctx.op = self.match(PyxellParser.T__19) - self.state = 286 + self.state = 308 self.expr(3) pass elif la_ == 14: localctx = PyxellParser.ExprCondContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 287 + self.state = 309 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 288 + self.state = 310 self.match(PyxellParser.T__46) - self.state = 289 + self.state = 311 self.expr(0) - self.state = 290 + self.state = 312 self.match(PyxellParser.T__43) - self.state = 291 + self.state = 313 self.expr(2) pass elif la_ == 15: localctx = PyxellParser.ExprIndexContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 293 + self.state = 315 if not self.precpred(self._ctx, 23): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 23)") - self.state = 295 + self.state = 317 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__46: - self.state = 294 + self.state = 316 localctx.safe = self.match(PyxellParser.T__46) - self.state = 297 + self.state = 319 self.match(PyxellParser.T__44) - self.state = 298 + self.state = 320 self.tuple_expr() - self.state = 299 + self.state = 321 self.match(PyxellParser.T__45) pass elif la_ == 16: localctx = PyxellParser.ExprSliceContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 301 + self.state = 323 if not self.precpred(self._ctx, 22): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 22)") - self.state = 302 + self.state = 324 self.match(PyxellParser.T__44) - self.state = 304 + self.state = 326 self._errHandler.sync(self) _la = self._input.LA(1) if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__36 - 13)) | (1 << (PyxellParser.T__44 - 13)) | (1 << (PyxellParser.T__49 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 303 + self.state = 325 localctx.e1 = self.expr(0) - self.state = 306 + self.state = 328 self.match(PyxellParser.T__43) - self.state = 308 + self.state = 330 self._errHandler.sync(self) _la = self._input.LA(1) if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__36 - 13)) | (1 << (PyxellParser.T__44 - 13)) | (1 << (PyxellParser.T__49 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 307 + self.state = 329 localctx.e2 = self.expr(0) - self.state = 314 + self.state = 336 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__43: - self.state = 310 + self.state = 332 self.match(PyxellParser.T__43) - self.state = 312 + self.state = 334 self._errHandler.sync(self) _la = self._input.LA(1) if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__36 - 13)) | (1 << (PyxellParser.T__44 - 13)) | (1 << (PyxellParser.T__49 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 311 + self.state = 333 localctx.e3 = self.expr(0) - self.state = 316 + self.state = 338 self.match(PyxellParser.T__45) pass elif la_ == 17: localctx = PyxellParser.ExprAttrContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 317 + self.state = 339 if not self.precpred(self._ctx, 21): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 21)") - self.state = 319 + self.state = 341 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__46: - self.state = 318 + self.state = 340 localctx.safe = self.match(PyxellParser.T__46) - self.state = 321 + self.state = 343 self.match(PyxellParser.T__47) - self.state = 322 + self.state = 344 self.match(PyxellParser.ID) pass elif la_ == 18: localctx = PyxellParser.ExprCallContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 323 + self.state = 345 if not self.precpred(self._ctx, 20): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 20)") - self.state = 324 + self.state = 346 self.match(PyxellParser.T__36) - self.state = 330 + self.state = 352 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,34,self._ctx) + _alt = self._interp.adaptivePredict(self._input,38,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 325 + self.state = 347 self.call_arg() - self.state = 326 + self.state = 348 self.match(PyxellParser.T__23) - self.state = 332 + self.state = 354 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,34,self._ctx) + _alt = self._interp.adaptivePredict(self._input,38,self._ctx) - self.state = 334 + self.state = 356 self._errHandler.sync(self) _la = self._input.LA(1) if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__36 - 13)) | (1 << (PyxellParser.T__44 - 13)) | (1 << (PyxellParser.T__49 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 333 + self.state = 355 self.call_arg() - self.state = 336 + self.state = 358 self.match(PyxellParser.T__37) pass elif la_ == 19: localctx = PyxellParser.ExprUnaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 337 + self.state = 359 if not self.precpred(self._ctx, 19): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 19)") - self.state = 338 + self.state = 360 localctx.op = self.match(PyxellParser.T__48) pass elif la_ == 20: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 339 + self.state = 361 if not self.precpred(self._ctx, 9): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") - self.state = 340 + self.state = 362 localctx.dots = self.match(PyxellParser.T__51) pass - self.state = 345 + self.state = 367 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,37,self._ctx) + _alt = self._interp.adaptivePredict(self._input,41,self._ctx) except RecognitionException as re: localctx.exception = re @@ -2371,20 +2465,20 @@ def tuple_expr(self): try: localctx = PyxellParser.ExprTupleContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 351 + self.state = 373 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,38,self._ctx) + _alt = self._interp.adaptivePredict(self._input,42,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 346 + self.state = 368 self.expr(0) - self.state = 347 + self.state = 369 self.match(PyxellParser.T__23) - self.state = 353 + self.state = 375 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,38,self._ctx) + _alt = self._interp.adaptivePredict(self._input,42,self._ctx) - self.state = 354 + self.state = 376 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -2438,9 +2532,9 @@ def interpolation_expr(self): try: localctx = PyxellParser.ExprInterpolationContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 356 + self.state = 378 self.tuple_expr() - self.state = 357 + self.state = 379 self.match(PyxellParser.EOF) except RecognitionException as re: localctx.exception = re @@ -2511,27 +2605,27 @@ def comprehension(self): self.enterRule(localctx, 22, self.RULE_comprehension) self._la = 0 # Token type try: - self.state = 369 + self.state = 391 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__30]: localctx = PyxellParser.ComprehensionGeneratorContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 359 + self.state = 381 self.match(PyxellParser.T__30) - self.state = 360 + self.state = 382 self.tuple_expr() - self.state = 361 + self.state = 383 self.match(PyxellParser.T__31) - self.state = 362 + self.state = 384 self.tuple_expr() - self.state = 365 + self.state = 387 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__32: - self.state = 363 + self.state = 385 self.match(PyxellParser.T__32) - self.state = 364 + self.state = 386 self.tuple_expr() @@ -2539,9 +2633,9 @@ def comprehension(self): elif token in [PyxellParser.T__24]: localctx = PyxellParser.ComprehensionFilterContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 367 + self.state = 389 self.match(PyxellParser.T__24) - self.state = 368 + self.state = 390 self.expr(0) pass else: @@ -2599,17 +2693,17 @@ def call_arg(self): try: localctx = PyxellParser.CallArgContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 373 + self.state = 395 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,41,self._ctx) + la_ = self._interp.adaptivePredict(self._input,45,self._ctx) if la_ == 1: - self.state = 371 + self.state = 393 self.match(PyxellParser.ID) - self.state = 372 + self.state = 394 self.match(PyxellParser.T__7) - self.state = 375 + self.state = 397 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -2751,25 +2845,25 @@ def atom(self): self.enterRule(localctx, 26, self.RULE_atom) self._la = 0 # Token type try: - self.state = 384 + self.state = 406 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: localctx = PyxellParser.AtomIntContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 377 + self.state = 399 self.match(PyxellParser.INT) pass elif token in [PyxellParser.FLOAT]: localctx = PyxellParser.AtomFloatContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 378 + self.state = 400 self.match(PyxellParser.FLOAT) pass elif token in [PyxellParser.T__63, PyxellParser.T__64]: localctx = PyxellParser.AtomBoolContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 379 + self.state = 401 _la = self._input.LA(1) if not(_la==PyxellParser.T__63 or _la==PyxellParser.T__64): self._errHandler.recoverInline(self) @@ -2780,25 +2874,25 @@ def atom(self): elif token in [PyxellParser.CHAR]: localctx = PyxellParser.AtomCharContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 380 + self.state = 402 self.match(PyxellParser.CHAR) pass elif token in [PyxellParser.STRING]: localctx = PyxellParser.AtomStringContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 381 + self.state = 403 self.match(PyxellParser.STRING) pass elif token in [PyxellParser.T__65]: localctx = PyxellParser.AtomNullContext(self, localctx) self.enterOuterAlt(localctx, 6) - self.state = 382 + self.state = 404 self.match(PyxellParser.T__65) pass elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) self.enterOuterAlt(localctx, 7) - self.state = 383 + self.state = 405 self.match(PyxellParser.ID) pass else: @@ -2856,20 +2950,20 @@ def id_list(self): try: localctx = PyxellParser.IdListContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 390 + self.state = 412 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,43,self._ctx) + _alt = self._interp.adaptivePredict(self._input,47,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 386 + self.state = 408 self.match(PyxellParser.ID) - self.state = 387 + self.state = 409 self.match(PyxellParser.T__23) - self.state = 392 + self.state = 414 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,43,self._ctx) + _alt = self._interp.adaptivePredict(self._input,47,self._ctx) - self.state = 393 + self.state = 415 self.match(PyxellParser.ID) except RecognitionException as re: localctx.exception = re @@ -3029,7 +3123,7 @@ def typ(self, _p:int=0): self.enterRecursionRule(localctx, 30, self.RULE_typ, _p) try: self.enterOuterAlt(localctx, 1) - self.state = 407 + self.state = 429 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.ID]: @@ -3037,96 +3131,96 @@ def typ(self, _p:int=0): self._ctx = localctx _prevctx = localctx - self.state = 396 + self.state = 418 self.match(PyxellParser.ID) pass elif token in [PyxellParser.T__36]: localctx = PyxellParser.TypeParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 397 + self.state = 419 self.match(PyxellParser.T__36) - self.state = 398 + self.state = 420 self.typ(0) - self.state = 399 + self.state = 421 self.match(PyxellParser.T__37) pass elif token in [PyxellParser.T__44]: localctx = PyxellParser.TypeArrayContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 401 + self.state = 423 self.match(PyxellParser.T__44) - self.state = 402 + self.state = 424 self.typ(0) - self.state = 403 + self.state = 425 self.match(PyxellParser.T__45) pass elif token in [PyxellParser.T__62]: localctx = PyxellParser.TypeFunc0Context(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 405 + self.state = 427 self.match(PyxellParser.T__62) - self.state = 406 + self.state = 428 self.typ(1) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 419 + self.state = 441 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,46,self._ctx) + _alt = self._interp.adaptivePredict(self._input,50,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 417 + self.state = 439 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,45,self._ctx) + la_ = self._interp.adaptivePredict(self._input,49,self._ctx) if la_ == 1: localctx = PyxellParser.TypeTupleContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 409 + self.state = 431 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 410 + self.state = 432 self.match(PyxellParser.T__9) - self.state = 411 + self.state = 433 self.typ(3) pass elif la_ == 2: localctx = PyxellParser.TypeFuncContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 412 + self.state = 434 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 413 + self.state = 435 self.match(PyxellParser.T__62) - self.state = 414 + self.state = 436 self.typ(2) pass elif la_ == 3: localctx = PyxellParser.TypeNullableContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 415 + self.state = 437 if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") - self.state = 416 + self.state = 438 self.match(PyxellParser.T__46) pass - self.state = 421 + self.state = 443 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,46,self._ctx) + _alt = self._interp.adaptivePredict(self._input,50,self._ctx) except RecognitionException as re: localctx.exception = re diff --git a/src/antlr/PyxellVisitor.py b/src/antlr/PyxellVisitor.py index a9e90c19..ae9bf2db 100644 --- a/src/antlr/PyxellVisitor.py +++ b/src/antlr/PyxellVisitor.py @@ -104,6 +104,11 @@ def visitClassField(self, ctx:PyxellParser.ClassFieldContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#ClassMethod. + def visitClassMethod(self, ctx:PyxellParser.ClassMethodContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#block. def visitBlock(self, ctx:PyxellParser.BlockContext): return self.visitChildren(ctx) diff --git a/src/ast.py b/src/ast.py index 182e35bf..b06a6ca5 100644 --- a/src/ast.py +++ b/src/ast.py @@ -172,10 +172,19 @@ def visitClassField(self, ctx): return { **_node(ctx, 'ClassField'), 'type': self.visit(ctx.typ()), - 'name': self.visit(ctx.ID()), + 'id': self.visit(ctx.ID()), 'default': self.visit(ctx.tuple_expr()), } + def visitClassMethod(self, ctx): + return { + **_node(ctx, 'ClassMethod'), + 'id': self.visit(ctx.ID()), + 'args': self.visit(ctx.func_arg()), + 'ret': self.visit(ctx.ret), + 'block': self.visit(ctx.block()), + } + ### Expressions ### diff --git a/src/compiler.py b/src/compiler.py index 6fdcd194..c2f54805 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -1296,16 +1296,18 @@ def compileStmtLoopControl(self, node): self.builder.branch(label) - def compileStmtFunc(self, node): + def compileStmtFunc(self, node, class_type=None): id = node['id'] - self.initialized.add(id) + + if class_type is None: + self.initialized.add(id) with self.local(): typevars = node.get('typevars', []) for name in typevars: self.env[name] = tVar(name) - args = [] + args = [] if class_type is None else [Arg(class_type, 'self')] expect_default = False for arg in node['args']: type = self.compile(arg['type']) @@ -1325,7 +1327,10 @@ def compileStmtFunc(self, node): env = self.env.copy() func = FunctionTemplate(id, typevars, func_type, node['block'], env) - self.env[id] = env[id] = func + if class_type is None: + self.env[id] = env[id] = func + + return func def compileStmtReturn(self, node): try: @@ -1363,22 +1368,28 @@ def compileStmtClass(self, node): self.throw(node, err.RedeclaredIdentifier(id)) self.initialized.add(id) - members = {} - type = tClass(self.module.context, id, members) + member_types = {} + methods = {} + type = tClass(self.module.context, id, member_types) self.env[id] = type for member in node['members']: - name = member['name'] - if name in members: + name = member['id'] + if name in member_types: self.throw(member, err.RepeatedMember(name)) - members[name] = self.compile(member['type']) + if member['node'] == 'ClassField': + member_types[name] = self.compile(member['type']) + elif member['node'] == 'ClassMethod': + func = self.compileStmtFunc(member, class_type=type) + member_types[name] = func.type + methods[name] = func - type.pointee.set_body(*members.values()) + type.pointee.set_body(*member_types.values()) constructor_type = tFunc([], type) - constructor = ll.Function(self.module, constructor_type.pointee, self.module.get_unique_name('def.'+id+'.init')) + constructor = ll.Function(self.module, constructor_type.pointee, self.module.get_unique_name('def.'+id)) - constructor_ptr = ll.GlobalVariable(self.module, constructor_type, self.module.get_unique_name(id+'.init')) + constructor_ptr = ll.GlobalVariable(self.module, constructor_type, self.module.get_unique_name(id)) constructor_ptr.initializer = constructor type.constructor = constructor_ptr @@ -1389,10 +1400,14 @@ def compileStmtClass(self, node): obj = self.malloc(type) for i, member in enumerate(node['members']): - default = member.get('default') - if default: - value = self.cast(member, self.compile(default), self.compile(member['type'])) - self.insert(value, obj, i) + name = member['id'] + if member['node'] == 'ClassField': + default = member.get('default') + if default: + value = self.cast(member, self.compile(default), member_types[name]) + self.insert(value, obj, i) + elif member['node'] == 'ClassMethod': + self.insert(self.builder.load(self.function(member, methods[name])), obj, i) self.builder.ret(obj) diff --git a/test/good/classes/method06.out b/test/good/classes/method06.out new file mode 100644 index 00000000..d5ebad75 --- /dev/null +++ b/test/good/classes/method06.out @@ -0,0 +1,3 @@ +f +A.f +B.f diff --git a/test/good/classes/method06.px b/test/good/classes/method06.px new file mode 100644 index 00000000..290b59ba --- /dev/null +++ b/test/good/classes/method06.px @@ -0,0 +1,15 @@ + +func f() def + print "f" + +class A def + func f() def + print "A.f" + +class B def + func f() def + print "B.f" + +f() +A().f() +B().f() From 81164369ed9694b0708bf77f9f390d489c72ac9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sat, 30 Nov 2019 20:07:17 +0100 Subject: [PATCH 076/100] Printing objects --- src/compiler.py | 11 +++++++++++ test/bad/classes/print03.err | 1 + test/bad/classes/print03.px | 6 ++++++ test/bad/classes/print04.err | 1 + test/bad/classes/print04.px | 5 +++++ 5 files changed, 24 insertions(+) create mode 100644 test/bad/classes/print03.err create mode 100644 test/bad/classes/print03.px create mode 100644 test/bad/classes/print04.err create mode 100644 test/bad/classes/print04.px diff --git a/src/compiler.py b/src/compiler.py index c2f54805..974981a5 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -752,6 +752,17 @@ def print(self, node, value): self.write(' ') self.print(node, self.extract(value, i)) + elif value.type.isClass(): + try: + method = self.attr(node, value, "toString") + except err: + method = None + + if not (method and method.type.isFunc() and len(method.type.args) == 1 and method.type.ret == tString): + self.throw(node, err.NotPrintable(value.type)) + + self.print(node, self.builder.call(method, [value])) + elif value.type == tUnknown: pass diff --git a/test/bad/classes/print03.err b/test/bad/classes/print03.err new file mode 100644 index 00000000..1df0b0cd --- /dev/null +++ b/test/bad/classes/print03.err @@ -0,0 +1 @@ +Variable of type `Test` cannot be printed. \ No newline at end of file diff --git a/test/bad/classes/print03.px b/test/bad/classes/print03.px new file mode 100644 index 00000000..72aae472 --- /dev/null +++ b/test/bad/classes/print03.px @@ -0,0 +1,6 @@ + +class Test def + func toString(Int x) String def + return "" + +print Test() diff --git a/test/bad/classes/print04.err b/test/bad/classes/print04.err new file mode 100644 index 00000000..1df0b0cd --- /dev/null +++ b/test/bad/classes/print04.err @@ -0,0 +1 @@ +Variable of type `Test` cannot be printed. \ No newline at end of file diff --git a/test/bad/classes/print04.px b/test/bad/classes/print04.px new file mode 100644 index 00000000..23749af0 --- /dev/null +++ b/test/bad/classes/print04.px @@ -0,0 +1,5 @@ + +class Test def + String toString + +print Test() From ea7b3318a782ba9c846ec35f8e9f6b334d3aaf12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sat, 30 Nov 2019 21:41:49 +0100 Subject: [PATCH 077/100] Constructors --- src/Pyxell.g4 | 9 +- src/antlr/Pyxell.interp | 9 +- src/antlr/Pyxell.tokens | 78 +- src/antlr/PyxellLexer.interp | 9 +- src/antlr/PyxellLexer.py | 422 ++++---- src/antlr/PyxellLexer.tokens | 78 +- src/antlr/PyxellParser.py | 1464 +++++++++++++++------------- src/antlr/PyxellVisitor.py | 10 + src/ast.py | 12 +- src/compiler.py | 11 +- test/bad/classes/constructor02.err | 2 +- test/bad/classes/constructor05.err | 1 + test/bad/classes/constructor05.px | 6 + 13 files changed, 1109 insertions(+), 1002 deletions(-) create mode 100644 test/bad/classes/constructor05.err create mode 100644 test/bad/classes/constructor05.px diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index 2c7a9f8c..6fcb619e 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -29,7 +29,7 @@ compound_stmt | 'while' expr 'do' block # StmtWhile | 'until' expr 'do' block # StmtUntil | 'for' tuple_expr 'in' tuple_expr ('step' tuple_expr)? 'do' block # StmtFor - | 'func' ID ('<' typevars=id_list '>')? '(' (func_arg ',')* func_arg? ')' (ret=typ)? ('def' block | 'extern' ';') # StmtFunc + | 'func' ID ('<' typevars=id_list '>')? args=func_args (ret=typ)? ('def' block | 'extern' ';') # StmtFunc | 'class' ID 'def' '{' class_member+ '}' # StmtClass ; @@ -37,9 +37,14 @@ func_arg : typ ID (':' expr)? # FuncArg ; +func_args + : '(' (func_arg ',')* func_arg? ')' + ; + class_member : typ ID (':' tuple_expr)? ';' # ClassField - | 'func' ID '(' (func_arg ',')* func_arg? ')' (ret=typ)? 'def' block # ClassMethod + | 'func' ID args=func_args (ret=typ)? 'def' block # ClassMethod + | 'constructor' args=func_args 'def' block # ClassConstructor ; block diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index 52138ee1..489fa733 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -36,14 +36,15 @@ null 'func' '<' '>' -'(' -')' 'def' 'extern' 'class' '{' '}' ':' +'(' +')' +'constructor' '[' ']' '?' @@ -143,6 +144,7 @@ null null null null +null INT FLOAT CHAR @@ -159,6 +161,7 @@ simple_stmt lvalue compound_stmt func_arg +func_args class_member block expr @@ -172,4 +175,4 @@ typ atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 76, 447, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 3, 2, 7, 2, 36, 10, 2, 12, 2, 14, 2, 39, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 47, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 57, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 62, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 68, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 73, 10, 4, 12, 4, 14, 4, 76, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 87, 10, 4, 5, 4, 89, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 94, 10, 5, 12, 5, 14, 5, 97, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 108, 10, 6, 12, 6, 14, 6, 111, 11, 6, 3, 6, 3, 6, 3, 6, 5, 6, 116, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 134, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 145, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 151, 10, 6, 12, 6, 14, 6, 154, 11, 6, 3, 6, 5, 6, 157, 10, 6, 3, 6, 3, 6, 5, 6, 161, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 167, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 6, 6, 174, 10, 6, 13, 6, 14, 6, 175, 3, 6, 3, 6, 5, 6, 180, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 186, 10, 7, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 192, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 202, 10, 8, 12, 8, 14, 8, 205, 11, 8, 3, 8, 5, 8, 208, 10, 8, 3, 8, 3, 8, 5, 8, 212, 10, 8, 3, 8, 3, 8, 5, 8, 216, 10, 8, 3, 9, 3, 9, 6, 9, 220, 10, 9, 13, 9, 14, 9, 221, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 236, 10, 10, 12, 10, 14, 10, 239, 11, 10, 3, 10, 5, 10, 242, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 6, 10, 248, 10, 10, 13, 10, 14, 10, 249, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 261, 10, 10, 12, 10, 14, 10, 264, 11, 10, 3, 10, 5, 10, 267, 10, 10, 3, 10, 3, 10, 5, 10, 271, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 320, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 329, 10, 10, 3, 10, 3, 10, 5, 10, 333, 10, 10, 3, 10, 3, 10, 5, 10, 337, 10, 10, 5, 10, 339, 10, 10, 3, 10, 3, 10, 3, 10, 5, 10, 344, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 353, 10, 10, 12, 10, 14, 10, 356, 11, 10, 3, 10, 5, 10, 359, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 366, 10, 10, 12, 10, 14, 10, 369, 11, 10, 3, 11, 3, 11, 3, 11, 7, 11, 374, 10, 11, 12, 11, 14, 11, 377, 11, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 390, 10, 13, 3, 13, 3, 13, 5, 13, 394, 10, 13, 3, 14, 3, 14, 5, 14, 398, 10, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 409, 10, 15, 3, 16, 3, 16, 7, 16, 413, 10, 16, 12, 16, 14, 16, 416, 11, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 5, 17, 432, 10, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 7, 17, 442, 10, 17, 12, 17, 14, 17, 445, 11, 17, 3, 17, 2, 4, 18, 32, 18, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 2, 12, 3, 2, 11, 22, 3, 2, 23, 24, 4, 2, 15, 16, 52, 52, 3, 2, 12, 14, 3, 2, 15, 16, 3, 2, 17, 18, 3, 2, 53, 54, 3, 2, 55, 56, 4, 2, 37, 38, 57, 60, 3, 2, 66, 67, 2, 524, 2, 37, 3, 2, 2, 2, 4, 46, 3, 2, 2, 2, 6, 88, 3, 2, 2, 2, 8, 90, 3, 2, 2, 2, 10, 179, 3, 2, 2, 2, 12, 181, 3, 2, 2, 2, 14, 215, 3, 2, 2, 2, 16, 217, 3, 2, 2, 2, 18, 270, 3, 2, 2, 2, 20, 375, 3, 2, 2, 2, 22, 380, 3, 2, 2, 2, 24, 393, 3, 2, 2, 2, 26, 397, 3, 2, 2, 2, 28, 408, 3, 2, 2, 2, 30, 414, 3, 2, 2, 2, 32, 431, 3, 2, 2, 2, 34, 36, 5, 4, 3, 2, 35, 34, 3, 2, 2, 2, 36, 39, 3, 2, 2, 2, 37, 35, 3, 2, 2, 2, 37, 38, 3, 2, 2, 2, 38, 40, 3, 2, 2, 2, 39, 37, 3, 2, 2, 2, 40, 41, 7, 2, 2, 3, 41, 3, 3, 2, 2, 2, 42, 43, 5, 6, 4, 2, 43, 44, 7, 3, 2, 2, 44, 47, 3, 2, 2, 2, 45, 47, 5, 10, 6, 2, 46, 42, 3, 2, 2, 2, 46, 45, 3, 2, 2, 2, 47, 5, 3, 2, 2, 2, 48, 49, 7, 4, 2, 2, 49, 56, 7, 73, 2, 2, 50, 51, 7, 5, 2, 2, 51, 57, 5, 30, 16, 2, 52, 53, 7, 6, 2, 2, 53, 57, 5, 30, 16, 2, 54, 55, 7, 7, 2, 2, 55, 57, 7, 73, 2, 2, 56, 50, 3, 2, 2, 2, 56, 52, 3, 2, 2, 2, 56, 54, 3, 2, 2, 2, 56, 57, 3, 2, 2, 2, 57, 89, 3, 2, 2, 2, 58, 89, 7, 8, 2, 2, 59, 61, 7, 9, 2, 2, 60, 62, 5, 20, 11, 2, 61, 60, 3, 2, 2, 2, 61, 62, 3, 2, 2, 2, 62, 89, 3, 2, 2, 2, 63, 64, 5, 32, 17, 2, 64, 67, 7, 73, 2, 2, 65, 66, 7, 10, 2, 2, 66, 68, 5, 20, 11, 2, 67, 65, 3, 2, 2, 2, 67, 68, 3, 2, 2, 2, 68, 89, 3, 2, 2, 2, 69, 70, 5, 8, 5, 2, 70, 71, 7, 10, 2, 2, 71, 73, 3, 2, 2, 2, 72, 69, 3, 2, 2, 2, 73, 76, 3, 2, 2, 2, 74, 72, 3, 2, 2, 2, 74, 75, 3, 2, 2, 2, 75, 77, 3, 2, 2, 2, 76, 74, 3, 2, 2, 2, 77, 89, 5, 20, 11, 2, 78, 79, 5, 18, 10, 2, 79, 80, 9, 2, 2, 2, 80, 81, 7, 10, 2, 2, 81, 82, 5, 18, 10, 2, 82, 89, 3, 2, 2, 2, 83, 89, 9, 3, 2, 2, 84, 86, 7, 25, 2, 2, 85, 87, 5, 20, 11, 2, 86, 85, 3, 2, 2, 2, 86, 87, 3, 2, 2, 2, 87, 89, 3, 2, 2, 2, 88, 48, 3, 2, 2, 2, 88, 58, 3, 2, 2, 2, 88, 59, 3, 2, 2, 2, 88, 63, 3, 2, 2, 2, 88, 74, 3, 2, 2, 2, 88, 78, 3, 2, 2, 2, 88, 83, 3, 2, 2, 2, 88, 84, 3, 2, 2, 2, 89, 7, 3, 2, 2, 2, 90, 95, 5, 18, 10, 2, 91, 92, 7, 26, 2, 2, 92, 94, 5, 18, 10, 2, 93, 91, 3, 2, 2, 2, 94, 97, 3, 2, 2, 2, 95, 93, 3, 2, 2, 2, 95, 96, 3, 2, 2, 2, 96, 9, 3, 2, 2, 2, 97, 95, 3, 2, 2, 2, 98, 99, 7, 27, 2, 2, 99, 100, 5, 18, 10, 2, 100, 101, 7, 28, 2, 2, 101, 109, 5, 16, 9, 2, 102, 103, 7, 29, 2, 2, 103, 104, 5, 18, 10, 2, 104, 105, 7, 28, 2, 2, 105, 106, 5, 16, 9, 2, 106, 108, 3, 2, 2, 2, 107, 102, 3, 2, 2, 2, 108, 111, 3, 2, 2, 2, 109, 107, 3, 2, 2, 2, 109, 110, 3, 2, 2, 2, 110, 115, 3, 2, 2, 2, 111, 109, 3, 2, 2, 2, 112, 113, 7, 30, 2, 2, 113, 114, 7, 28, 2, 2, 114, 116, 5, 16, 9, 2, 115, 112, 3, 2, 2, 2, 115, 116, 3, 2, 2, 2, 116, 180, 3, 2, 2, 2, 117, 118, 7, 31, 2, 2, 118, 119, 5, 18, 10, 2, 119, 120, 7, 28, 2, 2, 120, 121, 5, 16, 9, 2, 121, 180, 3, 2, 2, 2, 122, 123, 7, 32, 2, 2, 123, 124, 5, 18, 10, 2, 124, 125, 7, 28, 2, 2, 125, 126, 5, 16, 9, 2, 126, 180, 3, 2, 2, 2, 127, 128, 7, 33, 2, 2, 128, 129, 5, 20, 11, 2, 129, 130, 7, 34, 2, 2, 130, 133, 5, 20, 11, 2, 131, 132, 7, 35, 2, 2, 132, 134, 5, 20, 11, 2, 133, 131, 3, 2, 2, 2, 133, 134, 3, 2, 2, 2, 134, 135, 3, 2, 2, 2, 135, 136, 7, 28, 2, 2, 136, 137, 5, 16, 9, 2, 137, 180, 3, 2, 2, 2, 138, 139, 7, 36, 2, 2, 139, 144, 7, 73, 2, 2, 140, 141, 7, 37, 2, 2, 141, 142, 5, 30, 16, 2, 142, 143, 7, 38, 2, 2, 143, 145, 3, 2, 2, 2, 144, 140, 3, 2, 2, 2, 144, 145, 3, 2, 2, 2, 145, 146, 3, 2, 2, 2, 146, 152, 7, 39, 2, 2, 147, 148, 5, 12, 7, 2, 148, 149, 7, 26, 2, 2, 149, 151, 3, 2, 2, 2, 150, 147, 3, 2, 2, 2, 151, 154, 3, 2, 2, 2, 152, 150, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 156, 3, 2, 2, 2, 154, 152, 3, 2, 2, 2, 155, 157, 5, 12, 7, 2, 156, 155, 3, 2, 2, 2, 156, 157, 3, 2, 2, 2, 157, 158, 3, 2, 2, 2, 158, 160, 7, 40, 2, 2, 159, 161, 5, 32, 17, 2, 160, 159, 3, 2, 2, 2, 160, 161, 3, 2, 2, 2, 161, 166, 3, 2, 2, 2, 162, 163, 7, 41, 2, 2, 163, 167, 5, 16, 9, 2, 164, 165, 7, 42, 2, 2, 165, 167, 7, 3, 2, 2, 166, 162, 3, 2, 2, 2, 166, 164, 3, 2, 2, 2, 167, 180, 3, 2, 2, 2, 168, 169, 7, 43, 2, 2, 169, 170, 7, 73, 2, 2, 170, 171, 7, 41, 2, 2, 171, 173, 7, 44, 2, 2, 172, 174, 5, 14, 8, 2, 173, 172, 3, 2, 2, 2, 174, 175, 3, 2, 2, 2, 175, 173, 3, 2, 2, 2, 175, 176, 3, 2, 2, 2, 176, 177, 3, 2, 2, 2, 177, 178, 7, 45, 2, 2, 178, 180, 3, 2, 2, 2, 179, 98, 3, 2, 2, 2, 179, 117, 3, 2, 2, 2, 179, 122, 3, 2, 2, 2, 179, 127, 3, 2, 2, 2, 179, 138, 3, 2, 2, 2, 179, 168, 3, 2, 2, 2, 180, 11, 3, 2, 2, 2, 181, 182, 5, 32, 17, 2, 182, 185, 7, 73, 2, 2, 183, 184, 7, 46, 2, 2, 184, 186, 5, 18, 10, 2, 185, 183, 3, 2, 2, 2, 185, 186, 3, 2, 2, 2, 186, 13, 3, 2, 2, 2, 187, 188, 5, 32, 17, 2, 188, 191, 7, 73, 2, 2, 189, 190, 7, 46, 2, 2, 190, 192, 5, 20, 11, 2, 191, 189, 3, 2, 2, 2, 191, 192, 3, 2, 2, 2, 192, 193, 3, 2, 2, 2, 193, 194, 7, 3, 2, 2, 194, 216, 3, 2, 2, 2, 195, 196, 7, 36, 2, 2, 196, 197, 7, 73, 2, 2, 197, 203, 7, 39, 2, 2, 198, 199, 5, 12, 7, 2, 199, 200, 7, 26, 2, 2, 200, 202, 3, 2, 2, 2, 201, 198, 3, 2, 2, 2, 202, 205, 3, 2, 2, 2, 203, 201, 3, 2, 2, 2, 203, 204, 3, 2, 2, 2, 204, 207, 3, 2, 2, 2, 205, 203, 3, 2, 2, 2, 206, 208, 5, 12, 7, 2, 207, 206, 3, 2, 2, 2, 207, 208, 3, 2, 2, 2, 208, 209, 3, 2, 2, 2, 209, 211, 7, 40, 2, 2, 210, 212, 5, 32, 17, 2, 211, 210, 3, 2, 2, 2, 211, 212, 3, 2, 2, 2, 212, 213, 3, 2, 2, 2, 213, 214, 7, 41, 2, 2, 214, 216, 5, 16, 9, 2, 215, 187, 3, 2, 2, 2, 215, 195, 3, 2, 2, 2, 216, 15, 3, 2, 2, 2, 217, 219, 7, 44, 2, 2, 218, 220, 5, 4, 3, 2, 219, 218, 3, 2, 2, 2, 220, 221, 3, 2, 2, 2, 221, 219, 3, 2, 2, 2, 221, 222, 3, 2, 2, 2, 222, 223, 3, 2, 2, 2, 223, 224, 7, 45, 2, 2, 224, 17, 3, 2, 2, 2, 225, 226, 8, 10, 1, 2, 226, 271, 5, 28, 15, 2, 227, 228, 7, 39, 2, 2, 228, 229, 5, 20, 11, 2, 229, 230, 7, 40, 2, 2, 230, 271, 3, 2, 2, 2, 231, 237, 7, 47, 2, 2, 232, 233, 5, 18, 10, 2, 233, 234, 7, 26, 2, 2, 234, 236, 3, 2, 2, 2, 235, 232, 3, 2, 2, 2, 236, 239, 3, 2, 2, 2, 237, 235, 3, 2, 2, 2, 237, 238, 3, 2, 2, 2, 238, 241, 3, 2, 2, 2, 239, 237, 3, 2, 2, 2, 240, 242, 5, 18, 10, 2, 241, 240, 3, 2, 2, 2, 241, 242, 3, 2, 2, 2, 242, 243, 3, 2, 2, 2, 243, 271, 7, 48, 2, 2, 244, 245, 7, 47, 2, 2, 245, 247, 5, 18, 10, 2, 246, 248, 5, 24, 13, 2, 247, 246, 3, 2, 2, 2, 248, 249, 3, 2, 2, 2, 249, 247, 3, 2, 2, 2, 249, 250, 3, 2, 2, 2, 250, 251, 3, 2, 2, 2, 251, 252, 7, 48, 2, 2, 252, 271, 3, 2, 2, 2, 253, 254, 9, 4, 2, 2, 254, 271, 5, 18, 10, 19, 255, 256, 7, 61, 2, 2, 256, 271, 5, 18, 10, 8, 257, 262, 7, 64, 2, 2, 258, 259, 7, 73, 2, 2, 259, 261, 7, 26, 2, 2, 260, 258, 3, 2, 2, 2, 261, 264, 3, 2, 2, 2, 262, 260, 3, 2, 2, 2, 262, 263, 3, 2, 2, 2, 263, 266, 3, 2, 2, 2, 264, 262, 3, 2, 2, 2, 265, 267, 7, 73, 2, 2, 266, 265, 3, 2, 2, 2, 266, 267, 3, 2, 2, 2, 267, 268, 3, 2, 2, 2, 268, 269, 7, 65, 2, 2, 269, 271, 5, 18, 10, 3, 270, 225, 3, 2, 2, 2, 270, 227, 3, 2, 2, 2, 270, 231, 3, 2, 2, 2, 270, 244, 3, 2, 2, 2, 270, 253, 3, 2, 2, 2, 270, 255, 3, 2, 2, 2, 270, 257, 3, 2, 2, 2, 271, 367, 3, 2, 2, 2, 272, 273, 12, 20, 2, 2, 273, 274, 7, 11, 2, 2, 274, 366, 5, 18, 10, 20, 275, 276, 12, 18, 2, 2, 276, 277, 9, 5, 2, 2, 277, 366, 5, 18, 10, 19, 278, 279, 12, 17, 2, 2, 279, 280, 9, 6, 2, 2, 280, 366, 5, 18, 10, 18, 281, 282, 12, 16, 2, 2, 282, 283, 9, 7, 2, 2, 283, 366, 5, 18, 10, 17, 284, 285, 12, 15, 2, 2, 285, 286, 7, 19, 2, 2, 286, 366, 5, 18, 10, 16, 287, 288, 12, 14, 2, 2, 288, 289, 7, 20, 2, 2, 289, 366, 5, 18, 10, 15, 290, 291, 12, 13, 2, 2, 291, 292, 7, 21, 2, 2, 292, 366, 5, 18, 10, 14, 293, 294, 12, 12, 2, 2, 294, 295, 9, 8, 2, 2, 295, 366, 5, 18, 10, 13, 296, 297, 12, 10, 2, 2, 297, 298, 9, 9, 2, 2, 298, 366, 5, 18, 10, 11, 299, 300, 12, 9, 2, 2, 300, 301, 9, 10, 2, 2, 301, 366, 5, 18, 10, 9, 302, 303, 12, 7, 2, 2, 303, 304, 7, 62, 2, 2, 304, 366, 5, 18, 10, 7, 305, 306, 12, 6, 2, 2, 306, 307, 7, 63, 2, 2, 307, 366, 5, 18, 10, 6, 308, 309, 12, 5, 2, 2, 309, 310, 7, 22, 2, 2, 310, 366, 5, 18, 10, 5, 311, 312, 12, 4, 2, 2, 312, 313, 7, 49, 2, 2, 313, 314, 5, 18, 10, 2, 314, 315, 7, 46, 2, 2, 315, 316, 5, 18, 10, 4, 316, 366, 3, 2, 2, 2, 317, 319, 12, 25, 2, 2, 318, 320, 7, 49, 2, 2, 319, 318, 3, 2, 2, 2, 319, 320, 3, 2, 2, 2, 320, 321, 3, 2, 2, 2, 321, 322, 7, 47, 2, 2, 322, 323, 5, 20, 11, 2, 323, 324, 7, 48, 2, 2, 324, 366, 3, 2, 2, 2, 325, 326, 12, 24, 2, 2, 326, 328, 7, 47, 2, 2, 327, 329, 5, 18, 10, 2, 328, 327, 3, 2, 2, 2, 328, 329, 3, 2, 2, 2, 329, 330, 3, 2, 2, 2, 330, 332, 7, 46, 2, 2, 331, 333, 5, 18, 10, 2, 332, 331, 3, 2, 2, 2, 332, 333, 3, 2, 2, 2, 333, 338, 3, 2, 2, 2, 334, 336, 7, 46, 2, 2, 335, 337, 5, 18, 10, 2, 336, 335, 3, 2, 2, 2, 336, 337, 3, 2, 2, 2, 337, 339, 3, 2, 2, 2, 338, 334, 3, 2, 2, 2, 338, 339, 3, 2, 2, 2, 339, 340, 3, 2, 2, 2, 340, 366, 7, 48, 2, 2, 341, 343, 12, 23, 2, 2, 342, 344, 7, 49, 2, 2, 343, 342, 3, 2, 2, 2, 343, 344, 3, 2, 2, 2, 344, 345, 3, 2, 2, 2, 345, 346, 7, 50, 2, 2, 346, 366, 7, 73, 2, 2, 347, 348, 12, 22, 2, 2, 348, 354, 7, 39, 2, 2, 349, 350, 5, 26, 14, 2, 350, 351, 7, 26, 2, 2, 351, 353, 3, 2, 2, 2, 352, 349, 3, 2, 2, 2, 353, 356, 3, 2, 2, 2, 354, 352, 3, 2, 2, 2, 354, 355, 3, 2, 2, 2, 355, 358, 3, 2, 2, 2, 356, 354, 3, 2, 2, 2, 357, 359, 5, 26, 14, 2, 358, 357, 3, 2, 2, 2, 358, 359, 3, 2, 2, 2, 359, 360, 3, 2, 2, 2, 360, 366, 7, 40, 2, 2, 361, 362, 12, 21, 2, 2, 362, 366, 7, 51, 2, 2, 363, 364, 12, 11, 2, 2, 364, 366, 7, 54, 2, 2, 365, 272, 3, 2, 2, 2, 365, 275, 3, 2, 2, 2, 365, 278, 3, 2, 2, 2, 365, 281, 3, 2, 2, 2, 365, 284, 3, 2, 2, 2, 365, 287, 3, 2, 2, 2, 365, 290, 3, 2, 2, 2, 365, 293, 3, 2, 2, 2, 365, 296, 3, 2, 2, 2, 365, 299, 3, 2, 2, 2, 365, 302, 3, 2, 2, 2, 365, 305, 3, 2, 2, 2, 365, 308, 3, 2, 2, 2, 365, 311, 3, 2, 2, 2, 365, 317, 3, 2, 2, 2, 365, 325, 3, 2, 2, 2, 365, 341, 3, 2, 2, 2, 365, 347, 3, 2, 2, 2, 365, 361, 3, 2, 2, 2, 365, 363, 3, 2, 2, 2, 366, 369, 3, 2, 2, 2, 367, 365, 3, 2, 2, 2, 367, 368, 3, 2, 2, 2, 368, 19, 3, 2, 2, 2, 369, 367, 3, 2, 2, 2, 370, 371, 5, 18, 10, 2, 371, 372, 7, 26, 2, 2, 372, 374, 3, 2, 2, 2, 373, 370, 3, 2, 2, 2, 374, 377, 3, 2, 2, 2, 375, 373, 3, 2, 2, 2, 375, 376, 3, 2, 2, 2, 376, 378, 3, 2, 2, 2, 377, 375, 3, 2, 2, 2, 378, 379, 5, 18, 10, 2, 379, 21, 3, 2, 2, 2, 380, 381, 5, 20, 11, 2, 381, 382, 7, 2, 2, 3, 382, 23, 3, 2, 2, 2, 383, 384, 7, 33, 2, 2, 384, 385, 5, 20, 11, 2, 385, 386, 7, 34, 2, 2, 386, 389, 5, 20, 11, 2, 387, 388, 7, 35, 2, 2, 388, 390, 5, 20, 11, 2, 389, 387, 3, 2, 2, 2, 389, 390, 3, 2, 2, 2, 390, 394, 3, 2, 2, 2, 391, 392, 7, 27, 2, 2, 392, 394, 5, 18, 10, 2, 393, 383, 3, 2, 2, 2, 393, 391, 3, 2, 2, 2, 394, 25, 3, 2, 2, 2, 395, 396, 7, 73, 2, 2, 396, 398, 7, 10, 2, 2, 397, 395, 3, 2, 2, 2, 397, 398, 3, 2, 2, 2, 398, 399, 3, 2, 2, 2, 399, 400, 5, 18, 10, 2, 400, 27, 3, 2, 2, 2, 401, 409, 7, 69, 2, 2, 402, 409, 7, 70, 2, 2, 403, 409, 9, 11, 2, 2, 404, 409, 7, 71, 2, 2, 405, 409, 7, 72, 2, 2, 406, 409, 7, 68, 2, 2, 407, 409, 7, 73, 2, 2, 408, 401, 3, 2, 2, 2, 408, 402, 3, 2, 2, 2, 408, 403, 3, 2, 2, 2, 408, 404, 3, 2, 2, 2, 408, 405, 3, 2, 2, 2, 408, 406, 3, 2, 2, 2, 408, 407, 3, 2, 2, 2, 409, 29, 3, 2, 2, 2, 410, 411, 7, 73, 2, 2, 411, 413, 7, 26, 2, 2, 412, 410, 3, 2, 2, 2, 413, 416, 3, 2, 2, 2, 414, 412, 3, 2, 2, 2, 414, 415, 3, 2, 2, 2, 415, 417, 3, 2, 2, 2, 416, 414, 3, 2, 2, 2, 417, 418, 7, 73, 2, 2, 418, 31, 3, 2, 2, 2, 419, 420, 8, 17, 1, 2, 420, 432, 7, 73, 2, 2, 421, 422, 7, 39, 2, 2, 422, 423, 5, 32, 17, 2, 423, 424, 7, 40, 2, 2, 424, 432, 3, 2, 2, 2, 425, 426, 7, 47, 2, 2, 426, 427, 5, 32, 17, 2, 427, 428, 7, 48, 2, 2, 428, 432, 3, 2, 2, 2, 429, 430, 7, 65, 2, 2, 430, 432, 5, 32, 17, 3, 431, 419, 3, 2, 2, 2, 431, 421, 3, 2, 2, 2, 431, 425, 3, 2, 2, 2, 431, 429, 3, 2, 2, 2, 432, 443, 3, 2, 2, 2, 433, 434, 12, 5, 2, 2, 434, 435, 7, 12, 2, 2, 435, 442, 5, 32, 17, 5, 436, 437, 12, 4, 2, 2, 437, 438, 7, 65, 2, 2, 438, 442, 5, 32, 17, 4, 439, 440, 12, 6, 2, 2, 440, 442, 7, 49, 2, 2, 441, 433, 3, 2, 2, 2, 441, 436, 3, 2, 2, 2, 441, 439, 3, 2, 2, 2, 442, 445, 3, 2, 2, 2, 443, 441, 3, 2, 2, 2, 443, 444, 3, 2, 2, 2, 444, 33, 3, 2, 2, 2, 445, 443, 3, 2, 2, 2, 53, 37, 46, 56, 61, 67, 74, 86, 88, 95, 109, 115, 133, 144, 152, 156, 160, 166, 175, 179, 185, 191, 203, 207, 211, 215, 221, 237, 241, 249, 262, 266, 270, 319, 328, 332, 336, 338, 343, 354, 358, 365, 367, 375, 389, 393, 397, 408, 414, 431, 441, 443] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 77, 445, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 3, 2, 7, 2, 38, 10, 2, 12, 2, 14, 2, 41, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 49, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 59, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 64, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 70, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 75, 10, 4, 12, 4, 14, 4, 78, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 89, 10, 4, 5, 4, 91, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 96, 10, 5, 12, 5, 14, 5, 99, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 110, 10, 6, 12, 6, 14, 6, 113, 11, 6, 3, 6, 3, 6, 3, 6, 5, 6, 118, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 136, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 147, 10, 6, 3, 6, 3, 6, 5, 6, 151, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 157, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 6, 6, 164, 10, 6, 13, 6, 14, 6, 165, 3, 6, 3, 6, 5, 6, 170, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 176, 10, 7, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 182, 10, 8, 12, 8, 14, 8, 185, 11, 8, 3, 8, 5, 8, 188, 10, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 196, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 204, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 214, 10, 9, 3, 10, 3, 10, 6, 10, 218, 10, 10, 13, 10, 14, 10, 219, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 234, 10, 11, 12, 11, 14, 11, 237, 11, 11, 3, 11, 5, 11, 240, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 6, 11, 246, 10, 11, 13, 11, 14, 11, 247, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 259, 10, 11, 12, 11, 14, 11, 262, 11, 11, 3, 11, 5, 11, 265, 10, 11, 3, 11, 3, 11, 5, 11, 269, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 318, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 327, 10, 11, 3, 11, 3, 11, 5, 11, 331, 10, 11, 3, 11, 3, 11, 5, 11, 335, 10, 11, 5, 11, 337, 10, 11, 3, 11, 3, 11, 3, 11, 5, 11, 342, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 351, 10, 11, 12, 11, 14, 11, 354, 11, 11, 3, 11, 5, 11, 357, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 364, 10, 11, 12, 11, 14, 11, 367, 11, 11, 3, 12, 3, 12, 3, 12, 7, 12, 372, 10, 12, 12, 12, 14, 12, 375, 11, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 388, 10, 14, 3, 14, 3, 14, 5, 14, 392, 10, 14, 3, 15, 3, 15, 5, 15, 396, 10, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 407, 10, 16, 3, 17, 3, 17, 7, 17, 411, 10, 17, 12, 17, 14, 17, 414, 11, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 5, 18, 430, 10, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 7, 18, 440, 10, 18, 12, 18, 14, 18, 443, 11, 18, 3, 18, 2, 4, 20, 34, 19, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 2, 12, 3, 2, 11, 22, 3, 2, 23, 24, 4, 2, 15, 16, 53, 53, 3, 2, 12, 14, 3, 2, 15, 16, 3, 2, 17, 18, 3, 2, 54, 55, 3, 2, 56, 57, 4, 2, 37, 38, 58, 61, 3, 2, 67, 68, 2, 520, 2, 39, 3, 2, 2, 2, 4, 48, 3, 2, 2, 2, 6, 90, 3, 2, 2, 2, 8, 92, 3, 2, 2, 2, 10, 169, 3, 2, 2, 2, 12, 171, 3, 2, 2, 2, 14, 177, 3, 2, 2, 2, 16, 213, 3, 2, 2, 2, 18, 215, 3, 2, 2, 2, 20, 268, 3, 2, 2, 2, 22, 373, 3, 2, 2, 2, 24, 378, 3, 2, 2, 2, 26, 391, 3, 2, 2, 2, 28, 395, 3, 2, 2, 2, 30, 406, 3, 2, 2, 2, 32, 412, 3, 2, 2, 2, 34, 429, 3, 2, 2, 2, 36, 38, 5, 4, 3, 2, 37, 36, 3, 2, 2, 2, 38, 41, 3, 2, 2, 2, 39, 37, 3, 2, 2, 2, 39, 40, 3, 2, 2, 2, 40, 42, 3, 2, 2, 2, 41, 39, 3, 2, 2, 2, 42, 43, 7, 2, 2, 3, 43, 3, 3, 2, 2, 2, 44, 45, 5, 6, 4, 2, 45, 46, 7, 3, 2, 2, 46, 49, 3, 2, 2, 2, 47, 49, 5, 10, 6, 2, 48, 44, 3, 2, 2, 2, 48, 47, 3, 2, 2, 2, 49, 5, 3, 2, 2, 2, 50, 51, 7, 4, 2, 2, 51, 58, 7, 74, 2, 2, 52, 53, 7, 5, 2, 2, 53, 59, 5, 32, 17, 2, 54, 55, 7, 6, 2, 2, 55, 59, 5, 32, 17, 2, 56, 57, 7, 7, 2, 2, 57, 59, 7, 74, 2, 2, 58, 52, 3, 2, 2, 2, 58, 54, 3, 2, 2, 2, 58, 56, 3, 2, 2, 2, 58, 59, 3, 2, 2, 2, 59, 91, 3, 2, 2, 2, 60, 91, 7, 8, 2, 2, 61, 63, 7, 9, 2, 2, 62, 64, 5, 22, 12, 2, 63, 62, 3, 2, 2, 2, 63, 64, 3, 2, 2, 2, 64, 91, 3, 2, 2, 2, 65, 66, 5, 34, 18, 2, 66, 69, 7, 74, 2, 2, 67, 68, 7, 10, 2, 2, 68, 70, 5, 22, 12, 2, 69, 67, 3, 2, 2, 2, 69, 70, 3, 2, 2, 2, 70, 91, 3, 2, 2, 2, 71, 72, 5, 8, 5, 2, 72, 73, 7, 10, 2, 2, 73, 75, 3, 2, 2, 2, 74, 71, 3, 2, 2, 2, 75, 78, 3, 2, 2, 2, 76, 74, 3, 2, 2, 2, 76, 77, 3, 2, 2, 2, 77, 79, 3, 2, 2, 2, 78, 76, 3, 2, 2, 2, 79, 91, 5, 22, 12, 2, 80, 81, 5, 20, 11, 2, 81, 82, 9, 2, 2, 2, 82, 83, 7, 10, 2, 2, 83, 84, 5, 20, 11, 2, 84, 91, 3, 2, 2, 2, 85, 91, 9, 3, 2, 2, 86, 88, 7, 25, 2, 2, 87, 89, 5, 22, 12, 2, 88, 87, 3, 2, 2, 2, 88, 89, 3, 2, 2, 2, 89, 91, 3, 2, 2, 2, 90, 50, 3, 2, 2, 2, 90, 60, 3, 2, 2, 2, 90, 61, 3, 2, 2, 2, 90, 65, 3, 2, 2, 2, 90, 76, 3, 2, 2, 2, 90, 80, 3, 2, 2, 2, 90, 85, 3, 2, 2, 2, 90, 86, 3, 2, 2, 2, 91, 7, 3, 2, 2, 2, 92, 97, 5, 20, 11, 2, 93, 94, 7, 26, 2, 2, 94, 96, 5, 20, 11, 2, 95, 93, 3, 2, 2, 2, 96, 99, 3, 2, 2, 2, 97, 95, 3, 2, 2, 2, 97, 98, 3, 2, 2, 2, 98, 9, 3, 2, 2, 2, 99, 97, 3, 2, 2, 2, 100, 101, 7, 27, 2, 2, 101, 102, 5, 20, 11, 2, 102, 103, 7, 28, 2, 2, 103, 111, 5, 18, 10, 2, 104, 105, 7, 29, 2, 2, 105, 106, 5, 20, 11, 2, 106, 107, 7, 28, 2, 2, 107, 108, 5, 18, 10, 2, 108, 110, 3, 2, 2, 2, 109, 104, 3, 2, 2, 2, 110, 113, 3, 2, 2, 2, 111, 109, 3, 2, 2, 2, 111, 112, 3, 2, 2, 2, 112, 117, 3, 2, 2, 2, 113, 111, 3, 2, 2, 2, 114, 115, 7, 30, 2, 2, 115, 116, 7, 28, 2, 2, 116, 118, 5, 18, 10, 2, 117, 114, 3, 2, 2, 2, 117, 118, 3, 2, 2, 2, 118, 170, 3, 2, 2, 2, 119, 120, 7, 31, 2, 2, 120, 121, 5, 20, 11, 2, 121, 122, 7, 28, 2, 2, 122, 123, 5, 18, 10, 2, 123, 170, 3, 2, 2, 2, 124, 125, 7, 32, 2, 2, 125, 126, 5, 20, 11, 2, 126, 127, 7, 28, 2, 2, 127, 128, 5, 18, 10, 2, 128, 170, 3, 2, 2, 2, 129, 130, 7, 33, 2, 2, 130, 131, 5, 22, 12, 2, 131, 132, 7, 34, 2, 2, 132, 135, 5, 22, 12, 2, 133, 134, 7, 35, 2, 2, 134, 136, 5, 22, 12, 2, 135, 133, 3, 2, 2, 2, 135, 136, 3, 2, 2, 2, 136, 137, 3, 2, 2, 2, 137, 138, 7, 28, 2, 2, 138, 139, 5, 18, 10, 2, 139, 170, 3, 2, 2, 2, 140, 141, 7, 36, 2, 2, 141, 146, 7, 74, 2, 2, 142, 143, 7, 37, 2, 2, 143, 144, 5, 32, 17, 2, 144, 145, 7, 38, 2, 2, 145, 147, 3, 2, 2, 2, 146, 142, 3, 2, 2, 2, 146, 147, 3, 2, 2, 2, 147, 148, 3, 2, 2, 2, 148, 150, 5, 14, 8, 2, 149, 151, 5, 34, 18, 2, 150, 149, 3, 2, 2, 2, 150, 151, 3, 2, 2, 2, 151, 156, 3, 2, 2, 2, 152, 153, 7, 39, 2, 2, 153, 157, 5, 18, 10, 2, 154, 155, 7, 40, 2, 2, 155, 157, 7, 3, 2, 2, 156, 152, 3, 2, 2, 2, 156, 154, 3, 2, 2, 2, 157, 170, 3, 2, 2, 2, 158, 159, 7, 41, 2, 2, 159, 160, 7, 74, 2, 2, 160, 161, 7, 39, 2, 2, 161, 163, 7, 42, 2, 2, 162, 164, 5, 16, 9, 2, 163, 162, 3, 2, 2, 2, 164, 165, 3, 2, 2, 2, 165, 163, 3, 2, 2, 2, 165, 166, 3, 2, 2, 2, 166, 167, 3, 2, 2, 2, 167, 168, 7, 43, 2, 2, 168, 170, 3, 2, 2, 2, 169, 100, 3, 2, 2, 2, 169, 119, 3, 2, 2, 2, 169, 124, 3, 2, 2, 2, 169, 129, 3, 2, 2, 2, 169, 140, 3, 2, 2, 2, 169, 158, 3, 2, 2, 2, 170, 11, 3, 2, 2, 2, 171, 172, 5, 34, 18, 2, 172, 175, 7, 74, 2, 2, 173, 174, 7, 44, 2, 2, 174, 176, 5, 20, 11, 2, 175, 173, 3, 2, 2, 2, 175, 176, 3, 2, 2, 2, 176, 13, 3, 2, 2, 2, 177, 183, 7, 45, 2, 2, 178, 179, 5, 12, 7, 2, 179, 180, 7, 26, 2, 2, 180, 182, 3, 2, 2, 2, 181, 178, 3, 2, 2, 2, 182, 185, 3, 2, 2, 2, 183, 181, 3, 2, 2, 2, 183, 184, 3, 2, 2, 2, 184, 187, 3, 2, 2, 2, 185, 183, 3, 2, 2, 2, 186, 188, 5, 12, 7, 2, 187, 186, 3, 2, 2, 2, 187, 188, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 190, 7, 46, 2, 2, 190, 15, 3, 2, 2, 2, 191, 192, 5, 34, 18, 2, 192, 195, 7, 74, 2, 2, 193, 194, 7, 44, 2, 2, 194, 196, 5, 22, 12, 2, 195, 193, 3, 2, 2, 2, 195, 196, 3, 2, 2, 2, 196, 197, 3, 2, 2, 2, 197, 198, 7, 3, 2, 2, 198, 214, 3, 2, 2, 2, 199, 200, 7, 36, 2, 2, 200, 201, 7, 74, 2, 2, 201, 203, 5, 14, 8, 2, 202, 204, 5, 34, 18, 2, 203, 202, 3, 2, 2, 2, 203, 204, 3, 2, 2, 2, 204, 205, 3, 2, 2, 2, 205, 206, 7, 39, 2, 2, 206, 207, 5, 18, 10, 2, 207, 214, 3, 2, 2, 2, 208, 209, 7, 47, 2, 2, 209, 210, 5, 14, 8, 2, 210, 211, 7, 39, 2, 2, 211, 212, 5, 18, 10, 2, 212, 214, 3, 2, 2, 2, 213, 191, 3, 2, 2, 2, 213, 199, 3, 2, 2, 2, 213, 208, 3, 2, 2, 2, 214, 17, 3, 2, 2, 2, 215, 217, 7, 42, 2, 2, 216, 218, 5, 4, 3, 2, 217, 216, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 217, 3, 2, 2, 2, 219, 220, 3, 2, 2, 2, 220, 221, 3, 2, 2, 2, 221, 222, 7, 43, 2, 2, 222, 19, 3, 2, 2, 2, 223, 224, 8, 11, 1, 2, 224, 269, 5, 30, 16, 2, 225, 226, 7, 45, 2, 2, 226, 227, 5, 22, 12, 2, 227, 228, 7, 46, 2, 2, 228, 269, 3, 2, 2, 2, 229, 235, 7, 48, 2, 2, 230, 231, 5, 20, 11, 2, 231, 232, 7, 26, 2, 2, 232, 234, 3, 2, 2, 2, 233, 230, 3, 2, 2, 2, 234, 237, 3, 2, 2, 2, 235, 233, 3, 2, 2, 2, 235, 236, 3, 2, 2, 2, 236, 239, 3, 2, 2, 2, 237, 235, 3, 2, 2, 2, 238, 240, 5, 20, 11, 2, 239, 238, 3, 2, 2, 2, 239, 240, 3, 2, 2, 2, 240, 241, 3, 2, 2, 2, 241, 269, 7, 49, 2, 2, 242, 243, 7, 48, 2, 2, 243, 245, 5, 20, 11, 2, 244, 246, 5, 26, 14, 2, 245, 244, 3, 2, 2, 2, 246, 247, 3, 2, 2, 2, 247, 245, 3, 2, 2, 2, 247, 248, 3, 2, 2, 2, 248, 249, 3, 2, 2, 2, 249, 250, 7, 49, 2, 2, 250, 269, 3, 2, 2, 2, 251, 252, 9, 4, 2, 2, 252, 269, 5, 20, 11, 19, 253, 254, 7, 62, 2, 2, 254, 269, 5, 20, 11, 8, 255, 260, 7, 65, 2, 2, 256, 257, 7, 74, 2, 2, 257, 259, 7, 26, 2, 2, 258, 256, 3, 2, 2, 2, 259, 262, 3, 2, 2, 2, 260, 258, 3, 2, 2, 2, 260, 261, 3, 2, 2, 2, 261, 264, 3, 2, 2, 2, 262, 260, 3, 2, 2, 2, 263, 265, 7, 74, 2, 2, 264, 263, 3, 2, 2, 2, 264, 265, 3, 2, 2, 2, 265, 266, 3, 2, 2, 2, 266, 267, 7, 66, 2, 2, 267, 269, 5, 20, 11, 3, 268, 223, 3, 2, 2, 2, 268, 225, 3, 2, 2, 2, 268, 229, 3, 2, 2, 2, 268, 242, 3, 2, 2, 2, 268, 251, 3, 2, 2, 2, 268, 253, 3, 2, 2, 2, 268, 255, 3, 2, 2, 2, 269, 365, 3, 2, 2, 2, 270, 271, 12, 20, 2, 2, 271, 272, 7, 11, 2, 2, 272, 364, 5, 20, 11, 20, 273, 274, 12, 18, 2, 2, 274, 275, 9, 5, 2, 2, 275, 364, 5, 20, 11, 19, 276, 277, 12, 17, 2, 2, 277, 278, 9, 6, 2, 2, 278, 364, 5, 20, 11, 18, 279, 280, 12, 16, 2, 2, 280, 281, 9, 7, 2, 2, 281, 364, 5, 20, 11, 17, 282, 283, 12, 15, 2, 2, 283, 284, 7, 19, 2, 2, 284, 364, 5, 20, 11, 16, 285, 286, 12, 14, 2, 2, 286, 287, 7, 20, 2, 2, 287, 364, 5, 20, 11, 15, 288, 289, 12, 13, 2, 2, 289, 290, 7, 21, 2, 2, 290, 364, 5, 20, 11, 14, 291, 292, 12, 12, 2, 2, 292, 293, 9, 8, 2, 2, 293, 364, 5, 20, 11, 13, 294, 295, 12, 10, 2, 2, 295, 296, 9, 9, 2, 2, 296, 364, 5, 20, 11, 11, 297, 298, 12, 9, 2, 2, 298, 299, 9, 10, 2, 2, 299, 364, 5, 20, 11, 9, 300, 301, 12, 7, 2, 2, 301, 302, 7, 63, 2, 2, 302, 364, 5, 20, 11, 7, 303, 304, 12, 6, 2, 2, 304, 305, 7, 64, 2, 2, 305, 364, 5, 20, 11, 6, 306, 307, 12, 5, 2, 2, 307, 308, 7, 22, 2, 2, 308, 364, 5, 20, 11, 5, 309, 310, 12, 4, 2, 2, 310, 311, 7, 50, 2, 2, 311, 312, 5, 20, 11, 2, 312, 313, 7, 44, 2, 2, 313, 314, 5, 20, 11, 4, 314, 364, 3, 2, 2, 2, 315, 317, 12, 25, 2, 2, 316, 318, 7, 50, 2, 2, 317, 316, 3, 2, 2, 2, 317, 318, 3, 2, 2, 2, 318, 319, 3, 2, 2, 2, 319, 320, 7, 48, 2, 2, 320, 321, 5, 22, 12, 2, 321, 322, 7, 49, 2, 2, 322, 364, 3, 2, 2, 2, 323, 324, 12, 24, 2, 2, 324, 326, 7, 48, 2, 2, 325, 327, 5, 20, 11, 2, 326, 325, 3, 2, 2, 2, 326, 327, 3, 2, 2, 2, 327, 328, 3, 2, 2, 2, 328, 330, 7, 44, 2, 2, 329, 331, 5, 20, 11, 2, 330, 329, 3, 2, 2, 2, 330, 331, 3, 2, 2, 2, 331, 336, 3, 2, 2, 2, 332, 334, 7, 44, 2, 2, 333, 335, 5, 20, 11, 2, 334, 333, 3, 2, 2, 2, 334, 335, 3, 2, 2, 2, 335, 337, 3, 2, 2, 2, 336, 332, 3, 2, 2, 2, 336, 337, 3, 2, 2, 2, 337, 338, 3, 2, 2, 2, 338, 364, 7, 49, 2, 2, 339, 341, 12, 23, 2, 2, 340, 342, 7, 50, 2, 2, 341, 340, 3, 2, 2, 2, 341, 342, 3, 2, 2, 2, 342, 343, 3, 2, 2, 2, 343, 344, 7, 51, 2, 2, 344, 364, 7, 74, 2, 2, 345, 346, 12, 22, 2, 2, 346, 352, 7, 45, 2, 2, 347, 348, 5, 28, 15, 2, 348, 349, 7, 26, 2, 2, 349, 351, 3, 2, 2, 2, 350, 347, 3, 2, 2, 2, 351, 354, 3, 2, 2, 2, 352, 350, 3, 2, 2, 2, 352, 353, 3, 2, 2, 2, 353, 356, 3, 2, 2, 2, 354, 352, 3, 2, 2, 2, 355, 357, 5, 28, 15, 2, 356, 355, 3, 2, 2, 2, 356, 357, 3, 2, 2, 2, 357, 358, 3, 2, 2, 2, 358, 364, 7, 46, 2, 2, 359, 360, 12, 21, 2, 2, 360, 364, 7, 52, 2, 2, 361, 362, 12, 11, 2, 2, 362, 364, 7, 55, 2, 2, 363, 270, 3, 2, 2, 2, 363, 273, 3, 2, 2, 2, 363, 276, 3, 2, 2, 2, 363, 279, 3, 2, 2, 2, 363, 282, 3, 2, 2, 2, 363, 285, 3, 2, 2, 2, 363, 288, 3, 2, 2, 2, 363, 291, 3, 2, 2, 2, 363, 294, 3, 2, 2, 2, 363, 297, 3, 2, 2, 2, 363, 300, 3, 2, 2, 2, 363, 303, 3, 2, 2, 2, 363, 306, 3, 2, 2, 2, 363, 309, 3, 2, 2, 2, 363, 315, 3, 2, 2, 2, 363, 323, 3, 2, 2, 2, 363, 339, 3, 2, 2, 2, 363, 345, 3, 2, 2, 2, 363, 359, 3, 2, 2, 2, 363, 361, 3, 2, 2, 2, 364, 367, 3, 2, 2, 2, 365, 363, 3, 2, 2, 2, 365, 366, 3, 2, 2, 2, 366, 21, 3, 2, 2, 2, 367, 365, 3, 2, 2, 2, 368, 369, 5, 20, 11, 2, 369, 370, 7, 26, 2, 2, 370, 372, 3, 2, 2, 2, 371, 368, 3, 2, 2, 2, 372, 375, 3, 2, 2, 2, 373, 371, 3, 2, 2, 2, 373, 374, 3, 2, 2, 2, 374, 376, 3, 2, 2, 2, 375, 373, 3, 2, 2, 2, 376, 377, 5, 20, 11, 2, 377, 23, 3, 2, 2, 2, 378, 379, 5, 22, 12, 2, 379, 380, 7, 2, 2, 3, 380, 25, 3, 2, 2, 2, 381, 382, 7, 33, 2, 2, 382, 383, 5, 22, 12, 2, 383, 384, 7, 34, 2, 2, 384, 387, 5, 22, 12, 2, 385, 386, 7, 35, 2, 2, 386, 388, 5, 22, 12, 2, 387, 385, 3, 2, 2, 2, 387, 388, 3, 2, 2, 2, 388, 392, 3, 2, 2, 2, 389, 390, 7, 27, 2, 2, 390, 392, 5, 20, 11, 2, 391, 381, 3, 2, 2, 2, 391, 389, 3, 2, 2, 2, 392, 27, 3, 2, 2, 2, 393, 394, 7, 74, 2, 2, 394, 396, 7, 10, 2, 2, 395, 393, 3, 2, 2, 2, 395, 396, 3, 2, 2, 2, 396, 397, 3, 2, 2, 2, 397, 398, 5, 20, 11, 2, 398, 29, 3, 2, 2, 2, 399, 407, 7, 70, 2, 2, 400, 407, 7, 71, 2, 2, 401, 407, 9, 11, 2, 2, 402, 407, 7, 72, 2, 2, 403, 407, 7, 73, 2, 2, 404, 407, 7, 69, 2, 2, 405, 407, 7, 74, 2, 2, 406, 399, 3, 2, 2, 2, 406, 400, 3, 2, 2, 2, 406, 401, 3, 2, 2, 2, 406, 402, 3, 2, 2, 2, 406, 403, 3, 2, 2, 2, 406, 404, 3, 2, 2, 2, 406, 405, 3, 2, 2, 2, 407, 31, 3, 2, 2, 2, 408, 409, 7, 74, 2, 2, 409, 411, 7, 26, 2, 2, 410, 408, 3, 2, 2, 2, 411, 414, 3, 2, 2, 2, 412, 410, 3, 2, 2, 2, 412, 413, 3, 2, 2, 2, 413, 415, 3, 2, 2, 2, 414, 412, 3, 2, 2, 2, 415, 416, 7, 74, 2, 2, 416, 33, 3, 2, 2, 2, 417, 418, 8, 18, 1, 2, 418, 430, 7, 74, 2, 2, 419, 420, 7, 45, 2, 2, 420, 421, 5, 34, 18, 2, 421, 422, 7, 46, 2, 2, 422, 430, 3, 2, 2, 2, 423, 424, 7, 48, 2, 2, 424, 425, 5, 34, 18, 2, 425, 426, 7, 49, 2, 2, 426, 430, 3, 2, 2, 2, 427, 428, 7, 66, 2, 2, 428, 430, 5, 34, 18, 3, 429, 417, 3, 2, 2, 2, 429, 419, 3, 2, 2, 2, 429, 423, 3, 2, 2, 2, 429, 427, 3, 2, 2, 2, 430, 441, 3, 2, 2, 2, 431, 432, 12, 5, 2, 2, 432, 433, 7, 12, 2, 2, 433, 440, 5, 34, 18, 5, 434, 435, 12, 4, 2, 2, 435, 436, 7, 66, 2, 2, 436, 440, 5, 34, 18, 4, 437, 438, 12, 6, 2, 2, 438, 440, 7, 50, 2, 2, 439, 431, 3, 2, 2, 2, 439, 434, 3, 2, 2, 2, 439, 437, 3, 2, 2, 2, 440, 443, 3, 2, 2, 2, 441, 439, 3, 2, 2, 2, 441, 442, 3, 2, 2, 2, 442, 35, 3, 2, 2, 2, 443, 441, 3, 2, 2, 2, 51, 39, 48, 58, 63, 69, 76, 88, 90, 97, 111, 117, 135, 146, 150, 156, 165, 169, 175, 183, 187, 195, 203, 213, 219, 235, 239, 247, 260, 264, 268, 317, 326, 330, 334, 336, 341, 352, 356, 363, 365, 373, 387, 391, 395, 406, 412, 429, 439, 441] \ No newline at end of file diff --git a/src/antlr/Pyxell.tokens b/src/antlr/Pyxell.tokens index c9e61a5d..6d647978 100644 --- a/src/antlr/Pyxell.tokens +++ b/src/antlr/Pyxell.tokens @@ -64,14 +64,15 @@ T__62=63 T__63=64 T__64=65 T__65=66 -INT=67 -FLOAT=68 -CHAR=69 -STRING=70 -ID=71 -COMMENT=72 -WS=73 -ERR=74 +T__66=67 +INT=68 +FLOAT=69 +CHAR=70 +STRING=71 +ID=72 +COMMENT=73 +WS=74 +ERR=75 ';'=1 'use'=2 'only'=3 @@ -108,33 +109,34 @@ ERR=74 'func'=34 '<'=35 '>'=36 -'('=37 -')'=38 -'def'=39 -'extern'=40 -'class'=41 -'{'=42 -'}'=43 -':'=44 -'['=45 -']'=46 -'?'=47 -'.'=48 -'!'=49 -'~'=50 -'..'=51 -'...'=52 -'is'=53 -'isn\'t'=54 -'=='=55 -'!='=56 -'<='=57 -'>='=58 -'not'=59 -'and'=60 -'or'=61 -'lambda'=62 -'->'=63 -'true'=64 -'false'=65 -'null'=66 +'def'=37 +'extern'=38 +'class'=39 +'{'=40 +'}'=41 +':'=42 +'('=43 +')'=44 +'constructor'=45 +'['=46 +']'=47 +'?'=48 +'.'=49 +'!'=50 +'~'=51 +'..'=52 +'...'=53 +'is'=54 +'isn\'t'=55 +'=='=56 +'!='=57 +'<='=58 +'>='=59 +'not'=60 +'and'=61 +'or'=62 +'lambda'=63 +'->'=64 +'true'=65 +'false'=66 +'null'=67 diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp index 1179d301..e1edc023 100644 --- a/src/antlr/PyxellLexer.interp +++ b/src/antlr/PyxellLexer.interp @@ -36,14 +36,15 @@ null 'func' '<' '>' -'(' -')' 'def' 'extern' 'class' '{' '}' ':' +'(' +')' +'constructor' '[' ']' '?' @@ -143,6 +144,7 @@ null null null null +null INT FLOAT CHAR @@ -219,6 +221,7 @@ T__62 T__63 T__64 T__65 +T__66 INT FLOAT CHAR @@ -239,4 +242,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 76, 480, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 6, 68, 397, 10, 68, 13, 68, 14, 68, 398, 3, 69, 6, 69, 402, 10, 69, 13, 69, 14, 69, 403, 3, 69, 3, 69, 6, 69, 408, 10, 69, 13, 69, 14, 69, 409, 3, 69, 3, 69, 5, 69, 414, 10, 69, 3, 69, 6, 69, 417, 10, 69, 13, 69, 14, 69, 418, 5, 69, 421, 10, 69, 3, 70, 3, 70, 3, 70, 3, 70, 7, 70, 427, 10, 70, 12, 70, 14, 70, 430, 11, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 3, 71, 7, 71, 438, 10, 71, 12, 71, 14, 71, 441, 11, 71, 3, 71, 3, 71, 3, 72, 3, 72, 7, 72, 447, 10, 72, 12, 72, 14, 72, 450, 11, 72, 3, 73, 3, 73, 3, 74, 3, 74, 3, 75, 3, 75, 3, 75, 5, 75, 459, 10, 75, 3, 76, 3, 76, 3, 76, 3, 76, 7, 76, 465, 10, 76, 12, 76, 14, 76, 468, 11, 76, 3, 76, 3, 76, 3, 77, 6, 77, 473, 10, 77, 13, 77, 14, 77, 474, 3, 77, 3, 77, 3, 78, 3, 78, 2, 2, 79, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 2, 147, 2, 149, 2, 151, 74, 153, 75, 155, 76, 3, 2, 11, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 3, 2, 41, 41, 4, 2, 12, 12, 14, 15, 5, 2, 11, 12, 15, 15, 34, 34, 2, 491, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 3, 157, 3, 2, 2, 2, 5, 159, 3, 2, 2, 2, 7, 163, 3, 2, 2, 2, 9, 168, 3, 2, 2, 2, 11, 175, 3, 2, 2, 2, 13, 178, 3, 2, 2, 2, 15, 183, 3, 2, 2, 2, 17, 189, 3, 2, 2, 2, 19, 191, 3, 2, 2, 2, 21, 193, 3, 2, 2, 2, 23, 195, 3, 2, 2, 2, 25, 197, 3, 2, 2, 2, 27, 199, 3, 2, 2, 2, 29, 201, 3, 2, 2, 2, 31, 203, 3, 2, 2, 2, 33, 206, 3, 2, 2, 2, 35, 209, 3, 2, 2, 2, 37, 211, 3, 2, 2, 2, 39, 213, 3, 2, 2, 2, 41, 215, 3, 2, 2, 2, 43, 218, 3, 2, 2, 2, 45, 224, 3, 2, 2, 2, 47, 233, 3, 2, 2, 2, 49, 240, 3, 2, 2, 2, 51, 242, 3, 2, 2, 2, 53, 245, 3, 2, 2, 2, 55, 248, 3, 2, 2, 2, 57, 253, 3, 2, 2, 2, 59, 258, 3, 2, 2, 2, 61, 264, 3, 2, 2, 2, 63, 270, 3, 2, 2, 2, 65, 274, 3, 2, 2, 2, 67, 277, 3, 2, 2, 2, 69, 282, 3, 2, 2, 2, 71, 287, 3, 2, 2, 2, 73, 289, 3, 2, 2, 2, 75, 291, 3, 2, 2, 2, 77, 293, 3, 2, 2, 2, 79, 295, 3, 2, 2, 2, 81, 299, 3, 2, 2, 2, 83, 306, 3, 2, 2, 2, 85, 312, 3, 2, 2, 2, 87, 314, 3, 2, 2, 2, 89, 316, 3, 2, 2, 2, 91, 318, 3, 2, 2, 2, 93, 320, 3, 2, 2, 2, 95, 322, 3, 2, 2, 2, 97, 324, 3, 2, 2, 2, 99, 326, 3, 2, 2, 2, 101, 328, 3, 2, 2, 2, 103, 330, 3, 2, 2, 2, 105, 333, 3, 2, 2, 2, 107, 337, 3, 2, 2, 2, 109, 340, 3, 2, 2, 2, 111, 346, 3, 2, 2, 2, 113, 349, 3, 2, 2, 2, 115, 352, 3, 2, 2, 2, 117, 355, 3, 2, 2, 2, 119, 358, 3, 2, 2, 2, 121, 362, 3, 2, 2, 2, 123, 366, 3, 2, 2, 2, 125, 369, 3, 2, 2, 2, 127, 376, 3, 2, 2, 2, 129, 379, 3, 2, 2, 2, 131, 384, 3, 2, 2, 2, 133, 390, 3, 2, 2, 2, 135, 396, 3, 2, 2, 2, 137, 401, 3, 2, 2, 2, 139, 422, 3, 2, 2, 2, 141, 433, 3, 2, 2, 2, 143, 444, 3, 2, 2, 2, 145, 451, 3, 2, 2, 2, 147, 453, 3, 2, 2, 2, 149, 458, 3, 2, 2, 2, 151, 460, 3, 2, 2, 2, 153, 472, 3, 2, 2, 2, 155, 478, 3, 2, 2, 2, 157, 158, 7, 61, 2, 2, 158, 4, 3, 2, 2, 2, 159, 160, 7, 119, 2, 2, 160, 161, 7, 117, 2, 2, 161, 162, 7, 103, 2, 2, 162, 6, 3, 2, 2, 2, 163, 164, 7, 113, 2, 2, 164, 165, 7, 112, 2, 2, 165, 166, 7, 110, 2, 2, 166, 167, 7, 123, 2, 2, 167, 8, 3, 2, 2, 2, 168, 169, 7, 106, 2, 2, 169, 170, 7, 107, 2, 2, 170, 171, 7, 102, 2, 2, 171, 172, 7, 107, 2, 2, 172, 173, 7, 112, 2, 2, 173, 174, 7, 105, 2, 2, 174, 10, 3, 2, 2, 2, 175, 176, 7, 99, 2, 2, 176, 177, 7, 117, 2, 2, 177, 12, 3, 2, 2, 2, 178, 179, 7, 117, 2, 2, 179, 180, 7, 109, 2, 2, 180, 181, 7, 107, 2, 2, 181, 182, 7, 114, 2, 2, 182, 14, 3, 2, 2, 2, 183, 184, 7, 114, 2, 2, 184, 185, 7, 116, 2, 2, 185, 186, 7, 107, 2, 2, 186, 187, 7, 112, 2, 2, 187, 188, 7, 118, 2, 2, 188, 16, 3, 2, 2, 2, 189, 190, 7, 63, 2, 2, 190, 18, 3, 2, 2, 2, 191, 192, 7, 96, 2, 2, 192, 20, 3, 2, 2, 2, 193, 194, 7, 44, 2, 2, 194, 22, 3, 2, 2, 2, 195, 196, 7, 49, 2, 2, 196, 24, 3, 2, 2, 2, 197, 198, 7, 39, 2, 2, 198, 26, 3, 2, 2, 2, 199, 200, 7, 45, 2, 2, 200, 28, 3, 2, 2, 2, 201, 202, 7, 47, 2, 2, 202, 30, 3, 2, 2, 2, 203, 204, 7, 62, 2, 2, 204, 205, 7, 62, 2, 2, 205, 32, 3, 2, 2, 2, 206, 207, 7, 64, 2, 2, 207, 208, 7, 64, 2, 2, 208, 34, 3, 2, 2, 2, 209, 210, 7, 40, 2, 2, 210, 36, 3, 2, 2, 2, 211, 212, 7, 38, 2, 2, 212, 38, 3, 2, 2, 2, 213, 214, 7, 126, 2, 2, 214, 40, 3, 2, 2, 2, 215, 216, 7, 65, 2, 2, 216, 217, 7, 65, 2, 2, 217, 42, 3, 2, 2, 2, 218, 219, 7, 100, 2, 2, 219, 220, 7, 116, 2, 2, 220, 221, 7, 103, 2, 2, 221, 222, 7, 99, 2, 2, 222, 223, 7, 109, 2, 2, 223, 44, 3, 2, 2, 2, 224, 225, 7, 101, 2, 2, 225, 226, 7, 113, 2, 2, 226, 227, 7, 112, 2, 2, 227, 228, 7, 118, 2, 2, 228, 229, 7, 107, 2, 2, 229, 230, 7, 112, 2, 2, 230, 231, 7, 119, 2, 2, 231, 232, 7, 103, 2, 2, 232, 46, 3, 2, 2, 2, 233, 234, 7, 116, 2, 2, 234, 235, 7, 103, 2, 2, 235, 236, 7, 118, 2, 2, 236, 237, 7, 119, 2, 2, 237, 238, 7, 116, 2, 2, 238, 239, 7, 112, 2, 2, 239, 48, 3, 2, 2, 2, 240, 241, 7, 46, 2, 2, 241, 50, 3, 2, 2, 2, 242, 243, 7, 107, 2, 2, 243, 244, 7, 104, 2, 2, 244, 52, 3, 2, 2, 2, 245, 246, 7, 102, 2, 2, 246, 247, 7, 113, 2, 2, 247, 54, 3, 2, 2, 2, 248, 249, 7, 103, 2, 2, 249, 250, 7, 110, 2, 2, 250, 251, 7, 107, 2, 2, 251, 252, 7, 104, 2, 2, 252, 56, 3, 2, 2, 2, 253, 254, 7, 103, 2, 2, 254, 255, 7, 110, 2, 2, 255, 256, 7, 117, 2, 2, 256, 257, 7, 103, 2, 2, 257, 58, 3, 2, 2, 2, 258, 259, 7, 121, 2, 2, 259, 260, 7, 106, 2, 2, 260, 261, 7, 107, 2, 2, 261, 262, 7, 110, 2, 2, 262, 263, 7, 103, 2, 2, 263, 60, 3, 2, 2, 2, 264, 265, 7, 119, 2, 2, 265, 266, 7, 112, 2, 2, 266, 267, 7, 118, 2, 2, 267, 268, 7, 107, 2, 2, 268, 269, 7, 110, 2, 2, 269, 62, 3, 2, 2, 2, 270, 271, 7, 104, 2, 2, 271, 272, 7, 113, 2, 2, 272, 273, 7, 116, 2, 2, 273, 64, 3, 2, 2, 2, 274, 275, 7, 107, 2, 2, 275, 276, 7, 112, 2, 2, 276, 66, 3, 2, 2, 2, 277, 278, 7, 117, 2, 2, 278, 279, 7, 118, 2, 2, 279, 280, 7, 103, 2, 2, 280, 281, 7, 114, 2, 2, 281, 68, 3, 2, 2, 2, 282, 283, 7, 104, 2, 2, 283, 284, 7, 119, 2, 2, 284, 285, 7, 112, 2, 2, 285, 286, 7, 101, 2, 2, 286, 70, 3, 2, 2, 2, 287, 288, 7, 62, 2, 2, 288, 72, 3, 2, 2, 2, 289, 290, 7, 64, 2, 2, 290, 74, 3, 2, 2, 2, 291, 292, 7, 42, 2, 2, 292, 76, 3, 2, 2, 2, 293, 294, 7, 43, 2, 2, 294, 78, 3, 2, 2, 2, 295, 296, 7, 102, 2, 2, 296, 297, 7, 103, 2, 2, 297, 298, 7, 104, 2, 2, 298, 80, 3, 2, 2, 2, 299, 300, 7, 103, 2, 2, 300, 301, 7, 122, 2, 2, 301, 302, 7, 118, 2, 2, 302, 303, 7, 103, 2, 2, 303, 304, 7, 116, 2, 2, 304, 305, 7, 112, 2, 2, 305, 82, 3, 2, 2, 2, 306, 307, 7, 101, 2, 2, 307, 308, 7, 110, 2, 2, 308, 309, 7, 99, 2, 2, 309, 310, 7, 117, 2, 2, 310, 311, 7, 117, 2, 2, 311, 84, 3, 2, 2, 2, 312, 313, 7, 125, 2, 2, 313, 86, 3, 2, 2, 2, 314, 315, 7, 127, 2, 2, 315, 88, 3, 2, 2, 2, 316, 317, 7, 60, 2, 2, 317, 90, 3, 2, 2, 2, 318, 319, 7, 93, 2, 2, 319, 92, 3, 2, 2, 2, 320, 321, 7, 95, 2, 2, 321, 94, 3, 2, 2, 2, 322, 323, 7, 65, 2, 2, 323, 96, 3, 2, 2, 2, 324, 325, 7, 48, 2, 2, 325, 98, 3, 2, 2, 2, 326, 327, 7, 35, 2, 2, 327, 100, 3, 2, 2, 2, 328, 329, 7, 128, 2, 2, 329, 102, 3, 2, 2, 2, 330, 331, 7, 48, 2, 2, 331, 332, 7, 48, 2, 2, 332, 104, 3, 2, 2, 2, 333, 334, 7, 48, 2, 2, 334, 335, 7, 48, 2, 2, 335, 336, 7, 48, 2, 2, 336, 106, 3, 2, 2, 2, 337, 338, 7, 107, 2, 2, 338, 339, 7, 117, 2, 2, 339, 108, 3, 2, 2, 2, 340, 341, 7, 107, 2, 2, 341, 342, 7, 117, 2, 2, 342, 343, 7, 112, 2, 2, 343, 344, 7, 41, 2, 2, 344, 345, 7, 118, 2, 2, 345, 110, 3, 2, 2, 2, 346, 347, 7, 63, 2, 2, 347, 348, 7, 63, 2, 2, 348, 112, 3, 2, 2, 2, 349, 350, 7, 35, 2, 2, 350, 351, 7, 63, 2, 2, 351, 114, 3, 2, 2, 2, 352, 353, 7, 62, 2, 2, 353, 354, 7, 63, 2, 2, 354, 116, 3, 2, 2, 2, 355, 356, 7, 64, 2, 2, 356, 357, 7, 63, 2, 2, 357, 118, 3, 2, 2, 2, 358, 359, 7, 112, 2, 2, 359, 360, 7, 113, 2, 2, 360, 361, 7, 118, 2, 2, 361, 120, 3, 2, 2, 2, 362, 363, 7, 99, 2, 2, 363, 364, 7, 112, 2, 2, 364, 365, 7, 102, 2, 2, 365, 122, 3, 2, 2, 2, 366, 367, 7, 113, 2, 2, 367, 368, 7, 116, 2, 2, 368, 124, 3, 2, 2, 2, 369, 370, 7, 110, 2, 2, 370, 371, 7, 99, 2, 2, 371, 372, 7, 111, 2, 2, 372, 373, 7, 100, 2, 2, 373, 374, 7, 102, 2, 2, 374, 375, 7, 99, 2, 2, 375, 126, 3, 2, 2, 2, 376, 377, 7, 47, 2, 2, 377, 378, 7, 64, 2, 2, 378, 128, 3, 2, 2, 2, 379, 380, 7, 118, 2, 2, 380, 381, 7, 116, 2, 2, 381, 382, 7, 119, 2, 2, 382, 383, 7, 103, 2, 2, 383, 130, 3, 2, 2, 2, 384, 385, 7, 104, 2, 2, 385, 386, 7, 99, 2, 2, 386, 387, 7, 110, 2, 2, 387, 388, 7, 117, 2, 2, 388, 389, 7, 103, 2, 2, 389, 132, 3, 2, 2, 2, 390, 391, 7, 112, 2, 2, 391, 392, 7, 119, 2, 2, 392, 393, 7, 110, 2, 2, 393, 394, 7, 110, 2, 2, 394, 134, 3, 2, 2, 2, 395, 397, 5, 145, 73, 2, 396, 395, 3, 2, 2, 2, 397, 398, 3, 2, 2, 2, 398, 396, 3, 2, 2, 2, 398, 399, 3, 2, 2, 2, 399, 136, 3, 2, 2, 2, 400, 402, 5, 145, 73, 2, 401, 400, 3, 2, 2, 2, 402, 403, 3, 2, 2, 2, 403, 401, 3, 2, 2, 2, 403, 404, 3, 2, 2, 2, 404, 405, 3, 2, 2, 2, 405, 407, 7, 48, 2, 2, 406, 408, 5, 145, 73, 2, 407, 406, 3, 2, 2, 2, 408, 409, 3, 2, 2, 2, 409, 407, 3, 2, 2, 2, 409, 410, 3, 2, 2, 2, 410, 420, 3, 2, 2, 2, 411, 413, 7, 103, 2, 2, 412, 414, 7, 47, 2, 2, 413, 412, 3, 2, 2, 2, 413, 414, 3, 2, 2, 2, 414, 416, 3, 2, 2, 2, 415, 417, 5, 145, 73, 2, 416, 415, 3, 2, 2, 2, 417, 418, 3, 2, 2, 2, 418, 416, 3, 2, 2, 2, 418, 419, 3, 2, 2, 2, 419, 421, 3, 2, 2, 2, 420, 411, 3, 2, 2, 2, 420, 421, 3, 2, 2, 2, 421, 138, 3, 2, 2, 2, 422, 428, 7, 41, 2, 2, 423, 427, 10, 2, 2, 2, 424, 425, 7, 94, 2, 2, 425, 427, 9, 3, 2, 2, 426, 423, 3, 2, 2, 2, 426, 424, 3, 2, 2, 2, 427, 430, 3, 2, 2, 2, 428, 426, 3, 2, 2, 2, 428, 429, 3, 2, 2, 2, 429, 431, 3, 2, 2, 2, 430, 428, 3, 2, 2, 2, 431, 432, 7, 41, 2, 2, 432, 140, 3, 2, 2, 2, 433, 439, 7, 36, 2, 2, 434, 438, 10, 4, 2, 2, 435, 436, 7, 94, 2, 2, 436, 438, 9, 5, 2, 2, 437, 434, 3, 2, 2, 2, 437, 435, 3, 2, 2, 2, 438, 441, 3, 2, 2, 2, 439, 437, 3, 2, 2, 2, 439, 440, 3, 2, 2, 2, 440, 442, 3, 2, 2, 2, 441, 439, 3, 2, 2, 2, 442, 443, 7, 36, 2, 2, 443, 142, 3, 2, 2, 2, 444, 448, 5, 147, 74, 2, 445, 447, 5, 149, 75, 2, 446, 445, 3, 2, 2, 2, 447, 450, 3, 2, 2, 2, 448, 446, 3, 2, 2, 2, 448, 449, 3, 2, 2, 2, 449, 144, 3, 2, 2, 2, 450, 448, 3, 2, 2, 2, 451, 452, 9, 6, 2, 2, 452, 146, 3, 2, 2, 2, 453, 454, 9, 7, 2, 2, 454, 148, 3, 2, 2, 2, 455, 459, 5, 147, 74, 2, 456, 459, 5, 145, 73, 2, 457, 459, 9, 8, 2, 2, 458, 455, 3, 2, 2, 2, 458, 456, 3, 2, 2, 2, 458, 457, 3, 2, 2, 2, 459, 150, 3, 2, 2, 2, 460, 461, 7, 47, 2, 2, 461, 462, 7, 47, 2, 2, 462, 466, 3, 2, 2, 2, 463, 465, 10, 9, 2, 2, 464, 463, 3, 2, 2, 2, 465, 468, 3, 2, 2, 2, 466, 464, 3, 2, 2, 2, 466, 467, 3, 2, 2, 2, 467, 469, 3, 2, 2, 2, 468, 466, 3, 2, 2, 2, 469, 470, 8, 76, 2, 2, 470, 152, 3, 2, 2, 2, 471, 473, 9, 10, 2, 2, 472, 471, 3, 2, 2, 2, 473, 474, 3, 2, 2, 2, 474, 472, 3, 2, 2, 2, 474, 475, 3, 2, 2, 2, 475, 476, 3, 2, 2, 2, 476, 477, 8, 77, 2, 2, 477, 154, 3, 2, 2, 2, 478, 479, 11, 2, 2, 2, 479, 156, 3, 2, 2, 2, 17, 2, 398, 403, 409, 413, 418, 420, 426, 428, 437, 439, 448, 458, 466, 474, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 77, 494, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 6, 69, 411, 10, 69, 13, 69, 14, 69, 412, 3, 70, 6, 70, 416, 10, 70, 13, 70, 14, 70, 417, 3, 70, 3, 70, 6, 70, 422, 10, 70, 13, 70, 14, 70, 423, 3, 70, 3, 70, 5, 70, 428, 10, 70, 3, 70, 6, 70, 431, 10, 70, 13, 70, 14, 70, 432, 5, 70, 435, 10, 70, 3, 71, 3, 71, 3, 71, 3, 71, 7, 71, 441, 10, 71, 12, 71, 14, 71, 444, 11, 71, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 72, 7, 72, 452, 10, 72, 12, 72, 14, 72, 455, 11, 72, 3, 72, 3, 72, 3, 73, 3, 73, 7, 73, 461, 10, 73, 12, 73, 14, 73, 464, 11, 73, 3, 74, 3, 74, 3, 75, 3, 75, 3, 76, 3, 76, 3, 76, 5, 76, 473, 10, 76, 3, 77, 3, 77, 3, 77, 3, 77, 7, 77, 479, 10, 77, 12, 77, 14, 77, 482, 11, 77, 3, 77, 3, 77, 3, 78, 6, 78, 487, 10, 78, 13, 78, 14, 78, 488, 3, 78, 3, 78, 3, 79, 3, 79, 2, 2, 80, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 74, 147, 2, 149, 2, 151, 2, 153, 75, 155, 76, 157, 77, 3, 2, 11, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 3, 2, 41, 41, 4, 2, 12, 12, 14, 15, 5, 2, 11, 12, 15, 15, 34, 34, 2, 505, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 3, 159, 3, 2, 2, 2, 5, 161, 3, 2, 2, 2, 7, 165, 3, 2, 2, 2, 9, 170, 3, 2, 2, 2, 11, 177, 3, 2, 2, 2, 13, 180, 3, 2, 2, 2, 15, 185, 3, 2, 2, 2, 17, 191, 3, 2, 2, 2, 19, 193, 3, 2, 2, 2, 21, 195, 3, 2, 2, 2, 23, 197, 3, 2, 2, 2, 25, 199, 3, 2, 2, 2, 27, 201, 3, 2, 2, 2, 29, 203, 3, 2, 2, 2, 31, 205, 3, 2, 2, 2, 33, 208, 3, 2, 2, 2, 35, 211, 3, 2, 2, 2, 37, 213, 3, 2, 2, 2, 39, 215, 3, 2, 2, 2, 41, 217, 3, 2, 2, 2, 43, 220, 3, 2, 2, 2, 45, 226, 3, 2, 2, 2, 47, 235, 3, 2, 2, 2, 49, 242, 3, 2, 2, 2, 51, 244, 3, 2, 2, 2, 53, 247, 3, 2, 2, 2, 55, 250, 3, 2, 2, 2, 57, 255, 3, 2, 2, 2, 59, 260, 3, 2, 2, 2, 61, 266, 3, 2, 2, 2, 63, 272, 3, 2, 2, 2, 65, 276, 3, 2, 2, 2, 67, 279, 3, 2, 2, 2, 69, 284, 3, 2, 2, 2, 71, 289, 3, 2, 2, 2, 73, 291, 3, 2, 2, 2, 75, 293, 3, 2, 2, 2, 77, 297, 3, 2, 2, 2, 79, 304, 3, 2, 2, 2, 81, 310, 3, 2, 2, 2, 83, 312, 3, 2, 2, 2, 85, 314, 3, 2, 2, 2, 87, 316, 3, 2, 2, 2, 89, 318, 3, 2, 2, 2, 91, 320, 3, 2, 2, 2, 93, 332, 3, 2, 2, 2, 95, 334, 3, 2, 2, 2, 97, 336, 3, 2, 2, 2, 99, 338, 3, 2, 2, 2, 101, 340, 3, 2, 2, 2, 103, 342, 3, 2, 2, 2, 105, 344, 3, 2, 2, 2, 107, 347, 3, 2, 2, 2, 109, 351, 3, 2, 2, 2, 111, 354, 3, 2, 2, 2, 113, 360, 3, 2, 2, 2, 115, 363, 3, 2, 2, 2, 117, 366, 3, 2, 2, 2, 119, 369, 3, 2, 2, 2, 121, 372, 3, 2, 2, 2, 123, 376, 3, 2, 2, 2, 125, 380, 3, 2, 2, 2, 127, 383, 3, 2, 2, 2, 129, 390, 3, 2, 2, 2, 131, 393, 3, 2, 2, 2, 133, 398, 3, 2, 2, 2, 135, 404, 3, 2, 2, 2, 137, 410, 3, 2, 2, 2, 139, 415, 3, 2, 2, 2, 141, 436, 3, 2, 2, 2, 143, 447, 3, 2, 2, 2, 145, 458, 3, 2, 2, 2, 147, 465, 3, 2, 2, 2, 149, 467, 3, 2, 2, 2, 151, 472, 3, 2, 2, 2, 153, 474, 3, 2, 2, 2, 155, 486, 3, 2, 2, 2, 157, 492, 3, 2, 2, 2, 159, 160, 7, 61, 2, 2, 160, 4, 3, 2, 2, 2, 161, 162, 7, 119, 2, 2, 162, 163, 7, 117, 2, 2, 163, 164, 7, 103, 2, 2, 164, 6, 3, 2, 2, 2, 165, 166, 7, 113, 2, 2, 166, 167, 7, 112, 2, 2, 167, 168, 7, 110, 2, 2, 168, 169, 7, 123, 2, 2, 169, 8, 3, 2, 2, 2, 170, 171, 7, 106, 2, 2, 171, 172, 7, 107, 2, 2, 172, 173, 7, 102, 2, 2, 173, 174, 7, 107, 2, 2, 174, 175, 7, 112, 2, 2, 175, 176, 7, 105, 2, 2, 176, 10, 3, 2, 2, 2, 177, 178, 7, 99, 2, 2, 178, 179, 7, 117, 2, 2, 179, 12, 3, 2, 2, 2, 180, 181, 7, 117, 2, 2, 181, 182, 7, 109, 2, 2, 182, 183, 7, 107, 2, 2, 183, 184, 7, 114, 2, 2, 184, 14, 3, 2, 2, 2, 185, 186, 7, 114, 2, 2, 186, 187, 7, 116, 2, 2, 187, 188, 7, 107, 2, 2, 188, 189, 7, 112, 2, 2, 189, 190, 7, 118, 2, 2, 190, 16, 3, 2, 2, 2, 191, 192, 7, 63, 2, 2, 192, 18, 3, 2, 2, 2, 193, 194, 7, 96, 2, 2, 194, 20, 3, 2, 2, 2, 195, 196, 7, 44, 2, 2, 196, 22, 3, 2, 2, 2, 197, 198, 7, 49, 2, 2, 198, 24, 3, 2, 2, 2, 199, 200, 7, 39, 2, 2, 200, 26, 3, 2, 2, 2, 201, 202, 7, 45, 2, 2, 202, 28, 3, 2, 2, 2, 203, 204, 7, 47, 2, 2, 204, 30, 3, 2, 2, 2, 205, 206, 7, 62, 2, 2, 206, 207, 7, 62, 2, 2, 207, 32, 3, 2, 2, 2, 208, 209, 7, 64, 2, 2, 209, 210, 7, 64, 2, 2, 210, 34, 3, 2, 2, 2, 211, 212, 7, 40, 2, 2, 212, 36, 3, 2, 2, 2, 213, 214, 7, 38, 2, 2, 214, 38, 3, 2, 2, 2, 215, 216, 7, 126, 2, 2, 216, 40, 3, 2, 2, 2, 217, 218, 7, 65, 2, 2, 218, 219, 7, 65, 2, 2, 219, 42, 3, 2, 2, 2, 220, 221, 7, 100, 2, 2, 221, 222, 7, 116, 2, 2, 222, 223, 7, 103, 2, 2, 223, 224, 7, 99, 2, 2, 224, 225, 7, 109, 2, 2, 225, 44, 3, 2, 2, 2, 226, 227, 7, 101, 2, 2, 227, 228, 7, 113, 2, 2, 228, 229, 7, 112, 2, 2, 229, 230, 7, 118, 2, 2, 230, 231, 7, 107, 2, 2, 231, 232, 7, 112, 2, 2, 232, 233, 7, 119, 2, 2, 233, 234, 7, 103, 2, 2, 234, 46, 3, 2, 2, 2, 235, 236, 7, 116, 2, 2, 236, 237, 7, 103, 2, 2, 237, 238, 7, 118, 2, 2, 238, 239, 7, 119, 2, 2, 239, 240, 7, 116, 2, 2, 240, 241, 7, 112, 2, 2, 241, 48, 3, 2, 2, 2, 242, 243, 7, 46, 2, 2, 243, 50, 3, 2, 2, 2, 244, 245, 7, 107, 2, 2, 245, 246, 7, 104, 2, 2, 246, 52, 3, 2, 2, 2, 247, 248, 7, 102, 2, 2, 248, 249, 7, 113, 2, 2, 249, 54, 3, 2, 2, 2, 250, 251, 7, 103, 2, 2, 251, 252, 7, 110, 2, 2, 252, 253, 7, 107, 2, 2, 253, 254, 7, 104, 2, 2, 254, 56, 3, 2, 2, 2, 255, 256, 7, 103, 2, 2, 256, 257, 7, 110, 2, 2, 257, 258, 7, 117, 2, 2, 258, 259, 7, 103, 2, 2, 259, 58, 3, 2, 2, 2, 260, 261, 7, 121, 2, 2, 261, 262, 7, 106, 2, 2, 262, 263, 7, 107, 2, 2, 263, 264, 7, 110, 2, 2, 264, 265, 7, 103, 2, 2, 265, 60, 3, 2, 2, 2, 266, 267, 7, 119, 2, 2, 267, 268, 7, 112, 2, 2, 268, 269, 7, 118, 2, 2, 269, 270, 7, 107, 2, 2, 270, 271, 7, 110, 2, 2, 271, 62, 3, 2, 2, 2, 272, 273, 7, 104, 2, 2, 273, 274, 7, 113, 2, 2, 274, 275, 7, 116, 2, 2, 275, 64, 3, 2, 2, 2, 276, 277, 7, 107, 2, 2, 277, 278, 7, 112, 2, 2, 278, 66, 3, 2, 2, 2, 279, 280, 7, 117, 2, 2, 280, 281, 7, 118, 2, 2, 281, 282, 7, 103, 2, 2, 282, 283, 7, 114, 2, 2, 283, 68, 3, 2, 2, 2, 284, 285, 7, 104, 2, 2, 285, 286, 7, 119, 2, 2, 286, 287, 7, 112, 2, 2, 287, 288, 7, 101, 2, 2, 288, 70, 3, 2, 2, 2, 289, 290, 7, 62, 2, 2, 290, 72, 3, 2, 2, 2, 291, 292, 7, 64, 2, 2, 292, 74, 3, 2, 2, 2, 293, 294, 7, 102, 2, 2, 294, 295, 7, 103, 2, 2, 295, 296, 7, 104, 2, 2, 296, 76, 3, 2, 2, 2, 297, 298, 7, 103, 2, 2, 298, 299, 7, 122, 2, 2, 299, 300, 7, 118, 2, 2, 300, 301, 7, 103, 2, 2, 301, 302, 7, 116, 2, 2, 302, 303, 7, 112, 2, 2, 303, 78, 3, 2, 2, 2, 304, 305, 7, 101, 2, 2, 305, 306, 7, 110, 2, 2, 306, 307, 7, 99, 2, 2, 307, 308, 7, 117, 2, 2, 308, 309, 7, 117, 2, 2, 309, 80, 3, 2, 2, 2, 310, 311, 7, 125, 2, 2, 311, 82, 3, 2, 2, 2, 312, 313, 7, 127, 2, 2, 313, 84, 3, 2, 2, 2, 314, 315, 7, 60, 2, 2, 315, 86, 3, 2, 2, 2, 316, 317, 7, 42, 2, 2, 317, 88, 3, 2, 2, 2, 318, 319, 7, 43, 2, 2, 319, 90, 3, 2, 2, 2, 320, 321, 7, 101, 2, 2, 321, 322, 7, 113, 2, 2, 322, 323, 7, 112, 2, 2, 323, 324, 7, 117, 2, 2, 324, 325, 7, 118, 2, 2, 325, 326, 7, 116, 2, 2, 326, 327, 7, 119, 2, 2, 327, 328, 7, 101, 2, 2, 328, 329, 7, 118, 2, 2, 329, 330, 7, 113, 2, 2, 330, 331, 7, 116, 2, 2, 331, 92, 3, 2, 2, 2, 332, 333, 7, 93, 2, 2, 333, 94, 3, 2, 2, 2, 334, 335, 7, 95, 2, 2, 335, 96, 3, 2, 2, 2, 336, 337, 7, 65, 2, 2, 337, 98, 3, 2, 2, 2, 338, 339, 7, 48, 2, 2, 339, 100, 3, 2, 2, 2, 340, 341, 7, 35, 2, 2, 341, 102, 3, 2, 2, 2, 342, 343, 7, 128, 2, 2, 343, 104, 3, 2, 2, 2, 344, 345, 7, 48, 2, 2, 345, 346, 7, 48, 2, 2, 346, 106, 3, 2, 2, 2, 347, 348, 7, 48, 2, 2, 348, 349, 7, 48, 2, 2, 349, 350, 7, 48, 2, 2, 350, 108, 3, 2, 2, 2, 351, 352, 7, 107, 2, 2, 352, 353, 7, 117, 2, 2, 353, 110, 3, 2, 2, 2, 354, 355, 7, 107, 2, 2, 355, 356, 7, 117, 2, 2, 356, 357, 7, 112, 2, 2, 357, 358, 7, 41, 2, 2, 358, 359, 7, 118, 2, 2, 359, 112, 3, 2, 2, 2, 360, 361, 7, 63, 2, 2, 361, 362, 7, 63, 2, 2, 362, 114, 3, 2, 2, 2, 363, 364, 7, 35, 2, 2, 364, 365, 7, 63, 2, 2, 365, 116, 3, 2, 2, 2, 366, 367, 7, 62, 2, 2, 367, 368, 7, 63, 2, 2, 368, 118, 3, 2, 2, 2, 369, 370, 7, 64, 2, 2, 370, 371, 7, 63, 2, 2, 371, 120, 3, 2, 2, 2, 372, 373, 7, 112, 2, 2, 373, 374, 7, 113, 2, 2, 374, 375, 7, 118, 2, 2, 375, 122, 3, 2, 2, 2, 376, 377, 7, 99, 2, 2, 377, 378, 7, 112, 2, 2, 378, 379, 7, 102, 2, 2, 379, 124, 3, 2, 2, 2, 380, 381, 7, 113, 2, 2, 381, 382, 7, 116, 2, 2, 382, 126, 3, 2, 2, 2, 383, 384, 7, 110, 2, 2, 384, 385, 7, 99, 2, 2, 385, 386, 7, 111, 2, 2, 386, 387, 7, 100, 2, 2, 387, 388, 7, 102, 2, 2, 388, 389, 7, 99, 2, 2, 389, 128, 3, 2, 2, 2, 390, 391, 7, 47, 2, 2, 391, 392, 7, 64, 2, 2, 392, 130, 3, 2, 2, 2, 393, 394, 7, 118, 2, 2, 394, 395, 7, 116, 2, 2, 395, 396, 7, 119, 2, 2, 396, 397, 7, 103, 2, 2, 397, 132, 3, 2, 2, 2, 398, 399, 7, 104, 2, 2, 399, 400, 7, 99, 2, 2, 400, 401, 7, 110, 2, 2, 401, 402, 7, 117, 2, 2, 402, 403, 7, 103, 2, 2, 403, 134, 3, 2, 2, 2, 404, 405, 7, 112, 2, 2, 405, 406, 7, 119, 2, 2, 406, 407, 7, 110, 2, 2, 407, 408, 7, 110, 2, 2, 408, 136, 3, 2, 2, 2, 409, 411, 5, 147, 74, 2, 410, 409, 3, 2, 2, 2, 411, 412, 3, 2, 2, 2, 412, 410, 3, 2, 2, 2, 412, 413, 3, 2, 2, 2, 413, 138, 3, 2, 2, 2, 414, 416, 5, 147, 74, 2, 415, 414, 3, 2, 2, 2, 416, 417, 3, 2, 2, 2, 417, 415, 3, 2, 2, 2, 417, 418, 3, 2, 2, 2, 418, 419, 3, 2, 2, 2, 419, 421, 7, 48, 2, 2, 420, 422, 5, 147, 74, 2, 421, 420, 3, 2, 2, 2, 422, 423, 3, 2, 2, 2, 423, 421, 3, 2, 2, 2, 423, 424, 3, 2, 2, 2, 424, 434, 3, 2, 2, 2, 425, 427, 7, 103, 2, 2, 426, 428, 7, 47, 2, 2, 427, 426, 3, 2, 2, 2, 427, 428, 3, 2, 2, 2, 428, 430, 3, 2, 2, 2, 429, 431, 5, 147, 74, 2, 430, 429, 3, 2, 2, 2, 431, 432, 3, 2, 2, 2, 432, 430, 3, 2, 2, 2, 432, 433, 3, 2, 2, 2, 433, 435, 3, 2, 2, 2, 434, 425, 3, 2, 2, 2, 434, 435, 3, 2, 2, 2, 435, 140, 3, 2, 2, 2, 436, 442, 7, 41, 2, 2, 437, 441, 10, 2, 2, 2, 438, 439, 7, 94, 2, 2, 439, 441, 9, 3, 2, 2, 440, 437, 3, 2, 2, 2, 440, 438, 3, 2, 2, 2, 441, 444, 3, 2, 2, 2, 442, 440, 3, 2, 2, 2, 442, 443, 3, 2, 2, 2, 443, 445, 3, 2, 2, 2, 444, 442, 3, 2, 2, 2, 445, 446, 7, 41, 2, 2, 446, 142, 3, 2, 2, 2, 447, 453, 7, 36, 2, 2, 448, 452, 10, 4, 2, 2, 449, 450, 7, 94, 2, 2, 450, 452, 9, 5, 2, 2, 451, 448, 3, 2, 2, 2, 451, 449, 3, 2, 2, 2, 452, 455, 3, 2, 2, 2, 453, 451, 3, 2, 2, 2, 453, 454, 3, 2, 2, 2, 454, 456, 3, 2, 2, 2, 455, 453, 3, 2, 2, 2, 456, 457, 7, 36, 2, 2, 457, 144, 3, 2, 2, 2, 458, 462, 5, 149, 75, 2, 459, 461, 5, 151, 76, 2, 460, 459, 3, 2, 2, 2, 461, 464, 3, 2, 2, 2, 462, 460, 3, 2, 2, 2, 462, 463, 3, 2, 2, 2, 463, 146, 3, 2, 2, 2, 464, 462, 3, 2, 2, 2, 465, 466, 9, 6, 2, 2, 466, 148, 3, 2, 2, 2, 467, 468, 9, 7, 2, 2, 468, 150, 3, 2, 2, 2, 469, 473, 5, 149, 75, 2, 470, 473, 5, 147, 74, 2, 471, 473, 9, 8, 2, 2, 472, 469, 3, 2, 2, 2, 472, 470, 3, 2, 2, 2, 472, 471, 3, 2, 2, 2, 473, 152, 3, 2, 2, 2, 474, 475, 7, 47, 2, 2, 475, 476, 7, 47, 2, 2, 476, 480, 3, 2, 2, 2, 477, 479, 10, 9, 2, 2, 478, 477, 3, 2, 2, 2, 479, 482, 3, 2, 2, 2, 480, 478, 3, 2, 2, 2, 480, 481, 3, 2, 2, 2, 481, 483, 3, 2, 2, 2, 482, 480, 3, 2, 2, 2, 483, 484, 8, 77, 2, 2, 484, 154, 3, 2, 2, 2, 485, 487, 9, 10, 2, 2, 486, 485, 3, 2, 2, 2, 487, 488, 3, 2, 2, 2, 488, 486, 3, 2, 2, 2, 488, 489, 3, 2, 2, 2, 489, 490, 3, 2, 2, 2, 490, 491, 8, 78, 2, 2, 491, 156, 3, 2, 2, 2, 492, 493, 11, 2, 2, 2, 493, 158, 3, 2, 2, 2, 17, 2, 412, 417, 423, 427, 432, 434, 440, 442, 451, 453, 462, 472, 480, 488, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py index a9370b98..f97adb8b 100644 --- a/src/antlr/PyxellLexer.py +++ b/src/antlr/PyxellLexer.py @@ -8,8 +8,8 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2L") - buf.write("\u01e0\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2M") + buf.write("\u01ee\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") @@ -20,198 +20,203 @@ def serializedATN(): buf.write("\t\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:") buf.write("\4;\t;\4<\t<\4=\t=\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\t") buf.write("C\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I\tI\4J\tJ\4K\tK\4L\t") - buf.write("L\4M\tM\4N\tN\3\2\3\2\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4") - buf.write("\3\4\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3\6\3\7\3\7\3") - buf.write("\7\3\7\3\7\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3\t\3\n\3\n\3\13") - buf.write("\3\13\3\f\3\f\3\r\3\r\3\16\3\16\3\17\3\17\3\20\3\20\3") - buf.write("\20\3\21\3\21\3\21\3\22\3\22\3\23\3\23\3\24\3\24\3\25") - buf.write("\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27") - buf.write("\3\27\3\27\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\30\3\30") - buf.write("\3\30\3\30\3\31\3\31\3\32\3\32\3\32\3\33\3\33\3\33\3\34") - buf.write("\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35\3\36\3\36") - buf.write("\3\36\3\36\3\36\3\36\3\37\3\37\3\37\3\37\3\37\3\37\3 ") - buf.write("\3 \3 \3 \3!\3!\3!\3\"\3\"\3\"\3\"\3\"\3#\3#\3#\3#\3#") - buf.write("\3$\3$\3%\3%\3&\3&\3\'\3\'\3(\3(\3(\3(\3)\3)\3)\3)\3)") - buf.write("\3)\3)\3*\3*\3*\3*\3*\3*\3+\3+\3,\3,\3-\3-\3.\3.\3/\3") - buf.write("/\3\60\3\60\3\61\3\61\3\62\3\62\3\63\3\63\3\64\3\64\3") - buf.write("\64\3\65\3\65\3\65\3\65\3\66\3\66\3\66\3\67\3\67\3\67") - buf.write("\3\67\3\67\3\67\38\38\38\39\39\39\3:\3:\3:\3;\3;\3;\3") - buf.write("<\3<\3<\3<\3=\3=\3=\3=\3>\3>\3>\3?\3?\3?\3?\3?\3?\3?\3") - buf.write("@\3@\3@\3A\3A\3A\3A\3A\3B\3B\3B\3B\3B\3B\3C\3C\3C\3C\3") - buf.write("C\3D\6D\u018d\nD\rD\16D\u018e\3E\6E\u0192\nE\rE\16E\u0193") - buf.write("\3E\3E\6E\u0198\nE\rE\16E\u0199\3E\3E\5E\u019e\nE\3E\6") - buf.write("E\u01a1\nE\rE\16E\u01a2\5E\u01a5\nE\3F\3F\3F\3F\7F\u01ab") - buf.write("\nF\fF\16F\u01ae\13F\3F\3F\3G\3G\3G\3G\7G\u01b6\nG\fG") - buf.write("\16G\u01b9\13G\3G\3G\3H\3H\7H\u01bf\nH\fH\16H\u01c2\13") - buf.write("H\3I\3I\3J\3J\3K\3K\3K\5K\u01cb\nK\3L\3L\3L\3L\7L\u01d1") - buf.write("\nL\fL\16L\u01d4\13L\3L\3L\3M\6M\u01d9\nM\rM\16M\u01da") - buf.write("\3M\3M\3N\3N\2\2O\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23") - buf.write("\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25") - buf.write(")\26+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A") - buf.write("\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65") - buf.write("i\66k\67m8o9q:s;u{?}@\177A\u0081B\u0083C\u0085D\u0087") - buf.write("E\u0089F\u008bG\u008dH\u008fI\u0091\2\u0093\2\u0095\2") - buf.write("\u0097J\u0099K\u009bL\3\2\13\4\2))^^\6\2))^^ppvv\4\2$") - buf.write("$^^\6\2$$^^ppvv\3\2\62;\5\2C\\aac|\3\2))\4\2\f\f\16\17") - buf.write("\5\2\13\f\17\17\"\"\2\u01eb\2\3\3\2\2\2\2\5\3\2\2\2\2") - buf.write("\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3") - buf.write("\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2") - buf.write("\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2") - buf.write("\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2") - buf.write("\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63") - buf.write("\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2") - buf.write("\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2") - buf.write("\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3") - buf.write("\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y") - buf.write("\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2") - buf.write("c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2") - buf.write("\2m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2u\3\2\2") - buf.write("\2\2w\3\2\2\2\2y\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177\3") - buf.write("\2\2\2\2\u0081\3\2\2\2\2\u0083\3\2\2\2\2\u0085\3\2\2\2") - buf.write("\2\u0087\3\2\2\2\2\u0089\3\2\2\2\2\u008b\3\2\2\2\2\u008d") - buf.write("\3\2\2\2\2\u008f\3\2\2\2\2\u0097\3\2\2\2\2\u0099\3\2\2") - buf.write("\2\2\u009b\3\2\2\2\3\u009d\3\2\2\2\5\u009f\3\2\2\2\7\u00a3") - buf.write("\3\2\2\2\t\u00a8\3\2\2\2\13\u00af\3\2\2\2\r\u00b2\3\2") - buf.write("\2\2\17\u00b7\3\2\2\2\21\u00bd\3\2\2\2\23\u00bf\3\2\2") - buf.write("\2\25\u00c1\3\2\2\2\27\u00c3\3\2\2\2\31\u00c5\3\2\2\2") - buf.write("\33\u00c7\3\2\2\2\35\u00c9\3\2\2\2\37\u00cb\3\2\2\2!\u00ce") - buf.write("\3\2\2\2#\u00d1\3\2\2\2%\u00d3\3\2\2\2\'\u00d5\3\2\2\2") - buf.write(")\u00d7\3\2\2\2+\u00da\3\2\2\2-\u00e0\3\2\2\2/\u00e9\3") - buf.write("\2\2\2\61\u00f0\3\2\2\2\63\u00f2\3\2\2\2\65\u00f5\3\2") - buf.write("\2\2\67\u00f8\3\2\2\29\u00fd\3\2\2\2;\u0102\3\2\2\2=\u0108") - buf.write("\3\2\2\2?\u010e\3\2\2\2A\u0112\3\2\2\2C\u0115\3\2\2\2") - buf.write("E\u011a\3\2\2\2G\u011f\3\2\2\2I\u0121\3\2\2\2K\u0123\3") - buf.write("\2\2\2M\u0125\3\2\2\2O\u0127\3\2\2\2Q\u012b\3\2\2\2S\u0132") - buf.write("\3\2\2\2U\u0138\3\2\2\2W\u013a\3\2\2\2Y\u013c\3\2\2\2") - buf.write("[\u013e\3\2\2\2]\u0140\3\2\2\2_\u0142\3\2\2\2a\u0144\3") - buf.write("\2\2\2c\u0146\3\2\2\2e\u0148\3\2\2\2g\u014a\3\2\2\2i\u014d") - buf.write("\3\2\2\2k\u0151\3\2\2\2m\u0154\3\2\2\2o\u015a\3\2\2\2") - buf.write("q\u015d\3\2\2\2s\u0160\3\2\2\2u\u0163\3\2\2\2w\u0166\3") - buf.write("\2\2\2y\u016a\3\2\2\2{\u016e\3\2\2\2}\u0171\3\2\2\2\177") - buf.write("\u0178\3\2\2\2\u0081\u017b\3\2\2\2\u0083\u0180\3\2\2\2") - buf.write("\u0085\u0186\3\2\2\2\u0087\u018c\3\2\2\2\u0089\u0191\3") - buf.write("\2\2\2\u008b\u01a6\3\2\2\2\u008d\u01b1\3\2\2\2\u008f\u01bc") - buf.write("\3\2\2\2\u0091\u01c3\3\2\2\2\u0093\u01c5\3\2\2\2\u0095") - buf.write("\u01ca\3\2\2\2\u0097\u01cc\3\2\2\2\u0099\u01d8\3\2\2\2") - buf.write("\u009b\u01de\3\2\2\2\u009d\u009e\7=\2\2\u009e\4\3\2\2") - buf.write("\2\u009f\u00a0\7w\2\2\u00a0\u00a1\7u\2\2\u00a1\u00a2\7") - buf.write("g\2\2\u00a2\6\3\2\2\2\u00a3\u00a4\7q\2\2\u00a4\u00a5\7") - buf.write("p\2\2\u00a5\u00a6\7n\2\2\u00a6\u00a7\7{\2\2\u00a7\b\3") - buf.write("\2\2\2\u00a8\u00a9\7j\2\2\u00a9\u00aa\7k\2\2\u00aa\u00ab") - buf.write("\7f\2\2\u00ab\u00ac\7k\2\2\u00ac\u00ad\7p\2\2\u00ad\u00ae") - buf.write("\7i\2\2\u00ae\n\3\2\2\2\u00af\u00b0\7c\2\2\u00b0\u00b1") - buf.write("\7u\2\2\u00b1\f\3\2\2\2\u00b2\u00b3\7u\2\2\u00b3\u00b4") - buf.write("\7m\2\2\u00b4\u00b5\7k\2\2\u00b5\u00b6\7r\2\2\u00b6\16") - buf.write("\3\2\2\2\u00b7\u00b8\7r\2\2\u00b8\u00b9\7t\2\2\u00b9\u00ba") - buf.write("\7k\2\2\u00ba\u00bb\7p\2\2\u00bb\u00bc\7v\2\2\u00bc\20") - buf.write("\3\2\2\2\u00bd\u00be\7?\2\2\u00be\22\3\2\2\2\u00bf\u00c0") - buf.write("\7`\2\2\u00c0\24\3\2\2\2\u00c1\u00c2\7,\2\2\u00c2\26\3") - buf.write("\2\2\2\u00c3\u00c4\7\61\2\2\u00c4\30\3\2\2\2\u00c5\u00c6") - buf.write("\7\'\2\2\u00c6\32\3\2\2\2\u00c7\u00c8\7-\2\2\u00c8\34") - buf.write("\3\2\2\2\u00c9\u00ca\7/\2\2\u00ca\36\3\2\2\2\u00cb\u00cc") - buf.write("\7>\2\2\u00cc\u00cd\7>\2\2\u00cd \3\2\2\2\u00ce\u00cf") - buf.write("\7@\2\2\u00cf\u00d0\7@\2\2\u00d0\"\3\2\2\2\u00d1\u00d2") - buf.write("\7(\2\2\u00d2$\3\2\2\2\u00d3\u00d4\7&\2\2\u00d4&\3\2\2") - buf.write("\2\u00d5\u00d6\7~\2\2\u00d6(\3\2\2\2\u00d7\u00d8\7A\2") - buf.write("\2\u00d8\u00d9\7A\2\2\u00d9*\3\2\2\2\u00da\u00db\7d\2") - buf.write("\2\u00db\u00dc\7t\2\2\u00dc\u00dd\7g\2\2\u00dd\u00de\7") - buf.write("c\2\2\u00de\u00df\7m\2\2\u00df,\3\2\2\2\u00e0\u00e1\7") - buf.write("e\2\2\u00e1\u00e2\7q\2\2\u00e2\u00e3\7p\2\2\u00e3\u00e4") - buf.write("\7v\2\2\u00e4\u00e5\7k\2\2\u00e5\u00e6\7p\2\2\u00e6\u00e7") - buf.write("\7w\2\2\u00e7\u00e8\7g\2\2\u00e8.\3\2\2\2\u00e9\u00ea") - buf.write("\7t\2\2\u00ea\u00eb\7g\2\2\u00eb\u00ec\7v\2\2\u00ec\u00ed") - buf.write("\7w\2\2\u00ed\u00ee\7t\2\2\u00ee\u00ef\7p\2\2\u00ef\60") - buf.write("\3\2\2\2\u00f0\u00f1\7.\2\2\u00f1\62\3\2\2\2\u00f2\u00f3") - buf.write("\7k\2\2\u00f3\u00f4\7h\2\2\u00f4\64\3\2\2\2\u00f5\u00f6") - buf.write("\7f\2\2\u00f6\u00f7\7q\2\2\u00f7\66\3\2\2\2\u00f8\u00f9") - buf.write("\7g\2\2\u00f9\u00fa\7n\2\2\u00fa\u00fb\7k\2\2\u00fb\u00fc") - buf.write("\7h\2\2\u00fc8\3\2\2\2\u00fd\u00fe\7g\2\2\u00fe\u00ff") - buf.write("\7n\2\2\u00ff\u0100\7u\2\2\u0100\u0101\7g\2\2\u0101:\3") - buf.write("\2\2\2\u0102\u0103\7y\2\2\u0103\u0104\7j\2\2\u0104\u0105") - buf.write("\7k\2\2\u0105\u0106\7n\2\2\u0106\u0107\7g\2\2\u0107<\3") - buf.write("\2\2\2\u0108\u0109\7w\2\2\u0109\u010a\7p\2\2\u010a\u010b") - buf.write("\7v\2\2\u010b\u010c\7k\2\2\u010c\u010d\7n\2\2\u010d>\3") - buf.write("\2\2\2\u010e\u010f\7h\2\2\u010f\u0110\7q\2\2\u0110\u0111") - buf.write("\7t\2\2\u0111@\3\2\2\2\u0112\u0113\7k\2\2\u0113\u0114") - buf.write("\7p\2\2\u0114B\3\2\2\2\u0115\u0116\7u\2\2\u0116\u0117") - buf.write("\7v\2\2\u0117\u0118\7g\2\2\u0118\u0119\7r\2\2\u0119D\3") - buf.write("\2\2\2\u011a\u011b\7h\2\2\u011b\u011c\7w\2\2\u011c\u011d") - buf.write("\7p\2\2\u011d\u011e\7e\2\2\u011eF\3\2\2\2\u011f\u0120") - buf.write("\7>\2\2\u0120H\3\2\2\2\u0121\u0122\7@\2\2\u0122J\3\2\2") - buf.write("\2\u0123\u0124\7*\2\2\u0124L\3\2\2\2\u0125\u0126\7+\2") - buf.write("\2\u0126N\3\2\2\2\u0127\u0128\7f\2\2\u0128\u0129\7g\2") - buf.write("\2\u0129\u012a\7h\2\2\u012aP\3\2\2\2\u012b\u012c\7g\2") - buf.write("\2\u012c\u012d\7z\2\2\u012d\u012e\7v\2\2\u012e\u012f\7") - buf.write("g\2\2\u012f\u0130\7t\2\2\u0130\u0131\7p\2\2\u0131R\3\2") - buf.write("\2\2\u0132\u0133\7e\2\2\u0133\u0134\7n\2\2\u0134\u0135") - buf.write("\7c\2\2\u0135\u0136\7u\2\2\u0136\u0137\7u\2\2\u0137T\3") - buf.write("\2\2\2\u0138\u0139\7}\2\2\u0139V\3\2\2\2\u013a\u013b\7") - buf.write("\177\2\2\u013bX\3\2\2\2\u013c\u013d\7<\2\2\u013dZ\3\2") - buf.write("\2\2\u013e\u013f\7]\2\2\u013f\\\3\2\2\2\u0140\u0141\7") - buf.write("_\2\2\u0141^\3\2\2\2\u0142\u0143\7A\2\2\u0143`\3\2\2\2") - buf.write("\u0144\u0145\7\60\2\2\u0145b\3\2\2\2\u0146\u0147\7#\2") - buf.write("\2\u0147d\3\2\2\2\u0148\u0149\7\u0080\2\2\u0149f\3\2\2") - buf.write("\2\u014a\u014b\7\60\2\2\u014b\u014c\7\60\2\2\u014ch\3") - buf.write("\2\2\2\u014d\u014e\7\60\2\2\u014e\u014f\7\60\2\2\u014f") - buf.write("\u0150\7\60\2\2\u0150j\3\2\2\2\u0151\u0152\7k\2\2\u0152") - buf.write("\u0153\7u\2\2\u0153l\3\2\2\2\u0154\u0155\7k\2\2\u0155") - buf.write("\u0156\7u\2\2\u0156\u0157\7p\2\2\u0157\u0158\7)\2\2\u0158") - buf.write("\u0159\7v\2\2\u0159n\3\2\2\2\u015a\u015b\7?\2\2\u015b") - buf.write("\u015c\7?\2\2\u015cp\3\2\2\2\u015d\u015e\7#\2\2\u015e") - buf.write("\u015f\7?\2\2\u015fr\3\2\2\2\u0160\u0161\7>\2\2\u0161") - buf.write("\u0162\7?\2\2\u0162t\3\2\2\2\u0163\u0164\7@\2\2\u0164") - buf.write("\u0165\7?\2\2\u0165v\3\2\2\2\u0166\u0167\7p\2\2\u0167") - buf.write("\u0168\7q\2\2\u0168\u0169\7v\2\2\u0169x\3\2\2\2\u016a") - buf.write("\u016b\7c\2\2\u016b\u016c\7p\2\2\u016c\u016d\7f\2\2\u016d") - buf.write("z\3\2\2\2\u016e\u016f\7q\2\2\u016f\u0170\7t\2\2\u0170") - buf.write("|\3\2\2\2\u0171\u0172\7n\2\2\u0172\u0173\7c\2\2\u0173") - buf.write("\u0174\7o\2\2\u0174\u0175\7d\2\2\u0175\u0176\7f\2\2\u0176") - buf.write("\u0177\7c\2\2\u0177~\3\2\2\2\u0178\u0179\7/\2\2\u0179") - buf.write("\u017a\7@\2\2\u017a\u0080\3\2\2\2\u017b\u017c\7v\2\2\u017c") - buf.write("\u017d\7t\2\2\u017d\u017e\7w\2\2\u017e\u017f\7g\2\2\u017f") - buf.write("\u0082\3\2\2\2\u0180\u0181\7h\2\2\u0181\u0182\7c\2\2\u0182") - buf.write("\u0183\7n\2\2\u0183\u0184\7u\2\2\u0184\u0185\7g\2\2\u0185") - buf.write("\u0084\3\2\2\2\u0186\u0187\7p\2\2\u0187\u0188\7w\2\2\u0188") - buf.write("\u0189\7n\2\2\u0189\u018a\7n\2\2\u018a\u0086\3\2\2\2\u018b") - buf.write("\u018d\5\u0091I\2\u018c\u018b\3\2\2\2\u018d\u018e\3\2") - buf.write("\2\2\u018e\u018c\3\2\2\2\u018e\u018f\3\2\2\2\u018f\u0088") - buf.write("\3\2\2\2\u0190\u0192\5\u0091I\2\u0191\u0190\3\2\2\2\u0192") - buf.write("\u0193\3\2\2\2\u0193\u0191\3\2\2\2\u0193\u0194\3\2\2\2") - buf.write("\u0194\u0195\3\2\2\2\u0195\u0197\7\60\2\2\u0196\u0198") - buf.write("\5\u0091I\2\u0197\u0196\3\2\2\2\u0198\u0199\3\2\2\2\u0199") - buf.write("\u0197\3\2\2\2\u0199\u019a\3\2\2\2\u019a\u01a4\3\2\2\2") - buf.write("\u019b\u019d\7g\2\2\u019c\u019e\7/\2\2\u019d\u019c\3\2") - buf.write("\2\2\u019d\u019e\3\2\2\2\u019e\u01a0\3\2\2\2\u019f\u01a1") - buf.write("\5\u0091I\2\u01a0\u019f\3\2\2\2\u01a1\u01a2\3\2\2\2\u01a2") - buf.write("\u01a0\3\2\2\2\u01a2\u01a3\3\2\2\2\u01a3\u01a5\3\2\2\2") - buf.write("\u01a4\u019b\3\2\2\2\u01a4\u01a5\3\2\2\2\u01a5\u008a\3") - buf.write("\2\2\2\u01a6\u01ac\7)\2\2\u01a7\u01ab\n\2\2\2\u01a8\u01a9") - buf.write("\7^\2\2\u01a9\u01ab\t\3\2\2\u01aa\u01a7\3\2\2\2\u01aa") - buf.write("\u01a8\3\2\2\2\u01ab\u01ae\3\2\2\2\u01ac\u01aa\3\2\2\2") - buf.write("\u01ac\u01ad\3\2\2\2\u01ad\u01af\3\2\2\2\u01ae\u01ac\3") - buf.write("\2\2\2\u01af\u01b0\7)\2\2\u01b0\u008c\3\2\2\2\u01b1\u01b7") - buf.write("\7$\2\2\u01b2\u01b6\n\4\2\2\u01b3\u01b4\7^\2\2\u01b4\u01b6") - buf.write("\t\5\2\2\u01b5\u01b2\3\2\2\2\u01b5\u01b3\3\2\2\2\u01b6") - buf.write("\u01b9\3\2\2\2\u01b7\u01b5\3\2\2\2\u01b7\u01b8\3\2\2\2") - buf.write("\u01b8\u01ba\3\2\2\2\u01b9\u01b7\3\2\2\2\u01ba\u01bb\7") - buf.write("$\2\2\u01bb\u008e\3\2\2\2\u01bc\u01c0\5\u0093J\2\u01bd") - buf.write("\u01bf\5\u0095K\2\u01be\u01bd\3\2\2\2\u01bf\u01c2\3\2") - buf.write("\2\2\u01c0\u01be\3\2\2\2\u01c0\u01c1\3\2\2\2\u01c1\u0090") - buf.write("\3\2\2\2\u01c2\u01c0\3\2\2\2\u01c3\u01c4\t\6\2\2\u01c4") - buf.write("\u0092\3\2\2\2\u01c5\u01c6\t\7\2\2\u01c6\u0094\3\2\2\2") - buf.write("\u01c7\u01cb\5\u0093J\2\u01c8\u01cb\5\u0091I\2\u01c9\u01cb") - buf.write("\t\b\2\2\u01ca\u01c7\3\2\2\2\u01ca\u01c8\3\2\2\2\u01ca") - buf.write("\u01c9\3\2\2\2\u01cb\u0096\3\2\2\2\u01cc\u01cd\7/\2\2") - buf.write("\u01cd\u01ce\7/\2\2\u01ce\u01d2\3\2\2\2\u01cf\u01d1\n") - buf.write("\t\2\2\u01d0\u01cf\3\2\2\2\u01d1\u01d4\3\2\2\2\u01d2\u01d0") - buf.write("\3\2\2\2\u01d2\u01d3\3\2\2\2\u01d3\u01d5\3\2\2\2\u01d4") - buf.write("\u01d2\3\2\2\2\u01d5\u01d6\bL\2\2\u01d6\u0098\3\2\2\2") - buf.write("\u01d7\u01d9\t\n\2\2\u01d8\u01d7\3\2\2\2\u01d9\u01da\3") - buf.write("\2\2\2\u01da\u01d8\3\2\2\2\u01da\u01db\3\2\2\2\u01db\u01dc") - buf.write("\3\2\2\2\u01dc\u01dd\bM\2\2\u01dd\u009a\3\2\2\2\u01de") - buf.write("\u01df\13\2\2\2\u01df\u009c\3\2\2\2\21\2\u018e\u0193\u0199") - buf.write("\u019d\u01a2\u01a4\u01aa\u01ac\u01b5\u01b7\u01c0\u01ca") - buf.write("\u01d2\u01da\3\b\2\2") + buf.write("L\4M\tM\4N\tN\4O\tO\3\2\3\2\3\3\3\3\3\3\3\3\3\4\3\4\3") + buf.write("\4\3\4\3\4\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3\6\3\7") + buf.write("\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3\t\3\n\3") + buf.write("\n\3\13\3\13\3\f\3\f\3\r\3\r\3\16\3\16\3\17\3\17\3\20") + buf.write("\3\20\3\20\3\21\3\21\3\21\3\22\3\22\3\23\3\23\3\24\3\24") + buf.write("\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\26\3\27\3\27") + buf.write("\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\30") + buf.write("\3\30\3\30\3\30\3\31\3\31\3\32\3\32\3\32\3\33\3\33\3\33") + buf.write("\3\34\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35\3\36") + buf.write("\3\36\3\36\3\36\3\36\3\36\3\37\3\37\3\37\3\37\3\37\3\37") + buf.write("\3 \3 \3 \3 \3!\3!\3!\3\"\3\"\3\"\3\"\3\"\3#\3#\3#\3#") + buf.write("\3#\3$\3$\3%\3%\3&\3&\3&\3&\3\'\3\'\3\'\3\'\3\'\3\'\3") + buf.write("\'\3(\3(\3(\3(\3(\3(\3)\3)\3*\3*\3+\3+\3,\3,\3-\3-\3.") + buf.write("\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3/\3/\3\60\3\60\3\61") + buf.write("\3\61\3\62\3\62\3\63\3\63\3\64\3\64\3\65\3\65\3\65\3\66") + buf.write("\3\66\3\66\3\66\3\67\3\67\3\67\38\38\38\38\38\38\39\3") + buf.write("9\39\3:\3:\3:\3;\3;\3;\3<\3<\3<\3=\3=\3=\3=\3>\3>\3>\3") + buf.write(">\3?\3?\3?\3@\3@\3@\3@\3@\3@\3@\3A\3A\3A\3B\3B\3B\3B\3") + buf.write("B\3C\3C\3C\3C\3C\3C\3D\3D\3D\3D\3D\3E\6E\u019b\nE\rE\16") + buf.write("E\u019c\3F\6F\u01a0\nF\rF\16F\u01a1\3F\3F\6F\u01a6\nF") + buf.write("\rF\16F\u01a7\3F\3F\5F\u01ac\nF\3F\6F\u01af\nF\rF\16F") + buf.write("\u01b0\5F\u01b3\nF\3G\3G\3G\3G\7G\u01b9\nG\fG\16G\u01bc") + buf.write("\13G\3G\3G\3H\3H\3H\3H\7H\u01c4\nH\fH\16H\u01c7\13H\3") + buf.write("H\3H\3I\3I\7I\u01cd\nI\fI\16I\u01d0\13I\3J\3J\3K\3K\3") + buf.write("L\3L\3L\5L\u01d9\nL\3M\3M\3M\3M\7M\u01df\nM\fM\16M\u01e2") + buf.write("\13M\3M\3M\3N\6N\u01e7\nN\rN\16N\u01e8\3N\3N\3O\3O\2\2") + buf.write("P\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31") + buf.write("\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31") + buf.write("\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O") + buf.write(")Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k\67m8o9q:s;") + buf.write("u{?}@\177A\u0081B\u0083C\u0085D\u0087E\u0089F\u008b") + buf.write("G\u008dH\u008fI\u0091J\u0093\2\u0095\2\u0097\2\u0099K") + buf.write("\u009bL\u009dM\3\2\13\4\2))^^\6\2))^^ppvv\4\2$$^^\6\2") + buf.write("$$^^ppvv\3\2\62;\5\2C\\aac|\3\2))\4\2\f\f\16\17\5\2\13") + buf.write("\f\17\17\"\"\2\u01f9\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2") + buf.write("\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2") + buf.write("\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31") + buf.write("\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2") + buf.write("\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3") + buf.write("\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2") + buf.write("\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3") + buf.write("\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G") + buf.write("\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2") + buf.write("Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2") + buf.write("\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2") + buf.write("\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2m\3\2") + buf.write("\2\2\2o\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2u\3\2\2\2\2w\3") + buf.write("\2\2\2\2y\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177\3\2\2\2") + buf.write("\2\u0081\3\2\2\2\2\u0083\3\2\2\2\2\u0085\3\2\2\2\2\u0087") + buf.write("\3\2\2\2\2\u0089\3\2\2\2\2\u008b\3\2\2\2\2\u008d\3\2\2") + buf.write("\2\2\u008f\3\2\2\2\2\u0091\3\2\2\2\2\u0099\3\2\2\2\2\u009b") + buf.write("\3\2\2\2\2\u009d\3\2\2\2\3\u009f\3\2\2\2\5\u00a1\3\2\2") + buf.write("\2\7\u00a5\3\2\2\2\t\u00aa\3\2\2\2\13\u00b1\3\2\2\2\r") + buf.write("\u00b4\3\2\2\2\17\u00b9\3\2\2\2\21\u00bf\3\2\2\2\23\u00c1") + buf.write("\3\2\2\2\25\u00c3\3\2\2\2\27\u00c5\3\2\2\2\31\u00c7\3") + buf.write("\2\2\2\33\u00c9\3\2\2\2\35\u00cb\3\2\2\2\37\u00cd\3\2") + buf.write("\2\2!\u00d0\3\2\2\2#\u00d3\3\2\2\2%\u00d5\3\2\2\2\'\u00d7") + buf.write("\3\2\2\2)\u00d9\3\2\2\2+\u00dc\3\2\2\2-\u00e2\3\2\2\2") + buf.write("/\u00eb\3\2\2\2\61\u00f2\3\2\2\2\63\u00f4\3\2\2\2\65\u00f7") + buf.write("\3\2\2\2\67\u00fa\3\2\2\29\u00ff\3\2\2\2;\u0104\3\2\2") + buf.write("\2=\u010a\3\2\2\2?\u0110\3\2\2\2A\u0114\3\2\2\2C\u0117") + buf.write("\3\2\2\2E\u011c\3\2\2\2G\u0121\3\2\2\2I\u0123\3\2\2\2") + buf.write("K\u0125\3\2\2\2M\u0129\3\2\2\2O\u0130\3\2\2\2Q\u0136\3") + buf.write("\2\2\2S\u0138\3\2\2\2U\u013a\3\2\2\2W\u013c\3\2\2\2Y\u013e") + buf.write("\3\2\2\2[\u0140\3\2\2\2]\u014c\3\2\2\2_\u014e\3\2\2\2") + buf.write("a\u0150\3\2\2\2c\u0152\3\2\2\2e\u0154\3\2\2\2g\u0156\3") + buf.write("\2\2\2i\u0158\3\2\2\2k\u015b\3\2\2\2m\u015f\3\2\2\2o\u0162") + buf.write("\3\2\2\2q\u0168\3\2\2\2s\u016b\3\2\2\2u\u016e\3\2\2\2") + buf.write("w\u0171\3\2\2\2y\u0174\3\2\2\2{\u0178\3\2\2\2}\u017c\3") + buf.write("\2\2\2\177\u017f\3\2\2\2\u0081\u0186\3\2\2\2\u0083\u0189") + buf.write("\3\2\2\2\u0085\u018e\3\2\2\2\u0087\u0194\3\2\2\2\u0089") + buf.write("\u019a\3\2\2\2\u008b\u019f\3\2\2\2\u008d\u01b4\3\2\2\2") + buf.write("\u008f\u01bf\3\2\2\2\u0091\u01ca\3\2\2\2\u0093\u01d1\3") + buf.write("\2\2\2\u0095\u01d3\3\2\2\2\u0097\u01d8\3\2\2\2\u0099\u01da") + buf.write("\3\2\2\2\u009b\u01e6\3\2\2\2\u009d\u01ec\3\2\2\2\u009f") + buf.write("\u00a0\7=\2\2\u00a0\4\3\2\2\2\u00a1\u00a2\7w\2\2\u00a2") + buf.write("\u00a3\7u\2\2\u00a3\u00a4\7g\2\2\u00a4\6\3\2\2\2\u00a5") + buf.write("\u00a6\7q\2\2\u00a6\u00a7\7p\2\2\u00a7\u00a8\7n\2\2\u00a8") + buf.write("\u00a9\7{\2\2\u00a9\b\3\2\2\2\u00aa\u00ab\7j\2\2\u00ab") + buf.write("\u00ac\7k\2\2\u00ac\u00ad\7f\2\2\u00ad\u00ae\7k\2\2\u00ae") + buf.write("\u00af\7p\2\2\u00af\u00b0\7i\2\2\u00b0\n\3\2\2\2\u00b1") + buf.write("\u00b2\7c\2\2\u00b2\u00b3\7u\2\2\u00b3\f\3\2\2\2\u00b4") + buf.write("\u00b5\7u\2\2\u00b5\u00b6\7m\2\2\u00b6\u00b7\7k\2\2\u00b7") + buf.write("\u00b8\7r\2\2\u00b8\16\3\2\2\2\u00b9\u00ba\7r\2\2\u00ba") + buf.write("\u00bb\7t\2\2\u00bb\u00bc\7k\2\2\u00bc\u00bd\7p\2\2\u00bd") + buf.write("\u00be\7v\2\2\u00be\20\3\2\2\2\u00bf\u00c0\7?\2\2\u00c0") + buf.write("\22\3\2\2\2\u00c1\u00c2\7`\2\2\u00c2\24\3\2\2\2\u00c3") + buf.write("\u00c4\7,\2\2\u00c4\26\3\2\2\2\u00c5\u00c6\7\61\2\2\u00c6") + buf.write("\30\3\2\2\2\u00c7\u00c8\7\'\2\2\u00c8\32\3\2\2\2\u00c9") + buf.write("\u00ca\7-\2\2\u00ca\34\3\2\2\2\u00cb\u00cc\7/\2\2\u00cc") + buf.write("\36\3\2\2\2\u00cd\u00ce\7>\2\2\u00ce\u00cf\7>\2\2\u00cf") + buf.write(" \3\2\2\2\u00d0\u00d1\7@\2\2\u00d1\u00d2\7@\2\2\u00d2") + buf.write("\"\3\2\2\2\u00d3\u00d4\7(\2\2\u00d4$\3\2\2\2\u00d5\u00d6") + buf.write("\7&\2\2\u00d6&\3\2\2\2\u00d7\u00d8\7~\2\2\u00d8(\3\2\2") + buf.write("\2\u00d9\u00da\7A\2\2\u00da\u00db\7A\2\2\u00db*\3\2\2") + buf.write("\2\u00dc\u00dd\7d\2\2\u00dd\u00de\7t\2\2\u00de\u00df\7") + buf.write("g\2\2\u00df\u00e0\7c\2\2\u00e0\u00e1\7m\2\2\u00e1,\3\2") + buf.write("\2\2\u00e2\u00e3\7e\2\2\u00e3\u00e4\7q\2\2\u00e4\u00e5") + buf.write("\7p\2\2\u00e5\u00e6\7v\2\2\u00e6\u00e7\7k\2\2\u00e7\u00e8") + buf.write("\7p\2\2\u00e8\u00e9\7w\2\2\u00e9\u00ea\7g\2\2\u00ea.\3") + buf.write("\2\2\2\u00eb\u00ec\7t\2\2\u00ec\u00ed\7g\2\2\u00ed\u00ee") + buf.write("\7v\2\2\u00ee\u00ef\7w\2\2\u00ef\u00f0\7t\2\2\u00f0\u00f1") + buf.write("\7p\2\2\u00f1\60\3\2\2\2\u00f2\u00f3\7.\2\2\u00f3\62\3") + buf.write("\2\2\2\u00f4\u00f5\7k\2\2\u00f5\u00f6\7h\2\2\u00f6\64") + buf.write("\3\2\2\2\u00f7\u00f8\7f\2\2\u00f8\u00f9\7q\2\2\u00f9\66") + buf.write("\3\2\2\2\u00fa\u00fb\7g\2\2\u00fb\u00fc\7n\2\2\u00fc\u00fd") + buf.write("\7k\2\2\u00fd\u00fe\7h\2\2\u00fe8\3\2\2\2\u00ff\u0100") + buf.write("\7g\2\2\u0100\u0101\7n\2\2\u0101\u0102\7u\2\2\u0102\u0103") + buf.write("\7g\2\2\u0103:\3\2\2\2\u0104\u0105\7y\2\2\u0105\u0106") + buf.write("\7j\2\2\u0106\u0107\7k\2\2\u0107\u0108\7n\2\2\u0108\u0109") + buf.write("\7g\2\2\u0109<\3\2\2\2\u010a\u010b\7w\2\2\u010b\u010c") + buf.write("\7p\2\2\u010c\u010d\7v\2\2\u010d\u010e\7k\2\2\u010e\u010f") + buf.write("\7n\2\2\u010f>\3\2\2\2\u0110\u0111\7h\2\2\u0111\u0112") + buf.write("\7q\2\2\u0112\u0113\7t\2\2\u0113@\3\2\2\2\u0114\u0115") + buf.write("\7k\2\2\u0115\u0116\7p\2\2\u0116B\3\2\2\2\u0117\u0118") + buf.write("\7u\2\2\u0118\u0119\7v\2\2\u0119\u011a\7g\2\2\u011a\u011b") + buf.write("\7r\2\2\u011bD\3\2\2\2\u011c\u011d\7h\2\2\u011d\u011e") + buf.write("\7w\2\2\u011e\u011f\7p\2\2\u011f\u0120\7e\2\2\u0120F\3") + buf.write("\2\2\2\u0121\u0122\7>\2\2\u0122H\3\2\2\2\u0123\u0124\7") + buf.write("@\2\2\u0124J\3\2\2\2\u0125\u0126\7f\2\2\u0126\u0127\7") + buf.write("g\2\2\u0127\u0128\7h\2\2\u0128L\3\2\2\2\u0129\u012a\7") + buf.write("g\2\2\u012a\u012b\7z\2\2\u012b\u012c\7v\2\2\u012c\u012d") + buf.write("\7g\2\2\u012d\u012e\7t\2\2\u012e\u012f\7p\2\2\u012fN\3") + buf.write("\2\2\2\u0130\u0131\7e\2\2\u0131\u0132\7n\2\2\u0132\u0133") + buf.write("\7c\2\2\u0133\u0134\7u\2\2\u0134\u0135\7u\2\2\u0135P\3") + buf.write("\2\2\2\u0136\u0137\7}\2\2\u0137R\3\2\2\2\u0138\u0139\7") + buf.write("\177\2\2\u0139T\3\2\2\2\u013a\u013b\7<\2\2\u013bV\3\2") + buf.write("\2\2\u013c\u013d\7*\2\2\u013dX\3\2\2\2\u013e\u013f\7+") + buf.write("\2\2\u013fZ\3\2\2\2\u0140\u0141\7e\2\2\u0141\u0142\7q") + buf.write("\2\2\u0142\u0143\7p\2\2\u0143\u0144\7u\2\2\u0144\u0145") + buf.write("\7v\2\2\u0145\u0146\7t\2\2\u0146\u0147\7w\2\2\u0147\u0148") + buf.write("\7e\2\2\u0148\u0149\7v\2\2\u0149\u014a\7q\2\2\u014a\u014b") + buf.write("\7t\2\2\u014b\\\3\2\2\2\u014c\u014d\7]\2\2\u014d^\3\2") + buf.write("\2\2\u014e\u014f\7_\2\2\u014f`\3\2\2\2\u0150\u0151\7A") + buf.write("\2\2\u0151b\3\2\2\2\u0152\u0153\7\60\2\2\u0153d\3\2\2") + buf.write("\2\u0154\u0155\7#\2\2\u0155f\3\2\2\2\u0156\u0157\7\u0080") + buf.write("\2\2\u0157h\3\2\2\2\u0158\u0159\7\60\2\2\u0159\u015a\7") + buf.write("\60\2\2\u015aj\3\2\2\2\u015b\u015c\7\60\2\2\u015c\u015d") + buf.write("\7\60\2\2\u015d\u015e\7\60\2\2\u015el\3\2\2\2\u015f\u0160") + buf.write("\7k\2\2\u0160\u0161\7u\2\2\u0161n\3\2\2\2\u0162\u0163") + buf.write("\7k\2\2\u0163\u0164\7u\2\2\u0164\u0165\7p\2\2\u0165\u0166") + buf.write("\7)\2\2\u0166\u0167\7v\2\2\u0167p\3\2\2\2\u0168\u0169") + buf.write("\7?\2\2\u0169\u016a\7?\2\2\u016ar\3\2\2\2\u016b\u016c") + buf.write("\7#\2\2\u016c\u016d\7?\2\2\u016dt\3\2\2\2\u016e\u016f") + buf.write("\7>\2\2\u016f\u0170\7?\2\2\u0170v\3\2\2\2\u0171\u0172") + buf.write("\7@\2\2\u0172\u0173\7?\2\2\u0173x\3\2\2\2\u0174\u0175") + buf.write("\7p\2\2\u0175\u0176\7q\2\2\u0176\u0177\7v\2\2\u0177z\3") + buf.write("\2\2\2\u0178\u0179\7c\2\2\u0179\u017a\7p\2\2\u017a\u017b") + buf.write("\7f\2\2\u017b|\3\2\2\2\u017c\u017d\7q\2\2\u017d\u017e") + buf.write("\7t\2\2\u017e~\3\2\2\2\u017f\u0180\7n\2\2\u0180\u0181") + buf.write("\7c\2\2\u0181\u0182\7o\2\2\u0182\u0183\7d\2\2\u0183\u0184") + buf.write("\7f\2\2\u0184\u0185\7c\2\2\u0185\u0080\3\2\2\2\u0186\u0187") + buf.write("\7/\2\2\u0187\u0188\7@\2\2\u0188\u0082\3\2\2\2\u0189\u018a") + buf.write("\7v\2\2\u018a\u018b\7t\2\2\u018b\u018c\7w\2\2\u018c\u018d") + buf.write("\7g\2\2\u018d\u0084\3\2\2\2\u018e\u018f\7h\2\2\u018f\u0190") + buf.write("\7c\2\2\u0190\u0191\7n\2\2\u0191\u0192\7u\2\2\u0192\u0193") + buf.write("\7g\2\2\u0193\u0086\3\2\2\2\u0194\u0195\7p\2\2\u0195\u0196") + buf.write("\7w\2\2\u0196\u0197\7n\2\2\u0197\u0198\7n\2\2\u0198\u0088") + buf.write("\3\2\2\2\u0199\u019b\5\u0093J\2\u019a\u0199\3\2\2\2\u019b") + buf.write("\u019c\3\2\2\2\u019c\u019a\3\2\2\2\u019c\u019d\3\2\2\2") + buf.write("\u019d\u008a\3\2\2\2\u019e\u01a0\5\u0093J\2\u019f\u019e") + buf.write("\3\2\2\2\u01a0\u01a1\3\2\2\2\u01a1\u019f\3\2\2\2\u01a1") + buf.write("\u01a2\3\2\2\2\u01a2\u01a3\3\2\2\2\u01a3\u01a5\7\60\2") + buf.write("\2\u01a4\u01a6\5\u0093J\2\u01a5\u01a4\3\2\2\2\u01a6\u01a7") + buf.write("\3\2\2\2\u01a7\u01a5\3\2\2\2\u01a7\u01a8\3\2\2\2\u01a8") + buf.write("\u01b2\3\2\2\2\u01a9\u01ab\7g\2\2\u01aa\u01ac\7/\2\2\u01ab") + buf.write("\u01aa\3\2\2\2\u01ab\u01ac\3\2\2\2\u01ac\u01ae\3\2\2\2") + buf.write("\u01ad\u01af\5\u0093J\2\u01ae\u01ad\3\2\2\2\u01af\u01b0") + buf.write("\3\2\2\2\u01b0\u01ae\3\2\2\2\u01b0\u01b1\3\2\2\2\u01b1") + buf.write("\u01b3\3\2\2\2\u01b2\u01a9\3\2\2\2\u01b2\u01b3\3\2\2\2") + buf.write("\u01b3\u008c\3\2\2\2\u01b4\u01ba\7)\2\2\u01b5\u01b9\n") + buf.write("\2\2\2\u01b6\u01b7\7^\2\2\u01b7\u01b9\t\3\2\2\u01b8\u01b5") + buf.write("\3\2\2\2\u01b8\u01b6\3\2\2\2\u01b9\u01bc\3\2\2\2\u01ba") + buf.write("\u01b8\3\2\2\2\u01ba\u01bb\3\2\2\2\u01bb\u01bd\3\2\2\2") + buf.write("\u01bc\u01ba\3\2\2\2\u01bd\u01be\7)\2\2\u01be\u008e\3") + buf.write("\2\2\2\u01bf\u01c5\7$\2\2\u01c0\u01c4\n\4\2\2\u01c1\u01c2") + buf.write("\7^\2\2\u01c2\u01c4\t\5\2\2\u01c3\u01c0\3\2\2\2\u01c3") + buf.write("\u01c1\3\2\2\2\u01c4\u01c7\3\2\2\2\u01c5\u01c3\3\2\2\2") + buf.write("\u01c5\u01c6\3\2\2\2\u01c6\u01c8\3\2\2\2\u01c7\u01c5\3") + buf.write("\2\2\2\u01c8\u01c9\7$\2\2\u01c9\u0090\3\2\2\2\u01ca\u01ce") + buf.write("\5\u0095K\2\u01cb\u01cd\5\u0097L\2\u01cc\u01cb\3\2\2\2") + buf.write("\u01cd\u01d0\3\2\2\2\u01ce\u01cc\3\2\2\2\u01ce\u01cf\3") + buf.write("\2\2\2\u01cf\u0092\3\2\2\2\u01d0\u01ce\3\2\2\2\u01d1\u01d2") + buf.write("\t\6\2\2\u01d2\u0094\3\2\2\2\u01d3\u01d4\t\7\2\2\u01d4") + buf.write("\u0096\3\2\2\2\u01d5\u01d9\5\u0095K\2\u01d6\u01d9\5\u0093") + buf.write("J\2\u01d7\u01d9\t\b\2\2\u01d8\u01d5\3\2\2\2\u01d8\u01d6") + buf.write("\3\2\2\2\u01d8\u01d7\3\2\2\2\u01d9\u0098\3\2\2\2\u01da") + buf.write("\u01db\7/\2\2\u01db\u01dc\7/\2\2\u01dc\u01e0\3\2\2\2\u01dd") + buf.write("\u01df\n\t\2\2\u01de\u01dd\3\2\2\2\u01df\u01e2\3\2\2\2") + buf.write("\u01e0\u01de\3\2\2\2\u01e0\u01e1\3\2\2\2\u01e1\u01e3\3") + buf.write("\2\2\2\u01e2\u01e0\3\2\2\2\u01e3\u01e4\bM\2\2\u01e4\u009a") + buf.write("\3\2\2\2\u01e5\u01e7\t\n\2\2\u01e6\u01e5\3\2\2\2\u01e7") + buf.write("\u01e8\3\2\2\2\u01e8\u01e6\3\2\2\2\u01e8\u01e9\3\2\2\2") + buf.write("\u01e9\u01ea\3\2\2\2\u01ea\u01eb\bN\2\2\u01eb\u009c\3") + buf.write("\2\2\2\u01ec\u01ed\13\2\2\2\u01ed\u009e\3\2\2\2\21\2\u019c") + buf.write("\u01a1\u01a7\u01ab\u01b0\u01b2\u01b8\u01ba\u01c3\u01c5") + buf.write("\u01ce\u01d8\u01e0\u01e8\3\b\2\2") return buf.getvalue() @@ -287,14 +292,15 @@ class PyxellLexer(Lexer): T__63 = 64 T__64 = 65 T__65 = 66 - INT = 67 - FLOAT = 68 - CHAR = 69 - STRING = 70 - ID = 71 - COMMENT = 72 - WS = 73 - ERR = 74 + T__66 = 67 + INT = 68 + FLOAT = 69 + CHAR = 70 + STRING = 71 + ID = 72 + COMMENT = 73 + WS = 74 + ERR = 75 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -305,9 +311,9 @@ class PyxellLexer(Lexer): "'='", "'^'", "'*'", "'/'", "'%'", "'+'", "'-'", "'<<'", "'>>'", "'&'", "'$'", "'|'", "'??'", "'break'", "'continue'", "'return'", "','", "'if'", "'do'", "'elif'", "'else'", "'while'", "'until'", - "'for'", "'in'", "'step'", "'func'", "'<'", "'>'", "'('", "')'", - "'def'", "'extern'", "'class'", "'{'", "'}'", "':'", "'['", - "']'", "'?'", "'.'", "'!'", "'~'", "'..'", "'...'", "'is'", + "'for'", "'in'", "'step'", "'func'", "'<'", "'>'", "'def'", + "'extern'", "'class'", "'{'", "'}'", "':'", "'('", "')'", "'constructor'", + "'['", "']'", "'?'", "'.'", "'!'", "'~'", "'..'", "'...'", "'is'", "'isn't'", "'=='", "'!='", "'<='", "'>='", "'not'", "'and'", "'or'", "'lambda'", "'->'", "'true'", "'false'", "'null'" ] @@ -324,9 +330,9 @@ class PyxellLexer(Lexer): "T__44", "T__45", "T__46", "T__47", "T__48", "T__49", "T__50", "T__51", "T__52", "T__53", "T__54", "T__55", "T__56", "T__57", "T__58", "T__59", "T__60", "T__61", - "T__62", "T__63", "T__64", "T__65", "INT", "FLOAT", "CHAR", - "STRING", "ID", "DIGIT", "ID_START", "ID_CONT", "COMMENT", - "WS", "ERR" ] + "T__62", "T__63", "T__64", "T__65", "T__66", "INT", "FLOAT", + "CHAR", "STRING", "ID", "DIGIT", "ID_START", "ID_CONT", + "COMMENT", "WS", "ERR" ] grammarFileName = "Pyxell.g4" diff --git a/src/antlr/PyxellLexer.tokens b/src/antlr/PyxellLexer.tokens index c9e61a5d..6d647978 100644 --- a/src/antlr/PyxellLexer.tokens +++ b/src/antlr/PyxellLexer.tokens @@ -64,14 +64,15 @@ T__62=63 T__63=64 T__64=65 T__65=66 -INT=67 -FLOAT=68 -CHAR=69 -STRING=70 -ID=71 -COMMENT=72 -WS=73 -ERR=74 +T__66=67 +INT=68 +FLOAT=69 +CHAR=70 +STRING=71 +ID=72 +COMMENT=73 +WS=74 +ERR=75 ';'=1 'use'=2 'only'=3 @@ -108,33 +109,34 @@ ERR=74 'func'=34 '<'=35 '>'=36 -'('=37 -')'=38 -'def'=39 -'extern'=40 -'class'=41 -'{'=42 -'}'=43 -':'=44 -'['=45 -']'=46 -'?'=47 -'.'=48 -'!'=49 -'~'=50 -'..'=51 -'...'=52 -'is'=53 -'isn\'t'=54 -'=='=55 -'!='=56 -'<='=57 -'>='=58 -'not'=59 -'and'=60 -'or'=61 -'lambda'=62 -'->'=63 -'true'=64 -'false'=65 -'null'=66 +'def'=37 +'extern'=38 +'class'=39 +'{'=40 +'}'=41 +':'=42 +'('=43 +')'=44 +'constructor'=45 +'['=46 +']'=47 +'?'=48 +'.'=49 +'!'=50 +'~'=51 +'..'=52 +'...'=53 +'is'=54 +'isn\'t'=55 +'=='=56 +'!='=57 +'<='=58 +'>='=59 +'not'=60 +'and'=61 +'or'=62 +'lambda'=63 +'->'=64 +'true'=65 +'false'=66 +'null'=67 diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index fabd2e06..bb3141c9 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -8,227 +8,230 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3L") - buf.write("\u01bf\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3M") + buf.write("\u01bd\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16") - buf.write("\t\16\4\17\t\17\4\20\t\20\4\21\t\21\3\2\7\2$\n\2\f\2\16") - buf.write("\2\'\13\2\3\2\3\2\3\3\3\3\3\3\3\3\5\3/\n\3\3\4\3\4\3\4") - buf.write("\3\4\3\4\3\4\3\4\3\4\5\49\n\4\3\4\3\4\3\4\5\4>\n\4\3\4") - buf.write("\3\4\3\4\3\4\5\4D\n\4\3\4\3\4\3\4\7\4I\n\4\f\4\16\4L\13") - buf.write("\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\5\4W\n\4\5\4Y\n") - buf.write("\4\3\5\3\5\3\5\7\5^\n\5\f\5\16\5a\13\5\3\6\3\6\3\6\3\6") - buf.write("\3\6\3\6\3\6\3\6\3\6\7\6l\n\6\f\6\16\6o\13\6\3\6\3\6\3") - buf.write("\6\5\6t\n\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3") - buf.write("\6\3\6\3\6\3\6\3\6\3\6\5\6\u0086\n\6\3\6\3\6\3\6\3\6\3") - buf.write("\6\3\6\3\6\3\6\3\6\5\6\u0091\n\6\3\6\3\6\3\6\3\6\7\6\u0097") - buf.write("\n\6\f\6\16\6\u009a\13\6\3\6\5\6\u009d\n\6\3\6\3\6\5\6") - buf.write("\u00a1\n\6\3\6\3\6\3\6\3\6\5\6\u00a7\n\6\3\6\3\6\3\6\3") - buf.write("\6\3\6\6\6\u00ae\n\6\r\6\16\6\u00af\3\6\3\6\5\6\u00b4") - buf.write("\n\6\3\7\3\7\3\7\3\7\5\7\u00ba\n\7\3\b\3\b\3\b\3\b\5\b") - buf.write("\u00c0\n\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\7\b\u00ca\n") - buf.write("\b\f\b\16\b\u00cd\13\b\3\b\5\b\u00d0\n\b\3\b\3\b\5\b\u00d4") - buf.write("\n\b\3\b\3\b\5\b\u00d8\n\b\3\t\3\t\6\t\u00dc\n\t\r\t\16") - buf.write("\t\u00dd\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3") - buf.write("\n\7\n\u00ec\n\n\f\n\16\n\u00ef\13\n\3\n\5\n\u00f2\n\n") - buf.write("\3\n\3\n\3\n\3\n\6\n\u00f8\n\n\r\n\16\n\u00f9\3\n\3\n") - buf.write("\3\n\3\n\3\n\3\n\3\n\3\n\3\n\7\n\u0105\n\n\f\n\16\n\u0108") - buf.write("\13\n\3\n\5\n\u010b\n\n\3\n\3\n\5\n\u010f\n\n\3\n\3\n") - buf.write("\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3") - buf.write("\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n") - buf.write("\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3") - buf.write("\n\3\n\3\n\3\n\3\n\5\n\u0140\n\n\3\n\3\n\3\n\3\n\3\n\3") - buf.write("\n\3\n\5\n\u0149\n\n\3\n\3\n\5\n\u014d\n\n\3\n\3\n\5\n") - buf.write("\u0151\n\n\5\n\u0153\n\n\3\n\3\n\3\n\5\n\u0158\n\n\3\n") - buf.write("\3\n\3\n\3\n\3\n\3\n\3\n\7\n\u0161\n\n\f\n\16\n\u0164") - buf.write("\13\n\3\n\5\n\u0167\n\n\3\n\3\n\3\n\3\n\3\n\7\n\u016e") - buf.write("\n\n\f\n\16\n\u0171\13\n\3\13\3\13\3\13\7\13\u0176\n\13") - buf.write("\f\13\16\13\u0179\13\13\3\13\3\13\3\f\3\f\3\f\3\r\3\r") - buf.write("\3\r\3\r\3\r\3\r\5\r\u0186\n\r\3\r\3\r\5\r\u018a\n\r\3") - buf.write("\16\3\16\5\16\u018e\n\16\3\16\3\16\3\17\3\17\3\17\3\17") - buf.write("\3\17\3\17\3\17\5\17\u0199\n\17\3\20\3\20\7\20\u019d\n") - buf.write("\20\f\20\16\20\u01a0\13\20\3\20\3\20\3\21\3\21\3\21\3") - buf.write("\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\5\21\u01b0") - buf.write("\n\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\7\21\u01ba") - buf.write("\n\21\f\21\16\21\u01bd\13\21\3\21\2\4\22 \22\2\4\6\b\n") - buf.write("\f\16\20\22\24\26\30\32\34\36 \2\f\3\2\13\26\3\2\27\30") - buf.write("\4\2\17\20\64\64\3\2\f\16\3\2\17\20\3\2\21\22\3\2\65\66") - buf.write("\3\2\678\4\2%&9<\3\2BC\2\u020c\2%\3\2\2\2\4.\3\2\2\2\6") - buf.write("X\3\2\2\2\bZ\3\2\2\2\n\u00b3\3\2\2\2\f\u00b5\3\2\2\2\16") - buf.write("\u00d7\3\2\2\2\20\u00d9\3\2\2\2\22\u010e\3\2\2\2\24\u0177") - buf.write("\3\2\2\2\26\u017c\3\2\2\2\30\u0189\3\2\2\2\32\u018d\3") - buf.write("\2\2\2\34\u0198\3\2\2\2\36\u019e\3\2\2\2 \u01af\3\2\2") - buf.write("\2\"$\5\4\3\2#\"\3\2\2\2$\'\3\2\2\2%#\3\2\2\2%&\3\2\2") - buf.write("\2&(\3\2\2\2\'%\3\2\2\2()\7\2\2\3)\3\3\2\2\2*+\5\6\4\2") - buf.write("+,\7\3\2\2,/\3\2\2\2-/\5\n\6\2.*\3\2\2\2.-\3\2\2\2/\5") - buf.write("\3\2\2\2\60\61\7\4\2\2\618\7I\2\2\62\63\7\5\2\2\639\5") - buf.write("\36\20\2\64\65\7\6\2\2\659\5\36\20\2\66\67\7\7\2\2\67") - buf.write("9\7I\2\28\62\3\2\2\28\64\3\2\2\28\66\3\2\2\289\3\2\2\2") - buf.write("9Y\3\2\2\2:Y\7\b\2\2;=\7\t\2\2<>\5\24\13\2=<\3\2\2\2=") - buf.write(">\3\2\2\2>Y\3\2\2\2?@\5 \21\2@C\7I\2\2AB\7\n\2\2BD\5\24") - buf.write("\13\2CA\3\2\2\2CD\3\2\2\2DY\3\2\2\2EF\5\b\5\2FG\7\n\2") - buf.write("\2GI\3\2\2\2HE\3\2\2\2IL\3\2\2\2JH\3\2\2\2JK\3\2\2\2K") - buf.write("M\3\2\2\2LJ\3\2\2\2MY\5\24\13\2NO\5\22\n\2OP\t\2\2\2P") - buf.write("Q\7\n\2\2QR\5\22\n\2RY\3\2\2\2SY\t\3\2\2TV\7\31\2\2UW") - buf.write("\5\24\13\2VU\3\2\2\2VW\3\2\2\2WY\3\2\2\2X\60\3\2\2\2X") - buf.write(":\3\2\2\2X;\3\2\2\2X?\3\2\2\2XJ\3\2\2\2XN\3\2\2\2XS\3") - buf.write("\2\2\2XT\3\2\2\2Y\7\3\2\2\2Z_\5\22\n\2[\\\7\32\2\2\\^") - buf.write("\5\22\n\2][\3\2\2\2^a\3\2\2\2_]\3\2\2\2_`\3\2\2\2`\t\3") - buf.write("\2\2\2a_\3\2\2\2bc\7\33\2\2cd\5\22\n\2de\7\34\2\2em\5") - buf.write("\20\t\2fg\7\35\2\2gh\5\22\n\2hi\7\34\2\2ij\5\20\t\2jl") - buf.write("\3\2\2\2kf\3\2\2\2lo\3\2\2\2mk\3\2\2\2mn\3\2\2\2ns\3\2") - buf.write("\2\2om\3\2\2\2pq\7\36\2\2qr\7\34\2\2rt\5\20\t\2sp\3\2") - buf.write("\2\2st\3\2\2\2t\u00b4\3\2\2\2uv\7\37\2\2vw\5\22\n\2wx") - buf.write("\7\34\2\2xy\5\20\t\2y\u00b4\3\2\2\2z{\7 \2\2{|\5\22\n") - buf.write("\2|}\7\34\2\2}~\5\20\t\2~\u00b4\3\2\2\2\177\u0080\7!\2") - buf.write("\2\u0080\u0081\5\24\13\2\u0081\u0082\7\"\2\2\u0082\u0085") - buf.write("\5\24\13\2\u0083\u0084\7#\2\2\u0084\u0086\5\24\13\2\u0085") - buf.write("\u0083\3\2\2\2\u0085\u0086\3\2\2\2\u0086\u0087\3\2\2\2") - buf.write("\u0087\u0088\7\34\2\2\u0088\u0089\5\20\t\2\u0089\u00b4") - buf.write("\3\2\2\2\u008a\u008b\7$\2\2\u008b\u0090\7I\2\2\u008c\u008d") - buf.write("\7%\2\2\u008d\u008e\5\36\20\2\u008e\u008f\7&\2\2\u008f") - buf.write("\u0091\3\2\2\2\u0090\u008c\3\2\2\2\u0090\u0091\3\2\2\2") - buf.write("\u0091\u0092\3\2\2\2\u0092\u0098\7\'\2\2\u0093\u0094\5") - buf.write("\f\7\2\u0094\u0095\7\32\2\2\u0095\u0097\3\2\2\2\u0096") - buf.write("\u0093\3\2\2\2\u0097\u009a\3\2\2\2\u0098\u0096\3\2\2\2") - buf.write("\u0098\u0099\3\2\2\2\u0099\u009c\3\2\2\2\u009a\u0098\3") - buf.write("\2\2\2\u009b\u009d\5\f\7\2\u009c\u009b\3\2\2\2\u009c\u009d") - buf.write("\3\2\2\2\u009d\u009e\3\2\2\2\u009e\u00a0\7(\2\2\u009f") - buf.write("\u00a1\5 \21\2\u00a0\u009f\3\2\2\2\u00a0\u00a1\3\2\2\2") - buf.write("\u00a1\u00a6\3\2\2\2\u00a2\u00a3\7)\2\2\u00a3\u00a7\5") - buf.write("\20\t\2\u00a4\u00a5\7*\2\2\u00a5\u00a7\7\3\2\2\u00a6\u00a2") - buf.write("\3\2\2\2\u00a6\u00a4\3\2\2\2\u00a7\u00b4\3\2\2\2\u00a8") - buf.write("\u00a9\7+\2\2\u00a9\u00aa\7I\2\2\u00aa\u00ab\7)\2\2\u00ab") - buf.write("\u00ad\7,\2\2\u00ac\u00ae\5\16\b\2\u00ad\u00ac\3\2\2\2") - buf.write("\u00ae\u00af\3\2\2\2\u00af\u00ad\3\2\2\2\u00af\u00b0\3") - buf.write("\2\2\2\u00b0\u00b1\3\2\2\2\u00b1\u00b2\7-\2\2\u00b2\u00b4") - buf.write("\3\2\2\2\u00b3b\3\2\2\2\u00b3u\3\2\2\2\u00b3z\3\2\2\2") - buf.write("\u00b3\177\3\2\2\2\u00b3\u008a\3\2\2\2\u00b3\u00a8\3\2") - buf.write("\2\2\u00b4\13\3\2\2\2\u00b5\u00b6\5 \21\2\u00b6\u00b9") - buf.write("\7I\2\2\u00b7\u00b8\7.\2\2\u00b8\u00ba\5\22\n\2\u00b9") - buf.write("\u00b7\3\2\2\2\u00b9\u00ba\3\2\2\2\u00ba\r\3\2\2\2\u00bb") - buf.write("\u00bc\5 \21\2\u00bc\u00bf\7I\2\2\u00bd\u00be\7.\2\2\u00be") - buf.write("\u00c0\5\24\13\2\u00bf\u00bd\3\2\2\2\u00bf\u00c0\3\2\2") - buf.write("\2\u00c0\u00c1\3\2\2\2\u00c1\u00c2\7\3\2\2\u00c2\u00d8") - buf.write("\3\2\2\2\u00c3\u00c4\7$\2\2\u00c4\u00c5\7I\2\2\u00c5\u00cb") - buf.write("\7\'\2\2\u00c6\u00c7\5\f\7\2\u00c7\u00c8\7\32\2\2\u00c8") - buf.write("\u00ca\3\2\2\2\u00c9\u00c6\3\2\2\2\u00ca\u00cd\3\2\2\2") - buf.write("\u00cb\u00c9\3\2\2\2\u00cb\u00cc\3\2\2\2\u00cc\u00cf\3") - buf.write("\2\2\2\u00cd\u00cb\3\2\2\2\u00ce\u00d0\5\f\7\2\u00cf\u00ce") - buf.write("\3\2\2\2\u00cf\u00d0\3\2\2\2\u00d0\u00d1\3\2\2\2\u00d1") - buf.write("\u00d3\7(\2\2\u00d2\u00d4\5 \21\2\u00d3\u00d2\3\2\2\2") - buf.write("\u00d3\u00d4\3\2\2\2\u00d4\u00d5\3\2\2\2\u00d5\u00d6\7") - buf.write(")\2\2\u00d6\u00d8\5\20\t\2\u00d7\u00bb\3\2\2\2\u00d7\u00c3") - buf.write("\3\2\2\2\u00d8\17\3\2\2\2\u00d9\u00db\7,\2\2\u00da\u00dc") - buf.write("\5\4\3\2\u00db\u00da\3\2\2\2\u00dc\u00dd\3\2\2\2\u00dd") - buf.write("\u00db\3\2\2\2\u00dd\u00de\3\2\2\2\u00de\u00df\3\2\2\2") - buf.write("\u00df\u00e0\7-\2\2\u00e0\21\3\2\2\2\u00e1\u00e2\b\n\1") - buf.write("\2\u00e2\u010f\5\34\17\2\u00e3\u00e4\7\'\2\2\u00e4\u00e5") - buf.write("\5\24\13\2\u00e5\u00e6\7(\2\2\u00e6\u010f\3\2\2\2\u00e7") - buf.write("\u00ed\7/\2\2\u00e8\u00e9\5\22\n\2\u00e9\u00ea\7\32\2") - buf.write("\2\u00ea\u00ec\3\2\2\2\u00eb\u00e8\3\2\2\2\u00ec\u00ef") - buf.write("\3\2\2\2\u00ed\u00eb\3\2\2\2\u00ed\u00ee\3\2\2\2\u00ee") - buf.write("\u00f1\3\2\2\2\u00ef\u00ed\3\2\2\2\u00f0\u00f2\5\22\n") - buf.write("\2\u00f1\u00f0\3\2\2\2\u00f1\u00f2\3\2\2\2\u00f2\u00f3") - buf.write("\3\2\2\2\u00f3\u010f\7\60\2\2\u00f4\u00f5\7/\2\2\u00f5") - buf.write("\u00f7\5\22\n\2\u00f6\u00f8\5\30\r\2\u00f7\u00f6\3\2\2") - buf.write("\2\u00f8\u00f9\3\2\2\2\u00f9\u00f7\3\2\2\2\u00f9\u00fa") - buf.write("\3\2\2\2\u00fa\u00fb\3\2\2\2\u00fb\u00fc\7\60\2\2\u00fc") - buf.write("\u010f\3\2\2\2\u00fd\u00fe\t\4\2\2\u00fe\u010f\5\22\n") - buf.write("\23\u00ff\u0100\7=\2\2\u0100\u010f\5\22\n\b\u0101\u0106") - buf.write("\7@\2\2\u0102\u0103\7I\2\2\u0103\u0105\7\32\2\2\u0104") - buf.write("\u0102\3\2\2\2\u0105\u0108\3\2\2\2\u0106\u0104\3\2\2\2") - buf.write("\u0106\u0107\3\2\2\2\u0107\u010a\3\2\2\2\u0108\u0106\3") - buf.write("\2\2\2\u0109\u010b\7I\2\2\u010a\u0109\3\2\2\2\u010a\u010b") - buf.write("\3\2\2\2\u010b\u010c\3\2\2\2\u010c\u010d\7A\2\2\u010d") - buf.write("\u010f\5\22\n\3\u010e\u00e1\3\2\2\2\u010e\u00e3\3\2\2") - buf.write("\2\u010e\u00e7\3\2\2\2\u010e\u00f4\3\2\2\2\u010e\u00fd") - buf.write("\3\2\2\2\u010e\u00ff\3\2\2\2\u010e\u0101\3\2\2\2\u010f") - buf.write("\u016f\3\2\2\2\u0110\u0111\f\24\2\2\u0111\u0112\7\13\2") - buf.write("\2\u0112\u016e\5\22\n\24\u0113\u0114\f\22\2\2\u0114\u0115") - buf.write("\t\5\2\2\u0115\u016e\5\22\n\23\u0116\u0117\f\21\2\2\u0117") - buf.write("\u0118\t\6\2\2\u0118\u016e\5\22\n\22\u0119\u011a\f\20") - buf.write("\2\2\u011a\u011b\t\7\2\2\u011b\u016e\5\22\n\21\u011c\u011d") - buf.write("\f\17\2\2\u011d\u011e\7\23\2\2\u011e\u016e\5\22\n\20\u011f") - buf.write("\u0120\f\16\2\2\u0120\u0121\7\24\2\2\u0121\u016e\5\22") - buf.write("\n\17\u0122\u0123\f\r\2\2\u0123\u0124\7\25\2\2\u0124\u016e") - buf.write("\5\22\n\16\u0125\u0126\f\f\2\2\u0126\u0127\t\b\2\2\u0127") - buf.write("\u016e\5\22\n\r\u0128\u0129\f\n\2\2\u0129\u012a\t\t\2") - buf.write("\2\u012a\u016e\5\22\n\13\u012b\u012c\f\t\2\2\u012c\u012d") - buf.write("\t\n\2\2\u012d\u016e\5\22\n\t\u012e\u012f\f\7\2\2\u012f") - buf.write("\u0130\7>\2\2\u0130\u016e\5\22\n\7\u0131\u0132\f\6\2\2") - buf.write("\u0132\u0133\7?\2\2\u0133\u016e\5\22\n\6\u0134\u0135\f") - buf.write("\5\2\2\u0135\u0136\7\26\2\2\u0136\u016e\5\22\n\5\u0137") - buf.write("\u0138\f\4\2\2\u0138\u0139\7\61\2\2\u0139\u013a\5\22\n") - buf.write("\2\u013a\u013b\7.\2\2\u013b\u013c\5\22\n\4\u013c\u016e") - buf.write("\3\2\2\2\u013d\u013f\f\31\2\2\u013e\u0140\7\61\2\2\u013f") - buf.write("\u013e\3\2\2\2\u013f\u0140\3\2\2\2\u0140\u0141\3\2\2\2") - buf.write("\u0141\u0142\7/\2\2\u0142\u0143\5\24\13\2\u0143\u0144") - buf.write("\7\60\2\2\u0144\u016e\3\2\2\2\u0145\u0146\f\30\2\2\u0146") - buf.write("\u0148\7/\2\2\u0147\u0149\5\22\n\2\u0148\u0147\3\2\2\2") - buf.write("\u0148\u0149\3\2\2\2\u0149\u014a\3\2\2\2\u014a\u014c\7") - buf.write(".\2\2\u014b\u014d\5\22\n\2\u014c\u014b\3\2\2\2\u014c\u014d") - buf.write("\3\2\2\2\u014d\u0152\3\2\2\2\u014e\u0150\7.\2\2\u014f") - buf.write("\u0151\5\22\n\2\u0150\u014f\3\2\2\2\u0150\u0151\3\2\2") - buf.write("\2\u0151\u0153\3\2\2\2\u0152\u014e\3\2\2\2\u0152\u0153") - buf.write("\3\2\2\2\u0153\u0154\3\2\2\2\u0154\u016e\7\60\2\2\u0155") - buf.write("\u0157\f\27\2\2\u0156\u0158\7\61\2\2\u0157\u0156\3\2\2") - buf.write("\2\u0157\u0158\3\2\2\2\u0158\u0159\3\2\2\2\u0159\u015a") - buf.write("\7\62\2\2\u015a\u016e\7I\2\2\u015b\u015c\f\26\2\2\u015c") - buf.write("\u0162\7\'\2\2\u015d\u015e\5\32\16\2\u015e\u015f\7\32") - buf.write("\2\2\u015f\u0161\3\2\2\2\u0160\u015d\3\2\2\2\u0161\u0164") - buf.write("\3\2\2\2\u0162\u0160\3\2\2\2\u0162\u0163\3\2\2\2\u0163") - buf.write("\u0166\3\2\2\2\u0164\u0162\3\2\2\2\u0165\u0167\5\32\16") - buf.write("\2\u0166\u0165\3\2\2\2\u0166\u0167\3\2\2\2\u0167\u0168") - buf.write("\3\2\2\2\u0168\u016e\7(\2\2\u0169\u016a\f\25\2\2\u016a") - buf.write("\u016e\7\63\2\2\u016b\u016c\f\13\2\2\u016c\u016e\7\66") - buf.write("\2\2\u016d\u0110\3\2\2\2\u016d\u0113\3\2\2\2\u016d\u0116") - buf.write("\3\2\2\2\u016d\u0119\3\2\2\2\u016d\u011c\3\2\2\2\u016d") - buf.write("\u011f\3\2\2\2\u016d\u0122\3\2\2\2\u016d\u0125\3\2\2\2") - buf.write("\u016d\u0128\3\2\2\2\u016d\u012b\3\2\2\2\u016d\u012e\3") - buf.write("\2\2\2\u016d\u0131\3\2\2\2\u016d\u0134\3\2\2\2\u016d\u0137") - buf.write("\3\2\2\2\u016d\u013d\3\2\2\2\u016d\u0145\3\2\2\2\u016d") - buf.write("\u0155\3\2\2\2\u016d\u015b\3\2\2\2\u016d\u0169\3\2\2\2") - buf.write("\u016d\u016b\3\2\2\2\u016e\u0171\3\2\2\2\u016f\u016d\3") - buf.write("\2\2\2\u016f\u0170\3\2\2\2\u0170\23\3\2\2\2\u0171\u016f") - buf.write("\3\2\2\2\u0172\u0173\5\22\n\2\u0173\u0174\7\32\2\2\u0174") - buf.write("\u0176\3\2\2\2\u0175\u0172\3\2\2\2\u0176\u0179\3\2\2\2") - buf.write("\u0177\u0175\3\2\2\2\u0177\u0178\3\2\2\2\u0178\u017a\3") - buf.write("\2\2\2\u0179\u0177\3\2\2\2\u017a\u017b\5\22\n\2\u017b") - buf.write("\25\3\2\2\2\u017c\u017d\5\24\13\2\u017d\u017e\7\2\2\3") - buf.write("\u017e\27\3\2\2\2\u017f\u0180\7!\2\2\u0180\u0181\5\24") - buf.write("\13\2\u0181\u0182\7\"\2\2\u0182\u0185\5\24\13\2\u0183") - buf.write("\u0184\7#\2\2\u0184\u0186\5\24\13\2\u0185\u0183\3\2\2") - buf.write("\2\u0185\u0186\3\2\2\2\u0186\u018a\3\2\2\2\u0187\u0188") - buf.write("\7\33\2\2\u0188\u018a\5\22\n\2\u0189\u017f\3\2\2\2\u0189") - buf.write("\u0187\3\2\2\2\u018a\31\3\2\2\2\u018b\u018c\7I\2\2\u018c") - buf.write("\u018e\7\n\2\2\u018d\u018b\3\2\2\2\u018d\u018e\3\2\2\2") - buf.write("\u018e\u018f\3\2\2\2\u018f\u0190\5\22\n\2\u0190\33\3\2") - buf.write("\2\2\u0191\u0199\7E\2\2\u0192\u0199\7F\2\2\u0193\u0199") - buf.write("\t\13\2\2\u0194\u0199\7G\2\2\u0195\u0199\7H\2\2\u0196") - buf.write("\u0199\7D\2\2\u0197\u0199\7I\2\2\u0198\u0191\3\2\2\2\u0198") - buf.write("\u0192\3\2\2\2\u0198\u0193\3\2\2\2\u0198\u0194\3\2\2\2") - buf.write("\u0198\u0195\3\2\2\2\u0198\u0196\3\2\2\2\u0198\u0197\3") - buf.write("\2\2\2\u0199\35\3\2\2\2\u019a\u019b\7I\2\2\u019b\u019d") - buf.write("\7\32\2\2\u019c\u019a\3\2\2\2\u019d\u01a0\3\2\2\2\u019e") - buf.write("\u019c\3\2\2\2\u019e\u019f\3\2\2\2\u019f\u01a1\3\2\2\2") - buf.write("\u01a0\u019e\3\2\2\2\u01a1\u01a2\7I\2\2\u01a2\37\3\2\2") - buf.write("\2\u01a3\u01a4\b\21\1\2\u01a4\u01b0\7I\2\2\u01a5\u01a6") - buf.write("\7\'\2\2\u01a6\u01a7\5 \21\2\u01a7\u01a8\7(\2\2\u01a8") - buf.write("\u01b0\3\2\2\2\u01a9\u01aa\7/\2\2\u01aa\u01ab\5 \21\2") - buf.write("\u01ab\u01ac\7\60\2\2\u01ac\u01b0\3\2\2\2\u01ad\u01ae") - buf.write("\7A\2\2\u01ae\u01b0\5 \21\3\u01af\u01a3\3\2\2\2\u01af") - buf.write("\u01a5\3\2\2\2\u01af\u01a9\3\2\2\2\u01af\u01ad\3\2\2\2") - buf.write("\u01b0\u01bb\3\2\2\2\u01b1\u01b2\f\5\2\2\u01b2\u01b3\7") - buf.write("\f\2\2\u01b3\u01ba\5 \21\5\u01b4\u01b5\f\4\2\2\u01b5\u01b6") - buf.write("\7A\2\2\u01b6\u01ba\5 \21\4\u01b7\u01b8\f\6\2\2\u01b8") - buf.write("\u01ba\7\61\2\2\u01b9\u01b1\3\2\2\2\u01b9\u01b4\3\2\2") - buf.write("\2\u01b9\u01b7\3\2\2\2\u01ba\u01bd\3\2\2\2\u01bb\u01b9") - buf.write("\3\2\2\2\u01bb\u01bc\3\2\2\2\u01bc!\3\2\2\2\u01bd\u01bb") - buf.write("\3\2\2\2\65%.8=CJVX_ms\u0085\u0090\u0098\u009c\u00a0\u00a6") - buf.write("\u00af\u00b3\u00b9\u00bf\u00cb\u00cf\u00d3\u00d7\u00dd") - buf.write("\u00ed\u00f1\u00f9\u0106\u010a\u010e\u013f\u0148\u014c") - buf.write("\u0150\u0152\u0157\u0162\u0166\u016d\u016f\u0177\u0185") - buf.write("\u0189\u018d\u0198\u019e\u01af\u01b9\u01bb") + buf.write("\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\3\2\7\2") + buf.write("&\n\2\f\2\16\2)\13\2\3\2\3\2\3\3\3\3\3\3\3\3\5\3\61\n") + buf.write("\3\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\5\4;\n\4\3\4\3\4\3") + buf.write("\4\5\4@\n\4\3\4\3\4\3\4\3\4\5\4F\n\4\3\4\3\4\3\4\7\4K") + buf.write("\n\4\f\4\16\4N\13\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3") + buf.write("\4\5\4Y\n\4\5\4[\n\4\3\5\3\5\3\5\7\5`\n\5\f\5\16\5c\13") + buf.write("\5\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\7\6n\n\6\f\6\16") + buf.write("\6q\13\6\3\6\3\6\3\6\5\6v\n\6\3\6\3\6\3\6\3\6\3\6\3\6") + buf.write("\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\5\6\u0088\n\6") + buf.write("\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\5\6\u0093\n\6\3\6") + buf.write("\3\6\5\6\u0097\n\6\3\6\3\6\3\6\3\6\5\6\u009d\n\6\3\6\3") + buf.write("\6\3\6\3\6\3\6\6\6\u00a4\n\6\r\6\16\6\u00a5\3\6\3\6\5") + buf.write("\6\u00aa\n\6\3\7\3\7\3\7\3\7\5\7\u00b0\n\7\3\b\3\b\3\b") + buf.write("\3\b\7\b\u00b6\n\b\f\b\16\b\u00b9\13\b\3\b\5\b\u00bc\n") + buf.write("\b\3\b\3\b\3\t\3\t\3\t\3\t\5\t\u00c4\n\t\3\t\3\t\3\t\3") + buf.write("\t\3\t\3\t\5\t\u00cc\n\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") + buf.write("\t\5\t\u00d6\n\t\3\n\3\n\6\n\u00da\n\n\r\n\16\n\u00db") + buf.write("\3\n\3\n\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") + buf.write("\3\13\7\13\u00ea\n\13\f\13\16\13\u00ed\13\13\3\13\5\13") + buf.write("\u00f0\n\13\3\13\3\13\3\13\3\13\6\13\u00f6\n\13\r\13\16") + buf.write("\13\u00f7\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") + buf.write("\7\13\u0103\n\13\f\13\16\13\u0106\13\13\3\13\5\13\u0109") + buf.write("\n\13\3\13\3\13\5\13\u010d\n\13\3\13\3\13\3\13\3\13\3") + buf.write("\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") + buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") + buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") + buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\5\13") + buf.write("\u013e\n\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\5\13\u0147") + buf.write("\n\13\3\13\3\13\5\13\u014b\n\13\3\13\3\13\5\13\u014f\n") + buf.write("\13\5\13\u0151\n\13\3\13\3\13\3\13\5\13\u0156\n\13\3\13") + buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\7\13\u015f\n\13\f\13\16") + buf.write("\13\u0162\13\13\3\13\5\13\u0165\n\13\3\13\3\13\3\13\3") + buf.write("\13\3\13\7\13\u016c\n\13\f\13\16\13\u016f\13\13\3\f\3") + buf.write("\f\3\f\7\f\u0174\n\f\f\f\16\f\u0177\13\f\3\f\3\f\3\r\3") + buf.write("\r\3\r\3\16\3\16\3\16\3\16\3\16\3\16\5\16\u0184\n\16\3") + buf.write("\16\3\16\5\16\u0188\n\16\3\17\3\17\5\17\u018c\n\17\3\17") + buf.write("\3\17\3\20\3\20\3\20\3\20\3\20\3\20\3\20\5\20\u0197\n") + buf.write("\20\3\21\3\21\7\21\u019b\n\21\f\21\16\21\u019e\13\21\3") + buf.write("\21\3\21\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22") + buf.write("\3\22\3\22\3\22\5\22\u01ae\n\22\3\22\3\22\3\22\3\22\3") + buf.write("\22\3\22\3\22\3\22\7\22\u01b8\n\22\f\22\16\22\u01bb\13") + buf.write("\22\3\22\2\4\24\"\23\2\4\6\b\n\f\16\20\22\24\26\30\32") + buf.write("\34\36 \"\2\f\3\2\13\26\3\2\27\30\4\2\17\20\65\65\3\2") + buf.write("\f\16\3\2\17\20\3\2\21\22\3\2\66\67\3\289\4\2%&:=\3\2") + buf.write("CD\2\u0208\2\'\3\2\2\2\4\60\3\2\2\2\6Z\3\2\2\2\b\\\3\2") + buf.write("\2\2\n\u00a9\3\2\2\2\f\u00ab\3\2\2\2\16\u00b1\3\2\2\2") + buf.write("\20\u00d5\3\2\2\2\22\u00d7\3\2\2\2\24\u010c\3\2\2\2\26") + buf.write("\u0175\3\2\2\2\30\u017a\3\2\2\2\32\u0187\3\2\2\2\34\u018b") + buf.write("\3\2\2\2\36\u0196\3\2\2\2 \u019c\3\2\2\2\"\u01ad\3\2\2") + buf.write("\2$&\5\4\3\2%$\3\2\2\2&)\3\2\2\2\'%\3\2\2\2\'(\3\2\2\2") + buf.write("(*\3\2\2\2)\'\3\2\2\2*+\7\2\2\3+\3\3\2\2\2,-\5\6\4\2-") + buf.write(".\7\3\2\2.\61\3\2\2\2/\61\5\n\6\2\60,\3\2\2\2\60/\3\2") + buf.write("\2\2\61\5\3\2\2\2\62\63\7\4\2\2\63:\7J\2\2\64\65\7\5\2") + buf.write("\2\65;\5 \21\2\66\67\7\6\2\2\67;\5 \21\289\7\7\2\29;\7") + buf.write("J\2\2:\64\3\2\2\2:\66\3\2\2\2:8\3\2\2\2:;\3\2\2\2;[\3") + buf.write("\2\2\2<[\7\b\2\2=?\7\t\2\2>@\5\26\f\2?>\3\2\2\2?@\3\2") + buf.write("\2\2@[\3\2\2\2AB\5\"\22\2BE\7J\2\2CD\7\n\2\2DF\5\26\f") + buf.write("\2EC\3\2\2\2EF\3\2\2\2F[\3\2\2\2GH\5\b\5\2HI\7\n\2\2I") + buf.write("K\3\2\2\2JG\3\2\2\2KN\3\2\2\2LJ\3\2\2\2LM\3\2\2\2MO\3") + buf.write("\2\2\2NL\3\2\2\2O[\5\26\f\2PQ\5\24\13\2QR\t\2\2\2RS\7") + buf.write("\n\2\2ST\5\24\13\2T[\3\2\2\2U[\t\3\2\2VX\7\31\2\2WY\5") + buf.write("\26\f\2XW\3\2\2\2XY\3\2\2\2Y[\3\2\2\2Z\62\3\2\2\2Z<\3") + buf.write("\2\2\2Z=\3\2\2\2ZA\3\2\2\2ZL\3\2\2\2ZP\3\2\2\2ZU\3\2\2") + buf.write("\2ZV\3\2\2\2[\7\3\2\2\2\\a\5\24\13\2]^\7\32\2\2^`\5\24") + buf.write("\13\2_]\3\2\2\2`c\3\2\2\2a_\3\2\2\2ab\3\2\2\2b\t\3\2\2") + buf.write("\2ca\3\2\2\2de\7\33\2\2ef\5\24\13\2fg\7\34\2\2go\5\22") + buf.write("\n\2hi\7\35\2\2ij\5\24\13\2jk\7\34\2\2kl\5\22\n\2ln\3") + buf.write("\2\2\2mh\3\2\2\2nq\3\2\2\2om\3\2\2\2op\3\2\2\2pu\3\2\2") + buf.write("\2qo\3\2\2\2rs\7\36\2\2st\7\34\2\2tv\5\22\n\2ur\3\2\2") + buf.write("\2uv\3\2\2\2v\u00aa\3\2\2\2wx\7\37\2\2xy\5\24\13\2yz\7") + buf.write("\34\2\2z{\5\22\n\2{\u00aa\3\2\2\2|}\7 \2\2}~\5\24\13\2") + buf.write("~\177\7\34\2\2\177\u0080\5\22\n\2\u0080\u00aa\3\2\2\2") + buf.write("\u0081\u0082\7!\2\2\u0082\u0083\5\26\f\2\u0083\u0084\7") + buf.write("\"\2\2\u0084\u0087\5\26\f\2\u0085\u0086\7#\2\2\u0086\u0088") + buf.write("\5\26\f\2\u0087\u0085\3\2\2\2\u0087\u0088\3\2\2\2\u0088") + buf.write("\u0089\3\2\2\2\u0089\u008a\7\34\2\2\u008a\u008b\5\22\n") + buf.write("\2\u008b\u00aa\3\2\2\2\u008c\u008d\7$\2\2\u008d\u0092") + buf.write("\7J\2\2\u008e\u008f\7%\2\2\u008f\u0090\5 \21\2\u0090\u0091") + buf.write("\7&\2\2\u0091\u0093\3\2\2\2\u0092\u008e\3\2\2\2\u0092") + buf.write("\u0093\3\2\2\2\u0093\u0094\3\2\2\2\u0094\u0096\5\16\b") + buf.write("\2\u0095\u0097\5\"\22\2\u0096\u0095\3\2\2\2\u0096\u0097") + buf.write("\3\2\2\2\u0097\u009c\3\2\2\2\u0098\u0099\7\'\2\2\u0099") + buf.write("\u009d\5\22\n\2\u009a\u009b\7(\2\2\u009b\u009d\7\3\2\2") + buf.write("\u009c\u0098\3\2\2\2\u009c\u009a\3\2\2\2\u009d\u00aa\3") + buf.write("\2\2\2\u009e\u009f\7)\2\2\u009f\u00a0\7J\2\2\u00a0\u00a1") + buf.write("\7\'\2\2\u00a1\u00a3\7*\2\2\u00a2\u00a4\5\20\t\2\u00a3") + buf.write("\u00a2\3\2\2\2\u00a4\u00a5\3\2\2\2\u00a5\u00a3\3\2\2\2") + buf.write("\u00a5\u00a6\3\2\2\2\u00a6\u00a7\3\2\2\2\u00a7\u00a8\7") + buf.write("+\2\2\u00a8\u00aa\3\2\2\2\u00a9d\3\2\2\2\u00a9w\3\2\2") + buf.write("\2\u00a9|\3\2\2\2\u00a9\u0081\3\2\2\2\u00a9\u008c\3\2") + buf.write("\2\2\u00a9\u009e\3\2\2\2\u00aa\13\3\2\2\2\u00ab\u00ac") + buf.write("\5\"\22\2\u00ac\u00af\7J\2\2\u00ad\u00ae\7,\2\2\u00ae") + buf.write("\u00b0\5\24\13\2\u00af\u00ad\3\2\2\2\u00af\u00b0\3\2\2") + buf.write("\2\u00b0\r\3\2\2\2\u00b1\u00b7\7-\2\2\u00b2\u00b3\5\f") + buf.write("\7\2\u00b3\u00b4\7\32\2\2\u00b4\u00b6\3\2\2\2\u00b5\u00b2") + buf.write("\3\2\2\2\u00b6\u00b9\3\2\2\2\u00b7\u00b5\3\2\2\2\u00b7") + buf.write("\u00b8\3\2\2\2\u00b8\u00bb\3\2\2\2\u00b9\u00b7\3\2\2\2") + buf.write("\u00ba\u00bc\5\f\7\2\u00bb\u00ba\3\2\2\2\u00bb\u00bc\3") + buf.write("\2\2\2\u00bc\u00bd\3\2\2\2\u00bd\u00be\7.\2\2\u00be\17") + buf.write("\3\2\2\2\u00bf\u00c0\5\"\22\2\u00c0\u00c3\7J\2\2\u00c1") + buf.write("\u00c2\7,\2\2\u00c2\u00c4\5\26\f\2\u00c3\u00c1\3\2\2\2") + buf.write("\u00c3\u00c4\3\2\2\2\u00c4\u00c5\3\2\2\2\u00c5\u00c6\7") + buf.write("\3\2\2\u00c6\u00d6\3\2\2\2\u00c7\u00c8\7$\2\2\u00c8\u00c9") + buf.write("\7J\2\2\u00c9\u00cb\5\16\b\2\u00ca\u00cc\5\"\22\2\u00cb") + buf.write("\u00ca\3\2\2\2\u00cb\u00cc\3\2\2\2\u00cc\u00cd\3\2\2\2") + buf.write("\u00cd\u00ce\7\'\2\2\u00ce\u00cf\5\22\n\2\u00cf\u00d6") + buf.write("\3\2\2\2\u00d0\u00d1\7/\2\2\u00d1\u00d2\5\16\b\2\u00d2") + buf.write("\u00d3\7\'\2\2\u00d3\u00d4\5\22\n\2\u00d4\u00d6\3\2\2") + buf.write("\2\u00d5\u00bf\3\2\2\2\u00d5\u00c7\3\2\2\2\u00d5\u00d0") + buf.write("\3\2\2\2\u00d6\21\3\2\2\2\u00d7\u00d9\7*\2\2\u00d8\u00da") + buf.write("\5\4\3\2\u00d9\u00d8\3\2\2\2\u00da\u00db\3\2\2\2\u00db") + buf.write("\u00d9\3\2\2\2\u00db\u00dc\3\2\2\2\u00dc\u00dd\3\2\2\2") + buf.write("\u00dd\u00de\7+\2\2\u00de\23\3\2\2\2\u00df\u00e0\b\13") + buf.write("\1\2\u00e0\u010d\5\36\20\2\u00e1\u00e2\7-\2\2\u00e2\u00e3") + buf.write("\5\26\f\2\u00e3\u00e4\7.\2\2\u00e4\u010d\3\2\2\2\u00e5") + buf.write("\u00eb\7\60\2\2\u00e6\u00e7\5\24\13\2\u00e7\u00e8\7\32") + buf.write("\2\2\u00e8\u00ea\3\2\2\2\u00e9\u00e6\3\2\2\2\u00ea\u00ed") + buf.write("\3\2\2\2\u00eb\u00e9\3\2\2\2\u00eb\u00ec\3\2\2\2\u00ec") + buf.write("\u00ef\3\2\2\2\u00ed\u00eb\3\2\2\2\u00ee\u00f0\5\24\13") + buf.write("\2\u00ef\u00ee\3\2\2\2\u00ef\u00f0\3\2\2\2\u00f0\u00f1") + buf.write("\3\2\2\2\u00f1\u010d\7\61\2\2\u00f2\u00f3\7\60\2\2\u00f3") + buf.write("\u00f5\5\24\13\2\u00f4\u00f6\5\32\16\2\u00f5\u00f4\3\2") + buf.write("\2\2\u00f6\u00f7\3\2\2\2\u00f7\u00f5\3\2\2\2\u00f7\u00f8") + buf.write("\3\2\2\2\u00f8\u00f9\3\2\2\2\u00f9\u00fa\7\61\2\2\u00fa") + buf.write("\u010d\3\2\2\2\u00fb\u00fc\t\4\2\2\u00fc\u010d\5\24\13") + buf.write("\23\u00fd\u00fe\7>\2\2\u00fe\u010d\5\24\13\b\u00ff\u0104") + buf.write("\7A\2\2\u0100\u0101\7J\2\2\u0101\u0103\7\32\2\2\u0102") + buf.write("\u0100\3\2\2\2\u0103\u0106\3\2\2\2\u0104\u0102\3\2\2\2") + buf.write("\u0104\u0105\3\2\2\2\u0105\u0108\3\2\2\2\u0106\u0104\3") + buf.write("\2\2\2\u0107\u0109\7J\2\2\u0108\u0107\3\2\2\2\u0108\u0109") + buf.write("\3\2\2\2\u0109\u010a\3\2\2\2\u010a\u010b\7B\2\2\u010b") + buf.write("\u010d\5\24\13\3\u010c\u00df\3\2\2\2\u010c\u00e1\3\2\2") + buf.write("\2\u010c\u00e5\3\2\2\2\u010c\u00f2\3\2\2\2\u010c\u00fb") + buf.write("\3\2\2\2\u010c\u00fd\3\2\2\2\u010c\u00ff\3\2\2\2\u010d") + buf.write("\u016d\3\2\2\2\u010e\u010f\f\24\2\2\u010f\u0110\7\13\2") + buf.write("\2\u0110\u016c\5\24\13\24\u0111\u0112\f\22\2\2\u0112\u0113") + buf.write("\t\5\2\2\u0113\u016c\5\24\13\23\u0114\u0115\f\21\2\2\u0115") + buf.write("\u0116\t\6\2\2\u0116\u016c\5\24\13\22\u0117\u0118\f\20") + buf.write("\2\2\u0118\u0119\t\7\2\2\u0119\u016c\5\24\13\21\u011a") + buf.write("\u011b\f\17\2\2\u011b\u011c\7\23\2\2\u011c\u016c\5\24") + buf.write("\13\20\u011d\u011e\f\16\2\2\u011e\u011f\7\24\2\2\u011f") + buf.write("\u016c\5\24\13\17\u0120\u0121\f\r\2\2\u0121\u0122\7\25") + buf.write("\2\2\u0122\u016c\5\24\13\16\u0123\u0124\f\f\2\2\u0124") + buf.write("\u0125\t\b\2\2\u0125\u016c\5\24\13\r\u0126\u0127\f\n\2") + buf.write("\2\u0127\u0128\t\t\2\2\u0128\u016c\5\24\13\13\u0129\u012a") + buf.write("\f\t\2\2\u012a\u012b\t\n\2\2\u012b\u016c\5\24\13\t\u012c") + buf.write("\u012d\f\7\2\2\u012d\u012e\7?\2\2\u012e\u016c\5\24\13") + buf.write("\7\u012f\u0130\f\6\2\2\u0130\u0131\7@\2\2\u0131\u016c") + buf.write("\5\24\13\6\u0132\u0133\f\5\2\2\u0133\u0134\7\26\2\2\u0134") + buf.write("\u016c\5\24\13\5\u0135\u0136\f\4\2\2\u0136\u0137\7\62") + buf.write("\2\2\u0137\u0138\5\24\13\2\u0138\u0139\7,\2\2\u0139\u013a") + buf.write("\5\24\13\4\u013a\u016c\3\2\2\2\u013b\u013d\f\31\2\2\u013c") + buf.write("\u013e\7\62\2\2\u013d\u013c\3\2\2\2\u013d\u013e\3\2\2") + buf.write("\2\u013e\u013f\3\2\2\2\u013f\u0140\7\60\2\2\u0140\u0141") + buf.write("\5\26\f\2\u0141\u0142\7\61\2\2\u0142\u016c\3\2\2\2\u0143") + buf.write("\u0144\f\30\2\2\u0144\u0146\7\60\2\2\u0145\u0147\5\24") + buf.write("\13\2\u0146\u0145\3\2\2\2\u0146\u0147\3\2\2\2\u0147\u0148") + buf.write("\3\2\2\2\u0148\u014a\7,\2\2\u0149\u014b\5\24\13\2\u014a") + buf.write("\u0149\3\2\2\2\u014a\u014b\3\2\2\2\u014b\u0150\3\2\2\2") + buf.write("\u014c\u014e\7,\2\2\u014d\u014f\5\24\13\2\u014e\u014d") + buf.write("\3\2\2\2\u014e\u014f\3\2\2\2\u014f\u0151\3\2\2\2\u0150") + buf.write("\u014c\3\2\2\2\u0150\u0151\3\2\2\2\u0151\u0152\3\2\2\2") + buf.write("\u0152\u016c\7\61\2\2\u0153\u0155\f\27\2\2\u0154\u0156") + buf.write("\7\62\2\2\u0155\u0154\3\2\2\2\u0155\u0156\3\2\2\2\u0156") + buf.write("\u0157\3\2\2\2\u0157\u0158\7\63\2\2\u0158\u016c\7J\2\2") + buf.write("\u0159\u015a\f\26\2\2\u015a\u0160\7-\2\2\u015b\u015c\5") + buf.write("\34\17\2\u015c\u015d\7\32\2\2\u015d\u015f\3\2\2\2\u015e") + buf.write("\u015b\3\2\2\2\u015f\u0162\3\2\2\2\u0160\u015e\3\2\2\2") + buf.write("\u0160\u0161\3\2\2\2\u0161\u0164\3\2\2\2\u0162\u0160\3") + buf.write("\2\2\2\u0163\u0165\5\34\17\2\u0164\u0163\3\2\2\2\u0164") + buf.write("\u0165\3\2\2\2\u0165\u0166\3\2\2\2\u0166\u016c\7.\2\2") + buf.write("\u0167\u0168\f\25\2\2\u0168\u016c\7\64\2\2\u0169\u016a") + buf.write("\f\13\2\2\u016a\u016c\7\67\2\2\u016b\u010e\3\2\2\2\u016b") + buf.write("\u0111\3\2\2\2\u016b\u0114\3\2\2\2\u016b\u0117\3\2\2\2") + buf.write("\u016b\u011a\3\2\2\2\u016b\u011d\3\2\2\2\u016b\u0120\3") + buf.write("\2\2\2\u016b\u0123\3\2\2\2\u016b\u0126\3\2\2\2\u016b\u0129") + buf.write("\3\2\2\2\u016b\u012c\3\2\2\2\u016b\u012f\3\2\2\2\u016b") + buf.write("\u0132\3\2\2\2\u016b\u0135\3\2\2\2\u016b\u013b\3\2\2\2") + buf.write("\u016b\u0143\3\2\2\2\u016b\u0153\3\2\2\2\u016b\u0159\3") + buf.write("\2\2\2\u016b\u0167\3\2\2\2\u016b\u0169\3\2\2\2\u016c\u016f") + buf.write("\3\2\2\2\u016d\u016b\3\2\2\2\u016d\u016e\3\2\2\2\u016e") + buf.write("\25\3\2\2\2\u016f\u016d\3\2\2\2\u0170\u0171\5\24\13\2") + buf.write("\u0171\u0172\7\32\2\2\u0172\u0174\3\2\2\2\u0173\u0170") + buf.write("\3\2\2\2\u0174\u0177\3\2\2\2\u0175\u0173\3\2\2\2\u0175") + buf.write("\u0176\3\2\2\2\u0176\u0178\3\2\2\2\u0177\u0175\3\2\2\2") + buf.write("\u0178\u0179\5\24\13\2\u0179\27\3\2\2\2\u017a\u017b\5") + buf.write("\26\f\2\u017b\u017c\7\2\2\3\u017c\31\3\2\2\2\u017d\u017e") + buf.write("\7!\2\2\u017e\u017f\5\26\f\2\u017f\u0180\7\"\2\2\u0180") + buf.write("\u0183\5\26\f\2\u0181\u0182\7#\2\2\u0182\u0184\5\26\f") + buf.write("\2\u0183\u0181\3\2\2\2\u0183\u0184\3\2\2\2\u0184\u0188") + buf.write("\3\2\2\2\u0185\u0186\7\33\2\2\u0186\u0188\5\24\13\2\u0187") + buf.write("\u017d\3\2\2\2\u0187\u0185\3\2\2\2\u0188\33\3\2\2\2\u0189") + buf.write("\u018a\7J\2\2\u018a\u018c\7\n\2\2\u018b\u0189\3\2\2\2") + buf.write("\u018b\u018c\3\2\2\2\u018c\u018d\3\2\2\2\u018d\u018e\5") + buf.write("\24\13\2\u018e\35\3\2\2\2\u018f\u0197\7F\2\2\u0190\u0197") + buf.write("\7G\2\2\u0191\u0197\t\13\2\2\u0192\u0197\7H\2\2\u0193") + buf.write("\u0197\7I\2\2\u0194\u0197\7E\2\2\u0195\u0197\7J\2\2\u0196") + buf.write("\u018f\3\2\2\2\u0196\u0190\3\2\2\2\u0196\u0191\3\2\2\2") + buf.write("\u0196\u0192\3\2\2\2\u0196\u0193\3\2\2\2\u0196\u0194\3") + buf.write("\2\2\2\u0196\u0195\3\2\2\2\u0197\37\3\2\2\2\u0198\u0199") + buf.write("\7J\2\2\u0199\u019b\7\32\2\2\u019a\u0198\3\2\2\2\u019b") + buf.write("\u019e\3\2\2\2\u019c\u019a\3\2\2\2\u019c\u019d\3\2\2\2") + buf.write("\u019d\u019f\3\2\2\2\u019e\u019c\3\2\2\2\u019f\u01a0\7") + buf.write("J\2\2\u01a0!\3\2\2\2\u01a1\u01a2\b\22\1\2\u01a2\u01ae") + buf.write("\7J\2\2\u01a3\u01a4\7-\2\2\u01a4\u01a5\5\"\22\2\u01a5") + buf.write("\u01a6\7.\2\2\u01a6\u01ae\3\2\2\2\u01a7\u01a8\7\60\2\2") + buf.write("\u01a8\u01a9\5\"\22\2\u01a9\u01aa\7\61\2\2\u01aa\u01ae") + buf.write("\3\2\2\2\u01ab\u01ac\7B\2\2\u01ac\u01ae\5\"\22\3\u01ad") + buf.write("\u01a1\3\2\2\2\u01ad\u01a3\3\2\2\2\u01ad\u01a7\3\2\2\2") + buf.write("\u01ad\u01ab\3\2\2\2\u01ae\u01b9\3\2\2\2\u01af\u01b0\f") + buf.write("\5\2\2\u01b0\u01b1\7\f\2\2\u01b1\u01b8\5\"\22\5\u01b2") + buf.write("\u01b3\f\4\2\2\u01b3\u01b4\7B\2\2\u01b4\u01b8\5\"\22\4") + buf.write("\u01b5\u01b6\f\6\2\2\u01b6\u01b8\7\62\2\2\u01b7\u01af") + buf.write("\3\2\2\2\u01b7\u01b2\3\2\2\2\u01b7\u01b5\3\2\2\2\u01b8") + buf.write("\u01bb\3\2\2\2\u01b9\u01b7\3\2\2\2\u01b9\u01ba\3\2\2\2") + buf.write("\u01ba#\3\2\2\2\u01bb\u01b9\3\2\2\2\63\'\60:?ELXZaou\u0087") + buf.write("\u0092\u0096\u009c\u00a5\u00a9\u00af\u00b7\u00bb\u00c3") + buf.write("\u00cb\u00d5\u00db\u00eb\u00ef\u00f7\u0104\u0108\u010c") + buf.write("\u013d\u0146\u014a\u014e\u0150\u0155\u0160\u0164\u016b") + buf.write("\u016d\u0175\u0183\u0187\u018b\u0196\u019c\u01ad\u01b7") + buf.write("\u01b9") return buf.getvalue() @@ -248,11 +251,12 @@ class PyxellParser ( Parser ): "'|'", "'??'", "'break'", "'continue'", "'return'", "','", "'if'", "'do'", "'elif'", "'else'", "'while'", "'until'", "'for'", "'in'", "'step'", "'func'", "'<'", - "'>'", "'('", "')'", "'def'", "'extern'", "'class'", - "'{'", "'}'", "':'", "'['", "']'", "'?'", "'.'", "'!'", - "'~'", "'..'", "'...'", "'is'", "'isn't'", "'=='", - "'!='", "'<='", "'>='", "'not'", "'and'", "'or'", "'lambda'", - "'->'", "'true'", "'false'", "'null'" ] + "'>'", "'def'", "'extern'", "'class'", "'{'", "'}'", + "':'", "'('", "')'", "'constructor'", "'['", "']'", + "'?'", "'.'", "'!'", "'~'", "'..'", "'...'", "'is'", + "'isn't'", "'=='", "'!='", "'<='", "'>='", "'not'", + "'and'", "'or'", "'lambda'", "'->'", "'true'", "'false'", + "'null'" ] symbolicNames = [ "", "", "", "", "", "", "", "", @@ -270,8 +274,9 @@ class PyxellParser ( Parser ): "", "", "", "", "", "", "", "", "", "", "", "", - "", "", "", "INT", "FLOAT", - "CHAR", "STRING", "ID", "COMMENT", "WS", "ERR" ] + "", "", "", "", + "INT", "FLOAT", "CHAR", "STRING", "ID", "COMMENT", + "WS", "ERR" ] RULE_program = 0 RULE_stmt = 1 @@ -279,21 +284,22 @@ class PyxellParser ( Parser ): RULE_lvalue = 3 RULE_compound_stmt = 4 RULE_func_arg = 5 - RULE_class_member = 6 - RULE_block = 7 - RULE_expr = 8 - RULE_tuple_expr = 9 - RULE_interpolation_expr = 10 - RULE_comprehension = 11 - RULE_call_arg = 12 - RULE_atom = 13 - RULE_id_list = 14 - RULE_typ = 15 + RULE_func_args = 6 + RULE_class_member = 7 + RULE_block = 8 + RULE_expr = 9 + RULE_tuple_expr = 10 + RULE_interpolation_expr = 11 + RULE_comprehension = 12 + RULE_call_arg = 13 + RULE_atom = 14 + RULE_id_list = 15 + RULE_typ = 16 ruleNames = [ "program", "stmt", "simple_stmt", "lvalue", "compound_stmt", - "func_arg", "class_member", "block", "expr", "tuple_expr", - "interpolation_expr", "comprehension", "call_arg", "atom", - "id_list", "typ" ] + "func_arg", "func_args", "class_member", "block", "expr", + "tuple_expr", "interpolation_expr", "comprehension", + "call_arg", "atom", "id_list", "typ" ] EOF = Token.EOF T__0=1 @@ -362,14 +368,15 @@ class PyxellParser ( Parser ): T__63=64 T__64=65 T__65=66 - INT=67 - FLOAT=68 - CHAR=69 - STRING=70 - ID=71 - COMMENT=72 - WS=73 - ERR=74 + T__66=67 + INT=68 + FLOAT=69 + CHAR=70 + STRING=71 + ID=72 + COMMENT=73 + WS=74 + ERR=75 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -415,17 +422,17 @@ def program(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 35 + self.state = 37 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__40) | (1 << PyxellParser.T__44) | (1 << PyxellParser.T__49) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0): - self.state = 32 + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__38) | (1 << PyxellParser.T__42) | (1 << PyxellParser.T__45) | (1 << PyxellParser.T__50) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.T__66 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0): + self.state = 34 self.stmt() - self.state = 37 + self.state = 39 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 38 + self.state = 40 self.match(PyxellParser.EOF) except RecognitionException as re: localctx.exception = re @@ -467,19 +474,19 @@ def stmt(self): localctx = PyxellParser.StmtContext(self, self._ctx, self.state) self.enterRule(localctx, 2, self.RULE_stmt) try: - self.state = 44 + self.state = 46 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__1, PyxellParser.T__5, PyxellParser.T__6, PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__20, PyxellParser.T__21, PyxellParser.T__22, PyxellParser.T__36, PyxellParser.T__44, PyxellParser.T__49, PyxellParser.T__58, PyxellParser.T__61, PyxellParser.T__62, PyxellParser.T__63, PyxellParser.T__64, PyxellParser.T__65, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: + if token in [PyxellParser.T__1, PyxellParser.T__5, PyxellParser.T__6, PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__20, PyxellParser.T__21, PyxellParser.T__22, PyxellParser.T__42, PyxellParser.T__45, PyxellParser.T__50, PyxellParser.T__59, PyxellParser.T__62, PyxellParser.T__63, PyxellParser.T__64, PyxellParser.T__65, PyxellParser.T__66, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: self.enterOuterAlt(localctx, 1) - self.state = 40 + self.state = 42 self.simple_stmt() - self.state = 41 + self.state = 43 self.match(PyxellParser.T__0) pass - elif token in [PyxellParser.T__24, PyxellParser.T__28, PyxellParser.T__29, PyxellParser.T__30, PyxellParser.T__33, PyxellParser.T__40]: + elif token in [PyxellParser.T__24, PyxellParser.T__28, PyxellParser.T__29, PyxellParser.T__30, PyxellParser.T__33, PyxellParser.T__38]: self.enterOuterAlt(localctx, 2) - self.state = 43 + self.state = 45 self.compound_stmt() pass else: @@ -672,35 +679,35 @@ def simple_stmt(self): self.enterRule(localctx, 4, self.RULE_simple_stmt) self._la = 0 # Token type try: - self.state = 86 + self.state = 88 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,7,self._ctx) if la_ == 1: localctx = PyxellParser.StmtUseContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 46 + self.state = 48 self.match(PyxellParser.T__1) - self.state = 47 + self.state = 49 localctx.name = self.match(PyxellParser.ID) - self.state = 54 + self.state = 56 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__2]: - self.state = 48 + self.state = 50 self.match(PyxellParser.T__2) - self.state = 49 + self.state = 51 localctx.only = self.id_list() pass elif token in [PyxellParser.T__3]: - self.state = 50 + self.state = 52 self.match(PyxellParser.T__3) - self.state = 51 + self.state = 53 localctx.hiding = self.id_list() pass elif token in [PyxellParser.T__4]: - self.state = 52 + self.state = 54 self.match(PyxellParser.T__4) - self.state = 53 + self.state = 55 localctx.as_ = self.match(PyxellParser.ID) pass elif token in [PyxellParser.T__0]: @@ -712,20 +719,20 @@ def simple_stmt(self): elif la_ == 2: localctx = PyxellParser.StmtSkipContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 56 + self.state = 58 self.match(PyxellParser.T__5) pass elif la_ == 3: localctx = PyxellParser.StmtPrintContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 57 - self.match(PyxellParser.T__6) self.state = 59 + self.match(PyxellParser.T__6) + self.state = 61 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__36 - 13)) | (1 << (PyxellParser.T__44 - 13)) | (1 << (PyxellParser.T__49 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 58 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__42 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 60 self.tuple_expr() @@ -734,17 +741,17 @@ def simple_stmt(self): elif la_ == 4: localctx = PyxellParser.StmtDeclContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 61 + self.state = 63 self.typ(0) - self.state = 62 + self.state = 64 self.match(PyxellParser.ID) - self.state = 65 + self.state = 67 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__7: - self.state = 63 + self.state = 65 self.match(PyxellParser.T__7) - self.state = 64 + self.state = 66 self.tuple_expr() @@ -753,29 +760,29 @@ def simple_stmt(self): elif la_ == 5: localctx = PyxellParser.StmtAssgContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 72 + self.state = 74 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,5,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 67 + self.state = 69 self.lvalue() - self.state = 68 + self.state = 70 self.match(PyxellParser.T__7) - self.state = 74 + self.state = 76 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,5,self._ctx) - self.state = 75 + self.state = 77 self.tuple_expr() pass elif la_ == 6: localctx = PyxellParser.StmtAssgExprContext(self, localctx) self.enterOuterAlt(localctx, 6) - self.state = 76 + self.state = 78 self.expr(0) - self.state = 77 + self.state = 79 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__8) | (1 << PyxellParser.T__9) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__11) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__14) | (1 << PyxellParser.T__15) | (1 << PyxellParser.T__16) | (1 << PyxellParser.T__17) | (1 << PyxellParser.T__18) | (1 << PyxellParser.T__19))) != 0)): @@ -783,16 +790,16 @@ def simple_stmt(self): else: self._errHandler.reportMatch(self) self.consume() - self.state = 78 + self.state = 80 self.match(PyxellParser.T__7) - self.state = 79 + self.state = 81 self.expr(0) pass elif la_ == 7: localctx = PyxellParser.StmtLoopControlContext(self, localctx) self.enterOuterAlt(localctx, 7) - self.state = 81 + self.state = 83 localctx.s = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__20 or _la==PyxellParser.T__21): @@ -805,13 +812,13 @@ def simple_stmt(self): elif la_ == 8: localctx = PyxellParser.StmtReturnContext(self, localctx) self.enterOuterAlt(localctx, 8) - self.state = 82 - self.match(PyxellParser.T__22) self.state = 84 + self.match(PyxellParser.T__22) + self.state = 86 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__36 - 13)) | (1 << (PyxellParser.T__44 - 13)) | (1 << (PyxellParser.T__49 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 83 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__42 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 85 self.tuple_expr() @@ -859,17 +866,17 @@ def lvalue(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 88 + self.state = 90 self.expr(0) - self.state = 93 + self.state = 95 self._errHandler.sync(self) _la = self._input.LA(1) while _la==PyxellParser.T__23: - self.state = 89 + self.state = 91 self.match(PyxellParser.T__23) - self.state = 90 + self.state = 92 self.expr(0) - self.state = 95 + self.state = 97 self._errHandler.sync(self) _la = self._input.LA(1) @@ -903,20 +910,18 @@ class StmtFuncContext(Compound_stmtContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Compound_stmtContext super().__init__(parser) self.typevars = None # Id_listContext + self.args = None # Func_argsContext self.ret = None # TypContext self.copyFrom(ctx) def ID(self): return self.getToken(PyxellParser.ID, 0) + def func_args(self): + return self.getTypedRuleContext(PyxellParser.Func_argsContext,0) + def block(self): return self.getTypedRuleContext(PyxellParser.BlockContext,0) - def func_arg(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(PyxellParser.Func_argContext) - else: - return self.getTypedRuleContext(PyxellParser.Func_argContext,i) - def id_list(self): return self.getTypedRuleContext(PyxellParser.Id_listContext,0) @@ -1049,45 +1054,45 @@ def compound_stmt(self): self.enterRule(localctx, 8, self.RULE_compound_stmt) self._la = 0 # Token type try: - self.state = 177 + self.state = 167 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__24]: localctx = PyxellParser.StmtIfContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 96 + self.state = 98 self.match(PyxellParser.T__24) - self.state = 97 + self.state = 99 self.expr(0) - self.state = 98 + self.state = 100 self.match(PyxellParser.T__25) - self.state = 99 + self.state = 101 self.block() - self.state = 107 + self.state = 109 self._errHandler.sync(self) _la = self._input.LA(1) while _la==PyxellParser.T__26: - self.state = 100 + self.state = 102 self.match(PyxellParser.T__26) - self.state = 101 + self.state = 103 self.expr(0) - self.state = 102 + self.state = 104 self.match(PyxellParser.T__25) - self.state = 103 + self.state = 105 self.block() - self.state = 109 + self.state = 111 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 113 + self.state = 115 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__27: - self.state = 110 + self.state = 112 self.match(PyxellParser.T__27) - self.state = 111 + self.state = 113 self.match(PyxellParser.T__25) - self.state = 112 + self.state = 114 self.block() @@ -1095,149 +1100,126 @@ def compound_stmt(self): elif token in [PyxellParser.T__28]: localctx = PyxellParser.StmtWhileContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 115 + self.state = 117 self.match(PyxellParser.T__28) - self.state = 116 + self.state = 118 self.expr(0) - self.state = 117 + self.state = 119 self.match(PyxellParser.T__25) - self.state = 118 + self.state = 120 self.block() pass elif token in [PyxellParser.T__29]: localctx = PyxellParser.StmtUntilContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 120 + self.state = 122 self.match(PyxellParser.T__29) - self.state = 121 + self.state = 123 self.expr(0) - self.state = 122 + self.state = 124 self.match(PyxellParser.T__25) - self.state = 123 + self.state = 125 self.block() pass elif token in [PyxellParser.T__30]: localctx = PyxellParser.StmtForContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 125 + self.state = 127 self.match(PyxellParser.T__30) - self.state = 126 + self.state = 128 self.tuple_expr() - self.state = 127 + self.state = 129 self.match(PyxellParser.T__31) - self.state = 128 + self.state = 130 self.tuple_expr() - self.state = 131 + self.state = 133 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__32: - self.state = 129 + self.state = 131 self.match(PyxellParser.T__32) - self.state = 130 + self.state = 132 self.tuple_expr() - self.state = 133 + self.state = 135 self.match(PyxellParser.T__25) - self.state = 134 + self.state = 136 self.block() pass elif token in [PyxellParser.T__33]: localctx = PyxellParser.StmtFuncContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 136 + self.state = 138 self.match(PyxellParser.T__33) - self.state = 137 + self.state = 139 self.match(PyxellParser.ID) - self.state = 142 + self.state = 144 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__34: - self.state = 138 + self.state = 140 self.match(PyxellParser.T__34) - self.state = 139 + self.state = 141 localctx.typevars = self.id_list() - self.state = 140 + self.state = 142 self.match(PyxellParser.T__35) - self.state = 144 - self.match(PyxellParser.T__36) - self.state = 150 - self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,13,self._ctx) - while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: - if _alt==1: - self.state = 145 - self.func_arg() - self.state = 146 - self.match(PyxellParser.T__23) - self.state = 152 - self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,13,self._ctx) - - self.state = 154 - self._errHandler.sync(self) - _la = self._input.LA(1) - if ((((_la - 37)) & ~0x3f) == 0 and ((1 << (_la - 37)) & ((1 << (PyxellParser.T__36 - 37)) | (1 << (PyxellParser.T__44 - 37)) | (1 << (PyxellParser.T__62 - 37)) | (1 << (PyxellParser.ID - 37)))) != 0): - self.state = 153 - self.func_arg() - - - self.state = 156 - self.match(PyxellParser.T__37) - self.state = 158 + self.state = 146 + localctx.args = self.func_args() + self.state = 148 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 37)) & ~0x3f) == 0 and ((1 << (_la - 37)) & ((1 << (PyxellParser.T__36 - 37)) | (1 << (PyxellParser.T__44 - 37)) | (1 << (PyxellParser.T__62 - 37)) | (1 << (PyxellParser.ID - 37)))) != 0): - self.state = 157 + if ((((_la - 43)) & ~0x3f) == 0 and ((1 << (_la - 43)) & ((1 << (PyxellParser.T__42 - 43)) | (1 << (PyxellParser.T__45 - 43)) | (1 << (PyxellParser.T__63 - 43)) | (1 << (PyxellParser.ID - 43)))) != 0): + self.state = 147 localctx.ret = self.typ(0) - self.state = 164 + self.state = 154 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__38]: - self.state = 160 - self.match(PyxellParser.T__38) - self.state = 161 + if token in [PyxellParser.T__36]: + self.state = 150 + self.match(PyxellParser.T__36) + self.state = 151 self.block() pass - elif token in [PyxellParser.T__39]: - self.state = 162 - self.match(PyxellParser.T__39) - self.state = 163 + elif token in [PyxellParser.T__37]: + self.state = 152 + self.match(PyxellParser.T__37) + self.state = 153 self.match(PyxellParser.T__0) pass else: raise NoViableAltException(self) pass - elif token in [PyxellParser.T__40]: + elif token in [PyxellParser.T__38]: localctx = PyxellParser.StmtClassContext(self, localctx) self.enterOuterAlt(localctx, 6) - self.state = 166 - self.match(PyxellParser.T__40) - self.state = 167 - self.match(PyxellParser.ID) - self.state = 168 + self.state = 156 self.match(PyxellParser.T__38) - self.state = 169 - self.match(PyxellParser.T__41) - self.state = 171 + self.state = 157 + self.match(PyxellParser.ID) + self.state = 158 + self.match(PyxellParser.T__36) + self.state = 159 + self.match(PyxellParser.T__39) + self.state = 161 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 170 + self.state = 160 self.class_member() - self.state = 173 + self.state = 163 self._errHandler.sync(self) _la = self._input.LA(1) - if not (((((_la - 34)) & ~0x3f) == 0 and ((1 << (_la - 34)) & ((1 << (PyxellParser.T__33 - 34)) | (1 << (PyxellParser.T__36 - 34)) | (1 << (PyxellParser.T__44 - 34)) | (1 << (PyxellParser.T__62 - 34)) | (1 << (PyxellParser.ID - 34)))) != 0)): + if not (((((_la - 34)) & ~0x3f) == 0 and ((1 << (_la - 34)) & ((1 << (PyxellParser.T__33 - 34)) | (1 << (PyxellParser.T__42 - 34)) | (1 << (PyxellParser.T__44 - 34)) | (1 << (PyxellParser.T__45 - 34)) | (1 << (PyxellParser.T__63 - 34)) | (1 << (PyxellParser.ID - 34)))) != 0)): break - self.state = 175 - self.match(PyxellParser.T__42) + self.state = 165 + self.match(PyxellParser.T__40) pass else: raise NoViableAltException(self) @@ -1298,17 +1280,17 @@ def func_arg(self): try: localctx = PyxellParser.FuncArgContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 179 + self.state = 169 self.typ(0) - self.state = 180 + self.state = 170 self.match(PyxellParser.ID) - self.state = 183 + self.state = 173 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__43: - self.state = 181 - self.match(PyxellParser.T__43) - self.state = 182 + if _la==PyxellParser.T__41: + self.state = 171 + self.match(PyxellParser.T__41) + self.state = 172 self.expr(0) @@ -1321,6 +1303,72 @@ def func_arg(self): return localctx + class Func_argsContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def func_arg(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(PyxellParser.Func_argContext) + else: + return self.getTypedRuleContext(PyxellParser.Func_argContext,i) + + + def getRuleIndex(self): + return PyxellParser.RULE_func_args + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitFunc_args" ): + return visitor.visitFunc_args(self) + else: + return visitor.visitChildren(self) + + + + + def func_args(self): + + localctx = PyxellParser.Func_argsContext(self, self._ctx, self.state) + self.enterRule(localctx, 12, self.RULE_func_args) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 175 + self.match(PyxellParser.T__42) + self.state = 181 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,18,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 176 + self.func_arg() + self.state = 177 + self.match(PyxellParser.T__23) + self.state = 183 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,18,self._ctx) + + self.state = 185 + self._errHandler.sync(self) + _la = self._input.LA(1) + if ((((_la - 43)) & ~0x3f) == 0 and ((1 << (_la - 43)) & ((1 << (PyxellParser.T__42 - 43)) | (1 << (PyxellParser.T__45 - 43)) | (1 << (PyxellParser.T__63 - 43)) | (1 << (PyxellParser.ID - 43)))) != 0): + self.state = 184 + self.func_arg() + + + self.state = 187 + self.match(PyxellParser.T__43) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Class_memberContext(ParserRuleContext): def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): @@ -1341,6 +1389,7 @@ class ClassMethodContext(Class_memberContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Class_memberContext super().__init__(parser) + self.args = None # Func_argsContext self.ret = None # TypContext self.copyFrom(ctx) @@ -1349,11 +1398,8 @@ def ID(self): def block(self): return self.getTypedRuleContext(PyxellParser.BlockContext,0) - def func_arg(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(PyxellParser.Func_argContext) - else: - return self.getTypedRuleContext(PyxellParser.Func_argContext,i) + def func_args(self): + return self.getTypedRuleContext(PyxellParser.Func_argsContext,0) def typ(self): return self.getTypedRuleContext(PyxellParser.TypContext,0) @@ -1388,79 +1434,89 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) + class ClassConstructorContext(Class_memberContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Class_memberContext + super().__init__(parser) + self.args = None # Func_argsContext + self.copyFrom(ctx) + + def block(self): + return self.getTypedRuleContext(PyxellParser.BlockContext,0) + + def func_args(self): + return self.getTypedRuleContext(PyxellParser.Func_argsContext,0) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitClassConstructor" ): + return visitor.visitClassConstructor(self) + else: + return visitor.visitChildren(self) + + def class_member(self): localctx = PyxellParser.Class_memberContext(self, self._ctx, self.state) - self.enterRule(localctx, 12, self.RULE_class_member) + self.enterRule(localctx, 14, self.RULE_class_member) self._la = 0 # Token type try: - self.state = 213 + self.state = 211 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__36, PyxellParser.T__44, PyxellParser.T__62, PyxellParser.ID]: + if token in [PyxellParser.T__42, PyxellParser.T__45, PyxellParser.T__63, PyxellParser.ID]: localctx = PyxellParser.ClassFieldContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 185 + self.state = 189 self.typ(0) - self.state = 186 + self.state = 190 self.match(PyxellParser.ID) - self.state = 189 + self.state = 193 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__43: - self.state = 187 - self.match(PyxellParser.T__43) - self.state = 188 + if _la==PyxellParser.T__41: + self.state = 191 + self.match(PyxellParser.T__41) + self.state = 192 self.tuple_expr() - self.state = 191 + self.state = 195 self.match(PyxellParser.T__0) pass elif token in [PyxellParser.T__33]: localctx = PyxellParser.ClassMethodContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 193 + self.state = 197 self.match(PyxellParser.T__33) - self.state = 194 + self.state = 198 self.match(PyxellParser.ID) - self.state = 195 - self.match(PyxellParser.T__36) + self.state = 199 + localctx.args = self.func_args() self.state = 201 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,21,self._ctx) - while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: - if _alt==1: - self.state = 196 - self.func_arg() - self.state = 197 - self.match(PyxellParser.T__23) - self.state = 203 - self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,21,self._ctx) - - self.state = 205 - self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 37)) & ~0x3f) == 0 and ((1 << (_la - 37)) & ((1 << (PyxellParser.T__36 - 37)) | (1 << (PyxellParser.T__44 - 37)) | (1 << (PyxellParser.T__62 - 37)) | (1 << (PyxellParser.ID - 37)))) != 0): - self.state = 204 - self.func_arg() + if ((((_la - 43)) & ~0x3f) == 0 and ((1 << (_la - 43)) & ((1 << (PyxellParser.T__42 - 43)) | (1 << (PyxellParser.T__45 - 43)) | (1 << (PyxellParser.T__63 - 43)) | (1 << (PyxellParser.ID - 43)))) != 0): + self.state = 200 + localctx.ret = self.typ(0) + self.state = 203 + self.match(PyxellParser.T__36) + self.state = 204 + self.block() + pass + elif token in [PyxellParser.T__44]: + localctx = PyxellParser.ClassConstructorContext(self, localctx) + self.enterOuterAlt(localctx, 3) + self.state = 206 + self.match(PyxellParser.T__44) self.state = 207 - self.match(PyxellParser.T__37) + localctx.args = self.func_args() + self.state = 208 + self.match(PyxellParser.T__36) self.state = 209 - self._errHandler.sync(self) - _la = self._input.LA(1) - if ((((_la - 37)) & ~0x3f) == 0 and ((1 << (_la - 37)) & ((1 << (PyxellParser.T__36 - 37)) | (1 << (PyxellParser.T__44 - 37)) | (1 << (PyxellParser.T__62 - 37)) | (1 << (PyxellParser.ID - 37)))) != 0): - self.state = 208 - localctx.ret = self.typ(0) - - - self.state = 211 - self.match(PyxellParser.T__38) - self.state = 212 self.block() pass else: @@ -1503,26 +1559,26 @@ def accept(self, visitor:ParseTreeVisitor): def block(self): localctx = PyxellParser.BlockContext(self, self._ctx, self.state) - self.enterRule(localctx, 14, self.RULE_block) + self.enterRule(localctx, 16, self.RULE_block) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 215 - self.match(PyxellParser.T__41) - self.state = 217 + self.state = 213 + self.match(PyxellParser.T__39) + self.state = 215 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 216 + self.state = 214 self.stmt() - self.state = 219 + self.state = 217 self._errHandler.sync(self) _la = self._input.LA(1) - if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__36) | (1 << PyxellParser.T__40) | (1 << PyxellParser.T__44) | (1 << PyxellParser.T__49) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__61) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0)): + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__38) | (1 << PyxellParser.T__42) | (1 << PyxellParser.T__45) | (1 << PyxellParser.T__50) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.T__66 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0)): break - self.state = 221 - self.match(PyxellParser.T__42) + self.state = 219 + self.match(PyxellParser.T__40) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -1882,20 +1938,20 @@ def expr(self, _p:int=0): _parentState = self.state localctx = PyxellParser.ExprContext(self, self._ctx, _parentState) _prevctx = localctx - _startState = 16 - self.enterRecursionRule(localctx, 16, self.RULE_expr, _p) + _startState = 18 + self.enterRecursionRule(localctx, 18, self.RULE_expr, _p) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 268 + self.state = 266 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,31,self._ctx) + la_ = self._interp.adaptivePredict(self._input,29,self._ctx) if la_ == 1: localctx = PyxellParser.ExprAtomContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 224 + self.state = 222 self.atom() pass @@ -1903,82 +1959,82 @@ def expr(self, _p:int=0): localctx = PyxellParser.ExprParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 225 - self.match(PyxellParser.T__36) - self.state = 226 + self.state = 223 + self.match(PyxellParser.T__42) + self.state = 224 self.tuple_expr() - self.state = 227 - self.match(PyxellParser.T__37) + self.state = 225 + self.match(PyxellParser.T__43) pass elif la_ == 3: localctx = PyxellParser.ExprArrayContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 229 - self.match(PyxellParser.T__44) - self.state = 235 + self.state = 227 + self.match(PyxellParser.T__45) + self.state = 233 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,26,self._ctx) + _alt = self._interp.adaptivePredict(self._input,24,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 230 + self.state = 228 self.expr(0) - self.state = 231 + self.state = 229 self.match(PyxellParser.T__23) - self.state = 237 + self.state = 235 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,26,self._ctx) + _alt = self._interp.adaptivePredict(self._input,24,self._ctx) - self.state = 239 + self.state = 237 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__36 - 13)) | (1 << (PyxellParser.T__44 - 13)) | (1 << (PyxellParser.T__49 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 238 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__42 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 236 self.expr(0) - self.state = 241 - self.match(PyxellParser.T__45) + self.state = 239 + self.match(PyxellParser.T__46) pass elif la_ == 4: localctx = PyxellParser.ExprArrayComprehensionContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 242 - self.match(PyxellParser.T__44) - self.state = 243 + self.state = 240 + self.match(PyxellParser.T__45) + self.state = 241 self.expr(0) - self.state = 245 + self.state = 243 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 244 + self.state = 242 self.comprehension() - self.state = 247 + self.state = 245 self._errHandler.sync(self) _la = self._input.LA(1) if not (_la==PyxellParser.T__24 or _la==PyxellParser.T__30): break - self.state = 249 - self.match(PyxellParser.T__45) + self.state = 247 + self.match(PyxellParser.T__46) pass elif la_ == 5: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 251 + self.state = 249 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__49))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__50))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 252 + self.state = 250 self.expr(17) pass @@ -1986,9 +2042,9 @@ def expr(self, _p:int=0): localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 253 - localctx.op = self.match(PyxellParser.T__58) - self.state = 254 + self.state = 251 + localctx.op = self.match(PyxellParser.T__59) + self.state = 252 self.expr(6) pass @@ -1996,69 +2052,69 @@ def expr(self, _p:int=0): localctx = PyxellParser.ExprLambdaContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 255 - self.match(PyxellParser.T__61) - self.state = 260 + self.state = 253 + self.match(PyxellParser.T__62) + self.state = 258 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,29,self._ctx) + _alt = self._interp.adaptivePredict(self._input,27,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 256 + self.state = 254 self.match(PyxellParser.ID) - self.state = 257 + self.state = 255 self.match(PyxellParser.T__23) - self.state = 262 + self.state = 260 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,29,self._ctx) + _alt = self._interp.adaptivePredict(self._input,27,self._ctx) - self.state = 264 + self.state = 262 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.ID: - self.state = 263 + self.state = 261 self.match(PyxellParser.ID) - self.state = 266 - self.match(PyxellParser.T__62) - self.state = 267 + self.state = 264 + self.match(PyxellParser.T__63) + self.state = 265 self.expr(1) pass self._ctx.stop = self._input.LT(-1) - self.state = 365 + self.state = 363 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,41,self._ctx) + _alt = self._interp.adaptivePredict(self._input,39,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 363 + self.state = 361 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,40,self._ctx) + la_ = self._interp.adaptivePredict(self._input,38,self._ctx) if la_ == 1: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 270 + self.state = 268 if not self.precpred(self._ctx, 18): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 18)") - self.state = 271 + self.state = 269 localctx.op = self.match(PyxellParser.T__8) - self.state = 272 + self.state = 270 self.expr(18) pass elif la_ == 2: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 273 + self.state = 271 if not self.precpred(self._ctx, 16): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 16)") - self.state = 274 + self.state = 272 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__9) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__11))) != 0)): @@ -2066,18 +2122,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 275 + self.state = 273 self.expr(17) pass elif la_ == 3: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 276 + self.state = 274 if not self.precpred(self._ctx, 15): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 15)") - self.state = 277 + self.state = 275 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__12 or _la==PyxellParser.T__13): @@ -2085,18 +2141,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 278 + self.state = 276 self.expr(16) pass elif la_ == 4: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 279 + self.state = 277 if not self.precpred(self._ctx, 14): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 14)") - self.state = 280 + self.state = 278 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__14 or _la==PyxellParser.T__15): @@ -2104,313 +2160,313 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 281 + self.state = 279 self.expr(15) pass elif la_ == 5: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 282 + self.state = 280 if not self.precpred(self._ctx, 13): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") - self.state = 283 + self.state = 281 localctx.op = self.match(PyxellParser.T__16) - self.state = 284 + self.state = 282 self.expr(14) pass elif la_ == 6: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 285 + self.state = 283 if not self.precpred(self._ctx, 12): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 12)") - self.state = 286 + self.state = 284 localctx.op = self.match(PyxellParser.T__17) - self.state = 287 + self.state = 285 self.expr(13) pass elif la_ == 7: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 288 + self.state = 286 if not self.precpred(self._ctx, 11): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") - self.state = 289 + self.state = 287 localctx.op = self.match(PyxellParser.T__18) - self.state = 290 + self.state = 288 self.expr(12) pass elif la_ == 8: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 291 + self.state = 289 if not self.precpred(self._ctx, 10): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") - self.state = 292 + self.state = 290 localctx.dots = self._input.LT(1) _la = self._input.LA(1) - if not(_la==PyxellParser.T__50 or _la==PyxellParser.T__51): + if not(_la==PyxellParser.T__51 or _la==PyxellParser.T__52): localctx.dots = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 293 + self.state = 291 self.expr(11) pass elif la_ == 9: localctx = PyxellParser.ExprIsContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 294 + self.state = 292 if not self.precpred(self._ctx, 8): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") - self.state = 295 + self.state = 293 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not(_la==PyxellParser.T__52 or _la==PyxellParser.T__53): + if not(_la==PyxellParser.T__53 or _la==PyxellParser.T__54): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 296 + self.state = 294 self.expr(9) pass elif la_ == 10: localctx = PyxellParser.ExprCmpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 297 + self.state = 295 if not self.precpred(self._ctx, 7): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") - self.state = 298 + self.state = 296 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__34) | (1 << PyxellParser.T__35) | (1 << PyxellParser.T__54) | (1 << PyxellParser.T__55) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__34) | (1 << PyxellParser.T__35) | (1 << PyxellParser.T__55) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 299 + self.state = 297 self.expr(7) pass elif la_ == 11: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 300 + self.state = 298 if not self.precpred(self._ctx, 5): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") - self.state = 301 - localctx.op = self.match(PyxellParser.T__59) - self.state = 302 + self.state = 299 + localctx.op = self.match(PyxellParser.T__60) + self.state = 300 self.expr(5) pass elif la_ == 12: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 303 + self.state = 301 if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") - self.state = 304 - localctx.op = self.match(PyxellParser.T__60) - self.state = 305 + self.state = 302 + localctx.op = self.match(PyxellParser.T__61) + self.state = 303 self.expr(4) pass elif la_ == 13: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 306 + self.state = 304 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 307 + self.state = 305 localctx.op = self.match(PyxellParser.T__19) - self.state = 308 + self.state = 306 self.expr(3) pass elif la_ == 14: localctx = PyxellParser.ExprCondContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 309 + self.state = 307 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") + self.state = 308 + self.match(PyxellParser.T__47) + self.state = 309 + self.expr(0) self.state = 310 - self.match(PyxellParser.T__46) + self.match(PyxellParser.T__41) self.state = 311 - self.expr(0) - self.state = 312 - self.match(PyxellParser.T__43) - self.state = 313 self.expr(2) pass elif la_ == 15: localctx = PyxellParser.ExprIndexContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 315 + self.state = 313 if not self.precpred(self._ctx, 23): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 23)") - self.state = 317 + self.state = 315 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__46: - self.state = 316 - localctx.safe = self.match(PyxellParser.T__46) + if _la==PyxellParser.T__47: + self.state = 314 + localctx.safe = self.match(PyxellParser.T__47) - self.state = 319 - self.match(PyxellParser.T__44) - self.state = 320 - self.tuple_expr() - self.state = 321 + self.state = 317 self.match(PyxellParser.T__45) + self.state = 318 + self.tuple_expr() + self.state = 319 + self.match(PyxellParser.T__46) pass elif la_ == 16: localctx = PyxellParser.ExprSliceContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 323 + self.state = 321 if not self.precpred(self._ctx, 22): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 22)") + self.state = 322 + self.match(PyxellParser.T__45) self.state = 324 - self.match(PyxellParser.T__44) - self.state = 326 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__36 - 13)) | (1 << (PyxellParser.T__44 - 13)) | (1 << (PyxellParser.T__49 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 325 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__42 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 323 localctx.e1 = self.expr(0) + self.state = 326 + self.match(PyxellParser.T__41) self.state = 328 - self.match(PyxellParser.T__43) - self.state = 330 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__36 - 13)) | (1 << (PyxellParser.T__44 - 13)) | (1 << (PyxellParser.T__49 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 329 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__42 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 327 localctx.e2 = self.expr(0) - self.state = 336 + self.state = 334 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__43: + if _la==PyxellParser.T__41: + self.state = 330 + self.match(PyxellParser.T__41) self.state = 332 - self.match(PyxellParser.T__43) - self.state = 334 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__36 - 13)) | (1 << (PyxellParser.T__44 - 13)) | (1 << (PyxellParser.T__49 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 333 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__42 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 331 localctx.e3 = self.expr(0) - self.state = 338 - self.match(PyxellParser.T__45) + self.state = 336 + self.match(PyxellParser.T__46) pass elif la_ == 17: localctx = PyxellParser.ExprAttrContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 339 + self.state = 337 if not self.precpred(self._ctx, 21): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 21)") - self.state = 341 + self.state = 339 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__46: - self.state = 340 - localctx.safe = self.match(PyxellParser.T__46) + if _la==PyxellParser.T__47: + self.state = 338 + localctx.safe = self.match(PyxellParser.T__47) - self.state = 343 - self.match(PyxellParser.T__47) - self.state = 344 + self.state = 341 + self.match(PyxellParser.T__48) + self.state = 342 self.match(PyxellParser.ID) pass elif la_ == 18: localctx = PyxellParser.ExprCallContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 345 + self.state = 343 if not self.precpred(self._ctx, 20): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 20)") - self.state = 346 - self.match(PyxellParser.T__36) - self.state = 352 + self.state = 344 + self.match(PyxellParser.T__42) + self.state = 350 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,38,self._ctx) + _alt = self._interp.adaptivePredict(self._input,36,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 347 + self.state = 345 self.call_arg() - self.state = 348 + self.state = 346 self.match(PyxellParser.T__23) - self.state = 354 + self.state = 352 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,38,self._ctx) + _alt = self._interp.adaptivePredict(self._input,36,self._ctx) - self.state = 356 + self.state = 354 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__36 - 13)) | (1 << (PyxellParser.T__44 - 13)) | (1 << (PyxellParser.T__49 - 13)) | (1 << (PyxellParser.T__58 - 13)) | (1 << (PyxellParser.T__61 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 355 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__42 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 353 self.call_arg() - self.state = 358 - self.match(PyxellParser.T__37) + self.state = 356 + self.match(PyxellParser.T__43) pass elif la_ == 19: localctx = PyxellParser.ExprUnaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 359 + self.state = 357 if not self.precpred(self._ctx, 19): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 19)") - self.state = 360 - localctx.op = self.match(PyxellParser.T__48) + self.state = 358 + localctx.op = self.match(PyxellParser.T__49) pass elif la_ == 20: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 361 + self.state = 359 if not self.precpred(self._ctx, 9): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") - self.state = 362 - localctx.dots = self.match(PyxellParser.T__51) + self.state = 360 + localctx.dots = self.match(PyxellParser.T__52) pass - self.state = 367 + self.state = 365 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,41,self._ctx) + _alt = self._interp.adaptivePredict(self._input,39,self._ctx) except RecognitionException as re: localctx.exception = re @@ -2461,24 +2517,24 @@ def accept(self, visitor:ParseTreeVisitor): def tuple_expr(self): localctx = PyxellParser.Tuple_exprContext(self, self._ctx, self.state) - self.enterRule(localctx, 18, self.RULE_tuple_expr) + self.enterRule(localctx, 20, self.RULE_tuple_expr) try: localctx = PyxellParser.ExprTupleContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 373 + self.state = 371 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,42,self._ctx) + _alt = self._interp.adaptivePredict(self._input,40,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 368 + self.state = 366 self.expr(0) - self.state = 369 + self.state = 367 self.match(PyxellParser.T__23) - self.state = 375 + self.state = 373 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,42,self._ctx) + _alt = self._interp.adaptivePredict(self._input,40,self._ctx) - self.state = 376 + self.state = 374 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -2528,13 +2584,13 @@ def accept(self, visitor:ParseTreeVisitor): def interpolation_expr(self): localctx = PyxellParser.Interpolation_exprContext(self, self._ctx, self.state) - self.enterRule(localctx, 20, self.RULE_interpolation_expr) + self.enterRule(localctx, 22, self.RULE_interpolation_expr) try: localctx = PyxellParser.ExprInterpolationContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 378 + self.state = 376 self.tuple_expr() - self.state = 379 + self.state = 377 self.match(PyxellParser.EOF) except RecognitionException as re: localctx.exception = re @@ -2602,30 +2658,30 @@ def accept(self, visitor:ParseTreeVisitor): def comprehension(self): localctx = PyxellParser.ComprehensionContext(self, self._ctx, self.state) - self.enterRule(localctx, 22, self.RULE_comprehension) + self.enterRule(localctx, 24, self.RULE_comprehension) self._la = 0 # Token type try: - self.state = 391 + self.state = 389 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__30]: localctx = PyxellParser.ComprehensionGeneratorContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 381 + self.state = 379 self.match(PyxellParser.T__30) - self.state = 382 + self.state = 380 self.tuple_expr() - self.state = 383 + self.state = 381 self.match(PyxellParser.T__31) - self.state = 384 + self.state = 382 self.tuple_expr() - self.state = 387 + self.state = 385 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__32: - self.state = 385 + self.state = 383 self.match(PyxellParser.T__32) - self.state = 386 + self.state = 384 self.tuple_expr() @@ -2633,9 +2689,9 @@ def comprehension(self): elif token in [PyxellParser.T__24]: localctx = PyxellParser.ComprehensionFilterContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 389 + self.state = 387 self.match(PyxellParser.T__24) - self.state = 390 + self.state = 388 self.expr(0) pass else: @@ -2689,21 +2745,21 @@ def accept(self, visitor:ParseTreeVisitor): def call_arg(self): localctx = PyxellParser.Call_argContext(self, self._ctx, self.state) - self.enterRule(localctx, 24, self.RULE_call_arg) + self.enterRule(localctx, 26, self.RULE_call_arg) try: localctx = PyxellParser.CallArgContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 395 + self.state = 393 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,45,self._ctx) + la_ = self._interp.adaptivePredict(self._input,43,self._ctx) if la_ == 1: - self.state = 393 + self.state = 391 self.match(PyxellParser.ID) - self.state = 394 + self.state = 392 self.match(PyxellParser.T__7) - self.state = 397 + self.state = 395 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -2842,30 +2898,30 @@ def accept(self, visitor:ParseTreeVisitor): def atom(self): localctx = PyxellParser.AtomContext(self, self._ctx, self.state) - self.enterRule(localctx, 26, self.RULE_atom) + self.enterRule(localctx, 28, self.RULE_atom) self._la = 0 # Token type try: - self.state = 406 + self.state = 404 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: localctx = PyxellParser.AtomIntContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 399 + self.state = 397 self.match(PyxellParser.INT) pass elif token in [PyxellParser.FLOAT]: localctx = PyxellParser.AtomFloatContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 400 + self.state = 398 self.match(PyxellParser.FLOAT) pass - elif token in [PyxellParser.T__63, PyxellParser.T__64]: + elif token in [PyxellParser.T__64, PyxellParser.T__65]: localctx = PyxellParser.AtomBoolContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 401 + self.state = 399 _la = self._input.LA(1) - if not(_la==PyxellParser.T__63 or _la==PyxellParser.T__64): + if not(_la==PyxellParser.T__64 or _la==PyxellParser.T__65): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -2874,25 +2930,25 @@ def atom(self): elif token in [PyxellParser.CHAR]: localctx = PyxellParser.AtomCharContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 402 + self.state = 400 self.match(PyxellParser.CHAR) pass elif token in [PyxellParser.STRING]: localctx = PyxellParser.AtomStringContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 403 + self.state = 401 self.match(PyxellParser.STRING) pass - elif token in [PyxellParser.T__65]: + elif token in [PyxellParser.T__66]: localctx = PyxellParser.AtomNullContext(self, localctx) self.enterOuterAlt(localctx, 6) - self.state = 404 - self.match(PyxellParser.T__65) + self.state = 402 + self.match(PyxellParser.T__66) pass elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) self.enterOuterAlt(localctx, 7) - self.state = 405 + self.state = 403 self.match(PyxellParser.ID) pass else: @@ -2946,24 +3002,24 @@ def accept(self, visitor:ParseTreeVisitor): def id_list(self): localctx = PyxellParser.Id_listContext(self, self._ctx, self.state) - self.enterRule(localctx, 28, self.RULE_id_list) + self.enterRule(localctx, 30, self.RULE_id_list) try: localctx = PyxellParser.IdListContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 412 + self.state = 410 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,47,self._ctx) + _alt = self._interp.adaptivePredict(self._input,45,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 408 + self.state = 406 self.match(PyxellParser.ID) - self.state = 409 + self.state = 407 self.match(PyxellParser.T__23) - self.state = 414 + self.state = 412 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,47,self._ctx) + _alt = self._interp.adaptivePredict(self._input,45,self._ctx) - self.state = 415 + self.state = 413 self.match(PyxellParser.ID) except RecognitionException as re: localctx.exception = re @@ -3119,11 +3175,11 @@ def typ(self, _p:int=0): _parentState = self.state localctx = PyxellParser.TypContext(self, self._ctx, _parentState) _prevctx = localctx - _startState = 30 - self.enterRecursionRule(localctx, 30, self.RULE_typ, _p) + _startState = 32 + self.enterRecursionRule(localctx, 32, self.RULE_typ, _p) try: self.enterOuterAlt(localctx, 1) - self.state = 429 + self.state = 427 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.ID]: @@ -3131,96 +3187,96 @@ def typ(self, _p:int=0): self._ctx = localctx _prevctx = localctx - self.state = 418 + self.state = 416 self.match(PyxellParser.ID) pass - elif token in [PyxellParser.T__36]: + elif token in [PyxellParser.T__42]: localctx = PyxellParser.TypeParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 419 - self.match(PyxellParser.T__36) - self.state = 420 + self.state = 417 + self.match(PyxellParser.T__42) + self.state = 418 self.typ(0) - self.state = 421 - self.match(PyxellParser.T__37) + self.state = 419 + self.match(PyxellParser.T__43) pass - elif token in [PyxellParser.T__44]: + elif token in [PyxellParser.T__45]: localctx = PyxellParser.TypeArrayContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 423 - self.match(PyxellParser.T__44) - self.state = 424 - self.typ(0) - self.state = 425 + self.state = 421 self.match(PyxellParser.T__45) + self.state = 422 + self.typ(0) + self.state = 423 + self.match(PyxellParser.T__46) pass - elif token in [PyxellParser.T__62]: + elif token in [PyxellParser.T__63]: localctx = PyxellParser.TypeFunc0Context(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 427 - self.match(PyxellParser.T__62) - self.state = 428 + self.state = 425 + self.match(PyxellParser.T__63) + self.state = 426 self.typ(1) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 441 + self.state = 439 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,50,self._ctx) + _alt = self._interp.adaptivePredict(self._input,48,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 439 + self.state = 437 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,49,self._ctx) + la_ = self._interp.adaptivePredict(self._input,47,self._ctx) if la_ == 1: localctx = PyxellParser.TypeTupleContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 431 + self.state = 429 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 432 + self.state = 430 self.match(PyxellParser.T__9) - self.state = 433 + self.state = 431 self.typ(3) pass elif la_ == 2: localctx = PyxellParser.TypeFuncContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 434 + self.state = 432 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 435 - self.match(PyxellParser.T__62) - self.state = 436 + self.state = 433 + self.match(PyxellParser.T__63) + self.state = 434 self.typ(2) pass elif la_ == 3: localctx = PyxellParser.TypeNullableContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 437 + self.state = 435 if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") - self.state = 438 - self.match(PyxellParser.T__46) + self.state = 436 + self.match(PyxellParser.T__47) pass - self.state = 443 + self.state = 441 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,50,self._ctx) + _alt = self._interp.adaptivePredict(self._input,48,self._ctx) except RecognitionException as re: localctx.exception = re @@ -3235,8 +3291,8 @@ def typ(self, _p:int=0): def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): if self._predicates == None: self._predicates = dict() - self._predicates[8] = self.expr_sempred - self._predicates[15] = self.typ_sempred + self._predicates[9] = self.expr_sempred + self._predicates[16] = self.typ_sempred pred = self._predicates.get(ruleIndex, None) if pred is None: raise Exception("No predicate with index:" + str(ruleIndex)) diff --git a/src/antlr/PyxellVisitor.py b/src/antlr/PyxellVisitor.py index ae9bf2db..118360c9 100644 --- a/src/antlr/PyxellVisitor.py +++ b/src/antlr/PyxellVisitor.py @@ -99,6 +99,11 @@ def visitFuncArg(self, ctx:PyxellParser.FuncArgContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#func_args. + def visitFunc_args(self, ctx:PyxellParser.Func_argsContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#ClassField. def visitClassField(self, ctx:PyxellParser.ClassFieldContext): return self.visitChildren(ctx) @@ -109,6 +114,11 @@ def visitClassMethod(self, ctx:PyxellParser.ClassMethodContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#ClassConstructor. + def visitClassConstructor(self, ctx:PyxellParser.ClassConstructorContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#block. def visitBlock(self, ctx:PyxellParser.BlockContext): return self.visitChildren(ctx) diff --git a/src/ast.py b/src/ast.py index b06a6ca5..8d8aa1c1 100644 --- a/src/ast.py +++ b/src/ast.py @@ -142,7 +142,7 @@ def visitStmtFunc(self, ctx): **_node(ctx, 'StmtFunc'), 'id': self.visit(ctx.ID()), 'typevars': self.visit(ctx.typevars) or [], - 'args': self.visit(ctx.func_arg()), + 'args': self.visit(ctx.args.func_arg()), 'ret': self.visit(ctx.ret), 'block': self.visit(ctx.block()), } @@ -180,11 +180,19 @@ def visitClassMethod(self, ctx): return { **_node(ctx, 'ClassMethod'), 'id': self.visit(ctx.ID()), - 'args': self.visit(ctx.func_arg()), + 'args': self.visit(ctx.args.func_arg()), 'ret': self.visit(ctx.ret), 'block': self.visit(ctx.block()), } + def visitClassConstructor(self, ctx): + return { + **_node(ctx, 'ClassConstructor'), + 'id': '', + 'args': self.visit(ctx.args.func_arg()), + 'block': self.visit(ctx.block()), + } + ### Expressions ### diff --git a/src/compiler.py b/src/compiler.py index 974981a5..135d3402 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -1332,7 +1332,7 @@ def compileStmtFunc(self, node, class_type=None): self.throw(arg, err.MissingDefault(name)) args.append(Arg(type, name, default)) - ret_type = self.compile(node['ret']) or tVoid + ret_type = self.compile(node.get('ret')) or tVoid func_type = tFunc(args, ret_type) env = self.env.copy() @@ -1381,6 +1381,7 @@ def compileStmtClass(self, node): member_types = {} methods = {} + type = tClass(self.module.context, id, member_types) self.env[id] = type @@ -1390,14 +1391,15 @@ def compileStmtClass(self, node): self.throw(member, err.RepeatedMember(name)) if member['node'] == 'ClassField': member_types[name] = self.compile(member['type']) - elif member['node'] == 'ClassMethod': + elif member['node'] in ('ClassMethod', 'ClassConstructor'): func = self.compileStmtFunc(member, class_type=type) member_types[name] = func.type methods[name] = func type.pointee.set_body(*member_types.values()) - constructor_type = tFunc([], type) + constructor_method = methods.get('') + constructor_type = tFunc(constructor_method.type.args[1:] if constructor_method else [], type) constructor = ll.Function(self.module, constructor_type.pointee, self.module.get_unique_name('def.'+id)) constructor_ptr = ll.GlobalVariable(self.module, constructor_type, self.module.get_unique_name(id)) @@ -1420,6 +1422,9 @@ def compileStmtClass(self, node): elif member['node'] == 'ClassMethod': self.insert(self.builder.load(self.function(member, methods[name])), obj, i) + if constructor_method: + self.builder.call(self.builder.load(self.function(node, constructor_method)), [obj, *constructor.args]) + self.builder.ret(obj) self.builder.position_at_end(prev_label) diff --git a/test/bad/classes/constructor02.err b/test/bad/classes/constructor02.err index 487d9164..0b00354f 100644 --- a/test/bad/classes/constructor02.err +++ b/test/bad/classes/constructor02.err @@ -1 +1 @@ -Too many arguments for function `Test`. \ No newline at end of file +Too many arguments for function `->Test`. \ No newline at end of file diff --git a/test/bad/classes/constructor05.err b/test/bad/classes/constructor05.err new file mode 100644 index 00000000..21858aec --- /dev/null +++ b/test/bad/classes/constructor05.err @@ -0,0 +1 @@ +Repeated member `` in class definition. \ No newline at end of file diff --git a/test/bad/classes/constructor05.px b/test/bad/classes/constructor05.px new file mode 100644 index 00000000..f6f33796 --- /dev/null +++ b/test/bad/classes/constructor05.px @@ -0,0 +1,6 @@ + +class Test def + constructor() def + skip + constructor() def + skip From e47c2315db284e076f483612e576e8fbd6c64917 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sun, 1 Dec 2019 12:56:33 +0100 Subject: [PATCH 078/100] Code cleanup --- src/compiler.py | 22 ++++++++++--------- test/bad/functions/{void03.err => args05.err} | 0 test/bad/functions/args05.px | 3 +++ test/bad/functions/args06.err | 1 + test/bad/functions/args06.px | 3 +++ test/bad/functions/void03.px | 5 ----- 6 files changed, 19 insertions(+), 15 deletions(-) rename test/bad/functions/{void03.err => args05.err} (100%) create mode 100644 test/bad/functions/args05.px create mode 100644 test/bad/functions/args06.err create mode 100644 test/bad/functions/args06.px delete mode 100644 test/bad/functions/void03.px diff --git a/src/compiler.py b/src/compiler.py index 135d3402..2896714c 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -160,7 +160,7 @@ def get(self, node, id, load=True): if result.isTemplate(): if result.typevars: return result - result = self.function(node, result) + result = self.function(result) return self.builder.load(result) if load else result def extract(self, ptr, *indices, load=True): @@ -307,14 +307,15 @@ def unify(self, node, *values): return [self.cast(node, value, type) for value in values] - def declare(self, node, type, id, redeclare=False, initialize=False): + def declare(self, node, type, id, redeclare=False, initialize=False, check_only=False): if type == tVoid: self.throw(node, err.InvalidDeclaration(type)) if type.isUnknown(): self.throw(node, err.UnknownType()) - if id in self.env and not redeclare: self.throw(node, err.RedeclaredIdentifier(id)) + if check_only: + return if self.builder.function._name == 'main': ptr = ll.GlobalVariable(self.module, type, self.module.get_unique_name(id)) @@ -932,7 +933,7 @@ def convert_expr(expr): } return expr - def function(self, node, template): + def function(self, template): real_types = tuple(self.env.get(name) for name in template.typevars) if real_types in template.compiled: @@ -962,7 +963,7 @@ def function(self, node, template): self.env['#return'] = func_type.ret for arg in func_type.args: - ptr = self.declare(node, arg.type, arg.name, redeclare=True, initialize=True) + ptr = self.declare(body, arg.type, arg.name, redeclare=True, initialize=True) self.env[arg.name] = ptr self.compile(body) @@ -996,7 +997,7 @@ def function(self, node, template): self.env.pop('#break', None) for arg, value in zip(func_type.args, func.args): - ptr = self.declare(node, arg.type, arg.name, redeclare=True, initialize=True) + ptr = self.declare(body, arg.type, arg.name, redeclare=True, initialize=True) self.env[arg.name] = ptr self.builder.store(value, ptr) @@ -1006,7 +1007,7 @@ def function(self, node, template): self.builder.ret_void() else: if '#return' not in self.initialized: - self.throw(node, err.MissingReturn(id)) + self.throw(body, err.MissingReturn(id)) self.builder.ret(func_type.ret.default()) self.builder.position_at_end(prev_label) @@ -1322,6 +1323,7 @@ def compileStmtFunc(self, node, class_type=None): expect_default = False for arg in node['args']: type = self.compile(arg['type']) + self.declare(arg, type, "", check_only=True) name = arg['name'] default = arg.get('default') if default: @@ -1420,10 +1422,10 @@ def compileStmtClass(self, node): value = self.cast(member, self.compile(default), member_types[name]) self.insert(value, obj, i) elif member['node'] == 'ClassMethod': - self.insert(self.builder.load(self.function(member, methods[name])), obj, i) + self.insert(self.builder.load(self.function(methods[name])), obj, i) if constructor_method: - self.builder.call(self.builder.load(self.function(node, constructor_method)), [obj, *constructor.args]) + self.builder.call(self.builder.load(self.function(constructor_method)), [obj, *constructor.args]) self.builder.ret(obj) @@ -1663,7 +1665,7 @@ def _call(obj, func): args.insert(0, obj) if func.isTemplate(): - func = self.builder.load(self.function(node, func)) + func = self.builder.load(self.function(func)) return self.builder.call(func, args) diff --git a/test/bad/functions/void03.err b/test/bad/functions/args05.err similarity index 100% rename from test/bad/functions/void03.err rename to test/bad/functions/args05.err diff --git a/test/bad/functions/args05.px b/test/bad/functions/args05.px new file mode 100644 index 00000000..6970dc26 --- /dev/null +++ b/test/bad/functions/args05.px @@ -0,0 +1,3 @@ + +func f(Void x) def + return diff --git a/test/bad/functions/args06.err b/test/bad/functions/args06.err new file mode 100644 index 00000000..58bd0c98 --- /dev/null +++ b/test/bad/functions/args06.err @@ -0,0 +1 @@ +Identifier `Type` does not represent a type. \ No newline at end of file diff --git a/test/bad/functions/args06.px b/test/bad/functions/args06.px new file mode 100644 index 00000000..90cdda4d --- /dev/null +++ b/test/bad/functions/args06.px @@ -0,0 +1,3 @@ + +func f(Type x) def + return diff --git a/test/bad/functions/void03.px b/test/bad/functions/void03.px deleted file mode 100644 index c9832c8f..00000000 --- a/test/bad/functions/void03.px +++ /dev/null @@ -1,5 +0,0 @@ - -func f(Void v) def - return - -f() From 0991ca4d995c169d11d0b74cdd0e0fe058e390f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sun, 1 Dec 2019 17:53:48 +0100 Subject: [PATCH 079/100] Concurrent execution of tests --- .gitignore | 2 +- test.py | 118 +++++++++++++++++++++++++++++++++-------------------- 2 files changed, 75 insertions(+), 45 deletions(-) diff --git a/.gitignore b/.gitignore index ab3c56bf..67d6d28a 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,7 @@ pyxell *.jar .idea/ *.iml -tmp.* _* +*.tmp *.bc *.ll diff --git a/test.py b/test.py index b7e7f205..3583186d 100644 --- a/test.py +++ b/test.py @@ -2,12 +2,14 @@ import argparse import colorama +import concurrent.futures import glob import os import subprocess import traceback -from timeit import default_timer as timer +import threading from pathlib import Path +from timeit import default_timer as timer from src.main import compile from src.errors import PyxellError @@ -26,6 +28,8 @@ parser = argparse.ArgumentParser(description="Test Pyxell compiler.") parser.add_argument('pattern', nargs='?', default='', help="file path pattern (relative to test folder)") +parser.add_argument('-c', '--thread-count', dest='thread_count', type=int, default=8, + help="number of threads to use") parser.add_argument('-t', '--target-windows-gnu', action='store_true', help="run compiler with -target x86_64-pc-windows-gnu") args = parser.parse_args() @@ -36,71 +40,97 @@ path = path.replace(os.path.sep, '/') if args.pattern in path: tests.append(path) + n = len(tests) +if n == 0: + print("No tests to run.") + exit(0) + +print(f"Running {n} tests using {args.thread_count} thread{'s' if args.thread_count > 1 else ''}.") + +ok = 0 t0 = timer() -ok = i = 0 -for i, path in enumerate(tests, 1): - print(f"{B}> TEST {i}/{n}:{E} {path}") +output_dict = {} +output_index = 1 +lock = threading.Lock() - with open('tmp.out', 'w') as outfile: +def test(i, path): + global ok + global output_index + + output = [] + output.append(f"{B}> TEST {i}/{n}:{E} {path}") + + with open(path.replace(".px", ".tmp"), 'w') as tmpfile: try: error_expected = Path(path.replace(".px", ".err")).read_text() except FileNotFoundError: error_expected = None + error = False + try: params = ['-target', 'x86_64-pc-windows-gnu'] if args.target_windows_gnu else [] compile(path, params) - except KeyboardInterrupt: - exit(1) except PyxellError as e: error_message = str(e) if error_expected: if error_message.strip().endswith(error_expected): - print(f"{G}{error_message}{E}") + output.append(f"{G}{error_message}{E}") ok += 1 else: - print(f"{R}{error_message}\n---\n> {error_expected}{E}") + output.append(f"{R}{error_message}\n---\n> {error_expected}{E}") else: - print(f"{R}{error_message}{E}") - continue + output.append(f"{R}{error_message}{E}") + error = True except subprocess.CalledProcessError as e: - print(f"{R}{e.output.decode()}{E}") - continue + output.append(f"{R}{e.output.decode()}{E}") + error = True except Exception: - print(f"{R}{traceback.format_exc()}{E}") - continue + output.append(f"{R}{traceback.format_exc()}{E}") + error = True + + if not error: + if error_expected: + output.append(f"{R}Program compiled successfully, but error expected.\n---\n> {error_expected}{E}") + else: + t1 = timer() + try: + with open(f'{path.replace(".px", ".in")}', 'r') as infile: + subprocess.call(f'{path.replace(".px", ".exe")}', stdin=infile, stdout=tmpfile) + except FileNotFoundError: + subprocess.call(f'{path.replace(".px", ".exe")}', stdout=tmpfile) + t2 = timer() - if error_expected: - print(f"{R}Program compiled successfully, but error expected.\n---\n> {error_expected}{E}") - continue + try: + subprocess.check_output(f'diff --strip-trailing-cr {path.replace(".px", ".tmp")} {path.replace(".px", ".out")}', stderr=subprocess.STDOUT) + except subprocess.CalledProcessError as e: + if e.returncode == 2: + output.append(f"{Y}{e.output.decode()}{E}") + else: + output.append(f"{R}WA: {e.output.decode()}{E}") + else: + output.append(f"{G}OK{E} ({t2-t1:.3f}s)") + ok += 1 - t1 = timer() - try: - with open(f'{path.replace(".px", ".in")}', 'r') as infile: - subprocess.call(f'{path.replace(".px", ".exe")}', stdin=infile, stdout=outfile) - except FileNotFoundError: - subprocess.call(f'{path.replace(".px", ".exe")}', stdout=outfile) - t2 = timer() + # Print the output of tests in the right order. + output_dict[i] = output + with lock: + while output_index in output_dict: + print('\n'.join(output_dict[output_index])) + output_index += 1 - try: - subprocess.check_output(f'diff --strip-trailing-cr tmp.out {path.replace(".px", ".out")}', stderr=subprocess.STDOUT) - except subprocess.CalledProcessError as e: - if e.returncode == 2: - print(f"{Y}{e.output.decode()}{E}") - else: - print(f"{R}WA: {e.output.decode()}{E}") - else: - print(f"{G}OK{E} ({t2-t1:.3f}s)") - ok += 1 - -if i > 0: - print(f"{B}---{E}") - msg = f"Run {i} tests in {timer()-t0:.3f}s" - if ok == i: - print(msg + f", {G}all passed{E}.") - else: - print(msg + f", {R}{i-ok} failed{E}.") + if not error or error_expected: + os.remove(path.replace(".px", ".tmp")) + +with concurrent.futures.ThreadPoolExecutor(args.thread_count) as executor: + for i, path in enumerate(tests, 1): + executor.submit(test, i, path) + +print(f"{B}---{E}") +msg = f"Run {n} tests in {timer()-t0:.3f}s" +if ok == n: + print(msg + f", {G}all passed{E}.") else: - print("No tests to run.") + print(msg + f", {R}{n-ok} failed{E}.") From 7533349081927d60eb3e4577fcdfdf5b875d399b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Mon, 2 Dec 2019 21:50:29 +0100 Subject: [PATCH 080/100] Class inheritance Array covariance is allowed again, since it is safe for reference types. --- src/Pyxell.g4 | 2 +- src/antlr/Pyxell.interp | 6 +- src/antlr/Pyxell.tokens | 10 +- src/antlr/PyxellLexer.interp | 6 +- src/antlr/PyxellLexer.py | 14 +- src/antlr/PyxellLexer.tokens | 10 +- src/antlr/PyxellParser.py | 974 ++++++++++++++-------------- src/ast.py | 1 + src/compiler.py | 35 +- src/errors.py | 2 + src/types.py | 30 +- test/bad/classes/inheritance05.err | 2 +- test/bad/classes/inheritance06.err | 2 +- test/bad/classes/type03.err | 2 +- test/bad/classes/type03.px | 4 +- test/bad/classes/type04.err | 1 - test/bad/classes/type04.px | 13 - test/good/arrays/covariance01.out | 1 + test/good/arrays/covariance01.px | 10 + test/good/arrays/covariance02.out | 2 + test/good/arrays/covariance02.px | 21 + test/good/classes/inheritance10.out | 2 + test/good/classes/inheritance10.px | 15 + test/good/classes/unification04.out | 2 + test/good/classes/unification04.px | 3 +- 25 files changed, 639 insertions(+), 531 deletions(-) delete mode 100644 test/bad/classes/type04.err delete mode 100644 test/bad/classes/type04.px create mode 100644 test/good/arrays/covariance01.out create mode 100644 test/good/arrays/covariance01.px create mode 100644 test/good/arrays/covariance02.out create mode 100644 test/good/arrays/covariance02.px create mode 100644 test/good/classes/inheritance10.out create mode 100644 test/good/classes/inheritance10.px diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index 6fcb619e..0006f426 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -30,7 +30,7 @@ compound_stmt | 'until' expr 'do' block # StmtUntil | 'for' tuple_expr 'in' tuple_expr ('step' tuple_expr)? 'do' block # StmtFor | 'func' ID ('<' typevars=id_list '>')? args=func_args (ret=typ)? ('def' block | 'extern' ';') # StmtFunc - | 'class' ID 'def' '{' class_member+ '}' # StmtClass + | 'class' ID ('(' typ ')')? 'def' '{' class_member+ '}' # StmtClass ; func_arg diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index 489fa733..38d92938 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -39,11 +39,11 @@ null 'def' 'extern' 'class' +'(' +')' '{' '}' ':' -'(' -')' 'constructor' '[' ']' @@ -175,4 +175,4 @@ typ atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 77, 445, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 3, 2, 7, 2, 38, 10, 2, 12, 2, 14, 2, 41, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 49, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 59, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 64, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 70, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 75, 10, 4, 12, 4, 14, 4, 78, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 89, 10, 4, 5, 4, 91, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 96, 10, 5, 12, 5, 14, 5, 99, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 110, 10, 6, 12, 6, 14, 6, 113, 11, 6, 3, 6, 3, 6, 3, 6, 5, 6, 118, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 136, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 147, 10, 6, 3, 6, 3, 6, 5, 6, 151, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 157, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 6, 6, 164, 10, 6, 13, 6, 14, 6, 165, 3, 6, 3, 6, 5, 6, 170, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 176, 10, 7, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 182, 10, 8, 12, 8, 14, 8, 185, 11, 8, 3, 8, 5, 8, 188, 10, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 196, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 204, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 214, 10, 9, 3, 10, 3, 10, 6, 10, 218, 10, 10, 13, 10, 14, 10, 219, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 234, 10, 11, 12, 11, 14, 11, 237, 11, 11, 3, 11, 5, 11, 240, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 6, 11, 246, 10, 11, 13, 11, 14, 11, 247, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 259, 10, 11, 12, 11, 14, 11, 262, 11, 11, 3, 11, 5, 11, 265, 10, 11, 3, 11, 3, 11, 5, 11, 269, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 318, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 327, 10, 11, 3, 11, 3, 11, 5, 11, 331, 10, 11, 3, 11, 3, 11, 5, 11, 335, 10, 11, 5, 11, 337, 10, 11, 3, 11, 3, 11, 3, 11, 5, 11, 342, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 351, 10, 11, 12, 11, 14, 11, 354, 11, 11, 3, 11, 5, 11, 357, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 364, 10, 11, 12, 11, 14, 11, 367, 11, 11, 3, 12, 3, 12, 3, 12, 7, 12, 372, 10, 12, 12, 12, 14, 12, 375, 11, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 388, 10, 14, 3, 14, 3, 14, 5, 14, 392, 10, 14, 3, 15, 3, 15, 5, 15, 396, 10, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 407, 10, 16, 3, 17, 3, 17, 7, 17, 411, 10, 17, 12, 17, 14, 17, 414, 11, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 5, 18, 430, 10, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 7, 18, 440, 10, 18, 12, 18, 14, 18, 443, 11, 18, 3, 18, 2, 4, 20, 34, 19, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 2, 12, 3, 2, 11, 22, 3, 2, 23, 24, 4, 2, 15, 16, 53, 53, 3, 2, 12, 14, 3, 2, 15, 16, 3, 2, 17, 18, 3, 2, 54, 55, 3, 2, 56, 57, 4, 2, 37, 38, 58, 61, 3, 2, 67, 68, 2, 520, 2, 39, 3, 2, 2, 2, 4, 48, 3, 2, 2, 2, 6, 90, 3, 2, 2, 2, 8, 92, 3, 2, 2, 2, 10, 169, 3, 2, 2, 2, 12, 171, 3, 2, 2, 2, 14, 177, 3, 2, 2, 2, 16, 213, 3, 2, 2, 2, 18, 215, 3, 2, 2, 2, 20, 268, 3, 2, 2, 2, 22, 373, 3, 2, 2, 2, 24, 378, 3, 2, 2, 2, 26, 391, 3, 2, 2, 2, 28, 395, 3, 2, 2, 2, 30, 406, 3, 2, 2, 2, 32, 412, 3, 2, 2, 2, 34, 429, 3, 2, 2, 2, 36, 38, 5, 4, 3, 2, 37, 36, 3, 2, 2, 2, 38, 41, 3, 2, 2, 2, 39, 37, 3, 2, 2, 2, 39, 40, 3, 2, 2, 2, 40, 42, 3, 2, 2, 2, 41, 39, 3, 2, 2, 2, 42, 43, 7, 2, 2, 3, 43, 3, 3, 2, 2, 2, 44, 45, 5, 6, 4, 2, 45, 46, 7, 3, 2, 2, 46, 49, 3, 2, 2, 2, 47, 49, 5, 10, 6, 2, 48, 44, 3, 2, 2, 2, 48, 47, 3, 2, 2, 2, 49, 5, 3, 2, 2, 2, 50, 51, 7, 4, 2, 2, 51, 58, 7, 74, 2, 2, 52, 53, 7, 5, 2, 2, 53, 59, 5, 32, 17, 2, 54, 55, 7, 6, 2, 2, 55, 59, 5, 32, 17, 2, 56, 57, 7, 7, 2, 2, 57, 59, 7, 74, 2, 2, 58, 52, 3, 2, 2, 2, 58, 54, 3, 2, 2, 2, 58, 56, 3, 2, 2, 2, 58, 59, 3, 2, 2, 2, 59, 91, 3, 2, 2, 2, 60, 91, 7, 8, 2, 2, 61, 63, 7, 9, 2, 2, 62, 64, 5, 22, 12, 2, 63, 62, 3, 2, 2, 2, 63, 64, 3, 2, 2, 2, 64, 91, 3, 2, 2, 2, 65, 66, 5, 34, 18, 2, 66, 69, 7, 74, 2, 2, 67, 68, 7, 10, 2, 2, 68, 70, 5, 22, 12, 2, 69, 67, 3, 2, 2, 2, 69, 70, 3, 2, 2, 2, 70, 91, 3, 2, 2, 2, 71, 72, 5, 8, 5, 2, 72, 73, 7, 10, 2, 2, 73, 75, 3, 2, 2, 2, 74, 71, 3, 2, 2, 2, 75, 78, 3, 2, 2, 2, 76, 74, 3, 2, 2, 2, 76, 77, 3, 2, 2, 2, 77, 79, 3, 2, 2, 2, 78, 76, 3, 2, 2, 2, 79, 91, 5, 22, 12, 2, 80, 81, 5, 20, 11, 2, 81, 82, 9, 2, 2, 2, 82, 83, 7, 10, 2, 2, 83, 84, 5, 20, 11, 2, 84, 91, 3, 2, 2, 2, 85, 91, 9, 3, 2, 2, 86, 88, 7, 25, 2, 2, 87, 89, 5, 22, 12, 2, 88, 87, 3, 2, 2, 2, 88, 89, 3, 2, 2, 2, 89, 91, 3, 2, 2, 2, 90, 50, 3, 2, 2, 2, 90, 60, 3, 2, 2, 2, 90, 61, 3, 2, 2, 2, 90, 65, 3, 2, 2, 2, 90, 76, 3, 2, 2, 2, 90, 80, 3, 2, 2, 2, 90, 85, 3, 2, 2, 2, 90, 86, 3, 2, 2, 2, 91, 7, 3, 2, 2, 2, 92, 97, 5, 20, 11, 2, 93, 94, 7, 26, 2, 2, 94, 96, 5, 20, 11, 2, 95, 93, 3, 2, 2, 2, 96, 99, 3, 2, 2, 2, 97, 95, 3, 2, 2, 2, 97, 98, 3, 2, 2, 2, 98, 9, 3, 2, 2, 2, 99, 97, 3, 2, 2, 2, 100, 101, 7, 27, 2, 2, 101, 102, 5, 20, 11, 2, 102, 103, 7, 28, 2, 2, 103, 111, 5, 18, 10, 2, 104, 105, 7, 29, 2, 2, 105, 106, 5, 20, 11, 2, 106, 107, 7, 28, 2, 2, 107, 108, 5, 18, 10, 2, 108, 110, 3, 2, 2, 2, 109, 104, 3, 2, 2, 2, 110, 113, 3, 2, 2, 2, 111, 109, 3, 2, 2, 2, 111, 112, 3, 2, 2, 2, 112, 117, 3, 2, 2, 2, 113, 111, 3, 2, 2, 2, 114, 115, 7, 30, 2, 2, 115, 116, 7, 28, 2, 2, 116, 118, 5, 18, 10, 2, 117, 114, 3, 2, 2, 2, 117, 118, 3, 2, 2, 2, 118, 170, 3, 2, 2, 2, 119, 120, 7, 31, 2, 2, 120, 121, 5, 20, 11, 2, 121, 122, 7, 28, 2, 2, 122, 123, 5, 18, 10, 2, 123, 170, 3, 2, 2, 2, 124, 125, 7, 32, 2, 2, 125, 126, 5, 20, 11, 2, 126, 127, 7, 28, 2, 2, 127, 128, 5, 18, 10, 2, 128, 170, 3, 2, 2, 2, 129, 130, 7, 33, 2, 2, 130, 131, 5, 22, 12, 2, 131, 132, 7, 34, 2, 2, 132, 135, 5, 22, 12, 2, 133, 134, 7, 35, 2, 2, 134, 136, 5, 22, 12, 2, 135, 133, 3, 2, 2, 2, 135, 136, 3, 2, 2, 2, 136, 137, 3, 2, 2, 2, 137, 138, 7, 28, 2, 2, 138, 139, 5, 18, 10, 2, 139, 170, 3, 2, 2, 2, 140, 141, 7, 36, 2, 2, 141, 146, 7, 74, 2, 2, 142, 143, 7, 37, 2, 2, 143, 144, 5, 32, 17, 2, 144, 145, 7, 38, 2, 2, 145, 147, 3, 2, 2, 2, 146, 142, 3, 2, 2, 2, 146, 147, 3, 2, 2, 2, 147, 148, 3, 2, 2, 2, 148, 150, 5, 14, 8, 2, 149, 151, 5, 34, 18, 2, 150, 149, 3, 2, 2, 2, 150, 151, 3, 2, 2, 2, 151, 156, 3, 2, 2, 2, 152, 153, 7, 39, 2, 2, 153, 157, 5, 18, 10, 2, 154, 155, 7, 40, 2, 2, 155, 157, 7, 3, 2, 2, 156, 152, 3, 2, 2, 2, 156, 154, 3, 2, 2, 2, 157, 170, 3, 2, 2, 2, 158, 159, 7, 41, 2, 2, 159, 160, 7, 74, 2, 2, 160, 161, 7, 39, 2, 2, 161, 163, 7, 42, 2, 2, 162, 164, 5, 16, 9, 2, 163, 162, 3, 2, 2, 2, 164, 165, 3, 2, 2, 2, 165, 163, 3, 2, 2, 2, 165, 166, 3, 2, 2, 2, 166, 167, 3, 2, 2, 2, 167, 168, 7, 43, 2, 2, 168, 170, 3, 2, 2, 2, 169, 100, 3, 2, 2, 2, 169, 119, 3, 2, 2, 2, 169, 124, 3, 2, 2, 2, 169, 129, 3, 2, 2, 2, 169, 140, 3, 2, 2, 2, 169, 158, 3, 2, 2, 2, 170, 11, 3, 2, 2, 2, 171, 172, 5, 34, 18, 2, 172, 175, 7, 74, 2, 2, 173, 174, 7, 44, 2, 2, 174, 176, 5, 20, 11, 2, 175, 173, 3, 2, 2, 2, 175, 176, 3, 2, 2, 2, 176, 13, 3, 2, 2, 2, 177, 183, 7, 45, 2, 2, 178, 179, 5, 12, 7, 2, 179, 180, 7, 26, 2, 2, 180, 182, 3, 2, 2, 2, 181, 178, 3, 2, 2, 2, 182, 185, 3, 2, 2, 2, 183, 181, 3, 2, 2, 2, 183, 184, 3, 2, 2, 2, 184, 187, 3, 2, 2, 2, 185, 183, 3, 2, 2, 2, 186, 188, 5, 12, 7, 2, 187, 186, 3, 2, 2, 2, 187, 188, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 190, 7, 46, 2, 2, 190, 15, 3, 2, 2, 2, 191, 192, 5, 34, 18, 2, 192, 195, 7, 74, 2, 2, 193, 194, 7, 44, 2, 2, 194, 196, 5, 22, 12, 2, 195, 193, 3, 2, 2, 2, 195, 196, 3, 2, 2, 2, 196, 197, 3, 2, 2, 2, 197, 198, 7, 3, 2, 2, 198, 214, 3, 2, 2, 2, 199, 200, 7, 36, 2, 2, 200, 201, 7, 74, 2, 2, 201, 203, 5, 14, 8, 2, 202, 204, 5, 34, 18, 2, 203, 202, 3, 2, 2, 2, 203, 204, 3, 2, 2, 2, 204, 205, 3, 2, 2, 2, 205, 206, 7, 39, 2, 2, 206, 207, 5, 18, 10, 2, 207, 214, 3, 2, 2, 2, 208, 209, 7, 47, 2, 2, 209, 210, 5, 14, 8, 2, 210, 211, 7, 39, 2, 2, 211, 212, 5, 18, 10, 2, 212, 214, 3, 2, 2, 2, 213, 191, 3, 2, 2, 2, 213, 199, 3, 2, 2, 2, 213, 208, 3, 2, 2, 2, 214, 17, 3, 2, 2, 2, 215, 217, 7, 42, 2, 2, 216, 218, 5, 4, 3, 2, 217, 216, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 217, 3, 2, 2, 2, 219, 220, 3, 2, 2, 2, 220, 221, 3, 2, 2, 2, 221, 222, 7, 43, 2, 2, 222, 19, 3, 2, 2, 2, 223, 224, 8, 11, 1, 2, 224, 269, 5, 30, 16, 2, 225, 226, 7, 45, 2, 2, 226, 227, 5, 22, 12, 2, 227, 228, 7, 46, 2, 2, 228, 269, 3, 2, 2, 2, 229, 235, 7, 48, 2, 2, 230, 231, 5, 20, 11, 2, 231, 232, 7, 26, 2, 2, 232, 234, 3, 2, 2, 2, 233, 230, 3, 2, 2, 2, 234, 237, 3, 2, 2, 2, 235, 233, 3, 2, 2, 2, 235, 236, 3, 2, 2, 2, 236, 239, 3, 2, 2, 2, 237, 235, 3, 2, 2, 2, 238, 240, 5, 20, 11, 2, 239, 238, 3, 2, 2, 2, 239, 240, 3, 2, 2, 2, 240, 241, 3, 2, 2, 2, 241, 269, 7, 49, 2, 2, 242, 243, 7, 48, 2, 2, 243, 245, 5, 20, 11, 2, 244, 246, 5, 26, 14, 2, 245, 244, 3, 2, 2, 2, 246, 247, 3, 2, 2, 2, 247, 245, 3, 2, 2, 2, 247, 248, 3, 2, 2, 2, 248, 249, 3, 2, 2, 2, 249, 250, 7, 49, 2, 2, 250, 269, 3, 2, 2, 2, 251, 252, 9, 4, 2, 2, 252, 269, 5, 20, 11, 19, 253, 254, 7, 62, 2, 2, 254, 269, 5, 20, 11, 8, 255, 260, 7, 65, 2, 2, 256, 257, 7, 74, 2, 2, 257, 259, 7, 26, 2, 2, 258, 256, 3, 2, 2, 2, 259, 262, 3, 2, 2, 2, 260, 258, 3, 2, 2, 2, 260, 261, 3, 2, 2, 2, 261, 264, 3, 2, 2, 2, 262, 260, 3, 2, 2, 2, 263, 265, 7, 74, 2, 2, 264, 263, 3, 2, 2, 2, 264, 265, 3, 2, 2, 2, 265, 266, 3, 2, 2, 2, 266, 267, 7, 66, 2, 2, 267, 269, 5, 20, 11, 3, 268, 223, 3, 2, 2, 2, 268, 225, 3, 2, 2, 2, 268, 229, 3, 2, 2, 2, 268, 242, 3, 2, 2, 2, 268, 251, 3, 2, 2, 2, 268, 253, 3, 2, 2, 2, 268, 255, 3, 2, 2, 2, 269, 365, 3, 2, 2, 2, 270, 271, 12, 20, 2, 2, 271, 272, 7, 11, 2, 2, 272, 364, 5, 20, 11, 20, 273, 274, 12, 18, 2, 2, 274, 275, 9, 5, 2, 2, 275, 364, 5, 20, 11, 19, 276, 277, 12, 17, 2, 2, 277, 278, 9, 6, 2, 2, 278, 364, 5, 20, 11, 18, 279, 280, 12, 16, 2, 2, 280, 281, 9, 7, 2, 2, 281, 364, 5, 20, 11, 17, 282, 283, 12, 15, 2, 2, 283, 284, 7, 19, 2, 2, 284, 364, 5, 20, 11, 16, 285, 286, 12, 14, 2, 2, 286, 287, 7, 20, 2, 2, 287, 364, 5, 20, 11, 15, 288, 289, 12, 13, 2, 2, 289, 290, 7, 21, 2, 2, 290, 364, 5, 20, 11, 14, 291, 292, 12, 12, 2, 2, 292, 293, 9, 8, 2, 2, 293, 364, 5, 20, 11, 13, 294, 295, 12, 10, 2, 2, 295, 296, 9, 9, 2, 2, 296, 364, 5, 20, 11, 11, 297, 298, 12, 9, 2, 2, 298, 299, 9, 10, 2, 2, 299, 364, 5, 20, 11, 9, 300, 301, 12, 7, 2, 2, 301, 302, 7, 63, 2, 2, 302, 364, 5, 20, 11, 7, 303, 304, 12, 6, 2, 2, 304, 305, 7, 64, 2, 2, 305, 364, 5, 20, 11, 6, 306, 307, 12, 5, 2, 2, 307, 308, 7, 22, 2, 2, 308, 364, 5, 20, 11, 5, 309, 310, 12, 4, 2, 2, 310, 311, 7, 50, 2, 2, 311, 312, 5, 20, 11, 2, 312, 313, 7, 44, 2, 2, 313, 314, 5, 20, 11, 4, 314, 364, 3, 2, 2, 2, 315, 317, 12, 25, 2, 2, 316, 318, 7, 50, 2, 2, 317, 316, 3, 2, 2, 2, 317, 318, 3, 2, 2, 2, 318, 319, 3, 2, 2, 2, 319, 320, 7, 48, 2, 2, 320, 321, 5, 22, 12, 2, 321, 322, 7, 49, 2, 2, 322, 364, 3, 2, 2, 2, 323, 324, 12, 24, 2, 2, 324, 326, 7, 48, 2, 2, 325, 327, 5, 20, 11, 2, 326, 325, 3, 2, 2, 2, 326, 327, 3, 2, 2, 2, 327, 328, 3, 2, 2, 2, 328, 330, 7, 44, 2, 2, 329, 331, 5, 20, 11, 2, 330, 329, 3, 2, 2, 2, 330, 331, 3, 2, 2, 2, 331, 336, 3, 2, 2, 2, 332, 334, 7, 44, 2, 2, 333, 335, 5, 20, 11, 2, 334, 333, 3, 2, 2, 2, 334, 335, 3, 2, 2, 2, 335, 337, 3, 2, 2, 2, 336, 332, 3, 2, 2, 2, 336, 337, 3, 2, 2, 2, 337, 338, 3, 2, 2, 2, 338, 364, 7, 49, 2, 2, 339, 341, 12, 23, 2, 2, 340, 342, 7, 50, 2, 2, 341, 340, 3, 2, 2, 2, 341, 342, 3, 2, 2, 2, 342, 343, 3, 2, 2, 2, 343, 344, 7, 51, 2, 2, 344, 364, 7, 74, 2, 2, 345, 346, 12, 22, 2, 2, 346, 352, 7, 45, 2, 2, 347, 348, 5, 28, 15, 2, 348, 349, 7, 26, 2, 2, 349, 351, 3, 2, 2, 2, 350, 347, 3, 2, 2, 2, 351, 354, 3, 2, 2, 2, 352, 350, 3, 2, 2, 2, 352, 353, 3, 2, 2, 2, 353, 356, 3, 2, 2, 2, 354, 352, 3, 2, 2, 2, 355, 357, 5, 28, 15, 2, 356, 355, 3, 2, 2, 2, 356, 357, 3, 2, 2, 2, 357, 358, 3, 2, 2, 2, 358, 364, 7, 46, 2, 2, 359, 360, 12, 21, 2, 2, 360, 364, 7, 52, 2, 2, 361, 362, 12, 11, 2, 2, 362, 364, 7, 55, 2, 2, 363, 270, 3, 2, 2, 2, 363, 273, 3, 2, 2, 2, 363, 276, 3, 2, 2, 2, 363, 279, 3, 2, 2, 2, 363, 282, 3, 2, 2, 2, 363, 285, 3, 2, 2, 2, 363, 288, 3, 2, 2, 2, 363, 291, 3, 2, 2, 2, 363, 294, 3, 2, 2, 2, 363, 297, 3, 2, 2, 2, 363, 300, 3, 2, 2, 2, 363, 303, 3, 2, 2, 2, 363, 306, 3, 2, 2, 2, 363, 309, 3, 2, 2, 2, 363, 315, 3, 2, 2, 2, 363, 323, 3, 2, 2, 2, 363, 339, 3, 2, 2, 2, 363, 345, 3, 2, 2, 2, 363, 359, 3, 2, 2, 2, 363, 361, 3, 2, 2, 2, 364, 367, 3, 2, 2, 2, 365, 363, 3, 2, 2, 2, 365, 366, 3, 2, 2, 2, 366, 21, 3, 2, 2, 2, 367, 365, 3, 2, 2, 2, 368, 369, 5, 20, 11, 2, 369, 370, 7, 26, 2, 2, 370, 372, 3, 2, 2, 2, 371, 368, 3, 2, 2, 2, 372, 375, 3, 2, 2, 2, 373, 371, 3, 2, 2, 2, 373, 374, 3, 2, 2, 2, 374, 376, 3, 2, 2, 2, 375, 373, 3, 2, 2, 2, 376, 377, 5, 20, 11, 2, 377, 23, 3, 2, 2, 2, 378, 379, 5, 22, 12, 2, 379, 380, 7, 2, 2, 3, 380, 25, 3, 2, 2, 2, 381, 382, 7, 33, 2, 2, 382, 383, 5, 22, 12, 2, 383, 384, 7, 34, 2, 2, 384, 387, 5, 22, 12, 2, 385, 386, 7, 35, 2, 2, 386, 388, 5, 22, 12, 2, 387, 385, 3, 2, 2, 2, 387, 388, 3, 2, 2, 2, 388, 392, 3, 2, 2, 2, 389, 390, 7, 27, 2, 2, 390, 392, 5, 20, 11, 2, 391, 381, 3, 2, 2, 2, 391, 389, 3, 2, 2, 2, 392, 27, 3, 2, 2, 2, 393, 394, 7, 74, 2, 2, 394, 396, 7, 10, 2, 2, 395, 393, 3, 2, 2, 2, 395, 396, 3, 2, 2, 2, 396, 397, 3, 2, 2, 2, 397, 398, 5, 20, 11, 2, 398, 29, 3, 2, 2, 2, 399, 407, 7, 70, 2, 2, 400, 407, 7, 71, 2, 2, 401, 407, 9, 11, 2, 2, 402, 407, 7, 72, 2, 2, 403, 407, 7, 73, 2, 2, 404, 407, 7, 69, 2, 2, 405, 407, 7, 74, 2, 2, 406, 399, 3, 2, 2, 2, 406, 400, 3, 2, 2, 2, 406, 401, 3, 2, 2, 2, 406, 402, 3, 2, 2, 2, 406, 403, 3, 2, 2, 2, 406, 404, 3, 2, 2, 2, 406, 405, 3, 2, 2, 2, 407, 31, 3, 2, 2, 2, 408, 409, 7, 74, 2, 2, 409, 411, 7, 26, 2, 2, 410, 408, 3, 2, 2, 2, 411, 414, 3, 2, 2, 2, 412, 410, 3, 2, 2, 2, 412, 413, 3, 2, 2, 2, 413, 415, 3, 2, 2, 2, 414, 412, 3, 2, 2, 2, 415, 416, 7, 74, 2, 2, 416, 33, 3, 2, 2, 2, 417, 418, 8, 18, 1, 2, 418, 430, 7, 74, 2, 2, 419, 420, 7, 45, 2, 2, 420, 421, 5, 34, 18, 2, 421, 422, 7, 46, 2, 2, 422, 430, 3, 2, 2, 2, 423, 424, 7, 48, 2, 2, 424, 425, 5, 34, 18, 2, 425, 426, 7, 49, 2, 2, 426, 430, 3, 2, 2, 2, 427, 428, 7, 66, 2, 2, 428, 430, 5, 34, 18, 3, 429, 417, 3, 2, 2, 2, 429, 419, 3, 2, 2, 2, 429, 423, 3, 2, 2, 2, 429, 427, 3, 2, 2, 2, 430, 441, 3, 2, 2, 2, 431, 432, 12, 5, 2, 2, 432, 433, 7, 12, 2, 2, 433, 440, 5, 34, 18, 5, 434, 435, 12, 4, 2, 2, 435, 436, 7, 66, 2, 2, 436, 440, 5, 34, 18, 4, 437, 438, 12, 6, 2, 2, 438, 440, 7, 50, 2, 2, 439, 431, 3, 2, 2, 2, 439, 434, 3, 2, 2, 2, 439, 437, 3, 2, 2, 2, 440, 443, 3, 2, 2, 2, 441, 439, 3, 2, 2, 2, 441, 442, 3, 2, 2, 2, 442, 35, 3, 2, 2, 2, 443, 441, 3, 2, 2, 2, 51, 39, 48, 58, 63, 69, 76, 88, 90, 97, 111, 117, 135, 146, 150, 156, 165, 169, 175, 183, 187, 195, 203, 213, 219, 235, 239, 247, 260, 264, 268, 317, 326, 330, 334, 336, 341, 352, 356, 363, 365, 373, 387, 391, 395, 406, 412, 429, 439, 441] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 77, 451, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 3, 2, 7, 2, 38, 10, 2, 12, 2, 14, 2, 41, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 49, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 59, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 64, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 70, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 75, 10, 4, 12, 4, 14, 4, 78, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 89, 10, 4, 5, 4, 91, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 96, 10, 5, 12, 5, 14, 5, 99, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 110, 10, 6, 12, 6, 14, 6, 113, 11, 6, 3, 6, 3, 6, 3, 6, 5, 6, 118, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 136, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 147, 10, 6, 3, 6, 3, 6, 5, 6, 151, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 157, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 165, 10, 6, 3, 6, 3, 6, 3, 6, 6, 6, 170, 10, 6, 13, 6, 14, 6, 171, 3, 6, 3, 6, 5, 6, 176, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 182, 10, 7, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 188, 10, 8, 12, 8, 14, 8, 191, 11, 8, 3, 8, 5, 8, 194, 10, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 202, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 210, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 220, 10, 9, 3, 10, 3, 10, 6, 10, 224, 10, 10, 13, 10, 14, 10, 225, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 240, 10, 11, 12, 11, 14, 11, 243, 11, 11, 3, 11, 5, 11, 246, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 6, 11, 252, 10, 11, 13, 11, 14, 11, 253, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 265, 10, 11, 12, 11, 14, 11, 268, 11, 11, 3, 11, 5, 11, 271, 10, 11, 3, 11, 3, 11, 5, 11, 275, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 324, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 333, 10, 11, 3, 11, 3, 11, 5, 11, 337, 10, 11, 3, 11, 3, 11, 5, 11, 341, 10, 11, 5, 11, 343, 10, 11, 3, 11, 3, 11, 3, 11, 5, 11, 348, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 357, 10, 11, 12, 11, 14, 11, 360, 11, 11, 3, 11, 5, 11, 363, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 370, 10, 11, 12, 11, 14, 11, 373, 11, 11, 3, 12, 3, 12, 3, 12, 7, 12, 378, 10, 12, 12, 12, 14, 12, 381, 11, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 394, 10, 14, 3, 14, 3, 14, 5, 14, 398, 10, 14, 3, 15, 3, 15, 5, 15, 402, 10, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 413, 10, 16, 3, 17, 3, 17, 7, 17, 417, 10, 17, 12, 17, 14, 17, 420, 11, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 5, 18, 436, 10, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 7, 18, 446, 10, 18, 12, 18, 14, 18, 449, 11, 18, 3, 18, 2, 4, 20, 34, 19, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 2, 12, 3, 2, 11, 22, 3, 2, 23, 24, 4, 2, 15, 16, 53, 53, 3, 2, 12, 14, 3, 2, 15, 16, 3, 2, 17, 18, 3, 2, 54, 55, 3, 2, 56, 57, 4, 2, 37, 38, 58, 61, 3, 2, 67, 68, 2, 527, 2, 39, 3, 2, 2, 2, 4, 48, 3, 2, 2, 2, 6, 90, 3, 2, 2, 2, 8, 92, 3, 2, 2, 2, 10, 175, 3, 2, 2, 2, 12, 177, 3, 2, 2, 2, 14, 183, 3, 2, 2, 2, 16, 219, 3, 2, 2, 2, 18, 221, 3, 2, 2, 2, 20, 274, 3, 2, 2, 2, 22, 379, 3, 2, 2, 2, 24, 384, 3, 2, 2, 2, 26, 397, 3, 2, 2, 2, 28, 401, 3, 2, 2, 2, 30, 412, 3, 2, 2, 2, 32, 418, 3, 2, 2, 2, 34, 435, 3, 2, 2, 2, 36, 38, 5, 4, 3, 2, 37, 36, 3, 2, 2, 2, 38, 41, 3, 2, 2, 2, 39, 37, 3, 2, 2, 2, 39, 40, 3, 2, 2, 2, 40, 42, 3, 2, 2, 2, 41, 39, 3, 2, 2, 2, 42, 43, 7, 2, 2, 3, 43, 3, 3, 2, 2, 2, 44, 45, 5, 6, 4, 2, 45, 46, 7, 3, 2, 2, 46, 49, 3, 2, 2, 2, 47, 49, 5, 10, 6, 2, 48, 44, 3, 2, 2, 2, 48, 47, 3, 2, 2, 2, 49, 5, 3, 2, 2, 2, 50, 51, 7, 4, 2, 2, 51, 58, 7, 74, 2, 2, 52, 53, 7, 5, 2, 2, 53, 59, 5, 32, 17, 2, 54, 55, 7, 6, 2, 2, 55, 59, 5, 32, 17, 2, 56, 57, 7, 7, 2, 2, 57, 59, 7, 74, 2, 2, 58, 52, 3, 2, 2, 2, 58, 54, 3, 2, 2, 2, 58, 56, 3, 2, 2, 2, 58, 59, 3, 2, 2, 2, 59, 91, 3, 2, 2, 2, 60, 91, 7, 8, 2, 2, 61, 63, 7, 9, 2, 2, 62, 64, 5, 22, 12, 2, 63, 62, 3, 2, 2, 2, 63, 64, 3, 2, 2, 2, 64, 91, 3, 2, 2, 2, 65, 66, 5, 34, 18, 2, 66, 69, 7, 74, 2, 2, 67, 68, 7, 10, 2, 2, 68, 70, 5, 22, 12, 2, 69, 67, 3, 2, 2, 2, 69, 70, 3, 2, 2, 2, 70, 91, 3, 2, 2, 2, 71, 72, 5, 8, 5, 2, 72, 73, 7, 10, 2, 2, 73, 75, 3, 2, 2, 2, 74, 71, 3, 2, 2, 2, 75, 78, 3, 2, 2, 2, 76, 74, 3, 2, 2, 2, 76, 77, 3, 2, 2, 2, 77, 79, 3, 2, 2, 2, 78, 76, 3, 2, 2, 2, 79, 91, 5, 22, 12, 2, 80, 81, 5, 20, 11, 2, 81, 82, 9, 2, 2, 2, 82, 83, 7, 10, 2, 2, 83, 84, 5, 20, 11, 2, 84, 91, 3, 2, 2, 2, 85, 91, 9, 3, 2, 2, 86, 88, 7, 25, 2, 2, 87, 89, 5, 22, 12, 2, 88, 87, 3, 2, 2, 2, 88, 89, 3, 2, 2, 2, 89, 91, 3, 2, 2, 2, 90, 50, 3, 2, 2, 2, 90, 60, 3, 2, 2, 2, 90, 61, 3, 2, 2, 2, 90, 65, 3, 2, 2, 2, 90, 76, 3, 2, 2, 2, 90, 80, 3, 2, 2, 2, 90, 85, 3, 2, 2, 2, 90, 86, 3, 2, 2, 2, 91, 7, 3, 2, 2, 2, 92, 97, 5, 20, 11, 2, 93, 94, 7, 26, 2, 2, 94, 96, 5, 20, 11, 2, 95, 93, 3, 2, 2, 2, 96, 99, 3, 2, 2, 2, 97, 95, 3, 2, 2, 2, 97, 98, 3, 2, 2, 2, 98, 9, 3, 2, 2, 2, 99, 97, 3, 2, 2, 2, 100, 101, 7, 27, 2, 2, 101, 102, 5, 20, 11, 2, 102, 103, 7, 28, 2, 2, 103, 111, 5, 18, 10, 2, 104, 105, 7, 29, 2, 2, 105, 106, 5, 20, 11, 2, 106, 107, 7, 28, 2, 2, 107, 108, 5, 18, 10, 2, 108, 110, 3, 2, 2, 2, 109, 104, 3, 2, 2, 2, 110, 113, 3, 2, 2, 2, 111, 109, 3, 2, 2, 2, 111, 112, 3, 2, 2, 2, 112, 117, 3, 2, 2, 2, 113, 111, 3, 2, 2, 2, 114, 115, 7, 30, 2, 2, 115, 116, 7, 28, 2, 2, 116, 118, 5, 18, 10, 2, 117, 114, 3, 2, 2, 2, 117, 118, 3, 2, 2, 2, 118, 176, 3, 2, 2, 2, 119, 120, 7, 31, 2, 2, 120, 121, 5, 20, 11, 2, 121, 122, 7, 28, 2, 2, 122, 123, 5, 18, 10, 2, 123, 176, 3, 2, 2, 2, 124, 125, 7, 32, 2, 2, 125, 126, 5, 20, 11, 2, 126, 127, 7, 28, 2, 2, 127, 128, 5, 18, 10, 2, 128, 176, 3, 2, 2, 2, 129, 130, 7, 33, 2, 2, 130, 131, 5, 22, 12, 2, 131, 132, 7, 34, 2, 2, 132, 135, 5, 22, 12, 2, 133, 134, 7, 35, 2, 2, 134, 136, 5, 22, 12, 2, 135, 133, 3, 2, 2, 2, 135, 136, 3, 2, 2, 2, 136, 137, 3, 2, 2, 2, 137, 138, 7, 28, 2, 2, 138, 139, 5, 18, 10, 2, 139, 176, 3, 2, 2, 2, 140, 141, 7, 36, 2, 2, 141, 146, 7, 74, 2, 2, 142, 143, 7, 37, 2, 2, 143, 144, 5, 32, 17, 2, 144, 145, 7, 38, 2, 2, 145, 147, 3, 2, 2, 2, 146, 142, 3, 2, 2, 2, 146, 147, 3, 2, 2, 2, 147, 148, 3, 2, 2, 2, 148, 150, 5, 14, 8, 2, 149, 151, 5, 34, 18, 2, 150, 149, 3, 2, 2, 2, 150, 151, 3, 2, 2, 2, 151, 156, 3, 2, 2, 2, 152, 153, 7, 39, 2, 2, 153, 157, 5, 18, 10, 2, 154, 155, 7, 40, 2, 2, 155, 157, 7, 3, 2, 2, 156, 152, 3, 2, 2, 2, 156, 154, 3, 2, 2, 2, 157, 176, 3, 2, 2, 2, 158, 159, 7, 41, 2, 2, 159, 164, 7, 74, 2, 2, 160, 161, 7, 42, 2, 2, 161, 162, 5, 34, 18, 2, 162, 163, 7, 43, 2, 2, 163, 165, 3, 2, 2, 2, 164, 160, 3, 2, 2, 2, 164, 165, 3, 2, 2, 2, 165, 166, 3, 2, 2, 2, 166, 167, 7, 39, 2, 2, 167, 169, 7, 44, 2, 2, 168, 170, 5, 16, 9, 2, 169, 168, 3, 2, 2, 2, 170, 171, 3, 2, 2, 2, 171, 169, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 173, 3, 2, 2, 2, 173, 174, 7, 45, 2, 2, 174, 176, 3, 2, 2, 2, 175, 100, 3, 2, 2, 2, 175, 119, 3, 2, 2, 2, 175, 124, 3, 2, 2, 2, 175, 129, 3, 2, 2, 2, 175, 140, 3, 2, 2, 2, 175, 158, 3, 2, 2, 2, 176, 11, 3, 2, 2, 2, 177, 178, 5, 34, 18, 2, 178, 181, 7, 74, 2, 2, 179, 180, 7, 46, 2, 2, 180, 182, 5, 20, 11, 2, 181, 179, 3, 2, 2, 2, 181, 182, 3, 2, 2, 2, 182, 13, 3, 2, 2, 2, 183, 189, 7, 42, 2, 2, 184, 185, 5, 12, 7, 2, 185, 186, 7, 26, 2, 2, 186, 188, 3, 2, 2, 2, 187, 184, 3, 2, 2, 2, 188, 191, 3, 2, 2, 2, 189, 187, 3, 2, 2, 2, 189, 190, 3, 2, 2, 2, 190, 193, 3, 2, 2, 2, 191, 189, 3, 2, 2, 2, 192, 194, 5, 12, 7, 2, 193, 192, 3, 2, 2, 2, 193, 194, 3, 2, 2, 2, 194, 195, 3, 2, 2, 2, 195, 196, 7, 43, 2, 2, 196, 15, 3, 2, 2, 2, 197, 198, 5, 34, 18, 2, 198, 201, 7, 74, 2, 2, 199, 200, 7, 46, 2, 2, 200, 202, 5, 22, 12, 2, 201, 199, 3, 2, 2, 2, 201, 202, 3, 2, 2, 2, 202, 203, 3, 2, 2, 2, 203, 204, 7, 3, 2, 2, 204, 220, 3, 2, 2, 2, 205, 206, 7, 36, 2, 2, 206, 207, 7, 74, 2, 2, 207, 209, 5, 14, 8, 2, 208, 210, 5, 34, 18, 2, 209, 208, 3, 2, 2, 2, 209, 210, 3, 2, 2, 2, 210, 211, 3, 2, 2, 2, 211, 212, 7, 39, 2, 2, 212, 213, 5, 18, 10, 2, 213, 220, 3, 2, 2, 2, 214, 215, 7, 47, 2, 2, 215, 216, 5, 14, 8, 2, 216, 217, 7, 39, 2, 2, 217, 218, 5, 18, 10, 2, 218, 220, 3, 2, 2, 2, 219, 197, 3, 2, 2, 2, 219, 205, 3, 2, 2, 2, 219, 214, 3, 2, 2, 2, 220, 17, 3, 2, 2, 2, 221, 223, 7, 44, 2, 2, 222, 224, 5, 4, 3, 2, 223, 222, 3, 2, 2, 2, 224, 225, 3, 2, 2, 2, 225, 223, 3, 2, 2, 2, 225, 226, 3, 2, 2, 2, 226, 227, 3, 2, 2, 2, 227, 228, 7, 45, 2, 2, 228, 19, 3, 2, 2, 2, 229, 230, 8, 11, 1, 2, 230, 275, 5, 30, 16, 2, 231, 232, 7, 42, 2, 2, 232, 233, 5, 22, 12, 2, 233, 234, 7, 43, 2, 2, 234, 275, 3, 2, 2, 2, 235, 241, 7, 48, 2, 2, 236, 237, 5, 20, 11, 2, 237, 238, 7, 26, 2, 2, 238, 240, 3, 2, 2, 2, 239, 236, 3, 2, 2, 2, 240, 243, 3, 2, 2, 2, 241, 239, 3, 2, 2, 2, 241, 242, 3, 2, 2, 2, 242, 245, 3, 2, 2, 2, 243, 241, 3, 2, 2, 2, 244, 246, 5, 20, 11, 2, 245, 244, 3, 2, 2, 2, 245, 246, 3, 2, 2, 2, 246, 247, 3, 2, 2, 2, 247, 275, 7, 49, 2, 2, 248, 249, 7, 48, 2, 2, 249, 251, 5, 20, 11, 2, 250, 252, 5, 26, 14, 2, 251, 250, 3, 2, 2, 2, 252, 253, 3, 2, 2, 2, 253, 251, 3, 2, 2, 2, 253, 254, 3, 2, 2, 2, 254, 255, 3, 2, 2, 2, 255, 256, 7, 49, 2, 2, 256, 275, 3, 2, 2, 2, 257, 258, 9, 4, 2, 2, 258, 275, 5, 20, 11, 19, 259, 260, 7, 62, 2, 2, 260, 275, 5, 20, 11, 8, 261, 266, 7, 65, 2, 2, 262, 263, 7, 74, 2, 2, 263, 265, 7, 26, 2, 2, 264, 262, 3, 2, 2, 2, 265, 268, 3, 2, 2, 2, 266, 264, 3, 2, 2, 2, 266, 267, 3, 2, 2, 2, 267, 270, 3, 2, 2, 2, 268, 266, 3, 2, 2, 2, 269, 271, 7, 74, 2, 2, 270, 269, 3, 2, 2, 2, 270, 271, 3, 2, 2, 2, 271, 272, 3, 2, 2, 2, 272, 273, 7, 66, 2, 2, 273, 275, 5, 20, 11, 3, 274, 229, 3, 2, 2, 2, 274, 231, 3, 2, 2, 2, 274, 235, 3, 2, 2, 2, 274, 248, 3, 2, 2, 2, 274, 257, 3, 2, 2, 2, 274, 259, 3, 2, 2, 2, 274, 261, 3, 2, 2, 2, 275, 371, 3, 2, 2, 2, 276, 277, 12, 20, 2, 2, 277, 278, 7, 11, 2, 2, 278, 370, 5, 20, 11, 20, 279, 280, 12, 18, 2, 2, 280, 281, 9, 5, 2, 2, 281, 370, 5, 20, 11, 19, 282, 283, 12, 17, 2, 2, 283, 284, 9, 6, 2, 2, 284, 370, 5, 20, 11, 18, 285, 286, 12, 16, 2, 2, 286, 287, 9, 7, 2, 2, 287, 370, 5, 20, 11, 17, 288, 289, 12, 15, 2, 2, 289, 290, 7, 19, 2, 2, 290, 370, 5, 20, 11, 16, 291, 292, 12, 14, 2, 2, 292, 293, 7, 20, 2, 2, 293, 370, 5, 20, 11, 15, 294, 295, 12, 13, 2, 2, 295, 296, 7, 21, 2, 2, 296, 370, 5, 20, 11, 14, 297, 298, 12, 12, 2, 2, 298, 299, 9, 8, 2, 2, 299, 370, 5, 20, 11, 13, 300, 301, 12, 10, 2, 2, 301, 302, 9, 9, 2, 2, 302, 370, 5, 20, 11, 11, 303, 304, 12, 9, 2, 2, 304, 305, 9, 10, 2, 2, 305, 370, 5, 20, 11, 9, 306, 307, 12, 7, 2, 2, 307, 308, 7, 63, 2, 2, 308, 370, 5, 20, 11, 7, 309, 310, 12, 6, 2, 2, 310, 311, 7, 64, 2, 2, 311, 370, 5, 20, 11, 6, 312, 313, 12, 5, 2, 2, 313, 314, 7, 22, 2, 2, 314, 370, 5, 20, 11, 5, 315, 316, 12, 4, 2, 2, 316, 317, 7, 50, 2, 2, 317, 318, 5, 20, 11, 2, 318, 319, 7, 46, 2, 2, 319, 320, 5, 20, 11, 4, 320, 370, 3, 2, 2, 2, 321, 323, 12, 25, 2, 2, 322, 324, 7, 50, 2, 2, 323, 322, 3, 2, 2, 2, 323, 324, 3, 2, 2, 2, 324, 325, 3, 2, 2, 2, 325, 326, 7, 48, 2, 2, 326, 327, 5, 22, 12, 2, 327, 328, 7, 49, 2, 2, 328, 370, 3, 2, 2, 2, 329, 330, 12, 24, 2, 2, 330, 332, 7, 48, 2, 2, 331, 333, 5, 20, 11, 2, 332, 331, 3, 2, 2, 2, 332, 333, 3, 2, 2, 2, 333, 334, 3, 2, 2, 2, 334, 336, 7, 46, 2, 2, 335, 337, 5, 20, 11, 2, 336, 335, 3, 2, 2, 2, 336, 337, 3, 2, 2, 2, 337, 342, 3, 2, 2, 2, 338, 340, 7, 46, 2, 2, 339, 341, 5, 20, 11, 2, 340, 339, 3, 2, 2, 2, 340, 341, 3, 2, 2, 2, 341, 343, 3, 2, 2, 2, 342, 338, 3, 2, 2, 2, 342, 343, 3, 2, 2, 2, 343, 344, 3, 2, 2, 2, 344, 370, 7, 49, 2, 2, 345, 347, 12, 23, 2, 2, 346, 348, 7, 50, 2, 2, 347, 346, 3, 2, 2, 2, 347, 348, 3, 2, 2, 2, 348, 349, 3, 2, 2, 2, 349, 350, 7, 51, 2, 2, 350, 370, 7, 74, 2, 2, 351, 352, 12, 22, 2, 2, 352, 358, 7, 42, 2, 2, 353, 354, 5, 28, 15, 2, 354, 355, 7, 26, 2, 2, 355, 357, 3, 2, 2, 2, 356, 353, 3, 2, 2, 2, 357, 360, 3, 2, 2, 2, 358, 356, 3, 2, 2, 2, 358, 359, 3, 2, 2, 2, 359, 362, 3, 2, 2, 2, 360, 358, 3, 2, 2, 2, 361, 363, 5, 28, 15, 2, 362, 361, 3, 2, 2, 2, 362, 363, 3, 2, 2, 2, 363, 364, 3, 2, 2, 2, 364, 370, 7, 43, 2, 2, 365, 366, 12, 21, 2, 2, 366, 370, 7, 52, 2, 2, 367, 368, 12, 11, 2, 2, 368, 370, 7, 55, 2, 2, 369, 276, 3, 2, 2, 2, 369, 279, 3, 2, 2, 2, 369, 282, 3, 2, 2, 2, 369, 285, 3, 2, 2, 2, 369, 288, 3, 2, 2, 2, 369, 291, 3, 2, 2, 2, 369, 294, 3, 2, 2, 2, 369, 297, 3, 2, 2, 2, 369, 300, 3, 2, 2, 2, 369, 303, 3, 2, 2, 2, 369, 306, 3, 2, 2, 2, 369, 309, 3, 2, 2, 2, 369, 312, 3, 2, 2, 2, 369, 315, 3, 2, 2, 2, 369, 321, 3, 2, 2, 2, 369, 329, 3, 2, 2, 2, 369, 345, 3, 2, 2, 2, 369, 351, 3, 2, 2, 2, 369, 365, 3, 2, 2, 2, 369, 367, 3, 2, 2, 2, 370, 373, 3, 2, 2, 2, 371, 369, 3, 2, 2, 2, 371, 372, 3, 2, 2, 2, 372, 21, 3, 2, 2, 2, 373, 371, 3, 2, 2, 2, 374, 375, 5, 20, 11, 2, 375, 376, 7, 26, 2, 2, 376, 378, 3, 2, 2, 2, 377, 374, 3, 2, 2, 2, 378, 381, 3, 2, 2, 2, 379, 377, 3, 2, 2, 2, 379, 380, 3, 2, 2, 2, 380, 382, 3, 2, 2, 2, 381, 379, 3, 2, 2, 2, 382, 383, 5, 20, 11, 2, 383, 23, 3, 2, 2, 2, 384, 385, 5, 22, 12, 2, 385, 386, 7, 2, 2, 3, 386, 25, 3, 2, 2, 2, 387, 388, 7, 33, 2, 2, 388, 389, 5, 22, 12, 2, 389, 390, 7, 34, 2, 2, 390, 393, 5, 22, 12, 2, 391, 392, 7, 35, 2, 2, 392, 394, 5, 22, 12, 2, 393, 391, 3, 2, 2, 2, 393, 394, 3, 2, 2, 2, 394, 398, 3, 2, 2, 2, 395, 396, 7, 27, 2, 2, 396, 398, 5, 20, 11, 2, 397, 387, 3, 2, 2, 2, 397, 395, 3, 2, 2, 2, 398, 27, 3, 2, 2, 2, 399, 400, 7, 74, 2, 2, 400, 402, 7, 10, 2, 2, 401, 399, 3, 2, 2, 2, 401, 402, 3, 2, 2, 2, 402, 403, 3, 2, 2, 2, 403, 404, 5, 20, 11, 2, 404, 29, 3, 2, 2, 2, 405, 413, 7, 70, 2, 2, 406, 413, 7, 71, 2, 2, 407, 413, 9, 11, 2, 2, 408, 413, 7, 72, 2, 2, 409, 413, 7, 73, 2, 2, 410, 413, 7, 69, 2, 2, 411, 413, 7, 74, 2, 2, 412, 405, 3, 2, 2, 2, 412, 406, 3, 2, 2, 2, 412, 407, 3, 2, 2, 2, 412, 408, 3, 2, 2, 2, 412, 409, 3, 2, 2, 2, 412, 410, 3, 2, 2, 2, 412, 411, 3, 2, 2, 2, 413, 31, 3, 2, 2, 2, 414, 415, 7, 74, 2, 2, 415, 417, 7, 26, 2, 2, 416, 414, 3, 2, 2, 2, 417, 420, 3, 2, 2, 2, 418, 416, 3, 2, 2, 2, 418, 419, 3, 2, 2, 2, 419, 421, 3, 2, 2, 2, 420, 418, 3, 2, 2, 2, 421, 422, 7, 74, 2, 2, 422, 33, 3, 2, 2, 2, 423, 424, 8, 18, 1, 2, 424, 436, 7, 74, 2, 2, 425, 426, 7, 42, 2, 2, 426, 427, 5, 34, 18, 2, 427, 428, 7, 43, 2, 2, 428, 436, 3, 2, 2, 2, 429, 430, 7, 48, 2, 2, 430, 431, 5, 34, 18, 2, 431, 432, 7, 49, 2, 2, 432, 436, 3, 2, 2, 2, 433, 434, 7, 66, 2, 2, 434, 436, 5, 34, 18, 3, 435, 423, 3, 2, 2, 2, 435, 425, 3, 2, 2, 2, 435, 429, 3, 2, 2, 2, 435, 433, 3, 2, 2, 2, 436, 447, 3, 2, 2, 2, 437, 438, 12, 5, 2, 2, 438, 439, 7, 12, 2, 2, 439, 446, 5, 34, 18, 5, 440, 441, 12, 4, 2, 2, 441, 442, 7, 66, 2, 2, 442, 446, 5, 34, 18, 4, 443, 444, 12, 6, 2, 2, 444, 446, 7, 50, 2, 2, 445, 437, 3, 2, 2, 2, 445, 440, 3, 2, 2, 2, 445, 443, 3, 2, 2, 2, 446, 449, 3, 2, 2, 2, 447, 445, 3, 2, 2, 2, 447, 448, 3, 2, 2, 2, 448, 35, 3, 2, 2, 2, 449, 447, 3, 2, 2, 2, 52, 39, 48, 58, 63, 69, 76, 88, 90, 97, 111, 117, 135, 146, 150, 156, 164, 171, 175, 181, 189, 193, 201, 209, 219, 225, 241, 245, 253, 266, 270, 274, 323, 332, 336, 340, 342, 347, 358, 362, 369, 371, 379, 393, 397, 401, 412, 418, 435, 445, 447] \ No newline at end of file diff --git a/src/antlr/Pyxell.tokens b/src/antlr/Pyxell.tokens index 6d647978..b6572d61 100644 --- a/src/antlr/Pyxell.tokens +++ b/src/antlr/Pyxell.tokens @@ -112,11 +112,11 @@ ERR=75 'def'=37 'extern'=38 'class'=39 -'{'=40 -'}'=41 -':'=42 -'('=43 -')'=44 +'('=40 +')'=41 +'{'=42 +'}'=43 +':'=44 'constructor'=45 '['=46 ']'=47 diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp index e1edc023..36e8420c 100644 --- a/src/antlr/PyxellLexer.interp +++ b/src/antlr/PyxellLexer.interp @@ -39,11 +39,11 @@ null 'def' 'extern' 'class' +'(' +')' '{' '}' ':' -'(' -')' 'constructor' '[' ']' @@ -242,4 +242,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 77, 494, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 6, 69, 411, 10, 69, 13, 69, 14, 69, 412, 3, 70, 6, 70, 416, 10, 70, 13, 70, 14, 70, 417, 3, 70, 3, 70, 6, 70, 422, 10, 70, 13, 70, 14, 70, 423, 3, 70, 3, 70, 5, 70, 428, 10, 70, 3, 70, 6, 70, 431, 10, 70, 13, 70, 14, 70, 432, 5, 70, 435, 10, 70, 3, 71, 3, 71, 3, 71, 3, 71, 7, 71, 441, 10, 71, 12, 71, 14, 71, 444, 11, 71, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 72, 7, 72, 452, 10, 72, 12, 72, 14, 72, 455, 11, 72, 3, 72, 3, 72, 3, 73, 3, 73, 7, 73, 461, 10, 73, 12, 73, 14, 73, 464, 11, 73, 3, 74, 3, 74, 3, 75, 3, 75, 3, 76, 3, 76, 3, 76, 5, 76, 473, 10, 76, 3, 77, 3, 77, 3, 77, 3, 77, 7, 77, 479, 10, 77, 12, 77, 14, 77, 482, 11, 77, 3, 77, 3, 77, 3, 78, 6, 78, 487, 10, 78, 13, 78, 14, 78, 488, 3, 78, 3, 78, 3, 79, 3, 79, 2, 2, 80, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 74, 147, 2, 149, 2, 151, 2, 153, 75, 155, 76, 157, 77, 3, 2, 11, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 3, 2, 41, 41, 4, 2, 12, 12, 14, 15, 5, 2, 11, 12, 15, 15, 34, 34, 2, 505, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 3, 159, 3, 2, 2, 2, 5, 161, 3, 2, 2, 2, 7, 165, 3, 2, 2, 2, 9, 170, 3, 2, 2, 2, 11, 177, 3, 2, 2, 2, 13, 180, 3, 2, 2, 2, 15, 185, 3, 2, 2, 2, 17, 191, 3, 2, 2, 2, 19, 193, 3, 2, 2, 2, 21, 195, 3, 2, 2, 2, 23, 197, 3, 2, 2, 2, 25, 199, 3, 2, 2, 2, 27, 201, 3, 2, 2, 2, 29, 203, 3, 2, 2, 2, 31, 205, 3, 2, 2, 2, 33, 208, 3, 2, 2, 2, 35, 211, 3, 2, 2, 2, 37, 213, 3, 2, 2, 2, 39, 215, 3, 2, 2, 2, 41, 217, 3, 2, 2, 2, 43, 220, 3, 2, 2, 2, 45, 226, 3, 2, 2, 2, 47, 235, 3, 2, 2, 2, 49, 242, 3, 2, 2, 2, 51, 244, 3, 2, 2, 2, 53, 247, 3, 2, 2, 2, 55, 250, 3, 2, 2, 2, 57, 255, 3, 2, 2, 2, 59, 260, 3, 2, 2, 2, 61, 266, 3, 2, 2, 2, 63, 272, 3, 2, 2, 2, 65, 276, 3, 2, 2, 2, 67, 279, 3, 2, 2, 2, 69, 284, 3, 2, 2, 2, 71, 289, 3, 2, 2, 2, 73, 291, 3, 2, 2, 2, 75, 293, 3, 2, 2, 2, 77, 297, 3, 2, 2, 2, 79, 304, 3, 2, 2, 2, 81, 310, 3, 2, 2, 2, 83, 312, 3, 2, 2, 2, 85, 314, 3, 2, 2, 2, 87, 316, 3, 2, 2, 2, 89, 318, 3, 2, 2, 2, 91, 320, 3, 2, 2, 2, 93, 332, 3, 2, 2, 2, 95, 334, 3, 2, 2, 2, 97, 336, 3, 2, 2, 2, 99, 338, 3, 2, 2, 2, 101, 340, 3, 2, 2, 2, 103, 342, 3, 2, 2, 2, 105, 344, 3, 2, 2, 2, 107, 347, 3, 2, 2, 2, 109, 351, 3, 2, 2, 2, 111, 354, 3, 2, 2, 2, 113, 360, 3, 2, 2, 2, 115, 363, 3, 2, 2, 2, 117, 366, 3, 2, 2, 2, 119, 369, 3, 2, 2, 2, 121, 372, 3, 2, 2, 2, 123, 376, 3, 2, 2, 2, 125, 380, 3, 2, 2, 2, 127, 383, 3, 2, 2, 2, 129, 390, 3, 2, 2, 2, 131, 393, 3, 2, 2, 2, 133, 398, 3, 2, 2, 2, 135, 404, 3, 2, 2, 2, 137, 410, 3, 2, 2, 2, 139, 415, 3, 2, 2, 2, 141, 436, 3, 2, 2, 2, 143, 447, 3, 2, 2, 2, 145, 458, 3, 2, 2, 2, 147, 465, 3, 2, 2, 2, 149, 467, 3, 2, 2, 2, 151, 472, 3, 2, 2, 2, 153, 474, 3, 2, 2, 2, 155, 486, 3, 2, 2, 2, 157, 492, 3, 2, 2, 2, 159, 160, 7, 61, 2, 2, 160, 4, 3, 2, 2, 2, 161, 162, 7, 119, 2, 2, 162, 163, 7, 117, 2, 2, 163, 164, 7, 103, 2, 2, 164, 6, 3, 2, 2, 2, 165, 166, 7, 113, 2, 2, 166, 167, 7, 112, 2, 2, 167, 168, 7, 110, 2, 2, 168, 169, 7, 123, 2, 2, 169, 8, 3, 2, 2, 2, 170, 171, 7, 106, 2, 2, 171, 172, 7, 107, 2, 2, 172, 173, 7, 102, 2, 2, 173, 174, 7, 107, 2, 2, 174, 175, 7, 112, 2, 2, 175, 176, 7, 105, 2, 2, 176, 10, 3, 2, 2, 2, 177, 178, 7, 99, 2, 2, 178, 179, 7, 117, 2, 2, 179, 12, 3, 2, 2, 2, 180, 181, 7, 117, 2, 2, 181, 182, 7, 109, 2, 2, 182, 183, 7, 107, 2, 2, 183, 184, 7, 114, 2, 2, 184, 14, 3, 2, 2, 2, 185, 186, 7, 114, 2, 2, 186, 187, 7, 116, 2, 2, 187, 188, 7, 107, 2, 2, 188, 189, 7, 112, 2, 2, 189, 190, 7, 118, 2, 2, 190, 16, 3, 2, 2, 2, 191, 192, 7, 63, 2, 2, 192, 18, 3, 2, 2, 2, 193, 194, 7, 96, 2, 2, 194, 20, 3, 2, 2, 2, 195, 196, 7, 44, 2, 2, 196, 22, 3, 2, 2, 2, 197, 198, 7, 49, 2, 2, 198, 24, 3, 2, 2, 2, 199, 200, 7, 39, 2, 2, 200, 26, 3, 2, 2, 2, 201, 202, 7, 45, 2, 2, 202, 28, 3, 2, 2, 2, 203, 204, 7, 47, 2, 2, 204, 30, 3, 2, 2, 2, 205, 206, 7, 62, 2, 2, 206, 207, 7, 62, 2, 2, 207, 32, 3, 2, 2, 2, 208, 209, 7, 64, 2, 2, 209, 210, 7, 64, 2, 2, 210, 34, 3, 2, 2, 2, 211, 212, 7, 40, 2, 2, 212, 36, 3, 2, 2, 2, 213, 214, 7, 38, 2, 2, 214, 38, 3, 2, 2, 2, 215, 216, 7, 126, 2, 2, 216, 40, 3, 2, 2, 2, 217, 218, 7, 65, 2, 2, 218, 219, 7, 65, 2, 2, 219, 42, 3, 2, 2, 2, 220, 221, 7, 100, 2, 2, 221, 222, 7, 116, 2, 2, 222, 223, 7, 103, 2, 2, 223, 224, 7, 99, 2, 2, 224, 225, 7, 109, 2, 2, 225, 44, 3, 2, 2, 2, 226, 227, 7, 101, 2, 2, 227, 228, 7, 113, 2, 2, 228, 229, 7, 112, 2, 2, 229, 230, 7, 118, 2, 2, 230, 231, 7, 107, 2, 2, 231, 232, 7, 112, 2, 2, 232, 233, 7, 119, 2, 2, 233, 234, 7, 103, 2, 2, 234, 46, 3, 2, 2, 2, 235, 236, 7, 116, 2, 2, 236, 237, 7, 103, 2, 2, 237, 238, 7, 118, 2, 2, 238, 239, 7, 119, 2, 2, 239, 240, 7, 116, 2, 2, 240, 241, 7, 112, 2, 2, 241, 48, 3, 2, 2, 2, 242, 243, 7, 46, 2, 2, 243, 50, 3, 2, 2, 2, 244, 245, 7, 107, 2, 2, 245, 246, 7, 104, 2, 2, 246, 52, 3, 2, 2, 2, 247, 248, 7, 102, 2, 2, 248, 249, 7, 113, 2, 2, 249, 54, 3, 2, 2, 2, 250, 251, 7, 103, 2, 2, 251, 252, 7, 110, 2, 2, 252, 253, 7, 107, 2, 2, 253, 254, 7, 104, 2, 2, 254, 56, 3, 2, 2, 2, 255, 256, 7, 103, 2, 2, 256, 257, 7, 110, 2, 2, 257, 258, 7, 117, 2, 2, 258, 259, 7, 103, 2, 2, 259, 58, 3, 2, 2, 2, 260, 261, 7, 121, 2, 2, 261, 262, 7, 106, 2, 2, 262, 263, 7, 107, 2, 2, 263, 264, 7, 110, 2, 2, 264, 265, 7, 103, 2, 2, 265, 60, 3, 2, 2, 2, 266, 267, 7, 119, 2, 2, 267, 268, 7, 112, 2, 2, 268, 269, 7, 118, 2, 2, 269, 270, 7, 107, 2, 2, 270, 271, 7, 110, 2, 2, 271, 62, 3, 2, 2, 2, 272, 273, 7, 104, 2, 2, 273, 274, 7, 113, 2, 2, 274, 275, 7, 116, 2, 2, 275, 64, 3, 2, 2, 2, 276, 277, 7, 107, 2, 2, 277, 278, 7, 112, 2, 2, 278, 66, 3, 2, 2, 2, 279, 280, 7, 117, 2, 2, 280, 281, 7, 118, 2, 2, 281, 282, 7, 103, 2, 2, 282, 283, 7, 114, 2, 2, 283, 68, 3, 2, 2, 2, 284, 285, 7, 104, 2, 2, 285, 286, 7, 119, 2, 2, 286, 287, 7, 112, 2, 2, 287, 288, 7, 101, 2, 2, 288, 70, 3, 2, 2, 2, 289, 290, 7, 62, 2, 2, 290, 72, 3, 2, 2, 2, 291, 292, 7, 64, 2, 2, 292, 74, 3, 2, 2, 2, 293, 294, 7, 102, 2, 2, 294, 295, 7, 103, 2, 2, 295, 296, 7, 104, 2, 2, 296, 76, 3, 2, 2, 2, 297, 298, 7, 103, 2, 2, 298, 299, 7, 122, 2, 2, 299, 300, 7, 118, 2, 2, 300, 301, 7, 103, 2, 2, 301, 302, 7, 116, 2, 2, 302, 303, 7, 112, 2, 2, 303, 78, 3, 2, 2, 2, 304, 305, 7, 101, 2, 2, 305, 306, 7, 110, 2, 2, 306, 307, 7, 99, 2, 2, 307, 308, 7, 117, 2, 2, 308, 309, 7, 117, 2, 2, 309, 80, 3, 2, 2, 2, 310, 311, 7, 125, 2, 2, 311, 82, 3, 2, 2, 2, 312, 313, 7, 127, 2, 2, 313, 84, 3, 2, 2, 2, 314, 315, 7, 60, 2, 2, 315, 86, 3, 2, 2, 2, 316, 317, 7, 42, 2, 2, 317, 88, 3, 2, 2, 2, 318, 319, 7, 43, 2, 2, 319, 90, 3, 2, 2, 2, 320, 321, 7, 101, 2, 2, 321, 322, 7, 113, 2, 2, 322, 323, 7, 112, 2, 2, 323, 324, 7, 117, 2, 2, 324, 325, 7, 118, 2, 2, 325, 326, 7, 116, 2, 2, 326, 327, 7, 119, 2, 2, 327, 328, 7, 101, 2, 2, 328, 329, 7, 118, 2, 2, 329, 330, 7, 113, 2, 2, 330, 331, 7, 116, 2, 2, 331, 92, 3, 2, 2, 2, 332, 333, 7, 93, 2, 2, 333, 94, 3, 2, 2, 2, 334, 335, 7, 95, 2, 2, 335, 96, 3, 2, 2, 2, 336, 337, 7, 65, 2, 2, 337, 98, 3, 2, 2, 2, 338, 339, 7, 48, 2, 2, 339, 100, 3, 2, 2, 2, 340, 341, 7, 35, 2, 2, 341, 102, 3, 2, 2, 2, 342, 343, 7, 128, 2, 2, 343, 104, 3, 2, 2, 2, 344, 345, 7, 48, 2, 2, 345, 346, 7, 48, 2, 2, 346, 106, 3, 2, 2, 2, 347, 348, 7, 48, 2, 2, 348, 349, 7, 48, 2, 2, 349, 350, 7, 48, 2, 2, 350, 108, 3, 2, 2, 2, 351, 352, 7, 107, 2, 2, 352, 353, 7, 117, 2, 2, 353, 110, 3, 2, 2, 2, 354, 355, 7, 107, 2, 2, 355, 356, 7, 117, 2, 2, 356, 357, 7, 112, 2, 2, 357, 358, 7, 41, 2, 2, 358, 359, 7, 118, 2, 2, 359, 112, 3, 2, 2, 2, 360, 361, 7, 63, 2, 2, 361, 362, 7, 63, 2, 2, 362, 114, 3, 2, 2, 2, 363, 364, 7, 35, 2, 2, 364, 365, 7, 63, 2, 2, 365, 116, 3, 2, 2, 2, 366, 367, 7, 62, 2, 2, 367, 368, 7, 63, 2, 2, 368, 118, 3, 2, 2, 2, 369, 370, 7, 64, 2, 2, 370, 371, 7, 63, 2, 2, 371, 120, 3, 2, 2, 2, 372, 373, 7, 112, 2, 2, 373, 374, 7, 113, 2, 2, 374, 375, 7, 118, 2, 2, 375, 122, 3, 2, 2, 2, 376, 377, 7, 99, 2, 2, 377, 378, 7, 112, 2, 2, 378, 379, 7, 102, 2, 2, 379, 124, 3, 2, 2, 2, 380, 381, 7, 113, 2, 2, 381, 382, 7, 116, 2, 2, 382, 126, 3, 2, 2, 2, 383, 384, 7, 110, 2, 2, 384, 385, 7, 99, 2, 2, 385, 386, 7, 111, 2, 2, 386, 387, 7, 100, 2, 2, 387, 388, 7, 102, 2, 2, 388, 389, 7, 99, 2, 2, 389, 128, 3, 2, 2, 2, 390, 391, 7, 47, 2, 2, 391, 392, 7, 64, 2, 2, 392, 130, 3, 2, 2, 2, 393, 394, 7, 118, 2, 2, 394, 395, 7, 116, 2, 2, 395, 396, 7, 119, 2, 2, 396, 397, 7, 103, 2, 2, 397, 132, 3, 2, 2, 2, 398, 399, 7, 104, 2, 2, 399, 400, 7, 99, 2, 2, 400, 401, 7, 110, 2, 2, 401, 402, 7, 117, 2, 2, 402, 403, 7, 103, 2, 2, 403, 134, 3, 2, 2, 2, 404, 405, 7, 112, 2, 2, 405, 406, 7, 119, 2, 2, 406, 407, 7, 110, 2, 2, 407, 408, 7, 110, 2, 2, 408, 136, 3, 2, 2, 2, 409, 411, 5, 147, 74, 2, 410, 409, 3, 2, 2, 2, 411, 412, 3, 2, 2, 2, 412, 410, 3, 2, 2, 2, 412, 413, 3, 2, 2, 2, 413, 138, 3, 2, 2, 2, 414, 416, 5, 147, 74, 2, 415, 414, 3, 2, 2, 2, 416, 417, 3, 2, 2, 2, 417, 415, 3, 2, 2, 2, 417, 418, 3, 2, 2, 2, 418, 419, 3, 2, 2, 2, 419, 421, 7, 48, 2, 2, 420, 422, 5, 147, 74, 2, 421, 420, 3, 2, 2, 2, 422, 423, 3, 2, 2, 2, 423, 421, 3, 2, 2, 2, 423, 424, 3, 2, 2, 2, 424, 434, 3, 2, 2, 2, 425, 427, 7, 103, 2, 2, 426, 428, 7, 47, 2, 2, 427, 426, 3, 2, 2, 2, 427, 428, 3, 2, 2, 2, 428, 430, 3, 2, 2, 2, 429, 431, 5, 147, 74, 2, 430, 429, 3, 2, 2, 2, 431, 432, 3, 2, 2, 2, 432, 430, 3, 2, 2, 2, 432, 433, 3, 2, 2, 2, 433, 435, 3, 2, 2, 2, 434, 425, 3, 2, 2, 2, 434, 435, 3, 2, 2, 2, 435, 140, 3, 2, 2, 2, 436, 442, 7, 41, 2, 2, 437, 441, 10, 2, 2, 2, 438, 439, 7, 94, 2, 2, 439, 441, 9, 3, 2, 2, 440, 437, 3, 2, 2, 2, 440, 438, 3, 2, 2, 2, 441, 444, 3, 2, 2, 2, 442, 440, 3, 2, 2, 2, 442, 443, 3, 2, 2, 2, 443, 445, 3, 2, 2, 2, 444, 442, 3, 2, 2, 2, 445, 446, 7, 41, 2, 2, 446, 142, 3, 2, 2, 2, 447, 453, 7, 36, 2, 2, 448, 452, 10, 4, 2, 2, 449, 450, 7, 94, 2, 2, 450, 452, 9, 5, 2, 2, 451, 448, 3, 2, 2, 2, 451, 449, 3, 2, 2, 2, 452, 455, 3, 2, 2, 2, 453, 451, 3, 2, 2, 2, 453, 454, 3, 2, 2, 2, 454, 456, 3, 2, 2, 2, 455, 453, 3, 2, 2, 2, 456, 457, 7, 36, 2, 2, 457, 144, 3, 2, 2, 2, 458, 462, 5, 149, 75, 2, 459, 461, 5, 151, 76, 2, 460, 459, 3, 2, 2, 2, 461, 464, 3, 2, 2, 2, 462, 460, 3, 2, 2, 2, 462, 463, 3, 2, 2, 2, 463, 146, 3, 2, 2, 2, 464, 462, 3, 2, 2, 2, 465, 466, 9, 6, 2, 2, 466, 148, 3, 2, 2, 2, 467, 468, 9, 7, 2, 2, 468, 150, 3, 2, 2, 2, 469, 473, 5, 149, 75, 2, 470, 473, 5, 147, 74, 2, 471, 473, 9, 8, 2, 2, 472, 469, 3, 2, 2, 2, 472, 470, 3, 2, 2, 2, 472, 471, 3, 2, 2, 2, 473, 152, 3, 2, 2, 2, 474, 475, 7, 47, 2, 2, 475, 476, 7, 47, 2, 2, 476, 480, 3, 2, 2, 2, 477, 479, 10, 9, 2, 2, 478, 477, 3, 2, 2, 2, 479, 482, 3, 2, 2, 2, 480, 478, 3, 2, 2, 2, 480, 481, 3, 2, 2, 2, 481, 483, 3, 2, 2, 2, 482, 480, 3, 2, 2, 2, 483, 484, 8, 77, 2, 2, 484, 154, 3, 2, 2, 2, 485, 487, 9, 10, 2, 2, 486, 485, 3, 2, 2, 2, 487, 488, 3, 2, 2, 2, 488, 486, 3, 2, 2, 2, 488, 489, 3, 2, 2, 2, 489, 490, 3, 2, 2, 2, 490, 491, 8, 78, 2, 2, 491, 156, 3, 2, 2, 2, 492, 493, 11, 2, 2, 2, 493, 158, 3, 2, 2, 2, 17, 2, 412, 417, 423, 427, 432, 434, 440, 442, 451, 453, 462, 472, 480, 488, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 77, 494, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 6, 69, 411, 10, 69, 13, 69, 14, 69, 412, 3, 70, 6, 70, 416, 10, 70, 13, 70, 14, 70, 417, 3, 70, 3, 70, 6, 70, 422, 10, 70, 13, 70, 14, 70, 423, 3, 70, 3, 70, 5, 70, 428, 10, 70, 3, 70, 6, 70, 431, 10, 70, 13, 70, 14, 70, 432, 5, 70, 435, 10, 70, 3, 71, 3, 71, 3, 71, 3, 71, 7, 71, 441, 10, 71, 12, 71, 14, 71, 444, 11, 71, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 72, 7, 72, 452, 10, 72, 12, 72, 14, 72, 455, 11, 72, 3, 72, 3, 72, 3, 73, 3, 73, 7, 73, 461, 10, 73, 12, 73, 14, 73, 464, 11, 73, 3, 74, 3, 74, 3, 75, 3, 75, 3, 76, 3, 76, 3, 76, 5, 76, 473, 10, 76, 3, 77, 3, 77, 3, 77, 3, 77, 7, 77, 479, 10, 77, 12, 77, 14, 77, 482, 11, 77, 3, 77, 3, 77, 3, 78, 6, 78, 487, 10, 78, 13, 78, 14, 78, 488, 3, 78, 3, 78, 3, 79, 3, 79, 2, 2, 80, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 74, 147, 2, 149, 2, 151, 2, 153, 75, 155, 76, 157, 77, 3, 2, 11, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 3, 2, 41, 41, 4, 2, 12, 12, 14, 15, 5, 2, 11, 12, 15, 15, 34, 34, 2, 505, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 3, 159, 3, 2, 2, 2, 5, 161, 3, 2, 2, 2, 7, 165, 3, 2, 2, 2, 9, 170, 3, 2, 2, 2, 11, 177, 3, 2, 2, 2, 13, 180, 3, 2, 2, 2, 15, 185, 3, 2, 2, 2, 17, 191, 3, 2, 2, 2, 19, 193, 3, 2, 2, 2, 21, 195, 3, 2, 2, 2, 23, 197, 3, 2, 2, 2, 25, 199, 3, 2, 2, 2, 27, 201, 3, 2, 2, 2, 29, 203, 3, 2, 2, 2, 31, 205, 3, 2, 2, 2, 33, 208, 3, 2, 2, 2, 35, 211, 3, 2, 2, 2, 37, 213, 3, 2, 2, 2, 39, 215, 3, 2, 2, 2, 41, 217, 3, 2, 2, 2, 43, 220, 3, 2, 2, 2, 45, 226, 3, 2, 2, 2, 47, 235, 3, 2, 2, 2, 49, 242, 3, 2, 2, 2, 51, 244, 3, 2, 2, 2, 53, 247, 3, 2, 2, 2, 55, 250, 3, 2, 2, 2, 57, 255, 3, 2, 2, 2, 59, 260, 3, 2, 2, 2, 61, 266, 3, 2, 2, 2, 63, 272, 3, 2, 2, 2, 65, 276, 3, 2, 2, 2, 67, 279, 3, 2, 2, 2, 69, 284, 3, 2, 2, 2, 71, 289, 3, 2, 2, 2, 73, 291, 3, 2, 2, 2, 75, 293, 3, 2, 2, 2, 77, 297, 3, 2, 2, 2, 79, 304, 3, 2, 2, 2, 81, 310, 3, 2, 2, 2, 83, 312, 3, 2, 2, 2, 85, 314, 3, 2, 2, 2, 87, 316, 3, 2, 2, 2, 89, 318, 3, 2, 2, 2, 91, 320, 3, 2, 2, 2, 93, 332, 3, 2, 2, 2, 95, 334, 3, 2, 2, 2, 97, 336, 3, 2, 2, 2, 99, 338, 3, 2, 2, 2, 101, 340, 3, 2, 2, 2, 103, 342, 3, 2, 2, 2, 105, 344, 3, 2, 2, 2, 107, 347, 3, 2, 2, 2, 109, 351, 3, 2, 2, 2, 111, 354, 3, 2, 2, 2, 113, 360, 3, 2, 2, 2, 115, 363, 3, 2, 2, 2, 117, 366, 3, 2, 2, 2, 119, 369, 3, 2, 2, 2, 121, 372, 3, 2, 2, 2, 123, 376, 3, 2, 2, 2, 125, 380, 3, 2, 2, 2, 127, 383, 3, 2, 2, 2, 129, 390, 3, 2, 2, 2, 131, 393, 3, 2, 2, 2, 133, 398, 3, 2, 2, 2, 135, 404, 3, 2, 2, 2, 137, 410, 3, 2, 2, 2, 139, 415, 3, 2, 2, 2, 141, 436, 3, 2, 2, 2, 143, 447, 3, 2, 2, 2, 145, 458, 3, 2, 2, 2, 147, 465, 3, 2, 2, 2, 149, 467, 3, 2, 2, 2, 151, 472, 3, 2, 2, 2, 153, 474, 3, 2, 2, 2, 155, 486, 3, 2, 2, 2, 157, 492, 3, 2, 2, 2, 159, 160, 7, 61, 2, 2, 160, 4, 3, 2, 2, 2, 161, 162, 7, 119, 2, 2, 162, 163, 7, 117, 2, 2, 163, 164, 7, 103, 2, 2, 164, 6, 3, 2, 2, 2, 165, 166, 7, 113, 2, 2, 166, 167, 7, 112, 2, 2, 167, 168, 7, 110, 2, 2, 168, 169, 7, 123, 2, 2, 169, 8, 3, 2, 2, 2, 170, 171, 7, 106, 2, 2, 171, 172, 7, 107, 2, 2, 172, 173, 7, 102, 2, 2, 173, 174, 7, 107, 2, 2, 174, 175, 7, 112, 2, 2, 175, 176, 7, 105, 2, 2, 176, 10, 3, 2, 2, 2, 177, 178, 7, 99, 2, 2, 178, 179, 7, 117, 2, 2, 179, 12, 3, 2, 2, 2, 180, 181, 7, 117, 2, 2, 181, 182, 7, 109, 2, 2, 182, 183, 7, 107, 2, 2, 183, 184, 7, 114, 2, 2, 184, 14, 3, 2, 2, 2, 185, 186, 7, 114, 2, 2, 186, 187, 7, 116, 2, 2, 187, 188, 7, 107, 2, 2, 188, 189, 7, 112, 2, 2, 189, 190, 7, 118, 2, 2, 190, 16, 3, 2, 2, 2, 191, 192, 7, 63, 2, 2, 192, 18, 3, 2, 2, 2, 193, 194, 7, 96, 2, 2, 194, 20, 3, 2, 2, 2, 195, 196, 7, 44, 2, 2, 196, 22, 3, 2, 2, 2, 197, 198, 7, 49, 2, 2, 198, 24, 3, 2, 2, 2, 199, 200, 7, 39, 2, 2, 200, 26, 3, 2, 2, 2, 201, 202, 7, 45, 2, 2, 202, 28, 3, 2, 2, 2, 203, 204, 7, 47, 2, 2, 204, 30, 3, 2, 2, 2, 205, 206, 7, 62, 2, 2, 206, 207, 7, 62, 2, 2, 207, 32, 3, 2, 2, 2, 208, 209, 7, 64, 2, 2, 209, 210, 7, 64, 2, 2, 210, 34, 3, 2, 2, 2, 211, 212, 7, 40, 2, 2, 212, 36, 3, 2, 2, 2, 213, 214, 7, 38, 2, 2, 214, 38, 3, 2, 2, 2, 215, 216, 7, 126, 2, 2, 216, 40, 3, 2, 2, 2, 217, 218, 7, 65, 2, 2, 218, 219, 7, 65, 2, 2, 219, 42, 3, 2, 2, 2, 220, 221, 7, 100, 2, 2, 221, 222, 7, 116, 2, 2, 222, 223, 7, 103, 2, 2, 223, 224, 7, 99, 2, 2, 224, 225, 7, 109, 2, 2, 225, 44, 3, 2, 2, 2, 226, 227, 7, 101, 2, 2, 227, 228, 7, 113, 2, 2, 228, 229, 7, 112, 2, 2, 229, 230, 7, 118, 2, 2, 230, 231, 7, 107, 2, 2, 231, 232, 7, 112, 2, 2, 232, 233, 7, 119, 2, 2, 233, 234, 7, 103, 2, 2, 234, 46, 3, 2, 2, 2, 235, 236, 7, 116, 2, 2, 236, 237, 7, 103, 2, 2, 237, 238, 7, 118, 2, 2, 238, 239, 7, 119, 2, 2, 239, 240, 7, 116, 2, 2, 240, 241, 7, 112, 2, 2, 241, 48, 3, 2, 2, 2, 242, 243, 7, 46, 2, 2, 243, 50, 3, 2, 2, 2, 244, 245, 7, 107, 2, 2, 245, 246, 7, 104, 2, 2, 246, 52, 3, 2, 2, 2, 247, 248, 7, 102, 2, 2, 248, 249, 7, 113, 2, 2, 249, 54, 3, 2, 2, 2, 250, 251, 7, 103, 2, 2, 251, 252, 7, 110, 2, 2, 252, 253, 7, 107, 2, 2, 253, 254, 7, 104, 2, 2, 254, 56, 3, 2, 2, 2, 255, 256, 7, 103, 2, 2, 256, 257, 7, 110, 2, 2, 257, 258, 7, 117, 2, 2, 258, 259, 7, 103, 2, 2, 259, 58, 3, 2, 2, 2, 260, 261, 7, 121, 2, 2, 261, 262, 7, 106, 2, 2, 262, 263, 7, 107, 2, 2, 263, 264, 7, 110, 2, 2, 264, 265, 7, 103, 2, 2, 265, 60, 3, 2, 2, 2, 266, 267, 7, 119, 2, 2, 267, 268, 7, 112, 2, 2, 268, 269, 7, 118, 2, 2, 269, 270, 7, 107, 2, 2, 270, 271, 7, 110, 2, 2, 271, 62, 3, 2, 2, 2, 272, 273, 7, 104, 2, 2, 273, 274, 7, 113, 2, 2, 274, 275, 7, 116, 2, 2, 275, 64, 3, 2, 2, 2, 276, 277, 7, 107, 2, 2, 277, 278, 7, 112, 2, 2, 278, 66, 3, 2, 2, 2, 279, 280, 7, 117, 2, 2, 280, 281, 7, 118, 2, 2, 281, 282, 7, 103, 2, 2, 282, 283, 7, 114, 2, 2, 283, 68, 3, 2, 2, 2, 284, 285, 7, 104, 2, 2, 285, 286, 7, 119, 2, 2, 286, 287, 7, 112, 2, 2, 287, 288, 7, 101, 2, 2, 288, 70, 3, 2, 2, 2, 289, 290, 7, 62, 2, 2, 290, 72, 3, 2, 2, 2, 291, 292, 7, 64, 2, 2, 292, 74, 3, 2, 2, 2, 293, 294, 7, 102, 2, 2, 294, 295, 7, 103, 2, 2, 295, 296, 7, 104, 2, 2, 296, 76, 3, 2, 2, 2, 297, 298, 7, 103, 2, 2, 298, 299, 7, 122, 2, 2, 299, 300, 7, 118, 2, 2, 300, 301, 7, 103, 2, 2, 301, 302, 7, 116, 2, 2, 302, 303, 7, 112, 2, 2, 303, 78, 3, 2, 2, 2, 304, 305, 7, 101, 2, 2, 305, 306, 7, 110, 2, 2, 306, 307, 7, 99, 2, 2, 307, 308, 7, 117, 2, 2, 308, 309, 7, 117, 2, 2, 309, 80, 3, 2, 2, 2, 310, 311, 7, 42, 2, 2, 311, 82, 3, 2, 2, 2, 312, 313, 7, 43, 2, 2, 313, 84, 3, 2, 2, 2, 314, 315, 7, 125, 2, 2, 315, 86, 3, 2, 2, 2, 316, 317, 7, 127, 2, 2, 317, 88, 3, 2, 2, 2, 318, 319, 7, 60, 2, 2, 319, 90, 3, 2, 2, 2, 320, 321, 7, 101, 2, 2, 321, 322, 7, 113, 2, 2, 322, 323, 7, 112, 2, 2, 323, 324, 7, 117, 2, 2, 324, 325, 7, 118, 2, 2, 325, 326, 7, 116, 2, 2, 326, 327, 7, 119, 2, 2, 327, 328, 7, 101, 2, 2, 328, 329, 7, 118, 2, 2, 329, 330, 7, 113, 2, 2, 330, 331, 7, 116, 2, 2, 331, 92, 3, 2, 2, 2, 332, 333, 7, 93, 2, 2, 333, 94, 3, 2, 2, 2, 334, 335, 7, 95, 2, 2, 335, 96, 3, 2, 2, 2, 336, 337, 7, 65, 2, 2, 337, 98, 3, 2, 2, 2, 338, 339, 7, 48, 2, 2, 339, 100, 3, 2, 2, 2, 340, 341, 7, 35, 2, 2, 341, 102, 3, 2, 2, 2, 342, 343, 7, 128, 2, 2, 343, 104, 3, 2, 2, 2, 344, 345, 7, 48, 2, 2, 345, 346, 7, 48, 2, 2, 346, 106, 3, 2, 2, 2, 347, 348, 7, 48, 2, 2, 348, 349, 7, 48, 2, 2, 349, 350, 7, 48, 2, 2, 350, 108, 3, 2, 2, 2, 351, 352, 7, 107, 2, 2, 352, 353, 7, 117, 2, 2, 353, 110, 3, 2, 2, 2, 354, 355, 7, 107, 2, 2, 355, 356, 7, 117, 2, 2, 356, 357, 7, 112, 2, 2, 357, 358, 7, 41, 2, 2, 358, 359, 7, 118, 2, 2, 359, 112, 3, 2, 2, 2, 360, 361, 7, 63, 2, 2, 361, 362, 7, 63, 2, 2, 362, 114, 3, 2, 2, 2, 363, 364, 7, 35, 2, 2, 364, 365, 7, 63, 2, 2, 365, 116, 3, 2, 2, 2, 366, 367, 7, 62, 2, 2, 367, 368, 7, 63, 2, 2, 368, 118, 3, 2, 2, 2, 369, 370, 7, 64, 2, 2, 370, 371, 7, 63, 2, 2, 371, 120, 3, 2, 2, 2, 372, 373, 7, 112, 2, 2, 373, 374, 7, 113, 2, 2, 374, 375, 7, 118, 2, 2, 375, 122, 3, 2, 2, 2, 376, 377, 7, 99, 2, 2, 377, 378, 7, 112, 2, 2, 378, 379, 7, 102, 2, 2, 379, 124, 3, 2, 2, 2, 380, 381, 7, 113, 2, 2, 381, 382, 7, 116, 2, 2, 382, 126, 3, 2, 2, 2, 383, 384, 7, 110, 2, 2, 384, 385, 7, 99, 2, 2, 385, 386, 7, 111, 2, 2, 386, 387, 7, 100, 2, 2, 387, 388, 7, 102, 2, 2, 388, 389, 7, 99, 2, 2, 389, 128, 3, 2, 2, 2, 390, 391, 7, 47, 2, 2, 391, 392, 7, 64, 2, 2, 392, 130, 3, 2, 2, 2, 393, 394, 7, 118, 2, 2, 394, 395, 7, 116, 2, 2, 395, 396, 7, 119, 2, 2, 396, 397, 7, 103, 2, 2, 397, 132, 3, 2, 2, 2, 398, 399, 7, 104, 2, 2, 399, 400, 7, 99, 2, 2, 400, 401, 7, 110, 2, 2, 401, 402, 7, 117, 2, 2, 402, 403, 7, 103, 2, 2, 403, 134, 3, 2, 2, 2, 404, 405, 7, 112, 2, 2, 405, 406, 7, 119, 2, 2, 406, 407, 7, 110, 2, 2, 407, 408, 7, 110, 2, 2, 408, 136, 3, 2, 2, 2, 409, 411, 5, 147, 74, 2, 410, 409, 3, 2, 2, 2, 411, 412, 3, 2, 2, 2, 412, 410, 3, 2, 2, 2, 412, 413, 3, 2, 2, 2, 413, 138, 3, 2, 2, 2, 414, 416, 5, 147, 74, 2, 415, 414, 3, 2, 2, 2, 416, 417, 3, 2, 2, 2, 417, 415, 3, 2, 2, 2, 417, 418, 3, 2, 2, 2, 418, 419, 3, 2, 2, 2, 419, 421, 7, 48, 2, 2, 420, 422, 5, 147, 74, 2, 421, 420, 3, 2, 2, 2, 422, 423, 3, 2, 2, 2, 423, 421, 3, 2, 2, 2, 423, 424, 3, 2, 2, 2, 424, 434, 3, 2, 2, 2, 425, 427, 7, 103, 2, 2, 426, 428, 7, 47, 2, 2, 427, 426, 3, 2, 2, 2, 427, 428, 3, 2, 2, 2, 428, 430, 3, 2, 2, 2, 429, 431, 5, 147, 74, 2, 430, 429, 3, 2, 2, 2, 431, 432, 3, 2, 2, 2, 432, 430, 3, 2, 2, 2, 432, 433, 3, 2, 2, 2, 433, 435, 3, 2, 2, 2, 434, 425, 3, 2, 2, 2, 434, 435, 3, 2, 2, 2, 435, 140, 3, 2, 2, 2, 436, 442, 7, 41, 2, 2, 437, 441, 10, 2, 2, 2, 438, 439, 7, 94, 2, 2, 439, 441, 9, 3, 2, 2, 440, 437, 3, 2, 2, 2, 440, 438, 3, 2, 2, 2, 441, 444, 3, 2, 2, 2, 442, 440, 3, 2, 2, 2, 442, 443, 3, 2, 2, 2, 443, 445, 3, 2, 2, 2, 444, 442, 3, 2, 2, 2, 445, 446, 7, 41, 2, 2, 446, 142, 3, 2, 2, 2, 447, 453, 7, 36, 2, 2, 448, 452, 10, 4, 2, 2, 449, 450, 7, 94, 2, 2, 450, 452, 9, 5, 2, 2, 451, 448, 3, 2, 2, 2, 451, 449, 3, 2, 2, 2, 452, 455, 3, 2, 2, 2, 453, 451, 3, 2, 2, 2, 453, 454, 3, 2, 2, 2, 454, 456, 3, 2, 2, 2, 455, 453, 3, 2, 2, 2, 456, 457, 7, 36, 2, 2, 457, 144, 3, 2, 2, 2, 458, 462, 5, 149, 75, 2, 459, 461, 5, 151, 76, 2, 460, 459, 3, 2, 2, 2, 461, 464, 3, 2, 2, 2, 462, 460, 3, 2, 2, 2, 462, 463, 3, 2, 2, 2, 463, 146, 3, 2, 2, 2, 464, 462, 3, 2, 2, 2, 465, 466, 9, 6, 2, 2, 466, 148, 3, 2, 2, 2, 467, 468, 9, 7, 2, 2, 468, 150, 3, 2, 2, 2, 469, 473, 5, 149, 75, 2, 470, 473, 5, 147, 74, 2, 471, 473, 9, 8, 2, 2, 472, 469, 3, 2, 2, 2, 472, 470, 3, 2, 2, 2, 472, 471, 3, 2, 2, 2, 473, 152, 3, 2, 2, 2, 474, 475, 7, 47, 2, 2, 475, 476, 7, 47, 2, 2, 476, 480, 3, 2, 2, 2, 477, 479, 10, 9, 2, 2, 478, 477, 3, 2, 2, 2, 479, 482, 3, 2, 2, 2, 480, 478, 3, 2, 2, 2, 480, 481, 3, 2, 2, 2, 481, 483, 3, 2, 2, 2, 482, 480, 3, 2, 2, 2, 483, 484, 8, 77, 2, 2, 484, 154, 3, 2, 2, 2, 485, 487, 9, 10, 2, 2, 486, 485, 3, 2, 2, 2, 487, 488, 3, 2, 2, 2, 488, 486, 3, 2, 2, 2, 488, 489, 3, 2, 2, 2, 489, 490, 3, 2, 2, 2, 490, 491, 8, 78, 2, 2, 491, 156, 3, 2, 2, 2, 492, 493, 11, 2, 2, 2, 493, 158, 3, 2, 2, 2, 17, 2, 412, 417, 423, 427, 432, 434, 440, 442, 451, 453, 462, 472, 480, 488, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py index f97adb8b..8150e710 100644 --- a/src/antlr/PyxellLexer.py +++ b/src/antlr/PyxellLexer.py @@ -145,12 +145,12 @@ def serializedATN(): buf.write("\7g\2\2\u012d\u012e\7t\2\2\u012e\u012f\7p\2\2\u012fN\3") buf.write("\2\2\2\u0130\u0131\7e\2\2\u0131\u0132\7n\2\2\u0132\u0133") buf.write("\7c\2\2\u0133\u0134\7u\2\2\u0134\u0135\7u\2\2\u0135P\3") - buf.write("\2\2\2\u0136\u0137\7}\2\2\u0137R\3\2\2\2\u0138\u0139\7") - buf.write("\177\2\2\u0139T\3\2\2\2\u013a\u013b\7<\2\2\u013bV\3\2") - buf.write("\2\2\u013c\u013d\7*\2\2\u013dX\3\2\2\2\u013e\u013f\7+") - buf.write("\2\2\u013fZ\3\2\2\2\u0140\u0141\7e\2\2\u0141\u0142\7q") - buf.write("\2\2\u0142\u0143\7p\2\2\u0143\u0144\7u\2\2\u0144\u0145") - buf.write("\7v\2\2\u0145\u0146\7t\2\2\u0146\u0147\7w\2\2\u0147\u0148") + buf.write("\2\2\2\u0136\u0137\7*\2\2\u0137R\3\2\2\2\u0138\u0139\7") + buf.write("+\2\2\u0139T\3\2\2\2\u013a\u013b\7}\2\2\u013bV\3\2\2\2") + buf.write("\u013c\u013d\7\177\2\2\u013dX\3\2\2\2\u013e\u013f\7<\2") + buf.write("\2\u013fZ\3\2\2\2\u0140\u0141\7e\2\2\u0141\u0142\7q\2") + buf.write("\2\u0142\u0143\7p\2\2\u0143\u0144\7u\2\2\u0144\u0145\7") + buf.write("v\2\2\u0145\u0146\7t\2\2\u0146\u0147\7w\2\2\u0147\u0148") buf.write("\7e\2\2\u0148\u0149\7v\2\2\u0149\u014a\7q\2\2\u014a\u014b") buf.write("\7t\2\2\u014b\\\3\2\2\2\u014c\u014d\7]\2\2\u014d^\3\2") buf.write("\2\2\u014e\u014f\7_\2\2\u014f`\3\2\2\2\u0150\u0151\7A") @@ -312,7 +312,7 @@ class PyxellLexer(Lexer): "'&'", "'$'", "'|'", "'??'", "'break'", "'continue'", "'return'", "','", "'if'", "'do'", "'elif'", "'else'", "'while'", "'until'", "'for'", "'in'", "'step'", "'func'", "'<'", "'>'", "'def'", - "'extern'", "'class'", "'{'", "'}'", "':'", "'('", "')'", "'constructor'", + "'extern'", "'class'", "'('", "')'", "'{'", "'}'", "':'", "'constructor'", "'['", "']'", "'?'", "'.'", "'!'", "'~'", "'..'", "'...'", "'is'", "'isn't'", "'=='", "'!='", "'<='", "'>='", "'not'", "'and'", "'or'", "'lambda'", "'->'", "'true'", "'false'", "'null'" ] diff --git a/src/antlr/PyxellLexer.tokens b/src/antlr/PyxellLexer.tokens index 6d647978..b6572d61 100644 --- a/src/antlr/PyxellLexer.tokens +++ b/src/antlr/PyxellLexer.tokens @@ -112,11 +112,11 @@ ERR=75 'def'=37 'extern'=38 'class'=39 -'{'=40 -'}'=41 -':'=42 -'('=43 -')'=44 +'('=40 +')'=41 +'{'=42 +'}'=43 +':'=44 'constructor'=45 '['=46 ']'=47 diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index bb3141c9..ab424221 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -9,7 +9,7 @@ def serializedATN(): with StringIO() as buf: buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3M") - buf.write("\u01bd\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\u01c3\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16") buf.write("\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\3\2\7\2") buf.write("&\n\2\f\2\16\2)\13\2\3\2\3\2\3\3\3\3\3\3\3\3\5\3\61\n") @@ -22,216 +22,219 @@ def serializedATN(): buf.write("\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\5\6\u0088\n\6") buf.write("\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\5\6\u0093\n\6\3\6") buf.write("\3\6\5\6\u0097\n\6\3\6\3\6\3\6\3\6\5\6\u009d\n\6\3\6\3") - buf.write("\6\3\6\3\6\3\6\6\6\u00a4\n\6\r\6\16\6\u00a5\3\6\3\6\5") - buf.write("\6\u00aa\n\6\3\7\3\7\3\7\3\7\5\7\u00b0\n\7\3\b\3\b\3\b") - buf.write("\3\b\7\b\u00b6\n\b\f\b\16\b\u00b9\13\b\3\b\5\b\u00bc\n") - buf.write("\b\3\b\3\b\3\t\3\t\3\t\3\t\5\t\u00c4\n\t\3\t\3\t\3\t\3") - buf.write("\t\3\t\3\t\5\t\u00cc\n\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") - buf.write("\t\5\t\u00d6\n\t\3\n\3\n\6\n\u00da\n\n\r\n\16\n\u00db") - buf.write("\3\n\3\n\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") - buf.write("\3\13\7\13\u00ea\n\13\f\13\16\13\u00ed\13\13\3\13\5\13") - buf.write("\u00f0\n\13\3\13\3\13\3\13\3\13\6\13\u00f6\n\13\r\13\16") - buf.write("\13\u00f7\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") - buf.write("\7\13\u0103\n\13\f\13\16\13\u0106\13\13\3\13\5\13\u0109") - buf.write("\n\13\3\13\3\13\5\13\u010d\n\13\3\13\3\13\3\13\3\13\3") - buf.write("\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") + buf.write("\6\3\6\3\6\3\6\3\6\5\6\u00a5\n\6\3\6\3\6\3\6\6\6\u00aa") + buf.write("\n\6\r\6\16\6\u00ab\3\6\3\6\5\6\u00b0\n\6\3\7\3\7\3\7") + buf.write("\3\7\5\7\u00b6\n\7\3\b\3\b\3\b\3\b\7\b\u00bc\n\b\f\b\16") + buf.write("\b\u00bf\13\b\3\b\5\b\u00c2\n\b\3\b\3\b\3\t\3\t\3\t\3") + buf.write("\t\5\t\u00ca\n\t\3\t\3\t\3\t\3\t\3\t\3\t\5\t\u00d2\n\t") + buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\5\t\u00dc\n\t\3\n\3\n") + buf.write("\6\n\u00e0\n\n\r\n\16\n\u00e1\3\n\3\n\3\13\3\13\3\13\3") + buf.write("\13\3\13\3\13\3\13\3\13\3\13\3\13\7\13\u00f0\n\13\f\13") + buf.write("\16\13\u00f3\13\13\3\13\5\13\u00f6\n\13\3\13\3\13\3\13") + buf.write("\3\13\6\13\u00fc\n\13\r\13\16\13\u00fd\3\13\3\13\3\13") + buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\7\13\u0109\n\13\f\13\16") + buf.write("\13\u010c\13\13\3\13\5\13\u010f\n\13\3\13\3\13\5\13\u0113") + buf.write("\n\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") - buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\5\13") - buf.write("\u013e\n\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\5\13\u0147") - buf.write("\n\13\3\13\3\13\5\13\u014b\n\13\3\13\3\13\5\13\u014f\n") - buf.write("\13\5\13\u0151\n\13\3\13\3\13\3\13\5\13\u0156\n\13\3\13") - buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\7\13\u015f\n\13\f\13\16") - buf.write("\13\u0162\13\13\3\13\5\13\u0165\n\13\3\13\3\13\3\13\3") - buf.write("\13\3\13\7\13\u016c\n\13\f\13\16\13\u016f\13\13\3\f\3") - buf.write("\f\3\f\7\f\u0174\n\f\f\f\16\f\u0177\13\f\3\f\3\f\3\r\3") - buf.write("\r\3\r\3\16\3\16\3\16\3\16\3\16\3\16\5\16\u0184\n\16\3") - buf.write("\16\3\16\5\16\u0188\n\16\3\17\3\17\5\17\u018c\n\17\3\17") - buf.write("\3\17\3\20\3\20\3\20\3\20\3\20\3\20\3\20\5\20\u0197\n") - buf.write("\20\3\21\3\21\7\21\u019b\n\21\f\21\16\21\u019e\13\21\3") - buf.write("\21\3\21\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22") - buf.write("\3\22\3\22\3\22\5\22\u01ae\n\22\3\22\3\22\3\22\3\22\3") - buf.write("\22\3\22\3\22\3\22\7\22\u01b8\n\22\f\22\16\22\u01bb\13") - buf.write("\22\3\22\2\4\24\"\23\2\4\6\b\n\f\16\20\22\24\26\30\32") - buf.write("\34\36 \"\2\f\3\2\13\26\3\2\27\30\4\2\17\20\65\65\3\2") - buf.write("\f\16\3\2\17\20\3\2\21\22\3\2\66\67\3\289\4\2%&:=\3\2") - buf.write("CD\2\u0208\2\'\3\2\2\2\4\60\3\2\2\2\6Z\3\2\2\2\b\\\3\2") - buf.write("\2\2\n\u00a9\3\2\2\2\f\u00ab\3\2\2\2\16\u00b1\3\2\2\2") - buf.write("\20\u00d5\3\2\2\2\22\u00d7\3\2\2\2\24\u010c\3\2\2\2\26") - buf.write("\u0175\3\2\2\2\30\u017a\3\2\2\2\32\u0187\3\2\2\2\34\u018b") - buf.write("\3\2\2\2\36\u0196\3\2\2\2 \u019c\3\2\2\2\"\u01ad\3\2\2") - buf.write("\2$&\5\4\3\2%$\3\2\2\2&)\3\2\2\2\'%\3\2\2\2\'(\3\2\2\2") - buf.write("(*\3\2\2\2)\'\3\2\2\2*+\7\2\2\3+\3\3\2\2\2,-\5\6\4\2-") - buf.write(".\7\3\2\2.\61\3\2\2\2/\61\5\n\6\2\60,\3\2\2\2\60/\3\2") - buf.write("\2\2\61\5\3\2\2\2\62\63\7\4\2\2\63:\7J\2\2\64\65\7\5\2") - buf.write("\2\65;\5 \21\2\66\67\7\6\2\2\67;\5 \21\289\7\7\2\29;\7") - buf.write("J\2\2:\64\3\2\2\2:\66\3\2\2\2:8\3\2\2\2:;\3\2\2\2;[\3") - buf.write("\2\2\2<[\7\b\2\2=?\7\t\2\2>@\5\26\f\2?>\3\2\2\2?@\3\2") - buf.write("\2\2@[\3\2\2\2AB\5\"\22\2BE\7J\2\2CD\7\n\2\2DF\5\26\f") - buf.write("\2EC\3\2\2\2EF\3\2\2\2F[\3\2\2\2GH\5\b\5\2HI\7\n\2\2I") - buf.write("K\3\2\2\2JG\3\2\2\2KN\3\2\2\2LJ\3\2\2\2LM\3\2\2\2MO\3") - buf.write("\2\2\2NL\3\2\2\2O[\5\26\f\2PQ\5\24\13\2QR\t\2\2\2RS\7") - buf.write("\n\2\2ST\5\24\13\2T[\3\2\2\2U[\t\3\2\2VX\7\31\2\2WY\5") - buf.write("\26\f\2XW\3\2\2\2XY\3\2\2\2Y[\3\2\2\2Z\62\3\2\2\2Z<\3") - buf.write("\2\2\2Z=\3\2\2\2ZA\3\2\2\2ZL\3\2\2\2ZP\3\2\2\2ZU\3\2\2") - buf.write("\2ZV\3\2\2\2[\7\3\2\2\2\\a\5\24\13\2]^\7\32\2\2^`\5\24") - buf.write("\13\2_]\3\2\2\2`c\3\2\2\2a_\3\2\2\2ab\3\2\2\2b\t\3\2\2") - buf.write("\2ca\3\2\2\2de\7\33\2\2ef\5\24\13\2fg\7\34\2\2go\5\22") - buf.write("\n\2hi\7\35\2\2ij\5\24\13\2jk\7\34\2\2kl\5\22\n\2ln\3") - buf.write("\2\2\2mh\3\2\2\2nq\3\2\2\2om\3\2\2\2op\3\2\2\2pu\3\2\2") - buf.write("\2qo\3\2\2\2rs\7\36\2\2st\7\34\2\2tv\5\22\n\2ur\3\2\2") - buf.write("\2uv\3\2\2\2v\u00aa\3\2\2\2wx\7\37\2\2xy\5\24\13\2yz\7") - buf.write("\34\2\2z{\5\22\n\2{\u00aa\3\2\2\2|}\7 \2\2}~\5\24\13\2") - buf.write("~\177\7\34\2\2\177\u0080\5\22\n\2\u0080\u00aa\3\2\2\2") - buf.write("\u0081\u0082\7!\2\2\u0082\u0083\5\26\f\2\u0083\u0084\7") - buf.write("\"\2\2\u0084\u0087\5\26\f\2\u0085\u0086\7#\2\2\u0086\u0088") - buf.write("\5\26\f\2\u0087\u0085\3\2\2\2\u0087\u0088\3\2\2\2\u0088") - buf.write("\u0089\3\2\2\2\u0089\u008a\7\34\2\2\u008a\u008b\5\22\n") - buf.write("\2\u008b\u00aa\3\2\2\2\u008c\u008d\7$\2\2\u008d\u0092") - buf.write("\7J\2\2\u008e\u008f\7%\2\2\u008f\u0090\5 \21\2\u0090\u0091") - buf.write("\7&\2\2\u0091\u0093\3\2\2\2\u0092\u008e\3\2\2\2\u0092") - buf.write("\u0093\3\2\2\2\u0093\u0094\3\2\2\2\u0094\u0096\5\16\b") - buf.write("\2\u0095\u0097\5\"\22\2\u0096\u0095\3\2\2\2\u0096\u0097") - buf.write("\3\2\2\2\u0097\u009c\3\2\2\2\u0098\u0099\7\'\2\2\u0099") - buf.write("\u009d\5\22\n\2\u009a\u009b\7(\2\2\u009b\u009d\7\3\2\2") - buf.write("\u009c\u0098\3\2\2\2\u009c\u009a\3\2\2\2\u009d\u00aa\3") - buf.write("\2\2\2\u009e\u009f\7)\2\2\u009f\u00a0\7J\2\2\u00a0\u00a1") - buf.write("\7\'\2\2\u00a1\u00a3\7*\2\2\u00a2\u00a4\5\20\t\2\u00a3") - buf.write("\u00a2\3\2\2\2\u00a4\u00a5\3\2\2\2\u00a5\u00a3\3\2\2\2") - buf.write("\u00a5\u00a6\3\2\2\2\u00a6\u00a7\3\2\2\2\u00a7\u00a8\7") - buf.write("+\2\2\u00a8\u00aa\3\2\2\2\u00a9d\3\2\2\2\u00a9w\3\2\2") - buf.write("\2\u00a9|\3\2\2\2\u00a9\u0081\3\2\2\2\u00a9\u008c\3\2") - buf.write("\2\2\u00a9\u009e\3\2\2\2\u00aa\13\3\2\2\2\u00ab\u00ac") - buf.write("\5\"\22\2\u00ac\u00af\7J\2\2\u00ad\u00ae\7,\2\2\u00ae") - buf.write("\u00b0\5\24\13\2\u00af\u00ad\3\2\2\2\u00af\u00b0\3\2\2") - buf.write("\2\u00b0\r\3\2\2\2\u00b1\u00b7\7-\2\2\u00b2\u00b3\5\f") - buf.write("\7\2\u00b3\u00b4\7\32\2\2\u00b4\u00b6\3\2\2\2\u00b5\u00b2") - buf.write("\3\2\2\2\u00b6\u00b9\3\2\2\2\u00b7\u00b5\3\2\2\2\u00b7") - buf.write("\u00b8\3\2\2\2\u00b8\u00bb\3\2\2\2\u00b9\u00b7\3\2\2\2") - buf.write("\u00ba\u00bc\5\f\7\2\u00bb\u00ba\3\2\2\2\u00bb\u00bc\3") - buf.write("\2\2\2\u00bc\u00bd\3\2\2\2\u00bd\u00be\7.\2\2\u00be\17") - buf.write("\3\2\2\2\u00bf\u00c0\5\"\22\2\u00c0\u00c3\7J\2\2\u00c1") - buf.write("\u00c2\7,\2\2\u00c2\u00c4\5\26\f\2\u00c3\u00c1\3\2\2\2") - buf.write("\u00c3\u00c4\3\2\2\2\u00c4\u00c5\3\2\2\2\u00c5\u00c6\7") - buf.write("\3\2\2\u00c6\u00d6\3\2\2\2\u00c7\u00c8\7$\2\2\u00c8\u00c9") - buf.write("\7J\2\2\u00c9\u00cb\5\16\b\2\u00ca\u00cc\5\"\22\2\u00cb") - buf.write("\u00ca\3\2\2\2\u00cb\u00cc\3\2\2\2\u00cc\u00cd\3\2\2\2") - buf.write("\u00cd\u00ce\7\'\2\2\u00ce\u00cf\5\22\n\2\u00cf\u00d6") - buf.write("\3\2\2\2\u00d0\u00d1\7/\2\2\u00d1\u00d2\5\16\b\2\u00d2") - buf.write("\u00d3\7\'\2\2\u00d3\u00d4\5\22\n\2\u00d4\u00d6\3\2\2") - buf.write("\2\u00d5\u00bf\3\2\2\2\u00d5\u00c7\3\2\2\2\u00d5\u00d0") - buf.write("\3\2\2\2\u00d6\21\3\2\2\2\u00d7\u00d9\7*\2\2\u00d8\u00da") - buf.write("\5\4\3\2\u00d9\u00d8\3\2\2\2\u00da\u00db\3\2\2\2\u00db") - buf.write("\u00d9\3\2\2\2\u00db\u00dc\3\2\2\2\u00dc\u00dd\3\2\2\2") - buf.write("\u00dd\u00de\7+\2\2\u00de\23\3\2\2\2\u00df\u00e0\b\13") - buf.write("\1\2\u00e0\u010d\5\36\20\2\u00e1\u00e2\7-\2\2\u00e2\u00e3") - buf.write("\5\26\f\2\u00e3\u00e4\7.\2\2\u00e4\u010d\3\2\2\2\u00e5") - buf.write("\u00eb\7\60\2\2\u00e6\u00e7\5\24\13\2\u00e7\u00e8\7\32") - buf.write("\2\2\u00e8\u00ea\3\2\2\2\u00e9\u00e6\3\2\2\2\u00ea\u00ed") - buf.write("\3\2\2\2\u00eb\u00e9\3\2\2\2\u00eb\u00ec\3\2\2\2\u00ec") - buf.write("\u00ef\3\2\2\2\u00ed\u00eb\3\2\2\2\u00ee\u00f0\5\24\13") - buf.write("\2\u00ef\u00ee\3\2\2\2\u00ef\u00f0\3\2\2\2\u00f0\u00f1") - buf.write("\3\2\2\2\u00f1\u010d\7\61\2\2\u00f2\u00f3\7\60\2\2\u00f3") - buf.write("\u00f5\5\24\13\2\u00f4\u00f6\5\32\16\2\u00f5\u00f4\3\2") - buf.write("\2\2\u00f6\u00f7\3\2\2\2\u00f7\u00f5\3\2\2\2\u00f7\u00f8") - buf.write("\3\2\2\2\u00f8\u00f9\3\2\2\2\u00f9\u00fa\7\61\2\2\u00fa") - buf.write("\u010d\3\2\2\2\u00fb\u00fc\t\4\2\2\u00fc\u010d\5\24\13") - buf.write("\23\u00fd\u00fe\7>\2\2\u00fe\u010d\5\24\13\b\u00ff\u0104") - buf.write("\7A\2\2\u0100\u0101\7J\2\2\u0101\u0103\7\32\2\2\u0102") - buf.write("\u0100\3\2\2\2\u0103\u0106\3\2\2\2\u0104\u0102\3\2\2\2") - buf.write("\u0104\u0105\3\2\2\2\u0105\u0108\3\2\2\2\u0106\u0104\3") - buf.write("\2\2\2\u0107\u0109\7J\2\2\u0108\u0107\3\2\2\2\u0108\u0109") - buf.write("\3\2\2\2\u0109\u010a\3\2\2\2\u010a\u010b\7B\2\2\u010b") - buf.write("\u010d\5\24\13\3\u010c\u00df\3\2\2\2\u010c\u00e1\3\2\2") - buf.write("\2\u010c\u00e5\3\2\2\2\u010c\u00f2\3\2\2\2\u010c\u00fb") - buf.write("\3\2\2\2\u010c\u00fd\3\2\2\2\u010c\u00ff\3\2\2\2\u010d") - buf.write("\u016d\3\2\2\2\u010e\u010f\f\24\2\2\u010f\u0110\7\13\2") - buf.write("\2\u0110\u016c\5\24\13\24\u0111\u0112\f\22\2\2\u0112\u0113") - buf.write("\t\5\2\2\u0113\u016c\5\24\13\23\u0114\u0115\f\21\2\2\u0115") - buf.write("\u0116\t\6\2\2\u0116\u016c\5\24\13\22\u0117\u0118\f\20") - buf.write("\2\2\u0118\u0119\t\7\2\2\u0119\u016c\5\24\13\21\u011a") - buf.write("\u011b\f\17\2\2\u011b\u011c\7\23\2\2\u011c\u016c\5\24") - buf.write("\13\20\u011d\u011e\f\16\2\2\u011e\u011f\7\24\2\2\u011f") - buf.write("\u016c\5\24\13\17\u0120\u0121\f\r\2\2\u0121\u0122\7\25") - buf.write("\2\2\u0122\u016c\5\24\13\16\u0123\u0124\f\f\2\2\u0124") - buf.write("\u0125\t\b\2\2\u0125\u016c\5\24\13\r\u0126\u0127\f\n\2") - buf.write("\2\u0127\u0128\t\t\2\2\u0128\u016c\5\24\13\13\u0129\u012a") - buf.write("\f\t\2\2\u012a\u012b\t\n\2\2\u012b\u016c\5\24\13\t\u012c") - buf.write("\u012d\f\7\2\2\u012d\u012e\7?\2\2\u012e\u016c\5\24\13") - buf.write("\7\u012f\u0130\f\6\2\2\u0130\u0131\7@\2\2\u0131\u016c") - buf.write("\5\24\13\6\u0132\u0133\f\5\2\2\u0133\u0134\7\26\2\2\u0134") - buf.write("\u016c\5\24\13\5\u0135\u0136\f\4\2\2\u0136\u0137\7\62") - buf.write("\2\2\u0137\u0138\5\24\13\2\u0138\u0139\7,\2\2\u0139\u013a") - buf.write("\5\24\13\4\u013a\u016c\3\2\2\2\u013b\u013d\f\31\2\2\u013c") - buf.write("\u013e\7\62\2\2\u013d\u013c\3\2\2\2\u013d\u013e\3\2\2") - buf.write("\2\u013e\u013f\3\2\2\2\u013f\u0140\7\60\2\2\u0140\u0141") - buf.write("\5\26\f\2\u0141\u0142\7\61\2\2\u0142\u016c\3\2\2\2\u0143") - buf.write("\u0144\f\30\2\2\u0144\u0146\7\60\2\2\u0145\u0147\5\24") - buf.write("\13\2\u0146\u0145\3\2\2\2\u0146\u0147\3\2\2\2\u0147\u0148") - buf.write("\3\2\2\2\u0148\u014a\7,\2\2\u0149\u014b\5\24\13\2\u014a") - buf.write("\u0149\3\2\2\2\u014a\u014b\3\2\2\2\u014b\u0150\3\2\2\2") - buf.write("\u014c\u014e\7,\2\2\u014d\u014f\5\24\13\2\u014e\u014d") - buf.write("\3\2\2\2\u014e\u014f\3\2\2\2\u014f\u0151\3\2\2\2\u0150") - buf.write("\u014c\3\2\2\2\u0150\u0151\3\2\2\2\u0151\u0152\3\2\2\2") - buf.write("\u0152\u016c\7\61\2\2\u0153\u0155\f\27\2\2\u0154\u0156") - buf.write("\7\62\2\2\u0155\u0154\3\2\2\2\u0155\u0156\3\2\2\2\u0156") - buf.write("\u0157\3\2\2\2\u0157\u0158\7\63\2\2\u0158\u016c\7J\2\2") - buf.write("\u0159\u015a\f\26\2\2\u015a\u0160\7-\2\2\u015b\u015c\5") - buf.write("\34\17\2\u015c\u015d\7\32\2\2\u015d\u015f\3\2\2\2\u015e") - buf.write("\u015b\3\2\2\2\u015f\u0162\3\2\2\2\u0160\u015e\3\2\2\2") - buf.write("\u0160\u0161\3\2\2\2\u0161\u0164\3\2\2\2\u0162\u0160\3") - buf.write("\2\2\2\u0163\u0165\5\34\17\2\u0164\u0163\3\2\2\2\u0164") - buf.write("\u0165\3\2\2\2\u0165\u0166\3\2\2\2\u0166\u016c\7.\2\2") - buf.write("\u0167\u0168\f\25\2\2\u0168\u016c\7\64\2\2\u0169\u016a") - buf.write("\f\13\2\2\u016a\u016c\7\67\2\2\u016b\u010e\3\2\2\2\u016b") - buf.write("\u0111\3\2\2\2\u016b\u0114\3\2\2\2\u016b\u0117\3\2\2\2") - buf.write("\u016b\u011a\3\2\2\2\u016b\u011d\3\2\2\2\u016b\u0120\3") - buf.write("\2\2\2\u016b\u0123\3\2\2\2\u016b\u0126\3\2\2\2\u016b\u0129") - buf.write("\3\2\2\2\u016b\u012c\3\2\2\2\u016b\u012f\3\2\2\2\u016b") - buf.write("\u0132\3\2\2\2\u016b\u0135\3\2\2\2\u016b\u013b\3\2\2\2") - buf.write("\u016b\u0143\3\2\2\2\u016b\u0153\3\2\2\2\u016b\u0159\3") - buf.write("\2\2\2\u016b\u0167\3\2\2\2\u016b\u0169\3\2\2\2\u016c\u016f") - buf.write("\3\2\2\2\u016d\u016b\3\2\2\2\u016d\u016e\3\2\2\2\u016e") - buf.write("\25\3\2\2\2\u016f\u016d\3\2\2\2\u0170\u0171\5\24\13\2") - buf.write("\u0171\u0172\7\32\2\2\u0172\u0174\3\2\2\2\u0173\u0170") - buf.write("\3\2\2\2\u0174\u0177\3\2\2\2\u0175\u0173\3\2\2\2\u0175") - buf.write("\u0176\3\2\2\2\u0176\u0178\3\2\2\2\u0177\u0175\3\2\2\2") - buf.write("\u0178\u0179\5\24\13\2\u0179\27\3\2\2\2\u017a\u017b\5") - buf.write("\26\f\2\u017b\u017c\7\2\2\3\u017c\31\3\2\2\2\u017d\u017e") - buf.write("\7!\2\2\u017e\u017f\5\26\f\2\u017f\u0180\7\"\2\2\u0180") - buf.write("\u0183\5\26\f\2\u0181\u0182\7#\2\2\u0182\u0184\5\26\f") - buf.write("\2\u0183\u0181\3\2\2\2\u0183\u0184\3\2\2\2\u0184\u0188") - buf.write("\3\2\2\2\u0185\u0186\7\33\2\2\u0186\u0188\5\24\13\2\u0187") - buf.write("\u017d\3\2\2\2\u0187\u0185\3\2\2\2\u0188\33\3\2\2\2\u0189") - buf.write("\u018a\7J\2\2\u018a\u018c\7\n\2\2\u018b\u0189\3\2\2\2") - buf.write("\u018b\u018c\3\2\2\2\u018c\u018d\3\2\2\2\u018d\u018e\5") - buf.write("\24\13\2\u018e\35\3\2\2\2\u018f\u0197\7F\2\2\u0190\u0197") - buf.write("\7G\2\2\u0191\u0197\t\13\2\2\u0192\u0197\7H\2\2\u0193") - buf.write("\u0197\7I\2\2\u0194\u0197\7E\2\2\u0195\u0197\7J\2\2\u0196") - buf.write("\u018f\3\2\2\2\u0196\u0190\3\2\2\2\u0196\u0191\3\2\2\2") - buf.write("\u0196\u0192\3\2\2\2\u0196\u0193\3\2\2\2\u0196\u0194\3") - buf.write("\2\2\2\u0196\u0195\3\2\2\2\u0197\37\3\2\2\2\u0198\u0199") - buf.write("\7J\2\2\u0199\u019b\7\32\2\2\u019a\u0198\3\2\2\2\u019b") - buf.write("\u019e\3\2\2\2\u019c\u019a\3\2\2\2\u019c\u019d\3\2\2\2") - buf.write("\u019d\u019f\3\2\2\2\u019e\u019c\3\2\2\2\u019f\u01a0\7") - buf.write("J\2\2\u01a0!\3\2\2\2\u01a1\u01a2\b\22\1\2\u01a2\u01ae") - buf.write("\7J\2\2\u01a3\u01a4\7-\2\2\u01a4\u01a5\5\"\22\2\u01a5") - buf.write("\u01a6\7.\2\2\u01a6\u01ae\3\2\2\2\u01a7\u01a8\7\60\2\2") - buf.write("\u01a8\u01a9\5\"\22\2\u01a9\u01aa\7\61\2\2\u01aa\u01ae") - buf.write("\3\2\2\2\u01ab\u01ac\7B\2\2\u01ac\u01ae\5\"\22\3\u01ad") - buf.write("\u01a1\3\2\2\2\u01ad\u01a3\3\2\2\2\u01ad\u01a7\3\2\2\2") - buf.write("\u01ad\u01ab\3\2\2\2\u01ae\u01b9\3\2\2\2\u01af\u01b0\f") - buf.write("\5\2\2\u01b0\u01b1\7\f\2\2\u01b1\u01b8\5\"\22\5\u01b2") - buf.write("\u01b3\f\4\2\2\u01b3\u01b4\7B\2\2\u01b4\u01b8\5\"\22\4") - buf.write("\u01b5\u01b6\f\6\2\2\u01b6\u01b8\7\62\2\2\u01b7\u01af") - buf.write("\3\2\2\2\u01b7\u01b2\3\2\2\2\u01b7\u01b5\3\2\2\2\u01b8") - buf.write("\u01bb\3\2\2\2\u01b9\u01b7\3\2\2\2\u01b9\u01ba\3\2\2\2") - buf.write("\u01ba#\3\2\2\2\u01bb\u01b9\3\2\2\2\63\'\60:?ELXZaou\u0087") - buf.write("\u0092\u0096\u009c\u00a5\u00a9\u00af\u00b7\u00bb\u00c3") - buf.write("\u00cb\u00d5\u00db\u00eb\u00ef\u00f7\u0104\u0108\u010c") - buf.write("\u013d\u0146\u014a\u014e\u0150\u0155\u0160\u0164\u016b") - buf.write("\u016d\u0175\u0183\u0187\u018b\u0196\u019c\u01ad\u01b7") - buf.write("\u01b9") + buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") + buf.write("\3\13\3\13\3\13\3\13\5\13\u0144\n\13\3\13\3\13\3\13\3") + buf.write("\13\3\13\3\13\3\13\5\13\u014d\n\13\3\13\3\13\5\13\u0151") + buf.write("\n\13\3\13\3\13\5\13\u0155\n\13\5\13\u0157\n\13\3\13\3") + buf.write("\13\3\13\5\13\u015c\n\13\3\13\3\13\3\13\3\13\3\13\3\13") + buf.write("\3\13\7\13\u0165\n\13\f\13\16\13\u0168\13\13\3\13\5\13") + buf.write("\u016b\n\13\3\13\3\13\3\13\3\13\3\13\7\13\u0172\n\13\f") + buf.write("\13\16\13\u0175\13\13\3\f\3\f\3\f\7\f\u017a\n\f\f\f\16") + buf.write("\f\u017d\13\f\3\f\3\f\3\r\3\r\3\r\3\16\3\16\3\16\3\16") + buf.write("\3\16\3\16\5\16\u018a\n\16\3\16\3\16\5\16\u018e\n\16\3") + buf.write("\17\3\17\5\17\u0192\n\17\3\17\3\17\3\20\3\20\3\20\3\20") + buf.write("\3\20\3\20\3\20\5\20\u019d\n\20\3\21\3\21\7\21\u01a1\n") + buf.write("\21\f\21\16\21\u01a4\13\21\3\21\3\21\3\22\3\22\3\22\3") + buf.write("\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\5\22\u01b4") + buf.write("\n\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\7\22\u01be") + buf.write("\n\22\f\22\16\22\u01c1\13\22\3\22\2\4\24\"\23\2\4\6\b") + buf.write("\n\f\16\20\22\24\26\30\32\34\36 \"\2\f\3\2\13\26\3\2\27") + buf.write("\30\4\2\17\20\65\65\3\2\f\16\3\2\17\20\3\2\21\22\3\2\66") + buf.write("\67\3\289\4\2%&:=\3\2CD\2\u020f\2\'\3\2\2\2\4\60\3\2\2") + buf.write("\2\6Z\3\2\2\2\b\\\3\2\2\2\n\u00af\3\2\2\2\f\u00b1\3\2") + buf.write("\2\2\16\u00b7\3\2\2\2\20\u00db\3\2\2\2\22\u00dd\3\2\2") + buf.write("\2\24\u0112\3\2\2\2\26\u017b\3\2\2\2\30\u0180\3\2\2\2") + buf.write("\32\u018d\3\2\2\2\34\u0191\3\2\2\2\36\u019c\3\2\2\2 \u01a2") + buf.write("\3\2\2\2\"\u01b3\3\2\2\2$&\5\4\3\2%$\3\2\2\2&)\3\2\2\2") + buf.write("\'%\3\2\2\2\'(\3\2\2\2(*\3\2\2\2)\'\3\2\2\2*+\7\2\2\3") + buf.write("+\3\3\2\2\2,-\5\6\4\2-.\7\3\2\2.\61\3\2\2\2/\61\5\n\6") + buf.write("\2\60,\3\2\2\2\60/\3\2\2\2\61\5\3\2\2\2\62\63\7\4\2\2") + buf.write("\63:\7J\2\2\64\65\7\5\2\2\65;\5 \21\2\66\67\7\6\2\2\67") + buf.write(";\5 \21\289\7\7\2\29;\7J\2\2:\64\3\2\2\2:\66\3\2\2\2:") + buf.write("8\3\2\2\2:;\3\2\2\2;[\3\2\2\2<[\7\b\2\2=?\7\t\2\2>@\5") + buf.write("\26\f\2?>\3\2\2\2?@\3\2\2\2@[\3\2\2\2AB\5\"\22\2BE\7J") + buf.write("\2\2CD\7\n\2\2DF\5\26\f\2EC\3\2\2\2EF\3\2\2\2F[\3\2\2") + buf.write("\2GH\5\b\5\2HI\7\n\2\2IK\3\2\2\2JG\3\2\2\2KN\3\2\2\2L") + buf.write("J\3\2\2\2LM\3\2\2\2MO\3\2\2\2NL\3\2\2\2O[\5\26\f\2PQ\5") + buf.write("\24\13\2QR\t\2\2\2RS\7\n\2\2ST\5\24\13\2T[\3\2\2\2U[\t") + buf.write("\3\2\2VX\7\31\2\2WY\5\26\f\2XW\3\2\2\2XY\3\2\2\2Y[\3\2") + buf.write("\2\2Z\62\3\2\2\2Z<\3\2\2\2Z=\3\2\2\2ZA\3\2\2\2ZL\3\2\2") + buf.write("\2ZP\3\2\2\2ZU\3\2\2\2ZV\3\2\2\2[\7\3\2\2\2\\a\5\24\13") + buf.write("\2]^\7\32\2\2^`\5\24\13\2_]\3\2\2\2`c\3\2\2\2a_\3\2\2") + buf.write("\2ab\3\2\2\2b\t\3\2\2\2ca\3\2\2\2de\7\33\2\2ef\5\24\13") + buf.write("\2fg\7\34\2\2go\5\22\n\2hi\7\35\2\2ij\5\24\13\2jk\7\34") + buf.write("\2\2kl\5\22\n\2ln\3\2\2\2mh\3\2\2\2nq\3\2\2\2om\3\2\2") + buf.write("\2op\3\2\2\2pu\3\2\2\2qo\3\2\2\2rs\7\36\2\2st\7\34\2\2") + buf.write("tv\5\22\n\2ur\3\2\2\2uv\3\2\2\2v\u00b0\3\2\2\2wx\7\37") + buf.write("\2\2xy\5\24\13\2yz\7\34\2\2z{\5\22\n\2{\u00b0\3\2\2\2") + buf.write("|}\7 \2\2}~\5\24\13\2~\177\7\34\2\2\177\u0080\5\22\n\2") + buf.write("\u0080\u00b0\3\2\2\2\u0081\u0082\7!\2\2\u0082\u0083\5") + buf.write("\26\f\2\u0083\u0084\7\"\2\2\u0084\u0087\5\26\f\2\u0085") + buf.write("\u0086\7#\2\2\u0086\u0088\5\26\f\2\u0087\u0085\3\2\2\2") + buf.write("\u0087\u0088\3\2\2\2\u0088\u0089\3\2\2\2\u0089\u008a\7") + buf.write("\34\2\2\u008a\u008b\5\22\n\2\u008b\u00b0\3\2\2\2\u008c") + buf.write("\u008d\7$\2\2\u008d\u0092\7J\2\2\u008e\u008f\7%\2\2\u008f") + buf.write("\u0090\5 \21\2\u0090\u0091\7&\2\2\u0091\u0093\3\2\2\2") + buf.write("\u0092\u008e\3\2\2\2\u0092\u0093\3\2\2\2\u0093\u0094\3") + buf.write("\2\2\2\u0094\u0096\5\16\b\2\u0095\u0097\5\"\22\2\u0096") + buf.write("\u0095\3\2\2\2\u0096\u0097\3\2\2\2\u0097\u009c\3\2\2\2") + buf.write("\u0098\u0099\7\'\2\2\u0099\u009d\5\22\n\2\u009a\u009b") + buf.write("\7(\2\2\u009b\u009d\7\3\2\2\u009c\u0098\3\2\2\2\u009c") + buf.write("\u009a\3\2\2\2\u009d\u00b0\3\2\2\2\u009e\u009f\7)\2\2") + buf.write("\u009f\u00a4\7J\2\2\u00a0\u00a1\7*\2\2\u00a1\u00a2\5\"") + buf.write("\22\2\u00a2\u00a3\7+\2\2\u00a3\u00a5\3\2\2\2\u00a4\u00a0") + buf.write("\3\2\2\2\u00a4\u00a5\3\2\2\2\u00a5\u00a6\3\2\2\2\u00a6") + buf.write("\u00a7\7\'\2\2\u00a7\u00a9\7,\2\2\u00a8\u00aa\5\20\t\2") + buf.write("\u00a9\u00a8\3\2\2\2\u00aa\u00ab\3\2\2\2\u00ab\u00a9\3") + buf.write("\2\2\2\u00ab\u00ac\3\2\2\2\u00ac\u00ad\3\2\2\2\u00ad\u00ae") + buf.write("\7-\2\2\u00ae\u00b0\3\2\2\2\u00afd\3\2\2\2\u00afw\3\2") + buf.write("\2\2\u00af|\3\2\2\2\u00af\u0081\3\2\2\2\u00af\u008c\3") + buf.write("\2\2\2\u00af\u009e\3\2\2\2\u00b0\13\3\2\2\2\u00b1\u00b2") + buf.write("\5\"\22\2\u00b2\u00b5\7J\2\2\u00b3\u00b4\7.\2\2\u00b4") + buf.write("\u00b6\5\24\13\2\u00b5\u00b3\3\2\2\2\u00b5\u00b6\3\2\2") + buf.write("\2\u00b6\r\3\2\2\2\u00b7\u00bd\7*\2\2\u00b8\u00b9\5\f") + buf.write("\7\2\u00b9\u00ba\7\32\2\2\u00ba\u00bc\3\2\2\2\u00bb\u00b8") + buf.write("\3\2\2\2\u00bc\u00bf\3\2\2\2\u00bd\u00bb\3\2\2\2\u00bd") + buf.write("\u00be\3\2\2\2\u00be\u00c1\3\2\2\2\u00bf\u00bd\3\2\2\2") + buf.write("\u00c0\u00c2\5\f\7\2\u00c1\u00c0\3\2\2\2\u00c1\u00c2\3") + buf.write("\2\2\2\u00c2\u00c3\3\2\2\2\u00c3\u00c4\7+\2\2\u00c4\17") + buf.write("\3\2\2\2\u00c5\u00c6\5\"\22\2\u00c6\u00c9\7J\2\2\u00c7") + buf.write("\u00c8\7.\2\2\u00c8\u00ca\5\26\f\2\u00c9\u00c7\3\2\2\2") + buf.write("\u00c9\u00ca\3\2\2\2\u00ca\u00cb\3\2\2\2\u00cb\u00cc\7") + buf.write("\3\2\2\u00cc\u00dc\3\2\2\2\u00cd\u00ce\7$\2\2\u00ce\u00cf") + buf.write("\7J\2\2\u00cf\u00d1\5\16\b\2\u00d0\u00d2\5\"\22\2\u00d1") + buf.write("\u00d0\3\2\2\2\u00d1\u00d2\3\2\2\2\u00d2\u00d3\3\2\2\2") + buf.write("\u00d3\u00d4\7\'\2\2\u00d4\u00d5\5\22\n\2\u00d5\u00dc") + buf.write("\3\2\2\2\u00d6\u00d7\7/\2\2\u00d7\u00d8\5\16\b\2\u00d8") + buf.write("\u00d9\7\'\2\2\u00d9\u00da\5\22\n\2\u00da\u00dc\3\2\2") + buf.write("\2\u00db\u00c5\3\2\2\2\u00db\u00cd\3\2\2\2\u00db\u00d6") + buf.write("\3\2\2\2\u00dc\21\3\2\2\2\u00dd\u00df\7,\2\2\u00de\u00e0") + buf.write("\5\4\3\2\u00df\u00de\3\2\2\2\u00e0\u00e1\3\2\2\2\u00e1") + buf.write("\u00df\3\2\2\2\u00e1\u00e2\3\2\2\2\u00e2\u00e3\3\2\2\2") + buf.write("\u00e3\u00e4\7-\2\2\u00e4\23\3\2\2\2\u00e5\u00e6\b\13") + buf.write("\1\2\u00e6\u0113\5\36\20\2\u00e7\u00e8\7*\2\2\u00e8\u00e9") + buf.write("\5\26\f\2\u00e9\u00ea\7+\2\2\u00ea\u0113\3\2\2\2\u00eb") + buf.write("\u00f1\7\60\2\2\u00ec\u00ed\5\24\13\2\u00ed\u00ee\7\32") + buf.write("\2\2\u00ee\u00f0\3\2\2\2\u00ef\u00ec\3\2\2\2\u00f0\u00f3") + buf.write("\3\2\2\2\u00f1\u00ef\3\2\2\2\u00f1\u00f2\3\2\2\2\u00f2") + buf.write("\u00f5\3\2\2\2\u00f3\u00f1\3\2\2\2\u00f4\u00f6\5\24\13") + buf.write("\2\u00f5\u00f4\3\2\2\2\u00f5\u00f6\3\2\2\2\u00f6\u00f7") + buf.write("\3\2\2\2\u00f7\u0113\7\61\2\2\u00f8\u00f9\7\60\2\2\u00f9") + buf.write("\u00fb\5\24\13\2\u00fa\u00fc\5\32\16\2\u00fb\u00fa\3\2") + buf.write("\2\2\u00fc\u00fd\3\2\2\2\u00fd\u00fb\3\2\2\2\u00fd\u00fe") + buf.write("\3\2\2\2\u00fe\u00ff\3\2\2\2\u00ff\u0100\7\61\2\2\u0100") + buf.write("\u0113\3\2\2\2\u0101\u0102\t\4\2\2\u0102\u0113\5\24\13") + buf.write("\23\u0103\u0104\7>\2\2\u0104\u0113\5\24\13\b\u0105\u010a") + buf.write("\7A\2\2\u0106\u0107\7J\2\2\u0107\u0109\7\32\2\2\u0108") + buf.write("\u0106\3\2\2\2\u0109\u010c\3\2\2\2\u010a\u0108\3\2\2\2") + buf.write("\u010a\u010b\3\2\2\2\u010b\u010e\3\2\2\2\u010c\u010a\3") + buf.write("\2\2\2\u010d\u010f\7J\2\2\u010e\u010d\3\2\2\2\u010e\u010f") + buf.write("\3\2\2\2\u010f\u0110\3\2\2\2\u0110\u0111\7B\2\2\u0111") + buf.write("\u0113\5\24\13\3\u0112\u00e5\3\2\2\2\u0112\u00e7\3\2\2") + buf.write("\2\u0112\u00eb\3\2\2\2\u0112\u00f8\3\2\2\2\u0112\u0101") + buf.write("\3\2\2\2\u0112\u0103\3\2\2\2\u0112\u0105\3\2\2\2\u0113") + buf.write("\u0173\3\2\2\2\u0114\u0115\f\24\2\2\u0115\u0116\7\13\2") + buf.write("\2\u0116\u0172\5\24\13\24\u0117\u0118\f\22\2\2\u0118\u0119") + buf.write("\t\5\2\2\u0119\u0172\5\24\13\23\u011a\u011b\f\21\2\2\u011b") + buf.write("\u011c\t\6\2\2\u011c\u0172\5\24\13\22\u011d\u011e\f\20") + buf.write("\2\2\u011e\u011f\t\7\2\2\u011f\u0172\5\24\13\21\u0120") + buf.write("\u0121\f\17\2\2\u0121\u0122\7\23\2\2\u0122\u0172\5\24") + buf.write("\13\20\u0123\u0124\f\16\2\2\u0124\u0125\7\24\2\2\u0125") + buf.write("\u0172\5\24\13\17\u0126\u0127\f\r\2\2\u0127\u0128\7\25") + buf.write("\2\2\u0128\u0172\5\24\13\16\u0129\u012a\f\f\2\2\u012a") + buf.write("\u012b\t\b\2\2\u012b\u0172\5\24\13\r\u012c\u012d\f\n\2") + buf.write("\2\u012d\u012e\t\t\2\2\u012e\u0172\5\24\13\13\u012f\u0130") + buf.write("\f\t\2\2\u0130\u0131\t\n\2\2\u0131\u0172\5\24\13\t\u0132") + buf.write("\u0133\f\7\2\2\u0133\u0134\7?\2\2\u0134\u0172\5\24\13") + buf.write("\7\u0135\u0136\f\6\2\2\u0136\u0137\7@\2\2\u0137\u0172") + buf.write("\5\24\13\6\u0138\u0139\f\5\2\2\u0139\u013a\7\26\2\2\u013a") + buf.write("\u0172\5\24\13\5\u013b\u013c\f\4\2\2\u013c\u013d\7\62") + buf.write("\2\2\u013d\u013e\5\24\13\2\u013e\u013f\7.\2\2\u013f\u0140") + buf.write("\5\24\13\4\u0140\u0172\3\2\2\2\u0141\u0143\f\31\2\2\u0142") + buf.write("\u0144\7\62\2\2\u0143\u0142\3\2\2\2\u0143\u0144\3\2\2") + buf.write("\2\u0144\u0145\3\2\2\2\u0145\u0146\7\60\2\2\u0146\u0147") + buf.write("\5\26\f\2\u0147\u0148\7\61\2\2\u0148\u0172\3\2\2\2\u0149") + buf.write("\u014a\f\30\2\2\u014a\u014c\7\60\2\2\u014b\u014d\5\24") + buf.write("\13\2\u014c\u014b\3\2\2\2\u014c\u014d\3\2\2\2\u014d\u014e") + buf.write("\3\2\2\2\u014e\u0150\7.\2\2\u014f\u0151\5\24\13\2\u0150") + buf.write("\u014f\3\2\2\2\u0150\u0151\3\2\2\2\u0151\u0156\3\2\2\2") + buf.write("\u0152\u0154\7.\2\2\u0153\u0155\5\24\13\2\u0154\u0153") + buf.write("\3\2\2\2\u0154\u0155\3\2\2\2\u0155\u0157\3\2\2\2\u0156") + buf.write("\u0152\3\2\2\2\u0156\u0157\3\2\2\2\u0157\u0158\3\2\2\2") + buf.write("\u0158\u0172\7\61\2\2\u0159\u015b\f\27\2\2\u015a\u015c") + buf.write("\7\62\2\2\u015b\u015a\3\2\2\2\u015b\u015c\3\2\2\2\u015c") + buf.write("\u015d\3\2\2\2\u015d\u015e\7\63\2\2\u015e\u0172\7J\2\2") + buf.write("\u015f\u0160\f\26\2\2\u0160\u0166\7*\2\2\u0161\u0162\5") + buf.write("\34\17\2\u0162\u0163\7\32\2\2\u0163\u0165\3\2\2\2\u0164") + buf.write("\u0161\3\2\2\2\u0165\u0168\3\2\2\2\u0166\u0164\3\2\2\2") + buf.write("\u0166\u0167\3\2\2\2\u0167\u016a\3\2\2\2\u0168\u0166\3") + buf.write("\2\2\2\u0169\u016b\5\34\17\2\u016a\u0169\3\2\2\2\u016a") + buf.write("\u016b\3\2\2\2\u016b\u016c\3\2\2\2\u016c\u0172\7+\2\2") + buf.write("\u016d\u016e\f\25\2\2\u016e\u0172\7\64\2\2\u016f\u0170") + buf.write("\f\13\2\2\u0170\u0172\7\67\2\2\u0171\u0114\3\2\2\2\u0171") + buf.write("\u0117\3\2\2\2\u0171\u011a\3\2\2\2\u0171\u011d\3\2\2\2") + buf.write("\u0171\u0120\3\2\2\2\u0171\u0123\3\2\2\2\u0171\u0126\3") + buf.write("\2\2\2\u0171\u0129\3\2\2\2\u0171\u012c\3\2\2\2\u0171\u012f") + buf.write("\3\2\2\2\u0171\u0132\3\2\2\2\u0171\u0135\3\2\2\2\u0171") + buf.write("\u0138\3\2\2\2\u0171\u013b\3\2\2\2\u0171\u0141\3\2\2\2") + buf.write("\u0171\u0149\3\2\2\2\u0171\u0159\3\2\2\2\u0171\u015f\3") + buf.write("\2\2\2\u0171\u016d\3\2\2\2\u0171\u016f\3\2\2\2\u0172\u0175") + buf.write("\3\2\2\2\u0173\u0171\3\2\2\2\u0173\u0174\3\2\2\2\u0174") + buf.write("\25\3\2\2\2\u0175\u0173\3\2\2\2\u0176\u0177\5\24\13\2") + buf.write("\u0177\u0178\7\32\2\2\u0178\u017a\3\2\2\2\u0179\u0176") + buf.write("\3\2\2\2\u017a\u017d\3\2\2\2\u017b\u0179\3\2\2\2\u017b") + buf.write("\u017c\3\2\2\2\u017c\u017e\3\2\2\2\u017d\u017b\3\2\2\2") + buf.write("\u017e\u017f\5\24\13\2\u017f\27\3\2\2\2\u0180\u0181\5") + buf.write("\26\f\2\u0181\u0182\7\2\2\3\u0182\31\3\2\2\2\u0183\u0184") + buf.write("\7!\2\2\u0184\u0185\5\26\f\2\u0185\u0186\7\"\2\2\u0186") + buf.write("\u0189\5\26\f\2\u0187\u0188\7#\2\2\u0188\u018a\5\26\f") + buf.write("\2\u0189\u0187\3\2\2\2\u0189\u018a\3\2\2\2\u018a\u018e") + buf.write("\3\2\2\2\u018b\u018c\7\33\2\2\u018c\u018e\5\24\13\2\u018d") + buf.write("\u0183\3\2\2\2\u018d\u018b\3\2\2\2\u018e\33\3\2\2\2\u018f") + buf.write("\u0190\7J\2\2\u0190\u0192\7\n\2\2\u0191\u018f\3\2\2\2") + buf.write("\u0191\u0192\3\2\2\2\u0192\u0193\3\2\2\2\u0193\u0194\5") + buf.write("\24\13\2\u0194\35\3\2\2\2\u0195\u019d\7F\2\2\u0196\u019d") + buf.write("\7G\2\2\u0197\u019d\t\13\2\2\u0198\u019d\7H\2\2\u0199") + buf.write("\u019d\7I\2\2\u019a\u019d\7E\2\2\u019b\u019d\7J\2\2\u019c") + buf.write("\u0195\3\2\2\2\u019c\u0196\3\2\2\2\u019c\u0197\3\2\2\2") + buf.write("\u019c\u0198\3\2\2\2\u019c\u0199\3\2\2\2\u019c\u019a\3") + buf.write("\2\2\2\u019c\u019b\3\2\2\2\u019d\37\3\2\2\2\u019e\u019f") + buf.write("\7J\2\2\u019f\u01a1\7\32\2\2\u01a0\u019e\3\2\2\2\u01a1") + buf.write("\u01a4\3\2\2\2\u01a2\u01a0\3\2\2\2\u01a2\u01a3\3\2\2\2") + buf.write("\u01a3\u01a5\3\2\2\2\u01a4\u01a2\3\2\2\2\u01a5\u01a6\7") + buf.write("J\2\2\u01a6!\3\2\2\2\u01a7\u01a8\b\22\1\2\u01a8\u01b4") + buf.write("\7J\2\2\u01a9\u01aa\7*\2\2\u01aa\u01ab\5\"\22\2\u01ab") + buf.write("\u01ac\7+\2\2\u01ac\u01b4\3\2\2\2\u01ad\u01ae\7\60\2\2") + buf.write("\u01ae\u01af\5\"\22\2\u01af\u01b0\7\61\2\2\u01b0\u01b4") + buf.write("\3\2\2\2\u01b1\u01b2\7B\2\2\u01b2\u01b4\5\"\22\3\u01b3") + buf.write("\u01a7\3\2\2\2\u01b3\u01a9\3\2\2\2\u01b3\u01ad\3\2\2\2") + buf.write("\u01b3\u01b1\3\2\2\2\u01b4\u01bf\3\2\2\2\u01b5\u01b6\f") + buf.write("\5\2\2\u01b6\u01b7\7\f\2\2\u01b7\u01be\5\"\22\5\u01b8") + buf.write("\u01b9\f\4\2\2\u01b9\u01ba\7B\2\2\u01ba\u01be\5\"\22\4") + buf.write("\u01bb\u01bc\f\6\2\2\u01bc\u01be\7\62\2\2\u01bd\u01b5") + buf.write("\3\2\2\2\u01bd\u01b8\3\2\2\2\u01bd\u01bb\3\2\2\2\u01be") + buf.write("\u01c1\3\2\2\2\u01bf\u01bd\3\2\2\2\u01bf\u01c0\3\2\2\2") + buf.write("\u01c0#\3\2\2\2\u01c1\u01bf\3\2\2\2\64\'\60:?ELXZaou\u0087") + buf.write("\u0092\u0096\u009c\u00a4\u00ab\u00af\u00b5\u00bd\u00c1") + buf.write("\u00c9\u00d1\u00db\u00e1\u00f1\u00f5\u00fd\u010a\u010e") + buf.write("\u0112\u0143\u014c\u0150\u0154\u0156\u015b\u0166\u016a") + buf.write("\u0171\u0173\u017b\u0189\u018d\u0191\u019c\u01a2\u01b3") + buf.write("\u01bd\u01bf") return buf.getvalue() @@ -251,8 +254,8 @@ class PyxellParser ( Parser ): "'|'", "'??'", "'break'", "'continue'", "'return'", "','", "'if'", "'do'", "'elif'", "'else'", "'while'", "'until'", "'for'", "'in'", "'step'", "'func'", "'<'", - "'>'", "'def'", "'extern'", "'class'", "'{'", "'}'", - "':'", "'('", "')'", "'constructor'", "'['", "']'", + "'>'", "'def'", "'extern'", "'class'", "'('", "')'", + "'{'", "'}'", "':'", "'constructor'", "'['", "']'", "'?'", "'.'", "'!'", "'~'", "'..'", "'...'", "'is'", "'isn't'", "'=='", "'!='", "'<='", "'>='", "'not'", "'and'", "'or'", "'lambda'", "'->'", "'true'", "'false'", @@ -425,7 +428,7 @@ def program(self): self.state = 37 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__38) | (1 << PyxellParser.T__42) | (1 << PyxellParser.T__45) | (1 << PyxellParser.T__50) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.T__66 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0): + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__38) | (1 << PyxellParser.T__39) | (1 << PyxellParser.T__45) | (1 << PyxellParser.T__50) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.T__66 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0): self.state = 34 self.stmt() self.state = 39 @@ -477,7 +480,7 @@ def stmt(self): self.state = 46 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__1, PyxellParser.T__5, PyxellParser.T__6, PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__20, PyxellParser.T__21, PyxellParser.T__22, PyxellParser.T__42, PyxellParser.T__45, PyxellParser.T__50, PyxellParser.T__59, PyxellParser.T__62, PyxellParser.T__63, PyxellParser.T__64, PyxellParser.T__65, PyxellParser.T__66, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: + if token in [PyxellParser.T__1, PyxellParser.T__5, PyxellParser.T__6, PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__20, PyxellParser.T__21, PyxellParser.T__22, PyxellParser.T__39, PyxellParser.T__45, PyxellParser.T__50, PyxellParser.T__59, PyxellParser.T__62, PyxellParser.T__63, PyxellParser.T__64, PyxellParser.T__65, PyxellParser.T__66, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: self.enterOuterAlt(localctx, 1) self.state = 42 self.simple_stmt() @@ -731,7 +734,7 @@ def simple_stmt(self): self.state = 61 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__42 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__39 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): self.state = 60 self.tuple_expr() @@ -817,7 +820,7 @@ def simple_stmt(self): self.state = 86 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__42 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__39 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): self.state = 85 self.tuple_expr() @@ -944,6 +947,9 @@ def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Com def ID(self): return self.getToken(PyxellParser.ID, 0) + def typ(self): + return self.getTypedRuleContext(PyxellParser.TypContext,0) + def class_member(self, i:int=None): if i is None: return self.getTypedRuleContexts(PyxellParser.Class_memberContext) @@ -1054,7 +1060,7 @@ def compound_stmt(self): self.enterRule(localctx, 8, self.RULE_compound_stmt) self._la = 0 # Token type try: - self.state = 167 + self.state = 173 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__24]: @@ -1171,7 +1177,7 @@ def compound_stmt(self): self.state = 148 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 43)) & ~0x3f) == 0 and ((1 << (_la - 43)) & ((1 << (PyxellParser.T__42 - 43)) | (1 << (PyxellParser.T__45 - 43)) | (1 << (PyxellParser.T__63 - 43)) | (1 << (PyxellParser.ID - 43)))) != 0): + if ((((_la - 40)) & ~0x3f) == 0 and ((1 << (_la - 40)) & ((1 << (PyxellParser.T__39 - 40)) | (1 << (PyxellParser.T__45 - 40)) | (1 << (PyxellParser.T__63 - 40)) | (1 << (PyxellParser.ID - 40)))) != 0): self.state = 147 localctx.ret = self.typ(0) @@ -1202,24 +1208,36 @@ def compound_stmt(self): self.match(PyxellParser.T__38) self.state = 157 self.match(PyxellParser.ID) - self.state = 158 + self.state = 162 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==PyxellParser.T__39: + self.state = 158 + self.match(PyxellParser.T__39) + self.state = 159 + self.typ(0) + self.state = 160 + self.match(PyxellParser.T__40) + + + self.state = 164 self.match(PyxellParser.T__36) - self.state = 159 - self.match(PyxellParser.T__39) - self.state = 161 + self.state = 165 + self.match(PyxellParser.T__41) + self.state = 167 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 160 + self.state = 166 self.class_member() - self.state = 163 + self.state = 169 self._errHandler.sync(self) _la = self._input.LA(1) - if not (((((_la - 34)) & ~0x3f) == 0 and ((1 << (_la - 34)) & ((1 << (PyxellParser.T__33 - 34)) | (1 << (PyxellParser.T__42 - 34)) | (1 << (PyxellParser.T__44 - 34)) | (1 << (PyxellParser.T__45 - 34)) | (1 << (PyxellParser.T__63 - 34)) | (1 << (PyxellParser.ID - 34)))) != 0)): + if not (((((_la - 34)) & ~0x3f) == 0 and ((1 << (_la - 34)) & ((1 << (PyxellParser.T__33 - 34)) | (1 << (PyxellParser.T__39 - 34)) | (1 << (PyxellParser.T__44 - 34)) | (1 << (PyxellParser.T__45 - 34)) | (1 << (PyxellParser.T__63 - 34)) | (1 << (PyxellParser.ID - 34)))) != 0)): break - self.state = 165 - self.match(PyxellParser.T__40) + self.state = 171 + self.match(PyxellParser.T__42) pass else: raise NoViableAltException(self) @@ -1280,17 +1298,17 @@ def func_arg(self): try: localctx = PyxellParser.FuncArgContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 169 + self.state = 175 self.typ(0) - self.state = 170 + self.state = 176 self.match(PyxellParser.ID) - self.state = 173 + self.state = 179 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__41: - self.state = 171 - self.match(PyxellParser.T__41) - self.state = 172 + if _la==PyxellParser.T__43: + self.state = 177 + self.match(PyxellParser.T__43) + self.state = 178 self.expr(0) @@ -1335,31 +1353,31 @@ def func_args(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 175 - self.match(PyxellParser.T__42) self.state = 181 + self.match(PyxellParser.T__39) + self.state = 187 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,18,self._ctx) + _alt = self._interp.adaptivePredict(self._input,19,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 176 + self.state = 182 self.func_arg() - self.state = 177 + self.state = 183 self.match(PyxellParser.T__23) - self.state = 183 + self.state = 189 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,18,self._ctx) + _alt = self._interp.adaptivePredict(self._input,19,self._ctx) - self.state = 185 + self.state = 191 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 43)) & ~0x3f) == 0 and ((1 << (_la - 43)) & ((1 << (PyxellParser.T__42 - 43)) | (1 << (PyxellParser.T__45 - 43)) | (1 << (PyxellParser.T__63 - 43)) | (1 << (PyxellParser.ID - 43)))) != 0): - self.state = 184 + if ((((_la - 40)) & ~0x3f) == 0 and ((1 << (_la - 40)) & ((1 << (PyxellParser.T__39 - 40)) | (1 << (PyxellParser.T__45 - 40)) | (1 << (PyxellParser.T__63 - 40)) | (1 << (PyxellParser.ID - 40)))) != 0): + self.state = 190 self.func_arg() - self.state = 187 - self.match(PyxellParser.T__43) + self.state = 193 + self.match(PyxellParser.T__40) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -1462,61 +1480,61 @@ def class_member(self): self.enterRule(localctx, 14, self.RULE_class_member) self._la = 0 # Token type try: - self.state = 211 + self.state = 217 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__42, PyxellParser.T__45, PyxellParser.T__63, PyxellParser.ID]: + if token in [PyxellParser.T__39, PyxellParser.T__45, PyxellParser.T__63, PyxellParser.ID]: localctx = PyxellParser.ClassFieldContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 189 + self.state = 195 self.typ(0) - self.state = 190 + self.state = 196 self.match(PyxellParser.ID) - self.state = 193 + self.state = 199 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__41: - self.state = 191 - self.match(PyxellParser.T__41) - self.state = 192 + if _la==PyxellParser.T__43: + self.state = 197 + self.match(PyxellParser.T__43) + self.state = 198 self.tuple_expr() - self.state = 195 + self.state = 201 self.match(PyxellParser.T__0) pass elif token in [PyxellParser.T__33]: localctx = PyxellParser.ClassMethodContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 197 + self.state = 203 self.match(PyxellParser.T__33) - self.state = 198 + self.state = 204 self.match(PyxellParser.ID) - self.state = 199 + self.state = 205 localctx.args = self.func_args() - self.state = 201 + self.state = 207 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 43)) & ~0x3f) == 0 and ((1 << (_la - 43)) & ((1 << (PyxellParser.T__42 - 43)) | (1 << (PyxellParser.T__45 - 43)) | (1 << (PyxellParser.T__63 - 43)) | (1 << (PyxellParser.ID - 43)))) != 0): - self.state = 200 + if ((((_la - 40)) & ~0x3f) == 0 and ((1 << (_la - 40)) & ((1 << (PyxellParser.T__39 - 40)) | (1 << (PyxellParser.T__45 - 40)) | (1 << (PyxellParser.T__63 - 40)) | (1 << (PyxellParser.ID - 40)))) != 0): + self.state = 206 localctx.ret = self.typ(0) - self.state = 203 + self.state = 209 self.match(PyxellParser.T__36) - self.state = 204 + self.state = 210 self.block() pass elif token in [PyxellParser.T__44]: localctx = PyxellParser.ClassConstructorContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 206 + self.state = 212 self.match(PyxellParser.T__44) - self.state = 207 + self.state = 213 localctx.args = self.func_args() - self.state = 208 + self.state = 214 self.match(PyxellParser.T__36) - self.state = 209 + self.state = 215 self.block() pass else: @@ -1563,22 +1581,22 @@ def block(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 213 - self.match(PyxellParser.T__39) - self.state = 215 + self.state = 219 + self.match(PyxellParser.T__41) + self.state = 221 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 214 + self.state = 220 self.stmt() - self.state = 217 + self.state = 223 self._errHandler.sync(self) _la = self._input.LA(1) - if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__38) | (1 << PyxellParser.T__42) | (1 << PyxellParser.T__45) | (1 << PyxellParser.T__50) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.T__66 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0)): + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__38) | (1 << PyxellParser.T__39) | (1 << PyxellParser.T__45) | (1 << PyxellParser.T__50) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.T__66 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0)): break - self.state = 219 - self.match(PyxellParser.T__40) + self.state = 225 + self.match(PyxellParser.T__42) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -1943,15 +1961,15 @@ def expr(self, _p:int=0): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 266 + self.state = 272 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,29,self._ctx) + la_ = self._interp.adaptivePredict(self._input,30,self._ctx) if la_ == 1: localctx = PyxellParser.ExprAtomContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 222 + self.state = 228 self.atom() pass @@ -1959,42 +1977,42 @@ def expr(self, _p:int=0): localctx = PyxellParser.ExprParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 223 - self.match(PyxellParser.T__42) - self.state = 224 + self.state = 229 + self.match(PyxellParser.T__39) + self.state = 230 self.tuple_expr() - self.state = 225 - self.match(PyxellParser.T__43) + self.state = 231 + self.match(PyxellParser.T__40) pass elif la_ == 3: localctx = PyxellParser.ExprArrayContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 227 - self.match(PyxellParser.T__45) self.state = 233 + self.match(PyxellParser.T__45) + self.state = 239 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,24,self._ctx) + _alt = self._interp.adaptivePredict(self._input,25,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 228 + self.state = 234 self.expr(0) - self.state = 229 + self.state = 235 self.match(PyxellParser.T__23) - self.state = 235 + self.state = 241 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,24,self._ctx) + _alt = self._interp.adaptivePredict(self._input,25,self._ctx) - self.state = 237 + self.state = 243 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__42 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 236 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__39 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 242 self.expr(0) - self.state = 239 + self.state = 245 self.match(PyxellParser.T__46) pass @@ -2002,23 +2020,23 @@ def expr(self, _p:int=0): localctx = PyxellParser.ExprArrayComprehensionContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 240 + self.state = 246 self.match(PyxellParser.T__45) - self.state = 241 + self.state = 247 self.expr(0) - self.state = 243 + self.state = 249 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 242 + self.state = 248 self.comprehension() - self.state = 245 + self.state = 251 self._errHandler.sync(self) _la = self._input.LA(1) if not (_la==PyxellParser.T__24 or _la==PyxellParser.T__30): break - self.state = 247 + self.state = 253 self.match(PyxellParser.T__46) pass @@ -2026,7 +2044,7 @@ def expr(self, _p:int=0): localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 249 + self.state = 255 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__50))) != 0)): @@ -2034,7 +2052,7 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 250 + self.state = 256 self.expr(17) pass @@ -2042,9 +2060,9 @@ def expr(self, _p:int=0): localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 251 + self.state = 257 localctx.op = self.match(PyxellParser.T__59) - self.state = 252 + self.state = 258 self.expr(6) pass @@ -2052,69 +2070,69 @@ def expr(self, _p:int=0): localctx = PyxellParser.ExprLambdaContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 253 + self.state = 259 self.match(PyxellParser.T__62) - self.state = 258 + self.state = 264 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,27,self._ctx) + _alt = self._interp.adaptivePredict(self._input,28,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 254 + self.state = 260 self.match(PyxellParser.ID) - self.state = 255 + self.state = 261 self.match(PyxellParser.T__23) - self.state = 260 + self.state = 266 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,27,self._ctx) + _alt = self._interp.adaptivePredict(self._input,28,self._ctx) - self.state = 262 + self.state = 268 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.ID: - self.state = 261 + self.state = 267 self.match(PyxellParser.ID) - self.state = 264 + self.state = 270 self.match(PyxellParser.T__63) - self.state = 265 + self.state = 271 self.expr(1) pass self._ctx.stop = self._input.LT(-1) - self.state = 363 + self.state = 369 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,39,self._ctx) + _alt = self._interp.adaptivePredict(self._input,40,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 361 + self.state = 367 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,38,self._ctx) + la_ = self._interp.adaptivePredict(self._input,39,self._ctx) if la_ == 1: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 268 + self.state = 274 if not self.precpred(self._ctx, 18): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 18)") - self.state = 269 + self.state = 275 localctx.op = self.match(PyxellParser.T__8) - self.state = 270 + self.state = 276 self.expr(18) pass elif la_ == 2: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 271 + self.state = 277 if not self.precpred(self._ctx, 16): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 16)") - self.state = 272 + self.state = 278 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__9) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__11))) != 0)): @@ -2122,18 +2140,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 273 + self.state = 279 self.expr(17) pass elif la_ == 3: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 274 + self.state = 280 if not self.precpred(self._ctx, 15): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 15)") - self.state = 275 + self.state = 281 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__12 or _la==PyxellParser.T__13): @@ -2141,18 +2159,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 276 + self.state = 282 self.expr(16) pass elif la_ == 4: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 277 + self.state = 283 if not self.precpred(self._ctx, 14): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 14)") - self.state = 278 + self.state = 284 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__14 or _la==PyxellParser.T__15): @@ -2160,57 +2178,57 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 279 + self.state = 285 self.expr(15) pass elif la_ == 5: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 280 + self.state = 286 if not self.precpred(self._ctx, 13): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") - self.state = 281 + self.state = 287 localctx.op = self.match(PyxellParser.T__16) - self.state = 282 + self.state = 288 self.expr(14) pass elif la_ == 6: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 283 + self.state = 289 if not self.precpred(self._ctx, 12): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 12)") - self.state = 284 + self.state = 290 localctx.op = self.match(PyxellParser.T__17) - self.state = 285 + self.state = 291 self.expr(13) pass elif la_ == 7: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 286 + self.state = 292 if not self.precpred(self._ctx, 11): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") - self.state = 287 + self.state = 293 localctx.op = self.match(PyxellParser.T__18) - self.state = 288 + self.state = 294 self.expr(12) pass elif la_ == 8: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 289 + self.state = 295 if not self.precpred(self._ctx, 10): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") - self.state = 290 + self.state = 296 localctx.dots = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__51 or _la==PyxellParser.T__52): @@ -2218,18 +2236,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 291 + self.state = 297 self.expr(11) pass elif la_ == 9: localctx = PyxellParser.ExprIsContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 292 + self.state = 298 if not self.precpred(self._ctx, 8): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") - self.state = 293 + self.state = 299 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__53 or _la==PyxellParser.T__54): @@ -2237,18 +2255,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 294 + self.state = 300 self.expr(9) pass elif la_ == 10: localctx = PyxellParser.ExprCmpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 295 + self.state = 301 if not self.precpred(self._ctx, 7): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") - self.state = 296 + self.state = 302 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__34) | (1 << PyxellParser.T__35) | (1 << PyxellParser.T__55) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58))) != 0)): @@ -2256,217 +2274,217 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 297 + self.state = 303 self.expr(7) pass elif la_ == 11: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 298 + self.state = 304 if not self.precpred(self._ctx, 5): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") - self.state = 299 + self.state = 305 localctx.op = self.match(PyxellParser.T__60) - self.state = 300 + self.state = 306 self.expr(5) pass elif la_ == 12: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 301 + self.state = 307 if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") - self.state = 302 + self.state = 308 localctx.op = self.match(PyxellParser.T__61) - self.state = 303 + self.state = 309 self.expr(4) pass elif la_ == 13: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 304 + self.state = 310 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 305 + self.state = 311 localctx.op = self.match(PyxellParser.T__19) - self.state = 306 + self.state = 312 self.expr(3) pass elif la_ == 14: localctx = PyxellParser.ExprCondContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 307 + self.state = 313 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 308 + self.state = 314 self.match(PyxellParser.T__47) - self.state = 309 + self.state = 315 self.expr(0) - self.state = 310 - self.match(PyxellParser.T__41) - self.state = 311 + self.state = 316 + self.match(PyxellParser.T__43) + self.state = 317 self.expr(2) pass elif la_ == 15: localctx = PyxellParser.ExprIndexContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 313 + self.state = 319 if not self.precpred(self._ctx, 23): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 23)") - self.state = 315 + self.state = 321 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__47: - self.state = 314 + self.state = 320 localctx.safe = self.match(PyxellParser.T__47) - self.state = 317 + self.state = 323 self.match(PyxellParser.T__45) - self.state = 318 + self.state = 324 self.tuple_expr() - self.state = 319 + self.state = 325 self.match(PyxellParser.T__46) pass elif la_ == 16: localctx = PyxellParser.ExprSliceContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 321 + self.state = 327 if not self.precpred(self._ctx, 22): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 22)") - self.state = 322 + self.state = 328 self.match(PyxellParser.T__45) - self.state = 324 + self.state = 330 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__42 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 323 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__39 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 329 localctx.e1 = self.expr(0) - self.state = 326 - self.match(PyxellParser.T__41) - self.state = 328 + self.state = 332 + self.match(PyxellParser.T__43) + self.state = 334 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__42 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 327 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__39 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 333 localctx.e2 = self.expr(0) - self.state = 334 + self.state = 340 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__41: - self.state = 330 - self.match(PyxellParser.T__41) - self.state = 332 + if _la==PyxellParser.T__43: + self.state = 336 + self.match(PyxellParser.T__43) + self.state = 338 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__42 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 331 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__39 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 337 localctx.e3 = self.expr(0) - self.state = 336 + self.state = 342 self.match(PyxellParser.T__46) pass elif la_ == 17: localctx = PyxellParser.ExprAttrContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 337 + self.state = 343 if not self.precpred(self._ctx, 21): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 21)") - self.state = 339 + self.state = 345 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__47: - self.state = 338 + self.state = 344 localctx.safe = self.match(PyxellParser.T__47) - self.state = 341 + self.state = 347 self.match(PyxellParser.T__48) - self.state = 342 + self.state = 348 self.match(PyxellParser.ID) pass elif la_ == 18: localctx = PyxellParser.ExprCallContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 343 + self.state = 349 if not self.precpred(self._ctx, 20): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 20)") - self.state = 344 - self.match(PyxellParser.T__42) self.state = 350 + self.match(PyxellParser.T__39) + self.state = 356 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,36,self._ctx) + _alt = self._interp.adaptivePredict(self._input,37,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 345 + self.state = 351 self.call_arg() - self.state = 346 + self.state = 352 self.match(PyxellParser.T__23) - self.state = 352 + self.state = 358 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,36,self._ctx) + _alt = self._interp.adaptivePredict(self._input,37,self._ctx) - self.state = 354 + self.state = 360 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__42 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 353 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__39 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 359 self.call_arg() - self.state = 356 - self.match(PyxellParser.T__43) + self.state = 362 + self.match(PyxellParser.T__40) pass elif la_ == 19: localctx = PyxellParser.ExprUnaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 357 + self.state = 363 if not self.precpred(self._ctx, 19): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 19)") - self.state = 358 + self.state = 364 localctx.op = self.match(PyxellParser.T__49) pass elif la_ == 20: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 359 + self.state = 365 if not self.precpred(self._ctx, 9): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") - self.state = 360 + self.state = 366 localctx.dots = self.match(PyxellParser.T__52) pass - self.state = 365 + self.state = 371 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,39,self._ctx) + _alt = self._interp.adaptivePredict(self._input,40,self._ctx) except RecognitionException as re: localctx.exception = re @@ -2521,20 +2539,20 @@ def tuple_expr(self): try: localctx = PyxellParser.ExprTupleContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 371 + self.state = 377 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,40,self._ctx) + _alt = self._interp.adaptivePredict(self._input,41,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 366 + self.state = 372 self.expr(0) - self.state = 367 + self.state = 373 self.match(PyxellParser.T__23) - self.state = 373 + self.state = 379 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,40,self._ctx) + _alt = self._interp.adaptivePredict(self._input,41,self._ctx) - self.state = 374 + self.state = 380 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -2588,9 +2606,9 @@ def interpolation_expr(self): try: localctx = PyxellParser.ExprInterpolationContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 376 + self.state = 382 self.tuple_expr() - self.state = 377 + self.state = 383 self.match(PyxellParser.EOF) except RecognitionException as re: localctx.exception = re @@ -2661,27 +2679,27 @@ def comprehension(self): self.enterRule(localctx, 24, self.RULE_comprehension) self._la = 0 # Token type try: - self.state = 389 + self.state = 395 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__30]: localctx = PyxellParser.ComprehensionGeneratorContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 379 + self.state = 385 self.match(PyxellParser.T__30) - self.state = 380 + self.state = 386 self.tuple_expr() - self.state = 381 + self.state = 387 self.match(PyxellParser.T__31) - self.state = 382 + self.state = 388 self.tuple_expr() - self.state = 385 + self.state = 391 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__32: - self.state = 383 + self.state = 389 self.match(PyxellParser.T__32) - self.state = 384 + self.state = 390 self.tuple_expr() @@ -2689,9 +2707,9 @@ def comprehension(self): elif token in [PyxellParser.T__24]: localctx = PyxellParser.ComprehensionFilterContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 387 + self.state = 393 self.match(PyxellParser.T__24) - self.state = 388 + self.state = 394 self.expr(0) pass else: @@ -2749,17 +2767,17 @@ def call_arg(self): try: localctx = PyxellParser.CallArgContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 393 + self.state = 399 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,43,self._ctx) + la_ = self._interp.adaptivePredict(self._input,44,self._ctx) if la_ == 1: - self.state = 391 + self.state = 397 self.match(PyxellParser.ID) - self.state = 392 + self.state = 398 self.match(PyxellParser.T__7) - self.state = 395 + self.state = 401 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -2901,25 +2919,25 @@ def atom(self): self.enterRule(localctx, 28, self.RULE_atom) self._la = 0 # Token type try: - self.state = 404 + self.state = 410 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: localctx = PyxellParser.AtomIntContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 397 + self.state = 403 self.match(PyxellParser.INT) pass elif token in [PyxellParser.FLOAT]: localctx = PyxellParser.AtomFloatContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 398 + self.state = 404 self.match(PyxellParser.FLOAT) pass elif token in [PyxellParser.T__64, PyxellParser.T__65]: localctx = PyxellParser.AtomBoolContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 399 + self.state = 405 _la = self._input.LA(1) if not(_la==PyxellParser.T__64 or _la==PyxellParser.T__65): self._errHandler.recoverInline(self) @@ -2930,25 +2948,25 @@ def atom(self): elif token in [PyxellParser.CHAR]: localctx = PyxellParser.AtomCharContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 400 + self.state = 406 self.match(PyxellParser.CHAR) pass elif token in [PyxellParser.STRING]: localctx = PyxellParser.AtomStringContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 401 + self.state = 407 self.match(PyxellParser.STRING) pass elif token in [PyxellParser.T__66]: localctx = PyxellParser.AtomNullContext(self, localctx) self.enterOuterAlt(localctx, 6) - self.state = 402 + self.state = 408 self.match(PyxellParser.T__66) pass elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) self.enterOuterAlt(localctx, 7) - self.state = 403 + self.state = 409 self.match(PyxellParser.ID) pass else: @@ -3006,20 +3024,20 @@ def id_list(self): try: localctx = PyxellParser.IdListContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 410 + self.state = 416 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,45,self._ctx) + _alt = self._interp.adaptivePredict(self._input,46,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 406 + self.state = 412 self.match(PyxellParser.ID) - self.state = 407 + self.state = 413 self.match(PyxellParser.T__23) - self.state = 412 + self.state = 418 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,45,self._ctx) + _alt = self._interp.adaptivePredict(self._input,46,self._ctx) - self.state = 413 + self.state = 419 self.match(PyxellParser.ID) except RecognitionException as re: localctx.exception = re @@ -3179,7 +3197,7 @@ def typ(self, _p:int=0): self.enterRecursionRule(localctx, 32, self.RULE_typ, _p) try: self.enterOuterAlt(localctx, 1) - self.state = 427 + self.state = 433 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.ID]: @@ -3187,96 +3205,96 @@ def typ(self, _p:int=0): self._ctx = localctx _prevctx = localctx - self.state = 416 + self.state = 422 self.match(PyxellParser.ID) pass - elif token in [PyxellParser.T__42]: + elif token in [PyxellParser.T__39]: localctx = PyxellParser.TypeParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 417 - self.match(PyxellParser.T__42) - self.state = 418 + self.state = 423 + self.match(PyxellParser.T__39) + self.state = 424 self.typ(0) - self.state = 419 - self.match(PyxellParser.T__43) + self.state = 425 + self.match(PyxellParser.T__40) pass elif token in [PyxellParser.T__45]: localctx = PyxellParser.TypeArrayContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 421 + self.state = 427 self.match(PyxellParser.T__45) - self.state = 422 + self.state = 428 self.typ(0) - self.state = 423 + self.state = 429 self.match(PyxellParser.T__46) pass elif token in [PyxellParser.T__63]: localctx = PyxellParser.TypeFunc0Context(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 425 + self.state = 431 self.match(PyxellParser.T__63) - self.state = 426 + self.state = 432 self.typ(1) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 439 + self.state = 445 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,48,self._ctx) + _alt = self._interp.adaptivePredict(self._input,49,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 437 + self.state = 443 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,47,self._ctx) + la_ = self._interp.adaptivePredict(self._input,48,self._ctx) if la_ == 1: localctx = PyxellParser.TypeTupleContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 429 + self.state = 435 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 430 + self.state = 436 self.match(PyxellParser.T__9) - self.state = 431 + self.state = 437 self.typ(3) pass elif la_ == 2: localctx = PyxellParser.TypeFuncContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 432 + self.state = 438 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 433 + self.state = 439 self.match(PyxellParser.T__63) - self.state = 434 + self.state = 440 self.typ(2) pass elif la_ == 3: localctx = PyxellParser.TypeNullableContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 435 + self.state = 441 if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") - self.state = 436 + self.state = 442 self.match(PyxellParser.T__47) pass - self.state = 441 + self.state = 447 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,48,self._ctx) + _alt = self._interp.adaptivePredict(self._input,49,self._ctx) except RecognitionException as re: localctx.exception = re diff --git a/src/ast.py b/src/ast.py index 8d8aa1c1..610e6ba0 100644 --- a/src/ast.py +++ b/src/ast.py @@ -165,6 +165,7 @@ def visitStmtClass(self, ctx): return { **_node(ctx, 'StmtClass'), 'id': self.visit(ctx.ID()), + 'base': self.visit(ctx.typ()), 'members': self.visit(ctx.class_member()), } diff --git a/src/compiler.py b/src/compiler.py index 2896714c..74b42ea0 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -1381,16 +1381,28 @@ def compileStmtClass(self, node): self.throw(node, err.RedeclaredIdentifier(id)) self.initialized.add(id) - member_types = {} - methods = {} - - type = tClass(self.module.context, id, member_types) - self.env[id] = type + base = self.compile(node['base']) + if base and not base.isClass(): + self.throw(node, err.NotClass(base)) + declared_members = set() for member in node['members']: name = member['id'] - if name in member_types: + if name in declared_members: self.throw(member, err.RepeatedMember(name)) + declared_members.add(name) + + members = base.members.copy() if base else {} + for member in node['members']: + members[member['id']] = member + + type = tClass(self.module.context, id, base, members) + self.env[id] = type + + member_types = {} + methods = {} + + for name, member in members.items(): if member['node'] == 'ClassField': member_types[name] = self.compile(member['type']) elif member['node'] in ('ClassMethod', 'ClassConstructor'): @@ -1398,6 +1410,14 @@ def compileStmtClass(self, node): member_types[name] = func.type methods[name] = func + if base: + original_field = base.members.get(name) + if original_field and original_field['node'] == 'ClassField': + original_type = self.compile(original_field['type']) + new_type = member_types[name] + if not can_cast(new_type, original_type): + self.throw(member, err.IllegalOverride(original_type, new_type)) + type.pointee.set_body(*member_types.values()) constructor_method = methods.get('') @@ -1414,8 +1434,7 @@ def compileStmtClass(self, node): obj = self.malloc(type) - for i, member in enumerate(node['members']): - name = member['id'] + for i, (name, member) in enumerate(members.items()): if member['node'] == 'ClassField': default = member.get('default') if default: diff --git a/src/errors.py b/src/errors.py index fa330749..cd01beee 100644 --- a/src/errors.py +++ b/src/errors.py @@ -17,6 +17,7 @@ class PyxellError(Exception): ExpectedNamedArgument = lambda: f"Positional argument cannot follow named arguments" IllegalAssignment = lambda t1, t2: f"Illegal assignment from `{t1.show()}` to `{t2.show()}`" IllegalLambda = lambda: "Lambda expression cannot be used in this context" + IllegalOverride = lambda t1, t2: f"Cannot override member of type `{t1.show()}` with type `{t2.show()}`" IllegalRange = lambda: "Range expression cannot be used in this context" InvalidArgumentTypes = lambda t: f"Cannot unify argument types for type variable `{t.show()}`" InvalidDeclaration = lambda t: f"Cannot declare variable of type `{t.show()}`" @@ -35,6 +36,7 @@ class PyxellError(Exception): NotFunction = lambda t: f"Type `{t.show()}` is not a function" NotNullable = lambda t: f"Type `{t.show()}` is not nullable" NotPrintable = lambda t: f"Variable of type `{t.show()}` cannot be printed" + NotClass = lambda t: f"Type `{t.show()}` is not a class" NotType = lambda id: f"Identifier `{id}` does not represent a type" NotVariable = lambda id: f"Identifier `{id}` does not represent a variable" RedeclaredIdentifier = lambda id: f"Identifier `{id}` is already declared" diff --git a/src/types.py b/src/types.py index f6d952c0..95bfe8fd 100644 --- a/src/types.py +++ b/src/types.py @@ -141,10 +141,11 @@ def isFunc(type): return getattr(type, 'kind', None) == 'function' -def tClass(context, name, members): +def tClass(context, name, base, members): type = tPtr(context.get_identified_type(name)) type.kind = 'class' type.name = name + type.base = base type.members = members type.constructor = None return type @@ -208,6 +209,9 @@ def unify_types(type1, *types): elems = [unify_types(t1, t2) for t1, t2 in zip(type1.elements, type2.elements)] return tTuple(elems) if all(elems) and len(type1.elements) == len(type2.elements) else None + if type1.isClass() and type2.isClass(): + return common_superclass(type1, type2) + if type1 == tUnknown: return type2 if type2 == tUnknown: @@ -216,6 +220,27 @@ def unify_types(type1, *types): return None +def common_superclass(type1, type2): + t1 = type1 + t2 = type2 + + while True: + if t1 == t2: + return t1 + + if t1.base and t2.base: + t1 = t1.base + t2 = t2.base + elif t1.base: + t1 = t1.base + t2 = type2 + elif t2.base: + t1 = type1 + t2 = t2.base + else: + return None + + def type_variables_assignment(type1, type2): if type1.isArray() and type2.isArray(): @@ -249,6 +274,9 @@ def type_variables_assignment(type1, type2): tTuple([arg.type for arg in type1.args] + [type1.ret]), tTuple([arg.type for arg in type2.args] + [type2.ret])) + if type1.isClass() and type2.isClass(): + return {} if common_superclass(type1, type2) == type2 else None + if type2.isVar(): return {type2.name: type1} diff --git a/test/bad/classes/inheritance05.err b/test/bad/classes/inheritance05.err index f43c5a18..402ceadc 100644 --- a/test/bad/classes/inheritance05.err +++ b/test/bad/classes/inheritance05.err @@ -1 +1 @@ -Illegal assignment from `Float` to `Int`. \ No newline at end of file +Cannot override member of type `Int` with type `Float`. \ No newline at end of file diff --git a/test/bad/classes/inheritance06.err b/test/bad/classes/inheritance06.err index 5bc09db9..f6b2ec54 100644 --- a/test/bad/classes/inheritance06.err +++ b/test/bad/classes/inheritance06.err @@ -1 +1 @@ -Illegal assignment from `A` to `A'`. \ No newline at end of file +Cannot override member of type `A'` with type `A`. \ No newline at end of file diff --git a/test/bad/classes/type03.err b/test/bad/classes/type03.err index d8330ce5..9f95d1d5 100644 --- a/test/bad/classes/type03.err +++ b/test/bad/classes/type03.err @@ -1 +1 @@ -Illegal assignment from `[B]` to `[A]`. \ No newline at end of file +Illegal assignment from `[A]` to `[B]`. \ No newline at end of file diff --git a/test/bad/classes/type03.px b/test/bad/classes/type03.px index 6486925b..e76b9036 100644 --- a/test/bad/classes/type03.px +++ b/test/bad/classes/type03.px @@ -5,5 +5,5 @@ class A def class B(A) def Int y -a = [A()] -a = [B()] +b = [B()] +b = [A()] diff --git a/test/bad/classes/type04.err b/test/bad/classes/type04.err deleted file mode 100644 index d8330ce5..00000000 --- a/test/bad/classes/type04.err +++ /dev/null @@ -1 +0,0 @@ -Illegal assignment from `[B]` to `[A]`. \ No newline at end of file diff --git a/test/bad/classes/type04.px b/test/bad/classes/type04.px deleted file mode 100644 index 9d60ab8e..00000000 --- a/test/bad/classes/type04.px +++ /dev/null @@ -1,13 +0,0 @@ - -class A def - Int x - -class B(A) def - Int y - - -func f([A] a) def - return - -b = [B()] -f(b) diff --git a/test/good/arrays/covariance01.out b/test/good/arrays/covariance01.out new file mode 100644 index 00000000..0cfbf088 --- /dev/null +++ b/test/good/arrays/covariance01.out @@ -0,0 +1 @@ +2 diff --git a/test/good/arrays/covariance01.px b/test/good/arrays/covariance01.px new file mode 100644 index 00000000..16becb5d --- /dev/null +++ b/test/good/arrays/covariance01.px @@ -0,0 +1,10 @@ + +class A def + Int x: 1 + +class B(A) def + Int x: 2 + +a = [A()] +a = [B()] +print a[0].x diff --git a/test/good/arrays/covariance02.out b/test/good/arrays/covariance02.out new file mode 100644 index 00000000..90659bd6 --- /dev/null +++ b/test/good/arrays/covariance02.out @@ -0,0 +1,2 @@ +B +C diff --git a/test/good/arrays/covariance02.px b/test/good/arrays/covariance02.px new file mode 100644 index 00000000..1c504006 --- /dev/null +++ b/test/good/arrays/covariance02.px @@ -0,0 +1,21 @@ + +class A def + func x() Char def + return 'A' + +class B(A) def + func x() Char def + return 'B' + +class C(A) def + func x() Char def + return 'C' + + +func f([A] a) def + print a[0].x() + a[0] = C() + +b = [B()] +f(b) +print b[0].x() diff --git a/test/good/classes/inheritance10.out b/test/good/classes/inheritance10.out new file mode 100644 index 00000000..90659bd6 --- /dev/null +++ b/test/good/classes/inheritance10.out @@ -0,0 +1,2 @@ +B +C diff --git a/test/good/classes/inheritance10.px b/test/good/classes/inheritance10.px new file mode 100644 index 00000000..96e9ecc3 --- /dev/null +++ b/test/good/classes/inheritance10.px @@ -0,0 +1,15 @@ + +class A def + Char x: 'A' + +class B(A) def + Char x: 'B' + +class C(B) def + Char x: 'C' + +b = B() +print b.x + +b = C() +print b.x diff --git a/test/good/classes/unification04.out b/test/good/classes/unification04.out index 6d8555b0..f8c8e200 100644 --- a/test/good/classes/unification04.out +++ b/test/good/classes/unification04.out @@ -1,2 +1,4 @@ 4 1 B +$$$ +0 A diff --git a/test/good/classes/unification04.px b/test/good/classes/unification04.px index 7a35eb77..c264ffd5 100644 --- a/test/good/classes/unification04.px +++ b/test/good/classes/unification04.px @@ -12,8 +12,9 @@ class B(A) def print "{self.x} B" -func get(T*A a) A def +func get(T*A a) A def print a.a return a.b get((4, B())).f() +get(("$$$", A())).f() From 4ae03fed95a29f202c36e8ca2e38a3d5fd8bd422 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Thu, 5 Dec 2019 21:57:48 +0100 Subject: [PATCH 081/100] `super` call --- src/Pyxell.g4 | 1 + src/antlr/Pyxell.interp | 4 +- src/antlr/Pyxell.tokens | 18 +- src/antlr/PyxellLexer.interp | 5 +- src/antlr/PyxellLexer.py | 426 +++++++++++++++++----------------- src/antlr/PyxellLexer.tokens | 18 +- src/antlr/PyxellParser.py | 219 +++++++++-------- src/antlr/PyxellVisitor.py | 5 + src/ast.py | 5 + src/compiler.py | 18 +- src/errors.py | 1 + src/types.py | 1 + test/bad/classes/super01.err | 2 +- test/bad/classes/super02.err | 2 +- test/bad/classes/super03.err | 2 +- test/bad/classes/super04.err | 2 +- test/bad/classes/super05.err | 2 +- test/bad/classes/super05.px | 2 + test/bad/classes/super06.err | 1 + test/bad/classes/super06.px | 2 + test/good/classes/super04.out | 1 + test/good/classes/super04.px | 1 + 22 files changed, 403 insertions(+), 335 deletions(-) create mode 100644 test/bad/classes/super06.err create mode 100644 test/bad/classes/super06.px diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index 0006f426..a55b8304 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -105,6 +105,7 @@ atom | CHAR # AtomChar | STRING # AtomString | 'null' # AtomNull + | 'super' # AtomSuper | ID # AtomId ; diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index 38d92938..7914a664 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -67,6 +67,7 @@ null 'true' 'false' 'null' +'super' null null null @@ -145,6 +146,7 @@ null null null null +null INT FLOAT CHAR @@ -175,4 +177,4 @@ typ atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 77, 451, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 3, 2, 7, 2, 38, 10, 2, 12, 2, 14, 2, 41, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 49, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 59, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 64, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 70, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 75, 10, 4, 12, 4, 14, 4, 78, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 89, 10, 4, 5, 4, 91, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 96, 10, 5, 12, 5, 14, 5, 99, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 110, 10, 6, 12, 6, 14, 6, 113, 11, 6, 3, 6, 3, 6, 3, 6, 5, 6, 118, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 136, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 147, 10, 6, 3, 6, 3, 6, 5, 6, 151, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 157, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 165, 10, 6, 3, 6, 3, 6, 3, 6, 6, 6, 170, 10, 6, 13, 6, 14, 6, 171, 3, 6, 3, 6, 5, 6, 176, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 182, 10, 7, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 188, 10, 8, 12, 8, 14, 8, 191, 11, 8, 3, 8, 5, 8, 194, 10, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 202, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 210, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 220, 10, 9, 3, 10, 3, 10, 6, 10, 224, 10, 10, 13, 10, 14, 10, 225, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 240, 10, 11, 12, 11, 14, 11, 243, 11, 11, 3, 11, 5, 11, 246, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 6, 11, 252, 10, 11, 13, 11, 14, 11, 253, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 265, 10, 11, 12, 11, 14, 11, 268, 11, 11, 3, 11, 5, 11, 271, 10, 11, 3, 11, 3, 11, 5, 11, 275, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 324, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 333, 10, 11, 3, 11, 3, 11, 5, 11, 337, 10, 11, 3, 11, 3, 11, 5, 11, 341, 10, 11, 5, 11, 343, 10, 11, 3, 11, 3, 11, 3, 11, 5, 11, 348, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 357, 10, 11, 12, 11, 14, 11, 360, 11, 11, 3, 11, 5, 11, 363, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 370, 10, 11, 12, 11, 14, 11, 373, 11, 11, 3, 12, 3, 12, 3, 12, 7, 12, 378, 10, 12, 12, 12, 14, 12, 381, 11, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 394, 10, 14, 3, 14, 3, 14, 5, 14, 398, 10, 14, 3, 15, 3, 15, 5, 15, 402, 10, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 413, 10, 16, 3, 17, 3, 17, 7, 17, 417, 10, 17, 12, 17, 14, 17, 420, 11, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 5, 18, 436, 10, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 7, 18, 446, 10, 18, 12, 18, 14, 18, 449, 11, 18, 3, 18, 2, 4, 20, 34, 19, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 2, 12, 3, 2, 11, 22, 3, 2, 23, 24, 4, 2, 15, 16, 53, 53, 3, 2, 12, 14, 3, 2, 15, 16, 3, 2, 17, 18, 3, 2, 54, 55, 3, 2, 56, 57, 4, 2, 37, 38, 58, 61, 3, 2, 67, 68, 2, 527, 2, 39, 3, 2, 2, 2, 4, 48, 3, 2, 2, 2, 6, 90, 3, 2, 2, 2, 8, 92, 3, 2, 2, 2, 10, 175, 3, 2, 2, 2, 12, 177, 3, 2, 2, 2, 14, 183, 3, 2, 2, 2, 16, 219, 3, 2, 2, 2, 18, 221, 3, 2, 2, 2, 20, 274, 3, 2, 2, 2, 22, 379, 3, 2, 2, 2, 24, 384, 3, 2, 2, 2, 26, 397, 3, 2, 2, 2, 28, 401, 3, 2, 2, 2, 30, 412, 3, 2, 2, 2, 32, 418, 3, 2, 2, 2, 34, 435, 3, 2, 2, 2, 36, 38, 5, 4, 3, 2, 37, 36, 3, 2, 2, 2, 38, 41, 3, 2, 2, 2, 39, 37, 3, 2, 2, 2, 39, 40, 3, 2, 2, 2, 40, 42, 3, 2, 2, 2, 41, 39, 3, 2, 2, 2, 42, 43, 7, 2, 2, 3, 43, 3, 3, 2, 2, 2, 44, 45, 5, 6, 4, 2, 45, 46, 7, 3, 2, 2, 46, 49, 3, 2, 2, 2, 47, 49, 5, 10, 6, 2, 48, 44, 3, 2, 2, 2, 48, 47, 3, 2, 2, 2, 49, 5, 3, 2, 2, 2, 50, 51, 7, 4, 2, 2, 51, 58, 7, 74, 2, 2, 52, 53, 7, 5, 2, 2, 53, 59, 5, 32, 17, 2, 54, 55, 7, 6, 2, 2, 55, 59, 5, 32, 17, 2, 56, 57, 7, 7, 2, 2, 57, 59, 7, 74, 2, 2, 58, 52, 3, 2, 2, 2, 58, 54, 3, 2, 2, 2, 58, 56, 3, 2, 2, 2, 58, 59, 3, 2, 2, 2, 59, 91, 3, 2, 2, 2, 60, 91, 7, 8, 2, 2, 61, 63, 7, 9, 2, 2, 62, 64, 5, 22, 12, 2, 63, 62, 3, 2, 2, 2, 63, 64, 3, 2, 2, 2, 64, 91, 3, 2, 2, 2, 65, 66, 5, 34, 18, 2, 66, 69, 7, 74, 2, 2, 67, 68, 7, 10, 2, 2, 68, 70, 5, 22, 12, 2, 69, 67, 3, 2, 2, 2, 69, 70, 3, 2, 2, 2, 70, 91, 3, 2, 2, 2, 71, 72, 5, 8, 5, 2, 72, 73, 7, 10, 2, 2, 73, 75, 3, 2, 2, 2, 74, 71, 3, 2, 2, 2, 75, 78, 3, 2, 2, 2, 76, 74, 3, 2, 2, 2, 76, 77, 3, 2, 2, 2, 77, 79, 3, 2, 2, 2, 78, 76, 3, 2, 2, 2, 79, 91, 5, 22, 12, 2, 80, 81, 5, 20, 11, 2, 81, 82, 9, 2, 2, 2, 82, 83, 7, 10, 2, 2, 83, 84, 5, 20, 11, 2, 84, 91, 3, 2, 2, 2, 85, 91, 9, 3, 2, 2, 86, 88, 7, 25, 2, 2, 87, 89, 5, 22, 12, 2, 88, 87, 3, 2, 2, 2, 88, 89, 3, 2, 2, 2, 89, 91, 3, 2, 2, 2, 90, 50, 3, 2, 2, 2, 90, 60, 3, 2, 2, 2, 90, 61, 3, 2, 2, 2, 90, 65, 3, 2, 2, 2, 90, 76, 3, 2, 2, 2, 90, 80, 3, 2, 2, 2, 90, 85, 3, 2, 2, 2, 90, 86, 3, 2, 2, 2, 91, 7, 3, 2, 2, 2, 92, 97, 5, 20, 11, 2, 93, 94, 7, 26, 2, 2, 94, 96, 5, 20, 11, 2, 95, 93, 3, 2, 2, 2, 96, 99, 3, 2, 2, 2, 97, 95, 3, 2, 2, 2, 97, 98, 3, 2, 2, 2, 98, 9, 3, 2, 2, 2, 99, 97, 3, 2, 2, 2, 100, 101, 7, 27, 2, 2, 101, 102, 5, 20, 11, 2, 102, 103, 7, 28, 2, 2, 103, 111, 5, 18, 10, 2, 104, 105, 7, 29, 2, 2, 105, 106, 5, 20, 11, 2, 106, 107, 7, 28, 2, 2, 107, 108, 5, 18, 10, 2, 108, 110, 3, 2, 2, 2, 109, 104, 3, 2, 2, 2, 110, 113, 3, 2, 2, 2, 111, 109, 3, 2, 2, 2, 111, 112, 3, 2, 2, 2, 112, 117, 3, 2, 2, 2, 113, 111, 3, 2, 2, 2, 114, 115, 7, 30, 2, 2, 115, 116, 7, 28, 2, 2, 116, 118, 5, 18, 10, 2, 117, 114, 3, 2, 2, 2, 117, 118, 3, 2, 2, 2, 118, 176, 3, 2, 2, 2, 119, 120, 7, 31, 2, 2, 120, 121, 5, 20, 11, 2, 121, 122, 7, 28, 2, 2, 122, 123, 5, 18, 10, 2, 123, 176, 3, 2, 2, 2, 124, 125, 7, 32, 2, 2, 125, 126, 5, 20, 11, 2, 126, 127, 7, 28, 2, 2, 127, 128, 5, 18, 10, 2, 128, 176, 3, 2, 2, 2, 129, 130, 7, 33, 2, 2, 130, 131, 5, 22, 12, 2, 131, 132, 7, 34, 2, 2, 132, 135, 5, 22, 12, 2, 133, 134, 7, 35, 2, 2, 134, 136, 5, 22, 12, 2, 135, 133, 3, 2, 2, 2, 135, 136, 3, 2, 2, 2, 136, 137, 3, 2, 2, 2, 137, 138, 7, 28, 2, 2, 138, 139, 5, 18, 10, 2, 139, 176, 3, 2, 2, 2, 140, 141, 7, 36, 2, 2, 141, 146, 7, 74, 2, 2, 142, 143, 7, 37, 2, 2, 143, 144, 5, 32, 17, 2, 144, 145, 7, 38, 2, 2, 145, 147, 3, 2, 2, 2, 146, 142, 3, 2, 2, 2, 146, 147, 3, 2, 2, 2, 147, 148, 3, 2, 2, 2, 148, 150, 5, 14, 8, 2, 149, 151, 5, 34, 18, 2, 150, 149, 3, 2, 2, 2, 150, 151, 3, 2, 2, 2, 151, 156, 3, 2, 2, 2, 152, 153, 7, 39, 2, 2, 153, 157, 5, 18, 10, 2, 154, 155, 7, 40, 2, 2, 155, 157, 7, 3, 2, 2, 156, 152, 3, 2, 2, 2, 156, 154, 3, 2, 2, 2, 157, 176, 3, 2, 2, 2, 158, 159, 7, 41, 2, 2, 159, 164, 7, 74, 2, 2, 160, 161, 7, 42, 2, 2, 161, 162, 5, 34, 18, 2, 162, 163, 7, 43, 2, 2, 163, 165, 3, 2, 2, 2, 164, 160, 3, 2, 2, 2, 164, 165, 3, 2, 2, 2, 165, 166, 3, 2, 2, 2, 166, 167, 7, 39, 2, 2, 167, 169, 7, 44, 2, 2, 168, 170, 5, 16, 9, 2, 169, 168, 3, 2, 2, 2, 170, 171, 3, 2, 2, 2, 171, 169, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 173, 3, 2, 2, 2, 173, 174, 7, 45, 2, 2, 174, 176, 3, 2, 2, 2, 175, 100, 3, 2, 2, 2, 175, 119, 3, 2, 2, 2, 175, 124, 3, 2, 2, 2, 175, 129, 3, 2, 2, 2, 175, 140, 3, 2, 2, 2, 175, 158, 3, 2, 2, 2, 176, 11, 3, 2, 2, 2, 177, 178, 5, 34, 18, 2, 178, 181, 7, 74, 2, 2, 179, 180, 7, 46, 2, 2, 180, 182, 5, 20, 11, 2, 181, 179, 3, 2, 2, 2, 181, 182, 3, 2, 2, 2, 182, 13, 3, 2, 2, 2, 183, 189, 7, 42, 2, 2, 184, 185, 5, 12, 7, 2, 185, 186, 7, 26, 2, 2, 186, 188, 3, 2, 2, 2, 187, 184, 3, 2, 2, 2, 188, 191, 3, 2, 2, 2, 189, 187, 3, 2, 2, 2, 189, 190, 3, 2, 2, 2, 190, 193, 3, 2, 2, 2, 191, 189, 3, 2, 2, 2, 192, 194, 5, 12, 7, 2, 193, 192, 3, 2, 2, 2, 193, 194, 3, 2, 2, 2, 194, 195, 3, 2, 2, 2, 195, 196, 7, 43, 2, 2, 196, 15, 3, 2, 2, 2, 197, 198, 5, 34, 18, 2, 198, 201, 7, 74, 2, 2, 199, 200, 7, 46, 2, 2, 200, 202, 5, 22, 12, 2, 201, 199, 3, 2, 2, 2, 201, 202, 3, 2, 2, 2, 202, 203, 3, 2, 2, 2, 203, 204, 7, 3, 2, 2, 204, 220, 3, 2, 2, 2, 205, 206, 7, 36, 2, 2, 206, 207, 7, 74, 2, 2, 207, 209, 5, 14, 8, 2, 208, 210, 5, 34, 18, 2, 209, 208, 3, 2, 2, 2, 209, 210, 3, 2, 2, 2, 210, 211, 3, 2, 2, 2, 211, 212, 7, 39, 2, 2, 212, 213, 5, 18, 10, 2, 213, 220, 3, 2, 2, 2, 214, 215, 7, 47, 2, 2, 215, 216, 5, 14, 8, 2, 216, 217, 7, 39, 2, 2, 217, 218, 5, 18, 10, 2, 218, 220, 3, 2, 2, 2, 219, 197, 3, 2, 2, 2, 219, 205, 3, 2, 2, 2, 219, 214, 3, 2, 2, 2, 220, 17, 3, 2, 2, 2, 221, 223, 7, 44, 2, 2, 222, 224, 5, 4, 3, 2, 223, 222, 3, 2, 2, 2, 224, 225, 3, 2, 2, 2, 225, 223, 3, 2, 2, 2, 225, 226, 3, 2, 2, 2, 226, 227, 3, 2, 2, 2, 227, 228, 7, 45, 2, 2, 228, 19, 3, 2, 2, 2, 229, 230, 8, 11, 1, 2, 230, 275, 5, 30, 16, 2, 231, 232, 7, 42, 2, 2, 232, 233, 5, 22, 12, 2, 233, 234, 7, 43, 2, 2, 234, 275, 3, 2, 2, 2, 235, 241, 7, 48, 2, 2, 236, 237, 5, 20, 11, 2, 237, 238, 7, 26, 2, 2, 238, 240, 3, 2, 2, 2, 239, 236, 3, 2, 2, 2, 240, 243, 3, 2, 2, 2, 241, 239, 3, 2, 2, 2, 241, 242, 3, 2, 2, 2, 242, 245, 3, 2, 2, 2, 243, 241, 3, 2, 2, 2, 244, 246, 5, 20, 11, 2, 245, 244, 3, 2, 2, 2, 245, 246, 3, 2, 2, 2, 246, 247, 3, 2, 2, 2, 247, 275, 7, 49, 2, 2, 248, 249, 7, 48, 2, 2, 249, 251, 5, 20, 11, 2, 250, 252, 5, 26, 14, 2, 251, 250, 3, 2, 2, 2, 252, 253, 3, 2, 2, 2, 253, 251, 3, 2, 2, 2, 253, 254, 3, 2, 2, 2, 254, 255, 3, 2, 2, 2, 255, 256, 7, 49, 2, 2, 256, 275, 3, 2, 2, 2, 257, 258, 9, 4, 2, 2, 258, 275, 5, 20, 11, 19, 259, 260, 7, 62, 2, 2, 260, 275, 5, 20, 11, 8, 261, 266, 7, 65, 2, 2, 262, 263, 7, 74, 2, 2, 263, 265, 7, 26, 2, 2, 264, 262, 3, 2, 2, 2, 265, 268, 3, 2, 2, 2, 266, 264, 3, 2, 2, 2, 266, 267, 3, 2, 2, 2, 267, 270, 3, 2, 2, 2, 268, 266, 3, 2, 2, 2, 269, 271, 7, 74, 2, 2, 270, 269, 3, 2, 2, 2, 270, 271, 3, 2, 2, 2, 271, 272, 3, 2, 2, 2, 272, 273, 7, 66, 2, 2, 273, 275, 5, 20, 11, 3, 274, 229, 3, 2, 2, 2, 274, 231, 3, 2, 2, 2, 274, 235, 3, 2, 2, 2, 274, 248, 3, 2, 2, 2, 274, 257, 3, 2, 2, 2, 274, 259, 3, 2, 2, 2, 274, 261, 3, 2, 2, 2, 275, 371, 3, 2, 2, 2, 276, 277, 12, 20, 2, 2, 277, 278, 7, 11, 2, 2, 278, 370, 5, 20, 11, 20, 279, 280, 12, 18, 2, 2, 280, 281, 9, 5, 2, 2, 281, 370, 5, 20, 11, 19, 282, 283, 12, 17, 2, 2, 283, 284, 9, 6, 2, 2, 284, 370, 5, 20, 11, 18, 285, 286, 12, 16, 2, 2, 286, 287, 9, 7, 2, 2, 287, 370, 5, 20, 11, 17, 288, 289, 12, 15, 2, 2, 289, 290, 7, 19, 2, 2, 290, 370, 5, 20, 11, 16, 291, 292, 12, 14, 2, 2, 292, 293, 7, 20, 2, 2, 293, 370, 5, 20, 11, 15, 294, 295, 12, 13, 2, 2, 295, 296, 7, 21, 2, 2, 296, 370, 5, 20, 11, 14, 297, 298, 12, 12, 2, 2, 298, 299, 9, 8, 2, 2, 299, 370, 5, 20, 11, 13, 300, 301, 12, 10, 2, 2, 301, 302, 9, 9, 2, 2, 302, 370, 5, 20, 11, 11, 303, 304, 12, 9, 2, 2, 304, 305, 9, 10, 2, 2, 305, 370, 5, 20, 11, 9, 306, 307, 12, 7, 2, 2, 307, 308, 7, 63, 2, 2, 308, 370, 5, 20, 11, 7, 309, 310, 12, 6, 2, 2, 310, 311, 7, 64, 2, 2, 311, 370, 5, 20, 11, 6, 312, 313, 12, 5, 2, 2, 313, 314, 7, 22, 2, 2, 314, 370, 5, 20, 11, 5, 315, 316, 12, 4, 2, 2, 316, 317, 7, 50, 2, 2, 317, 318, 5, 20, 11, 2, 318, 319, 7, 46, 2, 2, 319, 320, 5, 20, 11, 4, 320, 370, 3, 2, 2, 2, 321, 323, 12, 25, 2, 2, 322, 324, 7, 50, 2, 2, 323, 322, 3, 2, 2, 2, 323, 324, 3, 2, 2, 2, 324, 325, 3, 2, 2, 2, 325, 326, 7, 48, 2, 2, 326, 327, 5, 22, 12, 2, 327, 328, 7, 49, 2, 2, 328, 370, 3, 2, 2, 2, 329, 330, 12, 24, 2, 2, 330, 332, 7, 48, 2, 2, 331, 333, 5, 20, 11, 2, 332, 331, 3, 2, 2, 2, 332, 333, 3, 2, 2, 2, 333, 334, 3, 2, 2, 2, 334, 336, 7, 46, 2, 2, 335, 337, 5, 20, 11, 2, 336, 335, 3, 2, 2, 2, 336, 337, 3, 2, 2, 2, 337, 342, 3, 2, 2, 2, 338, 340, 7, 46, 2, 2, 339, 341, 5, 20, 11, 2, 340, 339, 3, 2, 2, 2, 340, 341, 3, 2, 2, 2, 341, 343, 3, 2, 2, 2, 342, 338, 3, 2, 2, 2, 342, 343, 3, 2, 2, 2, 343, 344, 3, 2, 2, 2, 344, 370, 7, 49, 2, 2, 345, 347, 12, 23, 2, 2, 346, 348, 7, 50, 2, 2, 347, 346, 3, 2, 2, 2, 347, 348, 3, 2, 2, 2, 348, 349, 3, 2, 2, 2, 349, 350, 7, 51, 2, 2, 350, 370, 7, 74, 2, 2, 351, 352, 12, 22, 2, 2, 352, 358, 7, 42, 2, 2, 353, 354, 5, 28, 15, 2, 354, 355, 7, 26, 2, 2, 355, 357, 3, 2, 2, 2, 356, 353, 3, 2, 2, 2, 357, 360, 3, 2, 2, 2, 358, 356, 3, 2, 2, 2, 358, 359, 3, 2, 2, 2, 359, 362, 3, 2, 2, 2, 360, 358, 3, 2, 2, 2, 361, 363, 5, 28, 15, 2, 362, 361, 3, 2, 2, 2, 362, 363, 3, 2, 2, 2, 363, 364, 3, 2, 2, 2, 364, 370, 7, 43, 2, 2, 365, 366, 12, 21, 2, 2, 366, 370, 7, 52, 2, 2, 367, 368, 12, 11, 2, 2, 368, 370, 7, 55, 2, 2, 369, 276, 3, 2, 2, 2, 369, 279, 3, 2, 2, 2, 369, 282, 3, 2, 2, 2, 369, 285, 3, 2, 2, 2, 369, 288, 3, 2, 2, 2, 369, 291, 3, 2, 2, 2, 369, 294, 3, 2, 2, 2, 369, 297, 3, 2, 2, 2, 369, 300, 3, 2, 2, 2, 369, 303, 3, 2, 2, 2, 369, 306, 3, 2, 2, 2, 369, 309, 3, 2, 2, 2, 369, 312, 3, 2, 2, 2, 369, 315, 3, 2, 2, 2, 369, 321, 3, 2, 2, 2, 369, 329, 3, 2, 2, 2, 369, 345, 3, 2, 2, 2, 369, 351, 3, 2, 2, 2, 369, 365, 3, 2, 2, 2, 369, 367, 3, 2, 2, 2, 370, 373, 3, 2, 2, 2, 371, 369, 3, 2, 2, 2, 371, 372, 3, 2, 2, 2, 372, 21, 3, 2, 2, 2, 373, 371, 3, 2, 2, 2, 374, 375, 5, 20, 11, 2, 375, 376, 7, 26, 2, 2, 376, 378, 3, 2, 2, 2, 377, 374, 3, 2, 2, 2, 378, 381, 3, 2, 2, 2, 379, 377, 3, 2, 2, 2, 379, 380, 3, 2, 2, 2, 380, 382, 3, 2, 2, 2, 381, 379, 3, 2, 2, 2, 382, 383, 5, 20, 11, 2, 383, 23, 3, 2, 2, 2, 384, 385, 5, 22, 12, 2, 385, 386, 7, 2, 2, 3, 386, 25, 3, 2, 2, 2, 387, 388, 7, 33, 2, 2, 388, 389, 5, 22, 12, 2, 389, 390, 7, 34, 2, 2, 390, 393, 5, 22, 12, 2, 391, 392, 7, 35, 2, 2, 392, 394, 5, 22, 12, 2, 393, 391, 3, 2, 2, 2, 393, 394, 3, 2, 2, 2, 394, 398, 3, 2, 2, 2, 395, 396, 7, 27, 2, 2, 396, 398, 5, 20, 11, 2, 397, 387, 3, 2, 2, 2, 397, 395, 3, 2, 2, 2, 398, 27, 3, 2, 2, 2, 399, 400, 7, 74, 2, 2, 400, 402, 7, 10, 2, 2, 401, 399, 3, 2, 2, 2, 401, 402, 3, 2, 2, 2, 402, 403, 3, 2, 2, 2, 403, 404, 5, 20, 11, 2, 404, 29, 3, 2, 2, 2, 405, 413, 7, 70, 2, 2, 406, 413, 7, 71, 2, 2, 407, 413, 9, 11, 2, 2, 408, 413, 7, 72, 2, 2, 409, 413, 7, 73, 2, 2, 410, 413, 7, 69, 2, 2, 411, 413, 7, 74, 2, 2, 412, 405, 3, 2, 2, 2, 412, 406, 3, 2, 2, 2, 412, 407, 3, 2, 2, 2, 412, 408, 3, 2, 2, 2, 412, 409, 3, 2, 2, 2, 412, 410, 3, 2, 2, 2, 412, 411, 3, 2, 2, 2, 413, 31, 3, 2, 2, 2, 414, 415, 7, 74, 2, 2, 415, 417, 7, 26, 2, 2, 416, 414, 3, 2, 2, 2, 417, 420, 3, 2, 2, 2, 418, 416, 3, 2, 2, 2, 418, 419, 3, 2, 2, 2, 419, 421, 3, 2, 2, 2, 420, 418, 3, 2, 2, 2, 421, 422, 7, 74, 2, 2, 422, 33, 3, 2, 2, 2, 423, 424, 8, 18, 1, 2, 424, 436, 7, 74, 2, 2, 425, 426, 7, 42, 2, 2, 426, 427, 5, 34, 18, 2, 427, 428, 7, 43, 2, 2, 428, 436, 3, 2, 2, 2, 429, 430, 7, 48, 2, 2, 430, 431, 5, 34, 18, 2, 431, 432, 7, 49, 2, 2, 432, 436, 3, 2, 2, 2, 433, 434, 7, 66, 2, 2, 434, 436, 5, 34, 18, 3, 435, 423, 3, 2, 2, 2, 435, 425, 3, 2, 2, 2, 435, 429, 3, 2, 2, 2, 435, 433, 3, 2, 2, 2, 436, 447, 3, 2, 2, 2, 437, 438, 12, 5, 2, 2, 438, 439, 7, 12, 2, 2, 439, 446, 5, 34, 18, 5, 440, 441, 12, 4, 2, 2, 441, 442, 7, 66, 2, 2, 442, 446, 5, 34, 18, 4, 443, 444, 12, 6, 2, 2, 444, 446, 7, 50, 2, 2, 445, 437, 3, 2, 2, 2, 445, 440, 3, 2, 2, 2, 445, 443, 3, 2, 2, 2, 446, 449, 3, 2, 2, 2, 447, 445, 3, 2, 2, 2, 447, 448, 3, 2, 2, 2, 448, 35, 3, 2, 2, 2, 449, 447, 3, 2, 2, 2, 52, 39, 48, 58, 63, 69, 76, 88, 90, 97, 111, 117, 135, 146, 150, 156, 164, 171, 175, 181, 189, 193, 201, 209, 219, 225, 241, 245, 253, 266, 270, 274, 323, 332, 336, 340, 342, 347, 358, 362, 369, 371, 379, 393, 397, 401, 412, 418, 435, 445, 447] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 78, 452, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 3, 2, 7, 2, 38, 10, 2, 12, 2, 14, 2, 41, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 49, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 59, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 64, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 70, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 75, 10, 4, 12, 4, 14, 4, 78, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 89, 10, 4, 5, 4, 91, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 96, 10, 5, 12, 5, 14, 5, 99, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 110, 10, 6, 12, 6, 14, 6, 113, 11, 6, 3, 6, 3, 6, 3, 6, 5, 6, 118, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 136, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 147, 10, 6, 3, 6, 3, 6, 5, 6, 151, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 157, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 165, 10, 6, 3, 6, 3, 6, 3, 6, 6, 6, 170, 10, 6, 13, 6, 14, 6, 171, 3, 6, 3, 6, 5, 6, 176, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 182, 10, 7, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 188, 10, 8, 12, 8, 14, 8, 191, 11, 8, 3, 8, 5, 8, 194, 10, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 202, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 210, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 220, 10, 9, 3, 10, 3, 10, 6, 10, 224, 10, 10, 13, 10, 14, 10, 225, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 240, 10, 11, 12, 11, 14, 11, 243, 11, 11, 3, 11, 5, 11, 246, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 6, 11, 252, 10, 11, 13, 11, 14, 11, 253, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 265, 10, 11, 12, 11, 14, 11, 268, 11, 11, 3, 11, 5, 11, 271, 10, 11, 3, 11, 3, 11, 5, 11, 275, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 324, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 333, 10, 11, 3, 11, 3, 11, 5, 11, 337, 10, 11, 3, 11, 3, 11, 5, 11, 341, 10, 11, 5, 11, 343, 10, 11, 3, 11, 3, 11, 3, 11, 5, 11, 348, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 357, 10, 11, 12, 11, 14, 11, 360, 11, 11, 3, 11, 5, 11, 363, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 370, 10, 11, 12, 11, 14, 11, 373, 11, 11, 3, 12, 3, 12, 3, 12, 7, 12, 378, 10, 12, 12, 12, 14, 12, 381, 11, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 394, 10, 14, 3, 14, 3, 14, 5, 14, 398, 10, 14, 3, 15, 3, 15, 5, 15, 402, 10, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 414, 10, 16, 3, 17, 3, 17, 7, 17, 418, 10, 17, 12, 17, 14, 17, 421, 11, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 5, 18, 437, 10, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 7, 18, 447, 10, 18, 12, 18, 14, 18, 450, 11, 18, 3, 18, 2, 4, 20, 34, 19, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 2, 12, 3, 2, 11, 22, 3, 2, 23, 24, 4, 2, 15, 16, 53, 53, 3, 2, 12, 14, 3, 2, 15, 16, 3, 2, 17, 18, 3, 2, 54, 55, 3, 2, 56, 57, 4, 2, 37, 38, 58, 61, 3, 2, 67, 68, 2, 529, 2, 39, 3, 2, 2, 2, 4, 48, 3, 2, 2, 2, 6, 90, 3, 2, 2, 2, 8, 92, 3, 2, 2, 2, 10, 175, 3, 2, 2, 2, 12, 177, 3, 2, 2, 2, 14, 183, 3, 2, 2, 2, 16, 219, 3, 2, 2, 2, 18, 221, 3, 2, 2, 2, 20, 274, 3, 2, 2, 2, 22, 379, 3, 2, 2, 2, 24, 384, 3, 2, 2, 2, 26, 397, 3, 2, 2, 2, 28, 401, 3, 2, 2, 2, 30, 413, 3, 2, 2, 2, 32, 419, 3, 2, 2, 2, 34, 436, 3, 2, 2, 2, 36, 38, 5, 4, 3, 2, 37, 36, 3, 2, 2, 2, 38, 41, 3, 2, 2, 2, 39, 37, 3, 2, 2, 2, 39, 40, 3, 2, 2, 2, 40, 42, 3, 2, 2, 2, 41, 39, 3, 2, 2, 2, 42, 43, 7, 2, 2, 3, 43, 3, 3, 2, 2, 2, 44, 45, 5, 6, 4, 2, 45, 46, 7, 3, 2, 2, 46, 49, 3, 2, 2, 2, 47, 49, 5, 10, 6, 2, 48, 44, 3, 2, 2, 2, 48, 47, 3, 2, 2, 2, 49, 5, 3, 2, 2, 2, 50, 51, 7, 4, 2, 2, 51, 58, 7, 75, 2, 2, 52, 53, 7, 5, 2, 2, 53, 59, 5, 32, 17, 2, 54, 55, 7, 6, 2, 2, 55, 59, 5, 32, 17, 2, 56, 57, 7, 7, 2, 2, 57, 59, 7, 75, 2, 2, 58, 52, 3, 2, 2, 2, 58, 54, 3, 2, 2, 2, 58, 56, 3, 2, 2, 2, 58, 59, 3, 2, 2, 2, 59, 91, 3, 2, 2, 2, 60, 91, 7, 8, 2, 2, 61, 63, 7, 9, 2, 2, 62, 64, 5, 22, 12, 2, 63, 62, 3, 2, 2, 2, 63, 64, 3, 2, 2, 2, 64, 91, 3, 2, 2, 2, 65, 66, 5, 34, 18, 2, 66, 69, 7, 75, 2, 2, 67, 68, 7, 10, 2, 2, 68, 70, 5, 22, 12, 2, 69, 67, 3, 2, 2, 2, 69, 70, 3, 2, 2, 2, 70, 91, 3, 2, 2, 2, 71, 72, 5, 8, 5, 2, 72, 73, 7, 10, 2, 2, 73, 75, 3, 2, 2, 2, 74, 71, 3, 2, 2, 2, 75, 78, 3, 2, 2, 2, 76, 74, 3, 2, 2, 2, 76, 77, 3, 2, 2, 2, 77, 79, 3, 2, 2, 2, 78, 76, 3, 2, 2, 2, 79, 91, 5, 22, 12, 2, 80, 81, 5, 20, 11, 2, 81, 82, 9, 2, 2, 2, 82, 83, 7, 10, 2, 2, 83, 84, 5, 20, 11, 2, 84, 91, 3, 2, 2, 2, 85, 91, 9, 3, 2, 2, 86, 88, 7, 25, 2, 2, 87, 89, 5, 22, 12, 2, 88, 87, 3, 2, 2, 2, 88, 89, 3, 2, 2, 2, 89, 91, 3, 2, 2, 2, 90, 50, 3, 2, 2, 2, 90, 60, 3, 2, 2, 2, 90, 61, 3, 2, 2, 2, 90, 65, 3, 2, 2, 2, 90, 76, 3, 2, 2, 2, 90, 80, 3, 2, 2, 2, 90, 85, 3, 2, 2, 2, 90, 86, 3, 2, 2, 2, 91, 7, 3, 2, 2, 2, 92, 97, 5, 20, 11, 2, 93, 94, 7, 26, 2, 2, 94, 96, 5, 20, 11, 2, 95, 93, 3, 2, 2, 2, 96, 99, 3, 2, 2, 2, 97, 95, 3, 2, 2, 2, 97, 98, 3, 2, 2, 2, 98, 9, 3, 2, 2, 2, 99, 97, 3, 2, 2, 2, 100, 101, 7, 27, 2, 2, 101, 102, 5, 20, 11, 2, 102, 103, 7, 28, 2, 2, 103, 111, 5, 18, 10, 2, 104, 105, 7, 29, 2, 2, 105, 106, 5, 20, 11, 2, 106, 107, 7, 28, 2, 2, 107, 108, 5, 18, 10, 2, 108, 110, 3, 2, 2, 2, 109, 104, 3, 2, 2, 2, 110, 113, 3, 2, 2, 2, 111, 109, 3, 2, 2, 2, 111, 112, 3, 2, 2, 2, 112, 117, 3, 2, 2, 2, 113, 111, 3, 2, 2, 2, 114, 115, 7, 30, 2, 2, 115, 116, 7, 28, 2, 2, 116, 118, 5, 18, 10, 2, 117, 114, 3, 2, 2, 2, 117, 118, 3, 2, 2, 2, 118, 176, 3, 2, 2, 2, 119, 120, 7, 31, 2, 2, 120, 121, 5, 20, 11, 2, 121, 122, 7, 28, 2, 2, 122, 123, 5, 18, 10, 2, 123, 176, 3, 2, 2, 2, 124, 125, 7, 32, 2, 2, 125, 126, 5, 20, 11, 2, 126, 127, 7, 28, 2, 2, 127, 128, 5, 18, 10, 2, 128, 176, 3, 2, 2, 2, 129, 130, 7, 33, 2, 2, 130, 131, 5, 22, 12, 2, 131, 132, 7, 34, 2, 2, 132, 135, 5, 22, 12, 2, 133, 134, 7, 35, 2, 2, 134, 136, 5, 22, 12, 2, 135, 133, 3, 2, 2, 2, 135, 136, 3, 2, 2, 2, 136, 137, 3, 2, 2, 2, 137, 138, 7, 28, 2, 2, 138, 139, 5, 18, 10, 2, 139, 176, 3, 2, 2, 2, 140, 141, 7, 36, 2, 2, 141, 146, 7, 75, 2, 2, 142, 143, 7, 37, 2, 2, 143, 144, 5, 32, 17, 2, 144, 145, 7, 38, 2, 2, 145, 147, 3, 2, 2, 2, 146, 142, 3, 2, 2, 2, 146, 147, 3, 2, 2, 2, 147, 148, 3, 2, 2, 2, 148, 150, 5, 14, 8, 2, 149, 151, 5, 34, 18, 2, 150, 149, 3, 2, 2, 2, 150, 151, 3, 2, 2, 2, 151, 156, 3, 2, 2, 2, 152, 153, 7, 39, 2, 2, 153, 157, 5, 18, 10, 2, 154, 155, 7, 40, 2, 2, 155, 157, 7, 3, 2, 2, 156, 152, 3, 2, 2, 2, 156, 154, 3, 2, 2, 2, 157, 176, 3, 2, 2, 2, 158, 159, 7, 41, 2, 2, 159, 164, 7, 75, 2, 2, 160, 161, 7, 42, 2, 2, 161, 162, 5, 34, 18, 2, 162, 163, 7, 43, 2, 2, 163, 165, 3, 2, 2, 2, 164, 160, 3, 2, 2, 2, 164, 165, 3, 2, 2, 2, 165, 166, 3, 2, 2, 2, 166, 167, 7, 39, 2, 2, 167, 169, 7, 44, 2, 2, 168, 170, 5, 16, 9, 2, 169, 168, 3, 2, 2, 2, 170, 171, 3, 2, 2, 2, 171, 169, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 173, 3, 2, 2, 2, 173, 174, 7, 45, 2, 2, 174, 176, 3, 2, 2, 2, 175, 100, 3, 2, 2, 2, 175, 119, 3, 2, 2, 2, 175, 124, 3, 2, 2, 2, 175, 129, 3, 2, 2, 2, 175, 140, 3, 2, 2, 2, 175, 158, 3, 2, 2, 2, 176, 11, 3, 2, 2, 2, 177, 178, 5, 34, 18, 2, 178, 181, 7, 75, 2, 2, 179, 180, 7, 46, 2, 2, 180, 182, 5, 20, 11, 2, 181, 179, 3, 2, 2, 2, 181, 182, 3, 2, 2, 2, 182, 13, 3, 2, 2, 2, 183, 189, 7, 42, 2, 2, 184, 185, 5, 12, 7, 2, 185, 186, 7, 26, 2, 2, 186, 188, 3, 2, 2, 2, 187, 184, 3, 2, 2, 2, 188, 191, 3, 2, 2, 2, 189, 187, 3, 2, 2, 2, 189, 190, 3, 2, 2, 2, 190, 193, 3, 2, 2, 2, 191, 189, 3, 2, 2, 2, 192, 194, 5, 12, 7, 2, 193, 192, 3, 2, 2, 2, 193, 194, 3, 2, 2, 2, 194, 195, 3, 2, 2, 2, 195, 196, 7, 43, 2, 2, 196, 15, 3, 2, 2, 2, 197, 198, 5, 34, 18, 2, 198, 201, 7, 75, 2, 2, 199, 200, 7, 46, 2, 2, 200, 202, 5, 22, 12, 2, 201, 199, 3, 2, 2, 2, 201, 202, 3, 2, 2, 2, 202, 203, 3, 2, 2, 2, 203, 204, 7, 3, 2, 2, 204, 220, 3, 2, 2, 2, 205, 206, 7, 36, 2, 2, 206, 207, 7, 75, 2, 2, 207, 209, 5, 14, 8, 2, 208, 210, 5, 34, 18, 2, 209, 208, 3, 2, 2, 2, 209, 210, 3, 2, 2, 2, 210, 211, 3, 2, 2, 2, 211, 212, 7, 39, 2, 2, 212, 213, 5, 18, 10, 2, 213, 220, 3, 2, 2, 2, 214, 215, 7, 47, 2, 2, 215, 216, 5, 14, 8, 2, 216, 217, 7, 39, 2, 2, 217, 218, 5, 18, 10, 2, 218, 220, 3, 2, 2, 2, 219, 197, 3, 2, 2, 2, 219, 205, 3, 2, 2, 2, 219, 214, 3, 2, 2, 2, 220, 17, 3, 2, 2, 2, 221, 223, 7, 44, 2, 2, 222, 224, 5, 4, 3, 2, 223, 222, 3, 2, 2, 2, 224, 225, 3, 2, 2, 2, 225, 223, 3, 2, 2, 2, 225, 226, 3, 2, 2, 2, 226, 227, 3, 2, 2, 2, 227, 228, 7, 45, 2, 2, 228, 19, 3, 2, 2, 2, 229, 230, 8, 11, 1, 2, 230, 275, 5, 30, 16, 2, 231, 232, 7, 42, 2, 2, 232, 233, 5, 22, 12, 2, 233, 234, 7, 43, 2, 2, 234, 275, 3, 2, 2, 2, 235, 241, 7, 48, 2, 2, 236, 237, 5, 20, 11, 2, 237, 238, 7, 26, 2, 2, 238, 240, 3, 2, 2, 2, 239, 236, 3, 2, 2, 2, 240, 243, 3, 2, 2, 2, 241, 239, 3, 2, 2, 2, 241, 242, 3, 2, 2, 2, 242, 245, 3, 2, 2, 2, 243, 241, 3, 2, 2, 2, 244, 246, 5, 20, 11, 2, 245, 244, 3, 2, 2, 2, 245, 246, 3, 2, 2, 2, 246, 247, 3, 2, 2, 2, 247, 275, 7, 49, 2, 2, 248, 249, 7, 48, 2, 2, 249, 251, 5, 20, 11, 2, 250, 252, 5, 26, 14, 2, 251, 250, 3, 2, 2, 2, 252, 253, 3, 2, 2, 2, 253, 251, 3, 2, 2, 2, 253, 254, 3, 2, 2, 2, 254, 255, 3, 2, 2, 2, 255, 256, 7, 49, 2, 2, 256, 275, 3, 2, 2, 2, 257, 258, 9, 4, 2, 2, 258, 275, 5, 20, 11, 19, 259, 260, 7, 62, 2, 2, 260, 275, 5, 20, 11, 8, 261, 266, 7, 65, 2, 2, 262, 263, 7, 75, 2, 2, 263, 265, 7, 26, 2, 2, 264, 262, 3, 2, 2, 2, 265, 268, 3, 2, 2, 2, 266, 264, 3, 2, 2, 2, 266, 267, 3, 2, 2, 2, 267, 270, 3, 2, 2, 2, 268, 266, 3, 2, 2, 2, 269, 271, 7, 75, 2, 2, 270, 269, 3, 2, 2, 2, 270, 271, 3, 2, 2, 2, 271, 272, 3, 2, 2, 2, 272, 273, 7, 66, 2, 2, 273, 275, 5, 20, 11, 3, 274, 229, 3, 2, 2, 2, 274, 231, 3, 2, 2, 2, 274, 235, 3, 2, 2, 2, 274, 248, 3, 2, 2, 2, 274, 257, 3, 2, 2, 2, 274, 259, 3, 2, 2, 2, 274, 261, 3, 2, 2, 2, 275, 371, 3, 2, 2, 2, 276, 277, 12, 20, 2, 2, 277, 278, 7, 11, 2, 2, 278, 370, 5, 20, 11, 20, 279, 280, 12, 18, 2, 2, 280, 281, 9, 5, 2, 2, 281, 370, 5, 20, 11, 19, 282, 283, 12, 17, 2, 2, 283, 284, 9, 6, 2, 2, 284, 370, 5, 20, 11, 18, 285, 286, 12, 16, 2, 2, 286, 287, 9, 7, 2, 2, 287, 370, 5, 20, 11, 17, 288, 289, 12, 15, 2, 2, 289, 290, 7, 19, 2, 2, 290, 370, 5, 20, 11, 16, 291, 292, 12, 14, 2, 2, 292, 293, 7, 20, 2, 2, 293, 370, 5, 20, 11, 15, 294, 295, 12, 13, 2, 2, 295, 296, 7, 21, 2, 2, 296, 370, 5, 20, 11, 14, 297, 298, 12, 12, 2, 2, 298, 299, 9, 8, 2, 2, 299, 370, 5, 20, 11, 13, 300, 301, 12, 10, 2, 2, 301, 302, 9, 9, 2, 2, 302, 370, 5, 20, 11, 11, 303, 304, 12, 9, 2, 2, 304, 305, 9, 10, 2, 2, 305, 370, 5, 20, 11, 9, 306, 307, 12, 7, 2, 2, 307, 308, 7, 63, 2, 2, 308, 370, 5, 20, 11, 7, 309, 310, 12, 6, 2, 2, 310, 311, 7, 64, 2, 2, 311, 370, 5, 20, 11, 6, 312, 313, 12, 5, 2, 2, 313, 314, 7, 22, 2, 2, 314, 370, 5, 20, 11, 5, 315, 316, 12, 4, 2, 2, 316, 317, 7, 50, 2, 2, 317, 318, 5, 20, 11, 2, 318, 319, 7, 46, 2, 2, 319, 320, 5, 20, 11, 4, 320, 370, 3, 2, 2, 2, 321, 323, 12, 25, 2, 2, 322, 324, 7, 50, 2, 2, 323, 322, 3, 2, 2, 2, 323, 324, 3, 2, 2, 2, 324, 325, 3, 2, 2, 2, 325, 326, 7, 48, 2, 2, 326, 327, 5, 22, 12, 2, 327, 328, 7, 49, 2, 2, 328, 370, 3, 2, 2, 2, 329, 330, 12, 24, 2, 2, 330, 332, 7, 48, 2, 2, 331, 333, 5, 20, 11, 2, 332, 331, 3, 2, 2, 2, 332, 333, 3, 2, 2, 2, 333, 334, 3, 2, 2, 2, 334, 336, 7, 46, 2, 2, 335, 337, 5, 20, 11, 2, 336, 335, 3, 2, 2, 2, 336, 337, 3, 2, 2, 2, 337, 342, 3, 2, 2, 2, 338, 340, 7, 46, 2, 2, 339, 341, 5, 20, 11, 2, 340, 339, 3, 2, 2, 2, 340, 341, 3, 2, 2, 2, 341, 343, 3, 2, 2, 2, 342, 338, 3, 2, 2, 2, 342, 343, 3, 2, 2, 2, 343, 344, 3, 2, 2, 2, 344, 370, 7, 49, 2, 2, 345, 347, 12, 23, 2, 2, 346, 348, 7, 50, 2, 2, 347, 346, 3, 2, 2, 2, 347, 348, 3, 2, 2, 2, 348, 349, 3, 2, 2, 2, 349, 350, 7, 51, 2, 2, 350, 370, 7, 75, 2, 2, 351, 352, 12, 22, 2, 2, 352, 358, 7, 42, 2, 2, 353, 354, 5, 28, 15, 2, 354, 355, 7, 26, 2, 2, 355, 357, 3, 2, 2, 2, 356, 353, 3, 2, 2, 2, 357, 360, 3, 2, 2, 2, 358, 356, 3, 2, 2, 2, 358, 359, 3, 2, 2, 2, 359, 362, 3, 2, 2, 2, 360, 358, 3, 2, 2, 2, 361, 363, 5, 28, 15, 2, 362, 361, 3, 2, 2, 2, 362, 363, 3, 2, 2, 2, 363, 364, 3, 2, 2, 2, 364, 370, 7, 43, 2, 2, 365, 366, 12, 21, 2, 2, 366, 370, 7, 52, 2, 2, 367, 368, 12, 11, 2, 2, 368, 370, 7, 55, 2, 2, 369, 276, 3, 2, 2, 2, 369, 279, 3, 2, 2, 2, 369, 282, 3, 2, 2, 2, 369, 285, 3, 2, 2, 2, 369, 288, 3, 2, 2, 2, 369, 291, 3, 2, 2, 2, 369, 294, 3, 2, 2, 2, 369, 297, 3, 2, 2, 2, 369, 300, 3, 2, 2, 2, 369, 303, 3, 2, 2, 2, 369, 306, 3, 2, 2, 2, 369, 309, 3, 2, 2, 2, 369, 312, 3, 2, 2, 2, 369, 315, 3, 2, 2, 2, 369, 321, 3, 2, 2, 2, 369, 329, 3, 2, 2, 2, 369, 345, 3, 2, 2, 2, 369, 351, 3, 2, 2, 2, 369, 365, 3, 2, 2, 2, 369, 367, 3, 2, 2, 2, 370, 373, 3, 2, 2, 2, 371, 369, 3, 2, 2, 2, 371, 372, 3, 2, 2, 2, 372, 21, 3, 2, 2, 2, 373, 371, 3, 2, 2, 2, 374, 375, 5, 20, 11, 2, 375, 376, 7, 26, 2, 2, 376, 378, 3, 2, 2, 2, 377, 374, 3, 2, 2, 2, 378, 381, 3, 2, 2, 2, 379, 377, 3, 2, 2, 2, 379, 380, 3, 2, 2, 2, 380, 382, 3, 2, 2, 2, 381, 379, 3, 2, 2, 2, 382, 383, 5, 20, 11, 2, 383, 23, 3, 2, 2, 2, 384, 385, 5, 22, 12, 2, 385, 386, 7, 2, 2, 3, 386, 25, 3, 2, 2, 2, 387, 388, 7, 33, 2, 2, 388, 389, 5, 22, 12, 2, 389, 390, 7, 34, 2, 2, 390, 393, 5, 22, 12, 2, 391, 392, 7, 35, 2, 2, 392, 394, 5, 22, 12, 2, 393, 391, 3, 2, 2, 2, 393, 394, 3, 2, 2, 2, 394, 398, 3, 2, 2, 2, 395, 396, 7, 27, 2, 2, 396, 398, 5, 20, 11, 2, 397, 387, 3, 2, 2, 2, 397, 395, 3, 2, 2, 2, 398, 27, 3, 2, 2, 2, 399, 400, 7, 75, 2, 2, 400, 402, 7, 10, 2, 2, 401, 399, 3, 2, 2, 2, 401, 402, 3, 2, 2, 2, 402, 403, 3, 2, 2, 2, 403, 404, 5, 20, 11, 2, 404, 29, 3, 2, 2, 2, 405, 414, 7, 71, 2, 2, 406, 414, 7, 72, 2, 2, 407, 414, 9, 11, 2, 2, 408, 414, 7, 73, 2, 2, 409, 414, 7, 74, 2, 2, 410, 414, 7, 69, 2, 2, 411, 414, 7, 70, 2, 2, 412, 414, 7, 75, 2, 2, 413, 405, 3, 2, 2, 2, 413, 406, 3, 2, 2, 2, 413, 407, 3, 2, 2, 2, 413, 408, 3, 2, 2, 2, 413, 409, 3, 2, 2, 2, 413, 410, 3, 2, 2, 2, 413, 411, 3, 2, 2, 2, 413, 412, 3, 2, 2, 2, 414, 31, 3, 2, 2, 2, 415, 416, 7, 75, 2, 2, 416, 418, 7, 26, 2, 2, 417, 415, 3, 2, 2, 2, 418, 421, 3, 2, 2, 2, 419, 417, 3, 2, 2, 2, 419, 420, 3, 2, 2, 2, 420, 422, 3, 2, 2, 2, 421, 419, 3, 2, 2, 2, 422, 423, 7, 75, 2, 2, 423, 33, 3, 2, 2, 2, 424, 425, 8, 18, 1, 2, 425, 437, 7, 75, 2, 2, 426, 427, 7, 42, 2, 2, 427, 428, 5, 34, 18, 2, 428, 429, 7, 43, 2, 2, 429, 437, 3, 2, 2, 2, 430, 431, 7, 48, 2, 2, 431, 432, 5, 34, 18, 2, 432, 433, 7, 49, 2, 2, 433, 437, 3, 2, 2, 2, 434, 435, 7, 66, 2, 2, 435, 437, 5, 34, 18, 3, 436, 424, 3, 2, 2, 2, 436, 426, 3, 2, 2, 2, 436, 430, 3, 2, 2, 2, 436, 434, 3, 2, 2, 2, 437, 448, 3, 2, 2, 2, 438, 439, 12, 5, 2, 2, 439, 440, 7, 12, 2, 2, 440, 447, 5, 34, 18, 5, 441, 442, 12, 4, 2, 2, 442, 443, 7, 66, 2, 2, 443, 447, 5, 34, 18, 4, 444, 445, 12, 6, 2, 2, 445, 447, 7, 50, 2, 2, 446, 438, 3, 2, 2, 2, 446, 441, 3, 2, 2, 2, 446, 444, 3, 2, 2, 2, 447, 450, 3, 2, 2, 2, 448, 446, 3, 2, 2, 2, 448, 449, 3, 2, 2, 2, 449, 35, 3, 2, 2, 2, 450, 448, 3, 2, 2, 2, 52, 39, 48, 58, 63, 69, 76, 88, 90, 97, 111, 117, 135, 146, 150, 156, 164, 171, 175, 181, 189, 193, 201, 209, 219, 225, 241, 245, 253, 266, 270, 274, 323, 332, 336, 340, 342, 347, 358, 362, 369, 371, 379, 393, 397, 401, 413, 419, 436, 446, 448] \ No newline at end of file diff --git a/src/antlr/Pyxell.tokens b/src/antlr/Pyxell.tokens index b6572d61..8c43aa77 100644 --- a/src/antlr/Pyxell.tokens +++ b/src/antlr/Pyxell.tokens @@ -65,14 +65,15 @@ T__63=64 T__64=65 T__65=66 T__66=67 -INT=68 -FLOAT=69 -CHAR=70 -STRING=71 -ID=72 -COMMENT=73 -WS=74 -ERR=75 +T__67=68 +INT=69 +FLOAT=70 +CHAR=71 +STRING=72 +ID=73 +COMMENT=74 +WS=75 +ERR=76 ';'=1 'use'=2 'only'=3 @@ -140,3 +141,4 @@ ERR=75 'true'=65 'false'=66 'null'=67 +'super'=68 diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp index 36e8420c..551dfab3 100644 --- a/src/antlr/PyxellLexer.interp +++ b/src/antlr/PyxellLexer.interp @@ -67,6 +67,7 @@ null 'true' 'false' 'null' +'super' null null null @@ -145,6 +146,7 @@ null null null null +null INT FLOAT CHAR @@ -222,6 +224,7 @@ T__63 T__64 T__65 T__66 +T__67 INT FLOAT CHAR @@ -242,4 +245,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 77, 494, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 6, 69, 411, 10, 69, 13, 69, 14, 69, 412, 3, 70, 6, 70, 416, 10, 70, 13, 70, 14, 70, 417, 3, 70, 3, 70, 6, 70, 422, 10, 70, 13, 70, 14, 70, 423, 3, 70, 3, 70, 5, 70, 428, 10, 70, 3, 70, 6, 70, 431, 10, 70, 13, 70, 14, 70, 432, 5, 70, 435, 10, 70, 3, 71, 3, 71, 3, 71, 3, 71, 7, 71, 441, 10, 71, 12, 71, 14, 71, 444, 11, 71, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 72, 7, 72, 452, 10, 72, 12, 72, 14, 72, 455, 11, 72, 3, 72, 3, 72, 3, 73, 3, 73, 7, 73, 461, 10, 73, 12, 73, 14, 73, 464, 11, 73, 3, 74, 3, 74, 3, 75, 3, 75, 3, 76, 3, 76, 3, 76, 5, 76, 473, 10, 76, 3, 77, 3, 77, 3, 77, 3, 77, 7, 77, 479, 10, 77, 12, 77, 14, 77, 482, 11, 77, 3, 77, 3, 77, 3, 78, 6, 78, 487, 10, 78, 13, 78, 14, 78, 488, 3, 78, 3, 78, 3, 79, 3, 79, 2, 2, 80, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 74, 147, 2, 149, 2, 151, 2, 153, 75, 155, 76, 157, 77, 3, 2, 11, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 3, 2, 41, 41, 4, 2, 12, 12, 14, 15, 5, 2, 11, 12, 15, 15, 34, 34, 2, 505, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 3, 159, 3, 2, 2, 2, 5, 161, 3, 2, 2, 2, 7, 165, 3, 2, 2, 2, 9, 170, 3, 2, 2, 2, 11, 177, 3, 2, 2, 2, 13, 180, 3, 2, 2, 2, 15, 185, 3, 2, 2, 2, 17, 191, 3, 2, 2, 2, 19, 193, 3, 2, 2, 2, 21, 195, 3, 2, 2, 2, 23, 197, 3, 2, 2, 2, 25, 199, 3, 2, 2, 2, 27, 201, 3, 2, 2, 2, 29, 203, 3, 2, 2, 2, 31, 205, 3, 2, 2, 2, 33, 208, 3, 2, 2, 2, 35, 211, 3, 2, 2, 2, 37, 213, 3, 2, 2, 2, 39, 215, 3, 2, 2, 2, 41, 217, 3, 2, 2, 2, 43, 220, 3, 2, 2, 2, 45, 226, 3, 2, 2, 2, 47, 235, 3, 2, 2, 2, 49, 242, 3, 2, 2, 2, 51, 244, 3, 2, 2, 2, 53, 247, 3, 2, 2, 2, 55, 250, 3, 2, 2, 2, 57, 255, 3, 2, 2, 2, 59, 260, 3, 2, 2, 2, 61, 266, 3, 2, 2, 2, 63, 272, 3, 2, 2, 2, 65, 276, 3, 2, 2, 2, 67, 279, 3, 2, 2, 2, 69, 284, 3, 2, 2, 2, 71, 289, 3, 2, 2, 2, 73, 291, 3, 2, 2, 2, 75, 293, 3, 2, 2, 2, 77, 297, 3, 2, 2, 2, 79, 304, 3, 2, 2, 2, 81, 310, 3, 2, 2, 2, 83, 312, 3, 2, 2, 2, 85, 314, 3, 2, 2, 2, 87, 316, 3, 2, 2, 2, 89, 318, 3, 2, 2, 2, 91, 320, 3, 2, 2, 2, 93, 332, 3, 2, 2, 2, 95, 334, 3, 2, 2, 2, 97, 336, 3, 2, 2, 2, 99, 338, 3, 2, 2, 2, 101, 340, 3, 2, 2, 2, 103, 342, 3, 2, 2, 2, 105, 344, 3, 2, 2, 2, 107, 347, 3, 2, 2, 2, 109, 351, 3, 2, 2, 2, 111, 354, 3, 2, 2, 2, 113, 360, 3, 2, 2, 2, 115, 363, 3, 2, 2, 2, 117, 366, 3, 2, 2, 2, 119, 369, 3, 2, 2, 2, 121, 372, 3, 2, 2, 2, 123, 376, 3, 2, 2, 2, 125, 380, 3, 2, 2, 2, 127, 383, 3, 2, 2, 2, 129, 390, 3, 2, 2, 2, 131, 393, 3, 2, 2, 2, 133, 398, 3, 2, 2, 2, 135, 404, 3, 2, 2, 2, 137, 410, 3, 2, 2, 2, 139, 415, 3, 2, 2, 2, 141, 436, 3, 2, 2, 2, 143, 447, 3, 2, 2, 2, 145, 458, 3, 2, 2, 2, 147, 465, 3, 2, 2, 2, 149, 467, 3, 2, 2, 2, 151, 472, 3, 2, 2, 2, 153, 474, 3, 2, 2, 2, 155, 486, 3, 2, 2, 2, 157, 492, 3, 2, 2, 2, 159, 160, 7, 61, 2, 2, 160, 4, 3, 2, 2, 2, 161, 162, 7, 119, 2, 2, 162, 163, 7, 117, 2, 2, 163, 164, 7, 103, 2, 2, 164, 6, 3, 2, 2, 2, 165, 166, 7, 113, 2, 2, 166, 167, 7, 112, 2, 2, 167, 168, 7, 110, 2, 2, 168, 169, 7, 123, 2, 2, 169, 8, 3, 2, 2, 2, 170, 171, 7, 106, 2, 2, 171, 172, 7, 107, 2, 2, 172, 173, 7, 102, 2, 2, 173, 174, 7, 107, 2, 2, 174, 175, 7, 112, 2, 2, 175, 176, 7, 105, 2, 2, 176, 10, 3, 2, 2, 2, 177, 178, 7, 99, 2, 2, 178, 179, 7, 117, 2, 2, 179, 12, 3, 2, 2, 2, 180, 181, 7, 117, 2, 2, 181, 182, 7, 109, 2, 2, 182, 183, 7, 107, 2, 2, 183, 184, 7, 114, 2, 2, 184, 14, 3, 2, 2, 2, 185, 186, 7, 114, 2, 2, 186, 187, 7, 116, 2, 2, 187, 188, 7, 107, 2, 2, 188, 189, 7, 112, 2, 2, 189, 190, 7, 118, 2, 2, 190, 16, 3, 2, 2, 2, 191, 192, 7, 63, 2, 2, 192, 18, 3, 2, 2, 2, 193, 194, 7, 96, 2, 2, 194, 20, 3, 2, 2, 2, 195, 196, 7, 44, 2, 2, 196, 22, 3, 2, 2, 2, 197, 198, 7, 49, 2, 2, 198, 24, 3, 2, 2, 2, 199, 200, 7, 39, 2, 2, 200, 26, 3, 2, 2, 2, 201, 202, 7, 45, 2, 2, 202, 28, 3, 2, 2, 2, 203, 204, 7, 47, 2, 2, 204, 30, 3, 2, 2, 2, 205, 206, 7, 62, 2, 2, 206, 207, 7, 62, 2, 2, 207, 32, 3, 2, 2, 2, 208, 209, 7, 64, 2, 2, 209, 210, 7, 64, 2, 2, 210, 34, 3, 2, 2, 2, 211, 212, 7, 40, 2, 2, 212, 36, 3, 2, 2, 2, 213, 214, 7, 38, 2, 2, 214, 38, 3, 2, 2, 2, 215, 216, 7, 126, 2, 2, 216, 40, 3, 2, 2, 2, 217, 218, 7, 65, 2, 2, 218, 219, 7, 65, 2, 2, 219, 42, 3, 2, 2, 2, 220, 221, 7, 100, 2, 2, 221, 222, 7, 116, 2, 2, 222, 223, 7, 103, 2, 2, 223, 224, 7, 99, 2, 2, 224, 225, 7, 109, 2, 2, 225, 44, 3, 2, 2, 2, 226, 227, 7, 101, 2, 2, 227, 228, 7, 113, 2, 2, 228, 229, 7, 112, 2, 2, 229, 230, 7, 118, 2, 2, 230, 231, 7, 107, 2, 2, 231, 232, 7, 112, 2, 2, 232, 233, 7, 119, 2, 2, 233, 234, 7, 103, 2, 2, 234, 46, 3, 2, 2, 2, 235, 236, 7, 116, 2, 2, 236, 237, 7, 103, 2, 2, 237, 238, 7, 118, 2, 2, 238, 239, 7, 119, 2, 2, 239, 240, 7, 116, 2, 2, 240, 241, 7, 112, 2, 2, 241, 48, 3, 2, 2, 2, 242, 243, 7, 46, 2, 2, 243, 50, 3, 2, 2, 2, 244, 245, 7, 107, 2, 2, 245, 246, 7, 104, 2, 2, 246, 52, 3, 2, 2, 2, 247, 248, 7, 102, 2, 2, 248, 249, 7, 113, 2, 2, 249, 54, 3, 2, 2, 2, 250, 251, 7, 103, 2, 2, 251, 252, 7, 110, 2, 2, 252, 253, 7, 107, 2, 2, 253, 254, 7, 104, 2, 2, 254, 56, 3, 2, 2, 2, 255, 256, 7, 103, 2, 2, 256, 257, 7, 110, 2, 2, 257, 258, 7, 117, 2, 2, 258, 259, 7, 103, 2, 2, 259, 58, 3, 2, 2, 2, 260, 261, 7, 121, 2, 2, 261, 262, 7, 106, 2, 2, 262, 263, 7, 107, 2, 2, 263, 264, 7, 110, 2, 2, 264, 265, 7, 103, 2, 2, 265, 60, 3, 2, 2, 2, 266, 267, 7, 119, 2, 2, 267, 268, 7, 112, 2, 2, 268, 269, 7, 118, 2, 2, 269, 270, 7, 107, 2, 2, 270, 271, 7, 110, 2, 2, 271, 62, 3, 2, 2, 2, 272, 273, 7, 104, 2, 2, 273, 274, 7, 113, 2, 2, 274, 275, 7, 116, 2, 2, 275, 64, 3, 2, 2, 2, 276, 277, 7, 107, 2, 2, 277, 278, 7, 112, 2, 2, 278, 66, 3, 2, 2, 2, 279, 280, 7, 117, 2, 2, 280, 281, 7, 118, 2, 2, 281, 282, 7, 103, 2, 2, 282, 283, 7, 114, 2, 2, 283, 68, 3, 2, 2, 2, 284, 285, 7, 104, 2, 2, 285, 286, 7, 119, 2, 2, 286, 287, 7, 112, 2, 2, 287, 288, 7, 101, 2, 2, 288, 70, 3, 2, 2, 2, 289, 290, 7, 62, 2, 2, 290, 72, 3, 2, 2, 2, 291, 292, 7, 64, 2, 2, 292, 74, 3, 2, 2, 2, 293, 294, 7, 102, 2, 2, 294, 295, 7, 103, 2, 2, 295, 296, 7, 104, 2, 2, 296, 76, 3, 2, 2, 2, 297, 298, 7, 103, 2, 2, 298, 299, 7, 122, 2, 2, 299, 300, 7, 118, 2, 2, 300, 301, 7, 103, 2, 2, 301, 302, 7, 116, 2, 2, 302, 303, 7, 112, 2, 2, 303, 78, 3, 2, 2, 2, 304, 305, 7, 101, 2, 2, 305, 306, 7, 110, 2, 2, 306, 307, 7, 99, 2, 2, 307, 308, 7, 117, 2, 2, 308, 309, 7, 117, 2, 2, 309, 80, 3, 2, 2, 2, 310, 311, 7, 42, 2, 2, 311, 82, 3, 2, 2, 2, 312, 313, 7, 43, 2, 2, 313, 84, 3, 2, 2, 2, 314, 315, 7, 125, 2, 2, 315, 86, 3, 2, 2, 2, 316, 317, 7, 127, 2, 2, 317, 88, 3, 2, 2, 2, 318, 319, 7, 60, 2, 2, 319, 90, 3, 2, 2, 2, 320, 321, 7, 101, 2, 2, 321, 322, 7, 113, 2, 2, 322, 323, 7, 112, 2, 2, 323, 324, 7, 117, 2, 2, 324, 325, 7, 118, 2, 2, 325, 326, 7, 116, 2, 2, 326, 327, 7, 119, 2, 2, 327, 328, 7, 101, 2, 2, 328, 329, 7, 118, 2, 2, 329, 330, 7, 113, 2, 2, 330, 331, 7, 116, 2, 2, 331, 92, 3, 2, 2, 2, 332, 333, 7, 93, 2, 2, 333, 94, 3, 2, 2, 2, 334, 335, 7, 95, 2, 2, 335, 96, 3, 2, 2, 2, 336, 337, 7, 65, 2, 2, 337, 98, 3, 2, 2, 2, 338, 339, 7, 48, 2, 2, 339, 100, 3, 2, 2, 2, 340, 341, 7, 35, 2, 2, 341, 102, 3, 2, 2, 2, 342, 343, 7, 128, 2, 2, 343, 104, 3, 2, 2, 2, 344, 345, 7, 48, 2, 2, 345, 346, 7, 48, 2, 2, 346, 106, 3, 2, 2, 2, 347, 348, 7, 48, 2, 2, 348, 349, 7, 48, 2, 2, 349, 350, 7, 48, 2, 2, 350, 108, 3, 2, 2, 2, 351, 352, 7, 107, 2, 2, 352, 353, 7, 117, 2, 2, 353, 110, 3, 2, 2, 2, 354, 355, 7, 107, 2, 2, 355, 356, 7, 117, 2, 2, 356, 357, 7, 112, 2, 2, 357, 358, 7, 41, 2, 2, 358, 359, 7, 118, 2, 2, 359, 112, 3, 2, 2, 2, 360, 361, 7, 63, 2, 2, 361, 362, 7, 63, 2, 2, 362, 114, 3, 2, 2, 2, 363, 364, 7, 35, 2, 2, 364, 365, 7, 63, 2, 2, 365, 116, 3, 2, 2, 2, 366, 367, 7, 62, 2, 2, 367, 368, 7, 63, 2, 2, 368, 118, 3, 2, 2, 2, 369, 370, 7, 64, 2, 2, 370, 371, 7, 63, 2, 2, 371, 120, 3, 2, 2, 2, 372, 373, 7, 112, 2, 2, 373, 374, 7, 113, 2, 2, 374, 375, 7, 118, 2, 2, 375, 122, 3, 2, 2, 2, 376, 377, 7, 99, 2, 2, 377, 378, 7, 112, 2, 2, 378, 379, 7, 102, 2, 2, 379, 124, 3, 2, 2, 2, 380, 381, 7, 113, 2, 2, 381, 382, 7, 116, 2, 2, 382, 126, 3, 2, 2, 2, 383, 384, 7, 110, 2, 2, 384, 385, 7, 99, 2, 2, 385, 386, 7, 111, 2, 2, 386, 387, 7, 100, 2, 2, 387, 388, 7, 102, 2, 2, 388, 389, 7, 99, 2, 2, 389, 128, 3, 2, 2, 2, 390, 391, 7, 47, 2, 2, 391, 392, 7, 64, 2, 2, 392, 130, 3, 2, 2, 2, 393, 394, 7, 118, 2, 2, 394, 395, 7, 116, 2, 2, 395, 396, 7, 119, 2, 2, 396, 397, 7, 103, 2, 2, 397, 132, 3, 2, 2, 2, 398, 399, 7, 104, 2, 2, 399, 400, 7, 99, 2, 2, 400, 401, 7, 110, 2, 2, 401, 402, 7, 117, 2, 2, 402, 403, 7, 103, 2, 2, 403, 134, 3, 2, 2, 2, 404, 405, 7, 112, 2, 2, 405, 406, 7, 119, 2, 2, 406, 407, 7, 110, 2, 2, 407, 408, 7, 110, 2, 2, 408, 136, 3, 2, 2, 2, 409, 411, 5, 147, 74, 2, 410, 409, 3, 2, 2, 2, 411, 412, 3, 2, 2, 2, 412, 410, 3, 2, 2, 2, 412, 413, 3, 2, 2, 2, 413, 138, 3, 2, 2, 2, 414, 416, 5, 147, 74, 2, 415, 414, 3, 2, 2, 2, 416, 417, 3, 2, 2, 2, 417, 415, 3, 2, 2, 2, 417, 418, 3, 2, 2, 2, 418, 419, 3, 2, 2, 2, 419, 421, 7, 48, 2, 2, 420, 422, 5, 147, 74, 2, 421, 420, 3, 2, 2, 2, 422, 423, 3, 2, 2, 2, 423, 421, 3, 2, 2, 2, 423, 424, 3, 2, 2, 2, 424, 434, 3, 2, 2, 2, 425, 427, 7, 103, 2, 2, 426, 428, 7, 47, 2, 2, 427, 426, 3, 2, 2, 2, 427, 428, 3, 2, 2, 2, 428, 430, 3, 2, 2, 2, 429, 431, 5, 147, 74, 2, 430, 429, 3, 2, 2, 2, 431, 432, 3, 2, 2, 2, 432, 430, 3, 2, 2, 2, 432, 433, 3, 2, 2, 2, 433, 435, 3, 2, 2, 2, 434, 425, 3, 2, 2, 2, 434, 435, 3, 2, 2, 2, 435, 140, 3, 2, 2, 2, 436, 442, 7, 41, 2, 2, 437, 441, 10, 2, 2, 2, 438, 439, 7, 94, 2, 2, 439, 441, 9, 3, 2, 2, 440, 437, 3, 2, 2, 2, 440, 438, 3, 2, 2, 2, 441, 444, 3, 2, 2, 2, 442, 440, 3, 2, 2, 2, 442, 443, 3, 2, 2, 2, 443, 445, 3, 2, 2, 2, 444, 442, 3, 2, 2, 2, 445, 446, 7, 41, 2, 2, 446, 142, 3, 2, 2, 2, 447, 453, 7, 36, 2, 2, 448, 452, 10, 4, 2, 2, 449, 450, 7, 94, 2, 2, 450, 452, 9, 5, 2, 2, 451, 448, 3, 2, 2, 2, 451, 449, 3, 2, 2, 2, 452, 455, 3, 2, 2, 2, 453, 451, 3, 2, 2, 2, 453, 454, 3, 2, 2, 2, 454, 456, 3, 2, 2, 2, 455, 453, 3, 2, 2, 2, 456, 457, 7, 36, 2, 2, 457, 144, 3, 2, 2, 2, 458, 462, 5, 149, 75, 2, 459, 461, 5, 151, 76, 2, 460, 459, 3, 2, 2, 2, 461, 464, 3, 2, 2, 2, 462, 460, 3, 2, 2, 2, 462, 463, 3, 2, 2, 2, 463, 146, 3, 2, 2, 2, 464, 462, 3, 2, 2, 2, 465, 466, 9, 6, 2, 2, 466, 148, 3, 2, 2, 2, 467, 468, 9, 7, 2, 2, 468, 150, 3, 2, 2, 2, 469, 473, 5, 149, 75, 2, 470, 473, 5, 147, 74, 2, 471, 473, 9, 8, 2, 2, 472, 469, 3, 2, 2, 2, 472, 470, 3, 2, 2, 2, 472, 471, 3, 2, 2, 2, 473, 152, 3, 2, 2, 2, 474, 475, 7, 47, 2, 2, 475, 476, 7, 47, 2, 2, 476, 480, 3, 2, 2, 2, 477, 479, 10, 9, 2, 2, 478, 477, 3, 2, 2, 2, 479, 482, 3, 2, 2, 2, 480, 478, 3, 2, 2, 2, 480, 481, 3, 2, 2, 2, 481, 483, 3, 2, 2, 2, 482, 480, 3, 2, 2, 2, 483, 484, 8, 77, 2, 2, 484, 154, 3, 2, 2, 2, 485, 487, 9, 10, 2, 2, 486, 485, 3, 2, 2, 2, 487, 488, 3, 2, 2, 2, 488, 486, 3, 2, 2, 2, 488, 489, 3, 2, 2, 2, 489, 490, 3, 2, 2, 2, 490, 491, 8, 78, 2, 2, 491, 156, 3, 2, 2, 2, 492, 493, 11, 2, 2, 2, 493, 158, 3, 2, 2, 2, 17, 2, 412, 417, 423, 427, 432, 434, 440, 442, 451, 453, 462, 472, 480, 488, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 78, 502, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 70, 6, 70, 419, 10, 70, 13, 70, 14, 70, 420, 3, 71, 6, 71, 424, 10, 71, 13, 71, 14, 71, 425, 3, 71, 3, 71, 6, 71, 430, 10, 71, 13, 71, 14, 71, 431, 3, 71, 3, 71, 5, 71, 436, 10, 71, 3, 71, 6, 71, 439, 10, 71, 13, 71, 14, 71, 440, 5, 71, 443, 10, 71, 3, 72, 3, 72, 3, 72, 3, 72, 7, 72, 449, 10, 72, 12, 72, 14, 72, 452, 11, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 7, 73, 460, 10, 73, 12, 73, 14, 73, 463, 11, 73, 3, 73, 3, 73, 3, 74, 3, 74, 7, 74, 469, 10, 74, 12, 74, 14, 74, 472, 11, 74, 3, 75, 3, 75, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 5, 77, 481, 10, 77, 3, 78, 3, 78, 3, 78, 3, 78, 7, 78, 487, 10, 78, 12, 78, 14, 78, 490, 11, 78, 3, 78, 3, 78, 3, 79, 6, 79, 495, 10, 79, 13, 79, 14, 79, 496, 3, 79, 3, 79, 3, 80, 3, 80, 2, 2, 81, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 74, 147, 75, 149, 2, 151, 2, 153, 2, 155, 76, 157, 77, 159, 78, 3, 2, 11, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 3, 2, 41, 41, 4, 2, 12, 12, 14, 15, 5, 2, 11, 12, 15, 15, 34, 34, 2, 513, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 3, 161, 3, 2, 2, 2, 5, 163, 3, 2, 2, 2, 7, 167, 3, 2, 2, 2, 9, 172, 3, 2, 2, 2, 11, 179, 3, 2, 2, 2, 13, 182, 3, 2, 2, 2, 15, 187, 3, 2, 2, 2, 17, 193, 3, 2, 2, 2, 19, 195, 3, 2, 2, 2, 21, 197, 3, 2, 2, 2, 23, 199, 3, 2, 2, 2, 25, 201, 3, 2, 2, 2, 27, 203, 3, 2, 2, 2, 29, 205, 3, 2, 2, 2, 31, 207, 3, 2, 2, 2, 33, 210, 3, 2, 2, 2, 35, 213, 3, 2, 2, 2, 37, 215, 3, 2, 2, 2, 39, 217, 3, 2, 2, 2, 41, 219, 3, 2, 2, 2, 43, 222, 3, 2, 2, 2, 45, 228, 3, 2, 2, 2, 47, 237, 3, 2, 2, 2, 49, 244, 3, 2, 2, 2, 51, 246, 3, 2, 2, 2, 53, 249, 3, 2, 2, 2, 55, 252, 3, 2, 2, 2, 57, 257, 3, 2, 2, 2, 59, 262, 3, 2, 2, 2, 61, 268, 3, 2, 2, 2, 63, 274, 3, 2, 2, 2, 65, 278, 3, 2, 2, 2, 67, 281, 3, 2, 2, 2, 69, 286, 3, 2, 2, 2, 71, 291, 3, 2, 2, 2, 73, 293, 3, 2, 2, 2, 75, 295, 3, 2, 2, 2, 77, 299, 3, 2, 2, 2, 79, 306, 3, 2, 2, 2, 81, 312, 3, 2, 2, 2, 83, 314, 3, 2, 2, 2, 85, 316, 3, 2, 2, 2, 87, 318, 3, 2, 2, 2, 89, 320, 3, 2, 2, 2, 91, 322, 3, 2, 2, 2, 93, 334, 3, 2, 2, 2, 95, 336, 3, 2, 2, 2, 97, 338, 3, 2, 2, 2, 99, 340, 3, 2, 2, 2, 101, 342, 3, 2, 2, 2, 103, 344, 3, 2, 2, 2, 105, 346, 3, 2, 2, 2, 107, 349, 3, 2, 2, 2, 109, 353, 3, 2, 2, 2, 111, 356, 3, 2, 2, 2, 113, 362, 3, 2, 2, 2, 115, 365, 3, 2, 2, 2, 117, 368, 3, 2, 2, 2, 119, 371, 3, 2, 2, 2, 121, 374, 3, 2, 2, 2, 123, 378, 3, 2, 2, 2, 125, 382, 3, 2, 2, 2, 127, 385, 3, 2, 2, 2, 129, 392, 3, 2, 2, 2, 131, 395, 3, 2, 2, 2, 133, 400, 3, 2, 2, 2, 135, 406, 3, 2, 2, 2, 137, 411, 3, 2, 2, 2, 139, 418, 3, 2, 2, 2, 141, 423, 3, 2, 2, 2, 143, 444, 3, 2, 2, 2, 145, 455, 3, 2, 2, 2, 147, 466, 3, 2, 2, 2, 149, 473, 3, 2, 2, 2, 151, 475, 3, 2, 2, 2, 153, 480, 3, 2, 2, 2, 155, 482, 3, 2, 2, 2, 157, 494, 3, 2, 2, 2, 159, 500, 3, 2, 2, 2, 161, 162, 7, 61, 2, 2, 162, 4, 3, 2, 2, 2, 163, 164, 7, 119, 2, 2, 164, 165, 7, 117, 2, 2, 165, 166, 7, 103, 2, 2, 166, 6, 3, 2, 2, 2, 167, 168, 7, 113, 2, 2, 168, 169, 7, 112, 2, 2, 169, 170, 7, 110, 2, 2, 170, 171, 7, 123, 2, 2, 171, 8, 3, 2, 2, 2, 172, 173, 7, 106, 2, 2, 173, 174, 7, 107, 2, 2, 174, 175, 7, 102, 2, 2, 175, 176, 7, 107, 2, 2, 176, 177, 7, 112, 2, 2, 177, 178, 7, 105, 2, 2, 178, 10, 3, 2, 2, 2, 179, 180, 7, 99, 2, 2, 180, 181, 7, 117, 2, 2, 181, 12, 3, 2, 2, 2, 182, 183, 7, 117, 2, 2, 183, 184, 7, 109, 2, 2, 184, 185, 7, 107, 2, 2, 185, 186, 7, 114, 2, 2, 186, 14, 3, 2, 2, 2, 187, 188, 7, 114, 2, 2, 188, 189, 7, 116, 2, 2, 189, 190, 7, 107, 2, 2, 190, 191, 7, 112, 2, 2, 191, 192, 7, 118, 2, 2, 192, 16, 3, 2, 2, 2, 193, 194, 7, 63, 2, 2, 194, 18, 3, 2, 2, 2, 195, 196, 7, 96, 2, 2, 196, 20, 3, 2, 2, 2, 197, 198, 7, 44, 2, 2, 198, 22, 3, 2, 2, 2, 199, 200, 7, 49, 2, 2, 200, 24, 3, 2, 2, 2, 201, 202, 7, 39, 2, 2, 202, 26, 3, 2, 2, 2, 203, 204, 7, 45, 2, 2, 204, 28, 3, 2, 2, 2, 205, 206, 7, 47, 2, 2, 206, 30, 3, 2, 2, 2, 207, 208, 7, 62, 2, 2, 208, 209, 7, 62, 2, 2, 209, 32, 3, 2, 2, 2, 210, 211, 7, 64, 2, 2, 211, 212, 7, 64, 2, 2, 212, 34, 3, 2, 2, 2, 213, 214, 7, 40, 2, 2, 214, 36, 3, 2, 2, 2, 215, 216, 7, 38, 2, 2, 216, 38, 3, 2, 2, 2, 217, 218, 7, 126, 2, 2, 218, 40, 3, 2, 2, 2, 219, 220, 7, 65, 2, 2, 220, 221, 7, 65, 2, 2, 221, 42, 3, 2, 2, 2, 222, 223, 7, 100, 2, 2, 223, 224, 7, 116, 2, 2, 224, 225, 7, 103, 2, 2, 225, 226, 7, 99, 2, 2, 226, 227, 7, 109, 2, 2, 227, 44, 3, 2, 2, 2, 228, 229, 7, 101, 2, 2, 229, 230, 7, 113, 2, 2, 230, 231, 7, 112, 2, 2, 231, 232, 7, 118, 2, 2, 232, 233, 7, 107, 2, 2, 233, 234, 7, 112, 2, 2, 234, 235, 7, 119, 2, 2, 235, 236, 7, 103, 2, 2, 236, 46, 3, 2, 2, 2, 237, 238, 7, 116, 2, 2, 238, 239, 7, 103, 2, 2, 239, 240, 7, 118, 2, 2, 240, 241, 7, 119, 2, 2, 241, 242, 7, 116, 2, 2, 242, 243, 7, 112, 2, 2, 243, 48, 3, 2, 2, 2, 244, 245, 7, 46, 2, 2, 245, 50, 3, 2, 2, 2, 246, 247, 7, 107, 2, 2, 247, 248, 7, 104, 2, 2, 248, 52, 3, 2, 2, 2, 249, 250, 7, 102, 2, 2, 250, 251, 7, 113, 2, 2, 251, 54, 3, 2, 2, 2, 252, 253, 7, 103, 2, 2, 253, 254, 7, 110, 2, 2, 254, 255, 7, 107, 2, 2, 255, 256, 7, 104, 2, 2, 256, 56, 3, 2, 2, 2, 257, 258, 7, 103, 2, 2, 258, 259, 7, 110, 2, 2, 259, 260, 7, 117, 2, 2, 260, 261, 7, 103, 2, 2, 261, 58, 3, 2, 2, 2, 262, 263, 7, 121, 2, 2, 263, 264, 7, 106, 2, 2, 264, 265, 7, 107, 2, 2, 265, 266, 7, 110, 2, 2, 266, 267, 7, 103, 2, 2, 267, 60, 3, 2, 2, 2, 268, 269, 7, 119, 2, 2, 269, 270, 7, 112, 2, 2, 270, 271, 7, 118, 2, 2, 271, 272, 7, 107, 2, 2, 272, 273, 7, 110, 2, 2, 273, 62, 3, 2, 2, 2, 274, 275, 7, 104, 2, 2, 275, 276, 7, 113, 2, 2, 276, 277, 7, 116, 2, 2, 277, 64, 3, 2, 2, 2, 278, 279, 7, 107, 2, 2, 279, 280, 7, 112, 2, 2, 280, 66, 3, 2, 2, 2, 281, 282, 7, 117, 2, 2, 282, 283, 7, 118, 2, 2, 283, 284, 7, 103, 2, 2, 284, 285, 7, 114, 2, 2, 285, 68, 3, 2, 2, 2, 286, 287, 7, 104, 2, 2, 287, 288, 7, 119, 2, 2, 288, 289, 7, 112, 2, 2, 289, 290, 7, 101, 2, 2, 290, 70, 3, 2, 2, 2, 291, 292, 7, 62, 2, 2, 292, 72, 3, 2, 2, 2, 293, 294, 7, 64, 2, 2, 294, 74, 3, 2, 2, 2, 295, 296, 7, 102, 2, 2, 296, 297, 7, 103, 2, 2, 297, 298, 7, 104, 2, 2, 298, 76, 3, 2, 2, 2, 299, 300, 7, 103, 2, 2, 300, 301, 7, 122, 2, 2, 301, 302, 7, 118, 2, 2, 302, 303, 7, 103, 2, 2, 303, 304, 7, 116, 2, 2, 304, 305, 7, 112, 2, 2, 305, 78, 3, 2, 2, 2, 306, 307, 7, 101, 2, 2, 307, 308, 7, 110, 2, 2, 308, 309, 7, 99, 2, 2, 309, 310, 7, 117, 2, 2, 310, 311, 7, 117, 2, 2, 311, 80, 3, 2, 2, 2, 312, 313, 7, 42, 2, 2, 313, 82, 3, 2, 2, 2, 314, 315, 7, 43, 2, 2, 315, 84, 3, 2, 2, 2, 316, 317, 7, 125, 2, 2, 317, 86, 3, 2, 2, 2, 318, 319, 7, 127, 2, 2, 319, 88, 3, 2, 2, 2, 320, 321, 7, 60, 2, 2, 321, 90, 3, 2, 2, 2, 322, 323, 7, 101, 2, 2, 323, 324, 7, 113, 2, 2, 324, 325, 7, 112, 2, 2, 325, 326, 7, 117, 2, 2, 326, 327, 7, 118, 2, 2, 327, 328, 7, 116, 2, 2, 328, 329, 7, 119, 2, 2, 329, 330, 7, 101, 2, 2, 330, 331, 7, 118, 2, 2, 331, 332, 7, 113, 2, 2, 332, 333, 7, 116, 2, 2, 333, 92, 3, 2, 2, 2, 334, 335, 7, 93, 2, 2, 335, 94, 3, 2, 2, 2, 336, 337, 7, 95, 2, 2, 337, 96, 3, 2, 2, 2, 338, 339, 7, 65, 2, 2, 339, 98, 3, 2, 2, 2, 340, 341, 7, 48, 2, 2, 341, 100, 3, 2, 2, 2, 342, 343, 7, 35, 2, 2, 343, 102, 3, 2, 2, 2, 344, 345, 7, 128, 2, 2, 345, 104, 3, 2, 2, 2, 346, 347, 7, 48, 2, 2, 347, 348, 7, 48, 2, 2, 348, 106, 3, 2, 2, 2, 349, 350, 7, 48, 2, 2, 350, 351, 7, 48, 2, 2, 351, 352, 7, 48, 2, 2, 352, 108, 3, 2, 2, 2, 353, 354, 7, 107, 2, 2, 354, 355, 7, 117, 2, 2, 355, 110, 3, 2, 2, 2, 356, 357, 7, 107, 2, 2, 357, 358, 7, 117, 2, 2, 358, 359, 7, 112, 2, 2, 359, 360, 7, 41, 2, 2, 360, 361, 7, 118, 2, 2, 361, 112, 3, 2, 2, 2, 362, 363, 7, 63, 2, 2, 363, 364, 7, 63, 2, 2, 364, 114, 3, 2, 2, 2, 365, 366, 7, 35, 2, 2, 366, 367, 7, 63, 2, 2, 367, 116, 3, 2, 2, 2, 368, 369, 7, 62, 2, 2, 369, 370, 7, 63, 2, 2, 370, 118, 3, 2, 2, 2, 371, 372, 7, 64, 2, 2, 372, 373, 7, 63, 2, 2, 373, 120, 3, 2, 2, 2, 374, 375, 7, 112, 2, 2, 375, 376, 7, 113, 2, 2, 376, 377, 7, 118, 2, 2, 377, 122, 3, 2, 2, 2, 378, 379, 7, 99, 2, 2, 379, 380, 7, 112, 2, 2, 380, 381, 7, 102, 2, 2, 381, 124, 3, 2, 2, 2, 382, 383, 7, 113, 2, 2, 383, 384, 7, 116, 2, 2, 384, 126, 3, 2, 2, 2, 385, 386, 7, 110, 2, 2, 386, 387, 7, 99, 2, 2, 387, 388, 7, 111, 2, 2, 388, 389, 7, 100, 2, 2, 389, 390, 7, 102, 2, 2, 390, 391, 7, 99, 2, 2, 391, 128, 3, 2, 2, 2, 392, 393, 7, 47, 2, 2, 393, 394, 7, 64, 2, 2, 394, 130, 3, 2, 2, 2, 395, 396, 7, 118, 2, 2, 396, 397, 7, 116, 2, 2, 397, 398, 7, 119, 2, 2, 398, 399, 7, 103, 2, 2, 399, 132, 3, 2, 2, 2, 400, 401, 7, 104, 2, 2, 401, 402, 7, 99, 2, 2, 402, 403, 7, 110, 2, 2, 403, 404, 7, 117, 2, 2, 404, 405, 7, 103, 2, 2, 405, 134, 3, 2, 2, 2, 406, 407, 7, 112, 2, 2, 407, 408, 7, 119, 2, 2, 408, 409, 7, 110, 2, 2, 409, 410, 7, 110, 2, 2, 410, 136, 3, 2, 2, 2, 411, 412, 7, 117, 2, 2, 412, 413, 7, 119, 2, 2, 413, 414, 7, 114, 2, 2, 414, 415, 7, 103, 2, 2, 415, 416, 7, 116, 2, 2, 416, 138, 3, 2, 2, 2, 417, 419, 5, 149, 75, 2, 418, 417, 3, 2, 2, 2, 419, 420, 3, 2, 2, 2, 420, 418, 3, 2, 2, 2, 420, 421, 3, 2, 2, 2, 421, 140, 3, 2, 2, 2, 422, 424, 5, 149, 75, 2, 423, 422, 3, 2, 2, 2, 424, 425, 3, 2, 2, 2, 425, 423, 3, 2, 2, 2, 425, 426, 3, 2, 2, 2, 426, 427, 3, 2, 2, 2, 427, 429, 7, 48, 2, 2, 428, 430, 5, 149, 75, 2, 429, 428, 3, 2, 2, 2, 430, 431, 3, 2, 2, 2, 431, 429, 3, 2, 2, 2, 431, 432, 3, 2, 2, 2, 432, 442, 3, 2, 2, 2, 433, 435, 7, 103, 2, 2, 434, 436, 7, 47, 2, 2, 435, 434, 3, 2, 2, 2, 435, 436, 3, 2, 2, 2, 436, 438, 3, 2, 2, 2, 437, 439, 5, 149, 75, 2, 438, 437, 3, 2, 2, 2, 439, 440, 3, 2, 2, 2, 440, 438, 3, 2, 2, 2, 440, 441, 3, 2, 2, 2, 441, 443, 3, 2, 2, 2, 442, 433, 3, 2, 2, 2, 442, 443, 3, 2, 2, 2, 443, 142, 3, 2, 2, 2, 444, 450, 7, 41, 2, 2, 445, 449, 10, 2, 2, 2, 446, 447, 7, 94, 2, 2, 447, 449, 9, 3, 2, 2, 448, 445, 3, 2, 2, 2, 448, 446, 3, 2, 2, 2, 449, 452, 3, 2, 2, 2, 450, 448, 3, 2, 2, 2, 450, 451, 3, 2, 2, 2, 451, 453, 3, 2, 2, 2, 452, 450, 3, 2, 2, 2, 453, 454, 7, 41, 2, 2, 454, 144, 3, 2, 2, 2, 455, 461, 7, 36, 2, 2, 456, 460, 10, 4, 2, 2, 457, 458, 7, 94, 2, 2, 458, 460, 9, 5, 2, 2, 459, 456, 3, 2, 2, 2, 459, 457, 3, 2, 2, 2, 460, 463, 3, 2, 2, 2, 461, 459, 3, 2, 2, 2, 461, 462, 3, 2, 2, 2, 462, 464, 3, 2, 2, 2, 463, 461, 3, 2, 2, 2, 464, 465, 7, 36, 2, 2, 465, 146, 3, 2, 2, 2, 466, 470, 5, 151, 76, 2, 467, 469, 5, 153, 77, 2, 468, 467, 3, 2, 2, 2, 469, 472, 3, 2, 2, 2, 470, 468, 3, 2, 2, 2, 470, 471, 3, 2, 2, 2, 471, 148, 3, 2, 2, 2, 472, 470, 3, 2, 2, 2, 473, 474, 9, 6, 2, 2, 474, 150, 3, 2, 2, 2, 475, 476, 9, 7, 2, 2, 476, 152, 3, 2, 2, 2, 477, 481, 5, 151, 76, 2, 478, 481, 5, 149, 75, 2, 479, 481, 9, 8, 2, 2, 480, 477, 3, 2, 2, 2, 480, 478, 3, 2, 2, 2, 480, 479, 3, 2, 2, 2, 481, 154, 3, 2, 2, 2, 482, 483, 7, 47, 2, 2, 483, 484, 7, 47, 2, 2, 484, 488, 3, 2, 2, 2, 485, 487, 10, 9, 2, 2, 486, 485, 3, 2, 2, 2, 487, 490, 3, 2, 2, 2, 488, 486, 3, 2, 2, 2, 488, 489, 3, 2, 2, 2, 489, 491, 3, 2, 2, 2, 490, 488, 3, 2, 2, 2, 491, 492, 8, 78, 2, 2, 492, 156, 3, 2, 2, 2, 493, 495, 9, 10, 2, 2, 494, 493, 3, 2, 2, 2, 495, 496, 3, 2, 2, 2, 496, 494, 3, 2, 2, 2, 496, 497, 3, 2, 2, 2, 497, 498, 3, 2, 2, 2, 498, 499, 8, 79, 2, 2, 499, 158, 3, 2, 2, 2, 500, 501, 11, 2, 2, 2, 501, 160, 3, 2, 2, 2, 17, 2, 420, 425, 431, 435, 440, 442, 448, 450, 459, 461, 470, 480, 488, 496, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py index 8150e710..d4609378 100644 --- a/src/antlr/PyxellLexer.py +++ b/src/antlr/PyxellLexer.py @@ -8,8 +8,8 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2M") - buf.write("\u01ee\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2N") + buf.write("\u01f6\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") @@ -20,203 +20,206 @@ def serializedATN(): buf.write("\t\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:") buf.write("\4;\t;\4<\t<\4=\t=\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\t") buf.write("C\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I\tI\4J\tJ\4K\tK\4L\t") - buf.write("L\4M\tM\4N\tN\4O\tO\3\2\3\2\3\3\3\3\3\3\3\3\3\4\3\4\3") - buf.write("\4\3\4\3\4\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3\6\3\7") - buf.write("\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3\t\3\n\3") - buf.write("\n\3\13\3\13\3\f\3\f\3\r\3\r\3\16\3\16\3\17\3\17\3\20") - buf.write("\3\20\3\20\3\21\3\21\3\21\3\22\3\22\3\23\3\23\3\24\3\24") - buf.write("\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\26\3\27\3\27") - buf.write("\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\30") - buf.write("\3\30\3\30\3\30\3\31\3\31\3\32\3\32\3\32\3\33\3\33\3\33") - buf.write("\3\34\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35\3\36") - buf.write("\3\36\3\36\3\36\3\36\3\36\3\37\3\37\3\37\3\37\3\37\3\37") - buf.write("\3 \3 \3 \3 \3!\3!\3!\3\"\3\"\3\"\3\"\3\"\3#\3#\3#\3#") - buf.write("\3#\3$\3$\3%\3%\3&\3&\3&\3&\3\'\3\'\3\'\3\'\3\'\3\'\3") - buf.write("\'\3(\3(\3(\3(\3(\3(\3)\3)\3*\3*\3+\3+\3,\3,\3-\3-\3.") - buf.write("\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3/\3/\3\60\3\60\3\61") - buf.write("\3\61\3\62\3\62\3\63\3\63\3\64\3\64\3\65\3\65\3\65\3\66") - buf.write("\3\66\3\66\3\66\3\67\3\67\3\67\38\38\38\38\38\38\39\3") - buf.write("9\39\3:\3:\3:\3;\3;\3;\3<\3<\3<\3=\3=\3=\3=\3>\3>\3>\3") - buf.write(">\3?\3?\3?\3@\3@\3@\3@\3@\3@\3@\3A\3A\3A\3B\3B\3B\3B\3") - buf.write("B\3C\3C\3C\3C\3C\3C\3D\3D\3D\3D\3D\3E\6E\u019b\nE\rE\16") - buf.write("E\u019c\3F\6F\u01a0\nF\rF\16F\u01a1\3F\3F\6F\u01a6\nF") - buf.write("\rF\16F\u01a7\3F\3F\5F\u01ac\nF\3F\6F\u01af\nF\rF\16F") - buf.write("\u01b0\5F\u01b3\nF\3G\3G\3G\3G\7G\u01b9\nG\fG\16G\u01bc") - buf.write("\13G\3G\3G\3H\3H\3H\3H\7H\u01c4\nH\fH\16H\u01c7\13H\3") - buf.write("H\3H\3I\3I\7I\u01cd\nI\fI\16I\u01d0\13I\3J\3J\3K\3K\3") - buf.write("L\3L\3L\5L\u01d9\nL\3M\3M\3M\3M\7M\u01df\nM\fM\16M\u01e2") - buf.write("\13M\3M\3M\3N\6N\u01e7\nN\rN\16N\u01e8\3N\3N\3O\3O\2\2") - buf.write("P\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31") - buf.write("\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31") - buf.write("\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O") - buf.write(")Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k\67m8o9q:s;") - buf.write("u{?}@\177A\u0081B\u0083C\u0085D\u0087E\u0089F\u008b") - buf.write("G\u008dH\u008fI\u0091J\u0093\2\u0095\2\u0097\2\u0099K") - buf.write("\u009bL\u009dM\3\2\13\4\2))^^\6\2))^^ppvv\4\2$$^^\6\2") - buf.write("$$^^ppvv\3\2\62;\5\2C\\aac|\3\2))\4\2\f\f\16\17\5\2\13") - buf.write("\f\17\17\"\"\2\u01f9\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2") - buf.write("\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2") - buf.write("\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31") - buf.write("\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2") - buf.write("\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3") - buf.write("\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2") - buf.write("\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3") - buf.write("\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G") - buf.write("\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2") - buf.write("Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2") - buf.write("\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2") - buf.write("\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2m\3\2") - buf.write("\2\2\2o\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2u\3\2\2\2\2w\3") - buf.write("\2\2\2\2y\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177\3\2\2\2") - buf.write("\2\u0081\3\2\2\2\2\u0083\3\2\2\2\2\u0085\3\2\2\2\2\u0087") - buf.write("\3\2\2\2\2\u0089\3\2\2\2\2\u008b\3\2\2\2\2\u008d\3\2\2") - buf.write("\2\2\u008f\3\2\2\2\2\u0091\3\2\2\2\2\u0099\3\2\2\2\2\u009b") - buf.write("\3\2\2\2\2\u009d\3\2\2\2\3\u009f\3\2\2\2\5\u00a1\3\2\2") - buf.write("\2\7\u00a5\3\2\2\2\t\u00aa\3\2\2\2\13\u00b1\3\2\2\2\r") - buf.write("\u00b4\3\2\2\2\17\u00b9\3\2\2\2\21\u00bf\3\2\2\2\23\u00c1") - buf.write("\3\2\2\2\25\u00c3\3\2\2\2\27\u00c5\3\2\2\2\31\u00c7\3") - buf.write("\2\2\2\33\u00c9\3\2\2\2\35\u00cb\3\2\2\2\37\u00cd\3\2") - buf.write("\2\2!\u00d0\3\2\2\2#\u00d3\3\2\2\2%\u00d5\3\2\2\2\'\u00d7") - buf.write("\3\2\2\2)\u00d9\3\2\2\2+\u00dc\3\2\2\2-\u00e2\3\2\2\2") - buf.write("/\u00eb\3\2\2\2\61\u00f2\3\2\2\2\63\u00f4\3\2\2\2\65\u00f7") - buf.write("\3\2\2\2\67\u00fa\3\2\2\29\u00ff\3\2\2\2;\u0104\3\2\2") - buf.write("\2=\u010a\3\2\2\2?\u0110\3\2\2\2A\u0114\3\2\2\2C\u0117") - buf.write("\3\2\2\2E\u011c\3\2\2\2G\u0121\3\2\2\2I\u0123\3\2\2\2") - buf.write("K\u0125\3\2\2\2M\u0129\3\2\2\2O\u0130\3\2\2\2Q\u0136\3") - buf.write("\2\2\2S\u0138\3\2\2\2U\u013a\3\2\2\2W\u013c\3\2\2\2Y\u013e") - buf.write("\3\2\2\2[\u0140\3\2\2\2]\u014c\3\2\2\2_\u014e\3\2\2\2") - buf.write("a\u0150\3\2\2\2c\u0152\3\2\2\2e\u0154\3\2\2\2g\u0156\3") - buf.write("\2\2\2i\u0158\3\2\2\2k\u015b\3\2\2\2m\u015f\3\2\2\2o\u0162") - buf.write("\3\2\2\2q\u0168\3\2\2\2s\u016b\3\2\2\2u\u016e\3\2\2\2") - buf.write("w\u0171\3\2\2\2y\u0174\3\2\2\2{\u0178\3\2\2\2}\u017c\3") - buf.write("\2\2\2\177\u017f\3\2\2\2\u0081\u0186\3\2\2\2\u0083\u0189") - buf.write("\3\2\2\2\u0085\u018e\3\2\2\2\u0087\u0194\3\2\2\2\u0089") - buf.write("\u019a\3\2\2\2\u008b\u019f\3\2\2\2\u008d\u01b4\3\2\2\2") - buf.write("\u008f\u01bf\3\2\2\2\u0091\u01ca\3\2\2\2\u0093\u01d1\3") - buf.write("\2\2\2\u0095\u01d3\3\2\2\2\u0097\u01d8\3\2\2\2\u0099\u01da") - buf.write("\3\2\2\2\u009b\u01e6\3\2\2\2\u009d\u01ec\3\2\2\2\u009f") - buf.write("\u00a0\7=\2\2\u00a0\4\3\2\2\2\u00a1\u00a2\7w\2\2\u00a2") - buf.write("\u00a3\7u\2\2\u00a3\u00a4\7g\2\2\u00a4\6\3\2\2\2\u00a5") - buf.write("\u00a6\7q\2\2\u00a6\u00a7\7p\2\2\u00a7\u00a8\7n\2\2\u00a8") - buf.write("\u00a9\7{\2\2\u00a9\b\3\2\2\2\u00aa\u00ab\7j\2\2\u00ab") - buf.write("\u00ac\7k\2\2\u00ac\u00ad\7f\2\2\u00ad\u00ae\7k\2\2\u00ae") - buf.write("\u00af\7p\2\2\u00af\u00b0\7i\2\2\u00b0\n\3\2\2\2\u00b1") - buf.write("\u00b2\7c\2\2\u00b2\u00b3\7u\2\2\u00b3\f\3\2\2\2\u00b4") - buf.write("\u00b5\7u\2\2\u00b5\u00b6\7m\2\2\u00b6\u00b7\7k\2\2\u00b7") - buf.write("\u00b8\7r\2\2\u00b8\16\3\2\2\2\u00b9\u00ba\7r\2\2\u00ba") - buf.write("\u00bb\7t\2\2\u00bb\u00bc\7k\2\2\u00bc\u00bd\7p\2\2\u00bd") - buf.write("\u00be\7v\2\2\u00be\20\3\2\2\2\u00bf\u00c0\7?\2\2\u00c0") - buf.write("\22\3\2\2\2\u00c1\u00c2\7`\2\2\u00c2\24\3\2\2\2\u00c3") - buf.write("\u00c4\7,\2\2\u00c4\26\3\2\2\2\u00c5\u00c6\7\61\2\2\u00c6") - buf.write("\30\3\2\2\2\u00c7\u00c8\7\'\2\2\u00c8\32\3\2\2\2\u00c9") - buf.write("\u00ca\7-\2\2\u00ca\34\3\2\2\2\u00cb\u00cc\7/\2\2\u00cc") - buf.write("\36\3\2\2\2\u00cd\u00ce\7>\2\2\u00ce\u00cf\7>\2\2\u00cf") - buf.write(" \3\2\2\2\u00d0\u00d1\7@\2\2\u00d1\u00d2\7@\2\2\u00d2") - buf.write("\"\3\2\2\2\u00d3\u00d4\7(\2\2\u00d4$\3\2\2\2\u00d5\u00d6") - buf.write("\7&\2\2\u00d6&\3\2\2\2\u00d7\u00d8\7~\2\2\u00d8(\3\2\2") - buf.write("\2\u00d9\u00da\7A\2\2\u00da\u00db\7A\2\2\u00db*\3\2\2") - buf.write("\2\u00dc\u00dd\7d\2\2\u00dd\u00de\7t\2\2\u00de\u00df\7") - buf.write("g\2\2\u00df\u00e0\7c\2\2\u00e0\u00e1\7m\2\2\u00e1,\3\2") - buf.write("\2\2\u00e2\u00e3\7e\2\2\u00e3\u00e4\7q\2\2\u00e4\u00e5") - buf.write("\7p\2\2\u00e5\u00e6\7v\2\2\u00e6\u00e7\7k\2\2\u00e7\u00e8") - buf.write("\7p\2\2\u00e8\u00e9\7w\2\2\u00e9\u00ea\7g\2\2\u00ea.\3") - buf.write("\2\2\2\u00eb\u00ec\7t\2\2\u00ec\u00ed\7g\2\2\u00ed\u00ee") - buf.write("\7v\2\2\u00ee\u00ef\7w\2\2\u00ef\u00f0\7t\2\2\u00f0\u00f1") - buf.write("\7p\2\2\u00f1\60\3\2\2\2\u00f2\u00f3\7.\2\2\u00f3\62\3") - buf.write("\2\2\2\u00f4\u00f5\7k\2\2\u00f5\u00f6\7h\2\2\u00f6\64") - buf.write("\3\2\2\2\u00f7\u00f8\7f\2\2\u00f8\u00f9\7q\2\2\u00f9\66") - buf.write("\3\2\2\2\u00fa\u00fb\7g\2\2\u00fb\u00fc\7n\2\2\u00fc\u00fd") - buf.write("\7k\2\2\u00fd\u00fe\7h\2\2\u00fe8\3\2\2\2\u00ff\u0100") - buf.write("\7g\2\2\u0100\u0101\7n\2\2\u0101\u0102\7u\2\2\u0102\u0103") - buf.write("\7g\2\2\u0103:\3\2\2\2\u0104\u0105\7y\2\2\u0105\u0106") - buf.write("\7j\2\2\u0106\u0107\7k\2\2\u0107\u0108\7n\2\2\u0108\u0109") - buf.write("\7g\2\2\u0109<\3\2\2\2\u010a\u010b\7w\2\2\u010b\u010c") - buf.write("\7p\2\2\u010c\u010d\7v\2\2\u010d\u010e\7k\2\2\u010e\u010f") - buf.write("\7n\2\2\u010f>\3\2\2\2\u0110\u0111\7h\2\2\u0111\u0112") - buf.write("\7q\2\2\u0112\u0113\7t\2\2\u0113@\3\2\2\2\u0114\u0115") - buf.write("\7k\2\2\u0115\u0116\7p\2\2\u0116B\3\2\2\2\u0117\u0118") - buf.write("\7u\2\2\u0118\u0119\7v\2\2\u0119\u011a\7g\2\2\u011a\u011b") - buf.write("\7r\2\2\u011bD\3\2\2\2\u011c\u011d\7h\2\2\u011d\u011e") - buf.write("\7w\2\2\u011e\u011f\7p\2\2\u011f\u0120\7e\2\2\u0120F\3") - buf.write("\2\2\2\u0121\u0122\7>\2\2\u0122H\3\2\2\2\u0123\u0124\7") - buf.write("@\2\2\u0124J\3\2\2\2\u0125\u0126\7f\2\2\u0126\u0127\7") - buf.write("g\2\2\u0127\u0128\7h\2\2\u0128L\3\2\2\2\u0129\u012a\7") - buf.write("g\2\2\u012a\u012b\7z\2\2\u012b\u012c\7v\2\2\u012c\u012d") - buf.write("\7g\2\2\u012d\u012e\7t\2\2\u012e\u012f\7p\2\2\u012fN\3") - buf.write("\2\2\2\u0130\u0131\7e\2\2\u0131\u0132\7n\2\2\u0132\u0133") - buf.write("\7c\2\2\u0133\u0134\7u\2\2\u0134\u0135\7u\2\2\u0135P\3") - buf.write("\2\2\2\u0136\u0137\7*\2\2\u0137R\3\2\2\2\u0138\u0139\7") - buf.write("+\2\2\u0139T\3\2\2\2\u013a\u013b\7}\2\2\u013bV\3\2\2\2") - buf.write("\u013c\u013d\7\177\2\2\u013dX\3\2\2\2\u013e\u013f\7<\2") - buf.write("\2\u013fZ\3\2\2\2\u0140\u0141\7e\2\2\u0141\u0142\7q\2") - buf.write("\2\u0142\u0143\7p\2\2\u0143\u0144\7u\2\2\u0144\u0145\7") - buf.write("v\2\2\u0145\u0146\7t\2\2\u0146\u0147\7w\2\2\u0147\u0148") - buf.write("\7e\2\2\u0148\u0149\7v\2\2\u0149\u014a\7q\2\2\u014a\u014b") - buf.write("\7t\2\2\u014b\\\3\2\2\2\u014c\u014d\7]\2\2\u014d^\3\2") - buf.write("\2\2\u014e\u014f\7_\2\2\u014f`\3\2\2\2\u0150\u0151\7A") - buf.write("\2\2\u0151b\3\2\2\2\u0152\u0153\7\60\2\2\u0153d\3\2\2") - buf.write("\2\u0154\u0155\7#\2\2\u0155f\3\2\2\2\u0156\u0157\7\u0080") - buf.write("\2\2\u0157h\3\2\2\2\u0158\u0159\7\60\2\2\u0159\u015a\7") - buf.write("\60\2\2\u015aj\3\2\2\2\u015b\u015c\7\60\2\2\u015c\u015d") - buf.write("\7\60\2\2\u015d\u015e\7\60\2\2\u015el\3\2\2\2\u015f\u0160") - buf.write("\7k\2\2\u0160\u0161\7u\2\2\u0161n\3\2\2\2\u0162\u0163") - buf.write("\7k\2\2\u0163\u0164\7u\2\2\u0164\u0165\7p\2\2\u0165\u0166") - buf.write("\7)\2\2\u0166\u0167\7v\2\2\u0167p\3\2\2\2\u0168\u0169") - buf.write("\7?\2\2\u0169\u016a\7?\2\2\u016ar\3\2\2\2\u016b\u016c") - buf.write("\7#\2\2\u016c\u016d\7?\2\2\u016dt\3\2\2\2\u016e\u016f") - buf.write("\7>\2\2\u016f\u0170\7?\2\2\u0170v\3\2\2\2\u0171\u0172") - buf.write("\7@\2\2\u0172\u0173\7?\2\2\u0173x\3\2\2\2\u0174\u0175") - buf.write("\7p\2\2\u0175\u0176\7q\2\2\u0176\u0177\7v\2\2\u0177z\3") - buf.write("\2\2\2\u0178\u0179\7c\2\2\u0179\u017a\7p\2\2\u017a\u017b") - buf.write("\7f\2\2\u017b|\3\2\2\2\u017c\u017d\7q\2\2\u017d\u017e") - buf.write("\7t\2\2\u017e~\3\2\2\2\u017f\u0180\7n\2\2\u0180\u0181") - buf.write("\7c\2\2\u0181\u0182\7o\2\2\u0182\u0183\7d\2\2\u0183\u0184") - buf.write("\7f\2\2\u0184\u0185\7c\2\2\u0185\u0080\3\2\2\2\u0186\u0187") - buf.write("\7/\2\2\u0187\u0188\7@\2\2\u0188\u0082\3\2\2\2\u0189\u018a") - buf.write("\7v\2\2\u018a\u018b\7t\2\2\u018b\u018c\7w\2\2\u018c\u018d") - buf.write("\7g\2\2\u018d\u0084\3\2\2\2\u018e\u018f\7h\2\2\u018f\u0190") - buf.write("\7c\2\2\u0190\u0191\7n\2\2\u0191\u0192\7u\2\2\u0192\u0193") - buf.write("\7g\2\2\u0193\u0086\3\2\2\2\u0194\u0195\7p\2\2\u0195\u0196") - buf.write("\7w\2\2\u0196\u0197\7n\2\2\u0197\u0198\7n\2\2\u0198\u0088") - buf.write("\3\2\2\2\u0199\u019b\5\u0093J\2\u019a\u0199\3\2\2\2\u019b") - buf.write("\u019c\3\2\2\2\u019c\u019a\3\2\2\2\u019c\u019d\3\2\2\2") - buf.write("\u019d\u008a\3\2\2\2\u019e\u01a0\5\u0093J\2\u019f\u019e") - buf.write("\3\2\2\2\u01a0\u01a1\3\2\2\2\u01a1\u019f\3\2\2\2\u01a1") - buf.write("\u01a2\3\2\2\2\u01a2\u01a3\3\2\2\2\u01a3\u01a5\7\60\2") - buf.write("\2\u01a4\u01a6\5\u0093J\2\u01a5\u01a4\3\2\2\2\u01a6\u01a7") - buf.write("\3\2\2\2\u01a7\u01a5\3\2\2\2\u01a7\u01a8\3\2\2\2\u01a8") - buf.write("\u01b2\3\2\2\2\u01a9\u01ab\7g\2\2\u01aa\u01ac\7/\2\2\u01ab") - buf.write("\u01aa\3\2\2\2\u01ab\u01ac\3\2\2\2\u01ac\u01ae\3\2\2\2") - buf.write("\u01ad\u01af\5\u0093J\2\u01ae\u01ad\3\2\2\2\u01af\u01b0") - buf.write("\3\2\2\2\u01b0\u01ae\3\2\2\2\u01b0\u01b1\3\2\2\2\u01b1") - buf.write("\u01b3\3\2\2\2\u01b2\u01a9\3\2\2\2\u01b2\u01b3\3\2\2\2") - buf.write("\u01b3\u008c\3\2\2\2\u01b4\u01ba\7)\2\2\u01b5\u01b9\n") - buf.write("\2\2\2\u01b6\u01b7\7^\2\2\u01b7\u01b9\t\3\2\2\u01b8\u01b5") - buf.write("\3\2\2\2\u01b8\u01b6\3\2\2\2\u01b9\u01bc\3\2\2\2\u01ba") - buf.write("\u01b8\3\2\2\2\u01ba\u01bb\3\2\2\2\u01bb\u01bd\3\2\2\2") - buf.write("\u01bc\u01ba\3\2\2\2\u01bd\u01be\7)\2\2\u01be\u008e\3") - buf.write("\2\2\2\u01bf\u01c5\7$\2\2\u01c0\u01c4\n\4\2\2\u01c1\u01c2") - buf.write("\7^\2\2\u01c2\u01c4\t\5\2\2\u01c3\u01c0\3\2\2\2\u01c3") - buf.write("\u01c1\3\2\2\2\u01c4\u01c7\3\2\2\2\u01c5\u01c3\3\2\2\2") - buf.write("\u01c5\u01c6\3\2\2\2\u01c6\u01c8\3\2\2\2\u01c7\u01c5\3") - buf.write("\2\2\2\u01c8\u01c9\7$\2\2\u01c9\u0090\3\2\2\2\u01ca\u01ce") - buf.write("\5\u0095K\2\u01cb\u01cd\5\u0097L\2\u01cc\u01cb\3\2\2\2") - buf.write("\u01cd\u01d0\3\2\2\2\u01ce\u01cc\3\2\2\2\u01ce\u01cf\3") - buf.write("\2\2\2\u01cf\u0092\3\2\2\2\u01d0\u01ce\3\2\2\2\u01d1\u01d2") - buf.write("\t\6\2\2\u01d2\u0094\3\2\2\2\u01d3\u01d4\t\7\2\2\u01d4") - buf.write("\u0096\3\2\2\2\u01d5\u01d9\5\u0095K\2\u01d6\u01d9\5\u0093") - buf.write("J\2\u01d7\u01d9\t\b\2\2\u01d8\u01d5\3\2\2\2\u01d8\u01d6") - buf.write("\3\2\2\2\u01d8\u01d7\3\2\2\2\u01d9\u0098\3\2\2\2\u01da") - buf.write("\u01db\7/\2\2\u01db\u01dc\7/\2\2\u01dc\u01e0\3\2\2\2\u01dd") - buf.write("\u01df\n\t\2\2\u01de\u01dd\3\2\2\2\u01df\u01e2\3\2\2\2") - buf.write("\u01e0\u01de\3\2\2\2\u01e0\u01e1\3\2\2\2\u01e1\u01e3\3") - buf.write("\2\2\2\u01e2\u01e0\3\2\2\2\u01e3\u01e4\bM\2\2\u01e4\u009a") - buf.write("\3\2\2\2\u01e5\u01e7\t\n\2\2\u01e6\u01e5\3\2\2\2\u01e7") - buf.write("\u01e8\3\2\2\2\u01e8\u01e6\3\2\2\2\u01e8\u01e9\3\2\2\2") - buf.write("\u01e9\u01ea\3\2\2\2\u01ea\u01eb\bN\2\2\u01eb\u009c\3") - buf.write("\2\2\2\u01ec\u01ed\13\2\2\2\u01ed\u009e\3\2\2\2\21\2\u019c") - buf.write("\u01a1\u01a7\u01ab\u01b0\u01b2\u01b8\u01ba\u01c3\u01c5") - buf.write("\u01ce\u01d8\u01e0\u01e8\3\b\2\2") + buf.write("L\4M\tM\4N\tN\4O\tO\4P\tP\3\2\3\2\3\3\3\3\3\3\3\3\3\4") + buf.write("\3\4\3\4\3\4\3\4\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3") + buf.write("\6\3\7\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3\t") + buf.write("\3\n\3\n\3\13\3\13\3\f\3\f\3\r\3\r\3\16\3\16\3\17\3\17") + buf.write("\3\20\3\20\3\20\3\21\3\21\3\21\3\22\3\22\3\23\3\23\3\24") + buf.write("\3\24\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\26\3\27") + buf.write("\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\30\3\30\3\30") + buf.write("\3\30\3\30\3\30\3\30\3\31\3\31\3\32\3\32\3\32\3\33\3\33") + buf.write("\3\33\3\34\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35") + buf.write("\3\36\3\36\3\36\3\36\3\36\3\36\3\37\3\37\3\37\3\37\3\37") + buf.write("\3\37\3 \3 \3 \3 \3!\3!\3!\3\"\3\"\3\"\3\"\3\"\3#\3#\3") + buf.write("#\3#\3#\3$\3$\3%\3%\3&\3&\3&\3&\3\'\3\'\3\'\3\'\3\'\3") + buf.write("\'\3\'\3(\3(\3(\3(\3(\3(\3)\3)\3*\3*\3+\3+\3,\3,\3-\3") + buf.write("-\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3/\3/\3\60\3\60") + buf.write("\3\61\3\61\3\62\3\62\3\63\3\63\3\64\3\64\3\65\3\65\3\65") + buf.write("\3\66\3\66\3\66\3\66\3\67\3\67\3\67\38\38\38\38\38\38") + buf.write("\39\39\39\3:\3:\3:\3;\3;\3;\3<\3<\3<\3=\3=\3=\3=\3>\3") + buf.write(">\3>\3>\3?\3?\3?\3@\3@\3@\3@\3@\3@\3@\3A\3A\3A\3B\3B\3") + buf.write("B\3B\3B\3C\3C\3C\3C\3C\3C\3D\3D\3D\3D\3D\3E\3E\3E\3E\3") + buf.write("E\3E\3F\6F\u01a3\nF\rF\16F\u01a4\3G\6G\u01a8\nG\rG\16") + buf.write("G\u01a9\3G\3G\6G\u01ae\nG\rG\16G\u01af\3G\3G\5G\u01b4") + buf.write("\nG\3G\6G\u01b7\nG\rG\16G\u01b8\5G\u01bb\nG\3H\3H\3H\3") + buf.write("H\7H\u01c1\nH\fH\16H\u01c4\13H\3H\3H\3I\3I\3I\3I\7I\u01cc") + buf.write("\nI\fI\16I\u01cf\13I\3I\3I\3J\3J\7J\u01d5\nJ\fJ\16J\u01d8") + buf.write("\13J\3K\3K\3L\3L\3M\3M\3M\5M\u01e1\nM\3N\3N\3N\3N\7N\u01e7") + buf.write("\nN\fN\16N\u01ea\13N\3N\3N\3O\6O\u01ef\nO\rO\16O\u01f0") + buf.write("\3O\3O\3P\3P\2\2Q\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23") + buf.write("\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25") + buf.write(")\26+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A") + buf.write("\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65") + buf.write("i\66k\67m8o9q:s;u{?}@\177A\u0081B\u0083C\u0085D\u0087") + buf.write("E\u0089F\u008bG\u008dH\u008fI\u0091J\u0093K\u0095\2\u0097") + buf.write("\2\u0099\2\u009bL\u009dM\u009fN\3\2\13\4\2))^^\6\2))^") + buf.write("^ppvv\4\2$$^^\6\2$$^^ppvv\3\2\62;\5\2C\\aac|\3\2))\4\2") + buf.write("\f\f\16\17\5\2\13\f\17\17\"\"\2\u0201\2\3\3\2\2\2\2\5") + buf.write("\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2") + buf.write("\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2") + buf.write("\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2") + buf.write("\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2") + buf.write("\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61") + buf.write("\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2") + buf.write("\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3") + buf.write("\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M") + buf.write("\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2") + buf.write("W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2") + buf.write("\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2") + buf.write("\2\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2\2s\3\2") + buf.write("\2\2\2u\3\2\2\2\2w\3\2\2\2\2y\3\2\2\2\2{\3\2\2\2\2}\3") + buf.write("\2\2\2\2\177\3\2\2\2\2\u0081\3\2\2\2\2\u0083\3\2\2\2\2") + buf.write("\u0085\3\2\2\2\2\u0087\3\2\2\2\2\u0089\3\2\2\2\2\u008b") + buf.write("\3\2\2\2\2\u008d\3\2\2\2\2\u008f\3\2\2\2\2\u0091\3\2\2") + buf.write("\2\2\u0093\3\2\2\2\2\u009b\3\2\2\2\2\u009d\3\2\2\2\2\u009f") + buf.write("\3\2\2\2\3\u00a1\3\2\2\2\5\u00a3\3\2\2\2\7\u00a7\3\2\2") + buf.write("\2\t\u00ac\3\2\2\2\13\u00b3\3\2\2\2\r\u00b6\3\2\2\2\17") + buf.write("\u00bb\3\2\2\2\21\u00c1\3\2\2\2\23\u00c3\3\2\2\2\25\u00c5") + buf.write("\3\2\2\2\27\u00c7\3\2\2\2\31\u00c9\3\2\2\2\33\u00cb\3") + buf.write("\2\2\2\35\u00cd\3\2\2\2\37\u00cf\3\2\2\2!\u00d2\3\2\2") + buf.write("\2#\u00d5\3\2\2\2%\u00d7\3\2\2\2\'\u00d9\3\2\2\2)\u00db") + buf.write("\3\2\2\2+\u00de\3\2\2\2-\u00e4\3\2\2\2/\u00ed\3\2\2\2") + buf.write("\61\u00f4\3\2\2\2\63\u00f6\3\2\2\2\65\u00f9\3\2\2\2\67") + buf.write("\u00fc\3\2\2\29\u0101\3\2\2\2;\u0106\3\2\2\2=\u010c\3") + buf.write("\2\2\2?\u0112\3\2\2\2A\u0116\3\2\2\2C\u0119\3\2\2\2E\u011e") + buf.write("\3\2\2\2G\u0123\3\2\2\2I\u0125\3\2\2\2K\u0127\3\2\2\2") + buf.write("M\u012b\3\2\2\2O\u0132\3\2\2\2Q\u0138\3\2\2\2S\u013a\3") + buf.write("\2\2\2U\u013c\3\2\2\2W\u013e\3\2\2\2Y\u0140\3\2\2\2[\u0142") + buf.write("\3\2\2\2]\u014e\3\2\2\2_\u0150\3\2\2\2a\u0152\3\2\2\2") + buf.write("c\u0154\3\2\2\2e\u0156\3\2\2\2g\u0158\3\2\2\2i\u015a\3") + buf.write("\2\2\2k\u015d\3\2\2\2m\u0161\3\2\2\2o\u0164\3\2\2\2q\u016a") + buf.write("\3\2\2\2s\u016d\3\2\2\2u\u0170\3\2\2\2w\u0173\3\2\2\2") + buf.write("y\u0176\3\2\2\2{\u017a\3\2\2\2}\u017e\3\2\2\2\177\u0181") + buf.write("\3\2\2\2\u0081\u0188\3\2\2\2\u0083\u018b\3\2\2\2\u0085") + buf.write("\u0190\3\2\2\2\u0087\u0196\3\2\2\2\u0089\u019b\3\2\2\2") + buf.write("\u008b\u01a2\3\2\2\2\u008d\u01a7\3\2\2\2\u008f\u01bc\3") + buf.write("\2\2\2\u0091\u01c7\3\2\2\2\u0093\u01d2\3\2\2\2\u0095\u01d9") + buf.write("\3\2\2\2\u0097\u01db\3\2\2\2\u0099\u01e0\3\2\2\2\u009b") + buf.write("\u01e2\3\2\2\2\u009d\u01ee\3\2\2\2\u009f\u01f4\3\2\2\2") + buf.write("\u00a1\u00a2\7=\2\2\u00a2\4\3\2\2\2\u00a3\u00a4\7w\2\2") + buf.write("\u00a4\u00a5\7u\2\2\u00a5\u00a6\7g\2\2\u00a6\6\3\2\2\2") + buf.write("\u00a7\u00a8\7q\2\2\u00a8\u00a9\7p\2\2\u00a9\u00aa\7n") + buf.write("\2\2\u00aa\u00ab\7{\2\2\u00ab\b\3\2\2\2\u00ac\u00ad\7") + buf.write("j\2\2\u00ad\u00ae\7k\2\2\u00ae\u00af\7f\2\2\u00af\u00b0") + buf.write("\7k\2\2\u00b0\u00b1\7p\2\2\u00b1\u00b2\7i\2\2\u00b2\n") + buf.write("\3\2\2\2\u00b3\u00b4\7c\2\2\u00b4\u00b5\7u\2\2\u00b5\f") + buf.write("\3\2\2\2\u00b6\u00b7\7u\2\2\u00b7\u00b8\7m\2\2\u00b8\u00b9") + buf.write("\7k\2\2\u00b9\u00ba\7r\2\2\u00ba\16\3\2\2\2\u00bb\u00bc") + buf.write("\7r\2\2\u00bc\u00bd\7t\2\2\u00bd\u00be\7k\2\2\u00be\u00bf") + buf.write("\7p\2\2\u00bf\u00c0\7v\2\2\u00c0\20\3\2\2\2\u00c1\u00c2") + buf.write("\7?\2\2\u00c2\22\3\2\2\2\u00c3\u00c4\7`\2\2\u00c4\24\3") + buf.write("\2\2\2\u00c5\u00c6\7,\2\2\u00c6\26\3\2\2\2\u00c7\u00c8") + buf.write("\7\61\2\2\u00c8\30\3\2\2\2\u00c9\u00ca\7\'\2\2\u00ca\32") + buf.write("\3\2\2\2\u00cb\u00cc\7-\2\2\u00cc\34\3\2\2\2\u00cd\u00ce") + buf.write("\7/\2\2\u00ce\36\3\2\2\2\u00cf\u00d0\7>\2\2\u00d0\u00d1") + buf.write("\7>\2\2\u00d1 \3\2\2\2\u00d2\u00d3\7@\2\2\u00d3\u00d4") + buf.write("\7@\2\2\u00d4\"\3\2\2\2\u00d5\u00d6\7(\2\2\u00d6$\3\2") + buf.write("\2\2\u00d7\u00d8\7&\2\2\u00d8&\3\2\2\2\u00d9\u00da\7~") + buf.write("\2\2\u00da(\3\2\2\2\u00db\u00dc\7A\2\2\u00dc\u00dd\7A") + buf.write("\2\2\u00dd*\3\2\2\2\u00de\u00df\7d\2\2\u00df\u00e0\7t") + buf.write("\2\2\u00e0\u00e1\7g\2\2\u00e1\u00e2\7c\2\2\u00e2\u00e3") + buf.write("\7m\2\2\u00e3,\3\2\2\2\u00e4\u00e5\7e\2\2\u00e5\u00e6") + buf.write("\7q\2\2\u00e6\u00e7\7p\2\2\u00e7\u00e8\7v\2\2\u00e8\u00e9") + buf.write("\7k\2\2\u00e9\u00ea\7p\2\2\u00ea\u00eb\7w\2\2\u00eb\u00ec") + buf.write("\7g\2\2\u00ec.\3\2\2\2\u00ed\u00ee\7t\2\2\u00ee\u00ef") + buf.write("\7g\2\2\u00ef\u00f0\7v\2\2\u00f0\u00f1\7w\2\2\u00f1\u00f2") + buf.write("\7t\2\2\u00f2\u00f3\7p\2\2\u00f3\60\3\2\2\2\u00f4\u00f5") + buf.write("\7.\2\2\u00f5\62\3\2\2\2\u00f6\u00f7\7k\2\2\u00f7\u00f8") + buf.write("\7h\2\2\u00f8\64\3\2\2\2\u00f9\u00fa\7f\2\2\u00fa\u00fb") + buf.write("\7q\2\2\u00fb\66\3\2\2\2\u00fc\u00fd\7g\2\2\u00fd\u00fe") + buf.write("\7n\2\2\u00fe\u00ff\7k\2\2\u00ff\u0100\7h\2\2\u01008\3") + buf.write("\2\2\2\u0101\u0102\7g\2\2\u0102\u0103\7n\2\2\u0103\u0104") + buf.write("\7u\2\2\u0104\u0105\7g\2\2\u0105:\3\2\2\2\u0106\u0107") + buf.write("\7y\2\2\u0107\u0108\7j\2\2\u0108\u0109\7k\2\2\u0109\u010a") + buf.write("\7n\2\2\u010a\u010b\7g\2\2\u010b<\3\2\2\2\u010c\u010d") + buf.write("\7w\2\2\u010d\u010e\7p\2\2\u010e\u010f\7v\2\2\u010f\u0110") + buf.write("\7k\2\2\u0110\u0111\7n\2\2\u0111>\3\2\2\2\u0112\u0113") + buf.write("\7h\2\2\u0113\u0114\7q\2\2\u0114\u0115\7t\2\2\u0115@\3") + buf.write("\2\2\2\u0116\u0117\7k\2\2\u0117\u0118\7p\2\2\u0118B\3") + buf.write("\2\2\2\u0119\u011a\7u\2\2\u011a\u011b\7v\2\2\u011b\u011c") + buf.write("\7g\2\2\u011c\u011d\7r\2\2\u011dD\3\2\2\2\u011e\u011f") + buf.write("\7h\2\2\u011f\u0120\7w\2\2\u0120\u0121\7p\2\2\u0121\u0122") + buf.write("\7e\2\2\u0122F\3\2\2\2\u0123\u0124\7>\2\2\u0124H\3\2\2") + buf.write("\2\u0125\u0126\7@\2\2\u0126J\3\2\2\2\u0127\u0128\7f\2") + buf.write("\2\u0128\u0129\7g\2\2\u0129\u012a\7h\2\2\u012aL\3\2\2") + buf.write("\2\u012b\u012c\7g\2\2\u012c\u012d\7z\2\2\u012d\u012e\7") + buf.write("v\2\2\u012e\u012f\7g\2\2\u012f\u0130\7t\2\2\u0130\u0131") + buf.write("\7p\2\2\u0131N\3\2\2\2\u0132\u0133\7e\2\2\u0133\u0134") + buf.write("\7n\2\2\u0134\u0135\7c\2\2\u0135\u0136\7u\2\2\u0136\u0137") + buf.write("\7u\2\2\u0137P\3\2\2\2\u0138\u0139\7*\2\2\u0139R\3\2\2") + buf.write("\2\u013a\u013b\7+\2\2\u013bT\3\2\2\2\u013c\u013d\7}\2") + buf.write("\2\u013dV\3\2\2\2\u013e\u013f\7\177\2\2\u013fX\3\2\2\2") + buf.write("\u0140\u0141\7<\2\2\u0141Z\3\2\2\2\u0142\u0143\7e\2\2") + buf.write("\u0143\u0144\7q\2\2\u0144\u0145\7p\2\2\u0145\u0146\7u") + buf.write("\2\2\u0146\u0147\7v\2\2\u0147\u0148\7t\2\2\u0148\u0149") + buf.write("\7w\2\2\u0149\u014a\7e\2\2\u014a\u014b\7v\2\2\u014b\u014c") + buf.write("\7q\2\2\u014c\u014d\7t\2\2\u014d\\\3\2\2\2\u014e\u014f") + buf.write("\7]\2\2\u014f^\3\2\2\2\u0150\u0151\7_\2\2\u0151`\3\2\2") + buf.write("\2\u0152\u0153\7A\2\2\u0153b\3\2\2\2\u0154\u0155\7\60") + buf.write("\2\2\u0155d\3\2\2\2\u0156\u0157\7#\2\2\u0157f\3\2\2\2") + buf.write("\u0158\u0159\7\u0080\2\2\u0159h\3\2\2\2\u015a\u015b\7") + buf.write("\60\2\2\u015b\u015c\7\60\2\2\u015cj\3\2\2\2\u015d\u015e") + buf.write("\7\60\2\2\u015e\u015f\7\60\2\2\u015f\u0160\7\60\2\2\u0160") + buf.write("l\3\2\2\2\u0161\u0162\7k\2\2\u0162\u0163\7u\2\2\u0163") + buf.write("n\3\2\2\2\u0164\u0165\7k\2\2\u0165\u0166\7u\2\2\u0166") + buf.write("\u0167\7p\2\2\u0167\u0168\7)\2\2\u0168\u0169\7v\2\2\u0169") + buf.write("p\3\2\2\2\u016a\u016b\7?\2\2\u016b\u016c\7?\2\2\u016c") + buf.write("r\3\2\2\2\u016d\u016e\7#\2\2\u016e\u016f\7?\2\2\u016f") + buf.write("t\3\2\2\2\u0170\u0171\7>\2\2\u0171\u0172\7?\2\2\u0172") + buf.write("v\3\2\2\2\u0173\u0174\7@\2\2\u0174\u0175\7?\2\2\u0175") + buf.write("x\3\2\2\2\u0176\u0177\7p\2\2\u0177\u0178\7q\2\2\u0178") + buf.write("\u0179\7v\2\2\u0179z\3\2\2\2\u017a\u017b\7c\2\2\u017b") + buf.write("\u017c\7p\2\2\u017c\u017d\7f\2\2\u017d|\3\2\2\2\u017e") + buf.write("\u017f\7q\2\2\u017f\u0180\7t\2\2\u0180~\3\2\2\2\u0181") + buf.write("\u0182\7n\2\2\u0182\u0183\7c\2\2\u0183\u0184\7o\2\2\u0184") + buf.write("\u0185\7d\2\2\u0185\u0186\7f\2\2\u0186\u0187\7c\2\2\u0187") + buf.write("\u0080\3\2\2\2\u0188\u0189\7/\2\2\u0189\u018a\7@\2\2\u018a") + buf.write("\u0082\3\2\2\2\u018b\u018c\7v\2\2\u018c\u018d\7t\2\2\u018d") + buf.write("\u018e\7w\2\2\u018e\u018f\7g\2\2\u018f\u0084\3\2\2\2\u0190") + buf.write("\u0191\7h\2\2\u0191\u0192\7c\2\2\u0192\u0193\7n\2\2\u0193") + buf.write("\u0194\7u\2\2\u0194\u0195\7g\2\2\u0195\u0086\3\2\2\2\u0196") + buf.write("\u0197\7p\2\2\u0197\u0198\7w\2\2\u0198\u0199\7n\2\2\u0199") + buf.write("\u019a\7n\2\2\u019a\u0088\3\2\2\2\u019b\u019c\7u\2\2\u019c") + buf.write("\u019d\7w\2\2\u019d\u019e\7r\2\2\u019e\u019f\7g\2\2\u019f") + buf.write("\u01a0\7t\2\2\u01a0\u008a\3\2\2\2\u01a1\u01a3\5\u0095") + buf.write("K\2\u01a2\u01a1\3\2\2\2\u01a3\u01a4\3\2\2\2\u01a4\u01a2") + buf.write("\3\2\2\2\u01a4\u01a5\3\2\2\2\u01a5\u008c\3\2\2\2\u01a6") + buf.write("\u01a8\5\u0095K\2\u01a7\u01a6\3\2\2\2\u01a8\u01a9\3\2") + buf.write("\2\2\u01a9\u01a7\3\2\2\2\u01a9\u01aa\3\2\2\2\u01aa\u01ab") + buf.write("\3\2\2\2\u01ab\u01ad\7\60\2\2\u01ac\u01ae\5\u0095K\2\u01ad") + buf.write("\u01ac\3\2\2\2\u01ae\u01af\3\2\2\2\u01af\u01ad\3\2\2\2") + buf.write("\u01af\u01b0\3\2\2\2\u01b0\u01ba\3\2\2\2\u01b1\u01b3\7") + buf.write("g\2\2\u01b2\u01b4\7/\2\2\u01b3\u01b2\3\2\2\2\u01b3\u01b4") + buf.write("\3\2\2\2\u01b4\u01b6\3\2\2\2\u01b5\u01b7\5\u0095K\2\u01b6") + buf.write("\u01b5\3\2\2\2\u01b7\u01b8\3\2\2\2\u01b8\u01b6\3\2\2\2") + buf.write("\u01b8\u01b9\3\2\2\2\u01b9\u01bb\3\2\2\2\u01ba\u01b1\3") + buf.write("\2\2\2\u01ba\u01bb\3\2\2\2\u01bb\u008e\3\2\2\2\u01bc\u01c2") + buf.write("\7)\2\2\u01bd\u01c1\n\2\2\2\u01be\u01bf\7^\2\2\u01bf\u01c1") + buf.write("\t\3\2\2\u01c0\u01bd\3\2\2\2\u01c0\u01be\3\2\2\2\u01c1") + buf.write("\u01c4\3\2\2\2\u01c2\u01c0\3\2\2\2\u01c2\u01c3\3\2\2\2") + buf.write("\u01c3\u01c5\3\2\2\2\u01c4\u01c2\3\2\2\2\u01c5\u01c6\7") + buf.write(")\2\2\u01c6\u0090\3\2\2\2\u01c7\u01cd\7$\2\2\u01c8\u01cc") + buf.write("\n\4\2\2\u01c9\u01ca\7^\2\2\u01ca\u01cc\t\5\2\2\u01cb") + buf.write("\u01c8\3\2\2\2\u01cb\u01c9\3\2\2\2\u01cc\u01cf\3\2\2\2") + buf.write("\u01cd\u01cb\3\2\2\2\u01cd\u01ce\3\2\2\2\u01ce\u01d0\3") + buf.write("\2\2\2\u01cf\u01cd\3\2\2\2\u01d0\u01d1\7$\2\2\u01d1\u0092") + buf.write("\3\2\2\2\u01d2\u01d6\5\u0097L\2\u01d3\u01d5\5\u0099M\2") + buf.write("\u01d4\u01d3\3\2\2\2\u01d5\u01d8\3\2\2\2\u01d6\u01d4\3") + buf.write("\2\2\2\u01d6\u01d7\3\2\2\2\u01d7\u0094\3\2\2\2\u01d8\u01d6") + buf.write("\3\2\2\2\u01d9\u01da\t\6\2\2\u01da\u0096\3\2\2\2\u01db") + buf.write("\u01dc\t\7\2\2\u01dc\u0098\3\2\2\2\u01dd\u01e1\5\u0097") + buf.write("L\2\u01de\u01e1\5\u0095K\2\u01df\u01e1\t\b\2\2\u01e0\u01dd") + buf.write("\3\2\2\2\u01e0\u01de\3\2\2\2\u01e0\u01df\3\2\2\2\u01e1") + buf.write("\u009a\3\2\2\2\u01e2\u01e3\7/\2\2\u01e3\u01e4\7/\2\2\u01e4") + buf.write("\u01e8\3\2\2\2\u01e5\u01e7\n\t\2\2\u01e6\u01e5\3\2\2\2") + buf.write("\u01e7\u01ea\3\2\2\2\u01e8\u01e6\3\2\2\2\u01e8\u01e9\3") + buf.write("\2\2\2\u01e9\u01eb\3\2\2\2\u01ea\u01e8\3\2\2\2\u01eb\u01ec") + buf.write("\bN\2\2\u01ec\u009c\3\2\2\2\u01ed\u01ef\t\n\2\2\u01ee") + buf.write("\u01ed\3\2\2\2\u01ef\u01f0\3\2\2\2\u01f0\u01ee\3\2\2\2") + buf.write("\u01f0\u01f1\3\2\2\2\u01f1\u01f2\3\2\2\2\u01f2\u01f3\b") + buf.write("O\2\2\u01f3\u009e\3\2\2\2\u01f4\u01f5\13\2\2\2\u01f5\u00a0") + buf.write("\3\2\2\2\21\2\u01a4\u01a9\u01af\u01b3\u01b8\u01ba\u01c0") + buf.write("\u01c2\u01cb\u01cd\u01d6\u01e0\u01e8\u01f0\3\b\2\2") return buf.getvalue() @@ -293,14 +296,15 @@ class PyxellLexer(Lexer): T__64 = 65 T__65 = 66 T__66 = 67 - INT = 68 - FLOAT = 69 - CHAR = 70 - STRING = 71 - ID = 72 - COMMENT = 73 - WS = 74 - ERR = 75 + T__67 = 68 + INT = 69 + FLOAT = 70 + CHAR = 71 + STRING = 72 + ID = 73 + COMMENT = 74 + WS = 75 + ERR = 76 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -315,7 +319,7 @@ class PyxellLexer(Lexer): "'extern'", "'class'", "'('", "')'", "'{'", "'}'", "':'", "'constructor'", "'['", "']'", "'?'", "'.'", "'!'", "'~'", "'..'", "'...'", "'is'", "'isn't'", "'=='", "'!='", "'<='", "'>='", "'not'", "'and'", - "'or'", "'lambda'", "'->'", "'true'", "'false'", "'null'" ] + "'or'", "'lambda'", "'->'", "'true'", "'false'", "'null'", "'super'" ] symbolicNames = [ "", "INT", "FLOAT", "CHAR", "STRING", "ID", "COMMENT", "WS", "ERR" ] @@ -330,9 +334,9 @@ class PyxellLexer(Lexer): "T__44", "T__45", "T__46", "T__47", "T__48", "T__49", "T__50", "T__51", "T__52", "T__53", "T__54", "T__55", "T__56", "T__57", "T__58", "T__59", "T__60", "T__61", - "T__62", "T__63", "T__64", "T__65", "T__66", "INT", "FLOAT", - "CHAR", "STRING", "ID", "DIGIT", "ID_START", "ID_CONT", - "COMMENT", "WS", "ERR" ] + "T__62", "T__63", "T__64", "T__65", "T__66", "T__67", + "INT", "FLOAT", "CHAR", "STRING", "ID", "DIGIT", "ID_START", + "ID_CONT", "COMMENT", "WS", "ERR" ] grammarFileName = "Pyxell.g4" diff --git a/src/antlr/PyxellLexer.tokens b/src/antlr/PyxellLexer.tokens index b6572d61..8c43aa77 100644 --- a/src/antlr/PyxellLexer.tokens +++ b/src/antlr/PyxellLexer.tokens @@ -65,14 +65,15 @@ T__63=64 T__64=65 T__65=66 T__66=67 -INT=68 -FLOAT=69 -CHAR=70 -STRING=71 -ID=72 -COMMENT=73 -WS=74 -ERR=75 +T__67=68 +INT=69 +FLOAT=70 +CHAR=71 +STRING=72 +ID=73 +COMMENT=74 +WS=75 +ERR=76 ';'=1 'use'=2 'only'=3 @@ -140,3 +141,4 @@ ERR=75 'true'=65 'false'=66 'null'=67 +'super'=68 diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index ab424221..5a4c75d6 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -8,8 +8,8 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3M") - buf.write("\u01c3\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3N") + buf.write("\u01c4\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16") buf.write("\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\3\2\7\2") buf.write("&\n\2\f\2\16\2)\13\2\3\2\3\2\3\3\3\3\3\3\3\3\5\3\61\n") @@ -48,26 +48,26 @@ def serializedATN(): buf.write("\f\u017d\13\f\3\f\3\f\3\r\3\r\3\r\3\16\3\16\3\16\3\16") buf.write("\3\16\3\16\5\16\u018a\n\16\3\16\3\16\5\16\u018e\n\16\3") buf.write("\17\3\17\5\17\u0192\n\17\3\17\3\17\3\20\3\20\3\20\3\20") - buf.write("\3\20\3\20\3\20\5\20\u019d\n\20\3\21\3\21\7\21\u01a1\n") - buf.write("\21\f\21\16\21\u01a4\13\21\3\21\3\21\3\22\3\22\3\22\3") - buf.write("\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\5\22\u01b4") - buf.write("\n\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\7\22\u01be") - buf.write("\n\22\f\22\16\22\u01c1\13\22\3\22\2\4\24\"\23\2\4\6\b") + buf.write("\3\20\3\20\3\20\3\20\5\20\u019e\n\20\3\21\3\21\7\21\u01a2") + buf.write("\n\21\f\21\16\21\u01a5\13\21\3\21\3\21\3\22\3\22\3\22") + buf.write("\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\5\22\u01b5") + buf.write("\n\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\7\22\u01bf") + buf.write("\n\22\f\22\16\22\u01c2\13\22\3\22\2\4\24\"\23\2\4\6\b") buf.write("\n\f\16\20\22\24\26\30\32\34\36 \"\2\f\3\2\13\26\3\2\27") buf.write("\30\4\2\17\20\65\65\3\2\f\16\3\2\17\20\3\2\21\22\3\2\66") - buf.write("\67\3\289\4\2%&:=\3\2CD\2\u020f\2\'\3\2\2\2\4\60\3\2\2") + buf.write("\67\3\289\4\2%&:=\3\2CD\2\u0211\2\'\3\2\2\2\4\60\3\2\2") buf.write("\2\6Z\3\2\2\2\b\\\3\2\2\2\n\u00af\3\2\2\2\f\u00b1\3\2") buf.write("\2\2\16\u00b7\3\2\2\2\20\u00db\3\2\2\2\22\u00dd\3\2\2") buf.write("\2\24\u0112\3\2\2\2\26\u017b\3\2\2\2\30\u0180\3\2\2\2") - buf.write("\32\u018d\3\2\2\2\34\u0191\3\2\2\2\36\u019c\3\2\2\2 \u01a2") - buf.write("\3\2\2\2\"\u01b3\3\2\2\2$&\5\4\3\2%$\3\2\2\2&)\3\2\2\2") + buf.write("\32\u018d\3\2\2\2\34\u0191\3\2\2\2\36\u019d\3\2\2\2 \u01a3") + buf.write("\3\2\2\2\"\u01b4\3\2\2\2$&\5\4\3\2%$\3\2\2\2&)\3\2\2\2") buf.write("\'%\3\2\2\2\'(\3\2\2\2(*\3\2\2\2)\'\3\2\2\2*+\7\2\2\3") buf.write("+\3\3\2\2\2,-\5\6\4\2-.\7\3\2\2.\61\3\2\2\2/\61\5\n\6") buf.write("\2\60,\3\2\2\2\60/\3\2\2\2\61\5\3\2\2\2\62\63\7\4\2\2") - buf.write("\63:\7J\2\2\64\65\7\5\2\2\65;\5 \21\2\66\67\7\6\2\2\67") - buf.write(";\5 \21\289\7\7\2\29;\7J\2\2:\64\3\2\2\2:\66\3\2\2\2:") + buf.write("\63:\7K\2\2\64\65\7\5\2\2\65;\5 \21\2\66\67\7\6\2\2\67") + buf.write(";\5 \21\289\7\7\2\29;\7K\2\2:\64\3\2\2\2:\66\3\2\2\2:") buf.write("8\3\2\2\2:;\3\2\2\2;[\3\2\2\2<[\7\b\2\2=?\7\t\2\2>@\5") - buf.write("\26\f\2?>\3\2\2\2?@\3\2\2\2@[\3\2\2\2AB\5\"\22\2BE\7J") + buf.write("\26\f\2?>\3\2\2\2?@\3\2\2\2@[\3\2\2\2AB\5\"\22\2BE\7K") buf.write("\2\2CD\7\n\2\2DF\5\26\f\2EC\3\2\2\2EF\3\2\2\2F[\3\2\2") buf.write("\2GH\5\b\5\2HI\7\n\2\2IK\3\2\2\2JG\3\2\2\2KN\3\2\2\2L") buf.write("J\3\2\2\2LM\3\2\2\2MO\3\2\2\2NL\3\2\2\2O[\5\26\f\2PQ\5") @@ -88,7 +88,7 @@ def serializedATN(): buf.write("\u0086\7#\2\2\u0086\u0088\5\26\f\2\u0087\u0085\3\2\2\2") buf.write("\u0087\u0088\3\2\2\2\u0088\u0089\3\2\2\2\u0089\u008a\7") buf.write("\34\2\2\u008a\u008b\5\22\n\2\u008b\u00b0\3\2\2\2\u008c") - buf.write("\u008d\7$\2\2\u008d\u0092\7J\2\2\u008e\u008f\7%\2\2\u008f") + buf.write("\u008d\7$\2\2\u008d\u0092\7K\2\2\u008e\u008f\7%\2\2\u008f") buf.write("\u0090\5 \21\2\u0090\u0091\7&\2\2\u0091\u0093\3\2\2\2") buf.write("\u0092\u008e\3\2\2\2\u0092\u0093\3\2\2\2\u0093\u0094\3") buf.write("\2\2\2\u0094\u0096\5\16\b\2\u0095\u0097\5\"\22\2\u0096") @@ -96,7 +96,7 @@ def serializedATN(): buf.write("\u0098\u0099\7\'\2\2\u0099\u009d\5\22\n\2\u009a\u009b") buf.write("\7(\2\2\u009b\u009d\7\3\2\2\u009c\u0098\3\2\2\2\u009c") buf.write("\u009a\3\2\2\2\u009d\u00b0\3\2\2\2\u009e\u009f\7)\2\2") - buf.write("\u009f\u00a4\7J\2\2\u00a0\u00a1\7*\2\2\u00a1\u00a2\5\"") + buf.write("\u009f\u00a4\7K\2\2\u00a0\u00a1\7*\2\2\u00a1\u00a2\5\"") buf.write("\22\2\u00a2\u00a3\7+\2\2\u00a3\u00a5\3\2\2\2\u00a4\u00a0") buf.write("\3\2\2\2\u00a4\u00a5\3\2\2\2\u00a5\u00a6\3\2\2\2\u00a6") buf.write("\u00a7\7\'\2\2\u00a7\u00a9\7,\2\2\u00a8\u00aa\5\20\t\2") @@ -105,7 +105,7 @@ def serializedATN(): buf.write("\7-\2\2\u00ae\u00b0\3\2\2\2\u00afd\3\2\2\2\u00afw\3\2") buf.write("\2\2\u00af|\3\2\2\2\u00af\u0081\3\2\2\2\u00af\u008c\3") buf.write("\2\2\2\u00af\u009e\3\2\2\2\u00b0\13\3\2\2\2\u00b1\u00b2") - buf.write("\5\"\22\2\u00b2\u00b5\7J\2\2\u00b3\u00b4\7.\2\2\u00b4") + buf.write("\5\"\22\2\u00b2\u00b5\7K\2\2\u00b3\u00b4\7.\2\2\u00b4") buf.write("\u00b6\5\24\13\2\u00b5\u00b3\3\2\2\2\u00b5\u00b6\3\2\2") buf.write("\2\u00b6\r\3\2\2\2\u00b7\u00bd\7*\2\2\u00b8\u00b9\5\f") buf.write("\7\2\u00b9\u00ba\7\32\2\2\u00ba\u00bc\3\2\2\2\u00bb\u00b8") @@ -113,11 +113,11 @@ def serializedATN(): buf.write("\u00be\3\2\2\2\u00be\u00c1\3\2\2\2\u00bf\u00bd\3\2\2\2") buf.write("\u00c0\u00c2\5\f\7\2\u00c1\u00c0\3\2\2\2\u00c1\u00c2\3") buf.write("\2\2\2\u00c2\u00c3\3\2\2\2\u00c3\u00c4\7+\2\2\u00c4\17") - buf.write("\3\2\2\2\u00c5\u00c6\5\"\22\2\u00c6\u00c9\7J\2\2\u00c7") + buf.write("\3\2\2\2\u00c5\u00c6\5\"\22\2\u00c6\u00c9\7K\2\2\u00c7") buf.write("\u00c8\7.\2\2\u00c8\u00ca\5\26\f\2\u00c9\u00c7\3\2\2\2") buf.write("\u00c9\u00ca\3\2\2\2\u00ca\u00cb\3\2\2\2\u00cb\u00cc\7") buf.write("\3\2\2\u00cc\u00dc\3\2\2\2\u00cd\u00ce\7$\2\2\u00ce\u00cf") - buf.write("\7J\2\2\u00cf\u00d1\5\16\b\2\u00d0\u00d2\5\"\22\2\u00d1") + buf.write("\7K\2\2\u00cf\u00d1\5\16\b\2\u00d0\u00d2\5\"\22\2\u00d1") buf.write("\u00d0\3\2\2\2\u00d1\u00d2\3\2\2\2\u00d2\u00d3\3\2\2\2") buf.write("\u00d3\u00d4\7\'\2\2\u00d4\u00d5\5\22\n\2\u00d5\u00dc") buf.write("\3\2\2\2\u00d6\u00d7\7/\2\2\u00d7\u00d8\5\16\b\2\u00d8") @@ -140,10 +140,10 @@ def serializedATN(): buf.write("\3\2\2\2\u00fe\u00ff\3\2\2\2\u00ff\u0100\7\61\2\2\u0100") buf.write("\u0113\3\2\2\2\u0101\u0102\t\4\2\2\u0102\u0113\5\24\13") buf.write("\23\u0103\u0104\7>\2\2\u0104\u0113\5\24\13\b\u0105\u010a") - buf.write("\7A\2\2\u0106\u0107\7J\2\2\u0107\u0109\7\32\2\2\u0108") + buf.write("\7A\2\2\u0106\u0107\7K\2\2\u0107\u0109\7\32\2\2\u0108") buf.write("\u0106\3\2\2\2\u0109\u010c\3\2\2\2\u010a\u0108\3\2\2\2") buf.write("\u010a\u010b\3\2\2\2\u010b\u010e\3\2\2\2\u010c\u010a\3") - buf.write("\2\2\2\u010d\u010f\7J\2\2\u010e\u010d\3\2\2\2\u010e\u010f") + buf.write("\2\2\2\u010d\u010f\7K\2\2\u010e\u010d\3\2\2\2\u010e\u010f") buf.write("\3\2\2\2\u010f\u0110\3\2\2\2\u0110\u0111\7B\2\2\u0111") buf.write("\u0113\5\24\13\3\u0112\u00e5\3\2\2\2\u0112\u00e7\3\2\2") buf.write("\2\u0112\u00eb\3\2\2\2\u0112\u00f8\3\2\2\2\u0112\u0101") @@ -178,7 +178,7 @@ def serializedATN(): buf.write("\u0152\3\2\2\2\u0156\u0157\3\2\2\2\u0157\u0158\3\2\2\2") buf.write("\u0158\u0172\7\61\2\2\u0159\u015b\f\27\2\2\u015a\u015c") buf.write("\7\62\2\2\u015b\u015a\3\2\2\2\u015b\u015c\3\2\2\2\u015c") - buf.write("\u015d\3\2\2\2\u015d\u015e\7\63\2\2\u015e\u0172\7J\2\2") + buf.write("\u015d\3\2\2\2\u015d\u015e\7\63\2\2\u015e\u0172\7K\2\2") buf.write("\u015f\u0160\f\26\2\2\u0160\u0166\7*\2\2\u0161\u0162\5") buf.write("\34\17\2\u0162\u0163\7\32\2\2\u0163\u0165\3\2\2\2\u0164") buf.write("\u0161\3\2\2\2\u0165\u0168\3\2\2\2\u0166\u0164\3\2\2\2") @@ -206,35 +206,35 @@ def serializedATN(): buf.write("\2\u0189\u0187\3\2\2\2\u0189\u018a\3\2\2\2\u018a\u018e") buf.write("\3\2\2\2\u018b\u018c\7\33\2\2\u018c\u018e\5\24\13\2\u018d") buf.write("\u0183\3\2\2\2\u018d\u018b\3\2\2\2\u018e\33\3\2\2\2\u018f") - buf.write("\u0190\7J\2\2\u0190\u0192\7\n\2\2\u0191\u018f\3\2\2\2") + buf.write("\u0190\7K\2\2\u0190\u0192\7\n\2\2\u0191\u018f\3\2\2\2") buf.write("\u0191\u0192\3\2\2\2\u0192\u0193\3\2\2\2\u0193\u0194\5") - buf.write("\24\13\2\u0194\35\3\2\2\2\u0195\u019d\7F\2\2\u0196\u019d") - buf.write("\7G\2\2\u0197\u019d\t\13\2\2\u0198\u019d\7H\2\2\u0199") - buf.write("\u019d\7I\2\2\u019a\u019d\7E\2\2\u019b\u019d\7J\2\2\u019c") - buf.write("\u0195\3\2\2\2\u019c\u0196\3\2\2\2\u019c\u0197\3\2\2\2") - buf.write("\u019c\u0198\3\2\2\2\u019c\u0199\3\2\2\2\u019c\u019a\3") - buf.write("\2\2\2\u019c\u019b\3\2\2\2\u019d\37\3\2\2\2\u019e\u019f") - buf.write("\7J\2\2\u019f\u01a1\7\32\2\2\u01a0\u019e\3\2\2\2\u01a1") - buf.write("\u01a4\3\2\2\2\u01a2\u01a0\3\2\2\2\u01a2\u01a3\3\2\2\2") - buf.write("\u01a3\u01a5\3\2\2\2\u01a4\u01a2\3\2\2\2\u01a5\u01a6\7") - buf.write("J\2\2\u01a6!\3\2\2\2\u01a7\u01a8\b\22\1\2\u01a8\u01b4") - buf.write("\7J\2\2\u01a9\u01aa\7*\2\2\u01aa\u01ab\5\"\22\2\u01ab") - buf.write("\u01ac\7+\2\2\u01ac\u01b4\3\2\2\2\u01ad\u01ae\7\60\2\2") - buf.write("\u01ae\u01af\5\"\22\2\u01af\u01b0\7\61\2\2\u01b0\u01b4") - buf.write("\3\2\2\2\u01b1\u01b2\7B\2\2\u01b2\u01b4\5\"\22\3\u01b3") - buf.write("\u01a7\3\2\2\2\u01b3\u01a9\3\2\2\2\u01b3\u01ad\3\2\2\2") - buf.write("\u01b3\u01b1\3\2\2\2\u01b4\u01bf\3\2\2\2\u01b5\u01b6\f") - buf.write("\5\2\2\u01b6\u01b7\7\f\2\2\u01b7\u01be\5\"\22\5\u01b8") - buf.write("\u01b9\f\4\2\2\u01b9\u01ba\7B\2\2\u01ba\u01be\5\"\22\4") - buf.write("\u01bb\u01bc\f\6\2\2\u01bc\u01be\7\62\2\2\u01bd\u01b5") - buf.write("\3\2\2\2\u01bd\u01b8\3\2\2\2\u01bd\u01bb\3\2\2\2\u01be") - buf.write("\u01c1\3\2\2\2\u01bf\u01bd\3\2\2\2\u01bf\u01c0\3\2\2\2") - buf.write("\u01c0#\3\2\2\2\u01c1\u01bf\3\2\2\2\64\'\60:?ELXZaou\u0087") - buf.write("\u0092\u0096\u009c\u00a4\u00ab\u00af\u00b5\u00bd\u00c1") - buf.write("\u00c9\u00d1\u00db\u00e1\u00f1\u00f5\u00fd\u010a\u010e") - buf.write("\u0112\u0143\u014c\u0150\u0154\u0156\u015b\u0166\u016a") - buf.write("\u0171\u0173\u017b\u0189\u018d\u0191\u019c\u01a2\u01b3") - buf.write("\u01bd\u01bf") + buf.write("\24\13\2\u0194\35\3\2\2\2\u0195\u019e\7G\2\2\u0196\u019e") + buf.write("\7H\2\2\u0197\u019e\t\13\2\2\u0198\u019e\7I\2\2\u0199") + buf.write("\u019e\7J\2\2\u019a\u019e\7E\2\2\u019b\u019e\7F\2\2\u019c") + buf.write("\u019e\7K\2\2\u019d\u0195\3\2\2\2\u019d\u0196\3\2\2\2") + buf.write("\u019d\u0197\3\2\2\2\u019d\u0198\3\2\2\2\u019d\u0199\3") + buf.write("\2\2\2\u019d\u019a\3\2\2\2\u019d\u019b\3\2\2\2\u019d\u019c") + buf.write("\3\2\2\2\u019e\37\3\2\2\2\u019f\u01a0\7K\2\2\u01a0\u01a2") + buf.write("\7\32\2\2\u01a1\u019f\3\2\2\2\u01a2\u01a5\3\2\2\2\u01a3") + buf.write("\u01a1\3\2\2\2\u01a3\u01a4\3\2\2\2\u01a4\u01a6\3\2\2\2") + buf.write("\u01a5\u01a3\3\2\2\2\u01a6\u01a7\7K\2\2\u01a7!\3\2\2\2") + buf.write("\u01a8\u01a9\b\22\1\2\u01a9\u01b5\7K\2\2\u01aa\u01ab\7") + buf.write("*\2\2\u01ab\u01ac\5\"\22\2\u01ac\u01ad\7+\2\2\u01ad\u01b5") + buf.write("\3\2\2\2\u01ae\u01af\7\60\2\2\u01af\u01b0\5\"\22\2\u01b0") + buf.write("\u01b1\7\61\2\2\u01b1\u01b5\3\2\2\2\u01b2\u01b3\7B\2\2") + buf.write("\u01b3\u01b5\5\"\22\3\u01b4\u01a8\3\2\2\2\u01b4\u01aa") + buf.write("\3\2\2\2\u01b4\u01ae\3\2\2\2\u01b4\u01b2\3\2\2\2\u01b5") + buf.write("\u01c0\3\2\2\2\u01b6\u01b7\f\5\2\2\u01b7\u01b8\7\f\2\2") + buf.write("\u01b8\u01bf\5\"\22\5\u01b9\u01ba\f\4\2\2\u01ba\u01bb") + buf.write("\7B\2\2\u01bb\u01bf\5\"\22\4\u01bc\u01bd\f\6\2\2\u01bd") + buf.write("\u01bf\7\62\2\2\u01be\u01b6\3\2\2\2\u01be\u01b9\3\2\2") + buf.write("\2\u01be\u01bc\3\2\2\2\u01bf\u01c2\3\2\2\2\u01c0\u01be") + buf.write("\3\2\2\2\u01c0\u01c1\3\2\2\2\u01c1#\3\2\2\2\u01c2\u01c0") + buf.write("\3\2\2\2\64\'\60:?ELXZaou\u0087\u0092\u0096\u009c\u00a4") + buf.write("\u00ab\u00af\u00b5\u00bd\u00c1\u00c9\u00d1\u00db\u00e1") + buf.write("\u00f1\u00f5\u00fd\u010a\u010e\u0112\u0143\u014c\u0150") + buf.write("\u0154\u0156\u015b\u0166\u016a\u0171\u0173\u017b\u0189") + buf.write("\u018d\u0191\u019d\u01a3\u01b4\u01be\u01c0") return buf.getvalue() @@ -259,7 +259,7 @@ class PyxellParser ( Parser ): "'?'", "'.'", "'!'", "'~'", "'..'", "'...'", "'is'", "'isn't'", "'=='", "'!='", "'<='", "'>='", "'not'", "'and'", "'or'", "'lambda'", "'->'", "'true'", "'false'", - "'null'" ] + "'null'", "'super'" ] symbolicNames = [ "", "", "", "", "", "", "", "", @@ -278,8 +278,8 @@ class PyxellParser ( Parser ): "", "", "", "", "", "", "", "", "", "", "", "", - "INT", "FLOAT", "CHAR", "STRING", "ID", "COMMENT", - "WS", "ERR" ] + "", "INT", "FLOAT", "CHAR", "STRING", "ID", + "COMMENT", "WS", "ERR" ] RULE_program = 0 RULE_stmt = 1 @@ -372,14 +372,15 @@ class PyxellParser ( Parser ): T__64=65 T__65=66 T__66=67 - INT=68 - FLOAT=69 - CHAR=70 - STRING=71 - ID=72 - COMMENT=73 - WS=74 - ERR=75 + T__67=68 + INT=69 + FLOAT=70 + CHAR=71 + STRING=72 + ID=73 + COMMENT=74 + WS=75 + ERR=76 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -428,7 +429,7 @@ def program(self): self.state = 37 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__38) | (1 << PyxellParser.T__39) | (1 << PyxellParser.T__45) | (1 << PyxellParser.T__50) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.T__66 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0): + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__38) | (1 << PyxellParser.T__39) | (1 << PyxellParser.T__45) | (1 << PyxellParser.T__50) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.T__66 - 64)) | (1 << (PyxellParser.T__67 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0): self.state = 34 self.stmt() self.state = 39 @@ -480,7 +481,7 @@ def stmt(self): self.state = 46 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__1, PyxellParser.T__5, PyxellParser.T__6, PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__20, PyxellParser.T__21, PyxellParser.T__22, PyxellParser.T__39, PyxellParser.T__45, PyxellParser.T__50, PyxellParser.T__59, PyxellParser.T__62, PyxellParser.T__63, PyxellParser.T__64, PyxellParser.T__65, PyxellParser.T__66, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: + if token in [PyxellParser.T__1, PyxellParser.T__5, PyxellParser.T__6, PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__20, PyxellParser.T__21, PyxellParser.T__22, PyxellParser.T__39, PyxellParser.T__45, PyxellParser.T__50, PyxellParser.T__59, PyxellParser.T__62, PyxellParser.T__63, PyxellParser.T__64, PyxellParser.T__65, PyxellParser.T__66, PyxellParser.T__67, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: self.enterOuterAlt(localctx, 1) self.state = 42 self.simple_stmt() @@ -734,7 +735,7 @@ def simple_stmt(self): self.state = 61 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__39 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__39 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.T__67 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): self.state = 60 self.tuple_expr() @@ -820,7 +821,7 @@ def simple_stmt(self): self.state = 86 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__39 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__39 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.T__67 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): self.state = 85 self.tuple_expr() @@ -1592,7 +1593,7 @@ def block(self): self.state = 223 self._errHandler.sync(self) _la = self._input.LA(1) - if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__38) | (1 << PyxellParser.T__39) | (1 << PyxellParser.T__45) | (1 << PyxellParser.T__50) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.T__66 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0)): + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__38) | (1 << PyxellParser.T__39) | (1 << PyxellParser.T__45) | (1 << PyxellParser.T__50) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.T__66 - 64)) | (1 << (PyxellParser.T__67 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0)): break self.state = 225 @@ -2007,7 +2008,7 @@ def expr(self, _p:int=0): self.state = 243 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__39 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__39 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.T__67 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): self.state = 242 self.expr(0) @@ -2369,7 +2370,7 @@ def expr(self, _p:int=0): self.state = 330 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__39 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__39 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.T__67 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): self.state = 329 localctx.e1 = self.expr(0) @@ -2379,7 +2380,7 @@ def expr(self, _p:int=0): self.state = 334 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__39 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__39 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.T__67 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): self.state = 333 localctx.e2 = self.expr(0) @@ -2393,7 +2394,7 @@ def expr(self, _p:int=0): self.state = 338 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__39 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__39 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.T__67 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): self.state = 337 localctx.e3 = self.expr(0) @@ -2450,7 +2451,7 @@ def expr(self, _p:int=0): self.state = 360 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__39 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__39 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.T__67 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): self.state = 359 self.call_arg() @@ -2912,6 +2913,20 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) + class AtomSuperContext(AtomContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.AtomContext + super().__init__(parser) + self.copyFrom(ctx) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAtomSuper" ): + return visitor.visitAtomSuper(self) + else: + return visitor.visitChildren(self) + + def atom(self): @@ -2919,7 +2934,7 @@ def atom(self): self.enterRule(localctx, 28, self.RULE_atom) self._la = 0 # Token type try: - self.state = 410 + self.state = 411 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: @@ -2963,10 +2978,16 @@ def atom(self): self.state = 408 self.match(PyxellParser.T__66) pass - elif token in [PyxellParser.ID]: - localctx = PyxellParser.AtomIdContext(self, localctx) + elif token in [PyxellParser.T__67]: + localctx = PyxellParser.AtomSuperContext(self, localctx) self.enterOuterAlt(localctx, 7) self.state = 409 + self.match(PyxellParser.T__67) + pass + elif token in [PyxellParser.ID]: + localctx = PyxellParser.AtomIdContext(self, localctx) + self.enterOuterAlt(localctx, 8) + self.state = 410 self.match(PyxellParser.ID) pass else: @@ -3024,20 +3045,20 @@ def id_list(self): try: localctx = PyxellParser.IdListContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 416 + self.state = 417 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,46,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 412 - self.match(PyxellParser.ID) self.state = 413 + self.match(PyxellParser.ID) + self.state = 414 self.match(PyxellParser.T__23) - self.state = 418 + self.state = 419 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,46,self._ctx) - self.state = 419 + self.state = 420 self.match(PyxellParser.ID) except RecognitionException as re: localctx.exception = re @@ -3197,7 +3218,7 @@ def typ(self, _p:int=0): self.enterRecursionRule(localctx, 32, self.RULE_typ, _p) try: self.enterOuterAlt(localctx, 1) - self.state = 433 + self.state = 434 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.ID]: @@ -3205,45 +3226,45 @@ def typ(self, _p:int=0): self._ctx = localctx _prevctx = localctx - self.state = 422 + self.state = 423 self.match(PyxellParser.ID) pass elif token in [PyxellParser.T__39]: localctx = PyxellParser.TypeParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 423 - self.match(PyxellParser.T__39) self.state = 424 - self.typ(0) + self.match(PyxellParser.T__39) self.state = 425 + self.typ(0) + self.state = 426 self.match(PyxellParser.T__40) pass elif token in [PyxellParser.T__45]: localctx = PyxellParser.TypeArrayContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 427 - self.match(PyxellParser.T__45) self.state = 428 - self.typ(0) + self.match(PyxellParser.T__45) self.state = 429 + self.typ(0) + self.state = 430 self.match(PyxellParser.T__46) pass elif token in [PyxellParser.T__63]: localctx = PyxellParser.TypeFunc0Context(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 431 - self.match(PyxellParser.T__63) self.state = 432 + self.match(PyxellParser.T__63) + self.state = 433 self.typ(1) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 445 + self.state = 446 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,49,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: @@ -3251,48 +3272,48 @@ def typ(self, _p:int=0): if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 443 + self.state = 444 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,48,self._ctx) if la_ == 1: localctx = PyxellParser.TypeTupleContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 435 + self.state = 436 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 436 - self.match(PyxellParser.T__9) self.state = 437 + self.match(PyxellParser.T__9) + self.state = 438 self.typ(3) pass elif la_ == 2: localctx = PyxellParser.TypeFuncContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 438 + self.state = 439 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 439 - self.match(PyxellParser.T__63) self.state = 440 + self.match(PyxellParser.T__63) + self.state = 441 self.typ(2) pass elif la_ == 3: localctx = PyxellParser.TypeNullableContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 441 + self.state = 442 if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") - self.state = 442 + self.state = 443 self.match(PyxellParser.T__47) pass - self.state = 447 + self.state = 448 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,49,self._ctx) diff --git a/src/antlr/PyxellVisitor.py b/src/antlr/PyxellVisitor.py index 118360c9..ad046f19 100644 --- a/src/antlr/PyxellVisitor.py +++ b/src/antlr/PyxellVisitor.py @@ -259,6 +259,11 @@ def visitAtomNull(self, ctx:PyxellParser.AtomNullContext): return self.visitChildren(ctx) + # Visit a parse tree produced by PyxellParser#AtomSuper. + def visitAtomSuper(self, ctx:PyxellParser.AtomSuperContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by PyxellParser#AtomId. def visitAtomId(self, ctx:PyxellParser.AtomIdContext): return self.visitChildren(ctx) diff --git a/src/ast.py b/src/ast.py index 610e6ba0..db76b52f 100644 --- a/src/ast.py +++ b/src/ast.py @@ -378,6 +378,11 @@ def visitAtomNull(self, ctx): **_node(ctx, 'AtomNull'), } + def visitAtomSuper(self, ctx): + return { + **_node(ctx, 'AtomSuper'), + } + def visitAtomId(self, ctx): id = ctx.getText() if id == '_': diff --git a/src/compiler.py b/src/compiler.py index 74b42ea0..9bce3054 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -1406,7 +1406,10 @@ def compileStmtClass(self, node): if member['node'] == 'ClassField': member_types[name] = self.compile(member['type']) elif member['node'] in ('ClassMethod', 'ClassConstructor'): - func = self.compileStmtFunc(member, class_type=type) + with self.local(): + if base: + self.env['#super'] = base.methods.get(name) + func = self.compileStmtFunc(member, class_type=type) member_types[name] = func.type methods[name] = func @@ -1418,6 +1421,7 @@ def compileStmtClass(self, node): if not can_cast(new_type, original_type): self.throw(member, err.IllegalOverride(original_type, new_type)) + type.methods = methods type.pointee.set_body(*member_types.values()) constructor_method = methods.get('') @@ -1704,9 +1708,13 @@ def callback(): obj, func = self.attribute(expr, expr['expr'], attr) else: - obj = None func = self.compile(expr) + if expr['node'] == 'AtomSuper': + obj = self.builder.bitcast(self.get(expr, 'self'), func.type.args[0].type) + else: + obj = None + return _call(obj, func) def compileExprUnaryOp(self, node): @@ -1844,6 +1852,12 @@ def compileAtomString(self, node): def compileAtomNull(self, node): return vNull() + def compileAtomSuper(self, node): + func = self.env.get('#super') + if func is None: + self.throw(node, err.IllegalSuper()) + return self.builder.load(self.function(func)) + def compileAtomId(self, node): return self.get(node, node['id']) diff --git a/src/errors.py b/src/errors.py index cd01beee..da860983 100644 --- a/src/errors.py +++ b/src/errors.py @@ -19,6 +19,7 @@ class PyxellError(Exception): IllegalLambda = lambda: "Lambda expression cannot be used in this context" IllegalOverride = lambda t1, t2: f"Cannot override member of type `{t1.show()}` with type `{t2.show()}`" IllegalRange = lambda: "Range expression cannot be used in this context" + IllegalSuper = lambda: "Cannot use `super` here" InvalidArgumentTypes = lambda t: f"Cannot unify argument types for type variable `{t.show()}`" InvalidDeclaration = lambda t: f"Cannot declare variable of type `{t.show()}`" InvalidLoopStep = lambda: f"Incompatible number of loop variables and step expressions" diff --git a/src/types.py b/src/types.py index 95bfe8fd..8099bd73 100644 --- a/src/types.py +++ b/src/types.py @@ -147,6 +147,7 @@ def tClass(context, name, base, members): type.name = name type.base = base type.members = members + type.methods = None type.constructor = None return type diff --git a/test/bad/classes/super01.err b/test/bad/classes/super01.err index d522fa78..0851d324 100644 --- a/test/bad/classes/super01.err +++ b/test/bad/classes/super01.err @@ -1 +1 @@ -Cannot call `super` here. \ No newline at end of file +Cannot use `super` here. \ No newline at end of file diff --git a/test/bad/classes/super02.err b/test/bad/classes/super02.err index d522fa78..0851d324 100644 --- a/test/bad/classes/super02.err +++ b/test/bad/classes/super02.err @@ -1 +1 @@ -Cannot call `super` here. \ No newline at end of file +Cannot use `super` here. \ No newline at end of file diff --git a/test/bad/classes/super03.err b/test/bad/classes/super03.err index d522fa78..0851d324 100644 --- a/test/bad/classes/super03.err +++ b/test/bad/classes/super03.err @@ -1 +1 @@ -Cannot call `super` here. \ No newline at end of file +Cannot use `super` here. \ No newline at end of file diff --git a/test/bad/classes/super04.err b/test/bad/classes/super04.err index d522fa78..0851d324 100644 --- a/test/bad/classes/super04.err +++ b/test/bad/classes/super04.err @@ -1 +1 @@ -Cannot call `super` here. \ No newline at end of file +Cannot use `super` here. \ No newline at end of file diff --git a/test/bad/classes/super05.err b/test/bad/classes/super05.err index d522fa78..0851d324 100644 --- a/test/bad/classes/super05.err +++ b/test/bad/classes/super05.err @@ -1 +1 @@ -Cannot call `super` here. \ No newline at end of file +Cannot use `super` here. \ No newline at end of file diff --git a/test/bad/classes/super05.px b/test/bad/classes/super05.px index 113183b5..cf3347c4 100644 --- a/test/bad/classes/super05.px +++ b/test/bad/classes/super05.px @@ -1,3 +1,5 @@ func f() def super() + +f() diff --git a/test/bad/classes/super06.err b/test/bad/classes/super06.err new file mode 100644 index 00000000..815996d5 --- /dev/null +++ b/test/bad/classes/super06.err @@ -0,0 +1 @@ +Expression cannot be assigned to. \ No newline at end of file diff --git a/test/bad/classes/super06.px b/test/bad/classes/super06.px new file mode 100644 index 00000000..b2873d25 --- /dev/null +++ b/test/bad/classes/super06.px @@ -0,0 +1,2 @@ + +super = 1 diff --git a/test/good/classes/super04.out b/test/good/classes/super04.out index f70f10e4..1c6b18fd 100644 --- a/test/good/classes/super04.out +++ b/test/good/classes/super04.out @@ -1 +1,2 @@ +C A diff --git a/test/good/classes/super04.px b/test/good/classes/super04.px index 513aa9d0..e51fe180 100644 --- a/test/good/classes/super04.px +++ b/test/good/classes/super04.px @@ -16,6 +16,7 @@ class C(B) def super() func f() def + print 'C' super() C().f() From a3903eb922a0bf774ab2142b7db08c582fdfc2ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Fri, 6 Dec 2019 21:46:40 +0100 Subject: [PATCH 082/100] Abstract methods --- src/Pyxell.g4 | 4 +- src/antlr/Pyxell.interp | 4 +- src/antlr/Pyxell.tokens | 66 +- src/antlr/PyxellLexer.interp | 5 +- src/antlr/PyxellLexer.py | 439 ++++++------- src/antlr/PyxellLexer.tokens | 66 +- src/antlr/PyxellParser.py | 1007 +++++++++++++++--------------- src/compiler.py | 20 +- src/errors.py | 1 + test/bad/classes/abstract03.err | 1 + test/bad/classes/abstract03.px | 5 + test/good/classes/abstract01.px | 2 +- test/good/classes/abstract02.out | 1 + test/good/classes/abstract02.px | 9 + 14 files changed, 852 insertions(+), 778 deletions(-) create mode 100644 test/bad/classes/abstract03.err create mode 100644 test/bad/classes/abstract03.px create mode 100644 test/good/classes/abstract02.out create mode 100644 test/good/classes/abstract02.px diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index a55b8304..3bbad8b6 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -43,8 +43,8 @@ func_args class_member : typ ID (':' tuple_expr)? ';' # ClassField - | 'func' ID args=func_args (ret=typ)? 'def' block # ClassMethod - | 'constructor' args=func_args 'def' block # ClassConstructor + | 'func' ID args=func_args (ret=typ)? ('def' block | 'abstract' ';') # ClassMethod + | 'constructor' args=func_args ('def' block | 'abstract' ';') # ClassConstructor ; block diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index 7914a664..2aa040cf 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -44,6 +44,7 @@ null '{' '}' ':' +'abstract' 'constructor' '[' ']' @@ -147,6 +148,7 @@ null null null null +null INT FLOAT CHAR @@ -177,4 +179,4 @@ typ atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 78, 452, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 3, 2, 7, 2, 38, 10, 2, 12, 2, 14, 2, 41, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 49, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 59, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 64, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 70, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 75, 10, 4, 12, 4, 14, 4, 78, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 89, 10, 4, 5, 4, 91, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 96, 10, 5, 12, 5, 14, 5, 99, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 110, 10, 6, 12, 6, 14, 6, 113, 11, 6, 3, 6, 3, 6, 3, 6, 5, 6, 118, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 136, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 147, 10, 6, 3, 6, 3, 6, 5, 6, 151, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 157, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 165, 10, 6, 3, 6, 3, 6, 3, 6, 6, 6, 170, 10, 6, 13, 6, 14, 6, 171, 3, 6, 3, 6, 5, 6, 176, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 182, 10, 7, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 188, 10, 8, 12, 8, 14, 8, 191, 11, 8, 3, 8, 5, 8, 194, 10, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 202, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 210, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 220, 10, 9, 3, 10, 3, 10, 6, 10, 224, 10, 10, 13, 10, 14, 10, 225, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 240, 10, 11, 12, 11, 14, 11, 243, 11, 11, 3, 11, 5, 11, 246, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 6, 11, 252, 10, 11, 13, 11, 14, 11, 253, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 265, 10, 11, 12, 11, 14, 11, 268, 11, 11, 3, 11, 5, 11, 271, 10, 11, 3, 11, 3, 11, 5, 11, 275, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 324, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 333, 10, 11, 3, 11, 3, 11, 5, 11, 337, 10, 11, 3, 11, 3, 11, 5, 11, 341, 10, 11, 5, 11, 343, 10, 11, 3, 11, 3, 11, 3, 11, 5, 11, 348, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 357, 10, 11, 12, 11, 14, 11, 360, 11, 11, 3, 11, 5, 11, 363, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 370, 10, 11, 12, 11, 14, 11, 373, 11, 11, 3, 12, 3, 12, 3, 12, 7, 12, 378, 10, 12, 12, 12, 14, 12, 381, 11, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 394, 10, 14, 3, 14, 3, 14, 5, 14, 398, 10, 14, 3, 15, 3, 15, 5, 15, 402, 10, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 414, 10, 16, 3, 17, 3, 17, 7, 17, 418, 10, 17, 12, 17, 14, 17, 421, 11, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 5, 18, 437, 10, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 7, 18, 447, 10, 18, 12, 18, 14, 18, 450, 11, 18, 3, 18, 2, 4, 20, 34, 19, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 2, 12, 3, 2, 11, 22, 3, 2, 23, 24, 4, 2, 15, 16, 53, 53, 3, 2, 12, 14, 3, 2, 15, 16, 3, 2, 17, 18, 3, 2, 54, 55, 3, 2, 56, 57, 4, 2, 37, 38, 58, 61, 3, 2, 67, 68, 2, 529, 2, 39, 3, 2, 2, 2, 4, 48, 3, 2, 2, 2, 6, 90, 3, 2, 2, 2, 8, 92, 3, 2, 2, 2, 10, 175, 3, 2, 2, 2, 12, 177, 3, 2, 2, 2, 14, 183, 3, 2, 2, 2, 16, 219, 3, 2, 2, 2, 18, 221, 3, 2, 2, 2, 20, 274, 3, 2, 2, 2, 22, 379, 3, 2, 2, 2, 24, 384, 3, 2, 2, 2, 26, 397, 3, 2, 2, 2, 28, 401, 3, 2, 2, 2, 30, 413, 3, 2, 2, 2, 32, 419, 3, 2, 2, 2, 34, 436, 3, 2, 2, 2, 36, 38, 5, 4, 3, 2, 37, 36, 3, 2, 2, 2, 38, 41, 3, 2, 2, 2, 39, 37, 3, 2, 2, 2, 39, 40, 3, 2, 2, 2, 40, 42, 3, 2, 2, 2, 41, 39, 3, 2, 2, 2, 42, 43, 7, 2, 2, 3, 43, 3, 3, 2, 2, 2, 44, 45, 5, 6, 4, 2, 45, 46, 7, 3, 2, 2, 46, 49, 3, 2, 2, 2, 47, 49, 5, 10, 6, 2, 48, 44, 3, 2, 2, 2, 48, 47, 3, 2, 2, 2, 49, 5, 3, 2, 2, 2, 50, 51, 7, 4, 2, 2, 51, 58, 7, 75, 2, 2, 52, 53, 7, 5, 2, 2, 53, 59, 5, 32, 17, 2, 54, 55, 7, 6, 2, 2, 55, 59, 5, 32, 17, 2, 56, 57, 7, 7, 2, 2, 57, 59, 7, 75, 2, 2, 58, 52, 3, 2, 2, 2, 58, 54, 3, 2, 2, 2, 58, 56, 3, 2, 2, 2, 58, 59, 3, 2, 2, 2, 59, 91, 3, 2, 2, 2, 60, 91, 7, 8, 2, 2, 61, 63, 7, 9, 2, 2, 62, 64, 5, 22, 12, 2, 63, 62, 3, 2, 2, 2, 63, 64, 3, 2, 2, 2, 64, 91, 3, 2, 2, 2, 65, 66, 5, 34, 18, 2, 66, 69, 7, 75, 2, 2, 67, 68, 7, 10, 2, 2, 68, 70, 5, 22, 12, 2, 69, 67, 3, 2, 2, 2, 69, 70, 3, 2, 2, 2, 70, 91, 3, 2, 2, 2, 71, 72, 5, 8, 5, 2, 72, 73, 7, 10, 2, 2, 73, 75, 3, 2, 2, 2, 74, 71, 3, 2, 2, 2, 75, 78, 3, 2, 2, 2, 76, 74, 3, 2, 2, 2, 76, 77, 3, 2, 2, 2, 77, 79, 3, 2, 2, 2, 78, 76, 3, 2, 2, 2, 79, 91, 5, 22, 12, 2, 80, 81, 5, 20, 11, 2, 81, 82, 9, 2, 2, 2, 82, 83, 7, 10, 2, 2, 83, 84, 5, 20, 11, 2, 84, 91, 3, 2, 2, 2, 85, 91, 9, 3, 2, 2, 86, 88, 7, 25, 2, 2, 87, 89, 5, 22, 12, 2, 88, 87, 3, 2, 2, 2, 88, 89, 3, 2, 2, 2, 89, 91, 3, 2, 2, 2, 90, 50, 3, 2, 2, 2, 90, 60, 3, 2, 2, 2, 90, 61, 3, 2, 2, 2, 90, 65, 3, 2, 2, 2, 90, 76, 3, 2, 2, 2, 90, 80, 3, 2, 2, 2, 90, 85, 3, 2, 2, 2, 90, 86, 3, 2, 2, 2, 91, 7, 3, 2, 2, 2, 92, 97, 5, 20, 11, 2, 93, 94, 7, 26, 2, 2, 94, 96, 5, 20, 11, 2, 95, 93, 3, 2, 2, 2, 96, 99, 3, 2, 2, 2, 97, 95, 3, 2, 2, 2, 97, 98, 3, 2, 2, 2, 98, 9, 3, 2, 2, 2, 99, 97, 3, 2, 2, 2, 100, 101, 7, 27, 2, 2, 101, 102, 5, 20, 11, 2, 102, 103, 7, 28, 2, 2, 103, 111, 5, 18, 10, 2, 104, 105, 7, 29, 2, 2, 105, 106, 5, 20, 11, 2, 106, 107, 7, 28, 2, 2, 107, 108, 5, 18, 10, 2, 108, 110, 3, 2, 2, 2, 109, 104, 3, 2, 2, 2, 110, 113, 3, 2, 2, 2, 111, 109, 3, 2, 2, 2, 111, 112, 3, 2, 2, 2, 112, 117, 3, 2, 2, 2, 113, 111, 3, 2, 2, 2, 114, 115, 7, 30, 2, 2, 115, 116, 7, 28, 2, 2, 116, 118, 5, 18, 10, 2, 117, 114, 3, 2, 2, 2, 117, 118, 3, 2, 2, 2, 118, 176, 3, 2, 2, 2, 119, 120, 7, 31, 2, 2, 120, 121, 5, 20, 11, 2, 121, 122, 7, 28, 2, 2, 122, 123, 5, 18, 10, 2, 123, 176, 3, 2, 2, 2, 124, 125, 7, 32, 2, 2, 125, 126, 5, 20, 11, 2, 126, 127, 7, 28, 2, 2, 127, 128, 5, 18, 10, 2, 128, 176, 3, 2, 2, 2, 129, 130, 7, 33, 2, 2, 130, 131, 5, 22, 12, 2, 131, 132, 7, 34, 2, 2, 132, 135, 5, 22, 12, 2, 133, 134, 7, 35, 2, 2, 134, 136, 5, 22, 12, 2, 135, 133, 3, 2, 2, 2, 135, 136, 3, 2, 2, 2, 136, 137, 3, 2, 2, 2, 137, 138, 7, 28, 2, 2, 138, 139, 5, 18, 10, 2, 139, 176, 3, 2, 2, 2, 140, 141, 7, 36, 2, 2, 141, 146, 7, 75, 2, 2, 142, 143, 7, 37, 2, 2, 143, 144, 5, 32, 17, 2, 144, 145, 7, 38, 2, 2, 145, 147, 3, 2, 2, 2, 146, 142, 3, 2, 2, 2, 146, 147, 3, 2, 2, 2, 147, 148, 3, 2, 2, 2, 148, 150, 5, 14, 8, 2, 149, 151, 5, 34, 18, 2, 150, 149, 3, 2, 2, 2, 150, 151, 3, 2, 2, 2, 151, 156, 3, 2, 2, 2, 152, 153, 7, 39, 2, 2, 153, 157, 5, 18, 10, 2, 154, 155, 7, 40, 2, 2, 155, 157, 7, 3, 2, 2, 156, 152, 3, 2, 2, 2, 156, 154, 3, 2, 2, 2, 157, 176, 3, 2, 2, 2, 158, 159, 7, 41, 2, 2, 159, 164, 7, 75, 2, 2, 160, 161, 7, 42, 2, 2, 161, 162, 5, 34, 18, 2, 162, 163, 7, 43, 2, 2, 163, 165, 3, 2, 2, 2, 164, 160, 3, 2, 2, 2, 164, 165, 3, 2, 2, 2, 165, 166, 3, 2, 2, 2, 166, 167, 7, 39, 2, 2, 167, 169, 7, 44, 2, 2, 168, 170, 5, 16, 9, 2, 169, 168, 3, 2, 2, 2, 170, 171, 3, 2, 2, 2, 171, 169, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 173, 3, 2, 2, 2, 173, 174, 7, 45, 2, 2, 174, 176, 3, 2, 2, 2, 175, 100, 3, 2, 2, 2, 175, 119, 3, 2, 2, 2, 175, 124, 3, 2, 2, 2, 175, 129, 3, 2, 2, 2, 175, 140, 3, 2, 2, 2, 175, 158, 3, 2, 2, 2, 176, 11, 3, 2, 2, 2, 177, 178, 5, 34, 18, 2, 178, 181, 7, 75, 2, 2, 179, 180, 7, 46, 2, 2, 180, 182, 5, 20, 11, 2, 181, 179, 3, 2, 2, 2, 181, 182, 3, 2, 2, 2, 182, 13, 3, 2, 2, 2, 183, 189, 7, 42, 2, 2, 184, 185, 5, 12, 7, 2, 185, 186, 7, 26, 2, 2, 186, 188, 3, 2, 2, 2, 187, 184, 3, 2, 2, 2, 188, 191, 3, 2, 2, 2, 189, 187, 3, 2, 2, 2, 189, 190, 3, 2, 2, 2, 190, 193, 3, 2, 2, 2, 191, 189, 3, 2, 2, 2, 192, 194, 5, 12, 7, 2, 193, 192, 3, 2, 2, 2, 193, 194, 3, 2, 2, 2, 194, 195, 3, 2, 2, 2, 195, 196, 7, 43, 2, 2, 196, 15, 3, 2, 2, 2, 197, 198, 5, 34, 18, 2, 198, 201, 7, 75, 2, 2, 199, 200, 7, 46, 2, 2, 200, 202, 5, 22, 12, 2, 201, 199, 3, 2, 2, 2, 201, 202, 3, 2, 2, 2, 202, 203, 3, 2, 2, 2, 203, 204, 7, 3, 2, 2, 204, 220, 3, 2, 2, 2, 205, 206, 7, 36, 2, 2, 206, 207, 7, 75, 2, 2, 207, 209, 5, 14, 8, 2, 208, 210, 5, 34, 18, 2, 209, 208, 3, 2, 2, 2, 209, 210, 3, 2, 2, 2, 210, 211, 3, 2, 2, 2, 211, 212, 7, 39, 2, 2, 212, 213, 5, 18, 10, 2, 213, 220, 3, 2, 2, 2, 214, 215, 7, 47, 2, 2, 215, 216, 5, 14, 8, 2, 216, 217, 7, 39, 2, 2, 217, 218, 5, 18, 10, 2, 218, 220, 3, 2, 2, 2, 219, 197, 3, 2, 2, 2, 219, 205, 3, 2, 2, 2, 219, 214, 3, 2, 2, 2, 220, 17, 3, 2, 2, 2, 221, 223, 7, 44, 2, 2, 222, 224, 5, 4, 3, 2, 223, 222, 3, 2, 2, 2, 224, 225, 3, 2, 2, 2, 225, 223, 3, 2, 2, 2, 225, 226, 3, 2, 2, 2, 226, 227, 3, 2, 2, 2, 227, 228, 7, 45, 2, 2, 228, 19, 3, 2, 2, 2, 229, 230, 8, 11, 1, 2, 230, 275, 5, 30, 16, 2, 231, 232, 7, 42, 2, 2, 232, 233, 5, 22, 12, 2, 233, 234, 7, 43, 2, 2, 234, 275, 3, 2, 2, 2, 235, 241, 7, 48, 2, 2, 236, 237, 5, 20, 11, 2, 237, 238, 7, 26, 2, 2, 238, 240, 3, 2, 2, 2, 239, 236, 3, 2, 2, 2, 240, 243, 3, 2, 2, 2, 241, 239, 3, 2, 2, 2, 241, 242, 3, 2, 2, 2, 242, 245, 3, 2, 2, 2, 243, 241, 3, 2, 2, 2, 244, 246, 5, 20, 11, 2, 245, 244, 3, 2, 2, 2, 245, 246, 3, 2, 2, 2, 246, 247, 3, 2, 2, 2, 247, 275, 7, 49, 2, 2, 248, 249, 7, 48, 2, 2, 249, 251, 5, 20, 11, 2, 250, 252, 5, 26, 14, 2, 251, 250, 3, 2, 2, 2, 252, 253, 3, 2, 2, 2, 253, 251, 3, 2, 2, 2, 253, 254, 3, 2, 2, 2, 254, 255, 3, 2, 2, 2, 255, 256, 7, 49, 2, 2, 256, 275, 3, 2, 2, 2, 257, 258, 9, 4, 2, 2, 258, 275, 5, 20, 11, 19, 259, 260, 7, 62, 2, 2, 260, 275, 5, 20, 11, 8, 261, 266, 7, 65, 2, 2, 262, 263, 7, 75, 2, 2, 263, 265, 7, 26, 2, 2, 264, 262, 3, 2, 2, 2, 265, 268, 3, 2, 2, 2, 266, 264, 3, 2, 2, 2, 266, 267, 3, 2, 2, 2, 267, 270, 3, 2, 2, 2, 268, 266, 3, 2, 2, 2, 269, 271, 7, 75, 2, 2, 270, 269, 3, 2, 2, 2, 270, 271, 3, 2, 2, 2, 271, 272, 3, 2, 2, 2, 272, 273, 7, 66, 2, 2, 273, 275, 5, 20, 11, 3, 274, 229, 3, 2, 2, 2, 274, 231, 3, 2, 2, 2, 274, 235, 3, 2, 2, 2, 274, 248, 3, 2, 2, 2, 274, 257, 3, 2, 2, 2, 274, 259, 3, 2, 2, 2, 274, 261, 3, 2, 2, 2, 275, 371, 3, 2, 2, 2, 276, 277, 12, 20, 2, 2, 277, 278, 7, 11, 2, 2, 278, 370, 5, 20, 11, 20, 279, 280, 12, 18, 2, 2, 280, 281, 9, 5, 2, 2, 281, 370, 5, 20, 11, 19, 282, 283, 12, 17, 2, 2, 283, 284, 9, 6, 2, 2, 284, 370, 5, 20, 11, 18, 285, 286, 12, 16, 2, 2, 286, 287, 9, 7, 2, 2, 287, 370, 5, 20, 11, 17, 288, 289, 12, 15, 2, 2, 289, 290, 7, 19, 2, 2, 290, 370, 5, 20, 11, 16, 291, 292, 12, 14, 2, 2, 292, 293, 7, 20, 2, 2, 293, 370, 5, 20, 11, 15, 294, 295, 12, 13, 2, 2, 295, 296, 7, 21, 2, 2, 296, 370, 5, 20, 11, 14, 297, 298, 12, 12, 2, 2, 298, 299, 9, 8, 2, 2, 299, 370, 5, 20, 11, 13, 300, 301, 12, 10, 2, 2, 301, 302, 9, 9, 2, 2, 302, 370, 5, 20, 11, 11, 303, 304, 12, 9, 2, 2, 304, 305, 9, 10, 2, 2, 305, 370, 5, 20, 11, 9, 306, 307, 12, 7, 2, 2, 307, 308, 7, 63, 2, 2, 308, 370, 5, 20, 11, 7, 309, 310, 12, 6, 2, 2, 310, 311, 7, 64, 2, 2, 311, 370, 5, 20, 11, 6, 312, 313, 12, 5, 2, 2, 313, 314, 7, 22, 2, 2, 314, 370, 5, 20, 11, 5, 315, 316, 12, 4, 2, 2, 316, 317, 7, 50, 2, 2, 317, 318, 5, 20, 11, 2, 318, 319, 7, 46, 2, 2, 319, 320, 5, 20, 11, 4, 320, 370, 3, 2, 2, 2, 321, 323, 12, 25, 2, 2, 322, 324, 7, 50, 2, 2, 323, 322, 3, 2, 2, 2, 323, 324, 3, 2, 2, 2, 324, 325, 3, 2, 2, 2, 325, 326, 7, 48, 2, 2, 326, 327, 5, 22, 12, 2, 327, 328, 7, 49, 2, 2, 328, 370, 3, 2, 2, 2, 329, 330, 12, 24, 2, 2, 330, 332, 7, 48, 2, 2, 331, 333, 5, 20, 11, 2, 332, 331, 3, 2, 2, 2, 332, 333, 3, 2, 2, 2, 333, 334, 3, 2, 2, 2, 334, 336, 7, 46, 2, 2, 335, 337, 5, 20, 11, 2, 336, 335, 3, 2, 2, 2, 336, 337, 3, 2, 2, 2, 337, 342, 3, 2, 2, 2, 338, 340, 7, 46, 2, 2, 339, 341, 5, 20, 11, 2, 340, 339, 3, 2, 2, 2, 340, 341, 3, 2, 2, 2, 341, 343, 3, 2, 2, 2, 342, 338, 3, 2, 2, 2, 342, 343, 3, 2, 2, 2, 343, 344, 3, 2, 2, 2, 344, 370, 7, 49, 2, 2, 345, 347, 12, 23, 2, 2, 346, 348, 7, 50, 2, 2, 347, 346, 3, 2, 2, 2, 347, 348, 3, 2, 2, 2, 348, 349, 3, 2, 2, 2, 349, 350, 7, 51, 2, 2, 350, 370, 7, 75, 2, 2, 351, 352, 12, 22, 2, 2, 352, 358, 7, 42, 2, 2, 353, 354, 5, 28, 15, 2, 354, 355, 7, 26, 2, 2, 355, 357, 3, 2, 2, 2, 356, 353, 3, 2, 2, 2, 357, 360, 3, 2, 2, 2, 358, 356, 3, 2, 2, 2, 358, 359, 3, 2, 2, 2, 359, 362, 3, 2, 2, 2, 360, 358, 3, 2, 2, 2, 361, 363, 5, 28, 15, 2, 362, 361, 3, 2, 2, 2, 362, 363, 3, 2, 2, 2, 363, 364, 3, 2, 2, 2, 364, 370, 7, 43, 2, 2, 365, 366, 12, 21, 2, 2, 366, 370, 7, 52, 2, 2, 367, 368, 12, 11, 2, 2, 368, 370, 7, 55, 2, 2, 369, 276, 3, 2, 2, 2, 369, 279, 3, 2, 2, 2, 369, 282, 3, 2, 2, 2, 369, 285, 3, 2, 2, 2, 369, 288, 3, 2, 2, 2, 369, 291, 3, 2, 2, 2, 369, 294, 3, 2, 2, 2, 369, 297, 3, 2, 2, 2, 369, 300, 3, 2, 2, 2, 369, 303, 3, 2, 2, 2, 369, 306, 3, 2, 2, 2, 369, 309, 3, 2, 2, 2, 369, 312, 3, 2, 2, 2, 369, 315, 3, 2, 2, 2, 369, 321, 3, 2, 2, 2, 369, 329, 3, 2, 2, 2, 369, 345, 3, 2, 2, 2, 369, 351, 3, 2, 2, 2, 369, 365, 3, 2, 2, 2, 369, 367, 3, 2, 2, 2, 370, 373, 3, 2, 2, 2, 371, 369, 3, 2, 2, 2, 371, 372, 3, 2, 2, 2, 372, 21, 3, 2, 2, 2, 373, 371, 3, 2, 2, 2, 374, 375, 5, 20, 11, 2, 375, 376, 7, 26, 2, 2, 376, 378, 3, 2, 2, 2, 377, 374, 3, 2, 2, 2, 378, 381, 3, 2, 2, 2, 379, 377, 3, 2, 2, 2, 379, 380, 3, 2, 2, 2, 380, 382, 3, 2, 2, 2, 381, 379, 3, 2, 2, 2, 382, 383, 5, 20, 11, 2, 383, 23, 3, 2, 2, 2, 384, 385, 5, 22, 12, 2, 385, 386, 7, 2, 2, 3, 386, 25, 3, 2, 2, 2, 387, 388, 7, 33, 2, 2, 388, 389, 5, 22, 12, 2, 389, 390, 7, 34, 2, 2, 390, 393, 5, 22, 12, 2, 391, 392, 7, 35, 2, 2, 392, 394, 5, 22, 12, 2, 393, 391, 3, 2, 2, 2, 393, 394, 3, 2, 2, 2, 394, 398, 3, 2, 2, 2, 395, 396, 7, 27, 2, 2, 396, 398, 5, 20, 11, 2, 397, 387, 3, 2, 2, 2, 397, 395, 3, 2, 2, 2, 398, 27, 3, 2, 2, 2, 399, 400, 7, 75, 2, 2, 400, 402, 7, 10, 2, 2, 401, 399, 3, 2, 2, 2, 401, 402, 3, 2, 2, 2, 402, 403, 3, 2, 2, 2, 403, 404, 5, 20, 11, 2, 404, 29, 3, 2, 2, 2, 405, 414, 7, 71, 2, 2, 406, 414, 7, 72, 2, 2, 407, 414, 9, 11, 2, 2, 408, 414, 7, 73, 2, 2, 409, 414, 7, 74, 2, 2, 410, 414, 7, 69, 2, 2, 411, 414, 7, 70, 2, 2, 412, 414, 7, 75, 2, 2, 413, 405, 3, 2, 2, 2, 413, 406, 3, 2, 2, 2, 413, 407, 3, 2, 2, 2, 413, 408, 3, 2, 2, 2, 413, 409, 3, 2, 2, 2, 413, 410, 3, 2, 2, 2, 413, 411, 3, 2, 2, 2, 413, 412, 3, 2, 2, 2, 414, 31, 3, 2, 2, 2, 415, 416, 7, 75, 2, 2, 416, 418, 7, 26, 2, 2, 417, 415, 3, 2, 2, 2, 418, 421, 3, 2, 2, 2, 419, 417, 3, 2, 2, 2, 419, 420, 3, 2, 2, 2, 420, 422, 3, 2, 2, 2, 421, 419, 3, 2, 2, 2, 422, 423, 7, 75, 2, 2, 423, 33, 3, 2, 2, 2, 424, 425, 8, 18, 1, 2, 425, 437, 7, 75, 2, 2, 426, 427, 7, 42, 2, 2, 427, 428, 5, 34, 18, 2, 428, 429, 7, 43, 2, 2, 429, 437, 3, 2, 2, 2, 430, 431, 7, 48, 2, 2, 431, 432, 5, 34, 18, 2, 432, 433, 7, 49, 2, 2, 433, 437, 3, 2, 2, 2, 434, 435, 7, 66, 2, 2, 435, 437, 5, 34, 18, 3, 436, 424, 3, 2, 2, 2, 436, 426, 3, 2, 2, 2, 436, 430, 3, 2, 2, 2, 436, 434, 3, 2, 2, 2, 437, 448, 3, 2, 2, 2, 438, 439, 12, 5, 2, 2, 439, 440, 7, 12, 2, 2, 440, 447, 5, 34, 18, 5, 441, 442, 12, 4, 2, 2, 442, 443, 7, 66, 2, 2, 443, 447, 5, 34, 18, 4, 444, 445, 12, 6, 2, 2, 445, 447, 7, 50, 2, 2, 446, 438, 3, 2, 2, 2, 446, 441, 3, 2, 2, 2, 446, 444, 3, 2, 2, 2, 447, 450, 3, 2, 2, 2, 448, 446, 3, 2, 2, 2, 448, 449, 3, 2, 2, 2, 449, 35, 3, 2, 2, 2, 450, 448, 3, 2, 2, 2, 52, 39, 48, 58, 63, 69, 76, 88, 90, 97, 111, 117, 135, 146, 150, 156, 164, 171, 175, 181, 189, 193, 201, 209, 219, 225, 241, 245, 253, 266, 270, 274, 323, 332, 336, 340, 342, 347, 358, 362, 369, 371, 379, 393, 397, 401, 413, 419, 436, 446, 448] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 79, 458, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 3, 2, 7, 2, 38, 10, 2, 12, 2, 14, 2, 41, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 49, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 59, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 64, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 70, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 75, 10, 4, 12, 4, 14, 4, 78, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 89, 10, 4, 5, 4, 91, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 96, 10, 5, 12, 5, 14, 5, 99, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 110, 10, 6, 12, 6, 14, 6, 113, 11, 6, 3, 6, 3, 6, 3, 6, 5, 6, 118, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 136, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 147, 10, 6, 3, 6, 3, 6, 5, 6, 151, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 157, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 165, 10, 6, 3, 6, 3, 6, 3, 6, 6, 6, 170, 10, 6, 13, 6, 14, 6, 171, 3, 6, 3, 6, 5, 6, 176, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 182, 10, 7, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 188, 10, 8, 12, 8, 14, 8, 191, 11, 8, 3, 8, 5, 8, 194, 10, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 202, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 210, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 216, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 224, 10, 9, 5, 9, 226, 10, 9, 3, 10, 3, 10, 6, 10, 230, 10, 10, 13, 10, 14, 10, 231, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 246, 10, 11, 12, 11, 14, 11, 249, 11, 11, 3, 11, 5, 11, 252, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 6, 11, 258, 10, 11, 13, 11, 14, 11, 259, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 271, 10, 11, 12, 11, 14, 11, 274, 11, 11, 3, 11, 5, 11, 277, 10, 11, 3, 11, 3, 11, 5, 11, 281, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 330, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 339, 10, 11, 3, 11, 3, 11, 5, 11, 343, 10, 11, 3, 11, 3, 11, 5, 11, 347, 10, 11, 5, 11, 349, 10, 11, 3, 11, 3, 11, 3, 11, 5, 11, 354, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 363, 10, 11, 12, 11, 14, 11, 366, 11, 11, 3, 11, 5, 11, 369, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 376, 10, 11, 12, 11, 14, 11, 379, 11, 11, 3, 12, 3, 12, 3, 12, 7, 12, 384, 10, 12, 12, 12, 14, 12, 387, 11, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 400, 10, 14, 3, 14, 3, 14, 5, 14, 404, 10, 14, 3, 15, 3, 15, 5, 15, 408, 10, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 420, 10, 16, 3, 17, 3, 17, 7, 17, 424, 10, 17, 12, 17, 14, 17, 427, 11, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 5, 18, 443, 10, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 7, 18, 453, 10, 18, 12, 18, 14, 18, 456, 11, 18, 3, 18, 2, 4, 20, 34, 19, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 2, 12, 3, 2, 11, 22, 3, 2, 23, 24, 4, 2, 15, 16, 54, 54, 3, 2, 12, 14, 3, 2, 15, 16, 3, 2, 17, 18, 3, 2, 55, 56, 3, 2, 57, 58, 4, 2, 37, 38, 59, 62, 3, 2, 68, 69, 2, 537, 2, 39, 3, 2, 2, 2, 4, 48, 3, 2, 2, 2, 6, 90, 3, 2, 2, 2, 8, 92, 3, 2, 2, 2, 10, 175, 3, 2, 2, 2, 12, 177, 3, 2, 2, 2, 14, 183, 3, 2, 2, 2, 16, 225, 3, 2, 2, 2, 18, 227, 3, 2, 2, 2, 20, 280, 3, 2, 2, 2, 22, 385, 3, 2, 2, 2, 24, 390, 3, 2, 2, 2, 26, 403, 3, 2, 2, 2, 28, 407, 3, 2, 2, 2, 30, 419, 3, 2, 2, 2, 32, 425, 3, 2, 2, 2, 34, 442, 3, 2, 2, 2, 36, 38, 5, 4, 3, 2, 37, 36, 3, 2, 2, 2, 38, 41, 3, 2, 2, 2, 39, 37, 3, 2, 2, 2, 39, 40, 3, 2, 2, 2, 40, 42, 3, 2, 2, 2, 41, 39, 3, 2, 2, 2, 42, 43, 7, 2, 2, 3, 43, 3, 3, 2, 2, 2, 44, 45, 5, 6, 4, 2, 45, 46, 7, 3, 2, 2, 46, 49, 3, 2, 2, 2, 47, 49, 5, 10, 6, 2, 48, 44, 3, 2, 2, 2, 48, 47, 3, 2, 2, 2, 49, 5, 3, 2, 2, 2, 50, 51, 7, 4, 2, 2, 51, 58, 7, 76, 2, 2, 52, 53, 7, 5, 2, 2, 53, 59, 5, 32, 17, 2, 54, 55, 7, 6, 2, 2, 55, 59, 5, 32, 17, 2, 56, 57, 7, 7, 2, 2, 57, 59, 7, 76, 2, 2, 58, 52, 3, 2, 2, 2, 58, 54, 3, 2, 2, 2, 58, 56, 3, 2, 2, 2, 58, 59, 3, 2, 2, 2, 59, 91, 3, 2, 2, 2, 60, 91, 7, 8, 2, 2, 61, 63, 7, 9, 2, 2, 62, 64, 5, 22, 12, 2, 63, 62, 3, 2, 2, 2, 63, 64, 3, 2, 2, 2, 64, 91, 3, 2, 2, 2, 65, 66, 5, 34, 18, 2, 66, 69, 7, 76, 2, 2, 67, 68, 7, 10, 2, 2, 68, 70, 5, 22, 12, 2, 69, 67, 3, 2, 2, 2, 69, 70, 3, 2, 2, 2, 70, 91, 3, 2, 2, 2, 71, 72, 5, 8, 5, 2, 72, 73, 7, 10, 2, 2, 73, 75, 3, 2, 2, 2, 74, 71, 3, 2, 2, 2, 75, 78, 3, 2, 2, 2, 76, 74, 3, 2, 2, 2, 76, 77, 3, 2, 2, 2, 77, 79, 3, 2, 2, 2, 78, 76, 3, 2, 2, 2, 79, 91, 5, 22, 12, 2, 80, 81, 5, 20, 11, 2, 81, 82, 9, 2, 2, 2, 82, 83, 7, 10, 2, 2, 83, 84, 5, 20, 11, 2, 84, 91, 3, 2, 2, 2, 85, 91, 9, 3, 2, 2, 86, 88, 7, 25, 2, 2, 87, 89, 5, 22, 12, 2, 88, 87, 3, 2, 2, 2, 88, 89, 3, 2, 2, 2, 89, 91, 3, 2, 2, 2, 90, 50, 3, 2, 2, 2, 90, 60, 3, 2, 2, 2, 90, 61, 3, 2, 2, 2, 90, 65, 3, 2, 2, 2, 90, 76, 3, 2, 2, 2, 90, 80, 3, 2, 2, 2, 90, 85, 3, 2, 2, 2, 90, 86, 3, 2, 2, 2, 91, 7, 3, 2, 2, 2, 92, 97, 5, 20, 11, 2, 93, 94, 7, 26, 2, 2, 94, 96, 5, 20, 11, 2, 95, 93, 3, 2, 2, 2, 96, 99, 3, 2, 2, 2, 97, 95, 3, 2, 2, 2, 97, 98, 3, 2, 2, 2, 98, 9, 3, 2, 2, 2, 99, 97, 3, 2, 2, 2, 100, 101, 7, 27, 2, 2, 101, 102, 5, 20, 11, 2, 102, 103, 7, 28, 2, 2, 103, 111, 5, 18, 10, 2, 104, 105, 7, 29, 2, 2, 105, 106, 5, 20, 11, 2, 106, 107, 7, 28, 2, 2, 107, 108, 5, 18, 10, 2, 108, 110, 3, 2, 2, 2, 109, 104, 3, 2, 2, 2, 110, 113, 3, 2, 2, 2, 111, 109, 3, 2, 2, 2, 111, 112, 3, 2, 2, 2, 112, 117, 3, 2, 2, 2, 113, 111, 3, 2, 2, 2, 114, 115, 7, 30, 2, 2, 115, 116, 7, 28, 2, 2, 116, 118, 5, 18, 10, 2, 117, 114, 3, 2, 2, 2, 117, 118, 3, 2, 2, 2, 118, 176, 3, 2, 2, 2, 119, 120, 7, 31, 2, 2, 120, 121, 5, 20, 11, 2, 121, 122, 7, 28, 2, 2, 122, 123, 5, 18, 10, 2, 123, 176, 3, 2, 2, 2, 124, 125, 7, 32, 2, 2, 125, 126, 5, 20, 11, 2, 126, 127, 7, 28, 2, 2, 127, 128, 5, 18, 10, 2, 128, 176, 3, 2, 2, 2, 129, 130, 7, 33, 2, 2, 130, 131, 5, 22, 12, 2, 131, 132, 7, 34, 2, 2, 132, 135, 5, 22, 12, 2, 133, 134, 7, 35, 2, 2, 134, 136, 5, 22, 12, 2, 135, 133, 3, 2, 2, 2, 135, 136, 3, 2, 2, 2, 136, 137, 3, 2, 2, 2, 137, 138, 7, 28, 2, 2, 138, 139, 5, 18, 10, 2, 139, 176, 3, 2, 2, 2, 140, 141, 7, 36, 2, 2, 141, 146, 7, 76, 2, 2, 142, 143, 7, 37, 2, 2, 143, 144, 5, 32, 17, 2, 144, 145, 7, 38, 2, 2, 145, 147, 3, 2, 2, 2, 146, 142, 3, 2, 2, 2, 146, 147, 3, 2, 2, 2, 147, 148, 3, 2, 2, 2, 148, 150, 5, 14, 8, 2, 149, 151, 5, 34, 18, 2, 150, 149, 3, 2, 2, 2, 150, 151, 3, 2, 2, 2, 151, 156, 3, 2, 2, 2, 152, 153, 7, 39, 2, 2, 153, 157, 5, 18, 10, 2, 154, 155, 7, 40, 2, 2, 155, 157, 7, 3, 2, 2, 156, 152, 3, 2, 2, 2, 156, 154, 3, 2, 2, 2, 157, 176, 3, 2, 2, 2, 158, 159, 7, 41, 2, 2, 159, 164, 7, 76, 2, 2, 160, 161, 7, 42, 2, 2, 161, 162, 5, 34, 18, 2, 162, 163, 7, 43, 2, 2, 163, 165, 3, 2, 2, 2, 164, 160, 3, 2, 2, 2, 164, 165, 3, 2, 2, 2, 165, 166, 3, 2, 2, 2, 166, 167, 7, 39, 2, 2, 167, 169, 7, 44, 2, 2, 168, 170, 5, 16, 9, 2, 169, 168, 3, 2, 2, 2, 170, 171, 3, 2, 2, 2, 171, 169, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 173, 3, 2, 2, 2, 173, 174, 7, 45, 2, 2, 174, 176, 3, 2, 2, 2, 175, 100, 3, 2, 2, 2, 175, 119, 3, 2, 2, 2, 175, 124, 3, 2, 2, 2, 175, 129, 3, 2, 2, 2, 175, 140, 3, 2, 2, 2, 175, 158, 3, 2, 2, 2, 176, 11, 3, 2, 2, 2, 177, 178, 5, 34, 18, 2, 178, 181, 7, 76, 2, 2, 179, 180, 7, 46, 2, 2, 180, 182, 5, 20, 11, 2, 181, 179, 3, 2, 2, 2, 181, 182, 3, 2, 2, 2, 182, 13, 3, 2, 2, 2, 183, 189, 7, 42, 2, 2, 184, 185, 5, 12, 7, 2, 185, 186, 7, 26, 2, 2, 186, 188, 3, 2, 2, 2, 187, 184, 3, 2, 2, 2, 188, 191, 3, 2, 2, 2, 189, 187, 3, 2, 2, 2, 189, 190, 3, 2, 2, 2, 190, 193, 3, 2, 2, 2, 191, 189, 3, 2, 2, 2, 192, 194, 5, 12, 7, 2, 193, 192, 3, 2, 2, 2, 193, 194, 3, 2, 2, 2, 194, 195, 3, 2, 2, 2, 195, 196, 7, 43, 2, 2, 196, 15, 3, 2, 2, 2, 197, 198, 5, 34, 18, 2, 198, 201, 7, 76, 2, 2, 199, 200, 7, 46, 2, 2, 200, 202, 5, 22, 12, 2, 201, 199, 3, 2, 2, 2, 201, 202, 3, 2, 2, 2, 202, 203, 3, 2, 2, 2, 203, 204, 7, 3, 2, 2, 204, 226, 3, 2, 2, 2, 205, 206, 7, 36, 2, 2, 206, 207, 7, 76, 2, 2, 207, 209, 5, 14, 8, 2, 208, 210, 5, 34, 18, 2, 209, 208, 3, 2, 2, 2, 209, 210, 3, 2, 2, 2, 210, 215, 3, 2, 2, 2, 211, 212, 7, 39, 2, 2, 212, 216, 5, 18, 10, 2, 213, 214, 7, 47, 2, 2, 214, 216, 7, 3, 2, 2, 215, 211, 3, 2, 2, 2, 215, 213, 3, 2, 2, 2, 216, 226, 3, 2, 2, 2, 217, 218, 7, 48, 2, 2, 218, 223, 5, 14, 8, 2, 219, 220, 7, 39, 2, 2, 220, 224, 5, 18, 10, 2, 221, 222, 7, 47, 2, 2, 222, 224, 7, 3, 2, 2, 223, 219, 3, 2, 2, 2, 223, 221, 3, 2, 2, 2, 224, 226, 3, 2, 2, 2, 225, 197, 3, 2, 2, 2, 225, 205, 3, 2, 2, 2, 225, 217, 3, 2, 2, 2, 226, 17, 3, 2, 2, 2, 227, 229, 7, 44, 2, 2, 228, 230, 5, 4, 3, 2, 229, 228, 3, 2, 2, 2, 230, 231, 3, 2, 2, 2, 231, 229, 3, 2, 2, 2, 231, 232, 3, 2, 2, 2, 232, 233, 3, 2, 2, 2, 233, 234, 7, 45, 2, 2, 234, 19, 3, 2, 2, 2, 235, 236, 8, 11, 1, 2, 236, 281, 5, 30, 16, 2, 237, 238, 7, 42, 2, 2, 238, 239, 5, 22, 12, 2, 239, 240, 7, 43, 2, 2, 240, 281, 3, 2, 2, 2, 241, 247, 7, 49, 2, 2, 242, 243, 5, 20, 11, 2, 243, 244, 7, 26, 2, 2, 244, 246, 3, 2, 2, 2, 245, 242, 3, 2, 2, 2, 246, 249, 3, 2, 2, 2, 247, 245, 3, 2, 2, 2, 247, 248, 3, 2, 2, 2, 248, 251, 3, 2, 2, 2, 249, 247, 3, 2, 2, 2, 250, 252, 5, 20, 11, 2, 251, 250, 3, 2, 2, 2, 251, 252, 3, 2, 2, 2, 252, 253, 3, 2, 2, 2, 253, 281, 7, 50, 2, 2, 254, 255, 7, 49, 2, 2, 255, 257, 5, 20, 11, 2, 256, 258, 5, 26, 14, 2, 257, 256, 3, 2, 2, 2, 258, 259, 3, 2, 2, 2, 259, 257, 3, 2, 2, 2, 259, 260, 3, 2, 2, 2, 260, 261, 3, 2, 2, 2, 261, 262, 7, 50, 2, 2, 262, 281, 3, 2, 2, 2, 263, 264, 9, 4, 2, 2, 264, 281, 5, 20, 11, 19, 265, 266, 7, 63, 2, 2, 266, 281, 5, 20, 11, 8, 267, 272, 7, 66, 2, 2, 268, 269, 7, 76, 2, 2, 269, 271, 7, 26, 2, 2, 270, 268, 3, 2, 2, 2, 271, 274, 3, 2, 2, 2, 272, 270, 3, 2, 2, 2, 272, 273, 3, 2, 2, 2, 273, 276, 3, 2, 2, 2, 274, 272, 3, 2, 2, 2, 275, 277, 7, 76, 2, 2, 276, 275, 3, 2, 2, 2, 276, 277, 3, 2, 2, 2, 277, 278, 3, 2, 2, 2, 278, 279, 7, 67, 2, 2, 279, 281, 5, 20, 11, 3, 280, 235, 3, 2, 2, 2, 280, 237, 3, 2, 2, 2, 280, 241, 3, 2, 2, 2, 280, 254, 3, 2, 2, 2, 280, 263, 3, 2, 2, 2, 280, 265, 3, 2, 2, 2, 280, 267, 3, 2, 2, 2, 281, 377, 3, 2, 2, 2, 282, 283, 12, 20, 2, 2, 283, 284, 7, 11, 2, 2, 284, 376, 5, 20, 11, 20, 285, 286, 12, 18, 2, 2, 286, 287, 9, 5, 2, 2, 287, 376, 5, 20, 11, 19, 288, 289, 12, 17, 2, 2, 289, 290, 9, 6, 2, 2, 290, 376, 5, 20, 11, 18, 291, 292, 12, 16, 2, 2, 292, 293, 9, 7, 2, 2, 293, 376, 5, 20, 11, 17, 294, 295, 12, 15, 2, 2, 295, 296, 7, 19, 2, 2, 296, 376, 5, 20, 11, 16, 297, 298, 12, 14, 2, 2, 298, 299, 7, 20, 2, 2, 299, 376, 5, 20, 11, 15, 300, 301, 12, 13, 2, 2, 301, 302, 7, 21, 2, 2, 302, 376, 5, 20, 11, 14, 303, 304, 12, 12, 2, 2, 304, 305, 9, 8, 2, 2, 305, 376, 5, 20, 11, 13, 306, 307, 12, 10, 2, 2, 307, 308, 9, 9, 2, 2, 308, 376, 5, 20, 11, 11, 309, 310, 12, 9, 2, 2, 310, 311, 9, 10, 2, 2, 311, 376, 5, 20, 11, 9, 312, 313, 12, 7, 2, 2, 313, 314, 7, 64, 2, 2, 314, 376, 5, 20, 11, 7, 315, 316, 12, 6, 2, 2, 316, 317, 7, 65, 2, 2, 317, 376, 5, 20, 11, 6, 318, 319, 12, 5, 2, 2, 319, 320, 7, 22, 2, 2, 320, 376, 5, 20, 11, 5, 321, 322, 12, 4, 2, 2, 322, 323, 7, 51, 2, 2, 323, 324, 5, 20, 11, 2, 324, 325, 7, 46, 2, 2, 325, 326, 5, 20, 11, 4, 326, 376, 3, 2, 2, 2, 327, 329, 12, 25, 2, 2, 328, 330, 7, 51, 2, 2, 329, 328, 3, 2, 2, 2, 329, 330, 3, 2, 2, 2, 330, 331, 3, 2, 2, 2, 331, 332, 7, 49, 2, 2, 332, 333, 5, 22, 12, 2, 333, 334, 7, 50, 2, 2, 334, 376, 3, 2, 2, 2, 335, 336, 12, 24, 2, 2, 336, 338, 7, 49, 2, 2, 337, 339, 5, 20, 11, 2, 338, 337, 3, 2, 2, 2, 338, 339, 3, 2, 2, 2, 339, 340, 3, 2, 2, 2, 340, 342, 7, 46, 2, 2, 341, 343, 5, 20, 11, 2, 342, 341, 3, 2, 2, 2, 342, 343, 3, 2, 2, 2, 343, 348, 3, 2, 2, 2, 344, 346, 7, 46, 2, 2, 345, 347, 5, 20, 11, 2, 346, 345, 3, 2, 2, 2, 346, 347, 3, 2, 2, 2, 347, 349, 3, 2, 2, 2, 348, 344, 3, 2, 2, 2, 348, 349, 3, 2, 2, 2, 349, 350, 3, 2, 2, 2, 350, 376, 7, 50, 2, 2, 351, 353, 12, 23, 2, 2, 352, 354, 7, 51, 2, 2, 353, 352, 3, 2, 2, 2, 353, 354, 3, 2, 2, 2, 354, 355, 3, 2, 2, 2, 355, 356, 7, 52, 2, 2, 356, 376, 7, 76, 2, 2, 357, 358, 12, 22, 2, 2, 358, 364, 7, 42, 2, 2, 359, 360, 5, 28, 15, 2, 360, 361, 7, 26, 2, 2, 361, 363, 3, 2, 2, 2, 362, 359, 3, 2, 2, 2, 363, 366, 3, 2, 2, 2, 364, 362, 3, 2, 2, 2, 364, 365, 3, 2, 2, 2, 365, 368, 3, 2, 2, 2, 366, 364, 3, 2, 2, 2, 367, 369, 5, 28, 15, 2, 368, 367, 3, 2, 2, 2, 368, 369, 3, 2, 2, 2, 369, 370, 3, 2, 2, 2, 370, 376, 7, 43, 2, 2, 371, 372, 12, 21, 2, 2, 372, 376, 7, 53, 2, 2, 373, 374, 12, 11, 2, 2, 374, 376, 7, 56, 2, 2, 375, 282, 3, 2, 2, 2, 375, 285, 3, 2, 2, 2, 375, 288, 3, 2, 2, 2, 375, 291, 3, 2, 2, 2, 375, 294, 3, 2, 2, 2, 375, 297, 3, 2, 2, 2, 375, 300, 3, 2, 2, 2, 375, 303, 3, 2, 2, 2, 375, 306, 3, 2, 2, 2, 375, 309, 3, 2, 2, 2, 375, 312, 3, 2, 2, 2, 375, 315, 3, 2, 2, 2, 375, 318, 3, 2, 2, 2, 375, 321, 3, 2, 2, 2, 375, 327, 3, 2, 2, 2, 375, 335, 3, 2, 2, 2, 375, 351, 3, 2, 2, 2, 375, 357, 3, 2, 2, 2, 375, 371, 3, 2, 2, 2, 375, 373, 3, 2, 2, 2, 376, 379, 3, 2, 2, 2, 377, 375, 3, 2, 2, 2, 377, 378, 3, 2, 2, 2, 378, 21, 3, 2, 2, 2, 379, 377, 3, 2, 2, 2, 380, 381, 5, 20, 11, 2, 381, 382, 7, 26, 2, 2, 382, 384, 3, 2, 2, 2, 383, 380, 3, 2, 2, 2, 384, 387, 3, 2, 2, 2, 385, 383, 3, 2, 2, 2, 385, 386, 3, 2, 2, 2, 386, 388, 3, 2, 2, 2, 387, 385, 3, 2, 2, 2, 388, 389, 5, 20, 11, 2, 389, 23, 3, 2, 2, 2, 390, 391, 5, 22, 12, 2, 391, 392, 7, 2, 2, 3, 392, 25, 3, 2, 2, 2, 393, 394, 7, 33, 2, 2, 394, 395, 5, 22, 12, 2, 395, 396, 7, 34, 2, 2, 396, 399, 5, 22, 12, 2, 397, 398, 7, 35, 2, 2, 398, 400, 5, 22, 12, 2, 399, 397, 3, 2, 2, 2, 399, 400, 3, 2, 2, 2, 400, 404, 3, 2, 2, 2, 401, 402, 7, 27, 2, 2, 402, 404, 5, 20, 11, 2, 403, 393, 3, 2, 2, 2, 403, 401, 3, 2, 2, 2, 404, 27, 3, 2, 2, 2, 405, 406, 7, 76, 2, 2, 406, 408, 7, 10, 2, 2, 407, 405, 3, 2, 2, 2, 407, 408, 3, 2, 2, 2, 408, 409, 3, 2, 2, 2, 409, 410, 5, 20, 11, 2, 410, 29, 3, 2, 2, 2, 411, 420, 7, 72, 2, 2, 412, 420, 7, 73, 2, 2, 413, 420, 9, 11, 2, 2, 414, 420, 7, 74, 2, 2, 415, 420, 7, 75, 2, 2, 416, 420, 7, 70, 2, 2, 417, 420, 7, 71, 2, 2, 418, 420, 7, 76, 2, 2, 419, 411, 3, 2, 2, 2, 419, 412, 3, 2, 2, 2, 419, 413, 3, 2, 2, 2, 419, 414, 3, 2, 2, 2, 419, 415, 3, 2, 2, 2, 419, 416, 3, 2, 2, 2, 419, 417, 3, 2, 2, 2, 419, 418, 3, 2, 2, 2, 420, 31, 3, 2, 2, 2, 421, 422, 7, 76, 2, 2, 422, 424, 7, 26, 2, 2, 423, 421, 3, 2, 2, 2, 424, 427, 3, 2, 2, 2, 425, 423, 3, 2, 2, 2, 425, 426, 3, 2, 2, 2, 426, 428, 3, 2, 2, 2, 427, 425, 3, 2, 2, 2, 428, 429, 7, 76, 2, 2, 429, 33, 3, 2, 2, 2, 430, 431, 8, 18, 1, 2, 431, 443, 7, 76, 2, 2, 432, 433, 7, 42, 2, 2, 433, 434, 5, 34, 18, 2, 434, 435, 7, 43, 2, 2, 435, 443, 3, 2, 2, 2, 436, 437, 7, 49, 2, 2, 437, 438, 5, 34, 18, 2, 438, 439, 7, 50, 2, 2, 439, 443, 3, 2, 2, 2, 440, 441, 7, 67, 2, 2, 441, 443, 5, 34, 18, 3, 442, 430, 3, 2, 2, 2, 442, 432, 3, 2, 2, 2, 442, 436, 3, 2, 2, 2, 442, 440, 3, 2, 2, 2, 443, 454, 3, 2, 2, 2, 444, 445, 12, 5, 2, 2, 445, 446, 7, 12, 2, 2, 446, 453, 5, 34, 18, 5, 447, 448, 12, 4, 2, 2, 448, 449, 7, 67, 2, 2, 449, 453, 5, 34, 18, 4, 450, 451, 12, 6, 2, 2, 451, 453, 7, 51, 2, 2, 452, 444, 3, 2, 2, 2, 452, 447, 3, 2, 2, 2, 452, 450, 3, 2, 2, 2, 453, 456, 3, 2, 2, 2, 454, 452, 3, 2, 2, 2, 454, 455, 3, 2, 2, 2, 455, 35, 3, 2, 2, 2, 456, 454, 3, 2, 2, 2, 54, 39, 48, 58, 63, 69, 76, 88, 90, 97, 111, 117, 135, 146, 150, 156, 164, 171, 175, 181, 189, 193, 201, 209, 215, 223, 225, 231, 247, 251, 259, 272, 276, 280, 329, 338, 342, 346, 348, 353, 364, 368, 375, 377, 385, 399, 403, 407, 419, 425, 442, 452, 454] \ No newline at end of file diff --git a/src/antlr/Pyxell.tokens b/src/antlr/Pyxell.tokens index 8c43aa77..c57ea7d0 100644 --- a/src/antlr/Pyxell.tokens +++ b/src/antlr/Pyxell.tokens @@ -66,14 +66,15 @@ T__64=65 T__65=66 T__66=67 T__67=68 -INT=69 -FLOAT=70 -CHAR=71 -STRING=72 -ID=73 -COMMENT=74 -WS=75 -ERR=76 +T__68=69 +INT=70 +FLOAT=71 +CHAR=72 +STRING=73 +ID=74 +COMMENT=75 +WS=76 +ERR=77 ';'=1 'use'=2 'only'=3 @@ -118,27 +119,28 @@ ERR=76 '{'=42 '}'=43 ':'=44 -'constructor'=45 -'['=46 -']'=47 -'?'=48 -'.'=49 -'!'=50 -'~'=51 -'..'=52 -'...'=53 -'is'=54 -'isn\'t'=55 -'=='=56 -'!='=57 -'<='=58 -'>='=59 -'not'=60 -'and'=61 -'or'=62 -'lambda'=63 -'->'=64 -'true'=65 -'false'=66 -'null'=67 -'super'=68 +'abstract'=45 +'constructor'=46 +'['=47 +']'=48 +'?'=49 +'.'=50 +'!'=51 +'~'=52 +'..'=53 +'...'=54 +'is'=55 +'isn\'t'=56 +'=='=57 +'!='=58 +'<='=59 +'>='=60 +'not'=61 +'and'=62 +'or'=63 +'lambda'=64 +'->'=65 +'true'=66 +'false'=67 +'null'=68 +'super'=69 diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp index 551dfab3..dc3a2509 100644 --- a/src/antlr/PyxellLexer.interp +++ b/src/antlr/PyxellLexer.interp @@ -44,6 +44,7 @@ null '{' '}' ':' +'abstract' 'constructor' '[' ']' @@ -147,6 +148,7 @@ null null null null +null INT FLOAT CHAR @@ -225,6 +227,7 @@ T__64 T__65 T__66 T__67 +T__68 INT FLOAT CHAR @@ -245,4 +248,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 78, 502, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 70, 6, 70, 419, 10, 70, 13, 70, 14, 70, 420, 3, 71, 6, 71, 424, 10, 71, 13, 71, 14, 71, 425, 3, 71, 3, 71, 6, 71, 430, 10, 71, 13, 71, 14, 71, 431, 3, 71, 3, 71, 5, 71, 436, 10, 71, 3, 71, 6, 71, 439, 10, 71, 13, 71, 14, 71, 440, 5, 71, 443, 10, 71, 3, 72, 3, 72, 3, 72, 3, 72, 7, 72, 449, 10, 72, 12, 72, 14, 72, 452, 11, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 7, 73, 460, 10, 73, 12, 73, 14, 73, 463, 11, 73, 3, 73, 3, 73, 3, 74, 3, 74, 7, 74, 469, 10, 74, 12, 74, 14, 74, 472, 11, 74, 3, 75, 3, 75, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 5, 77, 481, 10, 77, 3, 78, 3, 78, 3, 78, 3, 78, 7, 78, 487, 10, 78, 12, 78, 14, 78, 490, 11, 78, 3, 78, 3, 78, 3, 79, 6, 79, 495, 10, 79, 13, 79, 14, 79, 496, 3, 79, 3, 79, 3, 80, 3, 80, 2, 2, 81, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 74, 147, 75, 149, 2, 151, 2, 153, 2, 155, 76, 157, 77, 159, 78, 3, 2, 11, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 3, 2, 41, 41, 4, 2, 12, 12, 14, 15, 5, 2, 11, 12, 15, 15, 34, 34, 2, 513, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 3, 161, 3, 2, 2, 2, 5, 163, 3, 2, 2, 2, 7, 167, 3, 2, 2, 2, 9, 172, 3, 2, 2, 2, 11, 179, 3, 2, 2, 2, 13, 182, 3, 2, 2, 2, 15, 187, 3, 2, 2, 2, 17, 193, 3, 2, 2, 2, 19, 195, 3, 2, 2, 2, 21, 197, 3, 2, 2, 2, 23, 199, 3, 2, 2, 2, 25, 201, 3, 2, 2, 2, 27, 203, 3, 2, 2, 2, 29, 205, 3, 2, 2, 2, 31, 207, 3, 2, 2, 2, 33, 210, 3, 2, 2, 2, 35, 213, 3, 2, 2, 2, 37, 215, 3, 2, 2, 2, 39, 217, 3, 2, 2, 2, 41, 219, 3, 2, 2, 2, 43, 222, 3, 2, 2, 2, 45, 228, 3, 2, 2, 2, 47, 237, 3, 2, 2, 2, 49, 244, 3, 2, 2, 2, 51, 246, 3, 2, 2, 2, 53, 249, 3, 2, 2, 2, 55, 252, 3, 2, 2, 2, 57, 257, 3, 2, 2, 2, 59, 262, 3, 2, 2, 2, 61, 268, 3, 2, 2, 2, 63, 274, 3, 2, 2, 2, 65, 278, 3, 2, 2, 2, 67, 281, 3, 2, 2, 2, 69, 286, 3, 2, 2, 2, 71, 291, 3, 2, 2, 2, 73, 293, 3, 2, 2, 2, 75, 295, 3, 2, 2, 2, 77, 299, 3, 2, 2, 2, 79, 306, 3, 2, 2, 2, 81, 312, 3, 2, 2, 2, 83, 314, 3, 2, 2, 2, 85, 316, 3, 2, 2, 2, 87, 318, 3, 2, 2, 2, 89, 320, 3, 2, 2, 2, 91, 322, 3, 2, 2, 2, 93, 334, 3, 2, 2, 2, 95, 336, 3, 2, 2, 2, 97, 338, 3, 2, 2, 2, 99, 340, 3, 2, 2, 2, 101, 342, 3, 2, 2, 2, 103, 344, 3, 2, 2, 2, 105, 346, 3, 2, 2, 2, 107, 349, 3, 2, 2, 2, 109, 353, 3, 2, 2, 2, 111, 356, 3, 2, 2, 2, 113, 362, 3, 2, 2, 2, 115, 365, 3, 2, 2, 2, 117, 368, 3, 2, 2, 2, 119, 371, 3, 2, 2, 2, 121, 374, 3, 2, 2, 2, 123, 378, 3, 2, 2, 2, 125, 382, 3, 2, 2, 2, 127, 385, 3, 2, 2, 2, 129, 392, 3, 2, 2, 2, 131, 395, 3, 2, 2, 2, 133, 400, 3, 2, 2, 2, 135, 406, 3, 2, 2, 2, 137, 411, 3, 2, 2, 2, 139, 418, 3, 2, 2, 2, 141, 423, 3, 2, 2, 2, 143, 444, 3, 2, 2, 2, 145, 455, 3, 2, 2, 2, 147, 466, 3, 2, 2, 2, 149, 473, 3, 2, 2, 2, 151, 475, 3, 2, 2, 2, 153, 480, 3, 2, 2, 2, 155, 482, 3, 2, 2, 2, 157, 494, 3, 2, 2, 2, 159, 500, 3, 2, 2, 2, 161, 162, 7, 61, 2, 2, 162, 4, 3, 2, 2, 2, 163, 164, 7, 119, 2, 2, 164, 165, 7, 117, 2, 2, 165, 166, 7, 103, 2, 2, 166, 6, 3, 2, 2, 2, 167, 168, 7, 113, 2, 2, 168, 169, 7, 112, 2, 2, 169, 170, 7, 110, 2, 2, 170, 171, 7, 123, 2, 2, 171, 8, 3, 2, 2, 2, 172, 173, 7, 106, 2, 2, 173, 174, 7, 107, 2, 2, 174, 175, 7, 102, 2, 2, 175, 176, 7, 107, 2, 2, 176, 177, 7, 112, 2, 2, 177, 178, 7, 105, 2, 2, 178, 10, 3, 2, 2, 2, 179, 180, 7, 99, 2, 2, 180, 181, 7, 117, 2, 2, 181, 12, 3, 2, 2, 2, 182, 183, 7, 117, 2, 2, 183, 184, 7, 109, 2, 2, 184, 185, 7, 107, 2, 2, 185, 186, 7, 114, 2, 2, 186, 14, 3, 2, 2, 2, 187, 188, 7, 114, 2, 2, 188, 189, 7, 116, 2, 2, 189, 190, 7, 107, 2, 2, 190, 191, 7, 112, 2, 2, 191, 192, 7, 118, 2, 2, 192, 16, 3, 2, 2, 2, 193, 194, 7, 63, 2, 2, 194, 18, 3, 2, 2, 2, 195, 196, 7, 96, 2, 2, 196, 20, 3, 2, 2, 2, 197, 198, 7, 44, 2, 2, 198, 22, 3, 2, 2, 2, 199, 200, 7, 49, 2, 2, 200, 24, 3, 2, 2, 2, 201, 202, 7, 39, 2, 2, 202, 26, 3, 2, 2, 2, 203, 204, 7, 45, 2, 2, 204, 28, 3, 2, 2, 2, 205, 206, 7, 47, 2, 2, 206, 30, 3, 2, 2, 2, 207, 208, 7, 62, 2, 2, 208, 209, 7, 62, 2, 2, 209, 32, 3, 2, 2, 2, 210, 211, 7, 64, 2, 2, 211, 212, 7, 64, 2, 2, 212, 34, 3, 2, 2, 2, 213, 214, 7, 40, 2, 2, 214, 36, 3, 2, 2, 2, 215, 216, 7, 38, 2, 2, 216, 38, 3, 2, 2, 2, 217, 218, 7, 126, 2, 2, 218, 40, 3, 2, 2, 2, 219, 220, 7, 65, 2, 2, 220, 221, 7, 65, 2, 2, 221, 42, 3, 2, 2, 2, 222, 223, 7, 100, 2, 2, 223, 224, 7, 116, 2, 2, 224, 225, 7, 103, 2, 2, 225, 226, 7, 99, 2, 2, 226, 227, 7, 109, 2, 2, 227, 44, 3, 2, 2, 2, 228, 229, 7, 101, 2, 2, 229, 230, 7, 113, 2, 2, 230, 231, 7, 112, 2, 2, 231, 232, 7, 118, 2, 2, 232, 233, 7, 107, 2, 2, 233, 234, 7, 112, 2, 2, 234, 235, 7, 119, 2, 2, 235, 236, 7, 103, 2, 2, 236, 46, 3, 2, 2, 2, 237, 238, 7, 116, 2, 2, 238, 239, 7, 103, 2, 2, 239, 240, 7, 118, 2, 2, 240, 241, 7, 119, 2, 2, 241, 242, 7, 116, 2, 2, 242, 243, 7, 112, 2, 2, 243, 48, 3, 2, 2, 2, 244, 245, 7, 46, 2, 2, 245, 50, 3, 2, 2, 2, 246, 247, 7, 107, 2, 2, 247, 248, 7, 104, 2, 2, 248, 52, 3, 2, 2, 2, 249, 250, 7, 102, 2, 2, 250, 251, 7, 113, 2, 2, 251, 54, 3, 2, 2, 2, 252, 253, 7, 103, 2, 2, 253, 254, 7, 110, 2, 2, 254, 255, 7, 107, 2, 2, 255, 256, 7, 104, 2, 2, 256, 56, 3, 2, 2, 2, 257, 258, 7, 103, 2, 2, 258, 259, 7, 110, 2, 2, 259, 260, 7, 117, 2, 2, 260, 261, 7, 103, 2, 2, 261, 58, 3, 2, 2, 2, 262, 263, 7, 121, 2, 2, 263, 264, 7, 106, 2, 2, 264, 265, 7, 107, 2, 2, 265, 266, 7, 110, 2, 2, 266, 267, 7, 103, 2, 2, 267, 60, 3, 2, 2, 2, 268, 269, 7, 119, 2, 2, 269, 270, 7, 112, 2, 2, 270, 271, 7, 118, 2, 2, 271, 272, 7, 107, 2, 2, 272, 273, 7, 110, 2, 2, 273, 62, 3, 2, 2, 2, 274, 275, 7, 104, 2, 2, 275, 276, 7, 113, 2, 2, 276, 277, 7, 116, 2, 2, 277, 64, 3, 2, 2, 2, 278, 279, 7, 107, 2, 2, 279, 280, 7, 112, 2, 2, 280, 66, 3, 2, 2, 2, 281, 282, 7, 117, 2, 2, 282, 283, 7, 118, 2, 2, 283, 284, 7, 103, 2, 2, 284, 285, 7, 114, 2, 2, 285, 68, 3, 2, 2, 2, 286, 287, 7, 104, 2, 2, 287, 288, 7, 119, 2, 2, 288, 289, 7, 112, 2, 2, 289, 290, 7, 101, 2, 2, 290, 70, 3, 2, 2, 2, 291, 292, 7, 62, 2, 2, 292, 72, 3, 2, 2, 2, 293, 294, 7, 64, 2, 2, 294, 74, 3, 2, 2, 2, 295, 296, 7, 102, 2, 2, 296, 297, 7, 103, 2, 2, 297, 298, 7, 104, 2, 2, 298, 76, 3, 2, 2, 2, 299, 300, 7, 103, 2, 2, 300, 301, 7, 122, 2, 2, 301, 302, 7, 118, 2, 2, 302, 303, 7, 103, 2, 2, 303, 304, 7, 116, 2, 2, 304, 305, 7, 112, 2, 2, 305, 78, 3, 2, 2, 2, 306, 307, 7, 101, 2, 2, 307, 308, 7, 110, 2, 2, 308, 309, 7, 99, 2, 2, 309, 310, 7, 117, 2, 2, 310, 311, 7, 117, 2, 2, 311, 80, 3, 2, 2, 2, 312, 313, 7, 42, 2, 2, 313, 82, 3, 2, 2, 2, 314, 315, 7, 43, 2, 2, 315, 84, 3, 2, 2, 2, 316, 317, 7, 125, 2, 2, 317, 86, 3, 2, 2, 2, 318, 319, 7, 127, 2, 2, 319, 88, 3, 2, 2, 2, 320, 321, 7, 60, 2, 2, 321, 90, 3, 2, 2, 2, 322, 323, 7, 101, 2, 2, 323, 324, 7, 113, 2, 2, 324, 325, 7, 112, 2, 2, 325, 326, 7, 117, 2, 2, 326, 327, 7, 118, 2, 2, 327, 328, 7, 116, 2, 2, 328, 329, 7, 119, 2, 2, 329, 330, 7, 101, 2, 2, 330, 331, 7, 118, 2, 2, 331, 332, 7, 113, 2, 2, 332, 333, 7, 116, 2, 2, 333, 92, 3, 2, 2, 2, 334, 335, 7, 93, 2, 2, 335, 94, 3, 2, 2, 2, 336, 337, 7, 95, 2, 2, 337, 96, 3, 2, 2, 2, 338, 339, 7, 65, 2, 2, 339, 98, 3, 2, 2, 2, 340, 341, 7, 48, 2, 2, 341, 100, 3, 2, 2, 2, 342, 343, 7, 35, 2, 2, 343, 102, 3, 2, 2, 2, 344, 345, 7, 128, 2, 2, 345, 104, 3, 2, 2, 2, 346, 347, 7, 48, 2, 2, 347, 348, 7, 48, 2, 2, 348, 106, 3, 2, 2, 2, 349, 350, 7, 48, 2, 2, 350, 351, 7, 48, 2, 2, 351, 352, 7, 48, 2, 2, 352, 108, 3, 2, 2, 2, 353, 354, 7, 107, 2, 2, 354, 355, 7, 117, 2, 2, 355, 110, 3, 2, 2, 2, 356, 357, 7, 107, 2, 2, 357, 358, 7, 117, 2, 2, 358, 359, 7, 112, 2, 2, 359, 360, 7, 41, 2, 2, 360, 361, 7, 118, 2, 2, 361, 112, 3, 2, 2, 2, 362, 363, 7, 63, 2, 2, 363, 364, 7, 63, 2, 2, 364, 114, 3, 2, 2, 2, 365, 366, 7, 35, 2, 2, 366, 367, 7, 63, 2, 2, 367, 116, 3, 2, 2, 2, 368, 369, 7, 62, 2, 2, 369, 370, 7, 63, 2, 2, 370, 118, 3, 2, 2, 2, 371, 372, 7, 64, 2, 2, 372, 373, 7, 63, 2, 2, 373, 120, 3, 2, 2, 2, 374, 375, 7, 112, 2, 2, 375, 376, 7, 113, 2, 2, 376, 377, 7, 118, 2, 2, 377, 122, 3, 2, 2, 2, 378, 379, 7, 99, 2, 2, 379, 380, 7, 112, 2, 2, 380, 381, 7, 102, 2, 2, 381, 124, 3, 2, 2, 2, 382, 383, 7, 113, 2, 2, 383, 384, 7, 116, 2, 2, 384, 126, 3, 2, 2, 2, 385, 386, 7, 110, 2, 2, 386, 387, 7, 99, 2, 2, 387, 388, 7, 111, 2, 2, 388, 389, 7, 100, 2, 2, 389, 390, 7, 102, 2, 2, 390, 391, 7, 99, 2, 2, 391, 128, 3, 2, 2, 2, 392, 393, 7, 47, 2, 2, 393, 394, 7, 64, 2, 2, 394, 130, 3, 2, 2, 2, 395, 396, 7, 118, 2, 2, 396, 397, 7, 116, 2, 2, 397, 398, 7, 119, 2, 2, 398, 399, 7, 103, 2, 2, 399, 132, 3, 2, 2, 2, 400, 401, 7, 104, 2, 2, 401, 402, 7, 99, 2, 2, 402, 403, 7, 110, 2, 2, 403, 404, 7, 117, 2, 2, 404, 405, 7, 103, 2, 2, 405, 134, 3, 2, 2, 2, 406, 407, 7, 112, 2, 2, 407, 408, 7, 119, 2, 2, 408, 409, 7, 110, 2, 2, 409, 410, 7, 110, 2, 2, 410, 136, 3, 2, 2, 2, 411, 412, 7, 117, 2, 2, 412, 413, 7, 119, 2, 2, 413, 414, 7, 114, 2, 2, 414, 415, 7, 103, 2, 2, 415, 416, 7, 116, 2, 2, 416, 138, 3, 2, 2, 2, 417, 419, 5, 149, 75, 2, 418, 417, 3, 2, 2, 2, 419, 420, 3, 2, 2, 2, 420, 418, 3, 2, 2, 2, 420, 421, 3, 2, 2, 2, 421, 140, 3, 2, 2, 2, 422, 424, 5, 149, 75, 2, 423, 422, 3, 2, 2, 2, 424, 425, 3, 2, 2, 2, 425, 423, 3, 2, 2, 2, 425, 426, 3, 2, 2, 2, 426, 427, 3, 2, 2, 2, 427, 429, 7, 48, 2, 2, 428, 430, 5, 149, 75, 2, 429, 428, 3, 2, 2, 2, 430, 431, 3, 2, 2, 2, 431, 429, 3, 2, 2, 2, 431, 432, 3, 2, 2, 2, 432, 442, 3, 2, 2, 2, 433, 435, 7, 103, 2, 2, 434, 436, 7, 47, 2, 2, 435, 434, 3, 2, 2, 2, 435, 436, 3, 2, 2, 2, 436, 438, 3, 2, 2, 2, 437, 439, 5, 149, 75, 2, 438, 437, 3, 2, 2, 2, 439, 440, 3, 2, 2, 2, 440, 438, 3, 2, 2, 2, 440, 441, 3, 2, 2, 2, 441, 443, 3, 2, 2, 2, 442, 433, 3, 2, 2, 2, 442, 443, 3, 2, 2, 2, 443, 142, 3, 2, 2, 2, 444, 450, 7, 41, 2, 2, 445, 449, 10, 2, 2, 2, 446, 447, 7, 94, 2, 2, 447, 449, 9, 3, 2, 2, 448, 445, 3, 2, 2, 2, 448, 446, 3, 2, 2, 2, 449, 452, 3, 2, 2, 2, 450, 448, 3, 2, 2, 2, 450, 451, 3, 2, 2, 2, 451, 453, 3, 2, 2, 2, 452, 450, 3, 2, 2, 2, 453, 454, 7, 41, 2, 2, 454, 144, 3, 2, 2, 2, 455, 461, 7, 36, 2, 2, 456, 460, 10, 4, 2, 2, 457, 458, 7, 94, 2, 2, 458, 460, 9, 5, 2, 2, 459, 456, 3, 2, 2, 2, 459, 457, 3, 2, 2, 2, 460, 463, 3, 2, 2, 2, 461, 459, 3, 2, 2, 2, 461, 462, 3, 2, 2, 2, 462, 464, 3, 2, 2, 2, 463, 461, 3, 2, 2, 2, 464, 465, 7, 36, 2, 2, 465, 146, 3, 2, 2, 2, 466, 470, 5, 151, 76, 2, 467, 469, 5, 153, 77, 2, 468, 467, 3, 2, 2, 2, 469, 472, 3, 2, 2, 2, 470, 468, 3, 2, 2, 2, 470, 471, 3, 2, 2, 2, 471, 148, 3, 2, 2, 2, 472, 470, 3, 2, 2, 2, 473, 474, 9, 6, 2, 2, 474, 150, 3, 2, 2, 2, 475, 476, 9, 7, 2, 2, 476, 152, 3, 2, 2, 2, 477, 481, 5, 151, 76, 2, 478, 481, 5, 149, 75, 2, 479, 481, 9, 8, 2, 2, 480, 477, 3, 2, 2, 2, 480, 478, 3, 2, 2, 2, 480, 479, 3, 2, 2, 2, 481, 154, 3, 2, 2, 2, 482, 483, 7, 47, 2, 2, 483, 484, 7, 47, 2, 2, 484, 488, 3, 2, 2, 2, 485, 487, 10, 9, 2, 2, 486, 485, 3, 2, 2, 2, 487, 490, 3, 2, 2, 2, 488, 486, 3, 2, 2, 2, 488, 489, 3, 2, 2, 2, 489, 491, 3, 2, 2, 2, 490, 488, 3, 2, 2, 2, 491, 492, 8, 78, 2, 2, 492, 156, 3, 2, 2, 2, 493, 495, 9, 10, 2, 2, 494, 493, 3, 2, 2, 2, 495, 496, 3, 2, 2, 2, 496, 494, 3, 2, 2, 2, 496, 497, 3, 2, 2, 2, 497, 498, 3, 2, 2, 2, 498, 499, 8, 79, 2, 2, 499, 158, 3, 2, 2, 2, 500, 501, 11, 2, 2, 2, 501, 160, 3, 2, 2, 2, 17, 2, 420, 425, 431, 435, 440, 442, 448, 450, 459, 461, 470, 480, 488, 496, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 79, 513, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 71, 6, 71, 430, 10, 71, 13, 71, 14, 71, 431, 3, 72, 6, 72, 435, 10, 72, 13, 72, 14, 72, 436, 3, 72, 3, 72, 6, 72, 441, 10, 72, 13, 72, 14, 72, 442, 3, 72, 3, 72, 5, 72, 447, 10, 72, 3, 72, 6, 72, 450, 10, 72, 13, 72, 14, 72, 451, 5, 72, 454, 10, 72, 3, 73, 3, 73, 3, 73, 3, 73, 7, 73, 460, 10, 73, 12, 73, 14, 73, 463, 11, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 74, 7, 74, 471, 10, 74, 12, 74, 14, 74, 474, 11, 74, 3, 74, 3, 74, 3, 75, 3, 75, 7, 75, 480, 10, 75, 12, 75, 14, 75, 483, 11, 75, 3, 76, 3, 76, 3, 77, 3, 77, 3, 78, 3, 78, 3, 78, 5, 78, 492, 10, 78, 3, 79, 3, 79, 3, 79, 3, 79, 7, 79, 498, 10, 79, 12, 79, 14, 79, 501, 11, 79, 3, 79, 3, 79, 3, 80, 6, 80, 506, 10, 80, 13, 80, 14, 80, 507, 3, 80, 3, 80, 3, 81, 3, 81, 2, 2, 82, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 74, 147, 75, 149, 76, 151, 2, 153, 2, 155, 2, 157, 77, 159, 78, 161, 79, 3, 2, 11, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 3, 2, 41, 41, 4, 2, 12, 12, 14, 15, 5, 2, 11, 12, 15, 15, 34, 34, 2, 524, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 2, 161, 3, 2, 2, 2, 3, 163, 3, 2, 2, 2, 5, 165, 3, 2, 2, 2, 7, 169, 3, 2, 2, 2, 9, 174, 3, 2, 2, 2, 11, 181, 3, 2, 2, 2, 13, 184, 3, 2, 2, 2, 15, 189, 3, 2, 2, 2, 17, 195, 3, 2, 2, 2, 19, 197, 3, 2, 2, 2, 21, 199, 3, 2, 2, 2, 23, 201, 3, 2, 2, 2, 25, 203, 3, 2, 2, 2, 27, 205, 3, 2, 2, 2, 29, 207, 3, 2, 2, 2, 31, 209, 3, 2, 2, 2, 33, 212, 3, 2, 2, 2, 35, 215, 3, 2, 2, 2, 37, 217, 3, 2, 2, 2, 39, 219, 3, 2, 2, 2, 41, 221, 3, 2, 2, 2, 43, 224, 3, 2, 2, 2, 45, 230, 3, 2, 2, 2, 47, 239, 3, 2, 2, 2, 49, 246, 3, 2, 2, 2, 51, 248, 3, 2, 2, 2, 53, 251, 3, 2, 2, 2, 55, 254, 3, 2, 2, 2, 57, 259, 3, 2, 2, 2, 59, 264, 3, 2, 2, 2, 61, 270, 3, 2, 2, 2, 63, 276, 3, 2, 2, 2, 65, 280, 3, 2, 2, 2, 67, 283, 3, 2, 2, 2, 69, 288, 3, 2, 2, 2, 71, 293, 3, 2, 2, 2, 73, 295, 3, 2, 2, 2, 75, 297, 3, 2, 2, 2, 77, 301, 3, 2, 2, 2, 79, 308, 3, 2, 2, 2, 81, 314, 3, 2, 2, 2, 83, 316, 3, 2, 2, 2, 85, 318, 3, 2, 2, 2, 87, 320, 3, 2, 2, 2, 89, 322, 3, 2, 2, 2, 91, 324, 3, 2, 2, 2, 93, 333, 3, 2, 2, 2, 95, 345, 3, 2, 2, 2, 97, 347, 3, 2, 2, 2, 99, 349, 3, 2, 2, 2, 101, 351, 3, 2, 2, 2, 103, 353, 3, 2, 2, 2, 105, 355, 3, 2, 2, 2, 107, 357, 3, 2, 2, 2, 109, 360, 3, 2, 2, 2, 111, 364, 3, 2, 2, 2, 113, 367, 3, 2, 2, 2, 115, 373, 3, 2, 2, 2, 117, 376, 3, 2, 2, 2, 119, 379, 3, 2, 2, 2, 121, 382, 3, 2, 2, 2, 123, 385, 3, 2, 2, 2, 125, 389, 3, 2, 2, 2, 127, 393, 3, 2, 2, 2, 129, 396, 3, 2, 2, 2, 131, 403, 3, 2, 2, 2, 133, 406, 3, 2, 2, 2, 135, 411, 3, 2, 2, 2, 137, 417, 3, 2, 2, 2, 139, 422, 3, 2, 2, 2, 141, 429, 3, 2, 2, 2, 143, 434, 3, 2, 2, 2, 145, 455, 3, 2, 2, 2, 147, 466, 3, 2, 2, 2, 149, 477, 3, 2, 2, 2, 151, 484, 3, 2, 2, 2, 153, 486, 3, 2, 2, 2, 155, 491, 3, 2, 2, 2, 157, 493, 3, 2, 2, 2, 159, 505, 3, 2, 2, 2, 161, 511, 3, 2, 2, 2, 163, 164, 7, 61, 2, 2, 164, 4, 3, 2, 2, 2, 165, 166, 7, 119, 2, 2, 166, 167, 7, 117, 2, 2, 167, 168, 7, 103, 2, 2, 168, 6, 3, 2, 2, 2, 169, 170, 7, 113, 2, 2, 170, 171, 7, 112, 2, 2, 171, 172, 7, 110, 2, 2, 172, 173, 7, 123, 2, 2, 173, 8, 3, 2, 2, 2, 174, 175, 7, 106, 2, 2, 175, 176, 7, 107, 2, 2, 176, 177, 7, 102, 2, 2, 177, 178, 7, 107, 2, 2, 178, 179, 7, 112, 2, 2, 179, 180, 7, 105, 2, 2, 180, 10, 3, 2, 2, 2, 181, 182, 7, 99, 2, 2, 182, 183, 7, 117, 2, 2, 183, 12, 3, 2, 2, 2, 184, 185, 7, 117, 2, 2, 185, 186, 7, 109, 2, 2, 186, 187, 7, 107, 2, 2, 187, 188, 7, 114, 2, 2, 188, 14, 3, 2, 2, 2, 189, 190, 7, 114, 2, 2, 190, 191, 7, 116, 2, 2, 191, 192, 7, 107, 2, 2, 192, 193, 7, 112, 2, 2, 193, 194, 7, 118, 2, 2, 194, 16, 3, 2, 2, 2, 195, 196, 7, 63, 2, 2, 196, 18, 3, 2, 2, 2, 197, 198, 7, 96, 2, 2, 198, 20, 3, 2, 2, 2, 199, 200, 7, 44, 2, 2, 200, 22, 3, 2, 2, 2, 201, 202, 7, 49, 2, 2, 202, 24, 3, 2, 2, 2, 203, 204, 7, 39, 2, 2, 204, 26, 3, 2, 2, 2, 205, 206, 7, 45, 2, 2, 206, 28, 3, 2, 2, 2, 207, 208, 7, 47, 2, 2, 208, 30, 3, 2, 2, 2, 209, 210, 7, 62, 2, 2, 210, 211, 7, 62, 2, 2, 211, 32, 3, 2, 2, 2, 212, 213, 7, 64, 2, 2, 213, 214, 7, 64, 2, 2, 214, 34, 3, 2, 2, 2, 215, 216, 7, 40, 2, 2, 216, 36, 3, 2, 2, 2, 217, 218, 7, 38, 2, 2, 218, 38, 3, 2, 2, 2, 219, 220, 7, 126, 2, 2, 220, 40, 3, 2, 2, 2, 221, 222, 7, 65, 2, 2, 222, 223, 7, 65, 2, 2, 223, 42, 3, 2, 2, 2, 224, 225, 7, 100, 2, 2, 225, 226, 7, 116, 2, 2, 226, 227, 7, 103, 2, 2, 227, 228, 7, 99, 2, 2, 228, 229, 7, 109, 2, 2, 229, 44, 3, 2, 2, 2, 230, 231, 7, 101, 2, 2, 231, 232, 7, 113, 2, 2, 232, 233, 7, 112, 2, 2, 233, 234, 7, 118, 2, 2, 234, 235, 7, 107, 2, 2, 235, 236, 7, 112, 2, 2, 236, 237, 7, 119, 2, 2, 237, 238, 7, 103, 2, 2, 238, 46, 3, 2, 2, 2, 239, 240, 7, 116, 2, 2, 240, 241, 7, 103, 2, 2, 241, 242, 7, 118, 2, 2, 242, 243, 7, 119, 2, 2, 243, 244, 7, 116, 2, 2, 244, 245, 7, 112, 2, 2, 245, 48, 3, 2, 2, 2, 246, 247, 7, 46, 2, 2, 247, 50, 3, 2, 2, 2, 248, 249, 7, 107, 2, 2, 249, 250, 7, 104, 2, 2, 250, 52, 3, 2, 2, 2, 251, 252, 7, 102, 2, 2, 252, 253, 7, 113, 2, 2, 253, 54, 3, 2, 2, 2, 254, 255, 7, 103, 2, 2, 255, 256, 7, 110, 2, 2, 256, 257, 7, 107, 2, 2, 257, 258, 7, 104, 2, 2, 258, 56, 3, 2, 2, 2, 259, 260, 7, 103, 2, 2, 260, 261, 7, 110, 2, 2, 261, 262, 7, 117, 2, 2, 262, 263, 7, 103, 2, 2, 263, 58, 3, 2, 2, 2, 264, 265, 7, 121, 2, 2, 265, 266, 7, 106, 2, 2, 266, 267, 7, 107, 2, 2, 267, 268, 7, 110, 2, 2, 268, 269, 7, 103, 2, 2, 269, 60, 3, 2, 2, 2, 270, 271, 7, 119, 2, 2, 271, 272, 7, 112, 2, 2, 272, 273, 7, 118, 2, 2, 273, 274, 7, 107, 2, 2, 274, 275, 7, 110, 2, 2, 275, 62, 3, 2, 2, 2, 276, 277, 7, 104, 2, 2, 277, 278, 7, 113, 2, 2, 278, 279, 7, 116, 2, 2, 279, 64, 3, 2, 2, 2, 280, 281, 7, 107, 2, 2, 281, 282, 7, 112, 2, 2, 282, 66, 3, 2, 2, 2, 283, 284, 7, 117, 2, 2, 284, 285, 7, 118, 2, 2, 285, 286, 7, 103, 2, 2, 286, 287, 7, 114, 2, 2, 287, 68, 3, 2, 2, 2, 288, 289, 7, 104, 2, 2, 289, 290, 7, 119, 2, 2, 290, 291, 7, 112, 2, 2, 291, 292, 7, 101, 2, 2, 292, 70, 3, 2, 2, 2, 293, 294, 7, 62, 2, 2, 294, 72, 3, 2, 2, 2, 295, 296, 7, 64, 2, 2, 296, 74, 3, 2, 2, 2, 297, 298, 7, 102, 2, 2, 298, 299, 7, 103, 2, 2, 299, 300, 7, 104, 2, 2, 300, 76, 3, 2, 2, 2, 301, 302, 7, 103, 2, 2, 302, 303, 7, 122, 2, 2, 303, 304, 7, 118, 2, 2, 304, 305, 7, 103, 2, 2, 305, 306, 7, 116, 2, 2, 306, 307, 7, 112, 2, 2, 307, 78, 3, 2, 2, 2, 308, 309, 7, 101, 2, 2, 309, 310, 7, 110, 2, 2, 310, 311, 7, 99, 2, 2, 311, 312, 7, 117, 2, 2, 312, 313, 7, 117, 2, 2, 313, 80, 3, 2, 2, 2, 314, 315, 7, 42, 2, 2, 315, 82, 3, 2, 2, 2, 316, 317, 7, 43, 2, 2, 317, 84, 3, 2, 2, 2, 318, 319, 7, 125, 2, 2, 319, 86, 3, 2, 2, 2, 320, 321, 7, 127, 2, 2, 321, 88, 3, 2, 2, 2, 322, 323, 7, 60, 2, 2, 323, 90, 3, 2, 2, 2, 324, 325, 7, 99, 2, 2, 325, 326, 7, 100, 2, 2, 326, 327, 7, 117, 2, 2, 327, 328, 7, 118, 2, 2, 328, 329, 7, 116, 2, 2, 329, 330, 7, 99, 2, 2, 330, 331, 7, 101, 2, 2, 331, 332, 7, 118, 2, 2, 332, 92, 3, 2, 2, 2, 333, 334, 7, 101, 2, 2, 334, 335, 7, 113, 2, 2, 335, 336, 7, 112, 2, 2, 336, 337, 7, 117, 2, 2, 337, 338, 7, 118, 2, 2, 338, 339, 7, 116, 2, 2, 339, 340, 7, 119, 2, 2, 340, 341, 7, 101, 2, 2, 341, 342, 7, 118, 2, 2, 342, 343, 7, 113, 2, 2, 343, 344, 7, 116, 2, 2, 344, 94, 3, 2, 2, 2, 345, 346, 7, 93, 2, 2, 346, 96, 3, 2, 2, 2, 347, 348, 7, 95, 2, 2, 348, 98, 3, 2, 2, 2, 349, 350, 7, 65, 2, 2, 350, 100, 3, 2, 2, 2, 351, 352, 7, 48, 2, 2, 352, 102, 3, 2, 2, 2, 353, 354, 7, 35, 2, 2, 354, 104, 3, 2, 2, 2, 355, 356, 7, 128, 2, 2, 356, 106, 3, 2, 2, 2, 357, 358, 7, 48, 2, 2, 358, 359, 7, 48, 2, 2, 359, 108, 3, 2, 2, 2, 360, 361, 7, 48, 2, 2, 361, 362, 7, 48, 2, 2, 362, 363, 7, 48, 2, 2, 363, 110, 3, 2, 2, 2, 364, 365, 7, 107, 2, 2, 365, 366, 7, 117, 2, 2, 366, 112, 3, 2, 2, 2, 367, 368, 7, 107, 2, 2, 368, 369, 7, 117, 2, 2, 369, 370, 7, 112, 2, 2, 370, 371, 7, 41, 2, 2, 371, 372, 7, 118, 2, 2, 372, 114, 3, 2, 2, 2, 373, 374, 7, 63, 2, 2, 374, 375, 7, 63, 2, 2, 375, 116, 3, 2, 2, 2, 376, 377, 7, 35, 2, 2, 377, 378, 7, 63, 2, 2, 378, 118, 3, 2, 2, 2, 379, 380, 7, 62, 2, 2, 380, 381, 7, 63, 2, 2, 381, 120, 3, 2, 2, 2, 382, 383, 7, 64, 2, 2, 383, 384, 7, 63, 2, 2, 384, 122, 3, 2, 2, 2, 385, 386, 7, 112, 2, 2, 386, 387, 7, 113, 2, 2, 387, 388, 7, 118, 2, 2, 388, 124, 3, 2, 2, 2, 389, 390, 7, 99, 2, 2, 390, 391, 7, 112, 2, 2, 391, 392, 7, 102, 2, 2, 392, 126, 3, 2, 2, 2, 393, 394, 7, 113, 2, 2, 394, 395, 7, 116, 2, 2, 395, 128, 3, 2, 2, 2, 396, 397, 7, 110, 2, 2, 397, 398, 7, 99, 2, 2, 398, 399, 7, 111, 2, 2, 399, 400, 7, 100, 2, 2, 400, 401, 7, 102, 2, 2, 401, 402, 7, 99, 2, 2, 402, 130, 3, 2, 2, 2, 403, 404, 7, 47, 2, 2, 404, 405, 7, 64, 2, 2, 405, 132, 3, 2, 2, 2, 406, 407, 7, 118, 2, 2, 407, 408, 7, 116, 2, 2, 408, 409, 7, 119, 2, 2, 409, 410, 7, 103, 2, 2, 410, 134, 3, 2, 2, 2, 411, 412, 7, 104, 2, 2, 412, 413, 7, 99, 2, 2, 413, 414, 7, 110, 2, 2, 414, 415, 7, 117, 2, 2, 415, 416, 7, 103, 2, 2, 416, 136, 3, 2, 2, 2, 417, 418, 7, 112, 2, 2, 418, 419, 7, 119, 2, 2, 419, 420, 7, 110, 2, 2, 420, 421, 7, 110, 2, 2, 421, 138, 3, 2, 2, 2, 422, 423, 7, 117, 2, 2, 423, 424, 7, 119, 2, 2, 424, 425, 7, 114, 2, 2, 425, 426, 7, 103, 2, 2, 426, 427, 7, 116, 2, 2, 427, 140, 3, 2, 2, 2, 428, 430, 5, 151, 76, 2, 429, 428, 3, 2, 2, 2, 430, 431, 3, 2, 2, 2, 431, 429, 3, 2, 2, 2, 431, 432, 3, 2, 2, 2, 432, 142, 3, 2, 2, 2, 433, 435, 5, 151, 76, 2, 434, 433, 3, 2, 2, 2, 435, 436, 3, 2, 2, 2, 436, 434, 3, 2, 2, 2, 436, 437, 3, 2, 2, 2, 437, 438, 3, 2, 2, 2, 438, 440, 7, 48, 2, 2, 439, 441, 5, 151, 76, 2, 440, 439, 3, 2, 2, 2, 441, 442, 3, 2, 2, 2, 442, 440, 3, 2, 2, 2, 442, 443, 3, 2, 2, 2, 443, 453, 3, 2, 2, 2, 444, 446, 7, 103, 2, 2, 445, 447, 7, 47, 2, 2, 446, 445, 3, 2, 2, 2, 446, 447, 3, 2, 2, 2, 447, 449, 3, 2, 2, 2, 448, 450, 5, 151, 76, 2, 449, 448, 3, 2, 2, 2, 450, 451, 3, 2, 2, 2, 451, 449, 3, 2, 2, 2, 451, 452, 3, 2, 2, 2, 452, 454, 3, 2, 2, 2, 453, 444, 3, 2, 2, 2, 453, 454, 3, 2, 2, 2, 454, 144, 3, 2, 2, 2, 455, 461, 7, 41, 2, 2, 456, 460, 10, 2, 2, 2, 457, 458, 7, 94, 2, 2, 458, 460, 9, 3, 2, 2, 459, 456, 3, 2, 2, 2, 459, 457, 3, 2, 2, 2, 460, 463, 3, 2, 2, 2, 461, 459, 3, 2, 2, 2, 461, 462, 3, 2, 2, 2, 462, 464, 3, 2, 2, 2, 463, 461, 3, 2, 2, 2, 464, 465, 7, 41, 2, 2, 465, 146, 3, 2, 2, 2, 466, 472, 7, 36, 2, 2, 467, 471, 10, 4, 2, 2, 468, 469, 7, 94, 2, 2, 469, 471, 9, 5, 2, 2, 470, 467, 3, 2, 2, 2, 470, 468, 3, 2, 2, 2, 471, 474, 3, 2, 2, 2, 472, 470, 3, 2, 2, 2, 472, 473, 3, 2, 2, 2, 473, 475, 3, 2, 2, 2, 474, 472, 3, 2, 2, 2, 475, 476, 7, 36, 2, 2, 476, 148, 3, 2, 2, 2, 477, 481, 5, 153, 77, 2, 478, 480, 5, 155, 78, 2, 479, 478, 3, 2, 2, 2, 480, 483, 3, 2, 2, 2, 481, 479, 3, 2, 2, 2, 481, 482, 3, 2, 2, 2, 482, 150, 3, 2, 2, 2, 483, 481, 3, 2, 2, 2, 484, 485, 9, 6, 2, 2, 485, 152, 3, 2, 2, 2, 486, 487, 9, 7, 2, 2, 487, 154, 3, 2, 2, 2, 488, 492, 5, 153, 77, 2, 489, 492, 5, 151, 76, 2, 490, 492, 9, 8, 2, 2, 491, 488, 3, 2, 2, 2, 491, 489, 3, 2, 2, 2, 491, 490, 3, 2, 2, 2, 492, 156, 3, 2, 2, 2, 493, 494, 7, 47, 2, 2, 494, 495, 7, 47, 2, 2, 495, 499, 3, 2, 2, 2, 496, 498, 10, 9, 2, 2, 497, 496, 3, 2, 2, 2, 498, 501, 3, 2, 2, 2, 499, 497, 3, 2, 2, 2, 499, 500, 3, 2, 2, 2, 500, 502, 3, 2, 2, 2, 501, 499, 3, 2, 2, 2, 502, 503, 8, 79, 2, 2, 503, 158, 3, 2, 2, 2, 504, 506, 9, 10, 2, 2, 505, 504, 3, 2, 2, 2, 506, 507, 3, 2, 2, 2, 507, 505, 3, 2, 2, 2, 507, 508, 3, 2, 2, 2, 508, 509, 3, 2, 2, 2, 509, 510, 8, 80, 2, 2, 510, 160, 3, 2, 2, 2, 511, 512, 11, 2, 2, 2, 512, 162, 3, 2, 2, 2, 17, 2, 431, 436, 442, 446, 451, 453, 459, 461, 470, 472, 481, 491, 499, 507, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py index d4609378..b1b078bc 100644 --- a/src/antlr/PyxellLexer.py +++ b/src/antlr/PyxellLexer.py @@ -8,8 +8,8 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2N") - buf.write("\u01f6\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2O") + buf.write("\u0201\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") @@ -20,206 +20,211 @@ def serializedATN(): buf.write("\t\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:") buf.write("\4;\t;\4<\t<\4=\t=\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\t") buf.write("C\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I\tI\4J\tJ\4K\tK\4L\t") - buf.write("L\4M\tM\4N\tN\4O\tO\4P\tP\3\2\3\2\3\3\3\3\3\3\3\3\3\4") - buf.write("\3\4\3\4\3\4\3\4\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3") - buf.write("\6\3\7\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3\t") - buf.write("\3\n\3\n\3\13\3\13\3\f\3\f\3\r\3\r\3\16\3\16\3\17\3\17") - buf.write("\3\20\3\20\3\20\3\21\3\21\3\21\3\22\3\22\3\23\3\23\3\24") - buf.write("\3\24\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\26\3\27") - buf.write("\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\30\3\30\3\30") - buf.write("\3\30\3\30\3\30\3\30\3\31\3\31\3\32\3\32\3\32\3\33\3\33") - buf.write("\3\33\3\34\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35") - buf.write("\3\36\3\36\3\36\3\36\3\36\3\36\3\37\3\37\3\37\3\37\3\37") - buf.write("\3\37\3 \3 \3 \3 \3!\3!\3!\3\"\3\"\3\"\3\"\3\"\3#\3#\3") - buf.write("#\3#\3#\3$\3$\3%\3%\3&\3&\3&\3&\3\'\3\'\3\'\3\'\3\'\3") - buf.write("\'\3\'\3(\3(\3(\3(\3(\3(\3)\3)\3*\3*\3+\3+\3,\3,\3-\3") - buf.write("-\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3/\3/\3\60\3\60") - buf.write("\3\61\3\61\3\62\3\62\3\63\3\63\3\64\3\64\3\65\3\65\3\65") - buf.write("\3\66\3\66\3\66\3\66\3\67\3\67\3\67\38\38\38\38\38\38") - buf.write("\39\39\39\3:\3:\3:\3;\3;\3;\3<\3<\3<\3=\3=\3=\3=\3>\3") - buf.write(">\3>\3>\3?\3?\3?\3@\3@\3@\3@\3@\3@\3@\3A\3A\3A\3B\3B\3") - buf.write("B\3B\3B\3C\3C\3C\3C\3C\3C\3D\3D\3D\3D\3D\3E\3E\3E\3E\3") - buf.write("E\3E\3F\6F\u01a3\nF\rF\16F\u01a4\3G\6G\u01a8\nG\rG\16") - buf.write("G\u01a9\3G\3G\6G\u01ae\nG\rG\16G\u01af\3G\3G\5G\u01b4") - buf.write("\nG\3G\6G\u01b7\nG\rG\16G\u01b8\5G\u01bb\nG\3H\3H\3H\3") - buf.write("H\7H\u01c1\nH\fH\16H\u01c4\13H\3H\3H\3I\3I\3I\3I\7I\u01cc") - buf.write("\nI\fI\16I\u01cf\13I\3I\3I\3J\3J\7J\u01d5\nJ\fJ\16J\u01d8") - buf.write("\13J\3K\3K\3L\3L\3M\3M\3M\5M\u01e1\nM\3N\3N\3N\3N\7N\u01e7") - buf.write("\nN\fN\16N\u01ea\13N\3N\3N\3O\6O\u01ef\nO\rO\16O\u01f0") - buf.write("\3O\3O\3P\3P\2\2Q\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23") - buf.write("\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25") - buf.write(")\26+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A") - buf.write("\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65") - buf.write("i\66k\67m8o9q:s;u{?}@\177A\u0081B\u0083C\u0085D\u0087") - buf.write("E\u0089F\u008bG\u008dH\u008fI\u0091J\u0093K\u0095\2\u0097") - buf.write("\2\u0099\2\u009bL\u009dM\u009fN\3\2\13\4\2))^^\6\2))^") - buf.write("^ppvv\4\2$$^^\6\2$$^^ppvv\3\2\62;\5\2C\\aac|\3\2))\4\2") - buf.write("\f\f\16\17\5\2\13\f\17\17\"\"\2\u0201\2\3\3\2\2\2\2\5") - buf.write("\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2") - buf.write("\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2") - buf.write("\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2") - buf.write("\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2") - buf.write("\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61") - buf.write("\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2") - buf.write("\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3") - buf.write("\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M") - buf.write("\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2") - buf.write("W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2") - buf.write("\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2") - buf.write("\2\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2\2s\3\2") - buf.write("\2\2\2u\3\2\2\2\2w\3\2\2\2\2y\3\2\2\2\2{\3\2\2\2\2}\3") - buf.write("\2\2\2\2\177\3\2\2\2\2\u0081\3\2\2\2\2\u0083\3\2\2\2\2") - buf.write("\u0085\3\2\2\2\2\u0087\3\2\2\2\2\u0089\3\2\2\2\2\u008b") - buf.write("\3\2\2\2\2\u008d\3\2\2\2\2\u008f\3\2\2\2\2\u0091\3\2\2") - buf.write("\2\2\u0093\3\2\2\2\2\u009b\3\2\2\2\2\u009d\3\2\2\2\2\u009f") - buf.write("\3\2\2\2\3\u00a1\3\2\2\2\5\u00a3\3\2\2\2\7\u00a7\3\2\2") - buf.write("\2\t\u00ac\3\2\2\2\13\u00b3\3\2\2\2\r\u00b6\3\2\2\2\17") - buf.write("\u00bb\3\2\2\2\21\u00c1\3\2\2\2\23\u00c3\3\2\2\2\25\u00c5") - buf.write("\3\2\2\2\27\u00c7\3\2\2\2\31\u00c9\3\2\2\2\33\u00cb\3") - buf.write("\2\2\2\35\u00cd\3\2\2\2\37\u00cf\3\2\2\2!\u00d2\3\2\2") - buf.write("\2#\u00d5\3\2\2\2%\u00d7\3\2\2\2\'\u00d9\3\2\2\2)\u00db") - buf.write("\3\2\2\2+\u00de\3\2\2\2-\u00e4\3\2\2\2/\u00ed\3\2\2\2") - buf.write("\61\u00f4\3\2\2\2\63\u00f6\3\2\2\2\65\u00f9\3\2\2\2\67") - buf.write("\u00fc\3\2\2\29\u0101\3\2\2\2;\u0106\3\2\2\2=\u010c\3") - buf.write("\2\2\2?\u0112\3\2\2\2A\u0116\3\2\2\2C\u0119\3\2\2\2E\u011e") - buf.write("\3\2\2\2G\u0123\3\2\2\2I\u0125\3\2\2\2K\u0127\3\2\2\2") - buf.write("M\u012b\3\2\2\2O\u0132\3\2\2\2Q\u0138\3\2\2\2S\u013a\3") - buf.write("\2\2\2U\u013c\3\2\2\2W\u013e\3\2\2\2Y\u0140\3\2\2\2[\u0142") - buf.write("\3\2\2\2]\u014e\3\2\2\2_\u0150\3\2\2\2a\u0152\3\2\2\2") - buf.write("c\u0154\3\2\2\2e\u0156\3\2\2\2g\u0158\3\2\2\2i\u015a\3") - buf.write("\2\2\2k\u015d\3\2\2\2m\u0161\3\2\2\2o\u0164\3\2\2\2q\u016a") - buf.write("\3\2\2\2s\u016d\3\2\2\2u\u0170\3\2\2\2w\u0173\3\2\2\2") - buf.write("y\u0176\3\2\2\2{\u017a\3\2\2\2}\u017e\3\2\2\2\177\u0181") - buf.write("\3\2\2\2\u0081\u0188\3\2\2\2\u0083\u018b\3\2\2\2\u0085") - buf.write("\u0190\3\2\2\2\u0087\u0196\3\2\2\2\u0089\u019b\3\2\2\2") - buf.write("\u008b\u01a2\3\2\2\2\u008d\u01a7\3\2\2\2\u008f\u01bc\3") - buf.write("\2\2\2\u0091\u01c7\3\2\2\2\u0093\u01d2\3\2\2\2\u0095\u01d9") - buf.write("\3\2\2\2\u0097\u01db\3\2\2\2\u0099\u01e0\3\2\2\2\u009b") - buf.write("\u01e2\3\2\2\2\u009d\u01ee\3\2\2\2\u009f\u01f4\3\2\2\2") - buf.write("\u00a1\u00a2\7=\2\2\u00a2\4\3\2\2\2\u00a3\u00a4\7w\2\2") - buf.write("\u00a4\u00a5\7u\2\2\u00a5\u00a6\7g\2\2\u00a6\6\3\2\2\2") - buf.write("\u00a7\u00a8\7q\2\2\u00a8\u00a9\7p\2\2\u00a9\u00aa\7n") - buf.write("\2\2\u00aa\u00ab\7{\2\2\u00ab\b\3\2\2\2\u00ac\u00ad\7") - buf.write("j\2\2\u00ad\u00ae\7k\2\2\u00ae\u00af\7f\2\2\u00af\u00b0") - buf.write("\7k\2\2\u00b0\u00b1\7p\2\2\u00b1\u00b2\7i\2\2\u00b2\n") - buf.write("\3\2\2\2\u00b3\u00b4\7c\2\2\u00b4\u00b5\7u\2\2\u00b5\f") - buf.write("\3\2\2\2\u00b6\u00b7\7u\2\2\u00b7\u00b8\7m\2\2\u00b8\u00b9") - buf.write("\7k\2\2\u00b9\u00ba\7r\2\2\u00ba\16\3\2\2\2\u00bb\u00bc") - buf.write("\7r\2\2\u00bc\u00bd\7t\2\2\u00bd\u00be\7k\2\2\u00be\u00bf") - buf.write("\7p\2\2\u00bf\u00c0\7v\2\2\u00c0\20\3\2\2\2\u00c1\u00c2") - buf.write("\7?\2\2\u00c2\22\3\2\2\2\u00c3\u00c4\7`\2\2\u00c4\24\3") - buf.write("\2\2\2\u00c5\u00c6\7,\2\2\u00c6\26\3\2\2\2\u00c7\u00c8") - buf.write("\7\61\2\2\u00c8\30\3\2\2\2\u00c9\u00ca\7\'\2\2\u00ca\32") - buf.write("\3\2\2\2\u00cb\u00cc\7-\2\2\u00cc\34\3\2\2\2\u00cd\u00ce") - buf.write("\7/\2\2\u00ce\36\3\2\2\2\u00cf\u00d0\7>\2\2\u00d0\u00d1") - buf.write("\7>\2\2\u00d1 \3\2\2\2\u00d2\u00d3\7@\2\2\u00d3\u00d4") - buf.write("\7@\2\2\u00d4\"\3\2\2\2\u00d5\u00d6\7(\2\2\u00d6$\3\2") - buf.write("\2\2\u00d7\u00d8\7&\2\2\u00d8&\3\2\2\2\u00d9\u00da\7~") - buf.write("\2\2\u00da(\3\2\2\2\u00db\u00dc\7A\2\2\u00dc\u00dd\7A") - buf.write("\2\2\u00dd*\3\2\2\2\u00de\u00df\7d\2\2\u00df\u00e0\7t") - buf.write("\2\2\u00e0\u00e1\7g\2\2\u00e1\u00e2\7c\2\2\u00e2\u00e3") - buf.write("\7m\2\2\u00e3,\3\2\2\2\u00e4\u00e5\7e\2\2\u00e5\u00e6") - buf.write("\7q\2\2\u00e6\u00e7\7p\2\2\u00e7\u00e8\7v\2\2\u00e8\u00e9") - buf.write("\7k\2\2\u00e9\u00ea\7p\2\2\u00ea\u00eb\7w\2\2\u00eb\u00ec") - buf.write("\7g\2\2\u00ec.\3\2\2\2\u00ed\u00ee\7t\2\2\u00ee\u00ef") - buf.write("\7g\2\2\u00ef\u00f0\7v\2\2\u00f0\u00f1\7w\2\2\u00f1\u00f2") - buf.write("\7t\2\2\u00f2\u00f3\7p\2\2\u00f3\60\3\2\2\2\u00f4\u00f5") - buf.write("\7.\2\2\u00f5\62\3\2\2\2\u00f6\u00f7\7k\2\2\u00f7\u00f8") - buf.write("\7h\2\2\u00f8\64\3\2\2\2\u00f9\u00fa\7f\2\2\u00fa\u00fb") - buf.write("\7q\2\2\u00fb\66\3\2\2\2\u00fc\u00fd\7g\2\2\u00fd\u00fe") - buf.write("\7n\2\2\u00fe\u00ff\7k\2\2\u00ff\u0100\7h\2\2\u01008\3") - buf.write("\2\2\2\u0101\u0102\7g\2\2\u0102\u0103\7n\2\2\u0103\u0104") - buf.write("\7u\2\2\u0104\u0105\7g\2\2\u0105:\3\2\2\2\u0106\u0107") - buf.write("\7y\2\2\u0107\u0108\7j\2\2\u0108\u0109\7k\2\2\u0109\u010a") - buf.write("\7n\2\2\u010a\u010b\7g\2\2\u010b<\3\2\2\2\u010c\u010d") - buf.write("\7w\2\2\u010d\u010e\7p\2\2\u010e\u010f\7v\2\2\u010f\u0110") - buf.write("\7k\2\2\u0110\u0111\7n\2\2\u0111>\3\2\2\2\u0112\u0113") - buf.write("\7h\2\2\u0113\u0114\7q\2\2\u0114\u0115\7t\2\2\u0115@\3") - buf.write("\2\2\2\u0116\u0117\7k\2\2\u0117\u0118\7p\2\2\u0118B\3") - buf.write("\2\2\2\u0119\u011a\7u\2\2\u011a\u011b\7v\2\2\u011b\u011c") - buf.write("\7g\2\2\u011c\u011d\7r\2\2\u011dD\3\2\2\2\u011e\u011f") - buf.write("\7h\2\2\u011f\u0120\7w\2\2\u0120\u0121\7p\2\2\u0121\u0122") - buf.write("\7e\2\2\u0122F\3\2\2\2\u0123\u0124\7>\2\2\u0124H\3\2\2") - buf.write("\2\u0125\u0126\7@\2\2\u0126J\3\2\2\2\u0127\u0128\7f\2") - buf.write("\2\u0128\u0129\7g\2\2\u0129\u012a\7h\2\2\u012aL\3\2\2") - buf.write("\2\u012b\u012c\7g\2\2\u012c\u012d\7z\2\2\u012d\u012e\7") - buf.write("v\2\2\u012e\u012f\7g\2\2\u012f\u0130\7t\2\2\u0130\u0131") - buf.write("\7p\2\2\u0131N\3\2\2\2\u0132\u0133\7e\2\2\u0133\u0134") - buf.write("\7n\2\2\u0134\u0135\7c\2\2\u0135\u0136\7u\2\2\u0136\u0137") - buf.write("\7u\2\2\u0137P\3\2\2\2\u0138\u0139\7*\2\2\u0139R\3\2\2") - buf.write("\2\u013a\u013b\7+\2\2\u013bT\3\2\2\2\u013c\u013d\7}\2") - buf.write("\2\u013dV\3\2\2\2\u013e\u013f\7\177\2\2\u013fX\3\2\2\2") - buf.write("\u0140\u0141\7<\2\2\u0141Z\3\2\2\2\u0142\u0143\7e\2\2") - buf.write("\u0143\u0144\7q\2\2\u0144\u0145\7p\2\2\u0145\u0146\7u") - buf.write("\2\2\u0146\u0147\7v\2\2\u0147\u0148\7t\2\2\u0148\u0149") - buf.write("\7w\2\2\u0149\u014a\7e\2\2\u014a\u014b\7v\2\2\u014b\u014c") - buf.write("\7q\2\2\u014c\u014d\7t\2\2\u014d\\\3\2\2\2\u014e\u014f") - buf.write("\7]\2\2\u014f^\3\2\2\2\u0150\u0151\7_\2\2\u0151`\3\2\2") - buf.write("\2\u0152\u0153\7A\2\2\u0153b\3\2\2\2\u0154\u0155\7\60") - buf.write("\2\2\u0155d\3\2\2\2\u0156\u0157\7#\2\2\u0157f\3\2\2\2") - buf.write("\u0158\u0159\7\u0080\2\2\u0159h\3\2\2\2\u015a\u015b\7") - buf.write("\60\2\2\u015b\u015c\7\60\2\2\u015cj\3\2\2\2\u015d\u015e") - buf.write("\7\60\2\2\u015e\u015f\7\60\2\2\u015f\u0160\7\60\2\2\u0160") - buf.write("l\3\2\2\2\u0161\u0162\7k\2\2\u0162\u0163\7u\2\2\u0163") - buf.write("n\3\2\2\2\u0164\u0165\7k\2\2\u0165\u0166\7u\2\2\u0166") - buf.write("\u0167\7p\2\2\u0167\u0168\7)\2\2\u0168\u0169\7v\2\2\u0169") - buf.write("p\3\2\2\2\u016a\u016b\7?\2\2\u016b\u016c\7?\2\2\u016c") - buf.write("r\3\2\2\2\u016d\u016e\7#\2\2\u016e\u016f\7?\2\2\u016f") - buf.write("t\3\2\2\2\u0170\u0171\7>\2\2\u0171\u0172\7?\2\2\u0172") - buf.write("v\3\2\2\2\u0173\u0174\7@\2\2\u0174\u0175\7?\2\2\u0175") - buf.write("x\3\2\2\2\u0176\u0177\7p\2\2\u0177\u0178\7q\2\2\u0178") - buf.write("\u0179\7v\2\2\u0179z\3\2\2\2\u017a\u017b\7c\2\2\u017b") - buf.write("\u017c\7p\2\2\u017c\u017d\7f\2\2\u017d|\3\2\2\2\u017e") - buf.write("\u017f\7q\2\2\u017f\u0180\7t\2\2\u0180~\3\2\2\2\u0181") - buf.write("\u0182\7n\2\2\u0182\u0183\7c\2\2\u0183\u0184\7o\2\2\u0184") - buf.write("\u0185\7d\2\2\u0185\u0186\7f\2\2\u0186\u0187\7c\2\2\u0187") - buf.write("\u0080\3\2\2\2\u0188\u0189\7/\2\2\u0189\u018a\7@\2\2\u018a") - buf.write("\u0082\3\2\2\2\u018b\u018c\7v\2\2\u018c\u018d\7t\2\2\u018d") - buf.write("\u018e\7w\2\2\u018e\u018f\7g\2\2\u018f\u0084\3\2\2\2\u0190") - buf.write("\u0191\7h\2\2\u0191\u0192\7c\2\2\u0192\u0193\7n\2\2\u0193") - buf.write("\u0194\7u\2\2\u0194\u0195\7g\2\2\u0195\u0086\3\2\2\2\u0196") - buf.write("\u0197\7p\2\2\u0197\u0198\7w\2\2\u0198\u0199\7n\2\2\u0199") - buf.write("\u019a\7n\2\2\u019a\u0088\3\2\2\2\u019b\u019c\7u\2\2\u019c") - buf.write("\u019d\7w\2\2\u019d\u019e\7r\2\2\u019e\u019f\7g\2\2\u019f") - buf.write("\u01a0\7t\2\2\u01a0\u008a\3\2\2\2\u01a1\u01a3\5\u0095") - buf.write("K\2\u01a2\u01a1\3\2\2\2\u01a3\u01a4\3\2\2\2\u01a4\u01a2") - buf.write("\3\2\2\2\u01a4\u01a5\3\2\2\2\u01a5\u008c\3\2\2\2\u01a6") - buf.write("\u01a8\5\u0095K\2\u01a7\u01a6\3\2\2\2\u01a8\u01a9\3\2") - buf.write("\2\2\u01a9\u01a7\3\2\2\2\u01a9\u01aa\3\2\2\2\u01aa\u01ab") - buf.write("\3\2\2\2\u01ab\u01ad\7\60\2\2\u01ac\u01ae\5\u0095K\2\u01ad") - buf.write("\u01ac\3\2\2\2\u01ae\u01af\3\2\2\2\u01af\u01ad\3\2\2\2") - buf.write("\u01af\u01b0\3\2\2\2\u01b0\u01ba\3\2\2\2\u01b1\u01b3\7") - buf.write("g\2\2\u01b2\u01b4\7/\2\2\u01b3\u01b2\3\2\2\2\u01b3\u01b4") - buf.write("\3\2\2\2\u01b4\u01b6\3\2\2\2\u01b5\u01b7\5\u0095K\2\u01b6") - buf.write("\u01b5\3\2\2\2\u01b7\u01b8\3\2\2\2\u01b8\u01b6\3\2\2\2") - buf.write("\u01b8\u01b9\3\2\2\2\u01b9\u01bb\3\2\2\2\u01ba\u01b1\3") - buf.write("\2\2\2\u01ba\u01bb\3\2\2\2\u01bb\u008e\3\2\2\2\u01bc\u01c2") - buf.write("\7)\2\2\u01bd\u01c1\n\2\2\2\u01be\u01bf\7^\2\2\u01bf\u01c1") - buf.write("\t\3\2\2\u01c0\u01bd\3\2\2\2\u01c0\u01be\3\2\2\2\u01c1") - buf.write("\u01c4\3\2\2\2\u01c2\u01c0\3\2\2\2\u01c2\u01c3\3\2\2\2") - buf.write("\u01c3\u01c5\3\2\2\2\u01c4\u01c2\3\2\2\2\u01c5\u01c6\7") - buf.write(")\2\2\u01c6\u0090\3\2\2\2\u01c7\u01cd\7$\2\2\u01c8\u01cc") - buf.write("\n\4\2\2\u01c9\u01ca\7^\2\2\u01ca\u01cc\t\5\2\2\u01cb") - buf.write("\u01c8\3\2\2\2\u01cb\u01c9\3\2\2\2\u01cc\u01cf\3\2\2\2") - buf.write("\u01cd\u01cb\3\2\2\2\u01cd\u01ce\3\2\2\2\u01ce\u01d0\3") - buf.write("\2\2\2\u01cf\u01cd\3\2\2\2\u01d0\u01d1\7$\2\2\u01d1\u0092") - buf.write("\3\2\2\2\u01d2\u01d6\5\u0097L\2\u01d3\u01d5\5\u0099M\2") - buf.write("\u01d4\u01d3\3\2\2\2\u01d5\u01d8\3\2\2\2\u01d6\u01d4\3") - buf.write("\2\2\2\u01d6\u01d7\3\2\2\2\u01d7\u0094\3\2\2\2\u01d8\u01d6") - buf.write("\3\2\2\2\u01d9\u01da\t\6\2\2\u01da\u0096\3\2\2\2\u01db") - buf.write("\u01dc\t\7\2\2\u01dc\u0098\3\2\2\2\u01dd\u01e1\5\u0097") - buf.write("L\2\u01de\u01e1\5\u0095K\2\u01df\u01e1\t\b\2\2\u01e0\u01dd") - buf.write("\3\2\2\2\u01e0\u01de\3\2\2\2\u01e0\u01df\3\2\2\2\u01e1") - buf.write("\u009a\3\2\2\2\u01e2\u01e3\7/\2\2\u01e3\u01e4\7/\2\2\u01e4") - buf.write("\u01e8\3\2\2\2\u01e5\u01e7\n\t\2\2\u01e6\u01e5\3\2\2\2") - buf.write("\u01e7\u01ea\3\2\2\2\u01e8\u01e6\3\2\2\2\u01e8\u01e9\3") - buf.write("\2\2\2\u01e9\u01eb\3\2\2\2\u01ea\u01e8\3\2\2\2\u01eb\u01ec") - buf.write("\bN\2\2\u01ec\u009c\3\2\2\2\u01ed\u01ef\t\n\2\2\u01ee") - buf.write("\u01ed\3\2\2\2\u01ef\u01f0\3\2\2\2\u01f0\u01ee\3\2\2\2") - buf.write("\u01f0\u01f1\3\2\2\2\u01f1\u01f2\3\2\2\2\u01f2\u01f3\b") - buf.write("O\2\2\u01f3\u009e\3\2\2\2\u01f4\u01f5\13\2\2\2\u01f5\u00a0") - buf.write("\3\2\2\2\21\2\u01a4\u01a9\u01af\u01b3\u01b8\u01ba\u01c0") - buf.write("\u01c2\u01cb\u01cd\u01d6\u01e0\u01e8\u01f0\3\b\2\2") + buf.write("L\4M\tM\4N\tN\4O\tO\4P\tP\4Q\tQ\3\2\3\2\3\3\3\3\3\3\3") + buf.write("\3\3\4\3\4\3\4\3\4\3\4\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\6") + buf.write("\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\b\3\b\3\b\3") + buf.write("\t\3\t\3\n\3\n\3\13\3\13\3\f\3\f\3\r\3\r\3\16\3\16\3\17") + buf.write("\3\17\3\20\3\20\3\20\3\21\3\21\3\21\3\22\3\22\3\23\3\23") + buf.write("\3\24\3\24\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\26") + buf.write("\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\30\3\30") + buf.write("\3\30\3\30\3\30\3\30\3\30\3\31\3\31\3\32\3\32\3\32\3\33") + buf.write("\3\33\3\33\3\34\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35") + buf.write("\3\35\3\36\3\36\3\36\3\36\3\36\3\36\3\37\3\37\3\37\3\37") + buf.write("\3\37\3\37\3 \3 \3 \3 \3!\3!\3!\3\"\3\"\3\"\3\"\3\"\3") + buf.write("#\3#\3#\3#\3#\3$\3$\3%\3%\3&\3&\3&\3&\3\'\3\'\3\'\3\'") + buf.write("\3\'\3\'\3\'\3(\3(\3(\3(\3(\3(\3)\3)\3*\3*\3+\3+\3,\3") + buf.write(",\3-\3-\3.\3.\3.\3.\3.\3.\3.\3.\3.\3/\3/\3/\3/\3/\3/\3") + buf.write("/\3/\3/\3/\3/\3/\3\60\3\60\3\61\3\61\3\62\3\62\3\63\3") + buf.write("\63\3\64\3\64\3\65\3\65\3\66\3\66\3\66\3\67\3\67\3\67") + buf.write("\3\67\38\38\38\39\39\39\39\39\39\3:\3:\3:\3;\3;\3;\3<") + buf.write("\3<\3<\3=\3=\3=\3>\3>\3>\3>\3?\3?\3?\3?\3@\3@\3@\3A\3") + buf.write("A\3A\3A\3A\3A\3A\3B\3B\3B\3C\3C\3C\3C\3C\3D\3D\3D\3D\3") + buf.write("D\3D\3E\3E\3E\3E\3E\3F\3F\3F\3F\3F\3F\3G\6G\u01ae\nG\r") + buf.write("G\16G\u01af\3H\6H\u01b3\nH\rH\16H\u01b4\3H\3H\6H\u01b9") + buf.write("\nH\rH\16H\u01ba\3H\3H\5H\u01bf\nH\3H\6H\u01c2\nH\rH\16") + buf.write("H\u01c3\5H\u01c6\nH\3I\3I\3I\3I\7I\u01cc\nI\fI\16I\u01cf") + buf.write("\13I\3I\3I\3J\3J\3J\3J\7J\u01d7\nJ\fJ\16J\u01da\13J\3") + buf.write("J\3J\3K\3K\7K\u01e0\nK\fK\16K\u01e3\13K\3L\3L\3M\3M\3") + buf.write("N\3N\3N\5N\u01ec\nN\3O\3O\3O\3O\7O\u01f2\nO\fO\16O\u01f5") + buf.write("\13O\3O\3O\3P\6P\u01fa\nP\rP\16P\u01fb\3P\3P\3Q\3Q\2\2") + buf.write("R\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31") + buf.write("\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31") + buf.write("\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O") + buf.write(")Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k\67m8o9q:s;") + buf.write("u{?}@\177A\u0081B\u0083C\u0085D\u0087E\u0089F\u008b") + buf.write("G\u008dH\u008fI\u0091J\u0093K\u0095L\u0097\2\u0099\2\u009b") + buf.write("\2\u009dM\u009fN\u00a1O\3\2\13\4\2))^^\6\2))^^ppvv\4\2") + buf.write("$$^^\6\2$$^^ppvv\3\2\62;\5\2C\\aac|\3\2))\4\2\f\f\16\17") + buf.write("\5\2\13\f\17\17\"\"\2\u020c\2\3\3\2\2\2\2\5\3\2\2\2\2") + buf.write("\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3") + buf.write("\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2") + buf.write("\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2") + buf.write("\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2") + buf.write("\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63") + buf.write("\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2") + buf.write("\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2") + buf.write("\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3") + buf.write("\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y") + buf.write("\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2") + buf.write("c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2") + buf.write("\2m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2u\3\2\2") + buf.write("\2\2w\3\2\2\2\2y\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177\3") + buf.write("\2\2\2\2\u0081\3\2\2\2\2\u0083\3\2\2\2\2\u0085\3\2\2\2") + buf.write("\2\u0087\3\2\2\2\2\u0089\3\2\2\2\2\u008b\3\2\2\2\2\u008d") + buf.write("\3\2\2\2\2\u008f\3\2\2\2\2\u0091\3\2\2\2\2\u0093\3\2\2") + buf.write("\2\2\u0095\3\2\2\2\2\u009d\3\2\2\2\2\u009f\3\2\2\2\2\u00a1") + buf.write("\3\2\2\2\3\u00a3\3\2\2\2\5\u00a5\3\2\2\2\7\u00a9\3\2\2") + buf.write("\2\t\u00ae\3\2\2\2\13\u00b5\3\2\2\2\r\u00b8\3\2\2\2\17") + buf.write("\u00bd\3\2\2\2\21\u00c3\3\2\2\2\23\u00c5\3\2\2\2\25\u00c7") + buf.write("\3\2\2\2\27\u00c9\3\2\2\2\31\u00cb\3\2\2\2\33\u00cd\3") + buf.write("\2\2\2\35\u00cf\3\2\2\2\37\u00d1\3\2\2\2!\u00d4\3\2\2") + buf.write("\2#\u00d7\3\2\2\2%\u00d9\3\2\2\2\'\u00db\3\2\2\2)\u00dd") + buf.write("\3\2\2\2+\u00e0\3\2\2\2-\u00e6\3\2\2\2/\u00ef\3\2\2\2") + buf.write("\61\u00f6\3\2\2\2\63\u00f8\3\2\2\2\65\u00fb\3\2\2\2\67") + buf.write("\u00fe\3\2\2\29\u0103\3\2\2\2;\u0108\3\2\2\2=\u010e\3") + buf.write("\2\2\2?\u0114\3\2\2\2A\u0118\3\2\2\2C\u011b\3\2\2\2E\u0120") + buf.write("\3\2\2\2G\u0125\3\2\2\2I\u0127\3\2\2\2K\u0129\3\2\2\2") + buf.write("M\u012d\3\2\2\2O\u0134\3\2\2\2Q\u013a\3\2\2\2S\u013c\3") + buf.write("\2\2\2U\u013e\3\2\2\2W\u0140\3\2\2\2Y\u0142\3\2\2\2[\u0144") + buf.write("\3\2\2\2]\u014d\3\2\2\2_\u0159\3\2\2\2a\u015b\3\2\2\2") + buf.write("c\u015d\3\2\2\2e\u015f\3\2\2\2g\u0161\3\2\2\2i\u0163\3") + buf.write("\2\2\2k\u0165\3\2\2\2m\u0168\3\2\2\2o\u016c\3\2\2\2q\u016f") + buf.write("\3\2\2\2s\u0175\3\2\2\2u\u0178\3\2\2\2w\u017b\3\2\2\2") + buf.write("y\u017e\3\2\2\2{\u0181\3\2\2\2}\u0185\3\2\2\2\177\u0189") + buf.write("\3\2\2\2\u0081\u018c\3\2\2\2\u0083\u0193\3\2\2\2\u0085") + buf.write("\u0196\3\2\2\2\u0087\u019b\3\2\2\2\u0089\u01a1\3\2\2\2") + buf.write("\u008b\u01a6\3\2\2\2\u008d\u01ad\3\2\2\2\u008f\u01b2\3") + buf.write("\2\2\2\u0091\u01c7\3\2\2\2\u0093\u01d2\3\2\2\2\u0095\u01dd") + buf.write("\3\2\2\2\u0097\u01e4\3\2\2\2\u0099\u01e6\3\2\2\2\u009b") + buf.write("\u01eb\3\2\2\2\u009d\u01ed\3\2\2\2\u009f\u01f9\3\2\2\2") + buf.write("\u00a1\u01ff\3\2\2\2\u00a3\u00a4\7=\2\2\u00a4\4\3\2\2") + buf.write("\2\u00a5\u00a6\7w\2\2\u00a6\u00a7\7u\2\2\u00a7\u00a8\7") + buf.write("g\2\2\u00a8\6\3\2\2\2\u00a9\u00aa\7q\2\2\u00aa\u00ab\7") + buf.write("p\2\2\u00ab\u00ac\7n\2\2\u00ac\u00ad\7{\2\2\u00ad\b\3") + buf.write("\2\2\2\u00ae\u00af\7j\2\2\u00af\u00b0\7k\2\2\u00b0\u00b1") + buf.write("\7f\2\2\u00b1\u00b2\7k\2\2\u00b2\u00b3\7p\2\2\u00b3\u00b4") + buf.write("\7i\2\2\u00b4\n\3\2\2\2\u00b5\u00b6\7c\2\2\u00b6\u00b7") + buf.write("\7u\2\2\u00b7\f\3\2\2\2\u00b8\u00b9\7u\2\2\u00b9\u00ba") + buf.write("\7m\2\2\u00ba\u00bb\7k\2\2\u00bb\u00bc\7r\2\2\u00bc\16") + buf.write("\3\2\2\2\u00bd\u00be\7r\2\2\u00be\u00bf\7t\2\2\u00bf\u00c0") + buf.write("\7k\2\2\u00c0\u00c1\7p\2\2\u00c1\u00c2\7v\2\2\u00c2\20") + buf.write("\3\2\2\2\u00c3\u00c4\7?\2\2\u00c4\22\3\2\2\2\u00c5\u00c6") + buf.write("\7`\2\2\u00c6\24\3\2\2\2\u00c7\u00c8\7,\2\2\u00c8\26\3") + buf.write("\2\2\2\u00c9\u00ca\7\61\2\2\u00ca\30\3\2\2\2\u00cb\u00cc") + buf.write("\7\'\2\2\u00cc\32\3\2\2\2\u00cd\u00ce\7-\2\2\u00ce\34") + buf.write("\3\2\2\2\u00cf\u00d0\7/\2\2\u00d0\36\3\2\2\2\u00d1\u00d2") + buf.write("\7>\2\2\u00d2\u00d3\7>\2\2\u00d3 \3\2\2\2\u00d4\u00d5") + buf.write("\7@\2\2\u00d5\u00d6\7@\2\2\u00d6\"\3\2\2\2\u00d7\u00d8") + buf.write("\7(\2\2\u00d8$\3\2\2\2\u00d9\u00da\7&\2\2\u00da&\3\2\2") + buf.write("\2\u00db\u00dc\7~\2\2\u00dc(\3\2\2\2\u00dd\u00de\7A\2") + buf.write("\2\u00de\u00df\7A\2\2\u00df*\3\2\2\2\u00e0\u00e1\7d\2") + buf.write("\2\u00e1\u00e2\7t\2\2\u00e2\u00e3\7g\2\2\u00e3\u00e4\7") + buf.write("c\2\2\u00e4\u00e5\7m\2\2\u00e5,\3\2\2\2\u00e6\u00e7\7") + buf.write("e\2\2\u00e7\u00e8\7q\2\2\u00e8\u00e9\7p\2\2\u00e9\u00ea") + buf.write("\7v\2\2\u00ea\u00eb\7k\2\2\u00eb\u00ec\7p\2\2\u00ec\u00ed") + buf.write("\7w\2\2\u00ed\u00ee\7g\2\2\u00ee.\3\2\2\2\u00ef\u00f0") + buf.write("\7t\2\2\u00f0\u00f1\7g\2\2\u00f1\u00f2\7v\2\2\u00f2\u00f3") + buf.write("\7w\2\2\u00f3\u00f4\7t\2\2\u00f4\u00f5\7p\2\2\u00f5\60") + buf.write("\3\2\2\2\u00f6\u00f7\7.\2\2\u00f7\62\3\2\2\2\u00f8\u00f9") + buf.write("\7k\2\2\u00f9\u00fa\7h\2\2\u00fa\64\3\2\2\2\u00fb\u00fc") + buf.write("\7f\2\2\u00fc\u00fd\7q\2\2\u00fd\66\3\2\2\2\u00fe\u00ff") + buf.write("\7g\2\2\u00ff\u0100\7n\2\2\u0100\u0101\7k\2\2\u0101\u0102") + buf.write("\7h\2\2\u01028\3\2\2\2\u0103\u0104\7g\2\2\u0104\u0105") + buf.write("\7n\2\2\u0105\u0106\7u\2\2\u0106\u0107\7g\2\2\u0107:\3") + buf.write("\2\2\2\u0108\u0109\7y\2\2\u0109\u010a\7j\2\2\u010a\u010b") + buf.write("\7k\2\2\u010b\u010c\7n\2\2\u010c\u010d\7g\2\2\u010d<\3") + buf.write("\2\2\2\u010e\u010f\7w\2\2\u010f\u0110\7p\2\2\u0110\u0111") + buf.write("\7v\2\2\u0111\u0112\7k\2\2\u0112\u0113\7n\2\2\u0113>\3") + buf.write("\2\2\2\u0114\u0115\7h\2\2\u0115\u0116\7q\2\2\u0116\u0117") + buf.write("\7t\2\2\u0117@\3\2\2\2\u0118\u0119\7k\2\2\u0119\u011a") + buf.write("\7p\2\2\u011aB\3\2\2\2\u011b\u011c\7u\2\2\u011c\u011d") + buf.write("\7v\2\2\u011d\u011e\7g\2\2\u011e\u011f\7r\2\2\u011fD\3") + buf.write("\2\2\2\u0120\u0121\7h\2\2\u0121\u0122\7w\2\2\u0122\u0123") + buf.write("\7p\2\2\u0123\u0124\7e\2\2\u0124F\3\2\2\2\u0125\u0126") + buf.write("\7>\2\2\u0126H\3\2\2\2\u0127\u0128\7@\2\2\u0128J\3\2\2") + buf.write("\2\u0129\u012a\7f\2\2\u012a\u012b\7g\2\2\u012b\u012c\7") + buf.write("h\2\2\u012cL\3\2\2\2\u012d\u012e\7g\2\2\u012e\u012f\7") + buf.write("z\2\2\u012f\u0130\7v\2\2\u0130\u0131\7g\2\2\u0131\u0132") + buf.write("\7t\2\2\u0132\u0133\7p\2\2\u0133N\3\2\2\2\u0134\u0135") + buf.write("\7e\2\2\u0135\u0136\7n\2\2\u0136\u0137\7c\2\2\u0137\u0138") + buf.write("\7u\2\2\u0138\u0139\7u\2\2\u0139P\3\2\2\2\u013a\u013b") + buf.write("\7*\2\2\u013bR\3\2\2\2\u013c\u013d\7+\2\2\u013dT\3\2\2") + buf.write("\2\u013e\u013f\7}\2\2\u013fV\3\2\2\2\u0140\u0141\7\177") + buf.write("\2\2\u0141X\3\2\2\2\u0142\u0143\7<\2\2\u0143Z\3\2\2\2") + buf.write("\u0144\u0145\7c\2\2\u0145\u0146\7d\2\2\u0146\u0147\7u") + buf.write("\2\2\u0147\u0148\7v\2\2\u0148\u0149\7t\2\2\u0149\u014a") + buf.write("\7c\2\2\u014a\u014b\7e\2\2\u014b\u014c\7v\2\2\u014c\\") + buf.write("\3\2\2\2\u014d\u014e\7e\2\2\u014e\u014f\7q\2\2\u014f\u0150") + buf.write("\7p\2\2\u0150\u0151\7u\2\2\u0151\u0152\7v\2\2\u0152\u0153") + buf.write("\7t\2\2\u0153\u0154\7w\2\2\u0154\u0155\7e\2\2\u0155\u0156") + buf.write("\7v\2\2\u0156\u0157\7q\2\2\u0157\u0158\7t\2\2\u0158^\3") + buf.write("\2\2\2\u0159\u015a\7]\2\2\u015a`\3\2\2\2\u015b\u015c\7") + buf.write("_\2\2\u015cb\3\2\2\2\u015d\u015e\7A\2\2\u015ed\3\2\2\2") + buf.write("\u015f\u0160\7\60\2\2\u0160f\3\2\2\2\u0161\u0162\7#\2") + buf.write("\2\u0162h\3\2\2\2\u0163\u0164\7\u0080\2\2\u0164j\3\2\2") + buf.write("\2\u0165\u0166\7\60\2\2\u0166\u0167\7\60\2\2\u0167l\3") + buf.write("\2\2\2\u0168\u0169\7\60\2\2\u0169\u016a\7\60\2\2\u016a") + buf.write("\u016b\7\60\2\2\u016bn\3\2\2\2\u016c\u016d\7k\2\2\u016d") + buf.write("\u016e\7u\2\2\u016ep\3\2\2\2\u016f\u0170\7k\2\2\u0170") + buf.write("\u0171\7u\2\2\u0171\u0172\7p\2\2\u0172\u0173\7)\2\2\u0173") + buf.write("\u0174\7v\2\2\u0174r\3\2\2\2\u0175\u0176\7?\2\2\u0176") + buf.write("\u0177\7?\2\2\u0177t\3\2\2\2\u0178\u0179\7#\2\2\u0179") + buf.write("\u017a\7?\2\2\u017av\3\2\2\2\u017b\u017c\7>\2\2\u017c") + buf.write("\u017d\7?\2\2\u017dx\3\2\2\2\u017e\u017f\7@\2\2\u017f") + buf.write("\u0180\7?\2\2\u0180z\3\2\2\2\u0181\u0182\7p\2\2\u0182") + buf.write("\u0183\7q\2\2\u0183\u0184\7v\2\2\u0184|\3\2\2\2\u0185") + buf.write("\u0186\7c\2\2\u0186\u0187\7p\2\2\u0187\u0188\7f\2\2\u0188") + buf.write("~\3\2\2\2\u0189\u018a\7q\2\2\u018a\u018b\7t\2\2\u018b") + buf.write("\u0080\3\2\2\2\u018c\u018d\7n\2\2\u018d\u018e\7c\2\2\u018e") + buf.write("\u018f\7o\2\2\u018f\u0190\7d\2\2\u0190\u0191\7f\2\2\u0191") + buf.write("\u0192\7c\2\2\u0192\u0082\3\2\2\2\u0193\u0194\7/\2\2\u0194") + buf.write("\u0195\7@\2\2\u0195\u0084\3\2\2\2\u0196\u0197\7v\2\2\u0197") + buf.write("\u0198\7t\2\2\u0198\u0199\7w\2\2\u0199\u019a\7g\2\2\u019a") + buf.write("\u0086\3\2\2\2\u019b\u019c\7h\2\2\u019c\u019d\7c\2\2\u019d") + buf.write("\u019e\7n\2\2\u019e\u019f\7u\2\2\u019f\u01a0\7g\2\2\u01a0") + buf.write("\u0088\3\2\2\2\u01a1\u01a2\7p\2\2\u01a2\u01a3\7w\2\2\u01a3") + buf.write("\u01a4\7n\2\2\u01a4\u01a5\7n\2\2\u01a5\u008a\3\2\2\2\u01a6") + buf.write("\u01a7\7u\2\2\u01a7\u01a8\7w\2\2\u01a8\u01a9\7r\2\2\u01a9") + buf.write("\u01aa\7g\2\2\u01aa\u01ab\7t\2\2\u01ab\u008c\3\2\2\2\u01ac") + buf.write("\u01ae\5\u0097L\2\u01ad\u01ac\3\2\2\2\u01ae\u01af\3\2") + buf.write("\2\2\u01af\u01ad\3\2\2\2\u01af\u01b0\3\2\2\2\u01b0\u008e") + buf.write("\3\2\2\2\u01b1\u01b3\5\u0097L\2\u01b2\u01b1\3\2\2\2\u01b3") + buf.write("\u01b4\3\2\2\2\u01b4\u01b2\3\2\2\2\u01b4\u01b5\3\2\2\2") + buf.write("\u01b5\u01b6\3\2\2\2\u01b6\u01b8\7\60\2\2\u01b7\u01b9") + buf.write("\5\u0097L\2\u01b8\u01b7\3\2\2\2\u01b9\u01ba\3\2\2\2\u01ba") + buf.write("\u01b8\3\2\2\2\u01ba\u01bb\3\2\2\2\u01bb\u01c5\3\2\2\2") + buf.write("\u01bc\u01be\7g\2\2\u01bd\u01bf\7/\2\2\u01be\u01bd\3\2") + buf.write("\2\2\u01be\u01bf\3\2\2\2\u01bf\u01c1\3\2\2\2\u01c0\u01c2") + buf.write("\5\u0097L\2\u01c1\u01c0\3\2\2\2\u01c2\u01c3\3\2\2\2\u01c3") + buf.write("\u01c1\3\2\2\2\u01c3\u01c4\3\2\2\2\u01c4\u01c6\3\2\2\2") + buf.write("\u01c5\u01bc\3\2\2\2\u01c5\u01c6\3\2\2\2\u01c6\u0090\3") + buf.write("\2\2\2\u01c7\u01cd\7)\2\2\u01c8\u01cc\n\2\2\2\u01c9\u01ca") + buf.write("\7^\2\2\u01ca\u01cc\t\3\2\2\u01cb\u01c8\3\2\2\2\u01cb") + buf.write("\u01c9\3\2\2\2\u01cc\u01cf\3\2\2\2\u01cd\u01cb\3\2\2\2") + buf.write("\u01cd\u01ce\3\2\2\2\u01ce\u01d0\3\2\2\2\u01cf\u01cd\3") + buf.write("\2\2\2\u01d0\u01d1\7)\2\2\u01d1\u0092\3\2\2\2\u01d2\u01d8") + buf.write("\7$\2\2\u01d3\u01d7\n\4\2\2\u01d4\u01d5\7^\2\2\u01d5\u01d7") + buf.write("\t\5\2\2\u01d6\u01d3\3\2\2\2\u01d6\u01d4\3\2\2\2\u01d7") + buf.write("\u01da\3\2\2\2\u01d8\u01d6\3\2\2\2\u01d8\u01d9\3\2\2\2") + buf.write("\u01d9\u01db\3\2\2\2\u01da\u01d8\3\2\2\2\u01db\u01dc\7") + buf.write("$\2\2\u01dc\u0094\3\2\2\2\u01dd\u01e1\5\u0099M\2\u01de") + buf.write("\u01e0\5\u009bN\2\u01df\u01de\3\2\2\2\u01e0\u01e3\3\2") + buf.write("\2\2\u01e1\u01df\3\2\2\2\u01e1\u01e2\3\2\2\2\u01e2\u0096") + buf.write("\3\2\2\2\u01e3\u01e1\3\2\2\2\u01e4\u01e5\t\6\2\2\u01e5") + buf.write("\u0098\3\2\2\2\u01e6\u01e7\t\7\2\2\u01e7\u009a\3\2\2\2") + buf.write("\u01e8\u01ec\5\u0099M\2\u01e9\u01ec\5\u0097L\2\u01ea\u01ec") + buf.write("\t\b\2\2\u01eb\u01e8\3\2\2\2\u01eb\u01e9\3\2\2\2\u01eb") + buf.write("\u01ea\3\2\2\2\u01ec\u009c\3\2\2\2\u01ed\u01ee\7/\2\2") + buf.write("\u01ee\u01ef\7/\2\2\u01ef\u01f3\3\2\2\2\u01f0\u01f2\n") + buf.write("\t\2\2\u01f1\u01f0\3\2\2\2\u01f2\u01f5\3\2\2\2\u01f3\u01f1") + buf.write("\3\2\2\2\u01f3\u01f4\3\2\2\2\u01f4\u01f6\3\2\2\2\u01f5") + buf.write("\u01f3\3\2\2\2\u01f6\u01f7\bO\2\2\u01f7\u009e\3\2\2\2") + buf.write("\u01f8\u01fa\t\n\2\2\u01f9\u01f8\3\2\2\2\u01fa\u01fb\3") + buf.write("\2\2\2\u01fb\u01f9\3\2\2\2\u01fb\u01fc\3\2\2\2\u01fc\u01fd") + buf.write("\3\2\2\2\u01fd\u01fe\bP\2\2\u01fe\u00a0\3\2\2\2\u01ff") + buf.write("\u0200\13\2\2\2\u0200\u00a2\3\2\2\2\21\2\u01af\u01b4\u01ba") + buf.write("\u01be\u01c3\u01c5\u01cb\u01cd\u01d6\u01d8\u01e1\u01eb") + buf.write("\u01f3\u01fb\3\b\2\2") return buf.getvalue() @@ -297,14 +302,15 @@ class PyxellLexer(Lexer): T__65 = 66 T__66 = 67 T__67 = 68 - INT = 69 - FLOAT = 70 - CHAR = 71 - STRING = 72 - ID = 73 - COMMENT = 74 - WS = 75 - ERR = 76 + T__68 = 69 + INT = 70 + FLOAT = 71 + CHAR = 72 + STRING = 73 + ID = 74 + COMMENT = 75 + WS = 76 + ERR = 77 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -316,10 +322,11 @@ class PyxellLexer(Lexer): "'&'", "'$'", "'|'", "'??'", "'break'", "'continue'", "'return'", "','", "'if'", "'do'", "'elif'", "'else'", "'while'", "'until'", "'for'", "'in'", "'step'", "'func'", "'<'", "'>'", "'def'", - "'extern'", "'class'", "'('", "')'", "'{'", "'}'", "':'", "'constructor'", - "'['", "']'", "'?'", "'.'", "'!'", "'~'", "'..'", "'...'", "'is'", - "'isn't'", "'=='", "'!='", "'<='", "'>='", "'not'", "'and'", - "'or'", "'lambda'", "'->'", "'true'", "'false'", "'null'", "'super'" ] + "'extern'", "'class'", "'('", "')'", "'{'", "'}'", "':'", "'abstract'", + "'constructor'", "'['", "']'", "'?'", "'.'", "'!'", "'~'", "'..'", + "'...'", "'is'", "'isn't'", "'=='", "'!='", "'<='", "'>='", + "'not'", "'and'", "'or'", "'lambda'", "'->'", "'true'", "'false'", + "'null'", "'super'" ] symbolicNames = [ "", "INT", "FLOAT", "CHAR", "STRING", "ID", "COMMENT", "WS", "ERR" ] @@ -335,8 +342,8 @@ class PyxellLexer(Lexer): "T__50", "T__51", "T__52", "T__53", "T__54", "T__55", "T__56", "T__57", "T__58", "T__59", "T__60", "T__61", "T__62", "T__63", "T__64", "T__65", "T__66", "T__67", - "INT", "FLOAT", "CHAR", "STRING", "ID", "DIGIT", "ID_START", - "ID_CONT", "COMMENT", "WS", "ERR" ] + "T__68", "INT", "FLOAT", "CHAR", "STRING", "ID", "DIGIT", + "ID_START", "ID_CONT", "COMMENT", "WS", "ERR" ] grammarFileName = "Pyxell.g4" diff --git a/src/antlr/PyxellLexer.tokens b/src/antlr/PyxellLexer.tokens index 8c43aa77..c57ea7d0 100644 --- a/src/antlr/PyxellLexer.tokens +++ b/src/antlr/PyxellLexer.tokens @@ -66,14 +66,15 @@ T__64=65 T__65=66 T__66=67 T__67=68 -INT=69 -FLOAT=70 -CHAR=71 -STRING=72 -ID=73 -COMMENT=74 -WS=75 -ERR=76 +T__68=69 +INT=70 +FLOAT=71 +CHAR=72 +STRING=73 +ID=74 +COMMENT=75 +WS=76 +ERR=77 ';'=1 'use'=2 'only'=3 @@ -118,27 +119,28 @@ ERR=76 '{'=42 '}'=43 ':'=44 -'constructor'=45 -'['=46 -']'=47 -'?'=48 -'.'=49 -'!'=50 -'~'=51 -'..'=52 -'...'=53 -'is'=54 -'isn\'t'=55 -'=='=56 -'!='=57 -'<='=58 -'>='=59 -'not'=60 -'and'=61 -'or'=62 -'lambda'=63 -'->'=64 -'true'=65 -'false'=66 -'null'=67 -'super'=68 +'abstract'=45 +'constructor'=46 +'['=47 +']'=48 +'?'=49 +'.'=50 +'!'=51 +'~'=52 +'..'=53 +'...'=54 +'is'=55 +'isn\'t'=56 +'=='=57 +'!='=58 +'<='=59 +'>='=60 +'not'=61 +'and'=62 +'or'=63 +'lambda'=64 +'->'=65 +'true'=66 +'false'=67 +'null'=68 +'super'=69 diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index 5a4c75d6..71b0185e 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -8,8 +8,8 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3N") - buf.write("\u01c4\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3O") + buf.write("\u01ca\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16") buf.write("\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\3\2\7\2") buf.write("&\n\2\f\2\16\2)\13\2\3\2\3\2\3\3\3\3\3\3\3\3\5\3\61\n") @@ -27,214 +27,218 @@ def serializedATN(): buf.write("\3\7\5\7\u00b6\n\7\3\b\3\b\3\b\3\b\7\b\u00bc\n\b\f\b\16") buf.write("\b\u00bf\13\b\3\b\5\b\u00c2\n\b\3\b\3\b\3\t\3\t\3\t\3") buf.write("\t\5\t\u00ca\n\t\3\t\3\t\3\t\3\t\3\t\3\t\5\t\u00d2\n\t") - buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\5\t\u00dc\n\t\3\n\3\n") - buf.write("\6\n\u00e0\n\n\r\n\16\n\u00e1\3\n\3\n\3\13\3\13\3\13\3") - buf.write("\13\3\13\3\13\3\13\3\13\3\13\3\13\7\13\u00f0\n\13\f\13") - buf.write("\16\13\u00f3\13\13\3\13\5\13\u00f6\n\13\3\13\3\13\3\13") - buf.write("\3\13\6\13\u00fc\n\13\r\13\16\13\u00fd\3\13\3\13\3\13") - buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\7\13\u0109\n\13\f\13\16") - buf.write("\13\u010c\13\13\3\13\5\13\u010f\n\13\3\13\3\13\5\13\u0113") - buf.write("\n\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") + buf.write("\3\t\3\t\3\t\3\t\5\t\u00d8\n\t\3\t\3\t\3\t\3\t\3\t\3\t") + buf.write("\5\t\u00e0\n\t\5\t\u00e2\n\t\3\n\3\n\6\n\u00e6\n\n\r\n") + buf.write("\16\n\u00e7\3\n\3\n\3\13\3\13\3\13\3\13\3\13\3\13\3\13") + buf.write("\3\13\3\13\3\13\7\13\u00f6\n\13\f\13\16\13\u00f9\13\13") + buf.write("\3\13\5\13\u00fc\n\13\3\13\3\13\3\13\3\13\6\13\u0102\n") + buf.write("\13\r\13\16\13\u0103\3\13\3\13\3\13\3\13\3\13\3\13\3\13") + buf.write("\3\13\3\13\7\13\u010f\n\13\f\13\16\13\u0112\13\13\3\13") + buf.write("\5\13\u0115\n\13\3\13\3\13\5\13\u0119\n\13\3\13\3\13\3") + buf.write("\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") - buf.write("\3\13\3\13\3\13\3\13\5\13\u0144\n\13\3\13\3\13\3\13\3") - buf.write("\13\3\13\3\13\3\13\5\13\u014d\n\13\3\13\3\13\5\13\u0151") - buf.write("\n\13\3\13\3\13\5\13\u0155\n\13\5\13\u0157\n\13\3\13\3") - buf.write("\13\3\13\5\13\u015c\n\13\3\13\3\13\3\13\3\13\3\13\3\13") - buf.write("\3\13\7\13\u0165\n\13\f\13\16\13\u0168\13\13\3\13\5\13") - buf.write("\u016b\n\13\3\13\3\13\3\13\3\13\3\13\7\13\u0172\n\13\f") - buf.write("\13\16\13\u0175\13\13\3\f\3\f\3\f\7\f\u017a\n\f\f\f\16") - buf.write("\f\u017d\13\f\3\f\3\f\3\r\3\r\3\r\3\16\3\16\3\16\3\16") - buf.write("\3\16\3\16\5\16\u018a\n\16\3\16\3\16\5\16\u018e\n\16\3") - buf.write("\17\3\17\5\17\u0192\n\17\3\17\3\17\3\20\3\20\3\20\3\20") - buf.write("\3\20\3\20\3\20\3\20\5\20\u019e\n\20\3\21\3\21\7\21\u01a2") - buf.write("\n\21\f\21\16\21\u01a5\13\21\3\21\3\21\3\22\3\22\3\22") - buf.write("\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\5\22\u01b5") - buf.write("\n\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\7\22\u01bf") - buf.write("\n\22\f\22\16\22\u01c2\13\22\3\22\2\4\24\"\23\2\4\6\b") - buf.write("\n\f\16\20\22\24\26\30\32\34\36 \"\2\f\3\2\13\26\3\2\27") - buf.write("\30\4\2\17\20\65\65\3\2\f\16\3\2\17\20\3\2\21\22\3\2\66") - buf.write("\67\3\289\4\2%&:=\3\2CD\2\u0211\2\'\3\2\2\2\4\60\3\2\2") - buf.write("\2\6Z\3\2\2\2\b\\\3\2\2\2\n\u00af\3\2\2\2\f\u00b1\3\2") - buf.write("\2\2\16\u00b7\3\2\2\2\20\u00db\3\2\2\2\22\u00dd\3\2\2") - buf.write("\2\24\u0112\3\2\2\2\26\u017b\3\2\2\2\30\u0180\3\2\2\2") - buf.write("\32\u018d\3\2\2\2\34\u0191\3\2\2\2\36\u019d\3\2\2\2 \u01a3") - buf.write("\3\2\2\2\"\u01b4\3\2\2\2$&\5\4\3\2%$\3\2\2\2&)\3\2\2\2") - buf.write("\'%\3\2\2\2\'(\3\2\2\2(*\3\2\2\2)\'\3\2\2\2*+\7\2\2\3") - buf.write("+\3\3\2\2\2,-\5\6\4\2-.\7\3\2\2.\61\3\2\2\2/\61\5\n\6") - buf.write("\2\60,\3\2\2\2\60/\3\2\2\2\61\5\3\2\2\2\62\63\7\4\2\2") - buf.write("\63:\7K\2\2\64\65\7\5\2\2\65;\5 \21\2\66\67\7\6\2\2\67") - buf.write(";\5 \21\289\7\7\2\29;\7K\2\2:\64\3\2\2\2:\66\3\2\2\2:") - buf.write("8\3\2\2\2:;\3\2\2\2;[\3\2\2\2<[\7\b\2\2=?\7\t\2\2>@\5") - buf.write("\26\f\2?>\3\2\2\2?@\3\2\2\2@[\3\2\2\2AB\5\"\22\2BE\7K") - buf.write("\2\2CD\7\n\2\2DF\5\26\f\2EC\3\2\2\2EF\3\2\2\2F[\3\2\2") - buf.write("\2GH\5\b\5\2HI\7\n\2\2IK\3\2\2\2JG\3\2\2\2KN\3\2\2\2L") - buf.write("J\3\2\2\2LM\3\2\2\2MO\3\2\2\2NL\3\2\2\2O[\5\26\f\2PQ\5") - buf.write("\24\13\2QR\t\2\2\2RS\7\n\2\2ST\5\24\13\2T[\3\2\2\2U[\t") - buf.write("\3\2\2VX\7\31\2\2WY\5\26\f\2XW\3\2\2\2XY\3\2\2\2Y[\3\2") - buf.write("\2\2Z\62\3\2\2\2Z<\3\2\2\2Z=\3\2\2\2ZA\3\2\2\2ZL\3\2\2") - buf.write("\2ZP\3\2\2\2ZU\3\2\2\2ZV\3\2\2\2[\7\3\2\2\2\\a\5\24\13") - buf.write("\2]^\7\32\2\2^`\5\24\13\2_]\3\2\2\2`c\3\2\2\2a_\3\2\2") - buf.write("\2ab\3\2\2\2b\t\3\2\2\2ca\3\2\2\2de\7\33\2\2ef\5\24\13") - buf.write("\2fg\7\34\2\2go\5\22\n\2hi\7\35\2\2ij\5\24\13\2jk\7\34") - buf.write("\2\2kl\5\22\n\2ln\3\2\2\2mh\3\2\2\2nq\3\2\2\2om\3\2\2") - buf.write("\2op\3\2\2\2pu\3\2\2\2qo\3\2\2\2rs\7\36\2\2st\7\34\2\2") - buf.write("tv\5\22\n\2ur\3\2\2\2uv\3\2\2\2v\u00b0\3\2\2\2wx\7\37") - buf.write("\2\2xy\5\24\13\2yz\7\34\2\2z{\5\22\n\2{\u00b0\3\2\2\2") - buf.write("|}\7 \2\2}~\5\24\13\2~\177\7\34\2\2\177\u0080\5\22\n\2") - buf.write("\u0080\u00b0\3\2\2\2\u0081\u0082\7!\2\2\u0082\u0083\5") - buf.write("\26\f\2\u0083\u0084\7\"\2\2\u0084\u0087\5\26\f\2\u0085") - buf.write("\u0086\7#\2\2\u0086\u0088\5\26\f\2\u0087\u0085\3\2\2\2") - buf.write("\u0087\u0088\3\2\2\2\u0088\u0089\3\2\2\2\u0089\u008a\7") - buf.write("\34\2\2\u008a\u008b\5\22\n\2\u008b\u00b0\3\2\2\2\u008c") - buf.write("\u008d\7$\2\2\u008d\u0092\7K\2\2\u008e\u008f\7%\2\2\u008f") - buf.write("\u0090\5 \21\2\u0090\u0091\7&\2\2\u0091\u0093\3\2\2\2") - buf.write("\u0092\u008e\3\2\2\2\u0092\u0093\3\2\2\2\u0093\u0094\3") - buf.write("\2\2\2\u0094\u0096\5\16\b\2\u0095\u0097\5\"\22\2\u0096") - buf.write("\u0095\3\2\2\2\u0096\u0097\3\2\2\2\u0097\u009c\3\2\2\2") - buf.write("\u0098\u0099\7\'\2\2\u0099\u009d\5\22\n\2\u009a\u009b") - buf.write("\7(\2\2\u009b\u009d\7\3\2\2\u009c\u0098\3\2\2\2\u009c") - buf.write("\u009a\3\2\2\2\u009d\u00b0\3\2\2\2\u009e\u009f\7)\2\2") - buf.write("\u009f\u00a4\7K\2\2\u00a0\u00a1\7*\2\2\u00a1\u00a2\5\"") - buf.write("\22\2\u00a2\u00a3\7+\2\2\u00a3\u00a5\3\2\2\2\u00a4\u00a0") - buf.write("\3\2\2\2\u00a4\u00a5\3\2\2\2\u00a5\u00a6\3\2\2\2\u00a6") - buf.write("\u00a7\7\'\2\2\u00a7\u00a9\7,\2\2\u00a8\u00aa\5\20\t\2") - buf.write("\u00a9\u00a8\3\2\2\2\u00aa\u00ab\3\2\2\2\u00ab\u00a9\3") - buf.write("\2\2\2\u00ab\u00ac\3\2\2\2\u00ac\u00ad\3\2\2\2\u00ad\u00ae") - buf.write("\7-\2\2\u00ae\u00b0\3\2\2\2\u00afd\3\2\2\2\u00afw\3\2") - buf.write("\2\2\u00af|\3\2\2\2\u00af\u0081\3\2\2\2\u00af\u008c\3") - buf.write("\2\2\2\u00af\u009e\3\2\2\2\u00b0\13\3\2\2\2\u00b1\u00b2") - buf.write("\5\"\22\2\u00b2\u00b5\7K\2\2\u00b3\u00b4\7.\2\2\u00b4") - buf.write("\u00b6\5\24\13\2\u00b5\u00b3\3\2\2\2\u00b5\u00b6\3\2\2") - buf.write("\2\u00b6\r\3\2\2\2\u00b7\u00bd\7*\2\2\u00b8\u00b9\5\f") - buf.write("\7\2\u00b9\u00ba\7\32\2\2\u00ba\u00bc\3\2\2\2\u00bb\u00b8") - buf.write("\3\2\2\2\u00bc\u00bf\3\2\2\2\u00bd\u00bb\3\2\2\2\u00bd") - buf.write("\u00be\3\2\2\2\u00be\u00c1\3\2\2\2\u00bf\u00bd\3\2\2\2") - buf.write("\u00c0\u00c2\5\f\7\2\u00c1\u00c0\3\2\2\2\u00c1\u00c2\3") - buf.write("\2\2\2\u00c2\u00c3\3\2\2\2\u00c3\u00c4\7+\2\2\u00c4\17") - buf.write("\3\2\2\2\u00c5\u00c6\5\"\22\2\u00c6\u00c9\7K\2\2\u00c7") - buf.write("\u00c8\7.\2\2\u00c8\u00ca\5\26\f\2\u00c9\u00c7\3\2\2\2") - buf.write("\u00c9\u00ca\3\2\2\2\u00ca\u00cb\3\2\2\2\u00cb\u00cc\7") - buf.write("\3\2\2\u00cc\u00dc\3\2\2\2\u00cd\u00ce\7$\2\2\u00ce\u00cf") - buf.write("\7K\2\2\u00cf\u00d1\5\16\b\2\u00d0\u00d2\5\"\22\2\u00d1") - buf.write("\u00d0\3\2\2\2\u00d1\u00d2\3\2\2\2\u00d2\u00d3\3\2\2\2") - buf.write("\u00d3\u00d4\7\'\2\2\u00d4\u00d5\5\22\n\2\u00d5\u00dc") - buf.write("\3\2\2\2\u00d6\u00d7\7/\2\2\u00d7\u00d8\5\16\b\2\u00d8") - buf.write("\u00d9\7\'\2\2\u00d9\u00da\5\22\n\2\u00da\u00dc\3\2\2") - buf.write("\2\u00db\u00c5\3\2\2\2\u00db\u00cd\3\2\2\2\u00db\u00d6") - buf.write("\3\2\2\2\u00dc\21\3\2\2\2\u00dd\u00df\7,\2\2\u00de\u00e0") - buf.write("\5\4\3\2\u00df\u00de\3\2\2\2\u00e0\u00e1\3\2\2\2\u00e1") - buf.write("\u00df\3\2\2\2\u00e1\u00e2\3\2\2\2\u00e2\u00e3\3\2\2\2") - buf.write("\u00e3\u00e4\7-\2\2\u00e4\23\3\2\2\2\u00e5\u00e6\b\13") - buf.write("\1\2\u00e6\u0113\5\36\20\2\u00e7\u00e8\7*\2\2\u00e8\u00e9") - buf.write("\5\26\f\2\u00e9\u00ea\7+\2\2\u00ea\u0113\3\2\2\2\u00eb") - buf.write("\u00f1\7\60\2\2\u00ec\u00ed\5\24\13\2\u00ed\u00ee\7\32") - buf.write("\2\2\u00ee\u00f0\3\2\2\2\u00ef\u00ec\3\2\2\2\u00f0\u00f3") - buf.write("\3\2\2\2\u00f1\u00ef\3\2\2\2\u00f1\u00f2\3\2\2\2\u00f2") - buf.write("\u00f5\3\2\2\2\u00f3\u00f1\3\2\2\2\u00f4\u00f6\5\24\13") - buf.write("\2\u00f5\u00f4\3\2\2\2\u00f5\u00f6\3\2\2\2\u00f6\u00f7") - buf.write("\3\2\2\2\u00f7\u0113\7\61\2\2\u00f8\u00f9\7\60\2\2\u00f9") - buf.write("\u00fb\5\24\13\2\u00fa\u00fc\5\32\16\2\u00fb\u00fa\3\2") - buf.write("\2\2\u00fc\u00fd\3\2\2\2\u00fd\u00fb\3\2\2\2\u00fd\u00fe") - buf.write("\3\2\2\2\u00fe\u00ff\3\2\2\2\u00ff\u0100\7\61\2\2\u0100") - buf.write("\u0113\3\2\2\2\u0101\u0102\t\4\2\2\u0102\u0113\5\24\13") - buf.write("\23\u0103\u0104\7>\2\2\u0104\u0113\5\24\13\b\u0105\u010a") - buf.write("\7A\2\2\u0106\u0107\7K\2\2\u0107\u0109\7\32\2\2\u0108") - buf.write("\u0106\3\2\2\2\u0109\u010c\3\2\2\2\u010a\u0108\3\2\2\2") - buf.write("\u010a\u010b\3\2\2\2\u010b\u010e\3\2\2\2\u010c\u010a\3") - buf.write("\2\2\2\u010d\u010f\7K\2\2\u010e\u010d\3\2\2\2\u010e\u010f") - buf.write("\3\2\2\2\u010f\u0110\3\2\2\2\u0110\u0111\7B\2\2\u0111") - buf.write("\u0113\5\24\13\3\u0112\u00e5\3\2\2\2\u0112\u00e7\3\2\2") - buf.write("\2\u0112\u00eb\3\2\2\2\u0112\u00f8\3\2\2\2\u0112\u0101") - buf.write("\3\2\2\2\u0112\u0103\3\2\2\2\u0112\u0105\3\2\2\2\u0113") - buf.write("\u0173\3\2\2\2\u0114\u0115\f\24\2\2\u0115\u0116\7\13\2") - buf.write("\2\u0116\u0172\5\24\13\24\u0117\u0118\f\22\2\2\u0118\u0119") - buf.write("\t\5\2\2\u0119\u0172\5\24\13\23\u011a\u011b\f\21\2\2\u011b") - buf.write("\u011c\t\6\2\2\u011c\u0172\5\24\13\22\u011d\u011e\f\20") - buf.write("\2\2\u011e\u011f\t\7\2\2\u011f\u0172\5\24\13\21\u0120") - buf.write("\u0121\f\17\2\2\u0121\u0122\7\23\2\2\u0122\u0172\5\24") - buf.write("\13\20\u0123\u0124\f\16\2\2\u0124\u0125\7\24\2\2\u0125") - buf.write("\u0172\5\24\13\17\u0126\u0127\f\r\2\2\u0127\u0128\7\25") - buf.write("\2\2\u0128\u0172\5\24\13\16\u0129\u012a\f\f\2\2\u012a") - buf.write("\u012b\t\b\2\2\u012b\u0172\5\24\13\r\u012c\u012d\f\n\2") - buf.write("\2\u012d\u012e\t\t\2\2\u012e\u0172\5\24\13\13\u012f\u0130") - buf.write("\f\t\2\2\u0130\u0131\t\n\2\2\u0131\u0172\5\24\13\t\u0132") - buf.write("\u0133\f\7\2\2\u0133\u0134\7?\2\2\u0134\u0172\5\24\13") - buf.write("\7\u0135\u0136\f\6\2\2\u0136\u0137\7@\2\2\u0137\u0172") - buf.write("\5\24\13\6\u0138\u0139\f\5\2\2\u0139\u013a\7\26\2\2\u013a") - buf.write("\u0172\5\24\13\5\u013b\u013c\f\4\2\2\u013c\u013d\7\62") - buf.write("\2\2\u013d\u013e\5\24\13\2\u013e\u013f\7.\2\2\u013f\u0140") - buf.write("\5\24\13\4\u0140\u0172\3\2\2\2\u0141\u0143\f\31\2\2\u0142") - buf.write("\u0144\7\62\2\2\u0143\u0142\3\2\2\2\u0143\u0144\3\2\2") - buf.write("\2\u0144\u0145\3\2\2\2\u0145\u0146\7\60\2\2\u0146\u0147") - buf.write("\5\26\f\2\u0147\u0148\7\61\2\2\u0148\u0172\3\2\2\2\u0149") - buf.write("\u014a\f\30\2\2\u014a\u014c\7\60\2\2\u014b\u014d\5\24") - buf.write("\13\2\u014c\u014b\3\2\2\2\u014c\u014d\3\2\2\2\u014d\u014e") - buf.write("\3\2\2\2\u014e\u0150\7.\2\2\u014f\u0151\5\24\13\2\u0150") - buf.write("\u014f\3\2\2\2\u0150\u0151\3\2\2\2\u0151\u0156\3\2\2\2") - buf.write("\u0152\u0154\7.\2\2\u0153\u0155\5\24\13\2\u0154\u0153") - buf.write("\3\2\2\2\u0154\u0155\3\2\2\2\u0155\u0157\3\2\2\2\u0156") - buf.write("\u0152\3\2\2\2\u0156\u0157\3\2\2\2\u0157\u0158\3\2\2\2") - buf.write("\u0158\u0172\7\61\2\2\u0159\u015b\f\27\2\2\u015a\u015c") - buf.write("\7\62\2\2\u015b\u015a\3\2\2\2\u015b\u015c\3\2\2\2\u015c") - buf.write("\u015d\3\2\2\2\u015d\u015e\7\63\2\2\u015e\u0172\7K\2\2") - buf.write("\u015f\u0160\f\26\2\2\u0160\u0166\7*\2\2\u0161\u0162\5") - buf.write("\34\17\2\u0162\u0163\7\32\2\2\u0163\u0165\3\2\2\2\u0164") - buf.write("\u0161\3\2\2\2\u0165\u0168\3\2\2\2\u0166\u0164\3\2\2\2") - buf.write("\u0166\u0167\3\2\2\2\u0167\u016a\3\2\2\2\u0168\u0166\3") - buf.write("\2\2\2\u0169\u016b\5\34\17\2\u016a\u0169\3\2\2\2\u016a") - buf.write("\u016b\3\2\2\2\u016b\u016c\3\2\2\2\u016c\u0172\7+\2\2") - buf.write("\u016d\u016e\f\25\2\2\u016e\u0172\7\64\2\2\u016f\u0170") - buf.write("\f\13\2\2\u0170\u0172\7\67\2\2\u0171\u0114\3\2\2\2\u0171") - buf.write("\u0117\3\2\2\2\u0171\u011a\3\2\2\2\u0171\u011d\3\2\2\2") - buf.write("\u0171\u0120\3\2\2\2\u0171\u0123\3\2\2\2\u0171\u0126\3") - buf.write("\2\2\2\u0171\u0129\3\2\2\2\u0171\u012c\3\2\2\2\u0171\u012f") - buf.write("\3\2\2\2\u0171\u0132\3\2\2\2\u0171\u0135\3\2\2\2\u0171") - buf.write("\u0138\3\2\2\2\u0171\u013b\3\2\2\2\u0171\u0141\3\2\2\2") - buf.write("\u0171\u0149\3\2\2\2\u0171\u0159\3\2\2\2\u0171\u015f\3") - buf.write("\2\2\2\u0171\u016d\3\2\2\2\u0171\u016f\3\2\2\2\u0172\u0175") - buf.write("\3\2\2\2\u0173\u0171\3\2\2\2\u0173\u0174\3\2\2\2\u0174") - buf.write("\25\3\2\2\2\u0175\u0173\3\2\2\2\u0176\u0177\5\24\13\2") - buf.write("\u0177\u0178\7\32\2\2\u0178\u017a\3\2\2\2\u0179\u0176") - buf.write("\3\2\2\2\u017a\u017d\3\2\2\2\u017b\u0179\3\2\2\2\u017b") - buf.write("\u017c\3\2\2\2\u017c\u017e\3\2\2\2\u017d\u017b\3\2\2\2") - buf.write("\u017e\u017f\5\24\13\2\u017f\27\3\2\2\2\u0180\u0181\5") - buf.write("\26\f\2\u0181\u0182\7\2\2\3\u0182\31\3\2\2\2\u0183\u0184") - buf.write("\7!\2\2\u0184\u0185\5\26\f\2\u0185\u0186\7\"\2\2\u0186") - buf.write("\u0189\5\26\f\2\u0187\u0188\7#\2\2\u0188\u018a\5\26\f") - buf.write("\2\u0189\u0187\3\2\2\2\u0189\u018a\3\2\2\2\u018a\u018e") - buf.write("\3\2\2\2\u018b\u018c\7\33\2\2\u018c\u018e\5\24\13\2\u018d") - buf.write("\u0183\3\2\2\2\u018d\u018b\3\2\2\2\u018e\33\3\2\2\2\u018f") - buf.write("\u0190\7K\2\2\u0190\u0192\7\n\2\2\u0191\u018f\3\2\2\2") - buf.write("\u0191\u0192\3\2\2\2\u0192\u0193\3\2\2\2\u0193\u0194\5") - buf.write("\24\13\2\u0194\35\3\2\2\2\u0195\u019e\7G\2\2\u0196\u019e") - buf.write("\7H\2\2\u0197\u019e\t\13\2\2\u0198\u019e\7I\2\2\u0199") - buf.write("\u019e\7J\2\2\u019a\u019e\7E\2\2\u019b\u019e\7F\2\2\u019c") - buf.write("\u019e\7K\2\2\u019d\u0195\3\2\2\2\u019d\u0196\3\2\2\2") - buf.write("\u019d\u0197\3\2\2\2\u019d\u0198\3\2\2\2\u019d\u0199\3") - buf.write("\2\2\2\u019d\u019a\3\2\2\2\u019d\u019b\3\2\2\2\u019d\u019c") - buf.write("\3\2\2\2\u019e\37\3\2\2\2\u019f\u01a0\7K\2\2\u01a0\u01a2") - buf.write("\7\32\2\2\u01a1\u019f\3\2\2\2\u01a2\u01a5\3\2\2\2\u01a3") - buf.write("\u01a1\3\2\2\2\u01a3\u01a4\3\2\2\2\u01a4\u01a6\3\2\2\2") - buf.write("\u01a5\u01a3\3\2\2\2\u01a6\u01a7\7K\2\2\u01a7!\3\2\2\2") - buf.write("\u01a8\u01a9\b\22\1\2\u01a9\u01b5\7K\2\2\u01aa\u01ab\7") - buf.write("*\2\2\u01ab\u01ac\5\"\22\2\u01ac\u01ad\7+\2\2\u01ad\u01b5") - buf.write("\3\2\2\2\u01ae\u01af\7\60\2\2\u01af\u01b0\5\"\22\2\u01b0") - buf.write("\u01b1\7\61\2\2\u01b1\u01b5\3\2\2\2\u01b2\u01b3\7B\2\2") - buf.write("\u01b3\u01b5\5\"\22\3\u01b4\u01a8\3\2\2\2\u01b4\u01aa") - buf.write("\3\2\2\2\u01b4\u01ae\3\2\2\2\u01b4\u01b2\3\2\2\2\u01b5") - buf.write("\u01c0\3\2\2\2\u01b6\u01b7\f\5\2\2\u01b7\u01b8\7\f\2\2") - buf.write("\u01b8\u01bf\5\"\22\5\u01b9\u01ba\f\4\2\2\u01ba\u01bb") - buf.write("\7B\2\2\u01bb\u01bf\5\"\22\4\u01bc\u01bd\f\6\2\2\u01bd") - buf.write("\u01bf\7\62\2\2\u01be\u01b6\3\2\2\2\u01be\u01b9\3\2\2") - buf.write("\2\u01be\u01bc\3\2\2\2\u01bf\u01c2\3\2\2\2\u01c0\u01be") - buf.write("\3\2\2\2\u01c0\u01c1\3\2\2\2\u01c1#\3\2\2\2\u01c2\u01c0") - buf.write("\3\2\2\2\64\'\60:?ELXZaou\u0087\u0092\u0096\u009c\u00a4") - buf.write("\u00ab\u00af\u00b5\u00bd\u00c1\u00c9\u00d1\u00db\u00e1") - buf.write("\u00f1\u00f5\u00fd\u010a\u010e\u0112\u0143\u014c\u0150") - buf.write("\u0154\u0156\u015b\u0166\u016a\u0171\u0173\u017b\u0189") - buf.write("\u018d\u0191\u019d\u01a3\u01b4\u01be\u01c0") + buf.write("\3\13\5\13\u014a\n\13\3\13\3\13\3\13\3\13\3\13\3\13\3") + buf.write("\13\5\13\u0153\n\13\3\13\3\13\5\13\u0157\n\13\3\13\3\13") + buf.write("\5\13\u015b\n\13\5\13\u015d\n\13\3\13\3\13\3\13\5\13\u0162") + buf.write("\n\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\7\13\u016b\n") + buf.write("\13\f\13\16\13\u016e\13\13\3\13\5\13\u0171\n\13\3\13\3") + buf.write("\13\3\13\3\13\3\13\7\13\u0178\n\13\f\13\16\13\u017b\13") + buf.write("\13\3\f\3\f\3\f\7\f\u0180\n\f\f\f\16\f\u0183\13\f\3\f") + buf.write("\3\f\3\r\3\r\3\r\3\16\3\16\3\16\3\16\3\16\3\16\5\16\u0190") + buf.write("\n\16\3\16\3\16\5\16\u0194\n\16\3\17\3\17\5\17\u0198\n") + buf.write("\17\3\17\3\17\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20") + buf.write("\5\20\u01a4\n\20\3\21\3\21\7\21\u01a8\n\21\f\21\16\21") + buf.write("\u01ab\13\21\3\21\3\21\3\22\3\22\3\22\3\22\3\22\3\22\3") + buf.write("\22\3\22\3\22\3\22\3\22\3\22\5\22\u01bb\n\22\3\22\3\22") + buf.write("\3\22\3\22\3\22\3\22\3\22\3\22\7\22\u01c5\n\22\f\22\16") + buf.write("\22\u01c8\13\22\3\22\2\4\24\"\23\2\4\6\b\n\f\16\20\22") + buf.write("\24\26\30\32\34\36 \"\2\f\3\2\13\26\3\2\27\30\4\2\17\20") + buf.write("\66\66\3\2\f\16\3\2\17\20\3\2\21\22\3\2\678\3\29:\4\2") + buf.write("%&;>\3\2DE\2\u0219\2\'\3\2\2\2\4\60\3\2\2\2\6Z\3\2\2\2") + buf.write("\b\\\3\2\2\2\n\u00af\3\2\2\2\f\u00b1\3\2\2\2\16\u00b7") + buf.write("\3\2\2\2\20\u00e1\3\2\2\2\22\u00e3\3\2\2\2\24\u0118\3") + buf.write("\2\2\2\26\u0181\3\2\2\2\30\u0186\3\2\2\2\32\u0193\3\2") + buf.write("\2\2\34\u0197\3\2\2\2\36\u01a3\3\2\2\2 \u01a9\3\2\2\2") + buf.write("\"\u01ba\3\2\2\2$&\5\4\3\2%$\3\2\2\2&)\3\2\2\2\'%\3\2") + buf.write("\2\2\'(\3\2\2\2(*\3\2\2\2)\'\3\2\2\2*+\7\2\2\3+\3\3\2") + buf.write("\2\2,-\5\6\4\2-.\7\3\2\2.\61\3\2\2\2/\61\5\n\6\2\60,\3") + buf.write("\2\2\2\60/\3\2\2\2\61\5\3\2\2\2\62\63\7\4\2\2\63:\7L\2") + buf.write("\2\64\65\7\5\2\2\65;\5 \21\2\66\67\7\6\2\2\67;\5 \21\2") + buf.write("89\7\7\2\29;\7L\2\2:\64\3\2\2\2:\66\3\2\2\2:8\3\2\2\2") + buf.write(":;\3\2\2\2;[\3\2\2\2<[\7\b\2\2=?\7\t\2\2>@\5\26\f\2?>") + buf.write("\3\2\2\2?@\3\2\2\2@[\3\2\2\2AB\5\"\22\2BE\7L\2\2CD\7\n") + buf.write("\2\2DF\5\26\f\2EC\3\2\2\2EF\3\2\2\2F[\3\2\2\2GH\5\b\5") + buf.write("\2HI\7\n\2\2IK\3\2\2\2JG\3\2\2\2KN\3\2\2\2LJ\3\2\2\2L") + buf.write("M\3\2\2\2MO\3\2\2\2NL\3\2\2\2O[\5\26\f\2PQ\5\24\13\2Q") + buf.write("R\t\2\2\2RS\7\n\2\2ST\5\24\13\2T[\3\2\2\2U[\t\3\2\2VX") + buf.write("\7\31\2\2WY\5\26\f\2XW\3\2\2\2XY\3\2\2\2Y[\3\2\2\2Z\62") + buf.write("\3\2\2\2Z<\3\2\2\2Z=\3\2\2\2ZA\3\2\2\2ZL\3\2\2\2ZP\3\2") + buf.write("\2\2ZU\3\2\2\2ZV\3\2\2\2[\7\3\2\2\2\\a\5\24\13\2]^\7\32") + buf.write("\2\2^`\5\24\13\2_]\3\2\2\2`c\3\2\2\2a_\3\2\2\2ab\3\2\2") + buf.write("\2b\t\3\2\2\2ca\3\2\2\2de\7\33\2\2ef\5\24\13\2fg\7\34") + buf.write("\2\2go\5\22\n\2hi\7\35\2\2ij\5\24\13\2jk\7\34\2\2kl\5") + buf.write("\22\n\2ln\3\2\2\2mh\3\2\2\2nq\3\2\2\2om\3\2\2\2op\3\2") + buf.write("\2\2pu\3\2\2\2qo\3\2\2\2rs\7\36\2\2st\7\34\2\2tv\5\22") + buf.write("\n\2ur\3\2\2\2uv\3\2\2\2v\u00b0\3\2\2\2wx\7\37\2\2xy\5") + buf.write("\24\13\2yz\7\34\2\2z{\5\22\n\2{\u00b0\3\2\2\2|}\7 \2\2") + buf.write("}~\5\24\13\2~\177\7\34\2\2\177\u0080\5\22\n\2\u0080\u00b0") + buf.write("\3\2\2\2\u0081\u0082\7!\2\2\u0082\u0083\5\26\f\2\u0083") + buf.write("\u0084\7\"\2\2\u0084\u0087\5\26\f\2\u0085\u0086\7#\2\2") + buf.write("\u0086\u0088\5\26\f\2\u0087\u0085\3\2\2\2\u0087\u0088") + buf.write("\3\2\2\2\u0088\u0089\3\2\2\2\u0089\u008a\7\34\2\2\u008a") + buf.write("\u008b\5\22\n\2\u008b\u00b0\3\2\2\2\u008c\u008d\7$\2\2") + buf.write("\u008d\u0092\7L\2\2\u008e\u008f\7%\2\2\u008f\u0090\5 ") + buf.write("\21\2\u0090\u0091\7&\2\2\u0091\u0093\3\2\2\2\u0092\u008e") + buf.write("\3\2\2\2\u0092\u0093\3\2\2\2\u0093\u0094\3\2\2\2\u0094") + buf.write("\u0096\5\16\b\2\u0095\u0097\5\"\22\2\u0096\u0095\3\2\2") + buf.write("\2\u0096\u0097\3\2\2\2\u0097\u009c\3\2\2\2\u0098\u0099") + buf.write("\7\'\2\2\u0099\u009d\5\22\n\2\u009a\u009b\7(\2\2\u009b") + buf.write("\u009d\7\3\2\2\u009c\u0098\3\2\2\2\u009c\u009a\3\2\2\2") + buf.write("\u009d\u00b0\3\2\2\2\u009e\u009f\7)\2\2\u009f\u00a4\7") + buf.write("L\2\2\u00a0\u00a1\7*\2\2\u00a1\u00a2\5\"\22\2\u00a2\u00a3") + buf.write("\7+\2\2\u00a3\u00a5\3\2\2\2\u00a4\u00a0\3\2\2\2\u00a4") + buf.write("\u00a5\3\2\2\2\u00a5\u00a6\3\2\2\2\u00a6\u00a7\7\'\2\2") + buf.write("\u00a7\u00a9\7,\2\2\u00a8\u00aa\5\20\t\2\u00a9\u00a8\3") + buf.write("\2\2\2\u00aa\u00ab\3\2\2\2\u00ab\u00a9\3\2\2\2\u00ab\u00ac") + buf.write("\3\2\2\2\u00ac\u00ad\3\2\2\2\u00ad\u00ae\7-\2\2\u00ae") + buf.write("\u00b0\3\2\2\2\u00afd\3\2\2\2\u00afw\3\2\2\2\u00af|\3") + buf.write("\2\2\2\u00af\u0081\3\2\2\2\u00af\u008c\3\2\2\2\u00af\u009e") + buf.write("\3\2\2\2\u00b0\13\3\2\2\2\u00b1\u00b2\5\"\22\2\u00b2\u00b5") + buf.write("\7L\2\2\u00b3\u00b4\7.\2\2\u00b4\u00b6\5\24\13\2\u00b5") + buf.write("\u00b3\3\2\2\2\u00b5\u00b6\3\2\2\2\u00b6\r\3\2\2\2\u00b7") + buf.write("\u00bd\7*\2\2\u00b8\u00b9\5\f\7\2\u00b9\u00ba\7\32\2\2") + buf.write("\u00ba\u00bc\3\2\2\2\u00bb\u00b8\3\2\2\2\u00bc\u00bf\3") + buf.write("\2\2\2\u00bd\u00bb\3\2\2\2\u00bd\u00be\3\2\2\2\u00be\u00c1") + buf.write("\3\2\2\2\u00bf\u00bd\3\2\2\2\u00c0\u00c2\5\f\7\2\u00c1") + buf.write("\u00c0\3\2\2\2\u00c1\u00c2\3\2\2\2\u00c2\u00c3\3\2\2\2") + buf.write("\u00c3\u00c4\7+\2\2\u00c4\17\3\2\2\2\u00c5\u00c6\5\"\22") + buf.write("\2\u00c6\u00c9\7L\2\2\u00c7\u00c8\7.\2\2\u00c8\u00ca\5") + buf.write("\26\f\2\u00c9\u00c7\3\2\2\2\u00c9\u00ca\3\2\2\2\u00ca") + buf.write("\u00cb\3\2\2\2\u00cb\u00cc\7\3\2\2\u00cc\u00e2\3\2\2\2") + buf.write("\u00cd\u00ce\7$\2\2\u00ce\u00cf\7L\2\2\u00cf\u00d1\5\16") + buf.write("\b\2\u00d0\u00d2\5\"\22\2\u00d1\u00d0\3\2\2\2\u00d1\u00d2") + buf.write("\3\2\2\2\u00d2\u00d7\3\2\2\2\u00d3\u00d4\7\'\2\2\u00d4") + buf.write("\u00d8\5\22\n\2\u00d5\u00d6\7/\2\2\u00d6\u00d8\7\3\2\2") + buf.write("\u00d7\u00d3\3\2\2\2\u00d7\u00d5\3\2\2\2\u00d8\u00e2\3") + buf.write("\2\2\2\u00d9\u00da\7\60\2\2\u00da\u00df\5\16\b\2\u00db") + buf.write("\u00dc\7\'\2\2\u00dc\u00e0\5\22\n\2\u00dd\u00de\7/\2\2") + buf.write("\u00de\u00e0\7\3\2\2\u00df\u00db\3\2\2\2\u00df\u00dd\3") + buf.write("\2\2\2\u00e0\u00e2\3\2\2\2\u00e1\u00c5\3\2\2\2\u00e1\u00cd") + buf.write("\3\2\2\2\u00e1\u00d9\3\2\2\2\u00e2\21\3\2\2\2\u00e3\u00e5") + buf.write("\7,\2\2\u00e4\u00e6\5\4\3\2\u00e5\u00e4\3\2\2\2\u00e6") + buf.write("\u00e7\3\2\2\2\u00e7\u00e5\3\2\2\2\u00e7\u00e8\3\2\2\2") + buf.write("\u00e8\u00e9\3\2\2\2\u00e9\u00ea\7-\2\2\u00ea\23\3\2\2") + buf.write("\2\u00eb\u00ec\b\13\1\2\u00ec\u0119\5\36\20\2\u00ed\u00ee") + buf.write("\7*\2\2\u00ee\u00ef\5\26\f\2\u00ef\u00f0\7+\2\2\u00f0") + buf.write("\u0119\3\2\2\2\u00f1\u00f7\7\61\2\2\u00f2\u00f3\5\24\13") + buf.write("\2\u00f3\u00f4\7\32\2\2\u00f4\u00f6\3\2\2\2\u00f5\u00f2") + buf.write("\3\2\2\2\u00f6\u00f9\3\2\2\2\u00f7\u00f5\3\2\2\2\u00f7") + buf.write("\u00f8\3\2\2\2\u00f8\u00fb\3\2\2\2\u00f9\u00f7\3\2\2\2") + buf.write("\u00fa\u00fc\5\24\13\2\u00fb\u00fa\3\2\2\2\u00fb\u00fc") + buf.write("\3\2\2\2\u00fc\u00fd\3\2\2\2\u00fd\u0119\7\62\2\2\u00fe") + buf.write("\u00ff\7\61\2\2\u00ff\u0101\5\24\13\2\u0100\u0102\5\32") + buf.write("\16\2\u0101\u0100\3\2\2\2\u0102\u0103\3\2\2\2\u0103\u0101") + buf.write("\3\2\2\2\u0103\u0104\3\2\2\2\u0104\u0105\3\2\2\2\u0105") + buf.write("\u0106\7\62\2\2\u0106\u0119\3\2\2\2\u0107\u0108\t\4\2") + buf.write("\2\u0108\u0119\5\24\13\23\u0109\u010a\7?\2\2\u010a\u0119") + buf.write("\5\24\13\b\u010b\u0110\7B\2\2\u010c\u010d\7L\2\2\u010d") + buf.write("\u010f\7\32\2\2\u010e\u010c\3\2\2\2\u010f\u0112\3\2\2") + buf.write("\2\u0110\u010e\3\2\2\2\u0110\u0111\3\2\2\2\u0111\u0114") + buf.write("\3\2\2\2\u0112\u0110\3\2\2\2\u0113\u0115\7L\2\2\u0114") + buf.write("\u0113\3\2\2\2\u0114\u0115\3\2\2\2\u0115\u0116\3\2\2\2") + buf.write("\u0116\u0117\7C\2\2\u0117\u0119\5\24\13\3\u0118\u00eb") + buf.write("\3\2\2\2\u0118\u00ed\3\2\2\2\u0118\u00f1\3\2\2\2\u0118") + buf.write("\u00fe\3\2\2\2\u0118\u0107\3\2\2\2\u0118\u0109\3\2\2\2") + buf.write("\u0118\u010b\3\2\2\2\u0119\u0179\3\2\2\2\u011a\u011b\f") + buf.write("\24\2\2\u011b\u011c\7\13\2\2\u011c\u0178\5\24\13\24\u011d") + buf.write("\u011e\f\22\2\2\u011e\u011f\t\5\2\2\u011f\u0178\5\24\13") + buf.write("\23\u0120\u0121\f\21\2\2\u0121\u0122\t\6\2\2\u0122\u0178") + buf.write("\5\24\13\22\u0123\u0124\f\20\2\2\u0124\u0125\t\7\2\2\u0125") + buf.write("\u0178\5\24\13\21\u0126\u0127\f\17\2\2\u0127\u0128\7\23") + buf.write("\2\2\u0128\u0178\5\24\13\20\u0129\u012a\f\16\2\2\u012a") + buf.write("\u012b\7\24\2\2\u012b\u0178\5\24\13\17\u012c\u012d\f\r") + buf.write("\2\2\u012d\u012e\7\25\2\2\u012e\u0178\5\24\13\16\u012f") + buf.write("\u0130\f\f\2\2\u0130\u0131\t\b\2\2\u0131\u0178\5\24\13") + buf.write("\r\u0132\u0133\f\n\2\2\u0133\u0134\t\t\2\2\u0134\u0178") + buf.write("\5\24\13\13\u0135\u0136\f\t\2\2\u0136\u0137\t\n\2\2\u0137") + buf.write("\u0178\5\24\13\t\u0138\u0139\f\7\2\2\u0139\u013a\7@\2") + buf.write("\2\u013a\u0178\5\24\13\7\u013b\u013c\f\6\2\2\u013c\u013d") + buf.write("\7A\2\2\u013d\u0178\5\24\13\6\u013e\u013f\f\5\2\2\u013f") + buf.write("\u0140\7\26\2\2\u0140\u0178\5\24\13\5\u0141\u0142\f\4") + buf.write("\2\2\u0142\u0143\7\63\2\2\u0143\u0144\5\24\13\2\u0144") + buf.write("\u0145\7.\2\2\u0145\u0146\5\24\13\4\u0146\u0178\3\2\2") + buf.write("\2\u0147\u0149\f\31\2\2\u0148\u014a\7\63\2\2\u0149\u0148") + buf.write("\3\2\2\2\u0149\u014a\3\2\2\2\u014a\u014b\3\2\2\2\u014b") + buf.write("\u014c\7\61\2\2\u014c\u014d\5\26\f\2\u014d\u014e\7\62") + buf.write("\2\2\u014e\u0178\3\2\2\2\u014f\u0150\f\30\2\2\u0150\u0152") + buf.write("\7\61\2\2\u0151\u0153\5\24\13\2\u0152\u0151\3\2\2\2\u0152") + buf.write("\u0153\3\2\2\2\u0153\u0154\3\2\2\2\u0154\u0156\7.\2\2") + buf.write("\u0155\u0157\5\24\13\2\u0156\u0155\3\2\2\2\u0156\u0157") + buf.write("\3\2\2\2\u0157\u015c\3\2\2\2\u0158\u015a\7.\2\2\u0159") + buf.write("\u015b\5\24\13\2\u015a\u0159\3\2\2\2\u015a\u015b\3\2\2") + buf.write("\2\u015b\u015d\3\2\2\2\u015c\u0158\3\2\2\2\u015c\u015d") + buf.write("\3\2\2\2\u015d\u015e\3\2\2\2\u015e\u0178\7\62\2\2\u015f") + buf.write("\u0161\f\27\2\2\u0160\u0162\7\63\2\2\u0161\u0160\3\2\2") + buf.write("\2\u0161\u0162\3\2\2\2\u0162\u0163\3\2\2\2\u0163\u0164") + buf.write("\7\64\2\2\u0164\u0178\7L\2\2\u0165\u0166\f\26\2\2\u0166") + buf.write("\u016c\7*\2\2\u0167\u0168\5\34\17\2\u0168\u0169\7\32\2") + buf.write("\2\u0169\u016b\3\2\2\2\u016a\u0167\3\2\2\2\u016b\u016e") + buf.write("\3\2\2\2\u016c\u016a\3\2\2\2\u016c\u016d\3\2\2\2\u016d") + buf.write("\u0170\3\2\2\2\u016e\u016c\3\2\2\2\u016f\u0171\5\34\17") + buf.write("\2\u0170\u016f\3\2\2\2\u0170\u0171\3\2\2\2\u0171\u0172") + buf.write("\3\2\2\2\u0172\u0178\7+\2\2\u0173\u0174\f\25\2\2\u0174") + buf.write("\u0178\7\65\2\2\u0175\u0176\f\13\2\2\u0176\u0178\78\2") + buf.write("\2\u0177\u011a\3\2\2\2\u0177\u011d\3\2\2\2\u0177\u0120") + buf.write("\3\2\2\2\u0177\u0123\3\2\2\2\u0177\u0126\3\2\2\2\u0177") + buf.write("\u0129\3\2\2\2\u0177\u012c\3\2\2\2\u0177\u012f\3\2\2\2") + buf.write("\u0177\u0132\3\2\2\2\u0177\u0135\3\2\2\2\u0177\u0138\3") + buf.write("\2\2\2\u0177\u013b\3\2\2\2\u0177\u013e\3\2\2\2\u0177\u0141") + buf.write("\3\2\2\2\u0177\u0147\3\2\2\2\u0177\u014f\3\2\2\2\u0177") + buf.write("\u015f\3\2\2\2\u0177\u0165\3\2\2\2\u0177\u0173\3\2\2\2") + buf.write("\u0177\u0175\3\2\2\2\u0178\u017b\3\2\2\2\u0179\u0177\3") + buf.write("\2\2\2\u0179\u017a\3\2\2\2\u017a\25\3\2\2\2\u017b\u0179") + buf.write("\3\2\2\2\u017c\u017d\5\24\13\2\u017d\u017e\7\32\2\2\u017e") + buf.write("\u0180\3\2\2\2\u017f\u017c\3\2\2\2\u0180\u0183\3\2\2\2") + buf.write("\u0181\u017f\3\2\2\2\u0181\u0182\3\2\2\2\u0182\u0184\3") + buf.write("\2\2\2\u0183\u0181\3\2\2\2\u0184\u0185\5\24\13\2\u0185") + buf.write("\27\3\2\2\2\u0186\u0187\5\26\f\2\u0187\u0188\7\2\2\3\u0188") + buf.write("\31\3\2\2\2\u0189\u018a\7!\2\2\u018a\u018b\5\26\f\2\u018b") + buf.write("\u018c\7\"\2\2\u018c\u018f\5\26\f\2\u018d\u018e\7#\2\2") + buf.write("\u018e\u0190\5\26\f\2\u018f\u018d\3\2\2\2\u018f\u0190") + buf.write("\3\2\2\2\u0190\u0194\3\2\2\2\u0191\u0192\7\33\2\2\u0192") + buf.write("\u0194\5\24\13\2\u0193\u0189\3\2\2\2\u0193\u0191\3\2\2") + buf.write("\2\u0194\33\3\2\2\2\u0195\u0196\7L\2\2\u0196\u0198\7\n") + buf.write("\2\2\u0197\u0195\3\2\2\2\u0197\u0198\3\2\2\2\u0198\u0199") + buf.write("\3\2\2\2\u0199\u019a\5\24\13\2\u019a\35\3\2\2\2\u019b") + buf.write("\u01a4\7H\2\2\u019c\u01a4\7I\2\2\u019d\u01a4\t\13\2\2") + buf.write("\u019e\u01a4\7J\2\2\u019f\u01a4\7K\2\2\u01a0\u01a4\7F") + buf.write("\2\2\u01a1\u01a4\7G\2\2\u01a2\u01a4\7L\2\2\u01a3\u019b") + buf.write("\3\2\2\2\u01a3\u019c\3\2\2\2\u01a3\u019d\3\2\2\2\u01a3") + buf.write("\u019e\3\2\2\2\u01a3\u019f\3\2\2\2\u01a3\u01a0\3\2\2\2") + buf.write("\u01a3\u01a1\3\2\2\2\u01a3\u01a2\3\2\2\2\u01a4\37\3\2") + buf.write("\2\2\u01a5\u01a6\7L\2\2\u01a6\u01a8\7\32\2\2\u01a7\u01a5") + buf.write("\3\2\2\2\u01a8\u01ab\3\2\2\2\u01a9\u01a7\3\2\2\2\u01a9") + buf.write("\u01aa\3\2\2\2\u01aa\u01ac\3\2\2\2\u01ab\u01a9\3\2\2\2") + buf.write("\u01ac\u01ad\7L\2\2\u01ad!\3\2\2\2\u01ae\u01af\b\22\1") + buf.write("\2\u01af\u01bb\7L\2\2\u01b0\u01b1\7*\2\2\u01b1\u01b2\5") + buf.write("\"\22\2\u01b2\u01b3\7+\2\2\u01b3\u01bb\3\2\2\2\u01b4\u01b5") + buf.write("\7\61\2\2\u01b5\u01b6\5\"\22\2\u01b6\u01b7\7\62\2\2\u01b7") + buf.write("\u01bb\3\2\2\2\u01b8\u01b9\7C\2\2\u01b9\u01bb\5\"\22\3") + buf.write("\u01ba\u01ae\3\2\2\2\u01ba\u01b0\3\2\2\2\u01ba\u01b4\3") + buf.write("\2\2\2\u01ba\u01b8\3\2\2\2\u01bb\u01c6\3\2\2\2\u01bc\u01bd") + buf.write("\f\5\2\2\u01bd\u01be\7\f\2\2\u01be\u01c5\5\"\22\5\u01bf") + buf.write("\u01c0\f\4\2\2\u01c0\u01c1\7C\2\2\u01c1\u01c5\5\"\22\4") + buf.write("\u01c2\u01c3\f\6\2\2\u01c3\u01c5\7\63\2\2\u01c4\u01bc") + buf.write("\3\2\2\2\u01c4\u01bf\3\2\2\2\u01c4\u01c2\3\2\2\2\u01c5") + buf.write("\u01c8\3\2\2\2\u01c6\u01c4\3\2\2\2\u01c6\u01c7\3\2\2\2") + buf.write("\u01c7#\3\2\2\2\u01c8\u01c6\3\2\2\2\66\'\60:?ELXZaou\u0087") + buf.write("\u0092\u0096\u009c\u00a4\u00ab\u00af\u00b5\u00bd\u00c1") + buf.write("\u00c9\u00d1\u00d7\u00df\u00e1\u00e7\u00f7\u00fb\u0103") + buf.write("\u0110\u0114\u0118\u0149\u0152\u0156\u015a\u015c\u0161") + buf.write("\u016c\u0170\u0177\u0179\u0181\u018f\u0193\u0197\u01a3") + buf.write("\u01a9\u01ba\u01c4\u01c6") return buf.getvalue() @@ -255,11 +259,11 @@ class PyxellParser ( Parser ): "','", "'if'", "'do'", "'elif'", "'else'", "'while'", "'until'", "'for'", "'in'", "'step'", "'func'", "'<'", "'>'", "'def'", "'extern'", "'class'", "'('", "')'", - "'{'", "'}'", "':'", "'constructor'", "'['", "']'", - "'?'", "'.'", "'!'", "'~'", "'..'", "'...'", "'is'", - "'isn't'", "'=='", "'!='", "'<='", "'>='", "'not'", - "'and'", "'or'", "'lambda'", "'->'", "'true'", "'false'", - "'null'", "'super'" ] + "'{'", "'}'", "':'", "'abstract'", "'constructor'", + "'['", "']'", "'?'", "'.'", "'!'", "'~'", "'..'", "'...'", + "'is'", "'isn't'", "'=='", "'!='", "'<='", "'>='", + "'not'", "'and'", "'or'", "'lambda'", "'->'", "'true'", + "'false'", "'null'", "'super'" ] symbolicNames = [ "", "", "", "", "", "", "", "", @@ -278,8 +282,8 @@ class PyxellParser ( Parser ): "", "", "", "", "", "", "", "", "", "", "", "", - "", "INT", "FLOAT", "CHAR", "STRING", "ID", - "COMMENT", "WS", "ERR" ] + "", "", "INT", "FLOAT", "CHAR", + "STRING", "ID", "COMMENT", "WS", "ERR" ] RULE_program = 0 RULE_stmt = 1 @@ -373,14 +377,15 @@ class PyxellParser ( Parser ): T__65=66 T__66=67 T__67=68 - INT=69 - FLOAT=70 - CHAR=71 - STRING=72 - ID=73 - COMMENT=74 - WS=75 - ERR=76 + T__68=69 + INT=70 + FLOAT=71 + CHAR=72 + STRING=73 + ID=74 + COMMENT=75 + WS=76 + ERR=77 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -429,7 +434,7 @@ def program(self): self.state = 37 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__38) | (1 << PyxellParser.T__39) | (1 << PyxellParser.T__45) | (1 << PyxellParser.T__50) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.T__66 - 64)) | (1 << (PyxellParser.T__67 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0): + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__38) | (1 << PyxellParser.T__39) | (1 << PyxellParser.T__46) | (1 << PyxellParser.T__51) | (1 << PyxellParser.T__60))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.T__66 - 64)) | (1 << (PyxellParser.T__67 - 64)) | (1 << (PyxellParser.T__68 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0): self.state = 34 self.stmt() self.state = 39 @@ -481,7 +486,7 @@ def stmt(self): self.state = 46 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__1, PyxellParser.T__5, PyxellParser.T__6, PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__20, PyxellParser.T__21, PyxellParser.T__22, PyxellParser.T__39, PyxellParser.T__45, PyxellParser.T__50, PyxellParser.T__59, PyxellParser.T__62, PyxellParser.T__63, PyxellParser.T__64, PyxellParser.T__65, PyxellParser.T__66, PyxellParser.T__67, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: + if token in [PyxellParser.T__1, PyxellParser.T__5, PyxellParser.T__6, PyxellParser.T__12, PyxellParser.T__13, PyxellParser.T__20, PyxellParser.T__21, PyxellParser.T__22, PyxellParser.T__39, PyxellParser.T__46, PyxellParser.T__51, PyxellParser.T__60, PyxellParser.T__63, PyxellParser.T__64, PyxellParser.T__65, PyxellParser.T__66, PyxellParser.T__67, PyxellParser.T__68, PyxellParser.INT, PyxellParser.FLOAT, PyxellParser.CHAR, PyxellParser.STRING, PyxellParser.ID]: self.enterOuterAlt(localctx, 1) self.state = 42 self.simple_stmt() @@ -735,7 +740,7 @@ def simple_stmt(self): self.state = 61 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__39 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.T__67 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__39 - 13)) | (1 << (PyxellParser.T__46 - 13)) | (1 << (PyxellParser.T__51 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.T__67 - 13)) | (1 << (PyxellParser.T__68 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): self.state = 60 self.tuple_expr() @@ -821,7 +826,7 @@ def simple_stmt(self): self.state = 86 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__39 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.T__67 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__39 - 13)) | (1 << (PyxellParser.T__46 - 13)) | (1 << (PyxellParser.T__51 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.T__67 - 13)) | (1 << (PyxellParser.T__68 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): self.state = 85 self.tuple_expr() @@ -1178,7 +1183,7 @@ def compound_stmt(self): self.state = 148 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 40)) & ~0x3f) == 0 and ((1 << (_la - 40)) & ((1 << (PyxellParser.T__39 - 40)) | (1 << (PyxellParser.T__45 - 40)) | (1 << (PyxellParser.T__63 - 40)) | (1 << (PyxellParser.ID - 40)))) != 0): + if ((((_la - 40)) & ~0x3f) == 0 and ((1 << (_la - 40)) & ((1 << (PyxellParser.T__39 - 40)) | (1 << (PyxellParser.T__46 - 40)) | (1 << (PyxellParser.T__64 - 40)) | (1 << (PyxellParser.ID - 40)))) != 0): self.state = 147 localctx.ret = self.typ(0) @@ -1234,7 +1239,7 @@ def compound_stmt(self): self.state = 169 self._errHandler.sync(self) _la = self._input.LA(1) - if not (((((_la - 34)) & ~0x3f) == 0 and ((1 << (_la - 34)) & ((1 << (PyxellParser.T__33 - 34)) | (1 << (PyxellParser.T__39 - 34)) | (1 << (PyxellParser.T__44 - 34)) | (1 << (PyxellParser.T__45 - 34)) | (1 << (PyxellParser.T__63 - 34)) | (1 << (PyxellParser.ID - 34)))) != 0)): + if not (((((_la - 34)) & ~0x3f) == 0 and ((1 << (_la - 34)) & ((1 << (PyxellParser.T__33 - 34)) | (1 << (PyxellParser.T__39 - 34)) | (1 << (PyxellParser.T__45 - 34)) | (1 << (PyxellParser.T__46 - 34)) | (1 << (PyxellParser.T__64 - 34)) | (1 << (PyxellParser.ID - 34)))) != 0)): break self.state = 171 @@ -1372,7 +1377,7 @@ def func_args(self): self.state = 191 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 40)) & ~0x3f) == 0 and ((1 << (_la - 40)) & ((1 << (PyxellParser.T__39 - 40)) | (1 << (PyxellParser.T__45 - 40)) | (1 << (PyxellParser.T__63 - 40)) | (1 << (PyxellParser.ID - 40)))) != 0): + if ((((_la - 40)) & ~0x3f) == 0 and ((1 << (_la - 40)) & ((1 << (PyxellParser.T__39 - 40)) | (1 << (PyxellParser.T__46 - 40)) | (1 << (PyxellParser.T__64 - 40)) | (1 << (PyxellParser.ID - 40)))) != 0): self.state = 190 self.func_arg() @@ -1414,12 +1419,12 @@ def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Cla def ID(self): return self.getToken(PyxellParser.ID, 0) - def block(self): - return self.getTypedRuleContext(PyxellParser.BlockContext,0) - def func_args(self): return self.getTypedRuleContext(PyxellParser.Func_argsContext,0) + def block(self): + return self.getTypedRuleContext(PyxellParser.BlockContext,0) + def typ(self): return self.getTypedRuleContext(PyxellParser.TypContext,0) @@ -1460,12 +1465,12 @@ def __init__(self, parser, ctx:ParserRuleContext): # actually a PyxellParser.Cla self.args = None # Func_argsContext self.copyFrom(ctx) - def block(self): - return self.getTypedRuleContext(PyxellParser.BlockContext,0) - def func_args(self): return self.getTypedRuleContext(PyxellParser.Func_argsContext,0) + def block(self): + return self.getTypedRuleContext(PyxellParser.BlockContext,0) + def accept(self, visitor:ParseTreeVisitor): if hasattr( visitor, "visitClassConstructor" ): @@ -1481,10 +1486,10 @@ def class_member(self): self.enterRule(localctx, 14, self.RULE_class_member) self._la = 0 # Token type try: - self.state = 217 + self.state = 223 self._errHandler.sync(self) token = self._input.LA(1) - if token in [PyxellParser.T__39, PyxellParser.T__45, PyxellParser.T__63, PyxellParser.ID]: + if token in [PyxellParser.T__39, PyxellParser.T__46, PyxellParser.T__64, PyxellParser.ID]: localctx = PyxellParser.ClassFieldContext(self, localctx) self.enterOuterAlt(localctx, 1) self.state = 195 @@ -1516,27 +1521,55 @@ def class_member(self): self.state = 207 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 40)) & ~0x3f) == 0 and ((1 << (_la - 40)) & ((1 << (PyxellParser.T__39 - 40)) | (1 << (PyxellParser.T__45 - 40)) | (1 << (PyxellParser.T__63 - 40)) | (1 << (PyxellParser.ID - 40)))) != 0): + if ((((_la - 40)) & ~0x3f) == 0 and ((1 << (_la - 40)) & ((1 << (PyxellParser.T__39 - 40)) | (1 << (PyxellParser.T__46 - 40)) | (1 << (PyxellParser.T__64 - 40)) | (1 << (PyxellParser.ID - 40)))) != 0): self.state = 206 localctx.ret = self.typ(0) - self.state = 209 - self.match(PyxellParser.T__36) - self.state = 210 - self.block() + self.state = 213 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [PyxellParser.T__36]: + self.state = 209 + self.match(PyxellParser.T__36) + self.state = 210 + self.block() + pass + elif token in [PyxellParser.T__44]: + self.state = 211 + self.match(PyxellParser.T__44) + self.state = 212 + self.match(PyxellParser.T__0) + pass + else: + raise NoViableAltException(self) + pass - elif token in [PyxellParser.T__44]: + elif token in [PyxellParser.T__45]: localctx = PyxellParser.ClassConstructorContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 212 - self.match(PyxellParser.T__44) - self.state = 213 - localctx.args = self.func_args() - self.state = 214 - self.match(PyxellParser.T__36) self.state = 215 - self.block() + self.match(PyxellParser.T__45) + self.state = 216 + localctx.args = self.func_args() + self.state = 221 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [PyxellParser.T__36]: + self.state = 217 + self.match(PyxellParser.T__36) + self.state = 218 + self.block() + pass + elif token in [PyxellParser.T__44]: + self.state = 219 + self.match(PyxellParser.T__44) + self.state = 220 + self.match(PyxellParser.T__0) + pass + else: + raise NoViableAltException(self) + pass else: raise NoViableAltException(self) @@ -1582,21 +1615,21 @@ def block(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 219 + self.state = 225 self.match(PyxellParser.T__41) - self.state = 221 + self.state = 227 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 220 + self.state = 226 self.stmt() - self.state = 223 + self.state = 229 self._errHandler.sync(self) _la = self._input.LA(1) - if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__38) | (1 << PyxellParser.T__39) | (1 << PyxellParser.T__45) | (1 << PyxellParser.T__50) | (1 << PyxellParser.T__59) | (1 << PyxellParser.T__62))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.T__66 - 64)) | (1 << (PyxellParser.T__67 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0)): + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__1) | (1 << PyxellParser.T__5) | (1 << PyxellParser.T__6) | (1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__20) | (1 << PyxellParser.T__21) | (1 << PyxellParser.T__22) | (1 << PyxellParser.T__24) | (1 << PyxellParser.T__28) | (1 << PyxellParser.T__29) | (1 << PyxellParser.T__30) | (1 << PyxellParser.T__33) | (1 << PyxellParser.T__38) | (1 << PyxellParser.T__39) | (1 << PyxellParser.T__46) | (1 << PyxellParser.T__51) | (1 << PyxellParser.T__60))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (PyxellParser.T__63 - 64)) | (1 << (PyxellParser.T__64 - 64)) | (1 << (PyxellParser.T__65 - 64)) | (1 << (PyxellParser.T__66 - 64)) | (1 << (PyxellParser.T__67 - 64)) | (1 << (PyxellParser.T__68 - 64)) | (1 << (PyxellParser.INT - 64)) | (1 << (PyxellParser.FLOAT - 64)) | (1 << (PyxellParser.CHAR - 64)) | (1 << (PyxellParser.STRING - 64)) | (1 << (PyxellParser.ID - 64)))) != 0)): break - self.state = 225 + self.state = 231 self.match(PyxellParser.T__42) except RecognitionException as re: localctx.exception = re @@ -1962,15 +1995,15 @@ def expr(self, _p:int=0): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 272 + self.state = 278 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,30,self._ctx) + la_ = self._interp.adaptivePredict(self._input,32,self._ctx) if la_ == 1: localctx = PyxellParser.ExprAtomContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 228 + self.state = 234 self.atom() pass @@ -1978,11 +2011,11 @@ def expr(self, _p:int=0): localctx = PyxellParser.ExprParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 229 + self.state = 235 self.match(PyxellParser.T__39) - self.state = 230 + self.state = 236 self.tuple_expr() - self.state = 231 + self.state = 237 self.match(PyxellParser.T__40) pass @@ -1990,70 +2023,70 @@ def expr(self, _p:int=0): localctx = PyxellParser.ExprArrayContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 233 - self.match(PyxellParser.T__45) self.state = 239 + self.match(PyxellParser.T__46) + self.state = 245 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,25,self._ctx) + _alt = self._interp.adaptivePredict(self._input,27,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 234 + self.state = 240 self.expr(0) - self.state = 235 + self.state = 241 self.match(PyxellParser.T__23) - self.state = 241 + self.state = 247 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,25,self._ctx) + _alt = self._interp.adaptivePredict(self._input,27,self._ctx) - self.state = 243 + self.state = 249 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__39 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.T__67 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 242 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__39 - 13)) | (1 << (PyxellParser.T__46 - 13)) | (1 << (PyxellParser.T__51 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.T__67 - 13)) | (1 << (PyxellParser.T__68 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 248 self.expr(0) - self.state = 245 - self.match(PyxellParser.T__46) + self.state = 251 + self.match(PyxellParser.T__47) pass elif la_ == 4: localctx = PyxellParser.ExprArrayComprehensionContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 246 - self.match(PyxellParser.T__45) - self.state = 247 + self.state = 252 + self.match(PyxellParser.T__46) + self.state = 253 self.expr(0) - self.state = 249 + self.state = 255 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 248 + self.state = 254 self.comprehension() - self.state = 251 + self.state = 257 self._errHandler.sync(self) _la = self._input.LA(1) if not (_la==PyxellParser.T__24 or _la==PyxellParser.T__30): break - self.state = 253 - self.match(PyxellParser.T__46) + self.state = 259 + self.match(PyxellParser.T__47) pass elif la_ == 5: localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 255 + self.state = 261 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__50))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__12) | (1 << PyxellParser.T__13) | (1 << PyxellParser.T__51))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 256 + self.state = 262 self.expr(17) pass @@ -2061,9 +2094,9 @@ def expr(self, _p:int=0): localctx = PyxellParser.ExprUnaryOpContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 257 - localctx.op = self.match(PyxellParser.T__59) - self.state = 258 + self.state = 263 + localctx.op = self.match(PyxellParser.T__60) + self.state = 264 self.expr(6) pass @@ -2071,69 +2104,69 @@ def expr(self, _p:int=0): localctx = PyxellParser.ExprLambdaContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 259 - self.match(PyxellParser.T__62) - self.state = 264 + self.state = 265 + self.match(PyxellParser.T__63) + self.state = 270 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,28,self._ctx) + _alt = self._interp.adaptivePredict(self._input,30,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 260 + self.state = 266 self.match(PyxellParser.ID) - self.state = 261 + self.state = 267 self.match(PyxellParser.T__23) - self.state = 266 + self.state = 272 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,28,self._ctx) + _alt = self._interp.adaptivePredict(self._input,30,self._ctx) - self.state = 268 + self.state = 274 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.ID: - self.state = 267 + self.state = 273 self.match(PyxellParser.ID) - self.state = 270 - self.match(PyxellParser.T__63) - self.state = 271 + self.state = 276 + self.match(PyxellParser.T__64) + self.state = 277 self.expr(1) pass self._ctx.stop = self._input.LT(-1) - self.state = 369 + self.state = 375 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,40,self._ctx) + _alt = self._interp.adaptivePredict(self._input,42,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 367 + self.state = 373 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,39,self._ctx) + la_ = self._interp.adaptivePredict(self._input,41,self._ctx) if la_ == 1: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 274 + self.state = 280 if not self.precpred(self._ctx, 18): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 18)") - self.state = 275 + self.state = 281 localctx.op = self.match(PyxellParser.T__8) - self.state = 276 + self.state = 282 self.expr(18) pass elif la_ == 2: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 277 + self.state = 283 if not self.precpred(self._ctx, 16): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 16)") - self.state = 278 + self.state = 284 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__9) | (1 << PyxellParser.T__10) | (1 << PyxellParser.T__11))) != 0)): @@ -2141,18 +2174,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 279 + self.state = 285 self.expr(17) pass elif la_ == 3: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 280 + self.state = 286 if not self.precpred(self._ctx, 15): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 15)") - self.state = 281 + self.state = 287 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__12 or _la==PyxellParser.T__13): @@ -2160,18 +2193,18 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 282 + self.state = 288 self.expr(16) pass elif la_ == 4: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 283 + self.state = 289 if not self.precpred(self._ctx, 14): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 14)") - self.state = 284 + self.state = 290 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==PyxellParser.T__14 or _la==PyxellParser.T__15): @@ -2179,313 +2212,313 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 285 + self.state = 291 self.expr(15) pass elif la_ == 5: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 286 + self.state = 292 if not self.precpred(self._ctx, 13): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") - self.state = 287 + self.state = 293 localctx.op = self.match(PyxellParser.T__16) - self.state = 288 + self.state = 294 self.expr(14) pass elif la_ == 6: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 289 + self.state = 295 if not self.precpred(self._ctx, 12): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 12)") - self.state = 290 + self.state = 296 localctx.op = self.match(PyxellParser.T__17) - self.state = 291 + self.state = 297 self.expr(13) pass elif la_ == 7: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 292 + self.state = 298 if not self.precpred(self._ctx, 11): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") - self.state = 293 + self.state = 299 localctx.op = self.match(PyxellParser.T__18) - self.state = 294 + self.state = 300 self.expr(12) pass elif la_ == 8: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 295 + self.state = 301 if not self.precpred(self._ctx, 10): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") - self.state = 296 + self.state = 302 localctx.dots = self._input.LT(1) _la = self._input.LA(1) - if not(_la==PyxellParser.T__51 or _la==PyxellParser.T__52): + if not(_la==PyxellParser.T__52 or _la==PyxellParser.T__53): localctx.dots = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 297 + self.state = 303 self.expr(11) pass elif la_ == 9: localctx = PyxellParser.ExprIsContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 298 + self.state = 304 if not self.precpred(self._ctx, 8): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") - self.state = 299 + self.state = 305 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not(_la==PyxellParser.T__53 or _la==PyxellParser.T__54): + if not(_la==PyxellParser.T__54 or _la==PyxellParser.T__55): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 300 + self.state = 306 self.expr(9) pass elif la_ == 10: localctx = PyxellParser.ExprCmpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 301 + self.state = 307 if not self.precpred(self._ctx, 7): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") - self.state = 302 + self.state = 308 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__34) | (1 << PyxellParser.T__35) | (1 << PyxellParser.T__55) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << PyxellParser.T__34) | (1 << PyxellParser.T__35) | (1 << PyxellParser.T__56) | (1 << PyxellParser.T__57) | (1 << PyxellParser.T__58) | (1 << PyxellParser.T__59))) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 303 + self.state = 309 self.expr(7) pass elif la_ == 11: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 304 + self.state = 310 if not self.precpred(self._ctx, 5): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") - self.state = 305 - localctx.op = self.match(PyxellParser.T__60) - self.state = 306 + self.state = 311 + localctx.op = self.match(PyxellParser.T__61) + self.state = 312 self.expr(5) pass elif la_ == 12: localctx = PyxellParser.ExprLogicalOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 307 + self.state = 313 if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") - self.state = 308 - localctx.op = self.match(PyxellParser.T__61) - self.state = 309 + self.state = 314 + localctx.op = self.match(PyxellParser.T__62) + self.state = 315 self.expr(4) pass elif la_ == 13: localctx = PyxellParser.ExprBinaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 310 + self.state = 316 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 311 + self.state = 317 localctx.op = self.match(PyxellParser.T__19) - self.state = 312 + self.state = 318 self.expr(3) pass elif la_ == 14: localctx = PyxellParser.ExprCondContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 313 + self.state = 319 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 314 - self.match(PyxellParser.T__47) - self.state = 315 + self.state = 320 + self.match(PyxellParser.T__48) + self.state = 321 self.expr(0) - self.state = 316 + self.state = 322 self.match(PyxellParser.T__43) - self.state = 317 + self.state = 323 self.expr(2) pass elif la_ == 15: localctx = PyxellParser.ExprIndexContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 319 + self.state = 325 if not self.precpred(self._ctx, 23): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 23)") - self.state = 321 + self.state = 327 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__47: - self.state = 320 - localctx.safe = self.match(PyxellParser.T__47) + if _la==PyxellParser.T__48: + self.state = 326 + localctx.safe = self.match(PyxellParser.T__48) - self.state = 323 - self.match(PyxellParser.T__45) - self.state = 324 - self.tuple_expr() - self.state = 325 + self.state = 329 self.match(PyxellParser.T__46) + self.state = 330 + self.tuple_expr() + self.state = 331 + self.match(PyxellParser.T__47) pass elif la_ == 16: localctx = PyxellParser.ExprSliceContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 327 + self.state = 333 if not self.precpred(self._ctx, 22): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 22)") - self.state = 328 - self.match(PyxellParser.T__45) - self.state = 330 + self.state = 334 + self.match(PyxellParser.T__46) + self.state = 336 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__39 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.T__67 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 329 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__39 - 13)) | (1 << (PyxellParser.T__46 - 13)) | (1 << (PyxellParser.T__51 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.T__67 - 13)) | (1 << (PyxellParser.T__68 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 335 localctx.e1 = self.expr(0) - self.state = 332 + self.state = 338 self.match(PyxellParser.T__43) - self.state = 334 + self.state = 340 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__39 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.T__67 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 333 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__39 - 13)) | (1 << (PyxellParser.T__46 - 13)) | (1 << (PyxellParser.T__51 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.T__67 - 13)) | (1 << (PyxellParser.T__68 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 339 localctx.e2 = self.expr(0) - self.state = 340 + self.state = 346 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__43: - self.state = 336 + self.state = 342 self.match(PyxellParser.T__43) - self.state = 338 + self.state = 344 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__39 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.T__67 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 337 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__39 - 13)) | (1 << (PyxellParser.T__46 - 13)) | (1 << (PyxellParser.T__51 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.T__67 - 13)) | (1 << (PyxellParser.T__68 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 343 localctx.e3 = self.expr(0) - self.state = 342 - self.match(PyxellParser.T__46) + self.state = 348 + self.match(PyxellParser.T__47) pass elif la_ == 17: localctx = PyxellParser.ExprAttrContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 343 + self.state = 349 if not self.precpred(self._ctx, 21): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 21)") - self.state = 345 + self.state = 351 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==PyxellParser.T__47: - self.state = 344 - localctx.safe = self.match(PyxellParser.T__47) + if _la==PyxellParser.T__48: + self.state = 350 + localctx.safe = self.match(PyxellParser.T__48) - self.state = 347 - self.match(PyxellParser.T__48) - self.state = 348 + self.state = 353 + self.match(PyxellParser.T__49) + self.state = 354 self.match(PyxellParser.ID) pass elif la_ == 18: localctx = PyxellParser.ExprCallContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 349 + self.state = 355 if not self.precpred(self._ctx, 20): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 20)") - self.state = 350 - self.match(PyxellParser.T__39) self.state = 356 + self.match(PyxellParser.T__39) + self.state = 362 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,37,self._ctx) + _alt = self._interp.adaptivePredict(self._input,39,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 351 + self.state = 357 self.call_arg() - self.state = 352 + self.state = 358 self.match(PyxellParser.T__23) - self.state = 358 + self.state = 364 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,37,self._ctx) + _alt = self._interp.adaptivePredict(self._input,39,self._ctx) - self.state = 360 + self.state = 366 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__39 - 13)) | (1 << (PyxellParser.T__45 - 13)) | (1 << (PyxellParser.T__50 - 13)) | (1 << (PyxellParser.T__59 - 13)) | (1 << (PyxellParser.T__62 - 13)) | (1 << (PyxellParser.T__64 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.T__67 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): - self.state = 359 + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & ((1 << (PyxellParser.T__12 - 13)) | (1 << (PyxellParser.T__13 - 13)) | (1 << (PyxellParser.T__39 - 13)) | (1 << (PyxellParser.T__46 - 13)) | (1 << (PyxellParser.T__51 - 13)) | (1 << (PyxellParser.T__60 - 13)) | (1 << (PyxellParser.T__63 - 13)) | (1 << (PyxellParser.T__65 - 13)) | (1 << (PyxellParser.T__66 - 13)) | (1 << (PyxellParser.T__67 - 13)) | (1 << (PyxellParser.T__68 - 13)) | (1 << (PyxellParser.INT - 13)) | (1 << (PyxellParser.FLOAT - 13)) | (1 << (PyxellParser.CHAR - 13)) | (1 << (PyxellParser.STRING - 13)) | (1 << (PyxellParser.ID - 13)))) != 0): + self.state = 365 self.call_arg() - self.state = 362 + self.state = 368 self.match(PyxellParser.T__40) pass elif la_ == 19: localctx = PyxellParser.ExprUnaryOpContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 363 + self.state = 369 if not self.precpred(self._ctx, 19): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 19)") - self.state = 364 - localctx.op = self.match(PyxellParser.T__49) + self.state = 370 + localctx.op = self.match(PyxellParser.T__50) pass elif la_ == 20: localctx = PyxellParser.ExprRangeContext(self, PyxellParser.ExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 365 + self.state = 371 if not self.precpred(self._ctx, 9): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") - self.state = 366 - localctx.dots = self.match(PyxellParser.T__52) + self.state = 372 + localctx.dots = self.match(PyxellParser.T__53) pass - self.state = 371 + self.state = 377 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,40,self._ctx) + _alt = self._interp.adaptivePredict(self._input,42,self._ctx) except RecognitionException as re: localctx.exception = re @@ -2540,20 +2573,20 @@ def tuple_expr(self): try: localctx = PyxellParser.ExprTupleContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 377 + self.state = 383 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,41,self._ctx) + _alt = self._interp.adaptivePredict(self._input,43,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 372 + self.state = 378 self.expr(0) - self.state = 373 + self.state = 379 self.match(PyxellParser.T__23) - self.state = 379 + self.state = 385 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,41,self._ctx) + _alt = self._interp.adaptivePredict(self._input,43,self._ctx) - self.state = 380 + self.state = 386 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -2607,9 +2640,9 @@ def interpolation_expr(self): try: localctx = PyxellParser.ExprInterpolationContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 382 + self.state = 388 self.tuple_expr() - self.state = 383 + self.state = 389 self.match(PyxellParser.EOF) except RecognitionException as re: localctx.exception = re @@ -2680,27 +2713,27 @@ def comprehension(self): self.enterRule(localctx, 24, self.RULE_comprehension) self._la = 0 # Token type try: - self.state = 395 + self.state = 401 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.T__30]: localctx = PyxellParser.ComprehensionGeneratorContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 385 + self.state = 391 self.match(PyxellParser.T__30) - self.state = 386 + self.state = 392 self.tuple_expr() - self.state = 387 + self.state = 393 self.match(PyxellParser.T__31) - self.state = 388 + self.state = 394 self.tuple_expr() - self.state = 391 + self.state = 397 self._errHandler.sync(self) _la = self._input.LA(1) if _la==PyxellParser.T__32: - self.state = 389 + self.state = 395 self.match(PyxellParser.T__32) - self.state = 390 + self.state = 396 self.tuple_expr() @@ -2708,9 +2741,9 @@ def comprehension(self): elif token in [PyxellParser.T__24]: localctx = PyxellParser.ComprehensionFilterContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 393 + self.state = 399 self.match(PyxellParser.T__24) - self.state = 394 + self.state = 400 self.expr(0) pass else: @@ -2768,17 +2801,17 @@ def call_arg(self): try: localctx = PyxellParser.CallArgContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 399 + self.state = 405 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,44,self._ctx) + la_ = self._interp.adaptivePredict(self._input,46,self._ctx) if la_ == 1: - self.state = 397 + self.state = 403 self.match(PyxellParser.ID) - self.state = 398 + self.state = 404 self.match(PyxellParser.T__7) - self.state = 401 + self.state = 407 self.expr(0) except RecognitionException as re: localctx.exception = re @@ -2934,27 +2967,27 @@ def atom(self): self.enterRule(localctx, 28, self.RULE_atom) self._la = 0 # Token type try: - self.state = 411 + self.state = 417 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.INT]: localctx = PyxellParser.AtomIntContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 403 + self.state = 409 self.match(PyxellParser.INT) pass elif token in [PyxellParser.FLOAT]: localctx = PyxellParser.AtomFloatContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 404 + self.state = 410 self.match(PyxellParser.FLOAT) pass - elif token in [PyxellParser.T__64, PyxellParser.T__65]: + elif token in [PyxellParser.T__65, PyxellParser.T__66]: localctx = PyxellParser.AtomBoolContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 405 + self.state = 411 _la = self._input.LA(1) - if not(_la==PyxellParser.T__64 or _la==PyxellParser.T__65): + if not(_la==PyxellParser.T__65 or _la==PyxellParser.T__66): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -2963,31 +2996,31 @@ def atom(self): elif token in [PyxellParser.CHAR]: localctx = PyxellParser.AtomCharContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 406 + self.state = 412 self.match(PyxellParser.CHAR) pass elif token in [PyxellParser.STRING]: localctx = PyxellParser.AtomStringContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 407 + self.state = 413 self.match(PyxellParser.STRING) pass - elif token in [PyxellParser.T__66]: + elif token in [PyxellParser.T__67]: localctx = PyxellParser.AtomNullContext(self, localctx) self.enterOuterAlt(localctx, 6) - self.state = 408 - self.match(PyxellParser.T__66) + self.state = 414 + self.match(PyxellParser.T__67) pass - elif token in [PyxellParser.T__67]: + elif token in [PyxellParser.T__68]: localctx = PyxellParser.AtomSuperContext(self, localctx) self.enterOuterAlt(localctx, 7) - self.state = 409 - self.match(PyxellParser.T__67) + self.state = 415 + self.match(PyxellParser.T__68) pass elif token in [PyxellParser.ID]: localctx = PyxellParser.AtomIdContext(self, localctx) self.enterOuterAlt(localctx, 8) - self.state = 410 + self.state = 416 self.match(PyxellParser.ID) pass else: @@ -3045,20 +3078,20 @@ def id_list(self): try: localctx = PyxellParser.IdListContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 417 + self.state = 423 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,46,self._ctx) + _alt = self._interp.adaptivePredict(self._input,48,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 413 + self.state = 419 self.match(PyxellParser.ID) - self.state = 414 + self.state = 420 self.match(PyxellParser.T__23) - self.state = 419 + self.state = 425 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,46,self._ctx) + _alt = self._interp.adaptivePredict(self._input,48,self._ctx) - self.state = 420 + self.state = 426 self.match(PyxellParser.ID) except RecognitionException as re: localctx.exception = re @@ -3218,7 +3251,7 @@ def typ(self, _p:int=0): self.enterRecursionRule(localctx, 32, self.RULE_typ, _p) try: self.enterOuterAlt(localctx, 1) - self.state = 434 + self.state = 440 self._errHandler.sync(self) token = self._input.LA(1) if token in [PyxellParser.ID]: @@ -3226,96 +3259,96 @@ def typ(self, _p:int=0): self._ctx = localctx _prevctx = localctx - self.state = 423 + self.state = 429 self.match(PyxellParser.ID) pass elif token in [PyxellParser.T__39]: localctx = PyxellParser.TypeParenthesesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 424 + self.state = 430 self.match(PyxellParser.T__39) - self.state = 425 + self.state = 431 self.typ(0) - self.state = 426 + self.state = 432 self.match(PyxellParser.T__40) pass - elif token in [PyxellParser.T__45]: + elif token in [PyxellParser.T__46]: localctx = PyxellParser.TypeArrayContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 428 - self.match(PyxellParser.T__45) - self.state = 429 - self.typ(0) - self.state = 430 + self.state = 434 self.match(PyxellParser.T__46) + self.state = 435 + self.typ(0) + self.state = 436 + self.match(PyxellParser.T__47) pass - elif token in [PyxellParser.T__63]: + elif token in [PyxellParser.T__64]: localctx = PyxellParser.TypeFunc0Context(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 432 - self.match(PyxellParser.T__63) - self.state = 433 + self.state = 438 + self.match(PyxellParser.T__64) + self.state = 439 self.typ(1) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 446 + self.state = 452 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,49,self._ctx) + _alt = self._interp.adaptivePredict(self._input,51,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 444 + self.state = 450 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,48,self._ctx) + la_ = self._interp.adaptivePredict(self._input,50,self._ctx) if la_ == 1: localctx = PyxellParser.TypeTupleContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 436 + self.state = 442 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 437 + self.state = 443 self.match(PyxellParser.T__9) - self.state = 438 + self.state = 444 self.typ(3) pass elif la_ == 2: localctx = PyxellParser.TypeFuncContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 439 + self.state = 445 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 440 - self.match(PyxellParser.T__63) - self.state = 441 + self.state = 446 + self.match(PyxellParser.T__64) + self.state = 447 self.typ(2) pass elif la_ == 3: localctx = PyxellParser.TypeNullableContext(self, PyxellParser.TypContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_typ) - self.state = 442 + self.state = 448 if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") - self.state = 443 - self.match(PyxellParser.T__47) + self.state = 449 + self.match(PyxellParser.T__48) pass - self.state = 448 + self.state = 454 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,49,self._ctx) + _alt = self._interp.adaptivePredict(self._input,51,self._ctx) except RecognitionException as re: localctx.exception = re diff --git a/src/compiler.py b/src/compiler.py index 9bce3054..0c153d28 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -152,6 +152,8 @@ def get(self, node, id, load=True): self.throw(node, err.UndeclaredIdentifier(id)) result = self.env[id] if isinstance(result, Type) and result.isClass(): + if not result.constructor: + self.throw(node, err.AbstractClass(result)) result = result.constructor if not isinstance(result, Value): self.throw(node, err.NotVariable(id)) @@ -1406,12 +1408,15 @@ def compileStmtClass(self, node): if member['node'] == 'ClassField': member_types[name] = self.compile(member['type']) elif member['node'] in ('ClassMethod', 'ClassConstructor'): - with self.local(): - if base: - self.env['#super'] = base.methods.get(name) - func = self.compileStmtFunc(member, class_type=type) - member_types[name] = func.type - methods[name] = func + if member['block']: + with self.local(): + if base: + self.env['#super'] = base.methods.get(name) + func = self.compileStmtFunc(member, class_type=type) + member_types[name] = func.type + methods[name] = func + else: + methods[name] = None if base: original_field = base.members.get(name) @@ -1424,6 +1429,9 @@ def compileStmtClass(self, node): type.methods = methods type.pointee.set_body(*member_types.values()) + if None in methods.values(): # abstract class + return + constructor_method = methods.get('') constructor_type = tFunc(constructor_method.type.args[1:] if constructor_method else [], type) constructor = ll.Function(self.module, constructor_type.pointee, self.module.get_unique_name('def.'+id)) diff --git a/src/errors.py b/src/errors.py index da860983..75de0b86 100644 --- a/src/errors.py +++ b/src/errors.py @@ -13,6 +13,7 @@ class PyxellError(Exception): InvalidIndentation = lambda: f"Indentation error" InvalidSyntax = lambda: f"Syntax error" + AbstractClass = lambda t: f"Cannot instantiate an abstract class `{t.show()}`" CannotUnpack = lambda t, n: f"Cannot unpack value of type `{t.show()}` into {n} values" ExpectedNamedArgument = lambda: f"Positional argument cannot follow named arguments" IllegalAssignment = lambda t1, t2: f"Illegal assignment from `{t1.show()}` to `{t2.show()}`" diff --git a/test/bad/classes/abstract03.err b/test/bad/classes/abstract03.err new file mode 100644 index 00000000..0834c2fc --- /dev/null +++ b/test/bad/classes/abstract03.err @@ -0,0 +1 @@ +Cannot instantiate an abstract class `A`. \ No newline at end of file diff --git a/test/bad/classes/abstract03.px b/test/bad/classes/abstract03.px new file mode 100644 index 00000000..6e072655 --- /dev/null +++ b/test/bad/classes/abstract03.px @@ -0,0 +1,5 @@ + +class A def + constructor() abstract + +A() diff --git a/test/good/classes/abstract01.px b/test/good/classes/abstract01.px index 96cd2226..807f5c68 100644 --- a/test/good/classes/abstract01.px +++ b/test/good/classes/abstract01.px @@ -2,7 +2,7 @@ class A def func f() abstract -class B def +class B(A) def func f() def skip diff --git a/test/good/classes/abstract02.out b/test/good/classes/abstract02.out new file mode 100644 index 00000000..223b7836 --- /dev/null +++ b/test/good/classes/abstract02.out @@ -0,0 +1 @@ +B diff --git a/test/good/classes/abstract02.px b/test/good/classes/abstract02.px new file mode 100644 index 00000000..d13ce4f2 --- /dev/null +++ b/test/good/classes/abstract02.px @@ -0,0 +1,9 @@ + +class A def + constructor() abstract + +class B(A) def + constructor() def + print "B" + +B() From 4719721c3fc833ea5608230affec95cf5fd978e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sat, 7 Dec 2019 20:25:46 +0100 Subject: [PATCH 083/100] Multi-line comments --- src/Pyxell.g4 | 1 - src/antlr/Pyxell.interp | 4 +- src/antlr/Pyxell.tokens | 5 +- src/antlr/PyxellLexer.interp | 5 +- src/antlr/PyxellLexer.py | 416 +++++++++++++++++----------------- src/antlr/PyxellLexer.tokens | 5 +- src/antlr/PyxellParser.py | 9 +- src/indentation.py | 39 +++- test/good/basic/comment03.out | 0 test/good/basic/comment03.px | 1 + 10 files changed, 244 insertions(+), 241 deletions(-) create mode 100644 test/good/basic/comment03.out create mode 100644 test/good/basic/comment03.px diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index 3bbad8b6..6c28d6aa 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -133,6 +133,5 @@ fragment DIGIT : [0-9] ; fragment ID_START : [a-zA-Z_] ; fragment ID_CONT : ID_START | DIGIT | ['] ; -COMMENT : '--' ~[\r\n\f]* -> skip ; WS : [ \n\r\t]+ -> skip ; ERR : . ; diff --git a/src/antlr/Pyxell.interp b/src/antlr/Pyxell.interp index 2aa040cf..a6071420 100644 --- a/src/antlr/Pyxell.interp +++ b/src/antlr/Pyxell.interp @@ -76,7 +76,6 @@ null null null null -null token symbolic names: null @@ -154,7 +153,6 @@ FLOAT CHAR STRING ID -COMMENT WS ERR @@ -179,4 +177,4 @@ typ atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 79, 458, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 3, 2, 7, 2, 38, 10, 2, 12, 2, 14, 2, 41, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 49, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 59, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 64, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 70, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 75, 10, 4, 12, 4, 14, 4, 78, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 89, 10, 4, 5, 4, 91, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 96, 10, 5, 12, 5, 14, 5, 99, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 110, 10, 6, 12, 6, 14, 6, 113, 11, 6, 3, 6, 3, 6, 3, 6, 5, 6, 118, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 136, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 147, 10, 6, 3, 6, 3, 6, 5, 6, 151, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 157, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 165, 10, 6, 3, 6, 3, 6, 3, 6, 6, 6, 170, 10, 6, 13, 6, 14, 6, 171, 3, 6, 3, 6, 5, 6, 176, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 182, 10, 7, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 188, 10, 8, 12, 8, 14, 8, 191, 11, 8, 3, 8, 5, 8, 194, 10, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 202, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 210, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 216, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 224, 10, 9, 5, 9, 226, 10, 9, 3, 10, 3, 10, 6, 10, 230, 10, 10, 13, 10, 14, 10, 231, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 246, 10, 11, 12, 11, 14, 11, 249, 11, 11, 3, 11, 5, 11, 252, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 6, 11, 258, 10, 11, 13, 11, 14, 11, 259, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 271, 10, 11, 12, 11, 14, 11, 274, 11, 11, 3, 11, 5, 11, 277, 10, 11, 3, 11, 3, 11, 5, 11, 281, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 330, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 339, 10, 11, 3, 11, 3, 11, 5, 11, 343, 10, 11, 3, 11, 3, 11, 5, 11, 347, 10, 11, 5, 11, 349, 10, 11, 3, 11, 3, 11, 3, 11, 5, 11, 354, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 363, 10, 11, 12, 11, 14, 11, 366, 11, 11, 3, 11, 5, 11, 369, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 376, 10, 11, 12, 11, 14, 11, 379, 11, 11, 3, 12, 3, 12, 3, 12, 7, 12, 384, 10, 12, 12, 12, 14, 12, 387, 11, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 400, 10, 14, 3, 14, 3, 14, 5, 14, 404, 10, 14, 3, 15, 3, 15, 5, 15, 408, 10, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 420, 10, 16, 3, 17, 3, 17, 7, 17, 424, 10, 17, 12, 17, 14, 17, 427, 11, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 5, 18, 443, 10, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 7, 18, 453, 10, 18, 12, 18, 14, 18, 456, 11, 18, 3, 18, 2, 4, 20, 34, 19, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 2, 12, 3, 2, 11, 22, 3, 2, 23, 24, 4, 2, 15, 16, 54, 54, 3, 2, 12, 14, 3, 2, 15, 16, 3, 2, 17, 18, 3, 2, 55, 56, 3, 2, 57, 58, 4, 2, 37, 38, 59, 62, 3, 2, 68, 69, 2, 537, 2, 39, 3, 2, 2, 2, 4, 48, 3, 2, 2, 2, 6, 90, 3, 2, 2, 2, 8, 92, 3, 2, 2, 2, 10, 175, 3, 2, 2, 2, 12, 177, 3, 2, 2, 2, 14, 183, 3, 2, 2, 2, 16, 225, 3, 2, 2, 2, 18, 227, 3, 2, 2, 2, 20, 280, 3, 2, 2, 2, 22, 385, 3, 2, 2, 2, 24, 390, 3, 2, 2, 2, 26, 403, 3, 2, 2, 2, 28, 407, 3, 2, 2, 2, 30, 419, 3, 2, 2, 2, 32, 425, 3, 2, 2, 2, 34, 442, 3, 2, 2, 2, 36, 38, 5, 4, 3, 2, 37, 36, 3, 2, 2, 2, 38, 41, 3, 2, 2, 2, 39, 37, 3, 2, 2, 2, 39, 40, 3, 2, 2, 2, 40, 42, 3, 2, 2, 2, 41, 39, 3, 2, 2, 2, 42, 43, 7, 2, 2, 3, 43, 3, 3, 2, 2, 2, 44, 45, 5, 6, 4, 2, 45, 46, 7, 3, 2, 2, 46, 49, 3, 2, 2, 2, 47, 49, 5, 10, 6, 2, 48, 44, 3, 2, 2, 2, 48, 47, 3, 2, 2, 2, 49, 5, 3, 2, 2, 2, 50, 51, 7, 4, 2, 2, 51, 58, 7, 76, 2, 2, 52, 53, 7, 5, 2, 2, 53, 59, 5, 32, 17, 2, 54, 55, 7, 6, 2, 2, 55, 59, 5, 32, 17, 2, 56, 57, 7, 7, 2, 2, 57, 59, 7, 76, 2, 2, 58, 52, 3, 2, 2, 2, 58, 54, 3, 2, 2, 2, 58, 56, 3, 2, 2, 2, 58, 59, 3, 2, 2, 2, 59, 91, 3, 2, 2, 2, 60, 91, 7, 8, 2, 2, 61, 63, 7, 9, 2, 2, 62, 64, 5, 22, 12, 2, 63, 62, 3, 2, 2, 2, 63, 64, 3, 2, 2, 2, 64, 91, 3, 2, 2, 2, 65, 66, 5, 34, 18, 2, 66, 69, 7, 76, 2, 2, 67, 68, 7, 10, 2, 2, 68, 70, 5, 22, 12, 2, 69, 67, 3, 2, 2, 2, 69, 70, 3, 2, 2, 2, 70, 91, 3, 2, 2, 2, 71, 72, 5, 8, 5, 2, 72, 73, 7, 10, 2, 2, 73, 75, 3, 2, 2, 2, 74, 71, 3, 2, 2, 2, 75, 78, 3, 2, 2, 2, 76, 74, 3, 2, 2, 2, 76, 77, 3, 2, 2, 2, 77, 79, 3, 2, 2, 2, 78, 76, 3, 2, 2, 2, 79, 91, 5, 22, 12, 2, 80, 81, 5, 20, 11, 2, 81, 82, 9, 2, 2, 2, 82, 83, 7, 10, 2, 2, 83, 84, 5, 20, 11, 2, 84, 91, 3, 2, 2, 2, 85, 91, 9, 3, 2, 2, 86, 88, 7, 25, 2, 2, 87, 89, 5, 22, 12, 2, 88, 87, 3, 2, 2, 2, 88, 89, 3, 2, 2, 2, 89, 91, 3, 2, 2, 2, 90, 50, 3, 2, 2, 2, 90, 60, 3, 2, 2, 2, 90, 61, 3, 2, 2, 2, 90, 65, 3, 2, 2, 2, 90, 76, 3, 2, 2, 2, 90, 80, 3, 2, 2, 2, 90, 85, 3, 2, 2, 2, 90, 86, 3, 2, 2, 2, 91, 7, 3, 2, 2, 2, 92, 97, 5, 20, 11, 2, 93, 94, 7, 26, 2, 2, 94, 96, 5, 20, 11, 2, 95, 93, 3, 2, 2, 2, 96, 99, 3, 2, 2, 2, 97, 95, 3, 2, 2, 2, 97, 98, 3, 2, 2, 2, 98, 9, 3, 2, 2, 2, 99, 97, 3, 2, 2, 2, 100, 101, 7, 27, 2, 2, 101, 102, 5, 20, 11, 2, 102, 103, 7, 28, 2, 2, 103, 111, 5, 18, 10, 2, 104, 105, 7, 29, 2, 2, 105, 106, 5, 20, 11, 2, 106, 107, 7, 28, 2, 2, 107, 108, 5, 18, 10, 2, 108, 110, 3, 2, 2, 2, 109, 104, 3, 2, 2, 2, 110, 113, 3, 2, 2, 2, 111, 109, 3, 2, 2, 2, 111, 112, 3, 2, 2, 2, 112, 117, 3, 2, 2, 2, 113, 111, 3, 2, 2, 2, 114, 115, 7, 30, 2, 2, 115, 116, 7, 28, 2, 2, 116, 118, 5, 18, 10, 2, 117, 114, 3, 2, 2, 2, 117, 118, 3, 2, 2, 2, 118, 176, 3, 2, 2, 2, 119, 120, 7, 31, 2, 2, 120, 121, 5, 20, 11, 2, 121, 122, 7, 28, 2, 2, 122, 123, 5, 18, 10, 2, 123, 176, 3, 2, 2, 2, 124, 125, 7, 32, 2, 2, 125, 126, 5, 20, 11, 2, 126, 127, 7, 28, 2, 2, 127, 128, 5, 18, 10, 2, 128, 176, 3, 2, 2, 2, 129, 130, 7, 33, 2, 2, 130, 131, 5, 22, 12, 2, 131, 132, 7, 34, 2, 2, 132, 135, 5, 22, 12, 2, 133, 134, 7, 35, 2, 2, 134, 136, 5, 22, 12, 2, 135, 133, 3, 2, 2, 2, 135, 136, 3, 2, 2, 2, 136, 137, 3, 2, 2, 2, 137, 138, 7, 28, 2, 2, 138, 139, 5, 18, 10, 2, 139, 176, 3, 2, 2, 2, 140, 141, 7, 36, 2, 2, 141, 146, 7, 76, 2, 2, 142, 143, 7, 37, 2, 2, 143, 144, 5, 32, 17, 2, 144, 145, 7, 38, 2, 2, 145, 147, 3, 2, 2, 2, 146, 142, 3, 2, 2, 2, 146, 147, 3, 2, 2, 2, 147, 148, 3, 2, 2, 2, 148, 150, 5, 14, 8, 2, 149, 151, 5, 34, 18, 2, 150, 149, 3, 2, 2, 2, 150, 151, 3, 2, 2, 2, 151, 156, 3, 2, 2, 2, 152, 153, 7, 39, 2, 2, 153, 157, 5, 18, 10, 2, 154, 155, 7, 40, 2, 2, 155, 157, 7, 3, 2, 2, 156, 152, 3, 2, 2, 2, 156, 154, 3, 2, 2, 2, 157, 176, 3, 2, 2, 2, 158, 159, 7, 41, 2, 2, 159, 164, 7, 76, 2, 2, 160, 161, 7, 42, 2, 2, 161, 162, 5, 34, 18, 2, 162, 163, 7, 43, 2, 2, 163, 165, 3, 2, 2, 2, 164, 160, 3, 2, 2, 2, 164, 165, 3, 2, 2, 2, 165, 166, 3, 2, 2, 2, 166, 167, 7, 39, 2, 2, 167, 169, 7, 44, 2, 2, 168, 170, 5, 16, 9, 2, 169, 168, 3, 2, 2, 2, 170, 171, 3, 2, 2, 2, 171, 169, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 173, 3, 2, 2, 2, 173, 174, 7, 45, 2, 2, 174, 176, 3, 2, 2, 2, 175, 100, 3, 2, 2, 2, 175, 119, 3, 2, 2, 2, 175, 124, 3, 2, 2, 2, 175, 129, 3, 2, 2, 2, 175, 140, 3, 2, 2, 2, 175, 158, 3, 2, 2, 2, 176, 11, 3, 2, 2, 2, 177, 178, 5, 34, 18, 2, 178, 181, 7, 76, 2, 2, 179, 180, 7, 46, 2, 2, 180, 182, 5, 20, 11, 2, 181, 179, 3, 2, 2, 2, 181, 182, 3, 2, 2, 2, 182, 13, 3, 2, 2, 2, 183, 189, 7, 42, 2, 2, 184, 185, 5, 12, 7, 2, 185, 186, 7, 26, 2, 2, 186, 188, 3, 2, 2, 2, 187, 184, 3, 2, 2, 2, 188, 191, 3, 2, 2, 2, 189, 187, 3, 2, 2, 2, 189, 190, 3, 2, 2, 2, 190, 193, 3, 2, 2, 2, 191, 189, 3, 2, 2, 2, 192, 194, 5, 12, 7, 2, 193, 192, 3, 2, 2, 2, 193, 194, 3, 2, 2, 2, 194, 195, 3, 2, 2, 2, 195, 196, 7, 43, 2, 2, 196, 15, 3, 2, 2, 2, 197, 198, 5, 34, 18, 2, 198, 201, 7, 76, 2, 2, 199, 200, 7, 46, 2, 2, 200, 202, 5, 22, 12, 2, 201, 199, 3, 2, 2, 2, 201, 202, 3, 2, 2, 2, 202, 203, 3, 2, 2, 2, 203, 204, 7, 3, 2, 2, 204, 226, 3, 2, 2, 2, 205, 206, 7, 36, 2, 2, 206, 207, 7, 76, 2, 2, 207, 209, 5, 14, 8, 2, 208, 210, 5, 34, 18, 2, 209, 208, 3, 2, 2, 2, 209, 210, 3, 2, 2, 2, 210, 215, 3, 2, 2, 2, 211, 212, 7, 39, 2, 2, 212, 216, 5, 18, 10, 2, 213, 214, 7, 47, 2, 2, 214, 216, 7, 3, 2, 2, 215, 211, 3, 2, 2, 2, 215, 213, 3, 2, 2, 2, 216, 226, 3, 2, 2, 2, 217, 218, 7, 48, 2, 2, 218, 223, 5, 14, 8, 2, 219, 220, 7, 39, 2, 2, 220, 224, 5, 18, 10, 2, 221, 222, 7, 47, 2, 2, 222, 224, 7, 3, 2, 2, 223, 219, 3, 2, 2, 2, 223, 221, 3, 2, 2, 2, 224, 226, 3, 2, 2, 2, 225, 197, 3, 2, 2, 2, 225, 205, 3, 2, 2, 2, 225, 217, 3, 2, 2, 2, 226, 17, 3, 2, 2, 2, 227, 229, 7, 44, 2, 2, 228, 230, 5, 4, 3, 2, 229, 228, 3, 2, 2, 2, 230, 231, 3, 2, 2, 2, 231, 229, 3, 2, 2, 2, 231, 232, 3, 2, 2, 2, 232, 233, 3, 2, 2, 2, 233, 234, 7, 45, 2, 2, 234, 19, 3, 2, 2, 2, 235, 236, 8, 11, 1, 2, 236, 281, 5, 30, 16, 2, 237, 238, 7, 42, 2, 2, 238, 239, 5, 22, 12, 2, 239, 240, 7, 43, 2, 2, 240, 281, 3, 2, 2, 2, 241, 247, 7, 49, 2, 2, 242, 243, 5, 20, 11, 2, 243, 244, 7, 26, 2, 2, 244, 246, 3, 2, 2, 2, 245, 242, 3, 2, 2, 2, 246, 249, 3, 2, 2, 2, 247, 245, 3, 2, 2, 2, 247, 248, 3, 2, 2, 2, 248, 251, 3, 2, 2, 2, 249, 247, 3, 2, 2, 2, 250, 252, 5, 20, 11, 2, 251, 250, 3, 2, 2, 2, 251, 252, 3, 2, 2, 2, 252, 253, 3, 2, 2, 2, 253, 281, 7, 50, 2, 2, 254, 255, 7, 49, 2, 2, 255, 257, 5, 20, 11, 2, 256, 258, 5, 26, 14, 2, 257, 256, 3, 2, 2, 2, 258, 259, 3, 2, 2, 2, 259, 257, 3, 2, 2, 2, 259, 260, 3, 2, 2, 2, 260, 261, 3, 2, 2, 2, 261, 262, 7, 50, 2, 2, 262, 281, 3, 2, 2, 2, 263, 264, 9, 4, 2, 2, 264, 281, 5, 20, 11, 19, 265, 266, 7, 63, 2, 2, 266, 281, 5, 20, 11, 8, 267, 272, 7, 66, 2, 2, 268, 269, 7, 76, 2, 2, 269, 271, 7, 26, 2, 2, 270, 268, 3, 2, 2, 2, 271, 274, 3, 2, 2, 2, 272, 270, 3, 2, 2, 2, 272, 273, 3, 2, 2, 2, 273, 276, 3, 2, 2, 2, 274, 272, 3, 2, 2, 2, 275, 277, 7, 76, 2, 2, 276, 275, 3, 2, 2, 2, 276, 277, 3, 2, 2, 2, 277, 278, 3, 2, 2, 2, 278, 279, 7, 67, 2, 2, 279, 281, 5, 20, 11, 3, 280, 235, 3, 2, 2, 2, 280, 237, 3, 2, 2, 2, 280, 241, 3, 2, 2, 2, 280, 254, 3, 2, 2, 2, 280, 263, 3, 2, 2, 2, 280, 265, 3, 2, 2, 2, 280, 267, 3, 2, 2, 2, 281, 377, 3, 2, 2, 2, 282, 283, 12, 20, 2, 2, 283, 284, 7, 11, 2, 2, 284, 376, 5, 20, 11, 20, 285, 286, 12, 18, 2, 2, 286, 287, 9, 5, 2, 2, 287, 376, 5, 20, 11, 19, 288, 289, 12, 17, 2, 2, 289, 290, 9, 6, 2, 2, 290, 376, 5, 20, 11, 18, 291, 292, 12, 16, 2, 2, 292, 293, 9, 7, 2, 2, 293, 376, 5, 20, 11, 17, 294, 295, 12, 15, 2, 2, 295, 296, 7, 19, 2, 2, 296, 376, 5, 20, 11, 16, 297, 298, 12, 14, 2, 2, 298, 299, 7, 20, 2, 2, 299, 376, 5, 20, 11, 15, 300, 301, 12, 13, 2, 2, 301, 302, 7, 21, 2, 2, 302, 376, 5, 20, 11, 14, 303, 304, 12, 12, 2, 2, 304, 305, 9, 8, 2, 2, 305, 376, 5, 20, 11, 13, 306, 307, 12, 10, 2, 2, 307, 308, 9, 9, 2, 2, 308, 376, 5, 20, 11, 11, 309, 310, 12, 9, 2, 2, 310, 311, 9, 10, 2, 2, 311, 376, 5, 20, 11, 9, 312, 313, 12, 7, 2, 2, 313, 314, 7, 64, 2, 2, 314, 376, 5, 20, 11, 7, 315, 316, 12, 6, 2, 2, 316, 317, 7, 65, 2, 2, 317, 376, 5, 20, 11, 6, 318, 319, 12, 5, 2, 2, 319, 320, 7, 22, 2, 2, 320, 376, 5, 20, 11, 5, 321, 322, 12, 4, 2, 2, 322, 323, 7, 51, 2, 2, 323, 324, 5, 20, 11, 2, 324, 325, 7, 46, 2, 2, 325, 326, 5, 20, 11, 4, 326, 376, 3, 2, 2, 2, 327, 329, 12, 25, 2, 2, 328, 330, 7, 51, 2, 2, 329, 328, 3, 2, 2, 2, 329, 330, 3, 2, 2, 2, 330, 331, 3, 2, 2, 2, 331, 332, 7, 49, 2, 2, 332, 333, 5, 22, 12, 2, 333, 334, 7, 50, 2, 2, 334, 376, 3, 2, 2, 2, 335, 336, 12, 24, 2, 2, 336, 338, 7, 49, 2, 2, 337, 339, 5, 20, 11, 2, 338, 337, 3, 2, 2, 2, 338, 339, 3, 2, 2, 2, 339, 340, 3, 2, 2, 2, 340, 342, 7, 46, 2, 2, 341, 343, 5, 20, 11, 2, 342, 341, 3, 2, 2, 2, 342, 343, 3, 2, 2, 2, 343, 348, 3, 2, 2, 2, 344, 346, 7, 46, 2, 2, 345, 347, 5, 20, 11, 2, 346, 345, 3, 2, 2, 2, 346, 347, 3, 2, 2, 2, 347, 349, 3, 2, 2, 2, 348, 344, 3, 2, 2, 2, 348, 349, 3, 2, 2, 2, 349, 350, 3, 2, 2, 2, 350, 376, 7, 50, 2, 2, 351, 353, 12, 23, 2, 2, 352, 354, 7, 51, 2, 2, 353, 352, 3, 2, 2, 2, 353, 354, 3, 2, 2, 2, 354, 355, 3, 2, 2, 2, 355, 356, 7, 52, 2, 2, 356, 376, 7, 76, 2, 2, 357, 358, 12, 22, 2, 2, 358, 364, 7, 42, 2, 2, 359, 360, 5, 28, 15, 2, 360, 361, 7, 26, 2, 2, 361, 363, 3, 2, 2, 2, 362, 359, 3, 2, 2, 2, 363, 366, 3, 2, 2, 2, 364, 362, 3, 2, 2, 2, 364, 365, 3, 2, 2, 2, 365, 368, 3, 2, 2, 2, 366, 364, 3, 2, 2, 2, 367, 369, 5, 28, 15, 2, 368, 367, 3, 2, 2, 2, 368, 369, 3, 2, 2, 2, 369, 370, 3, 2, 2, 2, 370, 376, 7, 43, 2, 2, 371, 372, 12, 21, 2, 2, 372, 376, 7, 53, 2, 2, 373, 374, 12, 11, 2, 2, 374, 376, 7, 56, 2, 2, 375, 282, 3, 2, 2, 2, 375, 285, 3, 2, 2, 2, 375, 288, 3, 2, 2, 2, 375, 291, 3, 2, 2, 2, 375, 294, 3, 2, 2, 2, 375, 297, 3, 2, 2, 2, 375, 300, 3, 2, 2, 2, 375, 303, 3, 2, 2, 2, 375, 306, 3, 2, 2, 2, 375, 309, 3, 2, 2, 2, 375, 312, 3, 2, 2, 2, 375, 315, 3, 2, 2, 2, 375, 318, 3, 2, 2, 2, 375, 321, 3, 2, 2, 2, 375, 327, 3, 2, 2, 2, 375, 335, 3, 2, 2, 2, 375, 351, 3, 2, 2, 2, 375, 357, 3, 2, 2, 2, 375, 371, 3, 2, 2, 2, 375, 373, 3, 2, 2, 2, 376, 379, 3, 2, 2, 2, 377, 375, 3, 2, 2, 2, 377, 378, 3, 2, 2, 2, 378, 21, 3, 2, 2, 2, 379, 377, 3, 2, 2, 2, 380, 381, 5, 20, 11, 2, 381, 382, 7, 26, 2, 2, 382, 384, 3, 2, 2, 2, 383, 380, 3, 2, 2, 2, 384, 387, 3, 2, 2, 2, 385, 383, 3, 2, 2, 2, 385, 386, 3, 2, 2, 2, 386, 388, 3, 2, 2, 2, 387, 385, 3, 2, 2, 2, 388, 389, 5, 20, 11, 2, 389, 23, 3, 2, 2, 2, 390, 391, 5, 22, 12, 2, 391, 392, 7, 2, 2, 3, 392, 25, 3, 2, 2, 2, 393, 394, 7, 33, 2, 2, 394, 395, 5, 22, 12, 2, 395, 396, 7, 34, 2, 2, 396, 399, 5, 22, 12, 2, 397, 398, 7, 35, 2, 2, 398, 400, 5, 22, 12, 2, 399, 397, 3, 2, 2, 2, 399, 400, 3, 2, 2, 2, 400, 404, 3, 2, 2, 2, 401, 402, 7, 27, 2, 2, 402, 404, 5, 20, 11, 2, 403, 393, 3, 2, 2, 2, 403, 401, 3, 2, 2, 2, 404, 27, 3, 2, 2, 2, 405, 406, 7, 76, 2, 2, 406, 408, 7, 10, 2, 2, 407, 405, 3, 2, 2, 2, 407, 408, 3, 2, 2, 2, 408, 409, 3, 2, 2, 2, 409, 410, 5, 20, 11, 2, 410, 29, 3, 2, 2, 2, 411, 420, 7, 72, 2, 2, 412, 420, 7, 73, 2, 2, 413, 420, 9, 11, 2, 2, 414, 420, 7, 74, 2, 2, 415, 420, 7, 75, 2, 2, 416, 420, 7, 70, 2, 2, 417, 420, 7, 71, 2, 2, 418, 420, 7, 76, 2, 2, 419, 411, 3, 2, 2, 2, 419, 412, 3, 2, 2, 2, 419, 413, 3, 2, 2, 2, 419, 414, 3, 2, 2, 2, 419, 415, 3, 2, 2, 2, 419, 416, 3, 2, 2, 2, 419, 417, 3, 2, 2, 2, 419, 418, 3, 2, 2, 2, 420, 31, 3, 2, 2, 2, 421, 422, 7, 76, 2, 2, 422, 424, 7, 26, 2, 2, 423, 421, 3, 2, 2, 2, 424, 427, 3, 2, 2, 2, 425, 423, 3, 2, 2, 2, 425, 426, 3, 2, 2, 2, 426, 428, 3, 2, 2, 2, 427, 425, 3, 2, 2, 2, 428, 429, 7, 76, 2, 2, 429, 33, 3, 2, 2, 2, 430, 431, 8, 18, 1, 2, 431, 443, 7, 76, 2, 2, 432, 433, 7, 42, 2, 2, 433, 434, 5, 34, 18, 2, 434, 435, 7, 43, 2, 2, 435, 443, 3, 2, 2, 2, 436, 437, 7, 49, 2, 2, 437, 438, 5, 34, 18, 2, 438, 439, 7, 50, 2, 2, 439, 443, 3, 2, 2, 2, 440, 441, 7, 67, 2, 2, 441, 443, 5, 34, 18, 3, 442, 430, 3, 2, 2, 2, 442, 432, 3, 2, 2, 2, 442, 436, 3, 2, 2, 2, 442, 440, 3, 2, 2, 2, 443, 454, 3, 2, 2, 2, 444, 445, 12, 5, 2, 2, 445, 446, 7, 12, 2, 2, 446, 453, 5, 34, 18, 5, 447, 448, 12, 4, 2, 2, 448, 449, 7, 67, 2, 2, 449, 453, 5, 34, 18, 4, 450, 451, 12, 6, 2, 2, 451, 453, 7, 51, 2, 2, 452, 444, 3, 2, 2, 2, 452, 447, 3, 2, 2, 2, 452, 450, 3, 2, 2, 2, 453, 456, 3, 2, 2, 2, 454, 452, 3, 2, 2, 2, 454, 455, 3, 2, 2, 2, 455, 35, 3, 2, 2, 2, 456, 454, 3, 2, 2, 2, 54, 39, 48, 58, 63, 69, 76, 88, 90, 97, 111, 117, 135, 146, 150, 156, 164, 171, 175, 181, 189, 193, 201, 209, 215, 223, 225, 231, 247, 251, 259, 272, 276, 280, 329, 338, 342, 346, 348, 353, 364, 368, 375, 377, 385, 399, 403, 407, 419, 425, 442, 452, 454] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 78, 458, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 3, 2, 7, 2, 38, 10, 2, 12, 2, 14, 2, 41, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 49, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 59, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 64, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 70, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 75, 10, 4, 12, 4, 14, 4, 78, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 89, 10, 4, 5, 4, 91, 10, 4, 3, 5, 3, 5, 3, 5, 7, 5, 96, 10, 5, 12, 5, 14, 5, 99, 11, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 110, 10, 6, 12, 6, 14, 6, 113, 11, 6, 3, 6, 3, 6, 3, 6, 5, 6, 118, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 136, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 147, 10, 6, 3, 6, 3, 6, 5, 6, 151, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 157, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 165, 10, 6, 3, 6, 3, 6, 3, 6, 6, 6, 170, 10, 6, 13, 6, 14, 6, 171, 3, 6, 3, 6, 5, 6, 176, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 182, 10, 7, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 188, 10, 8, 12, 8, 14, 8, 191, 11, 8, 3, 8, 5, 8, 194, 10, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 202, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 210, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 216, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 224, 10, 9, 5, 9, 226, 10, 9, 3, 10, 3, 10, 6, 10, 230, 10, 10, 13, 10, 14, 10, 231, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 246, 10, 11, 12, 11, 14, 11, 249, 11, 11, 3, 11, 5, 11, 252, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 6, 11, 258, 10, 11, 13, 11, 14, 11, 259, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 271, 10, 11, 12, 11, 14, 11, 274, 11, 11, 3, 11, 5, 11, 277, 10, 11, 3, 11, 3, 11, 5, 11, 281, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 330, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 339, 10, 11, 3, 11, 3, 11, 5, 11, 343, 10, 11, 3, 11, 3, 11, 5, 11, 347, 10, 11, 5, 11, 349, 10, 11, 3, 11, 3, 11, 3, 11, 5, 11, 354, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 363, 10, 11, 12, 11, 14, 11, 366, 11, 11, 3, 11, 5, 11, 369, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 376, 10, 11, 12, 11, 14, 11, 379, 11, 11, 3, 12, 3, 12, 3, 12, 7, 12, 384, 10, 12, 12, 12, 14, 12, 387, 11, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 400, 10, 14, 3, 14, 3, 14, 5, 14, 404, 10, 14, 3, 15, 3, 15, 5, 15, 408, 10, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 420, 10, 16, 3, 17, 3, 17, 7, 17, 424, 10, 17, 12, 17, 14, 17, 427, 11, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 5, 18, 443, 10, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 7, 18, 453, 10, 18, 12, 18, 14, 18, 456, 11, 18, 3, 18, 2, 4, 20, 34, 19, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 2, 12, 3, 2, 11, 22, 3, 2, 23, 24, 4, 2, 15, 16, 54, 54, 3, 2, 12, 14, 3, 2, 15, 16, 3, 2, 17, 18, 3, 2, 55, 56, 3, 2, 57, 58, 4, 2, 37, 38, 59, 62, 3, 2, 68, 69, 2, 537, 2, 39, 3, 2, 2, 2, 4, 48, 3, 2, 2, 2, 6, 90, 3, 2, 2, 2, 8, 92, 3, 2, 2, 2, 10, 175, 3, 2, 2, 2, 12, 177, 3, 2, 2, 2, 14, 183, 3, 2, 2, 2, 16, 225, 3, 2, 2, 2, 18, 227, 3, 2, 2, 2, 20, 280, 3, 2, 2, 2, 22, 385, 3, 2, 2, 2, 24, 390, 3, 2, 2, 2, 26, 403, 3, 2, 2, 2, 28, 407, 3, 2, 2, 2, 30, 419, 3, 2, 2, 2, 32, 425, 3, 2, 2, 2, 34, 442, 3, 2, 2, 2, 36, 38, 5, 4, 3, 2, 37, 36, 3, 2, 2, 2, 38, 41, 3, 2, 2, 2, 39, 37, 3, 2, 2, 2, 39, 40, 3, 2, 2, 2, 40, 42, 3, 2, 2, 2, 41, 39, 3, 2, 2, 2, 42, 43, 7, 2, 2, 3, 43, 3, 3, 2, 2, 2, 44, 45, 5, 6, 4, 2, 45, 46, 7, 3, 2, 2, 46, 49, 3, 2, 2, 2, 47, 49, 5, 10, 6, 2, 48, 44, 3, 2, 2, 2, 48, 47, 3, 2, 2, 2, 49, 5, 3, 2, 2, 2, 50, 51, 7, 4, 2, 2, 51, 58, 7, 76, 2, 2, 52, 53, 7, 5, 2, 2, 53, 59, 5, 32, 17, 2, 54, 55, 7, 6, 2, 2, 55, 59, 5, 32, 17, 2, 56, 57, 7, 7, 2, 2, 57, 59, 7, 76, 2, 2, 58, 52, 3, 2, 2, 2, 58, 54, 3, 2, 2, 2, 58, 56, 3, 2, 2, 2, 58, 59, 3, 2, 2, 2, 59, 91, 3, 2, 2, 2, 60, 91, 7, 8, 2, 2, 61, 63, 7, 9, 2, 2, 62, 64, 5, 22, 12, 2, 63, 62, 3, 2, 2, 2, 63, 64, 3, 2, 2, 2, 64, 91, 3, 2, 2, 2, 65, 66, 5, 34, 18, 2, 66, 69, 7, 76, 2, 2, 67, 68, 7, 10, 2, 2, 68, 70, 5, 22, 12, 2, 69, 67, 3, 2, 2, 2, 69, 70, 3, 2, 2, 2, 70, 91, 3, 2, 2, 2, 71, 72, 5, 8, 5, 2, 72, 73, 7, 10, 2, 2, 73, 75, 3, 2, 2, 2, 74, 71, 3, 2, 2, 2, 75, 78, 3, 2, 2, 2, 76, 74, 3, 2, 2, 2, 76, 77, 3, 2, 2, 2, 77, 79, 3, 2, 2, 2, 78, 76, 3, 2, 2, 2, 79, 91, 5, 22, 12, 2, 80, 81, 5, 20, 11, 2, 81, 82, 9, 2, 2, 2, 82, 83, 7, 10, 2, 2, 83, 84, 5, 20, 11, 2, 84, 91, 3, 2, 2, 2, 85, 91, 9, 3, 2, 2, 86, 88, 7, 25, 2, 2, 87, 89, 5, 22, 12, 2, 88, 87, 3, 2, 2, 2, 88, 89, 3, 2, 2, 2, 89, 91, 3, 2, 2, 2, 90, 50, 3, 2, 2, 2, 90, 60, 3, 2, 2, 2, 90, 61, 3, 2, 2, 2, 90, 65, 3, 2, 2, 2, 90, 76, 3, 2, 2, 2, 90, 80, 3, 2, 2, 2, 90, 85, 3, 2, 2, 2, 90, 86, 3, 2, 2, 2, 91, 7, 3, 2, 2, 2, 92, 97, 5, 20, 11, 2, 93, 94, 7, 26, 2, 2, 94, 96, 5, 20, 11, 2, 95, 93, 3, 2, 2, 2, 96, 99, 3, 2, 2, 2, 97, 95, 3, 2, 2, 2, 97, 98, 3, 2, 2, 2, 98, 9, 3, 2, 2, 2, 99, 97, 3, 2, 2, 2, 100, 101, 7, 27, 2, 2, 101, 102, 5, 20, 11, 2, 102, 103, 7, 28, 2, 2, 103, 111, 5, 18, 10, 2, 104, 105, 7, 29, 2, 2, 105, 106, 5, 20, 11, 2, 106, 107, 7, 28, 2, 2, 107, 108, 5, 18, 10, 2, 108, 110, 3, 2, 2, 2, 109, 104, 3, 2, 2, 2, 110, 113, 3, 2, 2, 2, 111, 109, 3, 2, 2, 2, 111, 112, 3, 2, 2, 2, 112, 117, 3, 2, 2, 2, 113, 111, 3, 2, 2, 2, 114, 115, 7, 30, 2, 2, 115, 116, 7, 28, 2, 2, 116, 118, 5, 18, 10, 2, 117, 114, 3, 2, 2, 2, 117, 118, 3, 2, 2, 2, 118, 176, 3, 2, 2, 2, 119, 120, 7, 31, 2, 2, 120, 121, 5, 20, 11, 2, 121, 122, 7, 28, 2, 2, 122, 123, 5, 18, 10, 2, 123, 176, 3, 2, 2, 2, 124, 125, 7, 32, 2, 2, 125, 126, 5, 20, 11, 2, 126, 127, 7, 28, 2, 2, 127, 128, 5, 18, 10, 2, 128, 176, 3, 2, 2, 2, 129, 130, 7, 33, 2, 2, 130, 131, 5, 22, 12, 2, 131, 132, 7, 34, 2, 2, 132, 135, 5, 22, 12, 2, 133, 134, 7, 35, 2, 2, 134, 136, 5, 22, 12, 2, 135, 133, 3, 2, 2, 2, 135, 136, 3, 2, 2, 2, 136, 137, 3, 2, 2, 2, 137, 138, 7, 28, 2, 2, 138, 139, 5, 18, 10, 2, 139, 176, 3, 2, 2, 2, 140, 141, 7, 36, 2, 2, 141, 146, 7, 76, 2, 2, 142, 143, 7, 37, 2, 2, 143, 144, 5, 32, 17, 2, 144, 145, 7, 38, 2, 2, 145, 147, 3, 2, 2, 2, 146, 142, 3, 2, 2, 2, 146, 147, 3, 2, 2, 2, 147, 148, 3, 2, 2, 2, 148, 150, 5, 14, 8, 2, 149, 151, 5, 34, 18, 2, 150, 149, 3, 2, 2, 2, 150, 151, 3, 2, 2, 2, 151, 156, 3, 2, 2, 2, 152, 153, 7, 39, 2, 2, 153, 157, 5, 18, 10, 2, 154, 155, 7, 40, 2, 2, 155, 157, 7, 3, 2, 2, 156, 152, 3, 2, 2, 2, 156, 154, 3, 2, 2, 2, 157, 176, 3, 2, 2, 2, 158, 159, 7, 41, 2, 2, 159, 164, 7, 76, 2, 2, 160, 161, 7, 42, 2, 2, 161, 162, 5, 34, 18, 2, 162, 163, 7, 43, 2, 2, 163, 165, 3, 2, 2, 2, 164, 160, 3, 2, 2, 2, 164, 165, 3, 2, 2, 2, 165, 166, 3, 2, 2, 2, 166, 167, 7, 39, 2, 2, 167, 169, 7, 44, 2, 2, 168, 170, 5, 16, 9, 2, 169, 168, 3, 2, 2, 2, 170, 171, 3, 2, 2, 2, 171, 169, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 173, 3, 2, 2, 2, 173, 174, 7, 45, 2, 2, 174, 176, 3, 2, 2, 2, 175, 100, 3, 2, 2, 2, 175, 119, 3, 2, 2, 2, 175, 124, 3, 2, 2, 2, 175, 129, 3, 2, 2, 2, 175, 140, 3, 2, 2, 2, 175, 158, 3, 2, 2, 2, 176, 11, 3, 2, 2, 2, 177, 178, 5, 34, 18, 2, 178, 181, 7, 76, 2, 2, 179, 180, 7, 46, 2, 2, 180, 182, 5, 20, 11, 2, 181, 179, 3, 2, 2, 2, 181, 182, 3, 2, 2, 2, 182, 13, 3, 2, 2, 2, 183, 189, 7, 42, 2, 2, 184, 185, 5, 12, 7, 2, 185, 186, 7, 26, 2, 2, 186, 188, 3, 2, 2, 2, 187, 184, 3, 2, 2, 2, 188, 191, 3, 2, 2, 2, 189, 187, 3, 2, 2, 2, 189, 190, 3, 2, 2, 2, 190, 193, 3, 2, 2, 2, 191, 189, 3, 2, 2, 2, 192, 194, 5, 12, 7, 2, 193, 192, 3, 2, 2, 2, 193, 194, 3, 2, 2, 2, 194, 195, 3, 2, 2, 2, 195, 196, 7, 43, 2, 2, 196, 15, 3, 2, 2, 2, 197, 198, 5, 34, 18, 2, 198, 201, 7, 76, 2, 2, 199, 200, 7, 46, 2, 2, 200, 202, 5, 22, 12, 2, 201, 199, 3, 2, 2, 2, 201, 202, 3, 2, 2, 2, 202, 203, 3, 2, 2, 2, 203, 204, 7, 3, 2, 2, 204, 226, 3, 2, 2, 2, 205, 206, 7, 36, 2, 2, 206, 207, 7, 76, 2, 2, 207, 209, 5, 14, 8, 2, 208, 210, 5, 34, 18, 2, 209, 208, 3, 2, 2, 2, 209, 210, 3, 2, 2, 2, 210, 215, 3, 2, 2, 2, 211, 212, 7, 39, 2, 2, 212, 216, 5, 18, 10, 2, 213, 214, 7, 47, 2, 2, 214, 216, 7, 3, 2, 2, 215, 211, 3, 2, 2, 2, 215, 213, 3, 2, 2, 2, 216, 226, 3, 2, 2, 2, 217, 218, 7, 48, 2, 2, 218, 223, 5, 14, 8, 2, 219, 220, 7, 39, 2, 2, 220, 224, 5, 18, 10, 2, 221, 222, 7, 47, 2, 2, 222, 224, 7, 3, 2, 2, 223, 219, 3, 2, 2, 2, 223, 221, 3, 2, 2, 2, 224, 226, 3, 2, 2, 2, 225, 197, 3, 2, 2, 2, 225, 205, 3, 2, 2, 2, 225, 217, 3, 2, 2, 2, 226, 17, 3, 2, 2, 2, 227, 229, 7, 44, 2, 2, 228, 230, 5, 4, 3, 2, 229, 228, 3, 2, 2, 2, 230, 231, 3, 2, 2, 2, 231, 229, 3, 2, 2, 2, 231, 232, 3, 2, 2, 2, 232, 233, 3, 2, 2, 2, 233, 234, 7, 45, 2, 2, 234, 19, 3, 2, 2, 2, 235, 236, 8, 11, 1, 2, 236, 281, 5, 30, 16, 2, 237, 238, 7, 42, 2, 2, 238, 239, 5, 22, 12, 2, 239, 240, 7, 43, 2, 2, 240, 281, 3, 2, 2, 2, 241, 247, 7, 49, 2, 2, 242, 243, 5, 20, 11, 2, 243, 244, 7, 26, 2, 2, 244, 246, 3, 2, 2, 2, 245, 242, 3, 2, 2, 2, 246, 249, 3, 2, 2, 2, 247, 245, 3, 2, 2, 2, 247, 248, 3, 2, 2, 2, 248, 251, 3, 2, 2, 2, 249, 247, 3, 2, 2, 2, 250, 252, 5, 20, 11, 2, 251, 250, 3, 2, 2, 2, 251, 252, 3, 2, 2, 2, 252, 253, 3, 2, 2, 2, 253, 281, 7, 50, 2, 2, 254, 255, 7, 49, 2, 2, 255, 257, 5, 20, 11, 2, 256, 258, 5, 26, 14, 2, 257, 256, 3, 2, 2, 2, 258, 259, 3, 2, 2, 2, 259, 257, 3, 2, 2, 2, 259, 260, 3, 2, 2, 2, 260, 261, 3, 2, 2, 2, 261, 262, 7, 50, 2, 2, 262, 281, 3, 2, 2, 2, 263, 264, 9, 4, 2, 2, 264, 281, 5, 20, 11, 19, 265, 266, 7, 63, 2, 2, 266, 281, 5, 20, 11, 8, 267, 272, 7, 66, 2, 2, 268, 269, 7, 76, 2, 2, 269, 271, 7, 26, 2, 2, 270, 268, 3, 2, 2, 2, 271, 274, 3, 2, 2, 2, 272, 270, 3, 2, 2, 2, 272, 273, 3, 2, 2, 2, 273, 276, 3, 2, 2, 2, 274, 272, 3, 2, 2, 2, 275, 277, 7, 76, 2, 2, 276, 275, 3, 2, 2, 2, 276, 277, 3, 2, 2, 2, 277, 278, 3, 2, 2, 2, 278, 279, 7, 67, 2, 2, 279, 281, 5, 20, 11, 3, 280, 235, 3, 2, 2, 2, 280, 237, 3, 2, 2, 2, 280, 241, 3, 2, 2, 2, 280, 254, 3, 2, 2, 2, 280, 263, 3, 2, 2, 2, 280, 265, 3, 2, 2, 2, 280, 267, 3, 2, 2, 2, 281, 377, 3, 2, 2, 2, 282, 283, 12, 20, 2, 2, 283, 284, 7, 11, 2, 2, 284, 376, 5, 20, 11, 20, 285, 286, 12, 18, 2, 2, 286, 287, 9, 5, 2, 2, 287, 376, 5, 20, 11, 19, 288, 289, 12, 17, 2, 2, 289, 290, 9, 6, 2, 2, 290, 376, 5, 20, 11, 18, 291, 292, 12, 16, 2, 2, 292, 293, 9, 7, 2, 2, 293, 376, 5, 20, 11, 17, 294, 295, 12, 15, 2, 2, 295, 296, 7, 19, 2, 2, 296, 376, 5, 20, 11, 16, 297, 298, 12, 14, 2, 2, 298, 299, 7, 20, 2, 2, 299, 376, 5, 20, 11, 15, 300, 301, 12, 13, 2, 2, 301, 302, 7, 21, 2, 2, 302, 376, 5, 20, 11, 14, 303, 304, 12, 12, 2, 2, 304, 305, 9, 8, 2, 2, 305, 376, 5, 20, 11, 13, 306, 307, 12, 10, 2, 2, 307, 308, 9, 9, 2, 2, 308, 376, 5, 20, 11, 11, 309, 310, 12, 9, 2, 2, 310, 311, 9, 10, 2, 2, 311, 376, 5, 20, 11, 9, 312, 313, 12, 7, 2, 2, 313, 314, 7, 64, 2, 2, 314, 376, 5, 20, 11, 7, 315, 316, 12, 6, 2, 2, 316, 317, 7, 65, 2, 2, 317, 376, 5, 20, 11, 6, 318, 319, 12, 5, 2, 2, 319, 320, 7, 22, 2, 2, 320, 376, 5, 20, 11, 5, 321, 322, 12, 4, 2, 2, 322, 323, 7, 51, 2, 2, 323, 324, 5, 20, 11, 2, 324, 325, 7, 46, 2, 2, 325, 326, 5, 20, 11, 4, 326, 376, 3, 2, 2, 2, 327, 329, 12, 25, 2, 2, 328, 330, 7, 51, 2, 2, 329, 328, 3, 2, 2, 2, 329, 330, 3, 2, 2, 2, 330, 331, 3, 2, 2, 2, 331, 332, 7, 49, 2, 2, 332, 333, 5, 22, 12, 2, 333, 334, 7, 50, 2, 2, 334, 376, 3, 2, 2, 2, 335, 336, 12, 24, 2, 2, 336, 338, 7, 49, 2, 2, 337, 339, 5, 20, 11, 2, 338, 337, 3, 2, 2, 2, 338, 339, 3, 2, 2, 2, 339, 340, 3, 2, 2, 2, 340, 342, 7, 46, 2, 2, 341, 343, 5, 20, 11, 2, 342, 341, 3, 2, 2, 2, 342, 343, 3, 2, 2, 2, 343, 348, 3, 2, 2, 2, 344, 346, 7, 46, 2, 2, 345, 347, 5, 20, 11, 2, 346, 345, 3, 2, 2, 2, 346, 347, 3, 2, 2, 2, 347, 349, 3, 2, 2, 2, 348, 344, 3, 2, 2, 2, 348, 349, 3, 2, 2, 2, 349, 350, 3, 2, 2, 2, 350, 376, 7, 50, 2, 2, 351, 353, 12, 23, 2, 2, 352, 354, 7, 51, 2, 2, 353, 352, 3, 2, 2, 2, 353, 354, 3, 2, 2, 2, 354, 355, 3, 2, 2, 2, 355, 356, 7, 52, 2, 2, 356, 376, 7, 76, 2, 2, 357, 358, 12, 22, 2, 2, 358, 364, 7, 42, 2, 2, 359, 360, 5, 28, 15, 2, 360, 361, 7, 26, 2, 2, 361, 363, 3, 2, 2, 2, 362, 359, 3, 2, 2, 2, 363, 366, 3, 2, 2, 2, 364, 362, 3, 2, 2, 2, 364, 365, 3, 2, 2, 2, 365, 368, 3, 2, 2, 2, 366, 364, 3, 2, 2, 2, 367, 369, 5, 28, 15, 2, 368, 367, 3, 2, 2, 2, 368, 369, 3, 2, 2, 2, 369, 370, 3, 2, 2, 2, 370, 376, 7, 43, 2, 2, 371, 372, 12, 21, 2, 2, 372, 376, 7, 53, 2, 2, 373, 374, 12, 11, 2, 2, 374, 376, 7, 56, 2, 2, 375, 282, 3, 2, 2, 2, 375, 285, 3, 2, 2, 2, 375, 288, 3, 2, 2, 2, 375, 291, 3, 2, 2, 2, 375, 294, 3, 2, 2, 2, 375, 297, 3, 2, 2, 2, 375, 300, 3, 2, 2, 2, 375, 303, 3, 2, 2, 2, 375, 306, 3, 2, 2, 2, 375, 309, 3, 2, 2, 2, 375, 312, 3, 2, 2, 2, 375, 315, 3, 2, 2, 2, 375, 318, 3, 2, 2, 2, 375, 321, 3, 2, 2, 2, 375, 327, 3, 2, 2, 2, 375, 335, 3, 2, 2, 2, 375, 351, 3, 2, 2, 2, 375, 357, 3, 2, 2, 2, 375, 371, 3, 2, 2, 2, 375, 373, 3, 2, 2, 2, 376, 379, 3, 2, 2, 2, 377, 375, 3, 2, 2, 2, 377, 378, 3, 2, 2, 2, 378, 21, 3, 2, 2, 2, 379, 377, 3, 2, 2, 2, 380, 381, 5, 20, 11, 2, 381, 382, 7, 26, 2, 2, 382, 384, 3, 2, 2, 2, 383, 380, 3, 2, 2, 2, 384, 387, 3, 2, 2, 2, 385, 383, 3, 2, 2, 2, 385, 386, 3, 2, 2, 2, 386, 388, 3, 2, 2, 2, 387, 385, 3, 2, 2, 2, 388, 389, 5, 20, 11, 2, 389, 23, 3, 2, 2, 2, 390, 391, 5, 22, 12, 2, 391, 392, 7, 2, 2, 3, 392, 25, 3, 2, 2, 2, 393, 394, 7, 33, 2, 2, 394, 395, 5, 22, 12, 2, 395, 396, 7, 34, 2, 2, 396, 399, 5, 22, 12, 2, 397, 398, 7, 35, 2, 2, 398, 400, 5, 22, 12, 2, 399, 397, 3, 2, 2, 2, 399, 400, 3, 2, 2, 2, 400, 404, 3, 2, 2, 2, 401, 402, 7, 27, 2, 2, 402, 404, 5, 20, 11, 2, 403, 393, 3, 2, 2, 2, 403, 401, 3, 2, 2, 2, 404, 27, 3, 2, 2, 2, 405, 406, 7, 76, 2, 2, 406, 408, 7, 10, 2, 2, 407, 405, 3, 2, 2, 2, 407, 408, 3, 2, 2, 2, 408, 409, 3, 2, 2, 2, 409, 410, 5, 20, 11, 2, 410, 29, 3, 2, 2, 2, 411, 420, 7, 72, 2, 2, 412, 420, 7, 73, 2, 2, 413, 420, 9, 11, 2, 2, 414, 420, 7, 74, 2, 2, 415, 420, 7, 75, 2, 2, 416, 420, 7, 70, 2, 2, 417, 420, 7, 71, 2, 2, 418, 420, 7, 76, 2, 2, 419, 411, 3, 2, 2, 2, 419, 412, 3, 2, 2, 2, 419, 413, 3, 2, 2, 2, 419, 414, 3, 2, 2, 2, 419, 415, 3, 2, 2, 2, 419, 416, 3, 2, 2, 2, 419, 417, 3, 2, 2, 2, 419, 418, 3, 2, 2, 2, 420, 31, 3, 2, 2, 2, 421, 422, 7, 76, 2, 2, 422, 424, 7, 26, 2, 2, 423, 421, 3, 2, 2, 2, 424, 427, 3, 2, 2, 2, 425, 423, 3, 2, 2, 2, 425, 426, 3, 2, 2, 2, 426, 428, 3, 2, 2, 2, 427, 425, 3, 2, 2, 2, 428, 429, 7, 76, 2, 2, 429, 33, 3, 2, 2, 2, 430, 431, 8, 18, 1, 2, 431, 443, 7, 76, 2, 2, 432, 433, 7, 42, 2, 2, 433, 434, 5, 34, 18, 2, 434, 435, 7, 43, 2, 2, 435, 443, 3, 2, 2, 2, 436, 437, 7, 49, 2, 2, 437, 438, 5, 34, 18, 2, 438, 439, 7, 50, 2, 2, 439, 443, 3, 2, 2, 2, 440, 441, 7, 67, 2, 2, 441, 443, 5, 34, 18, 3, 442, 430, 3, 2, 2, 2, 442, 432, 3, 2, 2, 2, 442, 436, 3, 2, 2, 2, 442, 440, 3, 2, 2, 2, 443, 454, 3, 2, 2, 2, 444, 445, 12, 5, 2, 2, 445, 446, 7, 12, 2, 2, 446, 453, 5, 34, 18, 5, 447, 448, 12, 4, 2, 2, 448, 449, 7, 67, 2, 2, 449, 453, 5, 34, 18, 4, 450, 451, 12, 6, 2, 2, 451, 453, 7, 51, 2, 2, 452, 444, 3, 2, 2, 2, 452, 447, 3, 2, 2, 2, 452, 450, 3, 2, 2, 2, 453, 456, 3, 2, 2, 2, 454, 452, 3, 2, 2, 2, 454, 455, 3, 2, 2, 2, 455, 35, 3, 2, 2, 2, 456, 454, 3, 2, 2, 2, 54, 39, 48, 58, 63, 69, 76, 88, 90, 97, 111, 117, 135, 146, 150, 156, 164, 171, 175, 181, 189, 193, 201, 209, 215, 223, 225, 231, 247, 251, 259, 272, 276, 280, 329, 338, 342, 346, 348, 353, 364, 368, 375, 377, 385, 399, 403, 407, 419, 425, 442, 452, 454] \ No newline at end of file diff --git a/src/antlr/Pyxell.tokens b/src/antlr/Pyxell.tokens index c57ea7d0..95df80e0 100644 --- a/src/antlr/Pyxell.tokens +++ b/src/antlr/Pyxell.tokens @@ -72,9 +72,8 @@ FLOAT=71 CHAR=72 STRING=73 ID=74 -COMMENT=75 -WS=76 -ERR=77 +WS=75 +ERR=76 ';'=1 'use'=2 'only'=3 diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp index dc3a2509..ec539915 100644 --- a/src/antlr/PyxellLexer.interp +++ b/src/antlr/PyxellLexer.interp @@ -76,7 +76,6 @@ null null null null -null token symbolic names: null @@ -154,7 +153,6 @@ FLOAT CHAR STRING ID -COMMENT WS ERR @@ -236,7 +234,6 @@ ID DIGIT ID_START ID_CONT -COMMENT WS ERR @@ -248,4 +245,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 79, 513, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 71, 6, 71, 430, 10, 71, 13, 71, 14, 71, 431, 3, 72, 6, 72, 435, 10, 72, 13, 72, 14, 72, 436, 3, 72, 3, 72, 6, 72, 441, 10, 72, 13, 72, 14, 72, 442, 3, 72, 3, 72, 5, 72, 447, 10, 72, 3, 72, 6, 72, 450, 10, 72, 13, 72, 14, 72, 451, 5, 72, 454, 10, 72, 3, 73, 3, 73, 3, 73, 3, 73, 7, 73, 460, 10, 73, 12, 73, 14, 73, 463, 11, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 74, 7, 74, 471, 10, 74, 12, 74, 14, 74, 474, 11, 74, 3, 74, 3, 74, 3, 75, 3, 75, 7, 75, 480, 10, 75, 12, 75, 14, 75, 483, 11, 75, 3, 76, 3, 76, 3, 77, 3, 77, 3, 78, 3, 78, 3, 78, 5, 78, 492, 10, 78, 3, 79, 3, 79, 3, 79, 3, 79, 7, 79, 498, 10, 79, 12, 79, 14, 79, 501, 11, 79, 3, 79, 3, 79, 3, 80, 6, 80, 506, 10, 80, 13, 80, 14, 80, 507, 3, 80, 3, 80, 3, 81, 3, 81, 2, 2, 82, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 74, 147, 75, 149, 76, 151, 2, 153, 2, 155, 2, 157, 77, 159, 78, 161, 79, 3, 2, 11, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 3, 2, 41, 41, 4, 2, 12, 12, 14, 15, 5, 2, 11, 12, 15, 15, 34, 34, 2, 524, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 2, 161, 3, 2, 2, 2, 3, 163, 3, 2, 2, 2, 5, 165, 3, 2, 2, 2, 7, 169, 3, 2, 2, 2, 9, 174, 3, 2, 2, 2, 11, 181, 3, 2, 2, 2, 13, 184, 3, 2, 2, 2, 15, 189, 3, 2, 2, 2, 17, 195, 3, 2, 2, 2, 19, 197, 3, 2, 2, 2, 21, 199, 3, 2, 2, 2, 23, 201, 3, 2, 2, 2, 25, 203, 3, 2, 2, 2, 27, 205, 3, 2, 2, 2, 29, 207, 3, 2, 2, 2, 31, 209, 3, 2, 2, 2, 33, 212, 3, 2, 2, 2, 35, 215, 3, 2, 2, 2, 37, 217, 3, 2, 2, 2, 39, 219, 3, 2, 2, 2, 41, 221, 3, 2, 2, 2, 43, 224, 3, 2, 2, 2, 45, 230, 3, 2, 2, 2, 47, 239, 3, 2, 2, 2, 49, 246, 3, 2, 2, 2, 51, 248, 3, 2, 2, 2, 53, 251, 3, 2, 2, 2, 55, 254, 3, 2, 2, 2, 57, 259, 3, 2, 2, 2, 59, 264, 3, 2, 2, 2, 61, 270, 3, 2, 2, 2, 63, 276, 3, 2, 2, 2, 65, 280, 3, 2, 2, 2, 67, 283, 3, 2, 2, 2, 69, 288, 3, 2, 2, 2, 71, 293, 3, 2, 2, 2, 73, 295, 3, 2, 2, 2, 75, 297, 3, 2, 2, 2, 77, 301, 3, 2, 2, 2, 79, 308, 3, 2, 2, 2, 81, 314, 3, 2, 2, 2, 83, 316, 3, 2, 2, 2, 85, 318, 3, 2, 2, 2, 87, 320, 3, 2, 2, 2, 89, 322, 3, 2, 2, 2, 91, 324, 3, 2, 2, 2, 93, 333, 3, 2, 2, 2, 95, 345, 3, 2, 2, 2, 97, 347, 3, 2, 2, 2, 99, 349, 3, 2, 2, 2, 101, 351, 3, 2, 2, 2, 103, 353, 3, 2, 2, 2, 105, 355, 3, 2, 2, 2, 107, 357, 3, 2, 2, 2, 109, 360, 3, 2, 2, 2, 111, 364, 3, 2, 2, 2, 113, 367, 3, 2, 2, 2, 115, 373, 3, 2, 2, 2, 117, 376, 3, 2, 2, 2, 119, 379, 3, 2, 2, 2, 121, 382, 3, 2, 2, 2, 123, 385, 3, 2, 2, 2, 125, 389, 3, 2, 2, 2, 127, 393, 3, 2, 2, 2, 129, 396, 3, 2, 2, 2, 131, 403, 3, 2, 2, 2, 133, 406, 3, 2, 2, 2, 135, 411, 3, 2, 2, 2, 137, 417, 3, 2, 2, 2, 139, 422, 3, 2, 2, 2, 141, 429, 3, 2, 2, 2, 143, 434, 3, 2, 2, 2, 145, 455, 3, 2, 2, 2, 147, 466, 3, 2, 2, 2, 149, 477, 3, 2, 2, 2, 151, 484, 3, 2, 2, 2, 153, 486, 3, 2, 2, 2, 155, 491, 3, 2, 2, 2, 157, 493, 3, 2, 2, 2, 159, 505, 3, 2, 2, 2, 161, 511, 3, 2, 2, 2, 163, 164, 7, 61, 2, 2, 164, 4, 3, 2, 2, 2, 165, 166, 7, 119, 2, 2, 166, 167, 7, 117, 2, 2, 167, 168, 7, 103, 2, 2, 168, 6, 3, 2, 2, 2, 169, 170, 7, 113, 2, 2, 170, 171, 7, 112, 2, 2, 171, 172, 7, 110, 2, 2, 172, 173, 7, 123, 2, 2, 173, 8, 3, 2, 2, 2, 174, 175, 7, 106, 2, 2, 175, 176, 7, 107, 2, 2, 176, 177, 7, 102, 2, 2, 177, 178, 7, 107, 2, 2, 178, 179, 7, 112, 2, 2, 179, 180, 7, 105, 2, 2, 180, 10, 3, 2, 2, 2, 181, 182, 7, 99, 2, 2, 182, 183, 7, 117, 2, 2, 183, 12, 3, 2, 2, 2, 184, 185, 7, 117, 2, 2, 185, 186, 7, 109, 2, 2, 186, 187, 7, 107, 2, 2, 187, 188, 7, 114, 2, 2, 188, 14, 3, 2, 2, 2, 189, 190, 7, 114, 2, 2, 190, 191, 7, 116, 2, 2, 191, 192, 7, 107, 2, 2, 192, 193, 7, 112, 2, 2, 193, 194, 7, 118, 2, 2, 194, 16, 3, 2, 2, 2, 195, 196, 7, 63, 2, 2, 196, 18, 3, 2, 2, 2, 197, 198, 7, 96, 2, 2, 198, 20, 3, 2, 2, 2, 199, 200, 7, 44, 2, 2, 200, 22, 3, 2, 2, 2, 201, 202, 7, 49, 2, 2, 202, 24, 3, 2, 2, 2, 203, 204, 7, 39, 2, 2, 204, 26, 3, 2, 2, 2, 205, 206, 7, 45, 2, 2, 206, 28, 3, 2, 2, 2, 207, 208, 7, 47, 2, 2, 208, 30, 3, 2, 2, 2, 209, 210, 7, 62, 2, 2, 210, 211, 7, 62, 2, 2, 211, 32, 3, 2, 2, 2, 212, 213, 7, 64, 2, 2, 213, 214, 7, 64, 2, 2, 214, 34, 3, 2, 2, 2, 215, 216, 7, 40, 2, 2, 216, 36, 3, 2, 2, 2, 217, 218, 7, 38, 2, 2, 218, 38, 3, 2, 2, 2, 219, 220, 7, 126, 2, 2, 220, 40, 3, 2, 2, 2, 221, 222, 7, 65, 2, 2, 222, 223, 7, 65, 2, 2, 223, 42, 3, 2, 2, 2, 224, 225, 7, 100, 2, 2, 225, 226, 7, 116, 2, 2, 226, 227, 7, 103, 2, 2, 227, 228, 7, 99, 2, 2, 228, 229, 7, 109, 2, 2, 229, 44, 3, 2, 2, 2, 230, 231, 7, 101, 2, 2, 231, 232, 7, 113, 2, 2, 232, 233, 7, 112, 2, 2, 233, 234, 7, 118, 2, 2, 234, 235, 7, 107, 2, 2, 235, 236, 7, 112, 2, 2, 236, 237, 7, 119, 2, 2, 237, 238, 7, 103, 2, 2, 238, 46, 3, 2, 2, 2, 239, 240, 7, 116, 2, 2, 240, 241, 7, 103, 2, 2, 241, 242, 7, 118, 2, 2, 242, 243, 7, 119, 2, 2, 243, 244, 7, 116, 2, 2, 244, 245, 7, 112, 2, 2, 245, 48, 3, 2, 2, 2, 246, 247, 7, 46, 2, 2, 247, 50, 3, 2, 2, 2, 248, 249, 7, 107, 2, 2, 249, 250, 7, 104, 2, 2, 250, 52, 3, 2, 2, 2, 251, 252, 7, 102, 2, 2, 252, 253, 7, 113, 2, 2, 253, 54, 3, 2, 2, 2, 254, 255, 7, 103, 2, 2, 255, 256, 7, 110, 2, 2, 256, 257, 7, 107, 2, 2, 257, 258, 7, 104, 2, 2, 258, 56, 3, 2, 2, 2, 259, 260, 7, 103, 2, 2, 260, 261, 7, 110, 2, 2, 261, 262, 7, 117, 2, 2, 262, 263, 7, 103, 2, 2, 263, 58, 3, 2, 2, 2, 264, 265, 7, 121, 2, 2, 265, 266, 7, 106, 2, 2, 266, 267, 7, 107, 2, 2, 267, 268, 7, 110, 2, 2, 268, 269, 7, 103, 2, 2, 269, 60, 3, 2, 2, 2, 270, 271, 7, 119, 2, 2, 271, 272, 7, 112, 2, 2, 272, 273, 7, 118, 2, 2, 273, 274, 7, 107, 2, 2, 274, 275, 7, 110, 2, 2, 275, 62, 3, 2, 2, 2, 276, 277, 7, 104, 2, 2, 277, 278, 7, 113, 2, 2, 278, 279, 7, 116, 2, 2, 279, 64, 3, 2, 2, 2, 280, 281, 7, 107, 2, 2, 281, 282, 7, 112, 2, 2, 282, 66, 3, 2, 2, 2, 283, 284, 7, 117, 2, 2, 284, 285, 7, 118, 2, 2, 285, 286, 7, 103, 2, 2, 286, 287, 7, 114, 2, 2, 287, 68, 3, 2, 2, 2, 288, 289, 7, 104, 2, 2, 289, 290, 7, 119, 2, 2, 290, 291, 7, 112, 2, 2, 291, 292, 7, 101, 2, 2, 292, 70, 3, 2, 2, 2, 293, 294, 7, 62, 2, 2, 294, 72, 3, 2, 2, 2, 295, 296, 7, 64, 2, 2, 296, 74, 3, 2, 2, 2, 297, 298, 7, 102, 2, 2, 298, 299, 7, 103, 2, 2, 299, 300, 7, 104, 2, 2, 300, 76, 3, 2, 2, 2, 301, 302, 7, 103, 2, 2, 302, 303, 7, 122, 2, 2, 303, 304, 7, 118, 2, 2, 304, 305, 7, 103, 2, 2, 305, 306, 7, 116, 2, 2, 306, 307, 7, 112, 2, 2, 307, 78, 3, 2, 2, 2, 308, 309, 7, 101, 2, 2, 309, 310, 7, 110, 2, 2, 310, 311, 7, 99, 2, 2, 311, 312, 7, 117, 2, 2, 312, 313, 7, 117, 2, 2, 313, 80, 3, 2, 2, 2, 314, 315, 7, 42, 2, 2, 315, 82, 3, 2, 2, 2, 316, 317, 7, 43, 2, 2, 317, 84, 3, 2, 2, 2, 318, 319, 7, 125, 2, 2, 319, 86, 3, 2, 2, 2, 320, 321, 7, 127, 2, 2, 321, 88, 3, 2, 2, 2, 322, 323, 7, 60, 2, 2, 323, 90, 3, 2, 2, 2, 324, 325, 7, 99, 2, 2, 325, 326, 7, 100, 2, 2, 326, 327, 7, 117, 2, 2, 327, 328, 7, 118, 2, 2, 328, 329, 7, 116, 2, 2, 329, 330, 7, 99, 2, 2, 330, 331, 7, 101, 2, 2, 331, 332, 7, 118, 2, 2, 332, 92, 3, 2, 2, 2, 333, 334, 7, 101, 2, 2, 334, 335, 7, 113, 2, 2, 335, 336, 7, 112, 2, 2, 336, 337, 7, 117, 2, 2, 337, 338, 7, 118, 2, 2, 338, 339, 7, 116, 2, 2, 339, 340, 7, 119, 2, 2, 340, 341, 7, 101, 2, 2, 341, 342, 7, 118, 2, 2, 342, 343, 7, 113, 2, 2, 343, 344, 7, 116, 2, 2, 344, 94, 3, 2, 2, 2, 345, 346, 7, 93, 2, 2, 346, 96, 3, 2, 2, 2, 347, 348, 7, 95, 2, 2, 348, 98, 3, 2, 2, 2, 349, 350, 7, 65, 2, 2, 350, 100, 3, 2, 2, 2, 351, 352, 7, 48, 2, 2, 352, 102, 3, 2, 2, 2, 353, 354, 7, 35, 2, 2, 354, 104, 3, 2, 2, 2, 355, 356, 7, 128, 2, 2, 356, 106, 3, 2, 2, 2, 357, 358, 7, 48, 2, 2, 358, 359, 7, 48, 2, 2, 359, 108, 3, 2, 2, 2, 360, 361, 7, 48, 2, 2, 361, 362, 7, 48, 2, 2, 362, 363, 7, 48, 2, 2, 363, 110, 3, 2, 2, 2, 364, 365, 7, 107, 2, 2, 365, 366, 7, 117, 2, 2, 366, 112, 3, 2, 2, 2, 367, 368, 7, 107, 2, 2, 368, 369, 7, 117, 2, 2, 369, 370, 7, 112, 2, 2, 370, 371, 7, 41, 2, 2, 371, 372, 7, 118, 2, 2, 372, 114, 3, 2, 2, 2, 373, 374, 7, 63, 2, 2, 374, 375, 7, 63, 2, 2, 375, 116, 3, 2, 2, 2, 376, 377, 7, 35, 2, 2, 377, 378, 7, 63, 2, 2, 378, 118, 3, 2, 2, 2, 379, 380, 7, 62, 2, 2, 380, 381, 7, 63, 2, 2, 381, 120, 3, 2, 2, 2, 382, 383, 7, 64, 2, 2, 383, 384, 7, 63, 2, 2, 384, 122, 3, 2, 2, 2, 385, 386, 7, 112, 2, 2, 386, 387, 7, 113, 2, 2, 387, 388, 7, 118, 2, 2, 388, 124, 3, 2, 2, 2, 389, 390, 7, 99, 2, 2, 390, 391, 7, 112, 2, 2, 391, 392, 7, 102, 2, 2, 392, 126, 3, 2, 2, 2, 393, 394, 7, 113, 2, 2, 394, 395, 7, 116, 2, 2, 395, 128, 3, 2, 2, 2, 396, 397, 7, 110, 2, 2, 397, 398, 7, 99, 2, 2, 398, 399, 7, 111, 2, 2, 399, 400, 7, 100, 2, 2, 400, 401, 7, 102, 2, 2, 401, 402, 7, 99, 2, 2, 402, 130, 3, 2, 2, 2, 403, 404, 7, 47, 2, 2, 404, 405, 7, 64, 2, 2, 405, 132, 3, 2, 2, 2, 406, 407, 7, 118, 2, 2, 407, 408, 7, 116, 2, 2, 408, 409, 7, 119, 2, 2, 409, 410, 7, 103, 2, 2, 410, 134, 3, 2, 2, 2, 411, 412, 7, 104, 2, 2, 412, 413, 7, 99, 2, 2, 413, 414, 7, 110, 2, 2, 414, 415, 7, 117, 2, 2, 415, 416, 7, 103, 2, 2, 416, 136, 3, 2, 2, 2, 417, 418, 7, 112, 2, 2, 418, 419, 7, 119, 2, 2, 419, 420, 7, 110, 2, 2, 420, 421, 7, 110, 2, 2, 421, 138, 3, 2, 2, 2, 422, 423, 7, 117, 2, 2, 423, 424, 7, 119, 2, 2, 424, 425, 7, 114, 2, 2, 425, 426, 7, 103, 2, 2, 426, 427, 7, 116, 2, 2, 427, 140, 3, 2, 2, 2, 428, 430, 5, 151, 76, 2, 429, 428, 3, 2, 2, 2, 430, 431, 3, 2, 2, 2, 431, 429, 3, 2, 2, 2, 431, 432, 3, 2, 2, 2, 432, 142, 3, 2, 2, 2, 433, 435, 5, 151, 76, 2, 434, 433, 3, 2, 2, 2, 435, 436, 3, 2, 2, 2, 436, 434, 3, 2, 2, 2, 436, 437, 3, 2, 2, 2, 437, 438, 3, 2, 2, 2, 438, 440, 7, 48, 2, 2, 439, 441, 5, 151, 76, 2, 440, 439, 3, 2, 2, 2, 441, 442, 3, 2, 2, 2, 442, 440, 3, 2, 2, 2, 442, 443, 3, 2, 2, 2, 443, 453, 3, 2, 2, 2, 444, 446, 7, 103, 2, 2, 445, 447, 7, 47, 2, 2, 446, 445, 3, 2, 2, 2, 446, 447, 3, 2, 2, 2, 447, 449, 3, 2, 2, 2, 448, 450, 5, 151, 76, 2, 449, 448, 3, 2, 2, 2, 450, 451, 3, 2, 2, 2, 451, 449, 3, 2, 2, 2, 451, 452, 3, 2, 2, 2, 452, 454, 3, 2, 2, 2, 453, 444, 3, 2, 2, 2, 453, 454, 3, 2, 2, 2, 454, 144, 3, 2, 2, 2, 455, 461, 7, 41, 2, 2, 456, 460, 10, 2, 2, 2, 457, 458, 7, 94, 2, 2, 458, 460, 9, 3, 2, 2, 459, 456, 3, 2, 2, 2, 459, 457, 3, 2, 2, 2, 460, 463, 3, 2, 2, 2, 461, 459, 3, 2, 2, 2, 461, 462, 3, 2, 2, 2, 462, 464, 3, 2, 2, 2, 463, 461, 3, 2, 2, 2, 464, 465, 7, 41, 2, 2, 465, 146, 3, 2, 2, 2, 466, 472, 7, 36, 2, 2, 467, 471, 10, 4, 2, 2, 468, 469, 7, 94, 2, 2, 469, 471, 9, 5, 2, 2, 470, 467, 3, 2, 2, 2, 470, 468, 3, 2, 2, 2, 471, 474, 3, 2, 2, 2, 472, 470, 3, 2, 2, 2, 472, 473, 3, 2, 2, 2, 473, 475, 3, 2, 2, 2, 474, 472, 3, 2, 2, 2, 475, 476, 7, 36, 2, 2, 476, 148, 3, 2, 2, 2, 477, 481, 5, 153, 77, 2, 478, 480, 5, 155, 78, 2, 479, 478, 3, 2, 2, 2, 480, 483, 3, 2, 2, 2, 481, 479, 3, 2, 2, 2, 481, 482, 3, 2, 2, 2, 482, 150, 3, 2, 2, 2, 483, 481, 3, 2, 2, 2, 484, 485, 9, 6, 2, 2, 485, 152, 3, 2, 2, 2, 486, 487, 9, 7, 2, 2, 487, 154, 3, 2, 2, 2, 488, 492, 5, 153, 77, 2, 489, 492, 5, 151, 76, 2, 490, 492, 9, 8, 2, 2, 491, 488, 3, 2, 2, 2, 491, 489, 3, 2, 2, 2, 491, 490, 3, 2, 2, 2, 492, 156, 3, 2, 2, 2, 493, 494, 7, 47, 2, 2, 494, 495, 7, 47, 2, 2, 495, 499, 3, 2, 2, 2, 496, 498, 10, 9, 2, 2, 497, 496, 3, 2, 2, 2, 498, 501, 3, 2, 2, 2, 499, 497, 3, 2, 2, 2, 499, 500, 3, 2, 2, 2, 500, 502, 3, 2, 2, 2, 501, 499, 3, 2, 2, 2, 502, 503, 8, 79, 2, 2, 503, 158, 3, 2, 2, 2, 504, 506, 9, 10, 2, 2, 505, 504, 3, 2, 2, 2, 506, 507, 3, 2, 2, 2, 507, 505, 3, 2, 2, 2, 507, 508, 3, 2, 2, 2, 508, 509, 3, 2, 2, 2, 509, 510, 8, 80, 2, 2, 510, 160, 3, 2, 2, 2, 511, 512, 11, 2, 2, 2, 512, 162, 3, 2, 2, 2, 17, 2, 431, 436, 442, 446, 451, 453, 459, 461, 470, 472, 481, 491, 499, 507, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 78, 500, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 71, 6, 71, 428, 10, 71, 13, 71, 14, 71, 429, 3, 72, 6, 72, 433, 10, 72, 13, 72, 14, 72, 434, 3, 72, 3, 72, 6, 72, 439, 10, 72, 13, 72, 14, 72, 440, 3, 72, 3, 72, 5, 72, 445, 10, 72, 3, 72, 6, 72, 448, 10, 72, 13, 72, 14, 72, 449, 5, 72, 452, 10, 72, 3, 73, 3, 73, 3, 73, 3, 73, 7, 73, 458, 10, 73, 12, 73, 14, 73, 461, 11, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 74, 7, 74, 469, 10, 74, 12, 74, 14, 74, 472, 11, 74, 3, 74, 3, 74, 3, 75, 3, 75, 7, 75, 478, 10, 75, 12, 75, 14, 75, 481, 11, 75, 3, 76, 3, 76, 3, 77, 3, 77, 3, 78, 3, 78, 3, 78, 5, 78, 490, 10, 78, 3, 79, 6, 79, 493, 10, 79, 13, 79, 14, 79, 494, 3, 79, 3, 79, 3, 80, 3, 80, 2, 2, 81, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 74, 147, 75, 149, 76, 151, 2, 153, 2, 155, 2, 157, 77, 159, 78, 3, 2, 10, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 3, 2, 41, 41, 5, 2, 11, 12, 15, 15, 34, 34, 2, 510, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 3, 161, 3, 2, 2, 2, 5, 163, 3, 2, 2, 2, 7, 167, 3, 2, 2, 2, 9, 172, 3, 2, 2, 2, 11, 179, 3, 2, 2, 2, 13, 182, 3, 2, 2, 2, 15, 187, 3, 2, 2, 2, 17, 193, 3, 2, 2, 2, 19, 195, 3, 2, 2, 2, 21, 197, 3, 2, 2, 2, 23, 199, 3, 2, 2, 2, 25, 201, 3, 2, 2, 2, 27, 203, 3, 2, 2, 2, 29, 205, 3, 2, 2, 2, 31, 207, 3, 2, 2, 2, 33, 210, 3, 2, 2, 2, 35, 213, 3, 2, 2, 2, 37, 215, 3, 2, 2, 2, 39, 217, 3, 2, 2, 2, 41, 219, 3, 2, 2, 2, 43, 222, 3, 2, 2, 2, 45, 228, 3, 2, 2, 2, 47, 237, 3, 2, 2, 2, 49, 244, 3, 2, 2, 2, 51, 246, 3, 2, 2, 2, 53, 249, 3, 2, 2, 2, 55, 252, 3, 2, 2, 2, 57, 257, 3, 2, 2, 2, 59, 262, 3, 2, 2, 2, 61, 268, 3, 2, 2, 2, 63, 274, 3, 2, 2, 2, 65, 278, 3, 2, 2, 2, 67, 281, 3, 2, 2, 2, 69, 286, 3, 2, 2, 2, 71, 291, 3, 2, 2, 2, 73, 293, 3, 2, 2, 2, 75, 295, 3, 2, 2, 2, 77, 299, 3, 2, 2, 2, 79, 306, 3, 2, 2, 2, 81, 312, 3, 2, 2, 2, 83, 314, 3, 2, 2, 2, 85, 316, 3, 2, 2, 2, 87, 318, 3, 2, 2, 2, 89, 320, 3, 2, 2, 2, 91, 322, 3, 2, 2, 2, 93, 331, 3, 2, 2, 2, 95, 343, 3, 2, 2, 2, 97, 345, 3, 2, 2, 2, 99, 347, 3, 2, 2, 2, 101, 349, 3, 2, 2, 2, 103, 351, 3, 2, 2, 2, 105, 353, 3, 2, 2, 2, 107, 355, 3, 2, 2, 2, 109, 358, 3, 2, 2, 2, 111, 362, 3, 2, 2, 2, 113, 365, 3, 2, 2, 2, 115, 371, 3, 2, 2, 2, 117, 374, 3, 2, 2, 2, 119, 377, 3, 2, 2, 2, 121, 380, 3, 2, 2, 2, 123, 383, 3, 2, 2, 2, 125, 387, 3, 2, 2, 2, 127, 391, 3, 2, 2, 2, 129, 394, 3, 2, 2, 2, 131, 401, 3, 2, 2, 2, 133, 404, 3, 2, 2, 2, 135, 409, 3, 2, 2, 2, 137, 415, 3, 2, 2, 2, 139, 420, 3, 2, 2, 2, 141, 427, 3, 2, 2, 2, 143, 432, 3, 2, 2, 2, 145, 453, 3, 2, 2, 2, 147, 464, 3, 2, 2, 2, 149, 475, 3, 2, 2, 2, 151, 482, 3, 2, 2, 2, 153, 484, 3, 2, 2, 2, 155, 489, 3, 2, 2, 2, 157, 492, 3, 2, 2, 2, 159, 498, 3, 2, 2, 2, 161, 162, 7, 61, 2, 2, 162, 4, 3, 2, 2, 2, 163, 164, 7, 119, 2, 2, 164, 165, 7, 117, 2, 2, 165, 166, 7, 103, 2, 2, 166, 6, 3, 2, 2, 2, 167, 168, 7, 113, 2, 2, 168, 169, 7, 112, 2, 2, 169, 170, 7, 110, 2, 2, 170, 171, 7, 123, 2, 2, 171, 8, 3, 2, 2, 2, 172, 173, 7, 106, 2, 2, 173, 174, 7, 107, 2, 2, 174, 175, 7, 102, 2, 2, 175, 176, 7, 107, 2, 2, 176, 177, 7, 112, 2, 2, 177, 178, 7, 105, 2, 2, 178, 10, 3, 2, 2, 2, 179, 180, 7, 99, 2, 2, 180, 181, 7, 117, 2, 2, 181, 12, 3, 2, 2, 2, 182, 183, 7, 117, 2, 2, 183, 184, 7, 109, 2, 2, 184, 185, 7, 107, 2, 2, 185, 186, 7, 114, 2, 2, 186, 14, 3, 2, 2, 2, 187, 188, 7, 114, 2, 2, 188, 189, 7, 116, 2, 2, 189, 190, 7, 107, 2, 2, 190, 191, 7, 112, 2, 2, 191, 192, 7, 118, 2, 2, 192, 16, 3, 2, 2, 2, 193, 194, 7, 63, 2, 2, 194, 18, 3, 2, 2, 2, 195, 196, 7, 96, 2, 2, 196, 20, 3, 2, 2, 2, 197, 198, 7, 44, 2, 2, 198, 22, 3, 2, 2, 2, 199, 200, 7, 49, 2, 2, 200, 24, 3, 2, 2, 2, 201, 202, 7, 39, 2, 2, 202, 26, 3, 2, 2, 2, 203, 204, 7, 45, 2, 2, 204, 28, 3, 2, 2, 2, 205, 206, 7, 47, 2, 2, 206, 30, 3, 2, 2, 2, 207, 208, 7, 62, 2, 2, 208, 209, 7, 62, 2, 2, 209, 32, 3, 2, 2, 2, 210, 211, 7, 64, 2, 2, 211, 212, 7, 64, 2, 2, 212, 34, 3, 2, 2, 2, 213, 214, 7, 40, 2, 2, 214, 36, 3, 2, 2, 2, 215, 216, 7, 38, 2, 2, 216, 38, 3, 2, 2, 2, 217, 218, 7, 126, 2, 2, 218, 40, 3, 2, 2, 2, 219, 220, 7, 65, 2, 2, 220, 221, 7, 65, 2, 2, 221, 42, 3, 2, 2, 2, 222, 223, 7, 100, 2, 2, 223, 224, 7, 116, 2, 2, 224, 225, 7, 103, 2, 2, 225, 226, 7, 99, 2, 2, 226, 227, 7, 109, 2, 2, 227, 44, 3, 2, 2, 2, 228, 229, 7, 101, 2, 2, 229, 230, 7, 113, 2, 2, 230, 231, 7, 112, 2, 2, 231, 232, 7, 118, 2, 2, 232, 233, 7, 107, 2, 2, 233, 234, 7, 112, 2, 2, 234, 235, 7, 119, 2, 2, 235, 236, 7, 103, 2, 2, 236, 46, 3, 2, 2, 2, 237, 238, 7, 116, 2, 2, 238, 239, 7, 103, 2, 2, 239, 240, 7, 118, 2, 2, 240, 241, 7, 119, 2, 2, 241, 242, 7, 116, 2, 2, 242, 243, 7, 112, 2, 2, 243, 48, 3, 2, 2, 2, 244, 245, 7, 46, 2, 2, 245, 50, 3, 2, 2, 2, 246, 247, 7, 107, 2, 2, 247, 248, 7, 104, 2, 2, 248, 52, 3, 2, 2, 2, 249, 250, 7, 102, 2, 2, 250, 251, 7, 113, 2, 2, 251, 54, 3, 2, 2, 2, 252, 253, 7, 103, 2, 2, 253, 254, 7, 110, 2, 2, 254, 255, 7, 107, 2, 2, 255, 256, 7, 104, 2, 2, 256, 56, 3, 2, 2, 2, 257, 258, 7, 103, 2, 2, 258, 259, 7, 110, 2, 2, 259, 260, 7, 117, 2, 2, 260, 261, 7, 103, 2, 2, 261, 58, 3, 2, 2, 2, 262, 263, 7, 121, 2, 2, 263, 264, 7, 106, 2, 2, 264, 265, 7, 107, 2, 2, 265, 266, 7, 110, 2, 2, 266, 267, 7, 103, 2, 2, 267, 60, 3, 2, 2, 2, 268, 269, 7, 119, 2, 2, 269, 270, 7, 112, 2, 2, 270, 271, 7, 118, 2, 2, 271, 272, 7, 107, 2, 2, 272, 273, 7, 110, 2, 2, 273, 62, 3, 2, 2, 2, 274, 275, 7, 104, 2, 2, 275, 276, 7, 113, 2, 2, 276, 277, 7, 116, 2, 2, 277, 64, 3, 2, 2, 2, 278, 279, 7, 107, 2, 2, 279, 280, 7, 112, 2, 2, 280, 66, 3, 2, 2, 2, 281, 282, 7, 117, 2, 2, 282, 283, 7, 118, 2, 2, 283, 284, 7, 103, 2, 2, 284, 285, 7, 114, 2, 2, 285, 68, 3, 2, 2, 2, 286, 287, 7, 104, 2, 2, 287, 288, 7, 119, 2, 2, 288, 289, 7, 112, 2, 2, 289, 290, 7, 101, 2, 2, 290, 70, 3, 2, 2, 2, 291, 292, 7, 62, 2, 2, 292, 72, 3, 2, 2, 2, 293, 294, 7, 64, 2, 2, 294, 74, 3, 2, 2, 2, 295, 296, 7, 102, 2, 2, 296, 297, 7, 103, 2, 2, 297, 298, 7, 104, 2, 2, 298, 76, 3, 2, 2, 2, 299, 300, 7, 103, 2, 2, 300, 301, 7, 122, 2, 2, 301, 302, 7, 118, 2, 2, 302, 303, 7, 103, 2, 2, 303, 304, 7, 116, 2, 2, 304, 305, 7, 112, 2, 2, 305, 78, 3, 2, 2, 2, 306, 307, 7, 101, 2, 2, 307, 308, 7, 110, 2, 2, 308, 309, 7, 99, 2, 2, 309, 310, 7, 117, 2, 2, 310, 311, 7, 117, 2, 2, 311, 80, 3, 2, 2, 2, 312, 313, 7, 42, 2, 2, 313, 82, 3, 2, 2, 2, 314, 315, 7, 43, 2, 2, 315, 84, 3, 2, 2, 2, 316, 317, 7, 125, 2, 2, 317, 86, 3, 2, 2, 2, 318, 319, 7, 127, 2, 2, 319, 88, 3, 2, 2, 2, 320, 321, 7, 60, 2, 2, 321, 90, 3, 2, 2, 2, 322, 323, 7, 99, 2, 2, 323, 324, 7, 100, 2, 2, 324, 325, 7, 117, 2, 2, 325, 326, 7, 118, 2, 2, 326, 327, 7, 116, 2, 2, 327, 328, 7, 99, 2, 2, 328, 329, 7, 101, 2, 2, 329, 330, 7, 118, 2, 2, 330, 92, 3, 2, 2, 2, 331, 332, 7, 101, 2, 2, 332, 333, 7, 113, 2, 2, 333, 334, 7, 112, 2, 2, 334, 335, 7, 117, 2, 2, 335, 336, 7, 118, 2, 2, 336, 337, 7, 116, 2, 2, 337, 338, 7, 119, 2, 2, 338, 339, 7, 101, 2, 2, 339, 340, 7, 118, 2, 2, 340, 341, 7, 113, 2, 2, 341, 342, 7, 116, 2, 2, 342, 94, 3, 2, 2, 2, 343, 344, 7, 93, 2, 2, 344, 96, 3, 2, 2, 2, 345, 346, 7, 95, 2, 2, 346, 98, 3, 2, 2, 2, 347, 348, 7, 65, 2, 2, 348, 100, 3, 2, 2, 2, 349, 350, 7, 48, 2, 2, 350, 102, 3, 2, 2, 2, 351, 352, 7, 35, 2, 2, 352, 104, 3, 2, 2, 2, 353, 354, 7, 128, 2, 2, 354, 106, 3, 2, 2, 2, 355, 356, 7, 48, 2, 2, 356, 357, 7, 48, 2, 2, 357, 108, 3, 2, 2, 2, 358, 359, 7, 48, 2, 2, 359, 360, 7, 48, 2, 2, 360, 361, 7, 48, 2, 2, 361, 110, 3, 2, 2, 2, 362, 363, 7, 107, 2, 2, 363, 364, 7, 117, 2, 2, 364, 112, 3, 2, 2, 2, 365, 366, 7, 107, 2, 2, 366, 367, 7, 117, 2, 2, 367, 368, 7, 112, 2, 2, 368, 369, 7, 41, 2, 2, 369, 370, 7, 118, 2, 2, 370, 114, 3, 2, 2, 2, 371, 372, 7, 63, 2, 2, 372, 373, 7, 63, 2, 2, 373, 116, 3, 2, 2, 2, 374, 375, 7, 35, 2, 2, 375, 376, 7, 63, 2, 2, 376, 118, 3, 2, 2, 2, 377, 378, 7, 62, 2, 2, 378, 379, 7, 63, 2, 2, 379, 120, 3, 2, 2, 2, 380, 381, 7, 64, 2, 2, 381, 382, 7, 63, 2, 2, 382, 122, 3, 2, 2, 2, 383, 384, 7, 112, 2, 2, 384, 385, 7, 113, 2, 2, 385, 386, 7, 118, 2, 2, 386, 124, 3, 2, 2, 2, 387, 388, 7, 99, 2, 2, 388, 389, 7, 112, 2, 2, 389, 390, 7, 102, 2, 2, 390, 126, 3, 2, 2, 2, 391, 392, 7, 113, 2, 2, 392, 393, 7, 116, 2, 2, 393, 128, 3, 2, 2, 2, 394, 395, 7, 110, 2, 2, 395, 396, 7, 99, 2, 2, 396, 397, 7, 111, 2, 2, 397, 398, 7, 100, 2, 2, 398, 399, 7, 102, 2, 2, 399, 400, 7, 99, 2, 2, 400, 130, 3, 2, 2, 2, 401, 402, 7, 47, 2, 2, 402, 403, 7, 64, 2, 2, 403, 132, 3, 2, 2, 2, 404, 405, 7, 118, 2, 2, 405, 406, 7, 116, 2, 2, 406, 407, 7, 119, 2, 2, 407, 408, 7, 103, 2, 2, 408, 134, 3, 2, 2, 2, 409, 410, 7, 104, 2, 2, 410, 411, 7, 99, 2, 2, 411, 412, 7, 110, 2, 2, 412, 413, 7, 117, 2, 2, 413, 414, 7, 103, 2, 2, 414, 136, 3, 2, 2, 2, 415, 416, 7, 112, 2, 2, 416, 417, 7, 119, 2, 2, 417, 418, 7, 110, 2, 2, 418, 419, 7, 110, 2, 2, 419, 138, 3, 2, 2, 2, 420, 421, 7, 117, 2, 2, 421, 422, 7, 119, 2, 2, 422, 423, 7, 114, 2, 2, 423, 424, 7, 103, 2, 2, 424, 425, 7, 116, 2, 2, 425, 140, 3, 2, 2, 2, 426, 428, 5, 151, 76, 2, 427, 426, 3, 2, 2, 2, 428, 429, 3, 2, 2, 2, 429, 427, 3, 2, 2, 2, 429, 430, 3, 2, 2, 2, 430, 142, 3, 2, 2, 2, 431, 433, 5, 151, 76, 2, 432, 431, 3, 2, 2, 2, 433, 434, 3, 2, 2, 2, 434, 432, 3, 2, 2, 2, 434, 435, 3, 2, 2, 2, 435, 436, 3, 2, 2, 2, 436, 438, 7, 48, 2, 2, 437, 439, 5, 151, 76, 2, 438, 437, 3, 2, 2, 2, 439, 440, 3, 2, 2, 2, 440, 438, 3, 2, 2, 2, 440, 441, 3, 2, 2, 2, 441, 451, 3, 2, 2, 2, 442, 444, 7, 103, 2, 2, 443, 445, 7, 47, 2, 2, 444, 443, 3, 2, 2, 2, 444, 445, 3, 2, 2, 2, 445, 447, 3, 2, 2, 2, 446, 448, 5, 151, 76, 2, 447, 446, 3, 2, 2, 2, 448, 449, 3, 2, 2, 2, 449, 447, 3, 2, 2, 2, 449, 450, 3, 2, 2, 2, 450, 452, 3, 2, 2, 2, 451, 442, 3, 2, 2, 2, 451, 452, 3, 2, 2, 2, 452, 144, 3, 2, 2, 2, 453, 459, 7, 41, 2, 2, 454, 458, 10, 2, 2, 2, 455, 456, 7, 94, 2, 2, 456, 458, 9, 3, 2, 2, 457, 454, 3, 2, 2, 2, 457, 455, 3, 2, 2, 2, 458, 461, 3, 2, 2, 2, 459, 457, 3, 2, 2, 2, 459, 460, 3, 2, 2, 2, 460, 462, 3, 2, 2, 2, 461, 459, 3, 2, 2, 2, 462, 463, 7, 41, 2, 2, 463, 146, 3, 2, 2, 2, 464, 470, 7, 36, 2, 2, 465, 469, 10, 4, 2, 2, 466, 467, 7, 94, 2, 2, 467, 469, 9, 5, 2, 2, 468, 465, 3, 2, 2, 2, 468, 466, 3, 2, 2, 2, 469, 472, 3, 2, 2, 2, 470, 468, 3, 2, 2, 2, 470, 471, 3, 2, 2, 2, 471, 473, 3, 2, 2, 2, 472, 470, 3, 2, 2, 2, 473, 474, 7, 36, 2, 2, 474, 148, 3, 2, 2, 2, 475, 479, 5, 153, 77, 2, 476, 478, 5, 155, 78, 2, 477, 476, 3, 2, 2, 2, 478, 481, 3, 2, 2, 2, 479, 477, 3, 2, 2, 2, 479, 480, 3, 2, 2, 2, 480, 150, 3, 2, 2, 2, 481, 479, 3, 2, 2, 2, 482, 483, 9, 6, 2, 2, 483, 152, 3, 2, 2, 2, 484, 485, 9, 7, 2, 2, 485, 154, 3, 2, 2, 2, 486, 490, 5, 153, 77, 2, 487, 490, 5, 151, 76, 2, 488, 490, 9, 8, 2, 2, 489, 486, 3, 2, 2, 2, 489, 487, 3, 2, 2, 2, 489, 488, 3, 2, 2, 2, 490, 156, 3, 2, 2, 2, 491, 493, 9, 9, 2, 2, 492, 491, 3, 2, 2, 2, 493, 494, 3, 2, 2, 2, 494, 492, 3, 2, 2, 2, 494, 495, 3, 2, 2, 2, 495, 496, 3, 2, 2, 2, 496, 497, 8, 79, 2, 2, 497, 158, 3, 2, 2, 2, 498, 499, 11, 2, 2, 2, 499, 160, 3, 2, 2, 2, 16, 2, 429, 434, 440, 444, 449, 451, 457, 459, 468, 470, 479, 489, 494, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py index b1b078bc..474c2b7e 100644 --- a/src/antlr/PyxellLexer.py +++ b/src/antlr/PyxellLexer.py @@ -8,8 +8,8 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2O") - buf.write("\u0201\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2N") + buf.write("\u01f4\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") @@ -20,211 +20,204 @@ def serializedATN(): buf.write("\t\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:") buf.write("\4;\t;\4<\t<\4=\t=\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\t") buf.write("C\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I\tI\4J\tJ\4K\tK\4L\t") - buf.write("L\4M\tM\4N\tN\4O\tO\4P\tP\4Q\tQ\3\2\3\2\3\3\3\3\3\3\3") - buf.write("\3\3\4\3\4\3\4\3\4\3\4\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\6") - buf.write("\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\b\3\b\3\b\3") - buf.write("\t\3\t\3\n\3\n\3\13\3\13\3\f\3\f\3\r\3\r\3\16\3\16\3\17") - buf.write("\3\17\3\20\3\20\3\20\3\21\3\21\3\21\3\22\3\22\3\23\3\23") - buf.write("\3\24\3\24\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\26") - buf.write("\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\30\3\30") - buf.write("\3\30\3\30\3\30\3\30\3\30\3\31\3\31\3\32\3\32\3\32\3\33") - buf.write("\3\33\3\33\3\34\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35") - buf.write("\3\35\3\36\3\36\3\36\3\36\3\36\3\36\3\37\3\37\3\37\3\37") - buf.write("\3\37\3\37\3 \3 \3 \3 \3!\3!\3!\3\"\3\"\3\"\3\"\3\"\3") - buf.write("#\3#\3#\3#\3#\3$\3$\3%\3%\3&\3&\3&\3&\3\'\3\'\3\'\3\'") - buf.write("\3\'\3\'\3\'\3(\3(\3(\3(\3(\3(\3)\3)\3*\3*\3+\3+\3,\3") - buf.write(",\3-\3-\3.\3.\3.\3.\3.\3.\3.\3.\3.\3/\3/\3/\3/\3/\3/\3") - buf.write("/\3/\3/\3/\3/\3/\3\60\3\60\3\61\3\61\3\62\3\62\3\63\3") - buf.write("\63\3\64\3\64\3\65\3\65\3\66\3\66\3\66\3\67\3\67\3\67") - buf.write("\3\67\38\38\38\39\39\39\39\39\39\3:\3:\3:\3;\3;\3;\3<") - buf.write("\3<\3<\3=\3=\3=\3>\3>\3>\3>\3?\3?\3?\3?\3@\3@\3@\3A\3") - buf.write("A\3A\3A\3A\3A\3A\3B\3B\3B\3C\3C\3C\3C\3C\3D\3D\3D\3D\3") - buf.write("D\3D\3E\3E\3E\3E\3E\3F\3F\3F\3F\3F\3F\3G\6G\u01ae\nG\r") - buf.write("G\16G\u01af\3H\6H\u01b3\nH\rH\16H\u01b4\3H\3H\6H\u01b9") - buf.write("\nH\rH\16H\u01ba\3H\3H\5H\u01bf\nH\3H\6H\u01c2\nH\rH\16") - buf.write("H\u01c3\5H\u01c6\nH\3I\3I\3I\3I\7I\u01cc\nI\fI\16I\u01cf") - buf.write("\13I\3I\3I\3J\3J\3J\3J\7J\u01d7\nJ\fJ\16J\u01da\13J\3") - buf.write("J\3J\3K\3K\7K\u01e0\nK\fK\16K\u01e3\13K\3L\3L\3M\3M\3") - buf.write("N\3N\3N\5N\u01ec\nN\3O\3O\3O\3O\7O\u01f2\nO\fO\16O\u01f5") - buf.write("\13O\3O\3O\3P\6P\u01fa\nP\rP\16P\u01fb\3P\3P\3Q\3Q\2\2") - buf.write("R\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31") - buf.write("\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31") - buf.write("\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O") - buf.write(")Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k\67m8o9q:s;") - buf.write("u{?}@\177A\u0081B\u0083C\u0085D\u0087E\u0089F\u008b") - buf.write("G\u008dH\u008fI\u0091J\u0093K\u0095L\u0097\2\u0099\2\u009b") - buf.write("\2\u009dM\u009fN\u00a1O\3\2\13\4\2))^^\6\2))^^ppvv\4\2") - buf.write("$$^^\6\2$$^^ppvv\3\2\62;\5\2C\\aac|\3\2))\4\2\f\f\16\17") - buf.write("\5\2\13\f\17\17\"\"\2\u020c\2\3\3\2\2\2\2\5\3\2\2\2\2") - buf.write("\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3") - buf.write("\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2") - buf.write("\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2") - buf.write("\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2") - buf.write("\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63") - buf.write("\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2") - buf.write("\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2") - buf.write("\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3") - buf.write("\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y") - buf.write("\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2") - buf.write("c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2") - buf.write("\2m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2u\3\2\2") - buf.write("\2\2w\3\2\2\2\2y\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177\3") - buf.write("\2\2\2\2\u0081\3\2\2\2\2\u0083\3\2\2\2\2\u0085\3\2\2\2") - buf.write("\2\u0087\3\2\2\2\2\u0089\3\2\2\2\2\u008b\3\2\2\2\2\u008d") - buf.write("\3\2\2\2\2\u008f\3\2\2\2\2\u0091\3\2\2\2\2\u0093\3\2\2") - buf.write("\2\2\u0095\3\2\2\2\2\u009d\3\2\2\2\2\u009f\3\2\2\2\2\u00a1") - buf.write("\3\2\2\2\3\u00a3\3\2\2\2\5\u00a5\3\2\2\2\7\u00a9\3\2\2") - buf.write("\2\t\u00ae\3\2\2\2\13\u00b5\3\2\2\2\r\u00b8\3\2\2\2\17") - buf.write("\u00bd\3\2\2\2\21\u00c3\3\2\2\2\23\u00c5\3\2\2\2\25\u00c7") - buf.write("\3\2\2\2\27\u00c9\3\2\2\2\31\u00cb\3\2\2\2\33\u00cd\3") - buf.write("\2\2\2\35\u00cf\3\2\2\2\37\u00d1\3\2\2\2!\u00d4\3\2\2") - buf.write("\2#\u00d7\3\2\2\2%\u00d9\3\2\2\2\'\u00db\3\2\2\2)\u00dd") - buf.write("\3\2\2\2+\u00e0\3\2\2\2-\u00e6\3\2\2\2/\u00ef\3\2\2\2") - buf.write("\61\u00f6\3\2\2\2\63\u00f8\3\2\2\2\65\u00fb\3\2\2\2\67") - buf.write("\u00fe\3\2\2\29\u0103\3\2\2\2;\u0108\3\2\2\2=\u010e\3") - buf.write("\2\2\2?\u0114\3\2\2\2A\u0118\3\2\2\2C\u011b\3\2\2\2E\u0120") - buf.write("\3\2\2\2G\u0125\3\2\2\2I\u0127\3\2\2\2K\u0129\3\2\2\2") - buf.write("M\u012d\3\2\2\2O\u0134\3\2\2\2Q\u013a\3\2\2\2S\u013c\3") - buf.write("\2\2\2U\u013e\3\2\2\2W\u0140\3\2\2\2Y\u0142\3\2\2\2[\u0144") - buf.write("\3\2\2\2]\u014d\3\2\2\2_\u0159\3\2\2\2a\u015b\3\2\2\2") - buf.write("c\u015d\3\2\2\2e\u015f\3\2\2\2g\u0161\3\2\2\2i\u0163\3") - buf.write("\2\2\2k\u0165\3\2\2\2m\u0168\3\2\2\2o\u016c\3\2\2\2q\u016f") - buf.write("\3\2\2\2s\u0175\3\2\2\2u\u0178\3\2\2\2w\u017b\3\2\2\2") - buf.write("y\u017e\3\2\2\2{\u0181\3\2\2\2}\u0185\3\2\2\2\177\u0189") - buf.write("\3\2\2\2\u0081\u018c\3\2\2\2\u0083\u0193\3\2\2\2\u0085") - buf.write("\u0196\3\2\2\2\u0087\u019b\3\2\2\2\u0089\u01a1\3\2\2\2") - buf.write("\u008b\u01a6\3\2\2\2\u008d\u01ad\3\2\2\2\u008f\u01b2\3") - buf.write("\2\2\2\u0091\u01c7\3\2\2\2\u0093\u01d2\3\2\2\2\u0095\u01dd") - buf.write("\3\2\2\2\u0097\u01e4\3\2\2\2\u0099\u01e6\3\2\2\2\u009b") - buf.write("\u01eb\3\2\2\2\u009d\u01ed\3\2\2\2\u009f\u01f9\3\2\2\2") - buf.write("\u00a1\u01ff\3\2\2\2\u00a3\u00a4\7=\2\2\u00a4\4\3\2\2") - buf.write("\2\u00a5\u00a6\7w\2\2\u00a6\u00a7\7u\2\2\u00a7\u00a8\7") - buf.write("g\2\2\u00a8\6\3\2\2\2\u00a9\u00aa\7q\2\2\u00aa\u00ab\7") - buf.write("p\2\2\u00ab\u00ac\7n\2\2\u00ac\u00ad\7{\2\2\u00ad\b\3") - buf.write("\2\2\2\u00ae\u00af\7j\2\2\u00af\u00b0\7k\2\2\u00b0\u00b1") - buf.write("\7f\2\2\u00b1\u00b2\7k\2\2\u00b2\u00b3\7p\2\2\u00b3\u00b4") - buf.write("\7i\2\2\u00b4\n\3\2\2\2\u00b5\u00b6\7c\2\2\u00b6\u00b7") - buf.write("\7u\2\2\u00b7\f\3\2\2\2\u00b8\u00b9\7u\2\2\u00b9\u00ba") - buf.write("\7m\2\2\u00ba\u00bb\7k\2\2\u00bb\u00bc\7r\2\2\u00bc\16") - buf.write("\3\2\2\2\u00bd\u00be\7r\2\2\u00be\u00bf\7t\2\2\u00bf\u00c0") - buf.write("\7k\2\2\u00c0\u00c1\7p\2\2\u00c1\u00c2\7v\2\2\u00c2\20") - buf.write("\3\2\2\2\u00c3\u00c4\7?\2\2\u00c4\22\3\2\2\2\u00c5\u00c6") - buf.write("\7`\2\2\u00c6\24\3\2\2\2\u00c7\u00c8\7,\2\2\u00c8\26\3") - buf.write("\2\2\2\u00c9\u00ca\7\61\2\2\u00ca\30\3\2\2\2\u00cb\u00cc") - buf.write("\7\'\2\2\u00cc\32\3\2\2\2\u00cd\u00ce\7-\2\2\u00ce\34") - buf.write("\3\2\2\2\u00cf\u00d0\7/\2\2\u00d0\36\3\2\2\2\u00d1\u00d2") - buf.write("\7>\2\2\u00d2\u00d3\7>\2\2\u00d3 \3\2\2\2\u00d4\u00d5") - buf.write("\7@\2\2\u00d5\u00d6\7@\2\2\u00d6\"\3\2\2\2\u00d7\u00d8") - buf.write("\7(\2\2\u00d8$\3\2\2\2\u00d9\u00da\7&\2\2\u00da&\3\2\2") - buf.write("\2\u00db\u00dc\7~\2\2\u00dc(\3\2\2\2\u00dd\u00de\7A\2") - buf.write("\2\u00de\u00df\7A\2\2\u00df*\3\2\2\2\u00e0\u00e1\7d\2") - buf.write("\2\u00e1\u00e2\7t\2\2\u00e2\u00e3\7g\2\2\u00e3\u00e4\7") - buf.write("c\2\2\u00e4\u00e5\7m\2\2\u00e5,\3\2\2\2\u00e6\u00e7\7") - buf.write("e\2\2\u00e7\u00e8\7q\2\2\u00e8\u00e9\7p\2\2\u00e9\u00ea") - buf.write("\7v\2\2\u00ea\u00eb\7k\2\2\u00eb\u00ec\7p\2\2\u00ec\u00ed") - buf.write("\7w\2\2\u00ed\u00ee\7g\2\2\u00ee.\3\2\2\2\u00ef\u00f0") - buf.write("\7t\2\2\u00f0\u00f1\7g\2\2\u00f1\u00f2\7v\2\2\u00f2\u00f3") - buf.write("\7w\2\2\u00f3\u00f4\7t\2\2\u00f4\u00f5\7p\2\2\u00f5\60") - buf.write("\3\2\2\2\u00f6\u00f7\7.\2\2\u00f7\62\3\2\2\2\u00f8\u00f9") - buf.write("\7k\2\2\u00f9\u00fa\7h\2\2\u00fa\64\3\2\2\2\u00fb\u00fc") - buf.write("\7f\2\2\u00fc\u00fd\7q\2\2\u00fd\66\3\2\2\2\u00fe\u00ff") - buf.write("\7g\2\2\u00ff\u0100\7n\2\2\u0100\u0101\7k\2\2\u0101\u0102") - buf.write("\7h\2\2\u01028\3\2\2\2\u0103\u0104\7g\2\2\u0104\u0105") - buf.write("\7n\2\2\u0105\u0106\7u\2\2\u0106\u0107\7g\2\2\u0107:\3") - buf.write("\2\2\2\u0108\u0109\7y\2\2\u0109\u010a\7j\2\2\u010a\u010b") - buf.write("\7k\2\2\u010b\u010c\7n\2\2\u010c\u010d\7g\2\2\u010d<\3") - buf.write("\2\2\2\u010e\u010f\7w\2\2\u010f\u0110\7p\2\2\u0110\u0111") - buf.write("\7v\2\2\u0111\u0112\7k\2\2\u0112\u0113\7n\2\2\u0113>\3") - buf.write("\2\2\2\u0114\u0115\7h\2\2\u0115\u0116\7q\2\2\u0116\u0117") - buf.write("\7t\2\2\u0117@\3\2\2\2\u0118\u0119\7k\2\2\u0119\u011a") - buf.write("\7p\2\2\u011aB\3\2\2\2\u011b\u011c\7u\2\2\u011c\u011d") - buf.write("\7v\2\2\u011d\u011e\7g\2\2\u011e\u011f\7r\2\2\u011fD\3") - buf.write("\2\2\2\u0120\u0121\7h\2\2\u0121\u0122\7w\2\2\u0122\u0123") - buf.write("\7p\2\2\u0123\u0124\7e\2\2\u0124F\3\2\2\2\u0125\u0126") - buf.write("\7>\2\2\u0126H\3\2\2\2\u0127\u0128\7@\2\2\u0128J\3\2\2") - buf.write("\2\u0129\u012a\7f\2\2\u012a\u012b\7g\2\2\u012b\u012c\7") - buf.write("h\2\2\u012cL\3\2\2\2\u012d\u012e\7g\2\2\u012e\u012f\7") - buf.write("z\2\2\u012f\u0130\7v\2\2\u0130\u0131\7g\2\2\u0131\u0132") - buf.write("\7t\2\2\u0132\u0133\7p\2\2\u0133N\3\2\2\2\u0134\u0135") - buf.write("\7e\2\2\u0135\u0136\7n\2\2\u0136\u0137\7c\2\2\u0137\u0138") - buf.write("\7u\2\2\u0138\u0139\7u\2\2\u0139P\3\2\2\2\u013a\u013b") - buf.write("\7*\2\2\u013bR\3\2\2\2\u013c\u013d\7+\2\2\u013dT\3\2\2") - buf.write("\2\u013e\u013f\7}\2\2\u013fV\3\2\2\2\u0140\u0141\7\177") - buf.write("\2\2\u0141X\3\2\2\2\u0142\u0143\7<\2\2\u0143Z\3\2\2\2") - buf.write("\u0144\u0145\7c\2\2\u0145\u0146\7d\2\2\u0146\u0147\7u") - buf.write("\2\2\u0147\u0148\7v\2\2\u0148\u0149\7t\2\2\u0149\u014a") - buf.write("\7c\2\2\u014a\u014b\7e\2\2\u014b\u014c\7v\2\2\u014c\\") - buf.write("\3\2\2\2\u014d\u014e\7e\2\2\u014e\u014f\7q\2\2\u014f\u0150") - buf.write("\7p\2\2\u0150\u0151\7u\2\2\u0151\u0152\7v\2\2\u0152\u0153") - buf.write("\7t\2\2\u0153\u0154\7w\2\2\u0154\u0155\7e\2\2\u0155\u0156") - buf.write("\7v\2\2\u0156\u0157\7q\2\2\u0157\u0158\7t\2\2\u0158^\3") - buf.write("\2\2\2\u0159\u015a\7]\2\2\u015a`\3\2\2\2\u015b\u015c\7") - buf.write("_\2\2\u015cb\3\2\2\2\u015d\u015e\7A\2\2\u015ed\3\2\2\2") - buf.write("\u015f\u0160\7\60\2\2\u0160f\3\2\2\2\u0161\u0162\7#\2") - buf.write("\2\u0162h\3\2\2\2\u0163\u0164\7\u0080\2\2\u0164j\3\2\2") - buf.write("\2\u0165\u0166\7\60\2\2\u0166\u0167\7\60\2\2\u0167l\3") - buf.write("\2\2\2\u0168\u0169\7\60\2\2\u0169\u016a\7\60\2\2\u016a") - buf.write("\u016b\7\60\2\2\u016bn\3\2\2\2\u016c\u016d\7k\2\2\u016d") - buf.write("\u016e\7u\2\2\u016ep\3\2\2\2\u016f\u0170\7k\2\2\u0170") - buf.write("\u0171\7u\2\2\u0171\u0172\7p\2\2\u0172\u0173\7)\2\2\u0173") - buf.write("\u0174\7v\2\2\u0174r\3\2\2\2\u0175\u0176\7?\2\2\u0176") - buf.write("\u0177\7?\2\2\u0177t\3\2\2\2\u0178\u0179\7#\2\2\u0179") - buf.write("\u017a\7?\2\2\u017av\3\2\2\2\u017b\u017c\7>\2\2\u017c") - buf.write("\u017d\7?\2\2\u017dx\3\2\2\2\u017e\u017f\7@\2\2\u017f") - buf.write("\u0180\7?\2\2\u0180z\3\2\2\2\u0181\u0182\7p\2\2\u0182") - buf.write("\u0183\7q\2\2\u0183\u0184\7v\2\2\u0184|\3\2\2\2\u0185") - buf.write("\u0186\7c\2\2\u0186\u0187\7p\2\2\u0187\u0188\7f\2\2\u0188") - buf.write("~\3\2\2\2\u0189\u018a\7q\2\2\u018a\u018b\7t\2\2\u018b") - buf.write("\u0080\3\2\2\2\u018c\u018d\7n\2\2\u018d\u018e\7c\2\2\u018e") - buf.write("\u018f\7o\2\2\u018f\u0190\7d\2\2\u0190\u0191\7f\2\2\u0191") - buf.write("\u0192\7c\2\2\u0192\u0082\3\2\2\2\u0193\u0194\7/\2\2\u0194") - buf.write("\u0195\7@\2\2\u0195\u0084\3\2\2\2\u0196\u0197\7v\2\2\u0197") - buf.write("\u0198\7t\2\2\u0198\u0199\7w\2\2\u0199\u019a\7g\2\2\u019a") - buf.write("\u0086\3\2\2\2\u019b\u019c\7h\2\2\u019c\u019d\7c\2\2\u019d") - buf.write("\u019e\7n\2\2\u019e\u019f\7u\2\2\u019f\u01a0\7g\2\2\u01a0") - buf.write("\u0088\3\2\2\2\u01a1\u01a2\7p\2\2\u01a2\u01a3\7w\2\2\u01a3") - buf.write("\u01a4\7n\2\2\u01a4\u01a5\7n\2\2\u01a5\u008a\3\2\2\2\u01a6") - buf.write("\u01a7\7u\2\2\u01a7\u01a8\7w\2\2\u01a8\u01a9\7r\2\2\u01a9") - buf.write("\u01aa\7g\2\2\u01aa\u01ab\7t\2\2\u01ab\u008c\3\2\2\2\u01ac") - buf.write("\u01ae\5\u0097L\2\u01ad\u01ac\3\2\2\2\u01ae\u01af\3\2") - buf.write("\2\2\u01af\u01ad\3\2\2\2\u01af\u01b0\3\2\2\2\u01b0\u008e") - buf.write("\3\2\2\2\u01b1\u01b3\5\u0097L\2\u01b2\u01b1\3\2\2\2\u01b3") - buf.write("\u01b4\3\2\2\2\u01b4\u01b2\3\2\2\2\u01b4\u01b5\3\2\2\2") - buf.write("\u01b5\u01b6\3\2\2\2\u01b6\u01b8\7\60\2\2\u01b7\u01b9") - buf.write("\5\u0097L\2\u01b8\u01b7\3\2\2\2\u01b9\u01ba\3\2\2\2\u01ba") - buf.write("\u01b8\3\2\2\2\u01ba\u01bb\3\2\2\2\u01bb\u01c5\3\2\2\2") - buf.write("\u01bc\u01be\7g\2\2\u01bd\u01bf\7/\2\2\u01be\u01bd\3\2") - buf.write("\2\2\u01be\u01bf\3\2\2\2\u01bf\u01c1\3\2\2\2\u01c0\u01c2") - buf.write("\5\u0097L\2\u01c1\u01c0\3\2\2\2\u01c2\u01c3\3\2\2\2\u01c3") - buf.write("\u01c1\3\2\2\2\u01c3\u01c4\3\2\2\2\u01c4\u01c6\3\2\2\2") - buf.write("\u01c5\u01bc\3\2\2\2\u01c5\u01c6\3\2\2\2\u01c6\u0090\3") - buf.write("\2\2\2\u01c7\u01cd\7)\2\2\u01c8\u01cc\n\2\2\2\u01c9\u01ca") - buf.write("\7^\2\2\u01ca\u01cc\t\3\2\2\u01cb\u01c8\3\2\2\2\u01cb") - buf.write("\u01c9\3\2\2\2\u01cc\u01cf\3\2\2\2\u01cd\u01cb\3\2\2\2") - buf.write("\u01cd\u01ce\3\2\2\2\u01ce\u01d0\3\2\2\2\u01cf\u01cd\3") - buf.write("\2\2\2\u01d0\u01d1\7)\2\2\u01d1\u0092\3\2\2\2\u01d2\u01d8") - buf.write("\7$\2\2\u01d3\u01d7\n\4\2\2\u01d4\u01d5\7^\2\2\u01d5\u01d7") - buf.write("\t\5\2\2\u01d6\u01d3\3\2\2\2\u01d6\u01d4\3\2\2\2\u01d7") - buf.write("\u01da\3\2\2\2\u01d8\u01d6\3\2\2\2\u01d8\u01d9\3\2\2\2") - buf.write("\u01d9\u01db\3\2\2\2\u01da\u01d8\3\2\2\2\u01db\u01dc\7") - buf.write("$\2\2\u01dc\u0094\3\2\2\2\u01dd\u01e1\5\u0099M\2\u01de") - buf.write("\u01e0\5\u009bN\2\u01df\u01de\3\2\2\2\u01e0\u01e3\3\2") - buf.write("\2\2\u01e1\u01df\3\2\2\2\u01e1\u01e2\3\2\2\2\u01e2\u0096") - buf.write("\3\2\2\2\u01e3\u01e1\3\2\2\2\u01e4\u01e5\t\6\2\2\u01e5") - buf.write("\u0098\3\2\2\2\u01e6\u01e7\t\7\2\2\u01e7\u009a\3\2\2\2") - buf.write("\u01e8\u01ec\5\u0099M\2\u01e9\u01ec\5\u0097L\2\u01ea\u01ec") - buf.write("\t\b\2\2\u01eb\u01e8\3\2\2\2\u01eb\u01e9\3\2\2\2\u01eb") - buf.write("\u01ea\3\2\2\2\u01ec\u009c\3\2\2\2\u01ed\u01ee\7/\2\2") - buf.write("\u01ee\u01ef\7/\2\2\u01ef\u01f3\3\2\2\2\u01f0\u01f2\n") - buf.write("\t\2\2\u01f1\u01f0\3\2\2\2\u01f2\u01f5\3\2\2\2\u01f3\u01f1") - buf.write("\3\2\2\2\u01f3\u01f4\3\2\2\2\u01f4\u01f6\3\2\2\2\u01f5") - buf.write("\u01f3\3\2\2\2\u01f6\u01f7\bO\2\2\u01f7\u009e\3\2\2\2") - buf.write("\u01f8\u01fa\t\n\2\2\u01f9\u01f8\3\2\2\2\u01fa\u01fb\3") - buf.write("\2\2\2\u01fb\u01f9\3\2\2\2\u01fb\u01fc\3\2\2\2\u01fc\u01fd") - buf.write("\3\2\2\2\u01fd\u01fe\bP\2\2\u01fe\u00a0\3\2\2\2\u01ff") - buf.write("\u0200\13\2\2\2\u0200\u00a2\3\2\2\2\21\2\u01af\u01b4\u01ba") - buf.write("\u01be\u01c3\u01c5\u01cb\u01cd\u01d6\u01d8\u01e1\u01eb") - buf.write("\u01f3\u01fb\3\b\2\2") + buf.write("L\4M\tM\4N\tN\4O\tO\4P\tP\3\2\3\2\3\3\3\3\3\3\3\3\3\4") + buf.write("\3\4\3\4\3\4\3\4\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3") + buf.write("\6\3\7\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3\t") + buf.write("\3\n\3\n\3\13\3\13\3\f\3\f\3\r\3\r\3\16\3\16\3\17\3\17") + buf.write("\3\20\3\20\3\20\3\21\3\21\3\21\3\22\3\22\3\23\3\23\3\24") + buf.write("\3\24\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\26\3\27") + buf.write("\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\30\3\30\3\30") + buf.write("\3\30\3\30\3\30\3\30\3\31\3\31\3\32\3\32\3\32\3\33\3\33") + buf.write("\3\33\3\34\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35") + buf.write("\3\36\3\36\3\36\3\36\3\36\3\36\3\37\3\37\3\37\3\37\3\37") + buf.write("\3\37\3 \3 \3 \3 \3!\3!\3!\3\"\3\"\3\"\3\"\3\"\3#\3#\3") + buf.write("#\3#\3#\3$\3$\3%\3%\3&\3&\3&\3&\3\'\3\'\3\'\3\'\3\'\3") + buf.write("\'\3\'\3(\3(\3(\3(\3(\3(\3)\3)\3*\3*\3+\3+\3,\3,\3-\3") + buf.write("-\3.\3.\3.\3.\3.\3.\3.\3.\3.\3/\3/\3/\3/\3/\3/\3/\3/\3") + buf.write("/\3/\3/\3/\3\60\3\60\3\61\3\61\3\62\3\62\3\63\3\63\3\64") + buf.write("\3\64\3\65\3\65\3\66\3\66\3\66\3\67\3\67\3\67\3\67\38") + buf.write("\38\38\39\39\39\39\39\39\3:\3:\3:\3;\3;\3;\3<\3<\3<\3") + buf.write("=\3=\3=\3>\3>\3>\3>\3?\3?\3?\3?\3@\3@\3@\3A\3A\3A\3A\3") + buf.write("A\3A\3A\3B\3B\3B\3C\3C\3C\3C\3C\3D\3D\3D\3D\3D\3D\3E\3") + buf.write("E\3E\3E\3E\3F\3F\3F\3F\3F\3F\3G\6G\u01ac\nG\rG\16G\u01ad") + buf.write("\3H\6H\u01b1\nH\rH\16H\u01b2\3H\3H\6H\u01b7\nH\rH\16H") + buf.write("\u01b8\3H\3H\5H\u01bd\nH\3H\6H\u01c0\nH\rH\16H\u01c1\5") + buf.write("H\u01c4\nH\3I\3I\3I\3I\7I\u01ca\nI\fI\16I\u01cd\13I\3") + buf.write("I\3I\3J\3J\3J\3J\7J\u01d5\nJ\fJ\16J\u01d8\13J\3J\3J\3") + buf.write("K\3K\7K\u01de\nK\fK\16K\u01e1\13K\3L\3L\3M\3M\3N\3N\3") + buf.write("N\5N\u01ea\nN\3O\6O\u01ed\nO\rO\16O\u01ee\3O\3O\3P\3P") + buf.write("\2\2Q\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27") + buf.write("\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30") + buf.write("/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'") + buf.write("M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k\67m8o9q") + buf.write(":s;u{?}@\177A\u0081B\u0083C\u0085D\u0087E\u0089F") + buf.write("\u008bG\u008dH\u008fI\u0091J\u0093K\u0095L\u0097\2\u0099") + buf.write("\2\u009b\2\u009dM\u009fN\3\2\n\4\2))^^\6\2))^^ppvv\4\2") + buf.write("$$^^\6\2$$^^ppvv\3\2\62;\5\2C\\aac|\3\2))\5\2\13\f\17") + buf.write("\17\"\"\2\u01fe\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2") + buf.write("\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21") + buf.write("\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3") + buf.write("\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2") + buf.write("\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2") + buf.write("\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2") + buf.write("\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2") + buf.write("\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3") + buf.write("\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q") + buf.write("\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2") + buf.write("[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2") + buf.write("\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2m\3\2\2") + buf.write("\2\2o\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2u\3\2\2\2\2w\3\2") + buf.write("\2\2\2y\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177\3\2\2\2\2") + buf.write("\u0081\3\2\2\2\2\u0083\3\2\2\2\2\u0085\3\2\2\2\2\u0087") + buf.write("\3\2\2\2\2\u0089\3\2\2\2\2\u008b\3\2\2\2\2\u008d\3\2\2") + buf.write("\2\2\u008f\3\2\2\2\2\u0091\3\2\2\2\2\u0093\3\2\2\2\2\u0095") + buf.write("\3\2\2\2\2\u009d\3\2\2\2\2\u009f\3\2\2\2\3\u00a1\3\2\2") + buf.write("\2\5\u00a3\3\2\2\2\7\u00a7\3\2\2\2\t\u00ac\3\2\2\2\13") + buf.write("\u00b3\3\2\2\2\r\u00b6\3\2\2\2\17\u00bb\3\2\2\2\21\u00c1") + buf.write("\3\2\2\2\23\u00c3\3\2\2\2\25\u00c5\3\2\2\2\27\u00c7\3") + buf.write("\2\2\2\31\u00c9\3\2\2\2\33\u00cb\3\2\2\2\35\u00cd\3\2") + buf.write("\2\2\37\u00cf\3\2\2\2!\u00d2\3\2\2\2#\u00d5\3\2\2\2%\u00d7") + buf.write("\3\2\2\2\'\u00d9\3\2\2\2)\u00db\3\2\2\2+\u00de\3\2\2\2") + buf.write("-\u00e4\3\2\2\2/\u00ed\3\2\2\2\61\u00f4\3\2\2\2\63\u00f6") + buf.write("\3\2\2\2\65\u00f9\3\2\2\2\67\u00fc\3\2\2\29\u0101\3\2") + buf.write("\2\2;\u0106\3\2\2\2=\u010c\3\2\2\2?\u0112\3\2\2\2A\u0116") + buf.write("\3\2\2\2C\u0119\3\2\2\2E\u011e\3\2\2\2G\u0123\3\2\2\2") + buf.write("I\u0125\3\2\2\2K\u0127\3\2\2\2M\u012b\3\2\2\2O\u0132\3") + buf.write("\2\2\2Q\u0138\3\2\2\2S\u013a\3\2\2\2U\u013c\3\2\2\2W\u013e") + buf.write("\3\2\2\2Y\u0140\3\2\2\2[\u0142\3\2\2\2]\u014b\3\2\2\2") + buf.write("_\u0157\3\2\2\2a\u0159\3\2\2\2c\u015b\3\2\2\2e\u015d\3") + buf.write("\2\2\2g\u015f\3\2\2\2i\u0161\3\2\2\2k\u0163\3\2\2\2m\u0166") + buf.write("\3\2\2\2o\u016a\3\2\2\2q\u016d\3\2\2\2s\u0173\3\2\2\2") + buf.write("u\u0176\3\2\2\2w\u0179\3\2\2\2y\u017c\3\2\2\2{\u017f\3") + buf.write("\2\2\2}\u0183\3\2\2\2\177\u0187\3\2\2\2\u0081\u018a\3") + buf.write("\2\2\2\u0083\u0191\3\2\2\2\u0085\u0194\3\2\2\2\u0087\u0199") + buf.write("\3\2\2\2\u0089\u019f\3\2\2\2\u008b\u01a4\3\2\2\2\u008d") + buf.write("\u01ab\3\2\2\2\u008f\u01b0\3\2\2\2\u0091\u01c5\3\2\2\2") + buf.write("\u0093\u01d0\3\2\2\2\u0095\u01db\3\2\2\2\u0097\u01e2\3") + buf.write("\2\2\2\u0099\u01e4\3\2\2\2\u009b\u01e9\3\2\2\2\u009d\u01ec") + buf.write("\3\2\2\2\u009f\u01f2\3\2\2\2\u00a1\u00a2\7=\2\2\u00a2") + buf.write("\4\3\2\2\2\u00a3\u00a4\7w\2\2\u00a4\u00a5\7u\2\2\u00a5") + buf.write("\u00a6\7g\2\2\u00a6\6\3\2\2\2\u00a7\u00a8\7q\2\2\u00a8") + buf.write("\u00a9\7p\2\2\u00a9\u00aa\7n\2\2\u00aa\u00ab\7{\2\2\u00ab") + buf.write("\b\3\2\2\2\u00ac\u00ad\7j\2\2\u00ad\u00ae\7k\2\2\u00ae") + buf.write("\u00af\7f\2\2\u00af\u00b0\7k\2\2\u00b0\u00b1\7p\2\2\u00b1") + buf.write("\u00b2\7i\2\2\u00b2\n\3\2\2\2\u00b3\u00b4\7c\2\2\u00b4") + buf.write("\u00b5\7u\2\2\u00b5\f\3\2\2\2\u00b6\u00b7\7u\2\2\u00b7") + buf.write("\u00b8\7m\2\2\u00b8\u00b9\7k\2\2\u00b9\u00ba\7r\2\2\u00ba") + buf.write("\16\3\2\2\2\u00bb\u00bc\7r\2\2\u00bc\u00bd\7t\2\2\u00bd") + buf.write("\u00be\7k\2\2\u00be\u00bf\7p\2\2\u00bf\u00c0\7v\2\2\u00c0") + buf.write("\20\3\2\2\2\u00c1\u00c2\7?\2\2\u00c2\22\3\2\2\2\u00c3") + buf.write("\u00c4\7`\2\2\u00c4\24\3\2\2\2\u00c5\u00c6\7,\2\2\u00c6") + buf.write("\26\3\2\2\2\u00c7\u00c8\7\61\2\2\u00c8\30\3\2\2\2\u00c9") + buf.write("\u00ca\7\'\2\2\u00ca\32\3\2\2\2\u00cb\u00cc\7-\2\2\u00cc") + buf.write("\34\3\2\2\2\u00cd\u00ce\7/\2\2\u00ce\36\3\2\2\2\u00cf") + buf.write("\u00d0\7>\2\2\u00d0\u00d1\7>\2\2\u00d1 \3\2\2\2\u00d2") + buf.write("\u00d3\7@\2\2\u00d3\u00d4\7@\2\2\u00d4\"\3\2\2\2\u00d5") + buf.write("\u00d6\7(\2\2\u00d6$\3\2\2\2\u00d7\u00d8\7&\2\2\u00d8") + buf.write("&\3\2\2\2\u00d9\u00da\7~\2\2\u00da(\3\2\2\2\u00db\u00dc") + buf.write("\7A\2\2\u00dc\u00dd\7A\2\2\u00dd*\3\2\2\2\u00de\u00df") + buf.write("\7d\2\2\u00df\u00e0\7t\2\2\u00e0\u00e1\7g\2\2\u00e1\u00e2") + buf.write("\7c\2\2\u00e2\u00e3\7m\2\2\u00e3,\3\2\2\2\u00e4\u00e5") + buf.write("\7e\2\2\u00e5\u00e6\7q\2\2\u00e6\u00e7\7p\2\2\u00e7\u00e8") + buf.write("\7v\2\2\u00e8\u00e9\7k\2\2\u00e9\u00ea\7p\2\2\u00ea\u00eb") + buf.write("\7w\2\2\u00eb\u00ec\7g\2\2\u00ec.\3\2\2\2\u00ed\u00ee") + buf.write("\7t\2\2\u00ee\u00ef\7g\2\2\u00ef\u00f0\7v\2\2\u00f0\u00f1") + buf.write("\7w\2\2\u00f1\u00f2\7t\2\2\u00f2\u00f3\7p\2\2\u00f3\60") + buf.write("\3\2\2\2\u00f4\u00f5\7.\2\2\u00f5\62\3\2\2\2\u00f6\u00f7") + buf.write("\7k\2\2\u00f7\u00f8\7h\2\2\u00f8\64\3\2\2\2\u00f9\u00fa") + buf.write("\7f\2\2\u00fa\u00fb\7q\2\2\u00fb\66\3\2\2\2\u00fc\u00fd") + buf.write("\7g\2\2\u00fd\u00fe\7n\2\2\u00fe\u00ff\7k\2\2\u00ff\u0100") + buf.write("\7h\2\2\u01008\3\2\2\2\u0101\u0102\7g\2\2\u0102\u0103") + buf.write("\7n\2\2\u0103\u0104\7u\2\2\u0104\u0105\7g\2\2\u0105:\3") + buf.write("\2\2\2\u0106\u0107\7y\2\2\u0107\u0108\7j\2\2\u0108\u0109") + buf.write("\7k\2\2\u0109\u010a\7n\2\2\u010a\u010b\7g\2\2\u010b<\3") + buf.write("\2\2\2\u010c\u010d\7w\2\2\u010d\u010e\7p\2\2\u010e\u010f") + buf.write("\7v\2\2\u010f\u0110\7k\2\2\u0110\u0111\7n\2\2\u0111>\3") + buf.write("\2\2\2\u0112\u0113\7h\2\2\u0113\u0114\7q\2\2\u0114\u0115") + buf.write("\7t\2\2\u0115@\3\2\2\2\u0116\u0117\7k\2\2\u0117\u0118") + buf.write("\7p\2\2\u0118B\3\2\2\2\u0119\u011a\7u\2\2\u011a\u011b") + buf.write("\7v\2\2\u011b\u011c\7g\2\2\u011c\u011d\7r\2\2\u011dD\3") + buf.write("\2\2\2\u011e\u011f\7h\2\2\u011f\u0120\7w\2\2\u0120\u0121") + buf.write("\7p\2\2\u0121\u0122\7e\2\2\u0122F\3\2\2\2\u0123\u0124") + buf.write("\7>\2\2\u0124H\3\2\2\2\u0125\u0126\7@\2\2\u0126J\3\2\2") + buf.write("\2\u0127\u0128\7f\2\2\u0128\u0129\7g\2\2\u0129\u012a\7") + buf.write("h\2\2\u012aL\3\2\2\2\u012b\u012c\7g\2\2\u012c\u012d\7") + buf.write("z\2\2\u012d\u012e\7v\2\2\u012e\u012f\7g\2\2\u012f\u0130") + buf.write("\7t\2\2\u0130\u0131\7p\2\2\u0131N\3\2\2\2\u0132\u0133") + buf.write("\7e\2\2\u0133\u0134\7n\2\2\u0134\u0135\7c\2\2\u0135\u0136") + buf.write("\7u\2\2\u0136\u0137\7u\2\2\u0137P\3\2\2\2\u0138\u0139") + buf.write("\7*\2\2\u0139R\3\2\2\2\u013a\u013b\7+\2\2\u013bT\3\2\2") + buf.write("\2\u013c\u013d\7}\2\2\u013dV\3\2\2\2\u013e\u013f\7\177") + buf.write("\2\2\u013fX\3\2\2\2\u0140\u0141\7<\2\2\u0141Z\3\2\2\2") + buf.write("\u0142\u0143\7c\2\2\u0143\u0144\7d\2\2\u0144\u0145\7u") + buf.write("\2\2\u0145\u0146\7v\2\2\u0146\u0147\7t\2\2\u0147\u0148") + buf.write("\7c\2\2\u0148\u0149\7e\2\2\u0149\u014a\7v\2\2\u014a\\") + buf.write("\3\2\2\2\u014b\u014c\7e\2\2\u014c\u014d\7q\2\2\u014d\u014e") + buf.write("\7p\2\2\u014e\u014f\7u\2\2\u014f\u0150\7v\2\2\u0150\u0151") + buf.write("\7t\2\2\u0151\u0152\7w\2\2\u0152\u0153\7e\2\2\u0153\u0154") + buf.write("\7v\2\2\u0154\u0155\7q\2\2\u0155\u0156\7t\2\2\u0156^\3") + buf.write("\2\2\2\u0157\u0158\7]\2\2\u0158`\3\2\2\2\u0159\u015a\7") + buf.write("_\2\2\u015ab\3\2\2\2\u015b\u015c\7A\2\2\u015cd\3\2\2\2") + buf.write("\u015d\u015e\7\60\2\2\u015ef\3\2\2\2\u015f\u0160\7#\2") + buf.write("\2\u0160h\3\2\2\2\u0161\u0162\7\u0080\2\2\u0162j\3\2\2") + buf.write("\2\u0163\u0164\7\60\2\2\u0164\u0165\7\60\2\2\u0165l\3") + buf.write("\2\2\2\u0166\u0167\7\60\2\2\u0167\u0168\7\60\2\2\u0168") + buf.write("\u0169\7\60\2\2\u0169n\3\2\2\2\u016a\u016b\7k\2\2\u016b") + buf.write("\u016c\7u\2\2\u016cp\3\2\2\2\u016d\u016e\7k\2\2\u016e") + buf.write("\u016f\7u\2\2\u016f\u0170\7p\2\2\u0170\u0171\7)\2\2\u0171") + buf.write("\u0172\7v\2\2\u0172r\3\2\2\2\u0173\u0174\7?\2\2\u0174") + buf.write("\u0175\7?\2\2\u0175t\3\2\2\2\u0176\u0177\7#\2\2\u0177") + buf.write("\u0178\7?\2\2\u0178v\3\2\2\2\u0179\u017a\7>\2\2\u017a") + buf.write("\u017b\7?\2\2\u017bx\3\2\2\2\u017c\u017d\7@\2\2\u017d") + buf.write("\u017e\7?\2\2\u017ez\3\2\2\2\u017f\u0180\7p\2\2\u0180") + buf.write("\u0181\7q\2\2\u0181\u0182\7v\2\2\u0182|\3\2\2\2\u0183") + buf.write("\u0184\7c\2\2\u0184\u0185\7p\2\2\u0185\u0186\7f\2\2\u0186") + buf.write("~\3\2\2\2\u0187\u0188\7q\2\2\u0188\u0189\7t\2\2\u0189") + buf.write("\u0080\3\2\2\2\u018a\u018b\7n\2\2\u018b\u018c\7c\2\2\u018c") + buf.write("\u018d\7o\2\2\u018d\u018e\7d\2\2\u018e\u018f\7f\2\2\u018f") + buf.write("\u0190\7c\2\2\u0190\u0082\3\2\2\2\u0191\u0192\7/\2\2\u0192") + buf.write("\u0193\7@\2\2\u0193\u0084\3\2\2\2\u0194\u0195\7v\2\2\u0195") + buf.write("\u0196\7t\2\2\u0196\u0197\7w\2\2\u0197\u0198\7g\2\2\u0198") + buf.write("\u0086\3\2\2\2\u0199\u019a\7h\2\2\u019a\u019b\7c\2\2\u019b") + buf.write("\u019c\7n\2\2\u019c\u019d\7u\2\2\u019d\u019e\7g\2\2\u019e") + buf.write("\u0088\3\2\2\2\u019f\u01a0\7p\2\2\u01a0\u01a1\7w\2\2\u01a1") + buf.write("\u01a2\7n\2\2\u01a2\u01a3\7n\2\2\u01a3\u008a\3\2\2\2\u01a4") + buf.write("\u01a5\7u\2\2\u01a5\u01a6\7w\2\2\u01a6\u01a7\7r\2\2\u01a7") + buf.write("\u01a8\7g\2\2\u01a8\u01a9\7t\2\2\u01a9\u008c\3\2\2\2\u01aa") + buf.write("\u01ac\5\u0097L\2\u01ab\u01aa\3\2\2\2\u01ac\u01ad\3\2") + buf.write("\2\2\u01ad\u01ab\3\2\2\2\u01ad\u01ae\3\2\2\2\u01ae\u008e") + buf.write("\3\2\2\2\u01af\u01b1\5\u0097L\2\u01b0\u01af\3\2\2\2\u01b1") + buf.write("\u01b2\3\2\2\2\u01b2\u01b0\3\2\2\2\u01b2\u01b3\3\2\2\2") + buf.write("\u01b3\u01b4\3\2\2\2\u01b4\u01b6\7\60\2\2\u01b5\u01b7") + buf.write("\5\u0097L\2\u01b6\u01b5\3\2\2\2\u01b7\u01b8\3\2\2\2\u01b8") + buf.write("\u01b6\3\2\2\2\u01b8\u01b9\3\2\2\2\u01b9\u01c3\3\2\2\2") + buf.write("\u01ba\u01bc\7g\2\2\u01bb\u01bd\7/\2\2\u01bc\u01bb\3\2") + buf.write("\2\2\u01bc\u01bd\3\2\2\2\u01bd\u01bf\3\2\2\2\u01be\u01c0") + buf.write("\5\u0097L\2\u01bf\u01be\3\2\2\2\u01c0\u01c1\3\2\2\2\u01c1") + buf.write("\u01bf\3\2\2\2\u01c1\u01c2\3\2\2\2\u01c2\u01c4\3\2\2\2") + buf.write("\u01c3\u01ba\3\2\2\2\u01c3\u01c4\3\2\2\2\u01c4\u0090\3") + buf.write("\2\2\2\u01c5\u01cb\7)\2\2\u01c6\u01ca\n\2\2\2\u01c7\u01c8") + buf.write("\7^\2\2\u01c8\u01ca\t\3\2\2\u01c9\u01c6\3\2\2\2\u01c9") + buf.write("\u01c7\3\2\2\2\u01ca\u01cd\3\2\2\2\u01cb\u01c9\3\2\2\2") + buf.write("\u01cb\u01cc\3\2\2\2\u01cc\u01ce\3\2\2\2\u01cd\u01cb\3") + buf.write("\2\2\2\u01ce\u01cf\7)\2\2\u01cf\u0092\3\2\2\2\u01d0\u01d6") + buf.write("\7$\2\2\u01d1\u01d5\n\4\2\2\u01d2\u01d3\7^\2\2\u01d3\u01d5") + buf.write("\t\5\2\2\u01d4\u01d1\3\2\2\2\u01d4\u01d2\3\2\2\2\u01d5") + buf.write("\u01d8\3\2\2\2\u01d6\u01d4\3\2\2\2\u01d6\u01d7\3\2\2\2") + buf.write("\u01d7\u01d9\3\2\2\2\u01d8\u01d6\3\2\2\2\u01d9\u01da\7") + buf.write("$\2\2\u01da\u0094\3\2\2\2\u01db\u01df\5\u0099M\2\u01dc") + buf.write("\u01de\5\u009bN\2\u01dd\u01dc\3\2\2\2\u01de\u01e1\3\2") + buf.write("\2\2\u01df\u01dd\3\2\2\2\u01df\u01e0\3\2\2\2\u01e0\u0096") + buf.write("\3\2\2\2\u01e1\u01df\3\2\2\2\u01e2\u01e3\t\6\2\2\u01e3") + buf.write("\u0098\3\2\2\2\u01e4\u01e5\t\7\2\2\u01e5\u009a\3\2\2\2") + buf.write("\u01e6\u01ea\5\u0099M\2\u01e7\u01ea\5\u0097L\2\u01e8\u01ea") + buf.write("\t\b\2\2\u01e9\u01e6\3\2\2\2\u01e9\u01e7\3\2\2\2\u01e9") + buf.write("\u01e8\3\2\2\2\u01ea\u009c\3\2\2\2\u01eb\u01ed\t\t\2\2") + buf.write("\u01ec\u01eb\3\2\2\2\u01ed\u01ee\3\2\2\2\u01ee\u01ec\3") + buf.write("\2\2\2\u01ee\u01ef\3\2\2\2\u01ef\u01f0\3\2\2\2\u01f0\u01f1") + buf.write("\bO\2\2\u01f1\u009e\3\2\2\2\u01f2\u01f3\13\2\2\2\u01f3") + buf.write("\u00a0\3\2\2\2\20\2\u01ad\u01b2\u01b8\u01bc\u01c1\u01c3") + buf.write("\u01c9\u01cb\u01d4\u01d6\u01df\u01e9\u01ee\3\b\2\2") return buf.getvalue() @@ -308,9 +301,8 @@ class PyxellLexer(Lexer): CHAR = 72 STRING = 73 ID = 74 - COMMENT = 75 - WS = 76 - ERR = 77 + WS = 75 + ERR = 76 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -329,7 +321,7 @@ class PyxellLexer(Lexer): "'null'", "'super'" ] symbolicNames = [ "", - "INT", "FLOAT", "CHAR", "STRING", "ID", "COMMENT", "WS", "ERR" ] + "INT", "FLOAT", "CHAR", "STRING", "ID", "WS", "ERR" ] ruleNames = [ "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8", "T__9", "T__10", "T__11", "T__12", "T__13", @@ -343,7 +335,7 @@ class PyxellLexer(Lexer): "T__56", "T__57", "T__58", "T__59", "T__60", "T__61", "T__62", "T__63", "T__64", "T__65", "T__66", "T__67", "T__68", "INT", "FLOAT", "CHAR", "STRING", "ID", "DIGIT", - "ID_START", "ID_CONT", "COMMENT", "WS", "ERR" ] + "ID_START", "ID_CONT", "WS", "ERR" ] grammarFileName = "Pyxell.g4" diff --git a/src/antlr/PyxellLexer.tokens b/src/antlr/PyxellLexer.tokens index c57ea7d0..95df80e0 100644 --- a/src/antlr/PyxellLexer.tokens +++ b/src/antlr/PyxellLexer.tokens @@ -72,9 +72,8 @@ FLOAT=71 CHAR=72 STRING=73 ID=74 -COMMENT=75 -WS=76 -ERR=77 +WS=75 +ERR=76 ';'=1 'use'=2 'only'=3 diff --git a/src/antlr/PyxellParser.py b/src/antlr/PyxellParser.py index 71b0185e..42b580b9 100644 --- a/src/antlr/PyxellParser.py +++ b/src/antlr/PyxellParser.py @@ -8,7 +8,7 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3O") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3N") buf.write("\u01ca\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16") buf.write("\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\3\2\7\2") @@ -283,7 +283,7 @@ class PyxellParser ( Parser ): "", "", "", "", "", "", "", "", "", "", "INT", "FLOAT", "CHAR", - "STRING", "ID", "COMMENT", "WS", "ERR" ] + "STRING", "ID", "WS", "ERR" ] RULE_program = 0 RULE_stmt = 1 @@ -383,9 +383,8 @@ class PyxellParser ( Parser ): CHAR=72 STRING=73 ID=74 - COMMENT=75 - WS=76 - ERR=77 + WS=75 + ERR=76 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) diff --git a/src/indentation.py b/src/indentation.py index f85d0291..5d8733f8 100644 --- a/src/indentation.py +++ b/src/indentation.py @@ -4,20 +4,36 @@ from .errors import PyxellError +def remove_comments(code): + # https://stackoverflow.com/a/241506 + + def replacer(match): + s = match.group(0) + if s[:2] in ('{-', '--'): + return re.sub('[^\n]', ' ', s) # to preserve error line and column indices + else: + return s + + pattern = re.compile(r'--.*?$|{-.*?-}|\'(?:\\.|[^\\\'])*\'|"(?:\\.|[^\\"])*"', re.DOTALL | re.MULTILINE) + return re.sub(pattern, replacer, code) + + def transform_indented_code(code): """ Adds braces and semicolons to the code with indents. """ + code = remove_comments(code) lines = code.split('\n') - j = None + + j = None # index of the previous non-empty line indents = [''] new_block = False for i in range(len(lines)): line = lines[i] match = re.match(r'(\s*)(\S+)', line) - if not match or match.group(2).startswith('--'): - # Skip line with comment or whitespace only. + if not match: + # Skip line with whitespace only. continue indent = match.group(1) @@ -27,7 +43,13 @@ def transform_indented_code(code): raise PyxellError(PyxellError.InvalidIndentation(), i+1) indents.append(indent) new_block = False + elif indents[-1].startswith(indent): + # If the line isn't indented more than the current block, put a semicolon at the end of the previous line. + # Otherwise, assume it is continuation of the previous expression. + if j is not None: + lines[j] += ';' + # If the line is indented less than the current block, close the previous blocks. while indents: if indent == indents[-1]: @@ -40,18 +62,15 @@ def transform_indented_code(code): # Indentation must match one of the previous blocks. raise PyxellError(PyxellError.InvalidIndentation(), i+1) - if re.search(r'[^\w\'](do|def)\s*(--.*)?$', line): + if re.search(r'[^\w\'](do|def)\s*$', line): # If the line ends with a `do` or `def` keyword, start a new block. - lines[i] += '\r{' + lines[i] += '{' new_block = True - elif len(lines) == i+1 or not re.match(fr'{indents[-1]}\s', lines[i+1]): - # If the next line has a bigger indentation than the current block, assume it is a continuation of the expression. - # Otherwise, put a semicolon at the end of this line. - lines[i] += '\r;' j = i indents.pop() - lines[-1] += '}' * len(indents) + if j is not None: + lines[-1] += ';' + '}' * len(indents) return '\n'.join(lines) diff --git a/test/good/basic/comment03.out b/test/good/basic/comment03.out new file mode 100644 index 00000000..e69de29b diff --git a/test/good/basic/comment03.px b/test/good/basic/comment03.px new file mode 100644 index 00000000..9835ce96 --- /dev/null +++ b/test/good/basic/comment03.px @@ -0,0 +1 @@ + -- \ No newline at end of file From e1869dacd2593e8fd8d8d1cae30514f7fe1d48f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sat, 7 Dec 2019 21:05:28 +0100 Subject: [PATCH 084/100] Fix character literals --- src/Pyxell.g4 | 2 +- src/antlr/PyxellLexer.interp | 2 +- src/antlr/PyxellLexer.py | 353 +++++++++++++++++------------------ test/bad/strings/char01.err | 1 + test/bad/strings/char01.px | 2 + test/bad/strings/char02.err | 1 + test/bad/strings/char02.px | 2 + 7 files changed, 184 insertions(+), 179 deletions(-) create mode 100644 test/bad/strings/char01.err create mode 100644 test/bad/strings/char01.px create mode 100644 test/bad/strings/char02.err create mode 100644 test/bad/strings/char02.px diff --git a/src/Pyxell.g4 b/src/Pyxell.g4 index 6c28d6aa..abdb6850 100644 --- a/src/Pyxell.g4 +++ b/src/Pyxell.g4 @@ -125,7 +125,7 @@ typ INT : DIGIT+ ; FLOAT : DIGIT+ '.' DIGIT+ ('e' '-'? DIGIT+)? ; -CHAR : '\'' (~[\\'] | ('\\' ['\\nt]))* '\'' ; +CHAR : '\'' (~[\\'] | ('\\' ['\\nt])) '\'' ; STRING : '"' (~[\\"] | ('\\' ["\\nt]))* '"' ; ID : ID_START ID_CONT* ; diff --git a/src/antlr/PyxellLexer.interp b/src/antlr/PyxellLexer.interp index ec539915..7a9157f8 100644 --- a/src/antlr/PyxellLexer.interp +++ b/src/antlr/PyxellLexer.interp @@ -245,4 +245,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 78, 500, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 71, 6, 71, 428, 10, 71, 13, 71, 14, 71, 429, 3, 72, 6, 72, 433, 10, 72, 13, 72, 14, 72, 434, 3, 72, 3, 72, 6, 72, 439, 10, 72, 13, 72, 14, 72, 440, 3, 72, 3, 72, 5, 72, 445, 10, 72, 3, 72, 6, 72, 448, 10, 72, 13, 72, 14, 72, 449, 5, 72, 452, 10, 72, 3, 73, 3, 73, 3, 73, 3, 73, 7, 73, 458, 10, 73, 12, 73, 14, 73, 461, 11, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 74, 7, 74, 469, 10, 74, 12, 74, 14, 74, 472, 11, 74, 3, 74, 3, 74, 3, 75, 3, 75, 7, 75, 478, 10, 75, 12, 75, 14, 75, 481, 11, 75, 3, 76, 3, 76, 3, 77, 3, 77, 3, 78, 3, 78, 3, 78, 5, 78, 490, 10, 78, 3, 79, 6, 79, 493, 10, 79, 13, 79, 14, 79, 494, 3, 79, 3, 79, 3, 80, 3, 80, 2, 2, 81, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 74, 147, 75, 149, 76, 151, 2, 153, 2, 155, 2, 157, 77, 159, 78, 3, 2, 10, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 3, 2, 41, 41, 5, 2, 11, 12, 15, 15, 34, 34, 2, 510, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 3, 161, 3, 2, 2, 2, 5, 163, 3, 2, 2, 2, 7, 167, 3, 2, 2, 2, 9, 172, 3, 2, 2, 2, 11, 179, 3, 2, 2, 2, 13, 182, 3, 2, 2, 2, 15, 187, 3, 2, 2, 2, 17, 193, 3, 2, 2, 2, 19, 195, 3, 2, 2, 2, 21, 197, 3, 2, 2, 2, 23, 199, 3, 2, 2, 2, 25, 201, 3, 2, 2, 2, 27, 203, 3, 2, 2, 2, 29, 205, 3, 2, 2, 2, 31, 207, 3, 2, 2, 2, 33, 210, 3, 2, 2, 2, 35, 213, 3, 2, 2, 2, 37, 215, 3, 2, 2, 2, 39, 217, 3, 2, 2, 2, 41, 219, 3, 2, 2, 2, 43, 222, 3, 2, 2, 2, 45, 228, 3, 2, 2, 2, 47, 237, 3, 2, 2, 2, 49, 244, 3, 2, 2, 2, 51, 246, 3, 2, 2, 2, 53, 249, 3, 2, 2, 2, 55, 252, 3, 2, 2, 2, 57, 257, 3, 2, 2, 2, 59, 262, 3, 2, 2, 2, 61, 268, 3, 2, 2, 2, 63, 274, 3, 2, 2, 2, 65, 278, 3, 2, 2, 2, 67, 281, 3, 2, 2, 2, 69, 286, 3, 2, 2, 2, 71, 291, 3, 2, 2, 2, 73, 293, 3, 2, 2, 2, 75, 295, 3, 2, 2, 2, 77, 299, 3, 2, 2, 2, 79, 306, 3, 2, 2, 2, 81, 312, 3, 2, 2, 2, 83, 314, 3, 2, 2, 2, 85, 316, 3, 2, 2, 2, 87, 318, 3, 2, 2, 2, 89, 320, 3, 2, 2, 2, 91, 322, 3, 2, 2, 2, 93, 331, 3, 2, 2, 2, 95, 343, 3, 2, 2, 2, 97, 345, 3, 2, 2, 2, 99, 347, 3, 2, 2, 2, 101, 349, 3, 2, 2, 2, 103, 351, 3, 2, 2, 2, 105, 353, 3, 2, 2, 2, 107, 355, 3, 2, 2, 2, 109, 358, 3, 2, 2, 2, 111, 362, 3, 2, 2, 2, 113, 365, 3, 2, 2, 2, 115, 371, 3, 2, 2, 2, 117, 374, 3, 2, 2, 2, 119, 377, 3, 2, 2, 2, 121, 380, 3, 2, 2, 2, 123, 383, 3, 2, 2, 2, 125, 387, 3, 2, 2, 2, 127, 391, 3, 2, 2, 2, 129, 394, 3, 2, 2, 2, 131, 401, 3, 2, 2, 2, 133, 404, 3, 2, 2, 2, 135, 409, 3, 2, 2, 2, 137, 415, 3, 2, 2, 2, 139, 420, 3, 2, 2, 2, 141, 427, 3, 2, 2, 2, 143, 432, 3, 2, 2, 2, 145, 453, 3, 2, 2, 2, 147, 464, 3, 2, 2, 2, 149, 475, 3, 2, 2, 2, 151, 482, 3, 2, 2, 2, 153, 484, 3, 2, 2, 2, 155, 489, 3, 2, 2, 2, 157, 492, 3, 2, 2, 2, 159, 498, 3, 2, 2, 2, 161, 162, 7, 61, 2, 2, 162, 4, 3, 2, 2, 2, 163, 164, 7, 119, 2, 2, 164, 165, 7, 117, 2, 2, 165, 166, 7, 103, 2, 2, 166, 6, 3, 2, 2, 2, 167, 168, 7, 113, 2, 2, 168, 169, 7, 112, 2, 2, 169, 170, 7, 110, 2, 2, 170, 171, 7, 123, 2, 2, 171, 8, 3, 2, 2, 2, 172, 173, 7, 106, 2, 2, 173, 174, 7, 107, 2, 2, 174, 175, 7, 102, 2, 2, 175, 176, 7, 107, 2, 2, 176, 177, 7, 112, 2, 2, 177, 178, 7, 105, 2, 2, 178, 10, 3, 2, 2, 2, 179, 180, 7, 99, 2, 2, 180, 181, 7, 117, 2, 2, 181, 12, 3, 2, 2, 2, 182, 183, 7, 117, 2, 2, 183, 184, 7, 109, 2, 2, 184, 185, 7, 107, 2, 2, 185, 186, 7, 114, 2, 2, 186, 14, 3, 2, 2, 2, 187, 188, 7, 114, 2, 2, 188, 189, 7, 116, 2, 2, 189, 190, 7, 107, 2, 2, 190, 191, 7, 112, 2, 2, 191, 192, 7, 118, 2, 2, 192, 16, 3, 2, 2, 2, 193, 194, 7, 63, 2, 2, 194, 18, 3, 2, 2, 2, 195, 196, 7, 96, 2, 2, 196, 20, 3, 2, 2, 2, 197, 198, 7, 44, 2, 2, 198, 22, 3, 2, 2, 2, 199, 200, 7, 49, 2, 2, 200, 24, 3, 2, 2, 2, 201, 202, 7, 39, 2, 2, 202, 26, 3, 2, 2, 2, 203, 204, 7, 45, 2, 2, 204, 28, 3, 2, 2, 2, 205, 206, 7, 47, 2, 2, 206, 30, 3, 2, 2, 2, 207, 208, 7, 62, 2, 2, 208, 209, 7, 62, 2, 2, 209, 32, 3, 2, 2, 2, 210, 211, 7, 64, 2, 2, 211, 212, 7, 64, 2, 2, 212, 34, 3, 2, 2, 2, 213, 214, 7, 40, 2, 2, 214, 36, 3, 2, 2, 2, 215, 216, 7, 38, 2, 2, 216, 38, 3, 2, 2, 2, 217, 218, 7, 126, 2, 2, 218, 40, 3, 2, 2, 2, 219, 220, 7, 65, 2, 2, 220, 221, 7, 65, 2, 2, 221, 42, 3, 2, 2, 2, 222, 223, 7, 100, 2, 2, 223, 224, 7, 116, 2, 2, 224, 225, 7, 103, 2, 2, 225, 226, 7, 99, 2, 2, 226, 227, 7, 109, 2, 2, 227, 44, 3, 2, 2, 2, 228, 229, 7, 101, 2, 2, 229, 230, 7, 113, 2, 2, 230, 231, 7, 112, 2, 2, 231, 232, 7, 118, 2, 2, 232, 233, 7, 107, 2, 2, 233, 234, 7, 112, 2, 2, 234, 235, 7, 119, 2, 2, 235, 236, 7, 103, 2, 2, 236, 46, 3, 2, 2, 2, 237, 238, 7, 116, 2, 2, 238, 239, 7, 103, 2, 2, 239, 240, 7, 118, 2, 2, 240, 241, 7, 119, 2, 2, 241, 242, 7, 116, 2, 2, 242, 243, 7, 112, 2, 2, 243, 48, 3, 2, 2, 2, 244, 245, 7, 46, 2, 2, 245, 50, 3, 2, 2, 2, 246, 247, 7, 107, 2, 2, 247, 248, 7, 104, 2, 2, 248, 52, 3, 2, 2, 2, 249, 250, 7, 102, 2, 2, 250, 251, 7, 113, 2, 2, 251, 54, 3, 2, 2, 2, 252, 253, 7, 103, 2, 2, 253, 254, 7, 110, 2, 2, 254, 255, 7, 107, 2, 2, 255, 256, 7, 104, 2, 2, 256, 56, 3, 2, 2, 2, 257, 258, 7, 103, 2, 2, 258, 259, 7, 110, 2, 2, 259, 260, 7, 117, 2, 2, 260, 261, 7, 103, 2, 2, 261, 58, 3, 2, 2, 2, 262, 263, 7, 121, 2, 2, 263, 264, 7, 106, 2, 2, 264, 265, 7, 107, 2, 2, 265, 266, 7, 110, 2, 2, 266, 267, 7, 103, 2, 2, 267, 60, 3, 2, 2, 2, 268, 269, 7, 119, 2, 2, 269, 270, 7, 112, 2, 2, 270, 271, 7, 118, 2, 2, 271, 272, 7, 107, 2, 2, 272, 273, 7, 110, 2, 2, 273, 62, 3, 2, 2, 2, 274, 275, 7, 104, 2, 2, 275, 276, 7, 113, 2, 2, 276, 277, 7, 116, 2, 2, 277, 64, 3, 2, 2, 2, 278, 279, 7, 107, 2, 2, 279, 280, 7, 112, 2, 2, 280, 66, 3, 2, 2, 2, 281, 282, 7, 117, 2, 2, 282, 283, 7, 118, 2, 2, 283, 284, 7, 103, 2, 2, 284, 285, 7, 114, 2, 2, 285, 68, 3, 2, 2, 2, 286, 287, 7, 104, 2, 2, 287, 288, 7, 119, 2, 2, 288, 289, 7, 112, 2, 2, 289, 290, 7, 101, 2, 2, 290, 70, 3, 2, 2, 2, 291, 292, 7, 62, 2, 2, 292, 72, 3, 2, 2, 2, 293, 294, 7, 64, 2, 2, 294, 74, 3, 2, 2, 2, 295, 296, 7, 102, 2, 2, 296, 297, 7, 103, 2, 2, 297, 298, 7, 104, 2, 2, 298, 76, 3, 2, 2, 2, 299, 300, 7, 103, 2, 2, 300, 301, 7, 122, 2, 2, 301, 302, 7, 118, 2, 2, 302, 303, 7, 103, 2, 2, 303, 304, 7, 116, 2, 2, 304, 305, 7, 112, 2, 2, 305, 78, 3, 2, 2, 2, 306, 307, 7, 101, 2, 2, 307, 308, 7, 110, 2, 2, 308, 309, 7, 99, 2, 2, 309, 310, 7, 117, 2, 2, 310, 311, 7, 117, 2, 2, 311, 80, 3, 2, 2, 2, 312, 313, 7, 42, 2, 2, 313, 82, 3, 2, 2, 2, 314, 315, 7, 43, 2, 2, 315, 84, 3, 2, 2, 2, 316, 317, 7, 125, 2, 2, 317, 86, 3, 2, 2, 2, 318, 319, 7, 127, 2, 2, 319, 88, 3, 2, 2, 2, 320, 321, 7, 60, 2, 2, 321, 90, 3, 2, 2, 2, 322, 323, 7, 99, 2, 2, 323, 324, 7, 100, 2, 2, 324, 325, 7, 117, 2, 2, 325, 326, 7, 118, 2, 2, 326, 327, 7, 116, 2, 2, 327, 328, 7, 99, 2, 2, 328, 329, 7, 101, 2, 2, 329, 330, 7, 118, 2, 2, 330, 92, 3, 2, 2, 2, 331, 332, 7, 101, 2, 2, 332, 333, 7, 113, 2, 2, 333, 334, 7, 112, 2, 2, 334, 335, 7, 117, 2, 2, 335, 336, 7, 118, 2, 2, 336, 337, 7, 116, 2, 2, 337, 338, 7, 119, 2, 2, 338, 339, 7, 101, 2, 2, 339, 340, 7, 118, 2, 2, 340, 341, 7, 113, 2, 2, 341, 342, 7, 116, 2, 2, 342, 94, 3, 2, 2, 2, 343, 344, 7, 93, 2, 2, 344, 96, 3, 2, 2, 2, 345, 346, 7, 95, 2, 2, 346, 98, 3, 2, 2, 2, 347, 348, 7, 65, 2, 2, 348, 100, 3, 2, 2, 2, 349, 350, 7, 48, 2, 2, 350, 102, 3, 2, 2, 2, 351, 352, 7, 35, 2, 2, 352, 104, 3, 2, 2, 2, 353, 354, 7, 128, 2, 2, 354, 106, 3, 2, 2, 2, 355, 356, 7, 48, 2, 2, 356, 357, 7, 48, 2, 2, 357, 108, 3, 2, 2, 2, 358, 359, 7, 48, 2, 2, 359, 360, 7, 48, 2, 2, 360, 361, 7, 48, 2, 2, 361, 110, 3, 2, 2, 2, 362, 363, 7, 107, 2, 2, 363, 364, 7, 117, 2, 2, 364, 112, 3, 2, 2, 2, 365, 366, 7, 107, 2, 2, 366, 367, 7, 117, 2, 2, 367, 368, 7, 112, 2, 2, 368, 369, 7, 41, 2, 2, 369, 370, 7, 118, 2, 2, 370, 114, 3, 2, 2, 2, 371, 372, 7, 63, 2, 2, 372, 373, 7, 63, 2, 2, 373, 116, 3, 2, 2, 2, 374, 375, 7, 35, 2, 2, 375, 376, 7, 63, 2, 2, 376, 118, 3, 2, 2, 2, 377, 378, 7, 62, 2, 2, 378, 379, 7, 63, 2, 2, 379, 120, 3, 2, 2, 2, 380, 381, 7, 64, 2, 2, 381, 382, 7, 63, 2, 2, 382, 122, 3, 2, 2, 2, 383, 384, 7, 112, 2, 2, 384, 385, 7, 113, 2, 2, 385, 386, 7, 118, 2, 2, 386, 124, 3, 2, 2, 2, 387, 388, 7, 99, 2, 2, 388, 389, 7, 112, 2, 2, 389, 390, 7, 102, 2, 2, 390, 126, 3, 2, 2, 2, 391, 392, 7, 113, 2, 2, 392, 393, 7, 116, 2, 2, 393, 128, 3, 2, 2, 2, 394, 395, 7, 110, 2, 2, 395, 396, 7, 99, 2, 2, 396, 397, 7, 111, 2, 2, 397, 398, 7, 100, 2, 2, 398, 399, 7, 102, 2, 2, 399, 400, 7, 99, 2, 2, 400, 130, 3, 2, 2, 2, 401, 402, 7, 47, 2, 2, 402, 403, 7, 64, 2, 2, 403, 132, 3, 2, 2, 2, 404, 405, 7, 118, 2, 2, 405, 406, 7, 116, 2, 2, 406, 407, 7, 119, 2, 2, 407, 408, 7, 103, 2, 2, 408, 134, 3, 2, 2, 2, 409, 410, 7, 104, 2, 2, 410, 411, 7, 99, 2, 2, 411, 412, 7, 110, 2, 2, 412, 413, 7, 117, 2, 2, 413, 414, 7, 103, 2, 2, 414, 136, 3, 2, 2, 2, 415, 416, 7, 112, 2, 2, 416, 417, 7, 119, 2, 2, 417, 418, 7, 110, 2, 2, 418, 419, 7, 110, 2, 2, 419, 138, 3, 2, 2, 2, 420, 421, 7, 117, 2, 2, 421, 422, 7, 119, 2, 2, 422, 423, 7, 114, 2, 2, 423, 424, 7, 103, 2, 2, 424, 425, 7, 116, 2, 2, 425, 140, 3, 2, 2, 2, 426, 428, 5, 151, 76, 2, 427, 426, 3, 2, 2, 2, 428, 429, 3, 2, 2, 2, 429, 427, 3, 2, 2, 2, 429, 430, 3, 2, 2, 2, 430, 142, 3, 2, 2, 2, 431, 433, 5, 151, 76, 2, 432, 431, 3, 2, 2, 2, 433, 434, 3, 2, 2, 2, 434, 432, 3, 2, 2, 2, 434, 435, 3, 2, 2, 2, 435, 436, 3, 2, 2, 2, 436, 438, 7, 48, 2, 2, 437, 439, 5, 151, 76, 2, 438, 437, 3, 2, 2, 2, 439, 440, 3, 2, 2, 2, 440, 438, 3, 2, 2, 2, 440, 441, 3, 2, 2, 2, 441, 451, 3, 2, 2, 2, 442, 444, 7, 103, 2, 2, 443, 445, 7, 47, 2, 2, 444, 443, 3, 2, 2, 2, 444, 445, 3, 2, 2, 2, 445, 447, 3, 2, 2, 2, 446, 448, 5, 151, 76, 2, 447, 446, 3, 2, 2, 2, 448, 449, 3, 2, 2, 2, 449, 447, 3, 2, 2, 2, 449, 450, 3, 2, 2, 2, 450, 452, 3, 2, 2, 2, 451, 442, 3, 2, 2, 2, 451, 452, 3, 2, 2, 2, 452, 144, 3, 2, 2, 2, 453, 459, 7, 41, 2, 2, 454, 458, 10, 2, 2, 2, 455, 456, 7, 94, 2, 2, 456, 458, 9, 3, 2, 2, 457, 454, 3, 2, 2, 2, 457, 455, 3, 2, 2, 2, 458, 461, 3, 2, 2, 2, 459, 457, 3, 2, 2, 2, 459, 460, 3, 2, 2, 2, 460, 462, 3, 2, 2, 2, 461, 459, 3, 2, 2, 2, 462, 463, 7, 41, 2, 2, 463, 146, 3, 2, 2, 2, 464, 470, 7, 36, 2, 2, 465, 469, 10, 4, 2, 2, 466, 467, 7, 94, 2, 2, 467, 469, 9, 5, 2, 2, 468, 465, 3, 2, 2, 2, 468, 466, 3, 2, 2, 2, 469, 472, 3, 2, 2, 2, 470, 468, 3, 2, 2, 2, 470, 471, 3, 2, 2, 2, 471, 473, 3, 2, 2, 2, 472, 470, 3, 2, 2, 2, 473, 474, 7, 36, 2, 2, 474, 148, 3, 2, 2, 2, 475, 479, 5, 153, 77, 2, 476, 478, 5, 155, 78, 2, 477, 476, 3, 2, 2, 2, 478, 481, 3, 2, 2, 2, 479, 477, 3, 2, 2, 2, 479, 480, 3, 2, 2, 2, 480, 150, 3, 2, 2, 2, 481, 479, 3, 2, 2, 2, 482, 483, 9, 6, 2, 2, 483, 152, 3, 2, 2, 2, 484, 485, 9, 7, 2, 2, 485, 154, 3, 2, 2, 2, 486, 490, 5, 153, 77, 2, 487, 490, 5, 151, 76, 2, 488, 490, 9, 8, 2, 2, 489, 486, 3, 2, 2, 2, 489, 487, 3, 2, 2, 2, 489, 488, 3, 2, 2, 2, 490, 156, 3, 2, 2, 2, 491, 493, 9, 9, 2, 2, 492, 491, 3, 2, 2, 2, 493, 494, 3, 2, 2, 2, 494, 492, 3, 2, 2, 2, 494, 495, 3, 2, 2, 2, 495, 496, 3, 2, 2, 2, 496, 497, 8, 79, 2, 2, 497, 158, 3, 2, 2, 2, 498, 499, 11, 2, 2, 2, 499, 160, 3, 2, 2, 2, 16, 2, 429, 434, 440, 444, 449, 451, 457, 459, 468, 470, 479, 489, 494, 3, 8, 2, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 78, 497, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 71, 6, 71, 428, 10, 71, 13, 71, 14, 71, 429, 3, 72, 6, 72, 433, 10, 72, 13, 72, 14, 72, 434, 3, 72, 3, 72, 6, 72, 439, 10, 72, 13, 72, 14, 72, 440, 3, 72, 3, 72, 5, 72, 445, 10, 72, 3, 72, 6, 72, 448, 10, 72, 13, 72, 14, 72, 449, 5, 72, 452, 10, 72, 3, 73, 3, 73, 3, 73, 3, 73, 5, 73, 458, 10, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 74, 7, 74, 466, 10, 74, 12, 74, 14, 74, 469, 11, 74, 3, 74, 3, 74, 3, 75, 3, 75, 7, 75, 475, 10, 75, 12, 75, 14, 75, 478, 11, 75, 3, 76, 3, 76, 3, 77, 3, 77, 3, 78, 3, 78, 3, 78, 5, 78, 487, 10, 78, 3, 79, 6, 79, 490, 10, 79, 13, 79, 14, 79, 491, 3, 79, 3, 79, 3, 80, 3, 80, 2, 2, 81, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 74, 147, 75, 149, 76, 151, 2, 153, 2, 155, 2, 157, 77, 159, 78, 3, 2, 10, 4, 2, 41, 41, 94, 94, 6, 2, 41, 41, 94, 94, 112, 112, 118, 118, 4, 2, 36, 36, 94, 94, 6, 2, 36, 36, 94, 94, 112, 112, 118, 118, 3, 2, 50, 59, 5, 2, 67, 92, 97, 97, 99, 124, 3, 2, 41, 41, 5, 2, 11, 12, 15, 15, 34, 34, 2, 506, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 3, 161, 3, 2, 2, 2, 5, 163, 3, 2, 2, 2, 7, 167, 3, 2, 2, 2, 9, 172, 3, 2, 2, 2, 11, 179, 3, 2, 2, 2, 13, 182, 3, 2, 2, 2, 15, 187, 3, 2, 2, 2, 17, 193, 3, 2, 2, 2, 19, 195, 3, 2, 2, 2, 21, 197, 3, 2, 2, 2, 23, 199, 3, 2, 2, 2, 25, 201, 3, 2, 2, 2, 27, 203, 3, 2, 2, 2, 29, 205, 3, 2, 2, 2, 31, 207, 3, 2, 2, 2, 33, 210, 3, 2, 2, 2, 35, 213, 3, 2, 2, 2, 37, 215, 3, 2, 2, 2, 39, 217, 3, 2, 2, 2, 41, 219, 3, 2, 2, 2, 43, 222, 3, 2, 2, 2, 45, 228, 3, 2, 2, 2, 47, 237, 3, 2, 2, 2, 49, 244, 3, 2, 2, 2, 51, 246, 3, 2, 2, 2, 53, 249, 3, 2, 2, 2, 55, 252, 3, 2, 2, 2, 57, 257, 3, 2, 2, 2, 59, 262, 3, 2, 2, 2, 61, 268, 3, 2, 2, 2, 63, 274, 3, 2, 2, 2, 65, 278, 3, 2, 2, 2, 67, 281, 3, 2, 2, 2, 69, 286, 3, 2, 2, 2, 71, 291, 3, 2, 2, 2, 73, 293, 3, 2, 2, 2, 75, 295, 3, 2, 2, 2, 77, 299, 3, 2, 2, 2, 79, 306, 3, 2, 2, 2, 81, 312, 3, 2, 2, 2, 83, 314, 3, 2, 2, 2, 85, 316, 3, 2, 2, 2, 87, 318, 3, 2, 2, 2, 89, 320, 3, 2, 2, 2, 91, 322, 3, 2, 2, 2, 93, 331, 3, 2, 2, 2, 95, 343, 3, 2, 2, 2, 97, 345, 3, 2, 2, 2, 99, 347, 3, 2, 2, 2, 101, 349, 3, 2, 2, 2, 103, 351, 3, 2, 2, 2, 105, 353, 3, 2, 2, 2, 107, 355, 3, 2, 2, 2, 109, 358, 3, 2, 2, 2, 111, 362, 3, 2, 2, 2, 113, 365, 3, 2, 2, 2, 115, 371, 3, 2, 2, 2, 117, 374, 3, 2, 2, 2, 119, 377, 3, 2, 2, 2, 121, 380, 3, 2, 2, 2, 123, 383, 3, 2, 2, 2, 125, 387, 3, 2, 2, 2, 127, 391, 3, 2, 2, 2, 129, 394, 3, 2, 2, 2, 131, 401, 3, 2, 2, 2, 133, 404, 3, 2, 2, 2, 135, 409, 3, 2, 2, 2, 137, 415, 3, 2, 2, 2, 139, 420, 3, 2, 2, 2, 141, 427, 3, 2, 2, 2, 143, 432, 3, 2, 2, 2, 145, 453, 3, 2, 2, 2, 147, 461, 3, 2, 2, 2, 149, 472, 3, 2, 2, 2, 151, 479, 3, 2, 2, 2, 153, 481, 3, 2, 2, 2, 155, 486, 3, 2, 2, 2, 157, 489, 3, 2, 2, 2, 159, 495, 3, 2, 2, 2, 161, 162, 7, 61, 2, 2, 162, 4, 3, 2, 2, 2, 163, 164, 7, 119, 2, 2, 164, 165, 7, 117, 2, 2, 165, 166, 7, 103, 2, 2, 166, 6, 3, 2, 2, 2, 167, 168, 7, 113, 2, 2, 168, 169, 7, 112, 2, 2, 169, 170, 7, 110, 2, 2, 170, 171, 7, 123, 2, 2, 171, 8, 3, 2, 2, 2, 172, 173, 7, 106, 2, 2, 173, 174, 7, 107, 2, 2, 174, 175, 7, 102, 2, 2, 175, 176, 7, 107, 2, 2, 176, 177, 7, 112, 2, 2, 177, 178, 7, 105, 2, 2, 178, 10, 3, 2, 2, 2, 179, 180, 7, 99, 2, 2, 180, 181, 7, 117, 2, 2, 181, 12, 3, 2, 2, 2, 182, 183, 7, 117, 2, 2, 183, 184, 7, 109, 2, 2, 184, 185, 7, 107, 2, 2, 185, 186, 7, 114, 2, 2, 186, 14, 3, 2, 2, 2, 187, 188, 7, 114, 2, 2, 188, 189, 7, 116, 2, 2, 189, 190, 7, 107, 2, 2, 190, 191, 7, 112, 2, 2, 191, 192, 7, 118, 2, 2, 192, 16, 3, 2, 2, 2, 193, 194, 7, 63, 2, 2, 194, 18, 3, 2, 2, 2, 195, 196, 7, 96, 2, 2, 196, 20, 3, 2, 2, 2, 197, 198, 7, 44, 2, 2, 198, 22, 3, 2, 2, 2, 199, 200, 7, 49, 2, 2, 200, 24, 3, 2, 2, 2, 201, 202, 7, 39, 2, 2, 202, 26, 3, 2, 2, 2, 203, 204, 7, 45, 2, 2, 204, 28, 3, 2, 2, 2, 205, 206, 7, 47, 2, 2, 206, 30, 3, 2, 2, 2, 207, 208, 7, 62, 2, 2, 208, 209, 7, 62, 2, 2, 209, 32, 3, 2, 2, 2, 210, 211, 7, 64, 2, 2, 211, 212, 7, 64, 2, 2, 212, 34, 3, 2, 2, 2, 213, 214, 7, 40, 2, 2, 214, 36, 3, 2, 2, 2, 215, 216, 7, 38, 2, 2, 216, 38, 3, 2, 2, 2, 217, 218, 7, 126, 2, 2, 218, 40, 3, 2, 2, 2, 219, 220, 7, 65, 2, 2, 220, 221, 7, 65, 2, 2, 221, 42, 3, 2, 2, 2, 222, 223, 7, 100, 2, 2, 223, 224, 7, 116, 2, 2, 224, 225, 7, 103, 2, 2, 225, 226, 7, 99, 2, 2, 226, 227, 7, 109, 2, 2, 227, 44, 3, 2, 2, 2, 228, 229, 7, 101, 2, 2, 229, 230, 7, 113, 2, 2, 230, 231, 7, 112, 2, 2, 231, 232, 7, 118, 2, 2, 232, 233, 7, 107, 2, 2, 233, 234, 7, 112, 2, 2, 234, 235, 7, 119, 2, 2, 235, 236, 7, 103, 2, 2, 236, 46, 3, 2, 2, 2, 237, 238, 7, 116, 2, 2, 238, 239, 7, 103, 2, 2, 239, 240, 7, 118, 2, 2, 240, 241, 7, 119, 2, 2, 241, 242, 7, 116, 2, 2, 242, 243, 7, 112, 2, 2, 243, 48, 3, 2, 2, 2, 244, 245, 7, 46, 2, 2, 245, 50, 3, 2, 2, 2, 246, 247, 7, 107, 2, 2, 247, 248, 7, 104, 2, 2, 248, 52, 3, 2, 2, 2, 249, 250, 7, 102, 2, 2, 250, 251, 7, 113, 2, 2, 251, 54, 3, 2, 2, 2, 252, 253, 7, 103, 2, 2, 253, 254, 7, 110, 2, 2, 254, 255, 7, 107, 2, 2, 255, 256, 7, 104, 2, 2, 256, 56, 3, 2, 2, 2, 257, 258, 7, 103, 2, 2, 258, 259, 7, 110, 2, 2, 259, 260, 7, 117, 2, 2, 260, 261, 7, 103, 2, 2, 261, 58, 3, 2, 2, 2, 262, 263, 7, 121, 2, 2, 263, 264, 7, 106, 2, 2, 264, 265, 7, 107, 2, 2, 265, 266, 7, 110, 2, 2, 266, 267, 7, 103, 2, 2, 267, 60, 3, 2, 2, 2, 268, 269, 7, 119, 2, 2, 269, 270, 7, 112, 2, 2, 270, 271, 7, 118, 2, 2, 271, 272, 7, 107, 2, 2, 272, 273, 7, 110, 2, 2, 273, 62, 3, 2, 2, 2, 274, 275, 7, 104, 2, 2, 275, 276, 7, 113, 2, 2, 276, 277, 7, 116, 2, 2, 277, 64, 3, 2, 2, 2, 278, 279, 7, 107, 2, 2, 279, 280, 7, 112, 2, 2, 280, 66, 3, 2, 2, 2, 281, 282, 7, 117, 2, 2, 282, 283, 7, 118, 2, 2, 283, 284, 7, 103, 2, 2, 284, 285, 7, 114, 2, 2, 285, 68, 3, 2, 2, 2, 286, 287, 7, 104, 2, 2, 287, 288, 7, 119, 2, 2, 288, 289, 7, 112, 2, 2, 289, 290, 7, 101, 2, 2, 290, 70, 3, 2, 2, 2, 291, 292, 7, 62, 2, 2, 292, 72, 3, 2, 2, 2, 293, 294, 7, 64, 2, 2, 294, 74, 3, 2, 2, 2, 295, 296, 7, 102, 2, 2, 296, 297, 7, 103, 2, 2, 297, 298, 7, 104, 2, 2, 298, 76, 3, 2, 2, 2, 299, 300, 7, 103, 2, 2, 300, 301, 7, 122, 2, 2, 301, 302, 7, 118, 2, 2, 302, 303, 7, 103, 2, 2, 303, 304, 7, 116, 2, 2, 304, 305, 7, 112, 2, 2, 305, 78, 3, 2, 2, 2, 306, 307, 7, 101, 2, 2, 307, 308, 7, 110, 2, 2, 308, 309, 7, 99, 2, 2, 309, 310, 7, 117, 2, 2, 310, 311, 7, 117, 2, 2, 311, 80, 3, 2, 2, 2, 312, 313, 7, 42, 2, 2, 313, 82, 3, 2, 2, 2, 314, 315, 7, 43, 2, 2, 315, 84, 3, 2, 2, 2, 316, 317, 7, 125, 2, 2, 317, 86, 3, 2, 2, 2, 318, 319, 7, 127, 2, 2, 319, 88, 3, 2, 2, 2, 320, 321, 7, 60, 2, 2, 321, 90, 3, 2, 2, 2, 322, 323, 7, 99, 2, 2, 323, 324, 7, 100, 2, 2, 324, 325, 7, 117, 2, 2, 325, 326, 7, 118, 2, 2, 326, 327, 7, 116, 2, 2, 327, 328, 7, 99, 2, 2, 328, 329, 7, 101, 2, 2, 329, 330, 7, 118, 2, 2, 330, 92, 3, 2, 2, 2, 331, 332, 7, 101, 2, 2, 332, 333, 7, 113, 2, 2, 333, 334, 7, 112, 2, 2, 334, 335, 7, 117, 2, 2, 335, 336, 7, 118, 2, 2, 336, 337, 7, 116, 2, 2, 337, 338, 7, 119, 2, 2, 338, 339, 7, 101, 2, 2, 339, 340, 7, 118, 2, 2, 340, 341, 7, 113, 2, 2, 341, 342, 7, 116, 2, 2, 342, 94, 3, 2, 2, 2, 343, 344, 7, 93, 2, 2, 344, 96, 3, 2, 2, 2, 345, 346, 7, 95, 2, 2, 346, 98, 3, 2, 2, 2, 347, 348, 7, 65, 2, 2, 348, 100, 3, 2, 2, 2, 349, 350, 7, 48, 2, 2, 350, 102, 3, 2, 2, 2, 351, 352, 7, 35, 2, 2, 352, 104, 3, 2, 2, 2, 353, 354, 7, 128, 2, 2, 354, 106, 3, 2, 2, 2, 355, 356, 7, 48, 2, 2, 356, 357, 7, 48, 2, 2, 357, 108, 3, 2, 2, 2, 358, 359, 7, 48, 2, 2, 359, 360, 7, 48, 2, 2, 360, 361, 7, 48, 2, 2, 361, 110, 3, 2, 2, 2, 362, 363, 7, 107, 2, 2, 363, 364, 7, 117, 2, 2, 364, 112, 3, 2, 2, 2, 365, 366, 7, 107, 2, 2, 366, 367, 7, 117, 2, 2, 367, 368, 7, 112, 2, 2, 368, 369, 7, 41, 2, 2, 369, 370, 7, 118, 2, 2, 370, 114, 3, 2, 2, 2, 371, 372, 7, 63, 2, 2, 372, 373, 7, 63, 2, 2, 373, 116, 3, 2, 2, 2, 374, 375, 7, 35, 2, 2, 375, 376, 7, 63, 2, 2, 376, 118, 3, 2, 2, 2, 377, 378, 7, 62, 2, 2, 378, 379, 7, 63, 2, 2, 379, 120, 3, 2, 2, 2, 380, 381, 7, 64, 2, 2, 381, 382, 7, 63, 2, 2, 382, 122, 3, 2, 2, 2, 383, 384, 7, 112, 2, 2, 384, 385, 7, 113, 2, 2, 385, 386, 7, 118, 2, 2, 386, 124, 3, 2, 2, 2, 387, 388, 7, 99, 2, 2, 388, 389, 7, 112, 2, 2, 389, 390, 7, 102, 2, 2, 390, 126, 3, 2, 2, 2, 391, 392, 7, 113, 2, 2, 392, 393, 7, 116, 2, 2, 393, 128, 3, 2, 2, 2, 394, 395, 7, 110, 2, 2, 395, 396, 7, 99, 2, 2, 396, 397, 7, 111, 2, 2, 397, 398, 7, 100, 2, 2, 398, 399, 7, 102, 2, 2, 399, 400, 7, 99, 2, 2, 400, 130, 3, 2, 2, 2, 401, 402, 7, 47, 2, 2, 402, 403, 7, 64, 2, 2, 403, 132, 3, 2, 2, 2, 404, 405, 7, 118, 2, 2, 405, 406, 7, 116, 2, 2, 406, 407, 7, 119, 2, 2, 407, 408, 7, 103, 2, 2, 408, 134, 3, 2, 2, 2, 409, 410, 7, 104, 2, 2, 410, 411, 7, 99, 2, 2, 411, 412, 7, 110, 2, 2, 412, 413, 7, 117, 2, 2, 413, 414, 7, 103, 2, 2, 414, 136, 3, 2, 2, 2, 415, 416, 7, 112, 2, 2, 416, 417, 7, 119, 2, 2, 417, 418, 7, 110, 2, 2, 418, 419, 7, 110, 2, 2, 419, 138, 3, 2, 2, 2, 420, 421, 7, 117, 2, 2, 421, 422, 7, 119, 2, 2, 422, 423, 7, 114, 2, 2, 423, 424, 7, 103, 2, 2, 424, 425, 7, 116, 2, 2, 425, 140, 3, 2, 2, 2, 426, 428, 5, 151, 76, 2, 427, 426, 3, 2, 2, 2, 428, 429, 3, 2, 2, 2, 429, 427, 3, 2, 2, 2, 429, 430, 3, 2, 2, 2, 430, 142, 3, 2, 2, 2, 431, 433, 5, 151, 76, 2, 432, 431, 3, 2, 2, 2, 433, 434, 3, 2, 2, 2, 434, 432, 3, 2, 2, 2, 434, 435, 3, 2, 2, 2, 435, 436, 3, 2, 2, 2, 436, 438, 7, 48, 2, 2, 437, 439, 5, 151, 76, 2, 438, 437, 3, 2, 2, 2, 439, 440, 3, 2, 2, 2, 440, 438, 3, 2, 2, 2, 440, 441, 3, 2, 2, 2, 441, 451, 3, 2, 2, 2, 442, 444, 7, 103, 2, 2, 443, 445, 7, 47, 2, 2, 444, 443, 3, 2, 2, 2, 444, 445, 3, 2, 2, 2, 445, 447, 3, 2, 2, 2, 446, 448, 5, 151, 76, 2, 447, 446, 3, 2, 2, 2, 448, 449, 3, 2, 2, 2, 449, 447, 3, 2, 2, 2, 449, 450, 3, 2, 2, 2, 450, 452, 3, 2, 2, 2, 451, 442, 3, 2, 2, 2, 451, 452, 3, 2, 2, 2, 452, 144, 3, 2, 2, 2, 453, 457, 7, 41, 2, 2, 454, 458, 10, 2, 2, 2, 455, 456, 7, 94, 2, 2, 456, 458, 9, 3, 2, 2, 457, 454, 3, 2, 2, 2, 457, 455, 3, 2, 2, 2, 458, 459, 3, 2, 2, 2, 459, 460, 7, 41, 2, 2, 460, 146, 3, 2, 2, 2, 461, 467, 7, 36, 2, 2, 462, 466, 10, 4, 2, 2, 463, 464, 7, 94, 2, 2, 464, 466, 9, 5, 2, 2, 465, 462, 3, 2, 2, 2, 465, 463, 3, 2, 2, 2, 466, 469, 3, 2, 2, 2, 467, 465, 3, 2, 2, 2, 467, 468, 3, 2, 2, 2, 468, 470, 3, 2, 2, 2, 469, 467, 3, 2, 2, 2, 470, 471, 7, 36, 2, 2, 471, 148, 3, 2, 2, 2, 472, 476, 5, 153, 77, 2, 473, 475, 5, 155, 78, 2, 474, 473, 3, 2, 2, 2, 475, 478, 3, 2, 2, 2, 476, 474, 3, 2, 2, 2, 476, 477, 3, 2, 2, 2, 477, 150, 3, 2, 2, 2, 478, 476, 3, 2, 2, 2, 479, 480, 9, 6, 2, 2, 480, 152, 3, 2, 2, 2, 481, 482, 9, 7, 2, 2, 482, 154, 3, 2, 2, 2, 483, 487, 5, 153, 77, 2, 484, 487, 5, 151, 76, 2, 485, 487, 9, 8, 2, 2, 486, 483, 3, 2, 2, 2, 486, 484, 3, 2, 2, 2, 486, 485, 3, 2, 2, 2, 487, 156, 3, 2, 2, 2, 488, 490, 9, 9, 2, 2, 489, 488, 3, 2, 2, 2, 490, 491, 3, 2, 2, 2, 491, 489, 3, 2, 2, 2, 491, 492, 3, 2, 2, 2, 492, 493, 3, 2, 2, 2, 493, 494, 8, 79, 2, 2, 494, 158, 3, 2, 2, 2, 495, 496, 11, 2, 2, 2, 496, 160, 3, 2, 2, 2, 15, 2, 429, 434, 440, 444, 449, 451, 457, 465, 467, 476, 486, 491, 3, 8, 2, 2] \ No newline at end of file diff --git a/src/antlr/PyxellLexer.py b/src/antlr/PyxellLexer.py index 474c2b7e..2ce0cb33 100644 --- a/src/antlr/PyxellLexer.py +++ b/src/antlr/PyxellLexer.py @@ -9,7 +9,7 @@ def serializedATN(): with StringIO() as buf: buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2N") - buf.write("\u01f4\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\u01f1\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") @@ -42,182 +42,181 @@ def serializedATN(): buf.write("E\3E\3E\3E\3F\3F\3F\3F\3F\3F\3G\6G\u01ac\nG\rG\16G\u01ad") buf.write("\3H\6H\u01b1\nH\rH\16H\u01b2\3H\3H\6H\u01b7\nH\rH\16H") buf.write("\u01b8\3H\3H\5H\u01bd\nH\3H\6H\u01c0\nH\rH\16H\u01c1\5") - buf.write("H\u01c4\nH\3I\3I\3I\3I\7I\u01ca\nI\fI\16I\u01cd\13I\3") - buf.write("I\3I\3J\3J\3J\3J\7J\u01d5\nJ\fJ\16J\u01d8\13J\3J\3J\3") - buf.write("K\3K\7K\u01de\nK\fK\16K\u01e1\13K\3L\3L\3M\3M\3N\3N\3") - buf.write("N\5N\u01ea\nN\3O\6O\u01ed\nO\rO\16O\u01ee\3O\3O\3P\3P") - buf.write("\2\2Q\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27") - buf.write("\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30") - buf.write("/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'") - buf.write("M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k\67m8o9q") - buf.write(":s;u{?}@\177A\u0081B\u0083C\u0085D\u0087E\u0089F") - buf.write("\u008bG\u008dH\u008fI\u0091J\u0093K\u0095L\u0097\2\u0099") - buf.write("\2\u009b\2\u009dM\u009fN\3\2\n\4\2))^^\6\2))^^ppvv\4\2") - buf.write("$$^^\6\2$$^^ppvv\3\2\62;\5\2C\\aac|\3\2))\5\2\13\f\17") - buf.write("\17\"\"\2\u01fe\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2") - buf.write("\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21") - buf.write("\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3") - buf.write("\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2") - buf.write("\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2") - buf.write("\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2") - buf.write("\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2") - buf.write("\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3") - buf.write("\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q") - buf.write("\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2") - buf.write("[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2") - buf.write("\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2m\3\2\2") - buf.write("\2\2o\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2u\3\2\2\2\2w\3\2") - buf.write("\2\2\2y\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177\3\2\2\2\2") - buf.write("\u0081\3\2\2\2\2\u0083\3\2\2\2\2\u0085\3\2\2\2\2\u0087") - buf.write("\3\2\2\2\2\u0089\3\2\2\2\2\u008b\3\2\2\2\2\u008d\3\2\2") - buf.write("\2\2\u008f\3\2\2\2\2\u0091\3\2\2\2\2\u0093\3\2\2\2\2\u0095") - buf.write("\3\2\2\2\2\u009d\3\2\2\2\2\u009f\3\2\2\2\3\u00a1\3\2\2") - buf.write("\2\5\u00a3\3\2\2\2\7\u00a7\3\2\2\2\t\u00ac\3\2\2\2\13") - buf.write("\u00b3\3\2\2\2\r\u00b6\3\2\2\2\17\u00bb\3\2\2\2\21\u00c1") - buf.write("\3\2\2\2\23\u00c3\3\2\2\2\25\u00c5\3\2\2\2\27\u00c7\3") - buf.write("\2\2\2\31\u00c9\3\2\2\2\33\u00cb\3\2\2\2\35\u00cd\3\2") - buf.write("\2\2\37\u00cf\3\2\2\2!\u00d2\3\2\2\2#\u00d5\3\2\2\2%\u00d7") - buf.write("\3\2\2\2\'\u00d9\3\2\2\2)\u00db\3\2\2\2+\u00de\3\2\2\2") - buf.write("-\u00e4\3\2\2\2/\u00ed\3\2\2\2\61\u00f4\3\2\2\2\63\u00f6") - buf.write("\3\2\2\2\65\u00f9\3\2\2\2\67\u00fc\3\2\2\29\u0101\3\2") - buf.write("\2\2;\u0106\3\2\2\2=\u010c\3\2\2\2?\u0112\3\2\2\2A\u0116") - buf.write("\3\2\2\2C\u0119\3\2\2\2E\u011e\3\2\2\2G\u0123\3\2\2\2") - buf.write("I\u0125\3\2\2\2K\u0127\3\2\2\2M\u012b\3\2\2\2O\u0132\3") - buf.write("\2\2\2Q\u0138\3\2\2\2S\u013a\3\2\2\2U\u013c\3\2\2\2W\u013e") - buf.write("\3\2\2\2Y\u0140\3\2\2\2[\u0142\3\2\2\2]\u014b\3\2\2\2") - buf.write("_\u0157\3\2\2\2a\u0159\3\2\2\2c\u015b\3\2\2\2e\u015d\3") - buf.write("\2\2\2g\u015f\3\2\2\2i\u0161\3\2\2\2k\u0163\3\2\2\2m\u0166") - buf.write("\3\2\2\2o\u016a\3\2\2\2q\u016d\3\2\2\2s\u0173\3\2\2\2") - buf.write("u\u0176\3\2\2\2w\u0179\3\2\2\2y\u017c\3\2\2\2{\u017f\3") - buf.write("\2\2\2}\u0183\3\2\2\2\177\u0187\3\2\2\2\u0081\u018a\3") - buf.write("\2\2\2\u0083\u0191\3\2\2\2\u0085\u0194\3\2\2\2\u0087\u0199") - buf.write("\3\2\2\2\u0089\u019f\3\2\2\2\u008b\u01a4\3\2\2\2\u008d") - buf.write("\u01ab\3\2\2\2\u008f\u01b0\3\2\2\2\u0091\u01c5\3\2\2\2") - buf.write("\u0093\u01d0\3\2\2\2\u0095\u01db\3\2\2\2\u0097\u01e2\3") - buf.write("\2\2\2\u0099\u01e4\3\2\2\2\u009b\u01e9\3\2\2\2\u009d\u01ec") - buf.write("\3\2\2\2\u009f\u01f2\3\2\2\2\u00a1\u00a2\7=\2\2\u00a2") - buf.write("\4\3\2\2\2\u00a3\u00a4\7w\2\2\u00a4\u00a5\7u\2\2\u00a5") - buf.write("\u00a6\7g\2\2\u00a6\6\3\2\2\2\u00a7\u00a8\7q\2\2\u00a8") - buf.write("\u00a9\7p\2\2\u00a9\u00aa\7n\2\2\u00aa\u00ab\7{\2\2\u00ab") - buf.write("\b\3\2\2\2\u00ac\u00ad\7j\2\2\u00ad\u00ae\7k\2\2\u00ae") - buf.write("\u00af\7f\2\2\u00af\u00b0\7k\2\2\u00b0\u00b1\7p\2\2\u00b1") - buf.write("\u00b2\7i\2\2\u00b2\n\3\2\2\2\u00b3\u00b4\7c\2\2\u00b4") - buf.write("\u00b5\7u\2\2\u00b5\f\3\2\2\2\u00b6\u00b7\7u\2\2\u00b7") - buf.write("\u00b8\7m\2\2\u00b8\u00b9\7k\2\2\u00b9\u00ba\7r\2\2\u00ba") - buf.write("\16\3\2\2\2\u00bb\u00bc\7r\2\2\u00bc\u00bd\7t\2\2\u00bd") - buf.write("\u00be\7k\2\2\u00be\u00bf\7p\2\2\u00bf\u00c0\7v\2\2\u00c0") - buf.write("\20\3\2\2\2\u00c1\u00c2\7?\2\2\u00c2\22\3\2\2\2\u00c3") - buf.write("\u00c4\7`\2\2\u00c4\24\3\2\2\2\u00c5\u00c6\7,\2\2\u00c6") - buf.write("\26\3\2\2\2\u00c7\u00c8\7\61\2\2\u00c8\30\3\2\2\2\u00c9") - buf.write("\u00ca\7\'\2\2\u00ca\32\3\2\2\2\u00cb\u00cc\7-\2\2\u00cc") - buf.write("\34\3\2\2\2\u00cd\u00ce\7/\2\2\u00ce\36\3\2\2\2\u00cf") - buf.write("\u00d0\7>\2\2\u00d0\u00d1\7>\2\2\u00d1 \3\2\2\2\u00d2") - buf.write("\u00d3\7@\2\2\u00d3\u00d4\7@\2\2\u00d4\"\3\2\2\2\u00d5") - buf.write("\u00d6\7(\2\2\u00d6$\3\2\2\2\u00d7\u00d8\7&\2\2\u00d8") - buf.write("&\3\2\2\2\u00d9\u00da\7~\2\2\u00da(\3\2\2\2\u00db\u00dc") - buf.write("\7A\2\2\u00dc\u00dd\7A\2\2\u00dd*\3\2\2\2\u00de\u00df") - buf.write("\7d\2\2\u00df\u00e0\7t\2\2\u00e0\u00e1\7g\2\2\u00e1\u00e2") - buf.write("\7c\2\2\u00e2\u00e3\7m\2\2\u00e3,\3\2\2\2\u00e4\u00e5") - buf.write("\7e\2\2\u00e5\u00e6\7q\2\2\u00e6\u00e7\7p\2\2\u00e7\u00e8") - buf.write("\7v\2\2\u00e8\u00e9\7k\2\2\u00e9\u00ea\7p\2\2\u00ea\u00eb") - buf.write("\7w\2\2\u00eb\u00ec\7g\2\2\u00ec.\3\2\2\2\u00ed\u00ee") - buf.write("\7t\2\2\u00ee\u00ef\7g\2\2\u00ef\u00f0\7v\2\2\u00f0\u00f1") - buf.write("\7w\2\2\u00f1\u00f2\7t\2\2\u00f2\u00f3\7p\2\2\u00f3\60") - buf.write("\3\2\2\2\u00f4\u00f5\7.\2\2\u00f5\62\3\2\2\2\u00f6\u00f7") - buf.write("\7k\2\2\u00f7\u00f8\7h\2\2\u00f8\64\3\2\2\2\u00f9\u00fa") - buf.write("\7f\2\2\u00fa\u00fb\7q\2\2\u00fb\66\3\2\2\2\u00fc\u00fd") - buf.write("\7g\2\2\u00fd\u00fe\7n\2\2\u00fe\u00ff\7k\2\2\u00ff\u0100") - buf.write("\7h\2\2\u01008\3\2\2\2\u0101\u0102\7g\2\2\u0102\u0103") - buf.write("\7n\2\2\u0103\u0104\7u\2\2\u0104\u0105\7g\2\2\u0105:\3") - buf.write("\2\2\2\u0106\u0107\7y\2\2\u0107\u0108\7j\2\2\u0108\u0109") - buf.write("\7k\2\2\u0109\u010a\7n\2\2\u010a\u010b\7g\2\2\u010b<\3") - buf.write("\2\2\2\u010c\u010d\7w\2\2\u010d\u010e\7p\2\2\u010e\u010f") - buf.write("\7v\2\2\u010f\u0110\7k\2\2\u0110\u0111\7n\2\2\u0111>\3") - buf.write("\2\2\2\u0112\u0113\7h\2\2\u0113\u0114\7q\2\2\u0114\u0115") - buf.write("\7t\2\2\u0115@\3\2\2\2\u0116\u0117\7k\2\2\u0117\u0118") - buf.write("\7p\2\2\u0118B\3\2\2\2\u0119\u011a\7u\2\2\u011a\u011b") - buf.write("\7v\2\2\u011b\u011c\7g\2\2\u011c\u011d\7r\2\2\u011dD\3") - buf.write("\2\2\2\u011e\u011f\7h\2\2\u011f\u0120\7w\2\2\u0120\u0121") - buf.write("\7p\2\2\u0121\u0122\7e\2\2\u0122F\3\2\2\2\u0123\u0124") - buf.write("\7>\2\2\u0124H\3\2\2\2\u0125\u0126\7@\2\2\u0126J\3\2\2") - buf.write("\2\u0127\u0128\7f\2\2\u0128\u0129\7g\2\2\u0129\u012a\7") - buf.write("h\2\2\u012aL\3\2\2\2\u012b\u012c\7g\2\2\u012c\u012d\7") - buf.write("z\2\2\u012d\u012e\7v\2\2\u012e\u012f\7g\2\2\u012f\u0130") - buf.write("\7t\2\2\u0130\u0131\7p\2\2\u0131N\3\2\2\2\u0132\u0133") - buf.write("\7e\2\2\u0133\u0134\7n\2\2\u0134\u0135\7c\2\2\u0135\u0136") - buf.write("\7u\2\2\u0136\u0137\7u\2\2\u0137P\3\2\2\2\u0138\u0139") - buf.write("\7*\2\2\u0139R\3\2\2\2\u013a\u013b\7+\2\2\u013bT\3\2\2") - buf.write("\2\u013c\u013d\7}\2\2\u013dV\3\2\2\2\u013e\u013f\7\177") - buf.write("\2\2\u013fX\3\2\2\2\u0140\u0141\7<\2\2\u0141Z\3\2\2\2") - buf.write("\u0142\u0143\7c\2\2\u0143\u0144\7d\2\2\u0144\u0145\7u") - buf.write("\2\2\u0145\u0146\7v\2\2\u0146\u0147\7t\2\2\u0147\u0148") - buf.write("\7c\2\2\u0148\u0149\7e\2\2\u0149\u014a\7v\2\2\u014a\\") - buf.write("\3\2\2\2\u014b\u014c\7e\2\2\u014c\u014d\7q\2\2\u014d\u014e") - buf.write("\7p\2\2\u014e\u014f\7u\2\2\u014f\u0150\7v\2\2\u0150\u0151") - buf.write("\7t\2\2\u0151\u0152\7w\2\2\u0152\u0153\7e\2\2\u0153\u0154") - buf.write("\7v\2\2\u0154\u0155\7q\2\2\u0155\u0156\7t\2\2\u0156^\3") - buf.write("\2\2\2\u0157\u0158\7]\2\2\u0158`\3\2\2\2\u0159\u015a\7") - buf.write("_\2\2\u015ab\3\2\2\2\u015b\u015c\7A\2\2\u015cd\3\2\2\2") - buf.write("\u015d\u015e\7\60\2\2\u015ef\3\2\2\2\u015f\u0160\7#\2") - buf.write("\2\u0160h\3\2\2\2\u0161\u0162\7\u0080\2\2\u0162j\3\2\2") - buf.write("\2\u0163\u0164\7\60\2\2\u0164\u0165\7\60\2\2\u0165l\3") - buf.write("\2\2\2\u0166\u0167\7\60\2\2\u0167\u0168\7\60\2\2\u0168") - buf.write("\u0169\7\60\2\2\u0169n\3\2\2\2\u016a\u016b\7k\2\2\u016b") - buf.write("\u016c\7u\2\2\u016cp\3\2\2\2\u016d\u016e\7k\2\2\u016e") - buf.write("\u016f\7u\2\2\u016f\u0170\7p\2\2\u0170\u0171\7)\2\2\u0171") - buf.write("\u0172\7v\2\2\u0172r\3\2\2\2\u0173\u0174\7?\2\2\u0174") - buf.write("\u0175\7?\2\2\u0175t\3\2\2\2\u0176\u0177\7#\2\2\u0177") - buf.write("\u0178\7?\2\2\u0178v\3\2\2\2\u0179\u017a\7>\2\2\u017a") - buf.write("\u017b\7?\2\2\u017bx\3\2\2\2\u017c\u017d\7@\2\2\u017d") - buf.write("\u017e\7?\2\2\u017ez\3\2\2\2\u017f\u0180\7p\2\2\u0180") - buf.write("\u0181\7q\2\2\u0181\u0182\7v\2\2\u0182|\3\2\2\2\u0183") - buf.write("\u0184\7c\2\2\u0184\u0185\7p\2\2\u0185\u0186\7f\2\2\u0186") - buf.write("~\3\2\2\2\u0187\u0188\7q\2\2\u0188\u0189\7t\2\2\u0189") - buf.write("\u0080\3\2\2\2\u018a\u018b\7n\2\2\u018b\u018c\7c\2\2\u018c") - buf.write("\u018d\7o\2\2\u018d\u018e\7d\2\2\u018e\u018f\7f\2\2\u018f") - buf.write("\u0190\7c\2\2\u0190\u0082\3\2\2\2\u0191\u0192\7/\2\2\u0192") - buf.write("\u0193\7@\2\2\u0193\u0084\3\2\2\2\u0194\u0195\7v\2\2\u0195") - buf.write("\u0196\7t\2\2\u0196\u0197\7w\2\2\u0197\u0198\7g\2\2\u0198") - buf.write("\u0086\3\2\2\2\u0199\u019a\7h\2\2\u019a\u019b\7c\2\2\u019b") - buf.write("\u019c\7n\2\2\u019c\u019d\7u\2\2\u019d\u019e\7g\2\2\u019e") - buf.write("\u0088\3\2\2\2\u019f\u01a0\7p\2\2\u01a0\u01a1\7w\2\2\u01a1") - buf.write("\u01a2\7n\2\2\u01a2\u01a3\7n\2\2\u01a3\u008a\3\2\2\2\u01a4") - buf.write("\u01a5\7u\2\2\u01a5\u01a6\7w\2\2\u01a6\u01a7\7r\2\2\u01a7") - buf.write("\u01a8\7g\2\2\u01a8\u01a9\7t\2\2\u01a9\u008c\3\2\2\2\u01aa") - buf.write("\u01ac\5\u0097L\2\u01ab\u01aa\3\2\2\2\u01ac\u01ad\3\2") - buf.write("\2\2\u01ad\u01ab\3\2\2\2\u01ad\u01ae\3\2\2\2\u01ae\u008e") - buf.write("\3\2\2\2\u01af\u01b1\5\u0097L\2\u01b0\u01af\3\2\2\2\u01b1") - buf.write("\u01b2\3\2\2\2\u01b2\u01b0\3\2\2\2\u01b2\u01b3\3\2\2\2") - buf.write("\u01b3\u01b4\3\2\2\2\u01b4\u01b6\7\60\2\2\u01b5\u01b7") - buf.write("\5\u0097L\2\u01b6\u01b5\3\2\2\2\u01b7\u01b8\3\2\2\2\u01b8") - buf.write("\u01b6\3\2\2\2\u01b8\u01b9\3\2\2\2\u01b9\u01c3\3\2\2\2") - buf.write("\u01ba\u01bc\7g\2\2\u01bb\u01bd\7/\2\2\u01bc\u01bb\3\2") - buf.write("\2\2\u01bc\u01bd\3\2\2\2\u01bd\u01bf\3\2\2\2\u01be\u01c0") - buf.write("\5\u0097L\2\u01bf\u01be\3\2\2\2\u01c0\u01c1\3\2\2\2\u01c1") - buf.write("\u01bf\3\2\2\2\u01c1\u01c2\3\2\2\2\u01c2\u01c4\3\2\2\2") - buf.write("\u01c3\u01ba\3\2\2\2\u01c3\u01c4\3\2\2\2\u01c4\u0090\3") - buf.write("\2\2\2\u01c5\u01cb\7)\2\2\u01c6\u01ca\n\2\2\2\u01c7\u01c8") - buf.write("\7^\2\2\u01c8\u01ca\t\3\2\2\u01c9\u01c6\3\2\2\2\u01c9") - buf.write("\u01c7\3\2\2\2\u01ca\u01cd\3\2\2\2\u01cb\u01c9\3\2\2\2") - buf.write("\u01cb\u01cc\3\2\2\2\u01cc\u01ce\3\2\2\2\u01cd\u01cb\3") - buf.write("\2\2\2\u01ce\u01cf\7)\2\2\u01cf\u0092\3\2\2\2\u01d0\u01d6") - buf.write("\7$\2\2\u01d1\u01d5\n\4\2\2\u01d2\u01d3\7^\2\2\u01d3\u01d5") - buf.write("\t\5\2\2\u01d4\u01d1\3\2\2\2\u01d4\u01d2\3\2\2\2\u01d5") - buf.write("\u01d8\3\2\2\2\u01d6\u01d4\3\2\2\2\u01d6\u01d7\3\2\2\2") - buf.write("\u01d7\u01d9\3\2\2\2\u01d8\u01d6\3\2\2\2\u01d9\u01da\7") - buf.write("$\2\2\u01da\u0094\3\2\2\2\u01db\u01df\5\u0099M\2\u01dc") - buf.write("\u01de\5\u009bN\2\u01dd\u01dc\3\2\2\2\u01de\u01e1\3\2") - buf.write("\2\2\u01df\u01dd\3\2\2\2\u01df\u01e0\3\2\2\2\u01e0\u0096") - buf.write("\3\2\2\2\u01e1\u01df\3\2\2\2\u01e2\u01e3\t\6\2\2\u01e3") - buf.write("\u0098\3\2\2\2\u01e4\u01e5\t\7\2\2\u01e5\u009a\3\2\2\2") - buf.write("\u01e6\u01ea\5\u0099M\2\u01e7\u01ea\5\u0097L\2\u01e8\u01ea") - buf.write("\t\b\2\2\u01e9\u01e6\3\2\2\2\u01e9\u01e7\3\2\2\2\u01e9") - buf.write("\u01e8\3\2\2\2\u01ea\u009c\3\2\2\2\u01eb\u01ed\t\t\2\2") - buf.write("\u01ec\u01eb\3\2\2\2\u01ed\u01ee\3\2\2\2\u01ee\u01ec\3") - buf.write("\2\2\2\u01ee\u01ef\3\2\2\2\u01ef\u01f0\3\2\2\2\u01f0\u01f1") - buf.write("\bO\2\2\u01f1\u009e\3\2\2\2\u01f2\u01f3\13\2\2\2\u01f3") - buf.write("\u00a0\3\2\2\2\20\2\u01ad\u01b2\u01b8\u01bc\u01c1\u01c3") - buf.write("\u01c9\u01cb\u01d4\u01d6\u01df\u01e9\u01ee\3\b\2\2") + buf.write("H\u01c4\nH\3I\3I\3I\3I\5I\u01ca\nI\3I\3I\3J\3J\3J\3J\7") + buf.write("J\u01d2\nJ\fJ\16J\u01d5\13J\3J\3J\3K\3K\7K\u01db\nK\f") + buf.write("K\16K\u01de\13K\3L\3L\3M\3M\3N\3N\3N\5N\u01e7\nN\3O\6") + buf.write("O\u01ea\nO\rO\16O\u01eb\3O\3O\3P\3P\2\2Q\3\3\5\4\7\5\t") + buf.write("\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20") + buf.write("\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65") + buf.write("\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60") + buf.write("_\61a\62c\63e\64g\65i\66k\67m8o9q:s;u{?}@\177A\u0081") + buf.write("B\u0083C\u0085D\u0087E\u0089F\u008bG\u008dH\u008fI\u0091") + buf.write("J\u0093K\u0095L\u0097\2\u0099\2\u009b\2\u009dM\u009fN") + buf.write("\3\2\n\4\2))^^\6\2))^^ppvv\4\2$$^^\6\2$$^^ppvv\3\2\62") + buf.write(";\5\2C\\aac|\3\2))\5\2\13\f\17\17\"\"\2\u01fa\2\3\3\2") + buf.write("\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2") + buf.write("\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2") + buf.write("\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35") + buf.write("\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2") + buf.write("\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2") + buf.write("\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2") + buf.write("\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2") + buf.write("\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2") + buf.write("\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3") + buf.write("\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_") + buf.write("\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2") + buf.write("i\3\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2") + buf.write("\2s\3\2\2\2\2u\3\2\2\2\2w\3\2\2\2\2y\3\2\2\2\2{\3\2\2") + buf.write("\2\2}\3\2\2\2\2\177\3\2\2\2\2\u0081\3\2\2\2\2\u0083\3") + buf.write("\2\2\2\2\u0085\3\2\2\2\2\u0087\3\2\2\2\2\u0089\3\2\2\2") + buf.write("\2\u008b\3\2\2\2\2\u008d\3\2\2\2\2\u008f\3\2\2\2\2\u0091") + buf.write("\3\2\2\2\2\u0093\3\2\2\2\2\u0095\3\2\2\2\2\u009d\3\2\2") + buf.write("\2\2\u009f\3\2\2\2\3\u00a1\3\2\2\2\5\u00a3\3\2\2\2\7\u00a7") + buf.write("\3\2\2\2\t\u00ac\3\2\2\2\13\u00b3\3\2\2\2\r\u00b6\3\2") + buf.write("\2\2\17\u00bb\3\2\2\2\21\u00c1\3\2\2\2\23\u00c3\3\2\2") + buf.write("\2\25\u00c5\3\2\2\2\27\u00c7\3\2\2\2\31\u00c9\3\2\2\2") + buf.write("\33\u00cb\3\2\2\2\35\u00cd\3\2\2\2\37\u00cf\3\2\2\2!\u00d2") + buf.write("\3\2\2\2#\u00d5\3\2\2\2%\u00d7\3\2\2\2\'\u00d9\3\2\2\2") + buf.write(")\u00db\3\2\2\2+\u00de\3\2\2\2-\u00e4\3\2\2\2/\u00ed\3") + buf.write("\2\2\2\61\u00f4\3\2\2\2\63\u00f6\3\2\2\2\65\u00f9\3\2") + buf.write("\2\2\67\u00fc\3\2\2\29\u0101\3\2\2\2;\u0106\3\2\2\2=\u010c") + buf.write("\3\2\2\2?\u0112\3\2\2\2A\u0116\3\2\2\2C\u0119\3\2\2\2") + buf.write("E\u011e\3\2\2\2G\u0123\3\2\2\2I\u0125\3\2\2\2K\u0127\3") + buf.write("\2\2\2M\u012b\3\2\2\2O\u0132\3\2\2\2Q\u0138\3\2\2\2S\u013a") + buf.write("\3\2\2\2U\u013c\3\2\2\2W\u013e\3\2\2\2Y\u0140\3\2\2\2") + buf.write("[\u0142\3\2\2\2]\u014b\3\2\2\2_\u0157\3\2\2\2a\u0159\3") + buf.write("\2\2\2c\u015b\3\2\2\2e\u015d\3\2\2\2g\u015f\3\2\2\2i\u0161") + buf.write("\3\2\2\2k\u0163\3\2\2\2m\u0166\3\2\2\2o\u016a\3\2\2\2") + buf.write("q\u016d\3\2\2\2s\u0173\3\2\2\2u\u0176\3\2\2\2w\u0179\3") + buf.write("\2\2\2y\u017c\3\2\2\2{\u017f\3\2\2\2}\u0183\3\2\2\2\177") + buf.write("\u0187\3\2\2\2\u0081\u018a\3\2\2\2\u0083\u0191\3\2\2\2") + buf.write("\u0085\u0194\3\2\2\2\u0087\u0199\3\2\2\2\u0089\u019f\3") + buf.write("\2\2\2\u008b\u01a4\3\2\2\2\u008d\u01ab\3\2\2\2\u008f\u01b0") + buf.write("\3\2\2\2\u0091\u01c5\3\2\2\2\u0093\u01cd\3\2\2\2\u0095") + buf.write("\u01d8\3\2\2\2\u0097\u01df\3\2\2\2\u0099\u01e1\3\2\2\2") + buf.write("\u009b\u01e6\3\2\2\2\u009d\u01e9\3\2\2\2\u009f\u01ef\3") + buf.write("\2\2\2\u00a1\u00a2\7=\2\2\u00a2\4\3\2\2\2\u00a3\u00a4") + buf.write("\7w\2\2\u00a4\u00a5\7u\2\2\u00a5\u00a6\7g\2\2\u00a6\6") + buf.write("\3\2\2\2\u00a7\u00a8\7q\2\2\u00a8\u00a9\7p\2\2\u00a9\u00aa") + buf.write("\7n\2\2\u00aa\u00ab\7{\2\2\u00ab\b\3\2\2\2\u00ac\u00ad") + buf.write("\7j\2\2\u00ad\u00ae\7k\2\2\u00ae\u00af\7f\2\2\u00af\u00b0") + buf.write("\7k\2\2\u00b0\u00b1\7p\2\2\u00b1\u00b2\7i\2\2\u00b2\n") + buf.write("\3\2\2\2\u00b3\u00b4\7c\2\2\u00b4\u00b5\7u\2\2\u00b5\f") + buf.write("\3\2\2\2\u00b6\u00b7\7u\2\2\u00b7\u00b8\7m\2\2\u00b8\u00b9") + buf.write("\7k\2\2\u00b9\u00ba\7r\2\2\u00ba\16\3\2\2\2\u00bb\u00bc") + buf.write("\7r\2\2\u00bc\u00bd\7t\2\2\u00bd\u00be\7k\2\2\u00be\u00bf") + buf.write("\7p\2\2\u00bf\u00c0\7v\2\2\u00c0\20\3\2\2\2\u00c1\u00c2") + buf.write("\7?\2\2\u00c2\22\3\2\2\2\u00c3\u00c4\7`\2\2\u00c4\24\3") + buf.write("\2\2\2\u00c5\u00c6\7,\2\2\u00c6\26\3\2\2\2\u00c7\u00c8") + buf.write("\7\61\2\2\u00c8\30\3\2\2\2\u00c9\u00ca\7\'\2\2\u00ca\32") + buf.write("\3\2\2\2\u00cb\u00cc\7-\2\2\u00cc\34\3\2\2\2\u00cd\u00ce") + buf.write("\7/\2\2\u00ce\36\3\2\2\2\u00cf\u00d0\7>\2\2\u00d0\u00d1") + buf.write("\7>\2\2\u00d1 \3\2\2\2\u00d2\u00d3\7@\2\2\u00d3\u00d4") + buf.write("\7@\2\2\u00d4\"\3\2\2\2\u00d5\u00d6\7(\2\2\u00d6$\3\2") + buf.write("\2\2\u00d7\u00d8\7&\2\2\u00d8&\3\2\2\2\u00d9\u00da\7~") + buf.write("\2\2\u00da(\3\2\2\2\u00db\u00dc\7A\2\2\u00dc\u00dd\7A") + buf.write("\2\2\u00dd*\3\2\2\2\u00de\u00df\7d\2\2\u00df\u00e0\7t") + buf.write("\2\2\u00e0\u00e1\7g\2\2\u00e1\u00e2\7c\2\2\u00e2\u00e3") + buf.write("\7m\2\2\u00e3,\3\2\2\2\u00e4\u00e5\7e\2\2\u00e5\u00e6") + buf.write("\7q\2\2\u00e6\u00e7\7p\2\2\u00e7\u00e8\7v\2\2\u00e8\u00e9") + buf.write("\7k\2\2\u00e9\u00ea\7p\2\2\u00ea\u00eb\7w\2\2\u00eb\u00ec") + buf.write("\7g\2\2\u00ec.\3\2\2\2\u00ed\u00ee\7t\2\2\u00ee\u00ef") + buf.write("\7g\2\2\u00ef\u00f0\7v\2\2\u00f0\u00f1\7w\2\2\u00f1\u00f2") + buf.write("\7t\2\2\u00f2\u00f3\7p\2\2\u00f3\60\3\2\2\2\u00f4\u00f5") + buf.write("\7.\2\2\u00f5\62\3\2\2\2\u00f6\u00f7\7k\2\2\u00f7\u00f8") + buf.write("\7h\2\2\u00f8\64\3\2\2\2\u00f9\u00fa\7f\2\2\u00fa\u00fb") + buf.write("\7q\2\2\u00fb\66\3\2\2\2\u00fc\u00fd\7g\2\2\u00fd\u00fe") + buf.write("\7n\2\2\u00fe\u00ff\7k\2\2\u00ff\u0100\7h\2\2\u01008\3") + buf.write("\2\2\2\u0101\u0102\7g\2\2\u0102\u0103\7n\2\2\u0103\u0104") + buf.write("\7u\2\2\u0104\u0105\7g\2\2\u0105:\3\2\2\2\u0106\u0107") + buf.write("\7y\2\2\u0107\u0108\7j\2\2\u0108\u0109\7k\2\2\u0109\u010a") + buf.write("\7n\2\2\u010a\u010b\7g\2\2\u010b<\3\2\2\2\u010c\u010d") + buf.write("\7w\2\2\u010d\u010e\7p\2\2\u010e\u010f\7v\2\2\u010f\u0110") + buf.write("\7k\2\2\u0110\u0111\7n\2\2\u0111>\3\2\2\2\u0112\u0113") + buf.write("\7h\2\2\u0113\u0114\7q\2\2\u0114\u0115\7t\2\2\u0115@\3") + buf.write("\2\2\2\u0116\u0117\7k\2\2\u0117\u0118\7p\2\2\u0118B\3") + buf.write("\2\2\2\u0119\u011a\7u\2\2\u011a\u011b\7v\2\2\u011b\u011c") + buf.write("\7g\2\2\u011c\u011d\7r\2\2\u011dD\3\2\2\2\u011e\u011f") + buf.write("\7h\2\2\u011f\u0120\7w\2\2\u0120\u0121\7p\2\2\u0121\u0122") + buf.write("\7e\2\2\u0122F\3\2\2\2\u0123\u0124\7>\2\2\u0124H\3\2\2") + buf.write("\2\u0125\u0126\7@\2\2\u0126J\3\2\2\2\u0127\u0128\7f\2") + buf.write("\2\u0128\u0129\7g\2\2\u0129\u012a\7h\2\2\u012aL\3\2\2") + buf.write("\2\u012b\u012c\7g\2\2\u012c\u012d\7z\2\2\u012d\u012e\7") + buf.write("v\2\2\u012e\u012f\7g\2\2\u012f\u0130\7t\2\2\u0130\u0131") + buf.write("\7p\2\2\u0131N\3\2\2\2\u0132\u0133\7e\2\2\u0133\u0134") + buf.write("\7n\2\2\u0134\u0135\7c\2\2\u0135\u0136\7u\2\2\u0136\u0137") + buf.write("\7u\2\2\u0137P\3\2\2\2\u0138\u0139\7*\2\2\u0139R\3\2\2") + buf.write("\2\u013a\u013b\7+\2\2\u013bT\3\2\2\2\u013c\u013d\7}\2") + buf.write("\2\u013dV\3\2\2\2\u013e\u013f\7\177\2\2\u013fX\3\2\2\2") + buf.write("\u0140\u0141\7<\2\2\u0141Z\3\2\2\2\u0142\u0143\7c\2\2") + buf.write("\u0143\u0144\7d\2\2\u0144\u0145\7u\2\2\u0145\u0146\7v") + buf.write("\2\2\u0146\u0147\7t\2\2\u0147\u0148\7c\2\2\u0148\u0149") + buf.write("\7e\2\2\u0149\u014a\7v\2\2\u014a\\\3\2\2\2\u014b\u014c") + buf.write("\7e\2\2\u014c\u014d\7q\2\2\u014d\u014e\7p\2\2\u014e\u014f") + buf.write("\7u\2\2\u014f\u0150\7v\2\2\u0150\u0151\7t\2\2\u0151\u0152") + buf.write("\7w\2\2\u0152\u0153\7e\2\2\u0153\u0154\7v\2\2\u0154\u0155") + buf.write("\7q\2\2\u0155\u0156\7t\2\2\u0156^\3\2\2\2\u0157\u0158") + buf.write("\7]\2\2\u0158`\3\2\2\2\u0159\u015a\7_\2\2\u015ab\3\2\2") + buf.write("\2\u015b\u015c\7A\2\2\u015cd\3\2\2\2\u015d\u015e\7\60") + buf.write("\2\2\u015ef\3\2\2\2\u015f\u0160\7#\2\2\u0160h\3\2\2\2") + buf.write("\u0161\u0162\7\u0080\2\2\u0162j\3\2\2\2\u0163\u0164\7") + buf.write("\60\2\2\u0164\u0165\7\60\2\2\u0165l\3\2\2\2\u0166\u0167") + buf.write("\7\60\2\2\u0167\u0168\7\60\2\2\u0168\u0169\7\60\2\2\u0169") + buf.write("n\3\2\2\2\u016a\u016b\7k\2\2\u016b\u016c\7u\2\2\u016c") + buf.write("p\3\2\2\2\u016d\u016e\7k\2\2\u016e\u016f\7u\2\2\u016f") + buf.write("\u0170\7p\2\2\u0170\u0171\7)\2\2\u0171\u0172\7v\2\2\u0172") + buf.write("r\3\2\2\2\u0173\u0174\7?\2\2\u0174\u0175\7?\2\2\u0175") + buf.write("t\3\2\2\2\u0176\u0177\7#\2\2\u0177\u0178\7?\2\2\u0178") + buf.write("v\3\2\2\2\u0179\u017a\7>\2\2\u017a\u017b\7?\2\2\u017b") + buf.write("x\3\2\2\2\u017c\u017d\7@\2\2\u017d\u017e\7?\2\2\u017e") + buf.write("z\3\2\2\2\u017f\u0180\7p\2\2\u0180\u0181\7q\2\2\u0181") + buf.write("\u0182\7v\2\2\u0182|\3\2\2\2\u0183\u0184\7c\2\2\u0184") + buf.write("\u0185\7p\2\2\u0185\u0186\7f\2\2\u0186~\3\2\2\2\u0187") + buf.write("\u0188\7q\2\2\u0188\u0189\7t\2\2\u0189\u0080\3\2\2\2\u018a") + buf.write("\u018b\7n\2\2\u018b\u018c\7c\2\2\u018c\u018d\7o\2\2\u018d") + buf.write("\u018e\7d\2\2\u018e\u018f\7f\2\2\u018f\u0190\7c\2\2\u0190") + buf.write("\u0082\3\2\2\2\u0191\u0192\7/\2\2\u0192\u0193\7@\2\2\u0193") + buf.write("\u0084\3\2\2\2\u0194\u0195\7v\2\2\u0195\u0196\7t\2\2\u0196") + buf.write("\u0197\7w\2\2\u0197\u0198\7g\2\2\u0198\u0086\3\2\2\2\u0199") + buf.write("\u019a\7h\2\2\u019a\u019b\7c\2\2\u019b\u019c\7n\2\2\u019c") + buf.write("\u019d\7u\2\2\u019d\u019e\7g\2\2\u019e\u0088\3\2\2\2\u019f") + buf.write("\u01a0\7p\2\2\u01a0\u01a1\7w\2\2\u01a1\u01a2\7n\2\2\u01a2") + buf.write("\u01a3\7n\2\2\u01a3\u008a\3\2\2\2\u01a4\u01a5\7u\2\2\u01a5") + buf.write("\u01a6\7w\2\2\u01a6\u01a7\7r\2\2\u01a7\u01a8\7g\2\2\u01a8") + buf.write("\u01a9\7t\2\2\u01a9\u008c\3\2\2\2\u01aa\u01ac\5\u0097") + buf.write("L\2\u01ab\u01aa\3\2\2\2\u01ac\u01ad\3\2\2\2\u01ad\u01ab") + buf.write("\3\2\2\2\u01ad\u01ae\3\2\2\2\u01ae\u008e\3\2\2\2\u01af") + buf.write("\u01b1\5\u0097L\2\u01b0\u01af\3\2\2\2\u01b1\u01b2\3\2") + buf.write("\2\2\u01b2\u01b0\3\2\2\2\u01b2\u01b3\3\2\2\2\u01b3\u01b4") + buf.write("\3\2\2\2\u01b4\u01b6\7\60\2\2\u01b5\u01b7\5\u0097L\2\u01b6") + buf.write("\u01b5\3\2\2\2\u01b7\u01b8\3\2\2\2\u01b8\u01b6\3\2\2\2") + buf.write("\u01b8\u01b9\3\2\2\2\u01b9\u01c3\3\2\2\2\u01ba\u01bc\7") + buf.write("g\2\2\u01bb\u01bd\7/\2\2\u01bc\u01bb\3\2\2\2\u01bc\u01bd") + buf.write("\3\2\2\2\u01bd\u01bf\3\2\2\2\u01be\u01c0\5\u0097L\2\u01bf") + buf.write("\u01be\3\2\2\2\u01c0\u01c1\3\2\2\2\u01c1\u01bf\3\2\2\2") + buf.write("\u01c1\u01c2\3\2\2\2\u01c2\u01c4\3\2\2\2\u01c3\u01ba\3") + buf.write("\2\2\2\u01c3\u01c4\3\2\2\2\u01c4\u0090\3\2\2\2\u01c5\u01c9") + buf.write("\7)\2\2\u01c6\u01ca\n\2\2\2\u01c7\u01c8\7^\2\2\u01c8\u01ca") + buf.write("\t\3\2\2\u01c9\u01c6\3\2\2\2\u01c9\u01c7\3\2\2\2\u01ca") + buf.write("\u01cb\3\2\2\2\u01cb\u01cc\7)\2\2\u01cc\u0092\3\2\2\2") + buf.write("\u01cd\u01d3\7$\2\2\u01ce\u01d2\n\4\2\2\u01cf\u01d0\7") + buf.write("^\2\2\u01d0\u01d2\t\5\2\2\u01d1\u01ce\3\2\2\2\u01d1\u01cf") + buf.write("\3\2\2\2\u01d2\u01d5\3\2\2\2\u01d3\u01d1\3\2\2\2\u01d3") + buf.write("\u01d4\3\2\2\2\u01d4\u01d6\3\2\2\2\u01d5\u01d3\3\2\2\2") + buf.write("\u01d6\u01d7\7$\2\2\u01d7\u0094\3\2\2\2\u01d8\u01dc\5") + buf.write("\u0099M\2\u01d9\u01db\5\u009bN\2\u01da\u01d9\3\2\2\2\u01db") + buf.write("\u01de\3\2\2\2\u01dc\u01da\3\2\2\2\u01dc\u01dd\3\2\2\2") + buf.write("\u01dd\u0096\3\2\2\2\u01de\u01dc\3\2\2\2\u01df\u01e0\t") + buf.write("\6\2\2\u01e0\u0098\3\2\2\2\u01e1\u01e2\t\7\2\2\u01e2\u009a") + buf.write("\3\2\2\2\u01e3\u01e7\5\u0099M\2\u01e4\u01e7\5\u0097L\2") + buf.write("\u01e5\u01e7\t\b\2\2\u01e6\u01e3\3\2\2\2\u01e6\u01e4\3") + buf.write("\2\2\2\u01e6\u01e5\3\2\2\2\u01e7\u009c\3\2\2\2\u01e8\u01ea") + buf.write("\t\t\2\2\u01e9\u01e8\3\2\2\2\u01ea\u01eb\3\2\2\2\u01eb") + buf.write("\u01e9\3\2\2\2\u01eb\u01ec\3\2\2\2\u01ec\u01ed\3\2\2\2") + buf.write("\u01ed\u01ee\bO\2\2\u01ee\u009e\3\2\2\2\u01ef\u01f0\13") + buf.write("\2\2\2\u01f0\u00a0\3\2\2\2\17\2\u01ad\u01b2\u01b8\u01bc") + buf.write("\u01c1\u01c3\u01c9\u01d1\u01d3\u01dc\u01e6\u01eb\3\b\2") + buf.write("\2") return buf.getvalue() diff --git a/test/bad/strings/char01.err b/test/bad/strings/char01.err new file mode 100644 index 00000000..63261bf3 --- /dev/null +++ b/test/bad/strings/char01.err @@ -0,0 +1 @@ +Syntax error. \ No newline at end of file diff --git a/test/bad/strings/char01.px b/test/bad/strings/char01.px new file mode 100644 index 00000000..838f2f48 --- /dev/null +++ b/test/bad/strings/char01.px @@ -0,0 +1,2 @@ + +'' diff --git a/test/bad/strings/char02.err b/test/bad/strings/char02.err new file mode 100644 index 00000000..63261bf3 --- /dev/null +++ b/test/bad/strings/char02.err @@ -0,0 +1 @@ +Syntax error. \ No newline at end of file diff --git a/test/bad/strings/char02.px b/test/bad/strings/char02.px new file mode 100644 index 00000000..56eea696 --- /dev/null +++ b/test/bad/strings/char02.px @@ -0,0 +1,2 @@ + +'abc' From 05a9ee6da928c3fb57339d093d933d4f890f7600 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sat, 7 Dec 2019 21:29:33 +0100 Subject: [PATCH 085/100] Fix line continuations A closing parenthesis or bracket can be in a new line without additional indent. --- src/indentation.py | 7 ++++--- test/good/arrays/line01.out | 1 + test/good/arrays/line01.px | 10 ++++++++++ test/good/functions/line01.out | 1 + test/good/functions/line01.px | 11 +++++++++++ 5 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 test/good/arrays/line01.out create mode 100644 test/good/arrays/line01.px create mode 100644 test/good/functions/line01.out create mode 100644 test/good/functions/line01.px diff --git a/src/indentation.py b/src/indentation.py index 5d8733f8..e0c9519e 100644 --- a/src/indentation.py +++ b/src/indentation.py @@ -45,9 +45,10 @@ def transform_indented_code(code): new_block = False elif indents[-1].startswith(indent): - # If the line isn't indented more than the current block, put a semicolon at the end of the previous line. + # If the line isn't indented more than the current block and doesn't start with a closing parenthesis or bracket, + # put a semicolon at the end of the previous line. # Otherwise, assume it is continuation of the previous expression. - if j is not None: + if j is not None and not re.match(r'\s*[)\]]', line): lines[j] += ';' # If the line is indented less than the current block, close the previous blocks. @@ -55,7 +56,7 @@ def transform_indented_code(code): if indent == indents[-1]: break elif indents[-1].startswith(indent): - # Add a closing bracket to the last non-empty line. + # Add a closing brace to the last non-empty line. lines[j] += '}' indents.pop() else: diff --git a/test/good/arrays/line01.out b/test/good/arrays/line01.out new file mode 100644 index 00000000..f7d02205 --- /dev/null +++ b/test/good/arrays/line01.out @@ -0,0 +1 @@ +[2, 3, 5] diff --git a/test/good/arrays/line01.px b/test/good/arrays/line01.px new file mode 100644 index 00000000..663978b8 --- /dev/null +++ b/test/good/arrays/line01.px @@ -0,0 +1,10 @@ + +array = [ + 2, + 3, +] +array += [ + 5 +] +print array + diff --git a/test/good/functions/line01.out b/test/good/functions/line01.out new file mode 100644 index 00000000..037e22ec --- /dev/null +++ b/test/good/functions/line01.out @@ -0,0 +1 @@ +3 abc diff --git a/test/good/functions/line01.px b/test/good/functions/line01.px new file mode 100644 index 00000000..ff2040f1 --- /dev/null +++ b/test/good/functions/line01.px @@ -0,0 +1,11 @@ + +func f( + Int x, + String s, +) def + print x, s + +f( + 3, + "abc", +) From 15f078ce9eeeff2b99da17d9f91331445b47d3bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sat, 7 Dec 2019 21:39:03 +0100 Subject: [PATCH 086/100] Unify indentation error and syntax error --- src/errors.py | 1 - src/indentation.py | 4 ++-- test/bad/basic/indent01.err | 2 +- test/bad/basic/indent02.err | 2 +- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/errors.py b/src/errors.py index 75de0b86..153693da 100644 --- a/src/errors.py +++ b/src/errors.py @@ -10,7 +10,6 @@ def syntaxError(self, recognizer, offendingSymbol, line, column, msg, e): class PyxellError(Exception): - InvalidIndentation = lambda: f"Indentation error" InvalidSyntax = lambda: f"Syntax error" AbstractClass = lambda t: f"Cannot instantiate an abstract class `{t.show()}`" diff --git a/src/indentation.py b/src/indentation.py index e0c9519e..13df28b3 100644 --- a/src/indentation.py +++ b/src/indentation.py @@ -40,7 +40,7 @@ def transform_indented_code(code): if new_block: if not (indent.startswith(indents[-1]) and len(indent) > len(indents[-1])): # New block must be indented more than the previous one. - raise PyxellError(PyxellError.InvalidIndentation(), i+1) + raise PyxellError(PyxellError.InvalidSyntax(), i+1, len(indent)+1) indents.append(indent) new_block = False @@ -61,7 +61,7 @@ def transform_indented_code(code): indents.pop() else: # Indentation must match one of the previous blocks. - raise PyxellError(PyxellError.InvalidIndentation(), i+1) + raise PyxellError(PyxellError.InvalidSyntax(), i+1, len(indent)+1) if re.search(r'[^\w\'](do|def)\s*$', line): # If the line ends with a `do` or `def` keyword, start a new block. diff --git a/test/bad/basic/indent01.err b/test/bad/basic/indent01.err index d7e8ba54..63261bf3 100644 --- a/test/bad/basic/indent01.err +++ b/test/bad/basic/indent01.err @@ -1 +1 @@ -Indentation error. \ No newline at end of file +Syntax error. \ No newline at end of file diff --git a/test/bad/basic/indent02.err b/test/bad/basic/indent02.err index d7e8ba54..63261bf3 100644 --- a/test/bad/basic/indent02.err +++ b/test/bad/basic/indent02.err @@ -1 +1 @@ -Indentation error. \ No newline at end of file +Syntax error. \ No newline at end of file From 6233293c254d190c355dcd1eab6d93480036ee44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sun, 8 Dec 2019 12:14:47 +0100 Subject: [PATCH 087/100] Display only failed tests by default --- test.py | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/test.py b/test.py index 3583186d..74aad603 100644 --- a/test.py +++ b/test.py @@ -28,10 +28,12 @@ parser = argparse.ArgumentParser(description="Test Pyxell compiler.") parser.add_argument('pattern', nargs='?', default='', help="file path pattern (relative to test folder)") -parser.add_argument('-c', '--thread-count', dest='thread_count', type=int, default=8, +parser.add_argument('-c', '--thread-count', dest='thread_count', type=int, default=16, help="number of threads to use") parser.add_argument('-t', '--target-windows-gnu', action='store_true', help="run compiler with -target x86_64-pc-windows-gnu") +parser.add_argument('-v', '--verbose', dest='verbose', action='store_true', + help="display all tests (only failed tests are displayed by default)") args = parser.parse_args() # Run tests that satisfy the pattern. @@ -59,14 +61,15 @@ def test(i, path): global ok global output_index + passed = False output = [] output.append(f"{B}> TEST {i}/{n}:{E} {path}") with open(path.replace(".px", ".tmp"), 'w') as tmpfile: try: - error_expected = Path(path.replace(".px", ".err")).read_text() + expected_error = Path(path.replace(".px", ".err")).read_text() except FileNotFoundError: - error_expected = None + expected_error = None error = False @@ -75,12 +78,12 @@ def test(i, path): compile(path, params) except PyxellError as e: error_message = str(e) - if error_expected: - if error_message.strip().endswith(error_expected): + if expected_error: + if error_message.strip().endswith(expected_error): output.append(f"{G}{error_message}{E}") - ok += 1 + passed = True else: - output.append(f"{R}{error_message}\n---\n> {error_expected}{E}") + output.append(f"{R}{error_message}\n---\n> {expected_error}{E}") else: output.append(f"{R}{error_message}{E}") error = True @@ -92,8 +95,8 @@ def test(i, path): error = True if not error: - if error_expected: - output.append(f"{R}Program compiled successfully, but error expected.\n---\n> {error_expected}{E}") + if expected_error: + output.append(f"{R}Program compiled successfully, but error expected.\n---\n> {expected_error}{E}") else: t1 = timer() try: @@ -112,16 +115,18 @@ def test(i, path): output.append(f"{R}WA: {e.output.decode()}{E}") else: output.append(f"{G}OK{E} ({t2-t1:.3f}s)") - ok += 1 + passed = True # Print the output of tests in the right order. - output_dict[i] = output + output_dict[i] = '\n'.join(output) if not passed or args.verbose else '' with lock: while output_index in output_dict: - print('\n'.join(output_dict[output_index])) + if output_dict[output_index]: + print(output_dict[output_index]) output_index += 1 - if not error or error_expected: + if passed: + ok += 1 os.remove(path.replace(".px", ".tmp")) with concurrent.futures.ThreadPoolExecutor(args.thread_count) as executor: From 2af15bf1b7f3cde6423e8932252ef369a6b5a904 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sun, 8 Dec 2019 18:37:56 +0100 Subject: [PATCH 088/100] Fix assigning functions to variables --- src/compiler.py | 19 ++++++++++++++----- src/errors.py | 1 + src/types.py | 1 + test/bad/classes/method05.err | 1 + test/bad/classes/method05.px | 7 +++++++ test/bad/classes/name01.err | 1 + test/bad/classes/name01.px | 5 +++++ test/bad/classes/name02.err | 1 + test/bad/classes/name02.px | 5 +++++ test/bad/functions/name01.err | 1 + test/bad/functions/{type10.px => name01.px} | 0 test/bad/functions/name02.err | 1 + test/bad/functions/name02.px | 5 +++++ test/bad/functions/type02.px | 3 ++- test/bad/functions/type06.px | 7 ++----- test/bad/functions/type07.px | 7 ++----- test/bad/functions/type10.err | 1 - test/bad/functions/type11.err | 1 - test/bad/functions/type11.px | 6 ------ test/bad/functions/type12.err | 1 - test/bad/functions/type12.px | 6 ------ 21 files changed, 49 insertions(+), 31 deletions(-) create mode 100644 test/bad/classes/method05.err create mode 100644 test/bad/classes/method05.px create mode 100644 test/bad/classes/name01.err create mode 100644 test/bad/classes/name01.px create mode 100644 test/bad/classes/name02.err create mode 100644 test/bad/classes/name02.px create mode 100644 test/bad/functions/name01.err rename test/bad/functions/{type10.px => name01.px} (100%) create mode 100644 test/bad/functions/name02.err create mode 100644 test/bad/functions/name02.px delete mode 100644 test/bad/functions/type10.err delete mode 100644 test/bad/functions/type11.err delete mode 100644 test/bad/functions/type11.px delete mode 100644 test/bad/functions/type12.err delete mode 100644 test/bad/functions/type12.px diff --git a/src/compiler.py b/src/compiler.py index 0c153d28..cbfbc933 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -286,6 +286,9 @@ def member(self, node, obj, attr, lvalue=False): except ValueError: self.throw(node, err.NoAttribute(obj.type, attr)) + if lvalue and attr in obj.type.methods: + self.throw(node, err.NotLvalue()) + ptr = self.extract(obj, index, load=False) return ptr if lvalue else self.builder.load(ptr) @@ -341,6 +344,8 @@ def lvalue(self, node, expr, declare=None, override=False, initialize=False): self.declare(node, declare, id) elif override: self.declare(node, declare, id, redeclare=True) + elif not isinstance(self.env[id], Value) or getattr(self.env[id], 'final', False): + self.throw(node, err.IllegalRedefinition(id)) if initialize: self.initialized.add(id) @@ -356,7 +361,10 @@ def lvalue(self, node, expr, declare=None, override=False, initialize=False): self.throw(node, err.NotLvalue()) def assign(self, node, expr, value): - ptr = self.lvalue(node, expr, declare=value.type, override=expr.get('override', False), initialize=True) + type = value.type + if type.isFunc(): + type = tFunc([arg.type for arg in type.args], type.ret) + ptr = self.lvalue(node, expr, declare=type, override=expr.get('override', False), initialize=True) value = self.cast(node, value, ptr.type.pointee) self.builder.store(value, ptr) @@ -1600,6 +1608,9 @@ def _call(obj, func): if not func.type.isFunc(): self.throw(node, err.NotFunction(func.type)) + func_args = func.type.args[1:] if obj else func.type.args + func_named_args = {func_arg.name for func_arg in func_args} + args = [] pos_args = {} named_args = {} @@ -1610,6 +1621,8 @@ def _call(obj, func): if name: if name in named_args: self.throw(node, err.RepeatedArgument(name)) + if name not in func_named_args: + self.throw(node, err.UnexpectedArgument(name)) named_args[name] = expr else: if named_args: @@ -1617,8 +1630,6 @@ def _call(obj, func): pos_args[i] = expr with self.local(): - func_args = func.type.args[1:] if obj else func.type.args - type_variables = defaultdict(list) for i, func_arg in enumerate(func_args): @@ -1685,8 +1696,6 @@ def _call(obj, func): self.env[name] = type - if named_args: - self.throw(node, err.UnexpectedArgument(next(iter(named_args)))) if pos_args: self.throw(node, err.TooManyArguments(func.type)) diff --git a/src/errors.py b/src/errors.py index 153693da..8acd2c62 100644 --- a/src/errors.py +++ b/src/errors.py @@ -19,6 +19,7 @@ class PyxellError(Exception): IllegalLambda = lambda: "Lambda expression cannot be used in this context" IllegalOverride = lambda t1, t2: f"Cannot override member of type `{t1.show()}` with type `{t2.show()}`" IllegalRange = lambda: "Range expression cannot be used in this context" + IllegalRedefinition = lambda id: f"Illegal redefinition of identifier `{id}`" IllegalSuper = lambda: "Cannot use `super` here" InvalidArgumentTypes = lambda t: f"Cannot unify argument types for type variable `{t.show()}`" InvalidDeclaration = lambda t: f"Cannot declare variable of type `{t.show()}`" diff --git a/src/types.py b/src/types.py index 8099bd73..fde387bf 100644 --- a/src/types.py +++ b/src/types.py @@ -360,6 +360,7 @@ class FunctionTemplate(Value): def __init__(self, id, typevars, type, body, env): self.id = id + self.final = True # identifier cannot be redefined self.typevars = typevars self.type = type self.body = body diff --git a/test/bad/classes/method05.err b/test/bad/classes/method05.err new file mode 100644 index 00000000..815996d5 --- /dev/null +++ b/test/bad/classes/method05.err @@ -0,0 +1 @@ +Expression cannot be assigned to. \ No newline at end of file diff --git a/test/bad/classes/method05.px b/test/bad/classes/method05.px new file mode 100644 index 00000000..b6551c44 --- /dev/null +++ b/test/bad/classes/method05.px @@ -0,0 +1,7 @@ + +class Test def + func f(Int x) def + skip + +test = Test() +test.f = test.f diff --git a/test/bad/classes/name01.err b/test/bad/classes/name01.err new file mode 100644 index 00000000..9ae6549d --- /dev/null +++ b/test/bad/classes/name01.err @@ -0,0 +1 @@ +Illegal redefinition of identifier `A`. \ No newline at end of file diff --git a/test/bad/classes/name01.px b/test/bad/classes/name01.px new file mode 100644 index 00000000..857bad39 --- /dev/null +++ b/test/bad/classes/name01.px @@ -0,0 +1,5 @@ + +class A def + Int x + +A = A diff --git a/test/bad/classes/name02.err b/test/bad/classes/name02.err new file mode 100644 index 00000000..9ae6549d --- /dev/null +++ b/test/bad/classes/name02.err @@ -0,0 +1 @@ +Illegal redefinition of identifier `A`. \ No newline at end of file diff --git a/test/bad/classes/name02.px b/test/bad/classes/name02.px new file mode 100644 index 00000000..efe890f4 --- /dev/null +++ b/test/bad/classes/name02.px @@ -0,0 +1,5 @@ + +class A def + Int x + +A, A = A, A diff --git a/test/bad/functions/name01.err b/test/bad/functions/name01.err new file mode 100644 index 00000000..463d682e --- /dev/null +++ b/test/bad/functions/name01.err @@ -0,0 +1 @@ +Illegal redefinition of identifier `f`. \ No newline at end of file diff --git a/test/bad/functions/type10.px b/test/bad/functions/name01.px similarity index 100% rename from test/bad/functions/type10.px rename to test/bad/functions/name01.px diff --git a/test/bad/functions/name02.err b/test/bad/functions/name02.err new file mode 100644 index 00000000..463d682e --- /dev/null +++ b/test/bad/functions/name02.err @@ -0,0 +1 @@ +Illegal redefinition of identifier `f`. \ No newline at end of file diff --git a/test/bad/functions/name02.px b/test/bad/functions/name02.px new file mode 100644 index 00000000..0e0df604 --- /dev/null +++ b/test/bad/functions/name02.px @@ -0,0 +1,5 @@ + +func f(String x) def + skip + +f, f = f, f diff --git a/test/bad/functions/type02.px b/test/bad/functions/type02.px index 2374df2c..aaef4377 100644 --- a/test/bad/functions/type02.px +++ b/test/bad/functions/type02.px @@ -5,4 +5,5 @@ func f(String x) def func g(String x) Char def return 'g' -g = f +h = g +h = f diff --git a/test/bad/functions/type06.px b/test/bad/functions/type06.px index 9ddd3209..f202a5b9 100644 --- a/test/bad/functions/type06.px +++ b/test/bad/functions/type06.px @@ -1,9 +1,6 @@ -func f(Int x) def +func f(Int y: 0) def return -func f'(Int y: 0) def - return - -g = f' +g = f g() diff --git a/test/bad/functions/type07.px b/test/bad/functions/type07.px index 8474526f..b06479cb 100644 --- a/test/bad/functions/type07.px +++ b/test/bad/functions/type07.px @@ -1,9 +1,6 @@ -func f(Int x) def +func f(Int y: 0) def return -func f'(Int y: 0) def - return - -g = f' +g = f g(y=1) diff --git a/test/bad/functions/type10.err b/test/bad/functions/type10.err deleted file mode 100644 index d1d1ffe6..00000000 --- a/test/bad/functions/type10.err +++ /dev/null @@ -1 +0,0 @@ -Illegal redefinition of function `f`. \ No newline at end of file diff --git a/test/bad/functions/type11.err b/test/bad/functions/type11.err deleted file mode 100644 index 2a0223b7..00000000 --- a/test/bad/functions/type11.err +++ /dev/null @@ -1 +0,0 @@ -Unexpected argument `x`. \ No newline at end of file diff --git a/test/bad/functions/type11.px b/test/bad/functions/type11.px deleted file mode 100644 index eefb7181..00000000 --- a/test/bad/functions/type11.px +++ /dev/null @@ -1,6 +0,0 @@ - -func f(Int x) Int def - return x - -g = f -print g(x=9) diff --git a/test/bad/functions/type12.err b/test/bad/functions/type12.err deleted file mode 100644 index c81ce63c..00000000 --- a/test/bad/functions/type12.err +++ /dev/null @@ -1 +0,0 @@ -Too few arguments for function `Int->Void`. \ No newline at end of file diff --git a/test/bad/functions/type12.px b/test/bad/functions/type12.px deleted file mode 100644 index 314d38ee..00000000 --- a/test/bad/functions/type12.px +++ /dev/null @@ -1,6 +0,0 @@ - -func f(Int x: 0) def - print x - -g = f -g() From 9d971a729ad1ea6a139188d0cd52d1107b818320 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sun, 8 Dec 2019 20:54:01 +0100 Subject: [PATCH 089/100] Fix array comprehension There was a problem with functions inside comprehensions. --- src/compiler.py | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/src/compiler.py b/src/compiler.py index cbfbc933..2a38a041 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -30,7 +30,6 @@ class PyxellCompiler: def __init__(self): self.units = {} self._unit = None - self._keep_env = False self.builder = CustomIRBuilder() self.module = ll.Module(context=ll.Context()) self.builtins = { @@ -57,7 +56,10 @@ def run_main(self, ast): def compile(self, node): if not isinstance(node, dict): return node - return getattr(self, 'compile'+node['node'])(node) + result = getattr(self, 'compile'+node['node'])(node) + if '_eval' in node: + node['_eval'] = node['_eval']() + return result def expr(self, code, **params): return self.compile(parse_expr(code.format(**params))) @@ -90,9 +92,6 @@ def initialized(self, initialized): @contextmanager def local(self): - if self._keep_env: - yield - return env = self.env.copy() initialized = self.initialized.copy() yield @@ -107,10 +106,7 @@ def unit(self, name): self._unit = _unit @contextmanager - def no_output(self, keep_env=False): - prev_keep_env = self._keep_env - if keep_env: - self._keep_env = True + def no_output(self): dummy_module = ll.Module() dummy_func = ll.Function(dummy_module, tFunc([]).pointee, 'dummy') dummy_label = dummy_func.append_basic_block('dummy') @@ -118,8 +114,6 @@ def no_output(self, keep_env=False): self.builder.position_at_end(dummy_label) yield self.builder.position_at_end(prev_label) - if keep_env: - self._keep_env = prev_keep_env @contextmanager def block(self): @@ -1516,9 +1510,10 @@ def compileExprArrayComprehension(self, node): # A small hack to obtain type of the expression. with self.local(): - with self.no_output(keep_env=True): + with self.no_output(): + inner_stmt['_eval'] = lambda: self.compile(value).type self.compile(stmt) - type = self.compile(value).type + type = inner_stmt.pop('_eval') with self.local(): self.assign(node, array, self.array(type, [], length=vInt(4))) From c1151e0a40c3644a09420cc53b6d2aed8b6b13a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Mon, 9 Dec 2019 21:59:31 +0100 Subject: [PATCH 090/100] Display a proper error concerning closures Closures are still not implemented. --- src/compiler.py | 40 +++++++++++++++++++++++++++++----- src/errors.py | 1 + test/bad/functions/nested02.px | 4 ++-- 3 files changed, 37 insertions(+), 8 deletions(-) diff --git a/src/compiler.py b/src/compiler.py index 2a38a041..cb83a458 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -20,9 +20,10 @@ def _set_terminator(self, term): class Unit: - def __init__(self, env, initialized): - self.env = env - self.initialized = initialized + def __init__(self): + self.env = {} + self.initialized = set() + self.levels = {} class PyxellCompiler: @@ -30,6 +31,7 @@ class PyxellCompiler: def __init__(self): self.units = {} self._unit = None + self.level = 0 self.builder = CustomIRBuilder() self.module = ll.Module(context=ll.Context()) self.builtins = { @@ -42,11 +44,12 @@ def __init__(self): self.builder.position_at_end(self.main.append_basic_block('entry')) def run(self, ast, unit): - self.units[unit] = Unit({}, set()) + self.units[unit] = Unit() with self.unit(unit): if unit != 'std': self.env = self.units['std'].env.copy() self.initialized = self.units['std'].initialized.copy() + self.levels = self.units['std'].levels.copy() self.compile(ast) def run_main(self, ast): @@ -90,13 +93,27 @@ def initialized(self): def initialized(self, initialized): self._unit.initialized = initialized + @property + def levels(self): + return self._unit.levels + + @levels.setter + def levels(self, levels): + self._unit.levels = levels + @contextmanager - def local(self): + def local(self, next_level=False): env = self.env.copy() initialized = self.initialized.copy() + levels = self.levels.copy() + if next_level: + self.level += 1 yield self.env = env self.initialized = initialized + self.levels = levels + if next_level: + self.level -= 1 @contextmanager def unit(self, name): @@ -144,19 +161,28 @@ def resolve_type(self, type): def get(self, node, id, load=True): if id not in self.env: self.throw(node, err.UndeclaredIdentifier(id)) + + if id in self.levels and self.levels[id] != 0 and self.levels[id] < self.level: + self.throw(node, err.ClosureRequired(id)) + result = self.env[id] + if isinstance(result, Type) and result.isClass(): if not result.constructor: self.throw(node, err.AbstractClass(result)) result = result.constructor + if not isinstance(result, Value): self.throw(node, err.NotVariable(id)) + if id not in self.initialized: self.throw(node, err.UninitializedIdentifier(id)) + if result.isTemplate(): if result.typevars: return result result = self.function(result) + return self.builder.load(result) if load else result def extract(self, ptr, *indices, load=True): @@ -325,6 +351,7 @@ def declare(self, node, type, id, redeclare=False, initialize=False, check_only= self.env[id] = ptr if initialize: self.initialized.add(id) + self.levels[id] = self.level return ptr @@ -990,7 +1017,7 @@ def function(self, template): entry = func.append_basic_block('entry') self.builder.position_at_end(entry) - with self.local(): + with self.local(next_level=True): self.env = template.env.copy() for name, type in zip(template.typevars, real_types): @@ -1346,6 +1373,7 @@ def compileStmtFunc(self, node, class_type=None): if class_type is None: self.env[id] = env[id] = func + self.levels[id] = self.level return func diff --git a/src/errors.py b/src/errors.py index 8acd2c62..c3927cea 100644 --- a/src/errors.py +++ b/src/errors.py @@ -14,6 +14,7 @@ class PyxellError(Exception): AbstractClass = lambda t: f"Cannot instantiate an abstract class `{t.show()}`" CannotUnpack = lambda t, n: f"Cannot unpack value of type `{t.show()}` into {n} values" + ClosureRequired = lambda id: f"Cannot access a non-global and non-local variable `{id}`" ExpectedNamedArgument = lambda: f"Positional argument cannot follow named arguments" IllegalAssignment = lambda t1, t2: f"Illegal assignment from `{t1.show()}` to `{t2.show()}`" IllegalLambda = lambda: "Lambda expression cannot be used in this context" diff --git a/test/bad/functions/nested02.px b/test/bad/functions/nested02.px index a0304b61..f80d3e5d 100644 --- a/test/bad/functions/nested02.px +++ b/test/bad/functions/nested02.px @@ -1,10 +1,10 @@ func f() def x = 5 + func g() def print x - return + g() - return f() From ac4a8e999061ce6983d168118e309beb7ca431b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Tue, 10 Dec 2019 20:22:48 +0100 Subject: [PATCH 091/100] Higher order functions as methods --- README.md | 8 +++--- lib/std.px | 44 +++++++++++++++++++++------- src/compiler.py | 56 +++++++++++++++++++++++++----------- test/good/libraries/std02.px | 10 +++---- test/good/libraries/std03.px | 6 ++-- 5 files changed, 86 insertions(+), 38 deletions(-) diff --git a/README.md b/README.md index cb59ac7b..04de8b09 100644 --- a/README.md +++ b/README.md @@ -40,12 +40,12 @@ for x, i in a, 0... do ``` ``` -func reduce'(A->B->A f, A r, [B] b) A def - for x in b do - r = f(r, x) +func reduce([A] a, A->B->B f, B r) B def + for x in a do + r = f(x, r) return r -print reduce'(_*_, 1, [2, 3, 4]) -- 24 +print reduce(_*_, 1, [2, 3, 4]) -- 24 ``` ``` diff --git a/lib/std.px b/lib/std.px index b394110a..86920840 100644 --- a/lib/std.px +++ b/lib/std.px @@ -2,6 +2,9 @@ func ord(Char c) Int extern func chr(Int c) Char extern +func CharArray_asString([Char] a) String extern +func String_toArray(String s) [Char] extern + func write(String s) extern func writeLine(String s) extern func writeInt(Int s) extern @@ -31,27 +34,51 @@ func sign(T x) Int def return x > 0 ? 1 : x < 0 ? -1 : 0 -func all(A->Bool f, [A] a) Bool def +func Array_all([A] a, A->Bool f) Bool def for x in a do if not f(x) do return false return true -func any(A->Bool f, [A] a) Bool def +func Array_any([A] a, A->Bool f) Bool def for x in a do if f(x) do return true return false -func filter(A->Bool f, [A] a) [A] def +func Array_filter([A] a, A->Bool f) [A] def return [x for x in a if f(x)] -func map(A->B f, [A] a) [B] def +func Array_map([A] a, A->B f) [B] def return [f(x) for x in a] -func reduce(A->B->A f, A r, [B] b) A def - for x in b do - r = f(r, x) +func Array_reduce([A] a, A->B->B f, B r) B def + for x in a do + r = f(x, r) + return r + + +func String_all(String s, Char->Bool f) Bool def + for c in s do + if not f(c) do + return false + return true + +func String_all(String s, Char->Bool f) Bool def + for c in s do + if f(c) do + return true + return false + +func String_filter(String s, Char->Bool f) String def + return CharArray_asString([c for c in s if f(c)]) + +func String_map(String s, Char->Char f) String def + return CharArray_asString([f(c) for c in s]) + +func String_reduce(String s, Char->B->B f, B r) B def + for c in s do + r = f(c, r) return r @@ -69,9 +96,6 @@ func Int_pow(Int b, Int e) Int def func Float_pow(Float b, Float e) Float extern -func CharArray_asString([Char] a) String extern -func String_toArray(String s) [Char] extern - func CharArray_join([Char] array, String sep: "") String def if sep.length == 0 do return CharArray_asString(CharArray_asString(array).toArray()) -- copy the array diff --git a/src/compiler.py b/src/compiler.py index cb83a458..234e5527 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -239,50 +239,70 @@ def attr(self, node, obj, attr): if type == tInt: if attr == 'toString': - value = self.get(node, 'Int_toString') + value = self.env['Int_toString'] elif attr == 'toFloat': - value = self.get(node, 'Int_toFloat') + value = self.env['Int_toFloat'] elif type == tFloat: if attr == 'toString': - value = self.get(node, 'Float_toString') + value = self.env['Float_toString'] elif attr == 'toInt': - value = self.get(node, 'Float_toInt') + value = self.env['Float_toInt'] elif type == tBool: if attr == 'toString': - value = self.get(node, 'Bool_toString') + value = self.env['Bool_toString'] elif attr == 'toInt': - value = self.get(node, 'Bool_toInt') + value = self.env['Bool_toInt'] elif attr == 'toFloat': - value = self.get(node, 'Bool_toFloat') + value = self.env['Bool_toFloat'] elif type == tChar: if attr == 'toString': - value = self.get(node, 'Char_toString') + value = self.env['Char_toString'] elif attr == 'toInt': - value = self.get(node, 'Char_toInt') + value = self.env['Char_toInt'] elif attr == 'toFloat': - value = self.get(node, 'Char_toFloat') + value = self.env['Char_toFloat'] elif type.isCollection(): if attr == 'length': value = self.extract(obj, 1) elif type == tString: if attr == 'toString': - value = self.get(node, 'String_toString') + value = self.env['String_toString'] elif attr == 'toArray': - value = self.get(node, 'String_toArray') + value = self.env['String_toArray'] elif attr == 'toInt': - value = self.get(node, 'String_toInt') + value = self.env['String_toInt'] elif attr == 'toFloat': - value = self.get(node, 'String_toFloat') + value = self.env['String_toFloat'] + elif attr == 'all': + value = self.env['String_all'] + elif attr == 'any': + value = self.env['String_any'] + elif attr == 'filter': + value = self.env['String_filter'] + elif attr == 'map': + value = self.env['String_map'] + elif attr == 'reduce': + value = self.env['String_reduce'] elif type.isArray(): if attr == 'join': if type.subtype == tChar: - value = self.get(node, 'CharArray_join') + value = self.env['CharArray_join'] elif type.subtype == tString: - value = self.get(node, 'StringArray_join') + value = self.env['StringArray_join'] + elif attr == 'all': + value = self.env['Array_all'] + elif attr == 'any': + value = self.env['Array_any'] + elif attr == 'filter': + value = self.env['Array_filter'] + elif attr == 'map': + value = self.env['Array_map'] + elif attr == 'reduce': + value = self.env['Array_reduce'] elif type.isTuple() and len(attr) == 1: index = ord(attr) - ord('a') @@ -1712,6 +1732,10 @@ def _call(obj, func): args.append(value) + if obj: + for name, type in type_variables_assignment(obj.type, func.type.args[0].type).items(): + type_variables[name].append(type) + for name, types in type_variables.items(): type = unify_types(*types) if type is None: diff --git a/test/good/libraries/std02.px b/test/good/libraries/std02.px index 1c9aeea4..2f19c34b 100644 --- a/test/good/libraries/std02.px +++ b/test/good/libraries/std02.px @@ -1,6 +1,6 @@ -print all(_, [true, true]), all(not _, [true, false]) -print any(_, [false, true]), all(not _, [true, true]) -print filter(_>0, [3, -1, 5, 0]) -print map(1+_, [1, 5, -2]) -print reduce(_*_, 1, [x for x in 1..10]) +print [true, true].all(_), [true, false].all(not _) +print [false, true].any(_), [true, true].any(not _) +print [3, -1, 5, 0].filter(_>0) +print [1, 5, -2].map(1+_) +print [x for x in 1..10].reduce(_*_, 1) diff --git a/test/good/libraries/std03.px b/test/good/libraries/std03.px index 82cf031c..60904f4a 100644 --- a/test/good/libraries/std03.px +++ b/test/good/libraries/std03.px @@ -1,4 +1,4 @@ -print filter(_<'c', "abcadeab".toArray()).join() -print map(chr(ord(_)+5), "1420".toArray()).join() -print reduce(_+ord(_), 0, "XYZ".toArray()) +print "abcadeab".filter(_<'c') +print "1420".map(chr(ord(_)+5)) +print "XYZ".reduce(ord(_)+_, 0) From 29b4e9049d4eecd37ac2a039a9421fde276c42f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Tue, 10 Dec 2019 21:46:47 +0100 Subject: [PATCH 092/100] Call stack for compilation errors inside functions --- src/compiler.py | 11 ++++++++--- src/errors.py | 3 ++- test/bad/functions/return06.err | 2 +- test/bad/generics/def07.err | 2 +- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/compiler.py b/src/compiler.py index 234e5527..fe3fb23d 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -1058,7 +1058,7 @@ def function(self, template): self.builder.ret_void() else: if '#return' not in self.initialized: - self.throw(body, err.MissingReturn(id)) + self.throw(body, err.MissingReturn()) self.builder.ret(func_type.ret.default()) self.builder.position_at_end(prev_label) @@ -1736,12 +1736,14 @@ def _call(obj, func): for name, type in type_variables_assignment(obj.type, func.type.args[0].type).items(): type_variables[name].append(type) + assigned_types = {} + for name, types in type_variables.items(): type = unify_types(*types) if type is None: self.throw(node, err.InvalidArgumentTypes(tVar(name))) - self.env[name] = type + self.env[name] = assigned_types[name] = type if pos_args: self.throw(node, err.TooManyArguments(func.type)) @@ -1752,7 +1754,10 @@ def _call(obj, func): args.insert(0, obj) if func.isTemplate(): - func = self.builder.load(self.function(func)) + try: + func = self.builder.load(self.function(func)) + except err as e: + self.throw(node, err.InvalidFunctionCall(func.id, assigned_types, str(e)[:-1])) return self.builder.call(func, args) diff --git a/src/errors.py b/src/errors.py index c3927cea..6fb44842 100644 --- a/src/errors.py +++ b/src/errors.py @@ -24,10 +24,11 @@ class PyxellError(Exception): IllegalSuper = lambda: "Cannot use `super` here" InvalidArgumentTypes = lambda t: f"Cannot unify argument types for type variable `{t.show()}`" InvalidDeclaration = lambda t: f"Cannot declare variable of type `{t.show()}`" + InvalidFunctionCall = lambda id, types, msg: f"Error in function `{id}` called here{(' (with types ' + ', '.join(f'{name}={type.show()}' for name, type in types.items()) + ')') if types else ''}.\n{msg}" InvalidLoopStep = lambda: f"Incompatible number of loop variables and step expressions" InvalidModule = lambda id: f"Could not find module `{id}`" MissingDefault = lambda id: f"Missing default value for argument `{id}`" - MissingReturn = lambda id: f"Not all code paths return a value in function `{id}`" + MissingReturn = lambda: f"Not all code paths return a value" NoAttribute = lambda t, id: f"Type `{t.show()}` has no attribute `{id}`" NoBinaryOperator = lambda op, t1, t2: f"No binary operator `{op}` defined for `{t1.show()}` and `{t2.show()}`" NoStrictComparison = lambda t1, t2: f"Strict comparison cannot be used for `{t1.show()}` and `{t2.show()}`" diff --git a/test/bad/functions/return06.err b/test/bad/functions/return06.err index 6f8b911b..bea1350c 100644 --- a/test/bad/functions/return06.err +++ b/test/bad/functions/return06.err @@ -1 +1 @@ -Not all code paths return a value in function `f`. \ No newline at end of file +Not all code paths return a value. \ No newline at end of file diff --git a/test/bad/generics/def07.err b/test/bad/generics/def07.err index 6f8b911b..bea1350c 100644 --- a/test/bad/generics/def07.err +++ b/test/bad/generics/def07.err @@ -1 +1 @@ -Not all code paths return a value in function `f`. \ No newline at end of file +Not all code paths return a value. \ No newline at end of file From 38c6077c8c9fe9849562c47c5a36637159a97938 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Wed, 11 Dec 2019 17:32:56 +0100 Subject: [PATCH 093/100] Code cleanup --- src/compiler.py | 30 +++++++++++++++--------------- src/indentation.py | 2 +- src/types.py | 2 +- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/compiler.py b/src/compiler.py index fe3fb23d..a0d3f269 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -441,7 +441,7 @@ def unaryop(self, node, op, value): if not value.type.isNullable(): self.throw(node, err.NotNullable(value.type)) else: - if op in ('+', '-'): + if op in {'+', '-'}: types = [tInt, tFloat] elif op == '~': types = [tInt] @@ -460,11 +460,11 @@ def unaryop(self, node, op, value): return self.builder.sub(vInt(0), value) elif value.type == tFloat: return self.builder.fsub(vFloat(0), value) - elif op in ('~', 'not'): + elif op in {'~', 'not'}: return self.builder.not_(value) def binaryop(self, node, op, left, right): - if left.type != right.type and left.type in (tInt, tFloat) and right.type in (tInt, tFloat): + if left.type != right.type and left.type in {tInt, tFloat} and right.type in {tInt, tFloat}: if left.type == tInt: left = self.builder.sitofp(left, tFloat) else: @@ -607,7 +607,7 @@ def binaryop(self, node, op, left, right): self.throw(node, err.NoBinaryOperator(op, left.type, right.type)) def cmp(self, node, op, left, right): - if left.type != right.type and left.type in (tInt, tFloat) and right.type in (tInt, tFloat): + if left.type != right.type and left.type in {tInt, tFloat} and right.type in {tInt, tFloat}: if left.type == tInt: left = self.builder.sitofp(left, tFloat) else: @@ -618,7 +618,7 @@ def cmp(self, node, op, left, right): except err: self.throw(node, err.NotComparable(left.type, right.type)) - if left.type in (tInt, tChar): + if left.type in {tInt, tChar}: return self.builder.icmp_signed(op, left, right) elif left.type == tFloat: @@ -651,7 +651,7 @@ def cmp(self, node, op, left, right): self.builder.position_at_end(label) values = [self.builder.load(self.builder.gep(array, [i])) for array in [array1, array2]] - cond = self.cmp(node, op + '=' if op in ('<', '>') else op, *values) + cond = self.cmp(node, op + '=' if op in {'<', '>'} else op, *values) if op == '!=': self.builder.cbranch(cond, label_true, label_cont) @@ -661,7 +661,7 @@ def cmp(self, node, op, left, right): self.builder.function.blocks.append(label_cont) self.builder.position_at_end(label_cont) - if op in ('<=', '>=', '<', '>'): + if op in {'<=', '>=', '<', '>'}: label_cont = ll.Block(self.builder.function) cond2 = self.cmp(node, '!=', *values) @@ -700,7 +700,7 @@ def cmp(self, node, op, left, right): label_cont = ll.Block(self.builder.function) values = [self.extract(tuple, i) for tuple in [left, right]] - cond = self.cmp(node, op + '=' if op in ('<', '>') else op, *values) + cond = self.cmp(node, op + '=' if op in {'<', '>'} else op, *values) if op == '!=': self.builder.cbranch(cond, label_true, label_cont) @@ -710,7 +710,7 @@ def cmp(self, node, op, left, right): self.builder.function.blocks.append(label_cont) self.builder.position_at_end(label_cont) - if op in ('<=', '>=', '<', '>'): + if op in {'<=', '>=', '<', '>'}: label_cont = ll.Block(self.builder.function) cond2 = self.cmp(node, '!=', *values) @@ -729,11 +729,11 @@ def cmp(self, node, op, left, right): phi = self.builder.phi(tBool) phi.add_incoming(vTrue, label_true) phi.add_incoming(vFalse, label_false) - phi.add_incoming(vBool(op not in ('!=', '<', '>')), label_cont) + phi.add_incoming(vBool(op not in {'!=', '<', '>'}), label_cont) return phi elif left.type.isClass(): - if op not in ('==', '!='): + if op not in {'==', '!='}: self.throw(node, err.NotComparable(left.type, right.type)) return self.builder.icmp_unsigned(op, left, right) @@ -925,7 +925,7 @@ def convert_expr(expr): nonlocal ids node = expr['node'] - if node in ['ExprArray', 'ExprIndex', 'ExprBinaryOp', 'ExprRange', 'ExprIs', 'ExprCmp', 'ExprLogicalOp', 'ExprCond', 'ExprTuple']: + if node in {'ExprArray', 'ExprIndex', 'ExprBinaryOp', 'ExprRange', 'ExprIs', 'ExprCmp', 'ExprLogicalOp', 'ExprCond', 'ExprTuple'}: return { **expr, 'exprs': lmap(convert_expr, expr['exprs']), @@ -954,7 +954,7 @@ def convert_expr(expr): 'expr': convert_expr(expr['expr']), 'args': lmap(convert_expr, expr['args']), } - if node in ['ComprehensionFilter', 'ExprAttr', 'CallArg', 'ExprUnaryOp']: + if node in {'ComprehensionFilter', 'ExprAttr', 'CallArg', 'ExprUnaryOp'}: return { **expr, 'expr': convert_expr(expr['expr']), @@ -1253,7 +1253,7 @@ def prepare(iterable, step): values = lmap(self.compile, iterable['exprs']) type = values[0].type types.append(type) - if type not in (tInt, tFloat, tChar): + if type not in {tInt, tFloat, tChar}: self.throw(iterable, err.UnknownType()) if len(values) > 1: values[1] = self.cast(iterable, values[1], type) @@ -1457,7 +1457,7 @@ def compileStmtClass(self, node): for name, member in members.items(): if member['node'] == 'ClassField': member_types[name] = self.compile(member['type']) - elif member['node'] in ('ClassMethod', 'ClassConstructor'): + elif member['node'] in {'ClassMethod', 'ClassConstructor'}: if member['block']: with self.local(): if base: diff --git a/src/indentation.py b/src/indentation.py index 13df28b3..d43375c1 100644 --- a/src/indentation.py +++ b/src/indentation.py @@ -9,7 +9,7 @@ def remove_comments(code): def replacer(match): s = match.group(0) - if s[:2] in ('{-', '--'): + if s[:2] in {'{-', '--'}: return re.sub('[^\n]', ' ', s) # to preserve error line and column indices else: return s diff --git a/src/types.py b/src/types.py index fde387bf..87ea4afa 100644 --- a/src/types.py +++ b/src/types.py @@ -330,7 +330,7 @@ def show(type): @extend_class(Type) def default(type): - return ll.Constant(type, 0 if type in (tInt, tFloat, tBool, tChar) else 'null') + return ll.Constant(type, 0 if type in {tInt, tFloat, tBool, tChar} else 'null') def vInt(n): From 9d9923e8c3f60b121e26b0c4a88c4055a034476a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Wed, 11 Dec 2019 17:47:56 +0100 Subject: [PATCH 094/100] Additional tests --- test/good/classes/unification04.out | 2 ++ test/good/classes/unification04.px | 1 + test/good/classes/unification05.out | 3 +++ test/good/classes/unification05.px | 23 +++++++++++++++++++++++ test/good/nullables/nullable07.out | 3 +++ test/good/nullables/nullable07.px | 9 +++++++++ test/good/nullables/op11.out | 3 +++ test/good/nullables/op11.px | 13 +++++++++++++ 8 files changed, 57 insertions(+) create mode 100644 test/good/classes/unification05.out create mode 100644 test/good/classes/unification05.px create mode 100644 test/good/nullables/nullable07.out create mode 100644 test/good/nullables/nullable07.px create mode 100644 test/good/nullables/op11.out create mode 100644 test/good/nullables/op11.px diff --git a/test/good/classes/unification04.out b/test/good/classes/unification04.out index f8c8e200..70f9a94f 100644 --- a/test/good/classes/unification04.out +++ b/test/good/classes/unification04.out @@ -2,3 +2,5 @@ 1 B $$$ 0 A +-3.75 +1 B diff --git a/test/good/classes/unification04.px b/test/good/classes/unification04.px index c264ffd5..efc1ef45 100644 --- a/test/good/classes/unification04.px +++ b/test/good/classes/unification04.px @@ -18,3 +18,4 @@ func get(T*A a) A def get((4, B())).f() get(("$$$", A())).f() +get((-3.75, B())).f() diff --git a/test/good/classes/unification05.out b/test/good/classes/unification05.out new file mode 100644 index 00000000..b3f32baa --- /dev/null +++ b/test/good/classes/unification05.out @@ -0,0 +1,3 @@ +CCC +B +A diff --git a/test/good/classes/unification05.px b/test/good/classes/unification05.px new file mode 100644 index 00000000..a64d0f2d --- /dev/null +++ b/test/good/classes/unification05.px @@ -0,0 +1,23 @@ + +class A def + Char x: 'A' + + func f() def + print self.x + +class B(A) def + Char x: 'B' + +class C(A) def + Char x: 'C' + + func f() def + print "{self.x}" * 3 + + +func get(T*T a) T def + return a.a + +get((C(), B())).f() +get((B(), A())).f() +get((A(), C())).f() diff --git a/test/good/nullables/nullable07.out b/test/good/nullables/nullable07.out new file mode 100644 index 00000000..3857e04b --- /dev/null +++ b/test/good/nullables/nullable07.out @@ -0,0 +1,3 @@ +[null] +[null, true, false] +[a, null] diff --git a/test/good/nullables/nullable07.px b/test/good/nullables/nullable07.px new file mode 100644 index 00000000..19da711e --- /dev/null +++ b/test/good/nullables/nullable07.px @@ -0,0 +1,9 @@ + +[Int?] a = [null] +print a + +[Bool?] b = [null, true, false] +print b + +[Char?] c = ['a', null] +print c diff --git a/test/good/nullables/op11.out b/test/good/nullables/op11.out new file mode 100644 index 00000000..7e16fb42 --- /dev/null +++ b/test/good/nullables/op11.out @@ -0,0 +1,3 @@ +null +A +0 diff --git a/test/good/nullables/op11.px b/test/good/nullables/op11.px new file mode 100644 index 00000000..89164be6 --- /dev/null +++ b/test/good/nullables/op11.px @@ -0,0 +1,13 @@ + +class A def + Int x: 0 + + constructor() def + print "A" + +A? a = null +print a?.x + +a ??= A() +a ??= A() +print a?.x From 994317f4d9e70384391b8f66329dad23011dd31f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Wed, 11 Dec 2019 19:19:47 +0100 Subject: [PATCH 095/100] Remove files generated during tests --- test.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/test.py b/test.py index 74aad603..f4b8e544 100644 --- a/test.py +++ b/test.py @@ -33,7 +33,7 @@ parser.add_argument('-t', '--target-windows-gnu', action='store_true', help="run compiler with -target x86_64-pc-windows-gnu") parser.add_argument('-v', '--verbose', dest='verbose', action='store_true', - help="display all tests (only failed tests are displayed by default)") + help="display all tests and don't remove generated files") args = parser.parse_args() # Run tests that satisfy the pattern. @@ -127,7 +127,11 @@ def test(i, path): if passed: ok += 1 - os.remove(path.replace(".px", ".tmp")) + if not args.verbose: + os.remove(path.replace(".px", ".tmp")) + if not error: + os.remove(path.replace(".px", ".ll")) + os.remove(path.replace(".px", ".exe")) with concurrent.futures.ThreadPoolExecutor(args.thread_count) as executor: for i, path in enumerate(tests, 1): From 08f7500e31b8694d3de787c993c6f3bbd0c81b5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sat, 14 Dec 2019 19:30:27 +0100 Subject: [PATCH 096/100] Base LLVM library --- src/library.py | 194 +++++++++++++++++++++++++++++++++++++++++++++++++ src/main.py | 7 ++ 2 files changed, 201 insertions(+) create mode 100644 src/library.py diff --git a/src/library.py b/src/library.py new file mode 100644 index 00000000..06ad76cb --- /dev/null +++ b/src/library.py @@ -0,0 +1,194 @@ + +from contextlib import contextmanager +from pathlib import Path + +import llvmlite.ir as ll + +from .compiler import CustomIRBuilder, PyxellCompiler +from .types import * + +abspath = Path(__file__).parents[1] + + +class BaseLibraryGenerator(PyxellCompiler): + + def __init__(self): + self.builder = CustomIRBuilder() + self.module = ll.Module() + + input_string_length_limit = 1023 + + self.formats = { + 'int': self.declare_format('%lld'), + 'float_read': self.declare_format('%lg'), + 'float_write': self.declare_format('%.15g'), + 'bool_true': self.declare_format('true'), + 'bool_false': self.declare_format('false'), + 'char': self.declare_format('%c'), + 'string_read': self.declare_format(f'%{input_string_length_limit}s'), + 'string_read_line': self.declare_format(f'%{input_string_length_limit}[^\n]%*c'), + 'string_write': self.declare_format('%.*s'), + } + + self.builtins = { + func.name: func for func in [ + ll.Function(self.module, ll.FunctionType(tVoid, [tPtr()]), 'free'), + ll.Function(self.module, ll.FunctionType(tPtr(), [tInt]), 'malloc'), + ll.Function(self.module, ll.FunctionType(tVoid, [tPtr(), tPtr(), tInt]), 'memcpy'), + ll.Function(self.module, ll.FunctionType(tInt, [tPtr()], var_arg=True), 'printf'), + ll.Function(self.module, ll.FunctionType(tVoid, [tChar]), 'putchar'), + ll.Function(self.module, ll.FunctionType(tInt, [tPtr()], var_arg=True), 'scanf'), + ll.Function(self.module, ll.FunctionType(tInt, [tPtr(), tPtr()], var_arg=True), 'sprintf'), + ll.Function(self.module, ll.FunctionType(tInt, [tPtr(), tPtr()], var_arg=True), 'sscanf'), + ll.Function(self.module, ll.FunctionType(tInt, [tPtr()], var_arg=True), 'strlen'), + ll.Function(self.module, ll.FunctionType(tPtr(), [tPtr(), tPtr(), tInt]), 'strncpy'), + + ll.Function(self.module, ll.FunctionType(tFloat, [tFloat]), 'exp'), + ll.Function(self.module, ll.FunctionType(tFloat, [tFloat]), 'log'), + ll.Function(self.module, ll.FunctionType(tFloat, [tFloat]), 'log10'), + ll.Function(self.module, ll.FunctionType(tFloat, [tFloat, tFloat]), 'pow'), + ll.Function(self.module, ll.FunctionType(tFloat, [tFloat]), 'sqrt'), + ll.Function(self.module, ll.FunctionType(tFloat, [tFloat]), 'cos'), + ll.Function(self.module, ll.FunctionType(tFloat, [tFloat]), 'sin'), + ll.Function(self.module, ll.FunctionType(tFloat, [tFloat]), 'tan'), + ll.Function(self.module, ll.FunctionType(tFloat, [tFloat]), 'acos'), + ll.Function(self.module, ll.FunctionType(tFloat, [tFloat]), 'asin'), + ll.Function(self.module, ll.FunctionType(tFloat, [tFloat]), 'atan'), + ll.Function(self.module, ll.FunctionType(tFloat, [tFloat, tFloat]), 'atan2'), + ll.Function(self.module, ll.FunctionType(tFloat, [tFloat]), 'ceil'), + ll.Function(self.module, ll.FunctionType(tFloat, [tFloat]), 'floor'), + ll.Function(self.module, ll.FunctionType(tFloat, [tFloat]), 'trunc'), + + ll.Function(self.module, ll.FunctionType(tInt, [tPtr(tInt)]), 'time'), + + ll.Function(self.module, ll.FunctionType(tInt, []), 'rand'), + ll.Function(self.module, ll.FunctionType(tVoid, [tInt]), 'srand'), + ] + } + + with self.define(tFunc([tInt], tChar), 'chr') as func: + self.builder.ret(self.builder.trunc(func.args[0], tChar)) + with self.define(tFunc([tChar], tInt), 'ord') as func: + self.builder.ret(self.builder.zext(func.args[0], tInt)) + + with self.define(tFunc([tArray(tChar)], tString), 'CharArray_asString') as func: + self.builder.ret(func.args[0]) + with self.define(tFunc([tString], tArray(tChar)), 'String_toArray') as func: + length = self.extract(func.args[0], 1) + result = self.array(tChar, [], length) + self.call_builtin('memcpy', self.extract(result, 0), self.extract(func.args[0], 0), length) + self.builder.ret(result) + + with self.define(tFunc([tString]), 'write') as func: + self.call_builtin('printf', self.get_format('string_write'), self.extract(func.args[0], 1), self.extract(func.args[0], 0)) + self.builder.ret_void() + with self.define(tFunc([tString]), 'writeLine') as func: + self.call_builtin('printf', self.get_format('string_write'), self.extract(func.args[0], 1), self.extract(func.args[0], 0)) + self.call_builtin('putchar', vChar('\n')) + self.builder.ret_void() + with self.define(tFunc([tInt]), 'writeInt') as func: + self.call_builtin('printf', self.get_format('int'), func.args[0]) + self.builder.ret_void() + with self.define(tFunc([tFloat]), 'writeFloat') as func: + self.call_builtin('printf', self.get_format('float_write'), func.args[0]) + self.builder.ret_void() + with self.define(tFunc([tBool]), 'writeBool') as func: + self.call_builtin('printf', self.builder.select(func.args[0], self.get_format('bool_true'), self.get_format('bool_false'))) + self.builder.ret_void() + with self.define(tFunc([tChar]), 'writeChar') as func: + self.call_builtin('printf', self.get_format('char'), func.args[0]) + self.builder.ret_void() + + with self.define(tFunc([], tString), 'read') as func: + result = self.array(tChar, [], vInt(input_string_length_limit+1)) + ptr = self.extract(result, 0) + self.call_builtin('scanf', self.get_format('string_read'), ptr) + self.insert(self.call_builtin('strlen', ptr), result, 1) + self.builder.ret(result) + with self.define(tFunc([], tString), 'readLine') as func: + result = self.array(tChar, [], vInt(input_string_length_limit+1)) + ptr = self.extract(result, 0) + self.call_builtin('scanf', self.get_format('string_read_line'), ptr) + self.insert(self.call_builtin('strlen', ptr), result, 1) + self.builder.ret(result) + with self.define(tFunc([], tInt), 'readInt') as func: + result = self.builder.alloca(tInt) + self.call_builtin('scanf', self.get_format('int'), self.builder.bitcast(result, tPtr())) + self.builder.ret(self.builder.load(result)) + with self.define(tFunc([], tChar), 'readChar') as func: + result = self.builder.alloca(tChar) + self.call_builtin('scanf', self.get_format('char'), self.builder.bitcast(result, tPtr())) + self.builder.ret(self.builder.load(result)) + + with self.define(tFunc([tInt], tFloat), 'Int_toFloat') as func: + self.builder.ret(self.builder.sitofp(func.args[0], tFloat)) + with self.define(tFunc([tFloat], tInt), 'Float_toInt') as func: + self.builder.ret(self.builder.fptosi(func.args[0], tInt)) + + with self.define(tFunc([tInt], tString), 'Int_toString') as func: + result = self.array(tChar, [], vInt(21)) + ptr = self.extract(result, 0) + self.call_builtin('sprintf', ptr, self.get_format('int'), func.args[0]) + self.insert(self.call_builtin('strlen', ptr), result, 1) + self.builder.ret(result) + with self.define(tFunc([tFloat], tString), 'Float_toString') as func: + result = self.array(tChar, [], vInt(25)) + ptr = self.extract(result, 0) + self.call_builtin('sprintf', ptr, self.get_format('float_write'), func.args[0]) + self.insert(self.call_builtin('strlen', ptr), result, 1) + self.builder.ret(result) + + with self.define(tFunc([tString], tInt), 'String_toInt') as func: + # sscanf needs a null-terminated string, so we need to copy it and append \0 + length = self.extract(func.args[0], 1) + ptr = self.call_builtin('malloc', self.builder.add(length, vInt(1))) + self.call_builtin('strncpy', ptr, self.extract(func.args[0], 0), length) + self.builder.store(vChar('\0'), self.builder.gep(ptr, [length])) + result = self.builder.alloca(tInt) + self.call_builtin('sscanf', ptr, self.get_format('int'), self.builder.bitcast(result, tPtr())) + self.call_builtin('free', ptr) + self.builder.ret(self.builder.load(result)) + with self.define(tFunc([tString], tFloat), 'String_toFloat') as func: + # sscanf needs a null-terminated string, so we need to copy it and append \0 + length = self.extract(func.args[0], 1) + ptr = self.call_builtin('malloc', self.builder.add(length, vInt(1))) + self.call_builtin('strncpy', ptr, self.extract(func.args[0], 0), length) + self.builder.store(vChar('\0'), self.builder.gep(ptr, [length])) + result = self.builder.alloca(tFloat) + self.call_builtin('sscanf', ptr, self.get_format('float_read'), self.builder.bitcast(result, tPtr())) + self.call_builtin('free', ptr) + self.builder.ret(self.builder.load(result)) + + ll.GlobalVariable(self.module, tFunc([tFloat, tFloat], tFloat), 'f.Float_pow').initializer = self.builtins['pow'] + + for name in ['exp', 'log', 'log10', 'sqrt', 'cos', 'sin', 'tan', 'acos', 'asin', 'atan', 'atan2', 'ceil', 'floor', 'trunc']: + func = self.builtins[name] + ll.GlobalVariable(self.module, tPtr(func.ftype), f'f.{name}').initializer = func + + with self.define(tFunc([tFloat], tInt), 'time') as func: + self.builder.ret(self.call_builtin('time', vNull(tPtr(tInt)))) + + ll.GlobalVariable(self.module, tFunc([], tInt), 'f.rand').initializer = self.builtins['rand'] + ll.GlobalVariable(self.module, tFunc([tInt]), 'f.seed').initializer = self.builtins['srand'] + + def declare_format(self, string): + const = ll.Constant.literal_array([vChar(c) for c in string + '\0']) + array = ll.GlobalVariable(self.module, const.type, self.module.get_unique_name('format')) + array.global_constant = True + array.initializer = const + return array + + @contextmanager + def define(self, type, name): + func = ll.Function(self.module, type.pointee, f'def.{name}') + func_ptr = ll.GlobalVariable(self.module, type, f'f.{name}') + func_ptr.initializer = func + entry = func.append_basic_block('entry') + self.builder.position_at_end(entry) + yield func + + def get_format(self, name): + return self.builder.gep(self.formats[name], [vInt(0), vInt(0)]) + + def call_builtin(self, name, *args): + return self.builder.call(self.builtins[name], args) diff --git a/src/main.py b/src/main.py index 16ef5344..3cc80209 100644 --- a/src/main.py +++ b/src/main.py @@ -7,11 +7,18 @@ from .compiler import PyxellCompiler from .indentation import transform_indented_code +from .library import BaseLibraryGenerator from .parsing import parse_program abspath = Path(__file__).parents[1] +with open(abspath/'lib/base.ll', 'w') as file: + file.write(BaseLibraryGenerator().llvm_ir()) + +subprocess.check_output(['clang', abspath/'lib/io.c', '-S', '-emit-llvm', '-o', abspath/'lib/io.ll'], stderr=subprocess.STDOUT) + + def build_ast(path): code = transform_indented_code(path.read_text()) return parse_program(code) From 2bfce68ca4238972d59808cda1d936cc8ec5c3d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sat, 14 Dec 2019 21:31:14 +0100 Subject: [PATCH 097/100] Refactoring: ASCII conversions `.code` and `.char` fields instead of `ord` and `chr` functions. --- lib/std.px | 8 ++------ src/compiler.py | 4 ++++ src/library.py | 5 ----- test/bad/arrays/print01.err | 2 +- test/bad/arrays/print01.px | 2 +- test/bad/generics/print02.err | 2 +- test/bad/generics/print02.px | 2 +- test/bad/generics/print03.err | 2 +- test/bad/generics/print03.px | 2 +- test/bad/generics/print04.err | 2 +- test/bad/generics/print04.px | 2 +- test/bad/tuples/print01.err | 2 +- test/bad/tuples/print01.px | 2 +- test/good/arrays/comprehension03.px | 2 +- test/good/conversions/ascii01.px | 4 ++-- test/good/conversions/ascii02.px | 2 +- test/good/functions/lambda02.px | 2 +- test/good/generics/func04.px | 2 +- test/good/input/read04.px | 2 +- test/good/libraries/std03.px | 4 ++-- 20 files changed, 25 insertions(+), 30 deletions(-) diff --git a/lib/std.px b/lib/std.px index 86920840..1fbbefd3 100644 --- a/lib/std.px +++ b/lib/std.px @@ -1,7 +1,4 @@ -func ord(Char c) Int extern -func chr(Int c) Char extern - func CharArray_asString([Char] a) String extern func String_toArray(String s) [Char] extern @@ -149,7 +146,6 @@ func String_toFloat(String s) Float extern func Int_toFloat(Int n) Float extern - func Float_toInt(Float f) Int extern @@ -160,7 +156,7 @@ func Bool_toFloat(Bool b) Float def return b ? 1.0 : 0.0 func Char_toInt(Char c) Int def - return ord(c) - 48 + return c.code - 48 func Char_toFloat(Char c) Float def - return ord(c) - 48.0 + return c.code - 48.0 diff --git a/src/compiler.py b/src/compiler.py index a0d3f269..38d69e14 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -242,6 +242,8 @@ def attr(self, node, obj, attr): value = self.env['Int_toString'] elif attr == 'toFloat': value = self.env['Int_toFloat'] + elif attr == 'char': + value = self.builder.trunc(obj, tChar) elif type == tFloat: if attr == 'toString': @@ -264,6 +266,8 @@ def attr(self, node, obj, attr): value = self.env['Char_toInt'] elif attr == 'toFloat': value = self.env['Char_toFloat'] + elif attr == 'code': + value = self.builder.zext(obj, tInt) elif type.isCollection(): if attr == 'length': diff --git a/src/library.py b/src/library.py index 06ad76cb..0a2254ae 100644 --- a/src/library.py +++ b/src/library.py @@ -66,11 +66,6 @@ def __init__(self): ] } - with self.define(tFunc([tInt], tChar), 'chr') as func: - self.builder.ret(self.builder.trunc(func.args[0], tChar)) - with self.define(tFunc([tChar], tInt), 'ord') as func: - self.builder.ret(self.builder.zext(func.args[0], tInt)) - with self.define(tFunc([tArray(tChar)], tString), 'CharArray_asString') as func: self.builder.ret(func.args[0]) with self.define(tFunc([tString], tArray(tChar)), 'String_toArray') as func: diff --git a/test/bad/arrays/print01.err b/test/bad/arrays/print01.err index da5cefdc..76d8ab86 100644 --- a/test/bad/arrays/print01.err +++ b/test/bad/arrays/print01.err @@ -1 +1 @@ -Variable of type `Char->Int` cannot be printed. \ No newline at end of file +Variable of type `String->Void` cannot be printed. \ No newline at end of file diff --git a/test/bad/arrays/print01.px b/test/bad/arrays/print01.px index dd494bee..f43b3552 100644 --- a/test/bad/arrays/print01.px +++ b/test/bad/arrays/print01.px @@ -1,2 +1,2 @@ -print [ord] +print [write] diff --git a/test/bad/generics/print02.err b/test/bad/generics/print02.err index da5cefdc..76d8ab86 100644 --- a/test/bad/generics/print02.err +++ b/test/bad/generics/print02.err @@ -1 +1 @@ -Variable of type `Char->Int` cannot be printed. \ No newline at end of file +Variable of type `String->Void` cannot be printed. \ No newline at end of file diff --git a/test/bad/generics/print02.px b/test/bad/generics/print02.px index 29dc8488..0b695c43 100644 --- a/test/bad/generics/print02.px +++ b/test/bad/generics/print02.px @@ -2,4 +2,4 @@ func f(T x) def print 'x', x -f(ord) +f(write) diff --git a/test/bad/generics/print03.err b/test/bad/generics/print03.err index 3648a4dc..76d8ab86 100644 --- a/test/bad/generics/print03.err +++ b/test/bad/generics/print03.err @@ -1 +1 @@ -Variable of type `Int->Char` cannot be printed. \ No newline at end of file +Variable of type `String->Void` cannot be printed. \ No newline at end of file diff --git a/test/bad/generics/print03.px b/test/bad/generics/print03.px index 12d43569..87c8a981 100644 --- a/test/bad/generics/print03.px +++ b/test/bad/generics/print03.px @@ -2,4 +2,4 @@ func f(T x) T def return x -print [(f(chr), f(2))] +print [(f(write), f(2))] diff --git a/test/bad/generics/print04.err b/test/bad/generics/print04.err index da5cefdc..76d8ab86 100644 --- a/test/bad/generics/print04.err +++ b/test/bad/generics/print04.err @@ -1 +1 @@ -Variable of type `Char->Int` cannot be printed. \ No newline at end of file +Variable of type `String->Void` cannot be printed. \ No newline at end of file diff --git a/test/bad/generics/print04.px b/test/bad/generics/print04.px index 3b41808f..08704767 100644 --- a/test/bad/generics/print04.px +++ b/test/bad/generics/print04.px @@ -2,4 +2,4 @@ func f(A x, A->B f) B def return f(x) -print f(ord, _) +print f(write, _) diff --git a/test/bad/tuples/print01.err b/test/bad/tuples/print01.err index da5cefdc..76d8ab86 100644 --- a/test/bad/tuples/print01.err +++ b/test/bad/tuples/print01.err @@ -1 +1 @@ -Variable of type `Char->Int` cannot be printed. \ No newline at end of file +Variable of type `String->Void` cannot be printed. \ No newline at end of file diff --git a/test/bad/tuples/print01.px b/test/bad/tuples/print01.px index dd08cd33..75d6b9d9 100644 --- a/test/bad/tuples/print01.px +++ b/test/bad/tuples/print01.px @@ -1,2 +1,2 @@ -print 2, ord +print 2, write diff --git a/test/good/arrays/comprehension03.px b/test/good/arrays/comprehension03.px index 1c108a33..4e45d5b3 100644 --- a/test/good/arrays/comprehension03.px +++ b/test/good/arrays/comprehension03.px @@ -1,4 +1,4 @@ -a = [chr(d+ord(c)) for d in -2...5 for c in 'i'..'k'] +a = [(d+c.code).char for d in -2...5 for c in 'i'..'k'] print a.length print a[0], a[5], a[-1] diff --git a/test/good/conversions/ascii01.px b/test/good/conversions/ascii01.px index 07f3949f..17aad00b 100644 --- a/test/good/conversions/ascii01.px +++ b/test/good/conversions/ascii01.px @@ -1,3 +1,3 @@ -print ord('#'), ord('x') -print ord('\n') +print '#'.code, 'x'.code +print '\n'.code diff --git a/test/good/conversions/ascii02.px b/test/good/conversions/ascii02.px index fe92f36e..2ad25dbf 100644 --- a/test/good/conversions/ascii02.px +++ b/test/good/conversions/ascii02.px @@ -1,3 +1,3 @@ for i in 42..72 step 10 do - print chr(i) + print i.char diff --git a/test/good/functions/lambda02.px b/test/good/functions/lambda02.px index 54af5037..e43d3667 100644 --- a/test/good/functions/lambda02.px +++ b/test/good/functions/lambda02.px @@ -1,6 +1,6 @@ func f(Int->Int->Int g, String->Char->Int->Char h) Int def c = h("ABC", 'Z', 2) - return g(ord(c), 42) + return g(c.code, 42) print f(lambda x, y -> x + y, lambda a, b, i -> (a + b)[-i]) diff --git a/test/good/generics/func04.px b/test/good/generics/func04.px index 64846563..31b60286 100644 --- a/test/good/generics/func04.px +++ b/test/good/generics/func04.px @@ -3,7 +3,7 @@ func call(A->B f, A x) def print f(x) func f(Char c) Int def - return ord(c) + return c.code func g(Int n) Float def return n + 0.5 diff --git a/test/good/input/read04.px b/test/good/input/read04.px index 3f184265..71262c58 100644 --- a/test/good/input/read04.px +++ b/test/good/input/read04.px @@ -1,5 +1,5 @@ -print readInt() * 5, chr(ord(readChar()) + 1), readInt() / 10 +print readInt() * 5, (readChar().code + 1).char, readInt() / 10 x, s, y = readInt() % 17, read() + "-", 42 - readInt() print x, '-' + s, 2 ^ -y diff --git a/test/good/libraries/std03.px b/test/good/libraries/std03.px index 60904f4a..a04c87bc 100644 --- a/test/good/libraries/std03.px +++ b/test/good/libraries/std03.px @@ -1,4 +1,4 @@ print "abcadeab".filter(_<'c') -print "1420".map(chr(ord(_)+5)) -print "XYZ".reduce(ord(_)+_, 0) +print "1420".map((_.code+5).char) +print "XYZ".reduce(_.code+_, 0) From 5cb3b8a95fc5f15e4b799734812395c9ba8d69a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sun, 15 Dec 2019 13:00:16 +0100 Subject: [PATCH 098/100] Update readme --- README.md | 71 +++++++++++++++++++++++++++++-------------------------- 1 file changed, 38 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index 04de8b09..dca9e764 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,21 @@ Pyxell ====== -### Clear and easy to use multi-paradigm compiled programming language with static typing. ### +### Clear and easy-to-use multi-paradigm compiled programming language with static typing. ### -*Note: Up to version 0.6.0 the project was developed in Haskell with BNFC. Now it is being rewritten to Python and ANTLR.* +*Note: Up to version 0.6.0 the project had been developed in Haskell with BNFC. Now it has been rewritten to Python and ANTLR.* Motivation ---------- -Do you like Python for its expressive and intuitive syntax, but miss static type checking and runtime speed of compiled languages? +The project aims to combine the best features of different programming languages, +pack them into a clean syntax with significant indentation, +and provide the execution speed of native machine code. -Do you enjoy functional programming in Haskell, yet find it overly complicated and not exactly suitable for everyday use? - -Do you keep looking back at C++ for its speed and power, though can't stand its verbosity and ugliness in comparison to modern languages? - -That's why I started creating Pyxell -- to bring together the best features of different programming languages. +It draws mainly from Python, Haskell, C#, and C++, +and tries to avoid common design flaws that have been nicely described +[in this blog post](https://eev.ee/blog/2016/12/01/lets-stop-copying-c/). Examples @@ -78,10 +78,13 @@ Features * First-class functions (+) * Default and named arguments (+) * Lambda expressions (+) -* Generic functions (+/-) +* Generic functions (+) * Module system (+/-) * Classes with safe references (+) * Separate nullable types (+) + +To do: + * Generic types * Containers library * Operator overloading @@ -97,7 +100,7 @@ Features Details ------- -* Type checker and LLVM compiler written in Haskell with BNFC. +* LLVM IR generator and type checker written in Python with ANTLR and llvmlite. * Compilation to machine code (and optimizations) with Clang. @@ -106,8 +109,8 @@ Requirements * Python 3.8 with packages from `requirements.txt`. -Sometimes installation of `llvmlite` fails. -If a problem occurs, try using `easy_install` instead of `pip install`. +Sometimes installation of `llvmlite` [fails](https://github.com/numba/llvmlite/issues/527)). +If such a problem occurs, try using `easy_install` instead of `pip install`. * Clang 6 with C++ standard library. @@ -125,42 +128,44 @@ Usage ----- ``` -make libs -./pyxell.sh code.px +./pyxell.sh program.px ``` -If the program is correct, `code.ll` file and an executable should be created in the same folder. +If the program is correct, `program.ll` file and an executable should be created in the same folder. If not, errors will be displayed, pointing to the erroneous code location. -Run `make parser` to run ANTLR after changing the grammar (`src/Pyxell.g4`). -Run `make libs` to recompile only runtime libraries (`lib/`). +Run `make` after changing the grammar (`src/Pyxell.g4`) to rebuild the parser with ANTLR. Tests ----- +``` +./test.py -v +``` + Tests are divided into good (supposed to compile and run properly) and bad (should throw compilation errors). -There is a Python script `test.py`. -You can pass a path pattern to run only selected tests (e.g. `python test.py good`). +The script is multi-threaded. +Total execution time may vary from something like 10 seconds to 2 minutes, +depending on the number of processors in your machine and other factors. + +You can pass a path pattern to run only selected tests (e.g. `./test.py good`). To see all options, run it with `-h`. Tests serve currently also as a documentation of the language. You can browse them to learn the syntax and semantics. -Final thoughts --------------- - -The goal of this project is to create a language that would be simple, consistent, and powerful enough to be useful -for some basic tasks, where other languages are too verbose, unintuitive, error-prone, or not fast enough. -One example of a use-case could be solving algorithmic problems, -without constantly looking into C++ STL documentation or defining tons of macros. +Alternatives +------------ -I do know that there exist many interesting modern programming languages apart from those widely-known, -and most of them provide majority of features from my list. Even though I haven't used them, -I tried my best to learn about their details and discovered that none of them fully meets my expectations. -From what I've found, only Boo has an indentation-based syntax without braces, but is built on top of -C# and .NET platform. Other compiled languages with static typing and type inference are D, Go, Rust, Scala, and Kotlin, -but their syntax is uglier and they are either concentrated on some specific aspect like concurrency (the first 3), -or built on top of Java (the other 2). +There are only a few languages with indentation-based syntax. +The ones that I've found worth mentioning are, in alphabetical order: +* [Boo](https://boo-language.github.io/) (based on .NET), +* [CoffeeScript](https://coffeescript.org/) (transpiled to JS), +* [F#](https://fsharp.org/) (functional, based on .NET), +* [Genie](https://wiki.gnome.org/Projects/Genie) (compiled via C), +* [Haskell](https://www.haskell.org/) (functional, compiled), +* [Nim](https://nim-lang.org/) (compiled via C/C++ or transpiled to JS), +* [Python](https://www.python.org/) (dynamically typed). From eefaad39386bbd75d65fd26c57408a15d041d5c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sun, 15 Dec 2019 18:06:13 +0100 Subject: [PATCH 099/100] Disable array covariance again https://stackoverflow.com/a/2745301 --- src/types.py | 6 ++++++ test/bad/classes/type03.err | 2 +- test/bad/classes/type03.px | 4 ++-- test/bad/classes/type04.err | 1 + test/bad/classes/type04.px | 13 +++++++++++++ test/bad/classes/type05.err | 1 + test/bad/classes/type05.px | 9 +++++++++ test/good/arrays/covariance01.out | 1 - test/good/arrays/covariance01.px | 10 ---------- test/good/arrays/covariance02.out | 2 -- test/good/arrays/covariance02.px | 21 --------------------- 11 files changed, 33 insertions(+), 37 deletions(-) create mode 100644 test/bad/classes/type04.err create mode 100644 test/bad/classes/type04.px create mode 100644 test/bad/classes/type05.err create mode 100644 test/bad/classes/type05.px delete mode 100644 test/good/arrays/covariance01.out delete mode 100644 test/good/arrays/covariance01.px delete mode 100644 test/good/arrays/covariance02.out delete mode 100644 test/good/arrays/covariance02.px diff --git a/src/types.py b/src/types.py index 87ea4afa..4a6f2dd2 100644 --- a/src/types.py +++ b/src/types.py @@ -177,6 +177,8 @@ def isUnknown(type): return True if type.isArray(): return type.subtype.isUnknown() + if type.isNullable(): + return type.subtype.isUnknown() if type.isTuple(): return any(elem.isUnknown() for elem in type.elements) if type.isFunc(): @@ -296,6 +298,10 @@ def get_type_variables(type): def can_cast(type1, type2): + if type1.isArray() and type2.isArray(): + return type1.subtype == type2.subtype or type1.subtype.isUnknown() + if not type1.isNullable() and type2.isNullable(): + return can_cast(type1, type2.subtype) return type_variables_assignment(type1, type2) == {} diff --git a/test/bad/classes/type03.err b/test/bad/classes/type03.err index 9f95d1d5..d8330ce5 100644 --- a/test/bad/classes/type03.err +++ b/test/bad/classes/type03.err @@ -1 +1 @@ -Illegal assignment from `[A]` to `[B]`. \ No newline at end of file +Illegal assignment from `[B]` to `[A]`. \ No newline at end of file diff --git a/test/bad/classes/type03.px b/test/bad/classes/type03.px index e76b9036..6486925b 100644 --- a/test/bad/classes/type03.px +++ b/test/bad/classes/type03.px @@ -5,5 +5,5 @@ class A def class B(A) def Int y -b = [B()] -b = [A()] +a = [A()] +a = [B()] diff --git a/test/bad/classes/type04.err b/test/bad/classes/type04.err new file mode 100644 index 00000000..d8330ce5 --- /dev/null +++ b/test/bad/classes/type04.err @@ -0,0 +1 @@ +Illegal assignment from `[B]` to `[A]`. \ No newline at end of file diff --git a/test/bad/classes/type04.px b/test/bad/classes/type04.px new file mode 100644 index 00000000..9d60ab8e --- /dev/null +++ b/test/bad/classes/type04.px @@ -0,0 +1,13 @@ + +class A def + Int x + +class B(A) def + Int y + + +func f([A] a) def + return + +b = [B()] +f(b) diff --git a/test/bad/classes/type05.err b/test/bad/classes/type05.err new file mode 100644 index 00000000..ebd15c57 --- /dev/null +++ b/test/bad/classes/type05.err @@ -0,0 +1 @@ +Illegal assignment from `[B]` to `[A]?`. \ No newline at end of file diff --git a/test/bad/classes/type05.px b/test/bad/classes/type05.px new file mode 100644 index 00000000..750fd7a7 --- /dev/null +++ b/test/bad/classes/type05.px @@ -0,0 +1,9 @@ + +class A def + Int x + +class B(A) def + Int y + + +[A]? a = [B()] diff --git a/test/good/arrays/covariance01.out b/test/good/arrays/covariance01.out deleted file mode 100644 index 0cfbf088..00000000 --- a/test/good/arrays/covariance01.out +++ /dev/null @@ -1 +0,0 @@ -2 diff --git a/test/good/arrays/covariance01.px b/test/good/arrays/covariance01.px deleted file mode 100644 index 16becb5d..00000000 --- a/test/good/arrays/covariance01.px +++ /dev/null @@ -1,10 +0,0 @@ - -class A def - Int x: 1 - -class B(A) def - Int x: 2 - -a = [A()] -a = [B()] -print a[0].x diff --git a/test/good/arrays/covariance02.out b/test/good/arrays/covariance02.out deleted file mode 100644 index 90659bd6..00000000 --- a/test/good/arrays/covariance02.out +++ /dev/null @@ -1,2 +0,0 @@ -B -C diff --git a/test/good/arrays/covariance02.px b/test/good/arrays/covariance02.px deleted file mode 100644 index 1c504006..00000000 --- a/test/good/arrays/covariance02.px +++ /dev/null @@ -1,21 +0,0 @@ - -class A def - func x() Char def - return 'A' - -class B(A) def - func x() Char def - return 'B' - -class C(A) def - func x() Char def - return 'C' - - -func f([A] a) def - print a[0].x() - a[0] = C() - -b = [B()] -f(b) -print b[0].x() From 0756c87a96b9e1abbd0430c80ede3692ef39b831 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20So=C5=82tysik?= Date: Sun, 15 Dec 2019 18:42:30 +0100 Subject: [PATCH 100/100] Allow for variables with unknown types --- src/compiler.py | 2 -- test/bad/arrays/empty01.err | 2 +- test/bad/arrays/empty01.px | 1 + test/bad/arrays/empty02.err | 1 - test/bad/arrays/empty02.px | 3 --- test/good/generics/complex07.out | 2 ++ test/good/generics/complex07.px | 8 ++++++++ 7 files changed, 12 insertions(+), 7 deletions(-) delete mode 100644 test/bad/arrays/empty02.err delete mode 100644 test/bad/arrays/empty02.px create mode 100644 test/good/generics/complex07.out create mode 100644 test/good/generics/complex07.px diff --git a/src/compiler.py b/src/compiler.py index 38d69e14..823da8a8 100644 --- a/src/compiler.py +++ b/src/compiler.py @@ -359,8 +359,6 @@ def unify(self, node, *values): def declare(self, node, type, id, redeclare=False, initialize=False, check_only=False): if type == tVoid: self.throw(node, err.InvalidDeclaration(type)) - if type.isUnknown(): - self.throw(node, err.UnknownType()) if id in self.env and not redeclare: self.throw(node, err.RedeclaredIdentifier(id)) if check_only: diff --git a/test/bad/arrays/empty01.err b/test/bad/arrays/empty01.err index 97a5a7d8..a61c5af5 100644 --- a/test/bad/arrays/empty01.err +++ b/test/bad/arrays/empty01.err @@ -1 +1 @@ -Cannot settle type of the expression. \ No newline at end of file +Illegal assignment from `[Int]` to `[]`. \ No newline at end of file diff --git a/test/bad/arrays/empty01.px b/test/bad/arrays/empty01.px index aa2fe70d..3d885d24 100644 --- a/test/bad/arrays/empty01.px +++ b/test/bad/arrays/empty01.px @@ -1,2 +1,3 @@ a = [] +a = [3] diff --git a/test/bad/arrays/empty02.err b/test/bad/arrays/empty02.err deleted file mode 100644 index 97a5a7d8..00000000 --- a/test/bad/arrays/empty02.err +++ /dev/null @@ -1 +0,0 @@ -Cannot settle type of the expression. \ No newline at end of file diff --git a/test/bad/arrays/empty02.px b/test/bad/arrays/empty02.px deleted file mode 100644 index c6b70a28..00000000 --- a/test/bad/arrays/empty02.px +++ /dev/null @@ -1,3 +0,0 @@ - -for x in [] do - skip diff --git a/test/good/generics/complex07.out b/test/good/generics/complex07.out new file mode 100644 index 00000000..690cb2a0 --- /dev/null +++ b/test/good/generics/complex07.out @@ -0,0 +1,2 @@ +0 +6 diff --git a/test/good/generics/complex07.px b/test/good/generics/complex07.px new file mode 100644 index 00000000..81b7e3e4 --- /dev/null +++ b/test/good/generics/complex07.px @@ -0,0 +1,8 @@ + +func length([T] a) Int def + if a.length == 0 do + return 0 + return length(a[1:]) + 1 + +print length([]) +print length([1, 2] * 3)