Я пытаюсь проверить синтаксическую и логическую правильность некоторых фрагментов кода Java, используя абстрактное синтаксическое дерево затмения.
Я провел некоторое исследование того, как это можно сделать, я прочитал документацию, но у меня нетНе нашел четкого примера.
Итак, я хочу проверить правильность набора утверждений, что-то вроде:
System.out.println("I'm doing something");
callAMethod(7);
System.out.println("I'm done");**sdsds**
Что-то в этом роде.Вы поняли.Здесь sdsds должно быть указано как ошибочное.
Мой вопрос: как я могу определить, является ли текст Java неверным синтаксически или лексически?И как я могу получить сообщения, описывающие ошибки?
Мой код для этого:
ASTParser parser = ASTParser.newParser(AST.JLS3);
parser.setKind(ASTParser.K_STATEMENTS);
parser.setSource(textToParse.toCharArray());
parser.setResolveBindings(false);
ASTNode node = (ASTNode) parser.createAST(null);
// If MALFORMED bit is 1, then we have an error. The position of MALFORMED
being 1, then this should detect the error. **But it doesn't. What's the problem?**
if (node.getFlags() % 2 == 1) {
// error detected
}
if (node instanceof CompilationUnit) {
// there are severe parsing errors (unrecognized characters for example)
if (((CompilationUnit) node).getProblems().length != 0) {
// error detected
}
}
Надеюсь, кто-нибудь может мне помочь.Большое спасибо!