diff --git a/report/contribution.md b/report/contribution.md index b2257ca..4f96d84 100644 --- a/report/contribution.md +++ b/report/contribution.md @@ -2,16 +2,13 @@ ## 贡献详述 -### 组员1 张三 +### 组员1 吴书让 -### 组员2 李四 - -### 组员3 王五 +### 组员2 罗胤玻 ## 评定结果 | 组员姓名 | 贡献百分比 | -| :-----: | :-------: | -| 张三 | xx% | -| 李四 | xx% | -| 王五 | xx% | +|:----:| :-------: | +| 吴书让 | xx% | +| 罗胤玻 | xx% | diff --git a/report/report.md b/report/report.md index f737999..648d4be 100644 --- a/report/report.md +++ b/report/report.md @@ -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同步进度。 \ No newline at end of file