2016-07-21 1 views
0

J'utilise ce javaparser https://github.com/javaparser/javaparser pour analyser de nombreux codes sources java de certains utilisateurs de github pour en faire des statistiques (ceci est pour un projet universitaire). Tout semble fonctionner très bien, mais à un moment donné, un code source particulier produit cette erreur:javaparser - Erreur lexicale Rencontré: après: ""

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

Voici ce qui est écrit dans ce fichier:

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

Voilà comment je parse le fichier:

... 

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

... 

C'est la classe 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); 
      } 
     } 
    } 
} 

J'ai compris le problème, mais ce problème arrête l'analyse complète. J'ai beaucoup de fichiers à analyser dans un pour, alors comment puis-je faire pour continuer à analyser les autres fichiers? Ou est-il un outil pour vérifier si un fichier java est "bien écrit" avant de l'analyser?

Répondre

2

Vous ne pouvez pas résoudre le "problème" car ce n'est pas un problème. L'erreur est correcte, car le code source que vous essayez d'analyser est incorrect. Il a un commentaire qui n'est pas terminé avant la fin du fichier.

Si vous compilez le même code source avec javac, vous obtenez également une erreur. C'est plus détaillé que dans votre javaparser, mais c'est toujours aussi une erreur, car la source que vous essayez d'analyser a cette erreur.

sortie Javac:

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

Alors, est-il un moyen de vérifier si le fichier que je suis analyse syntaxique est bien écrit ou ignorer l'erreur et continuer à analyser? –

+0

Il ne semble pas que cette bibliothèque ait des capacités de récupération après une erreur d'analyse de jeton, et dans tous les cas, elle frappe la fin du fichier alors que la tokenisation est difficile à récupérer. Votre meilleur pari est soit d'ignorer le reste du fichier ou le fichier complet. –

+0

Mon problème est que j'analyse beaucoup de fichiers et que chacune de ces erreurs bloque toute l'analyse, alors savez-vous comment continuer à analyser le reste des fichiers, ou peut-être un outil pour vérifier si un fichier est "bien écrit" ou pas? –