You are on page 1of 20

El anlisis descendente LL(1) a

29 de abril de 2010

El anlisis descendente LL(1) a

Anlisis Descendente (TopDown) a

El modelo de anlisis recorre un rbol de derivacin desde la ra a a o z con el s mbolo inicial S, hasta las hojas. Basa su construccin en el o uso de derivaciones ms a la izquierda. El proceso resulta a determinista en el caso de que la gramtica involucrada sea de un a tipo espec co: gramticas LL(k) (de from left to right with left a canonical derivation and a look-ahead of k symbols deterministic recognizable). Haremos la exposicin para gramticas LL(1). o a

El anlisis descendente LL(1) a

Porque es TAN interesante el anlisis descendente a

El anlisis descendente es ms intuitivo y permite gestionar mejor a a los errores en el cdigo fuente. Esto es as porque, como veremos, o el cerebro humano funciona de esta manera. Cuando queremos o mos una frase, estamos analizando automticamente. No a necesitamos o la frase entera para ir deduciendo que sera el r sujeto o que el predicado. Es ms, notamos, sin tener que acabar la a frase que podemos deducir que es lo que nos quieren decir.

El anlisis descendente LL(1) a

Porque no es TAN interesante el anlisis descendente a

Basicamente porque construir gramticas LL(1) a veces es a complicado, como por ejemplo la recursividad a izquierda.

El anlisis descendente LL(1) a

Ejemplos sencillos de gramticas LL(1) a

Q (Q)|. En esta gramtica esta claro que la primera a produccin se usa cuando aparece un parentesis abierto y la o segunda cuando aparece el primer parentesis cerrado. S aAb|b, A aSAa|b Tambin en este ejemplo la forma e de construir el autmata es mecnica. o a

El anlisis descendente LL(1) a

Denicin de gramtica LL(1) o a

Denition (Gramticas LL(k)) a


Una gramtica libre de contexto G = (V , , Q0 , P) se dice de clase a LL(k) si verica la siguiente propiedad: Dadas dos derivaciones, donde , A V , , , (V ) , del tipo siguiente: Q0 Q0
lm lm

A A

lm lm

x , y ,

Si FIRSTk (x) = FIRSTk (y ), entonces = .

El anlisis descendente LL(1) a

Ideas intuitivas

Probemos esta gramatica S AB|BA, A a, B b. como construiriamos el automata con pila?

El anlisis descendente LL(1) a

Ideas intuitivas

Probemos esta gramatica S AB|BA, A a, B b. Esto tiene que ver con el FIRST?

El anlisis descendente LL(1) a

Compliquemos mas el asunto

Probemos esta gramatica o S ASB|, A a, B b. Esto tiene que ver con el FOLLOW?

El anlisis descendente LL(1) a

Compliquemos mas el asunto

Probemos esta gramatica o S ASB|, A a, B b. Esto tiene que ver con el FOLLOW?

El anlisis descendente LL(1) a

La tabla de anlisis sintctico LL(1) a a

Numeramos las reglas gramticales producciones. Construiremos a o una tabla M : (V {$}) ( {}) P(P), donde P(P) es el conjunto de todos los subconjuntos del conjunto de las producciones.

El anlisis descendente LL(1) a

La tabla de anlisis sintctica a a

Deniremos M del modo siguiente: Dada una produccin (i) A o


Para cada a FIRST (), a = , aadir i a la casilla M(A, a). n Si FIRST () aadir i en todas las casillas M(A, b) para n cada b FOLLOW (A).

M(a, a) =pop para cada a . M($, ) =accept. En todos los dems casos escribir M(X , i) =error. a

El anlisis descendente LL(1) a

Varios ejemplos

Q aQb|. S aAb|b, A aSAa|b. S ASB|, A a, B b.

El anlisis descendente LL(1) a

Pequeo detalle n

En la asignatura de autmatas tenemos que la palabra vac puede o a estar en el FIRST. Es mas correcto hallar las variables ANULABLES.

El anlisis descendente LL(1) a

Construccin del autmata o o

La tabla de analis sintctico nos dice que debemos meter en la s a pila del autmata. La parte derecha de la regla que se aplica es lo o que se mete en la pila. Ademas sacamos de la pila los elementos que tengamos en la top de la pila y en la cinta.

El anlisis descendente LL(1) a

El compilador de compiladores ANTLR

Es uno de los compilador de compiladores ms conocido. Genera a un compilador en el lenguaje que nosotros queramos para poder incluirlo en nuestro proyecto.

El anlisis descendente LL(1) a

ANTLRWorks

Antlrworks es un programa que permite editar de forma sencilla cheros de gramticas. a El archivo y la gramtica tienen que llamarse de la misma a manera. Se declara en la primera linea grammar nombre;

El anlisis descendente LL(1) a

ANTLR, lo ms bsico a a

El nombre de los tokens es en mayscula y el nombre de las u variable de la gramtica en minsculas. a u Las reglas llevan solamente : en vez de = y acaban con ; Para incluir clases o paquetes hay que incluirlos dentro de un campo header @ header{ import java.util.*; } En caso de querer poner atributos a la clase, aadir un campo n que se llame members. por ejemplo @members{ int j;}

El anlisis descendente LL(1) a

ANTLR, la notacin EBNF o

Bsicamente, aade funcionalidad a la notacin BNF, permitiendo a n o repeticiones o diferentes opciones. La parte derecha de la regla es una expresin regular en las variables y en los tokens. o

El anlisis descendente LL(1) a

ANTLR, la notacin EBNF o

Por supuesto no todas las construcciones son validas! S : A A;

El anlisis descendente LL(1) a

You might also like