Este documento describe el desarrollo de un compilador divisor de cantidades utilizando las herramientas JFlex y CUP. JFlex se utiliza para generar el analizador léxico y reconoce tokens como números, operadores y fin de línea. CUP se utiliza para generar el analizador sintáctico y define la gramática formal que representa expresiones aritméticas válidas de división. El compilador verifica la sintaxis y realiza la operación de división, reportando errores si la entrada no es válida.
Proyecto de compiladores Sentencia While con Java CUP y JFLEXIvan Luis Jimenez
Este documento describe un proyecto para simular la estructura de programación WHILE con JFLEX y JAVA CUP. Explica la estructura de los archivos JFlex y CUP, las clases para compilarlos y ejecutar el analizador léxico y sintáctico, y muestra capturas del programa funcionando correcta e incorrectamente. El objetivo es analizar expresiones WHILE validas e invalidas y detectar errores léxicos y sintácticos.
Este documento describe el desarrollo de un compilador mediante el uso de JFlex y CUP para analizar léxicamente y sintácticamente expresiones matemáticas. Se presenta el código para el analizador léxico creado con JFlex, el cual identifica tokens como números, variables, operadores y más. Luego, se muestra el código para el analizador sintáctico creado con CUP, el cual verifica que la sintaxis de las expresiones matemáticas ingresadas sea correcta de acuerdo a las reglas definidas. Finalmente,
Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...Diego Paúl Cuenca Quezada
El presente compilador denominado Inversor de Cadenas, como su nombre lo expresa, va a permitir a una cadena (String), ingresada previamente, encontrarle su inversa,
es decir si el valor dado es “Hola soy Diego Paul y estudio en la UNL”, la inversa encontrada por el compilador será “UNL la en estudio y Paul Diego soy Hola”. Para ello se
debe conocer primeramente la sintaxis de ingreso de datos del compilador, la cual será la siguiente:
INVERTIR(Cadena a invertir);
Este documento introduce las herramientas JFlex y Java CUP, las cuales generan analizadores léxicos y sintácticos respectivamente en Java. JFlex genera escáneres léxicos basados en expresiones regulares, mientras que Java CUP genera parsers sintácticos usando el método de análisis ascendente LALR. El documento explica cómo se usan estas herramientas dándoles archivos de especificación como entrada y luego utilizando las clases generadas en proyectos Java.
Este documento presenta el código HDL para un decodificador BCD a 7 segmentos. Describe la interfaz del decodificador, incluyendo las entradas, salidas y funciones. Explica conceptos clave como palabras reservadas, vectores, funciones y case statements. Finalmente, los estudiantes proporcionan conclusiones sobre las similitudes entre la programación HDL y los lenguajes de alto nivel como Java.
Jlex es una herramienta para generar analizadores léxicos que toma un archivo de entrada y crea archivos Java correspondientes, mientras que Java CUP es un generador de analizadores sintácticos que construye un analizador para una gramática especificada. El documento describe cómo instalar Jlex y Java CUP y cómo crear archivos .lex y .cup para definir los tokens léxicos y la gramática de una calculadora básica que evalúa expresiones aritméticas.
Este documento describe el proceso de instalación y uso de las herramientas JLex y CUP para generar un compilador aritmético básico. Explica cómo instalar el JDK, JLex, CUP y NetBeans, y luego crear archivos JLex y CUP para generar analizadores léxico y sintáctico. Finalmente integra las clases generadas en un proyecto de NetBeans para crear una calculadora funcional.
Proyecto de compiladores Sentencia While con Java CUP y JFLEXIvan Luis Jimenez
Este documento describe un proyecto para simular la estructura de programación WHILE con JFLEX y JAVA CUP. Explica la estructura de los archivos JFlex y CUP, las clases para compilarlos y ejecutar el analizador léxico y sintáctico, y muestra capturas del programa funcionando correcta e incorrectamente. El objetivo es analizar expresiones WHILE validas e invalidas y detectar errores léxicos y sintácticos.
Este documento describe el desarrollo de un compilador mediante el uso de JFlex y CUP para analizar léxicamente y sintácticamente expresiones matemáticas. Se presenta el código para el analizador léxico creado con JFlex, el cual identifica tokens como números, variables, operadores y más. Luego, se muestra el código para el analizador sintáctico creado con CUP, el cual verifica que la sintaxis de las expresiones matemáticas ingresadas sea correcta de acuerdo a las reglas definidas. Finalmente,
Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...Diego Paúl Cuenca Quezada
El presente compilador denominado Inversor de Cadenas, como su nombre lo expresa, va a permitir a una cadena (String), ingresada previamente, encontrarle su inversa,
es decir si el valor dado es “Hola soy Diego Paul y estudio en la UNL”, la inversa encontrada por el compilador será “UNL la en estudio y Paul Diego soy Hola”. Para ello se
debe conocer primeramente la sintaxis de ingreso de datos del compilador, la cual será la siguiente:
INVERTIR(Cadena a invertir);
Este documento introduce las herramientas JFlex y Java CUP, las cuales generan analizadores léxicos y sintácticos respectivamente en Java. JFlex genera escáneres léxicos basados en expresiones regulares, mientras que Java CUP genera parsers sintácticos usando el método de análisis ascendente LALR. El documento explica cómo se usan estas herramientas dándoles archivos de especificación como entrada y luego utilizando las clases generadas en proyectos Java.
Este documento presenta el código HDL para un decodificador BCD a 7 segmentos. Describe la interfaz del decodificador, incluyendo las entradas, salidas y funciones. Explica conceptos clave como palabras reservadas, vectores, funciones y case statements. Finalmente, los estudiantes proporcionan conclusiones sobre las similitudes entre la programación HDL y los lenguajes de alto nivel como Java.
Jlex es una herramienta para generar analizadores léxicos que toma un archivo de entrada y crea archivos Java correspondientes, mientras que Java CUP es un generador de analizadores sintácticos que construye un analizador para una gramática especificada. El documento describe cómo instalar Jlex y Java CUP y cómo crear archivos .lex y .cup para definir los tokens léxicos y la gramática de una calculadora básica que evalúa expresiones aritméticas.
Este documento describe el proceso de instalación y uso de las herramientas JLex y CUP para generar un compilador aritmético básico. Explica cómo instalar el JDK, JLex, CUP y NetBeans, y luego crear archivos JLex y CUP para generar analizadores léxico y sintáctico. Finalmente integra las clases generadas en un proyecto de NetBeans para crear una calculadora funcional.
Este documento proporciona una introducción a C++, describiendo conceptos como programación orientada a objetos, clases, objetos, encapsulación, polimorfismo, herencia, constructores y destructores. Explica las diferencias entre C y C++ y ofrece ejemplos de cómo crear clases, objetos y usar funciones miembro. También cubre temas como entrada/salida por consola y formato de salida.
El documento describe los pasos en el proceso de generación de código máquina a partir de un programa fuente. Explica que el front-end genera un código intermedio que luego es traducido a código de ensamblador teniendo en cuenta la arquitectura de la máquina. Se dividen los bloques básicos y se genera código para cada uno asignando variables a registros y memoria de forma eficiente.
El documento describe las fases principales de un compilador, incluyendo el análisis léxico, sintáctico y semántico en la etapa frontal, y la generación y optimización de código en la etapa trasera. También habla sobre la generación de código intermedio y el uso de una tabla de símbolos para almacenar información sobre identificadores.
Este documento presenta un tutorial de C++ dividido en 23 capítulos. El tutorial utiliza ejemplos sencillos de código para explicar conceptos básicos como funciones, tipos de datos, clases, herencia, entre otros. Cada capítulo contiene uno o más fragmentos de código con comentarios que describen su funcionalidad. El objetivo del tutorial es servir como referencia rápida para aprender los fundamentos del lenguaje C++.
El documento describe los conceptos básicos de los algoritmos. Define un algoritmo como una serie de pasos precisos, definidos y finitos para resolver un problema computacional. Explica que un algoritmo debe describir la entrada, el proceso y la salida. También cubre temas como la validez, eficiencia y optimización de los algoritmos.
Este documento explica los conceptos básicos de los scripts en Linux, incluyendo la definición de un script, cómo crear y ejecutar scripts, cómo pasar parámetros, variables especiales como $#, y estructuras condicionales como if/then. También cubre comandos como read, expr, test y select para leer entrada, hacer cálculos y mostrar menús en scripts.
El documento describe la estructura básica de un programa en C++, incluyendo las directivas de preprocesador, la función principal main(), declaraciones de variables globales, tipos de datos básicos y cabeceras de funciones. Explica conceptos como bibliotecas, prototipos de funciones, y el uso de instrucciones dentro del cuerpo de una función.
Un programa en C++ generalmente incluye directivas de preprocesador, la función main, que es el punto de entrada del programa, y funciones. Las directivas de preprocesador proveen instrucciones al compilador. La función main contiene el código principal del programa. Las funciones permiten dividir el programa en módulos independientes que realizan tareas específicas.
Este documento presenta una introducción a los scripts de shell. Explica cómo escribir un script de shell, incluyendo variables, el comando echo, aritmética y la sentencia read. También cubre temas como comillas, estado de salida, paso de parámetros y más. El objetivo es proporcionar una guía básica sobre cómo crear y usar scripts de shell de manera efectiva.
Un programa en C consta de tres partes principales: 1) el encabezamiento que declara variables y tipos de datos globales, 2) la función principal main que define la estructura del programa, y 3) funciones auxiliares llamadas por main. Los programas grandes se dividen en múltiples módulos compilados y enlazados separadamente. Las variables reservan memoria para almacenar valores de datos mientras que las constantes definen valores fijos a través de nombres simbólicos.
Este documento describe diferentes tipos de bibliotecas en C++, incluyendo bibliotecas estándar como iostream y math, bibliotecas definidas por el programador, y el uso de prototipos y llamadas a funciones. También explica conceptos como el namespace std y ejemplos de uso común de bibliotecas.
El documento describe las estructuras básicas para programar en C++, incluyendo la estructura básica de un programa con funciones, directivas de preprocesador y la función main. También describe los tipos de datos básicos como enteros, flotantes, caracteres y lógicos, así como estructuras de datos compuestas como structs, unions y clases para organizar los datos. Finalmente, explica las matrices dinámicas y la estructura básica de un programa C++ sin orientación a objetos.
1) El documento presenta un manual básico de programación en C++. 2) Explica los conceptos básicos de programación orientada a objetos como clases, objetos, mensajes, herencia y polimorfismo. 3) También cubre temas como tipos de datos abstractos, compilación de programas, entrada y salida de flujos en C++, y ejemplos de código.
El documento presenta una guía sobre el manejo de eventos en Java GUI. Explica que un evento se refiere a cualquier suceso posible en un programa y que en Java se utilizan clases como ActionListener para manejar eventos de elementos de la interfaz como botones. Luego, describe cómo se implementa el manejo de eventos en una aplicación de ejemplo que evalúa cadenas de texto según expresiones regulares. Finalmente, muestra fragmentos de código de las clases Eventos, VentanaPrincipal y PanelExpresión para ilustrar cómo se asignan los listeners de eventos.
La guía explica los conceptos básicos de la consola en Java, incluyendo cómo realizar entradas y salidas de datos a través de la consola. Se describen métodos como read(), println() y Scanner para la lectura y escritura en la consola. Además, se explica cómo utilizar JOptionPane para solicitar información al usuario a través de cuadros de diálogo.
El documento describe cómo personalizar una interfaz gráfica de usuario (GUI) en Java cambiando el color, tipo y tamaño de fuente de los componentes. Explica los tipos de fuentes y componentes GUI, y proporciona un ejemplo de diagrama de clases para una aplicación que captura datos de usuarios. El objetivo es modificar la apariencia predeterminada de la GUI del ejemplo.
Este documento describe la estructura básica de un programa en C++. Un programa en C++ típicamente incluye archivos de cabecera, declaraciones de variables globales, una función principal y otras funciones secundarias. La función principal contiene el cuerpo principal del programa, que puede incluir instrucciones declarativas, de entrada/salida, repetitivas y condicionales. Las funciones secundarias realizan tareas específicas y devuelven valores.
El documento describe la estructura básica de un programa en C++. Todo programa debe incluir archivos de cabecera, declarar variables globales, contener una función principal llamada main, e incluir el cuerpo del programa dentro de llaves. Las funciones se definen indicando su tipo de retorno, nombre, parámetros y bloque de instrucciones entre llaves.
Este documento describe cómo manejar datos mediante archivos planos en Java. Explica los conceptos básicos de archivos y los dos tipos principales: archivos planos y serializados. Luego, muestra cómo crear clases para leer y escribir en archivos planos, incluidos ejemplos de código. Finalmente, ilustra cómo probar el manejo de archivos a través de una clase de prueba.
Este documento describe el desarrollo de un compilador para dividir una cantidad de dinero en partes iguales entre un número determinado de personas. El compilador se desarrolla utilizando las librerías JFlex y CUP para el análisis léxico y sintáctico. Se define una gramática formal y reglas léxicas para reconocer los tokens. El compilador valida la sintaxis de la entrada y realiza la división, reportando errores si la entrada es inválida.
Compilador para la generación de código a partir de las iniciales de los nomb...Ana Mora
Este documento describe el desarrollo de un compilador que genera un código a partir de las iniciales de los nombres de una persona. El compilador consta de un analizador léxico, un analizador sintáctico y código para la ejecución. El analizador léxico define reglas léxicas y tokens mientras que el analizador sintáctico especifica una gramática para validar la cadena de entrada. El compilador genera un código de iniciales en mayúsculas a partir de nombres ingresados con cualquier combinación de mayúsculas y min
Este documento proporciona una introducción a C++, describiendo conceptos como programación orientada a objetos, clases, objetos, encapsulación, polimorfismo, herencia, constructores y destructores. Explica las diferencias entre C y C++ y ofrece ejemplos de cómo crear clases, objetos y usar funciones miembro. También cubre temas como entrada/salida por consola y formato de salida.
El documento describe los pasos en el proceso de generación de código máquina a partir de un programa fuente. Explica que el front-end genera un código intermedio que luego es traducido a código de ensamblador teniendo en cuenta la arquitectura de la máquina. Se dividen los bloques básicos y se genera código para cada uno asignando variables a registros y memoria de forma eficiente.
El documento describe las fases principales de un compilador, incluyendo el análisis léxico, sintáctico y semántico en la etapa frontal, y la generación y optimización de código en la etapa trasera. También habla sobre la generación de código intermedio y el uso de una tabla de símbolos para almacenar información sobre identificadores.
Este documento presenta un tutorial de C++ dividido en 23 capítulos. El tutorial utiliza ejemplos sencillos de código para explicar conceptos básicos como funciones, tipos de datos, clases, herencia, entre otros. Cada capítulo contiene uno o más fragmentos de código con comentarios que describen su funcionalidad. El objetivo del tutorial es servir como referencia rápida para aprender los fundamentos del lenguaje C++.
El documento describe los conceptos básicos de los algoritmos. Define un algoritmo como una serie de pasos precisos, definidos y finitos para resolver un problema computacional. Explica que un algoritmo debe describir la entrada, el proceso y la salida. También cubre temas como la validez, eficiencia y optimización de los algoritmos.
Este documento explica los conceptos básicos de los scripts en Linux, incluyendo la definición de un script, cómo crear y ejecutar scripts, cómo pasar parámetros, variables especiales como $#, y estructuras condicionales como if/then. También cubre comandos como read, expr, test y select para leer entrada, hacer cálculos y mostrar menús en scripts.
El documento describe la estructura básica de un programa en C++, incluyendo las directivas de preprocesador, la función principal main(), declaraciones de variables globales, tipos de datos básicos y cabeceras de funciones. Explica conceptos como bibliotecas, prototipos de funciones, y el uso de instrucciones dentro del cuerpo de una función.
Un programa en C++ generalmente incluye directivas de preprocesador, la función main, que es el punto de entrada del programa, y funciones. Las directivas de preprocesador proveen instrucciones al compilador. La función main contiene el código principal del programa. Las funciones permiten dividir el programa en módulos independientes que realizan tareas específicas.
Este documento presenta una introducción a los scripts de shell. Explica cómo escribir un script de shell, incluyendo variables, el comando echo, aritmética y la sentencia read. También cubre temas como comillas, estado de salida, paso de parámetros y más. El objetivo es proporcionar una guía básica sobre cómo crear y usar scripts de shell de manera efectiva.
Un programa en C consta de tres partes principales: 1) el encabezamiento que declara variables y tipos de datos globales, 2) la función principal main que define la estructura del programa, y 3) funciones auxiliares llamadas por main. Los programas grandes se dividen en múltiples módulos compilados y enlazados separadamente. Las variables reservan memoria para almacenar valores de datos mientras que las constantes definen valores fijos a través de nombres simbólicos.
Este documento describe diferentes tipos de bibliotecas en C++, incluyendo bibliotecas estándar como iostream y math, bibliotecas definidas por el programador, y el uso de prototipos y llamadas a funciones. También explica conceptos como el namespace std y ejemplos de uso común de bibliotecas.
El documento describe las estructuras básicas para programar en C++, incluyendo la estructura básica de un programa con funciones, directivas de preprocesador y la función main. También describe los tipos de datos básicos como enteros, flotantes, caracteres y lógicos, así como estructuras de datos compuestas como structs, unions y clases para organizar los datos. Finalmente, explica las matrices dinámicas y la estructura básica de un programa C++ sin orientación a objetos.
1) El documento presenta un manual básico de programación en C++. 2) Explica los conceptos básicos de programación orientada a objetos como clases, objetos, mensajes, herencia y polimorfismo. 3) También cubre temas como tipos de datos abstractos, compilación de programas, entrada y salida de flujos en C++, y ejemplos de código.
El documento presenta una guía sobre el manejo de eventos en Java GUI. Explica que un evento se refiere a cualquier suceso posible en un programa y que en Java se utilizan clases como ActionListener para manejar eventos de elementos de la interfaz como botones. Luego, describe cómo se implementa el manejo de eventos en una aplicación de ejemplo que evalúa cadenas de texto según expresiones regulares. Finalmente, muestra fragmentos de código de las clases Eventos, VentanaPrincipal y PanelExpresión para ilustrar cómo se asignan los listeners de eventos.
La guía explica los conceptos básicos de la consola en Java, incluyendo cómo realizar entradas y salidas de datos a través de la consola. Se describen métodos como read(), println() y Scanner para la lectura y escritura en la consola. Además, se explica cómo utilizar JOptionPane para solicitar información al usuario a través de cuadros de diálogo.
El documento describe cómo personalizar una interfaz gráfica de usuario (GUI) en Java cambiando el color, tipo y tamaño de fuente de los componentes. Explica los tipos de fuentes y componentes GUI, y proporciona un ejemplo de diagrama de clases para una aplicación que captura datos de usuarios. El objetivo es modificar la apariencia predeterminada de la GUI del ejemplo.
Este documento describe la estructura básica de un programa en C++. Un programa en C++ típicamente incluye archivos de cabecera, declaraciones de variables globales, una función principal y otras funciones secundarias. La función principal contiene el cuerpo principal del programa, que puede incluir instrucciones declarativas, de entrada/salida, repetitivas y condicionales. Las funciones secundarias realizan tareas específicas y devuelven valores.
El documento describe la estructura básica de un programa en C++. Todo programa debe incluir archivos de cabecera, declarar variables globales, contener una función principal llamada main, e incluir el cuerpo del programa dentro de llaves. Las funciones se definen indicando su tipo de retorno, nombre, parámetros y bloque de instrucciones entre llaves.
Este documento describe cómo manejar datos mediante archivos planos en Java. Explica los conceptos básicos de archivos y los dos tipos principales: archivos planos y serializados. Luego, muestra cómo crear clases para leer y escribir en archivos planos, incluidos ejemplos de código. Finalmente, ilustra cómo probar el manejo de archivos a través de una clase de prueba.
Este documento describe el desarrollo de un compilador para dividir una cantidad de dinero en partes iguales entre un número determinado de personas. El compilador se desarrolla utilizando las librerías JFlex y CUP para el análisis léxico y sintáctico. Se define una gramática formal y reglas léxicas para reconocer los tokens. El compilador valida la sintaxis de la entrada y realiza la división, reportando errores si la entrada es inválida.
Compilador para la generación de código a partir de las iniciales de los nomb...Ana Mora
Este documento describe el desarrollo de un compilador que genera un código a partir de las iniciales de los nombres de una persona. El compilador consta de un analizador léxico, un analizador sintáctico y código para la ejecución. El analizador léxico define reglas léxicas y tokens mientras que el analizador sintáctico especifica una gramática para validar la cadena de entrada. El compilador genera un código de iniciales en mayúsculas a partir de nombres ingresados con cualquier combinación de mayúsculas y min
El siguiente compilador lo que va a resolver es la conversión de números enteros a binarios, para que se realice la operación se deberá ingresar el número a convertir seguido de la palabra reservada convertir, por ejemplo: 256 convertir.
Este documento describe el desarrollo de un compilador que convierte números escritos en letras a su valor entero equivalente. Explica la estructura de los archivos FLEX y CUP necesarios, incluyendo las secciones, reglas y gramática requeridas. También cubre la generación del código Java y la ejecución del compilador.
Compilador para calcular el área de figuras Triangulo, Cuadrado y Rectángulo.Paola Morocho Arévalo
Este documento describe un compilador para calcular el área de figuras geométricas como cuadrado, triángulo y rectángulo. Explica las fases del compilador incluyendo análisis léxico y sintáctico realizados con las herramientas Flex y CUP. Define los tokens, gramáticas y código para detectar errores. El objetivo es resolver el cálculo de áreas mediante la entrada de sentencias y el reconocimiento de la figura y valores ingresados.
Este documento describe el desarrollo de un compilador para concatenar palabras utilizando los analizadores léxico y sintáctico. Explica cómo crear el analizador léxico con JFlex mediante el archivo .flex y el analizador sintáctico con CUP usando el archivo .cup. Luego resume las conclusiones y recomendaciones para construir compiladores de manera efectiva.
Cursos gratis de programación en Java. JSE Avanzado: asserts, lambda, loggers, patrones de diseño. Orientado a Grado, DAM y DAW. Otros cursos disponibles para Android, Swift, Base de datos, javascript, servicios y procesos...
Este documento describe un compilador que realiza la suma y resta de dos números enteros de dos dígitos. El compilador acepta como entrada números en formato invertido separados por los operadores "MAS" o "MENOS" y finalizados por "h". El analizador léxico y sintáctico fueron implementados en archivos .flex y .cup respectivamente.
Raúl A Gómez A -> Compilador Cambia de Color a una palabra ingresadaRaul
Este documento describe el desarrollo de un compilador que permite cambiar el color de una palabra ingresada. Explica las etapas de creación del analizador léxico, la clase token, el analizador sintáctico y la interfaz gráfica. El compilador analiza la cadena de entrada para verificar la estructura correcta y detectar errores léxicos y sintácticos.
Este documento proporciona instrucciones sobre cómo implementar entradas y salidas en Java utilizando el paquete Swing. Explica cómo usar JOptionPane para leer datos de entrada y mostrar resultados mediante cuadros de diálogo. También incluye ejemplos de código para leer datos de tipo String y entero, así como mostrar mensajes. Finaliza con un ejercicio propuesto para practicar estas técnicas.
Este documento presenta una guía sobre pseudocódigo, incluyendo su objetivo, introducción, sintaxis, estructuras de control de flujo, funciones y una breve bibliografía. Explica que el pseudocódigo permite representar algoritmos de manera escrita, siguiendo reglas sintácticas como el uso de mayúsculas, sangría y tipos de datos como enteros y cadenas. También describe estructuras como condicionales, repetitivas y funciones para dividir problemas en subprocesos más sencillos.
Este documento describe el desarrollo de un compilador simple para calcular el área de un trapecio. Explica la estructura de los archivos Flex y Cup que componen el analizador léxico y sintáctico, respectivamente. También incluye un ejemplo de entrada, las reglas gramaticales y los posibles errores. El objetivo es crear un compilador funcional que pueda calcular el área de un trapecio según la fórmula dada y los números de entrada provistos por el usuario.
Este documento describe la creación de un compilador que cuenta el número de letras minúsculas en una cadena de texto. Explica el análisis léxico realizado con JFlex y el análisis sintáctico con CUP. Define las expresiones regulares para identificar tokens como cadenas de texto, símbolos de puntuación y errores léxicos. Luego, las reglas de producción para validar la sintaxis de cadenas de texto delimitadas por paréntesis y separadas por punto y coma.
El documento describe el desarrollo de una aplicación de cajero automático usando formularios en Eclipse. Se detalla el uso de componentes como JLabels, JButtons y cajas de texto para simular el ingreso de usuario, contraseña, depósitos y retiros. El programa mantiene un saldo actualizado y muestra mensajes a los usuarios.
El documento describe el desarrollo de una aplicación de cajero automático usando formularios en Eclipse. Los estudiantes aprendieron a crear interfaces gráficas, usar componentes como botones y etiquetas, y realizar operaciones básicas como depósitos, retiros y mostrar el saldo mediante el uso de clases, métodos y estructuras condicionales. El proyecto simula las funciones de un cajero automático permitiendo ingresar un usuario y contraseña, realizar transacciones y visualizar resultados.
El documento describe el desarrollo de una aplicación de cajero automático en Eclipse usando formularios. El objetivo era aplicar conocimientos sobre formularios en Eclipse. Se creó un proyecto en Eclipse con dos formularios, uno para inicio de sesión y otro para simular las funciones de un cajero. El formulario de inicio de sesión incluye campos para usuario y contraseña. El formulario del cajero permite depósitos, retiros y muestra el saldo actual.
El documento describe una aplicación en Java que muestra conceptos de programación orientada a objetos como clases, objetos, atributos, métodos y herencia. La aplicación consta de tres clases: la clase Exploit que define los atributos y métodos de objetos exploit, la clase WinExploit heredada de Exploit, y la clase App que crea objetos de las clases anteriores y muestra su información.
Similar a Compilador divisor de cantidades con Jflex y Cup (20)
Business Plan -rAIces - Agro Business Techjohnyamg20
Innovación y transparencia se unen en un nuevo modelo de negocio para transformar la economia popular agraria en una agroindustria. Facilitamos el acceso a recursos crediticios, mejoramos la calidad de los productos y cultivamos un futuro agrícola eficiente y sostenible con tecnología inteligente.
Soluciones Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinar...Juan Martín Martín
Criterios de corrección y soluciones al examen de Geografía de Selectividad (EvAU) Junio de 2024 en Castilla La Mancha.
Soluciones al examen.
Convocatoria Ordinaria.
Examen resuelto de Geografía
conocer el examen de geografía de julio 2024 en:
https://blogdegeografiadejuan.blogspot.com/2024/06/soluciones-examen-de-selectividad.html
http://blogdegeografiadejuan.blogspot.com/
José Luis Jiménez Rodríguez
Junio 2024.
“La pedagogía es la metodología de la educación. Constituye una problemática de medios y fines, y en esa problemática estudia las situaciones educativas, las selecciona y luego organiza y asegura su explotación situacional”. Louis Not. 1993.
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
C¸ OMPILADOR DIVISOR DE
CANTIDADES”
MODULO IX B
Autores:
SORAYA ISAMAR LARA TAPIA
Docente:
ING. HENRY PAZ
Fecha:
13 FEBRERO 2014
Loja-Ecuador
Septiembre 2014 - Julio 2015
1
3. 1. Problema:
Un compilador que permita dividir en partes iguales el total de una cantidad de dinero
para un numero determinado de personas las cuales tienen que ser diferentes de cero.
1.1. Ejemplo
35 / 5 igual 7
2. Aut´omata
a continuaci´on presentamos la representaci´on del aut´omata el cual representa la es-
tructura del compilador Figura 1.
Figura 1: Aut´omata del compilador
3. Desarrollo
Para el desarrollo del compilador se esa utilizando la librer´ıa JFLEX y CUP.
4. JFlex
Es una herramienta desarrollada en Java, la cual genera un programa en Java a partir
de una especificaci´on en el que se indican los tokens permitidos por nuestro lenguaje.
Un archivo de especificaci´on para JFLex esta organizado en tres secciones, separadas
por: “ % % ”.
3
4. 4.1. C´odigo de usuario.
En esta secci´on se crean las clases necesarias para nuestro analizador l´exico, las cuales
ser´an copiadas directamente al inicio del archivo de salida. Se importan los paquetes
necesarios.
Primero se declara el nombre del paquete en el cual esta contenido. Figura 2.
Figura 2: C´odigo de usuario
4.2. Directivas JFLex.
En esta secci´on se incluyen algunas reglas propias de JFLex. Tambi´en se pueden definir
macros, que resuman ciertas expresiones regulares que nos ser´an ´utiles al momento de
identificar tokens en la siguiente secci´on, y estados. Figura 3.
Figura 3: Directivas de Jflex
4
5. Cambiamos el nombre de la clase del analizador a Lexer. % class AnalizadorLexico
Realizamos la activaci´on del contador de lineas, variable yyline y el contador de co-
lumna, variable yycolumn.
%line
%column
luego hay que activar la compatibilidad con Java CUP para analizadores sintacticos.
% cup
Generamos un java cup.Symbol para guardar el tipo de token encontrado.
private Symbol symbol(int type) {
return new Symbol(type, yyline, yycolumn);
}
Tambi´en generamos un Symbol para el tipo de token encontrado junto con su valor.
private Symbol symbol(int type, Object value) {
return new Symbol(type, yyline, yycolumn, value);
}
Las Macro declaraciones Figura 4.
Figura 4: Las Macro declaraciones
Un salto de linea es un n, r.
Salto = r|n|rn
Espacio es un espacio en blanco, tabulador t, salto de linea o avance de pagina f,
normalmente son ignorados.
Espacio = {Salto} | [ tf]
para que reconozca n´umeros enteros:
Entero = 0 | [1-9][0-9]*
5
6. 4.3. Secci´on de reglas l´exicas
Esta secci´on contiene expresiones regulares y acciones. Las acciones son c´odigo en
Java Figura 5. que se ejecutara cuando se encuentre una entrada valida para la expresi´on
regular correspondiente.
Figura 5: Reglas l´exicas
YYINITIAL es el estado inicial del analizador lexico al escanear. Las expresiones
regulares solo ser´an comparadas si se encuentra en ese estado inicial. Es decir, cada vez
que se encuentra una coincidencia el scanner vuelve al estado inicial.
<YYINITIAL> {
/* Regresa que el token FINLINEA declarado en la clase sym fue encontrado.*/
";" { System.out.print(yytext()+" FinLinea "+" ["+yyline+","
+yycolumn+"] n");
return symbol(sym.FINLINEA);}
/*Regresa que el token OP_DIVISION declarado en la clase sym fue encontrado.*/
"/" { System.out.print( yytext()+" dividido "+" ["+yyline+","
+yycolumn+"] n");
return symbol(sym.OP_DIVISION);}
/* Regresa que el token OP_CERO declarado en la clase sym fue encontrado.*/
"0" { System.out.print( yytext()+" cero "+" ["+yyline+","
+yycolumn+"] n");
return symbol(sym.OP_CERO);}
/* Si se encuentra un n´umero, se imprime, se regresa un token numero
que representa un entero y el valor que se obtuvo de la cadena yytext
al convertirla a double. yytext es el token encontrado. */
6
7. {Entero} { System.out.print(yytext()+" numero "+" ["+yyline+","
+yycolumn+"] n");
return symbol(sym.ENTERO, new Double(yytext())); }
/* Se ignora si se encuentra el espacio en blanco */
{Espacio} { /* Ignora el espacio */ }
}
/* Si el car´acter ingresado no coincide con ninguna regla
Entonces se marca un token ilegal */
[ˆ] { System.err.println("El caracter ingresado es
invaido <"+yytext()+">"+"posicion"+"("+yyline+" "+yycolumn+")"); }
5. CUP
Para construir un compilador el segundo paso que debemos dar es el de desarrollar el
analizador sint´actico de nuestro lenguaje.
CUP desarrollada en Java para crear analizadores sint´acticos. Genera dos clases en
Java, por default sym y parser, a partir de una especificaci´on en la que se indica una
gram´atica formal as´ı como tambi´en se asocian una serie de acciones a los s´ımbolos apareci-
dos en cada regla gramatical. Tambi´en define un interfaz para acoplarse a los analizadores
l´exicos construidos con JFLex.
La clase sym esta constituida por los s´ımbolos terminales declarados en la gram´atica,la
cual es utilizada para hacer referencia a los mismos.
Un archivo de entrada para CUP consta de las siguientes secciones:
5.1. Definici´on de paquete e importaci´on de paquetes necesa-
rios.
En este secci´on se incluyen las construcciones para indicar que las clases Java genera-
das a partir de este archivo pertenecen a un determinado paquete y/o tambi´en importar
las clases Java necesarias. figura 6.
package ejemplocup;
import java_cup.runtime.*;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
7
8. Figura 6: Paquetes e importaciones
5.2. C´odigo de usuario.
En esta secci´on se puede incluir c´odigo Java del analizador sint´actico que se va a obte-
ner con CUP. En la primera parte tenemos el c´odigo para reportar los errores generados
al realizar un dato err´oneo figura 7.
Figura 7: M´etodo report error
Luego tenemos el m´etodo Main y Divisor que es que realiza la operaci´on de dividir
8
9. cantidades figura 8.
Figura 8: Metodo Main y divisi´on
/* C´odigo del parser, se copia ´ıntegramente a la clase final.
Agregamos el manejo de errores, el m´etodo de divisor y el main*/
parser code {:
/* Reporte de error encontrado. */
/* Creamos el meto report_error el cual recibe un mensaje y un objeto */
public void report_error(String message, Object info) {
/* Declaramos un StringBufer el cual contendr´a el mensaje*/
StringBuilder m = new StringBuilder("Error");
/*Agregamos un if el cual se analiza el objeto recibido instanceof
Sirve para conocer si un objeto de un tipo java_cup.runtime.Symbol*/
if (info instanceof java_cup.runtime.Symbol) {
//imprimimos objeto info para conocer su identificador
System.out.println("INFO ="+info);
/* Declaramos la variable s de tipo java_cup.runtime.Symbol
Donde se almacena el castin del info*/
java_cup.runtime.Symbol s = ((java_cup.runtime.Symbol) info);
/*if nos va a obtener la l´ınea y columna donde se encuentra el symbol*/
if (s.left >= 0) {
//agregamos al mensaje la l´ınea
m.append(" linea "+(s.left+1));
if (s.right >= 0)
//agregamos al mensaje la columna
m.append(", columna "+((s.right+1)-1));
9
10. }
/*Este if verifica el identificador es igual a 2 entonces
se trata del fin de l´ınea*/
if(s.sym==2){ message="est´a mal o no existe el fin de l´ınea"; }
/*Este if verifica el identificador es igual a 3
entonces se trata del OP_DIVISION*/
if(s.sym==3){message="tiene q existir numerador";}
/*Este if verifica el identificador es igual a 5
entonces se trata del ENTERO*/
if(s.sym==5){message="no puede existir dos numeros
continuos sin el operador";}
/*Este if verifica el identificador es igual a 4
entonces se trata del OP_CERO*/
if(s.sym==4){message="El numero para el cual se
divide debe ser mayor a cero ";}
}
//al mensaje le agregamos (:) para una comprensi´on mejor
m.append(" : "+message);
//imprimimos el error
System.err.println(m);
}
/* M´etodo main para garantizar la ejecuci´on del analizador l´exico y
sint´actico, Adem´as que se pase como par´ametro la tabla de s´ımbolos
correspondiente. */
public static void main(String[] args){
try {
AnalizadorSintactico asin = new AnalizadorSintactico(
new AnalizadorLexico( new FileReader(args[0])));
Object result = asin.parse().value;
} catch (Exception ex) {
// Imprimimos que existe un error al realizar la ejecuci´on
System.err.println("ERROR EN EL INGRESO DE DATOS");
}
}
/*Realizamos el m´etodo divisor que nos devuelve un double al
realizar la Operaci´on y recibe como para metro dos n´umeros */
public Double division(Double num1, Double mun2) {
// Variable para almacenar el resultado
Double todo;
//ejecuci´on de la operaci´on
todo= num1/mun2;
// Retornamos el valor de la operaci´on
return todo;
}
:};
10
11. 5.3. Declaraci´on de s´ımbolos terminales y no terminales.
En esta secci´on se declaran los s´ımbolos terminales y no terminales figura 9. de la
gram´atica que define el analizador sint´actico que deseamos producir. Tanto los s´ımbolos
no terminales como los s´ımbolos terminales pueden, tener asociado un objeto Java de una
cierta clase.
Figura 9: Declaraci´on de terminales y no terminales
/* ---Declaraci´on de s´ımbolos terminales y no terminales--- */
/* Terminales (tokens obtenidos por el analizador lexico).*/
terminal FINLINEA, OP_DIVISION, OP_CERO;
terminal Double ENTERO;
/* No terminales usados en la secci´on gramatical.e lista los no terminales que tien
un valor Object queNo tienen tipo, pudiendo ser entero o String. */
non terminal Object expr1, expr2;
non terminal Object sentencia;
5.4. Definici´on del s´ımbolo inicial de la gram´atica y las reglas
de producci´on
Las reglas de producci´on tienen esta sintaxis:
expresion ::= expresion < sımboloterminal > expresion{: codigo :};
Se pueden definir todas las reglas de producci´on que tengan a un mismo s´ımbolo no
terminal figure 10. como antecedente separandolas por el s´ımbolo |.
/* ------------------- Seccion de la gramatica ------------------------ */
/* La | sirve para indicar que es una producci´on u otra. Debemos pasar de s´ımbolos
terminales a s´ımbolos terminales. Una gram´atica que no Termina en s´ımbolos terminal
11
12. Figura 10: Secci´on Gramatical
se dice que no reduce, y por lo tanto nunca se finaliza Su procesado.*/
expr1 ::= expr1 expr2
|
expr2
;
/* En esta expresi´on se llama a la expresi´on sentencia para poder imprimir
el Resultado de en c´odigo java
*/
expr2 ::= sentencia:e
{:
System.out.println(" igual "+e);
:}
;
/*Puede ser una expresi´on que inicia por numero op_divido, de esa forma
se realiza Una divisi´on. En RESULT se almacena el valor de las acciones y
se pasa al siguiente nivel de la gram´atica.
*/
sentencia ::=
12
13. //sentencia incorrecta de la operaci´on
ENTERO:n OP_DIVISION ENTERO:m
{:
// C´odigo para obtener el objeto info del fin de l´ınea
CUP$AnalizadorSintactico$result = parser.getSymbolFactory().
newSymbol("sentencia",2,((java_cup.runtime.Symbol)
CUP$AnalizadorSintactico$stack.elementAt(CUP$
AnalizadorSintactico$top-2))((java_cup.runtime.Symbol)
CUP$AnalizadorSintactico$stack.peek()), RESULT);
// Llamamos al m´etodo report_error y enviamos el
//mensaje y el objeto tipo info
parser.report_error("Falta fin", CUP$AnalizadorSintactico$result);
:}
// o podemos tener la sentencia correcta
|
ENTERO:n OP_DIVISION ENTERO:m FINLINEA
{:
//El RESULT almacena el resultado de haber llamado el m´etodo divisi´on
RESULT=parser.division(n.doubleValue(), m.doubleValue());
:}
;
6. Sym
En esta clase java se generan los Tokens declarados y utilizados en la secci´on l´exica y
sint´actica figura 11.
Figura 11: Codigo java de la clase sym
13
14. package ejemplocup;
/** CUP generated class containing symbol constants. */
public class sym {
/* terminals */
public static final int OP_CERO = 4;
public static final int FINLINEA = 2;
public static final int error = 1;
public static final int OP_DIVISION = 3;
public static final int EOF = 0;
public static final int ENTERO = 5;
}
7. Control de errores
En la secci´on de errores podemos observar que el control se realiza en la parte de el
analizador sint´actico en el m´etodo de report error figura 12.
Figura 12: Errores sint´acticos
14
15. Y la parte de control de caracteres se realiza en la secci´on l´exica Figura 13.
Figura 13: Errores l´exicos
8. Funcionamiento del compilador
Lo que primero hacemos es escoger la opci´on 1 Figura 14. Generar del men´u en la cual
se generan la clase sym, AnalizadorLexico y AnalizadorSintactico.
Figura 14: Genraci´on de clase sym, AnalizadorLexico y AnalizadorSintactico
Luego realizamos el ingreso de caracteres validos. Ingresamos: 43/9; Figura 15.
15
16. Figura 15: Ejecuci´on correcta
Ahora vamos a presentar el control de algunos errores al ingresar mal los datos de
entrada
1. Cuando falta fin de linea ”43/9”. Figura 16.
Figura 16: Falta Fin de linea
2. Cuando se ingresa dos cantidades seguidas sin operador ”4 3 / 9;”. Figura 17.
Figura 17: Sin operador
16
17. 3. Cuando dividimos para cero ”43 /0;”Figura 18.
Figura 18: Denominador cero
4. Cuando no existe denominar el error interpreta como fin de linia al simbolo del
divisor ”43 /;”Figura 19.
Figura 19: Sin denominador
17
18. 5. Cuando no existe numerador /9;”Figura 20.
Figura 20: Sin numerador
6. Cuando se ingresa mal un car´acter ”43/hola;”Figura 21.
Figura 21: Caracteres inv´alidos
La c´odigo de este compilador se lo puede encontrar en:
https://code.google.com/p/compiladoresdivisor/source/browse/#svn%2Ftrunk
18
19. 9. BIBLIOGRAFIA
Referencias
[1] Antonio De Miguel Vicenti.2007 C¸ompilador de Pascal”. Disponible en:
http%3A%2F%2Fplg07082.googlecode.com%2Fsvn%2Ftrunk%2FDocumentaci%
25C3%25B3n%2FDOCUMENTACION%2520ENTREGA%2520FINAL%2FDOCUMENTACION%
2FANALISIS%2520LEXICO%2FDocumentacion%2520Analizador%2520Lexico.
pdf&ei=0gOOVNemE43asASVqYL4Bw&usg=AFQjCNEAOrPRo7wH_L7KLJ4bvbjCwvKzlQ
[2] Carlos III de Madrid, Departamento de ingenier´ıa telematoca, ” Fundamentos de
Ordenadores I: Breve Introducci´on a CUP” Disponible en: http://www.it.uc3m.
es/luis/fo1/p/CUP.html
[3] Compiladores: principios, t´ecnicas y herramientas. A.V. Aho, R. Sethi, J.D. Ull-
man. Addison-Wesley Iberoamerica. 1990. Disponible en: http://loscompiladores.
wordpress.com/category/analizador-sintactico/
[4] Enrique Arangurenn. .A
nalizador Sint´actico”, 2011. Disponible en: http://
loscompiladores.wordpress.com/category/analizador-sintactico/
[5] Open(fecks();). .Estructura Archivo JFLex”. Disponible en: http://openfecks.
wordpress.com/jFlex-y-cup/plantilla-archivo-jFlex/
[6] Salvador Sanchez, Daniel Rodrıguez, Departamento de Ciencias de Universidad
de Alcala, ”Procesadores de Lenguaje” Disponible en:http://www.cc.uah.es/ie/
docencia/ProcesadoresDeLenguaje/CUP.pdf
[7] Soraya Lara, Universidad Nacional de Loja, ” Divisor de cantidades C´odigo fuen-
te ”Disponible en:https://code.google.com/p/compiladoresdivisor/source/
browse/#svn%2Ftrunk
19