Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

В логике и информатике , A metasyntax описывает допустимую структуру и состав фраз и предложений в метаязыке , который используется для описания либо естественного языка или компьютерного языка программирования . [1] Некоторые из широко используемых формальных метаязыков для компьютерных языков - это форма Бэкуса-Наура (BNF), расширенная форма Бэкуса-Наура (EBNF), синтаксическая нотация Вирта (WSN) и расширенная форма Бэкуса-Наура (ABNF).

Эти метаязыки имеют свой собственный метасинтаксис, каждый из которых состоит из терминальных символов , нетерминальных символов и метасимволов . Терминальный символ, такой как слово или токен, представляет собой автономную структуру в определяемом языке. Нетерминальный символ представляет синтаксическую категорию, которая определяет одну или несколько допустимых фразовых структур или предложений, состоящих из n-элементного подмножества. Метасимволы предоставляют синтаксическую информацию для обозначения целей в данном метасинтаксисе. Терминалы, нетерминалы и метасимволы применимы не ко всем метаязыкам.

Как правило, метаязык для языков уровня токенов (формально называемых « обычными языками ») не имеет нетерминалов, поскольку в этих обычных языках вложенность не является проблемой. Английский как метаязык для описания определенных языков не содержит метасимволов, поскольку все объяснения могут быть выполнены с использованием английских выражений. Существуют только определенные формальные метаязыки, используемые для описания рекурсивных языков (формально называемых контекстно-свободными языками ), которые имеют терминалы, нетерминалы и метасимволы в их метасинтаксисе.

Элемент метасинтаксиса [ править ]

  • Терминалы: автономная синтаксическая структура. Терминалы могут быть обозначены двойными кавычками названия терминалов.
например, "иначе", "если", "то", "пока"
  • Нетерминалы: символическое представление, определяющее набор допустимых синтаксических структур, состоящий из подмножества элементов. Нетерминалы могут быть обозначены угловыми скобками имени нетерминалов.
например, <int>, <char>, <boolean>
  • Метасимвол: символическое представление, обозначающее синтаксическую информацию.
например: =, |, {}, (), [], *

Способы завершения фразы [ править ]

  • Сопоставление: например, AB
  • Чередование: например, A | B
  • Повторение: например, {AB}
  • Необязательная фраза: например, [AB]
  • Группировка: например (A | B)

Конкретные соглашения о метасинтаксисе [ править ]

Стандартное соглашение [ править ]

  • « Форма Бэкуса – Наура » обозначает нетерминальные символы , заключая в угловые скобки имя синтаксической категории , а терминальные символы - двойными кавычками конечных слов. Терминалы никогда не могут появляться слева от метасимвола ":: =" в правиле деривации . Тело определения с правой стороны может состоять из нескольких альтернативных форм, при этом каждая альтернативная синтаксическая конструкция отделяется метасимволом «|». Каждая из этих альтернативных конструкций может быть терминальной или нетерминальной.
  • « Расширенная форма Бэкуса – Наура » использует все возможности BNF и вводит еще два метасимвола для дополнительных функций. Одна из этих двух новых функций применяется для обозначения необязательной фразы в заявлении путем заключения необязательной фразы в квадратные скобки. Вторая особенность применяется для обозначения фразы, которая должна повторяться ноль или более раз, путем заключения фразы в фигурные скобки.
  • « Синтаксическая нотация Wirth » использует все возможности EBNF, за исключением того, что нетерминалы не обязательно заключаются в угловые скобки, но всегда определяются в правой части «=» в его производственном правиле. Также не требуется явного определения каждого нетерминала. Нетерминалы, такие как <text> и <opt-whitespace>, неявно определяются как символ ASCII и необязательный пробел соответственно.
  • « Расширенная форма Бэкуса – Наура » обозначает нетерминальные символы, начинающиеся с имени из одного слова с алфавита в качестве имени синтаксической категории. Угловые скобки не требуются. Терминальные символы обозначаются словами в двойных кавычках или следующей числовой структурой: "%", за которым следует "b", "x" или "d", за которым следует числовое значение, или объединение числовых значений, разделенных " . ". Метасимвол «-» помещается между двумя числовыми значениями для обозначения диапазона значений . Как и у BNF, терминалы ABNF никогда не встречаются слева от метасимвола «=» в правиле вывода. Метасимвол «/» обозначает чередования .Пробел используется для разделения элементов в теле определения. Метасинтаксис дляповторение в ABNF имеет несколько форм. Знак «*» перед элементом означает, что элемент должен повторяться ноль или более раз. Числовое значение n1, за которым следует "*", за которым следует числовое значение n2, за которым следует элемент, обозначает элемент, который должен быть повторен не менее n1 раз и не более n2 раз. Одно числовое значение n, предшествующее элементу, означает, что элемент должен быть повторен n раз. Комментарии могут быть выражены после метасимвола ";". Как и в EBNF, фраза в квадратных скобках означает, что фраза является необязательной .

Варианты [ править ]

Метасинтаксическое соглашение этих формальных метаязыков еще не формализовано. Многие метасинтаксические вариации или расширения существуют в справочниках по различным языкам компьютерного программирования. Одним из вариантов стандартного соглашения для обозначения нетерминалов и терминалов является удаление метасимволов, таких как угловые скобки и кавычки, и применение типов шрифтов к предполагаемым словам. В Ada , например, синтаксические категории обозначаются путем применения строчного шрифта без засечек к предполагаемым словам или символам. Все терминальные слова или символы в Ada состоят из символов с кодовой позицией от 16 # 20 # до 16 # 7E # (включительно). Определение каждого набора символов относится к Международному стандарту, описанному ISO / IEC.10646: 2003. В C и Java синтаксические категории обозначаются курсивом, а терминальные символы - готическим шрифтом. В J его метасинтаксис вообще не использует метасимволы для описания синтаксиса J. Скорее, все синтаксические объяснения делаются на метаязыке, очень похожем на английский, который называется Dictionary, который уникально задокументирован Дж.

Преимущество расширений [ править ]

Цель новых расширений - предоставить более простой и однозначный метасинтаксис. С точки зрения простоты, метанотация BNF определенно не помогает облегчить чтение метасинтаксиса, поскольку метасимволы открытого и закрытого типа появляются слишком часто. С точки зрения двусмысленности, метанотация BNF создает ненужную сложность, когда кавычки, апострофы, знаки «меньше» или «больше» служат терминальными символами, что они часто и делают. Расширенный метасинтаксис использует такие свойства, как регистр, шрифт и положение кода символов, чтобы уменьшить ненужную вышеупомянутую сложность. Более того, некоторые метаязыки используют выделенные разделители категорий для включения метасинтаксических функций для соглашений о компоновке, которые формально не поддерживаются BNF.

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

  • Адаптивная грамматика
  • Сравнение генераторов парсеров
  • Метапрагматика
  • Метасемантика
  • Метапеременная (логика)

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

  1. ^ Селлинк, Алекс и Крис Верхоф. « Разработка, оценка и реинжиниринг языковых описаний ». Сопровождение программного обеспечения и реинжиниринг, 2000. Труды четвертого европейского. IEEE, 2000.