2009-09-20 4 views
0
VARIABLE: ... 

UNARYOP: 'not' Expression; // unary operation 
BINARYOP: 'or' VARIABLE; 

Expression : (NIL | INTEGER | UNARYOP) BINARYOP?; 

Dans le scénario ci-dessus, 'ou' peut soit être atteint parproblème ANTLR ambiguïté récurrente

expression-> BinaryOp

ou

expression-> UNARYOP-> expression-> BinaryOp

Existe-t-il un moyen systématique de supprimer les ambiguïtés telles que celles-ci?

Répondre

1

Je pense que la suppression des ambiguïtés dans les grammaires est une tâche qui ne peut être résolue automatiquement parce que si le choix de l'une des alternatives est le bon, c'est un choix «subjectif». Une fois que vous avez identifié le problème, créez les différents arbres alternatifs et ajoutez de nouvelles règles de production pour interdire les arborescences d'analyse non valides. J'ai peur qu'il n'y ait pas de solution magique pour supprimer les récursions gauches ... Peut-être que je me trompe.

Dans votre cas, vous pouvez définir

Expression : NIL 
      | INTEGER 
      | VARIABLE 
      | 'not' Expression 
      | Expression 'or' Expression; 

Ou voulez-vous limiter le côté droit de « ou » à des variables seulement?

Questions connexes