classDiagram
class AddNode {
-int exp
-ArrayList~ExprNode~ children
+rmBracket() FactorNode
+addChild() void
+powerExpand() void
+addIntoMult() void
+derivated() FactorNode
+nodeChange() AddNode
+toSimpFactorInTrig() FactorNode
}
class DrvNode {
-AddNode expr
-Character base
}
class ExprNode {
<<abstract>>
-SimpTerms simpTerms
+toAddNode() AddNode
+collectSimpTerms()* void
}
class FactorNode {
<<interface>>
deepClone() FactorNode
addIntoMult() void
toSimpFactorInTrig() FactorNode;
containBase() boolean
derivated() FactorNode
}
class Func {
-AddNode template
-ArrayList~Character~ virSeq
+Func()
+funcToAddNode() AddNode
-createValueMap() HashMap~Character-FactorNode~
}
class MultNode {
-SimpTerms tmpExpr
-SimpTerm tmpSimpTerm
-ArrayList~FactorNode~ children
+addExpr() void
+addTrig() void
+addPF() void
+addChild() void
+addNumber() void
}
class NumberNode {
-BigInteger value
}
class PowerFNode {
-Integer exp
-Character base
+pow() void
}
class BaseNums {
+expAdd() void
+expAddAll() void
+onlyKey() Character
+noBase() boolean
}
class TrigFNodes{
+add() boolean
+addAll() boolean
+equals() boolean
}
class SimpTerm {
-class BaseNums
-BaseNums baseNums
-class TrigFNodes
-TrigFNodes trigFNodes
-BigInteger coef
+isZero() boolean
+isConst() boolean
+coefNegated() void
+rmBracket() FactorNode
+coefIsPositive() boolean
+coefAdd() void
+putPF() void
+mult() SimpTerm
+compareTo() int
+addTrig() void
+coefMult() void
+equals() boolean
+varEquals() boolean
+derivated() SimpTerms
-productsRule() AddNode
-powerFAppended(StringBuilder sb) void
-trigAppended() void
+containBase() boolean
+factorExchange() MultNode
-pfExchange() void
}
class SimpTerms {
+add() boolean
+addAll() boolean
+mult() SimpTerms
+equals() boolean
+derivated() void
}
class TrigFNode {
-Integer exp
-boolean trig
-FactorNode factor
+isSin() boolean
+mult() void
+equals() boolean
+varEqual() boolean
+factorExchange() TrigFNode
}
class Lexer {
-int pos
-String input
-String curToken
+next() void
+peek() String
+hasExp() boolean
+getNumber() String
+getPowerF() PowerFNode
}
class Parser {
-Lexer lexer
-HashMap~Character-Func~ funcMap
+Parser()
-parseFunc() AddNode
+parseTerm() MultNode
-parseTrig() TrigFNode
+parseFactor() FactorNode
-getLeadingAS() Character
+parseFuncDef() void
}
Parser *-- Lexer : 递归下降,文法词法解析
FactorNode <|.. NumberNode : 常数因子
FactorNode <|.. PowerFNode : 幂函数因子
FactorNode <|.. TrigFNode : 三角函数因子
FactorNode <|.. AddNode : 表达式因子
FactorNode --o MultNode : 因子被收集
AddNode o--|> ExprNode : 加法算子(表达式)\n 算子也是AddNode的子节点
MultNode --|> ExprNode : 乘法算子(项)
DrvNode --|> ExprNode : 求导算子
SimpTerm --o SimpTerms : 最简多项式中的最简单项式
SimpTerm --> MultNode : 计算时临时用到
SimpTerms --o ExprNode : 代表物理意义--最简多项式
SimpTerms --> MultNode : 计算时临时用到
Func <--> AddNode : Func利用AddNode当做模板,又生产AddNode
Func --* Parser : 放置于
TrigFNode --o TrigFNodes : 组成
TrigFNodes --* SimpTerm : 内部类
SimpTerm *-- BaseNums: 内部类