それは正しくないと思います。実際、EBNF が実際に有効な EBNF だとは思いません。「 BNF を EBNF に変換する方法」という質問への回答は、有効な EBNF がどのように構築されているかを示しており、ISO/IEC 14977:1996、拡張バッカス-ナウア形式標準から引用しています。
私は次の表現だと思います:
expr --> [-] term {+ term}
次のように記述します。
expr = [ '-' ] term { '+', term };
これは、式がオプションのマイナス記号で構成され、term
その後に が続き、その後にプラス記号と が 0 回以上出現するシーケンスが続くことを意味しますterm
。
次の質問: BNF のどの方言をターゲットにしていますか? ここで事態はややこしくなります。方言が多い。ただし、可能な翻訳の 1 つを次に示します。
<expr> ::= [ MINUS ] <term> <opt_add_term_list>
<opt_add_term_list> ::= /* Nothing */
| <opt_add_term_list> <opt_add_term>
<add_term> ::= PLUS term
MINUS と PLUS は端子です ('-' と '+')。これは非常に厳格ですが、最小限の BNF です。別の可能な翻訳は次のとおりです。
<expr> ::= [ MINUS ] <term> { PLUS <term> }*
部分{ ... }*
は、含まれるパターンの 0 個以上を意味します...
(PLUS <term>
この例ではそうです)。または、引用符を使用できます。
<expr> ::= [ '-' ] <term> { '+' <term> }*
そして、可能な選択肢のリストは続きます。与えられた BNF の定義を確認する必要があります。与えられた非常にずさんな EBNF については、それが ISO 標準の EBNF であることが意図されていた場合は、文句を言う必要があります。それが EBNF と呼ばれるランダムな BNF スタイルの言語であった場合、紛らわしいのは名前だけだと思います。私的な方言は、定義されていれば問題ありませんが、方言に精通していない人が正解を知ることはできません。