Compare commits

...

2 Commits

Author SHA1 Message Date
Odeinjul 73b7668c1c
Finish all.
12 months ago
Odeinjul 90e5c5c1c6
Finish all.
12 months ago

@ -2,16 +2,13 @@
## 贡献详述
### 组员1 张三
### 组员1 吴书让
### 组员2 李四
### 组员3 王五
### 组员2 罗胤玻
## 评定结果
| 组员姓名 | 贡献百分比 |
| :-----: | :-------: |
| 张三 | xx% |
| 李四 | xx% |
| 王五 | xx% |
|:----:|:-----:|
| 吴书让 | 50% |
| 罗胤玻 | 50% |

@ -111,11 +111,57 @@ define dso_local i32 @main() #0 { ; 定义一个名为main的函数返回类
## 实验设计
本次实验循序渐进分三步指导完成一个sy语言的机器语言自动生成器。
1. 手写机器语言,熟悉机器语言结构及各类语句含义和用途
2. 手动使用接口设置机器语言,相比第一步抽象层次更高,熟悉各种接口含义以及使用方法
3. 结合PW5中学习的AST以及访问者模式为sy语言自动翻译机器语言。前两步中的四个例子几乎已经涵盖所有情况可以作为参考。
## 实验难点及解决方案
0. educoder设计麻烦
1. 多维数组处理麻烦:因为一开始陷入了想用多维数组来存储的思维,导致很多不必要的尝试;换成用一维数组实现就很简单。
2. 函数全为void型不能返回变量设置全局临时变量作为返回值定时整理删减全局临时变量。
3. 一开始随意选择了某个语法书节点开始编程但是前置节点尚未编写导致了理解上的困难审视全体语法树节点尽可能选取最上层节点或着依赖较少的节点开始编写比如funcDef。
4. 测试目录中只有20个文件但是test.py提示进行了21次测试且仅有第一次测试出错删去.DS_Store并加入.gitignore。
5. 重复表达式过多,修改麻烦:定期整理重复代码抽象出来作为单独函数。
## 实验总结
挺好的一次实验,但是感觉第二步到第三步之间缺少指引,比如翻译器的整体规划(一般涉及到一些全局变量,转换等)。这也导致了,如果没有事先商量仅仅指派某些函数来分工的话,难以同步进度和各种操作。
## 实验反馈
1. 建议完全抛弃educoder。
2. 可以在2、3步之间加入一个阶段让学生分列出各语法树节点的可能情况以及处理方案方便整体审视检查。之后只需要对着事先计划好的处理方案编程即可 相比直接编写难度会小很多。
## 组间交流
提前商定好各函数之间必要信息交换,以及常用辅助函数和全局变量的设计。
然后各自负责一部分visit的编写完成后进行整体调试和debug。
在Pass所有20个test后针对各个test的情况进行讨论见下对未覆盖的情况增加test新增的test检查出了BB命名重复的错误
```
1. main函数
2. [pass] 变量定义未检查float类型->21 -
3. 空语句
4. [pass] 一维数组类型定义未检查float类型与赋初值情况->22
5. [pass] 一维数组赋值情况->22
6. [pass] 常量定义,未检查非全局变量情况->23
7. [pass] 常量一维数组定义未检查float类型->24
8. 函数定义,未检查函数含参数情况
9. [pass] 函数定义未检查函数参数为float类型情况->25
10. if语句
11. [pass] if-else语句未检查if嵌套情况-> 26
12. while语句未检查while嵌套-> 27未看出错误原因
13. break语句
14. continue语句
15. 输入语句 getint
16. 复杂函数定义
17. 等于关系测试,未检查其他关系-> 28多个if语句块之间疑似未按照原有顺序编译
18. scop作用检查变量作用域问题
19. 最大公因数
20. 汉诺塔问题,递归功能检测
```
完成主要任务后开始编写多维数组首先讨论方案决定用一维数组代替其次编写了多种test辅助验证正确性。
在完成的过程中时刻进行测试保证之前的test依然Pass。
组内主要使用SNS及时沟通使用git同步进度。
Loading…
Cancel
Save