Sei sulla pagina 1di 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.
2. 3. 4.

Escribir adecuadamente la gramtica Calcular el First y el Follow Construir la tabla de Anlisis Sintctico 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)


2. Calcular el First / Primero
Smbolo Si x es terminal
Si X produccin X YZW

First/Primero

First(X) = {x}
Aadir al First(X) Aadir First (Y) a First (X)

Pasos para el Mtodo LL(1)


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

1. Follow (Y) = First (M) excepto .


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

Aadir el Follow(X) a Follow(Y)

Pasos para el Mtodo LL(1)


3. Construir la tabla de Anlisis Sintctico
Smbolo Terminal

Smbolos No Terminales

Pasos para el Mtodo LL(1)


3. Construir la tabla de Anlisis Sintctico
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.
1.

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

Pila

Entrada

13

Ejemplo LL(1)
Partiendo de la Gramtica:
S A B C ( A ) CB ; A | x | S

1. Es una gramtica adecuada para el anlisis LL(1)

Ejemplo LL(1)
2. Clculo del First / Primero
Smbolo No Terminal

First ( ; x

S A B C

S A B C

( A ) CB ; A | x | S

Si X First(X) = {x} es terminal

Para calcular el first Se usan Los no terminales del lado izquierdo de la produccin

Ejemplo LL(1)
2. Clculo del First / Primero
Smbolo No Terminal

First ( ;, x

S A B C

S A B C

( A ) CB ; A | x | S

Si X Aadir al First(x) produccin

Para calcular el first Se usan Los no terminales del lado izquierdo de la produccin

Ejemplo LL(1)
2. Clculo del First / Primero
Smbolo No Terminal

First ( x,( ;, x,(

S A B C

S A B C

( A ) CB ; A | x | S
Aadir First (Y) a First (X)

X YZW

Para calcular el first Se usan Los no terminales del lado izquierdo de la produccin

Ejemplo LL(1)
2. Clculo del First / Primero
Smbolo No Terminal

First ( x,( ;, x,(

S A B C

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

Ejemplo LL(1)
2. Clculo del Follow / Siguiente
Smbolo No Terminal

Follow $

S A B C

S A B C

( A ) CB ; A | x | S

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
Smbolo No Terminal

Follow $ )

S A B C

S A B C

( A ) CB ; A | x | S

Para cacular el follow Se usan Los no terminales del lado izquierdo de la produccin

Ejemplo LL(1)
2. Clculo del Follow / Siguiente
Smbolo No Terminal

Follow $ ) )

S A B C

S A B C

( A ) CB ; A | x | S
Aadir el Follow(X) a Follow(Y)

Si X Y Produccin

Para cacular el follow Se usan Los no terminales del lado izquierdo de la produccin

Ejemplo LL(1)
2. Clculo del Follow / Siguiente
Smbolo No Terminal

Follow $ ) ) ;,)

S A B C

S A B C

( A ) CB ; A | x | S
1.Follow (Y) = First (M) excepto .

Si X Y M Produccin

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

Se usan Los no terminales del lado derecho de la produccin

First(B)

;,

Ejemplo LL(1)
Construir la tabla de Anlisis Sintctico
2.

Para cada terminal a del First (), adase A en la posicin M[A , a].

Smbolo No Terminal

First ( x,( ;, x,(

S A B C

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

x
A CB

(
S(A) A CB

S A B C

B;A Cx CS

Ejemplo LL(1)
Construir la tabla de Anlisis Sintctico
3. Si esta en el First (), adase A a M[A , b ] para cada terminal b de Follow(A).
Smbolo No Terminal Smbolo No Terminal

First ;,

Follow

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

x
A CB

(
S(A) A CB

S A B C

B;A Cx CS

Ejemplo LL(1)
Construir la tabla de Anlisis Sintctico

4. Cada entrada vaca hgase ERROR ; S A B C


ERROR ERROR B;A ERROR

x
ERROR A CB ERROR Cx

(
S(A) A CB ERROR CS

)
ERROR ERROR B ERROR

$
ERROR ERROR ERROR ERROR

Ejemplo LL(1)
3. Construir la tabla de Anlisis Sintctico

; S A B C
ERROR ERROR B;A ERROR

x
ERROR A CB ERROR Cx

(
S(A) A CB ERROR CS

)
ERROR ERROR B ERROR

$
ERROR ERROR ERROR ERROR

Pasos para el Mtodo LL(1)


4. Hacer el anlisis de sintctico por medio de la pila y la tabla de anlisis
( x ; ( x ) )

Pila
$S

Entrada (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 $S Entrada (x;(x))$ Accin 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 $S $)A( Entrada (x;(x))$ (x;(x))$ Accin 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 $S $)A( Entrada (x;(x))$ (x;(x))$ Accin S(A)

Cuando se llega a una coincidencia, se eliminan ambos, y se continua con el anlisis

Pila
$S $)A $)BC $)B x $)B $)A; $)A $)BC $)BS $)B)A( $)B)A $)B)BC $)B)Bx $)B)B $)B) $)B $) $

Entrada
(x;(x))$ x;(x))$ x;(x))$ x;(x))$ ;(x))$ ;(x))$ (x))$ (x))$ (x))$ (x))$ x))$ x))$ x))$ ))$ ))$ )$ )$ $

Accin
S(A) ACB Cx
B;A ACB CS S(A) ACB C x B B

Pila
$S $)A $)BC $)B x $)B $)A; $)A $)BC $)BS $)B)A( $)B)A $)B)BC $)B)Bx $)B)B $)B) $)B $)

Entrada
(x;(x))$ x;(x))$ x;(x))$ x;(x))$ ;(x))$ ;(x))$ (x))$ (x))$ (x))$ (x))$ x))$ x))$ x))$ ))$ ))$ )$ )$

Accin
S(A) ACB Cx
B;A ACB CS S(A) ACB C x B B

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.

ACEPTADA

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

Potrebbero piacerti anche