Обозначение синтаксиса вирта - Wirth syntax notation - Wikipedia

Обозначение синтаксиса вирта (WSN) это метасинтаксис, то есть формальный способ описания формальные языки. Первоначально предложено Никлаус Вирт в 1977 году как альтернатива Форма Бэкуса – Наура (БНФ). Он имеет несколько преимуществ перед BNF в том, что он содержит явную конструкцию итерации и позволяет избежать использования явного символа для пустой строки (например, или ε).[1]

WSN использовался в нескольких международные стандарты, начиная с ISO 10303-21.[2] Он также использовался для определения синтаксиса ВЫРАЖАТЬ, то моделирование данных язык ШАГ.

WSN определяется сам по себе

 СИНТАКСИС = { ПРОИЗВОДСТВО } . ПРОИЗВОДСТВО = ИДЕНТИФИКАТОР "=" ВЫРАЖЕНИЕ "." . ВЫРАЖЕНИЕ = СРОК { "|" СРОК } . СРОК = ФАКТОР { ФАКТОР } . ФАКТОР = ИДЕНТИФИКАТОР            | ЛИТЕРАЛЬНЫЙ            | "[" ВЫРАЖЕНИЕ "]"            | "(" ВЫРАЖЕНИЕ ")"            | "{" ВЫРАЖЕНИЕ "}" . ИДЕНТИФИКАТОР = письмо { письмо } . ЛИТЕРАЛЬНЫЙ = """" персонаж { персонаж } """" .

Знак равенства указывает на производство. Элемент слева определяется как комбинация элементов справа. Производство прекращается полной остановкой (периодом).

  • Повторение обозначается фигурными скобками, например., {а} означает ε | а | аа | ааа | ....
  • Необязательность выражается квадратными скобками, например., [а] б означает ab | б.
  • Круглые скобки служат для группировки, например., (а | б) в означает ac | до н.э.

Сегодня мы принимаем эти концепции как должное, но в 1977 году они были новыми и даже противоречивыми. Позже Вирт включил некоторые из этих концепций (с другим синтаксисом и обозначениями) в расширенная форма Бэкуса – Наура.

Заметь письмо и персонаж остаются неопределенными. Это связано с тем, что числовые символы (цифры от 0 до 9) могут быть включены в оба определения или исключены из одного, в зависимости от определяемого языка, например:

 цифра = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" . верхний регистр = "А" | "B" |  | "Y" | "Z" . строчный = "а" | "б" |  | "у" | "z" . письмо = верхний регистр | строчный .

Если персонаж продолжает включать цифра и другие печатные ASCII символов, то он еще больше расходится с письмо, который, как можно предположить, не включает символы цифр или какие-либо специальные (небуквенно-цифровой ) символы.

Другой пример

Синтаксис BNF может быть представлен с помощью WSN следующим образом, на основе перевода пример BNF самого себя:

 синтаксис = правило [ синтаксис ] . правило = opt-пробел "<" имя-правила ">" opt-пробел "::="                   opt-whitespace выражение конец строки . opt-пробел = { " " } . выражение = список [ "|" выражение ] . конец строки = opt-whitespace EOL | конец строки конец строки . список = срок [ список опт-пробелов ] . срок = буквальный | "<" имя-правила ">" . буквальный = """" текст """" | "'" текст "'" .

Это определение кажется слишком сложным, потому что концепция «необязательного пробел "должно быть явно определено в BNF, но неявно в WSN. Даже в этом примере текст не определено, но предполагается, что оно означает "ASCII-символ {ASCII-символ}". (EOL также остается неопределенным.) Обратите внимание, как кладж "<" название-правила ">" был использован дважды, потому что текст не был определен явно.

Одна из проблем с BNF, которую иллюстрирует этот пример, заключается в том, что, позволяя использовать как одинарные, так и двойные кавычки для символа буквальный, при попытке создать машиночитаемый синтаксис существует дополнительная вероятность человеческой ошибки. Одна из концепций, перенесенных на более поздние метасинтаксисы, заключалась в том, что предоставление пользователю нескольких вариантов выбора затрудняло написание парсеров для грамматик, определяемых синтаксисом, поэтому компьютерные языки в целом стали более ограничительными в том, как цитируемый буквальный определено.

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

  1. ^ Вирт, Никлаус (Ноябрь 1977 г.). «Что мы можем сделать с ненужным разнообразием обозначений для определений синтаксиса?». Коммуникации ACM. 20 (11): 822–823. Дои:10.1145/359863.359883.
  2. ^ «ISO 10303-21, Системы промышленной автоматизации и интеграция. Представление данных о продукте и обмен ими. Часть 21: Методы внедрения: Кодирование структуры обмена открытым текстом». Международная организация по стандартизации. 2002-01-24. Цитировать журнал требует | журнал = (помощь)