lua源码学习篇一:环境部署
研究生即将毕业,答辩完成后,这几天有些时间。开始写一些自己的东西,记录自己的学习历程。
--前言
本着学习和交流的原则,本文的内容仅供参考,而不是权威版本,如有任何问题,欢迎指出。
--声明
跨专业考计算机研究生,至今三年已过,期间有过很多的迷茫,也经历了一些挫折。但是,对编程技术的强烈好奇心驱使我不断前行。我想,大多数爱好计算机的同学,也成想过自己能够创造出一门编程语言,或者至少对编程语言的运行的原理有一个清晰的认识。
这时候,其实要学的东西很多,特别是我这种跨专业的同学。比如说,编译原理一门课,就够喝上一壶的了。还有计算机组成原理,汇编语言等等。有很多时候,提起勇气想要去学习一下,可能会被这复杂的理论知识吓蒙,就算能坚持一段时间地学习,也会因为理论太枯燥没有相应地实践而放弃,对这个领域的知识望而却步。
因此,我决定从lua语言开始,核心代码只有一万多行,涉及编译的更少。当然关于虚拟机的指令已经垃圾回收的问题,现在还没有去看。主要是想对lua的词法分析和语法分析进行一个学习性地记录。由于lua是纯C语言写成的脚本语言,因此,学习lua源码要先会C的基础知识,同时看过一些编译原理前段的部分知识,即词法和语法分析。
lua是一个动态执行的脚本语言。在实际的运行过程中不会先生成编译文件再执行,而是边解释边执行,也就是说,一边读取程序文件,一边将源程序翻译成相应地指令交给虚拟机执行。lua解释的过程不会生成语法树,而是在语法分析的同时进行词法分析。今天第一篇先讲一下如何调试lua编译源码的。
下载lua源码,不需要编译,将src下的源码导入到visual studio.这个过程不会的可以去网上学习。
lua源码是纯C的,所以就当做程序直接运行。首先是找到lua.c, luac.c, 里面都有一个main函数,先把lua.c里面的main函数改成lua_main。这样全局只有一个main函数,就是在luac里面。
右击“解决方案”->属性->调试->命令参数, 输入luac的运行参数,本文示例:-l "F:\\lua\\lt1.lua"。其中 -l 代表luac 的打印中间码,第二个参数是自己的lua程序文件所在的路径,里面可以随便写一个lua语句。然后就是打断点一步步调试了。
done。
lua源码学习篇一:环境部署的更多相关文章
- lua源码学习篇三:赋值表达式解析的流程
上节说到表达式的解析问题,exprstate函数用于解析普通的赋值表达式.lua语言支持多变量赋值.本文先从单变量赋值表达式讲起. a = b = c = a + b 对于简单的两个数的求和过程,lu ...
- lua源码学习篇四:字节码指令
在llimits.h文件中定义了指令的类型.其实就是32个字节. typedef lu_int32 Instruction; 上节说到变量最终会存入proto的数组k中,返回的索引放在expdesc ...
- lua源码学习篇二:语法分析
一步步调试,在lparser.c文件中luaY_parser函数是语法分析的重点函数,词法分析也是在这个过程中调用的.在这个过程中,用到一些数据结构,下面会详细说. Proto *luaY_parse ...
- spring源码学习之路---环境搭建(一)
作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 最近已经开始了spring源 ...
- JUnit 3.8.1 源码学习
JUnit 3.8.1 源码学习 环境搭建(源码加载配置) 由于IDE自身含有JUint插件,因此通过正常途径是没有源码加载入口的,因此需通过手动加载扩展JAR,然后再添加对应源码JAR,如图:项目右 ...
- Redis源码学习:Lua脚本
Redis源码学习:Lua脚本 1.Sublime Text配置 我是在Win7下,用Sublime Text + Cygwin开发的,配置方法请参考<Sublime Text 3下C/C++开 ...
- Hadoop源码学习笔记之NameNode启动场景流程一:源码环境搭建和项目模块及NameNode结构简单介绍
最近在跟着一个大佬学习Hadoop底层源码及架构等知识点,觉得有必要记录下来这个学习过程.想到了这个废弃已久的blog账号,决定重新开始更新. 主要分以下几步来进行源码学习: 一.搭建源码阅读环境二. ...
- Vue源码学习(一):调试环境搭建
最近开始学习Vue源码,第一步就是要把调试环境搭好,这个过程遇到小坑着实费了点功夫,在这里记下来 一.调试环境搭建过程 1.安装node.js,具体不展开 2.下载vue项目源码,git或svn等均可 ...
- 源码学习系列之SpringBoot自动配置(篇二)
源码学习系列之SpringBoot自动配置(篇二)之HttpEncodingAutoConfiguration 源码分析 继上一篇博客源码学习系列之SpringBoot自动配置(篇一)之后,本博客继续 ...
随机推荐
- ipcs - 提供基于 ipc (Inter-process communication)结构的信息
总览 ipcrm [ shm | msg | sem ] id 描述 ipcrm 将删除指定的资源--指定 id.
- Sublime Text2 常用快捷键总结
Ctrl+Tab 当前窗口中的标签页切换 Ctrl+Shift+D 复制光标所在整行,插入在该行之前 Ctrl+Shift+K 删除整行 Ctrl+Shift+/ 注释已选择内容 Ctrl+Shift ...
- @ResponseStatus注解作用
@ResponseStatus注解有两种用法,一种是加载自定义异常类上,一种是加在目标方法中 这里我们说一下加在目标方法上的这种情况,注解中有两个参数,value属性设置异常的状态码,reaseon是 ...
- Gym-100923L-Por Costel and the Semipalindromes(进制转换,数学)
链接: https://vjudge.net/problem/Gym-100923L 题意: Por Costel the pig, our programmer in-training, has r ...
- CodeForces-707B(思维)
链接: https://vjudge.net/problem/CodeForces-707B 题意: Masha wants to open her own bakery and bake muffi ...
- 第六章 Linux文件与目录管理
http://www.92csz.com/study/linux/6.htm 绝对路径:路径的写法一定由根目录”/”写起 相对路径:路径的写法不是由根目录”/”写起 mkdir 创建一个目录.mkdi ...
- 【NOIP2014模拟10.25A组】画矩形
题目 分析 由于要求按时间顺序来操作,考虑整体二分: 对于一段二分出来的区间,将左区间的修改和右区间的查询取出来,每次更新每个查询的答案,正确性显然. 现在有一对修改和查询的操作(保证所有的查询都在修 ...
- Kafka(华为FusionInsight )操作命令
华为大数据kafka操作web界面创建角色.用户.用户管理角色进入服务器环境,进入客户端目录/opt/hadoopclient,导入环境变量source bigdata_env.切换用户kinit k ...
- jquery lt选择器 语法
jquery lt选择器 语法 作用::lt 选择器选取带有小于指定 index 值的元素.index 值从 0 开始.经常与其他元素/选择器一起使用,来选择指定的组中特定序号之前的元素(如上面的例子 ...
- html abbr标签 语法
html abbr标签 语法 作用:标记一个缩写 大理石平台 说明:<abbr> 标签指示简称或缩写,比如 "WWW" 或 "NATO".通过对缩写 ...