我有一個自定義的基於堆棧的語言,我試圖編譯爲CIL,因此它可以被JITed。語言本身非常簡單,因爲它只有整數和布爾值。但是,每種數據類型都有一個專用堆棧。語言本身是一個命令流,每個命令都可以從任一堆棧中窺視,推送和/或彈出值。由命令推送/放置的整數或布爾值的數量不會改變(因此命令具有固定的義數)。還有一個扁平的整型數組,語言讀取和寫入數值,代表外部存儲器。堆棧本身可以是任意深的。編譯基於堆棧的語言CIL
對於簡單的命令如「add」,「subtract」等,將整數堆棧命令轉換爲CIL幾乎很簡單:CIL堆棧可以批量替換整數堆棧(儘管我有一個問題:是否存在在規範或實踐中,CIL堆棧的深度有多大?)但是也有類似StoreIfTrue的命令,它只會在某個索引處存儲一個值(從整數堆棧)到平坦整數數組(索引也是來自整數堆棧)如果布爾堆棧的最高值爲真。所以我需要同時訪問一些命令的布爾堆棧和整數堆棧。
現在我要保持System.Collections.Generic.Stack表示布爾堆棧。但是我想知道是否有一種已知的算法或方法可以將我的自定義語言的兩個堆棧模型「拼合」成一個與CIL更直接兼容的堆棧模型。
的CIL堆棧是類型更小,它可以處理和混合整數和布爾變量。應該有一種方法可以將多堆棧執行模型轉換爲無類型的單堆棧,但從您的問題中不清楚應該如何實現。 – 2012-07-21 10:34:08