J'écris un analyseur C en utilisant PLY, et j'ai récemment rencontré un problème. Ce code:PLY: problème de décalage de jeton dans l'analyseur C
typedef int my_type;
my_type x;
est bon code C, parce que my_type est défini comme un type précédemment utilisé en tant que tel. Je le manipule en remplissant une table de symboles de type dans l'analyseur qui est utilisé par le lexeur pour différencier les types et identifiants simples. Cependant, alors que la règle de déclaration de type se termine par SEMI (le jeton ';'), PLY décale le jeton my_type
de la deuxième ligne avant de décider que c'est fait avec le premier. Pour cette raison, je n'ai aucune chance de passer la mise à jour dans la table des symboles de type à la lexer et voit my_type comme un identifiant et non un type.
Des idées pour une solution?
Le code complet est à: http://code.google.com/p/pycparser/source/browse/trunk/src/c_parser.py Vous ne savez pas comment créer un exemple plus petit à partir de cela.
Edit:
Problème résolu. Voir ma solution ci-dessous.
Je suis d'accord. Chaque fois que j'ai eu ce type de problèmes, c'est généralement parce que j'essaie d'avoir trop de lexer. Mais j'utilise maintenant ANTLR au lieu de LEX et YACC (** pas ** trop vieux pour changer). –