这几天的主要时间花在阅读语言的IEEE标准上,同时也在思考相应的词法,语法模块的实现.
按现在的理解来看,词法模块的工作量并不太大,略微有点难度的就是对宏定义命令和include文件的处理.自己也基本上有了相应的实现思路,剩下的只是具体的工作量的问题.
语法模块的工作可以划分为两个部分,第一部分是语法规则的编写;第二部分则是语义动作的实现.
对第一部分来说,由于自己需要实现的是一个已经很成熟的语言,在这门语言的IEEE标准里已经给出了完整的文法规则,有了标准作为参考,自己的主要 工作就是消除标准中给出的文法规则里包括的一些二义性及冲突,也不存在瓶颈性的问题,唯量而已. 第二部分则是眼下比较重要的部分,因为这一部分的实现会直接影响到跟后端模块的接口,所以这部分的数据结构的设计,包括框架性的设计要作足功夫. 接下来,自己会继续花费一些精力在这上面.
另外这段时间自己在考虑的一个问题就是代码的可测试性问题. 按照我目前的想法,是希望为词法模块,语法模块分别设计相应的测试引擎. 想加入对某个语言功能块的支持,要遵循如下的流程:
1. 修改,扩展词法模块
2. 启动词法测试引擎进行测试,通过则进入到3,否则跳回至1
3. 修改,扩展词法模块
4. 启动语法测试引擎进行测试,通过则进入到5,否则跳回至3
5. 继续后续功能模块的开发
按照我预想的这个流程,每加入一个功能模块,都要分阶段地进行足量的测试,这样可以尽量避免bug和潜在的问题传递到下一个阶段的概率,避免过长调试,测试链条带来的开销.毕竟,在离问题发生的最近点解决问题的成本是最低的.