multiplicativeexpressionnode.java

来自「是有关解释器的.用JAVA编写.可以解释一般的JAVA程序.」· Java 代码 · 共 73 行

JAVA
73
字号
class MultiplicativeExpressionNode extends EvaluatableNode
{
	char vOperator;
	UnaryExpressionNode vUnaryExpressionNode;
	MultiplicativeExpressionNode vMultiplicativeExpressionNode;
	Value vUnaryExpressionValue;
	Value vMultiplicativeExpressionValue;
	
	static MultiplicativeExpressionNode parserMultiplicativeExpression(Environment env,Scanner s) throws ParserException, ScannerException
	{
		char tmpOperator=' ';
		UnaryExpressionNode tmpUnaryExpressionNode;
		MultiplicativeExpressionNode tmpMultiplicativeExpressionNode= null;
		
		tmpUnaryExpressionNode= UnaryExpressionNode.parserUnaryExpression(env,s);
		if(isOperatorToken(s,'*')||isOperatorToken(s,'/'))
		{
			tmpOperator= ((OperatorToken)s.token()).content();
			matchOperator(s,tmpOperator);
			tmpMultiplicativeExpressionNode= MultiplicativeExpressionNode.parserMultiplicativeExpression(env,s);
		}
		return new MultiplicativeExpressionNode(tmpOperator,tmpUnaryExpressionNode,tmpMultiplicativeExpressionNode);
	}
	MultiplicativeExpressionNode()
	{
		vUnaryExpressionNode= null;
		vMultiplicativeExpressionNode= null;
	}
	MultiplicativeExpressionNode(char aOperator, UnaryExpressionNode aUnaryExpressionNode, MultiplicativeExpressionNode aMultiplicativeExpressionNode)
	{
		vOperator= aOperator;
		vUnaryExpressionNode= aUnaryExpressionNode;
		vMultiplicativeExpressionNode= aMultiplicativeExpressionNode;
	}
	String format(int indent)
	{		
		String str= vUnaryExpressionNode.format(indent);
		if(vMultiplicativeExpressionNode!=null)
			str+= vOperator+vMultiplicativeExpressionNode.format(indent);
		return str;
	}
	Value evaluate(Environment env) throws InterpreterException
	{			
		if(vMultiplicativeExpressionNode!=null)	
			switch(vOperator)
			{
				case '*':
					return vUnaryExpressionValue.multipliedBy(vMultiplicativeExpressionValue);
				case '/':
					return vUnaryExpressionValue.dividedBy(vMultiplicativeExpressionValue);
			}			
		return vUnaryExpressionNode.evaluate(env);
	}
	boolean typeCheck(Environment env) throws InterpreterException
	{
		if(vUnaryExpressionNode.typeCheck(env))
		{
			vUnaryExpressionValue= vUnaryExpressionNode.evaluate(env);
			if(vMultiplicativeExpressionNode!=null)
			{
				if(vMultiplicativeExpressionNode.typeCheck(env))
				{			
					vMultiplicativeExpressionValue= vMultiplicativeExpressionNode.evaluate(env);
					if(vUnaryExpressionValue.isNumber()&&vMultiplicativeExpressionValue.isNumber())
						return true;
					else ProgramNode.mTypeCheckError(this.format(4));
				}else ProgramNode.mTypeCheckError(this.format(4));
			}			
		}else ProgramNode.mTypeCheckError(this.format(4));		
		
		return true;
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?