У меня есть структура данных, которая представляет код C #, например:
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;
... который я создаю, используя простую комбинацию лексера / парсера. Мне нужно пройтись по дереву и применить большой набор правил (более 3000). Правила запускаются, когда встречаются разные (и довольно сложные) шаблоны в дереве. Например, есть правило, которое выполняется, когда класс реализует интерфейсы только в одной сборке.
Моя исходная наивная реализация выполняет итерации по каждому правилу, а затем каждое правило пересекает дерево в поисках своего конкретного шаблона. Конечно, это занимает довольно много времени, даже с небольшим количеством исходного кода.
Полагаю, это можно сравнить с тем, как работает антивирусное программное обеспечение, распознавая сложные шаблоны в большом объеме двоичного кода.
Как бы вы предложили внедрить этот вид программного обеспечения?
EDT: Просто хотел бы добавить: нет, я не перевоплощаю FxCop.
Спасибо