Sei sulla pagina 1di 43

Alvarado Romn Luis

Tantaquilla Otiniano Lauren


Flores Huamn Erlin
Vega Flores FredyPaucar

ANLISIS ASCENDENTE

ANLISIS ASCENDENTE
Es un proceso reiterado, donde inicialmente se utiliza la cadena
que se va a analizar y finaliza cuando se completa el anlisis con
xito o cuando, por culpa de algn error sintctico, no se puede
continuar. En cada paso del anlisis se pretende indicar que
regla de la gramtica se tiene que aplicar en ese punto del rbol,
teniendo en cuenta el estado de este y la posicin de la cadena de
entrada a la que se ha llegado.
Por tanto, la parte derecha de una produccin contiene una
indicacin, llamada punto , que separa la parte analizada de
la que no lo est.

E E+T
En este tipo de anlisis se pueden aplicar dos acciones
esenciales: reduccin y desplazamiento.

REDUCCIN

En la parte derecha de una produccin, cuando una subcadena de


la parte izquierda del punto, corresponde a la parte derecha de una
produccin, esta se sustituye por la parte izquierda de la
produccin.
Si N es un no terminal y deriva en el smbolo terminal o no
terminal . puede ser tanto terminal como no terminal y a es un
terminal. Se reduce una subcadena de la parte que se encuentra en
la izquierda del punto a y se sustituye por N.

DESPLAZAMIENTO
Se avanza un smbolo en la cadena de entrada y, el punto en todas
las reglas que siguen siendo compatibles con la subcadena de la
cadena de entrada.

Se muestra un ejemplo de la utilizacin del punto y de las acciones


Reducir y Desplazar.

E E+T

Inicialmente, el punto se encuentra en el origen de la parte derecha


de la regla, puesto que no se ha procesado informacin suficiente
para avanzar. Para que esta sea la regla utilizada, primero se
tendr que reducir la parte de la cadena de entrada correspondiente
al smbolo no terminal E,

E E +T
Encontrar a continuacin un smbolo terminal +, supone desplazar
el punto una posicin.

EE+T
Indica que el analizador ha comprobado la parte derecha de la regla
y es compatible con la parte de la cadena de entrada analizada. En
este momento, se puede reducir toda la parte de la cadena de
entrada asociada a E+T y substituirla por el smbolo no terminal E,
que es la parte izquierda de la regla.

E E+T

LR (K)
Se introduce una tcnica eficiente de anlisis sintctico ascendente
que se puede utilizar para procesar una amplia clase de gramticas
libre de contexto, esta tcnica se denomina LR (k).
La abreviatura L indica que se realiza una lectura de izquierda a
derecha de la cadena de entrada (en ingls, from left to right),
mientras que la R refleja que estos analizadores construyen una
derivacin por la derecha de la entrada en orden inverso (en ingls,
rigthmost derivation).
El principal inconveniente del mtodo es que supone demasiado
trabajo construir manualmente un analizador sintctico LR (k) para
una gramtica de un lenguaje de programacin muy tpico, siendo
necesario utilizar una herramienta especializada para ello.
Si la gramtica contiene ambigedades u otras construcciones
difciles de analizar ante un examen de izquierda a derecha de la
entrada, el analizador puede localizar las reglas de produccin
problemticas e informar de ellas.

1.1 ANLISIS LR (0)


Los analizadores ascendentes siguen simultneamente
todos los caminos posibles, es decir, cada estado del
autmata mantiene todas las reglas cuyas partes
derechas son compatibles con la subcadena de entrada ya
analizada. Cada una de esas reglas es hipottica, puesto
que al final solo una regla es aplicada.
CREAR CLAUSURA
Dada la siguiente gramtica,

S E $
ET
EE+T
T num
Figura 1.

Para crear el estado inicial se coge la produccin inicial y el punto que


se encuentra delante del primer smbolo de la cadena de entrada.

S E $
Un smbolo no terminal nunca se puede encontrar en una cadena de
entrada, solo puede aparecer mediante una reduccin.
A partir de la gramtica que se muestra en la Figura 1, se ensea
como se crea el estado inicial S0. Como la primera produccin tiene
detrs del punto el smbolo no terminal E, hay que aadir al estado
todas las producciones que empiecen por E, en este caso, las
producciones que empiezan por E, son:

S E $
EE+T
Por la misma razn, como T es un no terminal hay que aadir al
estado inicial todas las reglas donde la parte izquierda coincida con
el no terminal T.

T num

Estas configuraciones tienen en comn que el siguiente smbolo a


analizar es un no terminal. Por eso no queda nada pendiente en el
estado inicial. Como consecuencia, si se llama al estado inicial S0,
se puede decir que:

S0 = { S E
$
ET
EE+T
T num }
ESTADOS DE ACEPTACIN Y DE REDUCCIN

Un estado es de aceptacin, cuando existe una produccin de


reduccin en el estado, es decir, cuando el punto de esta se
encuentra al final de la cadena y, por tanto, no precede a ningn
smbolo terminal o no terminal. Se podra en la figura2 que el estado
contiene el cierre de la produccin S E $, representado en el
autmata por doble crculo.

TRANSICIN ENTRE ESTADOS


Si en la cadena de entrada se encuentra el smbolo E, slo la
produccin
(S E $) y (E E + T) siguen siendo compatibles
con la entrada. En este caso, se puede desplazar un smbolo, tanto en
la cadena de entrada como en estas producciones. Si el siguiente
estado se llama S1, se puede expresar como:

S1 = { S E $,
E +T}
Pero si en la cadena de entrada se encuentra el smbolo T, nicamente
se puede desplazar un smbolo de la produccin E T y de la
cadena de entrada. Este estado es de aceptacin, puesto que el punto
se encuentra al final de la cadena. Si el siguiente estado se denomina
S2, se puede ver como:

S2 = { E T }

Slo se puede producir otro estado a partir del estado


inicial, si la cadena de entrada se encuentra con el smbolo
terminal num. En este caso, se desplaza un smbolo de la
produccin T num y de la cadena de entrada. Este
estado tambin es de aceptacin, porque despus del punto
no hay ms smbolos. Si este estado se llama S3, se
expresa como:

S3 = { T num }
Aplicando todos los puntos mencionados anteriormente y a
partir de la gramtica que se muestra en la Figura 2, se
puede construir un autmata LR (0). Como se podra ver
en la Figura 3, que se mostrara mas adelante.

Figura 2. Autmata LR (0)

CONFLICTOS

CONFLICTO DESPLAZAR-REDUCIR
Se produce cuando en un estado se consigue efectuar la accin de
reduccin y desplazar. Si se supone el conjunto de elementos
correspondientes a un estado del autmata de anlisis
ascendente.

T i
T iE

Se necesita tanto desplazar T i


como reducir T i E, por tanto
se llega a un problema.

CONFLICTO REDUCIR-REDUCIR
Ocurre cuando en un estado aparecen dos acciones de reducir.
Tambin en el caso de tener:

T i
V iE

Existe un inconveniente ya que


no se puede reducir dos
producciones a la vez.

1.2 TABLA DE ANLISIS ASCENDENTE


Las tablas de anlisis contienen informacin equivalente a la
funcin de transicin del autmata, que reconoce el lenguaje
asociado a la gramtica que se est analizando.
El nmero de filas coincide con el nmero de estados que tenga el
autmata. Segn la tcnica aplicada se puede construir un
autmata distinto con diferentes estados. Hay tantas columnas
como smbolos haya en el alfabeto de la gramtica. La tabla
especifica la accin a realizar en cada momento.
La tabla debe especificar, en funcin del smbolo de la cadena de
entrada y del estado en el que se encuentra el autmata, cul ser el
estado siguiente y las modificaciones que se deben de hacer tanto en
la pila como en la cadena de entrada, segn si se produce un
desplazamiento o una reduccin, si se ha finalizado exitosamente o
si se ha detectado algn error.

Para poder especificar esta informacin se aplicar la


siguiente notacin:
Si se produce un desplazamiento se indica con D<e>,
donde <e> representa un estado del autmata de
anlisis. Representa la accin de desplazar el smbolo
actual e ir al estado <e>.
Si se produce una reduccin, se muestra con R<p>,
donde <p> identifica una regla de la gramtica.
Simboliza la accin de reduccin de la regla <p>.
Si el anlisis finaliza con xito se representa con
Aceptar.
Si no finaliza con xito se expresa con Error.

En la siguiente Figura se observa el esquema del analizador


sintctico. Donde se muestran las filas de accin y de ir_a, as
como el contenido de la pila, que se explica ms detalladamente a
continuacin.

Figura 3. Estructura del Analizador Sintctico

1.3. INICIO DEL ANLISIS

DESPLAZAMIENTO D<E>

Cuando en la ejecucin del algoritmo


aparece en una casilla D<e> significa que, el
smbolo actual de la cadena de entrada es
uno de los que espera una de las reglas con
la parte derecha parcialmente analizadas.
Por este motivo, se puede pasar a un nuevo
estado <e> del autmata y avanzar una
posicin en la cadena de entrada, de manera
que el smbolo actual pase a ser el siguiente
al analizado. Esto implica:
Introducir en la pila el smbolo de entrada.
Introducir en la pila el nuevo estado <e>.

REDUCCIN R<P>

Al aparecer R<p> simboliza que, teniendo en


cuenta el smbolo de la cadena de entrada,
alguna de las reglas representadas en el estado
actual del autmata ha desplazado toda su parte
derecha, esta puede ser substituida por el
smbolo no terminal de la parte izquierda de la
regla <p>. Esto supondr:
Sacar de la pila toda la informacin asociada con la
parte derecha de la regla <p>. Como al desplazar se
almacena tanto el estado como el smbolo de entrada,
si la longitud de la parte derecha a reducir es N, se
tendrn que hacer 2*N extracciones de la pila.
Realizar un Desplazamiento con el smbolo reducido.

ACEPTACIN

Si se llega a una casilla de error se considera


que la cadena no ha finalizado con xito y el
anlisis termina Para una mejor
comprensin de la tabla de anlisis, estas
casillas se representan como casillas vacas.

ERROR
Si

se llega a una casilla de error se


considera que la cadena no ha finalizado con
xito y el anlisis termina Para una mejor
comprensin de la tabla de anlisis, estas
casillas se representan como casillas vacas.

A continuacin, se crea la tabla de anlisis LR


(0) a partir del autmata de la Figura 3, y se
analiza la cadena de entrada num+num$ .

En este momento, se crea un autmata LR (0),


pero en este caso se produce un conflicto en el
estado 2 del autmata, donde tiene a su vez un
elemento a desplazar S x b y un elemento a
reducir B x . Por este motivo, se crea la
tcnica LR (1) que intenta resolver este conflicto
restringiendo la reduccin utilizando smbolos
de adelanto.

1.4 El anlisis LR (1)


Se basa en conservar el smbolo adelantado
especifico con cada elemento. De esta manera, un
elemento LR (1) se escribir as: N {},
donde es el conjunto de smbolos que puede seguir
al smbolo no terminal . Cuando el punto ha
alcanzado el final del elemento, N {},
entonces el elemento se puede reducir exitosamente
siempre y cuando el smbolo de adelanto en ese
momento sea , sino es ignorado.

Para calcular los smbolos de adelanto, hay que tener en cuenta


dos situaciones:
CONJUNTO DE PRODUCCIONES DEL ESTADO INICIAL
En este caso, el conjunto de smbolos de adelanto se encuentra en
el estado inicialS0, contiene solo un token, el de fin de cadena $.
CONJUNTO DE PRODUCCIONES DE CUALQUIER
ESTADO
Si despus del no terminal N, hay un smbolo, por ejemplo,
P N {}, entonces el conjunto de smbolos adelantados del
nuevo elemento creado es PRIMEROS {}, ya que esto es lo que
puede continuar a cada uno de estos elementos en esta posicin en
concreto.
Pero si por ejemplo, se tiene P N {}, no se puede calcular los
PRIMEROS porqu no hay ningn smbolo despus del no
terminal N. Por esto, se coge como smbolo de adelanto {}.

Ahora se explica cmo se crea el estado S0 y S5 de autmata mostrado


anteriormente.
En el estado S0, primero hay que aadir la regla de inicio S'S {$},
pero como el siguiente smbolo a analizar es un no terminal, hay que
agregar al estado todas las producciones donde
la parte izquierda de la produccin coincida con el no terminal S. En este
caso, son S A y S x b. Una vez obtenidas estas producciones se
calcula su smbolo de adelanto.
S' S {$}

Despus del no terminal S, no hay ningn smbolo ms. Por este motivo,
no se pueden calcular los PRIMEROS y hay que aadir como smbolo de
adelanto {$}. Por tanto, a S A y S x b se les debe aadir el smbolo
de adelanto {$}.
S A {$}

S x b {$}

Una vez calculado sus smbolos de adelanto, hay que volver a mirar si
estas producciones contienen un no terminal despus del punto, como
ocurre en el caso de S A {$}, donde A es un no terminal.
Por este motivo, se deben aadir todas las que empiecen por A, A a A
b y A B. Despus de aadirlas, se calcula su smbolo de adelanto.

S A {$}
Ocurre como en el caso anterior, despus del no terminal A, no hay
ningn smbolo y, por tanto, no se pueden calcular los PRIMEROS. Por
esta razn, hay que aadir como smbolo de adelanto {$}.

A a A b {$}
A B {$}
Finalmente, sucede igual con A B {$}, que contiene el smbolo no
terminal B. Se aade a a clausura, B x, que tambin tiene como
smbolo de adelanto {$}.

As es como se obtiene el estado S0:

S0= {A aA b {$}
A a A b {$}
A B {$}
B x {$} }
El estado S5, se comporta diferente porque hay un smbolo
adelantado
A a A b {$}.
En este caso, como despus del punto hay un no terminal A, hay que
agregar al estado todas las producciones que empiecen por A, que
son A a A b y A B. Una vez aadidas, hay que calcular su
smbolo de adelanto.

A a A b {$}

En este caso, s se pueden calcular los PRIMEROS porque, despus del


no terminal A, se encuentra b. Como consecuencia de producirse
PRIMEROS (b)= {b}, el smbolo de adelanto {b} se aade a las
producciones anteriormente cargadas.

A a A b {b}
A B {b}
Ahora, al analizar A B {b}, como el siguiente smbolo B es un no
terminal, tambin hay que agregar todas las producciones que
contengan B. En ltimo lugar, se completa el estado
S5 con B x. Al no haber ningn smbolo despus del no terminal B,
se debe de coger como smbolo de adelanto {b}.

A a A b {$}
A a A b {b}
A B {b}
B x {b}

REDUCCIN

En vez de consultar los estados finales del


autmata, se utilizan los smbolos de adelanto de
las producciones de reduccin. Si el estado final Sf
y su produccin es N {1 n}, la accin de
reduccin solo se aadir en las casillas
correspondientes a las columnas de los smbolos
de adelanto {1 n}. Cuando se reduce la
expresin A B{b}, en el estado S12 de lade la
figura de la tabla , se puede comprobar que en la
tabla de anlisis, en la fila 12 se reduce la regla
A B{b}, en la columna donde aparece el
smbolo de adelanto b.

ACEPTACION
La produccin inicial no se expresa E E $, sino
E E{$}. El smbolo de final de cadena $ no aparece de
forma explcita, sino como smbolo de adelanto. Por tanto, la
accin de aceptacin se escribe en la casilla (Si, $), siempre
que en el estado Si, aparezca la produccin E E{$}.
Una vez creada la tabla de anlisis LR (1) mostrada en la Figura
10. Se analiza la cadena de entrada a x b$.
El anlisis es muy parecido al del LR (0), lo nico que se ha de
tener en cuenta es el smbolo de adelanto a la hora de reducir una
produccin. Por ejemplo, la reduccin del estado 11 y 12 se
produce cuando el smbolo de adelanto de las producciones sea
igual al de la cadena de entrada.

TABLA DE ANLISIS LR

1) Como en el anlisis del LR (0), se aade en un


primer momento el estado 0. Si entra el smbolo a existe
un desplazamiento a S5.

2) Se carga en la pila el primer smbolo de la cadena a y


se aade el estado 5. Se vuelve a leer otro smbolo x y se
desplaza a S13.

3) Se agrega en la pila x y el estado 13. En este


momento se produce una reduccin B x{b}. Como b
es el smbolo de adelanto hay que mirar en la fila 13,
columna b. Despus, reducir a B y desplazar B al estado
12.

4) Se extraen dos elementos de la pila porqu la parte


izquierda de la produccin a reducir solo contiene un
elemento, B x. A continuacin, se aade B y S12. En este
momento se reduce AB, ya que el smbolo de adelanto
coincide con b. Luego, se desplaza el smbolo A al estado S7.

5) Se extraen dos elementos de la pila, por la misma


razn que en el paso anterior, y se aade la reduccin de
la regla A y su estado S7. Ahora, se lee el siguiente
smbolo de la cadena de entrada b y se desplaza a S8.

6) Una vez agregados los ltimos elementos, se produce


una reduccin Aa A by se desplaza al estado 2 para
avanzar el smbolo A.

7) Como la reduccin de antes era Aa A b, ahora hay


que extraer 3*2= 6 elementos de la pila y adicionar A y
S2. Se vuelve a reducir por la produccin SA y
desplazar el smbolo S al estado 1.

8) Ahora slo falta comprobar que el smbolo de


adelanto $, corresponde al ltimo smbolo de la cadena $
.Por tanto, solo queda reducir para obtener la
produccin inicial. Reduce(S S$)

9) a cadena ha sido aceptada

Potrebbero piacerti anche