[Предыдущая статья серии][1] была посвящена теории парсинга исходников с использованием ANTLR и Roslyn. В ней было отмечено, что процесс сигнатурного анализа кода в нашем проекте [PT Application Inspector][2] разбит на следующие этапы:
1. парсинг в зависимое от языка представление (abstract syntax tree, AST);
2. преобразование AST в независимый от языка унифицированный формат (Unified AST, UAST);
3. непосредственное сопоставление с шаблонами, описанными на DSL.
Данная статья посвящена второму этапу, а именно: обработке AST с помощью стратегий Visitor и Listener, преобразованию AST в унифицированный формат, упрощению AST, а также алгоритму сопоставления древовидных структур.
[![][3]][4]
* [Обход AST][5]
* [Visitor и Listener][6]
* [Различия в Visitor в ANTLR и Roslyn][7]
* [Грамматика и Visitor в ANTLR][8]
* [Альтернативные и элементные метки в ANTLR][9]
* [Типы узлов унифицированного AST][10]
* [Тестирование конвертеров][11]
* [Упрощение UAST][12]
* [Алгоритм сопоставления древовидных структур][13]
* [Заключение][14]
[Читать дальше →][15]
[1]:
https://habrahabr.ru/company/pt/blog/210772/
[2]:
http://www.ptsecurity.ru/appsecurity/application-inspector/
[3]:
https://habrastorage.org/getpro/habr/post_images/031/d2d/4ca/031d2d4cab81a98a67c1962ee1d75f41.png
[4]:
https://habrahabr.ru/company/pt/blog/210060/
[5]: #ast-traverse
[6]: #visitor-vs-listener
[7]: #visitor-in-antlr-and-roslyn
[8]: #grammar-and-visitor-antlr
[9]: #antlr-labels
[10]: #unified-ast-types
[11]: #converters-testing
[12]: #ast-simplify
[13]: #tree-matching-algorithm
[14]: #conclusion
[15]:
https://habrahabr.ru/post/210060/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut