当前位置: 首页 > 知识库问答 >
问题:

日食 JDT AST: 如何将生成的 AST 写入 Java 文件?

周飞
2023-03-14

我目前正在用eclipse AST生成源代码。与大多数示例不同,我在一个独立的应用程序中从头开始生成源代码,而不是eclipse插件。

从ASTParser读入时,您可以通过调用recdModiations()来激活修改,但当从头开始创建AST时,这不起作用,例如通过调用newCompilationUnit()

因此,不可能通过文档TextEdit有从头开始生成AST并写入文件的经验吗?谢谢


共有3个答案

戎泰
2023-03-14

我只是想找到同一个问题的答案。根据以上答案,我找到的最优雅的解决方案如下:

ASTParser parser = ASTParser.newParser(AST.JLS4);
parser.setCompilerOptions(....);

Document document = new Document("");
parser.setSource(document.get().toCharArray());
CompilationUnit unit = (CompilationUnit)parser.createAST(null);
unit.recordModifications();

TextEdit edits = unit.rewrite(document, null);
edits.apply(document);

// now write document.get() to file
於永寿
2023-03-14

谢谢你的建议!与此同时,我找到了一种通过内部类“ASTFlattener”发出源代码的方法,它创建了AST的字符串表示。这对我来说效果很好……

江奕
2023-03-14

为什么不先创建文件,然后从中生成 AST,如下所示:

ICompilationUnit unit = JavaCore.createCompilationUnitFrom(file);
ASTParser parser = ASTParser.newParser(AST.JLS3);
parser.setKind(ASTParser.K_COMPILATION_UNIT);
parser.setResolveBindings(true);
parser.setSource(unit);
// Parse the source code and generate an AST.
CompilationUnit ast = (CompilationUnit) parser.createAST(null);

如果文件是新创建的并且是空白的,那么可能AST将是空的,然后您可以替换ast对象的根并将其写入文件。此外,如果您没有绑定到Eclipse,您可以使用JSR199标准做同样的事情,并以正常方式将该AST写入文件。有关介绍,请参见此处。

 类似资料:
  • 问题内容: 我正在尝试使用Go写入日志文件。 我尝试了几种方法,但都失败了。这是我尝试过的: 日志文件被创建,但是没有任何打印或附加到该文件。为什么? 问题答案: 过去的工作方式一定不同,但这对我有用: 基于Go文档,不能用于,因为它会打开文件“供阅读:” 打开命名文件以供读取。如果成功,则可以使用返回文件上的方法进行读取;关联的文件描述符具有mode 。如果有错误,它将是类型。 编辑 检查后移至

  • 问题内容: 我有一个结果RDD 。输出格式如下: 我想要的是创建一个CSV文件,其中一列用于(上面输出中的元组的第一部分),另一列用于(元组输出的第二部分)。但我不知道如何使用Python在Spark中写入CSV文件。 如何使用上述输出创建CSV文件? 问题答案: 然后只需将RDD()的行转换为字符串(CSV的行)即可。

  • 问题内容: 据我所知,将Java源代码解析为AST(抽象语法树)的唯一方法是使用Java编译器树API:com.sun.source.tree 我有两个问题: 哪些JDK支持com.sun.source.tree? 是否有适用于所有JDK的便携式替代产品? 问题答案: 您可以使用tools.jar并使用它。 javac是开源的,因此您只需获取该代码即可(假设您可以处理许可证)。 Antlr也具有J

  • 问题内容: 我一直在尝试将数组写入文件。我知道如何将整数或字符串写入文件,但是要带一个数组会使我感到困惑。我现在正在使用这个: 问题答案: 就像其他人说的那样,您可以循环遍历数组并逐个打印出元素。为了使输出显示为数字而不是您看到的“字母和符号”,您需要将每个元素转换为字符串。因此,您的代码将如下所示: 如果您只想打印类似的数组,则可以使用此衬纸替换循环:

  • 我决定使用slf4j而不是Java自己的日志记录。我已经成功地使用SLF4J登录到控制台。但我不知道如何将其写入日志文件。日志文件将帮助我们收集运行时可能出现的错误。 我通过这样做来实现slf4j, 私有静态最终org.slf4j.LOGGER LOGGER=org.slf4j.loggerfactory.getlogger(class1.class); PropertyConfigurator.

  • 问题内容: 有什么方法可以将错误日志或异常写入Java文件中。我已经通过Log4j。我用谷歌搜索,但是努力找到了一个好的解决方案。我写了一个简单的代码 还有其他方法可以记录错误或异常吗?有谁可以向我提供Log4j的示例示例? 问题答案: 首先阅读log4j手册,配置滚动日志文件很容易。您不必执行任何显式的文件操作。 其次,每当您遇到异常时,都应这样做 值得阅读手册。甚至最好阅读完整的log4j手册