La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Tema 5 - 1Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Procesadores de Lenguaje Tema 5: Traducción Dirigida por la Sintaxis y Análisis Semántico.

Presentaciones similares


Presentación del tema: "Tema 5 - 1Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Procesadores de Lenguaje Tema 5: Traducción Dirigida por la Sintaxis y Análisis Semántico."— Transcripción de la presentación:

1 Tema 5 - 1Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Procesadores de Lenguaje Tema 5: Traducción Dirigida por la Sintaxis y Análisis Semántico

2 Tema 5 - 2Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Análisis léxico Introducción Traducción dirigida por la sintaxis Definiciones dirigidas por la sintaxis Comprobación de tipos

3 Tema 5 - 3Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Introducción

4 Tema 5 - 4Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Introducción Semántica. (Del griego semantikos, 'lo que tiene significado'). 1. Estudio del significado de los signos linguísticos y de sus combinaciones, desde un punto de vista sincrónico o diacrónico. 2. En la teoría lingüística generativa, componente de la gramática que interpreta la significación de los enunciados generados por la sintaxis y el léxico. Diccionario de la RAE

5 Tema 5 - 5Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Introducción Traducir. (Del lat. traducĕre, hacer pasar de un lugar a otro). 1. Expresar en una lengua lo que está escrito o se ha expresado antes en otra. 2. Convertir, mudar, trocar. 3. Explicar, interpretar. Diccionario de la RAE

6 Tema 5 - 6Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Introducción Para traducir una construcción de un lenguaje de programación, un compilador puede necesitar tomar en cuenta, además del código generado, características adicionales, tales como el tipo de la construcción. Existen ciertos aspectos de los lenguajes que están fuera de la representatividad que permiten las GIC. En el ámbito de los lenguajes de programación, la semántica recoge un conjunto de reglas que especifican el significado de sentencias sintácticamente válidas.

7 Tema 5 - 7Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Introducción Ejemplo: int velocidad = espacio / tiempo; –Su semántica identifica los siguientes aspectos: Se reserva memoria asociada al identificador velocidad. La memoria reservada deberá corresponder al tipo entero. Se calculará la velocidad como resultado de dividir el valor almacenado en la variable espacio entre el valor almacenado en la variable tiempo. Dicho resultado se asignará a la memoria reservada para velocidad. –También se debe comprobar: El ámbito de los operadores. Que el operador / se puede aplicar a los tipos de espacio y tiempo. Que el tipo del resultado de la operación coincide con el de velocidad. Etc.

8 Tema 5 - 8Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Introducción La semántica de una sentencia de un lenguaje de programación está directamente relacionada con su estructura sintáctica y, por tanto, se suele representar mediante anotaciones de su árbol sintáctico. Una definición dirigida por la sintaxis especifica la traducción de una construcción en función de atributos asociados con sus componentes sintácticos. Un atributo puede representar, por ejemplo, un tipo, una cadena, una posición de memoria.

9 Tema 5 - 9Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Traducción dirigida por la sintaxis Se asocia información a una construcción del lenguaje de programación proporcionando atributos a los símbolos de la GIC que representan la construcción. Los valores de los atributos se calculan mediante reglas semánticas asociadas a las producciones gramaticales. Dos notaciones para asociar reglas y producciones: –Definiciones dirigidas por la sintaxis. –Esquemas de traducción.

10 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Traducción dirigida por la sintaxis Secuencia de acciones: –Análisis sintáctico de los componentes léxicos de la cadena de entrada. –Construcción del árbol de análisis sintáctico. –Recorrido del árbol para evaluar las reglas semánticas en sus nodos. Como resultado, se obtiene la traducción de la cadena de componentes léxicos de la entrada.

11 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Traducción dirigida por la sintaxis Las reglas semánticas permiten realizar acciones tales como: –Generación de código. –Almacenamiento de información en la tabla de símbolos. –Emisión de mensajes de error. –Comprobación de tipos. –Otros.

12 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis Las DDS son especificaciones de alto nivel para traducciones. Definición dirigida por la sintaxis. –Utiliza una GIC para especificar la estructura sintáctica de la entrada. –A cada símbolo de la gramática se le asocia un conjunto de atributos. –A cada producción se le asocia un conjunto de reglas semánticas para calcular los valores de los atributos asociados con los símbolos que aparecen en esa producción.

13 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis Una DDS es una generalización de una GIC en la que cada símbolo gramatical tiene un conjunto de atributos asociado, dividido en dos subconjuntos: sintetizados y heredados. Un atributo puede representar cualquier cosa: una cadena, un número, un tipo, una posición de memoria... El valor de un atributo sintetizado se calcula a partir de los valores de los hijos de dicho nodo en el AAS. El valor de un atributo heredado se calcula a partir de los valores de los hermanos y el padre de dicho nodo.

14 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis: Atributos y Reglas semánticas Atributos –Un atributo es una variable que representa una determinada propiedad del símbolo X. –Los atributos se denotan con un nombre precedido por un punto y el nombre del símbolo al que está asociado. Reglas semánticas. –Los valores que toman los atributos se establecen en función de un conjunto de reglas semánticas que están asociadas a cada una de las reglas sintácticas. –Las reglas semánticas se definen en función de los atributos de los demás símbolos que componen la regla y otras posibles acciones. –En las reglas también pueden incluirse otras acciones como cambiar de tipo, imprimir, etc... que se denominarán acciones semánticas.

15 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis Traducción: transformación de una entrada en una salida. –Se construye árbol de análisis sintáctico para la entrada. –Cada nodo n está etiquetado con un símbolo gramatical X. –X.a, valor del atributo a de X en ese nodo. –Se calcula X.a en n con la regla semántica para el atributo a asociado con la producción de X utilizada en el nodo n. Árbol de análisis sintáctico con anotaciones, muestra los valores de los atributos en cada nodo.

16 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis Forma de una DDS. –Cada producción A -> tiene asociado un conjunto de reglas semánticas de la forma b:= f(c 1,...., c k ), donde f es una función y, o bien: b es una atributo sintetizado. de A, y c 1,...., c k son atributos de los símbolos gramaticales de la producción, o bien: b es un atributo heredado de uno de los símbolos del lado derecho y c 1,...., c k son atributos de los símbolos de la producción. –En cualquier caso, b depende de los atributos c 1,...., c k. –Una gramática con atributos es una DDS en la que las reglas semánticas no pueden tener efectos colaterales.

17 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis Ejemplo: Traducción de notación infija a postfija. E E 1 op E 2 E E 1 E 2 op E ( E 1 ) E E 1 E num E num –La notación postfija no necesita paréntesis. Ejemplo: (9*5)+2 y 9-(5+2) –Cada no terminal tiene asociado un atributo traducción con un valor que representa la notación postfija de la expresión generada por ese no terminal en un AAS.

18 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis E E + T E.t := E 1.t || T.t || + E E – T E.t := E 1.t || T.t || - E T E.t := T.t T num T.t := num.v –Atributo sintetizado t: traducción, lo poseen los no terminales T y E. –Atributo sintetizado v: valor numérico devuelto por el analizador léxico, lo posee el terminal num.

19 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis: Atributos sintetizados Atributos sintetizados. –Se calculan a partir de los atributos de los nodos hijos del árbol. –Muy utilizados en la práctica. –Evaluación ascendente (LR). Ejemplo: Partiendo de la GIC del ejemplo anterior, crear una calculadora. S E E E + T E E – T E T T num –Evaluar la expresión 9 – print(E.val) E.val := E.val + T.val E.val := E.val – T.val E.val := T.val T.val := num.val

20 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis: Atributos heredados Atributos heredados. –Se calculan mediante los atributos del padre o de los hermanos de dicho nodo. –Sirven para expresar la dependencia de una construcción de un lenguaje de programación en el contexto en el que aparece. E.g.: Se pueden usar para comprobar si un identificador aparece en el lado izquierdo o derecho de una asignación, para decidir si se necesita la dirección o el valor del ident. –Siempre es posible rescribir una DDS para que sólo use atributos sintetizados. Sin embargo, suele ser más natural utilizar atributos heredados.

21 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis Ejemplo: Declaración de variables en C. D T L T int T real L L 1, id L id L.her := T.tipo T.tipo := integer T.tipo := real L 1.her := L.her inserta(id.lexema, L.tipo) inserta(id.lexema, L.tipo)

22 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis Evaluar: real a, b, c.

23 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis: Grafo de dependencias Grafo de dependencias. –Si un atributo b, en un nodo del árbol, depende de un atributo c, entonces se debe evaluar la regla semántica para b después de la regla semántica que define c. –Interdependencias entre atributos se pueden representar mediante grafo de dependencias. –Antes de construir el grafo de dependencias, se escribe cada regla semántica en la forma b:= f(c 1,...., c k ). Si es una llamada a un proc se crea un falso atrib sint b. –El grafo tiene: Un nodo por cada atributo. Una arista al nodo de b desde el nodo de c si el atributo b depende del atributo c.

24 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis: Grafo de dependencias –Algoritmo para construir el grafo de dependencias para un AAS. para cada nodo n en el AAS hacer para cada atributo a del símbolo en el nodo n hacer construir un nodo en el grafo de dependencias para a; para cada nodo n en el AAS hacer para cada regla semántica b := f(c 1, c 2,..., c k ) asociada con la producción utilizada en n hacer para i:=1 hasta k hacer construir arista desde el nodo para c i hasta el nodo para b;

25 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis: Grafo de dependencias –Por ejemplo, supongamos que la siguiente es una regla semántica para la producción A XY. A.a := f(X.x, Y.y) La regla define A.a como un atributo sintetizado que depende de los atributos X.x e Y.y. En el AAS, producirá tres nodos: A.a, X.x, Y.y. Habrá una arista desde X.x hacia A.a, y otra desde Y.y a A.a. –Si la producción A XY tiene asociada la regla semántica: X.i := g(A.a, Y.y) Habrá una arista desde A.a hacia X.i, y otra desde Y.y hacia A.a.

26 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis: Grafo de dependencias Ejemplo: Producción: E E 1 + E 2 Regla semántica: E.val := E 1.val + E 2.val –E.val se sintetiza a partir de E 1.val y E 2.val

27 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis: Grafo de dependencias Ejemplo: Declaración de variables en C. –Cada regla semántica insertar(id.entrada, L.her) conduce a la creación de un falso atributo.

28 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis: Grafo de dependencias Orden de evaluación. –Ordenamiento topológico de un grafo dirigido acíclico: Ordenamiento n 1,..., n k de los nodos del grafo tal que las aristas vayan desde los nodos que aparecen primero en el ordenamiento a los que aparecen más tarde. –Todo ord. topológico de un grafo de dependencias da un orden válido de evaluación de las reglas semánticas asociadas con los nodos de un árbol de análisis sintáctico. –Este orden sólo sirve si si el grafo de dependencias no tiene ciclos.

29 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis: Grafo de dependencias Ejemplo: Ordenamiento topológico para el grafo de dependencias de la declaración de variables en C. a 4 := real a 5 := a 4 inserta(id 3.lex, a 5 ) a 7 := a 5 inserta(id 2.lex, a 7 ) a 9 := a 7 inserta(id 1.lex, a 9 )

30 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis: Traducción La traducción especificada por una DDS se puede precisar como sigue: –Uso de la GIC para construir el AAS. –Se construye el grafo de dependencias. –A partir de un ordenamiento topológico del grafo de dependencias, se obtiene el orden de evaluación para las reglas semánticas. –La evaluación de las reglas semánticas en dicho orden produce la traducción de la cadena de entrada.

31 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis: Á rboles sintácticos Árboles Sintácticos –El uso de árboles sintácticos como representación intermedia permite separar la traducción del análisis sintáctico. –Un árbol sintáctico es una forma condensada de un AAS, útil para representar construcciones de lenguajes. –Ejemplo: S if B then S 1 else S 2. –En un árbol sintáctico, los operadores y palabras clave no aparecen como hojas, sino asociadas con el nodo interior que sería el padre en el AAS.

32 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis: Á rboles sintácticos –En un árbol sintáctico, las cadenas de las producciones simples pueden estar rotas. S E $ E E + T | T T T * F | F F ( E ) | num –La traducción dirigida por la sintaxis se puede basar también en árboles sintácticos, siguiendo el mismo enfoque que para los AAS.

33 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis: Evaluación ascendente con atributos sintetizados Evaluación ascendente. –Puede ser difícil construir un traductor para una def. dirigida por la sintaxis arbitraria. –Existen subclases para las que es fácil construirlos. Una de ellas es la que incluye definiciones con atributos sintetizados. –Los atributos sintetizados se pueden evaluar en un analizador ascendente conforme la entrada es analizada. El AS puede conservar en su pila los valores de los atributos sintetizados asociados con los símbolos gramaticales. Cuando se reduce, se calcula el valor del atributo sintetizado del lado izquierdo en función de los atributos de la parte derecha que aparecen en la pila.

34 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis: Evaluación ascendente con atributos sintetizados Almacenamiento de los atributos en la pila. –Se pueden utilizar campos adicionales en la pila, o bien usar una pila semántica, para almacenar los valores de los atributos sintetizados asociados a los símbolos gramaticales. –En una regla semántica se hace referencia a los atributos situados en la pila semántica para acceder a los atributos sintetizados correspondientes. Si un símbolo no tiene atributo, su entrada de la pila está sin definir. –Justo antes de reducir se sacan los atributos sintetizados de la parte derecha y se calcula el atributo sintetizado de la parte izquierda y se mete en la pila.

35 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis: Evaluación ascendente con atributos sintetizados –Ejemplo: A X Y Z A.a := f(X.x, Y.y, Z.z) Reducción

36 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis: Evaluación ascendente con atributos sintetizados Ejemplo: Calculadora. –Simular * 2

37 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis: Definiciones con atributos por la izquierda Definiciones con atributos por la izquierda. –Cuando la traducción tiene lugar durante el análisis sintáctico, el orden de evaluación de los atributos va unido al orden en el que se crean los nodos del árbol de análisis sintáctico. –Orden de evaluación natural para muchos métodos de traducción descendente y ascendente: recorrido en profundidad. procedure visitaEnProfundidad (n: nodo) begin para cada hijo m i de n, de izq a dcha, hacer evaluar los atributos heredados de m i ; visitaEnProfundidad(m i ); evaluar los atributos sintetizados de n; end

38 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis: Definiciones con atributos por la izquierda –Las definiciones con atributos por la izquierda son una clase de DDS cuyos atributos siempre se pueden evaluar en un orden de profundidad (generalmente, de izquierda a derecha). –Las DAI incluyen todas las DDS basadas en gramáticas LL(1). –Una DDS es una DAI si cada atributo heredado de X j, 1 j n, del lado derecho de A X 1... X n, depende sólo de: 1.Los atributos de los símbolos X 1... X j-1 a la izquierda de X j en la producción. 2.Los atributos heredados de A. –Toda definición con atributos sintetizados es una definición con atributos por la izquierda.

39 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis: Esquemas de traducción Esquema de traducción (ET): –Es una GIC con las siguientes características: Atributos para los símbolos gramaticales. Acciones semánticas intercaladas en los lados derechos de las producciones. Las acciones se consideran como símbolos terminales. –Equivalente a definición dirigida por la sintaxis con el orden de evaluación de las reglas semánticas explícito. La regla semántica se escribe entre llaves en la posición correspondiente. –El árbol de AS de un ET indica una acción construyendo un hijo adicional. Este nodo no tiene hijos, de modo que la acción se realiza cuando se visita por primera vez el nodo.

40 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis: Esquemas de traducción –Cuando se diseña un ET, se deben respetar algunas limitaciones que garanticen que las acciones no hagan referencia a un atributo aún no calculado. Ejemplo más sencillo: sólo se usan atributos sintetizados. –En este caso, se puede construir un ET creando una acción con una asignación para cada regla semántica, colocando dicha acción al final de la producción. –La producción y la regla semántica: T T 1 * F T.val := T 1.val * F.val dan como resultado la siguiente producción y acción semántica: T T 1 * F { T.val := T 1.val * F.val }

41 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis: Esquemas de traducción Si hay atributos sintetizados y heredados entonces: 1.Un atributo heredado para un símbolo en el lado derecho se debe calcular en una acción antes que dicho símbolo. 2.Una acción no debe referirse a un atributo sintetizado de un símbolo que esté a la derecha de la acción. 3.Un atributo sintetizado para el no terminal de la izquierda sólo se puede calcular después de que se hayan calculado todos los atributos a los que hace referencia.

42 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis: Esquemas de traducción Ejemplo: Calculadora. S E { print(E.val) } E E + T { E.val := E.val + T.val } E E – T { E.val := E.val – T.val } E T {E.val := T.val } T num {T.val := num.val } –Evaluar la expresión 9 –

43 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis: Esquemas de traducción Ejemplo: Traductor de expresiones en notación infija a notación postfija.

44 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis: Evaluación ascendente de atributos heredados Estudiaremos un método capaz de manejar las definiciones con atributos por la izquierda en análisis ascendente. –Maneja todas las definiciones con atributos por la izquierda basadas en gramáticas LL(1). –Puede implantar ciertas DAI basadas en gramáticas LR(1). El método se basa en la eliminación de los esquemas de traducción de acciones intercaladas. –Se introduce una transformación que consigue que todas las acciones intercaladas en un ET ocurran en los extremos derechos de sus producciones. –Se sustituye cada acción intercalada por un no terminal M y se asocia la acción al final de la producción M λ.

45 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis: Evaluación ascendente de atributos heredados Ejemplo: E T R R + T { print(+) } R | λ T num { print(num.valor) } Se transforma en: E T R R + T M R | λ T num { print(num.valor) } M λ { print(+) }

46 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis: Evaluación ascendente de atributos heredados Herencia de atributos en la pila del AS. –Un AS ascendente reduce el lado derecho de la producción A XY eliminando X e Y de la cima de la pila y sustituyéndolas por A. –Un atributo sintetizado X.s se almacena en la pila semántica junto a X. Como el valor de X.s está en la pila del analizador antes de que tenga lugar cualquier reducción en el subárbol más abajo de Y, este valor puede ser heredado por Y. –Si Y.h := X.s (regla de copia), entonces el valor de X.s se puede utilizar cuando se haga referencia a Y.h, ya que se sabe dónde está en la pila.

47 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis: Grafo de dependencias Ejemplo: Declaración de variables en C. –Cada regla semántica insertar(id.entrada, L.her) conduce a la creación de un falso atributo.

48 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis: Evaluación ascendente de atributos heredados Ejemplo: Declaraciones en C. –Se puede pasar el tipo de un identificador mediante reglas de copia usando atributos heredados. –Se desea implantar el siguiente ET. D T { L.tipo := T.tipo } L T int { T.tipo := integer } T real { T.tipo := real } L { L1.tipo := L.tipo } L1, id { inserta(id,id.lexema,L.tipo) } L id { inserta(id, id.lexema, L.tipo) }

49 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis: Evaluación ascendente de atributos heredados –Definición usando la pila en análisis ascendente. ProducciónFragmento de Código D T L T intPilaSem[cima] := integer T realPilaSem[cima] := real L idinserta (id, pilaSem[cima], pilaSem[cima -1]) L L1, idinserta (id, pilaSem[cima], pilaSem[cima -3])

50 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis: Evaluación ascendente de atributos heredados Sustitución de atributos heredados por sintetizados. –En ocasiones, se puede evitar usar atributos heredados cambiando la GIC subyacente. –Ejemplo D L : T T integer | char L L 1, id | id L 1 debería heredar un tipo T que está a su derecha No es una DAI No se puede realizar la traducción durante el análisis sintáctico.

51 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis: Evaluación ascendente de atributos heredados –Solución: D id L T, id L | : T L integer | char

52 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis Ejercicio. –Construir una GIC que reconozca el siguiente lenguaje: Programa delimitado por program nombre... end. Dentro del programa, lista de sentencias con al menos una sentencia. Una sentencia puede ser una asignación, una selección condicional, un bucle for o un bloque con cero o más sentencias. Expresiones aritméticas en notación infija que permiten realizar sumas y multiplicaciones, y agrupar con paréntesis. Las expresiones condicionales permiten comparar en igualdad o desigualdad entre dos expresiones aritméticas.

53 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Definiciones dirigidas por la sintaxis –Añadir a la GIC las acciones semánticas correspondientes para traducir una entrada al siguiente lenguaje: Asignación: mover id1, pila. Expresiones: notación postfija. El resultado de una expresión queda en la cima de la pila. Condiciones: –Si falso saltar a etiqueta. –Saltar a etiqueta. Etiqueta nombreEtiqueta. –Ejemplo: a := 2 + 3; mover a, pila

54 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Comprobación de tipos Un compilador debe comprobar que el programa fuente siga las convenciones sintácticas y las semánticas (comprobación estática). Ejemplos de comprobación estática: –Comprobaciones de tipos: operandos incompatibles en operaciones aritméticas, asignación, etc. –Comprobaciones de flujo de control: break en C. –Comprobaciones de unicidad: identificadores en un mismo ámbito, etiquetas en una proposición case, etc. –Comprobaciones relacionadas con nombres: nombre de procedimiento en ADA debe coincidir con end nombre;.

55 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Comprobación de tipos Un comprobador de tipos asegura que el tipo de una construcción coincida con el previsto en su contexto. El tipo de una construcción de un lenguaje se denotará mediante una expresión de tipo: –Un tipo básico es una expresión de tipo (boolean, char, integer, real, etc.). –Un constructor de tipos aplicado a expresiones de tipos es una expresión de tipo. Sea T una expresión de tipos, los constructores de tipos incluyen: Matrices: array(I, T), donde I es un conjunto de índices. Registros: T 1 xT 2. Punteros: pointer(T). Funciones: T 1 xT 2 T 3.

56 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Comprobación de tipos: Sistemas de tipos Un sistema de tipos está compuesto por una serie de reglas para asignar expresiones de tipos a las distintas partes de un programa. Un comprobador de tipos implanta un sistema de tipos. Los sistemas de tipos se especifican de forma dirigida por la sintaxis. Un sistema de tipos seguro elimina la necesidad de comprobar dinámicamente errores de tipos. –En la práctica, algunas comprobaciones sólo se pueden realizar dinámicamente (i.e.: índice que recorre un array).

57 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Comprobación de tipos: Comprobador sencillo Ejemplo: Gramática que genera una secuencia de declaraciones seguida de una expresión aritmética. P D ; E D D ; D | id : T T char | integer | array [ num ] of T E E + E | E * E | car | num | id | E [ E ] –El objetivo del analizador es obtener el tipo de la expresión. –Si se produce un error, se deberá devolver el valor error_tipo. –Para simplificar, se supone que todas las matrices tienen un rango desde 1 hasta num. Por ejemplo, array [256] of char conduce a la expresión de tipo array(1..256, char).

58 Tema Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Comprobación de tipos: Comprobador sencillo P D ; E D D ; D D id : T{añadeTipo(id.lex, T.tipo)} T char {T.tipo := char} T integer {T.tipo := integer} T array [ num ] of T 1 {T.tipo := array(num.val, T 1.tipo)} E car {E.tipo := char} E num {E.tipo := integer} E id {E.tipo := buscaTipo(id.lex)} E E + E {E.tipo := if E 1.tipo = integer and E 2.tipo = integer then integer else error_tipo} E E * E {E.tipo := if E 1.tipo = integer and E 2.tipo = integer then integer else error_tipo} E E [ E ]{E.tipo := if E 2.tipo = integer and E 1.tipo = array(s,t) then integer t else error_tipo}


Descargar ppt "Tema 5 - 1Procesadores de Lenguaje© 2002 / 03 - Francisco Carrero Procesadores de Lenguaje Tema 5: Traducción Dirigida por la Sintaxis y Análisis Semántico."

Presentaciones similares


Anuncios Google