Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-解析伪代码字符串并验证语法_Java_Parsing_Syntax Error - Fatal编程技术网

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

Java-解析伪代码字符串并验证语法,java,parsing,syntax-error,Java,Parsing,Syntax Error,假设我有以下字符串: if(something){/*dostuff*/}else if(something){/*doother stuff*/}else{/*dostuff再做一次*} 我想要的是验证这个字符串中的if语法是否正确。例如,确保else{}语句不在else if(){}语句之前,或者括号没有打开等等……我不关心括号内的代码。字符串可以有任意数量的“if-else”语句,也可以有或没有“else”语句 我已经编写了一个函数来检查它,但是如果有这样的库或脚本,我更愿意使用它。您可以

假设我有以下字符串:

if(something){/*dostuff*/}else if(something){/*doother stuff*/}else{/*dostuff再做一次*}

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


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

您可以尝试使用它构建自己的解析器


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

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

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

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

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

例如:

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

这似乎有点不同,因为它试图检查一条语句,而不是编译一个完整的类。我正在尝试验证我自己制作的一小段孤立伪代码中的语法。我正在尝试您的方法,我导入了ScriptEngineManager库,但当您的代码段运行时,它会在engine=factory.getEngineByName(“BeanShell”)抛出一个空异常;您能告诉我如何将BeanShell导入ScriptEngineManager吗?是一个由来已久的脚本引擎。我有很多年没看它了。它与其他语言一起列出。BeanShell本身有很好的文档,并提到了嵌入。你必须为我看到的BeanShell注册工厂-对不起。我担心BeanShell脚本可能是一个二级项目。