以可解析的格式序列化AST

时间:2011-04-25 23:28:57

标签: compiler-construction backend abstract-syntax-tree

我有一个带有Java前端的DSL,我想以一些易于解析的格式序列化我在前端部分获得的AST,以便更容易编写一个后端部分,生成不同的代码编程语言。为此目的,有没有比XML更好的东西?

1 个答案:

答案 0 :(得分:4)

XML生成大量文本,而AST可能非常大。 (我构建解析器和)我们的解析器将生成XML,因为我们的客户要求它......但他们都没有实际使用它。恕我直言,最好设计一个密集编码树的自定义格式,以避免读取和写入AST所需的时间。例如,您可能会满足于:

( nodetype =value childnodes )

其中()是括号,(打开树节点,nodetype是表示节点类型的整数[甚至可能是高基数格式以最小化字符数],如果节点带有值,则存在=如果你考虑的话,你真的不需要=符号,并且提供了值。在结束之前内联子节点);如果他们在场,他们显然是从一个左派出发。不需要空间!如果你有时需要读取,你可以构建一个简单的哑工具,在你需要看到它时缩进括号。

[旧计时器会将此识别为LISP S表达式,并且自20世纪50年代后期开始作为树编码出现了。)

(我们完全避免这种情况,因为无论你如何操作,阅读和编​​写树都很昂贵,而且通常只需更简单,更高效地完成处理你在内存中的树,并吐出最后的答案)。