EBNF特异性转化为BNF

时间:2013-10-07 02:02:06

标签: bnf ebnf

<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?

1 个答案:

答案 0 :(得分: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来替换。

  • 任何表达式( 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表示空字符串。