301
社区成员
发帖
与我相关
我的任务
分享一.类图
(1)基于度量分析程序结构

| Complexity metrics | ||||
|---|---|---|---|---|
| Method | CogC | ev(G) | iv(G) | v(G) |
| Expr.Expr(ArrayList, ArrayList) | 0 | 1 | 1 | 1 |
| Expr.toString() | 1 | 1 | 2 | 2 |
| Lexer.Lexer(String) | 16 | 9 | 8 | 10 |
| Lexer.move() | 0 | 1 | 1 | 1 |
| Lexer.notEnd() | 0 | 1 | 1 | 1 |
| Lexer.now() | 0 | 1 | 1 | 1 |
| Main.main(String[]) | 0 | 1 | 1 | 1 |
| Num.Num(String) | 0 | 1 | 1 | 1 |
| Num.toString() | 0 | 1 | 1 | 1 |
| Parser.Parser(Lexer) | 0 | 1 | 1 | 1 |
| Parser.parserExpr() | 3 | 1 | 4 | 4 |
| Parser.parserFactor() | 2 | 2 | 2 | 2 |
| Parser.parserTerm() | 2 | 1 | 3 | 3 |
| Term.Term(ArrayList) | 0 | 1 | 1 | 1 |
| Term.toString() | 1 | 1 | 2 | 2 |
| Token.Token(Type, String) | 0 | 1 | 1 | 1 |
| Token.getContent() | 0 | 1 | 1 | 1 |
| Token.getType() | 0 | 1 | 1 | 1 |
| Token.toString() | 0 | 1 | 1 | 1 |
| my.Expression.Expression(String, Node) | 0 | 1 | 1 | 1 |
| my.Expression.getExpressionString() | 0 | 1 | 1 | 1 |
| my.Expression.getValue() | 0 | 1 | 1 | 1 |
| my.ExpressionParser.doParseExpression(String) | 0 | 1 | 1 | 1 |
| my.ExpressionParser.eatExpression() | 0 | 1 | 1 | 1 |
| my.ExpressionParser.eatPowerExpression() | 1 | 2 | 2 | 2 |
| my.ExpressionParser.eatPrimaryExpression() | 0 | 1 | 1 | 1 |
| my.ExpressionParser.eatProductExpression() | 4 | 3 | 2 | 3 |
| my.ExpressionParser.eatStartNode() | 3 | 3 | 3 | 3 |
| my.ExpressionParser.eatSumExpression() | 4 | 1 | 2 | 4 |
| my.ExpressionParser.eatToken(TokenKind) | 1 | 2 | 1 | 2 |
| my.ExpressionParser.eatUnaryExpression() | 5 | 3 | 2 | 3 |
| my.ExpressionParser.maybeEatLiteral() | 4 | 4 | 3 | 4 |
| my.ExpressionParser.maybeEatParenExpression() | 2 | 2 | 2 | 2 |
| my.ExpressionParser.nextToken() | 1 | 2 | 1 | 2 |
| my.ExpressionParser.peekToken() | 1 | 2 | 1 | 2 |
| my.ExpressionParser.peekToken(TokenKind) | 2 | 3 | 1 | 3 |
| my.ExpressionParser.peekToken(TokenKind, TokenKind) | 3 | 3 | 1 | 4 |
| my.ExpressionParser.pop() | 0 | 1 | 1 | 1 |
| my.ExpressionParser.push(Node) | 0 | 1 | 1 | 1 |
| my.ExpressionParser.takeToken() | 1 | 2 | 1 | 2 |
| my.IntLiteral.IntLiteral(String, int, int, int) | 0 | 1 | 1 | 1 |
| my.IntLiteral.getLiteralValue() | 0 | 1 | 1 | 1 |
| my.Lexer.Lexer(String) | 0 | 1 | 1 | 1 |
| my.Lexer.isNum(char) | 2 | 2 | 1 | 3 |
| my.Lexer.lexNumericLiteral(boolean) | 1 | 1 | 1 | 2 |
| my.Lexer.process() | 6 | 3 | 2 | 13 |
| my.Lexer.pushCharToken(TokenKind) | 0 | 1 | 1 | 1 |
| my.Lexer.pushIntToken(String, int, int) | 0 | 1 | 1 | 1 |
| my.Lexer.pushVarToken(TokenKind) | 0 | 1 | 1 | 1 |
| my.Literal.Literal(String, int, int) | 0 | 1 | 1 | 1 |
| my.Literal.getOriginalValue() | 0 | 1 | 1 | 1 |
| my.Literal.getValueInternal() | 0 | 1 | 1 | 1 |
| my.Main.main(String[]) | 0 | 1 | 1 | 1 |
| my.Node.Node(int, int, Node...) | 4 | 1 | 1 | 4 |
| my.Node.getEndPos() | 0 | 1 | 1 | 1 |
| my.Node.getStartPos() | 0 | 1 | 1 | 1 |
| my.Node.getValue() | 0 | 1 | 1 | 1 |
| my.OpMinus.OpMinus(int, int, Node...) | 0 | 1 | 1 | 1 |
| my.OpMinus.getValueInternal() | 3 | 2 | 2 | 3 |
| my.OpMultiply.OpMultiply(int, int, Node...) | 0 | 1 | 1 | 1 |
| my.OpMultiply.getValueInternal() | 17 | 9 | 9 | 11 |
| my.OpPlus.OpPlus(int, int, Node...) | 0 | 1 | 1 | 1 |
| my.OpPlus.getValueInternal() | 3 | 2 | 2 | 3 |
| my.OpPower.OpPower(int, int, Node...) | 0 | 1 | 1 | 1 |
| my.OpPower.getValueInternal() | 32 | 7 | 12 | 20 |
| my.Operator.Operator(String, int, int, Node...) | 0 | 1 | 1 | 1 |
| my.Operator.getLeftOperand() | 0 | 1 | 1 | 1 |
| my.Operator.getOperatorName() | 0 | 1 | 1 | 1 |
| my.Operator.getRightOperand() | 0 | 1 | 1 | 1 |
| my.StringLiteral.StringLiteral(String, int, int, String) | 0 | 1 | 1 | 1 |
| my.StringLiteral.getLiteralValue() | 0 | 1 | 1 | 1 |
| my.Token.Token(TokenKind, String, int, int) | 0 | 1 | 1 | 1 |
| my.Token.Token(TokenKind, int, int) | 0 | 1 | 1 | 1 |
| my.Token.getKind() | 0 | 1 | 1 | 1 |
| my.Token.stringValue() | 1 | 1 | 1 | 2 |
| my.TokenKind.TokenKind() | 0 | 1 | 1 | 1 |
| my.TokenKind.TokenKind(String) | 0 | 1 | 1 | 1 |
| my.TokenKind.isData() | 0 | 1 | 1 | 1 |
| Class | OCavg | OCmax | WMC | |
| Expr | 1.50 | 2 | 3 | |
| Lexer | 3.00 | 9 | 12 | |
| Main | 1.00 | 1 | 1 | |
| Num | 1.00 | 1 | 2 | |
| Parser | 1.75 | 2 | 7 | |
| Term | 1.50 | 2 | 3 | |
| Token | 1.00 | 1 | 4 | |
| Token.Type | n/a | n/a | 0 | |
| my.Expression | 1.00 | 1 | 3 | |
| my.ExpressionParser | 2.22 | 4 | 40 | |
| my.IntLiteral | 1.00 | 1 | 2 | |
| my.Lexer | 3.14 | 14 | 22 | |
| my.Literal | 1.00 | 1 | 3 | |
| my.Main | 1.00 | 1 | 1 | |
| my.Node | 1.50 | 3 | 6 | |
| my.OpMinus | 1.50 | 2 | 3 | |
| my.OpMultiply | 5.00 | 9 | 10 | |
| my.OpPlus | 1.50 | 2 | 3 | |
| my.OpPower | 9.00 | 17 | 18 | |
| my.Operator | 1.00 | 1 | 4 | |
| my.StringLiteral | 1.00 | 1 | 2 | |
| my.Token | 1.25 | 2 | 5 | |
| my.TokenKind | 1.00 | 1 | 3 | |
| Package | v(G)avg | v(G)tot | ||
| 1.89 | 36 | |||
| my | 2.27 | 134 | ||
| Module | v(G)avg | v(G)tot | ||
| oohomework_2024_22230614_hw_3 | 2.18 | 170 | ||
| Project | v(G)avg | v(G)tot | ||
| project | 2.18 | 170 | ||
由于我没有最后也没有成功通过第三次作业的中测,UML类图中有一些意义不大的东西。
lexer类处理输入表达式的词法,parser类则进行语法分析,其余几个类按照递归下降的原则处理输入的表达式。
因为完成的太糟糕了所以中间的需求也不好形成文字,放到心得体会里一起表述一下。
二.心得体会
因为编程基础太差,即使在理解了递归下降的数学原理之后仍然不能写出能够正确运行的代码。因此在参考了课程组给出的递归下降参考代码后我试图在其基础上进行修改。虽然没能通过中测,但是也感觉大概搞明白了java编程的原理和精神。希望能够继续努力、独立完成第二单元作业。