El compilador es un programa que se encarga de leer un archivo de determinado lenguaje de programación y "traducirlo" al lenguaje máquina que es el conjunto de instrucciones (en el caso de l…Descripción completa
Descripción: Analizador lexico hecho en java
lenguajes y automatas 2Descripción completa
Descripción completa
Descripción completa
Descripción: Un analizador léxico y/o analizador lexicográfico (en inglés scanner) es la primera fase de un compilador consistente en un programa que recibe como entrada el código fuente de otro programa (secue...
Descripción completa
autómatas 2
creacion de un analizador lexico en javaDescripción completa
LÉXICO DE UNMSM
lexico
Descripción completa
Descripción completa
Descripción completa
ApuntesDescripción completa
lexicoDescripción completa
ANALIZADOR LEXICO Y SINTACTICO JUNTOS
Codigo fuente del lexico.L %{ #include #include #include "parser.h" %} %option noyywrap %option yylineno letra [a-zA-Z] digito [0-9] binario [0-1] ignora " "|\t|\n operarit *|+|-|/ operlog &|$ comparador <|>|<=|>=|==|!= %% {ignora}+ {;} "Entero" {printf("Palabra {printf("Pala bra reservada para tipo de dato entero\n");return PRENTERO;} "Real" {printf("Palabra {printf("Pala bra reservada para tipo de dato real\n");return PRREAL;} "Booleano" {printf("Palabra {printf("Pala bra reservada para tipo de dato booleano\n");return PRBOOLEANO;} "Caracter" {printf("Palabra {printf("Pala bra reservada para tipo de dato caracter\n");return PRCARACTER;} "Si" {printf("Palabra {printf("Palabra reservada para condicional\n");return condicional\n");return PRSI;} "Sino" {printf("Palabra {printf("Pala bra reservada para otro condicional\n");return condicional\n");return PRSINO;} "SinoSi" {printf("Palabra {printf("Pala bra reservada para definir condicionales secundarias\n");return PRSINOSI;} "Entonces" {printf("Palabra {printf("Pala bra reservada para definir accion a realizar\n");return PRENTONCES;} "FinSi" {printf("Palabra {printf("Pala bra reservada finalizar condicional\n");return condicional\n");return PRFINSI;} "Para" {printf("Palabra {printf("Palabra reservada para bucle de tipo Para\n");return PRPARA;} "FinPara" {printf("Palabra {printf("Pala bra reservada para fin de bucle de tipo Para\n");return PRFINPARA;} "Mientras" {printf("Palabra {printf("Pala bra reservada para bucle de tipo Mientras\n");return PRMIENTRAS;} "Hacer" {printf("Palabra {printf("Pala bra reservada para indicar que se empieza algo\n");return algo\n");return PRHACER;} "FinMientras" "FinMientra s" {printf("Palabra {printf("Pala bra reservada fin de bucle de tipo Mientras\n");return PRFINMIENTRAS;} "FinHacerMientras" "FinHacerMi entras" {printf("Palabra {printf("Pala bra reservada para indicar fin de bucle Hacer-Mientras\n");return Hacer-Mientras\n");return PRFINHACERMIENTRAS;} "Funcion" {printf("Palabra {printf("Pala bra reservada para declaracion de funciones\n");return PRFUNCION;} "Estructura" {printf("Palabra {printf("Palabra reservada para declaracion de estructuras\n");return estructuras\n");return PRESTRUCTURA;} "FinFuncion" "FinFuncion " {printf("Palabra {printf("Pala bra reservada para finalizar funcion\n");return PRFINFUNCION;} "Retorna" {printf("Palabra {printf("Pala bra reservada para retorno de funcion\n");return PRRETORNA;}
Codigo fuente de sintactico.y %{ int yystopparser=0; %}
%token PRENTERO PRREAL PRBOOLEANO PRCARACTER PRSI PRSINO PRSINOSI PRENTONCES PRFINSI PRPARA PRFINPARA PRMIENTRAS PRHACER PRFINMIENTRAS PRFINHACERMIENTRAS PRFUNCION PRFINFUNCION PRRETORNA PRSINVALOR PRESTRUCTURA MAS MENOS POR ENTRE OLOG YLOG PRDEFINIR PRCONSTANTE IDENT ENTERO REAL BOOLEANO CARACTER COMPARADOR ASIG PCOMA DIF COMA IGUAL PTO MAIGU MEIGU PARIZ PARDE MAYOR MENOR LLIZ LLDE PRSALIDA PRENTRADA %start inicio %% inicio
: funcion | constante | estructura;
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;
| PRCARACTER k
|
comparacion : IDENT COMPARADOR b; b : IDENT | REAL | ENTERO | BOOLEANO;
declaracion : PRENTERO c c : IDENT PCOMA ;
| PRREAL c
| PRBOOLEANO c | PRCARACTER c
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
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 ;
Ahora ya capturados los codigos se compila el lexico.l y el sintactico.y de la siguiente manera:
Al compilar se generan 3 archivos los cueles son lex.y y, y.tab.c , y.tab.h
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.
Por ultimo hacer una prueba con el si guiente codigo.
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.