• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

elua解析器开源文档第二章:2.2、lua解析器代码

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

目录

点击这里查看所有博文

2.2、lua解析器代码

  在上一节我们讲到了C标准库的重新实现。只要讲到了为什么要重新实现C标准库,既然csdk开发包中既然已经存在了newlib为什么还要在elua软件包中还要重新再写一遍这两个问题。

  那么费这么大劲搞着玩意,那么这个C标准库到底是给谁用的呢?

  它的使用对象,那自然是elua解析器了,那么本小节我们就一起来捋一遍lua解析器的代码。

  lua解析器位于elua/lua文件夹下,其代码结构如下图所示。

  lua解析器代码我这里将其分为三个大块,它们分别是虚拟机核心功能部分、源代码解析和预编译部分以及内嵌库部分。

注意:这是我个人对它源码的结构进行的划分,目的是方便理解,不是官方的定义,官方有没有这个结构的划分我也不清楚。

2.2.1、Lua内核

  lua内核顾名思义那就是lua的核心代码,负责的是lua虚拟机的运行、调度、内存管理、输入输出设备监视以及全局状态机的管理等功能。这些都是最基本的功能,虚拟机能够运行起来靠的就是内核在后面起作用。没有内核你搞那些乱七八招的东西没有意义。

  lua内核中的各个文件具体是干什么的,在下表也有说明。

源文件 功能
lvm.c Lua虚拟机
ltm.c 元方法
ldebug.c 调试接口
lzio.c 通用输入流接口
lstate.c 全局状态机 管理全局信息
ldo.c Lua的堆栈和调用结构
lfunc.c 函数原型及闭包管理
lobject.c 对象操作函数
lgc.c 垃圾回收机制
lapi.c Lua API
lmem.c 内存管理接口
lopcodes.c 虚拟机字节码定义
lua.c lua的可执行入口 main函数
lstring.c 字符串表(保留Lua处理的所有字符串)
ltable.c Lua表(哈希)

2.2.2、Lua解析和预编译

  Lua语言是一个解释性语言,它不是直接就能运行的。运行时需要将文件系统中的lua文件读取出来,然后需要将lua语句翻译成对应的c指令才能运行。那么这个解析功能就需要一个单独的模块来负责,它由内核控制主要负责lua脚本的词法分析、解析、编译等这些功能。

源文件 功能
lparser.c Lua的解析器
luac.c Lua编译器(将字节码保存到文件;也列出字节码)
ldump.c 保存预编译的Lua块
lundump.c 加载预编译的Lua块
llex.c Lua的词法分析器
lcode.c Lua的代码生成器

2.2.3、一些库函数

  除了让lua虚拟机能够运行起来,还要给它内置一写操作库函数。让它用起来更方便、更简单。要有化繁为简的本领,让用户使用起来更不易出错,这也是脚本语言的特色。

  下表中列出了lua解析器内部一些内置库的实现文件,主要是基础库、数学运算库、操作系统库、table库以及调试库。

源文件 功能
loadlib.c Lua的动态库加载器
liolib.c 标准I /O(和系统)库
loslib.c 标准操作系统库(这应该是协程)
lauxlib.c 用于构建Lua库的辅助功能
linit.c 初始化lua.c的库
ltablib.c 用于表操作的库
ldblib.c 从Lua到其调试API的接口
lmathlib.c 标准数学运算库
lbaselib.c 基础库
lstrlib.c 用于字符串操作和模式匹配的标准库
print.c 打印字节码

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
1-STM32嵌入LUA开发(控制小灯闪耀)发布时间:2022-07-22
下一篇:
LUA基础学习第一天发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap