SlideShare una empresa de Scribd logo
1 de 10
Descargar para leer sin conexión
PFM-CIS-IXB
UNIVERSIDAD
NACIONAL
DE LOJA
´Area de la Energ´ıa las Industrias y los Recursos Naturales No
Renovables
Carrera de Ingenier´ıa en Sistemas
COMPILADORES
PROBLEMA: “CONCATENACION
DE PALABRAS”
Noveno B
Alumna:
• Cueva Riofrio, Jessica Mercedes
Docente: Henry, Paz
Loja-Ecuador
Septiembre 2014-Febrero 2015
´Indice
A. DESARROLLO 3
1 . PROBLEMA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2 . ANALIZADOR L´EXICO . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2 .1. LIBRERIA jflex.jar . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2 .2. ARCHIVO FLEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3 . ANALIZADOR SINT´ACTICO . . . . . . . . . . . . . . . . . . . . . . . . 5
3 .1. LIBRER´IA CUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3 .2. ARCHIVO CUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
B. Conclusiones 9
C. Recomendaciones 9
2
A. DESARROLLO
1 . PROBLEMA
CONCATENACI´ON DE PALABRAS
El compilador resuelve la uni´on de palabras formadas por may´usculas,min´usculas y
n´umeros.
1 La sintaxis que admite el compilador es: (palabra1+palabra2)
2 El par´entesis ( al inicio indica que inicia la expresi´on.
3 El s´ımbolo + indica la concatenaci´on o uni´on de las palabras.
4 El par´entesis ) al final indica el final de la expresi´on.
5 Al momento de unir dos palabras se ignora los espacios.
2 . ANALIZADOR L´EXICO
El analizador l´exico es la base para crear un compilador, para poder generar el ana-
lizador l´exico en nuestro proyecto necesitamos descargar la librer´ıa jFlex.jar, adem´as de
crear el archivo .flex.
2 .1. LIBRERIA jflex.jar
Esta librer´ıa nos permite crear el archivo .java del analizador l´exico sin errores.
La librer´ıa jflex.jar la podemos descargar del siguiente link: http://www.java2s.com/
Code/Jar/j/DownloadJFlexjar.htm
Una vez descargada la libreria jflex.jar la a˜nadimos al proyecto.
2 .2. ARCHIVO FLEX
El archivo .flex es la base para poder construir nuestro analizador l´exico, este archivo
en el compilador se llama analiLex.flex y est´a estructurado por 3 partes:
Secci´on de importaciones
% %
Secci´on de opciones y declaraciones
% %
Secci´on de reglas l´exicas
3
Secci´on de importaciones
En esta secci´on colocamos en la primera l´ınea en c´odigo java el paquete en el que
se encuentra nuestro archivo analiLex.flex, luego procedemos a importar las clases que
vamos a utilizar para crear nuestro compilador, en nuestro caso son las siguientes:
Creamos el paquete donde se encuentra el archivo analiLex.flex
/* Codigo de Usuario*/
package archivojflex;
Importamos java cup.runtime.* con la finalidad que exista comunicaci´on instant´anea
con el analizador sint´actico.
import java_cup.runtime.*;
import java.io.Reader;
Secci´on de opciones y declaraciones
Aqu´ı colocamos el nombre de la clase java que va a tomar nuestro analizador l´exico %class
AnalizadorFlex, acceso a la columna y fila de an´alisis CUP %line y %column, habilitamos
la compatibilidad con la interfaz CUP para el generador sint´actico %cup, quedando esta
secci´on de la siguiente manera:
%%
%class AnalizadorFlex
%line
%column
%cup
Declaraciones: son m´etodos en c´odigo java para identificar los s´ımbolos o token del
compilador
%{
private Symbol symbol(int type) {
return new Symbol(type, yyline, yycolumn);
}
private Symbol symbol(int type, Object value) {
return new Symbol(type, yyline, yycolumn, value);
}
%}
Macro declaraciones: son declaraci´on de variables que se utilizaran en la siguiente
secci´on, para determinar las reglas l´exicas del compilador:
4
Salto = r|n|rn
Espacio = {Salto} | [ tf]
Dig = 0 | [1-9][0-9]*
Letras = [a-zA-Z_]
Por ´ultimo en nuestro archivo analiLex.flex colocamos la tercera secci´on:
Secci´on de reglas l´exicas
Esta secci´on se refiere a las reglas l´exicas que va a tener el compilador. Las que permi-
ten identificar los s´ımbolos retornando un valor dependiendo del s´ımbolo que ingresemos
y si ingresamos una palabra retornara PALABRA:
%%
/*Seccion de reglas lexicas*/
<YYINITIAL> {
"+" {return new Symbol(sym.MAS);}
"(" {return new Symbol(sym.ABPARENT);}
")" {return new Symbol(sym.CEPARENT);}
({Letras}|{Dig})*{Letras} |({Letras}|{Dig})*{Dig} {return symbol(sym.PALABRA,
new String(yytext()));}
{Espacio} { /* ignora el espacio */ }
}
[ˆ] { throw new Error("Caracter ilegal <"+yytext()+">"); }
Una vez que hayamos construido el archivo analiLex.flex procedemos a generar la clase
AnalizadorLexico.java de la siguiente manera:
1. Creamos en nuestro proyecto una clase ejecutora denominada jlflex 2. Digitamos en
el main lo siguiente:
String [] flex = {"srcarchivosanaliLex.flex"};
jflex.Main.main(flex);
3. Lo ejecutamos
3 . ANALIZADOR SINT´ACTICO
El analizador sint´actico determina la sintaxis que va a tener el compilador, para crear
el analizador sint´actico necesitamos descargar la librer´ıa java-cup.jar, adem´as de la crea-
ci´on del archivo .cup.
5
3 .1. LIBRER´IA CUP
La librer´ıa java-cup.jar la podemos descargar del siguiente link: http://www2.cs.tum.
edu/projects/cup/.
Una vez descargada la librer´ıa java-cup.jar la a˜nadimos al proyecto en el que estamos
trabajando.
3 .2. ARCHIVO CUP
El archivo palabras.cup es la base para construir el analizador sint´actico y sem´antico,
est´a conformado por 5 partes que son las siguientes:
1 Especificaciones de “package” e “imports”.
2 Componentes de c´odigo de usuario.
3 Declaraci´on de s´ımbolos terminales y no terminales.
4 Declaraciones de precedencia.
5 Especificaci´on de la gram´atica.
1. Especificaciones de “package” e “imports”.
En esta parte se colocan: el paquete en el que se encuentra el archivo palabras.cup e
importaciones de clases de la librer´ıa java-cup.jar a utilizar en el proyecto, ademas estas
importaciones son necesaria dentro del c´odigo.
package ejemplocup;
import java_cup.runtime.*;
import java.io.FileReader;
2. Componentes de c´odigo de usuario
En el parser code{: :} de esta secci´on ponemos el c´odigo java de las acciones que va a
realizar el compilador, es decir, en este caso se realizaran dos m´etodos para la captura de
errores (n´umero de fila, n´umero de columna, el texto del error).
parser code {:
/* Reporte de error encontrado. */
public void report_error(String message, Object info) {
StringBuilder m = new StringBuilder("Error");
if (info instanceof java_cup.runtime.Symbol) {
java_cup.runtime.Symbol s = ((java_cup.runtime.Symbol) info);
if (s.left >= 0) {
6
m.append(" in line "+(s.left+1));
if (s.right >= 0)
m.append(", column "+(s.right+1));
}
}
if("#5".equals(info.toString())){
message=("Revise PARENTESIS del INICIO");
}
if("#0".equals(info.toString())){
message=("Revise PARENTESIS del FINAL");
}
if("#4".equals(info.toString())){
message=("Falta simbolo de SUMA");
}
m.append(" : "+message);
System.err.println(m);
}
public void report_fatal_error(String message, Object info) {
report_error(message, info);
System.exit(1);
}
:};
3. Declaraci´on de s´ımbolos terminales y no terminales
En los terminales colocamos los tokens o s´ımbolos que sirven para formar la expresi´on
gramatical del compilador.
/* Declaraci´on de s´ımbolos terminales y no terminales */
terminal MAS, ABPARENT, CEPARENT;
terminal String PALABRA;
En los no terminales se colocan las variables que van a componer la expresi´on grama-
tical, en este caso se hace de la siguiente manera:
non terminal Object expr_list, expr_part;
non terminal String palabra, expr;
donde:
expr list: es de tipo Object porque almacena un conjunto de expr part .
expr part: es de tipo Object porque almacena dos expr encerradas en par´entesis
expr
7
expr: es de tipo String porque almacena la uni´on o concatenaci´on de dos palabras
ejemplo palabra + palabra
palabra : es de tipo String, y es una palabra normal
4.Declaraciones de precedencia
Esta parte es opcional, en este caso no las necesitamos.
Por ´ultimo realizamos la quinta secci´on o parte del archivo palabras.cup.
5. Especificaci´on de la gram´atica
/*Expresiones gramaticales*/
expr_list ::= expr_list expr_part
|
expr_part
;
expr_part ::= ABPARENT expr:e CEPARENT
{:
System.out.println("");
:}
;
expr ::= palabra:e MAS palabra:v
{:
System.out.print("Concatenado: "+e+v);
:}
;
palabra ::= PALABRA:e
{:
RESULT = e;
:}
;
Una vez construido el archivo palabras.cup procedemos a generar AnalizadorSin-
tac.java de la siguiente manera:
1. Creamos en nuestro proyecto una clase ejecutora denominada MainCup
2. Digitamos en el main lo siguiente:
8
String [] option=new String [5];
option[0]="-destdir";
option[1]="src" +File.separator+"archivos";
option[2]="-parser";
option[3]="AnalizadorSintac";
option[4]="src"+File.separator+"archivos"+File.separator+"palabras.cup";
try {
java_cup.Main.main(option);
} catch (Exception e) {
System.out.println("Error en: "+ e);
}
3. Lo ejecutamos
El c´odigo del compilador para la concatenaci´on de palabras lo podr´an encontrar en el
siguiente link: https://github.com/mechasjessy/CompiladorConcatencion/
B. Conclusiones
- Para crear compiladores de debe tener conocimiento e investigar la estructura de
cada archivo (Lex y Cup).
- El compilador esta compuesto por: analizador l´exico, analizador sint´actico y ana-
lizador sem´antico, de los cuales se debe tener un conocimiento de la funci´on que
realizan estos en el compilador.
- Hay que tener muy en claro el compilador que deseamos construir para no tener
problemas en el transcurso de la construcci´on de los analizadores.
C. Recomendaciones
- Nunca olvidar a˜nadir las librer´ıas jflex.jar y java-cup.jar al proyecto.
- En los archivo lex y cup en la primera parte no olvidar colocar el nombre de la
carpeta donde se va a generar el java de nuestros analizadores.
9
Referencias
[1] “Breve Introducci´on a CUP”. Fundamentos de Ordenadores I. Disponible en: http:
//www.it.uc3m.es/˜luis/fo1/p/CUP.html
[2] R. A. Vega Castro.(Octubre-2008). “Integraci´on de JFlex y CUP”. Disponible en:
http://www.rafaelvega.com/wp-content/uploads/Articulo.pdf
[3] Open Fecks. Estructura del Archivo JLex. Disponible en: https://openfecks.
wordpress.com/jlex-y-cup/plantilla-archivo-jlex/
10

Más contenido relacionado

Similar a Compilador concatenacion

Raúl A Gómez A -> Compilador Cambia de Color a una palabra ingresada
Raúl  A Gómez A -> Compilador Cambia de Color  a una palabra ingresadaRaúl  A Gómez A -> Compilador Cambia de Color  a una palabra ingresada
Raúl A Gómez A -> Compilador Cambia de Color a una palabra ingresadaRaul
 
Compilador Usando Jflex y Cup
Compilador Usando Jflex y CupCompilador Usando Jflex y Cup
Compilador Usando Jflex y Cupditopo
 
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
 
Compiladores informe final
Compiladores informe finalCompiladores informe final
Compiladores informe finalPriscila Morocho
 
Proyecto de compiladores Sentencia While con Java CUP y JFLEX
Proyecto de compiladores Sentencia While con Java CUP y JFLEXProyecto de compiladores Sentencia While con Java CUP y JFLEX
Proyecto de compiladores Sentencia While con Java CUP y JFLEXIvan Luis Jimenez
 
Informe compilador divisor
Informe compilador divisorInforme compilador divisor
Informe compilador divisorSoraya Lara
 
Compilador (divisor de cantidades )
Compilador (divisor de cantidades )Compilador (divisor de cantidades )
Compilador (divisor de cantidades )Soraya Lara
 
Compilador divisor de cantidades con Jflex y Cup
Compilador divisor de cantidades con Jflex y CupCompilador divisor de cantidades con Jflex y Cup
Compilador divisor de cantidades con Jflex y CupSoraya Lara
 
Compilador - Área de trapecio
Compilador - Área de trapecioCompilador - Área de trapecio
Compilador - Área de trapecioByron Cabrera
 
Inf 10 (operaciones por pantalla) get
Inf 10 (operaciones por pantalla) getInf 10 (operaciones por pantalla) get
Inf 10 (operaciones por pantalla) getCarlos Guzmán
 
Cap3
Cap3Cap3
Cap3CJAO
 
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.pdfDavidErnestoT
 

Similar a Compilador concatenacion (20)

Raúl A Gómez A -> Compilador Cambia de Color a una palabra ingresada
Raúl  A Gómez A -> Compilador Cambia de Color  a una palabra ingresadaRaúl  A Gómez A -> Compilador Cambia de Color  a una palabra ingresada
Raúl A Gómez A -> Compilador Cambia de Color a una palabra ingresada
 
Compilador Convertidor de Divisas
Compilador Convertidor de DivisasCompilador Convertidor de Divisas
Compilador Convertidor de Divisas
 
Documeto compilardorcontadorletras
Documeto compilardorcontadorletrasDocumeto compilardorcontadorletras
Documeto compilardorcontadorletras
 
Compilador Usando Jflex y Cup
Compilador Usando Jflex y CupCompilador Usando Jflex y Cup
Compilador Usando Jflex y Cup
 
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...
 
Compiladores informe final
Compiladores informe finalCompiladores informe final
Compiladores informe final
 
Proyecto de compiladores Sentencia While con Java CUP y JFLEX
Proyecto de compiladores Sentencia While con Java CUP y JFLEXProyecto de compiladores Sentencia While con Java CUP y JFLEX
Proyecto de compiladores Sentencia While con Java CUP y JFLEX
 
Jlex Cup
Jlex CupJlex Cup
Jlex Cup
 
Informe compilador divisor
Informe compilador divisorInforme compilador divisor
Informe compilador divisor
 
Informe 7
Informe 7Informe 7
Informe 7
 
Compilador (divisor de cantidades )
Compilador (divisor de cantidades )Compilador (divisor de cantidades )
Compilador (divisor de cantidades )
 
Compilador divisor de cantidades con Jflex y Cup
Compilador divisor de cantidades con Jflex y CupCompilador divisor de cantidades con Jflex y Cup
Compilador divisor de cantidades con Jflex y Cup
 
Computación 3 sb04003 2013
Computación 3 sb04003 2013Computación 3 sb04003 2013
Computación 3 sb04003 2013
 
Computación 3
Computación 3Computación 3
Computación 3
 
Compilador - Área de trapecio
Compilador - Área de trapecioCompilador - Área de trapecio
Compilador - Área de trapecio
 
Inf 10 (operaciones por pantalla) get
Inf 10 (operaciones por pantalla) getInf 10 (operaciones por pantalla) get
Inf 10 (operaciones por pantalla) get
 
Cap3
Cap3Cap3
Cap3
 
Java script
Java scriptJava script
Java script
 
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
 

Último

Manual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfManual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfMaryRotonda1
 
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxlclcarmen
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfAngélica Soledad Vega Ramírez
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFAROJosé Luis Palma
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Lourdes Feria
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADauxsoporte
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.amayarogel
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptxJunkotantik
 
Neurociencias para Educadores NE24 Ccesa007.pdf
Neurociencias para Educadores  NE24  Ccesa007.pdfNeurociencias para Educadores  NE24  Ccesa007.pdf
Neurociencias para Educadores NE24 Ccesa007.pdfDemetrio Ccesa Rayme
 
programa dia de las madres 10 de mayo para evento
programa dia de las madres 10 de mayo  para eventoprograma dia de las madres 10 de mayo  para evento
programa dia de las madres 10 de mayo para eventoDiegoMtsS
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIACarlos Campaña Montenegro
 
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxEXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxPryhaSalam
 
RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxAna Fernandez
 
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Carlos Muñoz
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónLourdes Feria
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptELENA GALLARDO PAÚLS
 

Último (20)

Manual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfManual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdf
 
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
 
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
 
La Trampa De La Felicidad. Russ-Harris.pdf
La Trampa De La Felicidad. Russ-Harris.pdfLa Trampa De La Felicidad. Russ-Harris.pdf
La Trampa De La Felicidad. Russ-Harris.pdf
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDAD
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptx
 
Neurociencias para Educadores NE24 Ccesa007.pdf
Neurociencias para Educadores  NE24  Ccesa007.pdfNeurociencias para Educadores  NE24  Ccesa007.pdf
Neurociencias para Educadores NE24 Ccesa007.pdf
 
programa dia de las madres 10 de mayo para evento
programa dia de las madres 10 de mayo  para eventoprograma dia de las madres 10 de mayo  para evento
programa dia de las madres 10 de mayo para evento
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
 
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxEXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
 
RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docx
 
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcción
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
 
Defendamos la verdad. La defensa es importante.
Defendamos la verdad. La defensa es importante.Defendamos la verdad. La defensa es importante.
Defendamos la verdad. La defensa es importante.
 

Compilador concatenacion

  • 1. PFM-CIS-IXB UNIVERSIDAD NACIONAL DE LOJA ´Area de la Energ´ıa las Industrias y los Recursos Naturales No Renovables Carrera de Ingenier´ıa en Sistemas COMPILADORES PROBLEMA: “CONCATENACION DE PALABRAS” Noveno B Alumna: • Cueva Riofrio, Jessica Mercedes Docente: Henry, Paz Loja-Ecuador Septiembre 2014-Febrero 2015
  • 2. ´Indice A. DESARROLLO 3 1 . PROBLEMA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2 . ANALIZADOR L´EXICO . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2 .1. LIBRERIA jflex.jar . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2 .2. ARCHIVO FLEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 . ANALIZADOR SINT´ACTICO . . . . . . . . . . . . . . . . . . . . . . . . 5 3 .1. LIBRER´IA CUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3 .2. ARCHIVO CUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 B. Conclusiones 9 C. Recomendaciones 9 2
  • 3. A. DESARROLLO 1 . PROBLEMA CONCATENACI´ON DE PALABRAS El compilador resuelve la uni´on de palabras formadas por may´usculas,min´usculas y n´umeros. 1 La sintaxis que admite el compilador es: (palabra1+palabra2) 2 El par´entesis ( al inicio indica que inicia la expresi´on. 3 El s´ımbolo + indica la concatenaci´on o uni´on de las palabras. 4 El par´entesis ) al final indica el final de la expresi´on. 5 Al momento de unir dos palabras se ignora los espacios. 2 . ANALIZADOR L´EXICO El analizador l´exico es la base para crear un compilador, para poder generar el ana- lizador l´exico en nuestro proyecto necesitamos descargar la librer´ıa jFlex.jar, adem´as de crear el archivo .flex. 2 .1. LIBRERIA jflex.jar Esta librer´ıa nos permite crear el archivo .java del analizador l´exico sin errores. La librer´ıa jflex.jar la podemos descargar del siguiente link: http://www.java2s.com/ Code/Jar/j/DownloadJFlexjar.htm Una vez descargada la libreria jflex.jar la a˜nadimos al proyecto. 2 .2. ARCHIVO FLEX El archivo .flex es la base para poder construir nuestro analizador l´exico, este archivo en el compilador se llama analiLex.flex y est´a estructurado por 3 partes: Secci´on de importaciones % % Secci´on de opciones y declaraciones % % Secci´on de reglas l´exicas 3
  • 4. Secci´on de importaciones En esta secci´on colocamos en la primera l´ınea en c´odigo java el paquete en el que se encuentra nuestro archivo analiLex.flex, luego procedemos a importar las clases que vamos a utilizar para crear nuestro compilador, en nuestro caso son las siguientes: Creamos el paquete donde se encuentra el archivo analiLex.flex /* Codigo de Usuario*/ package archivojflex; Importamos java cup.runtime.* con la finalidad que exista comunicaci´on instant´anea con el analizador sint´actico. import java_cup.runtime.*; import java.io.Reader; Secci´on de opciones y declaraciones Aqu´ı colocamos el nombre de la clase java que va a tomar nuestro analizador l´exico %class AnalizadorFlex, acceso a la columna y fila de an´alisis CUP %line y %column, habilitamos la compatibilidad con la interfaz CUP para el generador sint´actico %cup, quedando esta secci´on de la siguiente manera: %% %class AnalizadorFlex %line %column %cup Declaraciones: son m´etodos en c´odigo java para identificar los s´ımbolos o token del compilador %{ private Symbol symbol(int type) { return new Symbol(type, yyline, yycolumn); } private Symbol symbol(int type, Object value) { return new Symbol(type, yyline, yycolumn, value); } %} Macro declaraciones: son declaraci´on de variables que se utilizaran en la siguiente secci´on, para determinar las reglas l´exicas del compilador: 4
  • 5. Salto = r|n|rn Espacio = {Salto} | [ tf] Dig = 0 | [1-9][0-9]* Letras = [a-zA-Z_] Por ´ultimo en nuestro archivo analiLex.flex colocamos la tercera secci´on: Secci´on de reglas l´exicas Esta secci´on se refiere a las reglas l´exicas que va a tener el compilador. Las que permi- ten identificar los s´ımbolos retornando un valor dependiendo del s´ımbolo que ingresemos y si ingresamos una palabra retornara PALABRA: %% /*Seccion de reglas lexicas*/ <YYINITIAL> { "+" {return new Symbol(sym.MAS);} "(" {return new Symbol(sym.ABPARENT);} ")" {return new Symbol(sym.CEPARENT);} ({Letras}|{Dig})*{Letras} |({Letras}|{Dig})*{Dig} {return symbol(sym.PALABRA, new String(yytext()));} {Espacio} { /* ignora el espacio */ } } [ˆ] { throw new Error("Caracter ilegal <"+yytext()+">"); } Una vez que hayamos construido el archivo analiLex.flex procedemos a generar la clase AnalizadorLexico.java de la siguiente manera: 1. Creamos en nuestro proyecto una clase ejecutora denominada jlflex 2. Digitamos en el main lo siguiente: String [] flex = {"srcarchivosanaliLex.flex"}; jflex.Main.main(flex); 3. Lo ejecutamos 3 . ANALIZADOR SINT´ACTICO El analizador sint´actico determina la sintaxis que va a tener el compilador, para crear el analizador sint´actico necesitamos descargar la librer´ıa java-cup.jar, adem´as de la crea- ci´on del archivo .cup. 5
  • 6. 3 .1. LIBRER´IA CUP La librer´ıa java-cup.jar la podemos descargar del siguiente link: http://www2.cs.tum. edu/projects/cup/. Una vez descargada la librer´ıa java-cup.jar la a˜nadimos al proyecto en el que estamos trabajando. 3 .2. ARCHIVO CUP El archivo palabras.cup es la base para construir el analizador sint´actico y sem´antico, est´a conformado por 5 partes que son las siguientes: 1 Especificaciones de “package” e “imports”. 2 Componentes de c´odigo de usuario. 3 Declaraci´on de s´ımbolos terminales y no terminales. 4 Declaraciones de precedencia. 5 Especificaci´on de la gram´atica. 1. Especificaciones de “package” e “imports”. En esta parte se colocan: el paquete en el que se encuentra el archivo palabras.cup e importaciones de clases de la librer´ıa java-cup.jar a utilizar en el proyecto, ademas estas importaciones son necesaria dentro del c´odigo. package ejemplocup; import java_cup.runtime.*; import java.io.FileReader; 2. Componentes de c´odigo de usuario En el parser code{: :} de esta secci´on ponemos el c´odigo java de las acciones que va a realizar el compilador, es decir, en este caso se realizaran dos m´etodos para la captura de errores (n´umero de fila, n´umero de columna, el texto del error). parser code {: /* Reporte de error encontrado. */ public void report_error(String message, Object info) { StringBuilder m = new StringBuilder("Error"); if (info instanceof java_cup.runtime.Symbol) { java_cup.runtime.Symbol s = ((java_cup.runtime.Symbol) info); if (s.left >= 0) { 6
  • 7. m.append(" in line "+(s.left+1)); if (s.right >= 0) m.append(", column "+(s.right+1)); } } if("#5".equals(info.toString())){ message=("Revise PARENTESIS del INICIO"); } if("#0".equals(info.toString())){ message=("Revise PARENTESIS del FINAL"); } if("#4".equals(info.toString())){ message=("Falta simbolo de SUMA"); } m.append(" : "+message); System.err.println(m); } public void report_fatal_error(String message, Object info) { report_error(message, info); System.exit(1); } :}; 3. Declaraci´on de s´ımbolos terminales y no terminales En los terminales colocamos los tokens o s´ımbolos que sirven para formar la expresi´on gramatical del compilador. /* Declaraci´on de s´ımbolos terminales y no terminales */ terminal MAS, ABPARENT, CEPARENT; terminal String PALABRA; En los no terminales se colocan las variables que van a componer la expresi´on grama- tical, en este caso se hace de la siguiente manera: non terminal Object expr_list, expr_part; non terminal String palabra, expr; donde: expr list: es de tipo Object porque almacena un conjunto de expr part . expr part: es de tipo Object porque almacena dos expr encerradas en par´entesis expr 7
  • 8. expr: es de tipo String porque almacena la uni´on o concatenaci´on de dos palabras ejemplo palabra + palabra palabra : es de tipo String, y es una palabra normal 4.Declaraciones de precedencia Esta parte es opcional, en este caso no las necesitamos. Por ´ultimo realizamos la quinta secci´on o parte del archivo palabras.cup. 5. Especificaci´on de la gram´atica /*Expresiones gramaticales*/ expr_list ::= expr_list expr_part | expr_part ; expr_part ::= ABPARENT expr:e CEPARENT {: System.out.println(""); :} ; expr ::= palabra:e MAS palabra:v {: System.out.print("Concatenado: "+e+v); :} ; palabra ::= PALABRA:e {: RESULT = e; :} ; Una vez construido el archivo palabras.cup procedemos a generar AnalizadorSin- tac.java de la siguiente manera: 1. Creamos en nuestro proyecto una clase ejecutora denominada MainCup 2. Digitamos en el main lo siguiente: 8
  • 9. String [] option=new String [5]; option[0]="-destdir"; option[1]="src" +File.separator+"archivos"; option[2]="-parser"; option[3]="AnalizadorSintac"; option[4]="src"+File.separator+"archivos"+File.separator+"palabras.cup"; try { java_cup.Main.main(option); } catch (Exception e) { System.out.println("Error en: "+ e); } 3. Lo ejecutamos El c´odigo del compilador para la concatenaci´on de palabras lo podr´an encontrar en el siguiente link: https://github.com/mechasjessy/CompiladorConcatencion/ B. Conclusiones - Para crear compiladores de debe tener conocimiento e investigar la estructura de cada archivo (Lex y Cup). - El compilador esta compuesto por: analizador l´exico, analizador sint´actico y ana- lizador sem´antico, de los cuales se debe tener un conocimiento de la funci´on que realizan estos en el compilador. - Hay que tener muy en claro el compilador que deseamos construir para no tener problemas en el transcurso de la construcci´on de los analizadores. C. Recomendaciones - Nunca olvidar a˜nadir las librer´ıas jflex.jar y java-cup.jar al proyecto. - En los archivo lex y cup en la primera parte no olvidar colocar el nombre de la carpeta donde se va a generar el java de nuestros analizadores. 9
  • 10. Referencias [1] “Breve Introducci´on a CUP”. Fundamentos de Ordenadores I. Disponible en: http: //www.it.uc3m.es/˜luis/fo1/p/CUP.html [2] R. A. Vega Castro.(Octubre-2008). “Integraci´on de JFlex y CUP”. Disponible en: http://www.rafaelvega.com/wp-content/uploads/Articulo.pdf [3] Open Fecks. Estructura del Archivo JLex. Disponible en: https://openfecks. wordpress.com/jlex-y-cup/plantilla-archivo-jlex/ 10