javaparser - 词汇错误遇到:<eof>之后:&#34;&#34;

时间:2016-07-21 14:20:52

标签: java exception eof lexical javaparser

我正在使用这个javaparser https://github.com/javaparser/javaparser来解析一些github用户的许多java源代码,以便从中获取一些统计信息(这是针对大学项目的)。一切似乎都运行正常,但在某些时候,特定的源代码会产生此错误:

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

我已经理解了这个问题,但是这个问题会停止整个解析。我有很多文件需要在for中解析,所以如何继续解析其他文件?或者是否有工具检查是否是一个java文件&#34; 写得好&#34;在解析它之前?

1 个答案:

答案 0 :(得分:3)

你无法解决问题&#34;因为这不是问题。错误是正确的,因为您尝试解析的源代码不正确。它有一个在文件结束之前没有终止的注释。

如果使用javac编译相同的源代码,也会出错。它比javaparser更详细,但它仍然是一个错误,因为您尝试解析的来源有此错误。

Javac输出:

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