stringtranslate.com

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

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

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

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

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

например "else", "if", "then","while"
например <int>, <char>,<boolean>
например :=, |, {}, , (), [],*

Методы завершения фразы

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

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

Вариации

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

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

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

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

Ссылки

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