De Manuel Bison:Erreur Handing avec Flex (LEX) et Bison (yacc)
Dans un analyseur simple de commande interactive où chaque entrée est une ligne, il peut être suffisante pour permettre yyparse à retourner 1 sur erreur et avoir l'appelant ignorer le reste de la ligne d'entrée lorsque qui se passe (et ensuite appeler yyparse à nouveau).
C'est à peu près ce que je veux, mais j'ai du mal à me rendre au travail. Fondamentalement, je veux détecter et erreur dans flex, et si une erreur est détectée, Bison rejette toute la ligne. Ce que j'ai en ce moment, ne fonctionne pas tout à fait raison parce que mes commandes sont exécutées encore:
kbsh: ls '/home
Error: Unterminated Single Quote
admin kbrandt tempuser
syntax error
kbsh:
Dans mon dossier Bison:
commands:
/*Empty*/ { prompt(); } |
command { prompt(); }
;
command:
error {return 1; } |
chdir_command |
pwd_command |
exit_command |
WORD arg_list {
execute_command($1, $2);
//printf("%s, %s\n", $1, $2);
} |
WORD { execute_command($1, NULL); }
;
Et dans mon Flex:
' {BEGIN inQuote; }
<inQuote>\n {printf("Error: Unterminated Single Quote\n"); BEGIN(0); return(ERROR);}
Terminé le bricolage avec les modifications maintenant ... – tim
Je me retrouve souvent avec une balle dans le pied parce que j'ai écrit une lexer trop complexe. –
Merci beaucoup tim, va essayer de travailler dans mon projet quand j'ai l'occasion. Je commence tout juste à apprendre ce genre de choses, donc en supposant que vous conseilliez de garder flex simple, bon conseil, cette réponse est géniale! –