Как обозначить хотя бы одно повторение в EBNF? - PullRequest
0 голосов
/ 11 апреля 2019

https://en.wikipedia.org/wiki/Extended_Backus–Naur_form

В вышеприведенной статье упоминается, что фигурные скобки обозначают повторение произвольных времен (включая ноль), а квадратные скобки обозначают не более одного повторения.

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

Ну, я могу описать это так:

production = nonterminal, { nonterminal };

Но я подумал, что смысл ЕНБФ над БНФ заключается в том, чтобы избежать необходимости такого рода "хаков".

В статье Википедии также упоминается:

EBNF также предоставляет, среди прочего, синтаксис для описания повторений (определенного количества раз), чтобы исключить некоторую часть производства и вставить комментарии в грамматику EBNF.

Но предоставляет ли EBNF синтаксис для описания хотя бы одного повторения?

1 Ответ

1 голос
/ 12 апреля 2019

Поставьте минус (кроме символа) после последней скобки.

production = { nonterminal }-;

ИСО / МЭК 14977: 1996 (E)

5.8 Синтаксический термин

Когда синтаксический термин является единственным синтаксическим фактором, он представляет собой любой последовательность символов, представленная этим синтаксическим фактором.

Когда синтаксический термин является синтаксическим фактором, за которым следует кроме символа с последующим синтаксическим исключением, он представляет последовательность символов, которая удовлетворяет обоим условиям:

а) это последовательность символов, представленная синтаксическим фактором,

б) это не последовательность символов, представленных синтаксический-исключение.

В качестве примеров следующие синтаксические правила иллюстрируют возможности обеспечивается символом исключения.

буква = "А" | "Б" | "C" | "D" | "Е" | "F"
| "G" | "H" | "Я" | "J" | "К" | "L" | "M"
| "N" | "О" | "П" | "Q" | "R" | "S" | "Т"
| "U" | "V" | "W" | "Х" | "Y" | "Z";
гласный = "A" | "Е" | "Я" | "O" | "U";
согласный = буква - гласный;
ee = {"A"} -, "E";

Терминальные строки, определенные этими правилами, следующие:

буква: A B C D E F G H I J и т. Д.
гласная: A E I O U
согласный: B C D F G H J K L M и т. д.
ee: AE AAE AAAE AAAAE AAAAAE и т. д.

ПРИМЕЧАНИЕ. - {"A"} - представляет собой последовательность из одного или нескольких символов A, поскольку это синтаксический термин с пустым синтаксическим исключением.

Обратите внимание, что во втором абзаце (выделение добавлено), удовлетворяет обоим условиям . То есть должны быть удовлетворены как синтаксический фактор , так и синтаксическое исключение . Скобки все еще означают повторение. Это приводит к одному или нескольким для удовлетворения синтаксиса, даже если исключение пусто.

...