La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Procesadores del Lenguaje

Presentaciones similares


Presentación del tema: "Procesadores del Lenguaje"— Transcripción de la presentación:

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


Descargar ppt "Procesadores del Lenguaje"

Presentaciones similares


Anuncios Google