You are on page 1of 21

Gramticas Ascendentes

Organizacin de Lenguajes y Compiladores 1 USAC

Guatemala, 2013

Gramticas Ascendentes
Construye el rbol de anlisis sintctico de las hojas a la raz.

El anlisis ascendente lineal ms utilizado es el algoritmo de desplazamiento-reduccin (shiftreduce).


Este algoritmo se basa en una pila de estados y una tabla de anlisis.

Funcionamiento
Gramtica Ascendente SL L L , id L id

Entrada: id,id,id

S L L L
id

L
id

L
id

,
id

L L
id

,
id

id

L
id

L
id

Funcionamiento
Gramtica Descendente SL Entrada: id,id,id L id , L L id

S L
id

S L , L
id

S L ,
id

S L L , L
id

,
id

L , L
id

Desplazamiento y Reduccin
El anlisis ascendente lineal ms utilizado es el algoritmo de desplazamiento-reduccin (shiftreduce). Este algoritmo se basa en una pila de estados y una tabla de anlisis. La funcin de transicin se define en base a las siguientes acciones sobre la pila.

Anlisis sintctico ascendente


Utiliza dos acciones bsicas:
Desplazar: Consiste en consumir un token de la cadena de entrada. Reducir: Consiste en sustituir en la pila los smbolos de una parte derecha de una regla por su parte izquierda.

Anlisis sintctico ascendente


El algoritmo utiliza una pila de estados y una tabla de anlisis con dos partes:
Acciones: para cada smbolo terminal y $.

Ir-a: para cada smbolo no terminal.


Las filas corresponden a los estados.

Anlisis sintctico ascendente


Las acciones pueden ser:
dj: desplazar y apilar el estado j. rk: reducir por la regla k-sima.

Aceptar: Terminar el anlisis aceptando la cadena.


Error: Producir un error (cuando no se encuentra ninguna accin).

Ejemplo
Gramtica Ascendente S B A end A begin C C codigo B tipo B id B Entrada: id tipo begin codigo end

Ejemplo
Pila
$ $ id $ id tipo

Entrada

Accin

id tipo begin codigo end $ Desplazar tipo begin codigo end $ Desplazar begin codigo end $ Reducir B tipo

$ id B
$B $ B begin

begin codigo end $ Reducir B id B


begin codigo end $ Desplazar begin codigo end $ Desplazar

$ B begin codigo
$ B begin C $BA $ B A end $S

codigo end $ Reducir C codigo


end $ Reducir A begin C end $ Desplazar end $ Reducir S B A end $ Aceptar

Ejemplo
S

B
id

A
B
tipo
tipo

end

C
codigo

Ejemplo
S

B
id

A
B
tipo
tipo

end

C
codigo

Desplazar: id

id

Ejemplo
S

B
id

A
B
tipo
tipo

end

C
codigo

Desplazar: tipo

id

tipo

Ejemplo
S

B
id

A
B
tipo
tipo

end

C
codigo

Reducir: B tipo

id

Ejemplo
S

B
id

A
B
tipo
begin

end

C
codigo

Reducir: B id B

Ejemplo
S

B
id

A
B
tipo
begin

end

C
codigo

Desplazar: begin

begin

Ejemplo
S

B
id

A
B
tipo
begin

end

C
codigo

Desplazar: codigo

begin

codigo

Ejemplo
S

B
id

A
B
tipo
begin

end

C
codigo

Reducir: C codigo

begin

Ejemplo
S

B
id

A
B
tipo
begin

end

C
codigo

Reducir: A begin C

Ejemplo
S

B
id

A
B
tipo
begin

end

C
codigo

Desplazar: end

end

Ejemplo
S

B
id

A
B
tipo
begin

end

C
codigo

Reducir: S B A end

You might also like