EBNF 到 BNF 转换
我有一个家庭作业问题,需要一些帮助。我需要将以下 EBNF 语句转换为 BNF
<S> -> <A>{b<A>}
<A> -> a[b]<A>
这是我到目前为止所想到的;
<S> -> <A> | <A><S> | b<A>
<A> -> a<A> | ab<A>
感觉不太对劲,主要是因为它是WAG。我的书(编程语言概念,Sebesta)中的示例对我没有任何帮助。因此,如果有人有任何见解,我们将不胜感激。谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
第一个语法似乎有问题,或者至少是不必要的混乱。但请看一下这里将 EBNF 转换为 BNF 的机械方法:
http://lampwww.epfl.ch/teaching/archive/compilation-ssc/2000/part4/parsing/node3.html
The first grammar seems buggy, or at least needlessly messy. But take a look here for a mechanical way to convert EBNF to BNF:
http://lampwww.epfl.ch/teaching/archive/compilation-ssc/2000/part4/parsing/node3.html
您对
的转换并不完全正确:因为可以递归地选择
而无需
b
这是未由原始 EBNF 规则定义(您只能递归,前面带有
b
)。解决方案可能是:
这就是我喜欢 EBNF 的原因。更容易理解和书写! :-)
最终你会问自己需要什么。把它写下来。现在考虑可选组件,并将它们与所需组件的各种组合一起使用(当然以正确的顺序)。然后尽量减少(注意不要犯错误)。
Your conversion of the
<S>
is not completely correct:Because it is possible to recursively choose
<A>
without havingb
which is not defined by the original EBNF rule (You can only recursive<A>
withb
preceding it).Solutions could be:
This is why I like EBNF instead. It is much easier to understand and write! :-)
Ultimately you ask yourself what is required. Write it down. Now consider the optional components and use various combinations of them with the required components (in the right order of course). Then reduce what you can (be careful not to make a mistake).