[#] Обработка древовидных структур и унифицированное AST
habrabot(difrex,1) — All
2016-05-04 13:30:02




[Предыдущая статья серии][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