5.5. ÁRBOLES DE DERIVACIÓN 83 ✷Ejemplo 70 Consi<strong>de</strong>re la gramática G = (V, T, P, S), con V = {S, A, B}, T = {a, b} y P dado por lassiguientes produccionesS → aB A → bAAS → bA B → bA → a B → bSA → aS B → aBBEl lenguaje L(G) es el conjunto <strong>de</strong> todos los strings en T ∗ que tienen el mismo número (≥ 1) <strong>de</strong> a’s yb’s. Se probará, por inducción en la longitud <strong>de</strong>l string que• S ∗ ⇒w si y sólo si w tiene tantas a’s como b’s• A ∗ ⇒w si y sólo si w tiene una a más que b’s• B ∗ ⇒w si y sólo si w tiene una b más que a’sLa hipótesis es obviamente cierta si |w| = 1, ya que A ⇒ a y B ⇒ b y ningún string <strong>de</strong> largo 1 <strong>de</strong>terminales es <strong>de</strong>rivable <strong>de</strong> S. También, ya que todas las producciones, excepto A → a y B → b incrementanel largo <strong>de</strong> un string, ningún string <strong>de</strong> longitud 1, excepto a y b, son <strong>de</strong>rivables <strong>de</strong> A y B, ni ninguno es<strong>de</strong>rivable <strong>de</strong> S.Suponga ahora que la hipótesis inductiva es verda<strong>de</strong>ra para todo w <strong>de</strong> largo k − 1 ó menos. Se mostraráque se cumple para |w| = k. Si S ∗ ⇒w entonces la <strong>de</strong>rivación <strong>de</strong>be comenzar con S → a o S → bA. En elprimer caso, w = aw 1 con |w 1 | = k − 1 y B ⇒ w 1 . Por la hipótesis inductiva, el número <strong>de</strong> b’s en w 1 es 1más que el número <strong>de</strong> a’s; por lo tanto, w tiene igual número <strong>de</strong> b’s que <strong>de</strong> a’s. Un argumento similar esválido si la <strong>de</strong>rivación comienza con S → bA. Para la prueba en la otra dirección, esto es, si |w| = k y wtiene tantas a’s como b’s, entonces S ⇒ w, consi<strong>de</strong>re que el primer símbolo <strong>de</strong> w es una a o una b. Supongaque w = aw 1 ; pero |w 1 | = k − 1 y tiene una b más que a’s. Por la hipótesis inductiva entonces B ⇒ w 1 .Luego S ⇒ aB ∗ ⇒aw 1 = w. Un argumento similar es válido si el primer símbolo <strong>de</strong> w es una b.Debe ahora probarse las aserciones para A y B, pero se hacen en forma similar a la <strong>de</strong> S.Otra gramática posible para este mismo lenguaje esS → abS → baS → aSbS → bSaS → SS5.5 Árboles <strong>de</strong> DerivaciónEs muy útil representar las <strong>de</strong>rivaciones como árboles. Estos árboles, llamados árboles <strong>de</strong> <strong>de</strong>rivación (o<strong>de</strong> parse) imponen una estructura en los strings <strong>de</strong> un lenguaje que es muy útil en aplicaciones como lacompilación <strong>de</strong> lenguajes <strong>de</strong> programación.Los vértices o nodos <strong>de</strong> un árbol <strong>de</strong> <strong>de</strong>rivación tienen etiquetas que son terminales, variables o el stringnulo ε. Si un nodo interior n tiene etiqueta A y los hijos <strong>de</strong> n tienen etiquetas X 1 , X 2 , . . . , X k (<strong>de</strong> izquierdaa <strong>de</strong>recha), entonces A → X 1 X 2 . . . X k <strong>de</strong>be ser una producción.La Figura 5.2 muestra el árbol para la <strong>de</strong>rivación <strong>de</strong> (id + id) ∗ id mostrada anteriormente.Nótese que si se leen las hojas <strong>de</strong> izquierda a <strong>de</strong>recha, se obtiene el string (id + id) ∗ id.Más formalmente, sea G = (V, T, P, S) una gramática libre <strong>de</strong> contexto. Un árbol es un árbol <strong>de</strong> <strong>de</strong>rivaciónsi• Cada vértice tiene una etiqueta que es un símbolo en V ∪ T ∪ ε✷
84 CHAPTER 5.ACEPTACIÓN Y GENERACIÓN DE LENGUAJES LIBRES DE CONTEXTO✏✏✏ ✏✏✏ ∗ ✏✏✏ ✏✏✏( )id ✏✏✏ ✏✏✏ + ididFigure 5.2: Árbol <strong>de</strong> <strong>de</strong>rivación <strong>de</strong> (id + id) ∗ id• La etiqueta <strong>de</strong> la raíz es S• Si a es un nodo interior y tiene etiqueta A, <strong>de</strong>be cumplirse que A ∈ V• Si n tiene etiqueta A y sus hijos <strong>de</strong> izquierda a <strong>de</strong>recha son n 1 , n 2 , . . . , n k con etiquetas X 1 , X 2 , . . . ,X k respectivamente, entoncesA → X 1 X 2 . . . X k<strong>de</strong>be ser una producción en P• Si un vértice n tiene etiqueta ε, entonces n es una hoja y es el único hijo <strong>de</strong> su padreEjemplo 71 Consi<strong>de</strong>re la gramática G = ({S, A}, {a, b}, P, S) en que P está compuesto porS → aAS|aA → SbA|SS|bay el árbol <strong>de</strong> la Figura 5.3.Los vértices interiores son 1, 3, 4, 5 y 7. El vértice 1 tiene etiqueta S y sus hijos, <strong>de</strong> izquierda a <strong>de</strong>recha,tienen etiquetas a, A y S. Nótese que S → aAS es una producción en P . Igualmente, el nodo 3 tiene etiquetaA y las etiquetas <strong>de</strong> sus hijos son S, b y A (<strong>de</strong> izquierda a <strong>de</strong>recha). A → SbA también es una producción.Los vértices 4 y 5 tienen etiqueta S, sus únicos hijos tienen etiqueta a y S → a es una producción. Porúltimo, el vértice 7 tiene etiqueta A y sus hijos, <strong>de</strong> izquierda a <strong>de</strong>recha, tienen etiquetas b y a. A → batambién es una producción. Por lo tanto, este árbol es un árbol <strong>de</strong> <strong>de</strong>rivación para G.Es posible exten<strong>de</strong>r el or<strong>de</strong>n <strong>de</strong> los hijos <strong>de</strong> un nodo a un or<strong>de</strong>namiento <strong>de</strong> izquierda a <strong>de</strong>recha <strong>de</strong> todaslas hojas. De hecho, dos vértices cualesquiera, ninguno <strong>de</strong> los cuales es un ancestro <strong>de</strong>l otro, uno está a laizquierda <strong>de</strong>l otro. Dados dos vértices v 1 y v 2 , se siguen los caminos <strong>de</strong> cada uno <strong>de</strong> ellos hacia la raíz, hastaque se encuentran en un vértice w. Sean X 1 y X 2 los hijos <strong>de</strong> w en los caminos <strong>de</strong>s<strong>de</strong> v 1 y v 2 , respectivamente.Si v 1 no es ancestro <strong>de</strong> v 2 , o viceversa, X 1 ≠ X 2 . Si X 1 está a la izquierda <strong>de</strong> X 2 como hijos <strong>de</strong> w, entoncesv 1 está a la izquierda <strong>de</strong> v 1 . Por ejemplo, en el árbol anterior, si v 1 = 9 y v 2 = 11, entonces w = 3, X 1 = 5,X 2 = 7; y como 5 está a la izquierda <strong>de</strong> 7, se <strong>de</strong>duce que 9 está a la izquierda <strong>de</strong> 11.✷