2010-11-14 56 views
1

你好,我正在寻找一些方向或选择参考。 我正在构建一个编译器,但我希望它能够处理异构类型(如C结构)。一个数组是同质的。 我想知道理论,我知道已经有技术和方法,比如修改变量和东西表中的内容。我发现在鹿丹的书的东西,但它是不完整=(解释它留在空气中。记录类型中间代码生成

我一直在使用Google,但我不知道该怎么google一下....

我将不胜感激如何找到现有的一些理论导向和代码生成,和这样的。

语言是静态类型的

+1

您的语言输入方式如何? – Tobu 2010-11-14 03:41:40

+1

内存是如何管理的? – Tobu 2010-11-14 04:21:49

回答

1

如果foo是一个记录类型与领域ab和类型tactbtc,则foo的值可以表示为大小为sizeof(ta) + sizeof(tb) + sizeof(tc)的大块存储器。

如果你的运行时环境(垃圾收集器,反射设施)需要额外的信息存储的每一个值,你需要预留空间,这点。

现在,如果你有foo类型和访问的值x例如b(通过编写x.b或任何您的语言的字段访问语法),可以将其编译为将sizeof(tb)添加到地址x,然后在该地址读取类型tb的值。

您可能还需要添加一些填充如果记录的类型有不同的尺寸。

而这一切就是它基本上是这样。