Bonjour,
Je voudrais savoir s'il est possible de permettre au preprocessing d'être étendu par de nouvelles fonctionnalités de parsing afin de différencier certains types de tokens en fonction de leur premier caractère.
De ce que j'ai vu par exemple dans la doc de l'API gcc pour le dev de plugin, ça a l'air très runtime centré et on ne touche jamais au parser du preprocessing via l'AST.
Je sais que de mon côté, il suffit de "coller" (et non pas concaténer) 2 tokens dans une macro pour checker si on a affaire à un appel de macrofonction ou bien seulement deux tokens sans effet.
Petit exemple pour illustrer :
ici ma macrofonction IF_EQUALS checke si le paramètre element est bordé de parenthèses ou pas, si c'est le cas ça appellera la macrofonction CALL qui renverra alors 0 au IF appelant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 /*dico pour les strings non quotés */ #define IS_OK ~, ~ #define dict_static_static IS_OK /*dico pour les macrofonctions */ #define IS_RIGHT -, - #define CALL(...) IS_RIGHT #define IS_CALLABLE(functionNameWithArgs) IF_PAIR(functionNameWithArgs) /* une macrofonction de check parmi d'autres */ #define IF_EQUALS(to, element) IF(NOT(IS_CALLABLE(CALL element)))(IF_PAIR(CAT3(dict_,to,CAT(_,element))))(0) /* mes résultats */ IF(IF_EQUALS(static, (static)))(1)(0) /* génère 0 au preprocessing */ IF(IF_EQUALS(static, static))(1)(0) /* génère 1 au preprocessing */
L'idée là n'est pas de comprendre les détails de ma macro car sinon il faudrait que je vous montre tous les codes de toutes mes macros, mais bien de constater qu'un token bordé de parenthèses peut être discernable des autres tokens.
Or j'aimerais étendre ces "checks" pour que lorsqu'on a un token qui commence par :
- une double quote on sache qu'on a bien une string statique en devenir
- un crochet ouvrant => un tableau en devenir
- une accolade ouvrante => un initialiseur ou un scope en devenir
etc ...
Je sais que le preprocessing n'est pas là pour connaître les types ou les éléments statiques du langages, mais ce que j'aimerais, c'est qu'au moins un token puisse être différenciable en fonction de son 1er caractère trouvé afin de prévenir les erreurs de tokenisation par les concaténations (le fameux opérateur ##), sinon cela contraint énormément mes macros.
Connaissez-vous des solutions, portables de préférence, qui pourraient m'aider svp ?
Merci à vous![]()
Partager