Está en la página 1de 19

Gramtica de contexto libre sin recursividad por la izquierda y factorizada por la izquierda:

P={ (1) E T E (2) E + T E (3) E (4) T F T (5) T * F T (6) T (7) F ( E ) (8) F identificador (9) F nmero }

Anlisis sintctico mediante descenso recursivo (con retroceso)


Funcin E: lgico inicio {SIMULACIN DE LA REGLA E T E} si T = VERDADERO entonces si E = VERDADERO entonces DEVOLVER VERDADERO si no ERROR DEVOLVER FALSO fin si si no ERROR DEVOLVER FALSO fin si fin

Funcin E: lgico inicio referencia Componente lxico actual {SIMULACIN DE LA REGLA E + T E} si emparejar( + ) = VERDADERO entonces avanzar_entrada si T = VERDADERO entonces si E = VERDADERO entonces DEVOLVER VERDADERO si no retroceder_entrada(referencia) fin si si no retroceder_entrada(referencia) fin si si no retroceder_entrada(referencia) fin si {SIMULACIN DE LA REGLA E } DEVOLVER VERDADERO fin
3

Funcin T: lgico inicio {SIMULACIN DE LA REGLA T F T} si F = VERDADERO entonces si T = VERDADERO entonces DEVOLVER VERDADERO si no ERROR DEVOLVER FALSO fin si si no ERROR DEVOLVER FALSO fin si fin

Funcin T: lgico inicio referencia Componente lxico actual {SIMULACIN DE LA REGLA T * F T} si emparejar( * ) = VERDADERO entonces avanzar_entrada si F = VERDADERO entonces si T = VERDADERO entonces DEVOLVER VERDADERO si no retroceder_entrada(referencia) fin si si no retroceder_entrada(referencia) fin si si no retroceder_entrada(referencia) fin si {SIMULACIN DE LA REGLA T } DEVOLVER VERDADERO fin
5

Funcin F: lgico inicio referencia Componente lxico actual {SIMULACIN DE LA REGLA F ( E )} si emparejar( ( ) = VERDADERO entonces avanzar_entrada si E = VERDADERO entonces si emparejar( ) ) = VERDADERO entonces avanzar_entrada DEVOLVER VERDADERO si no retroceder_entrada(referencia) fin si si no retroceder_entrada(referencia) fin si si no retroceder_entrada(referencia) fin si

{SIMULACIN DE LA REGLA F identificador} si emparejar( identificador ) = VERDADERO entonces avanzar_entrada DEVOLVER VERDADERO si no retroceder_entrada(referencia) fin si {SIMULACIN DE LA REGLA F nmero} si emparejar( nmero ) = VERDADERO entonces avanzar_entrada DEVOLVER VERDADERO si no retroceder_entrada(referencia) fin si {SI NINGUNA REGLA ES CORRECTA, SE DEVUELVE FALSO} DEVOLVER FALSO fin

CONJUNTOS PRIMERO Y SIGUIENTE


E E T T F PRIMERO (, identificador, nmero +, (, identificador, nmero *, (, identificador, nmero SIGUIENTE $, ) $, ) +, $, ) +, $, ) +, *, $, )

TABLA PREDICTIVA
E E T T F identificador nmero 1 1 4 8 4 6 9 5 7 + 2 4 6 6 * ( 1 ) 3 $ 3

Algoritmo de construccin de la tabla predictiva


para cada A P hacer si a primero () entonces A M[A,a] fin si si primero () entonces para cada b siguiente (A) hacer A M[A,b] fin para fin si fin para Las celdas vacas de M han de ser tratadas con procedimientos de control de errores. Las celdas de M con valores mltiples indican que la gramtica no admite un anlisis descendente predictivo.
9

Anlisis sintctico descendente predictivo y recursivo


Procedimiento E; inicio {SIMULACIN DE LA REGLA E T E} si (token = identificador) o (token = nmero) o (token = () entonces T; E; si no ERROR fin si fin

10

Procedimiento E inicio {SIMULACIN DE LA REGLA E + T E} si (token = + ) entonces avanzar_entrada(token) T; E; si no {SIMULACIN DE LA REGLA E } si (token = )) o (token = $) entonces {SENTENCIA NULA} si no ERROR fin si fin si fin
11

Procedimiento T; inicio {SIMULACIN DE LA REGLA T F T} si (token = identificador) o (token = nmero) o (token = () entonces F; T; si no ERROR fin si fin

12

Procedimiento T inicio {SIMULACIN DE LA REGLA T * F T} si (token = * ) entonces avanzar_entrada(token) F; T; si no {SIMULACIN DE LA REGLA T } si (token = +) o (token = )) o (token = $) entonces {SENTENCIA NULA} si no ERROR fin si fin si fin
13

Procedimiento F inicio {SIMULACIN DE LA REGLA F ( E )} si (token = ( ) entonces avanzar_entrada(token) E; si (token = ) ) entonces avanzar_entrada(token) si no ERROR fin si si no

14

{SIMULACIN DE LA REGLA F identificador} si (token = identificador) entonces avanzar_entrada(token) si no {SIMULACIN DE LA REGLA F nmero} si (token = nmero) entonces avanzar_entrada(token) si no ERROR fin si fin si fin si fin

15

Anlisis sintctico descendente predictivo y no recursivo


{Se apila el delimitador derecho - $ - y el smbolo inicial S -} apilar ($) apilar (S) Token primer smbolo de la entrada mientras (final-entrada= FALSO) hacer si Cima VT entonces si (Token = Cima) entonces si (Token = $) entonces La cadena de entrada es aceptada si no { Token $ Se empareja la cima de la pila con el componente lxico de la entrada } desapilar (Cima) avanzar (Token) fin si si no {Token Cima} Llamar a una funcin de error fin si
16

si no

{Cima VT, por tanto Cima VN} si (M[Cima, Token] = Cima X1 X2 XN) entonces {Se extrae el smbolo actual de la cima de la pila} desapilar (Cima) { Se introducen los smbolos de la alternativa en orden inverso} para i = N hasta 1 hacer apilar (X i) fin para si no {Cima VN y M[Cima, Token] = vaco } Llamar a una funcin de error

fin si fin si fin si fin mientras

17

TABLA PREDICTIVA Y EL MODO DE PNICO DE RECUPERACIN DE ERRORES

E E T T F

identificador 1 3* 4 6* 8

nmero 1 3* 4 6* 9

2 3* Sincronizacin 6 5 Sincronizacin Sincronizacin

( 1 3* 4 6* 7

) $ Sincronizacin Sincronizacin 3 3 Sincronizacin Sincronizacin 6 6 Sincronizacin Sincronizacin

Producciones psilon o Se han introducido producciones psilon marcadas con asterisco en las celdas vacas de los smbolos no terminales que contienen a psilon en su conjunto primero. Esta accin posterga la deteccin del error. Sincronizacin: o Se han utilizado como smbolos de sincronizacin del smbolo no terminal A a los smbolos de siguiente(A). o Se eliminara el smbolo no terminal de la pila del anlisis sintctico.

18

TABLA PREDICTIVA Y EL MTODO DE NIVEL DE FRASE


identificador 1 3* 4 6* 8 Emparejar Emparejar Emparejar Emparejar E1 E2 E1 E2 E1 E2 E1 E2 Emparejar E1 E2 Emparejar E2 E1 ACEPTAR nmero 1 3* 4 6* 9 + E3 2 E3 6 E3 * E3 3* E3 5 E3 ( 1 3* 4 6* 7 ) E2 3 E2 6 E2 $ E3 3 E3 6 E3

E E T T F identificador nmero + * ( ) $

Las producciones psilon marcadas con asterisco postergan la deteccin del error. E1: o Diagnstico: falta el parntesis derecho. o Posible accin: extraer el parntesis derecho de la pila. E2: o Diagnstico: smbolo inesperado. o Posible accin: eliminar el smbolo de la entrada. E3: o Diagnstico: falta operando. o Posible accin: se inserta en la entrada identificador.
19

También podría gustarte