Kaleidoscope conclusion

学习内容

完成对 https://llvm.org/docs/tutorial/MyFirstLanguageFrontend/LangImpl10.html 的学习。

练习

总结本次实现待改进点:

基本功能:
1 补充测试用例(lexer,loc等),新增系统测试以覆盖更复杂的场景(可以直接参考llvm代码中的test/Examples/Kaleidoscope/Chapter4.test)
2 loc中filename冗余消除
3 ast的dump功能
4 智能指针的使用改进,shared_ptr是否能转回unique?能否实现自动类型转换,避免大量的get?
5 添加简单的入参解析流程,help信息改进
6 建立行缓冲,在遇到解析错误时,把错误行打印出来,帮助调试
7 头文件中using namespace,可能导致污染,需要去掉。
8 调试信息bugfix,var/for中的变量还未进行声明,operator = 的信息生成还有问题 (已修复)
9 尝试接入方舟的Maple IR,尝试实现Vistor模式

把教程中的一些严重问题,如for的语义,调试信息不正确的问题邮件反馈。

新的有趣扩展

1 添加global variables实现
2 添加类型系统typed variables
3 添加arrays, structs, vectors的支持,练习LLVM getelementptr instruction的使用
3 实现辅助的runtime功能,例如IO?
4 内存管理memory management
5 异常支持exception handling support