|
|
|
@ -29,10 +29,31 @@ PB21000117 陈应豪
|
|
|
|
|
|
|
|
|
|
## 实验设计
|
|
|
|
|
|
|
|
|
|
- 在task1的时候,学习SysYF的语法,并编写等效的ll文件
|
|
|
|
|
|
|
|
|
|
- 在task2的时候,学习能够生成SysYF的IR文法,使之能生成等效的ll文件
|
|
|
|
|
|
|
|
|
|
- 在task3的时候,利用实验框架,通过类比上一关的IR认罚的编写,利用已经生成的AST树为不同的模块编写对应的IR语法
|
|
|
|
|
- 参考助教给出的代码框架,我们把实验分成了变量定义、初始化和赋值;函数和算数调用和求值两个部分进行分工
|
|
|
|
|
|
|
|
|
|
## 实验难点及解决方案
|
|
|
|
|
|
|
|
|
|
- 全局变量在初始化时,如果用到其他全局变量进行赋初值,无法使用builder->create_load()
|
|
|
|
|
|
|
|
|
|
- 获取全局数组中元素的值比较麻烦
|
|
|
|
|
|
|
|
|
|
- 因此。如果scope.in_global(),那不论访问什么变量,我们都传值(因为赋初值在初始化中完成了,和lval中的传值不冲突。同时,在没有进入任何bb的情况下赋值语句是不能出现的)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 实验总结
|
|
|
|
|
|
|
|
|
|
利用PW5学到的AST以及访问者模式,我们编写了能够生成IR的实验框架,对AST和IR的理解更加深刻
|
|
|
|
|
|
|
|
|
|
## 实验反馈
|
|
|
|
|
|
|
|
|
|
配置文件不够齐全
|
|
|
|
|
|
|
|
|
|
## 组间交流
|
|
|
|
|
|
|
|
|
|
我们一起预约研讨室线下写代码
|
|
|
|
|