2010-11-13 29 views

Répondre

1

Ceci est partiellement vrai, un conflit réduire/réduire est généralement résolu en spécifiant la priorité ou en laissant le constructeur de l'analyseur choisir la règle à appliquer avant l'autre. Cela signifie que le conflit est résolu mais pas que l'analyseur va se comporter exactement comme prévu. Il est commode d'étudier ce qui cause le conflit et de penser si un refactorisation de la grammaire est nécessaire pour exprimer ce que vous essayez d'analyser ou si le choix/la préséance automatique est suffisant.

1

Si vous avez une grammaire avec des règles ambiguës, vous obtenez plusieurs interprétations. Vous n'avez pas à insister pour que la grammaire supprime l'ambiguïté; vous pouvez simplement d'accord que quelque chose est ambigu et l'analyser de multiples façons:

fruit flies like an arrow. 

Le résultat de l'analyse est de multiples interprétations.

Maintenant, pour qu'une telle langue soit utile à un lecteur, soit il doit être heureux avec l'ambiguïté, ou vous devez lui donner un moyen de le résoudre. (Dans l'exemple, j'ai décidé pour vous que vous êtes heureux de l'ambiguïté, parce que je ne vous ai pas donné un moyen de le résoudre!). Ou, on peut fournir au lecteur de quelque chose avec une paresse ambiguë, une façon de choisir quelle analyse a un sens, et il rejette les analyses inappropriées.

Je peux faire cela pour le cas ci-dessus en vous disant que je veux dire "fruit => pastèque".

Les grammaires de l'ordinateur ne sont pas différentes, mais la plupart des programmeurs ne veulent pas de code ambigu. Donc, en général, les concepteurs langauge comme pour définir des grammaires non ambiguës. En pratique, ils ne réussissent pas et vous obtenez des règles de langage drôles comme, "Si cela peut être interprété de manière ambiguë, alors interprétez-le cette façon.".