我正在为编程语言创建基于堆栈的虚拟机。到目前为止事情进展顺利,我有这些操作。
但我的问题是,我需要添加什么样的指令来使用条件,循环和函数等东西?
答案 0 :(得分:1)
至少你需要一个有条件的GOTO。根据您的语言如何处理数据,该指令可能只是弹出堆栈中的最后一个元素,检查它是0还是1然后跳过固定数量的字节/指令,或者什么也不做(通常是跳转位置在指令本身中编码。)
但通常你也会添加一些测试指令或比较指令,这些指令或比较指令通常将最后两个元素从堆栈中弹出,以某种方式比较它们,然后在堆栈上按0或1来表示它们是否相等。通常,比较表达式等同于公共比较运算符,即<,>,< =,> =,=,!=。
你还需要一个无条件的GOTO,这通常是一个单独的指令,但也可以通过在你点击GOTO之前在堆栈上按1来实现。
BTW,我在博客文章中写了关于创建编译器和字节码解释器的详细信息:http://orangejuiceliberationfront.com/how-to-write-a-compiler/
答案 1 :(得分:0)
对于您需要的条件
对于循环,你有足够的,但FOR循环可能有自己的
对于您需要的功能
对于变量和数组:
对于表达式,大多数事情都是根据需要调用的库函数。要保持VM较小并将大部分代码放入库中,还有很多要说的。
您只需使用这些说明即可实现大多数非面向对象的语言。 OOPS需要更多。
JVM和CLR已有详细记录,因此请阅读他们的工作并考虑使用什么。还有很多其他虚拟机和很多想法。