EBNF
<A> ::= <B><C> '('[<D>{,<D>}]')';
当我解决这个问题时,结果是这样的:
BNF-
<A>::=<B><C>(); |<B><C> (<D>|<A><D>);
答案正确吗?
它包含每个需要转换的产品的说明:
从EBNF到BNF
对于构建解析器(尤其是自底向上),BNF语法通常比EBNF更好。但将EBNF语法转换为BNF:很容易
-
将每个重复{E}转换为新的非终端X并添加X=
$epsilon$ | X E.
-
将每个选项[E]转换为新的非终端X并添加
X = $epsilon$ | E. (We can convert X = A [ E ] B. to X = A E B | A B.)
-
将每组(E)转换为新的非终端X添加
X = E.
-
我们甚至可以通过几个具有相同非终端的产品。
X = E | E'. becomes X = E. X = E'.
请参阅以下链接:
- 链接1
- 链接2