Java-解析伪代码字符串并验证语法



假设我有以下字符串:

if(something){ /* do stuff */ }else if(something_else){ /* do other stuff */ }else{ /* do stuff once more *}

我想要的是验证这个字符串中的if语法是否正确。例如,确保else{}语句不在else if(){}语句之前,或者括号没有打开等等……我不在乎括号内的代码。字符串可以有任意数量的"if-else"语句,也可以有或没有"else"语句。

我已经写了一个函数来检查它,但如果有这样的库或脚本,我更喜欢使用它

您可以尝试使用http://www.antlr.org/.

然而,如果您不关心括号内的代码,那么这可能是过分的。

您可以使用Java Scripting API。有几个脚本引擎,适用于JavaScript,也适用于BeanShell,一种简化的Java,只适用于这种零碎的代码。

ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("BeanShell");
try {
    engine.eval("int if = -1;");
} catch (ScriptException e) {
    grrrr(e);
}

如果您只想检查语法,可以使用一些现有的Java代码解析器,如JavaParser。

示例:

    final String classText = text + "n" + "public class Dummy{}";
    final StringReader reader = new StringReader(classText);
    final CompilationUnit compilationUnit = JavaParser.parse(reader, true);

正如Gregor所写,虽然构建自己的解析器是最完整的解决方案,但可以使用正则表达式执行有限的语法检查。

相关内容

最新更新