【问题标题】:Java / Abstract Syntax Tree into XML representationJava / 抽象语法树转化为 XML 表示
【发布时间】:2014-05-04 10:58:41
【问题描述】:

您知道任何从 Java 程序或类创建 AST 并从 AST 创建 XML 表示(集合或单个 XML 文档)的工具吗?

亲切的问候,
约翰内斯

【问题讨论】:

    标签: java xml abstract-syntax-tree


    【解决方案1】:

    不是直接的任何工具,但http://www.antlr.org/ 是从任何通用语言构建 AST 的事实上的工具。并且存在几个 Java 语法文件,您可以将它们重新用于您自己的程序。所以抓住 ANTLR,使用最新的 Java 语法,写出你想要的 XML 表示。

    【讨论】:

      【解决方案2】:

      我们的DMS Software Reengineering Toolkit 及其Java Front End 可以直接执行此操作。您要求 DMS 解析文件,并使用命令行开关 ++XML 生成 XML 转储。

      What would an AST (abstract syntax tree) for an object-oriented programming language look like?

      一般来说,我们不建议这样做,原因如下:

      • 真实文件的 XML 输出非常庞大,写入和读取需要大量时间

      • 大多数人这样做是因为他们相信通过 XML 表示,只需一点点 XSLT 就能得到他们想要的东西

      • 如果您打算修改代码,一旦获得 XML,您几乎无法重新生成它。

      • DMS 提供的机制(属性语法、符号表、流分析、模式匹配和源到源转换、从 AST 重新生成源)是您真正想要的,您可以通过以下方式访问它在解析步骤之后使用 DMS 而无需导出 XML

      【讨论】:

      • 我不同意——如果你完全接受 XML,在某些情况下它肯定是 AST 表示的一个选项,而且确实一点点 XSLT 或 XQuery 可能只是你想要的.理想情况下,AST 的 XML 表示是作为原始输入的标记完成的,因此您可以通过简单地获取字符串值来完全重新生成。尺寸和处理时间有时是可以接受的。我不会为每一个解析工作推荐它,但也不会取消它的资格。
      • @Guthner:如果它适合你,那很好。我的经验是,除非你想做一些非常简单的事情(例如,充其量只是简单的语法),否则这对你不起作用。当您需要有关符号的任何信息或有大量代码要处理时,它会失败。
      • 是的,我可能想在某种程度上可视化 AST 的演变,只是为了演示一个分层可视化工具的简单用例。我想我必须使用ANTLR,因为DMS 很可能不是开源的,我们正在研究版本化树结构数据和secure 云存储领域。我目前正在使用 FSMap 将一些目录从我的桌面映射到带有一些元数据的 XML 表示,但 AST 的演变可能也很有趣。但也许它对开发人员来说太低了,一个简单的基于行的差异就足够了,我不知道。
      • 嗯,ANTLR 可能会产生一个 AST。如果你想要的 all 是语法,ANTLR 可能没问题。我的经验是,在不知道定义和类型是什么的情况下,您无法使用编程语言做很多事情,而且我认为您不会通过 Java 的 ANTLR 语法获得 OTS。
      • ....基于)的工具,通过比较它们的 AST 来比较程序的两个版本,但报告源文本方面的差异。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-30
      相关资源
      最近更新 更多