2016-09-21 15 views
0

私は簡単なプログラムウォーカー文法を実装しています。この共通のエラーは複数の行にあります。私はそれが同じ理由で引き起こされたと思うが、私はそれを理解できないようにantlrには新しい。Antlr4入力シンボルで実行可能な代替方法がありません

はたとえば、この次のコードスニペットに:

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

私はエラーました:EOF

No viable alternative at input '!'

を、そして私は同様のエラーを得た:

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

Iエラーが発生しました:

No viable alternative at input '->'

他の質問を読んだ後、複数の定義と1つのトークンを照合するとこの問題が発生することがあります。しかし、私はまだ入力でそれをテストしていない、私はintelliJでこのエラーがあります。問題を解決するにはどうすればよいですか?

答えて

1

これはANTLR v3の構文です。ANTLR v4でコンパイルしようとしていますが、これはうまくいきません。

ANTLR v3にダウングレードするか、またはv4構文を使用します。この違いは、v4が自動AST生成をサポートしていないことと、削除されたAST構築演算子を使用しようとしていることに起因します。

最初のスニペットでは、!を削除する必要があります。括弧は必要ありません。

program 
    : declaration* 
    statement* 
    EOF 
    ; 

秒1については、->後にすべてのものを削除します。あなたはV4とASTを構築する必要がある場合は、my answer hereを参照してください

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

+0

ありがとう、それは私の問題を解決しました –

関連する問題