Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Analizador Lexico y Sintactico Juntos
Analizador Lexico y Sintactico Juntos
"SinValor" {printf("Palabra reservada para funcion sin valor de retorno\n");return PRSINVALOR;} "Definir" {printf("Palabra reservada para definir funciones\n");return PRDEFINIR;} "Constante" {printf("Palabra reservada para definir constantes\n");return PRCONSTANTE;} "Entrada" {printf("Palabra reservada para definir entradas\n");return PRENTRADA;} "Salida" {printf("Palabra reservada para definir salidas\n");return PRSALIDA;} {letra}({letra}|{digito})* {printf("Identificador\n");return IDENT;} {letra}+ {printf("Caracter\n");return CARACTER;} {binario}+ {printf("Binario\n");return BOOLEANO;} {digito}+ {printf("Entero\n");return ENTERO;} {digito}+"."{digito}+ {printf("Real\n");return REAL;} {comparador} {printf("Comparador\n");return COMPARADOR;} ":=" {printf("Asignador\n");return ASIG;} ";" {printf("Fin sentencia\n");return PCOMA;} "!=" {printf("Diferente\n");return DIF;} "," {printf("Coma\n");return COMA;} "==" {printf("Igual\n");return IGUAL;} "." {printf("Punto\n");return PTO;} ">=" {printf("Signo mayor-igual\n");return MAIGU;} "<=" {printf("Signo menor-igual\n");return MEIGU;} "(" {printf("(\n");return PARIZ;} ")" {printf(")\n");return PARDE;} ">" {printf(">\n");return MAYOR;} "<" {printf("<\n");return MENOR;} "{" {printf("{\n");return LLIZ;} "}" {printf("}\n");return LLDE;} "+" {printf("+\n");return MAS;} "-" {printf("-\n");return MENOS;} "*" {printf("*\n");return POR;} "/" {printf("/\n");return ENTRE;} "&" {printf("&\n");return YLOG;} "$" {printf("Operador Logico\n");return OLOG;} . {printf("ERROR LEXICO EN LINEA %d \n",yylineno);} %% int main(int argc,char *argv[]) { if ((yyin = fopen(argv[1], "rt")) == NULL) { printf("\nNo se puede abrir el archivo: %s\n", argv[1]); } else { //yylex(); yyparse(); } fclose(yyin); return 0; }
estructura : PRESTRUCTURA IDENT LLIZ n; n : declaracion n | declaracion nn ; nn : LLDE IDENT PCOMA o ; o : estructura | constante | funcion; constante : PRDEFINIR PRCONSTANTE e ; e : PRENTERO IDENT f | PRREAL IDENT f | PRBOOLEANO IDENT f; f : ASIG g; g : ENTERO PCOMA y | REAL PCOMA y | BOOLEANO PCOMA y; y : constante | estructura | funcion; funcion : PRFUNCION j; j : PRENTERO k | PRREAL k | PRBOOLEANO k PRSINVALOR k; k : IDENT PARIZ l; l : kl; kl : declaracion l | ll; ll : PARDE sentencia m; m : PRRETORNA IDENT p | p; p : PRFINFUNCION funcion | PRFINFUNCION; comparacion : IDENT COMPARADOR b; b : IDENT | REAL | ENTERO | BOOLEANO; declaracion : PRENTERO c c : IDENT PCOMA ; | PRREAL c | PRBOOLEANO c | PRCARACTER c | PRCARACTER k |
asignacion : IDENT ASIG a a : IDENT PCOMA | ENTERO PCOMA | REAL PCOMA | BOOLEANO PCOMA | oparitmetica PCOMA ; mientras : PRMIENTRAS PARIZ x x : comparacion y | oplogica y y : PARDE sentencia PRFINMIENTRAS ;
hacermientras : PRHACER sentencia PRFINHACERMIENTRAS PRMIENTRAS PARIZ cc cc : comparacion PARDE | oplogica PARDE ; para : PRPARA PARIZ asignacion comparacion PCOMA asignacion PARIZ sentencia PRFINPARA ; si : PRSI PARIZ sh sh : comparacion shh | oplogica shh shh : PARDE PRENTONCES sentencia h h : PRFINSI | PRSINOSI PARIZ comparacion PARDE PRENTONCES sentencia i i : h | z z : PRSINO PRENTONCES sentencia PRFINSI ; sentencia : declaracion sentencia | declaracion | asignacion sentencia | asignacion | mientras sentencia | mientras | hacermientras sentencia | hacermientras | para sentencia | para si sentencia | si | entrada sentencia | entrada | salida sentencia | salida ; salida ; entrada ; : PRSALIDA ASIG LLIZ LLDE PCOMA : PRENTRADA IDENT PCOMA | POR PARIZ q | suma | producto
oparitmetica : MAS PARIZ q q : oparitmetica PARDE r suma : MAS r t producto : POR r t t : r u u : t | r : IDENT | REAL | ENTERO ; oplogica : OLOG PARIZ qq qq : oplogica PARDE rr oo : OLOG rr tt yy : YLOG rr tt tt : rr uu uu : tt | rr : comparacion ;
| YLOG PARIZ qq
| yy
| oo
Codigo parser.h
#ifndef YYSTYPE #define YYSTYPE int #endif #define PRENTERO 257 #define PRREAL 258 #define PRBOOLEANO 259 #define PRCARACTER 260 #define PRSI 261 #define PRSINO 262 #define PRSINOSI 263 #define PRENTONCES 264 #define PRFINSI 265 #define PRPARA 266 #define PRFINPARA 267 #define PRMIENTRAS 268 #define PRHACER 269 #define PRFINMIENTRAS 270 #define PRFINHACERMIENTRAS 271 #define PRFUNCION 272 #define PRFINFUNCION 273 #define PRRETORNA 274 #define PRSINVALOR 275 #define PRESTRUCTURA 276 #define MAS 277 #define MENOS 278 #define POR 279 #define ENTRE 280 #define OLOG 281 #define YLOG 282 #define PRDEFINIR 283 #define PRCONSTANTE 284 #define IDENT 285 #define ENTERO 286 #define REAL 287 #define BOOLEANO 288 #define CARACTER 289 #define COMPARADOR 290 #define ASIG 291 #define PCOMA 292 #define DIF 293 #define COMA 294 #define IGUAL 295 #define PTO 296 #define MAIGU 297 #define MEIGU 298 #define PARIZ 299 #define PARDE 300 #define MAYOR 301 #define MENOR 302 #define LLIZ 303 #define LLDE 304 #define PRSALIDA 305 #define PRENTRADA 306 extern YYSTYPE yylval;
codigo error.c
void yyerror(char * msg) { printf ("%s\n", msg); }
Ahora ya casi esta listo solo nos queda utilizar dev-c++ para generar el ejecutable. Solo queda agregar todos los archivos al dev en un nuevo proyecto y posteriormente compilarlo.
Codigo00.shark
Estructura est { Entero num; Entero nfgj; Booleano ggnum; } est1; Definir Constante Entero numero := 145 ; Funcion Entero miFuncion( Caracter Cadena; ) Car:=Carro; Entero Num; Mientras ( c<d ) Car:=Carro; Entero bandera; Booleano boole; boole:=1; Mientras ( a>=4 ) Car:=Carro; Entero bandera; Booleano boole; boole:=1; Para ( a:=14; a<=25; a:= + 5 4 ;(
Si ( a==4 ) Entonces Bool:=1; FinSi FinPara FinMientras FinMientras Si ( a==4 ) Entonces Bool:=1; FinSi Retorna Numero FinFuncion
Para hacer la prueba solo nos queda ejecutarlo por medio del cmd entrar a la carpeta en donde se encuentra el exa.exe y posteriormente teclear exa.exe codigo00.shark.