我有一个家庭作业问题,我可以使用一些帮助。我需要以下EBNF语句转换成BNFEBNF到BNF转换
<S> -> <A>{b<A>}
<A> -> a[b]<A>
这是我想出了为止;
<S> -> <A> | <A><S> | b<A>
<A> -> a<A> | ab<A>
它感觉不对,主要是因为它是一个WAG。我的书(概念编程语言,Sebesta)中的例子根本没有帮助我。所以如果有人有任何见解,将不胜感激。谢谢!
我有一个家庭作业问题,我可以使用一些帮助。我需要以下EBNF语句转换成BNFEBNF到BNF转换
<S> -> <A>{b<A>}
<A> -> a[b]<A>
这是我想出了为止;
<S> -> <A> | <A><S> | b<A>
<A> -> a<A> | ab<A>
它感觉不对,主要是因为它是一个WAG。我的书(概念编程语言,Sebesta)中的例子根本没有帮助我。所以如果有人有任何见解,将不胜感激。谢谢!
第一个语法看起来是越野车,或者至少是不必要的混乱。但是看看这里来EBNF转换成BNF机械方式:
http://lampwww.epfl.ch/teaching/archive/compilation-ssc/2000/part4/parsing/node3.html
(* 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>;
这就是为什么我喜欢EBNF来代替。理解和写作要容易得多! :-)
最终你问自己需要什么。写下来。现在考虑可选组件并使用它们与所需组件的各种组合(按照正确的顺序)。然后减少你可以(小心不要犯错)。