Sunteți pe pagina 1din 23

ANLISIS SINTCTICO ASCENDENTE

Anlisis sintctico ascendete


El anlisis sintctico ascendente crea el inverso de una derivacin derecha Los pasos para realizar la inversa de una derivacin derecha son: Comenzar con la cadena de caracteres (las hojas del rbol) Intentar reducir al smbolo de inicio encontrado en el mango actual.

Ejemplo
Dada la gramtica: N D|ND D 0|1|2|3|4|5|6|7|8|9 Realizar el anlisis sintcto ascendente sobre la cadena 35
35 D5 N5 ND N

Desplazamiento y reduccin

El mtodo de anlisis ascendente revisado anteriormente es llamado de desplazamiento y reduccin El anlisis sintctico por desplazamiento y reduccin intenta construir un rbol de anlisis sintctico para una cadena de entrada que comienza por las hojas (el fondo) y avanza hacia la raz (la cima) Se puede considerar este proceso como de reducir una cadena w al smbolo inicial de la gramtica En cada paso de reduccin se sustituye una subcadena determinada que concuerde con el lado derecho de una produccin por el smbolo del lado 4 izquierdo de dicha produccin

Ejercicio
Dada la gramtica: S aABe A Abc | b B d Reducir al no terminal inicial la cadena abbcde

Mangos

Un mango de una cadena es una subcadena que concuerda con el lado derecho de una produccin y cuya reduccin al no terminal del lado izquierdo de la produccin representa un paso a lo largo de la inversa de una derivacin por la derecha Si una gramtica no es ambigua, entonces toda forma de frase derecha de la gramtica tiene exactamente un mango
6

Mangos

En el ejercicio anterior la cadena abbcde es una forma de frase derecha cuyo mango es A b en la posicin 2 Del mismo modo, aAbcde es una forma de frase derecha cuyo mango es A Abc en la posicin 2

Ejemplo de reduccin y desplazamiento

Conflictos durante el anlisis sintctico por desplazamiento y reduccin

Existen gramticas independientes del contexto para las cuales no se pueden utilizar analizadores sintcticos por desplazamiento y reduccin Estos analizadores pueden alcanzar una configuracin en la cual conociendo el contenido total de la pila y el siguiente smbolo de la entrada se presenten dos conflictos:

Desplazamiento/reduccin: no puede decidir si desplazar o reducir Reduccin/reduccin: no puede decidir que tipo de reduccin realizar
9

Ejemplo
prop if expr then prop | | PILA ...if expr then prop if expr then prop else prop otro ENTRADA else...$

No se puede saber si if expr then prop es el mango


10

Ejemplo
prop id(lista_params) prop expr := expr lista_params lista_params, parametro lista_params parametro parametro id expr id(lista_expr) expr id lista_expr lista_expr, expr lista_expr expr

PILA ...id(id

ENTRADA , id)...

No se puede saber por cual produccin reducir id 11

Conflictos durante el anlisis sintctico por desplazamiento y reduccin

Las gramticas en las cuales se presentan los conflictos anteriores no estn dentro de la clase LR(k) En general ninguna gramtica ambigua puede ser LR(k) para ninguna k

12

Anlisis sintctico LR

Una tcnica eficiente de anlisis sintctico ascendente es denominda LR (left-to-right, rightmost derivation) Como su nombre lo indica, en este anlisis se intentar construir una derivacin por la derecha

13

Anlisis sintctico LR

Este anlisis es util por las siguientes razones:

Se pueden construir analizadores sintcticos LR para reconocer practicamente todas las construcciones de los lenguajes de programacin Un analizador sintctico LR puede detectar un error sintctico tan pronto como sea posible hacerlo en un examen de izquierda a derecha de la entrada Se puede construir una tabla que dirija todo el proceso de anlisis
14

Tcnicas de anlisis sintctico LR

Existen tres tcnicas para la construccin de una tabla de anlisis sintctico LR

SLR (LR sencillo): Es el ms facil de implementar pero es el menos poderoso. Puede que no consiga producir una tabla de anlisis sintctico para algunas gramticas que otros mtodos si consiguen LR cannico: Es el ms poderos y costoso. No se suele implementar en la prctica LALR (LR con examen anticipado): Est entre los otros dos en cuanto a poder y costo. Este mtodo funciona con las gramticas de la mayora de los lenguajes de programacin y se puede 15 implementar de manera eficiente

Algoritmo de anlisis sintctico LR

El algoritmo de anlisis consta de cinco elementos:


Una entrada Una salida Una pila Un programa conductor Una tabla de anlisis sintctico dividida en dos partes

Accin: Indica una accin del analizador ir_a: Indica las transiciones entre estados
16

ALGORITMO DE ANLISIS SINTCTICO LR


a1 ... ai ... an $

Sm Xm S m-1 X m-1 ... S0 accin ir_a Programa para anlisis sintctico LR SALIDA

Tabla de anlisis sintctico

El analizador implementa los siguientes pasos


Determina el estado de la pila y el smbolo en curso de la entrada Consulta la entrada de la tabla de acciones para el estado y el smbolo, que pueden tener uno de estos cuatro valores:
Desplazar s, donde s es un estado Reducir por una produccin gramatical A Aceptar Error

ALGORITMO DE ANLISIS SINTCTICO LR

Entrada

Cadena de entrada w Tabla de AS LR con las funciones accin e ir_a para la gramtica G Si w est en L(G) una derivacin ascendente Si no indicacin de error Inicialmente:

Salida

Mtodo

La pila contiene S0 (estado inicial) El buffer de entrada contiene w$ (la cadena de entrada seguida de la marca de fin de cadena)

Ejecucin del programa de anlisis hasta encontrar una accin de aceptacin o de error

PROGRAMA DE ANLISIS
apuntar ae al primer smbolo de w$ repetir sea S el estado en la cima de la pila y a el smbolo apuntado por ae si accion [S,a]= desplazar S entonces meter a y despus S en la cima de la pila avanzar ae al siguiente smbolo de entrada si_no si accin [S, a] = reducir A entonces sacar 2 * || smbolos de la pila sea S el estado que hay ahora en la cima de la pila meter en la cima de la pila A y despus ir_a [S, A] emitir la produccin A si_no si accin [S, a] = aceptar entonces fin con xito si_no error fin_repetir

EJEMPLO Gramtica (1) E E + T (2) E T (3) T T * F (4) T F (5) F (E) (6) F id


Cdigos de las acciones 1. di significa desplazar y meter en la pila el estado i 2. rj significa reducir por la regla de nmero j 3. Acep significa aceptar 4. El espacio en blanco significa error

TABLA DE ANLISIS SINTCTICO LR (para la gramtica del ejemplo)

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