Метасинтаксис

редактировать

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

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

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

СОДЕРЖАНИЕ

  • 1 Элемент метасинтаксиса
  • 2 Способы завершения фразы
  • 3 Конкретные соглашения о метасинтаксисе
    • 3.1 Стандартное соглашение
    • 3.2 Варианты
    • 3.3 Преимущество расширений
  • 4 См. Также
  • 5 ссылки

Элемент метасинтаксиса

  • Терминалы: автономная синтаксическая структура. Терминалы могут быть обозначены двойными кавычками названия терминалов.
например "else", "if", "then", "while"
  • Нетерминалы: символическое представление, определяющее набор допустимых синтаксических структур, состоящий из подмножества элементов. Нетерминалы могут быть обозначены угловыми скобками имени нетерминалов.
например lt;intgt;, lt;chargt;, lt;booleangt;
  • Метасимвол: символическое представление, обозначающее синтаксическую информацию.
например :=, |, {}, (), [], *

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

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

Конкретные соглашения о метасинтаксисе

Стандартное соглашение

  • « Форма Бэкуса – Наура » обозначает нетерминальные символы, заключая в угловые скобки название синтаксической категории, а терминальные символы - двойными кавычками конечных слов. Терминалы никогда не могут появляться в левой части метасимвола ::= в правиле деривации. Тело определения с правой стороны может состоять из нескольких альтернативных форм, при этом каждая альтернативная синтаксическая конструкция отделяется метасимволом |. Каждая из этих альтернативных конструкций может быть терминальной или нетерминальной.
  • « Расширенная форма Бэкуса – Наура » использует все возможности BNF и вводит еще два метасимвола для дополнительных функций. Одна из этих двух новых функций применяется для обозначения необязательной фразы в заявлении путем заключения необязательной фразы в квадратные скобки. Вторая особенность применяется для обозначения фразы, которая должна повторяться ноль или более раз, путем заключения фразы в фигурные скобки.
  • « Нотация синтаксиса вирта » использует все возможности EBNF, за исключением того, что нетерминалы не обязательно заключаются в угловые скобки, но всегда определяются в правой части = в его производственном правиле. Также не требуется явного определения каждого нетерминала. Нетерминалы, такие как lt;textgt; и lt;opt-whitespacegt;, неявно определяются как символ ASCII и необязательный пробел соответственно.
  • « Расширенная форма Бэкуса – Наура » обозначает нетерминальные символы, начинающиеся с имени из одного слова с алфавита в качестве имени синтаксической категории. Угловые скобки не требуются. Терминальные символы либо обозначаются словами в двойных кавычках, либо обозначаются следующей числовой структурой: a %, за которым следует b или, x или d, за которым следует числовое значение, или объединение числовых значений, разделенных символом .. Метасимвол - помещается между двумя числовыми значениями для обозначения диапазона значений. Как и у BNF, терминалы ABNF никогда не встречаются слева от метасимвола = в правиле деривации. Метасимвол / обозначает чередования. Пробел используется для разделения элементов в теле определения. Metasyntax для повторения в 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.
Последняя правка сделана 2024-01-02 08:34:25
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте