Você está na página 1de 8

Análisis Lexicográfico Estudiante: Kelly Villacres Curso: 7-5

Materia: Compiladores
1) Se compila el archivo yacc

2) Se crean automáticamente 2 librerías


Análisis Lexicográfico Estudiante: Kelly Villacres Curso: 7-5
Materia: Compiladores
3) Se compila el archivo lex

4) Se construye el archivo lex


Análisis Lexicográfico Estudiante: Kelly Villacres Curso: 7-5
Materia: Compiladores
5) Se abre el cmd, se escribe dir para ver los directorios de lex y encontramos el
archivo ejecutable

6) Luego se escribe línea por línea el código para que valide correctamente y al final
se verá que el proceso se dio con éxito.
Análisis Lexicográfico Estudiante: Kelly Villacres Curso: 7-5
Materia: Compiladores
7) Si no se quiere escribir línea por línea, pegar el código en un bloc de notas y
guardarlo

8) Y por último en el cmd ejecutamos este archivo junto con el analizador léxico para
que detecte si hay errores

Y como se muestra en la imagen se ha ejecutado el programa sin errores.


Análisis Lexicográfico Estudiante: Kelly Villacres Curso: 7-5
Materia: Compiladores

 CODIGO
9) Archivo Yacc
%{
#include<stdio.h>
%}
%token P_RESERVADA
%token OPERADOR
%token A_LLAVE
%token C_LLAVE
%token A_PARENTESIS
%token C_PARENTESIS
%token A_CORCHETE
%token C_CORCHETE
%token FIN_SENTENCIA
%token TIPO_DATO
%token SIMBOLOS
%token P_FOR
%token P_DEFINE
%token P_RETURN
%token LETRA
%token P_INCREMENTO
%token P_DECREMENTO
Análisis Lexicográfico Estudiante: Kelly Villacres Curso: 7-5
Materia: Compiladores

%token NUMERO
%token S_COMA
%token S_MENOR
%token S_MAYOR
%token S_IGUAL
%token S_NUMERAL
%token LIBRERIAS
%start INICIO
%%
INICIO: INCLUDES FUNCION_PRINCIPAL;
INCLUDES: INCLUDE | INCLUDE INCLUDES
INCLUDE: S_NUMERAL P_RESERVADA S_MENOR LIBRERIAS S_MAYOR|S_NUMERAL P_DEFINE LETRA NUMERO;
FUNCION_PRINCIPAL: TIPO_DATO P_RESERVADA A_PARENTESIS C_PARENTESIS A_LLAVE EXPRESIONES C_LLAVE;
EXPRESIONES: DECLARACIONES_VARIABLES BUCLE_FOR P_RETURN NUMERO FIN_SENTENCIA;
DECLARACIONES_VARIABLES: VARIABLE | VARIABLE DECLARACIONES_VARIABLES;
VARIABLE: TIPO_DATO LETRA A_CORCHETE NUMERO C_CORCHETE S_COMA LETRA A_CORCHETE LETRA C_CORCHETE
FIN_SENTENCIA
| TIPO_DATO LETRA S_COMA LETRA S_COMA LETRA S_IGUAL NUMERO FIN_SENTENCIA;

BUCLE_FOR: P_FOR A_PARENTESIS LETRA S_IGUAL NUMERO FIN_SENTENCIA LETRA S_MENOR NUMERO FIN_SENTENCIA
LETRA P_INCREMENTO C_PARENTESIS A_LLAVE
LETRA S_IGUAL LETRA OPERADOR NUMERO FIN_SENTENCIA
Análisis Lexicográfico Estudiante: Kelly Villacres Curso: 7-5
Materia: Compiladores

LETRA A_CORCHETE LETRA C_CORCHETE S_IGUAL LETRA FIN_SENTENCIA


LETRA S_IGUAL LETRA OPERADOR LETRA FIN_SENTENCIA
C_LLAVE;
%%
main(){
if(yyparse()==0)
printf("\nAnalisis concluido sin errores\n");
}
yyerror(char* mensaje){
printf("\nAnalisis suspendido");
printf("\nMensaje: %s",mensaje);
}
10) Archivo Lex
%option noyywrap
%{
#include "y.tab.h"
#include<stdio.h>
%}
NUMERO [0-9]+
LETRA [a-zA-Z]+
%%
"include"|"Include"|"INCLUDE"|"main"|"MAIN"|"Main"|"VOID"|"void"|"Void"|"printf"|"scanf" {return P_RESERVADA;}
Análisis Lexicográfico Estudiante: Kelly Villacres Curso: 7-5
Materia: Compiladores

"define"|"DEFINE" {return P_DEFINE;}


"return"|"Return"|"RETURN" {return P_RETURN;}
"+"|"-"|"*"|"/" {return OPERADOR;}
"++" {return P_INCREMENTO;}
"--" {return P_DECREMENTO;}
"{" {return A_LLAVE;}
"}" {return C_LLAVE;}
"(" {return A_PARENTESIS;}
")" {return C_PARENTESIS;}
"]" {return C_CORCHETE;}
"[" {return A_CORCHETE;}
";" {return FIN_SENTENCIA;}
"int"|"double" {return TIPO_DATO;}
"#" {return S_NUMERAL;}
"<" {return S_MENOR;}
">" {return S_MAYOR;}
"," {return S_COMA;}
"=" {return S_IGUAL;}
"for" {return P_FOR;}
"stdio.h"|"STDIO.H"|"STRING.H"|"string.H" {return LIBRERIAS;}
{NUMERO} {return NUMERO;}
{LETRA} {return LETRA;}