301
社区成员
发帖
与我相关
我的任务
分享
成员变量:terms(一个包含多个 Term 对象的列表)
构造函数:接受一个 Term 对象列表作为参数,并将其赋https://img-community.csdnimg.cn/images/7585c7f389864dddae48f3251dc7c42f.jpg "#left")
值给成员变量 terms
继承自 Factor 类
成员变量:expr(一个 Expression 对象)
构造函数:接受一个 Expression 对象作为参数,并将其赋值给成员变量 expr
成员变量:input(要解析的输入字符串)和 pos(当前解析位置)
构造函数:接受一个字符串作为输入,并初始化 input 和 pos
nextToken 方法:使用正则表达式解析输入字符串,并返回一个 Token 对象,表示下一个标记。如果输入无效或到达输入末尾,则返回 null。
main 方法:程序的入口点。它接受一个字符串输入,对其进行一系列的正则表达式替换,以简化表达式,并打印结果。
继承自 Factor 类
成员变量:value(一个表示数值的字符串)
构造函数:接受一个字符串作为参数,并将其赋值给成员变量 value
成员变量:lexer(一个 Lexer 对象,用于解析输入)和 lookahead(下一个 Token 对象)
构造函数:接受一个 Lexer 对象作为参数,并初始化 lexer 和 lookahead
match 方法:用于匹配当前 lookahead 的类型,如果匹配成功,则前进到下一个 Token
parse 方法:启动解析过程,并返回一个 Expression 对象
expression 方法:解析表达式
term 方法:解析项
factor 方法:解析因子
成员变量:factors(一个包含多个 Factor 对象的列表)
构造函数:接受一个 Factor 对象列表作为参数,并将其赋值给成员变量 factors
定义了一系列的静态常量,表示不同的标记类型,如 ADD、SUB、MUL 等。
成员变量:type(标记的类型)和 value(标记的值)
构造函数:接受标记类型和值作为参数,并初始化成员变量
toString 方法:返回一个表示 Token 对象的字符串
在前者的基础上迭代增加了自定义函数因子和多层括号和指数函数。
关于括号嵌套,递归下降的方法能够解析出含有多层括号的表达式树,此需求已经在hw1中实现。
怎么应对新增的自定义函数因子?本人的一些初步思路在一位的学长的博客中得到印证和更加深层次的启发,最后选取采用类似于表达式树的形式架构。新增了Function类,进行表达式的解析和取代。注意程序的高聚合性。最后解析完成的自定义函数因子就是一个新的 Expr类型的 Factor。
在前者的基础上迭代增加了求导算子和其他“已定义的”函数。
思路是将求导算子视为单目运算符,新增DerivativeNode类实现Node接口,返回的,应当是其内容先计算再求导的结果。。
由于各种原因这部分没能交上,虽然后来自己完成了但也只能自测,就不详细讲了。
自测没发现bug,不过没进互测,就先不分析了。
本单元主要是对于java基础语法的考量以及如何从原先的面向过程的思维转化为面向对象的思维的考验,当然,就该次作业的工作量而言,确实还是挺大而且具有挑战性的,不过这样的经历也同样是对于同学们的宝贵经验,如何在压力中前进,并且不断学习进步和挑战自我,不仅仅是一门课程应有的态度,其实也是面对今后未来生活应有的态度。