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 + -
显示快捷键?