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

Destacado

Ubivirtual windows7
Ubivirtual windows7Ubivirtual windows7
Ubivirtual windows7
fidelmen
 
¿Eres profesor freelance? Incentiva a tus alumnos a usar las redes sociales
¿Eres profesor freelance? Incentiva a tus alumnos a usar las redes sociales¿Eres profesor freelance? Incentiva a tus alumnos a usar las redes sociales
¿Eres profesor freelance? Incentiva a tus alumnos a usar las redes sociales
Karen Quintero Castañeda
 
Identidad en el arte.
Identidad en el arte.Identidad en el arte.
Identidad en el arte.
Omar Vega
 
Hobbies que te hacen más inteligente según la ciencia
Hobbies que te hacen más inteligente según la cienciaHobbies que te hacen más inteligente según la ciencia
Hobbies que te hacen más inteligente según la ciencia
Karen Quintero Castañeda
 
Inteligencia artificial (4)
Inteligencia artificial (4)Inteligencia artificial (4)
Inteligencia artificial (4)
2011HARRY
 
Trabaja freelance a través de Upwork y date a conocer con miles de posibles c...
Trabaja freelance a través de Upwork y date a conocer con miles de posibles c...Trabaja freelance a través de Upwork y date a conocer con miles de posibles c...
Trabaja freelance a través de Upwork y date a conocer con miles de posibles c...
Karen Quintero Castañeda
 
Niveles de iconocidad[1]
Niveles de iconocidad[1]Niveles de iconocidad[1]
Niveles de iconocidad[1]
saulmaquinay
 
Las 5 excusas del procrastinador y qué hacer al respecto
Las 5 excusas del procrastinador y qué hacer al respectoLas 5 excusas del procrastinador y qué hacer al respecto
Las 5 excusas del procrastinador y qué hacer al respecto
Karen Quintero Castañeda
 
Informe sobre la quebrada singuiya
Informe sobre la quebrada singuiyaInforme sobre la quebrada singuiya
Informe sobre la quebrada singuiya
zulyruizmorales
 
Qué es la geografía económica(LauraA)
Qué es la geografía económica(LauraA)Qué es la geografía económica(LauraA)
Qué es la geografía económica(LauraA)
tallergeo
 
Diseño medios didacticos
Diseño medios didacticosDiseño medios didacticos
Diseño medios didacticos
formador_ocup_10
 
#IdeaFreelance 3: monetiza tu pequeño negocio con las redes sociales
#IdeaFreelance 3: monetiza tu pequeño negocio con las redes sociales#IdeaFreelance 3: monetiza tu pequeño negocio con las redes sociales
#IdeaFreelance 3: monetiza tu pequeño negocio con las redes sociales
Karen Quintero Castañeda
 
Sistemasmonoymulti 111009161758-phpapp01
Sistemasmonoymulti 111009161758-phpapp01Sistemasmonoymulti 111009161758-phpapp01
Sistemasmonoymulti 111009161758-phpapp01
jon102010
 
1ro plan anual
1ro plan anual1ro plan anual
El término web 2
El término web 2El término web 2
El término web 2
geraldineribon
 
Internet invisible
Internet invisible Internet invisible
Internet invisible
21_1987
 
Comandos XP
Comandos XPComandos XP
Comandos XP
anaarbeloa
 
Informe resultados cuestionario Accedo 2.0 mayo 2010
Informe resultados cuestionario Accedo 2.0 mayo 2010Informe resultados cuestionario Accedo 2.0 mayo 2010
Informe resultados cuestionario Accedo 2.0 mayo 2010
accedo20
 
Internet (Oscar Cerpa)
Internet (Oscar Cerpa)Internet (Oscar Cerpa)
Internet (Oscar Cerpa)
Ozkr Peñates
 
Boletín de octubre
Boletín de octubreBoletín de octubre
Boletín de octubre
UPyD Parla
 

Destacado (20)

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

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

Ejercicio compiladores
Ejercicio compiladoresEjercicio compiladores
Ejercicio compiladores
Sheyli Patiño
 
Compiladores informe final
Compiladores informe finalCompiladores informe final
Compiladores informe final
Priscila Morocho
 
Analizador de una matriz utilizando compiladores
Analizador de una matriz utilizando compiladoresAnalizador de una matriz utilizando compiladores
Analizador de una matriz utilizando compiladores
Christian Lara
 
Compilador Convertidor de Divisas
Compilador Convertidor de DivisasCompilador Convertidor de Divisas
Compilador Convertidor de Divisas
Universidad Nacional de Loja
 
Compilador concatenacion
Compilador concatenacionCompilador concatenacion
Compilador concatenacion
jessy Cueva
 
Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...
Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...
Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...
Diego Paúl Cuenca Quezada
 
Compilador para la generación de código a partir de las iniciales de los nomb...
Compilador para la generación de código a partir de las iniciales de los nomb...Compilador para la generación de código a partir de las iniciales de los nomb...
Compilador para la generación de código a partir de las iniciales de los nomb...
Ana Mora
 
Ensayo Compilador Suma y Resta
Ensayo Compilador Suma y RestaEnsayo Compilador Suma y Resta
Ensayo Compilador Suma y Resta
hepavien
 
Resumen1
Resumen1Resumen1
Proyecto de compiladores_unl
Proyecto de compiladores_unlProyecto de compiladores_unl
Proyecto de compiladores_unl
Yandry Ramírez S
 
Manual de Compiladores Léxico y Sintáctico.pdf
Manual de Compiladores Léxico y Sintáctico.pdfManual de Compiladores Léxico y Sintáctico.pdf
Manual de Compiladores Léxico y Sintáctico.pdf
DavidErnestoT
 
Documeto compilardorcontadorletras
Documeto compilardorcontadorletrasDocumeto compilardorcontadorletras
Documeto compilardorcontadorletras
Sebastian Ocampo Vélez
 
aprendepython.pdf
aprendepython.pdfaprendepython.pdf
aprendepython.pdf
AlejandroCastilloVal2
 
PLC
PLC PLC
MANUAL DE LENGUAJE C
MANUAL DE LENGUAJE CMANUAL DE LENGUAJE C
MANUAL DE LENGUAJE C
claudiocj7
 
Octave calculo numerico
Octave calculo numericoOctave calculo numerico
Octave calculo numerico
LUIS COAQUIRA
 
Compilador sobre conversión de unidades
Compilador sobre conversión de unidadesCompilador sobre conversión de unidades
Compilador sobre conversión de unidades
Diego Guaman
 
Compilador Usando Jflex y Cup
Compilador Usando Jflex y CupCompilador Usando Jflex y Cup
Compilador Usando Jflex y Cup
ditopo
 
Practicas estructuras de datos y algoritmos
Practicas estructuras de datos y algoritmosPracticas estructuras de datos y algoritmos
Practicas estructuras de datos y algoritmos
Chucho E. Peña
 
Programación en c j. carlos lopez ardao
Programación en c   j. carlos lopez ardaoProgramación en c   j. carlos lopez ardao
Programación en c j. carlos lopez ardao
victdiazm
 

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

Ejercicio compiladores
Ejercicio compiladoresEjercicio compiladores
Ejercicio compiladores
 
Compiladores informe final
Compiladores informe finalCompiladores informe final
Compiladores informe final
 
Analizador de una matriz utilizando compiladores
Analizador de una matriz utilizando compiladoresAnalizador de una matriz utilizando compiladores
Analizador de una matriz utilizando compiladores
 
Compilador Convertidor de Divisas
Compilador Convertidor de DivisasCompilador Convertidor de Divisas
Compilador Convertidor de Divisas
 
Compilador concatenacion
Compilador concatenacionCompilador concatenacion
Compilador concatenacion
 
Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...
Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...
Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...
 
Compilador para la generación de código a partir de las iniciales de los nomb...
Compilador para la generación de código a partir de las iniciales de los nomb...Compilador para la generación de código a partir de las iniciales de los nomb...
Compilador para la generación de código a partir de las iniciales de los nomb...
 
Ensayo Compilador Suma y Resta
Ensayo Compilador Suma y RestaEnsayo Compilador Suma y Resta
Ensayo Compilador Suma y Resta
 
Resumen1
Resumen1Resumen1
Resumen1
 
Proyecto de compiladores_unl
Proyecto de compiladores_unlProyecto de compiladores_unl
Proyecto de compiladores_unl
 
Manual de Compiladores Léxico y Sintáctico.pdf
Manual de Compiladores Léxico y Sintáctico.pdfManual de Compiladores Léxico y Sintáctico.pdf
Manual de Compiladores Léxico y Sintáctico.pdf
 
Documeto compilardorcontadorletras
Documeto compilardorcontadorletrasDocumeto compilardorcontadorletras
Documeto compilardorcontadorletras
 
aprendepython.pdf
aprendepython.pdfaprendepython.pdf
aprendepython.pdf
 
PLC
PLC PLC
PLC
 
MANUAL DE LENGUAJE C
MANUAL DE LENGUAJE CMANUAL DE LENGUAJE C
MANUAL DE LENGUAJE C
 
Octave calculo numerico
Octave calculo numericoOctave calculo numerico
Octave calculo numerico
 
Compilador sobre conversión de unidades
Compilador sobre conversión de unidadesCompilador sobre conversión de unidades
Compilador sobre conversión de unidades
 
Compilador Usando Jflex y Cup
Compilador Usando Jflex y CupCompilador Usando Jflex y Cup
Compilador Usando Jflex y Cup
 
Practicas estructuras de datos y algoritmos
Practicas estructuras de datos y algoritmosPracticas estructuras de datos y algoritmos
Practicas estructuras de datos y algoritmos
 
Programación en c j. carlos lopez ardao
Programación en c   j. carlos lopez ardaoProgramación en c   j. carlos lopez ardao
Programación en c j. carlos lopez ardao
 

Último

La filosofía presocrática y los filosofos más relvantes del periodo.
La filosofía presocrática y los filosofos más relvantes del periodo.La filosofía presocrática y los filosofos más relvantes del periodo.
La filosofía presocrática y los filosofos más relvantes del periodo.
DobbieElfo
 
proyectoszona21para el logro de real.pptx
proyectoszona21para el logro de real.pptxproyectoszona21para el logro de real.pptx
proyectoszona21para el logro de real.pptx
ChristianGmez48
 
tema 7. Los siglos XVI y XVII ( resumen)
tema 7. Los siglos XVI y XVII ( resumen)tema 7. Los siglos XVI y XVII ( resumen)
tema 7. Los siglos XVI y XVII ( resumen)
saradocente
 
MATERIAL ESCOLAR 2024-2025. 4 AÑOS CEIP SAN CRISTOBAL
MATERIAL ESCOLAR 2024-2025. 4 AÑOS CEIP SAN CRISTOBALMATERIAL ESCOLAR 2024-2025. 4 AÑOS CEIP SAN CRISTOBAL
MATERIAL ESCOLAR 2024-2025. 4 AÑOS CEIP SAN CRISTOBAL
Ana Fernandez
 
CORREOS SEGUNDO 2024 HONORIO DELGADO ESPINOZA
CORREOS SEGUNDO 2024 HONORIO DELGADO ESPINOZACORREOS SEGUNDO 2024 HONORIO DELGADO ESPINOZA
CORREOS SEGUNDO 2024 HONORIO DELGADO ESPINOZA
Sandra Mariela Ballón Aguedo
 
Gracias papá hombre_letra y acordes de guitarra.pdf
Gracias papá hombre_letra y acordes de guitarra.pdfGracias papá hombre_letra y acordes de guitarra.pdf
Gracias papá hombre_letra y acordes de guitarra.pdf
Ani Ann
 
Mapa Mental documentos que rigen el sistema de evaluación
Mapa Mental documentos que rigen el sistema de evaluaciónMapa Mental documentos que rigen el sistema de evaluación
Mapa Mental documentos que rigen el sistema de evaluación
ruthmatiel1
 
MATERIAL ESCOLAR 2024-2025 3 AÑOS CEIP SAN CRISTÓBAL
MATERIAL ESCOLAR 2024-2025 3 AÑOS CEIP SAN CRISTÓBALMATERIAL ESCOLAR 2024-2025 3 AÑOS CEIP SAN CRISTÓBAL
MATERIAL ESCOLAR 2024-2025 3 AÑOS CEIP SAN CRISTÓBAL
Ana Fernandez
 
Sesión de clase: El conflicto inminente.
Sesión de clase: El conflicto inminente.Sesión de clase: El conflicto inminente.
Sesión de clase: El conflicto inminente.
https://gramadal.wordpress.com/
 
p4s.co Ecosistema de Ecosistemas - Diagrama.pdf
p4s.co Ecosistema de Ecosistemas - Diagrama.pdfp4s.co Ecosistema de Ecosistemas - Diagrama.pdf
p4s.co Ecosistema de Ecosistemas - Diagrama.pdf
DavidCamiloMosquera
 
Estás conmigo Jesús amigo_letra y acordes de guitarra.pdf
Estás conmigo Jesús amigo_letra y acordes de guitarra.pdfEstás conmigo Jesús amigo_letra y acordes de guitarra.pdf
Estás conmigo Jesús amigo_letra y acordes de guitarra.pdf
Ani Ann
 
Presentación simple corporativa degradado en violeta blanco.pdf
Presentación simple corporativa degradado en violeta blanco.pdfPresentación simple corporativa degradado en violeta blanco.pdf
Presentación simple corporativa degradado en violeta blanco.pdf
eleandroth
 
2024 planificacion microcurricular 7mo A matutino..docx
2024 planificacion microcurricular 7mo A matutino..docx2024 planificacion microcurricular 7mo A matutino..docx
2024 planificacion microcurricular 7mo A matutino..docx
WILLIAMPATRICIOSANTA2
 
La vida de Martin Miguel de Güemes para niños de primaria
La vida de Martin Miguel de Güemes para niños de primariaLa vida de Martin Miguel de Güemes para niños de primaria
La vida de Martin Miguel de Güemes para niños de primaria
EricaCouly1
 
ANALISIS CRITICO DEL PENSAMIENTO COLONIAL Y DESCOLONIZACION
ANALISIS CRITICO DEL PENSAMIENTO COLONIAL Y DESCOLONIZACIONANALISIS CRITICO DEL PENSAMIENTO COLONIAL Y DESCOLONIZACION
ANALISIS CRITICO DEL PENSAMIENTO COLONIAL Y DESCOLONIZACION
carla466417
 
Mi Comunidad En El Sector Monterrey-Poste Blanco
Mi Comunidad En El Sector Monterrey-Poste BlancoMi Comunidad En El Sector Monterrey-Poste Blanco
Mi Comunidad En El Sector Monterrey-Poste Blanco
Ruth Noemí Soto Villegas
 
Hablemos de ESI para estudiantes Cuadernillo
Hablemos de ESI para estudiantes CuadernilloHablemos de ESI para estudiantes Cuadernillo
Hablemos de ESI para estudiantes Cuadernillo
Mónica Sánchez
 
PLAN 365 Presentación Gobierno 2024 (1).pdf
PLAN 365 Presentación Gobierno 2024  (1).pdfPLAN 365 Presentación Gobierno 2024  (1).pdf
PLAN 365 Presentación Gobierno 2024 (1).pdf
ElizabethLpez634570
 
FEEDBACK DE LA ESTRUCTURA CURRICULAR- 2024.pdf
FEEDBACK DE LA ESTRUCTURA CURRICULAR- 2024.pdfFEEDBACK DE LA ESTRUCTURA CURRICULAR- 2024.pdf
FEEDBACK DE LA ESTRUCTURA CURRICULAR- 2024.pdf
Jose Luis Jimenez Rodriguez
 
Ejercicios-de-Calculo-de-Goteo-Enfermeria1-1.ppt
Ejercicios-de-Calculo-de-Goteo-Enfermeria1-1.pptEjercicios-de-Calculo-de-Goteo-Enfermeria1-1.ppt
Ejercicios-de-Calculo-de-Goteo-Enfermeria1-1.ppt
eliseo membreño
 

Último (20)

La filosofía presocrática y los filosofos más relvantes del periodo.
La filosofía presocrática y los filosofos más relvantes del periodo.La filosofía presocrática y los filosofos más relvantes del periodo.
La filosofía presocrática y los filosofos más relvantes del periodo.
 
proyectoszona21para el logro de real.pptx
proyectoszona21para el logro de real.pptxproyectoszona21para el logro de real.pptx
proyectoszona21para el logro de real.pptx
 
tema 7. Los siglos XVI y XVII ( resumen)
tema 7. Los siglos XVI y XVII ( resumen)tema 7. Los siglos XVI y XVII ( resumen)
tema 7. Los siglos XVI y XVII ( resumen)
 
MATERIAL ESCOLAR 2024-2025. 4 AÑOS CEIP SAN CRISTOBAL
MATERIAL ESCOLAR 2024-2025. 4 AÑOS CEIP SAN CRISTOBALMATERIAL ESCOLAR 2024-2025. 4 AÑOS CEIP SAN CRISTOBAL
MATERIAL ESCOLAR 2024-2025. 4 AÑOS CEIP SAN CRISTOBAL
 
CORREOS SEGUNDO 2024 HONORIO DELGADO ESPINOZA
CORREOS SEGUNDO 2024 HONORIO DELGADO ESPINOZACORREOS SEGUNDO 2024 HONORIO DELGADO ESPINOZA
CORREOS SEGUNDO 2024 HONORIO DELGADO ESPINOZA
 
Gracias papá hombre_letra y acordes de guitarra.pdf
Gracias papá hombre_letra y acordes de guitarra.pdfGracias papá hombre_letra y acordes de guitarra.pdf
Gracias papá hombre_letra y acordes de guitarra.pdf
 
Mapa Mental documentos que rigen el sistema de evaluación
Mapa Mental documentos que rigen el sistema de evaluaciónMapa Mental documentos que rigen el sistema de evaluación
Mapa Mental documentos que rigen el sistema de evaluación
 
MATERIAL ESCOLAR 2024-2025 3 AÑOS CEIP SAN CRISTÓBAL
MATERIAL ESCOLAR 2024-2025 3 AÑOS CEIP SAN CRISTÓBALMATERIAL ESCOLAR 2024-2025 3 AÑOS CEIP SAN CRISTÓBAL
MATERIAL ESCOLAR 2024-2025 3 AÑOS CEIP SAN CRISTÓBAL
 
Sesión de clase: El conflicto inminente.
Sesión de clase: El conflicto inminente.Sesión de clase: El conflicto inminente.
Sesión de clase: El conflicto inminente.
 
p4s.co Ecosistema de Ecosistemas - Diagrama.pdf
p4s.co Ecosistema de Ecosistemas - Diagrama.pdfp4s.co Ecosistema de Ecosistemas - Diagrama.pdf
p4s.co Ecosistema de Ecosistemas - Diagrama.pdf
 
Estás conmigo Jesús amigo_letra y acordes de guitarra.pdf
Estás conmigo Jesús amigo_letra y acordes de guitarra.pdfEstás conmigo Jesús amigo_letra y acordes de guitarra.pdf
Estás conmigo Jesús amigo_letra y acordes de guitarra.pdf
 
Presentación simple corporativa degradado en violeta blanco.pdf
Presentación simple corporativa degradado en violeta blanco.pdfPresentación simple corporativa degradado en violeta blanco.pdf
Presentación simple corporativa degradado en violeta blanco.pdf
 
2024 planificacion microcurricular 7mo A matutino..docx
2024 planificacion microcurricular 7mo A matutino..docx2024 planificacion microcurricular 7mo A matutino..docx
2024 planificacion microcurricular 7mo A matutino..docx
 
La vida de Martin Miguel de Güemes para niños de primaria
La vida de Martin Miguel de Güemes para niños de primariaLa vida de Martin Miguel de Güemes para niños de primaria
La vida de Martin Miguel de Güemes para niños de primaria
 
ANALISIS CRITICO DEL PENSAMIENTO COLONIAL Y DESCOLONIZACION
ANALISIS CRITICO DEL PENSAMIENTO COLONIAL Y DESCOLONIZACIONANALISIS CRITICO DEL PENSAMIENTO COLONIAL Y DESCOLONIZACION
ANALISIS CRITICO DEL PENSAMIENTO COLONIAL Y DESCOLONIZACION
 
Mi Comunidad En El Sector Monterrey-Poste Blanco
Mi Comunidad En El Sector Monterrey-Poste BlancoMi Comunidad En El Sector Monterrey-Poste Blanco
Mi Comunidad En El Sector Monterrey-Poste Blanco
 
Hablemos de ESI para estudiantes Cuadernillo
Hablemos de ESI para estudiantes CuadernilloHablemos de ESI para estudiantes Cuadernillo
Hablemos de ESI para estudiantes Cuadernillo
 
PLAN 365 Presentación Gobierno 2024 (1).pdf
PLAN 365 Presentación Gobierno 2024  (1).pdfPLAN 365 Presentación Gobierno 2024  (1).pdf
PLAN 365 Presentación Gobierno 2024 (1).pdf
 
FEEDBACK DE LA ESTRUCTURA CURRICULAR- 2024.pdf
FEEDBACK DE LA ESTRUCTURA CURRICULAR- 2024.pdfFEEDBACK DE LA ESTRUCTURA CURRICULAR- 2024.pdf
FEEDBACK DE LA ESTRUCTURA CURRICULAR- 2024.pdf
 
Ejercicios-de-Calculo-de-Goteo-Enfermeria1-1.ppt
Ejercicios-de-Calculo-de-Goteo-Enfermeria1-1.pptEjercicios-de-Calculo-de-Goteo-Enfermeria1-1.ppt
Ejercicios-de-Calculo-de-Goteo-Enfermeria1-1.ppt
 

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