Введение
Допустимая структура и состав фраз и предложений метаязыка
Метасинтаксис — это синтаксис, используемый для определения синтаксиса языка программирования или формального языка. Он описывает допустимую структуру и состав фраз и предложений метаязыка, который используется для описания либо естественного языка, либо языка компьютерного программирования. Некоторые из широко используемых формальных метаязыков для компьютерных языков — это форма Бэкуса — Наура (BNF), расширенная форма Бэкуса — Наура (EBNF), синтаксическая нотация Вирта (WSN) и дополненная форма Бэкуса — Наура (ABNF). Метаязыки имеют свой метасинтаксис, каждый из которых состоит из терминальных символов, нетерминальных символов и метасимволов. Терминальный символ, такой как слово или токен, является самостоятельной структурой в определяемом языке. Нетерминальный символ представляет собой синтаксическую категорию, которая определяет одну или несколько допустимых фразовых или предложных структур, состоящих из подмножества из n элементов. Метасимволы предоставляют синтаксическую информацию для обозначения в заданном метасинтаксисе. Терминалы, нетерминалы и метасимволы не применяются во всех метаязыках. Обычно метаязыки для языков токового уровня (формально называемых «регулярными языками») не имеют нетерминалов, поскольку в этих регулярных языках вложенность не является проблемой. Английский язык, как метаязык для описания определенных языков, не содержит метасимволов, поскольку все объяснения могут быть даны с использованием английских выражений. Существуют только определенные формальные метаязыки, используемые для описания рекурсивных языков (формально называемых контекстно-свободными языками), которые имеют терминалы, нетерминалы и метасимволы в своем метасинтаксисе.
Элемент метасинтаксиса
Терминалы: самостоятельная синтаксическая структура. Терминалы могут быть обозначены двойными кавычками, заключающими их имя. Например, "a", "b", "c". Нетерминалы: символическое представление, определяющее набор допустимых синтаксических структур, состоящий из подмножества элементов. Нетерминалы могут быть обозначены угловыми скобками, заключающими их имя. Например, <S>, <A>, <B>. Метасимвол: символическое представление, обозначающее синтаксическую информацию. Например, ::, |, ., ∅, ε.
Nonterminals: a symbolic representation defining a set of allowable syntactic structures that is composed of a subset of elements. Nonterminals could be denoted by angle bracketing the name of the nonterminals. e. g. , ,
Metasymbol: a symbolic representation denoting syntactic information. e. g. , , , , ,
Методы окончания фразы
Сопоставление: например,
Чередование: например,
Повторение: например,
Необязательная фраза: например,
Группировка: например,
Alternation: e. g.
Repetition: e. g.
Optional phrase: e. g.
Grouping: e. g.
Стандартная конвенция
Форма Баккуса-Наура обозначает нетерминальные символы, заключая название синтаксической категории в угловые скобки, а терминальные символы – в двойные кавычки. Терминалы никогда не могут появляться в левой части метасимвола в правиле вывода. Тело определения в правой части может состоять из нескольких альтернативных форм, при этом каждая альтернативная синтаксическая конструкция разделяется метасимволом. Каждая из этих альтернативных конструкций может быть как терминальной, так и нетерминальной. Расширенная форма Баккуса-Наура использует все возможности BNF и вводит два дополнительных метасимвола для расширения функциональности. Одна из этих новых возможностей используется для обозначения необязательной фразы в выражении, заключая её в квадратные скобки. Вторая возможность используется для обозначения фразы, которая должна повторяться ноль или более раз, заключая её в фигурные скобки. Синтаксис Вирта использует все возможности EBNF, за исключением того, что нетерминалы не обязательно заключаются в угловые скобки, но всегда определяются в правой части правила вывода. Также не требуется, чтобы каждый нетерминал был явно определён. Нетерминалы, такие как и , неявно определяются как символ ASCII и необязательный пробел соответственно. Дополненная форма Баккуса-Наура обозначает нетерминальные символы, начиная однословное имя с буквы в качестве названия синтаксической категории. Угловые скобки не требуются. Терминальные символы обозначаются либо словами в двойных кавычках, либо следующей числовой структурой: буква «a», за которой следует или или , за которой следует числовое значение или последовательность числовых значений, разделённых метасимволом. Метасимвол помещается между двумя числовыми значениями для обозначения диапазона значений. Как и в BNF, терминалы ABNF никогда не появляются в левой части метасимвола в правиле вывода. Метасимвол обозначает альтернацию. Пробелы используются для разделения элементов в теле определения. Метасинтаксис для повторения в ABNF имеет несколько форм. Перед элементом обозначает, что элемент должен повторяться ноль или более раз. Числовое значение, за которым следует , за которым следует числовое значение, за которым следует элемент, обозначает, что элемент должен повторяться не менее раз и не более раз. Одно числовое значение перед элементом обозначает, что элемент должен повторяться раз. Комментарии могут быть добавлены после метасимвола. Как и в EBNF, квадратные скобки вокруг фразы обозначают, что фраза является необязательной.
Вариации
Метасинтаксические соглашения этих формальных метаязыков пока не формализованы. Многие метасинтаксические вариации или расширения существуют в справочных руководствах различных языков программирования. Одно из отклонений от стандартного соглашения для обозначения нетерминалов и терминалов заключается в удалении метасимволов, таких как угловые скобки и кавычки, и применении различных шрифтов к соответствующим словам. Например, в Ada синтаксические категории обозначаются использованием шрифта без засечек с маленькими буквами для соответствующих слов или символов. Все терминальные слова или символы в Ada состоят из символов с кодовыми позициями от до (включительно). Определение каждого набора символов приводится в Международном стандарте, описанном в ISO/IEC 10646:2003. В C и Java синтаксические категории обозначаются курсивом, а терминальные символы – готическим шрифтом. В языке J его метасинтаксис вообще не использует метасимволы для описания синтаксиса. Вместо этого все синтаксические объяснения даются на метаязыке, очень похожем на английский, который называется Dictionary и уникально документирован для J.
Преимущества продлений
Целью новых расширений является предоставление более простого и однозначного метасинтаксиса. Что касается простоты, метанотация БНФ явно не способствует улучшению читаемости метасинтаксиса, поскольку метасимволы начала и конца встречаются слишком часто. Что касается неоднозначности, метанотация БНФ порождает ненужную сложность, когда кавычки, апострофы, знаки «меньше» или «больше» используются в качестве терминальных символов, что происходит довольно часто. Расширенный метасинтаксис использует свойства символов, такие как регистр, шрифт и кодовая позиция, для уменьшения вышеупомянутой ненужной сложности. Более того, некоторые метаязыки используют категории шрифтовых разделителей для включения метасинтаксических возможностей, определяющих правила оформления, которые формально не поддерживаются БНФ.