2017-05-01 1 views
1

ok laisse dire que j'ai la grammaire suivanteEst-ce que cela rendra ma grammaire ambigieuse?

<Exp> -> <Term> 
<EXp> -> <Term> {<AddOp> <Exp>} 
<Term> -> <Factor> {<MultOp> <Term>} 
<Factor> -> <id> | <no> | (<Exp>) 

La chose à l'intérieur {} est facultative. donc je peux techniquement juste exp-> term ou term-> Factor. Maintenant la dérivation suivante est possible pour disons le nombre 10. exp-> term-> factor-> no-> 10 .. puis-je ajouter non à exp?

<Exp> -> <Term>|<no> 

ou est ce que cela rendra la grammaire ambiguë ou d'autres problèmes? Merci.

Ps ADDOP et MultOp ne sont que + et *

Répondre

0

Votre grammaire initiale est déjà ambiguë: <Exp> dérive <Term> de deux façons différentes, par la production 1 et par la production 2. Production 1 n'ajoute rien à la grammaire , donc vous pouvez simplement l'enlever, et vous obtiendrez une grammaire non ambiguë pour la même langue.

Mais ensuite, si vous ajoutez la production <Exp> -> <no>, vous obtiendrez une grammaire ambiguë, car <Exp> dérivera <no> de deux manières différentes. La première façon que vous avez déjà montrée, et la deuxième est une application triviale de la nouvelle production.