手写脚本语言

一直想实现一个脚本语言,拖拉几年终于实现了一个。做个记录。
想方便其他感兴趣的道友的,可惜文章写的糟糕了。

one more script

https://github.com/treert/oms

lua方言,C#实现,省掉垃圾回收的代码,没有用高级特性,换成其他语言问题也不大。
实现部分:词法解析,语法解析,代码生成,虚拟机,协程(线程)。
初具架子,oms0.1版本。

学习路程

为之,则难者亦易已;不为,则易者亦难已。

  1. 13年末知道lua语言,只有2万行代码,决定通读源代码,然后实现个方言。然而源代码一直没能坚持读完。
  2. 15年11月,给自己定规矩,晚上8点前后,花1~2小时在lua源码阅读上。当时想就是当成看小说,也要看完每一行代码。一个月左右时间读完源代码。语法解析部分没理清,不能做什么修改。
  3. 16年3月,决定写个小语言,最终变成抄了一遍luna的源码。从16-03-06到16-08-05中间花了40天左右的空闲时间,把luna的代码手动抄了一遍。luna的代码写的相当易读,很值得阅读。发现几个bug,修改了不少代码,信心大增,实现编程语言也不难嘛。
  4. 17-01-25,过年回家,准备从零开始实现lua方言。大量参考luna的代码实现。一个月后,实现了一个不完整版lua方言,小有成就。也发现完备的脚本语言实现起来,确实不容易啊,自己实现的更像个玩具,特别是架构层面,不过也算简洁易修改。

https://github.com/treert/script_learn/blob/master/doc/记录.txt
https://github.com/treert/oms/blob/master/doc/记录.md

资料链接

最有价值的资料是lua的官方源代码和luna的C++实现源代码。两套代码读完,对与脚本语言的实现也就理解个7788了。

  1. lua官网: https://www.lua.org
  2. luna github: https://github.com/airtrack/luna

其他的资料:

lua5.2的_ENV
http://blog.codingnow.com/2011/12/lua_52_env.html

lua的好与坏
http://blog.csdn.net/xoyojank/article/details/12762909

lua垃圾回收
http://blog.csdn.net/xuzhonghai/article/details/8465028

lua的table,闭包
http://www.blogjava.net/killme2008/archive/2008/04/07/191324.html

lua 性能优化技巧【好文章】
http://wenku.baidu.com/view/bcc4a24ecf84b9d528ea7ae4.html

JIT 动态编译【luajit用到动态编译技术】
http://blog.csdn.net/hsuxu/article/details/9320699

ruby的作用域
https://ruby-china.org/topics/26824
ruby的变量
http://blog.csdn.net/weeweee/article/details/8885480
ruby的闭包
http://www.oschina.net/translate/know-your-closures-blocks-procs-and-lambdas
ruby的module和class
http://www.cnblogs.com/wangkangluo1/archive/2011/07/24/2115538.html

php的接口 c# as 也是类似的 主要用于多继承把
http://blog.sina.com.cn/s/blog_75ad10100101iv1s.html

lua的内部比较字符串用到strcoll,这个函数比较中文可能会按拼音来
http://www.cnblogs.com/gakusei/articles/1585216.html

lua的迭代器
http://www.cnblogs.com/stephen-liu74/archive/2012/06/20/2413799.html

lua的垃圾回收【这是第五篇】
http://blog.codingnow.com/2011/03/lua_gc_5.html

lua的语法解析【这个作者写了个类似lua的语言(https://github.com/airtrack/luna)】
http://www.cppblog.com/airtrack/archive/2012/08/12/186998.aspx

从lex&yacc介绍到编译器
http://www.cppblog.com/woaidongmao/archive/2008/09/20/62354.aspx

你可能感兴趣的:(手写脚本语言)