Está en la página 1de 33

Equipo 6

Integrantes: Alemán Sánchez Gustavo Adolfo


Chibras Guillermo Luis Javier
Guillermo Olvera
Fuentes Gómez Carlos Ismael
Sanchez Segovia Diego Armando
Algoritmos de manejo de
atributos
Introducción
Informalmente, se llamará atributos de un símbolo de la gramática a toda
información añadida en el árbol de derivación por el analizador semántico,
asociada a los símbolos de los nodos anotados. El Ejemplo describe de forma
simplificada el valor de esos atributos y sugiere cómo calcularlos.

La otra componente importante de las gramáticas de


atributos es el algoritmo de cálculo de los valores.
Los lenguajes de programación suelen proporcionar reglas para determinar correctamente el
valor y el tipo de las expresiones aritméticas.

Un atributo es una variable que representa una propiedad de un símbolo (terminal o no


terminal).

Los atributos pueden ser de cualquier tipo:

Números, tipos, referencias de tablas o cadenas.


DEFINICION DIRIGIDA POR LA SINTAXIS
Es una gramática libre de contexto, junto con atributos y reglas. Los atributos
sintetizados se asocian con los símbolos gramaticales y las reglas se asocian
con las producciones, esto es:

● Si X es un símbolo y a es uno de sus atributos, entonces escribimos X. a


para denotar el valor de a en el nodo específico de un árbol de análisis
sintáctico, etiquetado como X.
● Si implementamos los nodos del árbol de análisis sintáctico mediante
registros u objetos, entonces los atributos de X pueden implementarse
mediante campos de datos en los registros, que representan los nodos
para X.
Gramáticas de atributos
Las gramáticas independientes del contexto, las de tipo 2 de la jerarquía de
Chomsky, son las que utilizamos para definir la sintaxis de un lenguaje de
programación.

De esta forma definimos la estructura que tendría cualquier programa escrito en ese
lenguaje de programación elegido. Una vez hemos validado la estructura del
programa, y para poder realizar determinados controles semánticos necesitamos
utilizar información, representada por los atributos, que asociamos a los símbolos
terminales y no terminales de la gramática que hemos establecido para ese lenguaje.
Estas gramáticas se denominan gramáticas de atributos
Fijación
Los atributos que pueden fijarse antes de la ejecución, o lo que es lo mismo en
tiempo de compilación, se denominan estáticos, mientras que los que pueden
fijarse solo durante la ejecución se denominan dinámicos.
Reglas semánticas
Reglas semánticas

La forma de denotar los atributos asociados a un símbolo es de la siguiente


forma: si X es un símbolo gramatical y a es un atributo de este símbolo
gramatical, escribimos X.a para indicar que el valor de a está asociado a este
símbolo.
Atributos heredados y sintetizados
Los atributos pueden ser de dos tipos, sintetizados o heredados.

● Sintetizado: Para un no terminal A en un nodo N de un árbol sintáctico se define


mediante una regla semántica asociada con la producción en N. Un atributo sintetizado
en el nodo N se define sólo en términos de los valores de los atributos en el hijo de N.
El valor que se asigna a un nodo depende del valor de los nodos hijos.
● Heredado: Para un no terminal B en el nodo N de un árbol de análisis sintáctico se
define mediante una regla semántica asociada con la producción en el padre de N. Un
atributo heredado en el nodo N se define sólo en términos de los valores de los atributos
en el padre de N. El valor de un nodo depende del valor de los hermanos y del
padre.
Las relaciones entre los valores que pueden tener los atributos de una gramática de atributos
se especifican mediante reglas semánticas.

Denotación de los atributos

Para cada atributo es necesario especificar el conjunto de valores que este puede tomar y a
esto se le denomina dominio del atributo, así como una descripción del mismo
Ejemplo de regla semántica
Considerando la gramática, la acción semántica que queremos realizar es obtener el valor de
la siguiente operación: 5 + 9*4. Por tanto el atributo que nos interesa es valor.
Reglas semánticas

También se denomina a las reglas semánticas ecuaciones de atributos, aunque una regla
semántica puede estar constituida por una o varias ecuaciones de atributos.
Atributos sintetizados vs heredados
La evaluación de los atributos basados en reglas depende de la forma de recorrer el árbol de
análisis

Atributos sintetizados: su valor se calcula únicamente a partir de los valores de los


atributos (sintetizados/heredados) pertenecientes a sus hijos en el árbol de análisis.

Atributos heredados: su valor se calcula a partir de los valores de los atributos


(sintetizados/heredados) pertenecientes al padre o a los hermanos de ese nodo en el árbol de
análisis
Gramáticas de atributos y tipos

La elección del tipo de atributo es importante desde el punto de vista de diseño del
compilador.
Árbol de análisis
Una gramática en la que todos los atributos son sintetizados se conoce como gramática con
atributos S(S-gramáticas).

En este caso el atributo valor va “subiendo” en el árbol, suponiendo un recorrido ascendente


del mismo, y se puede observar como en el nodo T a T*F se obtiene el valor, en función de
los nodos hijo.
Ejemplo con atributos heredados
Identificadores

La gramática que sintetiza este caso es la siguiente y la cadena de entrada es int a, b, c;


8.3 Lenguajes intermedios
Los lenguajes intermedios son generados para la optimización del código. Este modelo facilita la producción de
compiladores al separar la generación de código de las otras fases de la compilación.

Ventajas de un código intermedio:

-La máquina objeto se extrae a una máquina virtual. Esto nos sirve para separar las operaciones de alto nivel de
las que son de bajo nivel.

-Al ser más abstracto las rutinas que se utilizan para optimizar el código se vuelven más simples
Existen dos representaciones intermedias principales:

●Notación sufija
●Cuádruplas

Además, un árbol sintáctico puede representarse en forma de tuplas de n elementos, de la forma (operador,
operando-1, ..., operando-k, nombre). Las tuplas pueden tener longitud variable o fija . Las más típicas son las
cuádruplas, aunque éstas pueden representarse también en forma de tripletes.
Notación sufija

Llamada también postfija o polaca inversa, se usa para representar expresiones sin necesidad de paréntesis.

Ejemplos:

a*b ab*

Los identificadores aparecen en el mismo orden. Los operadores en el de evaluación (de izquierda a
derecha).
Ejercicios.

1.- a*(b+c/d)

2.- a*b+c*d
Código de tres direcciones
En el código de tres direcciones, hay máximo un operador en el lado derecho de una instrucción; es
decir, no se permiten expresiones aritméticas acumuladas. Por ende, una expresión del lenguaje fuente
como x+y*z podría traducirse en la siguiente secuencia de instrucciones de tres direcciones:

t1 = y * z
t2 = x + t1

en donde t1 y t2 son nombres temporales que genera el compilador.


El código de tres direcciones se basa en dos conceptos: direcciones e instrucciones. En términos

de orientación a objetos, estos conceptos corresponden a las clases y los diversos tipos de direcciones

e instrucciones corresponden a subclases apropiadas.


Cuádruple

Forma de código intermedio de tres direcciones donde el resultado de una operación se escribe dentro del código.
Las variables temporales se tienen que introducir dentro de la tabla de símbolos

Una operación diádica se puede representar mediante la cuádrupla

(<Operador>, <Operando1>, <Operando2>, <Resultado>)


Ejemplo: c =a*(b/c)+d

Operador Operando 1 Operando 2 Resultado

1 / b c t1

2 * a t1 t2

3 + t2 d t3

4 = t3 c
Ejemplo pizarrón
a*b+c*d Operador Operando 1 Operando 2 Resultado

3
Triples
Aquí el resultado de una operación está implícito y se representa por medio de una referencia a una
declaración

(n ) (<Operador>, <Operando1>, <Operando2>, )

Los números entre paréntesis representan apuntadores a la misma estructura de las tripletas.
Ejemplo: a*b+c*d

Operador Operando 1 Operando 2

(1) * a b

(2) * c d

(3) + (1) (2)

= t3
Ejemplo pizarrón

a*b+1 Operador Operando 1 Operando 2


En resumen:
Referencias
http://arantxa.ii.uam.es/~alfonsec/docs/compila5.htm

http://www.cartagena99.com/recursos/alumnos/apuntes/ININF2_M4_U5_T1.pdf

Apuntes de compiladores, Alejandro Jimenez Hernandez ,1988

Compiladores principios, técnicas y herramientas, Alfred V. Aho Monica S., Segunda edición, Pearson

También podría gustarte