Введение

Деревообразное представление абстрактной синтаксической структуры исходного кода, деревья, используемые в лингвистике. Абстрактное синтаксическое дерево (AST) — это структура данных, используемая в информатике для представления структуры программы или фрагмента кода. Это древовидное представление абстрактной синтаксической структуры текста (часто исходного кода), написанного на формальном языке. Каждый узел дерева обозначает конструкцию, встречающуюся в тексте. Иногда его называют просто синтаксическим деревом. Синтаксис является "абстрактным" в том смысле, что он не отражает все детали реального синтаксиса, а лишь структурные или содержательные детали. Например, группирующие скобки подразумеваются структурой дерева и поэтому не должны представляться отдельными узлами. Аналогично, синтаксическая конструкция, такая как "if condition then statement", может быть представлена одним узлом с тремя ветвями. Это отличает абстрактные синтаксические деревья от конкретных синтаксических деревьев, традиционно называемых деревьями разбора. Деревья разбора обычно строятся парсером в процессе перевода и компиляции исходного кода. После построения в AST добавляется дополнительная информация посредством последующей обработки, например, контекстного анализа. Абстрактные синтаксические деревья также используются в анализе программ и системах преобразования программ.

Применение в компиляторах

Абстрактные синтаксические деревья — это структуры данных, широко используемые в компиляторах для представления структуры исходного кода программы. AST обычно является результатом этапа синтаксического анализа компилятора. Оно часто служит промежуточным представлением программы на протяжении нескольких этапов, необходимых компилятору, и оказывает значительное влияние на конечный результат компиляции.

Различение AST

AST дифференцирование, или, сокращенно, дифференцирование деревьев, заключается в вычислении списка различий между двумя AST. Этот список различий обычно называется сценарием изменений. Сценарий изменений напрямую относится к AST кода. Например, операция изменения может привести к добавлению нового узла AST, представляющего функцию.

Обнаружение клона

AST — мощная абстракция для обнаружения клонов кода.