每一个watch和star都是这场梦幻之旅的⛽️与干柴 兴❤️如🔥,其势如风.意许如油,汩汩不息。
- 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指令,更新VM设计文档
- ep19--实现简单的struct(
实现闭包),目前实现了最简单的record类型和main函数以及file作用域下一章增加类方法和协议支持。 - ep20--重点放在IR和字节码生成,生成的字节码目标机就是我们ep18实现的VM。这么做的原因是这个过程足够简单、精确地表现编译后端中最重要的一步是如何执行的。
- ep21--TAC生成、SSA与CFG。[WIP]
❤️👀: 终于写完了,感觉好忐忑。不过,我还有另外几个也是编译原理相关的坑也要填。
首先,我得感谢父母,他们给了我莫大支持。
其次,感谢我自己和我的妻子,如果不是我们的相遇我永远也不能写完。
最后,感谢这个时代,我需要的一切都在这个时候刚刚好到来。
我从开始编程就一直在想,如果我是一个意图规划者, 而不是人肉编码器该有多好。
因此,我一头扎进了编程语言构造和分析的汪洋大海中去捞 那根我心中的定海神针。
现在,我真正走进了编译后端处理和程序分析后,我感到自己 有太多想记录的知识、技能、想法,以及创造好用的新工具和新过程。
所以,这就是我的起点,希望你能和我一样享受这个过程。
整个工程需要3种外部环境支持。
- a.
JDK18+
is required. (JDK环境需要>= 18,我本地是openJDK 18) - b.
Antlr4
runtime support.(lib已经有了,并且我在ant构建文件中已经写好了。) - c.
Ant
support. (Mac:brew install ant,其他平台:Baidu一下Ant安装)。
src
: the folder to maintain sourcesorg/teachfx/antlr4
-- top package name.ep${num}
--num
in{1,2,3,...,25}
- current
num
is20
lib
: the folder to maintain dependencies
当所有依赖都安装完毕后,以ep20为例
cd your_project_dir
cd ep20
ant gen
ant run
这部分就是Ant的一般使用,我之前是参考《Ant使用指南》--一本很老的书。 大家可以百度一下,教程很多我就不浪费篇幅了。