📄 equalityexpressionnode.java
字号:
class EqualityExpressionNode extends EvaluatableNode
{
char vOperator;
EqualityOperandNode vFirstEqualityOperandNode;
EqualityOperandNode vSecondEqualityOperandNode;
Value vFirstEqualityOperandValue;
Value vSecondEqualityOperandValue;
static EqualityExpressionNode parserEqualityExpression(Environment env,Scanner s) throws ParserException, ScannerException
{
char tmpOperator=' ';
EqualityOperandNode tmpFirstEqualityOperandNode;
EqualityOperandNode tmpSecondEqualityOperandNode = null;
tmpFirstEqualityOperandNode= EqualityOperandNode.parserEqualityOperand(env,s);
Token t= s.token();
if(t.isOperator()&&((OperatorToken)t).isEquals())
{
tmpOperator= ((OperatorToken)t).content();
matchOperator(s,tmpOperator);
tmpSecondEqualityOperandNode= EqualityOperandNode.parserEqualityOperand(env,s);
}
return new EqualityExpressionNode(tmpOperator,tmpFirstEqualityOperandNode,tmpSecondEqualityOperandNode);
}
EqualityExpressionNode()
{
vFirstEqualityOperandNode = null;
vSecondEqualityOperandNode = null;
}
EqualityExpressionNode(char aOperator,EqualityOperandNode aFirstEqualityOperandNode,EqualityOperandNode aSecondEqualityOperandNode)
{
vOperator = aOperator;
vFirstEqualityOperandNode = aFirstEqualityOperandNode;
vSecondEqualityOperandNode = aSecondEqualityOperandNode;
}
String format(int indent)
{
String str= vFirstEqualityOperandNode.format(indent);
if(vSecondEqualityOperandNode!=null)
str+= "=="+vSecondEqualityOperandNode.format(indent);
return str;
}
Value evaluate(Environment env) throws InterpreterException
{
if(vSecondEqualityOperandNode!=null)
return vFirstEqualityOperandNode.evaluate(env).isEqual(vSecondEqualityOperandNode.evaluate(env));
return vFirstEqualityOperandNode.evaluate(env);
}
boolean typeCheck(Environment env) throws InterpreterException
{
if(vFirstEqualityOperandNode.typeCheck(env))
{
vFirstEqualityOperandValue= vFirstEqualityOperandNode.evaluate(env);
if(vSecondEqualityOperandNode!=null)
if(vSecondEqualityOperandNode.typeCheck(env))
{
vSecondEqualityOperandValue= vSecondEqualityOperandNode.evaluate(env);
if(!vFirstEqualityOperandValue.getClass().getName().equals(vSecondEqualityOperandValue.getClass().getName()))
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -