Comment implémenter les macros #define
avec yacc/bison?Gestion des macros #define dans yacc/bison lex
Je pensais que tous les caractères doivent correspondre à une variable régulière. Les variables sont définies comme [a-zA-Z_][a-zA-Z0-9_]*
donc je pense que je peux y mettre une coche pour voir si la variable est définie ou non. Puis remplacez le texte par ce qu'il devrait être.
Comment puis-je faire cela? En ce moment je veux complètement ignorer le mot BAD comme si je l'ai défini comme #define BAD
en C. Ci-dessous est le code pour cette règle lex mais je le fais mal. Aussi lex se plaint de "BA" étant dans le flux. Je sais que le dessous est complètement faux et illogique alors comment puis-je ignorer BAD et comment puis-je le remplacer par quelque chose comme flotteur
if(strcmp(yytext, "BAD")==0) {
int i, l = strlen(yytext);
for(i=0; i<l; i++) { REJECT }
return;
}
return VAR; }
Je connais les grandes étapes sont 1) définissent la définissent, 2) détecter dans source 3) make lex oublie les macros 4) insère les nouveaux caractères corrects.