From f76cf726204b60701678c0ae8159fca33013d44b Mon Sep 17 00:00:00 2001 From: JinZhou5042 Date: Sun, 1 Oct 2023 23:09:37 -0400 Subject: [PATCH 1/9] edit lr1table --- Lexer/__pycache__/GenToken.cpython-310.pyc | Bin 0 -> 3182 bytes Lexer/__pycache__/GenToken.cpython-39.pyc | Bin 0 -> 3032 bytes Lexer/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 184 bytes Lexer/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 182 bytes Lexer/__pycache__/main.cpython-310.pyc | Bin 0 -> 834 bytes Lexer/__pycache__/main.cpython-39.pyc | Bin 0 -> 818 bytes Parser/LR1Table/LR1TableUI.py | 6 +++++- .../__pycache__/GenTable.cpython-310.pyc | Bin 0 -> 781 bytes .../LR1Table/__pycache__/GenTable.cpython-39.pyc | Bin 0 -> 779 bytes .../LR1Table/__pycache__/Grammar.cpython-310.pyc | Bin 0 -> 1320 bytes .../LR1Table/__pycache__/Grammar.cpython-39.pyc | Bin 0 -> 1318 bytes .../__pycache__/LR1Table.cpython-310.pyc | Bin 0 -> 5542 bytes .../LR1Table/__pycache__/LR1Table.cpython-39.pyc | Bin 0 -> 5540 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 185 bytes .../LR1Table/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 183 bytes Parser/LR1Table/__pycache__/main.cpython-310.pyc | Bin 0 -> 489 bytes Parser/LR1Table/__pycache__/main.cpython-39.pyc | Bin 0 -> 481 bytes Parser/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 246 bytes Parser/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 244 bytes __pycache__/utils.cpython-310.pyc | Bin 0 -> 1819 bytes __pycache__/utils.cpython-39.pyc | Bin 0 -> 1779 bytes 21 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 Lexer/__pycache__/GenToken.cpython-310.pyc create mode 100644 Lexer/__pycache__/GenToken.cpython-39.pyc create mode 100644 Lexer/__pycache__/__init__.cpython-310.pyc create mode 100644 Lexer/__pycache__/__init__.cpython-39.pyc create mode 100644 Lexer/__pycache__/main.cpython-310.pyc create mode 100644 Lexer/__pycache__/main.cpython-39.pyc create mode 100644 Parser/LR1Table/__pycache__/GenTable.cpython-310.pyc create mode 100644 Parser/LR1Table/__pycache__/GenTable.cpython-39.pyc create mode 100644 Parser/LR1Table/__pycache__/Grammar.cpython-310.pyc create mode 100644 Parser/LR1Table/__pycache__/Grammar.cpython-39.pyc create mode 100644 Parser/LR1Table/__pycache__/LR1Table.cpython-310.pyc create mode 100644 Parser/LR1Table/__pycache__/LR1Table.cpython-39.pyc create mode 100644 Parser/LR1Table/__pycache__/__init__.cpython-310.pyc create mode 100644 Parser/LR1Table/__pycache__/__init__.cpython-39.pyc create mode 100644 Parser/LR1Table/__pycache__/main.cpython-310.pyc create mode 100644 Parser/LR1Table/__pycache__/main.cpython-39.pyc create mode 100644 Parser/__pycache__/__init__.cpython-310.pyc create mode 100644 Parser/__pycache__/__init__.cpython-39.pyc create mode 100644 __pycache__/utils.cpython-310.pyc create mode 100644 __pycache__/utils.cpython-39.pyc diff --git a/Lexer/__pycache__/GenToken.cpython-310.pyc b/Lexer/__pycache__/GenToken.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ab419d1a874ce3b0b8fe6c730a1500c7fbdaef3a GIT binary patch literal 3182 zcmbVOTT>fH7M|{zk%SQ9VvNnjHZi_vjJYMw#aPIZkpN|dL?p1+9eZaL^#F2&B##Cs zR-kHAAc2LeDJ5C$T^01yQRfgxZR7y&K;qrhcg z47dVZ1;&91U=o-Dt^wD98^16y?P#YT$&XHNI@4$DjENcN)`=!=%bU(^ITP39E$D6N z9q3(X3~E8|L1&@&p>xoA=mK;Rx&-|g`U&&_^i$|((9fY?Kp#Svp^u<(=n6CeeGL5) znuI=qu0m7LG;|HR4&8uepkG1%1kFM>p*d(Cx&{3jT7VXz+t3~8Q|L43pP|p80{RW~ z1@tBKFHk$Kt!whHvh=eiODA01k>ASl&ziU^rF5V%$%>k_`%lWJTGKhV9H|nmXNsVTgL9GEXz9G%O3f zF1hsAJIQP!HUq;1b;+iSMLS=xyY~1BEorr`QQLYUo!m|r&NU~x&Hn5(G!ct;2KYPg z4oJij9izYV?#$i8bQfLQwzranbZ&biUG(=H!=jV4Xd$z{ak0@t;|Mht)0>&qd^Qj7 zJc2Dsw$=RRW-<}GkNN=BQ~7P2c)mAeHJ>ZOP_EaSUT?_LWFZlIQ*u%F_p?>VuclKw z1-Po=*2|7Obe-P#C+YPJmiyM(tJHeq)45b4=G0`bo=>4(msF3?7BXvzSY;PA-%mIr zCh+zh8t+?HlUc-|T&h-K@elTFBa_AI-|ttdw6Z@-DxZkSdT$J3fkj-WM5}bh6f)a1 z#;tfX=8nH|3O>!OWzsm{H>J5&a!$PL>f+qPmy{W!)GxQQ`NZ!-)>+GHv!fPYUQvNg z^0nElGAQNRY)+YeqA7MynSO?~*@6mmQmf5Yl<5b!&1O`flU;2VR|X|Vi^o^gzy}%D zW(gJSrb&w@R@BhNBx|#n8p@_WOprFS)bPJ$Mw>lSeeYAE&F(AHPX@*2m5wwJrXO{( zA_tU?h$|hj7k%%etoq)^UYLH2mFY)Z>4>k=5ow_#vPwsc6|d|no>>zH1ydOmSYc2Y zl|dm@rXN3L`q9Lvzpi*HuM7&BGAMxPLD51FiXG;YDvTT24VltwhX?SYADc3L5zasO zZRz~VOrhXt_;t~+1d|+J5nbxifEv=o*Cc>I)xUFUW#imsHblm2`t4gi4Uq4((HX7ARx#U%F6&JR$i>vj62GZSK$T~lO*PWWb>-ol8 z6|(J0t>W4C7A9&2KmitDVb+Rvy7ZdM3{Aa<%5+Nqgrg`(obZ(fkn&x9jLye%t??ge z!^_jRo6{BP3;a%c?0$h^7IPm#{6lnT1yvQa?WX72_6{md^5iIM4fM9-x8y97c3vwT zIJT|AwtY~ShgB*^Z2R?LsoH6A6Eyo{BJ$HYqIKNQL3zMGc1R1ci0RutI4k|-ptDkz zG&ev$X`XhD_I_Sq=&sp641T(syf?9lT3HiibM}&4OHHqYPRj7e9aNJr`^i@kuZ_lkCHdOGS z)M!*{d&>0daE0#u;3@N<+m!Ddo%E!=uE4HmbB)~_psCZ96(Rw4BB;5icf$^|z_)JN1$G)P3Ab1xGO6Va7$2Z*i^jT220T_d_dG);7qXolz( z(H)|@L>AFKqFJIjqIsf4qK}Cl5Pb#`p{?XL{yc0JRj}N-=*oCiuhiTWT9qLyWzS7h zZ_4+M^XO#f+~Hpi|LTR}otu=PE8bL~kY;d${fGAt>mQ|y{m?ScIpe?mS8)E0|4%U9 S4H*HQ67>Inqk1SD>Hi(WgZs+> literal 0 HcmV?d00001 diff --git a/Lexer/__pycache__/GenToken.cpython-39.pyc b/Lexer/__pycache__/GenToken.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c71afaa7ae8ea39335ed9152690f7676d376ed49 GIT binary patch literal 3032 zcmbVOOIsU97VYYX5aNw7HZMbrA8IhK#BpK_vSlQ&GD0E}*yD;lJ&LLTIYN?KjVD%M zMbJR*8|kLcsQ zqM!GP0p2eL`G6SWgJPHuiEDgVjPPsXIv)|E{JOZoN5xHkLyYm8Vw{hO2|g|+`GlC_ zlj0Vi64U&anBmisNmE+VmW~X|F4-ePvRg)Euk4fkazGBsAvr9s$q{*7j>;SIrW}*w zazakZDS1myA58NZX`Fu{zBs=vXD-+UI1@Izx3A_wm0e=bp3j7fKHTV(u8}PT_$KX})6Yv^%9UKEc1wRAF!Oy`P-~>1c z-UM%fUw~8K@4$Zor@`Cc3^)tk0e=t9f%D*9@E-Uj_!aoi;MZUd{sH_3{1*Hdu(xJx z8RD;^@T(yTXC}WVeiX%D4Srt;A;D3>@`k(rFH%INaV`3EXDy!3r?xV&=<2%r%gU+S z7$W0NdM_V~zL{^C2FSFX%4pky>o&AuH?^IlL31z+(uhRrWh#+`WvMeHll*=!o{mLl zVHl?&>100dWpiHJzP3(Fx{WF7+sY;5yUE<8?pV89&rYtf=vvD`@4W30i^f_;z4P|W z?O@uAZti+J@mw;q`y!dwdyZn!30gFl+In%d(?#bnb>@@Xsf}zpi|jmst)FZg+3oFk zEcyWLK58ejyNGzP=a@mb!VlRhO)%fWYqEJ|ljNFgK{;Az zip?oUE3Cy=1D>JppZ7Qa+sj%FpGAf%&svKQE<>+eS<6Tu| zBCBjFnzE^Y7(vy-2&x_C6Dooe+Af*0D#u62qOMJmz6h5u6OCth>XQIz;P=765=@x* zide!DHrN&pz9u0Qs``_x6m5*`T=Y&;Y~ZPn0#4Y8;Tb0;keygSQy6e&ncpnl9gx5G zll-W9TCX1pNiT0yk7|&+zm%3g1Gi*F?|QNJQH4FPR4E0Xw}Xl5A%MX` zxEuYgA)W3belkB@^iEOg2uJWD5aBxm53#v#jZ%DOrZM&lZFqI&ZhfXCG$HTAr~bEa zbD94Hq=RU|I-07>^Xh@`d3$KoDU$|k^mVqQdor#=JFgUur01!K=N(nWahcwGJ@5T- zq1@{6WAOE#5>TEl0j=YI1IXg3Q!HT?cC_WQNFDT0FKMK{2?&gH7NC+BX2N*;@RXgf zch;#H*eB+gacZ4df_*Uj#J}L5|DnSuDZ*GdT`)Zk87&ys8FkwDhJBZZKS~peh!p#R0xWP z%Ass~JftP$@vfGJyeo05{&J}zy#pC|T2!wowtj%Y22pt=f<;W5`Ds{+I{nm#OQ#8} z%l-y00i-S1nfZ@LNC8TJ#*marq`^El10>@N|4A5xe{Kqs-rkSA!v8KC_nF0v%HRre zx{RdI{TdHO+85wCX_{CYU9-LvWAaK7mUxM=(#YK(I)#Ozg`k0s~E{R7D{D7{oyaOhAqU5Elyoi4=wu#vF!RhA2ixh7_h?22JLdj6h*c z##=18iJ5tRnoLC?^|x4aQY%u6Rx%W^0C`~Im!*DaacWVqepY5)RYrcPzGFc_PG)jq zNoIatv3`J$fpdOtL1s>Bk-iT|tA2cZW?p7Ve7s&kg`k0s~E{R7D{D7{oyaOhAqU5Elyoi4=wu#vF!RhA2ixh7_h?22JLdj6h*c z##=18iJ5tRnoLC?^|x4aQY%u6Rx%W^0C`~Im!*DaacWVqepY5)RYrcPzGFc_PG)jq zNoIatv3`J$fpdOtL1s>Bk-iT|tA2cZW?p7Ve7s&kBj9W5JqcWE3~kQ?Zi$=NKz+s;7pkF8HFydG56FGx4An;fZ|?de(eY7pstTKea5rB z{FGQRa<_X^Q z^Y>g+!TT(UGcL^VwNr>VQ`$L7a>;$7$=f*Lp*NdV70;iK$s9B>%&$nS0Qc9uU|(_} zgOfNbkMlvWQ^0qR`YO&d8SHkpnt56PNdz4;{~+zhS)=%)68- zlbQcxeY*L(PCa}Di)-eRG>Qx-ihL?40O4Y#*tqz|&Py4nIFVI1sy_VZX8n{$QFZ4_ e?rNp{FwNN@;g8I0UbGbn=W~n{QU>)R?EZy literal 0 HcmV?d00001 diff --git a/Lexer/__pycache__/main.cpython-39.pyc b/Lexer/__pycache__/main.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c19916aa3e882ab05b526cac2f56fec23e71dbe7 GIT binary patch literal 818 zcmYjQ&2rN)5SDD&ah(3-P)KPn=?!1v6ov~h9Xd(i5=y6O2kH*vW-2jt>%U40Q#{Ej z3|H=)k|S@xv*^l+H()ria$2Y~yIy^({iNNMhs(<@g3T{e~lO?MqprVo3WXYfFxF6!J1I(GYV{0q4uT0pE7%j0L263Rek{n+Vik-Ua|Br zyJV?nsMVNVGag21K9V7gxT-IJY$R`xGaYt22pCn64v6>xN}?H-#vFIi`)?B@O=(cv zKx5Q^OHPfirxPs60-0IVoMTEJXrI+U6GNg4dsZ1kG(P|yM_U+;@vJ&W6LV~GF5R&? z2A==uRqz&)CNQTaMrnN;i7#zPQO{!#S)(?sP)B=#X=x7Fm0O}!>QHw|bkU$3wY|b< z`3iG|TO30s1!+OjMP>73``P11Nm1|j-t}Jhn!BA&Z~w5@-73iDNjoXlHGa_SzS-+F z2S?x>3|=1f`^Q@fyWX-gGNCGQBqS7*o4~6`ma~-W$|+0aaU>PVhw@z6>>9QSWpkEf zADMDE8`3yR8P{!BR?eeTD(fuH1oMa@AEKBA?xItrUAt+LUMQj?zazc|v45WUM}l$T zUqoqfo{jw79L_x($|y^Pzu#|nvLuHf?)P=~{bU%Wt^AWB+OUB@tb;;$1+U=^yo6os zU;_GKY4iKwQ%)G_-C^iC+yNk1DY;s=Z|f$Bk&I$d)}gGxzu0t`urMrddq>?XnV%;a U9mQ-%cSYzQ#DR0`rnBnczwnO7^#A|> literal 0 HcmV?d00001 diff --git a/Parser/LR1Table/LR1TableUI.py b/Parser/LR1Table/LR1TableUI.py index 58938cd..40f9a42 100644 --- a/Parser/LR1Table/LR1TableUI.py +++ b/Parser/LR1Table/LR1TableUI.py @@ -35,4 +35,8 @@ def initUI(self): mainlayout = QVBoxLayout() mainlayout.addWidget(self.Table) self.setLayout(mainlayout) - self.show() + # self.show() + pixmap = QPixmap(self.Table.size()) + self.Table.render(pixmap) + pixmap.save("table_image.png") + diff --git a/Parser/LR1Table/__pycache__/GenTable.cpython-310.pyc b/Parser/LR1Table/__pycache__/GenTable.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f2ed34d5d5befad11bf3a1f335676e51ca283bc4 GIT binary patch literal 781 zcmYjP-D=w~6qYRcr;fXJe=zn2?x1d=yBlL87g?c{WN8@q#(0sMCfKo&+;thwRret2 zWnW3RyXq_KYUe03L`L5^I=?!fT!|{Em+FH=M}ue~g5M-{#hwU3dcqx(xc5Y%TuhBWP*-bgy^v4fLLWW41PnX#9o#*uNk1b z=78SXZCT4(_nM8#BfX4$g)Rf4=HF&|;Gtq2& z@9cVBNJ9rEEYxXcW0di?nVE4hHQV}ZX7)(b3n>1#pG>q=I$6w@ziz7AMnKVPdUwER~>*&9U?qOFU#xN&^yb)7G8qcgxyq=a}3isOh_Y`B%XTx5k(lBHqb8{ zPcQTDg?vJn^}*2vV%V9dXEU4BEguz%dw^TNLug0?ExCt{_kg&DhPHsxYrPw`rigsa z5dAf8Y0FxEMJMDDF5;fDGa6Raa%q^7xlp#Q@$*@;sL(X8nkwzrxzaLg>;+@rMDy*v zv#UiR4Gc|KsME~FDAU_!W`^6;Z0mEG*&|WUvH0IXGSyP)gRStTReRwW$?$xtpGNyqid^zqO+0<5Yd1OkT;fbTx_63;U`O}98I47X$L z2o=lPjfXr@diNB0VjK2=kKED?w^EP^Q9TTg{WKcyT-H#%(uU<~{zKUpNtwQ` z?ouv)%2^h3b$~W?XyKXl(!8z>+&K=m@B+;y?53KY*)VN~ArL}@lc?9I|9>R+FzLZ) xHE!M?kDG4`F_(>2uQ0-Ock{Z0oeq|7<=O-v%1Yc8@}vEa99fZT5kN$Py?+=vuHygz literal 0 HcmV?d00001 diff --git a/Parser/LR1Table/__pycache__/Grammar.cpython-310.pyc b/Parser/LR1Table/__pycache__/Grammar.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..21f469dccc73650dcb6d91ff36c9161ea2b93a07 GIT binary patch literal 1320 zcmZuxO^@3)5GD0(uf5qUiXd%+RwxP>KGfak%Q1gpiS;Bx3naa zbc+>aw5azF^pH~#R6h1E@!Ef3P@bfng}Y6eSMD)VW59OI@h(O!!oi z>6FNcP2Pt}sS4pdrW+)u{68TPw7}^)1?30qzn5jt}^wML^qC@Dq|{70|sO zU0J@vZ7PEm2K3Hre~Sw|-beL81#v(NV2=+MVHGxHq2E~Dwr8@8-MjWk`@x!MC!iHp-3N0A2XIAj-Ej`U-fR4Q+`%8=2qO2e zjUM2AupR9D>b!B@9Jb1X|90dAeipEMMy4!HO*>7ez);wACrxK_A~sLt$AEc*RdakS iHE9p0oyvwH)WJ>U1e$51|5sw7;|<8Dsk5(ii2eaUDpUpl literal 0 HcmV?d00001 diff --git a/Parser/LR1Table/__pycache__/Grammar.cpython-39.pyc b/Parser/LR1Table/__pycache__/Grammar.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f06637e75efdd30133c0b34fd8fb4b5c68509156 GIT binary patch literal 1318 zcmZuxPjA~c6esoHik+rKP;^7F=`g_Xp|%I?R0KxXX6Oz@5Ukq{!cvVfnM5fq$t2w& zhP=a^(@xoWC?Fm8MfM?h-A5SEgHL;u?KT@m;XU#_{T_c$?~x*%PKaO(dmpo77ooq5 zaeLTcJOPpSKs`qkQG5-uv|>c9m#Alt!T+yef%ODL?t@||#uUXC#nie+u}y7=akT$j zkjaFIu>o&K0E-sLGZ6VBMnF>`1>q&GtQsw?8kZ=sQv})pFG^hHEzRt2=0LS>UmcHjC-{0nehy7Jf3HaxI) zs!nO2quRp2co|f?rCno;s7HM$NKm2Dt?tyQ#?>9#s)2clfyX^WC)W#)hNbrgiFc(( zcV64#-3Q(#(yKABx8J%OUdZDkRPB}E2R0A(7%lwLH#y&6IV^n|zP4|$7(ymKWa1lK zc7KZy;U>eze}kvt^v~&`!5aTlQ?a`gK_faxE8Lko(W6nc!rghR`#AcV5gK*pUv#5X zMp>?+F)30-csge^Qh9XBA|)76U=bM+fMkk^NtzMfA4AXH57SvVP(TCSd;sbkcu)2g zSebre=qLWonmRAhAE;+(SIr8}v?~jqDzL5oP&=nNy%G+DHfr^B@SS8r4ldJdev!`x zUlsr!6P4zf92~zGKFcRX%9$7(69K@%i*G*vmYi}n*c`Tgaizlpo=PYbs{mwbYM}j8&Wgeid{6j{eI-P0$e5z+jLbOfM<^8@LQJI(OL%v?Ccm z6Xur3VIgul8#kLe7jPgnPGS$bkuoXFEsec(+=u1}b8&UBEud+>9D+jlKK9@Va9};a zdoVw2>|NZ(pI8BS9yZ>6yo*D;kLP>;?ZpxNE@0n`OjwfWFi9qm8#n8Al1yiWuiuDI mf$Ua3&9N~_33DioNRw268~X^FXng+{po4=o#i&8-0PG*2FH_9` literal 0 HcmV?d00001 diff --git a/Parser/LR1Table/__pycache__/LR1Table.cpython-310.pyc b/Parser/LR1Table/__pycache__/LR1Table.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eed37cee2db07c1e2b05e7f766c6e87777aaec66 GIT binary patch literal 5542 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 Uz4>&%=is{1Z((`nStDou3$0GMy#N3J literal 0 HcmV?d00001 diff --git a/Parser/LR1Table/__pycache__/LR1Table.cpython-39.pyc b/Parser/LR1Table/__pycache__/LR1Table.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a25edd7ff0c6c61aa8aea4d0d8e45d227cac0b8a GIT binary patch literal 5540 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 literal 0 HcmV?d00001 diff --git a/Parser/LR1Table/__pycache__/__init__.cpython-310.pyc b/Parser/LR1Table/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1deb15b314ba31d010675b70b307a1b7f76b0076 GIT binary patch literal 185 zcmd1j<>g`k0s~E{R4E|+7{oyaOhAqU5Elyoi4=wu#vF!RhA0L`h7_h?22JLdj6mU) zjJH^F6EpMtia@GYG8C}@DKPQNSwFNmwWwG>D>JVuBfnJNv7jI)GdZy&Ge56bKfuSp zIX|}`Gbgo3KOnIPs8HW0$S@=^DJNAwK0Y%qvm`!Vub}c4hfQvNN@-529muj`kR1XH E0AIc;-T(jq literal 0 HcmV?d00001 diff --git a/Parser/LR1Table/__pycache__/__init__.cpython-39.pyc b/Parser/LR1Table/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f6943386ec843ce4ab56433f397a053915acc16a GIT binary patch literal 183 zcmYe~<>g`k0s~E{R4E|+7{oyaOhAqU5Elyoi4=wu#vF!RhA0L`h7_h?22JLdj6mU) zjJH^F6EpMtia@GYG8C}@DKPQNSwFNmwWwG>D>JVuBfnJNv7jI)GdZy&Ge56bKfuSp zIX|}`Gbgo3KOnIPs8HW0$S@=^DJNAwK0Y%qvm`!Vub}c4hfQvNN@-529mulJK+FID D0(dJv literal 0 HcmV?d00001 diff --git a/Parser/LR1Table/__pycache__/main.cpython-310.pyc b/Parser/LR1Table/__pycache__/main.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e8010a4ad6bb36eb375115a55b25cbd44aa4b113 GIT binary patch literal 489 zcmYjNJx{|h6trWfO-qWpfe>QP(zJWUhdLmns;VemA|%T+rUdLHa?$~mPUX+^FL`C+ zFR;LKP^&)ap6=Pc)A?ncP8&h>gEMi05&E*jVL32d1BxNE7{yp3g(Iw-$ia4YBvCY? zz)4I$QRIq7?7lhrT)2X6Fq}7LHG<|hIH0X#j&4Odz8^gBCn-!DhMLXq0&M)H=1OtR zo)ak+kY`^Mn8gTCTtF*Pg*Nz+tnu1elM+|Baw@VRHq{ITc%p6efSS&sCo>JcD3dIW z=rSv_s3rA)l{U#1X%7THSK+)6x(HvB^y4L4g*SOFlLfb$BAkx|_VRZ_Epcs3oA(%Zv9>EV9%J@~u}RR3PXE=tow~PMgC_7+TcvSVWg-i0t@aKn hSAwxR=|OAN{zH|;D=9AR+6o_97x~yDp6g@!`v(?9a@zm^ literal 0 HcmV?d00001 diff --git a/Parser/LR1Table/__pycache__/main.cpython-39.pyc b/Parser/LR1Table/__pycache__/main.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e2aeb9b252356cbbc7164095698dbcb4a59b4db4 GIT binary patch literal 481 zcmYjNJx{|h5cOBuw6ur~#K4}VX(a{*#D_W{q^hcbE)kMt8dCyx5;^GrN~iK?`j@gY z@fVo5D=O+qcY0^vdwxFE?Y0R-KRDKhl#nlMc7s841zDUyiAhWiu{5HVMT}z447VZ@ zfO#xFN#yB9?7cB}sy!`M6wVv>BxrsEo2*&AccatM-QYnz8C|!b*`VodK(Fd?5T>hSNg3B79BKkC$u_Ugx<O4);Bu{sQ;KaRC4T literal 0 HcmV?d00001 diff --git a/Parser/__pycache__/__init__.cpython-310.pyc b/Parser/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bf65c56e0443d1fefa93385c670d41226503ba9b GIT binary patch literal 246 zcmYjLy$ZrG5Kd|ZQ47xE3v@BMiiqMWBK|BL4ABNWNt2MYgT9fk)YZvXaPp#y2lw4~ z-+gzSNs>0f7^QuA#QF@)e?-{KG5r7`CplH5pjkwJyn#GM9_>ilcu};Zw2lh_dYv}2 zWVIdd#YxFwP+T}wcak)7V74~*X=N}!g=W)#5K|Vh4+LVQ1a{w`hGDL vTUe{$EJ`riv(0L>G=&8v9ou|&8Rwv(S8HwnJL~voB5n(T_$O6j|E?6#DOwuKZxFi$%+>u;( zVo&&De`QDRb}bOC6^pzbyAAf<*7igPY+rPveHn;@uPpVEY@y#JrI5)3GsDA6$czkz zC^v(G0@aXvFsm0q)MP@>EhAaYS9C=mlLdJ|LOMHy?Te>BTzvP-v)fh(f%c^?RRJQdPZ4 zn$J&*S?~R_%+g^}r$t`%?w|DU71I(NsNSqjv+B6~R(Hn|Ts2@Hv@GGrUCE;P!@DSVzRJ6(gg!)2?O6CWNIJwRe+)e;tAKhlG*6mvO%U1SQdhq z=4l9&Zi|LI+PH^l_~HIGz?_hVbhkjvvmFY`w#(T4|Q%wd#Vm zop^XB3WF--Iwo3SeI7ZYX664;eHV`HqB^n+^?Ae_;v=enwJROrNe8e7lArO&75jj7 zpq-OqJeEo^a5F?WHv@HCH1NI*N(}%Dx-{?#l-3yd88ZVi8)*7SA*VyYwkTz;=}7x^ zQ72iPr8zKi*j#EATB-x*OvD`oO!0`y4VVV(paHwnWVpq8h*35Jv&4%rS>6FcdSP&**JU{m@k}fj4yvgti~4w3ZE7 zFuN-vt!vR7_NUj1(e@~tRj25|l;hJrypnmaF2`(MBjCUIy)Eqx@PehC(;7+wj#0N8GGx=YFCfeB_;c z`sQcJmzj*bu}Yu^sA?XpwYQGTtgr18`3)TO&FAC1oYm33(Lb5hXatR?#=1oQ;=7zC zX%4Nht&lFJOEqv{O3|Jwil#Rh8C;4%|c;?qr;GY;W6P zAo z$0ps|6O5bVWig$<#h` zBp0q|3s3B=?Xb07^F?RPLidW@1-reqUC{&E6a8>c`eOgSrM{CLymv(@MDi&Ku3bV@ zWH>^(859)AgxrN$z6hcsQ+j3@$tu34Yx;;R34BfG*I@hN@edc@{(8Co{m&nN{_D42 zE*_r-wzl$8^CGTJG@s^4rduLWSv-^4jiPaq$|wqG=oc!V%25^J!E>Szt0zZ;&r7Mw z!8FMhC;5Eveo>^!D6Wz`D+l+EkM8EP0xnR4d6lH)VeyUbPb6G%IKs&?69&@nk8AK_TjQC z{)}gIs*u?jR*Ctz)Y$)z;@fa&hawpfo(C9$olNGG@#0@LwF>rt=njiRqlt3eo@`vlYWom(W0% z)Vo0U27YUJSz~Xa)=peN1%%;^dKn|`p?HScPLe^xSFi2@yiOOLCct`c7`O_b8uc6s ztc)@M80Nl#CN`RS6UFZK9gz=U13xwObZOUixxzK=+=~@B58dNWZhjVjnaa?es2KWO zl?%VoZXFisk+zTJ*Kp7?e;;MVybAY>{_(s*!>@0utxIGqcHt~eGI;8`3JGFfp&ATy z9=27U*Kc1 Date: Sun, 1 Oct 2023 23:19:03 -0400 Subject: [PATCH 2/9] update --- Lexer/main.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Lexer/main.py b/Lexer/main.py index d1b24a5..34bf52a 100644 --- a/Lexer/main.py +++ b/Lexer/main.py @@ -5,7 +5,8 @@ def main(): for file in os.listdir(lexer_input_dir): - with open(lexer_input_dir + "./" + file, "r") as input_file: + # with open(lexer_input_dir + "./" + file, "r") as input_file: + with open(os.path.join(lexer_input_dir, file), "r") as input_file: output_file = lexer_output_dir + "./" + file.split(".")[0] + ".out" if os.path.exists(output_file): os.remove(output_file) From 5bf9e74cd05477cd2b731ce85aee124c38efc0c2 Mon Sep 17 00:00:00 2001 From: JinZhou5042 Date: Sun, 1 Oct 2023 23:21:38 -0400 Subject: [PATCH 3/9] update --- Lexer/main.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Lexer/main.py b/Lexer/main.py index 34bf52a..f6b4d3b 100644 --- a/Lexer/main.py +++ b/Lexer/main.py @@ -7,7 +7,8 @@ def main(): for file in os.listdir(lexer_input_dir): # with open(lexer_input_dir + "./" + file, "r") as input_file: with open(os.path.join(lexer_input_dir, file), "r") as input_file: - output_file = lexer_output_dir + "./" + file.split(".")[0] + ".out" + # output_file = lexer_output_dir + "./" + file.split(".")[0] + ".out" + output_file = os.path.join(lexer_output_dir, file.split(".")[0] + ".out") if os.path.exists(output_file): os.remove(output_file) line = input_file.readline() From 0106a7dc1527d3a86b1f25404a04bfd478f5f4a8 Mon Sep 17 00:00:00 2001 From: JinZhou5042 Date: Sun, 1 Oct 2023 23:26:42 -0400 Subject: [PATCH 4/9] update --- Parser/LR1Table/LR1TableUI.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Parser/LR1Table/LR1TableUI.py b/Parser/LR1Table/LR1TableUI.py index 40f9a42..1de1fac 100644 --- a/Parser/LR1Table/LR1TableUI.py +++ b/Parser/LR1Table/LR1TableUI.py @@ -34,7 +34,7 @@ def initUI(self): self.Table.setItem(9, 0, QTableWidgetItem(str(9))) mainlayout = QVBoxLayout() mainlayout.addWidget(self.Table) - self.setLayout(mainlayout) + # self.setLayout(mainlayout) # self.show() pixmap = QPixmap(self.Table.size()) self.Table.render(pixmap) From 5bbd8ee4d17d7c08b137c8a982c06c581daf45a9 Mon Sep 17 00:00:00 2001 From: JinZhou5042 Date: Sun, 1 Oct 2023 23:55:23 -0400 Subject: [PATCH 5/9] replace pyqt5 with wxpython --- Lexer/LexerOutput/PL0_code0.out | 154 ++--- Lexer/LexerOutput/PL0_code1.out | 98 ++-- Lexer/LexerOutput/PL0_code2.out | 120 ++-- Lexer/LexerOutput/PL0_code3.out | 212 +++---- Lexer/LexerOutput/PL0_code4.out | 524 +++++++++--------- Lexer/__pycache__/main.cpython-310.pyc | Bin 834 -> 840 bytes Lexer/__pycache__/main.cpython-39.pyc | Bin 818 -> 824 bytes .../__pycache__/LR1Parser.cpython-310.pyc | Bin 0 -> 9864 bytes .../__pycache__/LR1Parser.cpython-39.pyc | Bin 0 -> 9727 bytes .../__pycache__/Procedure.cpython-310.pyc | Bin 0 -> 3101 bytes .../__pycache__/Procedure.cpython-39.pyc | Bin 0 -> 3112 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 188 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 186 bytes .../__pycache__/main.cpython-310.pyc | Bin 0 -> 1177 bytes .../__pycache__/main.cpython-39.pyc | Bin 0 -> 1163 bytes Parser/LR1Table/GenTable.py | 11 +- Parser/LR1Table/LR1TableUI.py | 52 +- .../__pycache__/GenTable.cpython-310.pyc | Bin 781 -> 774 bytes .../__pycache__/GenTable.cpython-39.pyc | Bin 779 -> 772 bytes .../__pycache__/LR1TableUI.cpython-310.pyc | Bin 0 -> 1572 bytes .../__pycache__/LR1TableUI.cpython-39.pyc | Bin 0 -> 1562 bytes Parser/LR1Table/grammars/mygrammar.txt | 6 + "Parser/ParserOutput\\PL0_code0.out" | 43 ++ "Parser/ParserOutput\\PL0_code1.out" | 22 + "Parser/ParserOutput\\PL0_code2.out" | 33 ++ "Parser/ParserOutput\\PL0_code3.out" | 61 ++ "Parser/ParserOutput\\PL0_code4.out" | 0 Simulator/__pycache__/Machine.cpython-310.pyc | Bin 0 -> 3822 bytes Simulator/__pycache__/Machine.cpython-39.pyc | Bin 3802 -> 3778 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 190 bytes Simulator/__pycache__/__init__.cpython-39.pyc | Bin 212 -> 188 bytes Simulator/__pycache__/main.cpython-310.pyc | Bin 0 -> 689 bytes Simulator/__pycache__/main.cpython-39.pyc | Bin 703 -> 679 bytes __pycache__/utils.cpython-310.pyc | Bin 1819 -> 1820 bytes main.py | 4 +- utils.py | 2 +- 36 files changed, 772 insertions(+), 570 deletions(-) create mode 100644 Parser/LR1Analysis/__pycache__/LR1Parser.cpython-310.pyc create mode 100644 Parser/LR1Analysis/__pycache__/LR1Parser.cpython-39.pyc create mode 100644 Parser/LR1Analysis/__pycache__/Procedure.cpython-310.pyc create mode 100644 Parser/LR1Analysis/__pycache__/Procedure.cpython-39.pyc create mode 100644 Parser/LR1Analysis/__pycache__/__init__.cpython-310.pyc create mode 100644 Parser/LR1Analysis/__pycache__/__init__.cpython-39.pyc create mode 100644 Parser/LR1Analysis/__pycache__/main.cpython-310.pyc create mode 100644 Parser/LR1Analysis/__pycache__/main.cpython-39.pyc create mode 100644 Parser/LR1Table/__pycache__/LR1TableUI.cpython-310.pyc create mode 100644 Parser/LR1Table/__pycache__/LR1TableUI.cpython-39.pyc create mode 100644 Parser/LR1Table/grammars/mygrammar.txt create mode 100644 "Parser/ParserOutput\\PL0_code0.out" create mode 100644 "Parser/ParserOutput\\PL0_code1.out" create mode 100644 "Parser/ParserOutput\\PL0_code2.out" create mode 100644 "Parser/ParserOutput\\PL0_code3.out" create mode 100644 "Parser/ParserOutput\\PL0_code4.out" create mode 100644 Simulator/__pycache__/Machine.cpython-310.pyc create mode 100644 Simulator/__pycache__/__init__.cpython-310.pyc create mode 100644 Simulator/__pycache__/main.cpython-310.pyc diff --git a/Lexer/LexerOutput/PL0_code0.out b/Lexer/LexerOutput/PL0_code0.out index 4435b78..f640101 100644 --- a/Lexer/LexerOutput/PL0_code0.out +++ b/Lexer/LexerOutput/PL0_code0.out @@ -1,77 +1,77 @@ -['CONST', 'const', '-1'] -['IDENTIFIER', 'id', 'a'] -['EQUAL', '=', '-1'] -['NUMBER', 'num', '10'] -['SEMICOLON', ';', '-1'] -['VAR', 'var', '-1'] -['IDENTIFIER', 'id', 'd'] -['COMMA', ',', '-1'] -['IDENTIFIER', 'id', 'e'] -['COMMA', ',', '-1'] -['IDENTIFIER', 'id', 'f'] -['SEMICOLON', ';', '-1'] -['PROCEDURE', 'procedure', '-1'] -['IDENTIFIER', 'id', 'p'] -['SEMICOLON', ';', '-1'] -['VAR', 'var', '-1'] -['IDENTIFIER', 'id', 'g'] -['SEMICOLON', ';', '-1'] -['BEGIN', 'begin', '-1'] -['IDENTIFIER', 'id', 'd'] -['ASSIGN', ':=', '-1'] -['IDENTIFIER', 'id', 'a'] -['TIMES', '*', '-1'] -['NUMBER', 'num', '2'] -['SEMICOLON', ';', '-1'] -['IDENTIFIER', 'id', 'e'] -['ASSIGN', ':=', '-1'] -['IDENTIFIER', 'id', 'a'] -['DIVIDE', '/', '-1'] -['NUMBER', 'num', '3'] -['SEMICOLON', ';', '-1'] -['IF', 'if', '-1'] -['IDENTIFIER', 'id', 'd'] -['LESS_OR_EQUAL', '<=', '-1'] -['IDENTIFIER', 'id', 'e'] -['THEN', 'then', '-1'] -['IDENTIFIER', 'id', 'f'] -['ASSIGN', ':=', '-1'] -['IDENTIFIER', 'id', 'd'] -['PLUS', '+', '-1'] -['IDENTIFIER', 'id', 'e'] -['SEMICOLON', ';', '-1'] -['END', 'end', '-1'] -['SEMICOLON', ';', '-1'] -['BEGIN', 'begin', '-1'] -['READ', 'read', '-1'] -['LEFT_PARENTHESES', '(', '-1'] -['IDENTIFIER', 'id', 'e'] -['COMMA', ',', '-1'] -['IDENTIFIER', 'id', 'f'] -['RIGHT_PARENTHESES', ')', '-1'] -['SEMICOLON', ';', '-1'] -['CALL', 'call', '-1'] -['IDENTIFIER', 'id', 'p'] -['SEMICOLON', ';', '-1'] -['WHILE', 'while', '-1'] -['ODD', 'odd', '-1'] -['IDENTIFIER', 'id', 'd'] -['DO', 'do', '-1'] -['IDENTIFIER', 'id', 'e'] -['ASSIGN', ':=', '-1'] -['MINUS', '-', '-1'] -['IDENTIFIER', 'id', 'e'] -['PLUS', '+', '-1'] -['NUMBER', 'num', '1'] -['SEMICOLON', ';', '-1'] -['WRITE', 'write', '-1'] -['LEFT_PARENTHESES', '(', '-1'] -['IDENTIFIER', 'id', 'e'] -['COMMA', ',', '-1'] -['IDENTIFIER', 'id', 'f'] -['COMMA', ',', '-1'] -['IDENTIFIER', 'id', 'd'] -['RIGHT_PARENTHESES', ')', '-1'] -['SEMICOLON', ';', '-1'] -['END', 'end', '-1'] -['DOT', '.', '-1'] +['CONST', 'const', '-1'] +['IDENTIFIER', 'id', 'a'] +['EQUAL', '=', '-1'] +['NUMBER', 'num', '10'] +['SEMICOLON', ';', '-1'] +['VAR', 'var', '-1'] +['IDENTIFIER', 'id', 'd'] +['COMMA', ',', '-1'] +['IDENTIFIER', 'id', 'e'] +['COMMA', ',', '-1'] +['IDENTIFIER', 'id', 'f'] +['SEMICOLON', ';', '-1'] +['PROCEDURE', 'procedure', '-1'] +['IDENTIFIER', 'id', 'p'] +['SEMICOLON', ';', '-1'] +['VAR', 'var', '-1'] +['IDENTIFIER', 'id', 'g'] +['SEMICOLON', ';', '-1'] +['BEGIN', 'begin', '-1'] +['IDENTIFIER', 'id', 'd'] +['ASSIGN', ':=', '-1'] +['IDENTIFIER', 'id', 'a'] +['TIMES', '*', '-1'] +['NUMBER', 'num', '2'] +['SEMICOLON', ';', '-1'] +['IDENTIFIER', 'id', 'e'] +['ASSIGN', ':=', '-1'] +['IDENTIFIER', 'id', 'a'] +['DIVIDE', '/', '-1'] +['NUMBER', 'num', '3'] +['SEMICOLON', ';', '-1'] +['IF', 'if', '-1'] +['IDENTIFIER', 'id', 'd'] +['LESS_OR_EQUAL', '<=', '-1'] +['IDENTIFIER', 'id', 'e'] +['THEN', 'then', '-1'] +['IDENTIFIER', 'id', 'f'] +['ASSIGN', ':=', '-1'] +['IDENTIFIER', 'id', 'd'] +['PLUS', '+', '-1'] +['IDENTIFIER', 'id', 'e'] +['SEMICOLON', ';', '-1'] +['END', 'end', '-1'] +['SEMICOLON', ';', '-1'] +['BEGIN', 'begin', '-1'] +['READ', 'read', '-1'] +['LEFT_PARENTHESES', '(', '-1'] +['IDENTIFIER', 'id', 'e'] +['COMMA', ',', '-1'] +['IDENTIFIER', 'id', 'f'] +['RIGHT_PARENTHESES', ')', '-1'] +['SEMICOLON', ';', '-1'] +['CALL', 'call', '-1'] +['IDENTIFIER', 'id', 'p'] +['SEMICOLON', ';', '-1'] +['WHILE', 'while', '-1'] +['ODD', 'odd', '-1'] +['IDENTIFIER', 'id', 'd'] +['DO', 'do', '-1'] +['IDENTIFIER', 'id', 'e'] +['ASSIGN', ':=', '-1'] +['MINUS', '-', '-1'] +['IDENTIFIER', 'id', 'e'] +['PLUS', '+', '-1'] +['NUMBER', 'num', '1'] +['SEMICOLON', ';', '-1'] +['WRITE', 'write', '-1'] +['LEFT_PARENTHESES', '(', '-1'] +['IDENTIFIER', 'id', 'e'] +['COMMA', ',', '-1'] +['IDENTIFIER', 'id', 'f'] +['COMMA', ',', '-1'] +['IDENTIFIER', 'id', 'd'] +['RIGHT_PARENTHESES', ')', '-1'] +['SEMICOLON', ';', '-1'] +['END', 'end', '-1'] +['DOT', '.', '-1'] diff --git a/Lexer/LexerOutput/PL0_code1.out b/Lexer/LexerOutput/PL0_code1.out index d015c05..23dabc6 100644 --- a/Lexer/LexerOutput/PL0_code1.out +++ b/Lexer/LexerOutput/PL0_code1.out @@ -1,49 +1,49 @@ -['CONST', 'const', '-1'] -['IDENTIFIER', 'id', 'a'] -['EQUAL', '=', '-1'] -['NUMBER', 'num', '10'] -['SEMICOLON', ';', '-1'] -['VAR', 'var', '-1'] -['IDENTIFIER', 'id', 'b'] -['COMMA', ',', '-1'] -['IDENTIFIER', 'id', 'c'] -['SEMICOLON', ';', '-1'] -['PROCEDURE', 'procedure', '-1'] -['IDENTIFIER', 'id', 'p'] -['SEMICOLON', ';', '-1'] -['BEGIN', 'begin', '-1'] -['IDENTIFIER', 'id', 'c'] -['ASSIGN', ':=', '-1'] -['IDENTIFIER', 'id', 'b'] -['PLUS', '+', '-1'] -['IDENTIFIER', 'id', 'a'] -['END', 'end', '-1'] -['SEMICOLON', ';', '-1'] -['BEGIN', 'begin', '-1'] -['READ', 'read', '-1'] -['LEFT_PARENTHESES', '(', '-1'] -['IDENTIFIER', 'id', 'b'] -['RIGHT_PARENTHESES', ')', '-1'] -['SEMICOLON', ';', '-1'] -['WHILE', 'while', '-1'] -['IDENTIFIER', 'id', 'b'] -['NEQUAL', '#', '-1'] -['NUMBER', 'num', '0'] -['DO', 'do', '-1'] -['BEGIN', 'begin', '-1'] -['CALL', 'call', '-1'] -['IDENTIFIER', 'id', 'p'] -['SEMICOLON', ';', '-1'] -['WRITE', 'write', '-1'] -['LEFT_PARENTHESES', '(', '-1'] -['IDENTIFIER', 'id', 'c'] -['RIGHT_PARENTHESES', ')', '-1'] -['SEMICOLON', ';', '-1'] -['READ', 'read', '-1'] -['LEFT_PARENTHESES', '(', '-1'] -['IDENTIFIER', 'id', 'b'] -['RIGHT_PARENTHESES', ')', '-1'] -['SEMICOLON', ';', '-1'] -['END', 'end', '-1'] -['END', 'end', '-1'] -['DOT', '.', '-1'] +['CONST', 'const', '-1'] +['IDENTIFIER', 'id', 'a'] +['EQUAL', '=', '-1'] +['NUMBER', 'num', '10'] +['SEMICOLON', ';', '-1'] +['VAR', 'var', '-1'] +['IDENTIFIER', 'id', 'b'] +['COMMA', ',', '-1'] +['IDENTIFIER', 'id', 'c'] +['SEMICOLON', ';', '-1'] +['PROCEDURE', 'procedure', '-1'] +['IDENTIFIER', 'id', 'p'] +['SEMICOLON', ';', '-1'] +['BEGIN', 'begin', '-1'] +['IDENTIFIER', 'id', 'c'] +['ASSIGN', ':=', '-1'] +['IDENTIFIER', 'id', 'b'] +['PLUS', '+', '-1'] +['IDENTIFIER', 'id', 'a'] +['END', 'end', '-1'] +['SEMICOLON', ';', '-1'] +['BEGIN', 'begin', '-1'] +['READ', 'read', '-1'] +['LEFT_PARENTHESES', '(', '-1'] +['IDENTIFIER', 'id', 'b'] +['RIGHT_PARENTHESES', ')', '-1'] +['SEMICOLON', ';', '-1'] +['WHILE', 'while', '-1'] +['IDENTIFIER', 'id', 'b'] +['NEQUAL', '#', '-1'] +['NUMBER', 'num', '0'] +['DO', 'do', '-1'] +['BEGIN', 'begin', '-1'] +['CALL', 'call', '-1'] +['IDENTIFIER', 'id', 'p'] +['SEMICOLON', ';', '-1'] +['WRITE', 'write', '-1'] +['LEFT_PARENTHESES', '(', '-1'] +['IDENTIFIER', 'id', 'c'] +['RIGHT_PARENTHESES', ')', '-1'] +['SEMICOLON', ';', '-1'] +['READ', 'read', '-1'] +['LEFT_PARENTHESES', '(', '-1'] +['IDENTIFIER', 'id', 'b'] +['RIGHT_PARENTHESES', ')', '-1'] +['SEMICOLON', ';', '-1'] +['END', 'end', '-1'] +['END', 'end', '-1'] +['DOT', '.', '-1'] diff --git a/Lexer/LexerOutput/PL0_code2.out b/Lexer/LexerOutput/PL0_code2.out index 96b3663..21b3217 100644 --- a/Lexer/LexerOutput/PL0_code2.out +++ b/Lexer/LexerOutput/PL0_code2.out @@ -1,60 +1,60 @@ -['VAR', 'var', '-1'] -['IDENTIFIER', 'id', 'x'] -['COMMA', ',', '-1'] -['IDENTIFIER', 'id', 'squ'] -['SEMICOLON', ';', '-1'] -['PROCEDURE', 'procedure', '-1'] -['IDENTIFIER', 'id', 'minus'] -['SEMICOLON', ';', '-1'] -['BEGIN', 'begin', '-1'] -['IDENTIFIER', 'id', 'x'] -['ASSIGN', ':=', '-1'] -['IDENTIFIER', 'id', 'x'] -['PLUS', '+', '-1'] -['NUMBER', 'num', '1'] -['SEMICOLON', ';', '-1'] -['END', 'end', '-1'] -['SEMICOLON', ';', '-1'] -['PROCEDURE', 'procedure', '-1'] -['IDENTIFIER', 'id', 'square'] -['SEMICOLON', ';', '-1'] -['BEGIN', 'begin', '-1'] -['CALL', 'call', '-1'] -['IDENTIFIER', 'id', 'minus'] -['SEMICOLON', ';', '-1'] -['IDENTIFIER', 'id', 'squ'] -['ASSIGN', ':=', '-1'] -['IDENTIFIER', 'id', 'x'] -['TIMES', '*', '-1'] -['IDENTIFIER', 'id', 'x'] -['END', 'end', '-1'] -['SEMICOLON', ';', '-1'] -['BEGIN', 'begin', '-1'] -['IDENTIFIER', 'id', 'x'] -['ASSIGN', ':=', '-1'] -['NUMBER', 'num', '1'] -['SEMICOLON', ';', '-1'] -['WHILE', 'while', '-1'] -['IDENTIFIER', 'id', 'x'] -['LESS_OR_EQUAL', '<=', '-1'] -['NUMBER', 'num', '100'] -['DO', 'do', '-1'] -['BEGIN', 'begin', '-1'] -['CALL', 'call', '-1'] -['IDENTIFIER', 'id', 'square'] -['SEMICOLON', ';', '-1'] -['WRITE', 'write', '-1'] -['LEFT_PARENTHESES', '(', '-1'] -['IDENTIFIER', 'id', 'squ'] -['RIGHT_PARENTHESES', ')', '-1'] -['SEMICOLON', ';', '-1'] -['IDENTIFIER', 'id', 'x'] -['ASSIGN', ':=', '-1'] -['NUMBER', 'num', '2'] -['TIMES', '*', '-1'] -['IDENTIFIER', 'id', 'x'] -['PLUS', '+', '-1'] -['NUMBER', 'num', '1'] -['END', 'end', '-1'] -['END', 'end', '-1'] -['DOT', '.', '-1'] +['VAR', 'var', '-1'] +['IDENTIFIER', 'id', 'x'] +['COMMA', ',', '-1'] +['IDENTIFIER', 'id', 'squ'] +['SEMICOLON', ';', '-1'] +['PROCEDURE', 'procedure', '-1'] +['IDENTIFIER', 'id', 'minus'] +['SEMICOLON', ';', '-1'] +['BEGIN', 'begin', '-1'] +['IDENTIFIER', 'id', 'x'] +['ASSIGN', ':=', '-1'] +['IDENTIFIER', 'id', 'x'] +['PLUS', '+', '-1'] +['NUMBER', 'num', '1'] +['SEMICOLON', ';', '-1'] +['END', 'end', '-1'] +['SEMICOLON', ';', '-1'] +['PROCEDURE', 'procedure', '-1'] +['IDENTIFIER', 'id', 'square'] +['SEMICOLON', ';', '-1'] +['BEGIN', 'begin', '-1'] +['CALL', 'call', '-1'] +['IDENTIFIER', 'id', 'minus'] +['SEMICOLON', ';', '-1'] +['IDENTIFIER', 'id', 'squ'] +['ASSIGN', ':=', '-1'] +['IDENTIFIER', 'id', 'x'] +['TIMES', '*', '-1'] +['IDENTIFIER', 'id', 'x'] +['END', 'end', '-1'] +['SEMICOLON', ';', '-1'] +['BEGIN', 'begin', '-1'] +['IDENTIFIER', 'id', 'x'] +['ASSIGN', ':=', '-1'] +['NUMBER', 'num', '1'] +['SEMICOLON', ';', '-1'] +['WHILE', 'while', '-1'] +['IDENTIFIER', 'id', 'x'] +['LESS_OR_EQUAL', '<=', '-1'] +['NUMBER', 'num', '100'] +['DO', 'do', '-1'] +['BEGIN', 'begin', '-1'] +['CALL', 'call', '-1'] +['IDENTIFIER', 'id', 'square'] +['SEMICOLON', ';', '-1'] +['WRITE', 'write', '-1'] +['LEFT_PARENTHESES', '(', '-1'] +['IDENTIFIER', 'id', 'squ'] +['RIGHT_PARENTHESES', ')', '-1'] +['SEMICOLON', ';', '-1'] +['IDENTIFIER', 'id', 'x'] +['ASSIGN', ':=', '-1'] +['NUMBER', 'num', '2'] +['TIMES', '*', '-1'] +['IDENTIFIER', 'id', 'x'] +['PLUS', '+', '-1'] +['NUMBER', 'num', '1'] +['END', 'end', '-1'] +['END', 'end', '-1'] +['DOT', '.', '-1'] diff --git a/Lexer/LexerOutput/PL0_code3.out b/Lexer/LexerOutput/PL0_code3.out index 18c0775..206f4df 100644 --- a/Lexer/LexerOutput/PL0_code3.out +++ b/Lexer/LexerOutput/PL0_code3.out @@ -1,106 +1,106 @@ -['CONST', 'const', '-1'] -['IDENTIFIER', 'id', 'max'] -['EQUAL', '=', '-1'] -['NUMBER', 'num', '100'] -['SEMICOLON', ';', '-1'] -['VAR', 'var', '-1'] -['IDENTIFIER', 'id', 'arg'] -['COMMA', ',', '-1'] -['IDENTIFIER', 'id', 'ret'] -['SEMICOLON', ';', '-1'] -['PROCEDURE', 'procedure', '-1'] -['IDENTIFIER', 'id', 'isprime'] -['SEMICOLON', ';', '-1'] -['VAR', 'var', '-1'] -['IDENTIFIER', 'id', 'i'] -['COMMA', ',', '-1'] -['IDENTIFIER', 'id', 'j'] -['SEMICOLON', ';', '-1'] -['BEGIN', 'begin', '-1'] -['IDENTIFIER', 'id', 'ret'] -['ASSIGN', ':=', '-1'] -['NUMBER', 'num', '1'] -['SEMICOLON', ';', '-1'] -['IDENTIFIER', 'id', 'i'] -['ASSIGN', ':=', '-1'] -['NUMBER', 'num', '2'] -['SEMICOLON', ';', '-1'] -['WHILE', 'while', '-1'] -['IDENTIFIER', 'id', 'i'] -['LESS', '<', '-1'] -['IDENTIFIER', 'id', 'arg'] -['DO', 'do', '-1'] -['BEGIN', 'begin', '-1'] -['IF', 'if', '-1'] -['IDENTIFIER', 'id', 'arg'] -['DIVIDE', '/', '-1'] -['IDENTIFIER', 'id', 'i'] -['TIMES', '*', '-1'] -['IDENTIFIER', 'id', 'i'] -['EQUAL', '=', '-1'] -['IDENTIFIER', 'id', 'arg'] -['THEN', 'then', '-1'] -['BEGIN', 'begin', '-1'] -['IDENTIFIER', 'id', 'ret'] -['ASSIGN', ':=', '-1'] -['NUMBER', 'num', '0'] -['SEMICOLON', ';', '-1'] -['IDENTIFIER', 'id', 'i'] -['ASSIGN', ':=', '-1'] -['IDENTIFIER', 'id', 'arg'] -['END', 'end', '-1'] -['SEMICOLON', ';', '-1'] -['IDENTIFIER', 'id', 'i'] -['ASSIGN', ':=', '-1'] -['IDENTIFIER', 'id', 'i'] -['PLUS', '+', '-1'] -['NUMBER', 'num', '1'] -['SEMICOLON', ';', '-1'] -['IDENTIFIER', 'id', 'j'] -['ASSIGN', ':=', '-1'] -['IDENTIFIER', 'id', 'i'] -['PLUS', '+', '-1'] -['IDENTIFIER', 'id', 'j'] -['PLUS', '+', '-1'] -['NUMBER', 'num', '2'] -['END', 'end', '-1'] -['END', 'end', '-1'] -['SEMICOLON', ';', '-1'] -['PROCEDURE', 'procedure', '-1'] -['IDENTIFIER', 'id', 'primes'] -['SEMICOLON', ';', '-1'] -['BEGIN', 'begin', '-1'] -['IDENTIFIER', 'id', 'arg'] -['ASSIGN', ':=', '-1'] -['NUMBER', 'num', '2'] -['SEMICOLON', ';', '-1'] -['WHILE', 'while', '-1'] -['IDENTIFIER', 'id', 'arg'] -['LESS_OR_EQUAL', '<=', '-1'] -['IDENTIFIER', 'id', 'max'] -['DO', 'do', '-1'] -['BEGIN', 'begin', '-1'] -['CALL', 'call', '-1'] -['IDENTIFIER', 'id', 'isprime'] -['SEMICOLON', ';', '-1'] -['IF', 'if', '-1'] -['IDENTIFIER', 'id', 'ret'] -['EQUAL', '=', '-1'] -['NUMBER', 'num', '1'] -['THEN', 'then', '-1'] -['WRITE', 'write', '-1'] -['LEFT_PARENTHESES', '(', '-1'] -['IDENTIFIER', 'id', 'arg'] -['RIGHT_PARENTHESES', ')', '-1'] -['SEMICOLON', ';', '-1'] -['IDENTIFIER', 'id', 'arg'] -['ASSIGN', ':=', '-1'] -['IDENTIFIER', 'id', 'arg'] -['PLUS', '+', '-1'] -['NUMBER', 'num', '1'] -['END', 'end', '-1'] -['END', 'end', '-1'] -['SEMICOLON', ';', '-1'] -['CALL', 'call', '-1'] -['IDENTIFIER', 'id', 'primes'] -['DOT', '.', '-1'] +['CONST', 'const', '-1'] +['IDENTIFIER', 'id', 'max'] +['EQUAL', '=', '-1'] +['NUMBER', 'num', '100'] +['SEMICOLON', ';', '-1'] +['VAR', 'var', '-1'] +['IDENTIFIER', 'id', 'arg'] +['COMMA', ',', '-1'] +['IDENTIFIER', 'id', 'ret'] +['SEMICOLON', ';', '-1'] +['PROCEDURE', 'procedure', '-1'] +['IDENTIFIER', 'id', 'isprime'] +['SEMICOLON', ';', '-1'] +['VAR', 'var', '-1'] +['IDENTIFIER', 'id', 'i'] +['COMMA', ',', '-1'] +['IDENTIFIER', 'id', 'j'] +['SEMICOLON', ';', '-1'] +['BEGIN', 'begin', '-1'] +['IDENTIFIER', 'id', 'ret'] +['ASSIGN', ':=', '-1'] +['NUMBER', 'num', '1'] +['SEMICOLON', ';', '-1'] +['IDENTIFIER', 'id', 'i'] +['ASSIGN', ':=', '-1'] +['NUMBER', 'num', '2'] +['SEMICOLON', ';', '-1'] +['WHILE', 'while', '-1'] +['IDENTIFIER', 'id', 'i'] +['LESS', '<', '-1'] +['IDENTIFIER', 'id', 'arg'] +['DO', 'do', '-1'] +['BEGIN', 'begin', '-1'] +['IF', 'if', '-1'] +['IDENTIFIER', 'id', 'arg'] +['DIVIDE', '/', '-1'] +['IDENTIFIER', 'id', 'i'] +['TIMES', '*', '-1'] +['IDENTIFIER', 'id', 'i'] +['EQUAL', '=', '-1'] +['IDENTIFIER', 'id', 'arg'] +['THEN', 'then', '-1'] +['BEGIN', 'begin', '-1'] +['IDENTIFIER', 'id', 'ret'] +['ASSIGN', ':=', '-1'] +['NUMBER', 'num', '0'] +['SEMICOLON', ';', '-1'] +['IDENTIFIER', 'id', 'i'] +['ASSIGN', ':=', '-1'] +['IDENTIFIER', 'id', 'arg'] +['END', 'end', '-1'] +['SEMICOLON', ';', '-1'] +['IDENTIFIER', 'id', 'i'] +['ASSIGN', ':=', '-1'] +['IDENTIFIER', 'id', 'i'] +['PLUS', '+', '-1'] +['NUMBER', 'num', '1'] +['SEMICOLON', ';', '-1'] +['IDENTIFIER', 'id', 'j'] +['ASSIGN', ':=', '-1'] +['IDENTIFIER', 'id', 'i'] +['PLUS', '+', '-1'] +['IDENTIFIER', 'id', 'j'] +['PLUS', '+', '-1'] +['NUMBER', 'num', '2'] +['END', 'end', '-1'] +['END', 'end', '-1'] +['SEMICOLON', ';', '-1'] +['PROCEDURE', 'procedure', '-1'] +['IDENTIFIER', 'id', 'primes'] +['SEMICOLON', ';', '-1'] +['BEGIN', 'begin', '-1'] +['IDENTIFIER', 'id', 'arg'] +['ASSIGN', ':=', '-1'] +['NUMBER', 'num', '2'] +['SEMICOLON', ';', '-1'] +['WHILE', 'while', '-1'] +['IDENTIFIER', 'id', 'arg'] +['LESS_OR_EQUAL', '<=', '-1'] +['IDENTIFIER', 'id', 'max'] +['DO', 'do', '-1'] +['BEGIN', 'begin', '-1'] +['CALL', 'call', '-1'] +['IDENTIFIER', 'id', 'isprime'] +['SEMICOLON', ';', '-1'] +['IF', 'if', '-1'] +['IDENTIFIER', 'id', 'ret'] +['EQUAL', '=', '-1'] +['NUMBER', 'num', '1'] +['THEN', 'then', '-1'] +['WRITE', 'write', '-1'] +['LEFT_PARENTHESES', '(', '-1'] +['IDENTIFIER', 'id', 'arg'] +['RIGHT_PARENTHESES', ')', '-1'] +['SEMICOLON', ';', '-1'] +['IDENTIFIER', 'id', 'arg'] +['ASSIGN', ':=', '-1'] +['IDENTIFIER', 'id', 'arg'] +['PLUS', '+', '-1'] +['NUMBER', 'num', '1'] +['END', 'end', '-1'] +['END', 'end', '-1'] +['SEMICOLON', ';', '-1'] +['CALL', 'call', '-1'] +['IDENTIFIER', 'id', 'primes'] +['DOT', '.', '-1'] diff --git a/Lexer/LexerOutput/PL0_code4.out b/Lexer/LexerOutput/PL0_code4.out index 6cb55ec..9c181b9 100644 --- a/Lexer/LexerOutput/PL0_code4.out +++ b/Lexer/LexerOutput/PL0_code4.out @@ -1,262 +1,262 @@ -['VAR', 'var', '-1'] -['IDENTIFIER', 'id', 'x'] -['COMMA', ',', '-1'] -['IDENTIFIER', 'id', 'y'] -['COMMA', ',', '-1'] -['IDENTIFIER', 'id', 'z'] -['COMMA', ',', '-1'] -['IDENTIFIER', 'id', 'q'] -['COMMA', ',', '-1'] -['IDENTIFIER', 'id', 'r'] -['COMMA', ',', '-1'] -['IDENTIFIER', 'id', 'n'] -['COMMA', ',', '-1'] -['IDENTIFIER', 'id', 'f'] -['SEMICOLON', ';', '-1'] -['PROCEDURE', 'procedure', '-1'] -['IDENTIFIER', 'id', 'multiply'] -['SEMICOLON', ';', '-1'] -['VAR', 'var', '-1'] -['IDENTIFIER', 'id', 'a'] -['COMMA', ',', '-1'] -['IDENTIFIER', 'id', 'b'] -['SEMICOLON', ';', '-1'] -['BEGIN', 'begin', '-1'] -['IDENTIFIER', 'id', 'a'] -['ASSIGN', ':=', '-1'] -['IDENTIFIER', 'id', 'x'] -['SEMICOLON', ';', '-1'] -['IDENTIFIER', 'id', 'b'] -['ASSIGN', ':=', '-1'] -['IDENTIFIER', 'id', 'y'] -['SEMICOLON', ';', '-1'] -['IDENTIFIER', 'id', 'z'] -['ASSIGN', ':=', '-1'] -['IDENTIFIER', 'id', 'x'] -['TIMES', '*', '-1'] -['IDENTIFIER', 'id', 'y'] -['END', 'end', '-1'] -['SEMICOLON', ';', '-1'] -['PROCEDURE', 'procedure', '-1'] -['IDENTIFIER', 'id', 'divide'] -['SEMICOLON', ';', '-1'] -['VAR', 'var', '-1'] -['IDENTIFIER', 'id', 'w'] -['SEMICOLON', ';', '-1'] -['BEGIN', 'begin', '-1'] -['IDENTIFIER', 'id', 'r'] -['ASSIGN', ':=', '-1'] -['IDENTIFIER', 'id', 'x'] -['SEMICOLON', ';', '-1'] -['IDENTIFIER', 'id', 'q'] -['ASSIGN', ':=', '-1'] -['NUMBER', 'num', '0'] -['SEMICOLON', ';', '-1'] -['IDENTIFIER', 'id', 'w'] -['ASSIGN', ':=', '-1'] -['IDENTIFIER', 'id', 'y'] -['SEMICOLON', ';', '-1'] -['WHILE', 'while', '-1'] -['IDENTIFIER', 'id', 'w'] -['LESS_OR_EQUAL', '<=', '-1'] -['IDENTIFIER', 'id', 'r'] -['DO', 'do', '-1'] -['IDENTIFIER', 'id', 'w'] -['ASSIGN', ':=', '-1'] -['NUMBER', 'num', '2'] -['TIMES', '*', '-1'] -['IDENTIFIER', 'id', 'w'] -['SEMICOLON', ';', '-1'] -['WHILE', 'while', '-1'] -['IDENTIFIER', 'id', 'w'] -['GREATER', '>', '-1'] -['IDENTIFIER', 'id', 'y'] -['DO', 'do', '-1'] -['BEGIN', 'begin', '-1'] -['IDENTIFIER', 'id', 'q'] -['ASSIGN', ':=', '-1'] -['NUMBER', 'num', '2'] -['TIMES', '*', '-1'] -['IDENTIFIER', 'id', 'q'] -['SEMICOLON', ';', '-1'] -['IDENTIFIER', 'id', 'w'] -['ASSIGN', ':=', '-1'] -['IDENTIFIER', 'id', 'w'] -['DIVIDE', '/', '-1'] -['NUMBER', 'num', '2'] -['SEMICOLON', ';', '-1'] -['IF', 'if', '-1'] -['IDENTIFIER', 'id', 'w'] -['LESS_OR_EQUAL', '<=', '-1'] -['IDENTIFIER', 'id', 'r'] -['THEN', 'then', '-1'] -['BEGIN', 'begin', '-1'] -['IDENTIFIER', 'id', 'r'] -['ASSIGN', ':=', '-1'] -['IDENTIFIER', 'id', 'r'] -['MINUS', '-', '-1'] -['IDENTIFIER', 'id', 'w'] -['SEMICOLON', ';', '-1'] -['IDENTIFIER', 'id', 'q'] -['ASSIGN', ':=', '-1'] -['IDENTIFIER', 'id', 'q'] -['PLUS', '+', '-1'] -['NUMBER', 'num', '1'] -['END', 'end', '-1'] -['END', 'end', '-1'] -['END', 'end', '-1'] -['SEMICOLON', ';', '-1'] -['PROCEDURE', 'procedure', '-1'] -['IDENTIFIER', 'id', 'gcd'] -['SEMICOLON', ';', '-1'] -['VAR', 'var', '-1'] -['IDENTIFIER', 'id', 'g'] -['SEMICOLON', ';', '-1'] -['BEGIN', 'begin', '-1'] -['IDENTIFIER', 'id', 'f'] -['ASSIGN', ':=', '-1'] -['IDENTIFIER', 'id', 'x'] -['SEMICOLON', ';', '-1'] -['IDENTIFIER', 'id', 'g'] -['ASSIGN', ':=', '-1'] -['IDENTIFIER', 'id', 'y'] -['SEMICOLON', ';', '-1'] -['WHILE', 'while', '-1'] -['IDENTIFIER', 'id', 'f'] -['NEQUAL', '#', '-1'] -['IDENTIFIER', 'id', 'g'] -['DO', 'do', '-1'] -['BEGIN', 'begin', '-1'] -['IF', 'if', '-1'] -['IDENTIFIER', 'id', 'f'] -['LESS', '<', '-1'] -['IDENTIFIER', 'id', 'g'] -['THEN', 'then', '-1'] -['IDENTIFIER', 'id', 'g'] -['ASSIGN', ':=', '-1'] -['IDENTIFIER', 'id', 'g'] -['MINUS', '-', '-1'] -['IDENTIFIER', 'id', 'f'] -['SEMICOLON', ';', '-1'] -['IF', 'if', '-1'] -['IDENTIFIER', 'id', 'g'] -['LESS', '<', '-1'] -['IDENTIFIER', 'id', 'f'] -['THEN', 'then', '-1'] -['IDENTIFIER', 'id', 'f'] -['ASSIGN', ':=', '-1'] -['IDENTIFIER', 'id', 'f'] -['MINUS', '-', '-1'] -['IDENTIFIER', 'id', 'g'] -['END', 'end', '-1'] -['SEMICOLON', ';', '-1'] -['IDENTIFIER', 'id', 'z'] -['ASSIGN', ':=', '-1'] -['IDENTIFIER', 'id', 'f'] -['END', 'end', '-1'] -['SEMICOLON', ';', '-1'] -['PROCEDURE', 'procedure', '-1'] -['IDENTIFIER', 'id', 'fact'] -['SEMICOLON', ';', '-1'] -['BEGIN', 'begin', '-1'] -['IF', 'if', '-1'] -['IDENTIFIER', 'id', 'n'] -['GREATER', '>', '-1'] -['NUMBER', 'num', '1'] -['THEN', 'then', '-1'] -['BEGIN', 'begin', '-1'] -['IDENTIFIER', 'id', 'f'] -['ASSIGN', ':=', '-1'] -['IDENTIFIER', 'id', 'n'] -['TIMES', '*', '-1'] -['IDENTIFIER', 'id', 'f'] -['SEMICOLON', ';', '-1'] -['IDENTIFIER', 'id', 'n'] -['ASSIGN', ':=', '-1'] -['IDENTIFIER', 'id', 'n'] -['MINUS', '-', '-1'] -['NUMBER', 'num', '1'] -['SEMICOLON', ';', '-1'] -['CALL', 'call', '-1'] -['IDENTIFIER', 'id', 'fact'] -['END', 'end', '-1'] -['END', 'end', '-1'] -['SEMICOLON', ';', '-1'] -['BEGIN', 'begin', '-1'] -['READ', 'read', '-1'] -['LEFT_PARENTHESES', '(', '-1'] -['IDENTIFIER', 'id', 'x'] -['RIGHT_PARENTHESES', ')', '-1'] -['SEMICOLON', ';', '-1'] -['READ', 'read', '-1'] -['LEFT_PARENTHESES', '(', '-1'] -['IDENTIFIER', 'id', 'y'] -['RIGHT_PARENTHESES', ')', '-1'] -['SEMICOLON', ';', '-1'] -['CALL', 'call', '-1'] -['IDENTIFIER', 'id', 'multiply'] -['SEMICOLON', ';', '-1'] -['WRITE', 'write', '-1'] -['LEFT_PARENTHESES', '(', '-1'] -['IDENTIFIER', 'id', 'z'] -['RIGHT_PARENTHESES', ')', '-1'] -['SEMICOLON', ';', '-1'] -['READ', 'read', '-1'] -['LEFT_PARENTHESES', '(', '-1'] -['IDENTIFIER', 'id', 'x'] -['RIGHT_PARENTHESES', ')', '-1'] -['SEMICOLON', ';', '-1'] -['READ', 'read', '-1'] -['LEFT_PARENTHESES', '(', '-1'] -['IDENTIFIER', 'id', 'y'] -['RIGHT_PARENTHESES', ')', '-1'] -['SEMICOLON', ';', '-1'] -['CALL', 'call', '-1'] -['IDENTIFIER', 'id', 'divide'] -['SEMICOLON', ';', '-1'] -['WRITE', 'write', '-1'] -['LEFT_PARENTHESES', '(', '-1'] -['IDENTIFIER', 'id', 'q'] -['RIGHT_PARENTHESES', ')', '-1'] -['SEMICOLON', ';', '-1'] -['WRITE', 'write', '-1'] -['LEFT_PARENTHESES', '(', '-1'] -['IDENTIFIER', 'id', 'r'] -['RIGHT_PARENTHESES', ')', '-1'] -['SEMICOLON', ';', '-1'] -['READ', 'read', '-1'] -['LEFT_PARENTHESES', '(', '-1'] -['IDENTIFIER', 'id', 'x'] -['RIGHT_PARENTHESES', ')', '-1'] -['SEMICOLON', ';', '-1'] -['READ', 'read', '-1'] -['LEFT_PARENTHESES', '(', '-1'] -['IDENTIFIER', 'id', 'y'] -['RIGHT_PARENTHESES', ')', '-1'] -['SEMICOLON', ';', '-1'] -['CALL', 'call', '-1'] -['IDENTIFIER', 'id', 'gcd'] -['SEMICOLON', ';', '-1'] -['WRITE', 'write', '-1'] -['LEFT_PARENTHESES', '(', '-1'] -['IDENTIFIER', 'id', 'z'] -['RIGHT_PARENTHESES', ')', '-1'] -['SEMICOLON', ';', '-1'] -['READ', 'read', '-1'] -['LEFT_PARENTHESES', '(', '-1'] -['IDENTIFIER', 'id', 'n'] -['RIGHT_PARENTHESES', ')', '-1'] -['SEMICOLON', ';', '-1'] -['IDENTIFIER', 'id', 'f'] -['ASSIGN', ':=', '-1'] -['NUMBER', 'num', '1'] -['SEMICOLON', ';', '-1'] -['CALL', 'call', '-1'] -['IDENTIFIER', 'id', 'fact'] -['SEMICOLON', ';', '-1'] -['WRITE', 'write', '-1'] -['LEFT_PARENTHESES', '(', '-1'] -['IDENTIFIER', 'id', 'f'] -['RIGHT_PARENTHESES', ')', '-1'] -['END', 'end', '-1'] -['DOT', '.', '-1'] +['VAR', 'var', '-1'] +['IDENTIFIER', 'id', 'x'] +['COMMA', ',', '-1'] +['IDENTIFIER', 'id', 'y'] +['COMMA', ',', '-1'] +['IDENTIFIER', 'id', 'z'] +['COMMA', ',', '-1'] +['IDENTIFIER', 'id', 'q'] +['COMMA', ',', '-1'] +['IDENTIFIER', 'id', 'r'] +['COMMA', ',', '-1'] +['IDENTIFIER', 'id', 'n'] +['COMMA', ',', '-1'] +['IDENTIFIER', 'id', 'f'] +['SEMICOLON', ';', '-1'] +['PROCEDURE', 'procedure', '-1'] +['IDENTIFIER', 'id', 'multiply'] +['SEMICOLON', ';', '-1'] +['VAR', 'var', '-1'] +['IDENTIFIER', 'id', 'a'] +['COMMA', ',', '-1'] +['IDENTIFIER', 'id', 'b'] +['SEMICOLON', ';', '-1'] +['BEGIN', 'begin', '-1'] +['IDENTIFIER', 'id', 'a'] +['ASSIGN', ':=', '-1'] +['IDENTIFIER', 'id', 'x'] +['SEMICOLON', ';', '-1'] +['IDENTIFIER', 'id', 'b'] +['ASSIGN', ':=', '-1'] +['IDENTIFIER', 'id', 'y'] +['SEMICOLON', ';', '-1'] +['IDENTIFIER', 'id', 'z'] +['ASSIGN', ':=', '-1'] +['IDENTIFIER', 'id', 'x'] +['TIMES', '*', '-1'] +['IDENTIFIER', 'id', 'y'] +['END', 'end', '-1'] +['SEMICOLON', ';', '-1'] +['PROCEDURE', 'procedure', '-1'] +['IDENTIFIER', 'id', 'divide'] +['SEMICOLON', ';', '-1'] +['VAR', 'var', '-1'] +['IDENTIFIER', 'id', 'w'] +['SEMICOLON', ';', '-1'] +['BEGIN', 'begin', '-1'] +['IDENTIFIER', 'id', 'r'] +['ASSIGN', ':=', '-1'] +['IDENTIFIER', 'id', 'x'] +['SEMICOLON', ';', '-1'] +['IDENTIFIER', 'id', 'q'] +['ASSIGN', ':=', '-1'] +['NUMBER', 'num', '0'] +['SEMICOLON', ';', '-1'] +['IDENTIFIER', 'id', 'w'] +['ASSIGN', ':=', '-1'] +['IDENTIFIER', 'id', 'y'] +['SEMICOLON', ';', '-1'] +['WHILE', 'while', '-1'] +['IDENTIFIER', 'id', 'w'] +['LESS_OR_EQUAL', '<=', '-1'] +['IDENTIFIER', 'id', 'r'] +['DO', 'do', '-1'] +['IDENTIFIER', 'id', 'w'] +['ASSIGN', ':=', '-1'] +['NUMBER', 'num', '2'] +['TIMES', '*', '-1'] +['IDENTIFIER', 'id', 'w'] +['SEMICOLON', ';', '-1'] +['WHILE', 'while', '-1'] +['IDENTIFIER', 'id', 'w'] +['GREATER', '>', '-1'] +['IDENTIFIER', 'id', 'y'] +['DO', 'do', '-1'] +['BEGIN', 'begin', '-1'] +['IDENTIFIER', 'id', 'q'] +['ASSIGN', ':=', '-1'] +['NUMBER', 'num', '2'] +['TIMES', '*', '-1'] +['IDENTIFIER', 'id', 'q'] +['SEMICOLON', ';', '-1'] +['IDENTIFIER', 'id', 'w'] +['ASSIGN', ':=', '-1'] +['IDENTIFIER', 'id', 'w'] +['DIVIDE', '/', '-1'] +['NUMBER', 'num', '2'] +['SEMICOLON', ';', '-1'] +['IF', 'if', '-1'] +['IDENTIFIER', 'id', 'w'] +['LESS_OR_EQUAL', '<=', '-1'] +['IDENTIFIER', 'id', 'r'] +['THEN', 'then', '-1'] +['BEGIN', 'begin', '-1'] +['IDENTIFIER', 'id', 'r'] +['ASSIGN', ':=', '-1'] +['IDENTIFIER', 'id', 'r'] +['MINUS', '-', '-1'] +['IDENTIFIER', 'id', 'w'] +['SEMICOLON', ';', '-1'] +['IDENTIFIER', 'id', 'q'] +['ASSIGN', ':=', '-1'] +['IDENTIFIER', 'id', 'q'] +['PLUS', '+', '-1'] +['NUMBER', 'num', '1'] +['END', 'end', '-1'] +['END', 'end', '-1'] +['END', 'end', '-1'] +['SEMICOLON', ';', '-1'] +['PROCEDURE', 'procedure', '-1'] +['IDENTIFIER', 'id', 'gcd'] +['SEMICOLON', ';', '-1'] +['VAR', 'var', '-1'] +['IDENTIFIER', 'id', 'g'] +['SEMICOLON', ';', '-1'] +['BEGIN', 'begin', '-1'] +['IDENTIFIER', 'id', 'f'] +['ASSIGN', ':=', '-1'] +['IDENTIFIER', 'id', 'x'] +['SEMICOLON', ';', '-1'] +['IDENTIFIER', 'id', 'g'] +['ASSIGN', ':=', '-1'] +['IDENTIFIER', 'id', 'y'] +['SEMICOLON', ';', '-1'] +['WHILE', 'while', '-1'] +['IDENTIFIER', 'id', 'f'] +['NEQUAL', '#', '-1'] +['IDENTIFIER', 'id', 'g'] +['DO', 'do', '-1'] +['BEGIN', 'begin', '-1'] +['IF', 'if', '-1'] +['IDENTIFIER', 'id', 'f'] +['LESS', '<', '-1'] +['IDENTIFIER', 'id', 'g'] +['THEN', 'then', '-1'] +['IDENTIFIER', 'id', 'g'] +['ASSIGN', ':=', '-1'] +['IDENTIFIER', 'id', 'g'] +['MINUS', '-', '-1'] +['IDENTIFIER', 'id', 'f'] +['SEMICOLON', ';', '-1'] +['IF', 'if', '-1'] +['IDENTIFIER', 'id', 'g'] +['LESS', '<', '-1'] +['IDENTIFIER', 'id', 'f'] +['THEN', 'then', '-1'] +['IDENTIFIER', 'id', 'f'] +['ASSIGN', ':=', '-1'] +['IDENTIFIER', 'id', 'f'] +['MINUS', '-', '-1'] +['IDENTIFIER', 'id', 'g'] +['END', 'end', '-1'] +['SEMICOLON', ';', '-1'] +['IDENTIFIER', 'id', 'z'] +['ASSIGN', ':=', '-1'] +['IDENTIFIER', 'id', 'f'] +['END', 'end', '-1'] +['SEMICOLON', ';', '-1'] +['PROCEDURE', 'procedure', '-1'] +['IDENTIFIER', 'id', 'fact'] +['SEMICOLON', ';', '-1'] +['BEGIN', 'begin', '-1'] +['IF', 'if', '-1'] +['IDENTIFIER', 'id', 'n'] +['GREATER', '>', '-1'] +['NUMBER', 'num', '1'] +['THEN', 'then', '-1'] +['BEGIN', 'begin', '-1'] +['IDENTIFIER', 'id', 'f'] +['ASSIGN', ':=', '-1'] +['IDENTIFIER', 'id', 'n'] +['TIMES', '*', '-1'] +['IDENTIFIER', 'id', 'f'] +['SEMICOLON', ';', '-1'] +['IDENTIFIER', 'id', 'n'] +['ASSIGN', ':=', '-1'] +['IDENTIFIER', 'id', 'n'] +['MINUS', '-', '-1'] +['NUMBER', 'num', '1'] +['SEMICOLON', ';', '-1'] +['CALL', 'call', '-1'] +['IDENTIFIER', 'id', 'fact'] +['END', 'end', '-1'] +['END', 'end', '-1'] +['SEMICOLON', ';', '-1'] +['BEGIN', 'begin', '-1'] +['READ', 'read', '-1'] +['LEFT_PARENTHESES', '(', '-1'] +['IDENTIFIER', 'id', 'x'] +['RIGHT_PARENTHESES', ')', '-1'] +['SEMICOLON', ';', '-1'] +['READ', 'read', '-1'] +['LEFT_PARENTHESES', '(', '-1'] +['IDENTIFIER', 'id', 'y'] +['RIGHT_PARENTHESES', ')', '-1'] +['SEMICOLON', ';', '-1'] +['CALL', 'call', '-1'] +['IDENTIFIER', 'id', 'multiply'] +['SEMICOLON', ';', '-1'] +['WRITE', 'write', '-1'] +['LEFT_PARENTHESES', '(', '-1'] +['IDENTIFIER', 'id', 'z'] +['RIGHT_PARENTHESES', ')', '-1'] +['SEMICOLON', ';', '-1'] +['READ', 'read', '-1'] +['LEFT_PARENTHESES', '(', '-1'] +['IDENTIFIER', 'id', 'x'] +['RIGHT_PARENTHESES', ')', '-1'] +['SEMICOLON', ';', '-1'] +['READ', 'read', '-1'] +['LEFT_PARENTHESES', '(', '-1'] +['IDENTIFIER', 'id', 'y'] +['RIGHT_PARENTHESES', ')', '-1'] +['SEMICOLON', ';', '-1'] +['CALL', 'call', '-1'] +['IDENTIFIER', 'id', 'divide'] +['SEMICOLON', ';', '-1'] +['WRITE', 'write', '-1'] +['LEFT_PARENTHESES', '(', '-1'] +['IDENTIFIER', 'id', 'q'] +['RIGHT_PARENTHESES', ')', '-1'] +['SEMICOLON', ';', '-1'] +['WRITE', 'write', '-1'] +['LEFT_PARENTHESES', '(', '-1'] +['IDENTIFIER', 'id', 'r'] +['RIGHT_PARENTHESES', ')', '-1'] +['SEMICOLON', ';', '-1'] +['READ', 'read', '-1'] +['LEFT_PARENTHESES', '(', '-1'] +['IDENTIFIER', 'id', 'x'] +['RIGHT_PARENTHESES', ')', '-1'] +['SEMICOLON', ';', '-1'] +['READ', 'read', '-1'] +['LEFT_PARENTHESES', '(', '-1'] +['IDENTIFIER', 'id', 'y'] +['RIGHT_PARENTHESES', ')', '-1'] +['SEMICOLON', ';', '-1'] +['CALL', 'call', '-1'] +['IDENTIFIER', 'id', 'gcd'] +['SEMICOLON', ';', '-1'] +['WRITE', 'write', '-1'] +['LEFT_PARENTHESES', '(', '-1'] +['IDENTIFIER', 'id', 'z'] +['RIGHT_PARENTHESES', ')', '-1'] +['SEMICOLON', ';', '-1'] +['READ', 'read', '-1'] +['LEFT_PARENTHESES', '(', '-1'] +['IDENTIFIER', 'id', 'n'] +['RIGHT_PARENTHESES', ')', '-1'] +['SEMICOLON', ';', '-1'] +['IDENTIFIER', 'id', 'f'] +['ASSIGN', ':=', '-1'] +['NUMBER', 'num', '1'] +['SEMICOLON', ';', '-1'] +['CALL', 'call', '-1'] +['IDENTIFIER', 'id', 'fact'] +['SEMICOLON', ';', '-1'] +['WRITE', 'write', '-1'] +['LEFT_PARENTHESES', '(', '-1'] +['IDENTIFIER', 'id', 'f'] +['RIGHT_PARENTHESES', ')', '-1'] +['END', 'end', '-1'] +['DOT', '.', '-1'] diff --git a/Lexer/__pycache__/main.cpython-310.pyc b/Lexer/__pycache__/main.cpython-310.pyc index 3cc4392d9ea367a9f3499f1c013f4028e7316517..e96da91119754b2817b66d1b7a7e15684e88f32c 100644 GIT binary patch delta 362 zcmYk1ze~eV5XbNCz5Hlw3kq#eN;`{FT^!U+x(HHmC?XOHuV6||>dOO{7ZkF%iR2G3 z`6FB%#KFHIe~N?pQXP879e1Da-NC)vpLRQLwLCC(e6TZnVbAT?`!~}mC{R&}CvY`R zK`{k$URa7Wlq4{tr~MTFnXRF4gqam=8wB^wL`o~o)rQJFbE{ET2pS8ogp_F}kJN@{ znlf6a$#4Q<1l)MW5F&R7$>`23)_!3^HH9T?;nb=*)+!CVwN}&>j%Z{YLBKiedT03~ zj)(1v;-qpGVWLDRB{QE@JYLSCiZ7??y5jRVj3lqIl`I#b${9_tlV8$lze_!8qK7W> rzx+)Py{~4&!!4A4{y~QWzg~2MAe!FHfl zhAC`91WizE&R)7P8nIMTOYsbq*eX1$2{AKpW2dEv(z;DOvbYc;Ov@R>JmUJmI1!Ji zXH^Y515hA9oWh(VOl23s-aQ42cS&n1%2p*M3zy2=jI>*8p_Y|Y&RifBTtK_he_(r^ zZ@aa!SQJTkeM4b62@W&^AzLw2@P#}>NiphU66 zU-q>9<4OlNP&bkcOljL0lCqd9%_?YiEGau}J8Y`pcb-OmuIo#Xy-}!6r~nd;_F#Xd-1z&(cKWOUi236@tdXE+OTb#}8^vbImgL zN0&DfkRZk&Ama#Oe+0?%E?{%7NL5F+q#@0^OHtjD*wSvOB~97R1X92`?AWLI6P}HF z6^oL}oCS%JK^${>S0$o_A68=Fsk=%{qach$ja$iL7O4CiCpgG2*oni2YzsSRqlJQW vyQyO*U$OmTr{1t!H}vMd>&64J|76&759X1)pZP~fE~!7*qJ%!T)-C)2$Zk~x delta 345 zcmYjMJ4?e*6h7zPn@7`!4zbaKxLO3Qvuj5Y(V?hF4BUc|nx;2*l7xZ*SCMQ^$xqO! zlRqTC#L<&F=sEE5JvbknmHBD*f^OFVn$d7D{bp~ykL8M#h7vWaa16Ka8ECGVL=RH% zK(d^@-esu8uTvV5S183!lNlalOv8g&S}9$t3+k~OhLB>}svzSjS4ul6PpRk6U0hE< zf}qXE93k2~hU8@gxZW#5-Ik`bq@7brRh^2wg|l{B(w0sxkP0qg*gkt=heyRTo*#5; zHcx767A9JTN^$zD7V~%-DbY|PiD#j%MI7k+g0l&_#SJ_4(8U3E&_Npo;r^Pde(}Xl b_WI48?fX&iIQ4zylKcl-#WvsN8#ev`yl+cj diff --git a/Parser/LR1Analysis/__pycache__/LR1Parser.cpython-310.pyc b/Parser/LR1Analysis/__pycache__/LR1Parser.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..68aeb4558e44e2368f7e99ce69908ddc13583e85 GIT binary patch literal 9864 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 C$X&$% literal 0 HcmV?d00001 diff --git a/Parser/LR1Analysis/__pycache__/LR1Parser.cpython-39.pyc b/Parser/LR1Analysis/__pycache__/LR1Parser.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d3c61e0a283979291d42323438bc922f721e9d99 GIT binary patch literal 9727 zcmb_iU2GfKb)G+xLyDv*S=OJmUfSI@=GO7g?lw(quVYz~y;{hWLdm-urtvJzOUabU zp?qiLwFMasA~*52ZtJ8$P!vHS2Soq_MIRPL9*REoF^@q}1oKp&ebGx^8svd(<9_Gd z;gFQ%AT26;?%aFMxp(fI|9gg&OeUq_?_6QB_Q5qx`!^c&{+SqD!R1{=BQ&8mw5DFx zb?O@pqiL2+^i5$ktfp1A7#?fHn(=a6*RE?KE)tJ5k=QZH31Kg5h2$RA(F%HCFO<%& zRBktF=qIkrO0!v!d%D6Umt?D26PuEd={1FPR_l#gm1g(;85mr_@wFXoTXXbnZC&5x%|ADE%{P6^kNNQ(eK+x3+tGJ`cWltu>q+#I!a$o6#u~u~ z)@X$^w;7?~@n$hdIBSj8?Mg#3TeC8TX9dZP4sU}@MF=MvO4^qsc?VW&qvpyucV(?2 zf@DLUcYKmoFt9;yqz2_t^#BJ8$(rXm)z+r#*JLo@`4zwBpsn5w(%!@7?N%ckWobcL zNsS9eV0pF1YLMv_v-3ieBY1rK`q`UcpLce>?rz;_ZJwRp*l5(N6~Eqcy|YUT=Vn^X z4XA}YtN45t9G`Y8jfY;{qrQTk*?1V(j#GE*zT?LyFnC zYwd|HwhFHLUDO^Xzif{xJVM+KYev!jyTupLo9L}n`vuKr2XH=O0Q(@gOIszupN-LUk(}C)poK2()N!IV8{*4t8zsFhWvUs}f2v4bLy=2s~SbpB|c6bjhw-9aZ5 zydcr-QqVF43CJYdd1P)Q>P~3h1s}1O;_eRe1K&ahKz3#9#)J)uB%GQlQkaG7IVgA) zWE7z&jgBZsrk9uJuNOnlbK%|m+(%0#=9)5+#IdiPyZH9`X8ZVDskB(Ske~Lv`kI^f zTgr{)-Oc9hnmp0AK-gsI1?KX~B8Nm4K_SkLD@d=_UE$n*=(v?;jRg|KHe}uP1FQC+ z?g#O@i%8_Zu-L1~JQxwg8?Ci9ggaB#{QZWP?MS7?)rQ&Uvq_0 z`PX`YAh}&ztGoH-mFbna8*{~#_8a}^p3%iFRY6yZewd$1ci2@$L@(hDy)+ul>PCXC z(Sxia;yz_14;3lvzhDqD>YJ}rR&7(0*OapMsxlN8$t)DtV8vynX1}zmlvpH`8k6$g z`zgaxfFNQkIH@?{+$HQ_0Brx8XkM?u5CsL7G$?+`&(BO~k1XzKBHJ+s8t=xpEecL- z8iU1l`r7o&%3?{GMmKKAvv}+FvCtf5D(>g}JgGJXm^$TM`F89C8v|v9fw?fh!ghe( z;%qzHU6g`+d$>D3#kQ9(uoqR1E5W8C-^M~pvhPrjypQ|>Egr9IAdwVsa1_?rX5<&C z_a(xbesklMRo-Dz_%tH|D>6pR>#Y#kx4E-3{mf2@psbV`j4?`hQ zDSoz(b;f+ZadW|$o&O+2Dh9K3Vk`4E=9U9KEpI z7VpagBKxZQwWg05okSpv4LQVztZ|r)(S%ns@)?#2ZH$sBxD^!&*wwtr%!%O`7H9Tl zqcO9S>3bZJdlf4YQy(8#Nk%h!*&IcF*Tzh;vZrhv>0*0|0tGRg?@J3emz^8)#hc4{ zVt6ly87dd>8hfN6Dy)okX78WKL7Q`cbcci&B%dt5Ld~oAUVE@1{}2S;C>m1dVLfML zDbHoj)BP~+)3iSBljP~5&3ZpZ6LSBvC;B>04xeh@*1oN;A|wm*vCS}J*L<$c;sp7~ z1O`EXFxw_WEZ^F;c61Q~@9sa*))BDLTlH~l7xoUFLK7lM9#E}B6cgH~+P&O1f;)RE zW7ifb_3ZVe7#P#Gt@Y$MwJDPMy&vAo0XqPrNRv@K(H-=0KFt){gEP|$3nZgzrO`lU zR3)A7{B=&rM*#3nqoK3y*WY-gt7mQN6Yz=H4+T4`3;T|7&stVeC|D}8t4K`M1V_}X zh~%pk{|=(IMUfuoPvgwFK!5PUD94a?A?0FU#bV?`O6pRh?)emHF8>AXg;c;cMt-&R z<{|M2FLLHmqlFjpE~C?#c;L-Qg8XK0blz<0k-iNH;*C(kfDPgO=*_lu^+pAw>*CS> z159JR^KP3t&j+zQ-PkQ{2$;!_FeVg*+fkhUpAX)^!KDgiVDfPKaYF zuW%=Ml>y`ouqL!=P~++eC7Dhrakuc~>|NuTE|nks&7b}6|Ho$!cAm`^n=7_QN^}~6 z#nL@Y5eq6o9P0srfT}$CQ*@#w*UHMb$I*%e#!4v9QSUr8Z&AapmCi%$*ZP<08PVC7 zoj0;}UX5a3PZHAAzuzYWYY#X5+C!WB5ePi8KIMy13qpdCX6>1TM^5#P57Qx9TMbob*>i+%!Jr`ki26NyKtHKv*FG61bhbM!sM6dB;DrqqA@>Z1(z+sQsP_cQEvkTq}n*X?|aVm zY3vXVH6NA`ph;!9)337=y)ck`B9ZJUt?jDm6{v`uriQ|kyh;u0D(4Jzq?2?kWo^kK>y)yjC2|A?s`84zjj2(BnO=DcDO+Dke-ii=Wa8s(5M zXAiBU@rtij<-hK#@|BJ%;+$`+>$nU*JnE43%P3xkXk;L_ZJ zs>x7-5X9!ba&vk?Wz#kR;zfq+k*WvQ!rb!m9#^xc78a>1G zd?^nzwr-x$a>dU;>QRUyTTAJaY;PktElptryNa$6^wp)T57u^A?tvxyjEyq+DEIgW z3?O>?u26#DaXJ!|RlvBQ=v1C&gIPCV8u&iMn7G2g026G0F^0l4LSLx60xKr5qE8q$ zt^qbK)HalH@yUy75I^Q;X7EgywunUr%KK2KxM+=R{~DdT#FsyOZ(dcrKS5?!gZ44N zxweRUY*%`s6=7DU=NGzFBKZkepnR=QJ@&+ujw)sSPg2&QzC}r8lW`=Hs%DjL61Z{(re&>Hr+oK8HU$9zi7A5-%u)R3mgr_>yFzU#VWdf8uq%%g;Z zRApSxLp5wD47uo6xL%r7rEt>u>zwZ>rg%RJUGIHOj&5ta(2UR(K7~XLKu-gTb3+Kd z52y*~RX~jhO1Xvw=r0}hJveW3H$fk5Rlx&J_atW9nEjVn z6Q}HLlPd3krvOg^{*aVcuGG}9Qz&We~y|{)D)F^9KY08TPzeLTu3h-s>&r&l-07K4G|9$G4@&oEGQ}ZDKboo^UuM=pU znuY?n)NfI9j{uhRsJ}_gLu$T7P*eUH^`BAm9RlcEx!&CqYs%()alSAnPY}^>Q}cOh zlGO0YlTVs-{8WZ}fqIvzd5@YBH6KxPhnglelA1rI=DTRh1Gg*qg56qO^-#87C5VmU zC>IALdw?~-dW)7p%x~Sr8TX4s8^7ObY~m9EnYn8Ca53B|V0S-vYOr39HU)1G&l-Fs za5uAhT(@7Mw2gkwuw!XlfLpk5$I-(`(VZ^L z8}Z4&)z=!77GUmZQ4&J=hijkbkht>~8#DqF$l*Je@aG#88nlufVKS zt6TVTb^hYpZ#B1a%U><7On;Q0o|&0jTA7a%WKuozkaJ5zV519RISY;h?;K$hUufez99E*G@yRhF+uR)%YdJ`X!kfU0xmys!>Dspq)XRwzKw#Jz(eTF?-aW z!oRfLVCrJQE{})5Pk~kQPod6qI{aIl^4NZK_%kW~k&gN`Pi)h#H$48S4zGIH<^ubY S;>=|TK=a5mP@Mz+%>MzkOkbY> literal 0 HcmV?d00001 diff --git a/Parser/LR1Analysis/__pycache__/Procedure.cpython-310.pyc b/Parser/LR1Analysis/__pycache__/Procedure.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..33285c189196e0dd9d1f558d392f29f25f36b70c GIT binary patch literal 3101 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 HH3AF(^!Y41 literal 0 HcmV?d00001 diff --git a/Parser/LR1Analysis/__pycache__/__init__.cpython-39.pyc b/Parser/LR1Analysis/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d89102d36290c685bae37f2db5dc355d7adfa10a GIT binary patch literal 186 zcmYe~<>g`k0s~E{R0$yc7{oyaOhAqU5Elyoi4=wu#vF!RhA0L`h7_h?22JLdj6mU) zjJH^F6EpMtia@GYG8C}@DKPQNO+U0awWwG>D>JVuBfnJNv7jI)GdZy&Ge56bKfuSp zIX|}`Gbgo3KOnIPs8HW0$j~t_F{iRPvsgbqJ~J<~BtBlRpz;=nO>TZlX-=vg$iB}& G%m4tC&n%k& literal 0 HcmV?d00001 diff --git a/Parser/LR1Analysis/__pycache__/main.cpython-310.pyc b/Parser/LR1Analysis/__pycache__/main.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1e4ead9dd135d061b640b493774c687449e8cc0c GIT binary patch literal 1177 zcmY*YOK;mo5Z)!1Pd#G0P8=sik)(%KJy=$HY!K9OoI{|xh6N)C(}G~N8<{d+*@h~rCQOc0UT&)%n7oUdgVLq8KeugyyR^IS% zaL^>}k2UCjrwxV&vI`>aL9#?OlDNjwSeO-B;>YOcUu#1WY0YtMO1pygHc(}3Ktprm zk4a4`OidkGIFu|gwKfsFvo}y}Nn`3RyvkZ)J^(ylTNue!rLpYFUbLwLBXE}{Mip6f zmZ)|rhsTuzSRP>co2Yg#y%u=hrPl_}uiVP3{E1n&Ds#~VyH(krqKQY9IlVSrp`A@M zU9IftnyxVX3~pav!myvgG6+0#s3CI)Nc{c=YShnjkXN3(PP_CPU7@RUy+kxZy|w*w z+*g>NPU1b&TW;6#*i$W-n)2O?%vC^IWlWxY&FajdL@$C>Q4124`#ax(C*@RKyW z^%Fh_FPN(Qi^L}0`k1Mmz)l+8Dxxb?<_SAh*6S!KnX)4(qcL38RQo65Uqe^tkNQW@ zmFQ37Y<8TN{hb2lFpgxLXQF>F+}_R80&sc%g8hB?4|cLBITf+!r%{}36{m`5L$6D0 zgCdyVuHhQ%_?FSeK6Z^Rh>mq}7kuzA`R9h~D literal 0 HcmV?d00001 diff --git a/Parser/LR1Analysis/__pycache__/main.cpython-39.pyc b/Parser/LR1Analysis/__pycache__/main.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..74b1fe49f04d49bb106f819c9a8162d32c193ef0 GIT binary patch literal 1163 zcmY*Z&2HQ_5GEz+cXu7z`Ei{9MVd>yIe6{#*rJHzIEP~E8eSMhloo=rWY${i&m;w41~a4Kry0&CCB0sVU~TvBv)>$q{xr_b zWr6b)M7#h+5yctGafEX#vT{4Ja}p7Zs739}$(_gn8&Q(EkxL!wen64OeCnNA{2BA+ z2%eG=>iZXfh5AHyCp^jXgvW2vjOo>ky<#pL+-GgOc=kw1_A3} zc(ilaCLN3o=)bEAMgX!0A|64qL=BR-!O~jT3N7(-^wVFBC5d$AxUr?HptTL8tPN;p zZvFgwLlmaAi7Y%ymY6!52%fncsBxq<^%sG1mYBZ=ywF$}$&NBuu5uS$>OuSd(#A-U zMQ@23PkH7Q zqUoA)r|YJ^_%^)z&JwQq2N(l^J%uSC?RSS4f5W=OpK}-D7q(Hr7Z`9n$;#JBHuE05+WG3s zC;4piaQA4mfAsMA_XqnAN5^}6`=il|0=l|< zHaLc^#9*2hvy-wO>{f6O<3y%qAqI!T?Y%Ou0GAK0*gt^pV7ExJbCHTco}|TAb*_mq z%(%p3PzV!DtQE`0cdYxki$k!C2Qh4R*vdWp7;}@Z{Wvz~Uj0>-}XQC@jpyaHXZ-~ literal 0 HcmV?d00001 diff --git a/Parser/LR1Table/GenTable.py b/Parser/LR1Table/GenTable.py index 1a7f4ee..dbceed4 100644 --- a/Parser/LR1Table/GenTable.py +++ b/Parser/LR1Table/GenTable.py @@ -1,7 +1,8 @@ from .Grammar import Grammar from .LR1Table import LR1Table -from PyQt5.QtWidgets import * import sys +import wx +import wx.grid as gridlib from .LR1TableUI import LR1TableUI @@ -13,9 +14,7 @@ def GenLR1Table(grammar_file): lr1_table_ = lr1_parser.parse_table return action_, goto_, lr1_table_ - def GenTableUI(action_, goto_, lr1_table_): - app = QApplication(sys.argv) - w = LR1TableUI(action_, goto_, lr1_table_) - w.show() - app.exec_() + app = wx.App(False) + w = LR1TableUI(None, action_, goto_, lr1_table_) + app.MainLoop() diff --git a/Parser/LR1Table/LR1TableUI.py b/Parser/LR1Table/LR1TableUI.py index 1de1fac..014627f 100644 --- a/Parser/LR1Table/LR1TableUI.py +++ b/Parser/LR1Table/LR1TableUI.py @@ -1,6 +1,47 @@ -from PyQt5.QtWidgets import * +import wx +import wx.grid as gridlib +class LR1TableUI(wx.Frame): + def __init__(self, parent, action, goto, table): + super(LR1TableUI, self).__init__(parent, title="LR1分析表", size=(860, 560)) + self.action = sorted(action) + self.goto = sorted(goto) + self.table = table + + self.grid = gridlib.Grid(self) + self.grid.CreateGrid(len(self.table) + 1, len(self.action) + len(self.goto) + 1) + self.grid.SetRowLabelSize(0) # Hide row labels + + self.initUI() + self.Centre() + self.Show() + + def initUI(self): + self.grid.SetCellValue(0, 0, '状态') + + for i in range(len(self.action) + len(self.action) - 1): + if i < len(self.action): + self.grid.SetCellValue(0, i + 1, self.action[i]) + else: + self.grid.SetCellValue(0, i + 1, self.goto[i - len(self.action)]) + + for i in range(len(self.table)): + self.grid.SetCellValue(i + 1, 0, str(i)) + for item in self.action: + if self.table[i][item] != ' ': + self.grid.SetCellValue(i + 1, self.action.index(item) + 1, self.table[i][item]) + for item in self.goto: + if self.table[i][item]: + self.grid.SetCellValue(i + 1, self.goto.index(item) + 1 + len(self.action), str(self.table[i][item])) + + self.grid.SetCellValue(9, 0, str(9)) + + sizer = wx.BoxSizer(wx.VERTICAL) + sizer.Add(self.grid, 1, wx.EXPAND) + self.SetSizer(sizer) + +""" class LR1TableUI(QWidget): def __init__(self, action, goto, table): @@ -34,9 +75,6 @@ def initUI(self): self.Table.setItem(9, 0, QTableWidgetItem(str(9))) mainlayout = QVBoxLayout() mainlayout.addWidget(self.Table) - # self.setLayout(mainlayout) - # self.show() - pixmap = QPixmap(self.Table.size()) - self.Table.render(pixmap) - pixmap.save("table_image.png") - + self.setLayout(mainlayout) + self.show() +""" \ No newline at end of file diff --git a/Parser/LR1Table/__pycache__/GenTable.cpython-310.pyc b/Parser/LR1Table/__pycache__/GenTable.cpython-310.pyc index f2ed34d5d5befad11bf3a1f335676e51ca283bc4..9b571a00a09d34a895e821c124e8640f54cb1aae 100644 GIT binary patch delta 398 zcmYk0u}i~16vpq}U6N}^YOIPNI22rh;OtNeQcwhSv0ZLUxgdeG371N$q;yc+9AbBA z|E)~^DZb01ckp{3-+TAI`?No7Kl6Q;;CUUK#G~3jg>ik}zm!xl#Zx9(TlvhAHV{RW zl{zy=I;d^syb~#uP#vrt#UDxN*2{kV9YOd71q7P~OpeX+!b1cgz;3S#y0`g(!?lI> z$n?(;3$g_TJ6N#=Riq*nRP>Fnc*VACM@%>d(1+`gH?&+zc9rMaERfFkJ=0=Qo;OhHz&I`TQ8n&OJRe8XbsA4@duS9k!i6q)ppQ_7uBKQtLo}>-Df9s< y>6FWhC!HwCTRMhmGHrjM&7Su0zp%eVF_>lQIgN*aV}0Q48&^iIQ6C7S@*L&m{D!qE~%K5Pm@poy{CZC$@R++XU!<1kr5M-Tc7O%0YKv z&(9HavIPx0Sh6|Qq$DMj^n)*X$+m1qY&Ztcr`wR%bWtdFlV!#>Q1UUFOdn>mEObnO zhG|>u+anfbSq%%*u}*^nRJC^(PlwTXmBgd_E*iN&5b&T4<``Az8H&X)M9uQI+#I4( x?xMJSF%zwLL)S8yjGHNp?bAH|7xtGZ`{_)-Ch;}kwcHNqgTF^5{s;;tpu delta 404 zcmZ8c!AiqG5Z&qSCTUElRtq9{=rOGnFWy8D59-a*79kgj-B2rO8+N0$n9@Ug^Az#} z_29wJ@tUu3Hh6Mi-Wz7#%wsmjhv5dUYZHu9?q>xtDbjeb-WuF8{O1E6IAUz^YlzWEnbT8vL8V`eHJew9&EmXk* zIeL`_&V8nyW^+G1*kEY&jH- zc!2_RaF7lI2J|l&?Avh9b_a|gf+i#wd)j7!L&+u)OgQI6IFhvZzzJMI_eqUkLO$7PqMd!5 z$sqd}0!acYNWfl^XH-zZ&i%js z&(jkqJI`eD%y`{M;d~Lfp;pu!m^aiE!?2k|Sr&$G$h(dDK_*pJZ^fO{=V`CL-t8uF zGeVA8eRum_BW-u%M5_93q#&_Az0s@SVC!!8dsP5vywU6ym?c_bCF;>K`;3;U&wQ|_ zH>W#c!?Y?*EZOuy!6MfNyx9e;z-5sk$^is6LOC#y0ZNrlJzT7_LI(69`L1?G^Q-w6 zM14Np4T5r(5sT+^l_1XX(*M@n>%A*vnl(8OL}gES3MW`bV?;r9A%_)2M0DV=cE%v` z@SL2jg6Lj2sz192^FX+4H05-aYk56^br*0x`7e$dy@%mmV_a7P*vypKsP56Cv5#uduT(Ae-;%XZ*m^C`80r&zO!(G4&kz?{tCwLleNv_iRr{x?d1?)2OyQ(|7rWoq jRN*hkxZfzCV6$c*uRhoK55~m4#AeETFxYR4jNkqj4PbyR3${|y9sd>H@FyM>^PL8;W%qI&M7CIym!K` zIYWz#QwlBl3ySpCJQVtrKW1M`)A~OMdFsrbWUJ}I&d%=6e*4|*Hy74w6~K1B`l0;2 z3h*aQW}A(Z``FXZ(FhPM2EQ0tm-`ljhakAH&OlfaI`+`=9l>^?VP9Z8Y_-YGHfu6T zKS4)=&jk4V1w3Vf34Z4Jmav3<2EP3QZ15dKa&%>L=Zi<-ek}Jk+Rh9Z`7Un&X|!us*S;n^OLboqX6XYZVfQ0fc*dZ@%+uNFaH_;*5J{%NI1I7 z0UBI8S(L?6+i7$nFBrxuGL386Ne6wY6h?vef*|TeSrBM9O;jd@cEffSB|U8)Bw2zW zlpS31noFX(;#>S@79}psZ?pR6ZKA>C4=T#zaK~K zkT|Bz?ajNbq}z{TshZoN!ocSAMK7JbjXVACR0*N!Mbn#TfZgI1R$(r$vfHf6J?62K z8`G0`V49USrEJkW|@p#D}$(V8|Z8lbutRU#>p~ zo?#3ps0S|v6TyY zu0~zeaL`p$XG_NM<1ijb?WnMKAXOcA-V>m<(oAV5>Ir$Q`O&fOeVH7SoR#(-ukSqC zXsvB(YfWIOtben;w)H@Jh-?BHwjz0H7HK=mWY>47_>@|rTZ~yI?>d?fu%{oR0d|eA zuzB_o|CBGVB~;}CYO;bWtNbSFbAg>)pHXH}Q4Na1h4D zjuE}NP1hzR)y4z_!3?2W$UqrZ^gp1yrKEF@RqN&t(QwrY&UNYN_zqRQ$)%!Sk9NLN aNWetR0A7Bk_Erm8_Xs(q*FjXi@Y%mbHf&J< literal 0 HcmV?d00001 diff --git a/Parser/LR1Table/grammars/mygrammar.txt b/Parser/LR1Table/grammars/mygrammar.txt new file mode 100644 index 0000000..ec22e3b --- /dev/null +++ b/Parser/LR1Table/grammars/mygrammar.txt @@ -0,0 +1,6 @@ +S' -> S +S -> V = E +S -> id +V -> id +V -> id [ E ] +E -> V \ No newline at end of file diff --git "a/Parser/ParserOutput\\PL0_code0.out" "b/Parser/ParserOutput\\PL0_code0.out" new file mode 100644 index 0000000..b9ed079 --- /dev/null +++ "b/Parser/ParserOutput\\PL0_code0.out" @@ -0,0 +1,43 @@ +JMP 0 20 +INI 0 4 +LIT 0 10 +LIT 0 2 +OPR 0 4 +STO 1 3 +LIT 0 10 +LIT 0 3 +OPR 0 5 +STO 1 4 +LOD 1 3 +LOD 1 4 +OPR 0 13 +JPC 0 15 +JMP 0 19 +LOD 1 3 +LOD 1 4 +OPR 0 2 +STO 1 5 +OPR 0 0 +INI 0 6 +OPR 0 16 +STO 0 4 +OPR 0 16 +STO 0 5 +CALL 0 1 +LOD 0 3 +OPR 0 6 +JPC 0 30 +JMP 0 36 +LOD 0 4 +OPR 0 1 +LIT 0 1 +OPR 0 2 +STO 0 4 +JMP 0 26 +LOD 0 4 +OPR 0 14 +LOD 0 5 +OPR 0 14 +LOD 0 3 +OPR 0 14 +OPR 0 0 diff --git "a/Parser/ParserOutput\\PL0_code1.out" "b/Parser/ParserOutput\\PL0_code1.out" new file mode 100644 index 0000000..ec2b143 --- /dev/null +++ "b/Parser/ParserOutput\\PL0_code1.out" @@ -0,0 +1,22 @@ +JMP 0 7 +INI 0 3 +LOD 1 3 +LIT 0 10 +OPR 0 2 +STO 1 4 +OPR 0 0 +INI 0 5 +OPR 0 16 +STO 0 3 +LOD 0 3 +LIT 0 0 +OPR 0 9 +JPC 0 15 +JMP 0 21 +CALL 0 1 +LOD 0 4 +OPR 0 14 +OPR 0 16 +STO 0 3 +JMP 0 10 +OPR 0 0 diff --git "a/Parser/ParserOutput\\PL0_code2.out" "b/Parser/ParserOutput\\PL0_code2.out" new file mode 100644 index 0000000..d5cd56c --- /dev/null +++ "b/Parser/ParserOutput\\PL0_code2.out" @@ -0,0 +1,33 @@ +JMP 0 14 +INI 0 3 +LOD 1 3 +LIT 0 1 +OPR 0 2 +STO 1 3 +OPR 0 0 +INI 0 3 +CALL 1 1 +LOD 1 3 +LOD 1 3 +OPR 0 4 +STO 1 4 +OPR 0 0 +INI 0 5 +LIT 0 1 +STO 0 3 +LOD 0 3 +LIT 0 100 +OPR 0 13 +JPC 0 22 +JMP 0 32 +CALL 0 7 +LOD 0 4 +OPR 0 14 +LIT 0 2 +LOD 0 3 +OPR 0 4 +LIT 0 1 +OPR 0 2 +STO 0 3 +JMP 0 17 +OPR 0 0 diff --git "a/Parser/ParserOutput\\PL0_code3.out" "b/Parser/ParserOutput\\PL0_code3.out" new file mode 100644 index 0000000..9c02a7b --- /dev/null +++ "b/Parser/ParserOutput\\PL0_code3.out" @@ -0,0 +1,61 @@ +JMP 0 58 +INI 0 5 +LIT 0 1 +STO 1 4 +LIT 0 2 +STO 0 3 +LOD 0 3 +LOD 1 3 +OPR 0 10 +JPC 0 11 +JMP 0 35 +LOD 1 3 +LOD 0 3 +OPR 0 5 +LOD 0 3 +OPR 0 4 +LOD 1 3 +OPR 0 8 +JPC 0 20 +JMP 0 24 +LIT 0 0 +STO 1 4 +LOD 1 3 +STO 0 3 +LOD 0 3 +LIT 0 1 +OPR 0 2 +STO 0 3 +LOD 0 3 +LOD 0 4 +OPR 0 2 +LIT 0 2 +OPR 0 2 +STO 0 4 +JMP 0 6 +OPR 0 0 +INI 0 3 +LIT 0 2 +STO 1 3 +LOD 1 3 +LIT 0 100 +OPR 0 13 +JPC 0 44 +JMP 0 57 +CALL 1 1 +LOD 1 4 +LIT 0 1 +OPR 0 8 +JPC 0 50 +JMP 0 52 +LOD 1 3 +OPR 0 14 +LOD 1 3 +LIT 0 1 +OPR 0 2 +STO 1 3 +JMP 0 39 +OPR 0 0 +INI 0 5 +CALL 0 36 +OPR 0 0 diff --git "a/Parser/ParserOutput\\PL0_code4.out" "b/Parser/ParserOutput\\PL0_code4.out" new file mode 100644 index 0000000..e69de29 diff --git a/Simulator/__pycache__/Machine.cpython-310.pyc b/Simulator/__pycache__/Machine.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9494eccc6dba97c5623661334cfabc5e92d23963 GIT binary patch literal 3822 zcmb7H-)kI29G{t;-Md^i$u*5_l5X`{f0Pq#qJm-#B{4}gnx>`KfTon?yxG=E?^kB` zq&<=s6CWxFEsD=+l|uXnM0}TmP!NQ|yor7A9`r?DteX1$&hF+eKU(94nVs*<_xt(& z+{yQx&v16o`>vmmpOI*P3?N2f_!*eqAc6?G0%MuYA;p9NlmQeKJV&x-0k}3j z9H>zk{^Kxt1o+4t6Vx*V^Y{fW48d3UoGDC@wp1z?C7loh>i~zfUtw03l7((L``81Rru5 z$gYrLM~4-?yd|b8HBu`2K>@OT9KQzNhRGs~+3RVVrpfijQ*qkkgdQC!RSWr&e;gLE zsO&`@W*9Xe6k{zbTh~aTTCW72RIFA|UGL?6&z0Uq5cFi0Nekp8mhu+6bP-^D{BD>m z##nOQGAydgEWOpFO_4Q00INr*=`&a@l6f2uPlztzuoCnY$fOI=6%bcpTw-z%)_g!G zP&|`^r0NqBP9{N?EwR9WJ-}Fobe~TyL3-!;B1q4hOKc&F)T$LE!rc&SKfzOBF0&hy zk~UNeP?vUrdKS?{0sCi=tq=mh0kBY8vFGwNh zG8NtZ=vNd4w5ZLFo=fZ+m3wrKAd5Ojonem9XZYxQLbQdy0IhS?3jNxWm$XJHhG*zM zU>1QNE)BgthL#{5#|O@j1-95Ddc|JRx6COCx&&K>Y{#5}hgA?qP@~a}J-E3c!^qu< zdF~`}_HbuaM?2&YkHsf#UWfLsMD|i`yeD(K%v7R?0Z+D72lU{^3sPVj=EZbGIn2a-cKqKv#!L3M` z0sUng5S33wSbaJxm7bO*y4sn%DMFtfoi!%!MIJfYj(aVfR;(Us2LU_oZnDGLl~zLz zL|PAmR-`sE+^YI{b87`}_)kHmw_PvF?^xf4oQ*U+t~Jg6PfY|gz1gm*vReQ#HCZDeSZe;>AMeT09vB0U+c=T>01@Z+28A(6QqNgmRYx8Wu{ES?lkeZt@# z><)UC;T~SX`!f8$!^P9#9gH_f_Q;If3;(2b!DA!zUrxY#9 z{RrM_nb8So`~$CseVP9UOg8JLHcL@nv#(pw*>%&ylwYzxw>Yl*SszU^?%Fr^QGVY3 zG7X%-`;NU9^7gVm_`_ZPcK6q53fz>RaK6m|Y7(eE+7JA&H{yH;2(LP~GbsPE^Syq* z2m%+ zJ}r}U{!F8+>HLj!FXgmh$BiO}VpEg2sh7w6cEDx6N^U@lxIiV=M3&0e@fG%{bIg@n z18m586#u8>&tq=1%s&gp`j| il0YM#vM=jh_<kdrOulk(ZZ?0SJ1NyOJjIeDwJm2;{g}#XQ-u>dCHM&!)9M*}d)gx`odtw8fa| zJ#Ah4bnUWdbLPhw>pkBy?Zx_uPy6PBqyl^lobz)FGILUkVuCYsOLG!S@{3|N8#3PD RVZ1e&i!YGTWpWH(8UVm8Gv@#R diff --git a/Simulator/__pycache__/__init__.cpython-310.pyc b/Simulator/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..feb722e1be17c5844e257ee4a92423fe379d6886 GIT binary patch literal 190 zcmd1j<>g`k0s~E{RAnIj7{oyaOhAqU5Elyoi4=wu#vF!RhA2ixh7_h?22JLdj6h*c z##=18iJ5tRnoLC?^|#n_6O%JC^HNtb6tMvLVB(jperR!OQL%njW?ofBeyP4=K|xMt za$-qleqOPDfRBN5er`c#PHK^UaAt04PGU)Zk$!x9W?p7Ve7s&k7*EGWpyOinDx%+D*< e5AZQ?&d)8#%twsXVcoB?B4c#-NNS++G5P~ zp0=)ix^~&KIrC$T^`7sU_G10Sr+xE5QUN{&&iT0onK`LNF~OO+r8$Wu`9(1k=g9#8 Dxi>Em diff --git a/Simulator/__pycache__/main.cpython-310.pyc b/Simulator/__pycache__/main.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f557adff47d277981b5ac6a1a92e0424892c7323 GIT binary patch literal 689 zcmZWnv5pfl5cSy3X75N4a1sR-4aGLulb}J0BG9!EAw@LXtW0ba=e+Bc?UlGFRJo6! zOiF&qE!F)34UB^h?!-v*yyMxK_hw`}9-k7l^WvHM288@b!Cm7Ryg~PK1W64edzj7OYJt}5AV+FrIqUC1aFtA^41uBWat;@{uM$X0VFEB zCV_6r4)*Lo_FS?9?C1`@LKtiTPr9Z1?2u+53sUg;y{3tPqAya@9AS&YU!wGa&LjDr zWWyJiXpivob@>q$`*N+@&C2%W+paTuDT21GFH!r2Z8~j~D;K)yjR@A2jnM6+yNdbL zh~|?Nvj>SQk>+Ic^q8F*yA;OHCbz#tI4y>e8|_2PK5G+{i`;gqjoc|A?raH&aT zu5SxgJ-NS3EK-rDO-Atl25@P{$P;UN5k5`!9C8?eJ4>0ou2ZhAi<3Xysr7Nt2W`Ad zk0kO=gjM8gtJ`??KV|*5O)DBz*LRqYOFYu&)5gl)s9D;+e}ph1Ny0;(vpgFC|MeSW CMyA^U literal 0 HcmV?d00001 diff --git a/Simulator/__pycache__/main.cpython-39.pyc b/Simulator/__pycache__/main.cpython-39.pyc index 4d2561784077190913c788d36d74c78fc94be163..91e61a66b57fe2911973b10438292cfb2c55c69c 100644 GIT binary patch delta 79 zcmdnbx}23Kk(ZZ?0SF8IdYxSj9ZqvFgdLUC*YqKiR$Q`MQPAC$z-`*iKHXLIJq80$UXGwsFtiBJ3HgQNm{44m_G3o>(3i(-N^b4zm)OY)0iHdiw0 GF#-TA>Mv0M diff --git a/__pycache__/utils.cpython-310.pyc b/__pycache__/utils.cpython-310.pyc index e59e17d009b5a2995fd2d50f57f54721b4bfbb30..8182f8d5303dc8c7b6ba7fa623c98ab87c581699 100644 GIT binary patch delta 42 wcmbQuH;0cmpO=@50SFrGq*Bc{@_u6F Date: Mon, 2 Oct 2023 00:12:18 -0400 Subject: [PATCH 6/9] bug fix --- Parser/LR1Table/LR1Table.py | 2 ++ Parser/LR1Table/LR1TableUI.py | 3 ++- .../__pycache__/GenTable.cpython-310.pyc | Bin 774 -> 774 bytes .../__pycache__/LR1Table.cpython-310.pyc | Bin 5542 -> 5565 bytes .../__pycache__/LR1TableUI.cpython-310.pyc | Bin 1572 -> 1669 bytes Parser/LR1Table/grammars/mygrammar.txt | 1 - 6 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Parser/LR1Table/LR1Table.py b/Parser/LR1Table/LR1Table.py index c27be9d..308d7c8 100644 --- a/Parser/LR1Table/LR1Table.py +++ b/Parser/LR1Table/LR1Table.py @@ -167,6 +167,7 @@ def LR1_construct_table(self): if j in self.Collection: parse_table[i][A] = self.Collection.index(j) + self.print_info() return parse_table def print_info(self): @@ -179,3 +180,4 @@ def print_info(self): print('TERMINALS', self.G_prime.terminals) print('NONTERMINALS', self.G_prime.nonterminals) print('SYMBOLS', self.G_prime.symbols) + print() \ No newline at end of file diff --git a/Parser/LR1Table/LR1TableUI.py b/Parser/LR1Table/LR1TableUI.py index 014627f..5f0ae09 100644 --- a/Parser/LR1Table/LR1TableUI.py +++ b/Parser/LR1Table/LR1TableUI.py @@ -20,7 +20,8 @@ def __init__(self, parent, action, goto, table): def initUI(self): self.grid.SetCellValue(0, 0, '状态') - for i in range(len(self.action) + len(self.action) - 1): + for i in range(len(self.action) + len(self.goto) - 1): + print(f"i = {i}, len(self.action) = {len(self.action)}, len(self.goto) = {len(self.goto)}") if i < len(self.action): self.grid.SetCellValue(0, i + 1, self.action[i]) else: diff --git a/Parser/LR1Table/__pycache__/GenTable.cpython-310.pyc b/Parser/LR1Table/__pycache__/GenTable.cpython-310.pyc index 9b571a00a09d34a895e821c124e8640f54cb1aae..585a06683987c30e55590813e8f4a80cd5740865 100644 GIT binary patch delta 46 zcmZo;Yh&Zh=jG*M0D`Y}QmINCc@Hx(a!$U;xRz0Hay?TGHzNll4-j%N^KbwF^GOLC delta 46 ycmZo;Yh&Zh=jG*M0D>wTsZ{5UyoVVXxh7v^T+1jlxt^(pn~8&w2M9Tsc{l*)9tgq! diff --git a/Parser/LR1Table/__pycache__/LR1Table.cpython-310.pyc b/Parser/LR1Table/__pycache__/LR1Table.cpython-310.pyc index eed37cee2db07c1e2b05e7f766c6e87777aaec66..a972f727fb35fff47a48d468b5d323ba5e592ebc 100644 GIT binary patch delta 165 zcmZ3cy;qwzpO=@50SN9pNu@?_kytVlb-%ZBNdj+Z)8F?pL3VBWL7m8%GoBUG9 zo{5EZvW~C?MT;2e1Tm;k*lC6Gp{5*GcPTF4N$b04@ht@iZQt` mvN7>7@-Yfcz98bom^fKlRD&^ja<8cP2Q?IWuv&$#SUx delta 387 zcmZ9Iu}Z{15Qb-VvdJZ8y+hHv*cb%iQrKBq9vo_EV`I01Tnb4{VX?s?m`+622S~uy z!Z#AG@)fL{7*5nJhM9l=`F3XS)k~Z`M*{;c40Hh2I2)zgTOr zBtuQuc{H)2`gNLhLoFg`ID>?jb+&^~j6Zz-v}9 S S -> V = E S -> id V -> id From c15ec16359fb88fd689675276878f7b02e593540 Mon Sep 17 00:00:00 2001 From: JinZhou5042 Date: Mon, 2 Oct 2023 00:24:06 -0400 Subject: [PATCH 7/9] edit end_sign --- Parser/LR1Table/LR1Table.py | 37 ++++++++++-------- Parser/LR1Table/LR1TableUI.py | 1 - .../__pycache__/LR1Table.cpython-310.pyc | Bin 5565 -> 5645 bytes .../__pycache__/LR1TableUI.cpython-310.pyc | Bin 1669 -> 1572 bytes __pycache__/utils.cpython-310.pyc | Bin 1820 -> 1820 bytes main.py | 3 ++ utils.py | 1 - 7 files changed, 23 insertions(+), 19 deletions(-) diff --git a/Parser/LR1Table/LR1Table.py b/Parser/LR1Table/LR1Table.py index 308d7c8..00dc3f7 100644 --- a/Parser/LR1Table/LR1Table.py +++ b/Parser/LR1Table/LR1Table.py @@ -1,5 +1,6 @@ from .Grammar import Grammar +end_sign = '#' def first_follow(G): def union(set_1, set_2): @@ -9,7 +10,7 @@ def union(set_1, set_2): first = {symbol: set() for symbol in G.symbols} first.update((terminal, {terminal}) for terminal in G.terminals) # first terminal 加入 follow = {symbol: set() for symbol in G.nonterminals} - follow[G.start].add('.') + follow[G.start].add(end_sign) while True: updated = False for head, bodies in G.grammar.items(): @@ -55,9 +56,11 @@ def __init__(self, G): # 构建项目集规范族 self.Collection = self.LR1_items(self.G_prime) + for i, item in enumerate(self.Collection): + print(i, ' ', item) # 构建LR1分析表 - self.action = sorted(list(self.G_prime.terminals)) + ['.'] + self.action = sorted(list(self.G_prime.terminals)) + [end_sign] self.goto = sorted(list(self.G_prime.nonterminals - {self.G_prime.start})) self.parse_table_symbols = self.action + self.goto self.parse_table = self.LR1_construct_table() @@ -81,22 +84,22 @@ def LR1_CLOSURE(self, dict_of_trans: dict) -> dict: item_len = len(ret) for head, bodies in dict_of_trans.copy().items(): for body in bodies.copy(): - if '.' in body[:-1]: - symbol_after_dot = body[body.index('.') + 1] + if end_sign in body[:-1]: + symbol_after_dot = body[body.index(end_sign) + 1] if symbol_after_dot in self.G_prime.nonterminals: - symbol_need_first_loc = body.index('.') + 2 + symbol_need_first_loc = body.index(end_sign) + 2 if symbol_need_first_loc == len(body): # A -> ... .B for G_body in self.G_prime.grammar[symbol_after_dot]: ret.setdefault((symbol_after_dot, head[1]), set()).add( - ('.',) if G_body == ('^',) else ('.',) + G_body + (end_sign,) if G_body == ('^',) else (end_sign,) + G_body ) else: # A -> ... .BC for j in self.construct_follow(body[symbol_need_first_loc:], head[1]): for G_body in self.G_prime.grammar[symbol_after_dot]: ret.setdefault((symbol_after_dot, j), set()).add( - ('.',) if G_body == ('^',) else ('.',) + G_body + (end_sign,) if G_body == ('^',) else (end_sign,) + G_body ) if item_len == len(ret): break @@ -107,18 +110,18 @@ def LR1_GOTO(self, state: dict, c: str) -> dict: for head, bodies in state.items(): for body in bodies: - if '.' in body[:-1]: - dot_pos = body.index('.') + if end_sign in body[:-1]: + dot_pos = body.index(end_sign) if body[dot_pos + 1] == c: - replaced_dot_body = body[:dot_pos] + (c, '.') + body[dot_pos + 2:] + replaced_dot_body = body[:dot_pos] + (c, end_sign) + body[dot_pos + 2:] for C_head, C_bodies in self.LR1_CLOSURE({head: {replaced_dot_body}}).items(): goto.setdefault(C_head, set()).update(C_bodies) return goto def LR1_items(self, G_prime): - # start_item == {("S'", '#'): {('.', 'S')}} - start_item = {(G_prime.start, '.'): {('.', G_prime.start[:-1])}} + # start_item == {("S'", '#'): {(end_sign, 'S')}} + start_item = {(G_prime.start, end_sign): {(end_sign, G_prime.start[:-1])}} # 求 I0 的闭包 C = [self.LR1_CLOSURE(start_item)] while True: @@ -139,8 +142,8 @@ def LR1_construct_table(self): for i, I in enumerate(self.Collection): for head, bodies in I.items(): for body in bodies: - if '.' in body[:-1]: # CASE 2 a - symbol_after_dot = body[body.index('.') + 1] + if end_sign in body[:-1]: # CASE 2 a + symbol_after_dot = body[body.index(end_sign) + 1] if symbol_after_dot in self.G_prime.terminals: s = f's{self.Collection.index(self.LR1_GOTO(I, symbol_after_dot))}' @@ -150,9 +153,9 @@ def LR1_construct_table(self): parse_table[i][symbol_after_dot] += s - elif body[-1] == '.' and head[0] != self.G_prime.start: # CASE 2 b + elif body[-1] == end_sign and head[0] != self.G_prime.start: # CASE 2 b for j, (G_head, G_body) in enumerate(self.G_indexed): - if G_head == head[0] and (G_body == body[:-1] or G_body == ('^',) and body == ('.',)): + if G_head == head[0] and (G_body == body[:-1] or G_body == ('^',) and body == (end_sign,)): if parse_table[i][head[1]]: exit(-1) parse_table[i][head[1]] += '/' @@ -160,7 +163,7 @@ def LR1_construct_table(self): break else: # CASE 2 c - parse_table[i]['.'] = 'acc' + parse_table[i][end_sign] = 'acc' for A in self.G_prime.nonterminals: # CASE 3 j = self.LR1_GOTO(I, A) diff --git a/Parser/LR1Table/LR1TableUI.py b/Parser/LR1Table/LR1TableUI.py index 5f0ae09..19a0ee4 100644 --- a/Parser/LR1Table/LR1TableUI.py +++ b/Parser/LR1Table/LR1TableUI.py @@ -21,7 +21,6 @@ def initUI(self): self.grid.SetCellValue(0, 0, '状态') for i in range(len(self.action) + len(self.goto) - 1): - print(f"i = {i}, len(self.action) = {len(self.action)}, len(self.goto) = {len(self.goto)}") if i < len(self.action): self.grid.SetCellValue(0, i + 1, self.action[i]) else: diff --git a/Parser/LR1Table/__pycache__/LR1Table.cpython-310.pyc b/Parser/LR1Table/__pycache__/LR1Table.cpython-310.pyc index a972f727fb35fff47a48d468b5d323ba5e592ebc..296fcc4aa98f4c5c31e5c4a8aee58b5fdf1b22f5 100644 GIT binary patch delta 2960 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 cJas6Uc oc*zM2AWiVb5kR>IRB1EMTl*OkoxWt6RWX!?X~_gR2FZQkV@?%L+6{71f-gEof%2 zLd>WK83}V5ki~&)ImBUw{e@8w%_$ryj3pc?91!smt_9pBTv2MZ)TA&2 zMff1zS-@Yzyb$R16oz01O-{ceMqv1rvH^+bUE7{DG#0S}nN`*-nF_WFRiZiyIjMOX z#i==IdWp#;nfZB|AYox7;q?5He30NTMunH0K&_erle<|o*>ABH6lLa>Oy0s$z@-Hg X7GP9hQe&K~!@7)7aq?x>07gv!!7FUV diff --git a/__pycache__/utils.cpython-310.pyc b/__pycache__/utils.cpython-310.pyc index 8182f8d5303dc8c7b6ba7fa623c98ab87c581699..08eb5c372f102ed9faf295766e21604f34f02875 100644 GIT binary patch delta 30 kcmbQkH;0cmpO=@50SH1|rBY2d@^Y}VGjlNWF|zyz093~XHUIzs delta 30 kcmbQkH;0cmpO=@50SFrGq*Bc{@^Y}Vvv4r;F|zyz09RxMUH||9 diff --git a/main.py b/main.py index e22eeef..5193284 100644 --- a/main.py +++ b/main.py @@ -1,3 +1,6 @@ +import warnings +warnings.filterwarnings("ignore") + from Lexer import lexer from Parser import lr1_parser from Parser import lr1_table_ui diff --git a/utils.py b/utils.py index 776689a..3650f1a 100644 --- a/utils.py +++ b/utils.py @@ -38,7 +38,6 @@ def insert(self, cmd: str, level: int, num: int): lexer_output_dir = os.path.join(root_path, "Lexer", "LexerOutput") parser_output_dir = os.path.join(root_path, "Parser", "ParserOutput") - # 在过程调用时,首先在栈中开辟三个空间,存放静态链SL、动态链DL(B)和返回地址RA(P) call_init_offset = 3 From 6ce0bc855b10dc7aead031d4d02877d948f00e64 Mon Sep 17 00:00:00 2001 From: JinZhou5042 Date: Mon, 2 Oct 2023 00:31:26 -0400 Subject: [PATCH 8/9] bugs fix --- Parser/LR1Table/LR1Table.py | 31 +++++++------- Parser/LR1Table/LR1TableUI.py | 38 ------------------ .../__pycache__/LR1Table.cpython-310.pyc | Bin 5645 -> 5679 bytes .../__pycache__/LR1TableUI.cpython-310.pyc | Bin 1572 -> 1570 bytes 4 files changed, 16 insertions(+), 53 deletions(-) diff --git a/Parser/LR1Table/LR1Table.py b/Parser/LR1Table/LR1Table.py index 00dc3f7..24a8800 100644 --- a/Parser/LR1Table/LR1Table.py +++ b/Parser/LR1Table/LR1Table.py @@ -1,6 +1,7 @@ from .Grammar import Grammar -end_sign = '#' +end_sign = '$' +dot_sign = '•' def first_follow(G): def union(set_1, set_2): @@ -84,22 +85,22 @@ def LR1_CLOSURE(self, dict_of_trans: dict) -> dict: item_len = len(ret) for head, bodies in dict_of_trans.copy().items(): for body in bodies.copy(): - if end_sign in body[:-1]: - symbol_after_dot = body[body.index(end_sign) + 1] + if dot_sign in body[:-1]: + symbol_after_dot = body[body.index(dot_sign) + 1] if symbol_after_dot in self.G_prime.nonterminals: - symbol_need_first_loc = body.index(end_sign) + 2 + symbol_need_first_loc = body.index(dot_sign) + 2 if symbol_need_first_loc == len(body): # A -> ... .B for G_body in self.G_prime.grammar[symbol_after_dot]: ret.setdefault((symbol_after_dot, head[1]), set()).add( - (end_sign,) if G_body == ('^',) else (end_sign,) + G_body + (dot_sign,) if G_body == ('^',) else (dot_sign,) + G_body ) else: # A -> ... .BC for j in self.construct_follow(body[symbol_need_first_loc:], head[1]): for G_body in self.G_prime.grammar[symbol_after_dot]: ret.setdefault((symbol_after_dot, j), set()).add( - (end_sign,) if G_body == ('^',) else (end_sign,) + G_body + (dot_sign,) if G_body == ('^',) else (dot_sign,) + G_body ) if item_len == len(ret): break @@ -110,18 +111,18 @@ def LR1_GOTO(self, state: dict, c: str) -> dict: for head, bodies in state.items(): for body in bodies: - if end_sign in body[:-1]: - dot_pos = body.index(end_sign) + if dot_sign in body[:-1]: + dot_pos = body.index(dot_sign) if body[dot_pos + 1] == c: - replaced_dot_body = body[:dot_pos] + (c, end_sign) + body[dot_pos + 2:] + replaced_dot_body = body[:dot_pos] + (c, dot_sign) + body[dot_pos + 2:] for C_head, C_bodies in self.LR1_CLOSURE({head: {replaced_dot_body}}).items(): goto.setdefault(C_head, set()).update(C_bodies) return goto def LR1_items(self, G_prime): - # start_item == {("S'", '#'): {(end_sign, 'S')}} - start_item = {(G_prime.start, end_sign): {(end_sign, G_prime.start[:-1])}} + # start_item == {("S'", '#'): {(dot_sign, 'S')}} + start_item = {(G_prime.start, end_sign): {(dot_sign, G_prime.start[:-1])}} # 求 I0 的闭包 C = [self.LR1_CLOSURE(start_item)] while True: @@ -142,8 +143,8 @@ def LR1_construct_table(self): for i, I in enumerate(self.Collection): for head, bodies in I.items(): for body in bodies: - if end_sign in body[:-1]: # CASE 2 a - symbol_after_dot = body[body.index(end_sign) + 1] + if dot_sign in body[:-1]: # CASE 2 a + symbol_after_dot = body[body.index(dot_sign) + 1] if symbol_after_dot in self.G_prime.terminals: s = f's{self.Collection.index(self.LR1_GOTO(I, symbol_after_dot))}' @@ -153,9 +154,9 @@ def LR1_construct_table(self): parse_table[i][symbol_after_dot] += s - elif body[-1] == end_sign and head[0] != self.G_prime.start: # CASE 2 b + elif body[-1] == dot_sign and head[0] != self.G_prime.start: # CASE 2 b for j, (G_head, G_body) in enumerate(self.G_indexed): - if G_head == head[0] and (G_body == body[:-1] or G_body == ('^',) and body == (end_sign,)): + if G_head == head[0] and (G_body == body[:-1] or G_body == ('^',) and body == (dot_sign,)): if parse_table[i][head[1]]: exit(-1) parse_table[i][head[1]] += '/' diff --git a/Parser/LR1Table/LR1TableUI.py b/Parser/LR1Table/LR1TableUI.py index 19a0ee4..ed0363d 100644 --- a/Parser/LR1Table/LR1TableUI.py +++ b/Parser/LR1Table/LR1TableUI.py @@ -40,41 +40,3 @@ def initUI(self): sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.grid, 1, wx.EXPAND) self.SetSizer(sizer) - -""" -class LR1TableUI(QWidget): - def __init__(self, action, goto, table): - - super().__init__() - self.setWindowTitle("LR1分析表") - self.action = action - self.goto = goto - self.resize(860, 560) - self.action = sorted(self.action) - self.goto = sorted(self.goto) - self.table = table - self.Table = QTableWidget(len(self.table) + 1, len(self.action) + len(self.goto) + 1) - self.Table.verticalHeader().setHidden(True) - self.initUI() - - def initUI(self): - self.Table.setItem(0, 0, QTableWidgetItem('状态')) - for i in range(len(self.action) + len(self.action) - 1): - if i < len(self.action): - self.Table.setItem(0, i + 1, QTableWidgetItem(self.action[i])) - else: - self.Table.setItem(0, i + 1, QTableWidgetItem(self.goto[i - len(self.action)])) - for i in range(len(self.table)): - self.Table.setItem(i + 1, 0, QTableWidgetItem(str(i))) - for item in self.action: - if self.table[i][item] != ' ': - self.Table.setItem(i + 1, self.action.index(item) + 1, QTableWidgetItem(self.table[i][item])) - for item in self.goto: - if self.table[i][item]: - self.Table.setItem(i + 1, self.goto.index(item) + 1 + len(self.action), QTableWidgetItem(str(self.table[i][item]))) - self.Table.setItem(9, 0, QTableWidgetItem(str(9))) - mainlayout = QVBoxLayout() - mainlayout.addWidget(self.Table) - self.setLayout(mainlayout) - self.show() -""" \ No newline at end of file diff --git a/Parser/LR1Table/__pycache__/LR1Table.cpython-310.pyc b/Parser/LR1Table/__pycache__/LR1Table.cpython-310.pyc index 296fcc4aa98f4c5c31e5c4a8aee58b5fdf1b22f5..abde96c07787fbe8234d146fb94b606a5dd3b045 100644 GIT binary patch delta 654 zcmYL{&ubG=5XaxV{grgPX`2{hHC5CqByEgZL@82KEI}JvZQ6q?8bV&Ei6$k_2!b0> z+JlHe?3}zc9u<_b{sAg@5=8N2j^29cKTt2e*&N)%XTLMwH*bd7?M!}{bXFZ_fT^dJ z+g~~T${AZYp#s4K+-G&>GGKzcAT*Z?T^Q@k)pAUj!dhp-TH~%RLIsuzZ-XjILC?y` zQoUZ1yDi~s-fY#6aj+2i2H1F9dkus5No#{3Tc6+pKcu+HyinUFTZCZFLlE{ZVs|&!IN1F#dy>c(+m#@;V)bi_#>=C0K-W3NQRj z><1V{CAW~rOX)H>!SZL7>gl3dZuLJ)&^k*t70M!Z;z>y3+xQ{JkepKeW#P~G$q4;- MgG}c-gm`rPAK(9sE&u=k delta 684 zcmYL`%WG3X6vpSw+*iH1X_Gc7u@4Q#MPkKB@j(^wkr44wt;s?!7>V8x8=I7j!AF>& z&@M#lLTBa51Q7%mRq`MB*r^#=B&>=o^h5PXA4p5 zeRgX({=}I&ky3$2JXj(%;u0Vpb-`nvwn|)@BcARVtHd)_sLMPvPmk$KW__Q!3gxq)4F&l!n1HkLlVYp)BlsO0{V-|7 z8xs#m)vP*lbL0R7WjypSmd6&xKbWY771rd3P~BNm>Lz~ZG-;*fMkpXkCbYk3;67cqhO|ARPT9zhfkzUAFY^|kVy#islg-Zwjsi6e;f3a*j6a=l#g z_&GcU#|G{$VcK_hP^m|~lcO7;7nOV?ry`})RZROM$|}{@yv1wH!SMWB_h1?ec~QQK dOhQtAjBK+sj!)w;`7@FZSV{(nMlBjn`~^CUkct2R diff --git a/Parser/LR1Table/__pycache__/LR1TableUI.cpython-310.pyc b/Parser/LR1Table/__pycache__/LR1TableUI.cpython-310.pyc index 8259999e8c14c5753a790a256ba09131cb642f1c..076ab97047487f76eb5c9225aa3309112bc78e2b 100644 GIT binary patch delta 34 mcmZ3&vxtW;pO=@50SNltrBXH6Hu7 Date: Mon, 2 Oct 2023 00:58:29 -0400 Subject: [PATCH 9/9] update --- Parser/LR1Table/LR1Table.py | 22 +++++++++++++----- .../__pycache__/LR1Table.cpython-310.pyc | Bin 5679 -> 5888 bytes 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/Parser/LR1Table/LR1Table.py b/Parser/LR1Table/LR1Table.py index 24a8800..5e8cb1a 100644 --- a/Parser/LR1Table/LR1Table.py +++ b/Parser/LR1Table/LR1Table.py @@ -1,6 +1,6 @@ from .Grammar import Grammar -end_sign = '$' +end_sign = '#' dot_sign = '•' def first_follow(G): @@ -57,14 +57,14 @@ def __init__(self, G): # 构建项目集规范族 self.Collection = self.LR1_items(self.G_prime) - for i, item in enumerate(self.Collection): - print(i, ' ', item) # 构建LR1分析表 self.action = sorted(list(self.G_prime.terminals)) + [end_sign] self.goto = sorted(list(self.G_prime.nonterminals - {self.G_prime.start})) self.parse_table_symbols = self.action + self.goto self.parse_table = self.LR1_construct_table() + + self.print_info() def construct_follow(self, s: tuple, extra: str) -> set: ret = set() @@ -121,7 +121,6 @@ def LR1_GOTO(self, state: dict, c: str) -> dict: return goto def LR1_items(self, G_prime): - # start_item == {("S'", '#'): {(dot_sign, 'S')}} start_item = {(G_prime.start, end_sign): {(dot_sign, G_prime.start[:-1])}} # 求 I0 的闭包 C = [self.LR1_CLOSURE(start_item)] @@ -171,7 +170,6 @@ def LR1_construct_table(self): if j in self.Collection: parse_table[i][A] = self.Collection.index(j) - self.print_info() return parse_table def print_info(self): @@ -184,4 +182,16 @@ def print_info(self): print('TERMINALS', self.G_prime.terminals) print('NONTERMINALS', self.G_prime.nonterminals) print('SYMBOLS', self.G_prime.symbols) - print() \ No newline at end of file + print() + + for i, item in enumerate(self.Collection): + print("I" + str(i) + ":") + for key in item: + left_sign = key[0] + follow_sign = key[1] + candidates = item[key] + for candidate in candidates: + print(' ', left_sign, '-> ', end='') + for character in candidate: + print(character, end='') + print(',', follow_sign) diff --git a/Parser/LR1Table/__pycache__/LR1Table.cpython-310.pyc b/Parser/LR1Table/__pycache__/LR1Table.cpython-310.pyc index abde96c07787fbe8234d146fb94b606a5dd3b045..b5f6b1fb59544398d95d0d2c26cfdd902b1a93dd 100644 GIT binary patch delta 1341 zcmZ8hOKcle6n%F*V~=P2iDNrX(x{kz6pfPp=nqOs)i$(EKPgoO1w)Aj&m^&N?D)=9 zKp4x2NG$kBL{DPDitd0-g|cGLidEMG%Wk^tlBh!5`-ZksY`ydDJNM)F?#B;izc^gz z<@1)H&y(wu{?{*U6+VLfzxBT~3I=g$S{G>rk0hkGhG8iZ?Nobo6E-0%uRu*iVyP02 z{LfdF7FJ9gXKV+`q=-> z*@GJWF4hQQdj;LKH5cVR}8HU%lPh>M1IP$E0VDvmOj*UutfwgnnXm7zKelY^WJX>UN56hPs zt}rYzEHKy%6@q7BZZh!}!}0Bf{4p4EEGMhpffLNDFe(Bk7%wrD8E!EgB5=&)N)E{l zD+pbrmxlgY3>Wb#aj~A9-o@kW!Zk`D!_r}b&uIly1bYGGKZPss_x6S2Umy>bzM4>% z+vQUv({JS;rK`tIkmP8Xr!5Bj1(KU6a}`}#k}}}x>=heF<-^j^A->3%%JMs;+<_yH zX%qM+K_lfhn@%w{(Cx1Hs9t`A_&Do#@2&ahhW_p(^Xsw7pc2E4fV1qP`=7SLB$s1! zcJg>fRqzxmp%uddzRbq^81^$i6=?=hE^~q zZctvmIJDvQp#G3;v6p^Jk4McxH zR;4Jj$+F$=yZu{gf<|S#GM(Ciy8NNCZ-^h#C3oNqzDN6pR4C&|HTx?Qj3QPG1q`&@2ho2xFmO=^YRJ$;&@J)jkE1DG(T%|lu% z(1aHt4Wn8G%;(<`Fm0l9pgq-|>i^1<)i+MPMqaTI-dpeZxJ+^~wmki@?zNg>GSI5c hczTdK08h)GtFP2XatH7r9Ty!V`9n%(SU#!F{Rg$v4(|W} delta 1107 zcmZ9LOHUI~6vyYxtJBt&zL@f;O+g3_;UO&W38)}X#Rr;bqc)|CP?Q3T*}1eUH0Vdd5j;0GACZcJRcBnCa_PSAu&&Tr1S=iJ--KXdxB<8xbhAruNo_{frs*%wx&DLiZ-oQ^bG~1rEw?b z#IZt|OKiXfIMp+dlqyor{I{MIS(t?yi7GHxgDWOlji{`xNZWNgw5NVrnv^VUVpVI& zwD)CP2w31M##4Lc05VpJAL{E-zg=3Mw^`n?U2TySOAfF2rew>2oe&Aqhls%;Vz+P?_{V8*6A$E&yuuM zOAyD16Eq6P2ywzaLI=V!yeqY$pAD3qJaclS*o6T$K}DAkF5G856wsISK;M;hB3_`C zQ;4+8zlBHO`(CnYAB;EBcGZpq68{x>T`TT*Y;P5A+2mW%vF5YrSuzXZ%LVocybFnP z@hhV8U94Bg^I9d^`v5l_K<5v9No*96Rq};`6>&9|FU{CYNIpZ!F2b?Cl3-R%5WNsR zYsb)4?dL_uYoAGRK#WDMSbF?q!3ueoJ5T#AQWi#80|kwQQ-qrYalzZ@W%c3Qteu}` zw=i(wir2j?)d+Ft(0hwkzRY9se%;ViSWWSd(NwBHLvi$|==jmZ-{^zHH{a zn`qJ4Y0UBcMB@m~MmPGNWYQzr;3{Q@u{I1{b#9?pV*k~XMllnX>S-fctbrf;l4+Jh ze;2JBK^S1lgP_Ya>0t-}*UjFZUQD=}v%L7sW(D-UDWzd|)#+lv@#a^wn5Ko1UY6r4 YW_L1rqM0>gIALi_re$wr`B$^=FBqWEvH$=8