stack-machine

    1熱度

    1回答

    我已經爲簡單的堆棧機器編寫了一個小型編譯器。它只能通過大量的虛擬機黑客來組裝和處理範圍/功能。那是我在字節碼本身中定義了作用域和範圍變量定義。 我可以得到一些關於如何處理範圍的指示。 我面臨的問題主要是,我如何讓它知道什麼時候以及何時不用覆蓋外部變量的變量以及類似的內容。字節碼是可變的,我寧願改變它。 其他問題包括如何在返回後保留外部變量。所以變量仍然有其價值。我可以將它推入堆棧,但我可能有很多變

    0熱度

    1回答

    對於我的課,我必須寫一個編譯器爲Python的一小集: 這種語言有一個方法 有沒有的功能,所以我'm只處理一個詞法範圍 該Python子集將被轉換爲Java字節碼。 我已經完成了詞法分析和解析樹(使用lex和yacc)。 我一直在代碼生成。 我們使用Gnoloo代碼生成,一個堆棧機器語言。 問題是我不知道如何存儲變量。我知道我必須使用符號表,但我不知道如何填寫它。 我必須存儲變量的值嗎? 如果代碼

    1熱度

    1回答

    基於堆棧的虛擬機(如CLR和JVM)具有不同的指令集。在創建虛擬機時,是否有任何理論在設計指令集?例如有JVM指令集來加載從0-5常量到堆棧 iconst_0 iconst_1 iconst_2 iconst_3 iconst_4 iconst_5 而在CLR有指令集以從0數加載到8到堆棧如下 ldc.i4.0 ldc.i4.1 ldc.i4.2 ldc.i4.3 ldc.i

    3熱度

    1回答

    所以我編譯C的一個子集,以一個簡單的堆棧虛擬機用於學習目的,我想知道如何以最佳方式編譯一個switch語句,例如 switch (e) { case 0: { ... } case 1: { ... } ... case k: { ... } } 這本書我經歷提供了一個簡單的方式與索引跳躍而書中描述的簡單方案僅適用於連續的,上升的情況下值的範圍進行編譯

    7熱度

    2回答

    我正在編寫一個相當標準的堆棧機器的編譯器。現在我想添加一個垃圾收集器。我可以看到我可以生成某種「堆棧映射」來知道哪些變量是每個激活記錄中的gc根。但是,我不知道如何處理在執行過程中壓入堆棧的中間值。我正在編譯的語言與Pascal相似,所以我不需要,也不想使用標記來識別來自其​​他數據類型的指針。 我希望任何提示/如何 在任何時間點查找堆棧GC根指針(即,如何識別哪些已在堆棧已經被推的中間值是GC根

    9熱度

    1回答

    我正在研究堆棧機器的編譯器(特別是CIL),並將代碼解析爲基本塊的圖形。從這裏我正在尋找SSA的方法,但它不太好。我的第一次嘗試(同時使用平面列表而不是圖)是迭代代碼並保留一堆SSA id(即分配目標),當我產生一個任務時推送它們,當它彈出時彈出他們被使用。這對於單個基本塊來說工作得很好,但我根本無法弄清楚如何處理生成Φ函數。 我一直在徘徊的想法是將堆棧位置附加到SSA ID,然後在代碼路徑收斂時

    4熱度

    2回答

    我很好奇,如果有人有任何真正優秀的教程/文章/書籍來了解一般堆棧機器,尤其是JVM。我知道這些的: http://www.artima.com/insidejvm/applets/EternalMath.html http://www.ibm.com/developerworks/ibm/library/it-haggar_bytecode/ http://www.theserverside.co