【发布时间】:2013-10-07 02:02:05
【问题描述】:
<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?
【问题讨论】:
<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来替换。
任何表达式 ( 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 是指空字符串。
【讨论】: