Lua虚拟机
虚拟机内部流程
虚拟机的输入就是源码文件,输出是代码执行结果。内部流程分为以下几个环节:
虚拟机执行过程
读取文件:一个代码文件作为一个长字符串读入。
词法分析:根据lua语法进行简单的单词切分,每个单词称为token,token有多个类型,比如 “local a=18”可以拆分为local、a、=、18这4个token,对应的类型分别为“保留字”、“变量”、“等号”、“数字”。
语法分析:检查是否满足lua语法,比如 function要以end结束,若发现有语法错误,立即报错停止执行。
生成中间字节码:若满足语法规则,可生成对应的字节码,比如 “local a=18”对应的字节码为 “loadk 0 0”,第一个0表示变量a所在的位置,第2个0表示常量18所在的位置,即将常量18赋给变量a。
执行字节码:生成字节码列表后,从第一行开始逐行执行,根据字节码的opcode执行对应的逻辑。
简言之就是,源码文件 -> 中间字节码 -> 虚拟机执行字节码