2016-07-21 20 views
0

Ich benutze diesen javaparser https://github.com/javaparser/javaparser, um viele Java-Quellcodes einiger github-Benutzer zu analysieren, um einige Statistiken von ihnen zu machen (dies ist für ein Universitätsprojekt). Alles scheint gut zu funktionieren, aber an einem gewissen Punkt eine bestimmte Quellcode erzeugt diesen Fehler:javaparser - Lexikalischer Fehler Encountered: <EOF> nach: ""

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

Dies ist, was in dieser Datei geschrieben wird:

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

Dies ist, wie ich analysiere die Datei:

... 

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

... 

Dies ist die NodeIterator Klasse:

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); 
      } 
     } 
    } 
} 

Ich habe das Problem verstanden, aber dieses Problem stoppt das gesamte Parsing. Ich habe viele Dateien in einem for zu analysieren, so Wie kann ich tun, um die anderen Dateien zu analysieren? Oder gibt es ein Werkzeug zu überprüfen, ob eine Java-Datei ist "gut geschrieben" vor der Analyse?

Antwort

2

Sie können "das Problem" nicht lösen, weil es kein Problem ist. Der Fehler ist richtig, da der Quellcode, den Sie analysieren möchten, falsch ist. Es hat einen Kommentar, der nicht vor dem Ende der Datei beendet wird.

Wenn Sie den gleichen Quellcode mit javac kompilieren, erhalten Sie auch einen Fehler. Es ist detaillierter als in Ihrem javaparser, aber es ist immer noch ein Fehler, weil die Quelle, die Sie analysieren möchten, diesen Fehler hat.

Javac Ausgang:

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

So ist es eine Möglichkeit, wenn die Datei, die ich ist gut geschrieben bin Parsen zu überprüfen oder um den Fehler überspringen und weiter zu analysieren? –

+0

Es sieht nicht so aus, als hätte diese Bibliothek nach einem Token-Parsing-Fehler Wiederherstellungsfunktionen und würde in jedem Fall das Dateiende erreichen, während die Token-Wiederherstellung nur schwer zu beheben ist. Am besten ignorieren Sie den Rest der Datei oder die gesamte Datei. –

+0

Mein Problem ist, dass ich viele Dateien parsiere und jeder dieser Fehler das gesamte Parsing blockiert. Wissen Sie also, wie Sie den Rest der Dateien parsen können, oder vielleicht ein Werkzeug, um zu überprüfen, ob eine Datei "gut geschrieben" ist oder nicht? –