Ciclo While Con Jflex Cup
Ciclo While Con Jflex Cup
Ciclo While Con Jflex Cup
PROFESOR:
Rafael García Mencía
ALUMNOS:
Iván Luis Jiménez
Francisco Aguilar Jacobo
El objetivo de este proyecto es simular la estructura de programación WHILE con ayuda de JFLEX y
JAVA CUP. Como bien sabemos ésta estructura es algo compleja, ya que inicia con la palabra reservada
WHILE, después abre paréntesis, dentro del paréntesis se pueden agregar muchas instrucciones de
comparación, lógicas y más, cierra paréntesis, abre y cierra llaves. Nosotros sólo tomamos en cuentas
las más importantes y más usadas.
Contenido
Objetivo .................................................................................................................................................................................. 1
Desarrollo ...............................................................................................................................................................................3
Estructura del archivo JFlex: .....................................................................................................................................3
Estructura del archivo CUP: .........................................................................................................................................5
Clase para compilar los archivos JFLEX y CUP en JAVA ....................................................................................7
Clase para ejecutar el analizador léxico y sintáctico ...........................................................................................9
Corriendo el programa.................................................................................................................................................. 12
Desarrollo
Estructura del archivo JFlex:
Nombre del archivo: archivo_flex.flex
package Cup_and_Flex;
import java_cup.runtime.*;
import java.io.Reader;
%%
%{
System.out.println(": "+texto);
%}
/*DIRECTIVAS JLEX*/
%class AnalizadorLexico_While
%public
%full
%char
%line
%cup
%ignorecase
%eofval{
System.exit(0);
%eofval}
entero=[0-9]
Id=[a-zA-z][a-zA-Z0-9]
%%
"while" {imprime("mientras");}
({entero})+ {imprime("entero");}
{Id} {imprime("identificador");}
">" {imprime("mayor");}
"<" {imprime("menor");}
"true" {imprime("verdadero");}
"false" {imprime("falso");}
"||" {imprime("or");}
"&&" {imprime("and");}
[\t\r\n\f] {}
. {System.out.println("Error Léxico");}
Estructura del archivo CUP:
Nombre del archivo:archivo_cup.cup
package Cup_and_Flex;
import java_cup.runtime.*;
import java.io.FileReader;
parser code
{:
/**
**/
/**
**/
//" no reconocido.");
:}
terminal or_,and_,igual_igual,no_igual,mayor,menor,mayor_igual,menor_igual,numero,id,
open_par, close_par,open_corch, close_corch,truee,falsee;
non terminal Object MIENTRAS, SIMBOLOS_COMPARAR, TIPO_DATO, CONDICION,
EXPRESION_OR, EXPRESION_AND, IGEXP,CMP;
|EXPRESION_OR
|IGEXP
CONDICION::= EXPRESION_OR;
|EXPRESION_AND close_par;
|CMP;
SIMBOLOS_COMPARAR::= mayor
|menor
|mayor_igual
|menor_igual close_par;
|TIPO_DATO
TIPO_DATO::= id
|numero
|truee
|falsee close_par;
package Cup_and_Flex;
import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;
/**
*/
class Compilar_Cup_Flex {
compilar.compilar_archivos();
archLexico =
"C:\\Users\\Jony\\Documents\\HackPy\\While_Cup_and_Flex\\test\\Cup_and_Flex\\arc
hivo_flex.flex";
archSintactico =
"C:\\Users\\Jony\\Documents\\HackPy\\While_Cup_and_Flex\\test\\Cup_and_Flex\\arc
hivo_cup.cup";
jflex.Main.main(alexico);
try {
java_cup.Main.main(asintactico);
System.out.println("" + ex);
System.out.println("Generados correctamente!...");
if (arch.exists()) {
if (arch.renameTo(new File(nuevoDir))) {
efectuado = true;
} else {
} else {
return efectuado;
package Cup_and_Flex;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
/**
ejecutar.archivo();
ejecutar.ejecutar_analizador();
BufferedWriter bw = null;
if (archivo.exists()) {
try {
bw.write(expresion);
System.out.println("" + ex);
} else {
try {
try {
System.out.println("" + ex);
}
System.out.print("Escriba la expresion While:");
bw.write(expresion);
System.out.println("" + ex);
try {
bw.close();
System.out.println("");
System.out.println("*****Inicio Ejecuación*****");
try {
System.out.println("*****Resultados Finales******");
System.out.println("");
System.out.println("");
}
Corriendo el programa
Como la estructura está mal y además tiene variables o tokens que no fueron declarados, por lo tanto
el lenguaje lo desconoce y no lo acepta y marca error léxico.