📄 objectcreationnode.java
字号:
class ObjectCreationNode extends EvaluatableNode
{
ArgumentsNode vArgumentsNode;
Value vStreetValue;
Value vAvenueValue;
Value vBeepersValue;
Value vDirectionValue;
static ObjectCreationNode parserObjectCreation(Environment env, Scanner s) throws ParserException, ScannerException
{
matchKeyword(s,"new");
matchKeyword(s,"Robot");
return new ObjectCreationNode(ArgumentsNode.parserArguments(env,s));
}
static boolean mIsObjectCreation(Scanner s) throws ScannerException
{
return isKeywordToken(s,"new");
}
ObjectCreationNode(ArgumentsNode aArgumentsNode)
{
vArgumentsNode= aArgumentsNode;
}
ObjectCreationNode()
{
vArgumentsNode= null;
}
String format(int indent)
{
String str="new Robot";
if(vArgumentsNode!=null)str+= vArgumentsNode.format(indent);
else str+="()";
return str;
}
Value evaluate(Environment env) throws InterpreterException
{
int street= ((NumberValue)vStreetValue).numberValue();
int avenue= ((NumberValue)vAvenueValue).numberValue();
int beepers= ((NumberValue)vBeepersValue).numberValue();
int direct= ((DirectionValue)vDirectionValue).numberValue();
QueryRobot r=null;
switch(direct)
{
case 0:
r= new QueryRobot(street,avenue,beepers,direction.WEST);
break;
case 1:
r= new QueryRobot(street,avenue,beepers,direction.SOUTH);
break;
case 2:
r= new QueryRobot(street,avenue,beepers,direction.EAST);
break;
case 3:
r= new QueryRobot(street,avenue,beepers,direction.NORTH);
break;
}
return new RobotValue(r);
}
boolean typeCheck(Environment env) throws InterpreterException
{
if(vArgumentsNode==null)ProgramNode.mTypeCheckError(this.format(4)+"\n Arguments: Street,Avenue,Beepers,Direction");
if(vArgumentsNode.vArgumentsCount!=4)ProgramNode.mTypeCheckError(this.format(4)+"\n Arguments: Street,Avenue,Beepers,Direction");
if(vArgumentsNode.typeCheck(env))
{
vStreetValue= vArgumentsNode.vExpressionNodes[0].evaluate(env);
vAvenueValue= vArgumentsNode.vExpressionNodes[1].evaluate(env);
vBeepersValue= vArgumentsNode.vExpressionNodes[2].evaluate(env);
vDirectionValue= vArgumentsNode.vExpressionNodes[3].evaluate(env);
if(vStreetValue.isNumber()&&vAvenueValue.isNumber()&&vBeepersValue.isNumber()&&vDirectionValue.isDirection())
return true;
else ProgramNode.mTypeCheckError(this.format(4)+"\n Arguments is wrong type");
}else ProgramNode.mTypeCheckError(this.format(4)+"\n Arguments is wrong type");
return true;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -