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