2010-01-25 101 views
1

我有一个家庭作业问题,我可以使用一些帮助。我需要以下EBNF语句转换成BNFEBNF到BNF转换

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

这是我想出了为止;

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

它感觉不对,主要是因为它是一个WAG。我的书(概念编程语言,Sebesta)中的例子根本没有帮助我。所以如果有人有任何见解,将不胜感激。谢谢!

回答

0
(* 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来代替。理解和写作要容易得多! :-)

最终你问自己需要什么。写下来。现在考虑可选组件并使用它们与所需组件的各种组合(按照正确的顺序)。然后减少你可以(小心不要犯错)。