Sei sulla pagina 1di 25

Análisis

Sintáctico SLR
(LR SIMPLE)
ESQUEMA DEL ANALIZADOR SINTÁCTICO LR

● El programa conductor es el mismo para


todos los analizadores sintácticos LR.
● Solo cambian las tablas de un analizador
a otro.
TABLA DE ANÁLISIS SINTÁCTICO

▪ Consta de dos partes: acción y ir_a.


▫ acción: Indica una acción del
analizador.
▫ ir_a: Indica las transiciones entre
estados.

Estados acción ir_a


COMPORTAMIENTO DEL PROGRAMA QUE
MANEJA EL ANALIZADOR SINTÁCTICO LR
▪ Determina Sm, el estado de la cima de la
pila, y ai, el símbolo en curso de la
entrada.
▪ Después consulta la entrada acción[Sm, ai]
de la tabla de acciones del analizador
para el estado Sm, y la entrada ai, que
puede tener uno de estos cuatro valores:
1. Desplazar S, donde S es un estado.
2. Reducir por una producción
gramatical A-> (beta).
3. Aceptar.
4. Error.
ALGORITMO DE ANÁLISIS SINTÁCTICO LR
ALGORITMO DE ANÁLISIS SINTÁCTICO LR
ANALIZADOR SINTÁCTICO SLR

▪ La tabla de análisis sintáctica


con este método se denominará
tabla SLR y un analizador LR que
utilice una tabla de análisis SLR
se denominará analizador
sintáctico SLR.
LOS ELEMENTOS Y AUTÓMATA LR(0)
▪ Un elemento del análisis sintáctico
LR(0) de una gramática G es una
producción de G con un punto en
alguna posición del lado derecho. Por
tanto, la producción A-> XYZ produce
los cuatro elementos.
- A->.XYZ
- A->X.YZ
- A->XY.Z
- A->XYZ.
La producción A-> genera solo un
elemento A->.
OPERACIÓN CERRADURA
ALGORITMO PARA CÁLCULO DE
CERRADURA(I)
ALGORITMO PARA CONSTRUCCIÓN DE
CONJUNTOS DE ELEMENTOS
EJEMPLO: Sea la gramática

E’-> E
E -> E + T | E E -> E + T
T -> T * F | T E -> T
F -> (E) | id T -> T * F
T -> F
F -> (E)
F -> id
I1
E’-> E.
I0 E -> .E + T

E’-> .E E
I2
E -> .E + T
E -> .T E -> T.
T
T -> .T * F T -> T.*F
T -> .F
F -> .(E) I3
F -> .id F
T -> F.
I4
F -> (.E)
I0 E -> .E + T
E -> .T
E’-> .E
T -> .T*F
E -> .E + T
( T -> .F
E -> .T
F -> .(E)
T -> .T * F
F -> .id
T -> .F
F -> .(E)
id I5
F -> .id
F -> id.
I6
E -> E+.T
T -> .T*F
T -> .F
+ F -> .(E)
I1
E’-> E. F -> .id
E -> .E + T
F

I9
E -> E + T.
T -> T.*F
I7 T -> T*.F
F -> .(E)
F -> .id
I2 *

E -> T. F
T -> T.*F

I10

T -> T*F.
I1
+ T
E’→E. I6 I9
E
I0 E→E.+T E→E+.T E→E+T.
E’→.E T→.T*F T→T.*F
id
E→.E+T T→.F +
E→.T F→.(E) *
T→.T*F F→.id
T→.F T
I2
F→.(E)
E→T.
F→.id
E→T.*F
*
I7
id
T→T*.F I10
id F→.(E) F T→T*F.
( F→.id
T I5
id
F→id.
I4
F→(.E)
F
E→.E+T E
E→.T ) I11
T→.T*F I8
( ) F→(E).
T→.F E→E.+T
) F→(E.)
F→.(E)
F→.id

I3 F
T→F.
CONSTRUCCIÓN DE TABLA SLR
SIGUIENTES
Primero(E) -> {(, id}
Primero(E’) -> {+,e}
Primero(T) -> {(,id}
Primero(T’) -> {*,e}
Primero(F) -> {(,id}

Siguiente(E)-> {$,),+,*}
Siguiente(E’)-> {$,)}
Siguiente(T)-> {$,),+,*}
Siguiente(T’)-> {$,),+}
Siguiente(F)->{+,$,),*}
GRAMÁTICA ENUMERADA

E -> E + T (r1)
E -> T (r2)
E -> T * F (r3)
T -> F (r4)
F -> (E) (r5)
F -> id (r6)
acción ir_a
Estado
id + * ( ) $ E T F

0 d5 d4 1 2 3
1 d6 acept

2 r2 d7 r2 r2
3 r4 r4 r4 r4
4 d5 d4 8 2 3
5 r6 r6 r6 r6
6 d5 d4 9 3
7 d5 d4 10
8 d6 d11
9 r1 r1 r1 r1

10 r3 r3 r3 r3
11 r5 r5 r5 r5
EJEMPLO

w = id*id+id

● Recordar:
○ acción[S,a] = desplazar S’
meter a y despues S’
avanzar al siguiente símbolo de entrada
● acción[S,a] = reducir A -> (beta)
sacar 2*| |(beta) símbolos de la pila
sea S’ el estado que ahora está en la cima de la pila
meter A y después ir_a[S’,A] en la cima de la pila
PILA ENTRADA ACCIÓN

0 id * id + id $ desplazar a S5

0 id 5 * id + id $ F -> id

0 id 5 F 3 * id + id $ T -> F

0F3T2 * id + id $ desplazar a S7

0T2*7 id + id $ desplazar a S5

0 T 2 * 7 id 5 + id $ F -> id

0 T 2 * 7 id 5 F 10 + id $ T -> T * F

0 T 2 * 7 F 10 T 2 + id $ E -> T

0T2E1 + id $ desplazar a S6

0E1+6 id $ desplazar a S5

0 E 1 + 6 id 5 $ F -> id

0 E 1 + 6 id 5 F 3 $ T -> F

0E1+6F3T9 $ E -> E + T

0E1+6T9E1 $ ACEPTAR
E

E
+
T
T T
*
F F F

id * id + id $

Potrebbero piacerti anche