Ambigüedad y Generación de Matriz Predictiva

66
Eliminación de la ambigüedad. Generación de matriz predictiva (cálculo first y follow)  Análisis Sintáctico Medina García Gabriel Ramos Meléndez Daniel

description

Definición, Ejemplificación y Solución a la ambigüedad en las gramáticas, Análisis sintáctico; procedimiento de análisis y cálculo first follow para construcción de matriz predictiva.

Transcript of Ambigüedad y Generación de Matriz Predictiva

Eliminacin de la ambigedad. Generacin de matriz predictiva ( clculo first y follow)

Eliminacin de la ambigedad.

Generacin de matriz predictiva (clculo first y follow)Anlisis SintcticoMedina Garca GabrielRamos Melndez DanielDudas y AclaracionesPara 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) *Derivacinrbol de DerivacinPalabra o CadenaEstructura SintcticaInherentemente Ambigo.

Conceptos de AmbigedadGLC : 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 1B2. A 0A3. B 1B4. B 0C5. B 06. C 1B7. C 0AEste 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 AmbigedadConceptos de Ambigedadrbol 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 X1X2 . Xk, - 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 AmbigedadCadena 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.AmbigedadAmbiguedad: 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.

AmbigedadEste 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 + S2) S S * S3) S ( S )4) S aAmbigedadEl 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 ambigaOk, antes de empezar a atacar, una cosa es segura, tenemos que conocer de qu se trata y pensar en un modo de solucionar la problemticaUn ejemplo clsico de gramtica ambigua se presenta en la definicin de las expresiones aritmticas que aparecen comnmente en los lenguajes deprogramacin.

Gramtica ambigaEl 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_0Muy bien, paso a paso iremos analizando que tenemos por aqu

Tenemos nuestros terminales: id, cte, (, ), +, -

Nuestros no terminales: y Nuestro smbolo inicial de la produccin. (S) que es una G_Exp_0Y 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_0Es fcil demostrar que esta gramtica es ambigua construyendo dos rboles diferentes para generar la misma expresin, concretamente id+cte*idid+cte*id ; es nada ms y nada menos que nuestra cadena o palabra.

G_Exp_0En 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 operandoG_Exp_0Por 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 decirNivelNivelNivel

rbol IzquierdoDentro de este nivel evaluamos una expresinQue 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 DerechoDentro de este nivel evaluamos una expresinQue 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 Izquierdarbol Derecha

Solucin del problemaProbablemente ya habrs pensado en una solucin si ya descifraste la causa del problemaLa causa del problema es la JERARQUA DE LAS OPERACIONESY la solucin para resolver este caso de ambigedad es IMPONER UNA JERARQUA ENTRE LOS OPERADORESComo 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 problemaAhora, para definir la jerarqua se van a introducir en la gramtica nuevos smbolos no terminales: y (este estar asociado a los operadores aditivos suma y resta) y (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 terminalesNuestro smbolo inicial de la produccin. (S) que es una Nueva gramtica

G_Exp_1Y 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_1Con 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.

Ser Cierto??!!

Nuevo rbolLa gramtica nos indica comenzar con una expresin S=

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 rbolBin! 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 * idCon lo cul hemos logrado eliminar la ambigedad que exista en dicho lenguaje.????AhoraComnmente 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 elementosUn 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 ejemploLa grmtica S AA, A aSa, A a representada a continuacin es ambiga: la palabra a5 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 ejemploEl lenguaje generado es{a2+3i : i >= 0} y otra gramtica no ambigua que tambin genera este lenguaje es:S aa, S aaU, U aaaU, U aaaAqu a5 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.ProblemasEl 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.ProblemasAs 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 derivacinEjemplo: 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 234El rbol de derivacin correspondiente es:

ProblemasSin embargo podemos realizar las siguientes derivacionesN 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 ambigedadConclusionesCon 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 utilizalos trminos involucrados en el temareforzamos el uso de los rboles de derivacin y les dimos una aplicacin dentro de ambigedadse 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 ejemplificacinConclusionesvimos tambin otro ejemplo distinto a las operaciones aritmticascon 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 AclaracionesEstoy 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 AclaracionesPara 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]PSX1, 2, n

PilaSalida de produccionesTabla de anlisis sintctico predictivoProduccin de x de la gramtica.Error

Conceptos Matriz Predictiva$: Fin de CadenaM [X,a]: Posicin de la Matriz en X, aP: Firsts (Primeros)S: Follows (Segundos)X: Elemento en anlisis.a: terminal.1, 2, n: En la utilizacin de Produccin del tipo X 1Pila: 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, comoConceptos Matriz PredictivaPrimeramente 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 asConceptos Matriz Predictiva

Analizando la siguiente cadenitaCon 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 predictivaEso en cuanto a salida de produccionesVolvamos a los conceptosTabla de anlisis sintctico predictivoNo TerminalesTerminales

M [V,V]: Posicin de la Tabla en V, VM [X,a]: Posicin de la Tabla en X, a=ProduccionesConceptos Matriz predictivaProduccin 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 predictivaY 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 ifSi recibo un no terminal y poseo en cadena un end esto produce un error, (ms adelante veremos por qu).

Anlisis SintcticoMencionados anteriormente algunos de los componentes del anlisis sintctico te explicar el esquema general que este posee

Un programa sintctico est guiado por tablas.una pilaun buffer de entrada (la cadena que se va a analizar con $ al final)una tabla de anlisis predictivoy una salida de produccines

Anlisis SintcticoSe 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:

Xa1)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

Xa3)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.

Xa

Produccin 7 de la gramticaEjemploSer 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.Comencemos1)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 validaremosPILAENTRADASALIDA$Id+Id$EjemploA continuacin se dar una corrida a la gramtica para saber si la cadena es vlidaComo estado inicialEn pila poseemos el smbolo inicial de la gramtica y $ en la base. Y en entrada la cadena con el apuntador al primer smbolo a analizar1)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 tablaEjemplo1)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: Como a: id

La salida es la produccin 1 de la gramtica.!PILAENTRADASALIDA$Id+Id$1)$

Se sustituye la de la cima de la pila por

EjemploPILAENTRADASALIDA$Id+Id$1)$Id+Id$4)$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 LneaAhora en Pila poseemos smbolo de la gramtica. Y en entrada la cadena con el apuntador al primer smbolo Id a analizar.Regla 3)

SalidaProduccin 4

EjemploPILAENTRADASALIDA$Id+Id$1)$Id+Id$4)$Id+Id$7)Id$idId+Id$6)$2)+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 Para la prxima lnea ocurre la regla 2) y se mueve el apuntador a y +. Y el proceso continua

Salida 7Salida 6Salida 2

EjemploPILAENTRADASALIDA$Id+Id$1)$Id+Id$4)$Id+Id$7)Id$idId+Id$6)$2)+$++Id$4)

$Id $7) id$idId $$$6) $$3) $$Cadena vlida

Regla 2) Regla 3), Salida 4...Regla 3), Salida 7Regla 2)Regla 3), Salida 6Regla 3), Salida 3Finalmente 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$$$$id$$+$$id$$$ENTRADAId+Id$Id+Id$Id+Id$Id+Id$+Id$Id $Id $$$$SALIDA1)4)7)Id6)2)+4)7) id6) 3) Cadena vlidaConozco como trabaja la pilaComo se comporta la entrada en anlisisMis reglas que rigen el comportamiento.Como son y que se hace con las salidas del analizador.PeroDe donde surgi esto?Generacin de matriz predictiva (clculo first y follow)Desde un principio te coment que generaramos algunos de los componentes del anlisis sintcticoPues 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 FollowSi 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 FollowPaciencia, Paciencia, que es solo la conceptualizacinY 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 Primerosa)Si X es un smbolo terminal, entonces primeros () = X op P = {op, }Producciones o BNFClculo Firstb) Si X es un smbolo no terminal, entonces para cada produccin del tipo X 1, 2........ n1) Incluir primeros de (i) en primeros de (X)2) De i=1 hasta n-1Si 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). a id consP = {id, }P = {cons}P={P,P}={id, ,cons}P={cons, }P={P,P}={id, , cons} a id consPPara.P = {id, , cons}DondeClculo Follow1) 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 CZZ AZS(Z) ={S(B), S(Z)}X YZPara.EjemploPrimeros.P() = {P()} = {P()} ={id, ( } P() = {+, }P() = {P()} = {id, ( }P() = { *, }P() = {id, ( }1) 2) + 3) 4) 5) * 6) 7) id8) ()Nuestras reglas de Produccina)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........ n1) Incluir primeros de (i) en primeros de (X)2) De i=1 hasta n-1Si 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).EjemploSegundos.S(< E>) = { $, )}S() = {S(), S() } = { $, ) }S() = {P()} = { +,S()} = { +, $, ) }S() = {S(), S()} = { +, $, ) }S() = {P()} = { *, S() } = { *, +, $, ) }1) 2) + 3) 4) 5) * 6) 7) id8) ()Nuestras reglas de Produccin1) 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 predictivaUna 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 predictivaPara cada produccin A realizar lo iguiente:Para cada smbolo terminal en primero de () agregar A en M[A, ]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) 2) + 3) 4) 5) * 6) 7) id8) ()Primeros.P() ={id, ( } P() = {+, }P() = {id, ( }P() = { *, }P() = {id, ( }Segundos.S(< E>) = { $, )}S() = { $, ) }S() = { +, $, ) }S() = { +, $, ) }S() = { *, +, $, ) }V V$Id()+*

errorerrorerrorerrorerrorerrorerrorerrorerrorerrorerrorerrorerrorerrorerrorerrorerror1133244665687Construccin de matriz predictivaY 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$$$$id$$+$$id$$$ENTRADAId+Id$Id+Id$Id+Id$Id+Id$+Id$Id $Id $$$$SALIDA1)4)7)Id6)2)+4)7) id6) 3) Cadena vlida