<A> ::= <B> x {<B> <D>} y <B>
<B> ::= <C> (w|z) <C> <D>
<C> := m [n] <D> <E>
<D> := q | null
<E> := p | null
この EBNF をどのように BNF に変換しますか?
人によって EBNF の構文が異なりますが、どの構文を使用しているのかわかりません。EBNF ( ISO/IEC 14977: 1996(E) ) の文法は次のようになります。
A = B, "x", {B, D}, "y", B;
B = C, ("w" | "z"), C, D;
C = "m", ["n"], D, E;
D = ["q"];
E = ["p"];
null
空の文字列に使用すると仮定します。これはさらに単純化できることに注意してください。
これを BNF に変換するには、いくつかのプロダクションを追加する必要があります。
{ expr }
空の文字列を表すP := empty |
expr P
プロダクションを挿入することで置き換えることができます。empty
[ expr ]
を挿入することで置換できます P := empty | expr
。
新しい production を追加することで、任意の式( expr )
を置き換えることができます
P := expr
。
だから、このようなもの:
A -> B x F y B
F -> empty | B D F
B -> C G C D
G -> w | z
C -> m H D E
H -> empty | n
D -> q | empty
E -> p | empty
null
繰り返しますが、空の文字列を意味すると仮定します。