Sunteți pe pagina 1din 33

Organizacin de

Lenguajes y
Compiladores 1
Mtodo de anlisis sintctico
LL1
Mtodo Descendente LL(1)
La primera L representa el tipo de lectura de
la cadena de entrada Left (de izquierda a
derecha)
La segunda L representa la que la derivacin
Left, por la izquierda.
Y el 1, es el nmero de smbolos de entrada
para analizar por anticipado.
Mtodo Descendente LL(1)
Ninguna gramtica
ambigua o recursiva
por la izquierda puede
ser LL(1).
Mtodo Descendente LL(1)
Buffer de Entrada
Cadena de entrada a analizar, finaliza con el carcter $
Pila
Smbolos gramaticales que se van utilizando
Tabla de Anlisis Sintctico
Matriz bidimensional que sirve para el anlisis
Cadena de Salida
Cadena de Salida posterior al anlisis
LL(1)
Pasos para el Mtodo LL(1)
1. Escribir adecuadamente la gramtica
2. Calcular el First y el Follow
3. Construir la tabla de Anlisis Sintctico
4. Hacer el anlisis de sintctico por medio
de la pila y la tabla de anlisis

Pasos para el Mtodo LL(1)
1. Escribir adecuadamente la gramtica
Para poder utilizar un analizador
descendente no recursivo la gramtica
debe cumplir con:
No debe tener ambigedad
No debe ser recursiva por la izquierda
Debe estar factorizada
Pasos para el Mtodo LL(1)
Smbolo First/Primero
Si x
es terminal
First(X) = {x}
Si X
produccin
Aadir al First(X)

X YZW

Aadir First (Y) a First (X)

2. Calcular el First / Primero
Smbolo Follow/Siguiente
Si X
es smbolo inicial
Follow ( X ) = { $ }
Si X Y M
Produccin
1. Follow (Y) = First (M) excepto .

2. Si el First(M) contiene entonces
aadir el Follow(X) a Follow (Y)
Si X Y
Produccin
Aadir el Follow(X) a Follow(Y)

2. Calcular el Follow / Siguiente
Pasos para el Mtodo LL(1)
Pasos para el Mtodo LL(1)
3. Construir la tabla de Anlisis Sintctico

Smbolos
No Terminales
Smbolo Terminal
Pasos para el Mtodo LL(1)
3. Construir la tabla de Anlisis Sintctico
1. Para cada A , ejecute 2 y 3.
2. Para cada terminal a del First (), adase
A en la posicin M[A , a].
3. Si esta en el First (), adase A a
M[A , b ] para cada terminal b de Follow(A).
4. Cada entrada vaca hgase ERROR.

Pasos para el Mtodo LL(1)
3. Construir la tabla de Anlisis Sintctico

Se colocan las
producciones
que corresponden
a los datos
obtenidos del
clculo del first.
Pasos para el Mtodo LL(1)
4. Hacer el anlisis de sintctico por medio
de la pila y la tabla de anlisis

13
Pila Entrada
. .
.
Ejemplo LL(1)
Partiendo de la Gramtica:

S ( A )
A C B
B ; A |
C x | S

1. Es una gramtica adecuada para el anlisis LL(1)
Ejemplo LL(1)
2. Clculo del First / Primero

S ( A )
A C B
B ; A |
C x | S

Smbolo
No Terminal
First
S (
A
B ;
C x
Para calcular el first Se usan Los no terminales del lado
izquierdo de la produccin
Si X
es terminal
First(X) = {x}
Ejemplo LL(1)
2. Clculo del First / Primero

S ( A )
A C B
B ; A |
C x | S

Smbolo
No Terminal
First
S (
A
B ; ,
C x
Si X
produccin
Aadir al First(x)
Para calcular el first Se usan Los no terminales del lado
izquierdo de la produccin
Ejemplo LL(1)
2. Clculo del First / Primero

S ( A )
A C B
B ; A |
C x | S

Smbolo
No Terminal
First
S (
A x , (
B ; ,
C x , (

X YZW

Aadir First (Y) a
First (X)
Para calcular el first Se usan Los no terminales del lado
izquierdo de la produccin
Ejemplo LL(1)
2. Clculo del First / Primero

S ( A )
A C B
B ; A |
C x | S

Smbolo
No Terminal
First
S (
A x , (
B ; ,
C x , (
Ejemplo LL(1)
2. Clculo del Follow / Siguiente

S ( A )
A C B
B ; A |
C x | S

Smbolo
No Terminal
Follow
S $
A
B
C
Si X
es smbolo
inicial
Follow (X) = { $ }
Para cacular el follow Se usan Los no terminales del lado
izquierdo de la produccin
Ejemplo LL(1)
2. Clculo del Follow / Siguiente

S ( A )
A C B
B ; A |
C x | S

Smbolo
No Terminal
Follow
S $
A )
B
C
Para cacular el follow Se usan Los no terminales del lado
izquierdo de la produccin
Ejemplo LL(1)
2. Clculo del Follow / Siguiente

S ( A )
A C B
B ; A |
C x | S

Smbolo
No Terminal
Follow
S $
A )
B )
C
Si X Y
Produccin
Aadir el Follow(X)
a Follow(Y)
Para cacular el follow Se usan Los no terminales del lado
izquierdo de la produccin
Ejemplo LL(1)
2. Clculo del Follow / Siguiente

S ( A )
A C B
B ; A |
C x | S

Smbolo
No Terminal
Follow
S $
A )
B )
C ; , )
Se usan Los no terminales del lado
derecho de la produccin
Si X Y M
Produccin
1.Follow (Y) = First (M)
excepto .

2. Si el First(M)
contiene
entonces aadir el
Follow(X) a Follow (Y)
First(B)
; ,
2. Para cada terminal a del First (),
adase A en la posicin
M[A , a].

Ejemplo LL(1)
Construir la tabla de Anlisis Sintctico
Smbolo
No Terminal
First
S (
A x , (
B ; ,
C x , (
; x ( ) $
S
S ( A )
A
A CB A CB
B
B ; A
C
C x C S
S ( A )
A C B
B ; A |
C x | S
3. Si esta en el First (), adase A
a M[A , b ] para cada terminal b de
Follow(A).
Ejemplo LL(1)
Construir la tabla de Anlisis Sintctico
Smbolo
No Terminal
First
B
; ,
; x ( ) $
S
S ( A )
A
A CB A CB
B
B ; A
B
C
C x C S
S ( A )
A C B
B ; A |
C x | S
Smbolo
No Terminal
Follow
B
)
4. Cada entrada vaca hgase
ERROR
Ejemplo LL(1)
Construir la tabla de Anlisis Sintctico
; x ( ) $
S
ERROR ERROR S ( A ) ERROR ERROR
A
ERROR A CB A CB ERROR ERROR
B
B ; A ERROR ERROR
B
ERROR
C
ERROR C x C S ERROR ERROR
3. Construir la tabla de Anlisis Sintctico

Ejemplo LL(1)
; x ( ) $
S
ERROR ERROR S ( A ) ERROR ERROR
A
ERROR A CB A CB ERROR ERROR
B
B ; A ERROR ERROR
B
ERROR
C
ERROR C x C S ERROR ERROR
Pasos para el Mtodo LL(1)
4. Hacer el anlisis de sintctico por medio
de la pila y la tabla de anlisis

Pila Entrada
$ S ( x ; ( x ) ) $
( x ; ( x ) )
Colocar $ y
el smbolo inicial
Colocar la cadena
de entrada y $
Pasos para el Mtodo LL(1)
4. Hacer el anlisis de sintctico por medio
de la pila y la tabla de anlisis
Pila Entrada Accin
$ S ( x ; ( x ) ) $

S ( A )
Se busca el smbolo terminal y el no
terminal, remplazndolo por la produccin
que le corresponda en la tabla.
Colocndola de izquierda a derecha
(
S
S ( A )
Pasos para el Mtodo LL(1)
4. Hacer el anlisis de sintctico por medio
de la pila y la tabla de anlisis
Pila Entrada Accin
$ S
$ ) A (
( x ; ( x ) ) $
( x ; ( x ) ) $
S ( A )
Cuando se llega a una coincidencia, se eliminan ambos,
y se continua con el anlisis
Pasos para el Mtodo LL(1)
4. Hacer el anlisis de sintctico por medio
de la pila y la tabla de anlisis
Pila Entrada Accin
$ S
$ ) A (
( x ; ( x ) ) $
( x ; ( x ) ) $
S ( A )
Cuando se llega a una coincidencia, se eliminan ambos,
y se continua con el anlisis
Pila Entrada Accin
$ S
$ ) A
$ ) B C
$ ) B x
$ ) B
$ ) A ;
$ ) A
$ ) B C
$ ) B S
$ ) B ) A (
$ ) B ) A
$ ) B ) B C
$ ) B ) B x
$ ) B ) B
$ ) B )
$ ) B
$ )
$
( x ; ( x ) ) $
x ; ( x ) ) $
x ; ( x ) ) $
x ; ( x ) ) $
; ( x ) ) $
; ( x ) ) $
( x ) ) $
( x ) ) $
( x ) ) $
( x ) ) $
x ) ) $
x ) ) $
x ) ) $
) ) $
) ) $
) $
) $
$
S ( A )
A C B
C x

B ; A

A C B
C S
S ( A )

A C B
C x

B

B


Pila Entrada Accin
$ S
$ ) A
$ ) B C
$ ) B x
$ ) B
$ ) A ;
$ ) A
$ ) B C
$ ) B S
$ ) B ) A (
$ ) B ) A
$ ) B ) B C
$ ) B ) B x
$ ) B ) B
$ ) B )
$ ) B
$ )
$
( x ; ( x ) ) $
x ; ( x ) ) $
x ; ( x ) ) $
x ; ( x ) ) $
; ( x ) ) $
; ( x ) ) $
( x ) ) $
( x ) ) $
( x ) ) $
( x ) ) $
x ) ) $
x ) ) $
x ) ) $
) ) $
) ) $
) $
) $
$
S ( A )
A C B
C x

B ; A

A C B
C S
S ( A )

A C B
C x

B

B

ACEPTADA
Se acepta la
cadena si se
logra eliminar
de la pila y la
entrada, todos
los smbolos.
De lo contrario
no se acepta
la cadena.
RESUMEN
Pasos para el mtodo LL1
1. Escribir adecuadamente la gramtica
2. Calcular el First y el Follow
3. Construir la tabla de Anlisis Sintctico
4. Hacer el anlisis de sintctico por medio
de la pila y la tabla de anlisis

S-ar putea să vă placă și