Метасинтаксис
Эта статья нуждается в дополнительных цитатах для проверки . ( декабрь 2009 г. ) |
Метасинтаксис — это синтаксис , используемый для определения синтаксиса языка программирования или формального языка . Он описывает допустимую структуру и состав фраз и предложений метаязыка , который используется для описания естественного языка или языка компьютерного программирования. [1] Некоторыми из широко используемых формальных метаязыков для компьютерных языков являются форма Бэкуса-Наура (BNF), расширенная форма Бэкуса-Наура (EBNF), синтаксическая нотация Вирта (WSN) и расширенная форма Бэкуса-Наура (ABNF).
Метаязыки имеют свой собственный метасинтаксис, каждый из которых состоит из терминальных символов , нетерминальных символов и метасимволов . Терминальный символ, такой как слово или токен, представляет собой отдельную структуру в определяемом языке. Нетерминальный символ представляет синтаксическую категорию, которая определяет одну или несколько допустимых структур фразы или предложения, состоящих из подмножества n-элементов. Метасимволы предоставляют синтаксическую информацию для денотационных целей в данном метасинтаксисе. Терминалы, нетерминалы и метасимволы применимы не во всех метаязыках.
Обычно метаязык языков уровня токенов (формально называемых « обычными языками ») не имеет нетерминалов, поскольку в этих обычных языках вложенность не является проблемой. Английский как метаязык описания определенных языков не содержит метасимволов, поскольку все объяснения можно выполнить с использованием английских выражений. Существуют только определенные формальные метаязыки, используемые для описания рекурсивных языков (формально называемых контекстно-свободными языками ), которые имеют в своем метасинтаксисе терминалы, нетерминалы и метасимволы.
Элемент метасинтаксиса
[ редактировать ]- Терминалы: автономная синтаксическая структура. Терминалы можно обозначить двойными кавычками имени терминала.
- например
"else"
,"if"
,"then"
,"while"
- Нетерминалы: символическое представление, определяющее набор допустимых синтаксических структур, состоящих из подмножества элементов. Нетерминалы могут быть обозначены угловыми скобками в названии нетерминалов.
- например
<int>
,<char>
,<boolean>
- Метасимвол: символическое представление, обозначающее синтаксическую информацию.
- например
:=
,|
,{}
,()
,[]
,*
Способы завершения фразы
[ редактировать ]- Сопоставление: например
A B
- Чередование: например
A|B
- Повторение: например
{A B}
- Необязательная фраза: например
[A B]
- Группировка: например
(A|B)
Конкретные метасинтаксические соглашения
[ редактировать ]Стандартное соглашение
[ редактировать ]- « Форма Бэкуса-Наура » обозначает нетерминальные символы посредством угловых скобок имени синтаксической категории обозначается , а терминальные символы двойными кавычками терминальных слов. Терминалы никогда не могут появляться в левой части метасимвола.
::=
в правиле вывода . Тело определения в правой части может состоять из нескольких альтернативных форм, при этом каждая альтернативная синтаксическая конструкция отделяется метасимволом.|
. Каждая из этих альтернативных конструкций может быть терминальной или нетерминальной. - « Расширенная форма Бэкуса-Наура » использует все возможности BNF и вводит еще два метасимвола для дополнительных функций. Одна из этих двух новых функций применяется для обозначения необязательной фразы в операторе путем заключения необязательной фразы в квадратные скобки. Вторая функция применяется для обозначения фразы, которая должна повторяться ноль или более раз, с помощью фигурных скобок.
- Синтаксическая нотация Вирта использует все возможности EBNF, за исключением того, что нетерминалы не обязательно заключаются в угловые скобки, а всегда определяются в правой части
=
в своем производственном правиле. Он также не требует явного определения каждого нетерминала. Нетерминалы, такие как<text>
и<opt-whitespace>
неявно определяются как символ ASCII и необязательный пробел соответственно. - « Расширенная форма Бэкуса-Наура » обозначает нетерминальные символы, начиная имя из одного слова с алфавита в качестве имени синтаксической категории. Угловые кронштейны не требуются. Терминальные символы обозначаются либо словами в двойных кавычках, либо следующей числовой структурой:
%
, с последующимb
илиx
илиd
, за которым следует числовое значение или объединение числовых значений, разделенных знаком.
. Метасимвол-
помещается между двумя числовыми значениями для обозначения диапазона значений . Как и в случае с BNF, терминалы ABNF никогда не встречаются в левой части метасимвола.=
в правиле вывода. Метасимвол/
обозначает чередования . Пробелы используются для разделения элементов в тексте определения. Метасинтаксис повторения в ABNF имеет несколько форм. А*
предшествующий элементу обозначает элемент, который должен повторяться ноль или более раз. Числовое значение n1, за которым следует*
за которым следует числовое значение n2, за которым следует элемент, обозначает элемент, который должен повторяться не менее n1 раз и не более n2 раз. Одно числовое значение n, предшествующее элементу, обозначает элемент, который должен повторяться n раз. Комментарии могут быть оставлены после метасимвола.;
. Как и в EBNF, заключение фразы в квадратные скобки означает, что фраза является необязательной .
Вариации
[ редактировать ]Метасинтаксис этих формальных метаязыков еще не формализован. В справочных руководствах различных языков программирования существует множество метасинтаксических вариаций или расширений. Одним из вариантов стандартного соглашения по обозначению нетерминалов и терминалов является удаление метасимволов, таких как угловые скобки и кавычки, и применение типов шрифта к предполагаемым словам. В Ada , например, синтаксические категории обозначаются путем применения строчных букв без засечек к нужным словам или символам . Все терминальные слова или символы в Аде состоят из символов, находящихся в кодовой позиции между 16#20# и 16#7E# (включительно). Определение каждого набора символов приведено в международном стандарте, описанном в ISO/IEC 10646:2003. В C и Java синтаксические категории обозначаются курсивом, а терминальные символы обозначаются готическим шрифтом. В J его метасинтаксис вообще не применяет метасимволы для описания синтаксиса J. Скорее всего, все синтаксические объяснения выполняются на метаязыке, очень похожем на английский, который называется «Словарь», который задокументирован исключительно для Дж.
Преимущество расширений
[ редактировать ]Цель новых расширений — предоставить более простой и однозначный метасинтаксис. С точки зрения простоты, метанотация BNF определенно не помогает облегчить чтение метасинтаксиса, поскольку открытые и закрытые метасимволы появляются слишком часто. С точки зрения двусмысленности, метанотация BNF создает ненужную сложность, когда кавычки, апострофы, знаки «меньше» или «больше» начинают служить терминальными символами, что они часто и делают. Расширенный метасинтаксис использует такие свойства, как регистр, шрифт и кодовое положение символов, чтобы уменьшить ненужную вышеупомянутую сложность. Более того, некоторые метаязыки используют категории-разделители шрифтов для включения метасинтаксических функций в соглашения о компоновке, которые формально не поддерживаются BNF.
См. также
[ редактировать ]- Адаптивная грамматика
- Сравнение генераторов парсеров
- Метапрагматика
- Метасемантика
- Метапеременная (логика)
Ссылки
[ редактировать ]- ^ Селлинк, Алекс и Крис Верхуф. « Разработка, оценка и реинжиниринг языковых описаний ». Сопровождение программного обеспечения и реинжиниринг, 2000. Труды Четвертого Европейского. ИИЭР, 2000.