2016-07-21 22 views
0

私はこのjavaparser https://github.com/javaparser/javaparserを使って、いくつかのgithubユーザーのJavaソースコードの多くを解析して、いくつかの統計を作成しています(これは大学プロジェクト用です)。すべてが正常に動作するようだが、いくつかの点で、特定のソースコードは、このエラーを生成します。javaparser - レキシカルエラーが発生しました:<EOF> after: ""

Exception in thread "main" com.github.javaparser.TokenMgrError: Lexical error at line 6, column 2. Encountered: <EOF> after : "" 

これは、そのファイルに書かれているものです。

public class Test { 
    /**<caret> 
    public void foo() { 
    } 
} 

これは私がファイルを解析する方法です。

... 

new NodeIterator(new NodeIterator.NodeHandler() { 
    @Override 
    public boolean handle(Node node) { 
     ... 
    }; 
}).explore(JavaParser.parse(file)); 

... 

これはのNodeIteratorクラスです:

public class NodeIterator { 
    public interface NodeHandler { 
     boolean handle(Node node); 
    } 

    private NodeHandler nodeHandler; 

    public NodeIterator(NodeHandler nodeHandler) { 
     this.nodeHandler = nodeHandler; 
    } 

    public void explore(Node node) { 
     if (nodeHandler.handle(node)) { 
      for (Node child : node.getChildrenNodes()) { 
       explore(child); 
      } 
     } 
    } 
} 

私はこの問題を理解しましたが、この問題は解析全体を停止します。私は内部で解析するファイルがたくさんあるので、どうすれば他のファイルを解析し続けることができますか?または、ツールがある場合 Javaファイルが "よく書かれた"それを解析する前にチェックするか?

答えて

2

「問題」は問題ではないため解決できません。解析しようとしているソースコードが間違っているため、エラーは正しいです。ファイルの最後の前に終了していないコメントがあります。

同じソースコードをjavacでコンパイルすると、エラーが発生します。 javaparserよりも詳細ですが、解析しようとしているソースにこのエラーがあるため、これもエラーです。

あるJavac出力:

Test.java:2: error: unclosed comment 
    /**<caret> 
    ^
Test.java:6: error: reached end of file while parsing 
2 errors 
+0

だから、私が解析していたファイルがよく書かれたり、エラーをスキップし、解析を継続しているかどうかを確認する方法ですが? –

+0

このライブラリは、トークン解析エラーの後に回復機能を持つようには見えません。いずれの場合も、トークン化が回復しにくいうちにファイルの終わりに達します。最善の策はファイルの残りの部分または完全なファイルを無視することです。 –

+0

私の問題は、私は多くのファイルを解析しており、これらのエラーのそれぞれが解析全体をブロックするので、残りのファイルを解析する方法や、ファイルが "よく書かれている"か否か? –

関連する問題