⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 returnstatementnode.java

📁 是有关解释器的.用JAVA编写.可以解释一般的JAVA程序.
💻 JAVA
字号:
/** * 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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -