我正在为我自己定义的语言开发一个编译器,我已经生成了3 个地址代码,现在我要开发一个可以运行该 3 个地址代码的虚拟机。但为此我需要数据段(我可以在其中存储所有变量值)。我的语言中有两种数据类型(int 和 char)。
请给我一个提示,我如何构造一个数据段,我可以在其中存储我的所有变量(int 和 char 两者)值
感谢阅读我的问题
问问题
164 次
1 回答
2
我强烈推荐阅读 C.Queinnec 的书Lisp In Small Pieces;它很好地解释了很多与您的问题相关的事情。
虽然 C.Queinnec 的书显然侧重于类似 Lisp 的语言,但它教给您的概念可以应用于许多其他语言,包括您自己的语言。特别是,您需要将语言的指称语义或操作语义形式化更多。
你至少也可以学习一些虚拟机,包括Ocaml 虚拟机、JVM、Parrot VM、NekoVM、LUA VM ...
而且您以后可能想要使用即时编译技术,特别是使用LLVM或libjit等...
另见http://lambda-the-ultimate.org/
顺便说一句,您可能会发现让您的语言实现重用一些现有的 VM 会更方便。
我不明白为什么数据段是这样的问题。你的虚拟机通常以一些堆映像开始,其中包含数据和字节码。许多语言都有(至少是隐式的)闭包——或者至少是对象——混合代码和数据。
于 2013-04-27T15:52:07.317 回答