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自动配置(篇一)之后,本博客继续 ...
随机推荐
- Js不用for,forEach,map等循环实现九九乘法表
var str='';function mt(p,n){ if(p<10){ if (n<=p){ str += n+'*'+p+'='+p*n+'\t'; n++; mt(p,n); } ...
- ping命令的七种用法
能不能讲下ping命令的使用,其实对于命令的使用我们之前提到过一些,但对ping命令没有过多讲解,一般我们用的都是它的基本功能,今天我们来详细看下ping命令详细使用. 一.ping基本使用详解 在网 ...
- Minor GC、Major GC、Full GC、分配担保
转载:http://www.importnew.com/15820.html 空间分配担保 区别 在 Plumbr 从事 GC 暂停检测相关功能的工作时,我被迫用自己的方式,通过大量文章.书籍和演讲来 ...
- 为什么现在UML很少用了
新霸哥发现UML在面向对象的设计中的需求,相关行为.一些体系结构的实现提供了一套综合完整的表示法,但是由于使用的人比较少,初学者不容易快速入门,所以就导致了UML不是那么的受欢迎. UML在开发中有什 ...
- 生产服务器上安装Python
2018-05-17 生产环境的服务器(以下简称内网服务器)由于安全限制,可能无法连接外网.这种情况下将无法直接使用pip命令安装python的包 一.更改pip源 - 默认pip是使用Python官 ...
- SSH整合——登录模块
1.导包——参照我的GitHub Hibernate hibernate/lib/required hibernate/lib/jpa 数据库驱动 Struts2 struts-blank.war/W ...
- Tensort之uff
# This sample uses a UFF MNIST model to create a TensorRT Inference Engine from random import randin ...
- CSS3 transform 属性 旋转 div 元素
div { transform:rotate(7deg); -ms-transform:rotate(7deg); /* IE 9 */ -moz-transform:rotate(7deg); /* ...
- ACR095 删一个求中位数 贪心求最大组合数 行列变换模拟(搜索)
A B #include <bits/stdc++.h> #define PI acos(-1.0) #define mem(a,b) memset((a),b,sizeof(a)) #d ...
- SpringMVC 向前台页面传值-ModelAndView
ModelAndView 该对象中包含了一个model属性和一个view属性 model:其实是一个ModelMap类型.其实ModelMap是一个LinkedHashMap的子类 view:包含了一 ...