2009-07-16 11 views
1

J'ai joué avec la coloration syntaxique de GEdit. J'aime la façon dont les types créés par l'utilisateur de Visual Studio mettent en évidence. Je voudrais le faire pour mes types créés par l'utilisateur en C/C++ (par exemple typedef/classes). Par exemple (en C):Regex pour détecter tout ce qui vient après un mot-clé typedef/class?

typedef struct Node *pNode; 

Et un exemple en C++:

class BigNumber 
{ 
    // Class stuff here. 
}; 

Voir la façon dont Node est mise en évidence differntly de typedef struct (mots-clés) et *pNode ne sont pas mis en évidence tout. Comment puis-je écrire une regex pour détecter cela, et mettre en évidence toutes les occurrences de Node et BigNumber dans mon document actuel?

Répondre

3

Alors que Regex vous donnera de bons résultats, ils ne vous donneront jamais des résultats parfaits.

La plupart des moteurs regex ne prennent pas en charge la notion de récursivité. C'est-à-dire qu'il ne peut correspondre à aucun type d'expression qui nécessite un comptage (accolades appariées, parens, etc ...). Cela signifie qu'il ne sera pas capable de faire correspondre un typedef qui pointe vers un pointeur de fonction d'une manière fiable.

Pour obtenir des correspondances parfaites, vous devez vraiment écrire un analyseur.

Je pense qu'une meilleure approche consiste à choisir les scénarios qui vous intéressent le plus et à écrire des regex qui ciblent ces scénarios spécifiques.

Par exemple, voici une expression rationnelle qui correspond aux typedefs des structures qui pointent vers un nom unique et peuvent ou non avoir un pointeur.

"^\s*typedef\s+struct\s+\w+\s+((\*?\s*)\w+)\s*;\s*$" 
+0

Cela semble être une excellente idée pour un plugin GEdit. Merci! – Kredns

Questions connexes