2017-04-26 83 views
0

我正在按照教程here這是關於實現一個簡單的基於堆棧的python字節碼解釋器。python字節碼解釋器實現

我在這個函式有問題:

def parse_byte_and_args(self): 
    ......... 
    if byteCode >= dis.HAVE_ARGUMENT: #<-----------------------this part 

究竟是什麼dis.HACE_ARGUMENT?因爲它的一個很大的功能,我想不要在這裏發佈,而是給它鏈接。如果它需要讓我知道

回答

0

在你定義的函數的上下文中,你試圖處理一個操作碼(指令)可能有也可能沒有與之相關的論點。

如果你看看Python disassembler documentation for HAVE_ARGUMENT,你會發現dis.HAVE_ARGUMENT正是用於此目的。

也就是說,如果byteCode> = dis.HAVE_ARGUMENT,那麼操作碼有參數,您需要弄清楚如何處理它們。否則,操作碼沒有參數,並且不需要額外的處理。

要小心,因爲根據我上面鏈接的文檔,這稍微改變爲Python 3.6

+0

謝謝,我現在明白了。你能建議任何其他來源來學習字節碼解釋器 – anekix

+0

該函數也有這個語句'arg_val = arg [0] +(arg [1] * 256)'。爲什麼乘以256? – anekix

+0

在我編寫口譯員的短暫時期內,我發現查看兩種不同類型的資源很有幫助:解釋概念(如維基百科等)的通用資源以及涉及某人自己的定製實現的特定資源。後者的示例:[可擴展解釋器開發工具包](http://www.parsifalsoft.com/examples/xidek/xidek/doc/bcidefs.htm)和[我最重要的項目是一個字節碼解釋器](https:// news.ycombinator.com/item?id=12553591) – DatHydroGuy

相關問題