2016-09-21 3 views
0

Ich implementiere ein einfaches Programm Walker Grammatik und ich bekomme diesen häufigen Fehler in mehreren Zeilen. Ich denke, dass es aus dem gleichen Grund stammt, aber ich bin neu in Antlr, also konnte ich es nicht herausfinden.Antlr4 Keine brauchbare Alternative bei Eingabesymbolen

Zum Beispiel in diesem folgenden Codeausschnitt:

program 
    : (declaration)* 
    (statement)* 
    EOF! 
    ; 

Ich habe Fehler:

No viable alternative at input '!'

nach EOF, und ich habe einen ähnlichen Fehler mit:

declaration 
    : INT VARNUM '=' expression ';' 
    -> ^(DECL VARNUM expression) 
    ; 

I habe den Fehler:

No viable alternative at input '->'

Nachdem ich andere Fragen gelesen habe, weiß ich, dass die Übereinstimmung eines Tokens mit mehreren Definitionen dieses Problem verursachen kann. Aber ich habe es noch nicht mit irgendwelchen Eingaben getestet, ich habe diesen Fehler bei intelliJ. Wie kann ich mein Problem beheben?

Antwort

1

Das ist ANTLR v3 Syntax, Sie versuchen, es mit ANTLR v4 zu kompilieren, die nicht funktionieren wird.

Entweder auf ANTLR v3 herunterstufen oder v4-Syntax verwenden. Der Unterschied ergibt sich aus der Tatsache, dass v4 die automatische AST-Generierung nicht unterstützt und Sie versuchen, AST-Konstruktionsoperatoren zu verwenden, die entfernt wurden.

Das erste Snippet erfordert nur das Entfernen der !. Klammern sind nicht notwendig.

program 
    : declaration* 
    statement* 
    EOF 
    ; 

Was die zweite, entfernen Sie alles nach dem ->:

declaration 
    : INT VARNUM '=' expression ';' 
    ; 

Falls Sie ein AST mit v4 aufbauen müssen, my answer here sehen.

+0

Danke, es hat mein Problem gelöst –

Verwandte Themen