📄 usermessagenode.java
字号:
class UserMessageNode extends EvaluatableNode
{
IdentifierNode vIdentifierNode;
ArgumentsNode vArgumentsNode;
static UserMessageNode parserUserMessage(Environment env, Scanner s) throws ParserException, ScannerException
{
IdentifierNode tmpIdentifierNode;
ArgumentsNode tmpArgumentsNode;
tmpIdentifierNode= IdentifierNode.parserIndentifier(env,s);
tmpArgumentsNode= ArgumentsNode.parserArguments(env,s);
return new UserMessageNode(tmpIdentifierNode,tmpArgumentsNode);
}
UserMessageNode(IdentifierNode aIdentifierNode, ArgumentsNode aArgumentsNode)
{
vIdentifierNode= aIdentifierNode;
vArgumentsNode= aArgumentsNode;
}
UserMessageNode()
{
vIdentifierNode= null;
vArgumentsNode= null;
}
String format(int indent)
{
String str= vIdentifierNode.format(indent);
if(vArgumentsNode!=null)return str+vArgumentsNode.format(indent)+"()";
else return str+"()";
}
Value evaluate(Environment env) throws InterpreterException
{
MethodDefinitionNode tmpMethodDefinition= (MethodDefinitionNode)ProgramNode.vTopLevelEnvironment.get(vIdentifierNode.vName);
FormalParametersNode tmpFormalParameters= tmpMethodDefinition.mGetForalParameters();
Environment superEnvironment= new Environment();
Environment vEnvironment= superEnvironment.mCreateNewEnvironment();
superEnvironment.put(ProgramNode.vMessageReciever,env.get(ProgramNode.vMessageReciever));
if(vArgumentsNode!=null)
for(int i=0; i<vArgumentsNode.vArgumentsCount; i++)
vEnvironment.add(tmpFormalParameters.vVariableDeclarationNodes[i].mGetIdentifier(),vArgumentsNode.vExpressionNodes[i].evaluate(env));
ProgramNode.vTopLevelEnvironment.put("returnType", tmpMethodDefinition.mGetResultType());
if(tmpMethodDefinition.vBlockNode!=null)
tmpMethodDefinition.vBlockNode.typeCheck(vEnvironment);
tmpMethodDefinition.run(vEnvironment);
if(BlockNode.vReturn)
{
BlockNode.vReturn= false;
return (Value)ProgramNode.vTopLevelEnvironment.at("returnValue");
}
return null;
}
boolean typeCheck(Environment env) throws InterpreterException
{
MethodDefinitionNode tmpMethodDefinition= (MethodDefinitionNode)ProgramNode.vTopLevelEnvironment.get(vIdentifierNode.vName);
if(tmpMethodDefinition!=null)
{
FormalParametersNode tmpFormalParameters= tmpMethodDefinition.mGetForalParameters();
if(vArgumentsNode!=null)
if(vArgumentsNode.vArgumentsCount==tmpFormalParameters.vFormalParametersCount)
return vArgumentsNode.typeCheck(env);
else ProgramNode.mTypeCheckError(this.format(4));
else if(tmpFormalParameters.vFormalParametersCount!=0)ProgramNode.mTypeCheckError(this.format(4));
}else ProgramNode.mTypeCheckError(this.format(4));
return true;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -