📄 additiveexpressionnode.java
字号:
class AdditiveExpressionNode extends EvaluatableNode
{
char vOperator;
MultiplicativeExpressionNode vMultiplicativeExpressionNode;
AdditiveExpressionNode vAdditiveExpressionNode;
Value vMultiplicativeExpressionValue;
Value vAdditiveExpressionValue;
static AdditiveExpressionNode parserAdditiveExpression(Environment env,Scanner s) throws ParserException, ScannerException
{
char tmpOperator=' ';
MultiplicativeExpressionNode tmpMultiplicativeExpressionNode;
AdditiveExpressionNode tmpAdditiveExpressionNode= null;
tmpMultiplicativeExpressionNode= MultiplicativeExpressionNode.parserMultiplicativeExpression(env,s);
if(isOperatorToken(s,'+')||isOperatorToken(s,'-'))
{
tmpOperator= ((OperatorToken)s.token()).content();
matchOperator(s,tmpOperator);
tmpAdditiveExpressionNode= AdditiveExpressionNode.parserAdditiveExpression(env,s);
}
return new AdditiveExpressionNode(tmpOperator,tmpMultiplicativeExpressionNode,tmpAdditiveExpressionNode);
}
AdditiveExpressionNode()
{
vAdditiveExpressionNode= null;
vMultiplicativeExpressionNode= null;
}
AdditiveExpressionNode(char aOperator, MultiplicativeExpressionNode aMultiplicativeExpressionNode, AdditiveExpressionNode aAdditiveExpressionNode)
{
vOperator= aOperator;
vAdditiveExpressionNode= aAdditiveExpressionNode;
vMultiplicativeExpressionNode= aMultiplicativeExpressionNode;
}
String format(int indent)
{
String str= vMultiplicativeExpressionNode.format(indent);
if(vAdditiveExpressionNode!=null)
str+= vOperator+vAdditiveExpressionNode.format(indent);
return str;
}
Value evaluate(Environment env) throws InterpreterException
{
if(vAdditiveExpressionNode!=null)
switch(vOperator)
{
case '+':
return vMultiplicativeExpressionNode.evaluate(env).plus(vAdditiveExpressionNode.evaluate(env));
case '-':
return vMultiplicativeExpressionNode.evaluate(env).minus(vAdditiveExpressionNode.evaluate(env));
}
return vMultiplicativeExpressionNode.evaluate(env);
}
boolean typeCheck(Environment env) throws InterpreterException
{
if(vMultiplicativeExpressionNode.typeCheck(env))
{
vMultiplicativeExpressionValue= vMultiplicativeExpressionNode.evaluate(env);
if(vAdditiveExpressionNode!=null)
{
if(vAdditiveExpressionNode.typeCheck(env))
{
vAdditiveExpressionValue= vAdditiveExpressionNode.evaluate(env);
if(vMultiplicativeExpressionValue.isNumber() && vAdditiveExpressionValue.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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -