我有一个自定义的基于堆栈的语言,我试图编译为CIL,因此它可以被JITed。语言本身非常简单,因为它只有整数和布尔值。但是,每种数据类型都有一个专用堆栈。语言本身是一个命令流,每个命令都可以从任一堆栈中窥视,推送和/或弹出值。由命令推送/放置的整数或布尔值的数量不会改变(因此命令具有固定的义数)。还有一个扁平的整型数组,语言读取和写入数值,代表外部存储器。堆栈本身可以是任意深的。编译基于堆栈的语言CIL
对于简单的命令如“add”,“subtract”等,将整数堆栈命令转换为CIL几乎很简单:CIL堆栈可以批量替换整数堆栈(尽管我有一个问题:是否存在在规范或实践中,CIL堆栈的深度有多大?)但是也有类似StoreIfTrue的命令,它只会在某个索引处存储一个值(从整数堆栈)到平坦整数数组(索引也是来自整数堆栈)如果布尔堆栈的最高值为真。所以我需要同时访问一些命令的布尔堆栈和整数堆栈。
现在我要保持System.Collections.Generic.Stack表示布尔堆栈。但是我想知道是否有一种已知的算法或方法可以将我的自定义语言的两个堆栈模型“拼合”成一个与CIL更直接兼容的堆栈模型。
的CIL堆栈是类型更小,它可以处理和混合整数和布尔变量。应该有一种方法可以将多堆栈执行模型转换为无类型的单堆栈,但从您的问题中不清楚应该如何实现。 – 2012-07-21 10:34:08