|
Статический анализ на основе обобщённого абстрактного синтаксического дерева
В. О. Афанасьевab, А. Е. Бородинa, К. И. Вихлянцевac, А. А. Белеванцевda a Институт системного программирования им. В.П. Иванникова РАН
b Национальный исследовательский университет "Высшая школа экономики"
c Московский физико-технический институт
d Московский государственный университет имени М. В. Ломоносова
Аннотация:
В работе описывается универсальное представление для абстрактного синтаксического дерева (АСД), подходящее для статического анализа нескольких языков программирования. Предлагаемая схема анализа состоит в сохранении промежуточного представления в виде обобщенного АСД из компиляторов соответствующих языков и последующим анализом сохраненных деревьев. Мы реализовали такое представление для Java, Kotlin и Python. В анализаторе обобщенного АСД реализовано 27 детекторов. Мы описываем сущности предлагаемого представления, особенности его реализации для поддержанных языков. Приводим экспериментальные результаты скорости и качества анализа, а также сравнения анализа на обобщенном АСД с анализом, выполненным ранее на АСД конкретного компилятора. В итоге подход демонстрирует некоторое ухудшение скорости анализа, но позволяет разделить построение АСД для анализа и реализацию детекторов, что упрощает разработку АСД-детекторов в случае, когда количество поддерживаемых анализатором языков становится значительным.
Ключевые слова:
статический анализ, поиск ошибок, АСД, синтаксический анализ, Java, Kotlin, Python, Svace
Образец цитирования:
В. О. Афанасьев, А. Е. Бородин, К. И. Вихлянцев, А. А. Белеванцев, “Статический анализ на основе обобщённого абстрактного синтаксического дерева”, Труды ИСП РАН, 35:6 (2023), 103–120
Образцы ссылок на эту страницу:
https://www.mathnet.ru/rus/tisp835 https://www.mathnet.ru/rus/tisp/v35/i6/p103
|
|