Абстрактное синтаксическое дерево
Дерево абстрактного синтаксиса (ДАС) — в информатике конечное помеченное ориентированное дерево, в котором внутренние вершины сопоставлены (помечены) с операторами языка программирования, а листья — с соответствующими операндами. Таким образом, листья являются пустыми операторами и представляют только переменные и константы.
Деревья синтаксиса используются в парсерах для промежуточного представления программы между деревом разбора (деревом с конкретным синтаксисом) и структурой данных, которая затем используется в качестве внутреннего представления в компиляторе или интерпретаторе компьютерной программы для оптимизации и генерации кода. Возможные варианты подобных структур описываются абстрактным синтаксисом.
Особенности
Дерево абстрактного синтаксиса отличается от дерева разбора тем, что в нём отсутствуют узлы и рёбра для тех синтаксических правил, которые не влияют на семантику программы. Классическим примером такого отсутствия являются группирующие скобки, так как в АСД группировка операндов явно задаётся структурой дерева.
Для языка, который описывается контекстно-свободной грамматикой, какими являются почти все языки программирования, создание дерева в синтаксическом анализаторе является тривиальной задачей. Большинство правил в грамматике создают новую вершину, а символы в правиле становятся рёбрами. Правила, которые ничего не привносят в ДАС (например, группирующие правила), просто заменяются в вершине одним из своих символов. Кроме того, анализатор может создать полное дерево разбора и затем пройти по нему, удаляя узлы и рёбра, которые не используются в абстрактном синтаксисе, для получения ДАС.
См. также
- Граф абстрактного синтаксиса
- Компоновщик
- Document Object Model
- Алгоритм сортировочной станции
Литература
- Статья «Исследование эволюции кода с использованием сравнения деревьев абстрактного синтаксиса» Юлиана Нямтиу (англ. Iulian Neamtiu), Джеффри Фостера (англ. Jeffrey S. Foster) и Майкла Хикса (англ. Michael Hicks)
- Статья «Извлечение изменений: Поиск различий в деревьях для высокоточного определения изменений в исходном коде» Бита Флури (нем. Beat Fluri), Михаэля Вюрша (нем. Michael Würsch), Мартина Пинцгера (нем. Martin Pinzger) и Гаральда Галла (нем. Harald C. Gall) (прямая ссылка на PDF)
- Дипломная работа Михаэля Вюрша (нем. Michael Würsch) «Улучшение распознавания изменений в исходных кодах с помощью деревьев абстрактного синтаксиса»
- Статья «Высокоточное определение изменений в исходном коде» Жана-Реми Фэлари (фр. Jean-Rémy Falleri), Флореаля Морэндата (фр. Floréal Morandat), Завьи Блена (фр. Xavier Blanc), Матиаса Мартинеса (фр. Matias Martinez) и Мартина Монпеуса (фр. Martin Monperrus)
- Статья «Мысли о дереве абстрактного синтаксиса в Visual C++» Джейсона Лукаса (англ. Jason Lucas)
- Учебное пособие «Стандарт метамодели деревьев абстрактного синтаксиса»
Ссылки
- AST View, плагин для Eclipse показывает абстрактное синтаксическое дерево программ на языке Java;
- Полезная информация о представлении деревьев абстрактного синтаксиса в Eclipse и манипулировании исходным кодом Java;
- Представление CAST;
- Abstract Syntax Tree Unparsing (недоступная ссылка с 13-05-2013 [3207 дней] — история).