EBNF 到 BNF 转换

发布于 2024-08-19 09:20:03 字数 372 浏览 10 评论 0 原文

我有一个家庭作业问题,需要一些帮助。我需要将以下 EBNF 语句转换为 BNF

<S> -> <A>{b<A>}
<A> -> a[b]<A>

这是我到目前为止所想到的;

<S> -> <A> | <A><S> | b<A>
<A> -> a<A> | ab<A>

感觉不太对劲,主要是因为它是WAG。我的书(编程语言概念,Sebesta)中的示例对我没有任何帮助。因此,如果有人有任何见解,我们将不胜感激。谢谢!

I have a homework problem which I could use some help on. I need to convert the following EBNF statement to BNF

<S> -> <A>{b<A>}
<A> -> a[b]<A>

This is what I have come up with so far;

<S> -> <A> | <A><S> | b<A>
<A> -> a<A> | ab<A>

It doesn't feel right, mainly because it's a WAG. The example in my book (Concepts of Programming Languages, Sebesta) is not helping me at all. So if anyone has any insight, it would be greatly appreciated. Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

原野 2024-08-26 09:20:03

第一个语法似乎有问题,或者至少是不必要的混乱。但请看一下这里将 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

傾旎 2024-08-26 09:20:03

您对 的转换并不完全正确:

<S> -> <A> | <A><S> | b<A>

因为可以递归地选择 而无需 b 这是未由原始 EBNF 规则定义(您只能递归 ,前面带有 b)。

解决方案可能是:

(* S 是 A 的序列,可选后跟 b 和 S 的序列。*)

<S> -> <A>
       | <A> b <S>;

(* A 由“a”、后跟可选的“b”和另一个 A 组成。*)

<A> -> a <A>
       | a b <A>;

这就是我喜欢 EBNF 的原因。更容易理解和书写! :-)

最终你会问自己需要什么。把它写下来。现在考虑可选组件,并将它们与所需组件的各种组合一起使用(当然以正确的顺序)。然后尽量减少(注意不要犯错误)。

Your conversion of the <S> is not completely correct:

<S> -> <A> | <A><S> | b<A>

Because it is possible to recursively choose <A> without having b which is not defined by the original EBNF rule (You can only recursive <A> with b preceding it).

Solutions could be:

(* S is a sequence of A optionally followed by a sequence of b and S together. *)

<S> -> <A>
       | <A> b <S>;

(* A is composed of 'a', followed by an optional 'b', followed by another A. *)

<A> -> a <A>
       | a b <A>;

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).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文