2009-03-05 12 views
0

Je fais une application où j'ai besoin de vérifier la syntaxe de chaque ligne qui contient une commande impliquant un mot-clé comme premier mot.
Aussi, si la syntaxe est correcte, je dois vérifier le type des variables utilisées dans les mots-clés.Analyseur utilisant RegEx et XML, en C#

Comme s'il y a une commande d'impression:

print "string" < variable < "some another string" //some comments 

    print\s".*"((\s?<\s?".*")*\s?<\s?(?'string1'\w+))?(\s*//.*)? 

donc je l'ai fait l'expression rationnelle suivante:

\s*[<>]\s*((?'variant'\w+)(\[\d+\])*) 

Ceci est d'accéder à tous les mots dans le groupe de variante pour extraire les variables utilisées et vérifier leur type .
Comme ceci mon outil a beaucoup de mots-clés et actuellement je écris crûment regex pour chaque mot-clé. Et s'il y a un changement demain, je remplacerais le changement respectif chaque fois partout dans chaque mot-clé.
Je stocke une expression rationnelle pour chaque mot-clé dans un fichier XML. Cependant, je me suis intéressé à rendre extensible, où dire les changements de spécification de demain, alors je dois changer une seule fois et qu'elle reflète dans tous les lieux quelque chose comme je transforme l'expression rationnelle d'impression:

print %string% (%<% %string%|%variable%)* %comments% 

maintenant comme ça , J'écris une spécification pour chaque mot-clé et écris la définition de chaîne, variable, commentaires dans un autre fichier qui stocke leur regex. Ensuite, j'écris un analyseur qui analyse cette chaîne et créer une chaîne regex pour moi.

Est-ce possible?

Y a-t-il une meilleure façon de le faire ou y a-t-il un moyen de le faire en XML?

Répondre

0

J'ai eu une idée et fait mon propre remplaçant. J'ai utilisé% myname% type de balises pour définir mon expression régulière, et j'ai écrit la définition de% myname% tags séparément en utilisant regex. Ensuite, j'ai analysé la chaîne récursivement et converti l'occurrence de% myname% tags à la spécification qu'ils avaient. Il a fait mon travail. Merci de toutes les façons