RUS  ENG
Полная версия
ЖУРНАЛЫ // Труды института системного программирования РАН // Архив

Труды ИСП РАН, 2023, том 35, выпуск 6, страницы 103–120 (Mi tisp835)

Статический анализ на основе обобщённого абстрактного синтаксического дерева

В. О. Афанасьевab, А. Е. Бородинa, К. И. Вихлянцевac, А. А. Белеванцевda

a Институт системного программирования им. В.П. Иванникова РАН
b Национальный исследовательский университет "Высшая школа экономики"
c Московский физико-технический институт
d Московский государственный университет имени М. В. Ломоносова

Аннотация: В работе описывается универсальное представление для абстрактного синтаксического дерева (АСД), подходящее для статического анализа нескольких языков программирования. Предлагаемая схема анализа состоит в сохранении промежуточного представления в виде обобщенного АСД из компиляторов соответствующих языков и последующим анализом сохраненных деревьев. Мы реализовали такое представление для Java, Kotlin и Python. В анализаторе обобщенного АСД реализовано 27 детекторов. Мы описываем сущности предлагаемого представления, особенности его реализации для поддержанных языков. Приводим экспериментальные результаты скорости и качества анализа, а также сравнения анализа на обобщенном АСД с анализом, выполненным ранее на АСД конкретного компилятора. В итоге подход демонстрирует некоторое ухудшение скорости анализа, но позволяет разделить построение АСД для анализа и реализацию детекторов, что упрощает разработку АСД-детекторов в случае, когда количество поддерживаемых анализатором языков становится значительным.

Ключевые слова: статический анализ, поиск ошибок, АСД, синтаксический анализ, Java, Kotlin, Python, Svace

DOI: 10.15514/ISPRAS-2023-35(6)-6



© МИАН, 2024