同步操作将从 whtoo/How_to_implment_PL_in_Antlr4 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
🙏谢谢每一个给我一点关注的朋友,你们是我更新的动力
ep1--antlr支持的EBNF语法描述hello world示例。
ep2--如何使用g4描述形如{1,2,{3,4..}...}
的数组,并在listener中print它。
ep3--实现一个只包含加减乘除的微型计算器。
ep4--实现一个可以进行简单交互的算术计算器。
ep5--实现一个Java接口提取工具。
ep6--实现一个CVS提取器。
ep7--实现一个JSON解析工具。
ep8--抽象语法书提取器
ep9--ep4增强版本
ep10--ep6的另一种实现
ep11--基于ep8的算术解释器(AST Tree walking)
ep12--ep11增加赋值语句和变量声明。
ep13--ep11另一种简化实现。
ep14--实现符号表记录。
ep15--实现变量的作用域确定。
ep16--实现变量的消解和类型检查,并实现函数作用域与有函数调用的脚本求值。
ep17--实现函数的静态声明依赖(并不是我心里想的调用图生成,但是还是加上吧,让其他人避坑。)
ep18--(应该会综合《两周实现脚本语言》与《编程语言的实现模式》中对VM的设计)已经采用栈解释器了,主要就是因为实现简单😆
ep19--本来我的TODO里面写的是实现闭包和结构体,但是看情况吧。估计VM还得在这个章节修订。
ep20--这里会增加java的native导入,具体实现我会参考《两周实现脚本语言》。VM的修订与扩展。
ep21--希望能够在这一章终结。
ep22--如果,我还能坚持写到这里,就增加汇编输出以及编译优化。应该只有SSA以及peep hole,寄存器染色也可能会出现。
PS: 终于写完了,感觉好忐忑。不过,我还有另外几个也是编译原理相关的坑也要填。
首先,我得感谢父母,他们给了我莫大支持。
其次,我得谢谢github,不然我这辈子很难自己手写构造CPS转换器并理解CPS转换的本质。SICP诚不我欺。
再次,我得说我终于从心结里面出来了,希望以后我能做自己喜欢的工作。
最后,打个广告,我是一个有着9年经验的iOS架构师(虽然是只设计过一个network的lib😳)以及同等时长的js开发者,以及一个有着1年半载技术管理经验的技术经理(真的是加起来这么长😭)。我现在想从事大前端(包括iOS、前端在内的整个生态)工具链开发--包括但不限于静态分析工具、打包工具、代码生成。
我对编译器前端应用非常熟悉且喜爱,而且自认为对工具开发小有心得😄。希望能够在自己喜欢领域的有点贡献🎉。
我一开始是看龙书以及《两周实现脚本语言》、《自制编译器》、《编程语言的实现模式》、《现代编译原理--C描述》 、《编译器设计基础》、《自制编程语言--基于C语言》等等。
结果,消耗了我1年时间,才从前端的AST艰难地移动到了IR。
好不容易终于走到了我想要的静态分析部分,一看龙书,我心碎了。
于是,我就整理了这份教程(幼稚板凳集)。希望能够给后来人提供一个简单、平滑地入门流程,尤其是不要在前端消耗如此多的时间,
虽然我学会了除渐进式解析以外的所有解析技术(TDOP真的有点烧脑),但真心觉得如果你能通过这份记录更快入手,
进入程序实现的静态分析和优化阶段,那就是最好的意义了。
整个工程需要3种外部环境支持。
JDK8+
is required. (JDK环境需要>= 8,我本地是openJDK 14)Antlr4
runtime support.(lib已经有了,并且我在ant构建文件中已经写好了。)Ant
support. (Mac:brew install ant,其他平台:Baidu一下Ant安装)。src
: the folder to maintain sources
org/teachfx/antlr4
-- top package name.
ep${num}
-- num
in {1,2,3,...,25}
num
is 20
lib
: the folder to maintain dependencies当所有依赖都安装完毕后,以ep16为例
cd your_project_dir
cd src/org/teachfx/antlr4/ep16
ant gen
ant run
这部分就是Ant的一般使用,我之前是参考《Ant使用指南》--一本很老的书。 大家可以百度一下,教程很多我就不浪费篇幅了。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。