luapy
孤舟钓客
人生如梦,梦何曾醒?不过旧愁新怨。但无他。回首向来萧瑟处,也无风雨也无晴。夜阑风静彀纹平,小舟从此逝,江海寄馀生。
展开
-
luapy (4) lua operator
1)operator(arithmetic, compare)from enum import Enum, unique@uniqueclass ArithOp(Enum): ADD = 0 # + SUB = 1 # - MUL = 2 # * MOD = 3 # % POW = 4 # ^ DIV = 5 ...原创 2018-12-21 07:14:32 · 226 阅读 · 0 评论 -
luapy (15) lua parser
1.parse expfrom lua_token import TokenKindimport lua_expfrom optimizer import Optimizerfrom lua_value import LuaValueclass ExpParser: @staticmethod def parse_exp_list(lexer): ex...原创 2019-01-13 21:11:21 · 538 阅读 · 0 评论 -
luapy (14) lua ast
1.exp"""exp ::= nil | false | true | Numeral | LiteralString | ‘...’ | functiondef | prefixexp | tableconstructor | exp binop exp | unop expprefixexp ::= var | functioncall | ‘(’ exp ‘)’var :...原创 2019-01-13 20:25:13 · 502 阅读 · 0 评论 -
luapy (13) lua lexer
token kindclass TokenKind: EOF = 0, # end-of-file VARARG = 2, # ... SEP_SEMI = 3, # ; SEP_COMMA = 4, # , SEP_DOT = 5, # . SEP_COLON = 6,...原创 2019-01-03 07:15:58 · 379 阅读 · 0 评论 -
luapy (9) closure and upvalue
1) closureclass Closure: def __init__(self, proto, py_func, n): self.proto = proto self.py_func = py_func self.upvals = [] if proto and len(proto.upvalues) > 0:...原创 2018-12-26 07:12:22 · 165 阅读 · 0 评论 -
luapy (12) lua exception
error, pcall def error(self): err = self.stack.pop() raise Exception(err) def pcall(self, nargs, nresults, msgh): caller = self.stack try: self.c...原创 2018-12-29 22:27:19 · 3394 阅读 · 0 评论 -
luapy (11) lua iterator
lua tableimport collectionsfrom lua_value import LuaValueclass LuaTable: def __init__(self, narr, nrec): self.arr = None self.map = None self.metatable = None ...原创 2018-12-29 22:17:09 · 259 阅读 · 0 评论 -
luapy (3) lua state
1)lua 数据类型from enum import Enum, unique@uniqueclass LuaType(Enum): NONE = -1 NIL = 0 BOOLEAN = 1 LIGHT_USER_DATA = 2 NUMBER = 3 STRING = 4 TABLE = 5 FUNCTION = 6 ...原创 2018-12-18 21:15:07 · 326 阅读 · 0 评论 -
luapy (8) python function call
1) closureclass Closure: def __init__(self, proto, py_func): self.proto = proto self.py_func = py_func2) registryfrom lua_stack import LuaStackfrom lua_type import LuaTypefr...原创 2018-12-23 22:38:21 · 441 阅读 · 0 评论 -
luapy (7) lua function call
load and callfrom lua_stack import LuaStackfrom lua_type import LuaTypefrom lua_value import LuaValuefrom arith_op import ArithOpfrom arithmetic import Arithmeticfrom cmp_op import CmpOpfrom ...原创 2018-12-23 20:22:25 · 640 阅读 · 0 评论 -
luapy (2) instruction set
Lua VM 是基于寄存器(Register Based) 虚拟机,采用4字节定长指令(Fixed width),其中opcode 6 bits,operand 26 bits,Lua 5.3 共有47条指令。编码模式:iABC: A, B, C 三个操作数,分别8,9,9 bitsiABx: A, Bx两个操作数,分别8, 18 bitsiAsBx: A, sBx 两个操作数,分别8,1...原创 2018-12-18 02:11:50 · 340 阅读 · 0 评论 -
luapy (6) lua table
1)lua tablefrom lua_value import LuaValueclass LuaTable: def __init__(self, narr, nrec): self.arr = None self.map = None if narr > 0: self.arr = [] ...原创 2018-12-22 19:52:41 · 250 阅读 · 0 评论 -
luapy (5) lua vm
修改lua statefrom lua_stack import LuaStackfrom lua_type import LuaTypefrom lua_value import LuaValuefrom arith_op import ArithOpfrom arithmetic import Arithmeticfrom cmp_op import CmpOpfrom co...原创 2018-12-22 16:06:34 · 329 阅读 · 0 评论 -
luapy (10) metatable and metamethod
1)metatable and metamethodclass LuaTable: def __init__(self, narr, nrec): self.arr = None self.map = None self.metatable = None if narr > 0: self.a...原创 2018-12-27 23:12:56 · 186 阅读 · 0 评论 -
luapy (1) -- lua binary chunk
0)lua test codefunction test() print("Hello World")endtest()➜ test luac -vLua 5.3.5 Copyright (C) 1994-2018 Lua.org, PUC-Rio➜ test luac -o hello.luac hello.lua➜ test xxd -u -g 1 hell...原创 2018-12-16 21:42:31 · 608 阅读 · 0 评论 -
luapy (0)
一直想学习点编译、虚拟机相关的东西,最近看到一本有趣的书《自己动手实现Lua:(虚拟机、编译器和标准库)》,作者张秀宏。书中代码用Go实现的,git提供了java实现。本博客以学习本书相关代码为目的,尝试用python3实现简单的Lua编译器、虚拟机。lua binary chunk...原创 2018-12-16 21:33:57 · 794 阅读 · 0 评论 -
luapy (16) code gen
1.func infofrom lua_opcode import OpCodefrom lua_token import TokenKindfrom lua_opcode import Instructionfrom lua_value import LuaValuefrom prototype import Prototypefrom upvalue import Upvalue...原创 2019-03-10 19:58:01 · 289 阅读 · 0 评论