/* * 语法解析:乘法表达式 * **/ private SimpleASTNode multiplicative(ITokenReader tokens) { SimpleASTNode child1 = primary(tokens); SimpleASTNode node = child1; IToken token = tokens.peek(); if (child1 != null && token != null) { if (token.getType() == TokenType.Star || token.getType() == TokenType.Slash) { token = tokens.read(); SimpleASTNode child2 = primary(tokens); if (child2 != null) { node = new SimpleASTNode(ASTNodeType.Multiplicative, token.getText()); node.addChild(child1); node.addChild(child2); } else { throw (new FormatException("无效的乘法表达式!")); } } } return(node); }
/* * 语法解析:根节点 * **/ private SimpleASTNode prog(ITokenReader tokens) { SimpleASTNode node = new SimpleASTNode(ASTNodeType.Programm, "Calculator"); SimpleASTNode child = additive(tokens); if (child != null) { node.addChild(child); } return(node); }
/* * 整型变量声明语句,如:int a; int b = 2*3; * **/ private SimpleASTNode intDeclare(ITokenReader tokens) { SimpleASTNode node = null; IToken token = tokens.peek(); if (token.getType() == TokenType.Int) { tokens.read(); token = tokens.peek(); if (token.getType() == TokenType.Identifier) { token = tokens.read(); node = new SimpleASTNode(ASTNodeType.IntDeclaration, token.getText()); token = tokens.peek(); if (token.getType() == TokenType.Assignment) { tokens.read(); SimpleASTNode child = additive(tokens); if (child != null) { node.addChild(child); } else { throw (new FormatException("'='赋值表达式错误")); } } } else { throw (new FormatException("需要一个变量名")); } if (node != null) { token = tokens.peek(); if (token != null && token.getType() == TokenType.SemiColon) { tokens.read(); } else { throw (new FormatException("表达式缺少分号")); } } } return(node); }