Sie sind auf Seite 1von 10

ANLISIS SINTCTICO ASCENDENTE,

DESCENDENTE Y POR PRECEDENCIA


DE OPERADORES
Compiladores
Anlisis Sintctico

Compiladores (Ing. Samuel Soto)

Ambigedad
Una gramtica para la cual cierta cadena de terminales tiene

dos o ms arboles de anlisis sintctico distintos, o en forma


equivalente, dos o ms derivaciones por la izquierda, o dos o
ms derivaciones por la derecha, se considera ambigua.
En la mayora de los casos se inters prctico, es posible

redisear una gramtica ambigua de tal forma que se


convierta en una gramtica sin ambigedad para el mismo
lenguaje.
No obstante, las gramticas ambiguas con ciertos trucos

aplicados llevan algunas veces a la produccin de


analizadores sintcticos ms eficientes.

Compiladores (Ing. Samuel Soto)

Escritura de una gramtica


Las gramticas describen la mayora de las sintaxis de los lenguajes de

programacin. Toda construccin que se pueda describir mediante una expresin


regular tambin se puede describir por medio de una gramtica.

Por ejemplo, para la expresin regular (a|b)* abb y la gramtica:


A0 a A0 | b A0| b A1

A1 b A2
A2 bA3
A3
Las expresiones regulares son tiles para describir la estructura de las

construcciones como los identificadores, las constantes, las palabras reservadas


y el espacio en blanco.
Mientras que las gramticas son tiles para describir estructuras anidadas, como
los parntesis balanceados, las instrucciones begin-end relacionadas, las
instrucciones if-then-else correspondientes, etc.
Las estructuras anidadas no pueden describirse mediante expresiones regulares.

Compiladores (Ing. Samuel Soto)

Escritura de una gramtica


Consideraciones
Eliminacin de la ambigedad: algunas veces es conveniente
reescribir una gramtica para eliminar la ambigedad que sta
presenta. (ver ejemplo 4.16, pgina 211).
Eliminacin de la recursividad por la izquierda: una gramtica

es recursiva por la izquierda si tiene una terminal A tal que haya


una derivacin A =>+ A. Los mtodos de anlisis sintctico
descendentes no pueden manejar las gramticas recursivas por la
izquierda por lo que se necesita una transformacin para
eliminarlas. (Ver ejemplo 4.17, pgina 212).
Factorizacin por la izquierda: es una transformacin gramatical

til para producir una gramtica adecuada para anlisis sintctico


predictivo, o descendente. (ver ejemplo 4.22, pgina 215)

Compiladores (Ing. Samuel Soto)

Anlisis sintctico descendente


Se considera un intento de encontrar una derivacin por

la izquierda para una cadena de entrada.


Tambin se puede considerar como un intento de

construir un rbol de anlisis sintctico para la entrada


comenzando desde la raz y creando nodos del rbol en
orden previo.
Puede verse como el problema de construir un rbol de

anlisis sintctico para la cadena de entrada, partiendo


desde la raz y creando nodos del rbol de anlisis
sintctico en pre-orden (profundidad primero).
Ver ejemplo 4.27, pgina 217 y 218

Compiladores (Ing. Samuel Soto)

Anlisis sintctico descendente


Anlisis sintctico de descenso recursivo: un programa de anlisis

sintctico de descenso recurso consiste en un conjunto de


procedimientos, uno para cada no terminal. La ejecucin empieza con el
procedimiento para el smbolo inicial, que se detiene y anuncia que tuvo
xito si el cuerpo de su procedimiento explora toda la cadena completa
de entrada. (ver ejemplo 4.29)
La implementacin de las funciones PRIMERO y SIGUIENTE auxilian la construcciones de

analizadores sintcticos descendentes y ascendentes.

Gramticas LL(1): una gramtica en la que es posible elegir la

produccin correcta con la cual se pueda expandir un no terminal dado,


con solo analizar el siguiente smbolo de entrada, se conoce como LL(1).
Esta gramticas nos permiten construir una tabla de anlisis sintctico
predictivo que proporcione, para cada no terminal y cada smbolo de
preanlisis, la eleccin de la produccin correcta.
Anlisis sintctico predictivo no recursivo: puede construirse un

analizador sintctico predictivo no recursivo mediante el mantenimiento


explcito de una pila, en vez de hacerlo mediante llamadas recursivas
implcitas. (ver figura 4.19 y ejemplo 4.35).

Compiladores (Ing. Samuel Soto)

Anlisis sintctico ascendente


Un anlisis sintctico ascendente corresponde a la

construccin de un rbol de anlisis sintctico para una


cadena de entrada que empieza en las hojas y avanza hacia la
raz. (Ver figura 4.25).
Reducciones: puede considerarse el anlisis sintctico

ascendente como el proceso de reducir w al smbolo inicial de


la gramtica. En caso paso de reduccin se sustituye una
subcadena especifica que coincide con el cuerpo de una
produccin por el no terminal que se encuentra en el
encabezado de esa produccin. (ver ejemplo 4.37)
Anlisis sintctico de desplazamiento-reduccin: es una

forma de anlisis sintctico ascendente, en el cual una pila


contiene smbolos gramaticales y un bfer de entrada contiene
el resto de la cadena que se va a analizar. (ver pgina 236).

Compiladores (Ing. Samuel Soto)

Anlisis sintctico por precedencia de


operadores
Para una pequea clase de gramticas se puede

construir con facilidad a mano eficientes analizadores


sintcticos ascendentes.
Estas gramticas, por precedencia de operadores, tienen

la propiedad de que ningn lado derecho de la


produccin es ni tiene 2 terminales adyacentes.
Una gramtica con esta ltima propiedad de denomina

gramtica de operadores.
Referencia: http://wwwlt.ls.fi.upm.es/compiladores/Documentos/AStPO.pdf

Compiladores (Ing. Samuel Soto)

Tarea
Investigar los temas relacionados a:
Analizadores sintcticos LR.
Analizadores sintcticos LR simples.
Analizadores sintcticos LR cannicos.
Analizadores sintcticos LR con lectura anticipada.
Anlisis sintctico ascendente de gramticas ambiguas.
YACC: con ejemplo de su implementacin.

Compiladores (Ing. Samuel Soto)

Bibliografa
Compiladores 2da. Edicin
Alfred Aho
Capitulo 4

10

Das könnte Ihnen auch gefallen