SlideShare una empresa de Scribd logo
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

PDF
Analizador de una matriz utilizando compiladores
PDF
PDF
Reporte unidad3
PPTX
Python boloñesa
PDF
Practicas en matlab
PPT
Groupware
PDF
Ejercicio compiladores
Analizador de una matriz utilizando compiladores
Reporte unidad3
Python boloñesa
Practicas en matlab
Groupware
Ejercicio compiladores

Similar a Compilador concatenacion (20)

PDF
Documeto compilardorcontadorletras
PDF
Compilador Usando Jflex y Cup
PDF
Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...
PDF
Proyecto de compiladores Sentencia While con Java CUP y JFLEX
PDF
Compilador para la generación de código a partir de las iniciales de los nomb...
PDF
Raúl A Gómez A -> Compilador Cambia de Color a una palabra ingresada
PDF
Compilador Convertidor de Divisas
PDF
Informe compilador divisor
PDF
Compilador sobre conversión de unidades
PDF
Compiladores informe final
PDF
PDF
Compilador (divisor de cantidades )
PDF
Compilador divisor de cantidades con Jflex y Cup
PDF
04 j flex
PDF
Ensayo Compilador Suma y Resta
PDF
Compilador para calcular el área de figuras Triangulo, Cuadrado y Rectángulo.
PDF
Compilador - Área de trapecio
PDF
Manual de Compiladores Léxico y Sintáctico.pdf
ODP
J Flex Cup
PDF
Articulo
Documeto compilardorcontadorletras
Compilador Usando Jflex y Cup
Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...
Proyecto de compiladores Sentencia While con Java CUP y JFLEX
Compilador para la generación de código a partir de las iniciales de los nomb...
Raúl A Gómez A -> Compilador Cambia de Color a una palabra ingresada
Compilador Convertidor de Divisas
Informe compilador divisor
Compilador sobre conversión de unidades
Compiladores informe final
Compilador (divisor de cantidades )
Compilador divisor de cantidades con Jflex y Cup
04 j flex
Ensayo Compilador Suma y Resta
Compilador para calcular el área de figuras Triangulo, Cuadrado y Rectángulo.
Compilador - Área de trapecio
Manual de Compiladores Léxico y Sintáctico.pdf
J Flex Cup
Articulo
Publicidad

Último (20)

PDF
Tomo 1 de biologia gratis ultra plusenmas
PPT
Cosacos y hombres del Este en el Heer.ppt
PDF
Unidad de Aprendizaje 5 de Educacion para el Trabajo EPT Ccesa007.pdf
PDF
ciencias-1.pdf libro cuarto basico niños
PDF
Breve historia de los Incas -- Patricia Temoche [Temoche, Patricia] -- Breve ...
DOCX
PROYECTO DE APRENDIZAJE para la semana de fiestas patrias
PDF
Conecta con la Motivacion - Brian Tracy Ccesa007.pdf
DOCX
V UNIDAD - SEGUNDO GRADO. del mes de agosto
DOCX
2 GRADO UNIDAD 5 - 2025.docx para primaria
PDF
GUIA DE: CANVA + INTELIGENCIA ARTIFICIAL
PDF
Punto Critico - Brian Tracy Ccesa007.pdf
DOCX
UNIDAD DE APRENDIZAJE 5 AGOSTO tradiciones
PDF
COMPLETO__PROYECTO_VIVAN LOS NIÑOS Y SUS DERECHOS_EDUCADORASSOS.pdf
PDF
Integrando la Inteligencia Artificial Generativa (IAG) en el Aula
PDF
Cronograma de clases de Práctica Profesional 2 2025 UDE.pdf
PDF
Metodologías Activas con herramientas IAG
PDF
Crear o Morir - Andres Oppenheimer Ccesa007.pdf
PDF
Escuela Sabática 6. A través del Mar Rojo.pdf
PDF
La Evaluacion Formativa en Nuevos Escenarios de Aprendizaje UGEL03 Ccesa007.pdf
PDF
el - LIBRO-PACTO-EDUCATIVO-GLOBAL-OIEC.pdf
Tomo 1 de biologia gratis ultra plusenmas
Cosacos y hombres del Este en el Heer.ppt
Unidad de Aprendizaje 5 de Educacion para el Trabajo EPT Ccesa007.pdf
ciencias-1.pdf libro cuarto basico niños
Breve historia de los Incas -- Patricia Temoche [Temoche, Patricia] -- Breve ...
PROYECTO DE APRENDIZAJE para la semana de fiestas patrias
Conecta con la Motivacion - Brian Tracy Ccesa007.pdf
V UNIDAD - SEGUNDO GRADO. del mes de agosto
2 GRADO UNIDAD 5 - 2025.docx para primaria
GUIA DE: CANVA + INTELIGENCIA ARTIFICIAL
Punto Critico - Brian Tracy Ccesa007.pdf
UNIDAD DE APRENDIZAJE 5 AGOSTO tradiciones
COMPLETO__PROYECTO_VIVAN LOS NIÑOS Y SUS DERECHOS_EDUCADORASSOS.pdf
Integrando la Inteligencia Artificial Generativa (IAG) en el Aula
Cronograma de clases de Práctica Profesional 2 2025 UDE.pdf
Metodologías Activas con herramientas IAG
Crear o Morir - Andres Oppenheimer Ccesa007.pdf
Escuela Sabática 6. A través del Mar Rojo.pdf
La Evaluacion Formativa en Nuevos Escenarios de Aprendizaje UGEL03 Ccesa007.pdf
el - LIBRO-PACTO-EDUCATIVO-GLOBAL-OIEC.pdf
Publicidad

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