Essays.club - Ensayos gratis, notas de cursos, notas de libros, tareas, monografías y trabajos de investigación
Buscar

Compilador Bitácora

Enviado por   •  27 de Noviembre de 2018  •  1.770 Palabras (8 Páginas)  •  240 Visitas

Página 1 de 8

...

- Sábado 10 de junio de 2017 Estructura de Archivo Cup

A continuación detallaré como se estructura un archivo de entrada para Cup.

Básicamente un archivo para Cup tiene la siguiente estructura:

Imports: En esta sección creo que no tengo que ampliar mucho desde que programamos Java sabemos como son los imports de librerias.

Código del Usuario para el Parser: Como el código Java es generado por la herramienta es muy difícil modificar lo en el archivo de salida. Así que aquí podemos declarar métodos y variables que pensamos usar en la clase resultante. Si se declaran variables o métodos públicos en esta sección estos podran ser accedidos por otras clases.

Se declara:

parser code {: /* Codigo del parser*/:}

Código del Usuario para las Acciones de la Gramática: Como nuestro propósito es el de generar un Compilador con estas herramientas o un interprete, necesitamos generar una salida ya sea esta errores semánticos, sintácticos o traducción a un código equivalente, para esto tenemos que hacer uso de traducciones dirigidas por sintaxis.

Se declara de la siguiente manera:

action code {:/*Codigo para las acciones*/:}

Declaración de Variables para la Gramática : En esta sección toca declarar las variables que se utilizaran en la gramática, estas variables pueden ser de dos tipos:

Variables Terminales

Variables No Terminales

Las variables terminales serán todos los símbolos terminales de la gramática y las variables No-Terminales serán todas las variables que representaran producciones.

La sintaxis para la declaración es la siguiente:

Donde puede ser Terminal o No terminal

puede ser cualquier tipo de dato primitivo de Java o uno creado por nosotros mismos. Si se no se especifica el tipo de dato Cup lo trabajará como un tipo de dato Symbol.

aquí se especifica el id de la variable, se puede usar una lista de identificadores separadas por coma si deseamos variables del mismo tipo. Gramática: En esta sección del archivo es donde escribiremos nuestra gramatica. La gramatica tiene la siguiente sintaxis :

::= ;

Como un no terminal puede tener mas de un lado derecho en Cup se utiliza el simbolo “|”

::=

| ;

Como es esperado se pueden escribir muchas producciones.

Ejemplo de un archivo cup para una Expresion Booleana:

action code{::}

parser code{::}

/*Declaracion de variables no terminales*/

non terminal COND, OREXP,ANDEXP,IGEXP,CMP,SIMBOLOSCOMPARAR,TIPO_DATO;

/*DECLARACION DE VARIABLES TERMINALES */

terminal or_,and_,igual_igual,no_igual,mayor, menor, mayor_igual,menor_igual,

open_par,close_par,id,numero,true,false;

Start with COND; // start with sirve para indicarle al parser con que produccion empezar

COND::=OREXP;

OREXP::=OREXP or_ ANDEXP

|ANDEXP;

ANDEXP::=ANDEXP and_ IGEXP

|IGEXP;

IGEXP::= IGEXP igual_igual CMP

|IGEXP no_igual CMP

|CMP;

SIMBOLOS_COMPARAR::=mayor

|menor

|mayor_igual

|menor_igual;

CMP::= CMP SIMBOLOS_COMPARAR TIPO_DATO

|TIPO_DATO

|open_par COND close_par ;

TIPO_DATO::= id

|numero

|true

|false;

5 Domingo 11 de junio de 2017 Integración Jlex con Cup

Ya que sabemos como hacer archivos de entrada para Jlex y Cup ahora es hora de hacer que funcionen en conjunto. Para hacer de mas ilustrativo el ejemplo usaremos una clase externa al scanner y al parser que nos servirá para almacenar información de cada token que se esta leyendo. Llamaremos a esta clase token

class token(){

int posicionX;

int posicionY;

String valor;

public token(String val,int x,int y){

this.valor=val;

this.posicionX=x;

this.posicionY=y;

}

public int getX(){return this.posicionX;}

public int getY(){ return this.posicionY;}

public String getValor(){return this.valor;}

}

Seguiremos con el ejemplo de la expresión condicional , para esto debemos escribir el archivo jlex para que reconozca las palabras reservadas ó terminales del lenguaje. El archivo quedaría de la siguiente forma:

import java_cup.runtime.Symbol;

%%

%{

public void imprime(String str){

System.out.println(str+"-"+yychar+"-"+yylinec

%public

...

Descargar como  txt (14 Kb)   pdf (67.6 Kb)   docx (22.7 Kb)  
Leer 7 páginas más »
Disponible sólo en Essays.club