From 165feb6d59260bafbe6fbad15ccb7114ecebd92e Mon Sep 17 00:00:00 2001 From: Henrique Margotte <henriquemargotte@gmail.com> Date: Sat, 30 Nov 2024 20:54:52 -0300 Subject: [PATCH] problemas chamada procedimento --- MEPA | 18 +- compilador | Bin 45480 -> 45512 bytes compilador.output | 1011 +++++++++++++++++++++++---------------------- compilador.tab.c | 388 ++++++++--------- compilador.y | 21 +- teste2.pas | 2 +- teste6.pas | 1 + ts/ts.c | 56 ++- ts/ts.h | 2 +- ts/ts.o | Bin 3216 -> 5176 bytes 10 files changed, 776 insertions(+), 723 deletions(-) diff --git a/MEPA b/MEPA index 4c145d8..94c8cc4 100644 --- a/MEPA +++ b/MEPA @@ -1,15 +1,15 @@ INPP AMEM 1 - DSVS R00 -R01: ENPR 1 AMEM 1 - DSVS R02 -R02: NADA - CRCT 3 - ARMZ 1,1 - DMEM 2 + DSVS R00 R00: NADA - CRCT 8 + CRCT 5 ARMZ 0,0 - DMEM 0 + CRVL 0,1 + CRCT 5 + CRCT 2 + MULT + SOMA + ARMZ 0,1 + DMEM 2 PARA diff --git a/compilador b/compilador index fc42e009c85e53b9b110f44d7c8229b032d97328..66d4937bcc57708d219cd2e69fa3fca1f4554c37 100755 GIT binary patch delta 7821 zcmZ4SnCZl0rU@EM9IGa3-Q(i)V*mqAzsW+3dR$ZFz&wU2a+|#v^%xcRltTFE^chBo z_?gKwneK~dpI5wb`$O{`&p*a(LG?)q0Xwg@ZSG<A7hrt5`HrxdFw-fs&0o|+c$l_m zZRRqT=4E0un5^#bpD}&1x?>y@x8UY>M}J1X<@^i`&3koz|Nqa--_kqziIW=R_Q~AN z$&9Zj=R3zRrcFNMyoX7MXL6T|4~r*%`@zY#Tyz~Yv>6yYI*;uKIp@Vneg=k@O<W8N z9=)t0$PyDk5}8~K4BetjqCwKFZ~p!N@6pTqd9u5!22-5a<U&{9`u}_k3@>kRGB9{_ zi%LP1eE=!zyynq){6&)(SR+`ZS2R=$WG`6a1W4OLh_>BP3=G|@2cy7}oyT9W3xVw1 z2;%p)LbUSAgSDRX=sdmy>}vP3Ag8o`m~89DV_d?=z;K+kGzuic!0^(U6T}UIaZNZu z#<`;ycX4u!n=-E)$PwQ;Ku%;`IeCqnM7^{}x9FEhkaM0zGBE4|MOf$Y7k>pA7+$-3 z^s-iJg4}q_qnA}4WL)R*7tc@s|KEC`6r^ttSl>F3J|+eRhR)+Jj)L^@d-Sq;g7qDL zu@V#<-K>)$LB<?^!7aqV@G^x1WL<eA14Huxb;eHCyhsLy<E;yR|Njs2PB&{&Bm+Zd z>yqF9|9f<cMuP2#o}B2e7F+{0#e$E4!K3+zLN}`#*bv4}R@q1fhL^9|K?eVe02$2K z$@(<{)!d&ENaj9>0I7X6`Ifs{2s6~&{k$-9*TT$L62ZXmvIu0ZC`ins7nUUcsDpfj zh#vjZ|NnQhcEa>EOb+qT5VwbM%_6|bMICIZ=Hy%M^7WvQ_UL8x0?Bk9f58T`Tl7OX zD0*PY;3S$oU8g|FU@9b$KpX=}c$>IER<N!D>FzxKLRo-;;bjdQ$dmKK85o*hFm|#| z3uj<>nZX7!p0&ObY%nxSltDD-fi;6-dkdI#{DnLys5@D6LELWEv~UK7ZVwTUZq^tO zD}cuXmRwEs!Nx(;>a&v|M?$;+%XPxs3=A*du!1e;RcEM2<i}rJ3=A(XLu9_Ffr1t4 zs)rznT@Z-}$Py<&5(^;`XOJb<gCsg25<8G3rhz2#ArebK67?{5)q-TgATkp`GBAl0 zkc2Hnq6S&Q8zi9uk;p)nFak+%LnK0wB_u%-pIE?tcYsLLL&_oskjzbpj1EKwBJrG) zf#Kx=kVH4@tx!;)9DflEii~d7(_k(rmIT8f5;Z&^n)MV&qMP+Fh-y7hD&o=0dS4YJ zbNt0}P{u2S7`Hf-fuY;cfv1yo5=dn?>tv9CgGeW9TPOp=OCJ^nhHl<!keFy8NC7;K z{UL@y$|JVP0p9ZUY9IxjAh+azS;t>o2PLIWR#gzUn^g`(LERDu(f)!7<d!qc;N<!* z1eT({fLO>W$^)VtVq4vD%oMengJJSJZvlztA)tWel>n<p<Vc6fVm@;9jbKSgQtaiu zpbQEQgc@d$vE8C6NQxl2$(kROb6i58MTs?%f?m-HU{k=QIx`0Y!^=BNpz>B6q6S)J zq=D6(GxmU$-!qSa%d=m>AjcwS+>3l5t8N8Dt-2UI+0IX5@;@ITM$^fHzVf=g7&^X! z(}8FSMB)Xa^0~t|xxrOpa+seG<G#rqzKRz4N+AD&UHXWPf#KzDMo_4W{tW^<0$hkd z{F@3g5*E>-7Ly<Pin{NIr~;ec%gYBg3K4XUN5TGCgro>!R3$ISKTSbU|5Q%4_0z7u zdjvE7q(G&Us4>I<Xs|UYf*g#nWh+Qux2PDBB8V+-c|f*&3xwM8Hjshg<#GnF?_LIi zeFt_oL~)=osC4ZXy#SE`+Xa!afJkhINFZtH<ADby<78KVMaE5&)BRH!J13v@mt)MD z{Kj98Kds)fyVVC&P0jG=71f=r8K4l`Bg??Rzl}wJf8T-EV%@DCFj*6XcxNl9@$ypr z!~g#ix>>yg7#Ny={3|i*W_1W)U}!y1q1w%A7Qnz@tI5c~P%qKVsu{q*-~qCsVDhp6 zO{0JQP%nS=2YHj#O#u{Q$6xH@0kw+^K<%PZ$8Og1{vgBZ`MX(<PG$@gmDudhzyQvt z!cg_w-u?f7oOQ}%y+BzeF6qeyE~56^OG2AlO@9CX&)B>dL@`vjLKtcFHr-$eushDk zK>TRKSgML7Y&v;ipoQWes3iZs10LN|3x5Cq54JT#9^%TUZzul>G-aGM*&s-gF>tb1 zkh<$5If#@FH>kR{`2GJss4+32o7LJ65;PIrtOkA{-++Qf%?~MPB>kX4lQ4N(kb>}M zU#K5jp+<gtGx=qZox(b4h=bAG<N{SSeX@J7opivy|NpyNLDqY8hyF<M&=yhEU|?V< zVSRCI@`7L;zK;;qkm6|0<Xgeg^-sV;;M`@p|NnoFPS+nE&9y%mO2s^SSx<r`kH7f6 z_y7ML|NsC0|GId;00RTVi(C6ZN?DVAK#7$#21Iopf8opsZo>J1nm{0y50nMbvkamq z9Hh9LH2_3)9+!E+!wynv236|O?fS!`lXbB-1H+55$rC~p>s>$!TMv{fc=WQGf!zZt zsrA6D<1f-6hRTB!ft_va(akCd;&q39@aW~`2CGBl#bbLxIiB^sHzdB;_x=C>+Q_4u z^&Uu|+xG(~+&p?s@5+MZcQ7zSFfhEB1ktn`q^9%ui_3fe|DSO3@MnIxU!fkIPd%F7 z2zYeX{^%C%^8yFQW-#UZ!=u-9KHMAzh8Ny@|Nq|)3dI)>_x}GsSt?R@^43rlSsjq+ zovtrDx?OL8THiT){{Q!AKEMcK3rzkND$n#`_hj*~B*vb}Rbi%#VUst6y=Ih}JSW_Q z>FKV?m%=+4t0u=pIPtYh!Q9Ni@Z!|uH4)|Y%|{wMI%_*pJi1xH2>}$lh6g;FYdaW9 zcs#mYJ3P7>JfJn39Yp(!eLMdDf631T&X);Lu~j=jB_C@xlsg;5ZGOYy(aXvx&A<@g z)62V9ih;qWmlZ^L^s+7lD?C{5(aSm)%sk}L%Q_Rx0!7{&FbmqwS`Rkth=4~gD-T5c zg$+mu>bg$X880(HC4MjKe6Y0Z3XkKi+jJQi7}Acr?qgu^IPQ7?#Pc}rdIFU2JdV3w zfYS9hpo|Al`UQwiJMQ`c6i==*x*a%L50qwj^s>4`j9%c;4H6Y-{=rzn-u#29g#Wda zM=z@mM0Uk%NsnGubr^@oqnA|)%9#Mx7$D-&>$=UOmsbERe6Ai|ajx0%|NrYSup$SJ z<{ylu_8z^g?<7GH=DNV6m-QHgxdN=hLjpv3bO#7{^tvAK=ruh7mW75_BFHFik6zY; zU{P0yn>|3$Im4ry!3X4m?%EX|-JuIoJ;0GvdLYcV^Pp$v4-arLHW923YMRM*P+~hG z0I|_Q!=ux6hDUSl3<mzzUQnIf%UUG?a^>+CtG0o1jw`5Cfh499))&vV{r`V*vSg&Y zoE69%P}$M#`T~@2t3axuiCAv?<hn>Xrhi)}&x@QUo3<5V4k+n$9)F<@<8~f@A-#2S zV3cl@2-HTEt^fbOoB^s2ds#K0VgexLy{w8*E+d4S3g&{6Rsxs>^_(+A_KP^g2UoUC zz7Zv3p@yu46Ql%G=5#x7fN}?<>^tw#%eow@t9{G=|0fUg%eze0i<Xs0bYft5ab^q1 z3#Oq?3=I3ZK*izhEt`|0d6_mPH1O1KXBF7aA;P<zS=`WQyN#8__U+rZTW;TOV!hqg z&VKv$?f<rOZFg{V-TrO6v-fs4PmuI>ukB9TUAAxEZsfjwyTtc5+kL)m=i>Rsv)y<5 zHwf?mQQOtFYkc3noqhZE?-0QA=FRr)+kLiw+rEAKcb@H_#LY1Ie~w1IErTNigAxOS zg1V}jB7+Kpvb(U500)D;gNK==4FiL;tOkRID}xkR1C-EV&}Pt=k!Nrdv@<X?HZ?NQ zFt@O_(qzzOaQ4*F({O<(+rE9f6xhYvxBEfq?dF2pcWmFj{q^?ke0!d4-~N32b~cFA z<c&<C+KfzmqB8tK!XgrqQa;uS9OANSI=XuL28PiwMzIc#PR6#*CZ=W;=H3>elQ%Mn zq$k8B*{LwAMsRYaq^6~3WM<unWKm*OQfE_V4-2>F)+o`~SGvzXATTI6q@b{<xV%zR zOIu4DB9N2Ilb6pcAoxv8+U28?yrPYzm8-j(hjOx?Z(@9ur&k$6HpCkYa+5bQNv3<a zdhxO`a7eSV`9Ta|S7YYl<>F=G<yBEtXBU+emB^NmlUGnwQf6giWh<^w*U;3^gb0L% z^F~DSvvKn92(j>T@$$0s^0KgVbI7ps*?7A1N{AQ!7Xuab|NsA&n7olmYBFQKfv1bR zkAFa5a40XYCA%-Lx~G@79}5dNJBNgLh=m>>)La!+X*FI~HxDldCr>AKF9;Cx_V)7w zxk1v&%`3=ha#g;rvXirmtE-#4hleKwczJnwdwcu(`1$z<1_cC%goJ@YRDANod^ILU zhRN&&@tZRWA{guM-TnU`gk3KG{~vq#|NpYf|NpaJ`TyVU3Pc<vhYQcS^8f#8sJa(d z{{OGO`v3oztC;$7ul@g@d>vE#-rfK8V9Rk?fK9v{YS8EF|Nryc`2Sz^#{d6zH~#+* zzw!Tn!Hxg_J8%5|zvu?UvfVfS|GxrdzrFGQKif@+xctrk|0m!4|Nrt$_5c5)Z$SiS z-unNa`S$<+Q*QtNuW|<>26903o&WzWCf_Z(EF6-Ul$w*Mkdmqpe0XhcQhrW;@#L+= zDw0^lt-wiZ^26f5dR+#W)Z(1{WQLH;f_w(Q%(B!R2Is_*)N}^Vl+?TuutEj~h8hJ` zT|<Ln1rTk4Lcv5~v=K-Z7lTV`Nn%b$YB7T@Ls&3_XI@EaW>G$aQ+|F<YGNLPU$Cnu zgK7#xfOimsYO#(&Kw?p1Zn2euY6^pYX-QE&b_-L$*264<(NGH+7$&bSo?Cx{k%7U2 zfq@}q*8l&17#SE$=KTM!!o<MfGUxw)8zu$@mU;jGKVf8GcsuX^{}3hy2Fp$V|5q?E zF!b#B|9=h>1H<l}|Nrj+(YyZt2lX?1_Wb|<hlzm!)R2;4W?*RD_y4~GGXq1-{{R0I zm>C$j5B&e%z|6p~;=up^3z!+|87vO||9^m)f#L7L|NkE_Gce3M^#4Bt3j@Ql!~g#) zurM%m9{K;@frWwL*wO$06Id7+P9FRJzk!8;;rp@w{}-?@FkC+V|37FPg8#(-|94mz z801g<|Nn=Dfx+O!|Nk<q3=EDZ{{OdOWnc(A@&A7eD+5E)iU0p=SQ!{9PyGKshqa!8 zVe*Op|M##mFsua`z{<d|7i0h{1H%=N0c;EmmM8!Jw_#&o01X<&urV;OocjMCG;pPR z>i_>aYzz!Or~d!n!^Xf+a_ay8J8TRL0{8y^|HH<>z<U4xe;IZLhAsF1|F>ahVEBCh z|Nj_v1_p@-|Nqy38paR*|6kz2&cKlH=>Pu%><kR@kN^LFz|O$X`uP8U1`Y;>4^RL9 zSK(k_5PkOlzY7Ng!?I`p|AWRR^`8I#-@?Jb!1Ch%|0Ns@3?eW7|KBs2wM<z`V$T2n zYM><O!VYT6GpH~yFqkkfFeJ>F>{O;^#4+ptf3P@62?GOz2&n%6V$b^j{{U#b55#6* zU{GLSVCZ3BV3;^(@~ko?rk(32?<-TPf3fxde|?ZDS3ZF@CTCtYW;I40b`Ay^1_p*N z3=9n4xBdUmfGp4S9V88w7hz;zxW4`W|BJ}-%qQUbO&A#%I(Gj5?~WpG2bKr9CWMiJ znPL5|$w}o(Ot!lxx0TB=iR_uYtXz(%dC%ly<#J36dnZ3Dmt!i}JDIIQj!AUiWVH%8 zrfK^oyH&_B)$O00Rw2jacwll{g&b4d!O6=&yhD?ZRmd^<ADaBELav_s@c;idAm79M z#=rn^H!}l+_F-tK!Q|Y*-U7>;Ff%YnAO8Pe5LvGWLOz6<fq@5)d<iJwANpSpi54st zOkrkVczX!91zVUI815bV|6d&00e%PvTw!KlxO(XSe{g#MW_}<-{tGh$!}&w?xD|+i zvfLp&A;7}GuoI61LRc6WHXQo@KNZ=5Ofg^=fKpBg3j@Q~`a}Q!uSHR?1g>BT3j;&b z;s5`^Q#vpogo35PQLu%DfuZ5>|NolE`V$cHS3qUR;s5{Tk>$e>@?TgO80tF?|Njr_ zO*6nOh({<8VP#;LaQOfKIl>GKaCzp*!XOnOADFN*Fz{Ue|Nkqp1x#;1(qIRMure?_ zy#D|HdKCF(aQPBe24@CPU1yK10K|qS!YQl_4E><G5hMn4AS49AS#=951H+UXlMhuZ zG0ESW{H$6oZN{zt|G~qwFx5=k;MPg7F)*0l{{KG>*)*nDuskTMS+FrM)ZYI8Kbr~J zyGcx71yC1(ioqjyCwtXMv4Kj$lXoX))kv{{3PY=Vle=o9*g)msqI;89)ktZBio}Tf z|Nny;(;zEB7*z0lVPjwjxc~pZ4oJX*Pav6(WAn$FK)%TjdMud!#BP@A)nk{e0!cD3 zFeEZDFfcL*F)-vp1ga({P7#*`Yh_?yD1yo!fXeDjo;XEZG999np#>`2kOvV+pL}qN zINapPFxh;Ftk>j^Q^Xm)CUZ`0XPQtqIUq%3^0KK$OnXWv-<s;iv?hA9(lj|n#)8R? z)AgAyMo%u9uE!)3F?rE+J*K3X$(N>=F&>=kIm4alRm|i`GxQWM#6nDkxpX261A`EQ z0E2-8M10QVhcncf{=`n^n)#2>cQfa#a7M=F$%(VCGhUf&Ij5iT_U4mw*clnmOujf* zoN@i+mvgm6LE0T7A=<%l#K6E1Fj;V(xMUbR1A`!g6vK%H5Lp%o#gIJNah^D1@#KZ` z#2H&B7tRxx?1QTOf~ImRNR8wQc8DWy+d>Qg7j6s;3>!hRj7P!bwaJY0^%-AIHk>cc z`jwr5L1FSnCSgN<4v5YJP;bNHTns8+X$LV8Tv{<OFepu)IA2^+hXdm77f{!5Kol_; zOg=bYpV52r$NA!tF;Ek}LQMdd77PpwS(6nPh%**$wp<X)&Y7EETvC)6UsAkz>hg(9 zn>AKFU}m!Mn#{FMkLwTAMSo%^JFRnL+ATV{Yn`6p9<+JkGm}rQ(--O}hd2O6^RRE` eTK|ucQDHLYMsv;#s4H70du}vmd^5RmqdEWz2j3<D delta 6813 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 VnsWv~ZLFG{xzU{Q)Z~R5)d9_wdo=(6 diff --git a/compilador.output b/compilador.output index 903e78d..37a9853 100644 --- a/compilador.output +++ b/compilador.output @@ -9,7 +9,7 @@ Terminais sem uso na gramática NOT -Estado 70 conflitos: 1 de redução/redução +Estado 71 conflitos: 1 de redução/redução Gramática @@ -75,58 +75,61 @@ Gramática 35 | comando_repetitivo 36 | leitura 37 | escrita + 38 | chamada_procedimento - 38 leitura: READ ABRE_PARENTESES lista_leituras FECHA_PARENTESES + 39 chamada_procedimento: ε - 39 lista_leituras: lista_leituras VIRGULA simb_leitura - 40 | simb_leitura + 40 leitura: READ ABRE_PARENTESES lista_leituras FECHA_PARENTESES - 41 simb_leitura: IDENT + 41 lista_leituras: lista_leituras VIRGULA simb_leitura + 42 | simb_leitura - 42 escrita: WRITE ABRE_PARENTESES lista_escritas FECHA_PARENTESES + 43 simb_leitura: IDENT - 43 lista_escritas: lista_escritas VIRGULA expressao_simples - 44 | expressao_simples + 44 escrita: WRITE ABRE_PARENTESES lista_escritas FECHA_PARENTESES - 45 expressao: expressao IGUAL expressao_simples - 46 | expressao DIFERENTE expressao_simples - 47 | expressao MENOR expressao_simples - 48 | expressao MENOR_IGUAL expressao_simples - 49 | expressao MAIOR expressao_simples - 50 | expressao MAIOR_IGUAL expressao_simples - 51 | expressao_simples + 45 lista_escritas: lista_escritas VIRGULA expressao_simples + 46 | expressao_simples - 52 expressao_simples: expressao_simples MAIS termo - 53 | expressao_simples MENOS termo - 54 | termo + 47 expressao: expressao IGUAL expressao_simples + 48 | expressao DIFERENTE expressao_simples + 49 | expressao MENOR expressao_simples + 50 | expressao MENOR_IGUAL expressao_simples + 51 | expressao MAIOR expressao_simples + 52 | expressao MAIOR_IGUAL expressao_simples + 53 | expressao_simples - 55 termo: termo ASTERISCO fator - 56 | termo DIV fator - 57 | fator + 54 expressao_simples: expressao_simples MAIS termo + 55 | expressao_simples MENOS termo + 56 | termo - 58 $@8: ε + 57 termo: termo ASTERISCO fator + 58 | termo DIV fator + 59 | fator - 59 atribuicao: IDENT $@8 ATRIBUICAO expressao_simples + 60 $@8: ε - 60 fator: IDENT - 61 | NUMERO + 61 atribuicao: IDENT $@8 ATRIBUICAO expressao_simples - 62 numero: NUMERO + 62 fator: IDENT + 63 | NUMERO - 63 $@9: ε + 64 numero: NUMERO - 64 $@10: ε + 65 $@9: ε - 65 comando_repetitivo: $@9 WHILE expressao DO $@10 comando_sem_rotulo + 66 $@10: ε - 66 comando_condicional: if_then cond_else + 67 comando_repetitivo: $@9 WHILE expressao DO $@10 comando_sem_rotulo - 67 cond_else: ELSE comando_sem_rotulo - 68 | ε + 68 comando_condicional: if_then cond_else - 69 $@11: ε + 69 cond_else: ELSE comando_sem_rotulo + 70 | ε - 70 if_then: IF expressao $@11 THEN comando_sem_rotulo + 71 $@11: ε + + 72 if_then: IF expressao $@11 THEN comando_sem_rotulo Terminais, com as regras onde eles aparecem @@ -134,44 +137,44 @@ Terminais, com as regras onde eles aparecem $end (0) 0 error (256) PROGRAM (258) 2 - ABRE_PARENTESES (259) 2 38 42 - FECHA_PARENTESES (260) 2 38 42 - VIRGULA (261) 6 18 20 39 43 + ABRE_PARENTESES (259) 2 40 44 + FECHA_PARENTESES (260) 2 40 44 + VIRGULA (261) 6 18 20 41 45 PONTO_E_VIRGULA (262) 2 16 25 27 28 DOIS_PONTOS (263) 16 30 PONTO (264) 2 T_BEGIN (265) 26 T_END (266) 26 VAR (267) 10 - IDENT (268) 2 17 18 19 20 21 25 41 59 60 - ATRIBUICAO (269) 59 + IDENT (268) 2 17 18 19 20 21 25 43 61 62 + ATRIBUICAO (269) 61 LABEL (270) 6 TYPE (271) ARRAY (272) PROCEDURE (273) 25 FUNCTION (274) GOTO (275) - IF (276) 70 - THEN (277) 70 - ELSE (278) 67 - WHILE (279) 65 - DO (280) 65 + IF (276) 72 + THEN (277) 72 + ELSE (278) 69 + WHILE (279) 67 + DO (280) 67 OR (281) - DIV (282) 56 + DIV (282) 58 AND (283) NOT (284) - IGUAL (285) 45 - DIFERENTE (286) 46 - MENOR_IGUAL (287) 48 - MAIOR_IGUAL (288) 50 - MENOR (289) 47 - MAIOR (290) 49 - MAIS (291) 52 - MENOS (292) 53 - ASTERISCO (293) 55 - NUMERO (294) 61 62 - READ (295) 38 - WRITE (296) 42 + IGUAL (285) 47 + DIFERENTE (286) 48 + MENOR_IGUAL (287) 50 + MAIOR_IGUAL (288) 52 + MENOR (289) 49 + MAIOR (290) 51 + MAIS (291) 54 + MENOS (292) 55 + ASTERISCO (293) 57 + NUMERO (294) 63 64 + READ (295) 40 + WRITE (296) 44 LOWER_THAN_ELSE (297) @@ -246,65 +249,68 @@ Não terminais com as regras onde eles aparecem à esquerda: 30 31 à direita: 27 28 comando_sem_rotulo (66) - à esquerda: 32 33 34 35 36 37 - à direita: 30 31 65 67 70 - leitura (67) - à esquerda: 38 + à esquerda: 32 33 34 35 36 37 38 + à direita: 30 31 67 69 72 + chamada_procedimento (67) + à esquerda: 39 + à direita: 38 + leitura (68) + à esquerda: 40 à direita: 36 - lista_leituras (68) - à esquerda: 39 40 - à direita: 38 39 - simb_leitura (69) - à esquerda: 41 - à direita: 39 40 - escrita (70) - à esquerda: 42 + lista_leituras (69) + à esquerda: 41 42 + à direita: 40 41 + simb_leitura (70) + à esquerda: 43 + à direita: 41 42 + escrita (71) + à esquerda: 44 à direita: 37 - lista_escritas (71) - à esquerda: 43 44 - à direita: 42 43 - expressao (72) - à esquerda: 45 46 47 48 49 50 51 - à direita: 45 46 47 48 49 50 65 70 - expressao_simples (73) - à esquerda: 52 53 54 - à direita: 43 44 45 46 47 48 49 50 51 52 53 59 - termo (74) - à esquerda: 55 56 57 - à direita: 52 53 54 55 56 - atribuicao (75) - à esquerda: 59 + lista_escritas (72) + à esquerda: 45 46 + à direita: 44 45 + expressao (73) + à esquerda: 47 48 49 50 51 52 53 + à direita: 47 48 49 50 51 52 67 72 + expressao_simples (74) + à esquerda: 54 55 56 + à direita: 45 46 47 48 49 50 51 52 53 54 55 61 + termo (75) + à esquerda: 57 58 59 + à direita: 54 55 56 57 58 + atribuicao (76) + à esquerda: 61 à direita: 32 - $@8 (76) - à esquerda: 58 - à direita: 59 - fator (77) - à esquerda: 60 61 - à direita: 55 56 57 - numero (78) - à esquerda: 62 + $@8 (77) + à esquerda: 60 + à direita: 61 + fator (78) + à esquerda: 62 63 + à direita: 57 58 59 + numero (79) + à esquerda: 64 à direita: 30 - comando_repetitivo (79) - à esquerda: 65 + comando_repetitivo (80) + à esquerda: 67 à direita: 35 - $@9 (80) - à esquerda: 63 - à direita: 65 - $@10 (81) - à esquerda: 64 - à direita: 65 - comando_condicional (82) + $@9 (81) + à esquerda: 65 + à direita: 67 + $@10 (82) à esquerda: 66 + à direita: 67 + comando_condicional (83) + à esquerda: 68 à direita: 34 - cond_else (83) - à esquerda: 67 68 - à direita: 66 - if_then (84) - à esquerda: 70 - à direita: 66 - $@11 (85) - à esquerda: 69 - à direita: 70 + cond_else (84) + à esquerda: 69 70 + à direita: 68 + if_then (85) + à esquerda: 72 + à direita: 68 + $@11 (86) + à esquerda: 71 + à direita: 72 Estado 0 @@ -600,21 +606,23 @@ Estado 34 READ deslocar, e ir ao estado 42 WRITE deslocar, e ir ao estado 43 - WHILE reduzir usando a regra 63 ($@9) - $padrão reduzir usando a regra 29 (comandos) - - comando_composto ir ao estado 44 - comandos ir ao estado 45 - comando ir ao estado 46 - comando_sem_rotulo ir ao estado 47 - leitura ir ao estado 48 - escrita ir ao estado 49 - atribuicao ir ao estado 50 - numero ir ao estado 51 - comando_repetitivo ir ao estado 52 - $@9 ir ao estado 53 - comando_condicional ir ao estado 54 - if_then ir ao estado 55 + PONTO_E_VIRGULA reduzir usando a regra 39 (chamada_procedimento) + WHILE reduzir usando a regra 65 ($@9) + $padrão reduzir usando a regra 29 (comandos) + + comando_composto ir ao estado 44 + comandos ir ao estado 45 + comando ir ao estado 46 + comando_sem_rotulo ir ao estado 47 + chamada_procedimento ir ao estado 48 + leitura ir ao estado 49 + escrita ir ao estado 50 + atribuicao ir ao estado 51 + numero ir ao estado 52 + comando_repetitivo ir ao estado 53 + $@9 ir ao estado 54 + comando_condicional ir ao estado 55 + if_then ir ao estado 56 Estado 35 @@ -628,66 +636,66 @@ Estado 36 18 lista_id_var: lista_id_var VIRGULA • IDENT - IDENT deslocar, e ir ao estado 56 + IDENT deslocar, e ir ao estado 57 Estado 37 16 declara_var: $@5 lista_id_var DOIS_PONTOS • tipo $@6 PONTO_E_VIRGULA - IDENT deslocar, e ir ao estado 57 + IDENT deslocar, e ir ao estado 58 - tipo ir ao estado 58 + tipo ir ao estado 59 Estado 38 25 declaracao_procedimento: PROCEDURE IDENT $@7 • PONTO_E_VIRGULA bloco - PONTO_E_VIRGULA deslocar, e ir ao estado 59 + PONTO_E_VIRGULA deslocar, e ir ao estado 60 Estado 39 - 59 atribuicao: IDENT • $@8 ATRIBUICAO expressao_simples + 61 atribuicao: IDENT • $@8 ATRIBUICAO expressao_simples - $padrão reduzir usando a regra 58 ($@8) + $padrão reduzir usando a regra 60 ($@8) - $@8 ir ao estado 60 + $@8 ir ao estado 61 Estado 40 - 70 if_then: IF • expressao $@11 THEN comando_sem_rotulo + 72 if_then: IF • expressao $@11 THEN comando_sem_rotulo - IDENT deslocar, e ir ao estado 61 - NUMERO deslocar, e ir ao estado 62 + IDENT deslocar, e ir ao estado 62 + NUMERO deslocar, e ir ao estado 63 - expressao ir ao estado 63 - expressao_simples ir ao estado 64 - termo ir ao estado 65 - fator ir ao estado 66 + expressao ir ao estado 64 + expressao_simples ir ao estado 65 + termo ir ao estado 66 + fator ir ao estado 67 Estado 41 - 62 numero: NUMERO • + 64 numero: NUMERO • - $padrão reduzir usando a regra 62 (numero) + $padrão reduzir usando a regra 64 (numero) Estado 42 - 38 leitura: READ • ABRE_PARENTESES lista_leituras FECHA_PARENTESES + 40 leitura: READ • ABRE_PARENTESES lista_leituras FECHA_PARENTESES - ABRE_PARENTESES deslocar, e ir ao estado 67 + ABRE_PARENTESES deslocar, e ir ao estado 68 Estado 43 - 42 escrita: WRITE • ABRE_PARENTESES lista_escritas FECHA_PARENTESES + 44 escrita: WRITE • ABRE_PARENTESES lista_escritas FECHA_PARENTESES - ABRE_PARENTESES deslocar, e ir ao estado 68 + ABRE_PARENTESES deslocar, e ir ao estado 69 Estado 44 @@ -701,7 +709,7 @@ Estado 45 26 comando_composto: T_BEGIN comandos • T_END - T_END deslocar, e ir ao estado 69 + T_END deslocar, e ir ao estado 70 Estado 46 @@ -709,7 +717,7 @@ Estado 46 27 comandos: comando • PONTO_E_VIRGULA comandos 28 | comando • PONTO_E_VIRGULA - PONTO_E_VIRGULA deslocar, e ir ao estado 70 + PONTO_E_VIRGULA deslocar, e ir ao estado 71 Estado 47 @@ -721,88 +729,95 @@ Estado 47 Estado 48 + 38 comando_sem_rotulo: chamada_procedimento • + + $padrão reduzir usando a regra 38 (comando_sem_rotulo) + + +Estado 49 + 36 comando_sem_rotulo: leitura • $padrão reduzir usando a regra 36 (comando_sem_rotulo) -Estado 49 +Estado 50 37 comando_sem_rotulo: escrita • $padrão reduzir usando a regra 37 (comando_sem_rotulo) -Estado 50 +Estado 51 32 comando_sem_rotulo: atribuicao • $padrão reduzir usando a regra 32 (comando_sem_rotulo) -Estado 51 +Estado 52 30 comando: numero • DOIS_PONTOS comando_sem_rotulo - DOIS_PONTOS deslocar, e ir ao estado 71 + DOIS_PONTOS deslocar, e ir ao estado 72 -Estado 52 +Estado 53 35 comando_sem_rotulo: comando_repetitivo • $padrão reduzir usando a regra 35 (comando_sem_rotulo) -Estado 53 +Estado 54 - 65 comando_repetitivo: $@9 • WHILE expressao DO $@10 comando_sem_rotulo + 67 comando_repetitivo: $@9 • WHILE expressao DO $@10 comando_sem_rotulo - WHILE deslocar, e ir ao estado 72 + WHILE deslocar, e ir ao estado 73 -Estado 54 +Estado 55 34 comando_sem_rotulo: comando_condicional • $padrão reduzir usando a regra 34 (comando_sem_rotulo) -Estado 55 +Estado 56 - 66 comando_condicional: if_then • cond_else + 68 comando_condicional: if_then • cond_else - ELSE deslocar, e ir ao estado 73 + ELSE deslocar, e ir ao estado 74 - $padrão reduzir usando a regra 68 (cond_else) + $padrão reduzir usando a regra 70 (cond_else) - cond_else ir ao estado 74 + cond_else ir ao estado 75 -Estado 56 +Estado 57 18 lista_id_var: lista_id_var VIRGULA IDENT • $padrão reduzir usando a regra 18 (lista_id_var) -Estado 57 +Estado 58 17 tipo: IDENT • $padrão reduzir usando a regra 17 (tipo) -Estado 58 +Estado 59 16 declara_var: $@5 lista_id_var DOIS_PONTOS tipo • $@6 PONTO_E_VIRGULA $padrão reduzir usando a regra 15 ($@6) - $@6 ir ao estado 75 + $@6 ir ao estado 76 -Estado 59 +Estado 60 25 declaracao_procedimento: PROCEDURE IDENT $@7 PONTO_E_VIRGULA • bloco @@ -810,115 +825,115 @@ Estado 59 $padrão reduzir usando a regra 7 (parte_declara_rotulos) - bloco ir ao estado 76 + bloco ir ao estado 77 parte_declara_rotulos ir ao estado 15 -Estado 60 - - 59 atribuicao: IDENT $@8 • ATRIBUICAO expressao_simples - - ATRIBUICAO deslocar, e ir ao estado 77 - - Estado 61 - 60 fator: IDENT • + 61 atribuicao: IDENT $@8 • ATRIBUICAO expressao_simples - $padrão reduzir usando a regra 60 (fator) + ATRIBUICAO deslocar, e ir ao estado 78 Estado 62 - 61 fator: NUMERO • + 62 fator: IDENT • - $padrão reduzir usando a regra 61 (fator) + $padrão reduzir usando a regra 62 (fator) Estado 63 - 45 expressao: expressao • IGUAL expressao_simples - 46 | expressao • DIFERENTE expressao_simples - 47 | expressao • MENOR expressao_simples - 48 | expressao • MENOR_IGUAL expressao_simples - 49 | expressao • MAIOR expressao_simples - 50 | expressao • MAIOR_IGUAL expressao_simples - 70 if_then: IF expressao • $@11 THEN comando_sem_rotulo - - IGUAL deslocar, e ir ao estado 78 - DIFERENTE deslocar, e ir ao estado 79 - MENOR_IGUAL deslocar, e ir ao estado 80 - MAIOR_IGUAL deslocar, e ir ao estado 81 - MENOR deslocar, e ir ao estado 82 - MAIOR deslocar, e ir ao estado 83 + 63 fator: NUMERO • - $padrão reduzir usando a regra 69 ($@11) - - $@11 ir ao estado 84 + $padrão reduzir usando a regra 63 (fator) Estado 64 - 51 expressao: expressao_simples • - 52 expressao_simples: expressao_simples • MAIS termo - 53 | expressao_simples • MENOS termo + 47 expressao: expressao • IGUAL expressao_simples + 48 | expressao • DIFERENTE expressao_simples + 49 | expressao • MENOR expressao_simples + 50 | expressao • MENOR_IGUAL expressao_simples + 51 | expressao • MAIOR expressao_simples + 52 | expressao • MAIOR_IGUAL expressao_simples + 72 if_then: IF expressao • $@11 THEN comando_sem_rotulo - MAIS deslocar, e ir ao estado 85 - MENOS deslocar, e ir ao estado 86 + IGUAL deslocar, e ir ao estado 79 + DIFERENTE deslocar, e ir ao estado 80 + MENOR_IGUAL deslocar, e ir ao estado 81 + MAIOR_IGUAL deslocar, e ir ao estado 82 + MENOR deslocar, e ir ao estado 83 + MAIOR deslocar, e ir ao estado 84 - $padrão reduzir usando a regra 51 (expressao) + $padrão reduzir usando a regra 71 ($@11) + + $@11 ir ao estado 85 Estado 65 - 54 expressao_simples: termo • - 55 termo: termo • ASTERISCO fator - 56 | termo • DIV fator + 53 expressao: expressao_simples • + 54 expressao_simples: expressao_simples • MAIS termo + 55 | expressao_simples • MENOS termo - DIV deslocar, e ir ao estado 87 - ASTERISCO deslocar, e ir ao estado 88 + MAIS deslocar, e ir ao estado 86 + MENOS deslocar, e ir ao estado 87 - $padrão reduzir usando a regra 54 (expressao_simples) + $padrão reduzir usando a regra 53 (expressao) Estado 66 - 57 termo: fator • + 56 expressao_simples: termo • + 57 termo: termo • ASTERISCO fator + 58 | termo • DIV fator - $padrão reduzir usando a regra 57 (termo) + DIV deslocar, e ir ao estado 88 + ASTERISCO deslocar, e ir ao estado 89 + $padrão reduzir usando a regra 56 (expressao_simples) -Estado 67 - 38 leitura: READ ABRE_PARENTESES • lista_leituras FECHA_PARENTESES +Estado 67 - IDENT deslocar, e ir ao estado 89 + 59 termo: fator • - lista_leituras ir ao estado 90 - simb_leitura ir ao estado 91 + $padrão reduzir usando a regra 59 (termo) Estado 68 - 42 escrita: WRITE ABRE_PARENTESES • lista_escritas FECHA_PARENTESES + 40 leitura: READ ABRE_PARENTESES • lista_leituras FECHA_PARENTESES - IDENT deslocar, e ir ao estado 61 - NUMERO deslocar, e ir ao estado 62 + IDENT deslocar, e ir ao estado 90 - lista_escritas ir ao estado 92 - expressao_simples ir ao estado 93 - termo ir ao estado 65 - fator ir ao estado 66 + lista_leituras ir ao estado 91 + simb_leitura ir ao estado 92 Estado 69 + 44 escrita: WRITE ABRE_PARENTESES • lista_escritas FECHA_PARENTESES + + IDENT deslocar, e ir ao estado 62 + NUMERO deslocar, e ir ao estado 63 + + lista_escritas ir ao estado 93 + expressao_simples ir ao estado 94 + termo ir ao estado 66 + fator ir ao estado 67 + + +Estado 70 + 26 comando_composto: T_BEGIN comandos T_END • $padrão reduzir usando a regra 26 (comando_composto) -Estado 70 +Estado 71 27 comandos: comando PONTO_E_VIRGULA • comandos 28 | comando PONTO_E_VIRGULA • @@ -930,26 +945,28 @@ Estado 70 READ deslocar, e ir ao estado 42 WRITE deslocar, e ir ao estado 43 - T_END reduzir usando a regra 28 (comandos) - T_END [reduzir usando a regra 29 (comandos)] - WHILE reduzir usando a regra 63 ($@9) - $padrão reduzir usando a regra 28 (comandos) - - comando_composto ir ao estado 44 - comandos ir ao estado 94 - comando ir ao estado 46 - comando_sem_rotulo ir ao estado 47 - leitura ir ao estado 48 - escrita ir ao estado 49 - atribuicao ir ao estado 50 - numero ir ao estado 51 - comando_repetitivo ir ao estado 52 - $@9 ir ao estado 53 - comando_condicional ir ao estado 54 - if_then ir ao estado 55 + PONTO_E_VIRGULA reduzir usando a regra 39 (chamada_procedimento) + T_END reduzir usando a regra 28 (comandos) + T_END [reduzir usando a regra 29 (comandos)] + WHILE reduzir usando a regra 65 ($@9) + $padrão reduzir usando a regra 28 (comandos) + + comando_composto ir ao estado 44 + comandos ir ao estado 95 + comando ir ao estado 46 + comando_sem_rotulo ir ao estado 47 + chamada_procedimento ir ao estado 48 + leitura ir ao estado 49 + escrita ir ao estado 50 + atribuicao ir ao estado 51 + numero ir ao estado 52 + comando_repetitivo ir ao estado 53 + $@9 ir ao estado 54 + comando_condicional ir ao estado 55 + if_then ir ao estado 56 -Estado 71 +Estado 72 30 comando: numero DOIS_PONTOS • comando_sem_rotulo @@ -959,35 +976,37 @@ Estado 71 READ deslocar, e ir ao estado 42 WRITE deslocar, e ir ao estado 43 - $padrão reduzir usando a regra 63 ($@9) + WHILE reduzir usando a regra 65 ($@9) + $padrão reduzir usando a regra 39 (chamada_procedimento) - comando_composto ir ao estado 44 - comando_sem_rotulo ir ao estado 95 - leitura ir ao estado 48 - escrita ir ao estado 49 - atribuicao ir ao estado 50 - comando_repetitivo ir ao estado 52 - $@9 ir ao estado 53 - comando_condicional ir ao estado 54 - if_then ir ao estado 55 + comando_composto ir ao estado 44 + comando_sem_rotulo ir ao estado 96 + chamada_procedimento ir ao estado 48 + leitura ir ao estado 49 + escrita ir ao estado 50 + atribuicao ir ao estado 51 + comando_repetitivo ir ao estado 53 + $@9 ir ao estado 54 + comando_condicional ir ao estado 55 + if_then ir ao estado 56 -Estado 72 +Estado 73 - 65 comando_repetitivo: $@9 WHILE • expressao DO $@10 comando_sem_rotulo + 67 comando_repetitivo: $@9 WHILE • expressao DO $@10 comando_sem_rotulo - IDENT deslocar, e ir ao estado 61 - NUMERO deslocar, e ir ao estado 62 + IDENT deslocar, e ir ao estado 62 + NUMERO deslocar, e ir ao estado 63 - expressao ir ao estado 96 - expressao_simples ir ao estado 64 - termo ir ao estado 65 - fator ir ao estado 66 + expressao ir ao estado 97 + expressao_simples ir ao estado 65 + termo ir ao estado 66 + fator ir ao estado 67 -Estado 73 +Estado 74 - 67 cond_else: ELSE • comando_sem_rotulo + 69 cond_else: ELSE • comando_sem_rotulo T_BEGIN deslocar, e ir ao estado 34 IDENT deslocar, e ir ao estado 39 @@ -995,482 +1014,486 @@ Estado 73 READ deslocar, e ir ao estado 42 WRITE deslocar, e ir ao estado 43 - $padrão reduzir usando a regra 63 ($@9) - - comando_composto ir ao estado 44 - comando_sem_rotulo ir ao estado 97 - leitura ir ao estado 48 - escrita ir ao estado 49 - atribuicao ir ao estado 50 - comando_repetitivo ir ao estado 52 - $@9 ir ao estado 53 - comando_condicional ir ao estado 54 - if_then ir ao estado 55 - + WHILE reduzir usando a regra 65 ($@9) + $padrão reduzir usando a regra 39 (chamada_procedimento) -Estado 74 - - 66 comando_condicional: if_then cond_else • - - $padrão reduzir usando a regra 66 (comando_condicional) + comando_composto ir ao estado 44 + comando_sem_rotulo ir ao estado 98 + chamada_procedimento ir ao estado 48 + leitura ir ao estado 49 + escrita ir ao estado 50 + atribuicao ir ao estado 51 + comando_repetitivo ir ao estado 53 + $@9 ir ao estado 54 + comando_condicional ir ao estado 55 + if_then ir ao estado 56 Estado 75 - 16 declara_var: $@5 lista_id_var DOIS_PONTOS tipo $@6 • PONTO_E_VIRGULA + 68 comando_condicional: if_then cond_else • - PONTO_E_VIRGULA deslocar, e ir ao estado 98 + $padrão reduzir usando a regra 68 (comando_condicional) Estado 76 - 25 declaracao_procedimento: PROCEDURE IDENT $@7 PONTO_E_VIRGULA bloco • + 16 declara_var: $@5 lista_id_var DOIS_PONTOS tipo $@6 • PONTO_E_VIRGULA - $padrão reduzir usando a regra 25 (declaracao_procedimento) + PONTO_E_VIRGULA deslocar, e ir ao estado 99 Estado 77 - 59 atribuicao: IDENT $@8 ATRIBUICAO • expressao_simples - - IDENT deslocar, e ir ao estado 61 - NUMERO deslocar, e ir ao estado 62 + 25 declaracao_procedimento: PROCEDURE IDENT $@7 PONTO_E_VIRGULA bloco • - expressao_simples ir ao estado 99 - termo ir ao estado 65 - fator ir ao estado 66 + $padrão reduzir usando a regra 25 (declaracao_procedimento) Estado 78 - 45 expressao: expressao IGUAL • expressao_simples + 61 atribuicao: IDENT $@8 ATRIBUICAO • expressao_simples - IDENT deslocar, e ir ao estado 61 - NUMERO deslocar, e ir ao estado 62 + IDENT deslocar, e ir ao estado 62 + NUMERO deslocar, e ir ao estado 63 expressao_simples ir ao estado 100 - termo ir ao estado 65 - fator ir ao estado 66 + termo ir ao estado 66 + fator ir ao estado 67 Estado 79 - 46 expressao: expressao DIFERENTE • expressao_simples + 47 expressao: expressao IGUAL • expressao_simples - IDENT deslocar, e ir ao estado 61 - NUMERO deslocar, e ir ao estado 62 + IDENT deslocar, e ir ao estado 62 + NUMERO deslocar, e ir ao estado 63 expressao_simples ir ao estado 101 - termo ir ao estado 65 - fator ir ao estado 66 + termo ir ao estado 66 + fator ir ao estado 67 Estado 80 - 48 expressao: expressao MENOR_IGUAL • expressao_simples + 48 expressao: expressao DIFERENTE • expressao_simples - IDENT deslocar, e ir ao estado 61 - NUMERO deslocar, e ir ao estado 62 + IDENT deslocar, e ir ao estado 62 + NUMERO deslocar, e ir ao estado 63 expressao_simples ir ao estado 102 - termo ir ao estado 65 - fator ir ao estado 66 + termo ir ao estado 66 + fator ir ao estado 67 Estado 81 - 50 expressao: expressao MAIOR_IGUAL • expressao_simples + 50 expressao: expressao MENOR_IGUAL • expressao_simples - IDENT deslocar, e ir ao estado 61 - NUMERO deslocar, e ir ao estado 62 + IDENT deslocar, e ir ao estado 62 + NUMERO deslocar, e ir ao estado 63 expressao_simples ir ao estado 103 - termo ir ao estado 65 - fator ir ao estado 66 + termo ir ao estado 66 + fator ir ao estado 67 Estado 82 - 47 expressao: expressao MENOR • expressao_simples + 52 expressao: expressao MAIOR_IGUAL • expressao_simples - IDENT deslocar, e ir ao estado 61 - NUMERO deslocar, e ir ao estado 62 + IDENT deslocar, e ir ao estado 62 + NUMERO deslocar, e ir ao estado 63 expressao_simples ir ao estado 104 - termo ir ao estado 65 - fator ir ao estado 66 + termo ir ao estado 66 + fator ir ao estado 67 Estado 83 - 49 expressao: expressao MAIOR • expressao_simples + 49 expressao: expressao MENOR • expressao_simples - IDENT deslocar, e ir ao estado 61 - NUMERO deslocar, e ir ao estado 62 + IDENT deslocar, e ir ao estado 62 + NUMERO deslocar, e ir ao estado 63 expressao_simples ir ao estado 105 - termo ir ao estado 65 - fator ir ao estado 66 + termo ir ao estado 66 + fator ir ao estado 67 Estado 84 - 70 if_then: IF expressao $@11 • THEN comando_sem_rotulo + 51 expressao: expressao MAIOR • expressao_simples - THEN deslocar, e ir ao estado 106 + IDENT deslocar, e ir ao estado 62 + NUMERO deslocar, e ir ao estado 63 + expressao_simples ir ao estado 106 + termo ir ao estado 66 + fator ir ao estado 67 -Estado 85 - 52 expressao_simples: expressao_simples MAIS • termo +Estado 85 - IDENT deslocar, e ir ao estado 61 - NUMERO deslocar, e ir ao estado 62 + 72 if_then: IF expressao $@11 • THEN comando_sem_rotulo - termo ir ao estado 107 - fator ir ao estado 66 + THEN deslocar, e ir ao estado 107 Estado 86 - 53 expressao_simples: expressao_simples MENOS • termo + 54 expressao_simples: expressao_simples MAIS • termo - IDENT deslocar, e ir ao estado 61 - NUMERO deslocar, e ir ao estado 62 + IDENT deslocar, e ir ao estado 62 + NUMERO deslocar, e ir ao estado 63 termo ir ao estado 108 - fator ir ao estado 66 + fator ir ao estado 67 Estado 87 - 56 termo: termo DIV • fator + 55 expressao_simples: expressao_simples MENOS • termo - IDENT deslocar, e ir ao estado 61 - NUMERO deslocar, e ir ao estado 62 + IDENT deslocar, e ir ao estado 62 + NUMERO deslocar, e ir ao estado 63 - fator ir ao estado 109 + termo ir ao estado 109 + fator ir ao estado 67 Estado 88 - 55 termo: termo ASTERISCO • fator + 58 termo: termo DIV • fator - IDENT deslocar, e ir ao estado 61 - NUMERO deslocar, e ir ao estado 62 + IDENT deslocar, e ir ao estado 62 + NUMERO deslocar, e ir ao estado 63 fator ir ao estado 110 Estado 89 - 41 simb_leitura: IDENT • + 57 termo: termo ASTERISCO • fator - $padrão reduzir usando a regra 41 (simb_leitura) + IDENT deslocar, e ir ao estado 62 + NUMERO deslocar, e ir ao estado 63 + + fator ir ao estado 111 Estado 90 - 38 leitura: READ ABRE_PARENTESES lista_leituras • FECHA_PARENTESES - 39 lista_leituras: lista_leituras • VIRGULA simb_leitura + 43 simb_leitura: IDENT • - FECHA_PARENTESES deslocar, e ir ao estado 111 - VIRGULA deslocar, e ir ao estado 112 + $padrão reduzir usando a regra 43 (simb_leitura) Estado 91 - 40 lista_leituras: simb_leitura • + 40 leitura: READ ABRE_PARENTESES lista_leituras • FECHA_PARENTESES + 41 lista_leituras: lista_leituras • VIRGULA simb_leitura - $padrão reduzir usando a regra 40 (lista_leituras) + FECHA_PARENTESES deslocar, e ir ao estado 112 + VIRGULA deslocar, e ir ao estado 113 Estado 92 - 42 escrita: WRITE ABRE_PARENTESES lista_escritas • FECHA_PARENTESES - 43 lista_escritas: lista_escritas • VIRGULA expressao_simples + 42 lista_leituras: simb_leitura • - FECHA_PARENTESES deslocar, e ir ao estado 113 - VIRGULA deslocar, e ir ao estado 114 + $padrão reduzir usando a regra 42 (lista_leituras) Estado 93 - 44 lista_escritas: expressao_simples • - 52 expressao_simples: expressao_simples • MAIS termo - 53 | expressao_simples • MENOS termo - - MAIS deslocar, e ir ao estado 85 - MENOS deslocar, e ir ao estado 86 + 44 escrita: WRITE ABRE_PARENTESES lista_escritas • FECHA_PARENTESES + 45 lista_escritas: lista_escritas • VIRGULA expressao_simples - $padrão reduzir usando a regra 44 (lista_escritas) + FECHA_PARENTESES deslocar, e ir ao estado 114 + VIRGULA deslocar, e ir ao estado 115 Estado 94 - 27 comandos: comando PONTO_E_VIRGULA comandos • + 46 lista_escritas: expressao_simples • + 54 expressao_simples: expressao_simples • MAIS termo + 55 | expressao_simples • MENOS termo - $padrão reduzir usando a regra 27 (comandos) + MAIS deslocar, e ir ao estado 86 + MENOS deslocar, e ir ao estado 87 + + $padrão reduzir usando a regra 46 (lista_escritas) Estado 95 - 30 comando: numero DOIS_PONTOS comando_sem_rotulo • + 27 comandos: comando PONTO_E_VIRGULA comandos • - $padrão reduzir usando a regra 30 (comando) + $padrão reduzir usando a regra 27 (comandos) Estado 96 - 45 expressao: expressao • IGUAL expressao_simples - 46 | expressao • DIFERENTE expressao_simples - 47 | expressao • MENOR expressao_simples - 48 | expressao • MENOR_IGUAL expressao_simples - 49 | expressao • MAIOR expressao_simples - 50 | expressao • MAIOR_IGUAL expressao_simples - 65 comando_repetitivo: $@9 WHILE expressao • DO $@10 comando_sem_rotulo + 30 comando: numero DOIS_PONTOS comando_sem_rotulo • - DO deslocar, e ir ao estado 115 - IGUAL deslocar, e ir ao estado 78 - DIFERENTE deslocar, e ir ao estado 79 - MENOR_IGUAL deslocar, e ir ao estado 80 - MAIOR_IGUAL deslocar, e ir ao estado 81 - MENOR deslocar, e ir ao estado 82 - MAIOR deslocar, e ir ao estado 83 + $padrão reduzir usando a regra 30 (comando) Estado 97 - 67 cond_else: ELSE comando_sem_rotulo • + 47 expressao: expressao • IGUAL expressao_simples + 48 | expressao • DIFERENTE expressao_simples + 49 | expressao • MENOR expressao_simples + 50 | expressao • MENOR_IGUAL expressao_simples + 51 | expressao • MAIOR expressao_simples + 52 | expressao • MAIOR_IGUAL expressao_simples + 67 comando_repetitivo: $@9 WHILE expressao • DO $@10 comando_sem_rotulo - $padrão reduzir usando a regra 67 (cond_else) + DO deslocar, e ir ao estado 116 + IGUAL deslocar, e ir ao estado 79 + DIFERENTE deslocar, e ir ao estado 80 + MENOR_IGUAL deslocar, e ir ao estado 81 + MAIOR_IGUAL deslocar, e ir ao estado 82 + MENOR deslocar, e ir ao estado 83 + MAIOR deslocar, e ir ao estado 84 Estado 98 - 16 declara_var: $@5 lista_id_var DOIS_PONTOS tipo $@6 PONTO_E_VIRGULA • + 69 cond_else: ELSE comando_sem_rotulo • - $padrão reduzir usando a regra 16 (declara_var) + $padrão reduzir usando a regra 69 (cond_else) Estado 99 - 52 expressao_simples: expressao_simples • MAIS termo - 53 | expressao_simples • MENOS termo - 59 atribuicao: IDENT $@8 ATRIBUICAO expressao_simples • - - MAIS deslocar, e ir ao estado 85 - MENOS deslocar, e ir ao estado 86 + 16 declara_var: $@5 lista_id_var DOIS_PONTOS tipo $@6 PONTO_E_VIRGULA • - $padrão reduzir usando a regra 59 (atribuicao) + $padrão reduzir usando a regra 16 (declara_var) Estado 100 - 45 expressao: expressao IGUAL expressao_simples • - 52 expressao_simples: expressao_simples • MAIS termo - 53 | expressao_simples • MENOS termo + 54 expressao_simples: expressao_simples • MAIS termo + 55 | expressao_simples • MENOS termo + 61 atribuicao: IDENT $@8 ATRIBUICAO expressao_simples • - MAIS deslocar, e ir ao estado 85 - MENOS deslocar, e ir ao estado 86 + MAIS deslocar, e ir ao estado 86 + MENOS deslocar, e ir ao estado 87 - $padrão reduzir usando a regra 45 (expressao) + $padrão reduzir usando a regra 61 (atribuicao) Estado 101 - 46 expressao: expressao DIFERENTE expressao_simples • - 52 expressao_simples: expressao_simples • MAIS termo - 53 | expressao_simples • MENOS termo + 47 expressao: expressao IGUAL expressao_simples • + 54 expressao_simples: expressao_simples • MAIS termo + 55 | expressao_simples • MENOS termo - MAIS deslocar, e ir ao estado 85 - MENOS deslocar, e ir ao estado 86 + MAIS deslocar, e ir ao estado 86 + MENOS deslocar, e ir ao estado 87 - $padrão reduzir usando a regra 46 (expressao) + $padrão reduzir usando a regra 47 (expressao) Estado 102 - 48 expressao: expressao MENOR_IGUAL expressao_simples • - 52 expressao_simples: expressao_simples • MAIS termo - 53 | expressao_simples • MENOS termo + 48 expressao: expressao DIFERENTE expressao_simples • + 54 expressao_simples: expressao_simples • MAIS termo + 55 | expressao_simples • MENOS termo - MAIS deslocar, e ir ao estado 85 - MENOS deslocar, e ir ao estado 86 + MAIS deslocar, e ir ao estado 86 + MENOS deslocar, e ir ao estado 87 $padrão reduzir usando a regra 48 (expressao) Estado 103 - 50 expressao: expressao MAIOR_IGUAL expressao_simples • - 52 expressao_simples: expressao_simples • MAIS termo - 53 | expressao_simples • MENOS termo + 50 expressao: expressao MENOR_IGUAL expressao_simples • + 54 expressao_simples: expressao_simples • MAIS termo + 55 | expressao_simples • MENOS termo - MAIS deslocar, e ir ao estado 85 - MENOS deslocar, e ir ao estado 86 + MAIS deslocar, e ir ao estado 86 + MENOS deslocar, e ir ao estado 87 $padrão reduzir usando a regra 50 (expressao) Estado 104 - 47 expressao: expressao MENOR expressao_simples • - 52 expressao_simples: expressao_simples • MAIS termo - 53 | expressao_simples • MENOS termo + 52 expressao: expressao MAIOR_IGUAL expressao_simples • + 54 expressao_simples: expressao_simples • MAIS termo + 55 | expressao_simples • MENOS termo - MAIS deslocar, e ir ao estado 85 - MENOS deslocar, e ir ao estado 86 + MAIS deslocar, e ir ao estado 86 + MENOS deslocar, e ir ao estado 87 - $padrão reduzir usando a regra 47 (expressao) + $padrão reduzir usando a regra 52 (expressao) Estado 105 - 49 expressao: expressao MAIOR expressao_simples • - 52 expressao_simples: expressao_simples • MAIS termo - 53 | expressao_simples • MENOS termo + 49 expressao: expressao MENOR expressao_simples • + 54 expressao_simples: expressao_simples • MAIS termo + 55 | expressao_simples • MENOS termo - MAIS deslocar, e ir ao estado 85 - MENOS deslocar, e ir ao estado 86 + MAIS deslocar, e ir ao estado 86 + MENOS deslocar, e ir ao estado 87 $padrão reduzir usando a regra 49 (expressao) Estado 106 - 70 if_then: IF expressao $@11 THEN • comando_sem_rotulo - - T_BEGIN deslocar, e ir ao estado 34 - IDENT deslocar, e ir ao estado 39 - IF deslocar, e ir ao estado 40 - READ deslocar, e ir ao estado 42 - WRITE deslocar, e ir ao estado 43 + 51 expressao: expressao MAIOR expressao_simples • + 54 expressao_simples: expressao_simples • MAIS termo + 55 | expressao_simples • MENOS termo - $padrão reduzir usando a regra 63 ($@9) + MAIS deslocar, e ir ao estado 86 + MENOS deslocar, e ir ao estado 87 - comando_composto ir ao estado 44 - comando_sem_rotulo ir ao estado 116 - leitura ir ao estado 48 - escrita ir ao estado 49 - atribuicao ir ao estado 50 - comando_repetitivo ir ao estado 52 - $@9 ir ao estado 53 - comando_condicional ir ao estado 54 - if_then ir ao estado 55 + $padrão reduzir usando a regra 51 (expressao) Estado 107 - 52 expressao_simples: expressao_simples MAIS termo • - 55 termo: termo • ASTERISCO fator - 56 | termo • DIV fator + 72 if_then: IF expressao $@11 THEN • comando_sem_rotulo + + T_BEGIN deslocar, e ir ao estado 34 + IDENT deslocar, e ir ao estado 39 + IF deslocar, e ir ao estado 40 + READ deslocar, e ir ao estado 42 + WRITE deslocar, e ir ao estado 43 - DIV deslocar, e ir ao estado 87 - ASTERISCO deslocar, e ir ao estado 88 + WHILE reduzir usando a regra 65 ($@9) + $padrão reduzir usando a regra 39 (chamada_procedimento) - $padrão reduzir usando a regra 52 (expressao_simples) + comando_composto ir ao estado 44 + comando_sem_rotulo ir ao estado 117 + chamada_procedimento ir ao estado 48 + leitura ir ao estado 49 + escrita ir ao estado 50 + atribuicao ir ao estado 51 + comando_repetitivo ir ao estado 53 + $@9 ir ao estado 54 + comando_condicional ir ao estado 55 + if_then ir ao estado 56 Estado 108 - 53 expressao_simples: expressao_simples MENOS termo • - 55 termo: termo • ASTERISCO fator - 56 | termo • DIV fator + 54 expressao_simples: expressao_simples MAIS termo • + 57 termo: termo • ASTERISCO fator + 58 | termo • DIV fator - DIV deslocar, e ir ao estado 87 - ASTERISCO deslocar, e ir ao estado 88 + DIV deslocar, e ir ao estado 88 + ASTERISCO deslocar, e ir ao estado 89 - $padrão reduzir usando a regra 53 (expressao_simples) + $padrão reduzir usando a regra 54 (expressao_simples) Estado 109 - 56 termo: termo DIV fator • + 55 expressao_simples: expressao_simples MENOS termo • + 57 termo: termo • ASTERISCO fator + 58 | termo • DIV fator + + DIV deslocar, e ir ao estado 88 + ASTERISCO deslocar, e ir ao estado 89 - $padrão reduzir usando a regra 56 (termo) + $padrão reduzir usando a regra 55 (expressao_simples) Estado 110 - 55 termo: termo ASTERISCO fator • + 58 termo: termo DIV fator • - $padrão reduzir usando a regra 55 (termo) + $padrão reduzir usando a regra 58 (termo) Estado 111 - 38 leitura: READ ABRE_PARENTESES lista_leituras FECHA_PARENTESES • + 57 termo: termo ASTERISCO fator • - $padrão reduzir usando a regra 38 (leitura) + $padrão reduzir usando a regra 57 (termo) Estado 112 - 39 lista_leituras: lista_leituras VIRGULA • simb_leitura - - IDENT deslocar, e ir ao estado 89 + 40 leitura: READ ABRE_PARENTESES lista_leituras FECHA_PARENTESES • - simb_leitura ir ao estado 117 + $padrão reduzir usando a regra 40 (leitura) Estado 113 - 42 escrita: WRITE ABRE_PARENTESES lista_escritas FECHA_PARENTESES • + 41 lista_leituras: lista_leituras VIRGULA • simb_leitura - $padrão reduzir usando a regra 42 (escrita) + IDENT deslocar, e ir ao estado 90 + simb_leitura ir ao estado 118 -Estado 114 - 43 lista_escritas: lista_escritas VIRGULA • expressao_simples +Estado 114 - IDENT deslocar, e ir ao estado 61 - NUMERO deslocar, e ir ao estado 62 + 44 escrita: WRITE ABRE_PARENTESES lista_escritas FECHA_PARENTESES • - expressao_simples ir ao estado 118 - termo ir ao estado 65 - fator ir ao estado 66 + $padrão reduzir usando a regra 44 (escrita) Estado 115 - 65 comando_repetitivo: $@9 WHILE expressao DO • $@10 comando_sem_rotulo + 45 lista_escritas: lista_escritas VIRGULA • expressao_simples - $padrão reduzir usando a regra 64 ($@10) + IDENT deslocar, e ir ao estado 62 + NUMERO deslocar, e ir ao estado 63 - $@10 ir ao estado 119 + expressao_simples ir ao estado 119 + termo ir ao estado 66 + fator ir ao estado 67 Estado 116 - 70 if_then: IF expressao $@11 THEN comando_sem_rotulo • + 67 comando_repetitivo: $@9 WHILE expressao DO • $@10 comando_sem_rotulo - $padrão reduzir usando a regra 70 (if_then) + $padrão reduzir usando a regra 66 ($@10) + + $@10 ir ao estado 120 Estado 117 - 39 lista_leituras: lista_leituras VIRGULA simb_leitura • + 72 if_then: IF expressao $@11 THEN comando_sem_rotulo • - $padrão reduzir usando a regra 39 (lista_leituras) + $padrão reduzir usando a regra 72 (if_then) Estado 118 - 43 lista_escritas: lista_escritas VIRGULA expressao_simples • - 52 expressao_simples: expressao_simples • MAIS termo - 53 | expressao_simples • MENOS termo - - MAIS deslocar, e ir ao estado 85 - MENOS deslocar, e ir ao estado 86 + 41 lista_leituras: lista_leituras VIRGULA simb_leitura • - $padrão reduzir usando a regra 43 (lista_escritas) + $padrão reduzir usando a regra 41 (lista_leituras) Estado 119 - 65 comando_repetitivo: $@9 WHILE expressao DO $@10 • comando_sem_rotulo + 45 lista_escritas: lista_escritas VIRGULA expressao_simples • + 54 expressao_simples: expressao_simples • MAIS termo + 55 | expressao_simples • MENOS termo + + MAIS deslocar, e ir ao estado 86 + MENOS deslocar, e ir ao estado 87 + + $padrão reduzir usando a regra 45 (lista_escritas) + + +Estado 120 + + 67 comando_repetitivo: $@9 WHILE expressao DO $@10 • comando_sem_rotulo T_BEGIN deslocar, e ir ao estado 34 IDENT deslocar, e ir ao estado 39 @@ -1478,21 +1501,23 @@ Estado 119 READ deslocar, e ir ao estado 42 WRITE deslocar, e ir ao estado 43 - $padrão reduzir usando a regra 63 ($@9) + WHILE reduzir usando a regra 65 ($@9) + $padrão reduzir usando a regra 39 (chamada_procedimento) - comando_composto ir ao estado 44 - comando_sem_rotulo ir ao estado 120 - leitura ir ao estado 48 - escrita ir ao estado 49 - atribuicao ir ao estado 50 - comando_repetitivo ir ao estado 52 - $@9 ir ao estado 53 - comando_condicional ir ao estado 54 - if_then ir ao estado 55 + comando_composto ir ao estado 44 + comando_sem_rotulo ir ao estado 121 + chamada_procedimento ir ao estado 48 + leitura ir ao estado 49 + escrita ir ao estado 50 + atribuicao ir ao estado 51 + comando_repetitivo ir ao estado 53 + $@9 ir ao estado 54 + comando_condicional ir ao estado 55 + if_then ir ao estado 56 -Estado 120 +Estado 121 - 65 comando_repetitivo: $@9 WHILE expressao DO $@10 comando_sem_rotulo • + 67 comando_repetitivo: $@9 WHILE expressao DO $@10 comando_sem_rotulo • - $padrão reduzir usando a regra 65 (comando_repetitivo) + $padrão reduzir usando a regra 67 (comando_repetitivo) diff --git a/compilador.tab.c b/compilador.tab.c index 4ab7d2e..faebca5 100644 --- a/compilador.tab.c +++ b/compilador.tab.c @@ -183,25 +183,26 @@ enum yysymbol_kind_t YYSYMBOL_comandos = 64, /* comandos */ YYSYMBOL_comando = 65, /* comando */ YYSYMBOL_comando_sem_rotulo = 66, /* comando_sem_rotulo */ - YYSYMBOL_leitura = 67, /* leitura */ - YYSYMBOL_lista_leituras = 68, /* lista_leituras */ - YYSYMBOL_simb_leitura = 69, /* simb_leitura */ - YYSYMBOL_escrita = 70, /* escrita */ - YYSYMBOL_lista_escritas = 71, /* lista_escritas */ - YYSYMBOL_expressao = 72, /* expressao */ - YYSYMBOL_expressao_simples = 73, /* expressao_simples */ - YYSYMBOL_termo = 74, /* termo */ - YYSYMBOL_atribuicao = 75, /* atribuicao */ - YYSYMBOL_76_8 = 76, /* $@8 */ - YYSYMBOL_fator = 77, /* fator */ - YYSYMBOL_numero = 78, /* numero */ - YYSYMBOL_comando_repetitivo = 79, /* comando_repetitivo */ - YYSYMBOL_80_9 = 80, /* $@9 */ - YYSYMBOL_81_10 = 81, /* $@10 */ - YYSYMBOL_comando_condicional = 82, /* comando_condicional */ - YYSYMBOL_cond_else = 83, /* cond_else */ - YYSYMBOL_if_then = 84, /* if_then */ - YYSYMBOL_85_11 = 85 /* $@11 */ + YYSYMBOL_chamada_procedimento = 67, /* chamada_procedimento */ + YYSYMBOL_leitura = 68, /* leitura */ + YYSYMBOL_lista_leituras = 69, /* lista_leituras */ + YYSYMBOL_simb_leitura = 70, /* simb_leitura */ + YYSYMBOL_escrita = 71, /* escrita */ + YYSYMBOL_lista_escritas = 72, /* lista_escritas */ + YYSYMBOL_expressao = 73, /* expressao */ + YYSYMBOL_expressao_simples = 74, /* expressao_simples */ + YYSYMBOL_termo = 75, /* termo */ + YYSYMBOL_atribuicao = 76, /* atribuicao */ + YYSYMBOL_77_8 = 77, /* $@8 */ + YYSYMBOL_fator = 78, /* fator */ + YYSYMBOL_numero = 79, /* numero */ + YYSYMBOL_comando_repetitivo = 80, /* comando_repetitivo */ + YYSYMBOL_81_9 = 81, /* $@9 */ + YYSYMBOL_82_10 = 82, /* $@10 */ + YYSYMBOL_comando_condicional = 83, /* comando_condicional */ + YYSYMBOL_cond_else = 84, /* cond_else */ + YYSYMBOL_if_then = 85, /* if_then */ + YYSYMBOL_86_11 = 86 /* $@11 */ }; typedef enum yysymbol_kind_t yysymbol_kind_t; @@ -529,16 +530,16 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 3 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 105 +#define YYLAST 102 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 43 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 43 +#define YYNNTS 44 /* YYNRULES -- Number of rules. */ -#define YYNRULES 71 +#define YYNRULES 73 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 121 +#define YYNSTATES 122 /* YYMAXUTOK -- Last valid token kind. */ #define YYMAXUTOK 297 @@ -594,11 +595,11 @@ static const yytype_int16 yyrline[] = 0, 42, 42, 42, 58, 69, 55, 85, 86, 89, 93, 93, 94, 97, 98, 101, 104, 101, 112, 125, 134, 145, 146, 150, 152, 156, 156, 178, 181, 182, - 183, 186, 187, 190, 191, 192, 193, 194, 195, 201, - 204, 205, 208, 217, 220, 223, 228, 231, 234, 237, - 240, 243, 246, 249, 252, 255, 258, 261, 264, 267, - 267, 284, 295, 302, 304, 311, 304, 337, 344, 346, - 349, 349 + 183, 186, 187, 190, 191, 192, 193, 194, 195, 196, + 199, 213, 216, 217, 220, 229, 232, 235, 240, 243, + 246, 249, 252, 255, 258, 261, 264, 267, 270, 273, + 276, 279, 279, 297, 308, 315, 317, 324, 317, 350, + 357, 359, 362, 362 }; #endif @@ -626,10 +627,10 @@ static const char *const yytname[] = "$@6", "tipo", "lista_id_var", "lista_idents", "parte_declara_subrotinas", "declaracao_procedimento", "$@7", "comando_composto", "comandos", "comando", "comando_sem_rotulo", - "leitura", "lista_leituras", "simb_leitura", "escrita", "lista_escritas", - "expressao", "expressao_simples", "termo", "atribuicao", "$@8", "fator", - "numero", "comando_repetitivo", "$@9", "$@10", "comando_condicional", - "cond_else", "if_then", "$@11", YY_NULLPTR + "chamada_procedimento", "leitura", "lista_leituras", "simb_leitura", + "escrita", "lista_escritas", "expressao", "expressao_simples", "termo", + "atribuicao", "$@8", "fator", "numero", "comando_repetitivo", "$@9", + "$@10", "comando_condicional", "cond_else", "if_then", "$@11", YY_NULLPTR }; static const char * @@ -639,12 +640,12 @@ yysymbol_name (yysymbol_kind_t yysymbol) } #endif -#define YYPACT_NINF (-72) +#define YYPACT_NINF (-73) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) -#define YYTABLE_NINF (-65) +#define YYTABLE_NINF (-67) #define yytable_value_is_error(Yyn) \ 0 @@ -653,19 +654,19 @@ yysymbol_name (yysymbol_kind_t yysymbol) STATE-NUM. */ static const yytype_int8 yypact[] = { - -72, 28, 5, -72, 9, 26, 19, -72, -1, 53, - 33, 48, -72, 58, 56, 54, -72, -72, -72, -72, - 55, -72, -72, 50, 57, -72, 59, 60, 61, -72, - -72, -72, 13, -72, 10, -72, 62, 63, 67, -72, - -10, -72, 65, 73, -72, 68, 71, -72, -72, -72, - -72, 72, -72, 64, -72, 66, -72, -72, -72, 48, - 69, -72, -72, 22, -12, -20, -72, 74, -10, -72, - 10, -4, -10, -4, -72, 75, -72, -10, -10, -10, - -10, -10, -10, -10, 70, -10, -10, -10, -10, -72, - 21, -72, 39, -12, -72, -72, 8, -72, -72, -12, - -12, -12, -12, -12, -12, -12, -4, -20, -20, -72, - -72, -72, 74, -72, -10, -72, -72, -72, -12, -4, - -72 + -73, 5, 16, -73, 8, 20, 13, -73, 3, 23, + 49, 50, -73, 60, 58, 56, -73, -73, -73, -73, + 57, -73, -73, 52, 59, -73, 61, 62, 63, -73, + -73, -73, -2, -73, 10, -73, 64, 65, 69, -73, + -10, -73, 67, 75, -73, 70, 73, -73, -73, -73, + -73, -73, 74, -73, 66, -73, 68, -73, -73, -73, + 50, 71, -73, -73, 24, -9, -20, -73, 76, -10, + -73, 10, 12, -10, 12, -73, 77, -73, -10, -10, + -10, -10, -10, -10, -10, 72, -10, -10, -10, -10, + -73, 38, -73, 40, -9, -73, -73, 7, -73, -73, + -9, -9, -9, -9, -9, -9, -9, 12, -20, -20, + -73, -73, -73, 76, -73, -10, -73, -73, -73, -9, + 12, -73 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -676,36 +677,36 @@ static const yytype_int8 yydefact[] = 2, 0, 0, 1, 0, 0, 0, 22, 0, 0, 0, 8, 21, 0, 0, 12, 7, 3, 4, 9, 0, 24, 15, 5, 11, 14, 0, 0, 0, 23, - 13, 20, 0, 25, 30, 6, 0, 0, 0, 59, - 0, 63, 0, 0, 34, 0, 0, 32, 37, 38, - 33, 0, 36, 0, 35, 69, 19, 18, 16, 8, - 0, 61, 62, 70, 52, 55, 58, 0, 0, 27, - 29, 64, 0, 64, 67, 0, 26, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, - 0, 41, 0, 45, 28, 31, 0, 68, 17, 60, - 46, 47, 49, 51, 48, 50, 64, 53, 54, 57, - 56, 39, 0, 43, 0, 65, 71, 40, 44, 64, - 66 + 13, 20, 0, 25, 30, 6, 0, 0, 0, 61, + 0, 65, 0, 0, 34, 0, 0, 32, 39, 37, + 38, 33, 0, 36, 0, 35, 71, 19, 18, 16, + 8, 0, 63, 64, 72, 54, 57, 60, 0, 0, + 27, 29, 40, 0, 40, 69, 0, 26, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 44, 0, 43, 0, 47, 28, 31, 0, 70, 17, + 62, 48, 49, 51, 53, 50, 52, 40, 55, 56, + 59, 58, 41, 0, 45, 0, 67, 73, 42, 46, + 40, 68 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { - -72, -72, -72, 25, -72, -72, -72, -72, -72, -72, - -72, 76, -72, -72, -72, -72, -72, -72, -72, -72, - 77, 11, -72, -71, -72, -72, -22, -72, -72, 14, - -67, -27, -72, -72, -26, -72, -72, -72, -72, -72, - -72, -72, -72 + -73, -73, -73, 26, -73, -73, -73, -73, -73, -73, + -73, 78, -73, -73, -73, -73, -73, -73, -73, -73, + 55, 17, -73, -72, -73, -73, -73, -21, -73, -73, + 14, -68, -26, -73, -73, -25, -73, -73, -73, -73, + -73, -73, -73, -73 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = { 0, 1, 2, 14, 21, 28, 15, 18, 19, 20, - 24, 25, 26, 75, 58, 32, 8, 23, 29, 38, - 44, 45, 46, 47, 48, 90, 91, 49, 92, 63, - 64, 65, 50, 60, 66, 51, 52, 53, 119, 54, - 74, 55, 84 + 24, 25, 26, 76, 59, 32, 8, 23, 29, 38, + 44, 45, 46, 47, 48, 49, 91, 92, 50, 93, + 64, 65, 66, 51, 61, 67, 52, 53, 54, 120, + 55, 75, 56, 85 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -713,32 +714,32 @@ static const yytype_int8 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int8 yytable[] = { - 95, 93, 97, 61, 9, 10, 34, 87, 4, 39, - 99, 100, 101, 102, 103, 104, 105, 40, 88, 36, - 34, 37, 5, 39, 85, 86, 111, 112, 3, 62, - 6, 40, 7, 115, -64, 116, 42, 43, 78, 79, - 80, 81, 82, 83, 113, 114, 12, 118, 120, 41, - 42, 43, 78, 79, 80, 81, 82, 83, 107, 108, - 11, 109, 110, 13, 16, 17, -10, 22, 27, 67, - -15, 34, 31, 33, 59, 56, 57, 68, 70, 69, - 71, 94, 98, 77, 76, 0, 96, 89, 72, 73, - 117, 0, 106, 0, 0, 0, 0, 0, 0, 0, - 30, 0, 0, 0, 0, 35 + 96, 94, 98, 62, 36, 3, 37, 88, 9, 10, + 100, 101, 102, 103, 104, 105, 106, -40, 89, 4, + 34, 5, 34, 39, 6, 39, 7, 86, 87, 63, + 11, 40, 116, 40, -66, 117, -66, 79, 80, 81, + 82, 83, 84, 112, 113, 114, 115, 119, 121, 41, + 42, 43, 42, 43, 79, 80, 81, 82, 83, 84, + 108, 109, 12, 110, 111, 13, 16, 17, -10, 22, + 27, 68, -15, 34, 31, 33, 60, 57, 58, 69, + 71, 70, 72, 35, 99, 78, 77, 97, 95, 90, + 73, 74, 118, 0, 107, 0, 0, 0, 0, 0, + 0, 0, 30 }; static const yytype_int8 yycheck[] = { - 71, 68, 73, 13, 5, 6, 10, 27, 3, 13, - 77, 78, 79, 80, 81, 82, 83, 21, 38, 6, - 10, 8, 13, 13, 36, 37, 5, 6, 0, 39, - 4, 21, 13, 25, 24, 106, 40, 41, 30, 31, - 32, 33, 34, 35, 5, 6, 13, 114, 119, 39, - 40, 41, 30, 31, 32, 33, 34, 35, 85, 86, - 7, 87, 88, 15, 6, 9, 12, 12, 18, 4, - 13, 10, 13, 13, 7, 13, 13, 4, 7, 11, - 8, 70, 7, 14, 59, -1, 72, 13, 24, 23, - 112, -1, 22, -1, -1, -1, -1, -1, -1, -1, - 24, -1, -1, -1, -1, 28 + 72, 69, 74, 13, 6, 0, 8, 27, 5, 6, + 78, 79, 80, 81, 82, 83, 84, 7, 38, 3, + 10, 13, 10, 13, 4, 13, 13, 36, 37, 39, + 7, 21, 25, 21, 24, 107, 24, 30, 31, 32, + 33, 34, 35, 5, 6, 5, 6, 115, 120, 39, + 40, 41, 40, 41, 30, 31, 32, 33, 34, 35, + 86, 87, 13, 88, 89, 15, 6, 9, 12, 12, + 18, 4, 13, 10, 13, 13, 7, 13, 13, 4, + 7, 11, 8, 28, 7, 14, 60, 73, 71, 13, + 24, 23, 113, -1, 22, -1, -1, -1, -1, -1, + -1, -1, 24 }; /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of @@ -749,15 +750,15 @@ static const yytype_int8 yystos[] = 6, 7, 13, 15, 46, 49, 6, 9, 50, 51, 52, 47, 12, 60, 53, 54, 55, 18, 48, 61, 54, 13, 58, 13, 10, 63, 6, 8, 62, 13, - 21, 39, 40, 41, 63, 64, 65, 66, 67, 70, - 75, 78, 79, 80, 82, 84, 13, 13, 57, 7, - 76, 13, 39, 72, 73, 74, 77, 4, 4, 11, - 7, 8, 24, 23, 83, 56, 46, 14, 30, 31, - 32, 33, 34, 35, 85, 36, 37, 27, 38, 13, - 68, 69, 71, 73, 64, 66, 72, 66, 7, 73, - 73, 73, 73, 73, 73, 73, 22, 74, 74, 77, - 77, 5, 6, 5, 6, 25, 66, 69, 73, 81, - 66 + 21, 39, 40, 41, 63, 64, 65, 66, 67, 68, + 71, 76, 79, 80, 81, 83, 85, 13, 13, 57, + 7, 77, 13, 39, 73, 74, 75, 78, 4, 4, + 11, 7, 8, 24, 23, 84, 56, 46, 14, 30, + 31, 32, 33, 34, 35, 86, 36, 37, 27, 38, + 13, 69, 70, 72, 74, 64, 66, 73, 66, 7, + 74, 74, 74, 74, 74, 74, 74, 22, 75, 75, + 78, 78, 5, 6, 5, 6, 25, 66, 70, 74, + 82, 66 }; /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */ @@ -766,11 +767,11 @@ static const yytype_int8 yyr1[] = 0, 43, 45, 44, 47, 48, 46, 49, 49, 50, 52, 51, 51, 53, 53, 55, 56, 54, 57, 58, 58, 59, 59, 60, 60, 62, 61, 63, 64, 64, - 64, 65, 65, 66, 66, 66, 66, 66, 66, 67, - 68, 68, 69, 70, 71, 71, 72, 72, 72, 72, - 72, 72, 72, 73, 73, 73, 74, 74, 74, 76, - 75, 77, 77, 78, 80, 81, 79, 82, 83, 83, - 85, 84 + 64, 65, 65, 66, 66, 66, 66, 66, 66, 66, + 67, 68, 69, 69, 70, 71, 72, 72, 73, 73, + 73, 73, 73, 73, 73, 74, 74, 74, 75, 75, + 75, 77, 76, 78, 78, 79, 81, 82, 80, 83, + 84, 84, 86, 85 }; /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */ @@ -779,11 +780,11 @@ static const yytype_int8 yyr2[] = 0, 2, 0, 9, 0, 0, 6, 2, 0, 1, 0, 3, 0, 2, 1, 0, 0, 6, 1, 3, 1, 3, 1, 2, 0, 0, 5, 3, 3, 2, - 0, 3, 1, 1, 1, 1, 1, 1, 1, 4, - 3, 1, 1, 4, 3, 1, 3, 3, 3, 3, - 3, 3, 1, 3, 3, 1, 3, 3, 1, 0, - 4, 1, 1, 1, 0, 0, 6, 2, 2, 0, - 0, 5 + 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 4, 3, 1, 1, 4, 3, 1, 3, 3, + 3, 3, 3, 3, 1, 3, 3, 1, 3, 3, + 1, 0, 4, 1, 1, 1, 0, 0, 6, 2, + 2, 0, 0, 5 }; @@ -1251,7 +1252,7 @@ yyreduce: { geraCodigo (NULL, "INPP"); } -#line 1255 "compilador.tab.c" +#line 1256 "compilador.tab.c" break; case 3: /* programa: $@1 PROGRAM IDENT ABRE_PARENTESES lista_idents FECHA_PARENTESES PONTO_E_VIRGULA bloco PONTO */ @@ -1259,7 +1260,7 @@ yyreduce: { geraCodigo (NULL, "PARA"); } -#line 1263 "compilador.tab.c" +#line 1264 "compilador.tab.c" break; case 4: /* $@2: %empty */ @@ -1274,7 +1275,7 @@ yyreduce: strcat(buffer,r_main); geraCodigo(NULL,buffer); } -#line 1278 "compilador.tab.c" +#line 1279 "compilador.tab.c" break; case 5: /* $@3: %empty */ @@ -1284,7 +1285,7 @@ yyreduce: desempilha(r_main,rot); geraCodigo(r_main,"NADA"); } -#line 1288 "compilador.tab.c" +#line 1289 "compilador.tab.c" break; case 6: /* bloco: parte_declara_rotulos parte_declara_vars $@2 parte_declara_subrotinas $@3 comando_composto */ @@ -1296,19 +1297,19 @@ yyreduce: geraCodigo(NULL,buffer); desloc = 0; } -#line 1300 "compilador.tab.c" +#line 1301 "compilador.tab.c" break; case 10: /* $@4: %empty */ #line 93 "compilador.y" { } -#line 1306 "compilador.tab.c" +#line 1307 "compilador.tab.c" break; case 15: /* $@5: %empty */ #line 101 "compilador.y" { num_vars = 0; } -#line 1312 "compilador.tab.c" +#line 1313 "compilador.tab.c" break; case 16: /* $@6: %empty */ @@ -1318,7 +1319,7 @@ yyreduce: sprintf(buffer, "AMEM %d", num_vars); geraCodigo(NULL, buffer); } -#line 1322 "compilador.tab.c" +#line 1323 "compilador.tab.c" break; case 18: /* tipo: IDENT */ @@ -1331,9 +1332,9 @@ yyreduce: } else { yyerror("Tipo não reconhecido. Somente 'integer' ou 'boolean' são permitidos."); } - //mostra_ts(ts); // Mostra a tabela após a inserção + mostra_ts(ts); // Mostra a tabela após a inserção } -#line 1337 "compilador.tab.c" +#line 1338 "compilador.tab.c" break; case 19: /* lista_id_var: lista_id_var VIRGULA IDENT */ @@ -1346,7 +1347,7 @@ yyreduce: insere_ts(token,VS,nivel_lexico,info,ts); desloc += 1; } -#line 1350 "compilador.tab.c" +#line 1351 "compilador.tab.c" break; case 20: /* lista_id_var: IDENT */ @@ -1360,7 +1361,7 @@ yyreduce: desloc += 1; /* insere vars na tabela de s�mbolos */ } -#line 1364 "compilador.tab.c" +#line 1365 "compilador.tab.c" break; case 25: /* $@7: %empty */ @@ -1380,19 +1381,19 @@ yyreduce: char buffer[50]; sprintf(buffer,"ENPR %d",nivel_lexico); geraCodigo(r_proc,buffer); - //mostra_ts(ts); + mostra_ts(ts); } -#line 1386 "compilador.tab.c" +#line 1387 "compilador.tab.c" break; case 26: /* declaracao_procedimento: PROCEDURE IDENT $@7 PONTO_E_VIRGULA bloco */ #line 174 "compilador.y" { nivel_lexico -= 1; } -#line 1392 "compilador.tab.c" +#line 1393 "compilador.tab.c" break; - case 42: /* simb_leitura: IDENT */ -#line 208 "compilador.y" + case 44: /* simb_leitura: IDENT */ +#line 220 "compilador.y" { geraCodigo(NULL, "LEIT"); l_elem = busca(token,ts); @@ -1400,108 +1401,109 @@ yyreduce: sprintf(buffer,"ARMZ %d,%d",l_elem->nivel,l_elem->info.vs.desloc); geraCodigo(NULL,buffer); } -#line 1404 "compilador.tab.c" +#line 1405 "compilador.tab.c" break; - case 44: /* lista_escritas: lista_escritas VIRGULA expressao_simples */ -#line 220 "compilador.y" + case 46: /* lista_escritas: lista_escritas VIRGULA expressao_simples */ +#line 232 "compilador.y" { geraCodigo(NULL,"IMPR"); } -#line 1412 "compilador.tab.c" +#line 1413 "compilador.tab.c" break; - case 45: /* lista_escritas: expressao_simples */ -#line 223 "compilador.y" + case 47: /* lista_escritas: expressao_simples */ +#line 235 "compilador.y" { geraCodigo(NULL,"IMPR"); } -#line 1420 "compilador.tab.c" +#line 1421 "compilador.tab.c" break; - case 46: /* expressao: expressao IGUAL expressao_simples */ -#line 228 "compilador.y" + case 48: /* expressao: expressao IGUAL expressao_simples */ +#line 240 "compilador.y" { geraCodigo(NULL, "CMIG"); // Adiciona operação de cmig } -#line 1428 "compilador.tab.c" +#line 1429 "compilador.tab.c" break; - case 47: /* expressao: expressao DIFERENTE expressao_simples */ -#line 231 "compilador.y" + case 49: /* expressao: expressao DIFERENTE expressao_simples */ +#line 243 "compilador.y" { geraCodigo(NULL, "CMDG"); // Adiciona operação de cmdg } -#line 1436 "compilador.tab.c" +#line 1437 "compilador.tab.c" break; - case 48: /* expressao: expressao MENOR expressao_simples */ -#line 234 "compilador.y" + case 50: /* expressao: expressao MENOR expressao_simples */ +#line 246 "compilador.y" { geraCodigo(NULL, "CMME"); // Adiciona operação de cmme } -#line 1444 "compilador.tab.c" +#line 1445 "compilador.tab.c" break; - case 49: /* expressao: expressao MENOR_IGUAL expressao_simples */ -#line 237 "compilador.y" + case 51: /* expressao: expressao MENOR_IGUAL expressao_simples */ +#line 249 "compilador.y" { geraCodigo(NULL, "CMEG"); // Adiciona operação de cmeg } -#line 1452 "compilador.tab.c" +#line 1453 "compilador.tab.c" break; - case 50: /* expressao: expressao MAIOR expressao_simples */ -#line 240 "compilador.y" + case 52: /* expressao: expressao MAIOR expressao_simples */ +#line 252 "compilador.y" { geraCodigo(NULL, "CMMA"); // Adiciona operação de cmma } -#line 1460 "compilador.tab.c" +#line 1461 "compilador.tab.c" break; - case 51: /* expressao: expressao MAIOR_IGUAL expressao_simples */ -#line 243 "compilador.y" + case 53: /* expressao: expressao MAIOR_IGUAL expressao_simples */ +#line 255 "compilador.y" { geraCodigo(NULL, "CMAG"); // Adiciona operação de cmag } -#line 1468 "compilador.tab.c" +#line 1469 "compilador.tab.c" break; - case 53: /* expressao_simples: expressao_simples MAIS termo */ -#line 249 "compilador.y" + case 55: /* expressao_simples: expressao_simples MAIS termo */ +#line 261 "compilador.y" { geraCodigo(NULL, "SOMA"); // Adiciona operação de soma } -#line 1476 "compilador.tab.c" +#line 1477 "compilador.tab.c" break; - case 54: /* expressao_simples: expressao_simples MENOS termo */ -#line 252 "compilador.y" + case 56: /* expressao_simples: expressao_simples MENOS termo */ +#line 264 "compilador.y" { geraCodigo(NULL, "SUBT"); // Adiciona operação de subt } -#line 1484 "compilador.tab.c" +#line 1485 "compilador.tab.c" break; - case 56: /* termo: termo ASTERISCO fator */ -#line 258 "compilador.y" + case 58: /* termo: termo ASTERISCO fator */ +#line 270 "compilador.y" { geraCodigo(NULL, "MULT"); // Adiciona operação de mult } -#line 1492 "compilador.tab.c" +#line 1493 "compilador.tab.c" break; - case 57: /* termo: termo DIV fator */ -#line 261 "compilador.y" + case 59: /* termo: termo DIV fator */ +#line 273 "compilador.y" { geraCodigo(NULL, "DIVI"); // Adiciona operação de divi } -#line 1500 "compilador.tab.c" +#line 1501 "compilador.tab.c" break; - case 59: /* $@8: %empty */ -#line 267 "compilador.y" + case 61: /* $@8: %empty */ +#line 279 "compilador.y" { + mostra_ts(ts); // Busca variável no lado esquerdo l_elem = busca(token, ts); if (l_elem == NULL) { @@ -1511,22 +1513,22 @@ yyreduce: destino_desloc = l_elem->info.vs.desloc; } } -#line 1515 "compilador.tab.c" +#line 1517 "compilador.tab.c" break; - case 60: /* atribuicao: IDENT $@8 ATRIBUICAO expressao_simples */ -#line 276 "compilador.y" + case 62: /* atribuicao: IDENT $@8 ATRIBUICAO expressao_simples */ +#line 289 "compilador.y" { // Gera código ARMZ para armazenar valor char buffer[50]; sprintf(buffer, "ARMZ %d,%d", destino_nivel, destino_desloc); geraCodigo(NULL, buffer); } -#line 1526 "compilador.tab.c" +#line 1528 "compilador.tab.c" break; - case 61: /* fator: IDENT */ -#line 284 "compilador.y" + case 63: /* fator: IDENT */ +#line 297 "compilador.y" { // Carrega variável l_elem = busca(token, ts); @@ -1538,22 +1540,22 @@ yyreduce: geraCodigo(NULL, buffer); } } -#line 1542 "compilador.tab.c" +#line 1544 "compilador.tab.c" break; - case 62: /* fator: NUMERO */ -#line 295 "compilador.y" + case 64: /* fator: NUMERO */ +#line 308 "compilador.y" { // Empilha constante char buffer[50]; sprintf(buffer, "CRCT %s", token); geraCodigo(NULL, buffer); } -#line 1553 "compilador.tab.c" +#line 1555 "compilador.tab.c" break; - case 64: /* $@9: %empty */ -#line 304 "compilador.y" + case 66: /* $@9: %empty */ +#line 317 "compilador.y" { char r_ini[4]; sprintf(r_ini, "R%02d", rot_id); @@ -1561,11 +1563,11 @@ yyreduce: rot_id += 1; geraCodigo(r_ini,"NADA"); } -#line 1565 "compilador.tab.c" +#line 1567 "compilador.tab.c" break; - case 65: /* $@10: %empty */ -#line 311 "compilador.y" + case 67: /* $@10: %empty */ +#line 324 "compilador.y" { char r_fim[4]; sprintf(r_fim, "R%02d", rot_id); @@ -1576,11 +1578,11 @@ yyreduce: strcat(buffer,r_fim); geraCodigo(NULL,buffer); } -#line 1580 "compilador.tab.c" +#line 1582 "compilador.tab.c" break; - case 66: /* comando_repetitivo: $@9 WHILE expressao DO $@10 comando_sem_rotulo */ -#line 321 "compilador.y" + case 68: /* comando_repetitivo: $@9 WHILE expressao DO $@10 comando_sem_rotulo */ +#line 334 "compilador.y" { char r_ini[4]; char r_fim[4]; @@ -1595,21 +1597,21 @@ yyreduce: geraCodigo(r_fim,"NADA"); } -#line 1599 "compilador.tab.c" +#line 1601 "compilador.tab.c" break; - case 67: /* comando_condicional: if_then cond_else */ -#line 337 "compilador.y" + case 69: /* comando_condicional: if_then cond_else */ +#line 350 "compilador.y" { char r_fim[4]; desempilha(r_fim,rot); geraCodigo(r_fim,"NADA"); } -#line 1609 "compilador.tab.c" +#line 1611 "compilador.tab.c" break; - case 70: /* $@11: %empty */ -#line 349 "compilador.y" + case 72: /* $@11: %empty */ +#line 362 "compilador.y" { char r_else[4]; sprintf(r_else,"R%02d",rot_id); @@ -1625,11 +1627,11 @@ yyreduce: empilha(r_fim, rot); rot_id += 1; } -#line 1629 "compilador.tab.c" +#line 1631 "compilador.tab.c" break; - case 71: /* if_then: IF expressao $@11 THEN comando_sem_rotulo */ -#line 364 "compilador.y" + case 73: /* if_then: IF expressao $@11 THEN comando_sem_rotulo */ +#line 377 "compilador.y" { char r_fim[4]; desempilha(r_fim,rot); @@ -1644,11 +1646,11 @@ yyreduce: geraCodigo(r_else,"NADA"); } -#line 1648 "compilador.tab.c" +#line 1650 "compilador.tab.c" break; -#line 1652 "compilador.tab.c" +#line 1654 "compilador.tab.c" default: break; } @@ -1841,7 +1843,7 @@ yyreturnlab: return yyresult; } -#line 381 "compilador.y" +#line 394 "compilador.y" int main (int argc, char** argv) { diff --git a/compilador.y b/compilador.y index d231df9..91a5f84 100644 --- a/compilador.y +++ b/compilador.y @@ -118,7 +118,7 @@ tipo : IDENT } else { yyerror("Tipo não reconhecido. Somente 'integer' ou 'boolean' são permitidos."); } - //mostra_ts(ts); // Mostra a tabela após a inserção + mostra_ts(ts); // Mostra a tabela após a inserção } ; @@ -168,7 +168,7 @@ declaracao_procedimento: PROCEDURE IDENT { char buffer[50]; sprintf(buffer,"ENPR %d",nivel_lexico); geraCodigo(r_proc,buffer); - //mostra_ts(ts); + mostra_ts(ts); } PONTO_E_VIRGULA bloco { nivel_lexico -= 1; } @@ -193,10 +193,22 @@ comando_sem_rotulo: atribuicao | comando_repetitivo | leitura | escrita - //| chamada_procedimento + | chamada_procedimento ; -//chamada_procedimento: ; +chamada_procedimento: /*IDENT { + l_elem = busca(token,ts); + if (l_elem == NULL || l_elem->categ != PR) { + yyerror("Procedimento não declarado"); + } else { + // Gera código para chamar o procedimento + char buffer[50]; + sprintf(buffer, "CHPR %s,%d", l_elem->info.pr.rot, nivel_lexico); + geraCodigo(NULL, buffer); + } + //ABRE_PARENTESES FECHA_PARENTESES + }*/ +; leitura: READ ABRE_PARENTESES lista_leituras FECHA_PARENTESES ; @@ -265,6 +277,7 @@ termo: termo ASTERISCO fator { ; atribuicao: IDENT { + mostra_ts(ts); // Busca variável no lado esquerdo l_elem = busca(token, ts); if (l_elem == NULL) { diff --git a/teste2.pas b/teste2.pas index 7c13741..93c6a6a 100644 --- a/teste2.pas +++ b/teste2.pas @@ -3,5 +3,5 @@ var a: integer; b: integer; begin a := 5; - b := a + 5 * 2; + b := b + 5 * 2; end. diff --git a/teste6.pas b/teste6.pas index 52ee27e..cb2699e 100644 --- a/teste6.pas +++ b/teste6.pas @@ -7,4 +7,5 @@ program proc1 (input, output); end begin x := 8; + p end. \ No newline at end of file diff --git a/ts/ts.c b/ts/ts.c index 12d5051..2fed125 100644 --- a/ts/ts.c +++ b/ts/ts.c @@ -75,7 +75,7 @@ void atualiza_tipo(int n, int tipo, ts_t *ts){ } } -/*void mostra_ts(ts_t *ts) { +void mostra_ts(ts_t *ts) { if (ts == NULL || ts->topo == NULL) { printf("Tabela de Símbolos está vazia ou não inicializada.\n"); return; @@ -83,34 +83,46 @@ void atualiza_tipo(int n, int tipo, ts_t *ts){ printf("\nTabela de Símbolos:\n"); printf("----------------------------------------------------------------------------------\n"); - printf("| %-10s | %-8s | %-8s | %-10s | %-10s |\n", - "Ident", "Categ", "Nivel", "Tipo", "Desloc"); + printf("| %-10s | %-8s | %-8s | %-10s | %-10s | %-20s |\n", + "Ident", "Categ", "Nivel", "Tipo", "Desloc", "Detalhes"); printf("----------------------------------------------------------------------------------\n"); simb_t *p = ts->topo; while (p != NULL) { - // Identificar o tipo como Inteiro, Boolean ou Indefinido - const char *tipoStr; - switch (p->info.vs.tipo) { - case INTEIRO: - tipoStr = "Inteiro"; - break; - case BOOLEAN: - tipoStr = "Boolean"; - break; - default: - tipoStr = "NSEI"; - break; + // Identificar a categoria + const char *categStr; + const char *tipoStr = "-"; + char deslocStr[10] = "-"; + char detalhes[50] = "-"; + + if (p->categ == VS) { + categStr = "VS"; + // Determina o tipo como Inteiro, Boolean ou Indefinido + switch (p->info.vs.tipo) { + case INTEIRO: + tipoStr = "Inteiro"; + break; + case BOOLEAN: + tipoStr = "Boolean"; + break; + default: + tipoStr = "NSEI"; + break; + } + sprintf(deslocStr, "%d", p->info.vs.desloc); + } else if (p->categ == PR) { + categStr = "PR"; + tipoStr = "-"; + sprintf(detalhes, "%s, Params: %d", p->info.pr.rot, p->info.pr.quant); + } else { + categStr = "Outro"; } - // Determinar a categoria - const char *categStr = (p->categ == VS) ? "VS" : "Outro"; - - // Imprimir a entrada - printf("| %-10s | %-8s | %-8d | %-10s | %-10d |\n", - p->ident, categStr, p->nivel, tipoStr, p->info.vs.desloc); + // Imprime a entrada + printf("| %-10s | %-8s | %-8d | %-10s | %-10s | %-20s |\n", + p->ident, categStr, p->nivel, tipoStr, deslocStr, detalhes); p = p->prox; } printf("----------------------------------------------------------------------------------\n"); -}*/ \ No newline at end of file +} \ No newline at end of file diff --git a/ts/ts.h b/ts/ts.h index a3ea8d4..7db1cec 100644 --- a/ts/ts.h +++ b/ts/ts.h @@ -49,6 +49,6 @@ void retira(int n, ts_t *ts); void atualiza_tipo(int n, int tipo, ts_t *ts); -//void mostra_ts(ts_t *ts); +void mostra_ts(ts_t *ts); #endif diff --git a/ts/ts.o b/ts/ts.o index 45b0d9bc32a2d071f4485b2ad49fcf11a902a84a..49ecde5f0c6f37d09706be2dfb8317baf4653812 100644 GIT binary patch delta 2162 zcmbOrxkF=u2Gb6Kjan<1>p%0${R;KyeCpABq`{-Jwj;%(n?+TFfq}uJ)Afhp0gvX| z4u%pQk8alvk8TE!)&r#?9=)s#VEN-OK=ey~CI$vHF?4S88xE*YfKM+kNS6=P5NRmg zc@V0=qw^4qH93%3tlp#fhyYBW6JjIGF`ce6US=>NS?;>R<GAZKT?Ph*wBxS(7#KW` zyB+}XJdV4b09opB-1P#Kz5%5lKxwd7(vG`+U|{g*cAe4fz|nf3G{d8}9_m-u1rT9@ z<{ykD?9D%zO88$(!QJJ$;<Y3)hX;u>0jx1V#G}`Bn+L@69-ZerI*;!FSq--Lbr@KU z14r`@#!`EP-US}L=`j0OfR%VifGCgd00EC)*8?8CrXVv=&EiJZ5Auo!DE4M}bTjyX zT+m&+!lOHMfd@EBN)Lqjb{_QX{NVu#YX@*xce~E;=yuTX=yaXo(Of%&fxor)-~az` zL*Y^IBgI1-l2S@o!M-?oc=A=|jCuwJhLFUh)SN_xlvIV_!)tSs@^kWw6;g{!4lh(F zORUOFRLCz?$UD3^Um-IuGdVLcC$lOsB~g!o3yU@@kpCETNdWc4sbz3UEzZeLW(dhF z$Y=1&EKAK{a84{qO=s{-NzE$(+seSeP@|x#YiLlc0HQ5WD3~aWHUg>QVsJ^VFG<YF zNG)d2We5vq@XRYo%`D1iaLUimNlnaS@C$bJWKd0E2nb?OE!I&8NGwXsEw)lnO=0ja zEh);!Zea@8dYDBp8fqbfyR);Ef<|akX<kXGf}x?_WM39(CI*Jd=`4F0WhSe#%F8G) zFfbf|`Y4-;fq}u5PoRy-nU{?@iD|MutHS04Rt3h%0o*K;zp#o-ZeU~46=Gmy&|!vX zNrO-fQ49<WAn{31aj;1Y3=AogKeCE5W`fB=5IK1Rn~!N?Nhvs9<4Zu{o10%;Qj{29 zQp`|LT2jnVTu_vmSCYmMA75OOn4BG-oRJ-$mYA8dS&*HdvHm#J0+35V%oL~t&Vx7% z3=Av`3=9Gc3=Dt%L%?mQI86O4sQSlHadh>spyDv~TcGMcLB#7ZEcgqNV1Q|eWrXNp z1)0pi02gP6iu0g}^FhUh(Zq$J;<6~>^$ZM>PziMu2?hpvsJJ1TxDHg@4k`|!K!q$U zggik4NDhVhI1nlhqTnG~|NsC043G$thBT-JhtR}9g)b;99-xV5L)E`U6EB8}|3VY5 zhKdWaGBAM34|tF^KqVBxr645k1(D+33@Q$bnr5haM>KJm2jbDh+o0-mpyDhb`;jdu zg-XCIm<rXf22FepRD35?9OOadD7Xz3hnWM5g2zyCka|cI2t!i!cO(g+$)X(1f=56h z4UH6#F_R`w<halK7pe{{Ir$=&@Z<@c5?m9w!F&b<mdTqq&6sT2CJS<kP2$pkvL-ul zX>d8PLDXDioLt0Z#w5rwc@>u(qwQozR`E&P8cYrxleM_*I1@M^svb-(<TmHrzz^X~ pn7onOoYR35!aFhfBeyvx2h`4{$%Z`UoDLx0FfcHbO#a9z4*=G9)V=@! delta 252 zcmdm?F+p;I29p5iMy(ah%nS?+lWo~DCJS+BPj=wg!>BO%FNgf(DMBKf12{DpCr{vF znS6y)gfV#XL@x2k9Na#l1x1;8C20(aC8dcunN^ALC7A{J44XT-`57l~;IEkMAaH|e z67ys!K{GB1b_OuuV4NH!XvTDjd9ov?*yI(08ZhPyK@F}OAQvz&Fr+X{mJ%{!vSFDV zBxJ{w!2(e$qyb`H60+m$U;&%OaA2~eusNp!2ZUEKIa1i1(}NYl%a}Y<*qn0%8-$lQ S`KGWr*9@r25{AiAf^q=;JUg%e -- GitLab