reconnaitre un mauvais identifiant [Résolu][Lex] - C - Programmation
Marsh Posté le 10-04-2008 à 19:12:56
Bonjour,
Je ne sais pas d'où vient exactement ton erreur, mais un de mes fichiers lex qui détecte à peu près la même chose ressemble à ca:
Code :
|
et mon analyse syntaxique fonctionnait correctement, ce qui n'était pas forcément le cas de la suite mais c'est une autre histoire.
Il me semble qu'il n'est pas nécessaire de gérer le cas d'erreur. J'ai dû virer la ligne:
Code :
|
pour que cela fonctionne sinon j'avais des résultats bizarres surtout avec les retours chariot, personne n'a jamais compris le rapport.
Quand il trouve une erreur syntaxique, le programme généré par lex affiche lui-même "syntax error" (il me semble).
Marsh Posté le 10-04-2008 à 19:25:49
Bonjour,
en fait je cherche à faire un analyseur syntaxique pour algorithme, et effectivement dans la majorité des exemples que je vois j'ai l'impression que le cas d'un identifiant erroné ne doit être reconnu que par yacc, pourtant j'aurais aimé séparer l'analyse lexicale de l'analyse syntaxique pour pouvoir afficher les unités lexicales correctes et celles erronées à l'écran, avant de faire la partie syntaxique.
quelqu'un pourrait il confirmer (ou infirmer), que reconnaitre un identifiant incorrect n'est pas le travail de lex. (quand on parle d'un analyseur lexicale et syntaxiqu étapes d'une compilation)
Merci
Marsh Posté le 10-04-2008 à 19:33:58
Dans mon exemple si tu tapes 1ab, cela affiche syntax error. Après effectivement si tu rentres un identifiant correct genre: ours, lex l'accepte et c'est yacc en effet qui teste si ours existe dans la table des symboles. Je ne pense pas qu'il y ait moyen avec lex de vérifier autre chose que la validité lexicale de l'expression.
Essaie quand même de commenter ta ligne OTHER quitte à la remettre si ce n'est pas ça. Je me suis vraiment arraché les cheveux (ils sont longs ça cache les trous) avant de trouver que c'était ça qui plantait chez moi parceque je ne voyais pas le rapport ni l'erreur d'ailleurs et je ne la vois toujours pas.
Marsh Posté le 10-04-2008 à 19:40:36
Yep t'as raison
en faite je viens juste de modifier un analyseur lexical du langage C trouvé sur le net, il fait le même comportement que le mien, c'est à dire qu'il ne reconnait pas si l'identifiant est incorrect. Donc je confirme c'est le travail du parser.
Merci pour ton aide
Marsh Posté le 10-04-2008 à 18:54:48
Bonjour,
Dans le fichier .l suivant, je cherche à :
* Ignorer les commentaires.
* Reconnaitre les identifiants
* Reconnaitre les chaines de caracteres
* Reconnaitre les constantes
* Ignorer les espaces.
et tout le reste est une erreur
voilà mon code lex :
à l'exécution j'ai un souci:
la saisie d'un identifiant erroné du style 1ab donne :
[/cpp]
C:\identifier>a
1ab
CONSTANT 1
IDENTIFIER ab
[/CPP]
alors que moi je voudrais qu'il me fasse
Si quelqu'un a une idée du pourquoi du comment, je suis preneur.
Merci
Message édité par exhortae le 10-04-2008 à 19:41:25