Обозначение синтаксиса вирта - Wirth syntax notation - Wikipedia
Обозначение синтаксиса вирта (WSN) это метасинтаксис, то есть формальный способ описания формальные языки. Первоначально предложено Никлаус Вирт в 1977 году как альтернатива Форма Бэкуса – Наура (БНФ). Он имеет несколько преимуществ перед BNF в том, что он содержит явную конструкцию итерации и позволяет избежать использования явного символа для пустой строки (например,
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, которую иллюстрирует этот пример, заключается в том, что, позволяя использовать как одинарные, так и двойные кавычки для символа буквальный
, при попытке создать машиночитаемый синтаксис существует дополнительная вероятность человеческой ошибки. Одна из концепций, перенесенных на более поздние метасинтаксисы, заключалась в том, что предоставление пользователю нескольких вариантов выбора затрудняло написание парсеров для грамматик, определяемых синтаксисом, поэтому компьютерные языки в целом стали более ограничительными в том, как цитируемый буквальный определено.
Рекомендации
- ^ Вирт, Никлаус (Ноябрь 1977 г.). «Что мы можем сделать с ненужным разнообразием обозначений для определений синтаксиса?». Коммуникации ACM. 20 (11): 822–823. Дои:10.1145/359863.359883.
- ^ «ISO 10303-21, Системы промышленной автоматизации и интеграция. Представление данных о продукте и обмен ими. Часть 21: Методы внедрения: Кодирование структуры обмена открытым текстом». Международная организация по стандартизации. 2002-01-24. Цитировать журнал требует
| журнал =
(помощь)