Este documento describe los conceptos fundamentales detrás de un traductor orientado a la sintaxis. Explica que la gramática define la sintaxis de un lenguaje a través de terminales, no terminales y producciones. También describe cómo un árbol de análisis sintáctico muestra cómo una cadena se deriva de la gramática, y cómo los esquemas de traducción unen fragmentos de código a las producciones para generar la traducción. Finalmente, concluye que el análisis sintáctico es crucial para descomponer el programa fuente y
Original Description:
Traductor orientado a la sintaxis. Arboles sintacticos. De la materia Lenguajes y autómatas II.
Este documento describe los conceptos fundamentales detrás de un traductor orientado a la sintaxis. Explica que la gramática define la sintaxis de un lenguaje a través de terminales, no terminales y producciones. También describe cómo un árbol de análisis sintáctico muestra cómo una cadena se deriva de la gramática, y cómo los esquemas de traducción unen fragmentos de código a las producciones para generar la traducción. Finalmente, concluye que el análisis sintáctico es crucial para descomponer el programa fuente y
Este documento describe los conceptos fundamentales detrás de un traductor orientado a la sintaxis. Explica que la gramática define la sintaxis de un lenguaje a través de terminales, no terminales y producciones. También describe cómo un árbol de análisis sintáctico muestra cómo una cadena se deriva de la gramática, y cómo los esquemas de traducción unen fragmentos de código a las producciones para generar la traducción. Finalmente, concluye que el análisis sintáctico es crucial para descomponer el programa fuente y
Introduccin La fase de anlisis de un compilador descompone un programa fuente en piezas componentes y produce una representacin interna, a la cual se le conoce como cdigo intermedio. L a fase de sntesis traduce el cdigo intermedio en el programa destino. El anlisis se organiza de acuerdo con la sintaxis del lenguaje que se va a compilar. La sintaxis de un lenguaje de programacin describe el formato apropiado de sus programas, mientras que la semntica del lenguaje define lo que sus programas significan; es decir, lo que hace cada programa cuando se ejecuta. Desarrollo 2.2 Definicin de sintaxis La gramtica es la notacin que se utiliza para especificar la sintaxis de un lenguaje. Una gramtica describe en forma natural la estructura jerrquica de la mayora de las instrucciones de un lenguaje de programacin. Por ejemplo, una instruccin if-else en puede tener la siguiente forma: if ( expresin ) instruccin else instruccin 2.2.1 Definicin de gramticas La gramtica tiene cuatro componentes: 1. Un conjunto de smbolos terminales (tokens). Los terminales son los smbolos elementales del lenguaje definido por la gramtica. Ejemplo: if, else, (, ). 2. Un conjunto de no terminales (Variables sintcticas). Cada no terminal representa un conjunto de cadenas o terminales. Ejemplo: expresin, instruccin 3. Un conjunto de producciones, en donde cada produccin consiste en un no terminal, llamada encabezado o lado izquierdo de la produccin, una flecha y una secuencia de terminales y no terminales, llamada cuerpo o lado derecho de la produccin. La intencin intuitiva de una produccin es especificar una de las formas escritas de una instruccin; si el no terminal del encabezado representa a una instruccin, entonces el cuerpo representa una forma escrita de la instruccin.
Ejemplo: expresin if ( expresin ) instruccin else instruccin 4. Una designacin de una de los no terminales como el smbolo inicial 2.2.2 Derivaciones Una gramtica deriva cadenas empezando con el smbolo inicial y sustituyendo en forma repetida un no terminal, mediante el cuerpo de una produccin para ese no terminal. Las cadenas de terminales que pueden derivarse del smbolo inicial del lenguaje definido por la gramtica. 2.2.3 rboles de anlisis sintctico Un rbol de anlisis sintctico muestra grficamente la manera en que el smbolo inicial de una gramtica deriva a una cadena en el lenguaje. Si el no terminal A tiene una produccin A -> XYZ, entonces un rbol de anlisis sintctico podra tener un nodo interior etiquetado como A, con tres hijos llamados X, Y y Z, de izquierda a derecha:
2.2.4 Ambigedad Tenemos que ser cuidadosos al hablar sobre la estructura de una cadena, de acuerdo a una gramtica. Una gramtica puede tener ms de un rbol de anlisis sintctico que genere una cadena dada de terminales. Se dice que dicha gramtica es ambigua. Para mostrar que una gramtica es ambigua, todo lo que debemos hacer es buscar una cadena de terminales que sea la derivacin de ms de un rbol de anlisis sintctico. 2.2.4 Asociatividad de los operadores Por convencin, 9+5+2 es equivalente a (9+5)+2 y 9-5-2 es equivalente a (9-5)-2. Cuando un operando como 5 tiene operadores a su izquierda y a su derecha, se requieren convenciones para decidir qu operador se aplica a ese operando. Decimos que el operador + se asocia por la izquierda, porque un operando con signos positivos en ambos lados de l pertenece al operador que est a su izquierda. En la mayora de los lenguajes de programacin, los cuatro operadores aritmticos (suma, resta, multiplicacin y divisin) son asociativos por la izquierda. Algunos operadores comunes, como la exponenciacin, son asociativos por la derecha. Como otro ejemplo, el operador de asignacin = tambin es asociativo por la derecha. 2.2.6 Precedencia de operadores Dada la expresin 9+5*2. Hay dos posibles interpretaciones de esta expresin: (9+5)*2 9+(5*2).
En la aritmtica ordinaria, la multiplicacin y la divisin tienen mayor precedencia que la suma yla resta. Por lo tanto, * recibe el 5 tanto en 9+5*2 como en 9*5+2; es decir, las expresiones son equivalentes a 9+ (5*2) y (9*5)+2, respectivamente. 2.3 traduccin orientada a la sintaxis La traduccin orientada a la sintaxis se realiza uniendo reglas o fragmentos de un programa a las producciones en una gramtica. Por ejemplo, considere una expresin expr generada por la siguiente produccin: expr -> expr i + term Aqu, expr es la suma de las dos subexpresiones expr i y term. 2.3.1 Conceptos de atrubito y esquema de traduccin Atributos: Un atributo es cualquier cantidad asociada con una construccin de programacin. Esquemas de traduccin (orientada a la sintaxis): Un esquema de traduccin es una notacin para unir los fragmentos de un programa a las producciones de una gramtica. Los fragmentos del programa se ejecutan cuando se utiliza la produccin durante el anlisis sintctico. El resultado combinado de todas estas ejecuciones de los fragmentos, en el orden inducido por el anlisis sintctico, produce la traduccin del programa al cual se aplica este proceso de anlisis/sntesis. Conclusin Gracias al analizador sintctico podemos determinar y generar una cadena mediante una gramtica ya antes establecida, la cual debe ser capaz de garantizar que la traduccin sea correcta. El anlisis de un compilador nos ayuda a descomponer el programa fuente el cual produce una representacin interna para traducir el cdigo. Es una parte muy importante para la creacin y el correcto funcionamiento del compilador.