Está en la página 1de 3

Arboles de Derivacin / Anlisis

Es posible representar grficamente una derivacin. El grafico resultante tiene forma de


rbol y se llama rbol de derivacin o rbol de anlisis.
El nodo raz se etiqueta con el smbolo inicial. Todo nodo etiquetado con un no terminal
tiene nodos hijos etiquetados con los smbolos del lado derecho de la produccin usada
para sustituir ese no terminal. Los nodos etiquetados con smbolos terminales no tienen
hijos.
Ejemplos:
S AB
A aA|a
B bB|b
Derivar aabbb
S => AB => aAB => aaB => aabB => aabbB => aabbb

S
/ \
A B
/ \ / \
a A b B
| / \
a b B
|
b

Ejemplo:
S SbS | ScS | a
Derivar
1) S => SbS => SbScS => abScS => abacS => abaca
2) S => ScS => Sca => SbSca => abSca => abaca

Para 1 y 2 existen dos rboles de derivacin distintos.


Gramticas Ambiguas y No Ambiguas
Una gramtica se dice que es ambigua si hay dos o ms arboles de derivacin distintos
para la misma cadena. Una gramtica en la cual, para toda cadena w, todas las
derivaciones de w tiene el mismo rbol de derivacin, es no ambigua.

Ejemplo 1 (Lenguaje natural):


Veo a una persona con un telescopio.
X = 3+4*2

Si todas las gramticas independientes del contexto para un lenguaje son ambiguas, se
dice que el lenguaje es un lenguaje inherentemente ambiguo.
Ejemplo:
{ai bj ck | i=j o j=k}
S [[produccin]] aSbX | YbSc |
X [[produccin]] Xc |
Y [[produccin]] aY |
S => aSbX => abXc => abc
S => YbSc => abSc => abc

Mtodos de transformacin de gramticas


Es deseable encontrar un modelo estndar (0 una forma normal) para las producciones.
Como primer paso, necesitamos limpiar las gramticas para eliminar las producciones y
smbolos intiles.
Ejemplo:
S Aa | B | D
Bb
A Aa | Ba | B
C abd
Al simplificar las gramticas podemos ganar tiempo, y ahorrar muchos recursos.
Mdulo de Python PLY
Lex
Yacc
sudo apt-get install python-ply*

También podría gustarte