0
<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 に変換しますか?

4

1 に答える 1

0

人によって 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繰り返しますが、空の文字列を意味すると仮定します。

于 2013-10-13T11:52:47.183 に答える