messagesendnode.java

来自「是有关解释器的.用JAVA编写.可以解释一般的JAVA程序.」· Java 代码 · 共 53 行

JAVA
53
字号
class MessageSendNode extends EvaluatableNode
{
	IdentifierNode vIdentifierNode;
	MessageNode vMessageNode;
	
	static MessageSendNode parseMessageSend(Environment env, Scanner s) throws ParserException, ScannerException
	{
		Token t= s.followingToken();
		IdentifierNode tmpIdentifierNode=null;
		MessageNode tmpMessageNode;
		
		if(t.isSimple()&&((SimpleToken)t).isMessageSend())
		{
			tmpIdentifierNode= IdentifierNode.parserIndentifier(env,s);
			matchSimple(s,'.');
		}
		tmpMessageNode= MessageNode.parserMessage(env,s);
		
		return new MessageSendNode(tmpIdentifierNode,tmpMessageNode);
	}	
	MessageSendNode(IdentifierNode aIdentifierNode, MessageNode aMessageNode)
	{
		vIdentifierNode= aIdentifierNode;
		vMessageNode= aMessageNode;
	}
	MessageSendNode()
	{
		vIdentifierNode= null;
		vMessageNode= null;
	}
	String format(int indent)
	{
		String str="";
		if(vIdentifierNode!=null)str= vIdentifierNode.format(indent)+".";
		return str+vMessageNode.format(indent);
	}
	Value evaluate(Environment env) throws InterpreterException
	{
		String lastReceiver= ProgramNode.vMessageReciever;
		if(vIdentifierNode!=null)
			ProgramNode.vMessageReciever= vIdentifierNode.vName;		
		Value result= vMessageNode.evaluate(env);
		ProgramNode.vMessageReciever= lastReceiver;
		
		return result;
	}
	boolean typeCheck(Environment env) throws InterpreterException
	{		
		if(vIdentifierNode!=null)
			ProgramNode.vMessageReciever= vIdentifierNode.vName;						
		return vMessageNode.typeCheck(env);	
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?