CLEX ANALYSEUR LEXICALE DU LANGAGE C

uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011 - 6 avril 2009 à 22:56
cs_Zeroc00l Messages postés 367 Date d'inscription lundi 1 avril 2002 Statut Membre Dernière intervention 11 février 2010 - 11 févr. 2010 à 16:41
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/49736-clex-analyseur-lexicale-du-langage-c

cs_Zeroc00l Messages postés 367 Date d'inscription lundi 1 avril 2002 Statut Membre Dernière intervention 11 février 2010
11 févr. 2010 à 16:41
Finalement mon projet utilise llvm::clang, qui est plus officiel et plus pérenne comme bibliothèque qu'un code trouvé ici.

J'ai également un projet qui utilise sparse : http://sparse.wiki.kernel.org/index.php/Main_Page
sparse est un projet initié par Linus Torvald, celui ci trouvait que gcc était horrible à utiliser pour parser parce qu'il est compliqué (tout à fait d'accord avec lui). Sparse est donc une petite bibliotheque qui ne fait QUE parser du C. Elle compile en 3 minutes tandis que llvm met une bonne demi heure parce que le parser clang est intégré à llvm. Et llvm c'est un projet bien plus gros (machine virtuelle, compilateur JIT etc ...)
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
26 oct. 2009 à 11:23
Salut,
Oui oui, ces questions là datent d'avril dernier :p
A l'époque je disais que l'idée m'intéressait. Depuis, j'ai écrit un langage avec flex/bison + l'IDE qui allait avec. (oui... c'est sans doute ma petite fierté qui me fait écrire ça).
Pour ton parseur de C, je ne sais pas si tu as trouvé, mais je crois en avoir vu un ou deux sur ce site, il y a quelques temps. Bonne chance.
cs_Zeroc00l Messages postés 367 Date d'inscription lundi 1 avril 2002 Statut Membre Dernière intervention 11 février 2010
26 oct. 2009 à 04:00
Hello!
Je suis en train de chercher un parseur de C pour un projet (sous linux) et je viens de tomber ici.
Pour le choix if/else / switch, il faut savoir que parfois le switch est plus optimisé.
Comme le switch n'accepte que des valeurs de type entier et non pas des conditions (qui peuvent être très longue et independante entre les if / else if), le compilo peut faire des optimisations sur la séquence de test qui sera exécutée. Et en général c'est mieux que ce que l'on écrit.

Pour le while(1) vs for(;;), Au tout début j'écrivais while (1) et puis quand j'ai vu que dans des sources importantes (genre source de kernel, de bibliothèque super connu ..etc ..) que les auteurs utilisaient for(;;) je me suis mis à utiliser le for. Les vieux ont souvent raison :). Mais bon autrement je pense qu'utiliser f(;;) est mieux car le while(1) fait apparaitre une constante.. et c'est moche ...
Utiliser for(; ; ) nous "garanti" (a priori) que la boucle sera un simple jump, et qu'il n'y aura pas de test sur la valeur 1 (je pense au options -g par exemple qui peuvent "bêtement" compiler).
De plus lorsque l'on écrit "for(;;) " on s'appuie a 100% sur le langage C, ce qui me parait plus blindé que de faire trainer des valeur inutile. Voila... c'est juste mon point de vue et c'est juste une habitude à prendre.
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
6 avril 2009 à 22:56
Salut,
Je n'ai pas trop regardé le code, mais l'idée me plait, ça m'intéresse.
Juste 2, 3 remarques. Le choix du switch est judicieux dans certains cas, mais parfois des if/else auraient été préférables, non ? (en jouant sur les ascii des caractères alphanumériques, par exemple).
Et, par curiosité, quel est l'avantage d'un for(;;) sur un while(1) ? Il me semblait plus rigoureux d'utiliser while.

Je prendrai le temps de regarder plus en détail ton boulot... quand j'aurai le temps.
Bonne continuation.
Rejoignez-nous