2011-04-25 47 views
2

我有Java的前端有一个DSL,我想序列化的AST,我在一些容易解析的格式前端部分得到,使其更易于编写后端一部分用不同的编程语言生成代码。为此目的有什么比XML更好的吗?序列化AST在解析的格式

回答

4

XML产生大量的文字和AST的可能是惊人的大。 (我构建解析器并且)我们的解析器将生成XML,因为我们的客户要求它......但它们都没有实际使用它。恕我直言,最好设计一种自定义格式来密集编码你的树,以避免读取和写入AST所花费的时间。例如,你可能会满足于:

(nodetype =value childnodes) 

其中()是括号,用(开树节点,将NODETYPE是代表甚至在高基数的格式,以尽量减少字符数节点类型的整数。 ],=如果节点携带一个值[如果你考虑它,你并不真的需要=符号],并且提供了该值,则在结束之前内联子节点。如果他们在场的话,他们显然是以左撇子开始的。不需要空间!如果您实际上需要请参阅,有时您可以构建一个简单的哑工具来在需要查看时缩进括号。

[老式计时器将此识别为LISP S表达式,并且自20世纪50年代后期以来一直以树编码形式出现]。

(我们完全避免这种情况,因为无论您如何操作,阅读和编​​写树木都很昂贵,而且它往往更简单,更高效地处理记忆中的树,只是吐出最终答案) 。

+1

我几乎总是使用类似于上面描述的S表达式。这样,后端生成可以使用函数绑定和评估来完成。 (例如,1 + 2变成(+ 1 2),并且“+”的计算结果为知道自己产生什么的函数,即“1”和“2”)。还可以使用后缀表达式,这些表达式可以更快地序列化,但是它们更难以阅读,并且难以用于堆叠机以外的其他东西。 – TechNeilogy 2011-04-26 23:46:29