研究生即将毕业,答辩完成后,这几天有些时间。开始写一些自己的东西,记录自己的学习历程。

                                            --前言

  本着学习和交流的原则,本文的内容仅供参考,而不是权威版本,如有任何问题,欢迎指出。

                                            --声明

  跨专业考计算机研究生,至今三年已过,期间有过很多的迷茫,也经历了一些挫折。但是,对编程技术的强烈好奇心驱使我不断前行。我想,大多数爱好计算机的同学,也成想过自己能够创造出一门编程语言,或者至少对编程语言的运行的原理有一个清晰的认识。

  这时候,其实要学的东西很多,特别是我这种跨专业的同学。比如说,编译原理一门课,就够喝上一壶的了。还有计算机组成原理,汇编语言等等。有很多时候,提起勇气想要去学习一下,可能会被这复杂的理论知识吓蒙,就算能坚持一段时间地学习,也会因为理论太枯燥没有相应地实践而放弃,对这个领域的知识望而却步。

  因此,我决定从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源码学习篇一:环境部署的更多相关文章

  1. lua源码学习篇三:赋值表达式解析的流程

    上节说到表达式的解析问题,exprstate函数用于解析普通的赋值表达式.lua语言支持多变量赋值.本文先从单变量赋值表达式讲起. a = b = c = a + b 对于简单的两个数的求和过程,lu ...

  2. lua源码学习篇四:字节码指令

    在llimits.h文件中定义了指令的类型.其实就是32个字节. typedef lu_int32 Instruction; 上节说到变量最终会存入proto的数组k中,返回的索引放在expdesc ...

  3. lua源码学习篇二:语法分析

    一步步调试,在lparser.c文件中luaY_parser函数是语法分析的重点函数,词法分析也是在这个过程中调用的.在这个过程中,用到一些数据结构,下面会详细说. Proto *luaY_parse ...

  4. spring源码学习之路---环境搭建(一)

    作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 最近已经开始了spring源 ...

  5. JUnit 3.8.1 源码学习

    JUnit 3.8.1 源码学习 环境搭建(源码加载配置) 由于IDE自身含有JUint插件,因此通过正常途径是没有源码加载入口的,因此需通过手动加载扩展JAR,然后再添加对应源码JAR,如图:项目右 ...

  6. Redis源码学习:Lua脚本

    Redis源码学习:Lua脚本 1.Sublime Text配置 我是在Win7下,用Sublime Text + Cygwin开发的,配置方法请参考<Sublime Text 3下C/C++开 ...

  7. Hadoop源码学习笔记之NameNode启动场景流程一:源码环境搭建和项目模块及NameNode结构简单介绍

    最近在跟着一个大佬学习Hadoop底层源码及架构等知识点,觉得有必要记录下来这个学习过程.想到了这个废弃已久的blog账号,决定重新开始更新. 主要分以下几步来进行源码学习: 一.搭建源码阅读环境二. ...

  8. Vue源码学习(一):调试环境搭建

    最近开始学习Vue源码,第一步就是要把调试环境搭好,这个过程遇到小坑着实费了点功夫,在这里记下来 一.调试环境搭建过程 1.安装node.js,具体不展开 2.下载vue项目源码,git或svn等均可 ...

  9. 源码学习系列之SpringBoot自动配置(篇二)

    源码学习系列之SpringBoot自动配置(篇二)之HttpEncodingAutoConfiguration 源码分析 继上一篇博客源码学习系列之SpringBoot自动配置(篇一)之后,本博客继续 ...

随机推荐

  1. Big Data(三)伪分布式和完全分布式的搭建

    关于伪分布式的配置全程 伪分布式图示 1.安装VMWare WorkStation,直接下一步,输入激活码即可安装 2.安装Linux(需要100GB) 引导分区Boot200MB 交换分区Swap2 ...

  2. 数据可视化之颜色,线型,maker

    https://blog.csdn.net/m0_37362454/article/details/82791527 https://blog.csdn.net/qiu931110/article/d ...

  3. robotframework调用外部python多次运行拿到的都是同一个值

    外部python是一个爬虫,爬取的内容的定义没有放入函数中.导致一次爬取多次使用的情况出现. 第一版函数如下: 改版后:

  4. python selenium 相关操作

    selenium : 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Fi ...

  5. 浅谈Mybatis通用Mapper使用方法_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 对单表进行增删改查是项目中不可避免的需求,Mybatis的通用Mapper插件使这些操作变得简单 添加maven依赖 在 ...

  6. 40 final、finally、finalize的区别

    1.final 用于声明属性.方法.类.分别表示属性不可被改变,方法不可被覆盖,类不可被继承. (1)一个类不能既被声明为abstract的,又被声明为final的. (2)被声明为final的变量必 ...

  7. eclipse中没有server选项无法配置Tomcat

    eclipse集成Tomcat: 打开eclipse - 窗口 - 首选项 - 服务器 - 运行时环境 找到Tomcat然后添加. eclipse添加插件: 开发WEB项目时要集成Tomcat可以并不 ...

  8. Python 字典(Dictionary)Ⅱ

    删除字典元素 能删单一的元素也能清空字典,清空只需一项操作. 显示删除一个字典用del命令,如下实例: 但这会引发一个异常,因http://www.xuanhe.net/为用del后字典不再存在: 注 ...

  9. Let Us Adore 让我们来敬拜祂 中文歌词

      Verse 1 诸天宣告 神的荣耀 万国万民 都将赞美 宣扬祂奇妙 The heavens declare The glory of God And all of the world Will j ...

  10. Java对数组和列表的排序1.8新特性

    Java对数组列表的排序 数组 Integer[] a = new Integer[] { 1, 2, 3, 4, 5, 6, 9, 8, 7, 4, 5, 5, 6, 6 }; Arrays.sor ...