Ich habe eine Datenstruktur, die C#-Code wie folgt darstellt:
class Namespace:
string Name;
List<Class> Classes;
class Class:
string Name;
List<Property> Properties;
List<Method> Methods;
List<Method> Constructors;
List<Field> Fields;
List<Class> InnerClasses;
Class Parent;
List<Interface> Implements;
... die ich mit einem einfachen Lexer/Parser-Kombination zu bauen. Ich muss den Baum durchlaufen und einen großen Satz von Regeln anwenden (mehr als 3000). Die Regeln werden ausgeführt, wenn sie auf verschiedene (und recht komplexe) Muster im Baum treffen. Zum Beispiel gibt es eine Regel, die ausgeführt wird, wenn eine Klasse nur Schnittstellen in derselben Assembly implementiert.
Meine ursprüngliche naive Implementierung iteriert über jede Regel, und dann durchläuft jede Regel den Baum auf der Suche nach ihrem spezifischen Muster. Das nimmt natürlich viel Zeit in Anspruch, selbst bei einer geringen Menge an Quellcode.
Man könnte dies mit der Funktionsweise von Antiviren-Software vergleichen, die komplexe Muster in einem großen Bestand an Binärcode erkennt.
Was würden Sie vorschlagen, wie man diese Art von Software implementiert?
EDT: Ich möchte nur hinzufügen: Nein, ich werde FxCop nicht neu implementieren.
Danke