В информатике абстрактный синтаксис данных — это его структура, описываемая как тип данных (возможно, но не обязательно, абстрактный тип данных ), независимый от какого-либо конкретного представления или кодирования. [1] Это особенно используется в представлении текста в компьютерных языках , [2] которые обычно хранятся в древовидной структуре как абстрактное синтаксическое дерево . Абстрактный синтаксис, который состоит только из структуры данных, противопоставляется конкретному синтаксису , который также включает информацию о представлении. Например, конкретный синтаксис включает такие функции, как скобки (для группировки) или запятые (для списков), которые не включены в абстрактный синтаксис, поскольку они подразумеваются в структуре.
Абстрактные синтаксисы классифицируются как абстрактный синтаксис первого порядка (FOAS), если структура абстрактна, но имена (идентификаторы) по-прежнему конкретны (и, следовательно, требуют разрешения имен ), и абстрактный синтаксис более высокого порядка , если сами имена абстрактны. [3]
Для реализации либо вычислений, либо коммуникаций необходимо определить отображение абстрактного синтаксиса в конкретные машинные представления и кодировки; их можно назвать « конкретным синтаксисом » (в языковой реализации) [4] или «синтаксисом передачи» (в коммуникациях).
Внутреннее представление компилятором программы обычно определяется абстрактным синтаксисом в терминах таких категорий, как «оператор», «выражение» и «идентификатор». Это не зависит от исходного синтаксиса ( конкретного синтаксиса ) компилируемого языка (хотя часто будет очень похоже). Дерево разбора похоже на абстрактное синтаксическое дерево , но обычно оно также содержит такие функции, как скобки, которые синтаксически значимы, но неявно присутствуют в структуре абстрактного синтаксического дерева.
Алгебраические типы данных особенно хорошо подходят для реализации абстрактного синтаксиса. [5]