From 15286e6a7046bd088ebe27d5a51cb67293fbebb9 Mon Sep 17 00:00:00 2001 From: JosS Date: Thu, 5 May 2016 14:02:32 +0200 Subject: [PATCH 1/4] Comienzo de semantica jueves 5 de mayo --- practica2/Practica2 David&Jose/practica2.c | 9 +-- practica2/Practica2 David&Jose/practica2.h | 9 +++ practica2/Practica2 David&Jose/practica2.l | 2 + practica2/Practica2 David&Jose/practica2.y | 73 +++++++++++++++++----- 4 files changed, 72 insertions(+), 21 deletions(-) create mode 100644 practica2/Practica2 David&Jose/practica2.h diff --git a/practica2/Practica2 David&Jose/practica2.c b/practica2/Practica2 David&Jose/practica2.c index 52554f8..9aaaad7 100755 --- a/practica2/Practica2 David&Jose/practica2.c +++ b/practica2/Practica2 David&Jose/practica2.c @@ -2,14 +2,11 @@ #define NUMERO 15 #define SALUDO "Hola" -float c,d = 5.3 + 2.4; -int a,b; +float c = 5.3; +int a; +int b = 3; int main(){ - int g; - h = a; - g = a+5; - z = 5 && f; printf("a a df",a,b,a+b); scanf("%d",&a); if(a==4){ diff --git a/practica2/Practica2 David&Jose/practica2.h b/practica2/Practica2 David&Jose/practica2.h new file mode 100644 index 0000000..6179184 --- /dev/null +++ b/practica2/Practica2 David&Jose/practica2.h @@ -0,0 +1,9 @@ +#define MAX_SIM 30 /*numero maximo de simbolos para la tabla*/ + +struct simbolo { + char id[20]; // nombre del id + int tipo; // 1.int 2.float 3.char + int inic; // 0 no 1 si +}tabla_simbolos[MAX_SIM]; + +struct simbolo *buscar_simbolo(); diff --git a/practica2/Practica2 David&Jose/practica2.l b/practica2/Practica2 David&Jose/practica2.l index e3a2b4d..46b8181 100755 --- a/practica2/Practica2 David&Jose/practica2.l +++ b/practica2/Practica2 David&Jose/practica2.l @@ -1,5 +1,6 @@ %{ #include "y.tab.h" +#include "practica2.h" #include int nLineas=1; @@ -80,6 +81,7 @@ coment ("//"{input}*{eol}?) } {iden} { printf("\n %d ID",nLineas); + strcpy(yylval.indice.id, yytext); return ID; } diff --git a/practica2/Practica2 David&Jose/practica2.y b/practica2/Practica2 David&Jose/practica2.y index 19ea69f..debc26f 100755 --- a/practica2/Practica2 David&Jose/practica2.y +++ b/practica2/Practica2 David&Jose/practica2.y @@ -4,6 +4,7 @@ #include #include #include +#include "practica2.h" void yyerror(const char* msg) { fprintf(stderr, "%s\n", msg); @@ -14,7 +15,14 @@ FILE *yyin; extern int nLineas; %} -%token ID + +%union { + int tipo; // 1.int 2.float 3.char + int inic; // 0 no 1 si + struct simbolo *indice; + } + +%token ID %token DEFINE %token NUM_ENTERO %token NUM_REAL @@ -32,7 +40,8 @@ extern int nLineas; %token SCANF %token WHILE %token CDC - +%type expr val tipo +%type id listID %% programa: declaracionesCtes declaracionVbles main {printf("\n Todo correcto numero de lineas %d\n",nLineas);} @@ -49,17 +58,24 @@ valor_cte: NUM_ENTERO declaracionVbles: /*vacia*/ | declaracionVble declaracionVbles ; -declaracionVble: tipo listID ';' {printf("\nDeclaracion vble");} +declaracionVble: tipo listID ';' {printf("\nDeclaracion vble"); + buscar_simbolo(--------);} ; -tipo: INT - | FLOAT - | CHAR +tipo: INT { $$ = 1; } + | FLOAT { $$ = 2; } + | CHAR { $$ = 3; } ; -listID: id +listID: id { $$ = $1; } | id ',' listID ; -id: ID - | asig +id: ID { $$ = 0; } + | ID '=' expr { $$ = 1; } + ; +expr: val + | val OPERADOR expr + ; +val: ID + | valor_cte ; main: MAIN '{' cuerpo '}' ; @@ -77,12 +93,6 @@ instruccion: asig ';' {printf("\nAsignacion");} asig: ID '=' expr | ID OPERADOR2 ; -expr: val - | val OPERADOR expr - ; -val: ID - | valor_cte - ; visu: PRINTF '(' listExpr ')' ; listExpr: /*vacia*/ @@ -126,4 +136,37 @@ int main() } +yyerror(s) +char *s; +{ + printf("%s\n",s); +} +struct simbolo *buscar_simbolo(struct simbolo simbo) +{ + int i; + if (num_sim == MAX_SIM) + { + yyerror("\nDemasiados simbolos"); + exit(1); + } + else{ + + for (i = 0; i Date: Mon, 9 May 2016 12:22:09 +0200 Subject: [PATCH 2/4] Comienzo de las pruebas en el terminal Falla el define --- practica2/Practica2 David&Jose/lex.yy.c | 58 ++-- practica2/Practica2 David&Jose/practica2.c | 45 +-- practica2/Practica2 David&Jose/practica2.exe | Bin 28720 -> 28984 bytes practica2/Practica2 David&Jose/practica2.l | 2 +- practica2/Practica2 David&Jose/practica2.y | 42 +-- practica2/Practica2 David&Jose/y.tab.c | 330 ++++++++++++------- practica2/Practica2 David&Jose/y.tab.h | 10 +- 7 files changed, 270 insertions(+), 217 deletions(-) diff --git a/practica2/Practica2 David&Jose/lex.yy.c b/practica2/Practica2 David&Jose/lex.yy.c index bcb7a10..3aa874b 100644 --- a/practica2/Practica2 David&Jose/lex.yy.c +++ b/practica2/Practica2 David&Jose/lex.yy.c @@ -509,10 +509,11 @@ char *yytext; #line 1 "practica2.l" #line 2 "practica2.l" #include "y.tab.h" +#include "practica2.h" #include int nLineas=1; -#line 516 "lex.yy.c" +#line 517 "lex.yy.c" #define INITIAL 0 @@ -694,10 +695,10 @@ YY_DECL register char *yy_cp, *yy_bp; register int yy_act; -#line 18 "practica2.l" +#line 19 "practica2.l" -#line 701 "lex.yy.c" +#line 702 "lex.yy.c" if ( !(yy_init) ) { @@ -782,21 +783,21 @@ YY_DECL case 1: YY_RULE_SETUP -#line 20 "practica2.l" +#line 21 "practica2.l" { printf("\n %d NUM_ENTERO",nLineas); return NUM_ENTERO; } YY_BREAK case 2: YY_RULE_SETUP -#line 24 "practica2.l" +#line 25 "practica2.l" { printf("\n %d NUM_REAL",nLineas); return NUM_REAL; } YY_BREAK case 3: YY_RULE_SETUP -#line 28 "practica2.l" +#line 29 "practica2.l" { printf("\n %d CDC",nLineas); return CDC; } @@ -804,110 +805,111 @@ YY_RULE_SETUP case 4: /* rule 4 can match eol */ YY_RULE_SETUP -#line 32 "practica2.l" +#line 33 "practica2.l" { printf("\n %d CADENA",nLineas); return CADENA; } YY_BREAK case 5: YY_RULE_SETUP -#line 36 "practica2.l" +#line 37 "practica2.l" ; YY_BREAK case 6: YY_RULE_SETUP -#line 38 "practica2.l" +#line 39 "practica2.l" { printf("\n %d DEFINE",nLineas); return DEFINE; } YY_BREAK case 7: YY_RULE_SETUP -#line 42 "practica2.l" +#line 43 "practica2.l" { printf("\n %d INT",nLineas); return INT; } YY_BREAK case 8: YY_RULE_SETUP -#line 46 "practica2.l" +#line 47 "practica2.l" { printf("\n %d FLOAT",nLineas); return FLOAT; } YY_BREAK case 9: YY_RULE_SETUP -#line 50 "practica2.l" +#line 51 "practica2.l" { printf("\n %d CHAR",nLineas); return CHAR; } YY_BREAK case 10: YY_RULE_SETUP -#line 54 "practica2.l" +#line 55 "practica2.l" { printf("\n %d MAIN",nLineas); return MAIN; } YY_BREAK case 11: YY_RULE_SETUP -#line 58 "practica2.l" +#line 59 "practica2.l" { printf("\n %d PRINTF",nLineas); return PRINTF; } YY_BREAK case 12: YY_RULE_SETUP -#line 62 "practica2.l" +#line 63 "practica2.l" { printf("\n %d SCANF",nLineas); return SCANF; } YY_BREAK case 13: YY_RULE_SETUP -#line 66 "practica2.l" +#line 67 "practica2.l" { printf("\n %d IF",nLineas); return IF; } YY_BREAK case 14: YY_RULE_SETUP -#line 70 "practica2.l" +#line 71 "practica2.l" { printf("\n %d ELSE",nLineas); return ELSE; } YY_BREAK case 15: YY_RULE_SETUP -#line 74 "practica2.l" +#line 75 "practica2.l" { printf("\n %d WHILE",nLineas); return WHILE; } YY_BREAK case 16: YY_RULE_SETUP -#line 78 "practica2.l" +#line 79 "practica2.l" { printf("\n %d FOR",nLineas); return FOR; } YY_BREAK case 17: YY_RULE_SETUP -#line 82 "practica2.l" +#line 83 "practica2.l" { printf("\n %d ID",nLineas); + strcpy(yylval.indice->id, yytext); return ID; } YY_BREAK case 18: YY_RULE_SETUP -#line 86 "practica2.l" +#line 88 "practica2.l" { printf("\n %d OPERADOR",nLineas); return OPERADOR; } YY_BREAK case 19: YY_RULE_SETUP -#line 89 "practica2.l" +#line 91 "practica2.l" { printf("\n %d OPERADOR2",nLineas); return OPERADOR2; } @@ -915,7 +917,7 @@ YY_RULE_SETUP case 20: /* rule 20 can match eol */ YY_RULE_SETUP -#line 92 "practica2.l" +#line 94 "practica2.l" { printf("\n %d COMENTARIO",nLineas); } @@ -923,22 +925,22 @@ YY_RULE_SETUP case 21: /* rule 21 can match eol */ YY_RULE_SETUP -#line 96 "practica2.l" +#line 98 "practica2.l" { nLineas++; } YY_BREAK case 22: YY_RULE_SETUP -#line 98 "practica2.l" +#line 100 "practica2.l" { printf("\n %d %c",nLineas, yytext[0]); return yytext[0]; } YY_BREAK case 23: YY_RULE_SETUP -#line 102 "practica2.l" +#line 104 "practica2.l" ECHO; YY_BREAK -#line 942 "lex.yy.c" +#line 944 "lex.yy.c" case YY_STATE_EOF(INITIAL): yyterminate(); @@ -1935,7 +1937,7 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 102 "practica2.l" +#line 104 "practica2.l" diff --git a/practica2/Practica2 David&Jose/practica2.c b/practica2/Practica2 David&Jose/practica2.c index 9aaaad7..ac9c3fc 100755 --- a/practica2/Practica2 David&Jose/practica2.c +++ b/practica2/Practica2 David&Jose/practica2.c @@ -2,47 +2,12 @@ #define NUMERO 15 #define SALUDO "Hola" -float c = 5.3; -int a; -int b = 3; int main(){ - printf("a a df",a,b,a+b); - scanf("%d",&a); - if(a==4){ - a++; - } - - if(b<9){ - b=5; - }else if (b>9){ - b = a-5; - } - - if(b<9){ - b=5; - }else { - b = a-5; - } - - for (a=1;a>6;a++){ - printf("y eso"); - } - - for (;a>6;){ - printf("y eso"); - } - - while(1){ - a++; - } - - //Practica realizada por - //David Heras Pino - //Jose L Pariente Martinez - //Copyright 2016 © - - - + + int a = 5; + int b; + float c; + float b; } diff --git a/practica2/Practica2 David&Jose/practica2.exe b/practica2/Practica2 David&Jose/practica2.exe index 6eb4a7e82527c9650c72b91be5176fd4ac3889f5..96d8b4f8c301b7a6b09c4accfd34ba6836b306cb 100755 GIT binary patch literal 28984 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 KStlD}WdAR-nczSG literal 28720 zcmeHw4SbZyaTkTTo?q;h{tcrD%Kvc7ze$ADw`^-6v@vJ%0vtI=%2dD6SNtarsl+ls=)3h5W?U5YG|`ld*j^o{sN z=5@C>G7B{BkLTx*?1+DKzlhH`1BcY*s;zM~wCvgCt#Q>g)?dTVf%?=x*&T)8czzRN z_|=qu8owOL?*Und;Anm{UXqpZxLg(GjpYV(?Rd{feu_;GUVgoj zU!FmLG`fF0S5Y{ZYga>L)n41b#G7OFj;ekdzlfdNP_pqRXK~3k+1O60CyoeAxttUM zliZ^FHXU{}hfq5eg=CY6bO%!7*|}3u9H`I=*&czwNM;!bJ1Z20RDS23iqeY(JQ{h3 zgr8Z6Da=JEMIic5dOE+LC<{IY2{WiT5RwrVH#O8RuBqO&xT2*7&GIt|G4UPu=+B0h z%~->EQqIYg(=bm#ae@+ZJOXwK;^n^5u;akqfoK?*B}m!MU>ms-u-^J$?jiBB?wCJ zAvkL%l|rgja02Xu7e;aZGB;)W4JBH_hrutS|6Btd?dL-0z(L!un94cOo~Y{10abGb z^|XIMnN~I^hy&JFmViUR_QE1!TQ*=nzC?Rpdr!~%`@;4Q3fuQxP~D}2mA=&~I@&fK zJ<^?nn)M*_Ed@v0eq;?^A1q~FIh44|2JO$}-E2R;?}F(g)%_v>byd@#y$uITG-#ca zPei348n2=|zI}r`fUw`o4sXEv6wvnLr5Cj4wX=G1M`8Pmh3!ojLiZ014WaVJW!z8? z^*yE`^!*RilGZfHBet5TH4S4ASii;8qD9}8yQww*pFbKJGJ5}fZgh_>`u1G}324am zL-j`pt=qm)NDNB{^fW(m=y_xi7eTdv&;i>*O7yazs->zrs*xR&Wl>Ns-0E$|1J~F^g=dg><5x?Oat>7l;|jQk8f8^&kntL(0Uch zLoKwM(6?O)Bu|A}1W6i`j20vvf@B1foCs|PNoa$h`)~zy=mIVU z(4i_pXJNX>LyH8-n@rLrNSuOXB$IT8MhlWNO!93(GF^})GRdQ%Al!NktCLB-BuIvE zO2EiRG0D-;PX)>SOmd4Lc|(vSG08)r?+TKyFiD;uc|wrbnB++4Zb7n}Nm2#LHw8&5 zlROx@U65>Il6SEHFz5zBGKNVW2(1t#c}()}f@HHGNnw)vLg|8J5|bPiBnt(}SSINR z{Sik=4BEmZenFBXNbF2U$0gm4Jb^LGi7-)6I1%uLcA`e#A%B9p8UB&P()XeMb3 z9TX%_FiDmm`Hmn-W|G#>Zb9-elYEF{7zX_nkZArdLn%Y+fYz95Os-BDWaW{bA8#o%On!k>!oJ18U1nMZEA0v-88@K{3Sw+q6*3SBV$1Kad zh;hz=!uA}P*)K9=+r>#jx33w?m+ZwB#6WKm=yejU>V*!h@!J`+zO#yGY>OC5o61S@ zSyjU-wq`P9OX4J_dH_VCKnQ%=d(0yL0w?2NRV_Crsw-eCT8KDc{UMi=iG4#g zok7cIQ4stO=#b_d)b|YrC$dek?MJcZJg@4bU^#-medkdfrhbNK@-T6cM%3C)0BosV zdR{9X4E^Lo*kavUFH1vDTp1b)o{+ux-HY9L^H+ez>V5lh`q1^a_$&0ocsH{&rT z&0j$nKWQ`9>9OX5IX%JKagPW!qpmp-pTJ~cl(wJ3-f-7#zbDI+_A+8QWB#3BruBYH zKSr4kKC)(@iqJLZ#n64|tgoOC`?_SY0S3eF)3)D@3NT zuG-cj50R>RS{0FLWl$ZKW$0UjETC$x&2%7I$`Iz-Qj~~U$paW%BRCCW*$Pfm;y8UC zq82^keg+D5V|xtFrG6%(5#4!J^_@C`&ff8yeX8<1P}?!SB?x5*%?SU9a0KBwgtrhz z{ds6;0m3GPdW6FWClFpo_y}Rz)uEwcgxv@S5q^O148orgR{mvZXc0nXW#uCK)HXD$ zDC}?Tf7=1Ks1(DX$L{|-#A=UoQ0OmY)ZK4UwVvQhxb>m^4uqhe9Hy6p8-?9HcoTr! z_tl zfi?2g`+)6nUWRW)MCS?XF1^g_gl5wEHLeEc-M^;BRPDv!>**lUtc}d6pc)B1QgH$W zWi%o8kB;s04a_F3nG))@2|IV$Wn%;rA|u#N6q>VN-G9nKQ&zm8c4ZBX^?3&wQe9=Kh>@#uo;c3y^P;CvKis5&V1!VJ~QD+a>fLiGifybAQyPRsal`*vOd0DD+`7oEV-#b zsfeB=7O;JL4qh2N+g^4_bvIpwd;CT4mhSOY&3Y$ymfhnDWVs$%I6s#fvZYeuF1sq- z<4aNQ@zt<K@m1fxt2@wm*ggI>Hg&kimtx%GONM*A7_JZ+I*LxlHWYD> zAsk3WT6X6^=;v^RVMa*#T4|WPo*~cKkmNoP+jR2R;ai?|UNTX~V$TE^^j$i<>|&VdtH@%$p=KTOJlTqJ%;ZMA4uDL&oTTmKgw-4-UAPXk zKy~YOLARR{U$JQO@N+%Zs9soM(FBIMA z;d0vmC*-cc#u0()`;gia#tHrn0U;~Kgglvn(1+|lTMvl(o#FZscjsb{vmcZYLjNk~ zMSB1S3SGdUV2k8P;4U0YVKs^_8)#2K9l6i;hn^DF+bLRF#tHjM)DOEKb4I3nEz0S^ zkS7VsWJ#&^6gmhKdV=;y-FlS{ak}jtPRKaGw7E+!s@Z4Mg)Cpq*$d0qOLgoAR1{%{ zc@orI&^8GPxEvQ;{>k8?IUnGaj>(6qEqy>pQFlI|YR)sD{~8mPB3qJ(rnG0ZvQrrO z8DBHjG8$^Ti}?~Q`qSNSLcJ5{#tFtAU<(6sfel))OwM5c&maRGqPGgfOVw3W{WYp0 zWw<#}q!H_VI=BtwFvMq6ZGB>hHHJug3fY7+dAvC<#>qbT7x;bH7SL&K8ER_%37==J zKNQE>2RZo!frcJ|bzrGFFxY#jEo|$(3LprlT5z~ca_}`T03I^Qg7ABskBcdG9;HIM z;J_w+R9#ip+g^IVeLwmJ76rc|oiBlya-VNMt2rMppiRHM?0$P2*x(HUUgVhGz`T~*?ef6Mf*_+s&oDRtx4O_dTp+>Mb zxcafiqPS?Us=m`glbVjgx)aX>f@gCqPcWcv+Wpu#Xb_n|2XD&?`>Aq04?rBjeXPCc zgJ!)AWT6*PC71%*9%PIi<}_=vo|XX$@EgU+_@A?9ub1_r==fq_w0-UH12B{A!31z{ z=5{$D0nKV6`T}BC++KRX?w^1h>UDFy3h zF3+##B>6=Q5NPWzQE97DDSjPVu_*_eXl&fyfOQm6QZFpF^_10YYXpnsoTR04l5ge& z`-HwF@pM8Gbzp)Z7+6T%$^SJclAstj7ohkLE=xPjiLo;!>igcnW-d+(t>{IZ|HOx9 z@&Jm%{yaRheS?_27BHg6-Zl*}M%&1oZ5~Q|pXDO+^*;^`85fzCNVO*ZiTwJ4`GQdv zCAi2$TQ+3ru^ZMpQILFyS~UAAj-b)jdcd&O@bqx)2N!n}Y6rhS{P&+qiSegXa3%11 zHjm)D~73Z3r{4{R}y$mWO)?0odV&Km_xWX`#;{3g49TK2U;^gVsM_r$Os)BH`Q6*BDMa%Srx| zoM4q`H^OPLofF7^7RdhE8vr)a)`SRAbs%_6o81HaJQB-FIzSx;ck(W5&IG>iAtzq=oLg@ zbeVdMC%iH)p#T%!&k0ZXV6^>|@3=_Aq10c(%@qdtBoh}rN=Z*b5Ag%*?*OF7evg#H zeT27?e+M}nAi!79Xb>5jpqI*Z+fGIsn;_e$Y2XzrUs_YaSKlS6-46OFsYUO%WFH3b z_KI(JXe+XRbv0tFg`m2SU|Qq$ljBXkD*)h3O$lR}V=R`vXS#qR+R$T&#C1|nuoPE( zSUdf2>iY>9zQ@{wo(Eszi_54c`{|^DPGEn-M#TOOr?g1>aYaNdD66tOMV3xNg4!Xd zu*(Um$f`zN8Xi}GQzx?f`h#ENt7Y)x>rl*}Fh-xWK4EXs1ZJ6J*Atux50*ASRXZKz z>6FI$W9}<+jQt$0!vGwA7O~cJ9@WnW=i;99V}(@jfRG;f09ZN&;X&)Y>MGdm{jjwH zf)zVB-oyw%5wIGo+s6k5FpO)nJD!vGKOW%2F!_%Au4)By zxe}xqKOgK(VJ@@+n-9`2jjKwxd22Ms-8 z+wcksur^O|@~O5#_(p9W)CQwN@r(`%Mt>J!^hw?)R4+|j`EO_9f*UB2Mke?>Xj5nl z&$@LHAwd3pBJZ(I0!UAgHtyW#HMn4BK4$;T?E>v3GA($JeLIp(l^js|D_PoOeJY$g z9-;I`vNbXrzTYzTclfu^K&&bFxi7;@Kwq%WcSJw(zMuSQ9X3eC`z{BKDcYajiK=j= zMQv7>*!iaKGq3~WK5Ybgg1ftsoE$DB;}kfylP(?fg7>Bp`!&S6$4{>;c=Xya2b-|N zDU|g16(nbX>G2Oj&P3AVUoDAy{5eL>#25vf!P+la_%n!w?q^P#KM_z!>;eK~HKUTM zF`zTkO576ZhpAenmV_Mh(T`Cd)b6)%kbF<|JSOZ1sh(trmBk(WWT3& zUonB6x~6J}2gvBG3J@>*0rqa+85LbuH1Z~{i4JpClI|Z()rB0Woyh2d#ITwLG=gZX z7H+5~_#0Hgu=)w_dzum;uoG~j&1h7tEnQIP0S66F7ai=T4)A-Chlz`%(S$^GZj7(N zWMlsG)QB#U?w}bsvuY8HMGxZI;<*U7WtMHNh-pjE7;Tx2f%$tyTbz7sTWY{BbSuEJ zp>q{`yt8W)2q%R-RU&44@EwFeuDS0Y3vaoAoHdLrhyVk5#Nt za*nTzG<+SJ1FVRrpn=1<~2>U5xm|7DTHUWxtpGnSiyF zP8aR~RifdqI!p`S-o~o=dyu1(2ct;1I}r(i00X6Caa3DvDPb6bG9>sp+NzdKtye1_)k*eS&JLl2_{^VI!Ryg!((`MVgi zH6DW(`%e+3?FaD~tL8t!n174MjMn^*Gp3U;_o9EYovx79y&o6lTHq+~n*Sl9I&h~@ z_uDZS7y)6zUqTu6UZZ*=Q11b*N3Z$q2bPL@iJ~51!u4>``4T*K2zmQNw4Q@&pw~dA z`8z-rqR9qDA1Hw6V#K|KcuOG83dBD#qMZ;w6Nu*o;%kg(BgEqZaa%$B0HkY!--CfkzN21|Thv<@UAZEu3=X2WMc zp0`pvM$261*!M215zNG^_LF(|%q~D&i|x;37Mp&h9V5%Rig#=Kp_@VGdzwnf)YuOd zQMG_I2#XM9W3dp4gZ-JD74O;o%sOD@vxKz6y!41m$RQZ)9cwIRUr2Q2W&6qG6tS{H zPr*BnG8vL%!A!as!uO9EsGBHWrD=)5N8dMyX?wQ&>5>an?_gr2IXNVI^ovN5SogH7 zL$jH_;2asnK-y10qaP!i8Km#5Q1TE;dd##%@N(uz_(kjv1gtk<)4a!T?NS$nCWU?h z(TUMvRT-N?J~wOKfEoQ%J05NDLl5I#y2qb~7ExOX%|awV5=@A%?g9l1F_Pc|mkmnx zKm*qQ#OxZI3!SDh))%;lxBj+FE-Emy6w;0ZBXwX6SkrBx&d#xvhw8=w`6V^`11w88 zE?4BX6Q*IAfF}D7{8rM07dh-M^80S$sg78N;_?S0*B?y<4=HV<%0S@Zo$|?H3 zJW%i*LIv`_k0f{lQ|G@+!qP?r-^WEdo%gQtd5_LmL$j6uH#94c<7FH#=XfQ@t2w@& z<3f(ta$L;udX80&Z{&Cb#~V4`%<&eEw{g53F$`^B@-cL-XzS3dhmm$vQDNvU%s>?h zF!ToHW>Ah?&#G0FJ43mfD0h-_w@{8=hgNwg_Xy=0D0hT%t(2n~tvW=xdnxxI<-SU} zA5gBDawjNPOSzv?j=l!0I!C$ND0hK!n<@7m<P zQd(7H{R}*9I!6A#n?l$4-{``x5A#e!ew2jia+6di8G-KMsXcPtN#NL)$b@~SVDuC7 z#{Z5NYd_o`41f|H$hJhof2%z80ozNsU87If;kZ4rOK`4~NeFO%xr{b5az2bcOhw*- zFb!ck0;wC}W+Kc&p#9CDofDO(GHP$GOpUgO(`)DB|0kJ19q?o*>G+j~G-WK(vEe_H zgj2D?V*iN7_??1ridak06t*zE0xbQR!zC&BEeJtNHf0p@V-RQ+(;xk7<5d2a*Qr?Z zcD4<){^=oGAfB%%ck|yDum^h`sT42oRP-;EaXm7BTTh)h_Af6Ko_NNWt{Z47KnI$EBp z2hZnZV}auMDHzik=AkR8Zw1tifL?a%+?g%8g11ay#&M8~#+tWj)4Uj1d-L zj3j}T81;3^GK^@cvRGM!5ifv5vtd)_!0yaY9I#vy@hb!w(4_IOvZ=7pcFaODEO-)T z-J;y`H~&+>(GyaiZOOHn!tr4G(-mm2H< z?0|;nKv#31rK++8+FJt6-i&w+^m{VvdkI$FM(Fkih>n+w6w(C8ImozBDD zWJ$di8l43=3+rea{wR0L|9}QxN*IxHDWeb1M=6z|saa7Xi zWZM{fO6u5gw0(u2g~?g=G>bAiVYJPX0YZ>W89Q#`L{zX?uDfYPdd6y$PRJ}vPEWmc z(xjD>CQY)8Pv4xLRXHKuG9fD?D>)-QGt*+rOvuU@lU15IWvD33n=%DyGv=CRk4UxJ zCr!I4eL}{Zx!Gy+=1li87W zOv{==jx(O|*@D=FD8X!^i9_DZAby-`q{%!I#ir4)Q=lYg-*_fZnL5=mZQ8Wy z(`U?_Idj&m*|Q;%?0NLepTA(i!i9?#FJ7FJo4aJ`(!9Le|oF0&(xQSJU^fr!hBE1T#p-{;#jb7QSr>h&YavOYnSG!x0L4-kF+UM z9SI7i7wu2AjGi;yGHdpHO!2e~+r;z<)8|^IEm%0q0yP*rE_>emMW~#Yzaldk^FC=( zc6xex>e2-Z7B85;Z2W?Z+zDA(=@YWD7iTQEE;%DJJKd6XPu6Uiy6csx+7KwbZbA8E1r^uIV+$J*XH*6}B*>!5s7ExGQ zRI*XzHg5stdXe9{u4tpomdMn(VXI_#i(0ZlX4h|$Y)Xnn#Z8-?TZ)Q}QUh8dkn1*; zVjM+VO5{Lhxs^)%-cXIBvc}WwXmFR;)_Uq4)wPYD`dXBF>g&Dr3m4XU9p&!EYHzKh z(%V#9p?I4b9o|YuMN4h@o@%#ak7tj!z6G@$EiEp0y{Ej<}ME{r?!InFL~^#ZfNjSNICF`9SfsGQHQ}wO7C5s`pO#b zUZuL0N-^LVu~n8=*MQNdNoTjG(N&8dQu|D!_S7~s)f=M3@1>Qy@5Jb5H6&p!w|OhP z4!5_y-s5icI%=EtcITw9Z>wQB6#gq_s8PFE)7`q>$n4e4&!nLVXF^%U0xG!x{OwB2#l;n|#9bo=R<&yj}CtofQeZ5Df z9Wwm~nLZ@bf05}4nLaDi7i9XXO#5Z}JDFaV=|?h6yk4|7R;F1poh{QGnUee{3_rsX z7?!}W1coIrEP-JO3`<~G0>cs*mcXzCh9xj8fnf<;D}mJMIXmg&l+;2O{d7I9c3keN zJ6*e*aQ&g&T(5M9@(SEX)rA3EJB9POWg>unN}7L4-?aSH4A|3L-AMTz$m3!Uw>1RqBnX#YwO)d% z2=dl>Y6++#pbo!y-&jdtGl94otRSG(Bp?p~?F{U#uf`1(zzza&P39)x0RpNU${QP7 z2s}dIp7NR+FJq4~=-K10V{9jZkrq!7h!zd%E`sqJ{OB!sDJB=*geAE4RAFcycN4BG z>EZ|i%xP&+^7fQh*DB`|YB%t8nsOn5?t>J2jdCCAJ!jfmUtXvD(NynI22G-Ye>G!t z9_0yho$^aF-SR1?EF@|rkRYV>VgfjZ5-@Gbr3C)J6ns{9Re8N~z=|u^`Ud42R>k5` zj+)RS#QDpFyUJ@6eCua!Rvt6qrs~fL7Nsl8B%1PYyw=Ti8)xdgOY(d%T89`4XJ4+GuQq-{t0T9Ll*h}B>V&~DEJatIcA}&UF8{cWuOd{M|L3U-+^B{t5Ggm zAl45pB-W2CEY|h}(U+ejC}ttc%N7p=xSs@g8*27a)KAd>MXmT0HG!^8A@v{9Bz5v6 z9g}RHLA8$0fv%IHUWx`NYP}uN5sC&rPdOK&eu}zU@c!n^cT9+1;JBCL^Bnhc9OQU_ z<3WzEa@_je@Kst@*1*_abEm1*)NAfA_uEo>O@*!IBW6dJ$X*utUQ8B|KNce=p$$5`IL&ITC(W!pkN6qJ#@2{Cf$j5~d4ryD0@d6a5>{Fvc(E zcOt>~;OB+S0zX6IN%6o+$(L|1K6E4a27;3nrC-u-m-x;(0>4|r1M>vDSHe3N2>2ce zJ0$!~33uRQI^zFB33tl&9w!*>4a)YOlK3N1Uw>-Um+k*d!t@&?#P1gp-YnsZ60Vc* zfP@Pr{E>urN*FJ9AwNZFl`!5_bAOEge`At_gNFPhJ-vgV_UB31ffu+0uOJxmHvT^l z`V5}NcU9KENy7NRg6X$O_`Jk_j$knAm*cOHa2MVb6aQujx8lP?f&&t+lk^W5_!$EK zJqgnbW}@$uaHkwEtU0&WA>lI;?v?N>1f%~0vVX5jeBBJe?*d@(CD#1B9S2{DgOjl~ zqv@x{!Smwayf}DG99$9yZ;FF&iGy8naAh3qjf3xsgTEXHx5dE+V<( zBo2No4t_EYE``)LB5Xp~hERq;U&hn7QM6awif|hOHdB11hY!&aK9Ar+*ojb%unWPB zfGH-m#1}vczHL*K3Isfbf6F!;imRpNV_u+Av8%>gUJ>hzP$_wBb@iURs=ZAO(nq1< z#`+f5#XcS^DmmTb!T%0K1-1C!xRBQ2wI-$9yBhMe0Jy6>Zm!l?PH%Zp zg6fj6ehI<#xfIvo|5ox!w2^IS^omhZj|oSjfWt^R@fw^81pAl*_>Of<<)&hn$X9uB zJYhGN>erMvG`hqn@$xlF#&HODo$Ny`*A@M#sE*8;a8|vwE{|7;CAw!gAvELvb-LEG z2LkS$%W&$cN3k9>mBjkbR6_6grGG2Hh;u9C6ZwiE3TBs;==tLW>C-YC?`fk@_~OVI zq6#Y#pDKVLofCeo1ZX6p7zdi&;k@u;C5F6WnPt})c~Q-%f{_t{7@#;;5Ey1sLx&KQ zh!YAjl4Bja?tt-nJxU3L_SHq?6PaS;Aci{iIKfDbq7zbhR0N3bQ7+O6f@HhKDERz^ zgR>M9COdMljX6*Akv678oUpk_9Ii!{j@BZFrjQMvf5pkyIP)5(U3tz8pK#^bmJ+PD jN^zPM$5`Y1Y8+gtuXJKHj;i4^Dul&{(`%0OWE}qw{AL2h diff --git a/practica2/Practica2 David&Jose/practica2.l b/practica2/Practica2 David&Jose/practica2.l index 46b8181..0b7a11e 100755 --- a/practica2/Practica2 David&Jose/practica2.l +++ b/practica2/Practica2 David&Jose/practica2.l @@ -81,7 +81,7 @@ coment ("//"{input}*{eol}?) } {iden} { printf("\n %d ID",nLineas); - strcpy(yylval.indice.id, yytext); + strcpy(yylval.indice->id, yytext); return ID; } diff --git a/practica2/Practica2 David&Jose/practica2.y b/practica2/Practica2 David&Jose/practica2.y index debc26f..a23b620 100755 --- a/practica2/Practica2 David&Jose/practica2.y +++ b/practica2/Practica2 David&Jose/practica2.y @@ -12,14 +12,14 @@ void yyerror(const char* msg) { int yylex(void); FILE *yyin; +int num_sim = 0; extern int nLineas; %} %union { int tipo; // 1.int 2.float 3.char - int inic; // 0 no 1 si - struct simbolo *indice; + struct simbolo *indice; } %token ID @@ -40,8 +40,8 @@ extern int nLineas; %token SCANF %token WHILE %token CDC -%type expr val tipo -%type id listID +%type tipo +%type id %% programa: declaracionesCtes declaracionVbles main {printf("\n Todo correcto numero de lineas %d\n",nLineas);} @@ -58,18 +58,23 @@ valor_cte: NUM_ENTERO declaracionVbles: /*vacia*/ | declaracionVble declaracionVbles ; -declaracionVble: tipo listID ';' {printf("\nDeclaracion vble"); - buscar_simbolo(--------);} +declaracionVble: tipo id ';' {printf("\nDeclaracion vble"); + $2->tipo = $1; + buscar_simbolo($2);} ; tipo: INT { $$ = 1; } | FLOAT { $$ = 2; } | CHAR { $$ = 3; } ; -listID: id { $$ = $1; } +listID: id | id ',' listID ; -id: ID { $$ = 0; } - | ID '=' expr { $$ = 1; } +id: ID { $$->inic = 0; + strcpy($$->id, $1->id); + } + | ID '=' expr { $$->inic = 1; + strcpy($$->id, $1->id); + } ; expr: val | val OPERADOR expr @@ -136,11 +141,6 @@ int main() } -yyerror(s) -char *s; -{ - printf("%s\n",s); -} struct simbolo *buscar_simbolo(struct simbolo simbo) { int i; @@ -154,14 +154,16 @@ struct simbolo *buscar_simbolo(struct simbolo simbo) for (i = 0; i #include #include +#include "practica2.h" void yyerror(const char* msg) { fprintf(stderr, "%s\n", msg); @@ -124,6 +125,7 @@ void yyerror(const char* msg) { int yylex(void); FILE *yyin; +int num_sim = 0; extern int nLineas; @@ -147,7 +149,15 @@ extern int nLineas; #endif #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -typedef int YYSTYPE; +typedef union YYSTYPE +#line 20 "practica2.y" +{ + int tipo; // 1.int 2.float 3.char + struct simbolo *indice; + } +/* Line 193 of yacc.c. */ +#line 160 "y.tab.c" + YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 @@ -159,7 +169,7 @@ typedef int YYSTYPE; /* Line 216 of yacc.c. */ -#line 163 "y.tab.c" +#line 173 "y.tab.c" #ifdef short # undef short @@ -374,16 +384,16 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 6 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 82 +#define YYLAST 112 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 29 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 29 +#define YYNNTS 28 /* YYNRULES -- Number of rules. */ -#define YYNRULES 53 +#define YYNRULES 51 /* YYNRULES -- Number of states. */ -#define YYNSTATES 105 +#define YYNSTATES 103 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 @@ -401,13 +411,13 @@ static const yytype_uint8 yytranslate[] = 2, 2, 2, 2, 2, 21, 2, 2, 2, 2, 27, 28, 2, 2, 23, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 22, - 2, 26, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 24, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 24, 2, 25, 2, 2, 2, 2, + 2, 2, 2, 25, 2, 26, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -431,44 +441,43 @@ static const yytype_uint8 yytranslate[] = static const yytype_uint8 yyprhs[] = { 0, 0, 3, 7, 8, 11, 16, 18, 20, 22, - 23, 26, 30, 32, 34, 36, 38, 42, 44, 46, - 51, 54, 56, 59, 62, 65, 68, 70, 72, 76, - 79, 81, 85, 87, 89, 94, 95, 97, 101, 109, - 111, 114, 122, 127, 130, 132, 134, 146, 147, 149, - 150, 152, 153, 156 + 23, 26, 30, 32, 34, 36, 38, 42, 44, 48, + 50, 52, 57, 60, 62, 65, 68, 71, 74, 76, + 78, 82, 85, 90, 91, 93, 97, 105, 107, 110, + 118, 123, 126, 128, 130, 142, 143, 145, 146, 148, + 149, 152 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int8 yyrhs[] = { - 30, 0, -1, 31, 34, 39, -1, -1, 32, 31, + 30, 0, -1, 31, 34, 40, -1, -1, 32, 31, -1, 21, 4, 3, 33, -1, 5, -1, 6, -1, 7, -1, -1, 35, 34, -1, 36, 37, 22, -1, - 8, -1, 9, -1, 10, -1, 38, -1, 38, 23, - 37, -1, 3, -1, 43, -1, 11, 24, 40, 25, - -1, 34, 41, -1, 42, -1, 42, 41, -1, 43, - 22, -1, 46, 22, -1, 48, 22, -1, 49, -1, - 52, -1, 3, 26, 44, -1, 3, 13, -1, 45, - -1, 45, 12, 44, -1, 3, -1, 33, -1, 14, - 27, 47, 28, -1, -1, 44, -1, 44, 23, 47, - -1, 18, 27, 20, 23, 12, 3, 28, -1, 50, - -1, 50, 51, -1, 15, 27, 44, 28, 24, 41, - 25, -1, 17, 24, 41, 25, -1, 17, 49, -1, - 53, -1, 57, -1, 16, 27, 54, 22, 55, 22, - 56, 28, 24, 41, 25, -1, -1, 43, -1, -1, - 44, -1, -1, 3, 13, -1, 19, 27, 44, 28, - 24, 41, 25, -1 + 8, -1, 9, -1, 10, -1, 3, -1, 3, 24, + 38, -1, 39, -1, 39, 12, 38, -1, 3, -1, + 33, -1, 11, 25, 41, 26, -1, 34, 42, -1, + 43, -1, 43, 42, -1, 44, 22, -1, 45, 22, + -1, 47, 22, -1, 48, -1, 51, -1, 3, 24, + 38, -1, 3, 13, -1, 14, 27, 46, 28, -1, + -1, 38, -1, 38, 23, 46, -1, 18, 27, 20, + 23, 12, 3, 28, -1, 49, -1, 49, 50, -1, + 15, 27, 38, 28, 25, 42, 26, -1, 17, 25, + 42, 26, -1, 17, 48, -1, 52, -1, 56, -1, + 16, 27, 53, 22, 54, 22, 55, 28, 25, 42, + 26, -1, -1, 44, -1, -1, 38, -1, -1, 3, + 13, -1, 19, 27, 38, 28, 25, 42, 26, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint8 yyrline[] = { - 0, 38, 38, 40, 41, 43, 45, 46, 47, 49, - 50, 52, 54, 55, 56, 58, 59, 61, 62, 64, - 66, 68, 69, 71, 72, 73, 74, 75, 77, 78, - 80, 81, 83, 84, 86, 88, 89, 90, 92, 94, - 95, 97, 99, 100, 102, 103, 105, 107, 108, 110, - 111, 113, 114, 116 + 0, 47, 47, 49, 50, 52, 54, 55, 56, 58, + 59, 61, 65, 66, 67, 72, 75, 79, 80, 82, + 83, 85, 87, 89, 90, 92, 93, 94, 95, 96, + 98, 99, 101, 103, 104, 105, 107, 109, 110, 112, + 114, 115, 117, 118, 120, 122, 123, 125, 126, 128, + 129, 131 }; #endif @@ -480,12 +489,12 @@ static const char *const yytname[] = "$end", "error", "$undefined", "ID", "DEFINE", "NUM_ENTERO", "NUM_REAL", "CADENA", "INT", "FLOAT", "CHAR", "MAIN", "OPERADOR", "OPERADOR2", "PRINTF", "IF", "FOR", "ELSE", "SCANF", "WHILE", "CDC", "'#'", "';'", - "','", "'{'", "'}'", "'='", "'('", "')'", "$accept", "programa", + "','", "'='", "'{'", "'}'", "'('", "')'", "$accept", "programa", "declaracionesCtes", "declaracionCte", "valor_cte", "declaracionVbles", - "declaracionVble", "tipo", "listID", "id", "main", "cuerpo", - "instrucciones", "instruccion", "asig", "expr", "val", "visu", - "listExpr", "lect", "cond", "bloqueIF", "else", "repe", "for", "inicia", - "expFOR", "increm", "while", 0 + "declaracionVble", "tipo", "id", "expr", "val", "main", "cuerpo", + "instrucciones", "instruccion", "asig", "visu", "listExpr", "lect", + "cond", "bloqueIF", "else", "repe", "for", "inicia", "expFOR", "increm", + "while", 0 }; #endif @@ -496,7 +505,7 @@ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 35, 59, 44, 123, 125, 61, 40, 41 + 275, 35, 59, 44, 61, 123, 125, 40, 41 }; # endif @@ -505,21 +514,21 @@ static const yytype_uint8 yyr1[] = { 0, 29, 30, 31, 31, 32, 33, 33, 33, 34, 34, 35, 36, 36, 36, 37, 37, 38, 38, 39, - 40, 41, 41, 42, 42, 42, 42, 42, 43, 43, - 44, 44, 45, 45, 46, 47, 47, 47, 48, 49, - 49, 50, 51, 51, 52, 52, 53, 54, 54, 55, - 55, 56, 56, 57 + 39, 40, 41, 42, 42, 43, 43, 43, 43, 43, + 44, 44, 45, 46, 46, 46, 47, 48, 48, 49, + 50, 50, 51, 51, 52, 53, 53, 54, 54, 55, + 55, 56 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 3, 0, 2, 4, 1, 1, 1, 0, - 2, 3, 1, 1, 1, 1, 3, 1, 1, 4, - 2, 1, 2, 2, 2, 2, 1, 1, 3, 2, - 1, 3, 1, 1, 4, 0, 1, 3, 7, 1, - 2, 7, 4, 2, 1, 1, 11, 0, 1, 0, - 1, 0, 2, 7 + 2, 3, 1, 1, 1, 1, 3, 1, 3, 1, + 1, 4, 2, 1, 2, 2, 2, 2, 1, 1, + 3, 2, 4, 0, 1, 3, 7, 1, 2, 7, + 4, 2, 1, 1, 11, 0, 1, 0, 1, 0, + 2, 7 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state @@ -528,50 +537,50 @@ static const yytype_uint8 yyr2[] = static const yytype_uint8 yydefact[] = { 3, 0, 0, 9, 3, 0, 1, 12, 13, 14, - 0, 9, 0, 4, 0, 0, 2, 10, 17, 0, - 15, 18, 6, 7, 8, 5, 9, 29, 0, 11, - 0, 0, 0, 32, 33, 28, 30, 16, 0, 0, - 0, 0, 0, 0, 20, 21, 0, 0, 0, 26, - 39, 27, 44, 45, 19, 0, 35, 0, 47, 0, - 0, 22, 23, 24, 25, 0, 40, 31, 36, 0, - 0, 48, 0, 0, 0, 0, 43, 35, 34, 0, - 49, 0, 0, 0, 37, 0, 50, 0, 0, 0, - 42, 0, 51, 0, 0, 41, 0, 0, 38, 53, - 52, 0, 0, 0, 46 + 0, 9, 0, 4, 0, 0, 2, 10, 15, 0, + 6, 7, 8, 5, 9, 0, 11, 0, 0, 19, + 20, 16, 17, 0, 0, 0, 0, 0, 0, 22, + 23, 0, 0, 0, 28, 37, 29, 42, 43, 21, + 0, 31, 0, 33, 0, 45, 0, 0, 24, 25, + 26, 27, 0, 38, 18, 30, 34, 0, 0, 46, + 0, 0, 0, 0, 41, 33, 32, 0, 47, 0, + 0, 0, 35, 0, 48, 0, 0, 0, 40, 0, + 49, 0, 0, 39, 0, 0, 36, 51, 50, 0, + 0, 0, 44 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = { - -1, 2, 3, 4, 34, 10, 11, 12, 19, 20, - 16, 32, 44, 45, 46, 68, 36, 47, 69, 48, - 49, 50, 66, 51, 52, 72, 87, 97, 53 + -1, 2, 3, 4, 30, 10, 11, 12, 19, 66, + 32, 16, 28, 39, 40, 41, 42, 67, 43, 44, + 45, 63, 46, 47, 70, 85, 95, 48 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -46 +#define YYPACT_NINF -41 static const yytype_int8 yypact[] = { - -17, 4, 6, 16, -17, 24, -46, -46, -46, -46, - -2, 16, 25, -46, 30, 9, -46, -46, -3, 10, - 15, -46, -46, -46, -46, -46, 16, -46, 8, -46, - 25, 2, 14, -46, -46, -46, 29, -46, -3, 18, - 19, 21, 22, 23, -46, 2, 20, 31, 33, -46, - 26, -46, -46, -46, -46, 8, 8, 8, 48, 32, - 8, -46, -46, -46, -46, -12, -46, -46, 35, 28, - 34, -46, 37, 38, 36, 2, -46, 8, -46, 39, - 8, 53, 42, 43, -46, 2, -46, 45, 57, 2, - -46, 44, 67, 46, 47, -46, 58, 49, -46, -46, - -46, 51, 2, 54, -46 + -18, 2, 11, -1, -18, 25, -41, -41, -41, -41, + 21, -1, 27, -41, 19, 10, -41, -41, 12, 15, + -41, -41, -41, -41, -1, 16, -41, -2, 13, -41, + -41, -41, 26, -9, 14, 17, 18, 22, 23, -41, + -2, 20, 24, 29, -41, 31, -41, -41, -41, -41, + 16, -41, 16, 16, 16, 37, 32, 16, -41, -41, + -41, -41, -5, -41, -41, -41, 30, 28, 33, -41, + 35, 36, 34, -2, -41, 16, -41, 38, 16, 42, + 39, 40, -41, -2, -41, 43, 55, -2, -41, 41, + 65, 44, 45, -41, 56, 46, -41, -41, -41, 48, + -2, 49, -41 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { - -46, -46, 69, -46, 62, -4, -46, -46, 50, -46, - -46, -46, -45, -46, -11, -26, -46, -46, 1, -46, - 17, -46, -46, -46, -46, -46, -46, -46, -46 + -41, -41, 66, -41, 62, -6, -41, -41, -41, -23, + -41, -41, -41, -40, -41, 47, -41, 3, -41, 50, + -41, -41, -41, -41, -41, -41, -41, -41 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If @@ -581,28 +590,34 @@ static const yytype_int8 yypgoto[] = #define YYTABLE_NINF -1 static const yytype_uint8 yytable[] = { - 61, 21, 35, 40, 1, 38, 6, 17, 5, 15, - 27, 33, 75, 22, 23, 24, 39, 40, 41, 21, - 42, 43, 31, 28, 7, 8, 9, 14, 18, 67, - 83, 70, 29, 26, 74, 22, 23, 24, 30, 54, - 91, 55, 62, 65, 94, 56, 57, 71, 58, 59, - 60, 38, 73, 63, 86, 64, 78, 103, 77, 80, - 93, 81, 79, 85, 82, 88, 89, 92, 90, 95, - 96, 100, 99, 13, 98, 102, 25, 101, 84, 104, - 37, 0, 76 + 58, 33, 31, 1, 51, 17, 5, 7, 8, 9, + 35, 6, 34, 35, 36, 52, 37, 38, 27, 29, + 73, 20, 21, 22, 20, 21, 22, 64, 14, 65, + 18, 68, 15, 81, 72, 24, 25, 26, 50, 49, + 33, 53, 59, 89, 54, 55, 60, 92, 62, 56, + 57, 61, 71, 75, 86, 84, 76, 78, 91, 79, + 101, 77, 80, 83, 87, 90, 88, 93, 94, 98, + 13, 97, 96, 100, 99, 102, 23, 0, 82, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 74 }; static const yytype_int8 yycheck[] = { - 45, 12, 28, 15, 21, 3, 0, 11, 4, 11, - 13, 3, 24, 5, 6, 7, 14, 15, 16, 30, - 18, 19, 26, 26, 8, 9, 10, 3, 3, 55, - 75, 57, 22, 24, 60, 5, 6, 7, 23, 25, - 85, 12, 22, 17, 89, 27, 27, 58, 27, 27, - 27, 3, 20, 22, 80, 22, 28, 102, 23, 22, - 3, 23, 28, 24, 28, 12, 24, 22, 25, 25, - 3, 13, 25, 4, 28, 24, 14, 28, 77, 25, - 30, -1, 65 + 40, 3, 25, 21, 13, 11, 4, 8, 9, 10, + 15, 0, 14, 15, 16, 24, 18, 19, 24, 3, + 25, 5, 6, 7, 5, 6, 7, 50, 3, 52, + 3, 54, 11, 73, 57, 25, 24, 22, 12, 26, + 3, 27, 22, 83, 27, 27, 22, 87, 17, 27, + 27, 22, 20, 23, 12, 78, 28, 22, 3, 23, + 100, 28, 28, 25, 25, 22, 26, 26, 3, 13, + 4, 26, 28, 25, 28, 26, 14, -1, 75, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 55, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 62 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -610,16 +625,16 @@ static const yytype_int8 yycheck[] = static const yytype_uint8 yystos[] = { 0, 21, 30, 31, 32, 4, 0, 8, 9, 10, - 34, 35, 36, 31, 3, 11, 39, 34, 3, 37, - 38, 43, 5, 6, 7, 33, 24, 13, 26, 22, - 23, 34, 40, 3, 33, 44, 45, 37, 3, 14, - 15, 16, 18, 19, 41, 42, 43, 46, 48, 49, - 50, 52, 53, 57, 25, 12, 27, 27, 27, 27, - 27, 41, 22, 22, 22, 17, 51, 44, 44, 47, - 44, 43, 54, 20, 44, 24, 49, 23, 28, 28, - 22, 23, 28, 41, 47, 24, 44, 55, 12, 24, - 25, 41, 22, 3, 41, 25, 3, 56, 28, 25, - 13, 28, 24, 41, 25 + 34, 35, 36, 31, 3, 11, 40, 34, 3, 37, + 5, 6, 7, 33, 25, 24, 22, 34, 41, 3, + 33, 38, 39, 3, 14, 15, 16, 18, 19, 42, + 43, 44, 45, 47, 48, 49, 51, 52, 56, 26, + 12, 13, 24, 27, 27, 27, 27, 27, 42, 22, + 22, 22, 17, 50, 38, 38, 38, 46, 38, 44, + 53, 20, 38, 25, 48, 23, 28, 28, 22, 23, + 28, 42, 46, 25, 38, 54, 12, 25, 26, 42, + 22, 3, 42, 26, 3, 55, 28, 26, 13, 28, + 25, 42, 26 }; #define yyerrok (yyerrstatus = 0) @@ -1434,63 +1449,94 @@ yyparse () switch (yyn) { case 2: -#line 38 "practica2.y" +#line 47 "practica2.y" {printf("\n Todo correcto numero de lineas %d\n",nLineas);} break; case 5: -#line 43 "practica2.y" +#line 52 "practica2.y" {printf("\nDeclaracion cte");} break; case 11: -#line 52 "practica2.y" - {printf("\nDeclaracion vble");} +#line 61 "practica2.y" + {printf("\nDeclaracion vble"); + (yyvsp[(2) - (3)].indice)->tipo = (yyvsp[(1) - (3)].tipo); + buscar_simbolo((yyvsp[(2) - (3)].indice));} break; - case 23: -#line 71 "practica2.y" - {printf("\nAsignacion");} + case 12: +#line 65 "practica2.y" + { (yyval.tipo) = 1; } + break; + + case 13: +#line 66 "practica2.y" + { (yyval.tipo) = 2; } + break; + + case 14: +#line 67 "practica2.y" + { (yyval.tipo) = 3; } break; - case 24: + case 15: #line 72 "practica2.y" - {printf("\nVisualizacion");} + { (yyval.indice)->inic = 0; + strcpy((yyval.indice)->id, (yyvsp[(1) - (1)].indice)->id); + } + break; + + case 16: +#line 75 "practica2.y" + { (yyval.indice)->inic = 1; + strcpy((yyval.indice)->id, (yyvsp[(1) - (3)].indice)->id); + } break; case 25: -#line 73 "practica2.y" - {printf("\nLectura");} +#line 92 "practica2.y" + {printf("\nAsignacion");} break; case 26: -#line 74 "practica2.y" - {printf("\nCondicion");} +#line 93 "practica2.y" + {printf("\nVisualizacion");} break; - case 39: + case 27: #line 94 "practica2.y" - {printf("\nBloque IF");} + {printf("\nLectura");} break; - case 40: + case 28: #line 95 "practica2.y" + {printf("\nCondicion");} + break; + + case 37: +#line 109 "practica2.y" + {printf("\nBloque IF");} + break; + + case 38: +#line 110 "practica2.y" {printf("\nBloque IF+ELSE");} break; - case 44: -#line 102 "practica2.y" + case 42: +#line 117 "practica2.y" {printf("\nRepeticion: bloque FOR");} break; - case 45: -#line 103 "practica2.y" + case 43: +#line 118 "practica2.y" {printf("\nRepeticion: bloque WHILE");} break; /* Line 1267 of yacc.c. */ -#line 1494 "y.tab.c" +#line 1540 "y.tab.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -1704,7 +1750,7 @@ yyparse () } -#line 120 "practica2.y" +#line 135 "practica2.y" int main() @@ -1714,5 +1760,35 @@ int main() } +struct simbolo *buscar_simbolo(struct simbolo simbo) +{ + int i; + if (num_sim == MAX_SIM) + { + yyerror("\nDemasiados simbolos"); + exit(1); + } + else{ + + for (i = 0; i Date: Thu, 12 May 2016 13:58:56 +0200 Subject: [PATCH 3/4] =?UTF-8?q?parte=20declaraci=C3=B3n=20constantes=20fun?= =?UTF-8?q?cional?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- practica2/Practica2 David&Jose/lex.yy.c | 2 +- practica2/Practica2 David&Jose/practica2.c | 11 +- practica2/Practica2 David&Jose/practica2.exe | Bin 28984 -> 29072 bytes practica2/Practica2 David&Jose/practica2.l | 2 +- practica2/Practica2 David&Jose/practica2.y | 101 +++---- practica2/Practica2 David&Jose/y.tab.c | 284 +++++-------------- practica2/Practica2 David&Jose/y.tab.h | 4 +- 7 files changed, 124 insertions(+), 280 deletions(-) diff --git a/practica2/Practica2 David&Jose/lex.yy.c b/practica2/Practica2 David&Jose/lex.yy.c index 3aa874b..6763815 100644 --- a/practica2/Practica2 David&Jose/lex.yy.c +++ b/practica2/Practica2 David&Jose/lex.yy.c @@ -896,7 +896,7 @@ case 17: YY_RULE_SETUP #line 83 "practica2.l" { printf("\n %d ID",nLineas); - strcpy(yylval.indice->id, yytext); + strcpy(yylval.nombreId, yytext); return ID; } YY_BREAK diff --git a/practica2/Practica2 David&Jose/practica2.c b/practica2/Practica2 David&Jose/practica2.c index ac9c3fc..844fa83 100755 --- a/practica2/Practica2 David&Jose/practica2.c +++ b/practica2/Practica2 David&Jose/practica2.c @@ -1,13 +1,4 @@ #define PI 3.1416 #define NUMERO 15 #define SALUDO "Hola" - - -int main(){ - - - int a = 5; - int b; - float c; - float b; -} +#define PI 4 diff --git a/practica2/Practica2 David&Jose/practica2.exe b/practica2/Practica2 David&Jose/practica2.exe index 96d8b4f8c301b7a6b09c4accfd34ba6836b306cb..995b27ddf1efe6cf83a11707e7e44150060c7872 100755 GIT binary patch literal 29072 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 Oo>Dr}pB6L`;{O0e)D2w# literal 28984 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 KStlD}WdAR-nczSG diff --git a/practica2/Practica2 David&Jose/practica2.l b/practica2/Practica2 David&Jose/practica2.l index 0b7a11e..12e6475 100755 --- a/practica2/Practica2 David&Jose/practica2.l +++ b/practica2/Practica2 David&Jose/practica2.l @@ -81,7 +81,7 @@ coment ("//"{input}*{eol}?) } {iden} { printf("\n %d ID",nLineas); - strcpy(yylval.indice->id, yytext); + strcpy(yylval.nombreId, yytext); return ID; } diff --git a/practica2/Practica2 David&Jose/practica2.y b/practica2/Practica2 David&Jose/practica2.y index a23b620..c13d2b1 100755 --- a/practica2/Practica2 David&Jose/practica2.y +++ b/practica2/Practica2 David&Jose/practica2.y @@ -4,7 +4,6 @@ #include #include #include -#include "practica2.h" void yyerror(const char* msg) { fprintf(stderr, "%s\n", msg); @@ -15,15 +14,26 @@ FILE *yyin; int num_sim = 0; extern int nLineas; +struct simbolo{ + char nombre[30]; + int tipo; + int cte; + int inicializado; +}; +struct simbolo tablaSimbolos[50]; +int dim = 0; + +int buscarSimbolo(struct simbolo tablaSimbolos[],char nombre[30],int dim); + %} %union { int tipo; // 1.int 2.float 3.char - struct simbolo *indice; + char nombreId[30]; } -%token ID -%token DEFINE +%token ID +%token DEFINE %token NUM_ENTERO %token NUM_REAL %token CADENA @@ -40,27 +50,40 @@ extern int nLineas; %token SCANF %token WHILE %token CDC -%type tipo -%type id +%type tipo valor_cte %% -programa: declaracionesCtes declaracionVbles main {printf("\n Todo correcto numero de lineas %d\n",nLineas);} +programa: declaracionesCtes {printf("\n Todo correcto numero de lineas %d\n",nLineas);} ; declaracionesCtes: /*vacia*/ | declaracionCte declaracionesCtes ; -declaracionCte: '#' DEFINE ID valor_cte {printf("\nDeclaracion cte");} - ; -valor_cte: NUM_ENTERO - | NUM_REAL - | CADENA +declaracionCte: '#' DEFINE ID valor_cte { printf("\nDeclaracion cte"); + int pos = buscarSimbolo(tablaSimbolos, $3, dim); + if (pos != dim){ + printf("\n ERROR lin: %d: identificador redeclarado\n",nLineas); + } + else { + //lo añado + printf("\n Añado %s",$3); + tablaSimbolos[dim].tipo = $4; + tablaSimbolos[dim].cte = 1; + tablaSimbolos[dim].inicializado = 1; + strcpy(tablaSimbolos[dim].nombre,$3); + dim++; + } + } + ; +valor_cte: NUM_ENTERO { $$ = 1; } + | NUM_REAL { $$ = 2; } + | CADENA { $$ = 3; } ; declaracionVbles: /*vacia*/ | declaracionVble declaracionVbles ; -declaracionVble: tipo id ';' {printf("\nDeclaracion vble"); - $2->tipo = $1; - buscar_simbolo($2);} +declaracionVble: tipo id ';' { printf("\nDeclaracion vble"); + + } ; tipo: INT { $$ = 1; } | FLOAT { $$ = 2; } @@ -69,11 +92,11 @@ tipo: INT { $$ = 1; } listID: id | id ',' listID ; -id: ID { $$->inic = 0; - strcpy($$->id, $1->id); +id: ID { + } - | ID '=' expr { $$->inic = 1; - strcpy($$->id, $1->id); + | ID '=' expr { + } ; expr: val @@ -84,9 +107,11 @@ val: ID ; main: MAIN '{' cuerpo '}' ; -cuerpo: declaracionVbles instrucciones +cuerpo: /*vacía*/ + | declaracionVbles instrucciones ; -instrucciones: instruccion +instrucciones: /*vacía*/ + | instruccion | instruccion instrucciones ; instruccion: asig ';' {printf("\nAsignacion");} @@ -141,34 +166,12 @@ int main() } -struct simbolo *buscar_simbolo(struct simbolo simbo) -{ - int i; - if (num_sim == MAX_SIM) - { - yyerror("\nDemasiados simbolos"); - exit(1); - } - else{ - - for (i = 0; i #include #include -#include "practica2.h" void yyerror(const char* msg) { fprintf(stderr, "%s\n", msg); @@ -128,6 +127,17 @@ FILE *yyin; int num_sim = 0; extern int nLineas; +struct simbolo{ + char nombre[30]; + int tipo; + int cte; + int inicializado; +}; +struct simbolo tablaSimbolos[50]; +int dim = 0; + +int buscarSimbolo(struct simbolo tablaSimbolos[],char nombre[30],int dim); + /* Enabling traces. */ @@ -150,13 +160,13 @@ extern int nLineas; #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE -#line 20 "practica2.y" +#line 30 "practica2.y" { int tipo; // 1.int 2.float 3.char - struct simbolo *indice; + char nombreId[30]; } /* Line 193 of yacc.c. */ -#line 160 "y.tab.c" +#line 170 "y.tab.c" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 @@ -169,7 +179,7 @@ typedef union YYSTYPE /* Line 216 of yacc.c. */ -#line 173 "y.tab.c" +#line 183 "y.tab.c" #ifdef short # undef short @@ -384,16 +394,16 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 6 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 112 +#define YYLAST 8 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 29 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 28 +#define YYNNTS 5 /* YYNRULES -- Number of rules. */ -#define YYNRULES 51 +#define YYNRULES 8 /* YYNRULES -- Number of states. */ -#define YYNSTATES 103 +#define YYNSTATES 13 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 @@ -440,44 +450,20 @@ static const yytype_uint8 yytranslate[] = YYRHS. */ static const yytype_uint8 yyprhs[] = { - 0, 0, 3, 7, 8, 11, 16, 18, 20, 22, - 23, 26, 30, 32, 34, 36, 38, 42, 44, 48, - 50, 52, 57, 60, 62, 65, 68, 71, 74, 76, - 78, 82, 85, 90, 91, 93, 97, 105, 107, 110, - 118, 123, 126, 128, 130, 142, 143, 145, 146, 148, - 149, 152 + 0, 0, 3, 5, 6, 9, 14, 16, 18 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int8 yyrhs[] = { - 30, 0, -1, 31, 34, 40, -1, -1, 32, 31, - -1, 21, 4, 3, 33, -1, 5, -1, 6, -1, - 7, -1, -1, 35, 34, -1, 36, 37, 22, -1, - 8, -1, 9, -1, 10, -1, 3, -1, 3, 24, - 38, -1, 39, -1, 39, 12, 38, -1, 3, -1, - 33, -1, 11, 25, 41, 26, -1, 34, 42, -1, - 43, -1, 43, 42, -1, 44, 22, -1, 45, 22, - -1, 47, 22, -1, 48, -1, 51, -1, 3, 24, - 38, -1, 3, 13, -1, 14, 27, 46, 28, -1, - -1, 38, -1, 38, 23, 46, -1, 18, 27, 20, - 23, 12, 3, 28, -1, 49, -1, 49, 50, -1, - 15, 27, 38, 28, 25, 42, 26, -1, 17, 25, - 42, 26, -1, 17, 48, -1, 52, -1, 56, -1, - 16, 27, 53, 22, 54, 22, 55, 28, 25, 42, - 26, -1, -1, 44, -1, -1, 38, -1, -1, 3, - 13, -1, 19, 27, 38, 28, 25, 42, 26, -1 + 30, 0, -1, 31, -1, -1, 32, 31, -1, 21, + 4, 3, 33, -1, 5, -1, 6, -1, 7, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint8 yyrline[] = { - 0, 47, 47, 49, 50, 52, 54, 55, 56, 58, - 59, 61, 65, 66, 67, 72, 75, 79, 80, 82, - 83, 85, 87, 89, 90, 92, 93, 94, 95, 96, - 98, 99, 101, 103, 104, 105, 107, 109, 110, 112, - 114, 115, 117, 118, 120, 122, 123, 125, 126, 128, - 129, 131 + 0, 56, 56, 58, 59, 61, 77, 78, 79 }; #endif @@ -490,11 +476,7 @@ static const char *const yytname[] = "CADENA", "INT", "FLOAT", "CHAR", "MAIN", "OPERADOR", "OPERADOR2", "PRINTF", "IF", "FOR", "ELSE", "SCANF", "WHILE", "CDC", "'#'", "';'", "','", "'='", "'{'", "'}'", "'('", "')'", "$accept", "programa", - "declaracionesCtes", "declaracionCte", "valor_cte", "declaracionVbles", - "declaracionVble", "tipo", "id", "expr", "val", "main", "cuerpo", - "instrucciones", "instruccion", "asig", "visu", "listExpr", "lect", - "cond", "bloqueIF", "else", "repe", "for", "inicia", "expFOR", "increm", - "while", 0 + "declaracionesCtes", "declaracionCte", "valor_cte", 0 }; #endif @@ -512,23 +494,13 @@ static const yytype_uint16 yytoknum[] = /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { - 0, 29, 30, 31, 31, 32, 33, 33, 33, 34, - 34, 35, 36, 36, 36, 37, 37, 38, 38, 39, - 39, 40, 41, 42, 42, 43, 43, 43, 43, 43, - 44, 44, 45, 46, 46, 46, 47, 48, 48, 49, - 50, 50, 51, 51, 52, 53, 53, 54, 54, 55, - 55, 56 + 0, 29, 30, 31, 31, 32, 33, 33, 33 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { - 0, 2, 3, 0, 2, 4, 1, 1, 1, 0, - 2, 3, 1, 1, 1, 1, 3, 1, 3, 1, - 1, 4, 2, 1, 2, 2, 2, 2, 1, 1, - 3, 2, 4, 0, 1, 3, 7, 1, 2, 7, - 4, 2, 1, 1, 11, 0, 1, 0, 1, 0, - 2, 7 + 0, 2, 1, 0, 2, 4, 1, 1, 1 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state @@ -536,51 +508,29 @@ static const yytype_uint8 yyr2[] = means the default is an error. */ static const yytype_uint8 yydefact[] = { - 3, 0, 0, 9, 3, 0, 1, 12, 13, 14, - 0, 9, 0, 4, 0, 0, 2, 10, 15, 0, - 6, 7, 8, 5, 9, 0, 11, 0, 0, 19, - 20, 16, 17, 0, 0, 0, 0, 0, 0, 22, - 23, 0, 0, 0, 28, 37, 29, 42, 43, 21, - 0, 31, 0, 33, 0, 45, 0, 0, 24, 25, - 26, 27, 0, 38, 18, 30, 34, 0, 0, 46, - 0, 0, 0, 0, 41, 33, 32, 0, 47, 0, - 0, 0, 35, 0, 48, 0, 0, 0, 40, 0, - 49, 0, 0, 39, 0, 0, 36, 51, 50, 0, - 0, 0, 44 + 3, 0, 0, 2, 3, 0, 1, 4, 0, 6, + 7, 8, 5 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = { - -1, 2, 3, 4, 30, 10, 11, 12, 19, 66, - 32, 16, 28, 39, 40, 41, 42, 67, 43, 44, - 45, 63, 46, 47, 70, 85, 95, 48 + -1, 2, 3, 4, 12 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -41 +#define YYPACT_NINF -19 static const yytype_int8 yypact[] = { - -18, 2, 11, -1, -18, 25, -41, -41, -41, -41, - 21, -1, 27, -41, 19, 10, -41, -41, 12, 15, - -41, -41, -41, -41, -1, 16, -41, -2, 13, -41, - -41, -41, 26, -9, 14, 17, 18, 22, 23, -41, - -2, 20, 24, 29, -41, 31, -41, -41, -41, -41, - 16, -41, 16, 16, 16, 37, 32, 16, -41, -41, - -41, -41, -5, -41, -41, -41, 30, 28, 33, -41, - 35, 36, 34, -2, -41, 16, -41, 38, 16, 42, - 39, 40, -41, -2, -41, 43, 55, -2, -41, 41, - 65, 44, 45, -41, 56, 46, -41, -41, -41, 48, - -2, 49, -41 + -18, 0, 5, -19, -18, 3, -19, -19, -5, -19, + -19, -19, -19 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { - -41, -41, 66, -41, 62, -6, -41, -41, -41, -23, - -41, -41, -41, -40, -41, 47, -41, 3, -41, 50, - -41, -41, -41, -41, -41, -41, -41, -41 + -19, -19, 4, -19, -19 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If @@ -590,51 +540,20 @@ static const yytype_int8 yypgoto[] = #define YYTABLE_NINF -1 static const yytype_uint8 yytable[] = { - 58, 33, 31, 1, 51, 17, 5, 7, 8, 9, - 35, 6, 34, 35, 36, 52, 37, 38, 27, 29, - 73, 20, 21, 22, 20, 21, 22, 64, 14, 65, - 18, 68, 15, 81, 72, 24, 25, 26, 50, 49, - 33, 53, 59, 89, 54, 55, 60, 92, 62, 56, - 57, 61, 71, 75, 86, 84, 76, 78, 91, 79, - 101, 77, 80, 83, 87, 90, 88, 93, 94, 98, - 13, 97, 96, 100, 99, 102, 23, 0, 82, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 74 + 9, 10, 11, 1, 5, 6, 8, 0, 7 }; static const yytype_int8 yycheck[] = { - 40, 3, 25, 21, 13, 11, 4, 8, 9, 10, - 15, 0, 14, 15, 16, 24, 18, 19, 24, 3, - 25, 5, 6, 7, 5, 6, 7, 50, 3, 52, - 3, 54, 11, 73, 57, 25, 24, 22, 12, 26, - 3, 27, 22, 83, 27, 27, 22, 87, 17, 27, - 27, 22, 20, 23, 12, 78, 28, 22, 3, 23, - 100, 28, 28, 25, 25, 22, 26, 26, 3, 13, - 4, 26, 28, 25, 28, 26, 14, -1, 75, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 55, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 62 + 5, 6, 7, 21, 4, 0, 3, -1, 4 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { - 0, 21, 30, 31, 32, 4, 0, 8, 9, 10, - 34, 35, 36, 31, 3, 11, 40, 34, 3, 37, - 5, 6, 7, 33, 25, 24, 22, 34, 41, 3, - 33, 38, 39, 3, 14, 15, 16, 18, 19, 42, - 43, 44, 45, 47, 48, 49, 51, 52, 56, 26, - 12, 13, 24, 27, 27, 27, 27, 27, 42, 22, - 22, 22, 17, 50, 38, 38, 38, 46, 38, 44, - 53, 20, 38, 25, 48, 23, 28, 28, 22, 23, - 28, 42, 46, 25, 38, 54, 12, 25, 26, 42, - 22, 3, 42, 26, 3, 55, 28, 26, 13, 28, - 25, 42, 26 + 0, 21, 30, 31, 32, 4, 0, 31, 3, 5, + 6, 7, 33 }; #define yyerrok (yyerrstatus = 0) @@ -1449,94 +1368,47 @@ yyparse () switch (yyn) { case 2: -#line 47 "practica2.y" +#line 56 "practica2.y" {printf("\n Todo correcto numero de lineas %d\n",nLineas);} break; case 5: -#line 52 "practica2.y" - {printf("\nDeclaracion cte");} - break; - - case 11: #line 61 "practica2.y" - {printf("\nDeclaracion vble"); - (yyvsp[(2) - (3)].indice)->tipo = (yyvsp[(1) - (3)].tipo); - buscar_simbolo((yyvsp[(2) - (3)].indice));} + { printf("\nDeclaracion cte"); + int pos = buscarSimbolo(tablaSimbolos, (yyvsp[(3) - (4)].nombreId), dim); + if (pos != dim){ + printf("\n ERROR lin: %d: identificador redeclarado\n",nLineas); + } + else { + //lo añado + printf("\n Añado %s",(yyvsp[(3) - (4)].nombreId)); + tablaSimbolos[dim].tipo = (yyvsp[(4) - (4)].tipo); + tablaSimbolos[dim].cte = 1; + tablaSimbolos[dim].inicializado = 1; + strcpy(tablaSimbolos[dim].nombre,(yyvsp[(3) - (4)].nombreId)); + dim++; + } + } break; - case 12: -#line 65 "practica2.y" + case 6: +#line 77 "practica2.y" { (yyval.tipo) = 1; } break; - case 13: -#line 66 "practica2.y" + case 7: +#line 78 "practica2.y" { (yyval.tipo) = 2; } break; - case 14: -#line 67 "practica2.y" + case 8: +#line 79 "practica2.y" { (yyval.tipo) = 3; } break; - case 15: -#line 72 "practica2.y" - { (yyval.indice)->inic = 0; - strcpy((yyval.indice)->id, (yyvsp[(1) - (1)].indice)->id); - } - break; - - case 16: -#line 75 "practica2.y" - { (yyval.indice)->inic = 1; - strcpy((yyval.indice)->id, (yyvsp[(1) - (3)].indice)->id); - } - break; - - case 25: -#line 92 "practica2.y" - {printf("\nAsignacion");} - break; - - case 26: -#line 93 "practica2.y" - {printf("\nVisualizacion");} - break; - - case 27: -#line 94 "practica2.y" - {printf("\nLectura");} - break; - - case 28: -#line 95 "practica2.y" - {printf("\nCondicion");} - break; - - case 37: -#line 109 "practica2.y" - {printf("\nBloque IF");} - break; - - case 38: -#line 110 "practica2.y" - {printf("\nBloque IF+ELSE");} - break; - - case 42: -#line 117 "practica2.y" - {printf("\nRepeticion: bloque FOR");} - break; - - case 43: -#line 118 "practica2.y" - {printf("\nRepeticion: bloque WHILE");} - break; - /* Line 1267 of yacc.c. */ -#line 1540 "y.tab.c" +#line 1412 "y.tab.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -1750,7 +1622,7 @@ yyparse () } -#line 135 "practica2.y" +#line 160 "practica2.y" int main() @@ -1760,35 +1632,13 @@ int main() } -struct simbolo *buscar_simbolo(struct simbolo simbo) -{ - int i; - if (num_sim == MAX_SIM) - { - yyerror("\nDemasiados simbolos"); - exit(1); - } - else{ - - for (i = 0; i Date: Tue, 24 May 2016 20:19:43 +0200 Subject: [PATCH 4/4] SEVAVEUNFOLLONG Ya ta la practica acabada --- practica2/Practica2 David&Jose/Leeme.txt | 2 +- .../Practica2 David&Jose/entrega/Leeme.txt | 2 + .../entrega/practica2.exe | Bin 0 -> 29056 bytes .../Practica2 David&Jose/entrega/practica2.l | 116 ++ .../Practica2 David&Jose/entrega/practica2.y | 262 ++++ .../entrega/practica2conErrores.c | 30 + .../entrega/practica2sinErrores.c | 10 + .../entrega/practicaYacc1516_JoseDavid.zip | Bin 0 -> 19446 bytes .../Practica2 David&Jose/entrega/y.output | 1132 +++++++++++++++++ practica2/Practica2 David&Jose/lex.yy.c | 304 +++-- practica2/Practica2 David&Jose/practica2.c | 4 - practica2/Practica2 David&Jose/practica2.exe | Bin 29072 -> 29056 bytes practica2/Practica2 David&Jose/practica2.l | 62 +- practica2/Practica2 David&Jose/practica2.y | 297 +++-- .../practica2conErrores.c | 30 + .../practica2sinErrores.c | 10 + practica2/Practica2 David&Jose/y.output | 1132 +++++++++++++++++ practica2/Practica2 David&Jose/y.tab.c | 384 +++++- practica2/Practica2 David&Jose/y.tab.h | 6 +- 19 files changed, 3433 insertions(+), 350 deletions(-) create mode 100644 practica2/Practica2 David&Jose/entrega/Leeme.txt create mode 100755 practica2/Practica2 David&Jose/entrega/practica2.exe create mode 100755 practica2/Practica2 David&Jose/entrega/practica2.l create mode 100755 practica2/Practica2 David&Jose/entrega/practica2.y create mode 100755 practica2/Practica2 David&Jose/entrega/practica2conErrores.c create mode 100755 practica2/Practica2 David&Jose/entrega/practica2sinErrores.c create mode 100644 practica2/Practica2 David&Jose/entrega/practicaYacc1516_JoseDavid.zip create mode 100644 practica2/Practica2 David&Jose/entrega/y.output delete mode 100755 practica2/Practica2 David&Jose/practica2.c create mode 100755 practica2/Practica2 David&Jose/practica2conErrores.c create mode 100755 practica2/Practica2 David&Jose/practica2sinErrores.c create mode 100644 practica2/Practica2 David&Jose/y.output diff --git a/practica2/Practica2 David&Jose/Leeme.txt b/practica2/Practica2 David&Jose/Leeme.txt index 1fa25cb..668eafd 100644 --- a/practica2/Practica2 David&Jose/Leeme.txt +++ b/practica2/Practica2 David&Jose/Leeme.txt @@ -1,2 +1,2 @@ Autores: Jose Luis Pariente Martinez y David Heras Pino -Código ejecutado y probado en OS X El Capitan 10.11.1 \ No newline at end of file +Código ejecutado y probado en MacOS X El Capitan 10.11.1 \ No newline at end of file diff --git a/practica2/Practica2 David&Jose/entrega/Leeme.txt b/practica2/Practica2 David&Jose/entrega/Leeme.txt new file mode 100644 index 0000000..668eafd --- /dev/null +++ b/practica2/Practica2 David&Jose/entrega/Leeme.txt @@ -0,0 +1,2 @@ +Autores: Jose Luis Pariente Martinez y David Heras Pino +Código ejecutado y probado en MacOS X El Capitan 10.11.1 \ No newline at end of file diff --git a/practica2/Practica2 David&Jose/entrega/practica2.exe b/practica2/Practica2 David&Jose/entrega/practica2.exe new file mode 100755 index 0000000000000000000000000000000000000000..0dcb4abfc4ccb50f86f70fcb28960d249b537226 GIT binary patch literal 29056 zcmeHw3wTu3wf~t+4n)W>AtWK;IXopi6C@Z7BZDw<5Tc+)sffccnMfqBPLdkDVk480 z91f%C)ynm@mDYZ@v>*15RV-dFnovs+t)^{MYSl)?cBVcEN;P7X`&(=8GcVNId)xo_ z{l7maoU_;3YwfkyUVH7m*WTwOym0Eh&j%}t#i}T+X^NuQak~a7N=R`4Qj`MR8g7qg z<)WqTYu#5|PPxgKB^mufjO0v11s=~;?$uW%vvB#9$$5&zp_`)OhDv;SJWc+VCW#

%QwkuQ>>j($(9c(2*BEbbsyxRd{bb3a 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 literal 0 HcmV?d00001 diff --git a/practica2/Practica2 David&Jose/entrega/practica2.l b/practica2/Practica2 David&Jose/entrega/practica2.l new file mode 100755 index 0000000..8b3da5e --- /dev/null +++ b/practica2/Practica2 David&Jose/entrega/practica2.l @@ -0,0 +1,116 @@ +%{ +#include "y.tab.h" +#include + +int nLineas=1; +%} + +entero [0-9]+ +real {entero}+[.]{entero}([eE][-+]?{entero})? +iden [a-zA-Z][a-zA-Z0-9]* +cadena \"(\\.|[^\\"])*\" +operador [+\-*/&|!<>%] +cdc1 \"%d\" +cdc2 \"%f\" +cdc3 \"%c\" +input [^\r\n] +eol (\n|\r|\r\n) +coment ("//"{input}*{eol}?) + +%% + +{entero} { + return NUM_ENTERO; + } + +{real} { + return NUM_REAL; + } + +{cdc1} { + yylval.tipo = 1; + return CDC; + } +{cdc2} { + yylval.tipo = 2; + return CDC; + } +{cdc3} { + yylval.tipo = 3; + return CDC; + } + +{cadena} { + return CADENA; + } + +[ \t] ; + +"define" { + return DEFINE; + } + +"int" { + return INT; + } + +"float" { + return FLOAT; + } + +"char" { + return CHAR; + } + +"int main()" { + return MAIN; + } + +"printf" { + return PRINTF; + } + +"scanf" { + return SCANF; + } + +"if" { + return IF; + } + +"else" { + return ELSE; + } + +"while" { + return WHILE; + } + +"for" { + return FOR; + } + +{iden} { + strcpy(yylval.nombreId, yytext); + return ID; + } + +{operador}|"&&"|"||"|"=="|"<="|">="|"!=" { + return OPERADOR; + } +"++"|"--" { + return OPERADOR2; + } +{coment} { nLineas++; } + +\n { nLineas++; } + +. { + return yytext[0]; + } + +%% + +int yywrap(){ + return 1; +} diff --git a/practica2/Practica2 David&Jose/entrega/practica2.y b/practica2/Practica2 David&Jose/entrega/practica2.y new file mode 100755 index 0000000..777c8e7 --- /dev/null +++ b/practica2/Practica2 David&Jose/entrega/practica2.y @@ -0,0 +1,262 @@ +%{ + +#include +#include +#include +#include + +void yyerror(const char* msg) { + fprintf(stderr, "%s\n", msg); +} +int yylex(void); +FILE *yyin; + +int num_sim = 0; +extern int nLineas; + +struct simbolo{ + char nombre[30]; + int tipo; + int cte; + int inicializado; +}; +struct simbolo tablaSimbolos[50]; +int dim = 0; + +int buscarSimbolo(struct simbolo tablaSimbolos[],char nombre[30],int dim); + +int errores = 0; + +%} + +%union { + int tipo; // 1.int 2.float 3.char + char nombreId[30]; + } + +%token ID +%token DEFINE +%token NUM_ENTERO +%token NUM_REAL +%token CADENA +%token INT +%token FLOAT +%token CHAR +%token MAIN +%token OPERADOR +%token OPERADOR2 +%token PRINTF +%token IF +%token FOR +%token ELSE +%token SCANF +%token WHILE +%token CDC +%type tipo valor_cte val expr +%type id + +%% +programa: declaracionesCtes main {if (errores > 0) { + printf("\n Programa compilado con %d errores en %d lineas\n",errores,nLineas); + }else{ + printf("\n Programa compilado sin errores y con %d lineas\n", nLineas); + } + } + + ; +declaracionesCtes: /*vacia*/ + | declaracionCte declaracionesCtes + ; +declaracionCte: '#' DEFINE ID valor_cte { + int pos = buscarSimbolo(tablaSimbolos, $3, dim); + if (pos != dim){ + printf("\n ERROR lin %d: Constante redeclarado",nLineas); + errores++; + } + else { + //lo añado + tablaSimbolos[dim].tipo = $4; + tablaSimbolos[dim].cte = 1; + tablaSimbolos[dim].inicializado = 1; + strcpy(tablaSimbolos[dim].nombre,$3); + dim++; + } + } + ; +valor_cte: NUM_ENTERO { $$ = 1; } + | NUM_REAL { $$ = 2; } + | CADENA { $$ = 3; } + ; +declaracionVbles: /*vacia*/ + | declaracionVble declaracionVbles + ; +declaracionVble: tipo id ';' { + int pos = buscarSimbolo(tablaSimbolos, $2, dim); + if (pos != dim){ + printf("\n ERROR lin %d: Identificador redeclarado",nLineas); + errores++; + } + else { + //lo añado + tablaSimbolos[dim].tipo = $1; + tablaSimbolos[dim].cte = 0; + tablaSimbolos[dim].inicializado = 0; + strcpy(tablaSimbolos[dim].nombre,$2); + dim++; + } + } + | tipo id '=' expr ';' { + int pos = buscarSimbolo(tablaSimbolos, $2, dim); + if (pos != dim){ + printf("\n ERROR lin %d: Identificador redeclarado",nLineas); + errores++; + } + else { + if ($1 != $4){ + printf("\n ERROR lin %d: No coinciden los tipos", nLineas); + errores++; + }else if ($4 != 4){ //el tipo 4 es indicador de que no existe la variable + //lo añado + tablaSimbolos[dim].tipo = $1; + tablaSimbolos[dim].cte = 0; + tablaSimbolos[dim].inicializado = 1; + strcpy(tablaSimbolos[dim].nombre,$2); + dim++; + } + } + } + ; +tipo: INT { $$ = 1; } + | FLOAT { $$ = 2; } + | CHAR { $$ = 3; } + ; +id: ID { strcpy($$, $1); } + ; +expr: val { $$ = $1; } + | val OPERADOR expr { if ($1 < $3) + { + $$ = $3; + }else{ + $$ = $1; + } + } + ; +val: ID { int pos = buscarSimbolo(tablaSimbolos, $1, dim); + int tipo = tablaSimbolos[pos].tipo; + if (tipo == 0){ + printf("\n ERROR lin %d: Variable %s no declarada", nLineas, $1); + errores++; + tipo = 4; + } + if (tablaSimbolos[pos].inicializado == 0){ + printf("\n ERROR lin %d: Variable %s no inicializada", nLineas, $1); + errores++; + tipo = 4; + } + $$ = tipo; + } + | valor_cte { $$ = $1; } + ; +main: MAIN '{' cuerpo '}' + ; +cuerpo: declaracionVbles instrucciones + ; +instrucciones: /*vacía*/ + | instruccion instrucciones + ; +instruccion: asig ';' + | visu ';' + | lect ';' + | cond + | repe + ; +asig: ID '=' expr { int pos = buscarSimbolo(tablaSimbolos, $1, dim); + int tipo = tablaSimbolos[pos].tipo; + if (tipo == 0){ + printf("\n ERROR lin %d: Variable %s no declarada", nLineas, $1); + errores++; + } + if (tablaSimbolos[pos].cte == 1){ + printf("\n ERROR lin %d: No se puede modificar el valor de una constante", nLineas); + errores++; + } + if ((tipo == 1 && $3 == 2) || (tipo == 3 && $3 == 2)){ //Problemas con entero = float y char = float + printf("\n ERROR lin %d: No coinciden los tipos", nLineas); + errores++; + } + + } + | ID OPERADOR2 + ; +visu: PRINTF '(' listExpr ')' + ; +listExpr: /*vacia*/ + | expr + | expr ',' listExpr + ; +lect: SCANF '(' CDC ',' OPERADOR ID ')' { int pos = buscarSimbolo(tablaSimbolos, $6, dim); + int tipo = tablaSimbolos[pos].tipo; + if (tipo == 0){ + printf("\n ERROR lin %d: Variable %s no declarada", nLineas, $6); + errores++; + } + if ($3 != tipo && tipo != 0){ + printf("\n ERROR lin %d: Tipos incompatibles en scanf", nLineas); + errores++; + } + } + ; +cond: bloqueIF + | bloqueIF else + ; +bloqueIF: IF '(' expr ')' '{' instrucciones '}' + ; +else: ELSE '{' instrucciones '}' + | ELSE cond + ; +repe: for + | while + ; +for: FOR '(' inicia ';' expFOR ';' increm ')' '{' instrucciones '}' + ; +inicia: /*vacia*/ + | asig + ; +expFOR: /*vacia*/ + | expr + ; +increm: /*vacia*/ + | ID OPERADOR2 { int pos = buscarSimbolo(tablaSimbolos, $1, dim); + int tipo = tablaSimbolos[pos].tipo; + if (tipo == 0){ + printf("\n ERROR lin %d: Variable %s no declarada", nLineas, $1); + errores++; + } + else if (tablaSimbolos[pos].inicializado == 0){ + printf("\n ERROR lin %d: Variable %s no inicializada", nLineas, $1); + errores++; + } + } + ; +while: WHILE '(' expr ')' '{' instrucciones '}' + ; + + +%% + +int main() +{ + yyin=fopen("practica2conErrores.c","r"); + yyparse(); + +} + +int buscarSimbolo(struct simbolo tablaSimbolos[],char nombre[50],int dim){ + for (int i=0;iq3IJ-9 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 q>f0k{F%Fa int nLineas=1; -#line 517 "lex.yy.c" +#line 524 "lex.yy.c" #define INITIAL 0 @@ -695,10 +702,10 @@ YY_DECL register char *yy_cp, *yy_bp; register int yy_act; -#line 19 "practica2.l" +#line 20 "practica2.l" -#line 702 "lex.yy.c" +#line 709 "lex.yy.c" if ( !(yy_init) ) { @@ -751,13 +758,13 @@ YY_DECL while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 88 ) + if ( yy_current_state >= 92 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 127 ); + while ( yy_base[yy_current_state] != 131 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -783,164 +790,179 @@ YY_DECL case 1: YY_RULE_SETUP -#line 21 "practica2.l" -{ printf("\n %d NUM_ENTERO",nLineas); +#line 22 "practica2.l" +{ return NUM_ENTERO; } YY_BREAK case 2: YY_RULE_SETUP -#line 25 "practica2.l" -{ printf("\n %d NUM_REAL",nLineas); +#line 26 "practica2.l" +{ return NUM_REAL; } YY_BREAK case 3: YY_RULE_SETUP -#line 29 "practica2.l" -{ printf("\n %d CDC",nLineas); - return CDC; - } +#line 30 "practica2.l" +{ + yylval.tipo = 1; + return CDC; + } YY_BREAK case 4: -/* rule 4 can match eol */ YY_RULE_SETUP -#line 33 "practica2.l" -{ printf("\n %d CADENA",nLineas); +#line 34 "practica2.l" +{ + yylval.tipo = 2; + return CDC; + } + YY_BREAK +case 5: +YY_RULE_SETUP +#line 38 "practica2.l" +{ + yylval.tipo = 3; + return CDC; + } + YY_BREAK +case 6: +/* rule 6 can match eol */ +YY_RULE_SETUP +#line 43 "practica2.l" +{ return CADENA; } YY_BREAK -case 5: +case 7: YY_RULE_SETUP -#line 37 "practica2.l" +#line 47 "practica2.l" ; YY_BREAK -case 6: +case 8: YY_RULE_SETUP -#line 39 "practica2.l" -{ printf("\n %d DEFINE",nLineas); +#line 49 "practica2.l" +{ return DEFINE; } YY_BREAK -case 7: +case 9: YY_RULE_SETUP -#line 43 "practica2.l" -{ printf("\n %d INT",nLineas); +#line 53 "practica2.l" +{ return INT; } YY_BREAK -case 8: +case 10: YY_RULE_SETUP -#line 47 "practica2.l" -{ printf("\n %d FLOAT",nLineas); +#line 57 "practica2.l" +{ return FLOAT; } YY_BREAK -case 9: +case 11: YY_RULE_SETUP -#line 51 "practica2.l" -{ printf("\n %d CHAR",nLineas); +#line 61 "practica2.l" +{ return CHAR; } YY_BREAK -case 10: +case 12: YY_RULE_SETUP -#line 55 "practica2.l" -{ printf("\n %d MAIN",nLineas); +#line 65 "practica2.l" +{ return MAIN; } YY_BREAK -case 11: +case 13: YY_RULE_SETUP -#line 59 "practica2.l" -{ printf("\n %d PRINTF",nLineas); +#line 69 "practica2.l" +{ return PRINTF; } YY_BREAK -case 12: +case 14: YY_RULE_SETUP -#line 63 "practica2.l" -{ printf("\n %d SCANF",nLineas); +#line 73 "practica2.l" +{ return SCANF; } YY_BREAK -case 13: +case 15: YY_RULE_SETUP -#line 67 "practica2.l" -{ printf("\n %d IF",nLineas); +#line 77 "practica2.l" +{ return IF; } YY_BREAK -case 14: +case 16: YY_RULE_SETUP -#line 71 "practica2.l" -{ printf("\n %d ELSE",nLineas); +#line 81 "practica2.l" +{ return ELSE; } YY_BREAK -case 15: +case 17: YY_RULE_SETUP -#line 75 "practica2.l" -{ printf("\n %d WHILE",nLineas); +#line 85 "practica2.l" +{ return WHILE; } YY_BREAK -case 16: +case 18: YY_RULE_SETUP -#line 79 "practica2.l" -{ printf("\n %d FOR",nLineas); +#line 89 "practica2.l" +{ return FOR; } YY_BREAK -case 17: +case 19: YY_RULE_SETUP -#line 83 "practica2.l" -{ printf("\n %d ID",nLineas); +#line 93 "practica2.l" +{ strcpy(yylval.nombreId, yytext); return ID; } YY_BREAK -case 18: +case 20: YY_RULE_SETUP -#line 88 "practica2.l" -{ printf("\n %d OPERADOR",nLineas); +#line 98 "practica2.l" +{ return OPERADOR; } YY_BREAK -case 19: +case 21: YY_RULE_SETUP -#line 91 "practica2.l" -{ printf("\n %d OPERADOR2",nLineas); +#line 101 "practica2.l" +{ return OPERADOR2; } YY_BREAK -case 20: -/* rule 20 can match eol */ +case 22: +/* rule 22 can match eol */ YY_RULE_SETUP -#line 94 "practica2.l" -{ printf("\n %d COMENTARIO",nLineas); - - } +#line 104 "practica2.l" +{ nLineas++; } YY_BREAK -case 21: -/* rule 21 can match eol */ +case 23: +/* rule 23 can match eol */ YY_RULE_SETUP -#line 98 "practica2.l" +#line 106 "practica2.l" { nLineas++; } YY_BREAK -case 22: +case 24: YY_RULE_SETUP -#line 100 "practica2.l" -{ printf("\n %d %c",nLineas, yytext[0]); +#line 108 "practica2.l" +{ return yytext[0]; } YY_BREAK -case 23: +case 25: YY_RULE_SETUP -#line 104 "practica2.l" +#line 112 "practica2.l" ECHO; YY_BREAK -#line 944 "lex.yy.c" +#line 966 "lex.yy.c" case YY_STATE_EOF(INITIAL): yyterminate(); @@ -1232,7 +1254,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 88 ) + if ( yy_current_state >= 92 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -1260,11 +1282,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 88 ) + if ( yy_current_state >= 92 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 87); + yy_is_jam = (yy_current_state == 91); return yy_is_jam ? 0 : yy_current_state; } @@ -1937,7 +1959,7 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 104 "practica2.l" +#line 112 "practica2.l" diff --git a/practica2/Practica2 David&Jose/practica2.c b/practica2/Practica2 David&Jose/practica2.c deleted file mode 100755 index 844fa83..0000000 --- a/practica2/Practica2 David&Jose/practica2.c +++ /dev/null @@ -1,4 +0,0 @@ -#define PI 3.1416 -#define NUMERO 15 -#define SALUDO "Hola" -#define PI 4 diff --git a/practica2/Practica2 David&Jose/practica2.exe b/practica2/Practica2 David&Jose/practica2.exe index 995b27ddf1efe6cf83a11707e7e44150060c7872..0dcb4abfc4ccb50f86f70fcb28960d249b537226 100755 GIT binary patch literal 29056 zcmeHw3wTu3wf~t+4n)W>AtWK;IXopi6C@Z7BZDw<5Tc+)sffccnMfqBPLdkDVk480 z91f%C)ynm@mDYZ@v>*15RV-dFnovs+t)^{MYSl)?cBVcEN;P7X`&(=8GcVNId)xo_ z{l7maoU_;3YwfkyUVH7m*WTwOym0Eh&j%}t#i}T+X^NuQak~a7N=R`4Qj`MR8g7qg z<)WqTYu#5|PPxgKB^mufjO0v11s=~;?$uW%vvB#9$$5&zp_`)OhDv;SJWc+VCW#

%QwkuQ>>j($(9c(2*BEbbsyxRd{bb3a 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 literal 29072 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 Oo>Dr}pB6L`;{O0e)D2w# diff --git a/practica2/Practica2 David&Jose/practica2.l b/practica2/Practica2 David&Jose/practica2.l index 12e6475..8b3da5e 100755 --- a/practica2/Practica2 David&Jose/practica2.l +++ b/practica2/Practica2 David&Jose/practica2.l @@ -1,6 +1,5 @@ %{ #include "y.tab.h" -#include "practica2.h" #include int nLineas=1; @@ -11,93 +10,102 @@ real {entero}+[.]{entero}([eE][-+]?{entero})? iden [a-zA-Z][a-zA-Z0-9]* cadena \"(\\.|[^\\"])*\" operador [+\-*/&|!<>%] -cdc \"(%d|%f|%c)\" +cdc1 \"%d\" +cdc2 \"%f\" +cdc3 \"%c\" input [^\r\n] eol (\n|\r|\r\n) coment ("//"{input}*{eol}?) %% -{entero} { printf("\n %d NUM_ENTERO",nLineas); +{entero} { return NUM_ENTERO; } -{real} { printf("\n %d NUM_REAL",nLineas); +{real} { return NUM_REAL; } -{cdc} { printf("\n %d CDC",nLineas); - return CDC; - } - -{cadena} { printf("\n %d CADENA",nLineas); +{cdc1} { + yylval.tipo = 1; + return CDC; + } +{cdc2} { + yylval.tipo = 2; + return CDC; + } +{cdc3} { + yylval.tipo = 3; + return CDC; + } + +{cadena} { return CADENA; } [ \t] ; -"define" { printf("\n %d DEFINE",nLineas); +"define" { return DEFINE; } -"int" { printf("\n %d INT",nLineas); +"int" { return INT; } -"float" { printf("\n %d FLOAT",nLineas); +"float" { return FLOAT; } -"char" { printf("\n %d CHAR",nLineas); +"char" { return CHAR; } -"int main()" { printf("\n %d MAIN",nLineas); +"int main()" { return MAIN; } -"printf" { printf("\n %d PRINTF",nLineas); +"printf" { return PRINTF; } -"scanf" { printf("\n %d SCANF",nLineas); +"scanf" { return SCANF; } -"if" { printf("\n %d IF",nLineas); +"if" { return IF; } -"else" { printf("\n %d ELSE",nLineas); +"else" { return ELSE; } -"while" { printf("\n %d WHILE",nLineas); +"while" { return WHILE; } -"for" { printf("\n %d FOR",nLineas); +"for" { return FOR; } -{iden} { printf("\n %d ID",nLineas); +{iden} { strcpy(yylval.nombreId, yytext); return ID; } -{operador}|"&&"|"||"|"=="|"<="|">="|"!=" { printf("\n %d OPERADOR",nLineas); +{operador}|"&&"|"||"|"=="|"<="|">="|"!=" { return OPERADOR; } -"++"|"--" { printf("\n %d OPERADOR2",nLineas); +"++"|"--" { return OPERADOR2; } -{coment} { printf("\n %d COMENTARIO",nLineas); - - } +{coment} { nLineas++; } \n { nLineas++; } -. { printf("\n %d %c",nLineas, yytext[0]); +. { return yytext[0]; } diff --git a/practica2/Practica2 David&Jose/practica2.y b/practica2/Practica2 David&Jose/practica2.y index c13d2b1..777c8e7 100755 --- a/practica2/Practica2 David&Jose/practica2.y +++ b/practica2/Practica2 David&Jose/practica2.y @@ -6,7 +6,7 @@ #include void yyerror(const char* msg) { - fprintf(stderr, "%s\n", msg); + fprintf(stderr, "%s\n", msg); } int yylex(void); FILE *yyin; @@ -15,25 +15,27 @@ int num_sim = 0; extern int nLineas; struct simbolo{ - char nombre[30]; - int tipo; - int cte; - int inicializado; + char nombre[30]; + int tipo; + int cte; + int inicializado; }; struct simbolo tablaSimbolos[50]; int dim = 0; int buscarSimbolo(struct simbolo tablaSimbolos[],char nombre[30],int dim); +int errores = 0; + %} %union { - int tipo; // 1.int 2.float 3.char - char nombreId[30]; + int tipo; // 1.int 2.float 3.char + char nombreId[30]; } -%token ID -%token DEFINE +%token ID +%token DEFINE %token NUM_ENTERO %token NUM_REAL %token CADENA @@ -49,129 +51,212 @@ int buscarSimbolo(struct simbolo tablaSimbolos[],char nombre[30],int dim); %token ELSE %token SCANF %token WHILE -%token CDC -%type tipo valor_cte +%token CDC +%type tipo valor_cte val expr +%type id %% -programa: declaracionesCtes {printf("\n Todo correcto numero de lineas %d\n",nLineas);} - ; +programa: declaracionesCtes main {if (errores > 0) { + printf("\n Programa compilado con %d errores en %d lineas\n",errores,nLineas); + }else{ + printf("\n Programa compilado sin errores y con %d lineas\n", nLineas); + } + } + + ; declaracionesCtes: /*vacia*/ - | declaracionCte declaracionesCtes - ; -declaracionCte: '#' DEFINE ID valor_cte { printf("\nDeclaracion cte"); - int pos = buscarSimbolo(tablaSimbolos, $3, dim); - if (pos != dim){ - printf("\n ERROR lin: %d: identificador redeclarado\n",nLineas); - } - else { - //lo añado - printf("\n Añado %s",$3); - tablaSimbolos[dim].tipo = $4; - tablaSimbolos[dim].cte = 1; - tablaSimbolos[dim].inicializado = 1; - strcpy(tablaSimbolos[dim].nombre,$3); - dim++; - } - } - ; + | declaracionCte declaracionesCtes + ; +declaracionCte: '#' DEFINE ID valor_cte { + int pos = buscarSimbolo(tablaSimbolos, $3, dim); + if (pos != dim){ + printf("\n ERROR lin %d: Constante redeclarado",nLineas); + errores++; + } + else { + //lo añado + tablaSimbolos[dim].tipo = $4; + tablaSimbolos[dim].cte = 1; + tablaSimbolos[dim].inicializado = 1; + strcpy(tablaSimbolos[dim].nombre,$3); + dim++; + } + } + ; valor_cte: NUM_ENTERO { $$ = 1; } - | NUM_REAL { $$ = 2; } - | CADENA { $$ = 3; } - ; + | NUM_REAL { $$ = 2; } + | CADENA { $$ = 3; } + ; declaracionVbles: /*vacia*/ - | declaracionVble declaracionVbles - ; -declaracionVble: tipo id ';' { printf("\nDeclaracion vble"); - - } - ; + | declaracionVble declaracionVbles + ; +declaracionVble: tipo id ';' { + int pos = buscarSimbolo(tablaSimbolos, $2, dim); + if (pos != dim){ + printf("\n ERROR lin %d: Identificador redeclarado",nLineas); + errores++; + } + else { + //lo añado + tablaSimbolos[dim].tipo = $1; + tablaSimbolos[dim].cte = 0; + tablaSimbolos[dim].inicializado = 0; + strcpy(tablaSimbolos[dim].nombre,$2); + dim++; + } + } + | tipo id '=' expr ';' { + int pos = buscarSimbolo(tablaSimbolos, $2, dim); + if (pos != dim){ + printf("\n ERROR lin %d: Identificador redeclarado",nLineas); + errores++; + } + else { + if ($1 != $4){ + printf("\n ERROR lin %d: No coinciden los tipos", nLineas); + errores++; + }else if ($4 != 4){ //el tipo 4 es indicador de que no existe la variable + //lo añado + tablaSimbolos[dim].tipo = $1; + tablaSimbolos[dim].cte = 0; + tablaSimbolos[dim].inicializado = 1; + strcpy(tablaSimbolos[dim].nombre,$2); + dim++; + } + } + } + ; tipo: INT { $$ = 1; } - | FLOAT { $$ = 2; } - | CHAR { $$ = 3; } - ; -listID: id - | id ',' listID - ; -id: ID { - - } - | ID '=' expr { - - } - ; -expr: val - | val OPERADOR expr - ; -val: ID - | valor_cte - ; + | FLOAT { $$ = 2; } + | CHAR { $$ = 3; } + ; +id: ID { strcpy($$, $1); } + ; +expr: val { $$ = $1; } + | val OPERADOR expr { if ($1 < $3) + { + $$ = $3; + }else{ + $$ = $1; + } + } + ; +val: ID { int pos = buscarSimbolo(tablaSimbolos, $1, dim); + int tipo = tablaSimbolos[pos].tipo; + if (tipo == 0){ + printf("\n ERROR lin %d: Variable %s no declarada", nLineas, $1); + errores++; + tipo = 4; + } + if (tablaSimbolos[pos].inicializado == 0){ + printf("\n ERROR lin %d: Variable %s no inicializada", nLineas, $1); + errores++; + tipo = 4; + } + $$ = tipo; + } + | valor_cte { $$ = $1; } + ; main: MAIN '{' cuerpo '}' - ; -cuerpo: /*vacía*/ - | declaracionVbles instrucciones - ; + ; +cuerpo: declaracionVbles instrucciones + ; instrucciones: /*vacía*/ - | instruccion - | instruccion instrucciones - ; -instruccion: asig ';' {printf("\nAsignacion");} - | visu ';' {printf("\nVisualizacion");} - | lect ';' {printf("\nLectura");} - | cond {printf("\nCondicion");} - | repe - ; -asig: ID '=' expr - | ID OPERADOR2 - ; + | instruccion instrucciones + ; +instruccion: asig ';' + | visu ';' + | lect ';' + | cond + | repe + ; +asig: ID '=' expr { int pos = buscarSimbolo(tablaSimbolos, $1, dim); + int tipo = tablaSimbolos[pos].tipo; + if (tipo == 0){ + printf("\n ERROR lin %d: Variable %s no declarada", nLineas, $1); + errores++; + } + if (tablaSimbolos[pos].cte == 1){ + printf("\n ERROR lin %d: No se puede modificar el valor de una constante", nLineas); + errores++; + } + if ((tipo == 1 && $3 == 2) || (tipo == 3 && $3 == 2)){ //Problemas con entero = float y char = float + printf("\n ERROR lin %d: No coinciden los tipos", nLineas); + errores++; + } + + } + | ID OPERADOR2 + ; visu: PRINTF '(' listExpr ')' - ; + ; listExpr: /*vacia*/ - | expr - | expr ',' listExpr - ; -lect: SCANF '(' CDC ',' OPERADOR ID ')' - ; -cond: bloqueIF {printf("\nBloque IF");} - | bloqueIF else {printf("\nBloque IF+ELSE");} - ; + | expr + | expr ',' listExpr + ; +lect: SCANF '(' CDC ',' OPERADOR ID ')' { int pos = buscarSimbolo(tablaSimbolos, $6, dim); + int tipo = tablaSimbolos[pos].tipo; + if (tipo == 0){ + printf("\n ERROR lin %d: Variable %s no declarada", nLineas, $6); + errores++; + } + if ($3 != tipo && tipo != 0){ + printf("\n ERROR lin %d: Tipos incompatibles en scanf", nLineas); + errores++; + } + } + ; +cond: bloqueIF + | bloqueIF else + ; bloqueIF: IF '(' expr ')' '{' instrucciones '}' - ; + ; else: ELSE '{' instrucciones '}' - | ELSE cond - ; -repe: for {printf("\nRepeticion: bloque FOR");} - | while {printf("\nRepeticion: bloque WHILE");} - ; + | ELSE cond + ; +repe: for + | while + ; for: FOR '(' inicia ';' expFOR ';' increm ')' '{' instrucciones '}' - ; + ; inicia: /*vacia*/ - | asig - ; + | asig + ; expFOR: /*vacia*/ - | expr - ; + | expr + ; increm: /*vacia*/ - | ID OPERADOR2 - ; + | ID OPERADOR2 { int pos = buscarSimbolo(tablaSimbolos, $1, dim); + int tipo = tablaSimbolos[pos].tipo; + if (tipo == 0){ + printf("\n ERROR lin %d: Variable %s no declarada", nLineas, $1); + errores++; + } + else if (tablaSimbolos[pos].inicializado == 0){ + printf("\n ERROR lin %d: Variable %s no inicializada", nLineas, $1); + errores++; + } + } + ; while: WHILE '(' expr ')' '{' instrucciones '}' - ; + ; %% int main() { - yyin=fopen("practica2.c","r"); - yyparse(); + yyin=fopen("practica2conErrores.c","r"); + yyparse(); } int buscarSimbolo(struct simbolo tablaSimbolos[],char nombre[50],int dim){ - for (int i=0;i void yyerror(const char* msg) { - fprintf(stderr, "%s\n", msg); + fprintf(stderr, "%s\n", msg); } int yylex(void); FILE *yyin; @@ -128,16 +128,18 @@ int num_sim = 0; extern int nLineas; struct simbolo{ - char nombre[30]; - int tipo; - int cte; - int inicializado; + char nombre[30]; + int tipo; + int cte; + int inicializado; }; struct simbolo tablaSimbolos[50]; int dim = 0; int buscarSimbolo(struct simbolo tablaSimbolos[],char nombre[30],int dim); +int errores = 0; + /* Enabling traces. */ @@ -160,13 +162,13 @@ int buscarSimbolo(struct simbolo tablaSimbolos[],char nombre[30],int dim); #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE -#line 30 "practica2.y" +#line 32 "practica2.y" { - int tipo; // 1.int 2.float 3.char - char nombreId[30]; + int tipo; // 1.int 2.float 3.char + char nombreId[30]; } /* Line 193 of yacc.c. */ -#line 170 "y.tab.c" +#line 172 "y.tab.c" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 @@ -179,7 +181,7 @@ typedef union YYSTYPE /* Line 216 of yacc.c. */ -#line 183 "y.tab.c" +#line 185 "y.tab.c" #ifdef short # undef short @@ -394,16 +396,16 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 6 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 8 +#define YYLAST 100 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 29 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 5 +#define YYNNTS 28 /* YYNRULES -- Number of rules. */ -#define YYNRULES 8 +#define YYNRULES 51 /* YYNRULES -- Number of states. */ -#define YYNSTATES 13 +#define YYNSTATES 103 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 @@ -419,15 +421,15 @@ static const yytype_uint8 yytranslate[] = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 21, 2, 2, 2, 2, - 27, 28, 2, 2, 23, 2, 2, 2, 2, 2, + 26, 27, 2, 2, 28, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 22, - 2, 24, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 23, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 25, 2, 26, 2, 2, 2, 2, + 2, 2, 2, 24, 2, 25, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -450,20 +452,44 @@ static const yytype_uint8 yytranslate[] = YYRHS. */ static const yytype_uint8 yyprhs[] = { - 0, 0, 3, 5, 6, 9, 14, 16, 18 + 0, 0, 3, 6, 7, 10, 15, 17, 19, 21, + 22, 25, 29, 35, 37, 39, 41, 43, 45, 49, + 51, 53, 58, 61, 62, 65, 68, 71, 74, 76, + 78, 82, 85, 90, 91, 93, 97, 105, 107, 110, + 118, 123, 126, 128, 130, 142, 143, 145, 146, 148, + 149, 152 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int8 yyrhs[] = { - 30, 0, -1, 31, -1, -1, 32, 31, -1, 21, - 4, 3, 33, -1, 5, -1, 6, -1, 7, -1 + 30, 0, -1, 31, 40, -1, -1, 32, 31, -1, + 21, 4, 3, 33, -1, 5, -1, 6, -1, 7, + -1, -1, 35, 34, -1, 36, 37, 22, -1, 36, + 37, 23, 38, 22, -1, 8, -1, 9, -1, 10, + -1, 3, -1, 39, -1, 39, 12, 38, -1, 3, + -1, 33, -1, 11, 24, 41, 25, -1, 34, 42, + -1, -1, 43, 42, -1, 44, 22, -1, 45, 22, + -1, 47, 22, -1, 48, -1, 51, -1, 3, 23, + 38, -1, 3, 13, -1, 14, 26, 46, 27, -1, + -1, 38, -1, 38, 28, 46, -1, 18, 26, 20, + 28, 12, 3, 27, -1, 49, -1, 49, 50, -1, + 15, 26, 38, 27, 24, 42, 25, -1, 17, 24, + 42, 25, -1, 17, 48, -1, 52, -1, 56, -1, + 16, 26, 53, 22, 54, 22, 55, 27, 24, 42, + 25, -1, -1, 44, -1, -1, 38, -1, -1, 3, + 13, -1, 19, 26, 38, 27, 24, 42, 25, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint8 yyrline[] = { - 0, 56, 56, 58, 59, 61, 77, 78, 79 + 0, 59, 59, 67, 68, 70, 86, 87, 88, 90, + 91, 93, 108, 129, 130, 131, 133, 135, 136, 144, + 158, 160, 162, 164, 165, 167, 168, 169, 170, 171, + 173, 189, 191, 193, 194, 195, 197, 209, 210, 212, + 214, 215, 217, 218, 220, 222, 223, 225, 226, 228, + 229, 241 }; #endif @@ -475,8 +501,12 @@ static const char *const yytname[] = "$end", "error", "$undefined", "ID", "DEFINE", "NUM_ENTERO", "NUM_REAL", "CADENA", "INT", "FLOAT", "CHAR", "MAIN", "OPERADOR", "OPERADOR2", "PRINTF", "IF", "FOR", "ELSE", "SCANF", "WHILE", "CDC", "'#'", "';'", - "','", "'='", "'{'", "'}'", "'('", "')'", "$accept", "programa", - "declaracionesCtes", "declaracionCte", "valor_cte", 0 + "'='", "'{'", "'}'", "'('", "')'", "','", "$accept", "programa", + "declaracionesCtes", "declaracionCte", "valor_cte", "declaracionVbles", + "declaracionVble", "tipo", "id", "expr", "val", "main", "cuerpo", + "instrucciones", "instruccion", "asig", "visu", "listExpr", "lect", + "cond", "bloqueIF", "else", "repe", "for", "inicia", "expFOR", "increm", + "while", 0 }; #endif @@ -487,20 +517,30 @@ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 35, 59, 44, 61, 123, 125, 40, 41 + 275, 35, 59, 61, 123, 125, 40, 41, 44 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { - 0, 29, 30, 31, 31, 32, 33, 33, 33 + 0, 29, 30, 31, 31, 32, 33, 33, 33, 34, + 34, 35, 35, 36, 36, 36, 37, 38, 38, 39, + 39, 40, 41, 42, 42, 43, 43, 43, 43, 43, + 44, 44, 45, 46, 46, 46, 47, 48, 48, 49, + 50, 50, 51, 51, 52, 53, 53, 54, 54, 55, + 55, 56 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { - 0, 2, 1, 0, 2, 4, 1, 1, 1 + 0, 2, 2, 0, 2, 4, 1, 1, 1, 0, + 2, 3, 5, 1, 1, 1, 1, 1, 3, 1, + 1, 4, 2, 0, 2, 2, 2, 2, 1, 1, + 3, 2, 4, 0, 1, 3, 7, 1, 2, 7, + 4, 2, 1, 1, 11, 0, 1, 0, 1, 0, + 2, 7 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state @@ -508,29 +548,51 @@ static const yytype_uint8 yyr2[] = means the default is an error. */ static const yytype_uint8 yydefact[] = { - 3, 0, 0, 2, 3, 0, 1, 4, 0, 6, - 7, 8, 5 + 3, 0, 0, 0, 3, 0, 1, 0, 2, 4, + 0, 9, 6, 7, 8, 5, 13, 14, 15, 23, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 22, + 23, 0, 0, 0, 28, 37, 29, 42, 43, 10, + 16, 0, 21, 31, 0, 33, 0, 45, 0, 0, + 24, 25, 26, 27, 0, 38, 11, 0, 19, 20, + 30, 17, 34, 0, 0, 46, 0, 0, 0, 23, + 41, 0, 0, 33, 32, 0, 47, 0, 0, 0, + 12, 18, 35, 23, 48, 0, 0, 23, 40, 0, + 49, 0, 0, 39, 0, 0, 36, 51, 50, 0, + 23, 0, 44 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = { - -1, 2, 3, 4, 12 + -1, 2, 3, 4, 59, 19, 20, 21, 41, 62, + 61, 8, 22, 29, 30, 31, 32, 63, 33, 34, + 35, 55, 36, 37, 66, 85, 95, 38 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -19 +#define YYPACT_NINF -44 static const yytype_int8 yypact[] = { - -18, 0, 5, -19, -18, 3, -19, -19, -5, -19, - -19, -19, -19 + -16, 6, 11, 2, -16, 19, -44, 10, -44, -44, + 21, 22, -44, -44, -44, -44, -44, -44, -44, 1, + 22, 32, 12, -11, 14, 15, 16, 17, 20, -44, + 1, 23, 25, 26, -44, 27, -44, -44, -44, -44, + -44, -15, -44, -44, 18, 18, 18, 33, 29, 18, + -44, -44, -44, -44, -6, -44, -44, 18, -44, -44, + -44, 38, 24, 28, 31, -44, 34, 35, 37, 1, + -44, 39, 18, 18, -44, 30, 18, 47, 36, 13, + -44, -44, -44, 1, -44, 40, 48, 1, -44, 41, + 62, 42, 43, -44, 54, 44, -44, -44, -44, 49, + 1, 50, -44 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { - -19, -19, 4, -19, -19 + -44, -44, 68, -44, 64, 56, -44, -44, -44, -43, + -44, -44, -44, -30, -44, 45, -44, 4, -44, 46, + -44, -44, -44, -44, -44, -44, -44, -44 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If @@ -540,20 +602,49 @@ static const yytype_int8 yypgoto[] = #define YYTABLE_NINF -1 static const yytype_uint8 yytable[] = { - 9, 10, 11, 1, 5, 6, 8, 0, 7 + 50, 60, 43, 64, 23, 1, 68, 56, 57, 25, + 5, 6, 44, 7, 71, 24, 25, 26, 69, 27, + 28, 58, 10, 12, 13, 14, 12, 13, 14, 81, + 16, 17, 18, 84, 11, 40, 23, 42, 88, 79, + 45, 46, 47, 48, 54, 51, 49, 52, 53, 67, + 72, 91, 73, 89, 83, 74, 76, 92, 75, 86, + 87, 80, 90, 77, 78, 94, 93, 98, 97, 96, + 101, 99, 9, 100, 15, 102, 39, 82, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, + 70 }; static const yytype_int8 yycheck[] = { - 5, 6, 7, 21, 4, 0, 3, -1, 4 + 30, 44, 13, 46, 3, 21, 49, 22, 23, 15, + 4, 0, 23, 11, 57, 14, 15, 16, 24, 18, + 19, 3, 3, 5, 6, 7, 5, 6, 7, 72, + 8, 9, 10, 76, 24, 3, 3, 25, 25, 69, + 26, 26, 26, 26, 17, 22, 26, 22, 22, 20, + 12, 3, 28, 83, 24, 27, 22, 87, 27, 12, + 24, 22, 22, 28, 27, 3, 25, 13, 25, 27, + 100, 27, 4, 24, 10, 25, 20, 73, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 47, -1, -1, -1, -1, -1, -1, -1, + 54 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { - 0, 21, 30, 31, 32, 4, 0, 31, 3, 5, - 6, 7, 33 + 0, 21, 30, 31, 32, 4, 0, 11, 40, 31, + 3, 24, 5, 6, 7, 33, 8, 9, 10, 34, + 35, 36, 41, 3, 14, 15, 16, 18, 19, 42, + 43, 44, 45, 47, 48, 49, 51, 52, 56, 34, + 3, 37, 25, 13, 23, 26, 26, 26, 26, 26, + 42, 22, 22, 22, 17, 50, 22, 23, 3, 33, + 38, 39, 38, 46, 38, 44, 53, 20, 38, 24, + 48, 38, 12, 28, 27, 27, 22, 28, 27, 42, + 22, 38, 46, 24, 38, 54, 12, 24, 25, 42, + 22, 3, 42, 25, 3, 55, 27, 25, 13, 27, + 24, 42, 25 }; #define yyerrok (yyerrstatus = 0) @@ -1368,47 +1459,204 @@ yyparse () switch (yyn) { case 2: -#line 56 "practica2.y" - {printf("\n Todo correcto numero de lineas %d\n",nLineas);} +#line 59 "practica2.y" + {if (errores > 0) { + printf("\n Programa compilado con %d errores en %d lineas\n",errores,nLineas); + }else{ + printf("\n Programa compilado sin errores y con %d lineas\n", nLineas); + } + } break; case 5: -#line 61 "practica2.y" - { printf("\nDeclaracion cte"); - int pos = buscarSimbolo(tablaSimbolos, (yyvsp[(3) - (4)].nombreId), dim); - if (pos != dim){ - printf("\n ERROR lin: %d: identificador redeclarado\n",nLineas); - } - else { - //lo añado - printf("\n Añado %s",(yyvsp[(3) - (4)].nombreId)); - tablaSimbolos[dim].tipo = (yyvsp[(4) - (4)].tipo); - tablaSimbolos[dim].cte = 1; - tablaSimbolos[dim].inicializado = 1; - strcpy(tablaSimbolos[dim].nombre,(yyvsp[(3) - (4)].nombreId)); - dim++; - } - } +#line 70 "practica2.y" + { + int pos = buscarSimbolo(tablaSimbolos, (yyvsp[(3) - (4)].nombreId), dim); + if (pos != dim){ + printf("\n ERROR lin %d: Constante redeclarado",nLineas); + errores++; + } + else { + //lo añado + tablaSimbolos[dim].tipo = (yyvsp[(4) - (4)].tipo); + tablaSimbolos[dim].cte = 1; + tablaSimbolos[dim].inicializado = 1; + strcpy(tablaSimbolos[dim].nombre,(yyvsp[(3) - (4)].nombreId)); + dim++; + } + } break; case 6: -#line 77 "practica2.y" +#line 86 "practica2.y" { (yyval.tipo) = 1; } break; case 7: -#line 78 "practica2.y" +#line 87 "practica2.y" { (yyval.tipo) = 2; } break; case 8: -#line 79 "practica2.y" +#line 88 "practica2.y" { (yyval.tipo) = 3; } break; + case 11: +#line 93 "practica2.y" + { + int pos = buscarSimbolo(tablaSimbolos, (yyvsp[(2) - (3)].nombreId), dim); + if (pos != dim){ + printf("\n ERROR lin %d: Identificador redeclarado",nLineas); + errores++; + } + else { + //lo añado + tablaSimbolos[dim].tipo = (yyvsp[(1) - (3)].tipo); + tablaSimbolos[dim].cte = 0; + tablaSimbolos[dim].inicializado = 0; + strcpy(tablaSimbolos[dim].nombre,(yyvsp[(2) - (3)].nombreId)); + dim++; + } + } + break; + + case 12: +#line 108 "practica2.y" + { + int pos = buscarSimbolo(tablaSimbolos, (yyvsp[(2) - (5)].nombreId), dim); + if (pos != dim){ + printf("\n ERROR lin %d: Identificador redeclarado",nLineas); + errores++; + } + else { + if ((yyvsp[(1) - (5)].tipo) != (yyvsp[(4) - (5)].tipo)){ + printf("\n ERROR lin %d: No coinciden los tipos", nLineas); + errores++; + }else if ((yyvsp[(4) - (5)].tipo) != 4){ //el tipo 4 es indicador de que no existe la variable + //lo añado + tablaSimbolos[dim].tipo = (yyvsp[(1) - (5)].tipo); + tablaSimbolos[dim].cte = 0; + tablaSimbolos[dim].inicializado = 1; + strcpy(tablaSimbolos[dim].nombre,(yyvsp[(2) - (5)].nombreId)); + dim++; + } + } + } + break; + + case 13: +#line 129 "practica2.y" + { (yyval.tipo) = 1; } + break; + + case 14: +#line 130 "practica2.y" + { (yyval.tipo) = 2; } + break; + + case 15: +#line 131 "practica2.y" + { (yyval.tipo) = 3; } + break; + + case 16: +#line 133 "practica2.y" + { strcpy((yyval.nombreId), (yyvsp[(1) - (1)].nombreId)); } + break; + + case 17: +#line 135 "practica2.y" + { (yyval.tipo) = (yyvsp[(1) - (1)].tipo); } + break; + + case 18: +#line 136 "practica2.y" + { if ((yyvsp[(1) - (3)].tipo) < (yyvsp[(3) - (3)].tipo)) + { + (yyval.tipo) = (yyvsp[(3) - (3)].tipo); + }else{ + (yyval.tipo) = (yyvsp[(1) - (3)].tipo); + } + } + break; + + case 19: +#line 144 "practica2.y" + { int pos = buscarSimbolo(tablaSimbolos, (yyvsp[(1) - (1)].nombreId), dim); + int tipo = tablaSimbolos[pos].tipo; + if (tipo == 0){ + printf("\n ERROR lin %d: Variable %s no declarada", nLineas, (yyvsp[(1) - (1)].nombreId)); + errores++; + tipo = 4; + } + if (tablaSimbolos[pos].inicializado == 0){ + printf("\n ERROR lin %d: Variable %s no inicializada", nLineas, (yyvsp[(1) - (1)].nombreId)); + errores++; + tipo = 4; + } + (yyval.tipo) = tipo; + } + break; + + case 20: +#line 158 "practica2.y" + { (yyval.tipo) = (yyvsp[(1) - (1)].tipo); } + break; + + case 30: +#line 173 "practica2.y" + { int pos = buscarSimbolo(tablaSimbolos, (yyvsp[(1) - (3)].nombreId), dim); + int tipo = tablaSimbolos[pos].tipo; + if (tipo == 0){ + printf("\n ERROR lin %d: Variable %s no declarada", nLineas, (yyvsp[(1) - (3)].nombreId)); + errores++; + } + if (tablaSimbolos[pos].cte == 1){ + printf("\n ERROR lin %d: No se puede modificar el valor de una constante", nLineas); + errores++; + } + if ((tipo == 1 && (yyvsp[(3) - (3)].tipo) == 2) || (tipo == 3 && (yyvsp[(3) - (3)].tipo) == 2)){ //Problemas con entero = float y char = float + printf("\n ERROR lin %d: No coinciden los tipos", nLineas); + errores++; + } + + } + break; + + case 36: +#line 197 "practica2.y" + { int pos = buscarSimbolo(tablaSimbolos, (yyvsp[(6) - (7)].nombreId), dim); + int tipo = tablaSimbolos[pos].tipo; + if (tipo == 0){ + printf("\n ERROR lin %d: Variable %s no declarada", nLineas, (yyvsp[(6) - (7)].nombreId)); + errores++; + } + if ((yyvsp[(3) - (7)].tipo) != tipo && tipo != 0){ + printf("\n ERROR lin %d: Tipos incompatibles en scanf", nLineas); + errores++; + } + } + break; + + case 50: +#line 229 "practica2.y" + { int pos = buscarSimbolo(tablaSimbolos, (yyvsp[(1) - (2)].nombreId), dim); + int tipo = tablaSimbolos[pos].tipo; + if (tipo == 0){ + printf("\n ERROR lin %d: Variable %s no declarada", nLineas, (yyvsp[(1) - (2)].nombreId)); + errores++; + } + else if (tablaSimbolos[pos].inicializado == 0){ + printf("\n ERROR lin %d: Variable %s no inicializada", nLineas, (yyvsp[(1) - (2)].nombreId)); + errores++; + } + } + break; + /* Line 1267 of yacc.c. */ -#line 1412 "y.tab.c" +#line 1660 "y.tab.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -1622,23 +1870,23 @@ yyparse () } -#line 160 "practica2.y" +#line 245 "practica2.y" int main() { - yyin=fopen("practica2.c","r"); - yyparse(); + yyin=fopen("practica2conErrores.c","r"); + yyparse(); } int buscarSimbolo(struct simbolo tablaSimbolos[],char nombre[50],int dim){ - for (int i=0;i