2009-12-08 3 views
0

J'essaie d'obtenir la sensation pour antlr3, et j'ai collé le Expression evaluator dans une fenêtre ANTLRWorks (dernière version) et l'ai compilé. Il a compilé avec succès et a commencé, mais deux problèmes:Comportement impair de l'analyseur en essayant la grammaire de l'échantillon

  • tentative d'utilisation d'une entrée de 1+2*4/3; a donné lieu à l'entrée réelle de l'analyseur étant 1+2*43.
  • L'une des erreurs affichées dans l'arborescence de l'analyseur graphique est MissingTokenException(0!=0).

Comme je suis nouveau à antlr, quelqu'un peut-il m'aider?

Répondre

1

L'exemple que vous associé ne prend pas en charge la division (regardez juste le code, vous remarquerez qu'il n'y a pas de division ici:

expr returns [int value] 
    : e=multExpr {$value = $e.value;} 
     ( '+' e=multExpr {$value += $e.value;} 
     | '-' e=multExpr {$value -= $e.value;} 
     )* 
+0

Oh. Artefact de l'exemple précédent j'essayais je devine. Accrochez-vous laissez-moi essayer un meilleur exemple! – RCIX

+0

Yup ça marche maintenant, comment ça m'a manqué? – RCIX

1

On a souvent

MissingTokenException(0!=0) 

quand nous faisons Je pense que cela signifie qu'il ne peut pas trouver un jeton qu'il cherche, et qu'il pourrait être produit par un jeton incorrect, il est possible que l'analyseur "récupère" parfois en fonction de la grammaire

R emember aussi que le LEXER fonctionne avant l'analyseur et vous devriez vérifier quels jetons sont réellement passés à l'analyseur. Le débogueur AntlrWorks peut être très utile ici.

+0

Je n'ai jamais vu un état de programme qu'avant :) – RCIX

Questions connexes