PRESENTACIÓN

En esta oportunidad como proyecto final del curso de autómatas y compiladores vamos a crear un compilador con las herramientas jflex y cup para el lenguaje c++ pero desarrollado en java con el IDE netbeans.

domingo, 27 de agosto de 2017

PRIMERO :
Descargaremos las herramientas a utilizar como son el JFLEX Y CUP
Aqui les dejaremos los link de descarga de cada uno.
JFLEX:
CUP:
http://www2.cs.tum.edu/projects/cup/
 Ya una vez descargados lo guardamos en una carpeta


SEGUNDO:
Añadimos estas librerías al programa netbeans para así poder comenzar a realizar nuestro compilador.


luego de haber agregado nuestras librerías comenzaremos a realizar nuestro compilador.

TERCERO:
ANALIZADOR LÉXICO
También conocido como scanner.
Es la primera fase de un compilador la cual consiste en un programa que recibe como entrada el código fuente y produce una salida compuesta de tokens o símbolos.Estos tokens sirven para una posterior etapa del proceso de traducción, siendo la entrada para el analizador sintáctico.
Usaremos el  jflex  el cual  es una herramienta desarrollada en Java, la cual genera un programa en Java a partir de una especificación en el que se indican los tokens permitidos por nuestro lenguaje.

Un archivo de especificación para JLex esta organizado en tres secciones, separadas por:
%%, y tiene el siguiente formato:
Codigo de usuario
%%
Directivas JLex
%%
Expresiones regulares
%%
debe estar al principio de la 1 linea. El resto de la 1 linea conteniendo %% debe descartarse y no debe usarse para declaraciones o codigo.
Para esto creamos en el netbeans un archivo vació y lo nombramos con extención  .flex en el cual vamos a colocar las expresiones regulares, ya sea para los identificadores asi como los tipo de datos y palabras reservadas que nuestro lenguaje acepta en nuestro caso sera c++.
aquí se muestra el archivo .flex

Luego de crear nuestro archivo . flex y colocar toda los símbolos que tiene que aceptar nuestro lenguaje debemos de compilarlo para esto vamos a crear una clase que se encarge de esto, llamada genera_lex la cual contendra la ruta donde se encuentra nuestro archivo .flex ,al ejecutarla nos creara un archivo con una extencion .lex.
CUARTO:
Luego de realizar nuestro analizador léxico y generar nuestro archivo  .lex  entonces ya estamos listo para realizar el siguiente paso el análisis sintáctico.
ANÁLISIS SINTÁTICO
El analizador sintactico (parser) recibe los tokens y determina si dicha cadena puede
ser generada por una gramatica. Para ello debe encontrarse un arbol de analisis sintactico o,
en su defecto, generar un error. A su vez este deber a recuperarse de los errores que ocurren
frecuentemente para poder continuar procesando el resto de la entrada.
Para este proceso usaremos el CUP que es una herramienta desarrollada en Java para crear analizadores sintácticos.

en las imágenes mostramos el archivo cup

Genera dos clases en Java, por default sym y parser, a partir de una especi cación en la que se
indica una gramática formal así como también se asocian una serie de acciones a los símbolos
aparecidos en cada regla gramatical. Por tanto esta herramienta cubre la fase de analisis
sintáctico por el proceso de traducción dirigida por la sintaxis. También de ne un interfaz para
acoplarse a los analizadores lexicos construidos con JLex.
La clase sym esta constituida por los símbolos terminales declarados en la gramática,la cual es utilizada para hacer referencia a los mismos.
La clase parser contiene al analizador sintactico.
Un archivo de entrada para CUP consta de las siguientes 5 secciones:
1. De nición de paquete e importación de paquetes necesarios.
2. Código de usuario.
3. Declaración de símbolos terminales y no terminales.
4. Declaraciones de precedencia.
5. De nición del símbolo inicial de la gramática y las reglas de producción.
Para poder obtener esos 2 clases anteriormente mencionadas tendremos que compilar nuestro archivo cup para esto creamos una clase llamada Genera_Cup que hará este trabajo










En este caso se nos creara la clases Símbolos  y Sintáctico ya que esos nombres le dimos la clase que se ejecutara.