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

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

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

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

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

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

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

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

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

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

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

Вариации

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

Преимущество расширений

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

Смотрите также

Рекомендации

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