Procesadores del Lenguaje Compilador de Pascal Entrega final Grupo 2 Daniel Dionne González Alberto...

22
Procesadores del Lenguaje Compilador de Pascal Entrega final Grupo 2 Daniel Dionne González Alberto Milán Gutiérrez Borja Gómez Gómez Antonio de Miguel Vicenti Miguel Martínez Segura

Transcript of Procesadores del Lenguaje Compilador de Pascal Entrega final Grupo 2 Daniel Dionne González Alberto...

Page 1: Procesadores del Lenguaje Compilador de Pascal Entrega final Grupo 2 Daniel Dionne González Alberto Milán Gutiérrez Borja Gómez Gómez Antonio de Miguel.

Procesadores del Lenguaje

Compilador de Pascal

Entrega final

Grupo 2

Daniel Dionne GonzálezAlberto Milán Gutiérrez

Borja Gómez GómezAntonio de Miguel VicentiMiguel Martínez Segura

Page 2: Procesadores del Lenguaje Compilador de Pascal Entrega final Grupo 2 Daniel Dionne González Alberto Milán Gutiérrez Borja Gómez Gómez Antonio de Miguel.

Objetivos.

Registros IF-THEN-ELSE (gramática LL(2) forzada) Bucle FOR Funciones

Procesadores del Lenguaje Práctica "Compilador de Pascal"

Entrega final2

Page 3: Procesadores del Lenguaje Compilador de Pascal Entrega final Grupo 2 Daniel Dionne González Alberto Milán Gutiérrez Borja Gómez Gómez Antonio de Miguel.

Procesadores del Lenguaje Práctica "Compilador de Pascal"

Entrega final3

Scanner.

Programado por el grupo 4:– Carlos Sánchez-Vellisco Sánchez– Martín Montalvo Martínez

Page 4: Procesadores del Lenguaje Compilador de Pascal Entrega final Grupo 2 Daniel Dionne González Alberto Milán Gutiérrez Borja Gómez Gómez Antonio de Miguel.

Scanner. Reglas.

Tokens de 4 atributos– Tipo de token, atributos, línea y columna

Generación del scanner directamente a partir de las expresiones regulares.

Procesadores del Lenguaje Práctica "Compilador de Pascal"

Entrega final4

Page 5: Procesadores del Lenguaje Compilador de Pascal Entrega final Grupo 2 Daniel Dionne González Alberto Milán Gutiérrez Borja Gómez Gómez Antonio de Miguel.

Scanner. Herramientas.

Scanner generado con Jflex. Interpreta las expresiones regulares con sus

acciones semánticas asociadas. Genera un analizador léxico que reconoce el

texto y va produciendo tokens.

Procesadores del Lenguaje Práctica "Compilador de Pascal"

Entrega final5

Page 6: Procesadores del Lenguaje Compilador de Pascal Entrega final Grupo 2 Daniel Dionne González Alberto Milán Gutiérrez Borja Gómez Gómez Antonio de Miguel.

Scanner. Detalles destacables.

Gestor de errores– Clase interna del scanner– Según el error lanzado devuelve el mensaje, la

línea y la columna.

Relación con la TS– Se configuran los atributos “lexema” y “tipo-token”

Page 7: Procesadores del Lenguaje Compilador de Pascal Entrega final Grupo 2 Daniel Dionne González Alberto Milán Gutiérrez Borja Gómez Gómez Antonio de Miguel.

Parser.

Programado por el grupo 4:– Carlos Sánchez-Vellisco Sánchez– Martín Montalvo Martínez

Procesadores del Lenguaje Práctica "Compilador de Pascal"

Entrega final7

Page 8: Procesadores del Lenguaje Compilador de Pascal Entrega final Grupo 2 Daniel Dionne González Alberto Milán Gutiérrez Borja Gómez Gómez Antonio de Miguel.

Parser. Reglas.

Parser descendente no recursivo predictivo (tabular)

Basado en gramática LL(1), excepto por el problema del else en la producción del if

Traducción dirigida por sintaxis

Procesadores del Lenguaje Práctica "Compilador de Pascal"

Entrega final8

Page 9: Procesadores del Lenguaje Compilador de Pascal Entrega final Grupo 2 Daniel Dionne González Alberto Milán Gutiérrez Borja Gómez Gómez Antonio de Miguel.

Parser. Herramientas.

Parser generado con SLK. Convierte una gramática definida en

notación similar a EBNF en un parser. Deja espacio para rellenar las reglas

semánticas pertinentes.

Procesadores del Lenguaje Práctica "Compilador de Pascal"

Entrega final9

Page 10: Procesadores del Lenguaje Compilador de Pascal Entrega final Grupo 2 Daniel Dionne González Alberto Milán Gutiérrez Borja Gómez Gómez Antonio de Miguel.

Semántico.

Programado por el grupo 2:– Antonio De Miguel Vicenti– Daniel Dionne González– Miguel Martínez Segura– Alberto Milán Gutiérrez– Borja Gómez Gómez

Procesadores del Lenguaje Práctica "Compilador de Pascal"

Entrega final10

Page 11: Procesadores del Lenguaje Compilador de Pascal Entrega final Grupo 2 Daniel Dionne González Alberto Milán Gutiérrez Borja Gómez Gómez Antonio de Miguel.

Semántico. Reglas.

Está fuertemente unido al parser Realiza las comprobaciones necesarias

sobre la salida del parser Llama al generador de código en las

producciones pertinentes Inserción de tipos en la tabla de símbolos Apertura y cierre de ámbitos Modo debug detallado

Procesadores del Lenguaje Práctica "Compilador de Pascal"

Entrega final11

Page 12: Procesadores del Lenguaje Compilador de Pascal Entrega final Grupo 2 Daniel Dionne González Alberto Milán Gutiérrez Borja Gómez Gómez Antonio de Miguel.

Semántico. Herramientas.

Semántico generado completando el parser cedido por el grupo 4, añadiendo las acciones necesarias

Librería SWT para ver la salida por pantalla

Procesadores del Lenguaje Práctica "Compilador de Pascal"

Entrega final12

Page 13: Procesadores del Lenguaje Compilador de Pascal Entrega final Grupo 2 Daniel Dionne González Alberto Milán Gutiérrez Borja Gómez Gómez Antonio de Miguel.

Semántico. Detalles destacables I

Clase Nodo.– Objeto similar a un token, con los mismos atributos, pero que

almacena la información de los elementos terminales y no terminales de la gramática.

Uso de dos pilas auxiliares sincronizadas.– Objetivo: Controlar la ejecución de las reglas de la gramática.– Pila: Almacena los Nodos habituales de las reglas de la

gramática.– PilaLista: Almacena, en caso de obtener una lista de

elementos desde la gramática mediante el parser, una copia básica para llevar la contabilidad de éstos.

Page 14: Procesadores del Lenguaje Compilador de Pascal Entrega final Grupo 2 Daniel Dionne González Alberto Milán Gutiérrez Borja Gómez Gómez Antonio de Miguel.

Semántico. Detalles destacables II

Clase “OptionalNonTerminals”.– Contiene un tipo enumerado con todas las

situaciones opcionales de la gramática. – Con estos enumerados se crea un array de flags.– En las acciones semanticas se consultan estos

flags para gestionar la interaccion con la TS. Ejemplos:

– Operadores– Encontrarse dentro de una declaración de función

Page 15: Procesadores del Lenguaje Compilador de Pascal Entrega final Grupo 2 Daniel Dionne González Alberto Milán Gutiérrez Borja Gómez Gómez Antonio de Miguel.

Generador de código.

Programado por el grupo 2:– Antonio De Miguel Vicenti– Daniel Dionne González– Miguel Martínez Segura– Alberto Milán Gutiérrez– Borja Gómez Gómez

Procesadores del Lenguaje Práctica "Compilador de Pascal"

Entrega final15

Page 16: Procesadores del Lenguaje Compilador de Pascal Entrega final Grupo 2 Daniel Dionne González Alberto Milán Gutiérrez Borja Gómez Gómez Antonio de Miguel.

Generador de código. Reglas.

El semántico genera los datos necesarios, recupera los tipos y llama al generador de código

El generador lleva un contador de etiquetas y una pila de variables para manejar la pila de datos en memoria

Procesadores del Lenguaje Práctica "Compilador de Pascal"

Entrega final16

Page 17: Procesadores del Lenguaje Compilador de Pascal Entrega final Grupo 2 Daniel Dionne González Alberto Milán Gutiérrez Borja Gómez Gómez Antonio de Miguel.

Generador de código. Herramientas.

No se han utilizado herramientas de desarrollo en esta parte

Se utiliza el intérprete ENS2001 para probar el código generado

Procesadores del Lenguaje Práctica "Compilador de Pascal"

Entrega final17

Page 18: Procesadores del Lenguaje Compilador de Pascal Entrega final Grupo 2 Daniel Dionne González Alberto Milán Gutiérrez Borja Gómez Gómez Antonio de Miguel.

Pruebas con errores léxicos

Procesadores del Lenguaje Práctica "Compilador de Pascal"

Entrega final18

program Prueba01;{cadena mal formada}var z : integer; x : integer; y : integer;

begin x := 3.2.1 + z; write (x); end.

program Prueba02;{carácter no reconocido}var ç : integer;

begin ç := 3;

end.

Page 19: Procesadores del Lenguaje Compilador de Pascal Entrega final Grupo 2 Daniel Dionne González Alberto Milán Gutiérrez Borja Gómez Gómez Antonio de Miguel.

Pruebas con errores sintácticos

Procesadores del Lenguaje Práctica "Compilador de Pascal"

Entrega final19

program prueba01;var a: integer;begin

a := ;end.

program prueba02;var a: integer;beginif (a<3)

a := a + a;end.

program prueba03;

var a: integer;

function Funcion (valor: integer) : integer;beginFuncion := 3;

begina := Funcion(3);end.

Page 20: Procesadores del Lenguaje Compilador de Pascal Entrega final Grupo 2 Daniel Dionne González Alberto Milán Gutiérrez Borja Gómez Gómez Antonio de Miguel.

Pruebas con errores semánticos

Procesadores del Lenguaje Práctica "Compilador de Pascal"

Entrega final20

program prueba01;{Errores en la comprobación de tipos}var x: integer; y: boolean;

begin x := y; end.

program prueba02;

{Error en el retorno de valores en funciones}

var x: integer;

y: boolean;

function Funcion: integer;

var k : integer;

begin

k := 1;

end;

begin

x := Funcion;

end.

program prueba03;

{Error en el retorno de valores en funciones}

var x: integer;

y: boolean;

function Funcion: integer;

begin

Funcion:=3;

Funcion:=2;

end;

begin

x := Funcion;

end.

Page 21: Procesadores del Lenguaje Compilador de Pascal Entrega final Grupo 2 Daniel Dionne González Alberto Milán Gutiérrez Borja Gómez Gómez Antonio de Miguel.

Código de prueba (I)

program Prueba01;

{Op. Arit. simple }

var z : integer;

x : integer;

y : integer;

begin

read(z);

read(y);

x := y + z;

write (x);

end.

program prueba02;{Prueba de escritura y lectura con registros}typeTCarta = record palo : integer; numero: integer; end; var x: TCarta; y: integer;

begin read(y); x.palo := y; read(y); x.numero := y; y := x.palo; write (y); y := x.numero; write (y); end.

program Prueba03; {devuelve el mayor}var a : integer; b : integer;

begin read(a); read(b); if (a<b) then write(a) else write(b); end.

Procesadores del Lenguaje Práctica "Compilador de Pascal"

Entrega final21

Page 22: Procesadores del Lenguaje Compilador de Pascal Entrega final Grupo 2 Daniel Dionne González Alberto Milán Gutiérrez Borja Gómez Gómez Antonio de Miguel.

Código de prueba ( y II)

program Prueba04;

{multiplica con sumas a*b}

type

TReg = record

m1 : integer;

m2 : integer;

resultado : integer;

end;

var a,b : integer;

x,y : integer;

mult : TReg;

function funcion (k : integer): integer;

begin

funcion := 0;

end;

begin

y := funcion(1);

read(a);

mult.m1:=a;

read(b);

mult.m2:=b;

if (mult.m1=1) then mult.resultado:=b else

for x := 1 to mult.m2 do

mult.resultado := mult.resultado+mult.m2;

y:=mult.resultado;

write(y)

end.

Procesadores del Lenguaje Práctica "Compilador de Pascal"

Entrega final22