0

我正在为我自己定义的语言开发一个编译器,我已经生成了3 个地址代码,现在我要开发一个可以运行该 3 个地址代码的虚拟机。但为此我需要数据段(我可以在其中存储所有变量值)。我的语言中有两种数据类型(int 和 char)。
请给我一个提示,我如何构造一个数据段,我可以在其中存储我的所有变量(int 和 char 两者)值
感谢阅读我的问题

4

1 回答 1

2

我强烈推荐阅读 C.Queinnec 的书Lisp In Small Pieces;它很好地解释了很多与您的问题相关的事情。

虽然 C.Queinnec 的书显然侧重于类似 Lisp 的语言,但它教给您的概念可以应用于许多其他语言,包括您自己的语言。特别是,您需要将语言的指称语义操作语义形式化更多。

你至少也可以学习一些虚拟机,包括Ocaml 虚拟机JVMParrot VMNekoVMLUA VM ...

而且您以后可能想要使用即时编译技术,特别是使用LLVMlibjit等...

另见http://lambda-the-ultimate.org/

顺便说一句,您可能会发现让您的语言实现重用一些现有的 VM 会更方便。

我不明白为什么数据段是这样的问题。你的虚拟机通常以一些堆映像开始,其中包含数据和字节码。许多语言都有(至少是隐式的)闭包——或者至少是对象——混合代码和数据。

于 2013-04-27T15:52:07.317 回答