returnstatementnode.java

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

JAVA
68
字号
/** * Class representing a return statement * */

class ReturnStatementNode extends ExecutableNode
{
	ExpressionNode vExpressionNode;	Value vExpressionValue;
	
    static ReturnStatementNode parserReturnStatement(Environment env, Scanner s) throws ParserException, ScannerException
    {
    	ExpressionNode tmpExpressionNode=null;
    	
        matchKeyword(s, "return");
        if(!isSimpleToken(s,';'))
        	tmpExpressionNode= ExpressionNode.parserExpression(env,s); 
        matchSimple(s, ';');
 
        return new ReturnStatementNode(tmpExpressionNode); 
    }
    static boolean mIsReturnStatement(Scanner s) throws ScannerException	{    	return isKeywordToken(s,"return");	}
    ReturnStatementNode()
    {
    	vExpressionNode= null;
    }
    ReturnStatementNode(ExpressionNode aExpressionNode)
	{
    	vExpressionNode= aExpressionNode;
	}
    
    Environment run(Environment env) throws InterpreterException
    {    	    	            	    	       	ProgramNode.vTopLevelEnvironment.put("returnValue", vExpressionValue);    
    	BlockNode.vReturn= true;    	    	return env;
    }

    String format(int indent)
    {    	String str="";    	if(vExpressionNode!=null)str= vExpressionNode.format(indent);
        return space(indent) + "return "+str+";\n";
    }    boolean typeCheck(Environment env) throws InterpreterException	{        	Object resultType= ProgramNode.vTopLevelEnvironment.get("returnType");    	    	if(resultType.toString().equals("void"))    		if(vExpressionNode!=null)ProgramNode.mTypeCheckError(this.format(4) + " mustn't exist in a void method");    			else return true;    	else    	{    		if(vExpressionNode.typeCheck(env))    		{    			    			vExpressionValue= vExpressionNode.evaluate(env);    			if(vExpressionValue.isOfType(resultType.toString()))return true;    				else ProgramNode.mTypeCheckError(this.format(4) + "  isn't match the type of the method");    		}else ProgramNode.mTypeCheckError(vExpressionNode.format(4));    	} 	    				    	return false;	}
}

⌨️ 快捷键说明

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