SOFTWARE DE GENERACIÓN Y SIMULACIÓN DE TABLAS DE ANÁLISIS SINTÁCTICO (BURGRAM)
Portada > Los algoritmos de análisis sintáctico > Análisis Sintáctico Ascendente > Construcción de las tablas de análisis SLR

Construcción de las tablas de análisis SLR

Una vez generado al autómata, se pueden generar las tablas de análisis.

La generación de la tabla de análisis se hace en dos pasos:

Generación de la tabla de acción

Generación de la tabla Ir_a

Generación de la tabla de acción

La idea básica del algoritmo es sencilla, el algoritmo hace lo siguiente.

Para el j-ésimo item del i-ésimo estado hacer:

Si el item es un desplazamiento(A) agregar la acción: "Desplazar a i". Donde i es el índice del i-ésimo estado.

Si el item es una reducción () agregar la acción: "Reducir por ".

Si es el item , agregar la acción: "Aceptar"

Cualquier otra entrada no rellenada de la tabla poner error. En el siguiente algoritmo (Algoritmo10) se muestran los resultados.

Entrada: C, la colección canónica de estados del autómata.

Salida: Tabla de Acción

1: for all C do

2: for all item do

3: if [] and Sucesor (,a) = then

4: Acción [,a] = Desplazar y

5: else if [] then

6: for all a FOLLOW (A) do

7: Acción [,a] = Reducir por

8: end for

9: end if

10: if [ ] then

11: Acción [, $] = Aceptar

12: end if

13: end for

14: end for

Algoritmo 10: Algoritmo de generación de la tabla de acción.

Para las restantes entradas de la tabla que no están rellenadas poner ERROR.

Generación de la tabla Ir_A

Para generar la tabla “Ir_A” lo único que hay que hacer es ver en cada estado, las transiciones que hay debidas a no terminales. En ese estado y con dicho no terminal hay que poner el identificador del estado destino. En el siguiente algoritmo (Algoritmo 11) se describe este procedimiento de manera más formal.

Entrada: C, la colección canónica de estados del autómata.

Salida: Tabla de Ir_A

1: for all X C do

2: if Sucesor (, X) = then

3: Ir_A [, X] =

4: else

5: ERROR

6: end if

7: end for

Algoritmo 11: Algoritmo de generación de la tabla Ir_A

En la siguiente tabla puede verse un ejemplo de generación de la tabla de análisis utilizando el método SLR. Esta tabla ha sido generada a partir del autómata de la figura anterior (Figura 39).



+

(

)

num

$

E

T

0


D3


D4


1

2

1

D5




Aceptar



2

R2


R2


R2



3


D3


D4


6

2

4

R4


R4


R4



5


D3


D4



7

6

D5


D8





7

R1


R1


R1



8

R3


R3


R3



Tabla 4: Tabla de análisis LR1

Por ejemplo, en el estado 0 hay dos desplazamientos, el debido al símbolo ( y al del símbolo num. Por eso en la tabla de análisis en la fila 0 y en las correspondientes columnas hay una D y un número indicando el siguiente estado. También en ese estado se rellena la parte de Ir_A, ya que hay dos transiciones con los no terminales 'E' y 'T'. En resumen, en cada estado sólo hay que comprobar que tipo de acción realizar y anotarla en la tabla.