~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 6B92ACFDB789E1D4D057EE1466FD4745__1712124840 ✰
Заголовок документа оригинал.:
✰ Abstract syntax tree - Wikipedia ✰
Заголовок документа перевод.:
✰ Абстрактное синтаксическое дерево — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Abstract_syntax_tree ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/6b/45/6b92acfdb789e1d4d057ee1466fd4745.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/6b/45/6b92acfdb789e1d4d057ee1466fd4745__translat.html ✰
Дата и время сохранения документа:
✰ 15.06.2024 02:43:06 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 3 April 2024, at 09:14 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Абстрактное синтаксическое дерево — Википедия Jump to content

Абстрактное синтаксическое дерево

Из Википедии, бесплатной энциклопедии
Абстрактное синтаксическое дерево для следующего кода алгоритма Евклида :
while   b    0  : 
     if   a   >   b  : 
         a   :=   a   -   b 
     else  : 
         b   :=   b   -   a 
 return   a 

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

Синтаксис является «абстрактным» в том смысле, что он не представляет все детали реального синтаксиса, а лишь структурные или связанные с содержанием детали. Например, группирующие круглые скобки неявно присутствуют в древовидной структуре, поэтому их не обязательно представлять как отдельные узлы. Аналогично, синтаксическая конструкция, такая как оператор if-condition-then, может быть обозначена посредством одного узла с тремя ветвями.

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

Абстрактные синтаксические деревья также используются в системах анализа и преобразования программ .

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

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

Мотивация [ править ]

AST имеет несколько свойств, которые помогают на дальнейших этапах процесса компиляции:

  • AST можно редактировать и расширять, добавляя такую ​​информацию, как свойства и аннотации для каждого содержащегося в нем элемента. Такое редактирование и аннотирование невозможно с исходным кодом программы, поскольку это влечет за собой его изменение.
  • По сравнению с исходным кодом AST не содержит несущественных знаков препинания и разделителей (фигурные скобки, точки с запятой, круглые скобки и т. д.).
  • AST обычно содержит дополнительную информацию о программе из-за последовательных этапов анализа компилятора. Например, он может хранить позицию каждого элемента в исходном коде, позволяя компилятору печатать полезные сообщения об ошибках.

AST необходимы из-за присущей языкам программирования и их документации. Языки часто неоднозначны по своей природе. Чтобы избежать этой двусмысленности, языки программирования часто определяют как контекстно-свободную грамматику (CFG). Однако часто существуют аспекты языков программирования, которые CFG не может выразить, но являются частью языка и документированы в его спецификации. Это детали, которые требуют контекста для определения их достоверности и поведения. Например, если язык позволяет объявлять новые типы, CFG не может предсказать ни имена таких типов, ни способ их использования. Даже если в языке есть предопределенный набор типов, для обеспечения правильного использования обычно требуется некоторый контекст. Другой пример — утиная типизация , где тип элемента может меняться в зависимости от контекста. Перегрузка операторов — это еще один случай, когда правильное использование и конечная функция зависят от контекста.

Дизайн [ править ]

Проектирование AST часто тесно связано с проектированием компилятора и его ожидаемыми функциями.

Основные требования включают следующее:

  • Типы переменных должны быть сохранены, а также расположение каждого объявления в исходном коде.
  • Порядок исполняемых операторов должен быть явно представлен и четко определен.
  • Левая и правая компоненты бинарных операций должны храниться и правильно идентифицироваться.
  • Идентификаторы и присвоенные им значения должны храниться для операторов присваивания.

Эти требования можно использовать для разработки структуры данных для AST.

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

Для поддержки проверки компилятора должна быть возможность разобрать AST в форму исходного кода. Созданный исходный код должен быть достаточно похож на оригинал по внешнему виду и идентичн по исполнению после перекомпиляции. AST интенсивно используется при семантическом анализе , где компилятор проверяет правильность использования элементов программы и языка. Компилятор также генерирует таблицы символов на основе AST в ходе семантического анализа. Полный обход дерева позволяет проверить корректность программы.

После проверки правильности AST служит основой для генерации кода. AST часто используется для создания промежуточного представления (IR), иногда называемого промежуточным языком , для генерации кода.

Другое использование [ править ]

Разница AST [ править ]

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

Обнаружение клонов [ править ]

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

См. также [ править ]

Ссылки [ править ]

  1. ^ Флури, Бит; Вурш, Майкл; Пинцгер, Мартин; Галл, Харальд (2007). «Перегонка изменений: дифференцирование деревьев для детального извлечения изменений исходного кода» . Транзакции IEEE по разработке программного обеспечения . 33 (11): 725–743. дои : 10.1109/tse.2007.70731 . ISSN   0098-5589 . S2CID   13659557 .
  2. ^ Кошке, Райнер; Фальке, Раймар; Френцель, Пьер (2006). «Обнаружение клонов с использованием абстрактных синтаксических суффиксных деревьев» . 2006 13-я рабочая конференция по обратному проектированию . IEEE. стр. 253–262. дои : 10.1109/wcre.2006.18 . ISBN  0-7695-2719-1 . S2CID   6985484 .

Дальнейшее чтение [ править ]

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 6B92ACFDB789E1D4D057EE1466FD4745__1712124840
URL1:https://en.wikipedia.org/wiki/Abstract_syntax_tree
Заголовок, (Title) документа по адресу, URL1:
Abstract syntax tree - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)