Значение квадратных скобок в спецификации грамматики Alloy

В спецификации грамматики Alloy на веб-сайте Alloy я запутался. с помощью квадратных скобок.

В постановке, подобной следующей, все кажется ясным.

specification ::= [module] open* paragraph*

Я предполагаю, что квадратные скобки указывают на необязательность, а звездочки — это замыкания Клини, так что только что процитированное правило означает, что спецификация состоит не более чем из одного оператора module, нуля или более предложений open и нуля или более paragraph. Для меня это имеет смысл (хотя я постепенно прихожу к использованию нотации EBNF Вирта везде, где это возможно, поэтому в моих заметках это обозначено как [module] {open} {paragraph}).

Однако в следующей постановке скобки сбивают меня с толку.

cmdDecl ::= [name ":"] ["run"|"check"] [name|block] scope

Меня бы очень удивило, если бы ключевые слова run и check были необязательными в командах, а также для имени выполняемого предиката, имени проверяемого утверждения или выполняемого или проверяемого анонимного блока. Но это выглядит так, как если бы это правило говорило.

Итак, вопрос 1: на что означают квадратные скобки в грамматике?

Вопрос 2: является ли опечаткой использование квадратных скобок там, где некоторые читатели могут ожидать наличия скобок? т.е. должно ли это правило вместо этого принять следующую форму?

cmdDecl ::= [name ":"] ("run"|"check") (name|block) scope

Может быть, я просто недостаточно знаком с разнообразием грамматических обозначений, которые можно найти в дикой природе; возможно, было бы полезно указать инструмент или указать на описание обозначения.

Вопрос 3: используется ли эта нотация каким-либо инструментом генерации синтаксического анализатора? Который?


person C. M. Sperberg-McQueen    schedule 24.04.2014    source источник


Ответы (2)


вопрос 1: что обозначают квадратные скобки в грамматике?

Вы правильно указали, что использование квадратных скобок несовместимо с грамматикой, на которую вы ссылаетесь. Я думаю, что грамматика была скопирована с первого издания книги «Абстракции программного обеспечения»; Я не уверен, что второе издание книги содержит ту же грамматику.

Вопрос 2: является ли опечаткой использование квадратных скобок там, где некоторые читатели могут ожидать наличия скобок?

Абсолютно верно.

Вопрос 3: используется ли эта нотация каким-либо инструментом генерации синтаксического анализатора? Который?

Нет. Анализатор сплавов использует грамматику, написанную на языке Cup. Файлы .lex и .cup (Alloy.lex и Alloy.cup) включены в JAR-файл дистрибутива Alloy (расположенный в "edu/mit/csail/sdg/alloy4compiler/parser/").

person Aleksandar Milicevic    schedule 24.04.2014

Спасибо, Майкл. Производство для cmdDecl действительно было неправильным в книге, поэтому я опубликовал ошибку. Алекс также обновил грамматику на сайте Alloy, где было еще несколько ошибок.

person Daniel Jackson    schedule 29.04.2014