2010-01-25 12 views
1

J'ai un problème de devoirs sur lequel je pourrais avoir besoin d'aide. Je dois convertir l'instruction EBNF suivante en BNFConversion EBNF en BNF

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

C'est ce que j'ai trouvé jusqu'à présent; Il ne se sent pas bien, principalement parce que c'est un WAG. L'exemple de mon livre (Concepts of Programming Languages, Sebesta) ne m'aide pas du tout. Donc, si quelqu'un a un aperçu, ce serait grandement apprécié. Merci!

Répondre

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>; 

Voilà pourquoi j'aime EBNF à la place. C'est beaucoup plus facile à comprendre et à écrire! :-)

En fin de compte, vous vous demandez ce qui est nécessaire. Écris le. Maintenant, considérez les composants optionnels et utilisez diverses combinaisons avec les composants requis (dans le bon ordre bien sûr). Puis réduisez ce que vous pouvez (attention à ne pas faire d'erreur).