Está en la página 1de 66

Eliminacin de la ambigedad.

Generacin de matriz predictiva


(clculo first y follow)
Anlisis Sintctico
Medina Garca Gabriel
Ramos Melndez Daniel
Dudas y Aclaraciones
Para la explicacin de esta temtica cambiaremos un poco la jugada
comenzando con las dudas que se puedan tener.
Para facilitar la comprensin definiremos primeramente los conceptos que
sern necesarios conocer antes de llevar acabo los procedimientos que
veremos durante la presentacin. (Eliminacin de ambigedad).
GLC


L(G)


*
Derivacin
rbol de Derivacin
Palabra o Cadena
Estructura Sintctica
Inherentemente Ambigo.

Conceptos de Ambigedad
GLC : Gramtica Libre de Contexto.
: cadena o palabra.
: Pertenece.
L(G) : Lenguaje generado por la gramtica.
: Incluye , Ejemplo: A B , A est incluido en B
: Alfabeto
* : 1 o ms.
Derivacin : ir sustituyendo una variable que aparece en la cabeza de
alguna produccin por su cuerpo.
1. A 1B
2. A 0A
3. B 1B
4. B 0C
5. B 0
6. C 1B
7. C 0A
Este conjunto de producciones son de la forma de una Gramtica
Regular. A partir de A, smbolo inicial, se sustituyen sucesivamente para
generar una cadena formada solo por smbolos terminales que
pertenecen al lenguaje:
A ==>
2
0A ==>
2
00A ==>
1
001B ==>
5
0010

Conceptos de Ambigedad
Conceptos de Ambigedad
rbol de Derivacin : Es un rbol formado a partir de la
derivacin de una gramtica. Sirve para estudiar la
ambigedad.
Caractersticas:
- Cada nodo interior es No Terminal.
- Cada nodo hoja es Terminal o
- Si existe una produccin A X
1
X
2
. X
k
,
- Para que el Xi sea debe existir la produccin Xi
- La cadena resultado del rbol: las hojas del rbol
concatenadas de izquierda a derecha, recorrido en pre
orden.
Ejemplo:
S ==> 1S1 ==> 11S11 ==> 110S011 ==> 1101011
Conceptos de Ambigedad
Cadena o Palabra: Dado un alfabeto, podemos formar palabras o cadenas
con los smbolos del alfabeto. Por ejemplo, dado el alfabeto {a, b, c}
podemos formar las siguientes palabras o cadenas: a, b, ab, cab, bb, aaaa.
Estructura Sintctica: la gramtica no determina la estructura sintctica
de los elementos de la palabra , esta viene dada por el rbol de derivacin.
Inherentemente Ambigo: Se dice que un Lenguaje Libre de Contexto es
inherente ambiguo si todas las gramticas que presentan ese lenguaje son
ambiguas. Los lenguajes independientes del contexto para los cuales todas
las GIC que los generan son ambiguas, se dice que tienen una ambigedad
inherente.
Ambigedad
Ambiguedad: El concepto general nos
dice que es la posibilidad de que algo
pueda entenderse de varios modos o
de que admita distintas
interpretaciones.
Incertidumbre, duda o, vacilacin:
djate ya de ambigedades y
contesta la pregunta.
Una vez definidos los conceptos que se utilizarn dentro de la temtica de
eliminacin de ambigedad podremos entender meramente lo que
ambigedad nos trata de decir.
Ambigedad
Este concepto puede ser aplicado a tanto a un
lenguaje, cadenas, como a una gramtica (Lenguaje
ambigo, Cadena ambiga, Gramtica ambiga).
Una gramtica es ambiga si el lenguaje que genera tiene cadenas que son
ambigas.
Una cadena es ambiga si existen
dos rboles de derivacin distintos
que la representan.
Ej: G = { { S } , { a , + , * , ( , ) }, P , S}
P/ 1) S S + S
2) S S * S
3) S ( S )
4) S a
Ambigedad
El problema de la ambigedad es muy complejo
ya que no existe ningn algoritmo que permita
reconocer si una gramtica es o no ambigua y, en
el caso de que lo sea, tampoco existe ningn
algoritmo que permita eliminar dicha
ambigedad (nisiquiera es posible eliminarla en
todos los casos).
Entonces por qu el tema es ELIMINACIN DE
AMBIGEDAD!!!
Gramtica ambiga
Ok, antes de empezar a atacar, una cosa es segura, tenemos que conocer
de qu se trata y pensar en un modo de solucionar la problemtica
Un ejemplo clsico de gramtica
ambigua se presenta en la
definicin de las expresiones
aritmticas que aparecen
comnmente en los lenguajes
deprogramacin.
Gramtica ambiga
El siguiente ejemplo simplificado permite definir expresiones en las que
intervienen las cuatro operaciones aritmticas bsicas con operandos que
pueden ser identificadores (id) o constantes (cte). Llamaremos a esta
gramtica GExp0.
G_Exp_0
Muy bien, paso a paso iremos analizando que tenemos por aqu
Tenemos nuestros terminales: id,
cte, (, ), +, -
Nuestros no terminales: <expre> y
<op>
Nuestro smbolo inicial de la
produccin. (S) que es una <expre>
G_Exp_0
Y nuestras reglas de produccin
Una expresin consiste en:
Una expresin seguida de
un operador y luego otra
expresin o, una expresin
entre parntesis, o un
identificador, o, una
constante.

Y un operador puede ser: +,
-, *, o tambin /.
G_Exp_0
Es fcil demostrar que esta gramtica es ambigua construyendo dos rboles
diferentes para generar la misma expresin, concretamente
id+cte*id
id+cte*id ; es nada ms y nada menos que nuestra cadena o palabra.
G_Exp_0
En el rbol de la izquierda la
operacin suma, entre los dos
primeros operandos, se lleva a cabo
antes que la multiplicacin.
Sin embargo, en el rbol de la
derecha se comenzara
multiplicando los dos ltimos
operandos y el resultado de esta
operacin se le sumara el valor del
primer operando
G_Exp_0
Por qu es que se evala de esa manera??
La forma en que se evalua
la estructura sintntica de
la palabra es por medio de
los niveles que poseen los
terminales segn los nodos
en el rbol.

Es decir
Nivel
Nivel
Nivel
rbol Izquierdo
Dentro de este nivel
evaluamos una expresin
Que viene a estar compuesta por
una expresin multiplicada por
un identificador :
Y esa expresin consiste en la
suma de un identificador con una
constante:
Es por ello que primero se realiza la
expresin de la suma y a esta finalmente
se le multiplica por el identificador.
rbol Derecho
Dentro de este nivel
evaluamos una expresin
Que viene a estar compuesta
por un identificador sumado a
una expresin :
Y esa expresin consiste en la
multiplicacin de una constante
con un identificador:
Es por ello que primero se realiza la expresin de
la multiplicacin y esta finalmente se le suma al
identificador.
Anlisis de la situacin
Es evidente que a pesar de que la expresin es correcta y es la misma, la
utilizacin de cada rbol generara en cada caso resultados diferentes
rbol Izquierda rbol Derecha
Solucin del problema
Probablemente ya habrs pensado en una solucin si ya descifraste la causa
del problema
La causa del problema es la JERARQUA
DE LAS OPERACIONES
Y la solucin para resolver este caso de
ambigedad es IMPONER UNA JERARQUA
ENTRE LOS OPERADORES
Como suele ser habitual, consideraremos que la multiplicacin y la
divisin tienen una prioridad ms alta que la suma y la resta. Si
aparecen varias operaciones con la misma prioridad se ejecutarn
de izquierda a derecha, aunque en este caso el resultado de la
expresin siempre ser el mismo.
Solucin del problema
Ahora, para definir la jerarqua se van a introducir en la gramtica nuevos
smbolos no terminales:
<trmino> y <op-adt> (este
estar asociado a los operadores
aditivos suma y resta)
<factor> y <op-mult> (este estar
asociado a los operadores
multiplicacin y divisin)
As llegamos a la siguiente gramtica, equivalente a G_Exp_0:
Tenemos nuestros terminales: id,
cte, (, ), +, -
Nuestros no terminales
Nuestro smbolo inicial de la
produccin. (S) que es una <expre>
Nueva gramtica
G_Exp_1
Y nuestras nuevas reglas de
produccin
Una expresin consiste en:
Una expresin seguida de un
operador aditivo y luego un
trmino, o, un trmino.

Un trmino consiste en: Un
trmino seguido de un
operador multiplicativo y
luego un factor, o, un factor.

Un factor consiste en: una
expresin entre parntesis, o,
un identificador, o, una
constante.
Un op-adt: +

Y un op-mult: * /
G_Exp_1
Con esta nueva grmtica, a la
que llamaremos G_Exp_1, la
expresin anterior tendra un
nico rbol de derivacin.
Este rbol representa
la estructura de la
expresin

id + cte * id

, obligando a que la
multiplicacin se
realice antes que la
suma.
G_Exp_1
Por qu no intentamos
nosotros construir otro rbol
con esa nueva gramtica.
Nuevo rbol
La gramtica nos indica comenzar con una expresin S=<expre>
Una expresin consiste en una expresin seguida de un operador aditivo
seguido de un trmino, o, un trmino.
En este caso a diferencia del rbol anterior derivar nicamente en un
trmino.
Un trmino consiste en un trmino seguido de un operador multiplicacin
seguido de un factor, o, un factor.
Derivaremos en la primera opcin.
Ahora un factor puede derivar en una
constante, un operador
multiplicacin puede ser el smbolo *,
y un factor puede ser un id.
Un trmino puede derivar en un factor.
Nuevo rbol
Bin! Logramos crear otro rbol con xito!, Pero????
No es la misma cadena de la cul quisimos obtener otro rbol de
derivacin
Esto es porque recordemos que la estructura
sintctica de la cadena no viene
determinada por la gramtica sino por el
rbol de derivacin que es obtenido de la
estructura misma de la cadena.
Volviendo a nuestro objetivo inicial, por ms
que intentemos, no lograremos hayar otro
rbol de derivacin para la cadena
id + cte * id
Con lo cul hemos logrado eliminar la
ambigedad que exista en
dicho lenguaje.
????
Ahora
Comnmente estas son las cuestiones existentes que me envan cuando
presento esta temtica.
Introducir nuevos smbolos no terminales en la gramtica, no define una nueva
gramtica?
Al alterar las reglas de produccin de la gramtica se est generando un nuevo
lenguaje?
Es necesario reducir o eliminar la ambigedad siempre que sea posible?
Todos los lenguajes pueden poseer ambigedad?
Hey!, que hay de un ejemplo de ambigedad en donde no se trate de jerarqua
de operadores?
Wow, en verdad estoy entendiendo la temtica!!
Conoce personas solteras cerca de tu ciudad.
Ejectivamente, una nueva gramtica ha sido creada la cual posee otros elementos
Un nuevo lenguaje el cul en este caso ya no posee ambigedad en sus cadenas.
Dependiendo del uso que tu lenguaje vaya a tener, el lenguaje natural es un lenguaje con mucha ambigedad por ejemplo, pero no es
necesario que sea un lenguaje totalmente estricto, simplemente claro.
Puede ser que as sea, sin embargo se presenta en GLC, donde a la vez todo lenguaje regular es LC.
Otro ejemplo
La grmtica S AA, A aSa, A a representada a continuacin es
ambiga: la palabra a
5
tiene dos rboles de derivacin distintos.
Es suficiente que haya una palabra
con dos rboles de derivacin
distintos para que la gramtica sea
ambiga. Esto quiere decir que existe
otra gramtica de tipo 2 no ambiga
y que genera el mismo lenguaje.
Otro ejemplo
El lenguaje generado es {a
2+3i
: i >= 0} y otra gramtica no
ambigua que tambin genera este lenguaje es:
S aa, S aaU, U aaaU,
U aaa Aqu a
5
solo tiene
un rbol de derivacin asociado
que se muestra en la figura.
Donde podemos apreciar al igual que en la gramtica del
ejemplo anterior fu necesario agregar nuevos smbolos
no terminales, en este caso U para eliminar la ambigedad
que la gramtica posea.
Problemas
El problema de la ambigedad es que esta suele ser demasiado compleja al
momento de evaluarla.
Lo que nos lleva a la pregunta

Existe un algoritmo para determinar si una gramtica es ambiga o no?
Y la respuesta es NO, no existe un algoritmo, la nica forma de identificar si
es ambiga es desarrollar todas y cada una de las palabras para comprobar
que no existan dos rboles de derivacin (O MS!) para una misma palabra
.

Adems ni siquiera es posible eliminarla en todos los casos, por ejemplo es
imposible eliminar la ambigedad para los lenguajes libres de contexto para
los cuales todas las GLC que los generan son ambigas.

Es lo que conocemos como, tienen una ambigedad inherente.
Problemas
As mismo no debemos confundir que se pueden obtener varias
derivaciones para una palabra y estas con el mismo rbol de derivacin, lo
cual NO ES AMBIGEDAD! A diferencia de que una misma cadena posea
ms de un rbol de derivacin
Ejemplo: sea la gramtica
G = ({0, 1, 2, 3, 4, 5, 6, 7, 8, 9},{N,C}, N,
{N::= C | NC, C ::=0|1|2|3|4|5|6|7|8|9})
Consideraremos la derivacin:

N NC NCC CCC 2CC 23C
234
El rbol de derivacin correspondiente es:
Problemas
Sin embargo podemos realizar las siguientes derivaciones
N NC NCC CCC 2CC 23C
234

N NC NCC CCC C3C 23C
234

N NC NCC CCC 2CC 2C4
234
Siendo el mismo rbol de derivacin anterior. Por lo cual no
es ambigedad
Conclusiones
Con esto terminamos lo que es la ambigedad, pudimos ver a travs de esta
presentacin una gran serie de conceptos que nos enriquecieron an ms
este tipo de temtica ,

aprendimos un poco de la simbologa que se utiliza
los trminos involucrados en el tema
reforzamos el uso de los rboles de derivacin y les dimos una
aplicacin dentro de ambigedad
se present un ejemplo clsico que es el de las operaciones aritmticas
donde se ve el caso de ambigedad, como eliminarla, como se desarrolla
la lectura de los rboles, la solucin que se le da al problema, comprobar
si esa solucin es cierta y qu posibles cuestionamientos se tienen
comunmente en esta ejemplificacin
Conclusiones
vimos tambin otro ejemplo distinto a las operaciones
aritmticas
con qu problemas se puede enfrentar uno ante la ambigedad
Y que no hay que confundir, varias derivaciones con un mismo
rbol, con ambigedad.
Generacin de matriz predictiva
(clculo first y follow)
Ahora nos adentraremos un poco ms a los misteriosos campos
del anlisis sintctico, que personalmente a m me intrig desde el
momento que me dijeron, -- Van a crear su propio lenguaje de
Programacin -- , !!!!!!!!.
Wow!!!!, se que los gigantes genios de la programacin son los
que han hecho esto, y yo, como es obvio, utilizo sus lenguajes de
programacin, pero, almenos yo, como hiba a ensearle a la
computadora que un if es un if, y tiene que ser utilizado con su
estructura y si es de lo contrario est incorrecto????
Bueno, dicen no hay pero que valga y as es.
Vamos a tomar accin y realizar varias de las tareas que
involucran el anlisis sintctico y a generar varios de los
componentes involucrados tambin.
Dudas y Aclaraciones
Estoy hablando de la matriz predictiva por medio del clculo first y
follow.
Esta tcnica de comenzar por el final di muy buenos resultados,
sigmosla de nuevo, abordando desde un inicio las dudas y aclaraciones
del tem siguiente.
Dudas y Aclaraciones
Para facilitar la comprensin definiremos primeramente los conceptos que
sern necesarios conocer antes de llevar acabo los procedimientos que
veremos durante la presentacin. (Generacin de la Matriz Predictiva,
clculo First y Follow).
$
M [X,a]
P
S
X
1, 2, n

Pila
Salida de producciones
Tabla de anlisis sintctico
predictivo
Produccin de x de la
gramtica.
Error

Conceptos Matriz Predictiva
$: Fin de Cadena
M [X,a]: Posicin de la Matriz en X, a
P: Firsts (Primeros)
S: Follows (Segundos)
X: Elemento en anlisis.
a: terminal.
1, 2, n: En la utilizacin de Produccin del tipo X 1
Pila: La pila contiene una secuencia
de smbolos gramaticales con un
smbolo de pesos en la parte
inferior que indica la base de la
pila.
Conceptos Matriz predictiva
Salida de Producciones:
El analizador sintctico posee
una salida, las producciones
utilizadas y resultado del
anlisis.
Seguramente has de pensar
Caemos en lo mismo!!!, ms
conceptualizacin y nada de
aplicacin de estos conceptos
dentro de la prctica!!???
Conceptos Matriz Predictiva
No trates de enterder, al menos hasta
este punto, meramente de donde
salieron estos componentes, como se
construyeron, como se usan, que pasa
con ellos, como
Conceptos Matriz Predictiva
Primeramente lo que quiero es que entiendas que un analizador sintctico
trabaja con una pila, adems de otros componentes y como salida muestra
las producciones que utiliz y el resultado.
Que si te parace se te hace ms fcil comprenderlo aplicado, por el
momento podemos definir que las producciones son las notaciones BNF de
nuestro lenguaje ya realizadas y el resultado es precisamente si acept la
cadena o no la acept (ocurri un error).
Ms aplicado? Nada ms y nada menos que as
Conceptos Matriz Predictiva
Analizando la siguiente cadenita
Con nuestras reglas de produccin
(BNF)
Durante el anlisis las
salidas son la produccin
1), la 2), la 4), y devido a
que no existi un then
seguido de la condicin
del if, la cadena no es
vlida y marca error.
Conceptos Matriz predictiva
Eso en cuanto a salida de producciones
Volvamos a los conceptos
Tabla de anlisis sintctico predictivo
M *V,V+: Posicin
de la Tabla en V, V
M [X,a]: Posicin
de la Tabla en X,
a
Producciones
Conceptos Matriz predictiva
Produccin de x de la gramtica:
que son las producciones utilizadas y
el resultado del anlisis.
Significa sin tanta filosofa que cuando
analizamos el smbolo en cuestion la salida
podr ser una produccin de la gramtica.
Recuerda que te coment que el analizador
sintctico posee una salida,
Produccin de x de la gramtica es la
produccin que nos da de salida al
analizar un smbolo.
Conceptos Matriz predictiva
Y por ah viste un Error:
Sin embargo, como puedieron
ver en la tabla de anlisis
predictivo podemos designar
muchos tipos de error, cuando
encuentre cierto no terminal y
un cierto terminal en la
secuencia.
Significa en la forma en cual es un error, Wow!
Suponiendo el if
Si recibo un no terminal <COND> y poseo en cadena un
end esto produce un error, (ms adelante veremos por
qu).
<COND>
Anlisis Sintctico
Mencionados anteriormente algunos de los componentes del anlisis
sintctico te explicar el esquema general que este posee
Un programa sintctico
est guiado por tablas.
una pila
un buffer de entrada (la
cadena que se va a
analizar con $ al final)
una tabla de anlisis
predictivo
y una salida de
produccines
Anlisis Sintctico
Se controla el analizador sintctico mediante un programa que se comporta
como sigue, muchsima atencin:
Sea X el smbolo superior de la pila y a el smbolo en curso de la entrada:
estos dos smbolos determinan la accin del analizador y tienen las
siguientes acciones:
X a
1)Si x = a = $ El string es vlido.
2)Si x = a $ Se saca x de la pila y Se
mueve el apuntador al siguiente
smbolo o analizador en curso.
Anlisis Sintctico
X a
3)Si x es un no terminal el programa
consulta la entrada de M [X,a] de la
tabla de la matriz de anlisis sintctico.
Esta entrada ser o una produccin de x de la gramtica o una entrada
de error.
X
a
Produccin 7 de la
gramtica
Ejemplo
Ser ms claro por medio de un ejemplo recordando que siempre debes
tener muy presentes estas 3 reglas Las tendremos aqu cerca en todo
momento, no las pierdas de vista.
Comencemos
1)Si x = a = $ El string es vlido.
2)Si x = a $ Se saca x de la pila y
Se mueve el apuntador al siguiente
smbolo o analizador en curso.
3)Si x es un no terminal el
programa consulta la entrada de
M [X,a] de la tabla de la matriz de
anlisis sintctico.
Nuestras reglas de produccin
La cadena que
validaremos
PILA ENTRADA SALIDA
$<E> Id+Id$
Ejemplo
A continuacin se dar una corrida a la gramtica
para saber si la cadena es vlida
Como estado inicial
En pila poseemos el smbolo
inicial de la gramtica y $ en
la base. Y en entrada la
cadena con el apuntador al
primer smbolo a analizar
1)Si x = a = $ El string es vlido.
2)Si x = a $ Se saca x de la pila y
Se mueve el apuntador al siguiente
smbolo o analizador en curso.
3)Si x es un no terminal el
programa consulta la entrada de
M [X,a] de la tabla de la matriz de
anlisis sintctico.
No es 1), No es 2),
Eso es es !, es 3)., a
buscar en la tabla
Ejemplo
1)Si x = a = $ El string es vlido.
2)Si x = a $ Se saca x de la pila y
Se mueve el apuntador al siguiente
smbolo o analizador en curso.
3)Si x es un no terminal el
programa consulta la entrada de
M [X,a] de la tabla de la matriz de
anlisis sintctico.
Como X: <E>
Como a: id
La salida es la
produccin 1 de la
gramtica.!
PILA ENTRADA SALIDA
$<E> Id+Id$ 1)<E><T><E>
$<E><T>
Se sustituye la <E> de la cima de la pila por <E><T>
Ejemplo
PILA ENTRADA SALIDA
$<E> Id+Id$ 1)<E><T><E>
$<E><T> Id+Id$ 4)<T><F><T>
$<E><T><F>
1)Si x = a = $ El string es vlido.
2)Si x = a $ Se saca x de la pila y
Se mueve el apuntador al siguiente
smbolo o analizador en curso.
3)Si x es un no terminal el
programa consulta la entrada de
M [X,a] de la tabla de la matriz de
anlisis sintctico.
Siguiente Lnea
Ahora en Pila poseemos smbolo
<T> de la gramtica. Y en
entrada la cadena con el
apuntador al primer smbolo Id
a analizar.
Regla 3)
Salida
Produccin
4
Ejemplo
PILA ENTRADA SALIDA
$<E> Id+Id$ 1)<E><T><E>
$<E><T> Id+Id$ 4)<T><F><T>
$<E><T><F> Id+Id$ 7)<F>Id
$<E><T>id Id+Id$ 6)<T>
$<E> 2)<E>+<T><E>
1)Si x = a = $ El string es vlido.
2)Si x = a $ Se saca x de la pila y
Se mueve el apuntador al siguiente
smbolo o analizador en curso.
3)Si x es un no terminal el
programa consulta la entrada de
M [X,a] de la tabla de la matriz de
anlisis sintctico.
Ocurre lo mismo para la
siguiente lnea con salida
produccin 7 que sustituye a
<F>
Para la prxima lnea ocurre la
regla 2) y se mueve el
apuntador a <T> y +. Y el
proceso continua
Salida 7
Salida 6
Salida 2
Ejemplo
PILA ENTRADA SALIDA
$<E> Id+Id$ 1)<E><T><E>
$<E><T> Id+Id$ 4)<T><F><T>
$<E><T><F> Id+Id$ 7)<F>Id
$<E><T>id Id+Id$ 6)<T>
$<E> 2)<E>+<T><E>
$<E><T>+ +Id$ 4)<T><F><T>


$<E><T><F> Id $ 7) <F> id
$<E><T>id Id $
$<E><T> $ 6) <T>
$<E> $ 3) <E>
$ $ Cadena vlida
Regla 2)
Regla 3), Salida 4...
Regla 3), Salida 7
Regla 2)
Regla 3), Salida 6
Regla 3), Salida 3
Finalmente Regla 1
Cadena Valida!!!!!!!
Generacin de matriz predictiva
(clculo first y follow)
1)Si x = a = $ El string es vlido.
2)Si x = a $ Se saca x de la pila y
Se mueve el apuntador al
siguiente smbolo o analizador
en curso.
3)Si x es un no terminal el
programa consulta la entrada de
M [X,a] de la tabla de la matriz de
anlisis sintctico.
Puedo mostrarte ciento y un miles de estos ejemplos y seguiremos la misma
dinmica ciertamente este ejemplo fue sencillo.
Pero an hace falta una parte te dirs
PILA
$<E>
$<E><T>
$<E><T><F>
$<E><T>id
$<E>
$<E><T>+
$<E><T><F>
$<E><T>id
$<E><T>
$<E>
$
ENTRADA
Id+Id$
Id+Id$
Id+Id$
Id+Id$
+Id$
Id $
Id $
$
$
$
SALIDA
1)<E><T><E>
4)<T><F><T>
7)<F>Id
6)<T>
2)<E>+<T><E
>
4)<T><F><T>
7) <F> id
6) <T>
3) <E>
Cadena vlida
Conozco
como
trabaja la
pila
Como se
comporta
la entrada
en anlisis
Mis reglas que
rigen el
comportamiento.
Como son y
que se hace
con las
salidas del
analizador.
Pero
De donde surgi esto?
Generacin de matriz predictiva
(clculo first y follow)
Desde un principio te coment que generaramos algunos de los
componentes del anlisis sintctico
Pues llevaremos a cabo la generacin de esta matriz, por medio del clculo
Primeros y Segundos (Firsts & Follows)
Muchsima atencin y cero distraccin porque es un proceso al cual no debes
perderle el hilo.
Clculo First y Follow
Si es una cadena de smbolos gramaticales se
considera primeros de como el conjunto de
terminales que inician las cadenas derivadas de .
Si entonces el vaco tambin est en primeros
de .
Se define siguientes de A para el no terminal de A,
como el conjunto de terminales de A que pueden
aparecer inmediatamente a la derecha de A en
alguna forma de frase, es decir, el conjunto de
terminales de A tal que halla una derivacin de la
forma S A para algn y .
Clculo First y Follow
Paciencia, Paciencia, que es solo la
conceptualizacin
Y al igual que nuestras 3 reglitas del anlisis
poseemos unas reglas que hay que seguir aqu,
igual no las perderemos de vista
Primero con los Primeros
a) Si X es un smbolo terminal, entonces primeros
() = X
<E> op
<E>
P<E> = {op, }
Producciones o BNF
Clculo First
b) Si X es un smbolo no terminal, entonces
para cada produccin del tipo
X 1, 2........ n
1) Incluir primeros de (i) en primeros de
(X)
2) De i=1 hasta n-1
Si est incluido en primeros de (i) incluir
en primeros de (i+1).
3) Tomando como base el punto anterior, si
vaco est incluido en primeros de (i)
hasta primeros de (n) incluir vacio en
primeros de (X).
<S> <E>a
<E> <F>
<E> <G>
<F> id
<F>
<G> cons
P<F> = {id, }
P<G> = {cons}
P<E>={P<F>,P<G>}={id, ,cons}
P<G>={cons, }
P<E>={P<F>,P<G>}={id, , cons}
<S> <E> a
<E> <F>
<E> <G>
<F> id
<F>
<G> cons
P<S>
Para.
P<S> = {id, , cons}
Donde
Clculo Follow
1) Si X es la primera produccin de la gramtica
se incluye $ en siguientes de X. O conjunto de
terminales de X que pueden aparecer
inmediatamente a la derecha de X.
2) Los siguientes de Y son:
a) Si Z es un terminal se incluyen en siguientes (Y)
a excepcin del vaco.
b) Si Z es un no terminal se incluyen los primeros
(Z) en siguientes de Y a excepcin del vaco.
3) Los siguientes de Z son, si Z es el ltimo
trmino de la produccin, se incluyen los siguientes
de esa produccin en siguientes de Z.
No se incluye el vaco en vez de esto se incluyen los
siguientes de la produccin que genera el vaco.
S(X) ={$}


S(Y) ={Z}

S(Y) ={P(Z)}


B CZ
Z AZ
S(Z) ={S(B), S(Z)}
X YZ
Para.
Ejemplo
Primeros.
P(<E>) = {P(<T>)} = {P(<F>)}
={id, ( }
P(<E>) = {+, }
P(<T>) = {P(<F>)} = {id, ( }
P(<T>) = { *, }
P(<F>) = {id, ( }
1) <E> <T> <E>
2) <E> + <T> <E>
3) <E>
4) <T> <F> <T>
5) <T> * <F> <T>
6) <T>
7) <F> id
8) <F> (<E>)
Nuestras reglas de
Produccin
a) Si X es un smbolo terminal, entonces
primeros () = X
b) Si X es un smbolo no terminal,
entonces para cada produccin del tipo
X 1, 2........ n
1) Incluir primeros de (i) en primeros
de (X)
2) De i=1 hasta n-1
Si est incluido en primeros de (i)
incluir en primeros de (i+1).
3) Tomando como base el punto
anterior, si vaco est incluido en
primeros de (i) hasta primeros de (n)
incluir vaco en primeros de (X).
Ejemplo
Segundos.
S(< E>) = { $, )}
S(<E>) = {S(<E>), S(<E>) - = ,
$, ) }
S(<T>) = {P(<E>)} = { +,S(<E>)}
= { +, $, ) }
S(<T>) = {S(<T>), S(<T>)} = {
+, $, ) }
S(<F>) = {P(<T>)} = { *, S(<T>)
} = { *, +, $, ) }
1) <E> <T> <E>
2) <E> + <T> <E>
3) <E>
4) <T> <F> <T>
5) <T> * <F> <T>
6) <T>
7) <F> id
8) <F> (<E>)
Nuestras reglas de
Produccin
1) Si X es la primera produccin de la
gramtica se incluye $ en siguientes de
X. O conjunto de terminales de X que
pueden aparecer inmediatamente a la
derecha de X.
2) Los siguientes de Y son:
a) Si Z es un terminal se incluyen en
siguientes (Y) a excepcin del vaco.
b) Si Z es un no terminal se incluyen
los primeros (Z) en siguientes de Y a
excepcin del vaco.
3) Los siguientes de Z son, si Z es el
ltimo trmino de la produccin, se
incluyen los siguientes de esa
produccin en siguientes de Z.
No se incluye el vaco en vez de esto se
incluyen los siguientes de la produccin
que genera el vaco.
Construccin de matriz predictiva
Una vez calculados los primeros y segundos de nuestra gramtica,
conoceremos los algoritmos para construir la matriz predictiva paso a paso.
Claro que vamos adelante, es mucho pensamiento y clculo pero lo vamos a
conseguir, Adelante!!!!...
Construccin de matriz
predictiva
1.Para cada produccin
A realizar lo
iguiente:
a) Para cada smbolo
terminal en primero
de () agregar A
en M[A, ]
b) b) Si esta contenido
en primero (),
entonces para cada
smbolo terminal en
sig (A), agregar M
en [A,$]
2. Cada espacio de la
matriz indefinido hace
error.
1) <E> <T> <E>
2) <E> + <T> <E>
3) <E>
4) <T> <F> <T>
5) <T> * <F> <T>
6) <T>
7) <F> id
8) <F> (<E>)
Primeros.
P(<E>) ={id, ( }
P(<E>) = {+, }
P(<T>) = {id, ( }
P(<T>) = { *, }
P(<F>) = {id, ( }
Segundos.
S(< E>) = { $, )}
S(<E>) = { $, ) }
S(<T>) = { +, $, ) }
S(<T>) = { +, $, ) }
S(<F>) = { *, +, $, ) }
V

V
$ Id ( ) + *
<E>
<E>
<T>
<T>
<F>
error
error
error
error
error
error
error
error
error
error
error
error
error
error error error error
1
1
3
3
2
4 4
6 6
5
6
8
7
Construccin de matriz predictiva
Y vual!!, es as como respondemos el de dnde
vena esta matriz?..., as ya poseemos todos los
elementos para el anlisis sintctico.
1)Si x = a = $ El string es vlido.
2)Si x = a $ Se saca x de la pila y
Se mueve el apuntador al
siguiente smbolo o analizador
en curso.
3)Si x es un no terminal el
programa consulta la entrada de
M [X,a] de la tabla de la matriz de
anlisis sintctico.
PILA
$<E>
$<E><T>
$<E><T><F>
$<E><T>id
$<E>
$<E><T>+
$<E><T><F>
$<E><T>id
$<E><T>
$<E>
$
ENTRADA
Id+Id$
Id+Id$
Id+Id$
Id+Id$
+Id$
Id $
Id $
$
$
$
SALIDA
1)<E><T><E>
4)<T><F><T>
7)<F>Id
6)<T>
2)<E>+<T><E
>
4)<T><F><T>
7) <F> id
6) <T>
3) <E>
Cadena vlida