Sede Valle Jequetepeque Escuela de Informtica Compiladores
Resumen El presente artculo, se trata sobre la traduccin dirigida por sintaxis, para abordar mejor el tema se definen un conjunto de conceptos que ayudan a comprender mejor y describir cmo es posible para un compilador llevarlo a cabo, tomando en cuenta todos los pasos que sigue. Es una generalizacin de una gramtica incontextual en la cual cada smbolo tiene asociado un conjunto de atributos. Hay dos clases de atributos posibles: Atributos Sintetizados y Atributos Heredados. Asocia informacin a construcciones de un lenguaje de programacin, asignndole atributos al smbolo de la gramtica que representa dicha construccin. El valor de los atributos se calcula mediante reglas semnticas que se asocian a cada produccin. Palabras clave: traduccin, atributo heredado, atributo sintetizado, anlisis sintctico, reglas semnticas, descendente.
1. Introduccin Un compilador utiliza gramticas independientes de contexto como gua para la traduccin de lenguajes, si logra de alguna manera asociar informacin a las distintas construcciones del lenguaje de programacin proporcionando atributos a los smbolos de la gramtica, puede entonces calcular sus valores mediante reglas semnticas. Aunque hay dos maneras de hacer la asociacin entre reglas semnticas y producciones, que son mediante definiciones dirigidas por sintaxis y esquemas de traduccin, nos interesa particularmente sta ltima, pues con stas se trabaja ms pues se puede definir el orden en que se ejecutan las acciones y las evaluaciones de los atributos.
2. Definicin Dirigida por Sintaxis Una definicin dirigida por sintaxis es una gramtica de contexto libre en la que cada smbolo gramatical (terminales y no terminales) tiene un conjunto de atributos asociados, dividido en dos subconjuntos llamados atributos sintetizados y atributos heredados de dicho smbolo gramatical. Un atributo puede representar cualquier cosa. El valor de un atributo en un nodo de un rbol de anlisis sintctico se define mediante una regla semntica asociada a la regla de produccin utilizada en dicho nodo. El valor de un atributo sintetizado de un nodo se calcula a partir de los valores de los atributos hijos de dicho nodo en el rbol de anlisis sintctico; el valor de un atributo heredado se calcula a partir de los valores de los atributos en los hermanos y el padre de dicho nodo. Las reglas semnticas establecen las dependencias entre los atributos que sern representadas mediante un grafo. Del grafo de dependencias se obtiene un orden de evaluacin de las reglas semnticas. La evaluacin de las reglas semnticas define los valores de los atributos en los nodos del rbol de anlisis sintctico para la cadena de entrada.
3. Atributos Un atributo puede representar cualquier cosa, un nombre, una cadena, un nmero, un tipo, una posicin de memoria, su valor en un nodo se define mediante una regla semntica asociada a la produccin usada en dicho nodo. En una definicin dirigida por sintaxis se asume que los terminales slo tienen atributos sintetizados, ya que la definicin no proporciona ninguna regla semntica para los terminales. El analizador lxico es el que proporciona generalmente los valores para los atributos de los terminales. 3.1. Atributos Sintetizados
Se puede decir que un atributo es sintetizado si su valor en un nodo del rbol de anlisis sintctico se determina a partir de los valores de atributos de los hijos de ese nodo (como decir de abajo hacia arriba). Se pueden calcular mediante un solo recorrido ascendente del rbol de anlisis sintctico, lo que es muy deseable.
3.2. Atributos Heredados
Un atributo heredado es uno cuyo valor en un nodo de un rbol de anlisis sintctico est definido a partir de los atributos en el padre y los hermanos de dicho nodo. stos sirven para expresar la dependencia de una construccin de un lenguaje de programacin en el contexto en el que aparece. Tambin sirven para expresar la dependencia que hay entre una construccin del lenguaje de programacin y su contexto. Siempre es posible reescribir una definicin dirigida por sintaxis para que sea atribuida.
4. Grafos de dependencias
Las interdependencias entre los atributos heredados y sintetizados en los nodos de un rbol de anlisis sintctico se pueden representar mediante un grafo dirigido llamado grafo de dependencias. El grafo de dependencias se construye como se indica ms arriba. A Partir de un ordenamiento topolgico del grafo de dependencias, se obtiene un orden de evaluacin para las reglas semnticas .La evaluacin de las reglas semnticas en este orden produce la traduccin de la cadena de entrada.
5. Reglas Semnticas
Las reglas semnticas establecen las dependencias entre los atributos que sern representadas mediante un grafo. El grafo de dependencias proporciona el orden de evaluacin de las reglas semnticas. La evaluacin de las reglas semnticas define los valores de los atributos de los nodos del rbol. Una regla semntica puede tener tambin efectos colaterales (imprimir un valor, actualizar una variable global...) Una gramtica con atributos es una definicin dirigida por la sintaxis en la que las funciones de las reglas semnticas no pueden tener efectos colaterales.
5.1 Mtodos para evaluar las Reglas Semnticas
Se realizan en el momento de compilacin, el orden se obtiene de un ordenamiento topolgico del grado de dependencias construido segn el rbol de anlisis sintctico para cada entrada, si hay varios ciclos no funciona.
5.2 Mtodos Basados en Reglas
Se realiza en el momento de construccin del compilador, las reglas semnticas asociadas con las producciones se analizan a mano. No necesita construir un grafo de dependencias de forma explcita.
5.3 Mtodos Sin Recuerdo
Para realizar el orden de evaluacin no tiene en cuenta las reglas semnticas. Por ejemplo en el momento de anlisis sintctico, No necesita construir un grafo dependencias de forma explcita.
6. Construccin de rboles Sintcticos
El uso de rboles de anlisis sintctico como representacin intermedia permite que la traduccin se separe del anlisis sintctico. Las rutinas de traduccin invocadas durante el anlisis sintctico deben activarse con dos clases de limitaciones. La primera, una gramtica que resulte adecuada para el anlisis sintctico puede no reflejar la estructura jerrquica natural de las construcciones del lenguaje. La segunda, el mtodo de anlisis sintctico restringe el orden en que se consideran los nodos de un rbol de anlisis sintctico. Pues este orden puede no coincidir con el orden en que se va disponiendo de la informacin sobre una construccin.
6.1. Arboles Sintcticos
Un rbol sintctico es una forma condensada de un rbol de anlisis sintctico, til para representar construcciones de lenguajes. Los operadores y las palabras no aparecen como hojas sino ms bien estn asociadas con el nodo interior que sera el padre de dichas hojas en el rbol anlisis sintctico. La construccin de un rbol sintctico para una expresin es similar a la traduccin de la expresin a una forma posfija. Se construyen subrboles para las subexpresiones creando un nodo para cada operador y para cada operando. Los hijos de un nodo de un operador son las races de los nodos que representan las subexpresiones que constituyen los operandos de dicho operador. Se puede implantar cada nodo en un rbol sintctico como un registro con varios campos. En el nodo para un operador, un campo identifica el operador y el resto de los campos contienen apuntadores a los nodos de los operandos. El operador a menudo se denomina etiqueta del nodo. Cuando se usan para traducir los nodos de un rbol sintctico pueden tener ms campos para guardar valores (o apuntadores a los mismos) de los atributos asociados al nodo.
7. Gramtica L-atribuida Tambin llamada atribuida por la izquierda, o definicin con atributos por la izquierda. En toda regla A X1 X2... Xn, cada atributo heredado de Xj 1 j n depende slo de: Los atributos (sintetizados o heredados) de los smbolos X1 X2... Xj-1. Los atributos heredados de A. Este tipo de gramticas no producen ciclos y adems admiten un orden de evaluacin en profundidad.
8. Gramtica S-atribuida
Es una gramtica atribuida que slo contiene atributos sintetizados Una gramtica S- atribuida es tambin L-atribuida. Los atributos sintetizados se pueden evaluar con un analizador sintctico ascendente conforme la entrada es analizada.
9. Grafos Dirigidos Acclicos para Expresiones Sirve para identificar expresiones comunes .Tiene un nodo para cada sub expresin de la expresin, un nodo interior representa un operador y sus hijos representan los operando.
10. Evaluacin ascendente de definiciones atributos sintetizados Los atributos se pueden evaluar con un analizador sintctico ascendente conforme la entrada es analizada.
11. Atributos sintetizados en la pila del analizador sintctico
A partir de un definicin con atributos sintetizados, el generador de analizadores sintcticos puede construir un traductor que evalu los atributos conforme analiza la entrada.
12. Definiciones con atributos por la izquierda
Toda definicin con atributos sintetizados es una definicin con atributos por la izquierda
13. Esquemas de traduccin
Un esquema de traduccin es una gramtica independiente de contexto en la que se asocian atributos con los smbolos gramaticales y se insertan acciones semnticas encerradas entre llaves { } dentro de los lados derechos de las producciones. Los esquemas de traduccin pueden tener tanto atributos sintetizados como heredados. Cuando se disea un esquema de traduccin, se deben respetar algunas limitaciones para asegurarse de que el valor de un atributo est disponible cuando una accin se refiera a l. Estas limitaciones, motivadas por las definiciones con atributos por la izquierda, garantizan que las acciones no hagan referencia a un atributo que an no haya sido calculado. El ejemplo ms sencillo ocurre cuando slo se necesitan atributos sintetizados, en este caso, se puede construir el esquema de traduccin creando una accin que conste de una asignacin para cada regla semntica y colocando esta accin al final del lado derecho de la produccin asociada.
14. Traduccin Descendente
Se trabaja con esquemas de traduccin en lugar de hacerlo con definiciones dirigidas por sintaxis, as que se puede ser explcito en cuanto al orden en que tienen que lugar las acciones y las evaluaciones de los atributos.
15. Diseo de un Traductor Predictivo
Un analizador sintctico predictivo es un tipo especial de analizador sintctico descendente recursivo en el que el smbolo del pre anlisis determina sin ambigedad el procedimiento seleccionado para cada no terminal.
16. Conclusiones
Las traducciones dirigidas por la sintaxis basan su anlisis en dos tipos de atributos, lo sintetizados, estos pueden obtenerlos de manera inmediata al calcular los valores de los nodos hijos; y los atributos heredados, los cuales estn definidos por los nodos padres o hermanos. Para realizar un anlisis sintctico se basan en la creacin de un grafo de dependencias en el cual a la hora de recorrerlo se evalan cada una de las acciones semnticas que se tienen asignadas para cada nodo respetivo. Este tipo de traduccin es til para determinar el tipo de una variable en una expresin, es decir, el chequeo de tipos; y verificar que este corresponda al que la expresin puede poseer. Se puede trabajar tanto con esquemas de traduccin como con definiciones dirigidas por sintaxis.