next up previous contents index PLPL moodlepserratamodulosperlmonksperldocapuntes LHPgoogleetsiiullpcgull
Sig: Consejos a seguir al Sup: Análisis LR Ant: Recuperación de Errores Err: Si hallas una errata ...

Recuperación de Errores en Listas

Aunque no existe un método exacto para decidir como ubicar las reglas de recuperación de errores, en general, los símbolos de error deben ubicarse intentado satisfacer las siguientes reglas:

En el caso particular de las listas, se recomienda seguir el siguiente esquema:




Tabla: Recuperación de errores en listas
Construcción EBNF yapp
secuencia opcional x:{y} x : /* null */
    | x y { $_[0]->YYErrok; }
    | x error
secuencia x:y{y} x : y
    | xy { $_[0]->YYErrok; }
    | error
    | x error
lista x:y{Ty} x : y
    | x T y { $_[0]->YYErrok; }
    | error
    | x error
    | x error y { $_[0]->YYErrok; }
    | x T error




Ejercicio 7.16.1   Compruebe el funcionamiento de la metodología para la recuperación de errores en listas presentada en la tabla 7.2 estudie el siguiente programa yapp siguiendo la traza de estados, generando entradas con todos los tipos de error posibles. ¿Cómo se recupera el analizador en caso de existencia de un segundo error? ¿Que ocurre si dos errores consecutivos están muy próximos? El programa corresponde al tercer caso de la tabla 7.2, el caso x:y{Ty} con x = list, T = ',' e y = NUMBER:
%token NUMBER
%%
command 
  : 
  | command list '\n' { $_[0]->YYErrok; } 
  ;

list 
    : NUMBER            { put($1); }
    | list ',' NUMBER   { put($3); $_[0]->YYErrok; }
    | error             { err(1); }
    | list error        { err(2); }
    | list error NUMBER { err(3); put($3); $_[0]->YYErrok; }
    | list ',' error    { err(4); }
    ;
    
%%    
sub put { my $x = shift; printf("%2.1lf\n",$x); }
sub err { my $code = shift; printf("err %d\n",$code); }
 ...


next up previous contents index PLPL moodlepserratamodulosperlmonksperldocapuntes LHPgoogleetsiiullpcgull
Sig: Consejos a seguir al Sup: Análisis LR Ant: Recuperación de Errores Err: Si hallas una errata ...
Casiano Rodríguez León
2013-03-05