2017-04-26 1 views
0

Je suis un tutoriel here qui consiste à implémenter un interpréteur de code python byte basé sur une pile simple.Implémentation de l'interpréteur python bytecode

j'ai problème dans ce funciton:

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

ce qui est dis.HACE_ARGUMENT exactement? puisque c'est une grande fonction je pensais ne pas l'afficher ici plutôt donner un lien à it.if son requis me le faire savoir

Répondre

0

Dans le contexte de la fonction que vous définissez, vous essayez de traiter un opcode (instruction) qui peut ou non avoir des arguments qui lui sont associés.

Si vous regardez le Python disassembler documentation for HAVE_ARGUMENT, vous verrez que dis.HAVE_ARGUMENT est utilisé exactement à cet effet. C'est-à-dire, si byteCode> = dis.HAVE_ARGUMENT, l'opcode a des arguments et que vous devez savoir quoi faire avec eux. Sinon, l'opcode n'a aucun argument et aucun traitement supplémentaire n'est requis.

Prenez soin, car selon la documentation que je lien ci-dessus, cela a changé légèrement de Python 3.6

+0

merci, je l'ai maintenant. pouvez-vous suggérer n'importe quelle autre source pour apprendre un interpréteur de code octet – anekix

+0

cette fonction a également cette déclaration 'arg_val = arg [0] + (arg [1] * 256)'. pourquoi multiplication par 256? – anekix

+0

Pendant ma courte période d'écriture d'interprètes, j'ai trouvé utile de regarder deux types de ressources: les ressources génériques qui expliquaient les concepts (tels que wikipédia, etc.) et les ressources spécifiques qui impliquaient une implémentation sur mesure. Des exemples de ce dernier: [Extensible Interpreter Development Kit] (http://www.parsifalsoft.com/examples/xidek/xidek/doc/bcidefs.htm) et [Mon projet le plus important était un interpréteur bytecode] (https: // news.ycombinator.com/item?id=12553591) – DatHydroGuy