📄 complexequalityoperandnode.java
字号:
class ComplexEqualityOperandNode extends EvaluatableNode
{
char vOperator;
AdditiveExpressionNode vFirstAdditiveExpressionNode;
AdditiveExpressionNode vSecondAdditiveExpressionNode;
Value vFirstAdditiveExpressionValue;
Value vSecondAdditiveExpressionValue;
static ComplexEqualityOperandNode parserComplexEqualityOperand(Environment env, Scanner s) throws ParserException, ScannerException
{
char tmpOperator= ' ';
AdditiveExpressionNode tmpFirstAdditiveExpressionNode;
AdditiveExpressionNode tmpSecondAdditiveExpressionNode= null;
tmpFirstAdditiveExpressionNode= AdditiveExpressionNode.parserAdditiveExpression(env,s);
if(isOperatorToken(s,'>')||isOperatorToken(s,'<'))
{
tmpOperator= ((OperatorToken)s.token()).content();
matchOperator(s,tmpOperator);
tmpSecondAdditiveExpressionNode= AdditiveExpressionNode.parserAdditiveExpression(env,s);
}
return new ComplexEqualityOperandNode(tmpOperator,tmpFirstAdditiveExpressionNode,tmpSecondAdditiveExpressionNode);
}
ComplexEqualityOperandNode()
{
vOperator= ' ';
vFirstAdditiveExpressionNode= null;
vSecondAdditiveExpressionNode= null;
}
ComplexEqualityOperandNode(char aOperator, AdditiveExpressionNode aFirstAdditiveExpressionNode, AdditiveExpressionNode aSecondAdditiveExpressionNode)
{
vOperator= aOperator;
vFirstAdditiveExpressionNode= aFirstAdditiveExpressionNode;
vSecondAdditiveExpressionNode= aSecondAdditiveExpressionNode;
}
String format(int indent)
{
String str= vFirstAdditiveExpressionNode.format(indent);
if(vSecondAdditiveExpressionNode!=null)
str+= vOperator+vSecondAdditiveExpressionNode.format(indent);
return str;
}
Value evaluate(Environment env) throws InterpreterException
{
if(vSecondAdditiveExpressionNode!=null)
switch(vOperator)
{
case '>':
return vFirstAdditiveExpressionNode.evaluate(env).isGreater(vSecondAdditiveExpressionNode.evaluate(env));
case '<':
return vFirstAdditiveExpressionNode.evaluate(env).isLess(vSecondAdditiveExpressionNode.evaluate(env));
}
return vFirstAdditiveExpressionNode.evaluate(env);
}
boolean typeCheck(Environment env) throws InterpreterException
{
if(vFirstAdditiveExpressionNode.typeCheck(env))
{
vFirstAdditiveExpressionValue= vFirstAdditiveExpressionNode.evaluate(env);
if(vSecondAdditiveExpressionNode!=null)
{
if(vSecondAdditiveExpressionNode.typeCheck(env))
{
vSecondAdditiveExpressionValue= vSecondAdditiveExpressionNode.evaluate(env);
if(vFirstAdditiveExpressionValue.isNumber()
&& vSecondAdditiveExpressionValue.isNumber())return true;
else ProgramNode.mTypeCheckError(this.format(4));
}
}
}
else ProgramNode.mTypeCheckError(this.format(4));
return true;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -