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自动配置(篇一)之后,本博客继续 ...
随机推荐
- iOS和Android图标大小
iOS版 有关要求和指导原则适用于iOS的应用程序图标的更多详细信息,请参阅的iOS人机界面指南:图标和图像尺寸和技术Q&A QA1686:iPad和iPhone上的应用程序图标. 所有图标都 ...
- 2019-11-29-Roslyn-使用-Directory.Build.props-文件定义编译
title author date CreateTime categories Roslyn 使用 Directory.Build.props 文件定义编译 lindexi 2019-11-29 08 ...
- 2019-2020-1 20199319《Linux内核原理与分析》第二周作业
计算机是如何工作的 反汇编一个简单的C程序 1.在实验环境下,创建main.c,并进入该文件进行代码的编写 在VIM文本编辑器中编写完代码后按"Shift"+":&quo ...
- new、virtual、override
我们先看下面一段程序: public class Father { public void Run0() { Console.WriteLine("Father.Run0"); } ...
- Interviewe HDU - 3486 (ST表+枚举 )(非二分,看下这个数据、)
YaoYao has a company and he wants to employ m people recently. Since his company is so famous, there ...
- 说说关于洛谷P4779迪杰斯特拉的堆优化
众所周知,这题必须要用堆优化的迪杰斯特拉的堆优化才能过,否则60分(错失一等奖) 我没有得过一等奖但还是要说: P4779 全过程: struct node//堆中的比较函数 { int dis; i ...
- 动态树(Link-Cut-Tree)简单总结(指针版本)
Link-Cut-Tree(动态树 LCT) 1.定义 1. 偏爱子节点: 一颗子树内最后访问的点若在该子树根节点 X 的某个儿子节点 P 的子树中,则称 P 为 X 的偏爱子节点. 偏爱边:连向偏爱 ...
- electron-vue 更新 使用electron-update的版本
electron-vue使用的electron版本比较老,用最新的electron-update会报错 我用这个版本成功 "electron-updater": "^3. ...
- MySQL概述 - 一条查询sql语句的执行过程
Server层 连接器 建立连接.获取权限.维持和管理连接. 连接建立比较复杂,建议使用长连接 定期断开长连接 mysql_reset_connection指令 查询缓存 建议关闭,任何更新操作会此t ...
- VMWare虚拟机启动不了有个叉叉的解决办法
打开VMWare虚拟机提示有: This virtual machine appears to be in use. If this virtual machine is already in use ...