【问题标题】:Using CDT's Abstract Syntax Tree API to generate/write C code?使用 CDT 的抽象语法树 API 生成/编写 C 代码?
【发布时间】:2012-12-21 06:57:20
【问题描述】:

我已经能够使用 CDT 的 AST API 成功解析源代码。我的问题正好相反:如何以编程方式构建 C AST,然后告诉它自己写入文件?我已经看过 ASTWriter 类(但那是内部的)并且找不到任何关于构建实际 AST 的教程或文档。

我找到了一篇论文,其中包含了我想要做什么的想法:Generating Rewritable Abstract Syntax Trees 如果我可以构建树并说“自己编写”,那么生成代码似乎会很容易。这在 CDT 中是否可行?我该如何开始(最好没有弃用/内部方法?)

【问题讨论】:

  • 您是对基于 CDT 的解决方案更感兴趣,还是对任何可以让您为 C 构建/转换任意 AST,然后漂亮打印结果的解决方案更感兴趣?
  • 由于重点改变产生这个问题的项目,这不再是主要需求。如果我们重新审视它,我更喜欢基于 CDT 的解决方案(如 Eugene 提到的重构解决方案),因为该项目是一个基于 Eclipse 的插件。

标签: java eclipse eclipse-cdt abstract-syntax-tree


【解决方案1】:

您需要的是使用 ASTWriter:

ASTWriter writer = new ASTWriter()
String code = writer.write(myAST);

然后您可以将字符串转储到 Eclipse 资源插件上下文中的文件中。

【讨论】:

    【解决方案2】:

    我建议您从探索CRefactoring 及其子类(例如ExtractFunctionRefactoring)开始。

    CDT 重构框架试图解决的问题有很多:

    1. 让用户在实际将更改提交到源代码之前预览更改。
    2. 操作未保存的文件错误(例如,在未保存的源代码编辑器中重构代码)
    3. 尊重新生成代码中的用户代码格式设置。
    4. 跨多个源文件的可撤销事务。

    我很确定,即使您不需要所有这些功能,这两个类也应该是一个很好的起点。

    【讨论】:

    • 谢谢。我的问题更多的是源文件的一次性生成,所以我什至没有考虑重构,但在你发布的类中,我发现了一个很有前途的类,叫做 INodeFactory。结合wiki.eclipse.org/images/b/be/…我(希望!)我可以从这里弄清楚。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多