使用javaparse分析循环时出错
这是我上一个问题的延续:。我试图解析这个不正确的for循环:使用javaparse分析循环时出错,java,parsing,for-loop,javaparser,Java,Parsing,For Loop,Javaparser,这是我上一个问题的延续:。我试图解析这个不正确的for循环:for(j,k,15,>,-)的正确形式:for(var j=k;j>15;j--){}。它意味着将Class.java解析为Class.java。我的代码应该使用正确的循环创建新类ClassAltered.java。现在,我解析for循环的方法被注释了(我还没有完成它),但无论如何,我有相同的错误。 我确信javaparser可以解析不正确的语句,但我对sights“>”,“,-)测试”有问题; } 公共静态无效方法2(){ 对于(j
for(j,k,15,>,-)
的正确形式:for(var j=k;j>15;j--){}
。它意味着将Class.java解析为Class.java。我的代码应该使用正确的循环创建新类ClassAltered.java。现在,我解析for循环的方法被注释了(我还没有完成它),但无论如何,我有相同的错误。
我确信javaparser可以解析不正确的语句,但我对sights“>”,“,-)测试”有问题;
}
公共静态无效方法2(){
对于(j,0,10,,我认为您不应该依赖JavaParser处理错误语句的方式。解析错误语句是一件复杂而脆弱的事情。没有“正确”的方式来解析Java文件中非Java的内容 我想知道这些代码是如何在一个JavaParser文件中结束的:它是由某个错误的代码生成器生成的吗?你有没有可能修复这个生成器,而不是反向工程一个错误的文件
免责声明:我是JavaParser的贡献者我认为您不应该依赖JavaParser处理错误语句的方式。解析错误语句是一件复杂而脆弱的事情。没有“正确”的方式来解析Java文件中非Java的内容 我想知道这些代码是如何在一个JavaParser文件中结束的:它是由某个错误的代码生成器生成的吗?你有没有可能修复这个生成器,而不是反向工程一个错误的文件
免责声明:我是JavaParser的贡献者谢谢你的回答。我在Class.java中为自己创建了这个错误的代码,一切都会好起来的,但我对这个符号有问题“”“+”,“-”。如果没有这些符号,它将被解析。谢谢你的回答。我在Class.java中为自己创建了这个错误的代码,一切都会好起来,但是我对这些符号有问题。“+”,“-”。如果没有这些符号,它将被解析。
public class Class {
public static void main(String[] args) {
method1();
method2();
}
public static void method1() {
FOR(j, k, 15, >, -);
System.out.println("FOR(j, k, 15, >, -) test");
}
public static void method2() {
FOR(j, 0, 10, <=, +);
System.out.println("FOR(j, 0, 10, <=, +) test");
}
}
import com.github.javaparser.JavaParser;
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.expr.*;
import com.github.javaparser.ast.stmt.ForStmt;
import javax.tools.*;
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
final String fileName = "Class.java";
final String alteredFileName = "src\\ClassAltered.java";
CompilationUnit cu;
try(FileInputStream in = new FileInputStream(fileName)){
cu = JavaParser.parse(in);
}
//cu.getChildNodesByType(ForStmt.class)
//.forEach(Main::setForStatement);
cu.getClassByName("Class").get().setName("ClassAltered");
try(FileWriter output = new FileWriter(new File(alteredFileName), false)) {
output.write(cu.toString());
}
File[] files = {new File(alteredFileName)};
String[] options = { "-d", "out//production//Synthesis" };
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<>();
try (StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null)) {
Iterable<? extends JavaFileObject> compilationUnits =
fileManager.getJavaFileObjectsFromFiles(Arrays.asList(files));
compiler.getTask(
null,
fileManager,
diagnostics,
Arrays.asList(options),
null,
compilationUnits).call();
diagnostics.getDiagnostics().forEach(d -> System.out.println(d.getMessage(null)));
}
}
/*private static void setForStatement(ForStmt forStmt) {
MethodCallExpr initializer = (MethodCallExpr) forStmt.getInitialization().get(0);
if (initializer.getArguments().size() == 5
&& initializer.getArgument(1) instanceof IntegerLiteralExpr
&& initializer.getArgument(2) instanceof IntegerLiteralExpr) {
IntegerLiteralExpr a1 = (IntegerLiteralExpr) initializer.getArgument(1);
IntegerLiteralExpr a2 = (IntegerLiteralExpr) initializer.getArgument(2);
}
}*/
}