提问人: 提问时间:7/21/2016 更新时间:7/24/2016 访问量:15541
javaparser - 遇到词法错误:<EOF>之后:“”
javaparser - Lexical error Encountered: <EOF> after : ""
问:
我正在使用这个 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);
}
}
}
}
我已经理解了这个问题,但这个问题阻止了整个解析。我有很多文件要解析,那么我该如何继续解析其他文件呢?或者有没有一个工具可以在解析 java 文件之前检查它是否“写得很好”?
答:
2赞
Erwin Bolwidt
7/21/2016
#1
你无法解决“问题”,因为它不是问题。错误是正确的,因为您尝试分析的源代码不正确。它有一个注释,该注释在文件结束之前不会终止。
如果编译相同的源代码,也会出现错误。它比你的更详细,但它仍然是一个错误,因为你尝试解析的源有这个错误。javac
javaparser
Javac 输出:
Test.java:2: error: unclosed comment
/**<caret>
^
Test.java:6: error: reached end of file while parsing
2 errors
评论
0赞
7/21/2016
那么,有没有办法检查我正在解析的文件是否写得很好,或者跳过错误并继续解析?
0赞
Erwin Bolwidt
7/21/2016
在令牌解析错误后,此库似乎不具有恢复功能,并且在任何情况下,在标记化时命中文件末尾都很难恢复。最好的办法是忽略文件的其余部分或整个文件。
0赞
7/24/2016
我的问题是我正在解析很多文件,而这些错误中的每一个都阻止了整个解析,那么您知道如何继续解析其余文件,或者可能是一个工具来检查文件是否“写得好”?
评论