Está en la página 1de 3

Ensayo

Traductor orientado a la sintaxis


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.