Análisis sintáctico LR: SLR (LR simple). Ventajas de los analizadores sintácticos LR Los...

15
Análisis sintáctico LR: SLR (LR simple)

Transcript of Análisis sintáctico LR: SLR (LR simple). Ventajas de los analizadores sintácticos LR Los...

Page 1: Análisis sintáctico LR: SLR (LR simple). Ventajas de los analizadores sintácticos LR Los analizadores sintácticos son construidos por tablas, similar.

Análisis sintáctico LR: SLR (LR simple)

Page 2: Análisis sintáctico LR: SLR (LR simple). Ventajas de los analizadores sintácticos LR Los analizadores sintácticos son construidos por tablas, similar.

Ventajas de los analizadores sintácticos LR

Los analizadores sintácticos son construidos por tablas, similar a los analizadores sintácticos LL no recursivos.

El análisis sintáctico LR es atractivo por varias razones:

Pueden construirse analizadores sintácticos LR para reconocer prácticamente todas las construcciones de lenguajes de programación para las cuales puedan escribirse gramáticas libres de contexto.

El método de análisis sintáctico LR es el método de análisis sintáctico de desplazamiento reducción sin rastreo hacia atrás más general que se conoce a la fecha.

Un AS LR puede detectar un error sintáctico tan pronto como sea posible en una exploración de izquierda a derecha en la entrada.

La clase de gramáticas que pueden analizarse mediante los métodos LR es un superconjunto propio de la clase de gramáticas que pueden analizarse con métodos predictivos o LL.

Page 3: Análisis sintáctico LR: SLR (LR simple). Ventajas de los analizadores sintácticos LR Los analizadores sintácticos son construidos por tablas, similar.

Desventajas

Su principal desventaja es que es demasiado trabajo construir un analizador sintáctico LR en forma manual para una gramática común de un lenguaje de programación.

Page 4: Análisis sintáctico LR: SLR (LR simple). Ventajas de los analizadores sintácticos LR Los analizadores sintácticos son construidos por tablas, similar.

Los elementos y el autómata LR(0)

Un elemento LR (0) de una gramática G es una producción de G con un punto en cierta posición del cuerpo.

Por ejemplo la producción A XYZ produce los siguientes elementos:

A.XYZAX.YZAXY.ZAXYZ.

La producción Aε genera solo un elemento A.

Page 5: Análisis sintáctico LR: SLR (LR simple). Ventajas de los analizadores sintácticos LR Los analizadores sintácticos son construidos por tablas, similar.

Una colección de conjuntos de elementos LR(0), conocida como la colección LR(0) canónica, proporciona la base para construir un autómata finito determinístico, el cual se utiliza para tomar decisiones en el análisis sintáctico.

Para construir la colección LR(0) canónica de una gramática, definimos una gramática aumentada y dos funciones, CERRADURA e ir__A. Si G es una gramática con el símbolo inicial S, entonces G’ es G con un nuevo símbolo inicial S’ y la producción S’S

Page 6: Análisis sintáctico LR: SLR (LR simple). Ventajas de los analizadores sintácticos LR Los analizadores sintácticos son construidos por tablas, similar.

Cerradura de I

ConjuntoDeElementos CERRADURA(I) {

J=I

repeat

for (cada elemento A α.Bβ en J)

for (cada producción B .γ de G)

if (B .γ no está en J)

agregar B .γ a J

until no se agreguen mas elementos a J en una ronda

return J

}

Page 7: Análisis sintáctico LR: SLR (LR simple). Ventajas de los analizadores sintácticos LR Los analizadores sintácticos son construidos por tablas, similar.

Ejemplo:

E´ EE E + T | TT T * F | FF ( E ) | id

Si I={E’.E}, entonces CERRADURA (I) Contiene el conjunto {E’.E, E.E+T, E.T, T.T*F, T.F, F.(E), F.id}

Page 8: Análisis sintáctico LR: SLR (LR simple). Ventajas de los analizadores sintácticos LR Los analizadores sintácticos son construidos por tablas, similar.

La función ir__A

Función ir__A(I,X), donde I es un conjunto de elementos y X es un símbolo gramatical.

ir__A (I,X) se define como la cerradura del conjunto de todos los elementos A αX.β, de tal forma que A α.Xβ se encuentre en I.

Ejemplo:Si I={E’E., EE.+T} entonces ir__A(I,+)={EE+.T, T.T*F, T.F, F.(E), F.id}

Page 9: Análisis sintáctico LR: SLR (LR simple). Ventajas de los analizadores sintácticos LR Los analizadores sintácticos son construidos por tablas, similar.

I0E’.EE.E+TE.TT.T*FT.FF.(E)F.id

I1E’E.EE.+T

I2ET.ET.*F

I4F(.E)E.E+TE.TT.T*FT.FF.(E)F.id

I5Fid.

I8EE.+TF(E.)

I7TT*.FF.(E)F.id

I6EE+.TT.T*FT.FF.(E)F.id

I3TF.

I9EE+T.TT.*F

I10TT*F.

I11F(E).

E+ T

T

id

(

F

F

F

id

E

F

)

+ *

)

)

T

(

*

id

id

Page 10: Análisis sintáctico LR: SLR (LR simple). Ventajas de los analizadores sintácticos LR Los analizadores sintácticos son construidos por tablas, similar.

El algoritmo de análisis sintáctico LR

Códigos para las acciones:1.si significa desplazar y meter el estado i en la pila.2.rj significa reducir mediante la produccion enumerada como j,3.acc significa aceptar4.Espacio en blanco significa error

Page 11: Análisis sintáctico LR: SLR (LR simple). Ventajas de los analizadores sintácticos LR Los analizadores sintácticos son construidos por tablas, similar.

Algoritmo: Construcción de una tabla de análisis sintáctico SLREntrada: Una gramática aumentada G’Salida: Las funciones ACCION e ir_A para G’ de la tabla de análisis sintáctico SLR.Método:1.Construir C={I0, I1, …, In}, la colección de conjuntos de elementos LR(0) para G’.2.El estado i se construye a partir de Ii. Las acciones de análisis sintáctico i se determinan de la siguiente forma:a)Si [Aα.aβ] está en Ii e ir__A(Ii,a)=Ij, entonces establecer ACCION[i.a] a “desplazar j”. Aquí, a debe ser un terminal.b)Si [A α.] esta en Ii, entonces establecer ACCION[i,a] a “reducir A α” para toda a en SIGUIENTE(A); aquí, A tal vez no sea S’.c)Si [S’S.] esta en Ii, entonces establecer ACCION[i,$] a “aceptar”.Si resulta cualquier acción conflictiva debido a las reglas anteriores, decimos que la gramática no es SLR(1). El algoritmo no produce un analizador sintáctico en este caso.

Page 12: Análisis sintáctico LR: SLR (LR simple). Ventajas de los analizadores sintácticos LR Los analizadores sintácticos son construidos por tablas, similar.

3. Las transiciones de ir__A para el estado i se construyen para todos lo no terminales A usando la regla: Si ir__A(Ii, A)=Ij, entonces ir__A[i,A]=j.

4. Todas las entradas que no esten definidas por las reglas (2) y (3) se dejan como “error”.

5. El estado inicial del analizador sintáctico es el que se construyó a partir del conjunto de elementos que contienen [S’.S].

Page 13: Análisis sintáctico LR: SLR (LR simple). Ventajas de los analizadores sintácticos LR Los analizadores sintácticos son construidos por tablas, similar.

Entrada ACCION Ir__A

id + * ( ) $ E T F

0 s5 s4 1 2 3

1 s6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4 8 2 3

5 r6 r6 r6 r6

6 s5 s4 9 3

7 s5 s4 10

8 s6 s11

9 r1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

(1) EE + T(2) ET(3) TT * F(4) TF(5) F( E )(6) Fid

Page 14: Análisis sintáctico LR: SLR (LR simple). Ventajas de los analizadores sintácticos LR Los analizadores sintácticos son construidos por tablas, similar.

Algoritmo de análisis sintáctico LR.

Entrada: Una cadena de entrada w y una tabla de análisis sintáctico LR con las funciones ACCION e ir__A, para una gramática G.

Salida: Si w está en L(G), los pasos de reducción de un análisis sintáctico ascendentes para w, en cualquier otro caso, una indicación de error.

Método: Al principio, el analizador sintáctico tiene s0 en su pila, en donde s0 es el estado inicial y w$ está en el búfer de entrada.

hacer que a sea el primer símbolo de w$while (1) { hacer que s sea el estado en la parte superior de la pila; if (ACCION[s,a]=desplazar t) {

meter t en la pila;hacer que a sea el siguiente símbolo de entrada;

} else if (ACCION[s,a]=reducir Aβ ) {sacar |β| estados de la pila y sustituir los símbolos β por A;sea t el estado que esta en el tope de la pila;meter ir__A[t,A] en la pila;enviar de salida la producción Aβ;

} else if (ACCION[s,a]=aceptar) break; else llamar a la rutina de recuperación de errores;}

Page 15: Análisis sintáctico LR: SLR (LR simple). Ventajas de los analizadores sintácticos LR Los analizadores sintácticos son construidos por tablas, similar.

Pila Símbolos Entrada Accion0 id*id$ s50 5 id *id$ r60 F *id$ r40 3 T *id$ s70 2 7 T* id$ s50 2 7 5 T*id $ r60 2 7 T*F $ r30 2 7 10 T $ r20 2 T $0 1 E acc