我们上一章成功给Qing
加上了类定义的实现,不过随着类定义功能的加入,代码似乎开始变得有些混乱了,为什么这么说呢,主要是依据以下几点
- 通过
Listener
来实现,我们是在遍历的过程中进行回调,可以看到所有的处理方法都是void
方法,如果想要获取某一个Token
的结果,只能维护中间变量进行处理,可以预想如果后续语义进一步补充之后,这些中间变量的编排和使用会是一个很大问题
- 相同
Token
的处理会比较复杂,比如定义变量的语句可以在很多地方出现(方法域中、类成员变量…),而出现在不同的地方实际是要用不同的方式编译的,这样就导致相同的Token
需要分离处理,会比较麻烦
为了解决上述的问题,我们使用之前一直没用到的Visitor
进行重构处理,他和Listener
相比一个有点就是有了返回值,我们可以通过迭代调用的方式组装数据了
- 定义类访问器,这个访问器访问类定义上下文并返回
ClassDeclaration
- 变量定义以及变量打印访问器,代码基本只是换了一个结构