2016-08-20 8 views
2

this grammarを使用してMathematicaコードを解析しようとしています。私はgradleプラグインを使ってJavaコードを生成しました。生成されたファイルの2つは、このような不適切なJavaコードが含まれています。不適切なJavaコードを生成するANTLR4

private void LBARBRACKET_action(RuleContext _localctx, int actionIndex) { 
    switch (actionIndex) { 
    case 12: 
     self.incrementBracketLevel(1); 
     break; 
    } 
} 

たぶん私はちょうどすべての「自己」を削除することもできます私はこれをしたくない。誰も同じ問題に直面していますか?

答えて

2

参照された文法は、構成が不十分です。それは、importステートメントを使用して、レクサーの卸売りを含める。代わりに、適切な分割レクサー/パーサーを扱うANTLRに頼るだけです。 FoxySheepParserFoxySheepLexer

名前の変更(内部および外部)と文法の種類をマーク:

parser grammar FoxySheepParser ; 
    lexer grammar FoxySheepLexer ; 

FWIW、ANTLRは内部合成文法からレクサーを分離した後、通常の分割レクサーを扱うかのように進みます。 /パーサ。現在のレクサーの複雑さとそれがどのように組み入れられたかにより、この分離は失敗し、コードが生成された場合、その結果は確実に信頼できるものではありません。

最後に、文法コードの生成はデフォルトでJavaになります。しかし、レクサーには、Pythonに固有のように見えるネイティブコードステートメントがあります。コード生成ターゲットとしてPythonを指定するか、ネイティブの文をJavaの同等のものに置き換えてください(サブディレクトリを確認してください)。

関連する問題