2017-11-29 6 views
0

javaファイルのメソッド宣言のパラメータを取得する必要があります。 私はJavaBaseListenerインタフェースとそれらのメソッドを使用しています:Java.g4文法ファイルを変更する

@Override 
 
    public Object visitMethodDeclaration(JavaParser.MethodDeclarationContext ctx) { 
 
     TokenStream tokens = parser.getTokenStream(); 
 
     String type = "void"; 
 
     if(ctx.type() != null) { 
 
      type = tokens.getText(ctx.type().getSourceInterval()); 
 
     } 
 
     String args = tokens.getText(ctx.formalParameters()); 
 

 
     System.out.println("\t" + type + " " + ctx.Identifier() + args + ";"); 
 
     return super.visitMethodDeclaration(ctx); 
 
    }

問題は、メソッド名とメソッドクラス名の間には空白がないこと、です。 入力:private void addLoan(貸出ローン)

出力:void addLoan(Loanloan);

私はjava.g4文法ファイルを変更しようとしました、そしてformalParameter そこ

を空白を追加しました:variableModifier *タイプ "" variableDeclaratorId 。

しかし、今、私は、次のようなエラーがたくさんあります。

行1:6入力の無い実行可能な代替案は「国民 ライン1時12分余分な入力「」期待識別子 ライン1時20分余分な入力を " 「{期待」道具 『『{』、「<」} ライン2:入力で5ノー実行可能な代替『、』拡張一覧』 ...

何が私の問題のための最適なソリューションとどのように私はそれを処理することはできますか? java8文法で前方

+0

p.s.誰かが良いjavabasevisitorの使用例/チュートリアルを持っていて、何も見つかりませんでした –

+0

[The ANTLR mega tutorial](https://tomassetti.me/antlr-mega-tutorial)の第25-26章の訪問者の例があります/)。 – BernardK

答えて

0

で おかげでin this repositoryを見つけ、WSルール

WS : [ \t\r\n\u000C]+ -> skip 

は離れてホワイトスペース(-> skip)をスローします。

小さな文法in this answerを使用すると、-> skip-> channel(HIDDEN)の違いがわかります。

WS : [ \t] -> channel(HIDDEN) ;で出力が

Expression found : 3 + 4 

WS : [ \t] -> skip ;で、出力はあなたがWSトークンが現れる最初のケースでそれを見ることができます

$ grun Question question -tokens -diagnostics input.txt 

コマンドを使用して

Expression found : 3+4 

ですトークンのリストでは、 2番目のケースではeyが消えます。

This other exampleは、getText()がそれに依存していることを明確に示しています。paydeltaco98pay delta co 98

+0

ありがとう!それは今働いている –

関連する問題