我有一個家庭作業問題,我可以使用一些幫助。我需要以下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來代替。理解和寫作要容易得多! :-)
最終你問自己需要什麼。寫下來。現在考慮可選組件並使用它們與所需組件的各種組合(按照正確的順序)。然後減少你可以(小心不要犯錯)。