2017-04-26 28 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

相关问题