Рассмотрим следующее:
Список параметров функции представляет собой последовательность из нуля или более параметров, разделенных запятыми и заключенных в круглые скобки, "(" и ")" .
Если я хочу указать синтаксис «списка параметров функции», предполагая, что синтаксическая категория «параметр» определена, могу ли я написать:
<function parameter list> ::= ( [<parameter> { , <parameter>} ] )
как БНФ? Допустимо ли использование скобок, вложенных в фигурные скобки, для EBNF?
Первоначально моим импульсом было дать BNF как:
<function parameter list> ::= ( <parameter> )
| ( <parameter> { , <parameter> } )
| ( )
Я не уверен, как еще я мог бы написать этот BNF без фигурных скобок.
Я пытаюсь получить информацию из моего текста или из Интернета об использовании скобок/скобок в обычном BNF, и некоторые источники подразумевают, что вы можете, но мой текст не указывает точно. Кажется, что BNF нуждается в какой-то скобе для этого случая. Я думал, что BNF не может использовать брекеты или брекеты, и теперь я не уверен.
[ <parameters> [ , <parameters> ] ]
? - person TZHX   schedule 11.03.2015->
, чтобы указать, что LHS является производным от RHS. Я не знаю, чья БНФ использует это обозначение; Я не видел его раньше. Это понятно; это не стандарт (потому что стандарта нет — или потому что стандартов много; выбирайте сами). Как вы вставляете литерал{
или}
или|
в свой BNF, например? - person Jonathan Leffler   schedule 11.03.2015->
(вместо этого используется::=
). - person Jonathan Leffler   schedule 11.03.2015<left-parenthesis>
и<right-parenthesis>
и использовать их в основной части грамматики. Где-то вы определите терминал для них, возможно, как<left-parenthesis> ::= '('
. Может у вас и без этого все в порядке. Возможно, вы сможете использовать(
и)
в грамматике напрямую, без кавычек, и это «работает» как буквальная скобка (ведущая к<left-parenthesis> ::= (
в качестве определения). Это зависит от правил, которые определяет тот, кто определяет диалект БНФ, с которым вы работаете. - person Jonathan Leffler   schedule 11.03.2015<function-parameter-list> ::= ( <opt-parameter-list> )
, и<opt-parameter-list> ::= /* Nothing */ | <parameter-list>
, и<parameter-list> ::= <parameter> | <parameter-list> , <parameter>
, но в итоге это практически одно и то же. Итак, если мы согласимся с тем, что ни запятая, ни левая скобка, ни правая скобка не являются метасимволом, то у вас все в порядке (и я рад согласиться, мне просто нужно было разъяснить правила). Обозначение/* Nothing */
, конечно, означает «без символов», но я лучше расшифрую его, на случай путаницы. - person Jonathan Leffler   schedule 11.03.2015[
и]
для включения необязательного материала (ноль или одно появление) и{
и}
для заключения необязательного повторяющегося материала (ноль или более появлений), а запятые и круглые скобки не являются метасимволами, ваш исходный план в порядке. слишком. Но это зависит от правил, по которым вы работаете. - person Jonathan Leffler   schedule 11.03.2015