SlideShare una empresa de Scribd logo
CIS-IXB-001
UNIVERSIDAD
NACIONAL
DE LOJA
´Area de la Energ´ıa las Industrias y los Recursos Naturales No Renovables
Carrera de Ingenier´ıa en Sistemas
Compiladores
Cambia de Color a una Palabra
Ingresada
Tarea- Extra Clase
Noveno B
Autor:
• Ra´ul Alexander G´omez Armijos
• Fecha: 13/02/2015
Docente: Ing. Henry-Paz,
Loja-Ecuador
2015
1
´Indice
A. Problema del compilador a Desarrollar: 4
B. Aut´omata 4
C. Desarrollo del Compilador 4
1 . Crear el Analizador L´exico . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1 .1. Opciones y declaraciones . . . . . . . . . . . . . . . . . . . . . . . . 5
1 .2. C´odigo de usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1 .3. Reglas lexicogr´aficas . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2 . Crear la clase token . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3 . Generaci´on del Archivo L´exico . . . . . . . . . . . . . . . . . . . . . . . . . 7
4 . Crear el Analizador Sint´actico . . . . . . . . . . . . . . . . . . . . . . . . . 7
5 . Generar el Archivo Sint´actico . . . . . . . . . . . . . . . . . . . . . . . . . 9
6 . Integraci´on del Analizador L´exico y Sint´actico . . . . . . . . . . . . . . . . 9
7 . Control de Errores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
7 .1. Control de Errores del Analizador L´exico . . . . . . . . . . . . . . . 10
7 .2. Control de Errores del Analizador Sint´actico . . . . . . . . . . . . . 11
8 . Interfaz Gr´afica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
D. Anexos 17
E. BIBLIOGRAFIA 18
F. LICENCIA 19
´Indice de figuras
1. Aut´omata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2. Reglas Lexicogr´aficas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3. Estructura de las Instrucciones del Analizador Sint´actico . . . . . . . . . . 8
4. Creaci´on de archivo.cup . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5. Integraci´on del Analizador L´exico Sint´actico . . . . . . . . . . . . . . . . . 9
6. M´etodo Escribir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
7. Constructor del Analizador L´exico . . . . . . . . . . . . . . . . . . . . . . . 10
8. Mensajes para mejor Interpretaci´on con el Usuario . . . . . . . . . . . . . . 11
9. Constructor del Analizador Sint´actico . . . . . . . . . . . . . . . . . . . . . 11
10. Mensajes presentados al Usuario . . . . . . . . . . . . . . . . . . . . . . . . 11
11. Identifica el error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
12. M´etodo report-fatal-error . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
13. Interfaz Gr´afica del Compilador . . . . . . . . . . . . . . . . . . . . . . . . 13
14. Funci´on que cumple cada Bot´on . . . . . . . . . . . . . . . . . . . . . . . . 14
15. Representaci´on de los Errores L´exicos . . . . . . . . . . . . . . . . . . . . . 15
16. Representaci´on de los Errores Sint´acticos . . . . . . . . . . . . . . . . . . . 16
3
A. Problema del compilador a Desarrollar:
Realizar un compilador que permita ingresar una cadena y que a dicha cadena ingre-
sada se cambie de color, por un color seleccionado. Adem´as que contenga la estructura de
un programa de la siguiente manera
Inicio
Color Seleccionado
Cadena ingresada
Fin
B. Aut´omata
Como se representa en la Figura 1. del aut´omata la estructura que va a llevar el
compilador para su mejor entendimiento.
Figura 1: Aut´omata
C. Desarrollo del Compilador
El compilador se lo desarrollara en c´odigo java haciendo uso de las librer´ıas de JFLEX
y CUP por medio del IDE de desarrollo Netbeans. A continuaci´on detallaremos cada uno
de los pasos a seguir para la creaci´on de dicho compilador. Nota: Para el desarrollo del
presente proyecto se debe crear un proyecto nuevo de java en el IDE y luego importar las
debidas librer´ıas (jflex y cup );
4
1 . Crear el Analizador L´exico
Para el desarrollo del Analizador l´exico se debe tener presente las tres partes impor-
tantes por la que se encuentra conformado.
Secci´on 1: Opciones y declaraciones
Secci´on 2: C´odigo de usuario
Secci´on 3: Reglas lexicogr´aficas
1 .1. Opciones y declaraciones
La primera parte del archivo es el bloque donde se importaran los paquetes que se van
a utilizar para nuestro analizador en nuestro caso importaremos las siguientes librer´ıas y
escribimos el nombre del paquete correspondiente, donde la clase Symbol nos sirve para
devolver un objeto del mismo tipo y poder obtener los valores correspondientes:
package color;
import java-cup.runtime.Symbol;
Declaramos las directivas y Macros
%class AnalizadorLexico
%public
%line
%column
%cup
Donde especificamos que el nombre de la clase a generar se llamar´a AzalizadorLexico.java
de tipo p´ublica y habilitamos %line y %column que nos permite obtener la l´ınea y la co-
lumna de la posici´on actual del compilador y el %cup que nos permite la integraci´on con
el archivo Cup.
1 .2. C´odigo de usuario
En esta secci´on de declarar el c´odigo que se va a utilizar, pero en nuestro caso no lo
utilizaremos, as´ı que pasamos a la reglas lexicogr´aficas.
1 .3. Reglas lexicogr´aficas
La Figura 2 una parte esencial dentro del funcionamiento del analizador, en este se
determinar´an el conjunto de expresiones regulares que se utilizar´an durante el proceso
de an´alisis, a continuaci´on se detalla las declaraciones utilizadas: Donde las variables de
Figura 2: Reglas Lexicogr´aficas
5
SaltoLinea y espacios son declarados para despu´es ignorarlos en el analizador Sint´actico,
ValorEntero y ValorTexto son el lenguaje que va a entender el compilador
LUEGO DECLARAMOS LOS OPERADORES Y SIGNOS A UTILIZAR
Donde cada una de ellas se encargan de retornar un nuevo objeto de tipo Symbol el mismo
que se encuentra estructurado de un valor entero y objeto de tipo token para asignar la
columna y l´ınea en la que se encuentra como adicional el valor del token correspondiente
como se representa a continuaci´on.
”,”return new Symbol(sym.COMA, new token(yycolumn, yyline, yytext()));
”(”return new Symbol(sym.ABRIRPAR, new token(yycolumn, yyline, yytext()));
”)”return new Symbol(sym.CERRARPAR, new token(yycolumn, yyline, yytext()));
SE DETALLA CADA UNA DE LAS PALABRAS RESERVADAS
Donde cada una de ellas se encargan de retornar un nuevo objeto de tipo Symbol el mismo
que se encuentra estructurado de un valor entero y objeto de tipo token para asignar la
columna y l´ınea en la que se encuentra como adicional el valor del token correspondiente
como se representa a continuaci´on.
((inicio¿”return new Symbol(sym.INICIO, new token(yycolumn, yyline, yytext()));
((/fin¿”return new Symbol(sym.FIN, new token(yycolumn, yyline, yytext()));
((cadena¿”return new Symbol(sym.CADENA, new token(yycolumn, yyline, yytext()));
((color¿”return new Symbol(sym.COLOR, new token(yycolumn, yyline, yytext()));
Y AL FINAL LAS EXPRESIONES QUE IDENTIFICARA EL COMPILADOR
donde de la misma manera retornamos un objeto de tipo Symbol correspondiente para
cada valor donde recibe como par´ametro un valor entero y objeto de tipo token para
asignar la columna y l´ınea en la que se encuentra como adicional el valor del token co-
rrespondiente como se representa a continuaci´on.
ValorTexto return new Symbol(sym.VALTEXT, new token(yycolumn, yyline, yytext()));
ValorEntero return new Symbol(sym.VALINT, new token(yycolumn, yyline, yytext()));
SaltoLinea return new Symbol(sym.ENTER, new token(yycolumn, yyline, yytext()));
espacios /* ignorar */
/*esta ´ultima l´ınea se encarga de presentar el car´acter invalido ingresado como la l´ınea y
la columna en la que se encuentre*/ . System.err.println(¸car´acter invalido- yytext() + ”[-
yyline + ”:- yycolumn + ”]”);
6
2 . Crear la clase token
Como se puede observar en la secci´on anterior se hace uso de una instancia de la
clase token, la misma que me permite almacenar la columna , la l´ınea y el nombre del
token establecido, para que de esta manera despu´es se pueda acceder a cada uno de estos
atributos de la mejor manera y poder realizar las operaciones correspondientes.
3 . Generaci´on del Archivo L´exico
Una vez establecido el analizador l´exico se procede a la ejecuci´on del mismo para que
se genere la clase AnalizadorLexico.java de la siguiente manera.
jflex.Main.generate(new File( ”src-File.separator+¸color- File.separator + ”Lexico.flex”));
donde jflex.Main.generate se importa de la librer´ıa JFlex el mismo que recibe como
par´ametro el archivo Lexico.flex creado anterior mente .
4 . Crear el Analizador Sint´actico
Una vez establecido el analizador l´exico procedemos a realizar el analizador Sint´actico
el mismo que se encarga de estructurar el c´odigo y dar sentido a nuestras reglas l´exicas.
Creamos un archivo con el nombre de Sintactico.cup en el cual escribiremos todo
nuestro c´odigo del analizador Sem´antico.
Definimos el nombre del paquete donde se va a generar nuestro AnalizadorSentacti-
co.java y importamos las librer´ıas necesarias a utilizar en nuestro caso de la siguiente
manera: package color; import java-cup.runtime.*; import java.util.ArrayList; im-
port java.io.FileReader;
Determinamos la secci´on del parser code : “c´odigo parser” : que contendr´a el c´odigo
java utilizado en nuestro caso sobre escribimos los m´etodos para la captura de errores
del compilador.
public void syntax-error(Symbol sy)
El mismo que determina si la sintaxis ingresada es la correcta.
public void report-error(String message, Object info)
Se encarga de dar un reporte de error en caso de ser encontrado
public void report-fatal-error(String message, Object info)
report-error(message, info);
System.exit(1);
Cuando se encuentra un error de donde el sistema no puede recuperarse, se lanza un
error fatal. Donde se despliega el mensaje de error y se finaliza la ejecuci´on. por tal
motivo, capturamos esa excepci´on y presentamos un mensaje identificando el tipo de error
producido.
7
En la secci´on del action code realizamos una instancia de la clase instrucci´on la
misma que se la genera posteriormente, para guardar el tipo de instrucci´on a ejecutar
(cadena,color). action code : ArrayList¡Instruccion¿instrucciones = new ArrayList();
:
Terminales, tenemos dos tipos de terminales los que no tienen ning´un valor asociado
y los escribimos en la primera l´ınea y los de la segunda l´ınea son los que tienen alg´un
valor, como es el caso del valor entero para los colores y el valor del texto que hace
referencia a la cadena.
terminal COMA,ABRIRPAR,CERRARPAR,INICIO,FIN,ENTER,COLOR,CADENA;
terminal token VALINT, VALTEXT;
No terminales, de la misma manera que los terminales pero son aquellas variables
que ser´an utilizadas para dar sentido y estructura al compilador
non terminal instrucciones, programa;
non terminal Instruccion instruccion,cadena,color;
Estructura del compilador : start with programa;
start with l´ınea de c´odigo que indica donde inicia la estructura del programa para despu´es
desglosar su estructura de la siguiente manera.
- programa ::= INICIO ENTER instrucciones ENTER FIN;
Donde en programa indicamos que el compilador va a estar dado de cada uno de los tokens
establecidos en la l´ınea anterior y Instrucciones donde se detalla en la Figura 3.
Figura 3: Estructura de las Instrucciones del Analizador Sint´actico
8
5 . Generar el Archivo Sint´actico
Una vez concluida la estructura del compilador procedemos a ejecutar el archivo.cup
para que se genere el .java y poder utilizarlo, de la siguiente manera como se representa
en la Figura 4:
Creamos una clase en java y escribimos el siguiente c´odigo
Figura 4: Creaci´on de archivo.cup
Donde String opciones[ ] nos permite asignar las caracter´ısticas necesarias para la com-
pilaci´on del archivo .cup, donde asignamos el paquete donde queremos que se genere el
archivo java, el nombre conque deseamos que se genere en este caso AnalizadorSintac-
tico.java y luego el paquete donde se encuentra el archivo .cup y su nombre respectivo
Sintactico.cup y con java-cup.Main realizamos la generaci´on correspondiente de la clase
AnalizadorSintactico.java y adem´as la clase sym que son generadas autom´aticamente.
6 . Integraci´on del Analizador L´exico y Sint´actico
Una vez creados cada uno de los analizadores se procede a la integraci´on de los dos
para dar sentido y estructura al compilador y final mente se procede realizar la estructura
sem´antica del compilador:
Integraci´on
Figura 5: Integraci´on del Analizador L´exico Sint´actico
9
M´etodo escribir() lo detallamos en la Figura 6 , EL mismo que me permite almacenar
en un archivo .txt lo que ingresamos por pantalla;
Figura 6: M´etodo Escribir
7 . Control de Errores
Luego se configura el AnalizadorL´exico y el Analizador Sint´actico para la captura de
Errores para definir la estructura sem´antica del compilador de la siguiente manera:
7 .1. Control de Errores del Analizador L´exico
De tal manera que se configuro el constructor del analizador l´exico (ver Figura 7.)
para poder enviar e interactuar con la interfaz gr´afica, donde se presenta y personaliza
los errores l´exicos.
Figura 7: Constructor del Analizador L´exico
10
Luego se personalizo cada uno de los mensajes (ver Figura 8.) para una mejor inter-
pretaci´on con el usuario e identifique que tipo de error se presenta, ingresando el valor
adecuado de error (token) en la columna y l´ınea actual en la que se encuentra de la
siguiente manera:
Figura 8: Mensajes para mejor Interpretaci´on con el Usuario
7 .2. Control de Errores del Analizador Sint´actico
Se configura los errores Sint´acticos para identificar si la sentencia ingresada se encuen-
tra bien estructurada y poder enviar los errores correspondientes. Personalizando cada
uno de ellos. (ver Figura 9.) Se Configura el constructor para la interacci´on con la vista
y poder presentar los mensajes de errores Y a continuaci´on se personaliza los mensajes
Figura 9: Constructor del Analizador Sint´actico
para presentarlos al usuario y determinar que tipo de error hay que corregir, presentando
por pantalla el error establecido como la l´ınea y la columna en la que se present´o dicho
error y adicional identificando que error se produjo como se representa en la Figura 10 y
Figura 11.
Figura 10: Mensajes presentados al Usuario
11
Figura 11: Identifica el error
Adicional se comenta la linea de codigo
System.exit(1) , (ver Figura 12);
en el m´etodo report-fatal-error(String message, Object info) debido a que si no lo hacemos
el compilador se cerrar´a repentina mente al encontrar un error.
Figura 12: M´etodo report-fatal-error
12
8 . Interfaz Gr´afica
Se realiza una interfaz gr´afica como se presenta en la figura 13 que me permita inter-
actuar de la mejor manera con el usuario y poder obtener un resultado e interacci´on m´as
eficiente.
Figura 13: Interfaz Gr´afica del Compilador
13
En la Figura 14: Representa el Funcionamiento de cada uno de los Botones del Com-
pilador.
Figura 14: Funci´on que cumple cada Bot´on
14
En la Figura 15: Representa cada uno de los errores L´exicos indicando cuales Carac-
teres pertenecen y cuales no a la sintaxis.
Figura 15: Representaci´on de los Errores L´exicos
15
Figura 16: Representa cada uno de los errores Sint´acticos que procesa el compilador.
Figura 16: Representaci´on de los Errores Sint´acticos
16
D. Anexos
Para un mejor an´alisis y comprensi´on del compilador lo adjuntamos al proyecto java en
el siguiente repositorio: https://ralexs04@bitbucket.org/ralexs04/compiladorcambiacolor.
git
17
E. BIBLIOGRAFIA
Referencias
[1] “Integraci´on del JFlex y Cup Rafael.” Rafael A. Vega [Octubre 2008]
[2] “El Analizador L´exico, el Analizador Sintactico y los diferentes tipos de compiladores
que hay.” S. Galvez. M Mora.
[3] “Integraci´on del JFlex y Cup Rafael.” Luis Antonio. Farias Tello [17-01-2013]
18
F. LICENCIA
Ensayo by Ra´ul A . G´omez A. is licensed Under a Creative Commons Reconocimiento-
NoComercial-CompartirIgual 3.0 Unported License.
19

Más contenido relacionado

PDF
Manual mendeley
DOCX
Plan de trabajo simultáneo 1
PPTX
Economia
PPTX
Segunda guerra mundial cjv sociales entrada 1
PDF
LA INSERCION LABORAL EN LAS CARCELES
PDF
Plan de-emergencia-colegio-marta-brunet
PDF
Herramientas para mejorar las prácticas de evaluación formativa en la asignat...
PDF
Manual de adecuaciones_curriculares
Manual mendeley
Plan de trabajo simultáneo 1
Economia
Segunda guerra mundial cjv sociales entrada 1
LA INSERCION LABORAL EN LAS CARCELES
Plan de-emergencia-colegio-marta-brunet
Herramientas para mejorar las prácticas de evaluación formativa en la asignat...
Manual de adecuaciones_curriculares

Destacado (20)

PPT
Ubivirtual windows7
DOCX
¿Eres profesor freelance? Incentiva a tus alumnos a usar las redes sociales
PPTX
Identidad en el arte.
DOCX
Hobbies que te hacen más inteligente según la ciencia
PPTX
Inteligencia artificial (4)
DOCX
Trabaja freelance a través de Upwork y date a conocer con miles de posibles c...
PPTX
Niveles de iconocidad[1]
DOCX
Las 5 excusas del procrastinador y qué hacer al respecto
PPTX
Informe sobre la quebrada singuiya
PPT
Qué es la geografía económica(LauraA)
PDF
Diseño medios didacticos
DOCX
#IdeaFreelance 3: monetiza tu pequeño negocio con las redes sociales
PPTX
Sistemasmonoymulti 111009161758-phpapp01
PDF
DOCX
El término web 2
PPTX
Internet invisible
PPTX
Comandos XP
PDF
Informe resultados cuestionario Accedo 2.0 mayo 2010
PPTX
Internet (Oscar Cerpa)
PDF
Boletín de octubre
Ubivirtual windows7
¿Eres profesor freelance? Incentiva a tus alumnos a usar las redes sociales
Identidad en el arte.
Hobbies que te hacen más inteligente según la ciencia
Inteligencia artificial (4)
Trabaja freelance a través de Upwork y date a conocer con miles de posibles c...
Niveles de iconocidad[1]
Las 5 excusas del procrastinador y qué hacer al respecto
Informe sobre la quebrada singuiya
Qué es la geografía económica(LauraA)
Diseño medios didacticos
#IdeaFreelance 3: monetiza tu pequeño negocio con las redes sociales
Sistemasmonoymulti 111009161758-phpapp01
El término web 2
Internet invisible
Comandos XP
Informe resultados cuestionario Accedo 2.0 mayo 2010
Internet (Oscar Cerpa)
Boletín de octubre
Publicidad

Similar a Raúl A Gómez A -> Compilador Cambia de Color a una palabra ingresada (20)

PDF
Compilador para la generación de código a partir de las iniciales de los nomb...
PDF
Ensayo Compilador Suma y Resta
PDF
Ejercicio compiladores
PDF
Documeto compilardorcontadorletras
PDF
Compilador Usando Jflex y Cup
PDF
Compilador Convertidor de Divisas
PDF
Analizador de una matriz utilizando compiladores
PDF
Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...
PDF
Manual de Compiladores Léxico y Sintáctico.pdf
PDF
Compilador para calcular el área de figuras Triangulo, Cuadrado y Rectángulo.
PDF
Compiladores informe final
PDF
Informe compilador divisor
PDF
Analizador Léxico, Analizador Sintáctico
PDF
Articulo
PDF
Compilador (divisor de cantidades )
PDF
Compilador divisor de cantidades con Jflex y Cup
DOCX
Estructura general del programa
PDF
04 j flex
PDF
Compilador concatenacion
PDF
Compilador para la generación de código a partir de las iniciales de los nomb...
Ensayo Compilador Suma y Resta
Ejercicio compiladores
Documeto compilardorcontadorletras
Compilador Usando Jflex y Cup
Compilador Convertidor de Divisas
Analizador de una matriz utilizando compiladores
Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...
Manual de Compiladores Léxico y Sintáctico.pdf
Compilador para calcular el área de figuras Triangulo, Cuadrado y Rectángulo.
Compiladores informe final
Informe compilador divisor
Analizador Léxico, Analizador Sintáctico
Articulo
Compilador (divisor de cantidades )
Compilador divisor de cantidades con Jflex y Cup
Estructura general del programa
04 j flex
Compilador concatenacion
Publicidad

Último (20)

PDF
MATERIAL DIDÁCTICO 2023 SELECCIÓN 1_REFORZAMIENTO 1° BIMESTRE_COM.pdf
PPTX
LAS MIGRACIONES E INVASIONES Y EL INICIO EDAD MEDIA
PDF
Teologia-Sistematica-Por-Lewis-Sperry-Chafer_060044.pdf
DOC
4°_GRADO_-_SESIONES_DEL_11_AL_15_DE_AGOSTO.doc
PDF
Introducción a la historia de la filosofía
DOCX
PLAN DE CASTELLANO 2021 actualizado a la normativa
PDF
Nadie puede salvarte excepto Tú - Madame Rouge Ccesa007.pdf
PDF
La lluvia sabe por qué: una historia sobre amistad, resiliencia y esperanza e...
PDF
MATERIAL DIDÁCTICO 2023 SELECCIÓN 1_REFORZAMIENTO 1° BIMESTRE.pdf
PPTX
TEMA 1ORGANIZACIÓN FUNCIONAL DEL CUERPO, MEDIO INTERNO Y HOMEOSTASIS (3) [Aut...
PDF
Iniciación Al Aprendizaje Basado En Proyectos ABP Ccesa007.pdf
PDF
Escuelas Desarmando una mirada subjetiva a la educación
PDF
Cronograma de clases de Práctica Profesional 2 2025 UDE.pdf
PDF
Mi Primer Millon - Poissant - Godefroy Ccesa007.pdf
PDF
Texto Digital Los Miserables - Victor Hugo Ccesa007.pdf
PDF
5°-UNIDAD 5 - 2025.pdf aprendizaje 5tooo
DOC
Manual de Convivencia 2025 actualizado a las normas vigentes
PDF
Introduccion a la Investigacion Cualitativa FLICK Ccesa007.pdf
PDF
TOMO II - LITERATURA.pd plusenmas ultras
PDF
Telos 127 Generacion Al fa Beta - fundaciontelefonica
MATERIAL DIDÁCTICO 2023 SELECCIÓN 1_REFORZAMIENTO 1° BIMESTRE_COM.pdf
LAS MIGRACIONES E INVASIONES Y EL INICIO EDAD MEDIA
Teologia-Sistematica-Por-Lewis-Sperry-Chafer_060044.pdf
4°_GRADO_-_SESIONES_DEL_11_AL_15_DE_AGOSTO.doc
Introducción a la historia de la filosofía
PLAN DE CASTELLANO 2021 actualizado a la normativa
Nadie puede salvarte excepto Tú - Madame Rouge Ccesa007.pdf
La lluvia sabe por qué: una historia sobre amistad, resiliencia y esperanza e...
MATERIAL DIDÁCTICO 2023 SELECCIÓN 1_REFORZAMIENTO 1° BIMESTRE.pdf
TEMA 1ORGANIZACIÓN FUNCIONAL DEL CUERPO, MEDIO INTERNO Y HOMEOSTASIS (3) [Aut...
Iniciación Al Aprendizaje Basado En Proyectos ABP Ccesa007.pdf
Escuelas Desarmando una mirada subjetiva a la educación
Cronograma de clases de Práctica Profesional 2 2025 UDE.pdf
Mi Primer Millon - Poissant - Godefroy Ccesa007.pdf
Texto Digital Los Miserables - Victor Hugo Ccesa007.pdf
5°-UNIDAD 5 - 2025.pdf aprendizaje 5tooo
Manual de Convivencia 2025 actualizado a las normas vigentes
Introduccion a la Investigacion Cualitativa FLICK Ccesa007.pdf
TOMO II - LITERATURA.pd plusenmas ultras
Telos 127 Generacion Al fa Beta - fundaciontelefonica

Raúl A Gómez A -> Compilador Cambia de Color a una palabra ingresada

  • 1. CIS-IXB-001 UNIVERSIDAD NACIONAL DE LOJA ´Area de la Energ´ıa las Industrias y los Recursos Naturales No Renovables Carrera de Ingenier´ıa en Sistemas Compiladores Cambia de Color a una Palabra Ingresada Tarea- Extra Clase Noveno B Autor: • Ra´ul Alexander G´omez Armijos • Fecha: 13/02/2015 Docente: Ing. Henry-Paz, Loja-Ecuador 2015 1
  • 2. ´Indice A. Problema del compilador a Desarrollar: 4 B. Aut´omata 4 C. Desarrollo del Compilador 4 1 . Crear el Analizador L´exico . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1 .1. Opciones y declaraciones . . . . . . . . . . . . . . . . . . . . . . . . 5 1 .2. C´odigo de usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1 .3. Reglas lexicogr´aficas . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2 . Crear la clase token . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3 . Generaci´on del Archivo L´exico . . . . . . . . . . . . . . . . . . . . . . . . . 7 4 . Crear el Analizador Sint´actico . . . . . . . . . . . . . . . . . . . . . . . . . 7 5 . Generar el Archivo Sint´actico . . . . . . . . . . . . . . . . . . . . . . . . . 9 6 . Integraci´on del Analizador L´exico y Sint´actico . . . . . . . . . . . . . . . . 9 7 . Control de Errores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 7 .1. Control de Errores del Analizador L´exico . . . . . . . . . . . . . . . 10 7 .2. Control de Errores del Analizador Sint´actico . . . . . . . . . . . . . 11 8 . Interfaz Gr´afica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 D. Anexos 17 E. BIBLIOGRAFIA 18 F. LICENCIA 19
  • 3. ´Indice de figuras 1. Aut´omata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2. Reglas Lexicogr´aficas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3. Estructura de las Instrucciones del Analizador Sint´actico . . . . . . . . . . 8 4. Creaci´on de archivo.cup . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 5. Integraci´on del Analizador L´exico Sint´actico . . . . . . . . . . . . . . . . . 9 6. M´etodo Escribir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 7. Constructor del Analizador L´exico . . . . . . . . . . . . . . . . . . . . . . . 10 8. Mensajes para mejor Interpretaci´on con el Usuario . . . . . . . . . . . . . . 11 9. Constructor del Analizador Sint´actico . . . . . . . . . . . . . . . . . . . . . 11 10. Mensajes presentados al Usuario . . . . . . . . . . . . . . . . . . . . . . . . 11 11. Identifica el error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 12. M´etodo report-fatal-error . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 13. Interfaz Gr´afica del Compilador . . . . . . . . . . . . . . . . . . . . . . . . 13 14. Funci´on que cumple cada Bot´on . . . . . . . . . . . . . . . . . . . . . . . . 14 15. Representaci´on de los Errores L´exicos . . . . . . . . . . . . . . . . . . . . . 15 16. Representaci´on de los Errores Sint´acticos . . . . . . . . . . . . . . . . . . . 16 3
  • 4. A. Problema del compilador a Desarrollar: Realizar un compilador que permita ingresar una cadena y que a dicha cadena ingre- sada se cambie de color, por un color seleccionado. Adem´as que contenga la estructura de un programa de la siguiente manera Inicio Color Seleccionado Cadena ingresada Fin B. Aut´omata Como se representa en la Figura 1. del aut´omata la estructura que va a llevar el compilador para su mejor entendimiento. Figura 1: Aut´omata C. Desarrollo del Compilador El compilador se lo desarrollara en c´odigo java haciendo uso de las librer´ıas de JFLEX y CUP por medio del IDE de desarrollo Netbeans. A continuaci´on detallaremos cada uno de los pasos a seguir para la creaci´on de dicho compilador. Nota: Para el desarrollo del presente proyecto se debe crear un proyecto nuevo de java en el IDE y luego importar las debidas librer´ıas (jflex y cup ); 4
  • 5. 1 . Crear el Analizador L´exico Para el desarrollo del Analizador l´exico se debe tener presente las tres partes impor- tantes por la que se encuentra conformado. Secci´on 1: Opciones y declaraciones Secci´on 2: C´odigo de usuario Secci´on 3: Reglas lexicogr´aficas 1 .1. Opciones y declaraciones La primera parte del archivo es el bloque donde se importaran los paquetes que se van a utilizar para nuestro analizador en nuestro caso importaremos las siguientes librer´ıas y escribimos el nombre del paquete correspondiente, donde la clase Symbol nos sirve para devolver un objeto del mismo tipo y poder obtener los valores correspondientes: package color; import java-cup.runtime.Symbol; Declaramos las directivas y Macros %class AnalizadorLexico %public %line %column %cup Donde especificamos que el nombre de la clase a generar se llamar´a AzalizadorLexico.java de tipo p´ublica y habilitamos %line y %column que nos permite obtener la l´ınea y la co- lumna de la posici´on actual del compilador y el %cup que nos permite la integraci´on con el archivo Cup. 1 .2. C´odigo de usuario En esta secci´on de declarar el c´odigo que se va a utilizar, pero en nuestro caso no lo utilizaremos, as´ı que pasamos a la reglas lexicogr´aficas. 1 .3. Reglas lexicogr´aficas La Figura 2 una parte esencial dentro del funcionamiento del analizador, en este se determinar´an el conjunto de expresiones regulares que se utilizar´an durante el proceso de an´alisis, a continuaci´on se detalla las declaraciones utilizadas: Donde las variables de Figura 2: Reglas Lexicogr´aficas 5
  • 6. SaltoLinea y espacios son declarados para despu´es ignorarlos en el analizador Sint´actico, ValorEntero y ValorTexto son el lenguaje que va a entender el compilador LUEGO DECLARAMOS LOS OPERADORES Y SIGNOS A UTILIZAR Donde cada una de ellas se encargan de retornar un nuevo objeto de tipo Symbol el mismo que se encuentra estructurado de un valor entero y objeto de tipo token para asignar la columna y l´ınea en la que se encuentra como adicional el valor del token correspondiente como se representa a continuaci´on. ”,”return new Symbol(sym.COMA, new token(yycolumn, yyline, yytext())); ”(”return new Symbol(sym.ABRIRPAR, new token(yycolumn, yyline, yytext())); ”)”return new Symbol(sym.CERRARPAR, new token(yycolumn, yyline, yytext())); SE DETALLA CADA UNA DE LAS PALABRAS RESERVADAS Donde cada una de ellas se encargan de retornar un nuevo objeto de tipo Symbol el mismo que se encuentra estructurado de un valor entero y objeto de tipo token para asignar la columna y l´ınea en la que se encuentra como adicional el valor del token correspondiente como se representa a continuaci´on. ((inicio¿”return new Symbol(sym.INICIO, new token(yycolumn, yyline, yytext())); ((/fin¿”return new Symbol(sym.FIN, new token(yycolumn, yyline, yytext())); ((cadena¿”return new Symbol(sym.CADENA, new token(yycolumn, yyline, yytext())); ((color¿”return new Symbol(sym.COLOR, new token(yycolumn, yyline, yytext())); Y AL FINAL LAS EXPRESIONES QUE IDENTIFICARA EL COMPILADOR donde de la misma manera retornamos un objeto de tipo Symbol correspondiente para cada valor donde recibe como par´ametro un valor entero y objeto de tipo token para asignar la columna y l´ınea en la que se encuentra como adicional el valor del token co- rrespondiente como se representa a continuaci´on. ValorTexto return new Symbol(sym.VALTEXT, new token(yycolumn, yyline, yytext())); ValorEntero return new Symbol(sym.VALINT, new token(yycolumn, yyline, yytext())); SaltoLinea return new Symbol(sym.ENTER, new token(yycolumn, yyline, yytext())); espacios /* ignorar */ /*esta ´ultima l´ınea se encarga de presentar el car´acter invalido ingresado como la l´ınea y la columna en la que se encuentre*/ . System.err.println(¸car´acter invalido- yytext() + ”[- yyline + ”:- yycolumn + ”]”); 6
  • 7. 2 . Crear la clase token Como se puede observar en la secci´on anterior se hace uso de una instancia de la clase token, la misma que me permite almacenar la columna , la l´ınea y el nombre del token establecido, para que de esta manera despu´es se pueda acceder a cada uno de estos atributos de la mejor manera y poder realizar las operaciones correspondientes. 3 . Generaci´on del Archivo L´exico Una vez establecido el analizador l´exico se procede a la ejecuci´on del mismo para que se genere la clase AnalizadorLexico.java de la siguiente manera. jflex.Main.generate(new File( ”src-File.separator+¸color- File.separator + ”Lexico.flex”)); donde jflex.Main.generate se importa de la librer´ıa JFlex el mismo que recibe como par´ametro el archivo Lexico.flex creado anterior mente . 4 . Crear el Analizador Sint´actico Una vez establecido el analizador l´exico procedemos a realizar el analizador Sint´actico el mismo que se encarga de estructurar el c´odigo y dar sentido a nuestras reglas l´exicas. Creamos un archivo con el nombre de Sintactico.cup en el cual escribiremos todo nuestro c´odigo del analizador Sem´antico. Definimos el nombre del paquete donde se va a generar nuestro AnalizadorSentacti- co.java y importamos las librer´ıas necesarias a utilizar en nuestro caso de la siguiente manera: package color; import java-cup.runtime.*; import java.util.ArrayList; im- port java.io.FileReader; Determinamos la secci´on del parser code : “c´odigo parser” : que contendr´a el c´odigo java utilizado en nuestro caso sobre escribimos los m´etodos para la captura de errores del compilador. public void syntax-error(Symbol sy) El mismo que determina si la sintaxis ingresada es la correcta. public void report-error(String message, Object info) Se encarga de dar un reporte de error en caso de ser encontrado public void report-fatal-error(String message, Object info) report-error(message, info); System.exit(1); Cuando se encuentra un error de donde el sistema no puede recuperarse, se lanza un error fatal. Donde se despliega el mensaje de error y se finaliza la ejecuci´on. por tal motivo, capturamos esa excepci´on y presentamos un mensaje identificando el tipo de error producido. 7
  • 8. En la secci´on del action code realizamos una instancia de la clase instrucci´on la misma que se la genera posteriormente, para guardar el tipo de instrucci´on a ejecutar (cadena,color). action code : ArrayList¡Instruccion¿instrucciones = new ArrayList(); : Terminales, tenemos dos tipos de terminales los que no tienen ning´un valor asociado y los escribimos en la primera l´ınea y los de la segunda l´ınea son los que tienen alg´un valor, como es el caso del valor entero para los colores y el valor del texto que hace referencia a la cadena. terminal COMA,ABRIRPAR,CERRARPAR,INICIO,FIN,ENTER,COLOR,CADENA; terminal token VALINT, VALTEXT; No terminales, de la misma manera que los terminales pero son aquellas variables que ser´an utilizadas para dar sentido y estructura al compilador non terminal instrucciones, programa; non terminal Instruccion instruccion,cadena,color; Estructura del compilador : start with programa; start with l´ınea de c´odigo que indica donde inicia la estructura del programa para despu´es desglosar su estructura de la siguiente manera. - programa ::= INICIO ENTER instrucciones ENTER FIN; Donde en programa indicamos que el compilador va a estar dado de cada uno de los tokens establecidos en la l´ınea anterior y Instrucciones donde se detalla en la Figura 3. Figura 3: Estructura de las Instrucciones del Analizador Sint´actico 8
  • 9. 5 . Generar el Archivo Sint´actico Una vez concluida la estructura del compilador procedemos a ejecutar el archivo.cup para que se genere el .java y poder utilizarlo, de la siguiente manera como se representa en la Figura 4: Creamos una clase en java y escribimos el siguiente c´odigo Figura 4: Creaci´on de archivo.cup Donde String opciones[ ] nos permite asignar las caracter´ısticas necesarias para la com- pilaci´on del archivo .cup, donde asignamos el paquete donde queremos que se genere el archivo java, el nombre conque deseamos que se genere en este caso AnalizadorSintac- tico.java y luego el paquete donde se encuentra el archivo .cup y su nombre respectivo Sintactico.cup y con java-cup.Main realizamos la generaci´on correspondiente de la clase AnalizadorSintactico.java y adem´as la clase sym que son generadas autom´aticamente. 6 . Integraci´on del Analizador L´exico y Sint´actico Una vez creados cada uno de los analizadores se procede a la integraci´on de los dos para dar sentido y estructura al compilador y final mente se procede realizar la estructura sem´antica del compilador: Integraci´on Figura 5: Integraci´on del Analizador L´exico Sint´actico 9
  • 10. M´etodo escribir() lo detallamos en la Figura 6 , EL mismo que me permite almacenar en un archivo .txt lo que ingresamos por pantalla; Figura 6: M´etodo Escribir 7 . Control de Errores Luego se configura el AnalizadorL´exico y el Analizador Sint´actico para la captura de Errores para definir la estructura sem´antica del compilador de la siguiente manera: 7 .1. Control de Errores del Analizador L´exico De tal manera que se configuro el constructor del analizador l´exico (ver Figura 7.) para poder enviar e interactuar con la interfaz gr´afica, donde se presenta y personaliza los errores l´exicos. Figura 7: Constructor del Analizador L´exico 10
  • 11. Luego se personalizo cada uno de los mensajes (ver Figura 8.) para una mejor inter- pretaci´on con el usuario e identifique que tipo de error se presenta, ingresando el valor adecuado de error (token) en la columna y l´ınea actual en la que se encuentra de la siguiente manera: Figura 8: Mensajes para mejor Interpretaci´on con el Usuario 7 .2. Control de Errores del Analizador Sint´actico Se configura los errores Sint´acticos para identificar si la sentencia ingresada se encuen- tra bien estructurada y poder enviar los errores correspondientes. Personalizando cada uno de ellos. (ver Figura 9.) Se Configura el constructor para la interacci´on con la vista y poder presentar los mensajes de errores Y a continuaci´on se personaliza los mensajes Figura 9: Constructor del Analizador Sint´actico para presentarlos al usuario y determinar que tipo de error hay que corregir, presentando por pantalla el error establecido como la l´ınea y la columna en la que se present´o dicho error y adicional identificando que error se produjo como se representa en la Figura 10 y Figura 11. Figura 10: Mensajes presentados al Usuario 11
  • 12. Figura 11: Identifica el error Adicional se comenta la linea de codigo System.exit(1) , (ver Figura 12); en el m´etodo report-fatal-error(String message, Object info) debido a que si no lo hacemos el compilador se cerrar´a repentina mente al encontrar un error. Figura 12: M´etodo report-fatal-error 12
  • 13. 8 . Interfaz Gr´afica Se realiza una interfaz gr´afica como se presenta en la figura 13 que me permita inter- actuar de la mejor manera con el usuario y poder obtener un resultado e interacci´on m´as eficiente. Figura 13: Interfaz Gr´afica del Compilador 13
  • 14. En la Figura 14: Representa el Funcionamiento de cada uno de los Botones del Com- pilador. Figura 14: Funci´on que cumple cada Bot´on 14
  • 15. En la Figura 15: Representa cada uno de los errores L´exicos indicando cuales Carac- teres pertenecen y cuales no a la sintaxis. Figura 15: Representaci´on de los Errores L´exicos 15
  • 16. Figura 16: Representa cada uno de los errores Sint´acticos que procesa el compilador. Figura 16: Representaci´on de los Errores Sint´acticos 16
  • 17. D. Anexos Para un mejor an´alisis y comprensi´on del compilador lo adjuntamos al proyecto java en el siguiente repositorio: https://ralexs04@bitbucket.org/ralexs04/compiladorcambiacolor. git 17
  • 18. E. BIBLIOGRAFIA Referencias [1] “Integraci´on del JFlex y Cup Rafael.” Rafael A. Vega [Octubre 2008] [2] “El Analizador L´exico, el Analizador Sintactico y los diferentes tipos de compiladores que hay.” S. Galvez. M Mora. [3] “Integraci´on del JFlex y Cup Rafael.” Luis Antonio. Farias Tello [17-01-2013] 18
  • 19. F. LICENCIA Ensayo by Ra´ul A . G´omez A. is licensed Under a Creative Commons Reconocimiento- NoComercial-CompartirIgual 3.0 Unported License. 19