次のような 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 を再実装していません。
ありがとう