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

📄 variabledefinitionnode.java

📁 是有关解释器的.用JAVA编写.可以解释一般的JAVA程序.
💻 JAVA
字号:
/** * Class representing a variable definition * */

class VariableDefinitionNode extends ExecutableNode
{
	VariableDeclarationNode vVariableDeclarationNode;
	ExpressionNode vExpressionNode;	Value vExpressionValue;

    static VariableDefinitionNode parserVariableDefinition(Environment env, Scanner s) throws ParserException, ScannerException
    {    	
        VariableDeclarationNode tmpVariableDeclarationNode;        ExpressionNode tmpExpressionNode= null;
        
        tmpVariableDeclarationNode= VariableDeclarationNode.parserVariableDeclaration(env,s);    	    	
        if(isSimpleToken(s,'='))        {
        	matchSimple(s,'=');        	tmpExpressionNode= ExpressionNode.parserExpression(env,s);        }        matchSimple(s,';');               
    	return new VariableDefinitionNode(tmpVariableDeclarationNode, tmpExpressionNode);
    }    static boolean mIsVariableDefinition(Scanner s) throws ScannerException	{    	return VariableDeclarationNode.mIsVariableDeclaration(s);	}
    String mGetIdentifier()    {    	return vVariableDeclarationNode.mGetIdentifier();     }    String mGetIdentifierType()    {    	return vVariableDeclarationNode.vVariableTypeNode.vVariableType;    }
    VariableDefinitionNode(VariableDeclarationNode aVariableDeclarationNode, ExpressionNode aExpressionNode)
    {
        vVariableDeclarationNode= aVariableDeclarationNode;        vExpressionNode= aExpressionNode;
    }
    VariableDefinitionNode()
	{
    	vVariableDeclarationNode= null;
    	vExpressionNode= null;
	}

    Environment run(Environment env) throws InterpreterException
    {    	vVariableDeclarationNode.run(env);    	if(vExpressionNode!=null)    		env.updateValue(mGetIdentifier(),vExpressionValue);    	    	return env;
    }

    String format(int indent)
    {    	String str= space(indent)+vVariableDeclarationNode.format(indent);    	if(vExpressionNode!=null)    		str+= "="+vExpressionNode.format(indent);    	str+=";\n";    
        return str;
    }    boolean typeCheck(Environment env) throws InterpreterException	{	     	    	    	if(vVariableDeclarationNode.typeCheck(env))    	{    		    		if(vExpressionNode!=null)    		{    			if((!mGetIdentifierType().equals("Robot")) &&    					(vExpressionNode.vExpressionNode.getClass().getName().equals("ObjectCreationNode")))						ProgramNode.mTypeCheckError(this.format(4));    			if(vExpressionNode.typeCheck(env))    			{    			    				vExpressionValue= vExpressionNode.evaluate(env);    				if(vExpressionValue!=null)    					if(vExpressionValue.isOfType(mGetIdentifierType()))			    						env.updateValue(vVariableDeclarationNode.vIdentifierNode.vName,vExpressionValue);    					else ProgramNode.mTypeCheckError(this.format(4));    				else ProgramNode.mTypeCheckError(this.format(4));    			}else ProgramNode.mTypeCheckError(this.format(4));    		}    	}else ProgramNode.mTypeCheckError(this.format(4));    					return true;    		}
}

⌨️ 快捷键说明

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