procesadores del lenguaje compilador de pascal entrega final grupo 2 daniel dionne gonzález alberto...
TRANSCRIPT
![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](https://reader036.vdocuments.pub/reader036/viewer/2022062807/5665b4341a28abb57c8ff7d7/html5/thumbnails/1.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062807/5665b4341a28abb57c8ff7d7/html5/thumbnails/2.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062807/5665b4341a28abb57c8ff7d7/html5/thumbnails/3.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062807/5665b4341a28abb57c8ff7d7/html5/thumbnails/4.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062807/5665b4341a28abb57c8ff7d7/html5/thumbnails/5.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062807/5665b4341a28abb57c8ff7d7/html5/thumbnails/6.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062807/5665b4341a28abb57c8ff7d7/html5/thumbnails/7.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062807/5665b4341a28abb57c8ff7d7/html5/thumbnails/8.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062807/5665b4341a28abb57c8ff7d7/html5/thumbnails/9.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062807/5665b4341a28abb57c8ff7d7/html5/thumbnails/10.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062807/5665b4341a28abb57c8ff7d7/html5/thumbnails/11.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062807/5665b4341a28abb57c8ff7d7/html5/thumbnails/12.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062807/5665b4341a28abb57c8ff7d7/html5/thumbnails/13.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062807/5665b4341a28abb57c8ff7d7/html5/thumbnails/14.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062807/5665b4341a28abb57c8ff7d7/html5/thumbnails/15.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062807/5665b4341a28abb57c8ff7d7/html5/thumbnails/16.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062807/5665b4341a28abb57c8ff7d7/html5/thumbnails/17.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062807/5665b4341a28abb57c8ff7d7/html5/thumbnails/18.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062807/5665b4341a28abb57c8ff7d7/html5/thumbnails/19.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062807/5665b4341a28abb57c8ff7d7/html5/thumbnails/20.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062807/5665b4341a28abb57c8ff7d7/html5/thumbnails/21.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062807/5665b4341a28abb57c8ff7d7/html5/thumbnails/22.jpg)
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