이전 질문이 계속되었습니다 : How to parse a for-loop using Javaparser?. 이 잘못된 for-loop : FOR(j, k, 15, >, -);
을 올바른 형식으로 구문 분석하려고합니다. for (var j = k; j > 15; j--){}
. Class.java를 ClassAltered.java 클래스로 파싱하는 것을 의미합니다. 내 코드는 올바른 루프 -를 가진 새로운 클래스 ClassAltered.java를 생성해야한다. 이제는 for 루프를 구문 분석하는 메서드가 주석 처리되었지만 (필자는 완료하지 못했습니다) 어쨌든 동일한 오류가 발생했습니다. javaparser가 잘못된 문장을 파싱 할 수는 있지만 "", "< =", "+", "-"와 관련된 문제가 있습니다. 이 명소를 지우면 모든 것이 효과가 있습니다. 여기javaparse를 사용하여 for-loop을 구문 분석하는 동안 오류가 발생했습니다.
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");
}
}
: 내가 분석 할 여기
내 Class.java입니다 : 내가 javaparser 코어-3.1.0.jar 여기를 사용하는 것은 내 오류입니다 내 Main.class입니다 :
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);
}
}*/
}
고맙습니다. Class.java에서이 잘못된 코드를 직접 작성했으며 모든 것이 정상이지만이 심볼에 "<", "=>", "+", "-"문제가 있습니다. 이 기호가 없으면 파싱됩니다. – Viola