Ayant moi-meme ecrit des programmes avec lex et yacc, en particulier pour lire le fichier de conf, ayant moi-meme aussi ecrit un article un jour a ce sujet, voici mon experience...
Pour une calculatrice, ou tout autre genre de compilateur, utilisez lex et yacc.
Par contre, pour un fichier de configuration, il n'est pas trop complique de coder quelque chose qui sait lire clef=valeur. C'est plus simple, c'est moins difficile a maintenir, bref, c'est meilleur. Pour un fichier de configuration un peu plus complexe, preferez une syntaxe XML, et lisez la doc de libxml2 (ou expat). C'est bien plus simple a maintenir qu'un parseur en lex+yacc.
Si vous devez faire quelque chose de simple avec des expressions rationnelles, ne pensez pas que lex ou yacc sont le seul moyen de faire cela en C (ou C++). Utilisez regcomp et regexec. Leur page de manuel est plus difficile a lire que ces outils a utililiser. Une fois la doc digeree, ca se programme bien, au risque meme parfois d'en abuser comme en Perl (a part qu'en Perl, c'est pas de l'abus) !
Enfin, il est des cas ou lex&yacc sont l'outil adapte. Alors n'hesitez pas, utilisez-les.
# Relativisons
Posté par a_jr . En réponse à la dépêche Utiliser lex et yacc dans vos programmes C/C++. Évalué à 10.
Pour une calculatrice, ou tout autre genre de compilateur, utilisez lex et yacc.
Par contre, pour un fichier de configuration, il n'est pas trop complique de coder quelque chose qui sait lire clef=valeur. C'est plus simple, c'est moins difficile a maintenir, bref, c'est meilleur. Pour un fichier de configuration un peu plus complexe, preferez une syntaxe XML, et lisez la doc de libxml2 (ou expat). C'est bien plus simple a maintenir qu'un parseur en lex+yacc.
Si vous devez faire quelque chose de simple avec des expressions rationnelles, ne pensez pas que lex ou yacc sont le seul moyen de faire cela en C (ou C++). Utilisez regcomp et regexec. Leur page de manuel est plus difficile a lire que ces outils a utililiser. Une fois la doc digeree, ca se programme bien, au risque meme parfois d'en abuser comme en Perl (a part qu'en Perl, c'est pas de l'abus) !
Enfin, il est des cas ou lex&yacc sont l'outil adapte. Alors n'hesitez pas, utilisez-les.
Le bonjour chez vous,
Yves
PS:
PS2. J'ai pas teste. Si ca se trouve, ca marche pas mon code :)