En el caso particular de las listas, se recomienda seguir el siguiente esquema:
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 35.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); } ...
Casiano Rodríguez León