Descargar la presentación
La descarga está en progreso. Por favor, espere
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 Vicenti Miguel Martínez Segura
2
Objetivos. Registros IF-THEN-ELSE (gramática LL(2) forzada) Bucle FOR
Funciones Procesadores del Lenguaje Práctica "Compilador de Pascal" Entrega final
3
Scanner. 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 final
4
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 final
5
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 final
6
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”
7
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 final
8
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 final
9
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 final
10
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 final
11
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 final
12
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 final
13
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.
14
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
15
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 final
16
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 final
17
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 final
18
Pruebas con errores léxicos
program Prueba01; {cadena mal formada} var z : integer; x : integer; y : integer; begin x := z; write (x); end. program Prueba02; {carácter no reconocido} var ç : integer; ç := 3; Procesadores del Lenguaje Práctica "Compilador de Pascal" Entrega final
19
Pruebas con errores sintácticos
program prueba01; var a: integer; begin a := ; end. program prueba02; if (a<3) a := a + a; program prueba03; function Funcion (valor: integer) : integer; Funcion := 3; a := Funcion(3); Procesadores del Lenguaje Práctica "Compilador de Pascal" Entrega final
20
Pruebas con errores semánticos
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} function Funcion: integer; var k : integer; k := 1; end; x := Funcion; program prueba03; Funcion:=3; Funcion:=2; Procesadores del Lenguaje Práctica "Compilador de Pascal" Entrega final
21
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} type TCarta = record palo : integer; numero: integer; end; var x: TCarta; y: integer; x.palo := y; x.numero := y; y := x.palo; write (y); y := x.numero; program Prueba03; {devuelve el mayor} var a : integer; b : integer; read(a); read(b); if (a<b) then write(a) else write(b); Procesadores del Lenguaje Práctica "Compilador de Pascal" Entrega final
22
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; 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. 22 Procesadores del Lenguaje Práctica "Compilador de Pascal" Entrega final 22
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.