本单元的任务为求导。
即将一个含自变量x的多项式F求导成为另外一个含自变量x的多项式f。使得 dF/dx = f
为降低我们的难度,这个任务被分解成了三个阶段:
(1)对幂函数进行求导(不允许嵌套)
(2)对幂函数和三角函数进行求导(不允许嵌套,三角函数中只能有x)
(3)对幂函数和三角函数进行求导(允许嵌套,三角函数中只能有因子)
一、聊聊思路
1、字符串处理:
在第一和第二个阶段中,对输入的处理时相对比较容易的,因为我们可以使用正则表达式对整个输入字符串进行匹配。
以第一阶段为例,我们可以将每个项分为三种情况 数字、x^n、a*x^n。这里的n可以为任何值,甚至可以在等于1的时候直接省略。
那么这三种情况可以分别匹配两个正则表达式:“[+-]?[0-9]+”,“([+-]?[0-9]?\\s*\\*\\s*)[x]\\s*(^\\s*[+-][0-9]?)?”,第二个正则表达式匹配后三种情况(了解更多关于正则表达式)
但是在第三阶段中,由于嵌套的出现,除非在处理过程中做非常严格的限制将正则表达式分析的范围进行缩减,否则正则表达式无法完成对函数嵌套的字符串处理。
比如对于以下文法:
A::=aAb|i
那么我们理所当然的写正则表达式A="i",A="a"+A+"b"。在这两条正则表达式的字符串匹配完了之后,我们发现其实A里面并不包含着嵌套的内容,它仅仅只能匹配"aib",而不能匹配“aaibb”。当然,这是一个非常简单的例子,可以用其他的方法来解