HW1
题目概述:
本次作业需要读入一个包含至多一层括号的表达式,通过表达式解析,得到展开所有括号的等价表达式。
代码架构:
MainClass:表达式读入,调用Pre进行预处理,调用Lexer, Parser递归下降分析整合
Pre: 预处理空白符以及冗余的符号
Lexer, Parser: 词法、语法分析,并处理嵌套括号和乘方运算
Factor: 接口,其下继承Const, PowF等具体因子以及Expr这一特殊因子
Term: 项的类,有操作符op, 所包含的因子 factors等属性,有添加因子、返回结果和生成字符串等方法
类图
分析:
主类、递归下降算法以及各因子、项之间尽可能实现层次化的架构,但是对于表达式类与因子类向上的从属关系表达得并不明确
圈复杂度
bug分析
第一次作业的bug主要出现在对冗余+-的处理上。首先需要判断哪些是合法输入哪些不是,然后要对符合条件的输入进行归一化处理以得到简化的表达式,最终的处理方式需要涵盖各种边缘数据。
HW2
题目概述:
本次作业增加了对自定义函数以及幂函数、三角函数、自定义函数调用的表达式
在第一次作业基础上,本次迭代作业增加了以下几点:
首先对于多层括号的嵌套,由于hw1使用了递归下降的方法,此次作业不需要增加更多的操作。故此次迭代侧重于对自定义函数和三角函数的处理。
代码架构:
增加Frustrum,Function, TriFunc等类处理新增需求, MainClass中先使用Frustrum相关方法进行函数解析读入表达式,并在Parser,lexer等类中增加对自定义函数、三角函数的处理
类图
圈复杂度
HW3
题目概述:
本次作业新增内容为实现求导,根据实验课题目可知,重点在给每个类中添加derive方法将项代替为求导后的项。
bug分析:
注意求导的乘法法则的实现方式,注意运算时运用深克隆的方法。
反思总结:
本单元作业基于递归下降算法进行文法解析,实现括号处理、表达式化简和表达式求导。接收作业前我以为凭借上学期oopre的知识可以应对第一单元的作业,但事实表明pre课程后我只学到了java的基本语法和面向对象的基本特点,并不能将之很好地运用在基于特定算法的典型题目中。本单元作业由于前期拖欠导致后期持续滞后,作业情况很不理想,但也提醒我学习训练题目、实验代码的重要性以及积极参与研讨、和优秀同学交流架构的重要性,一个好的架构会为后期增发提供很大的便利。第一单元内容告一段落,希望在下周开始我可以以积极的心态面对oo学习,能在老师助教和同学的帮助下收获真知 不虚此行。