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

📄 blocknode.java

📁 是有关解释器的.用JAVA编写.可以解释一般的JAVA程序.
💻 JAVA
字号:
class BlockNode extends ExecutableNode
{
	static boolean vReturn= false;
	StatementNode[] vStatementNodes;
	int vBlockCount;
	int vBlockSize;
	Environment vSuperEnvironment;
	Environment vEnvironment;
	
	static BlockNode parserBlock(Environment env,Scanner s) throws ParserException, ScannerException														 
	{
		BlockNode tmpBlockNode= new BlockNode();		
		
		matchBracket(s,'{');
		if(!isBracketToken(s,'}'))
		{					
			tmpBlockNode.mPushStatementNode(StatementNode.parserStatement(env,s));			
			while(!isBracketToken(s,'}'))
				tmpBlockNode.mPushStatementNode(StatementNode.parserStatement(env,s));				
		}		
		matchBracket(s,'}');		
		if(tmpBlockNode.vBlockCount!=0)return tmpBlockNode;
			else return null;			
	}
	static boolean mIsBlock(Scanner s) throws ScannerException
	{
		Token t=s.token();
		if(t.isBracket())return ((BracketToken)t).isOpenBlock();
			else return false;
	}
	boolean mEmptyBlockBuf()
	{
		return vBlockCount==0;
	}
	boolean mFullBlockBuf()
	{
		return vBlockCount==vBlockSize;
	}
	void mPushStatementNode(StatementNode aStatementNode)
	{
		if(mFullBlockBuf())mAutoResizeBlockBuf();
		vStatementNodes[vBlockCount]= aStatementNode;
		vBlockCount++;
	}
	StatementNode mPopStatementNode()
	{
		if(!mEmptyBlockBuf())
		{
			vBlockCount--;
			return vStatementNodes[vBlockCount];
		}else return null;
	}
	void mResizeBlockBuf(int aNewBlockSize)
	{
		if(aNewBlockSize > vBlockCount)
		{
			StatementNode[] tmpStatementNodes;
			
			tmpStatementNodes= new StatementNode[aNewBlockSize];
			for(int i=0; i<vBlockCount; i++)		
				tmpStatementNodes[i]= vStatementNodes[i];
			vBlockSize= aNewBlockSize;
			vStatementNodes= tmpStatementNodes;
		}
	}
	void mAutoResizeBlockBuf()
	{
		mResizeBlockBuf(vBlockSize*2);
	}
	BlockNode()
	{
		vBlockCount= 0;
		vBlockSize= 4;
		vStatementNodes= new StatementNode[vBlockSize];					
	}
	BlockNode(int aBlockSize)
	{
		vBlockCount= 0;
		vBlockSize= aBlockSize;
		vStatementNodes= new StatementNode[aBlockSize];		
	}
	String format(int indent)
	{
		String str="{\n";
		for(int i=0; i<vBlockCount; i++)
			str+= vStatementNodes[i].format(indent);
		str+= "}\n";
		return str;
	}
	Environment run(Environment env) throws InterpreterException
	{		
		int i= 0;
		vSuperEnvironment= env;
		vEnvironment= vSuperEnvironment.mCreateNewEnvironment();
		
		vReturn= false;
		while((i<vBlockCount)&&(!vReturn))
		{			
			vStatementNodes[i].run(vEnvironment);			
			i++;
		}		
		
		return vEnvironment;
	}
	boolean typeCheck(Environment env) throws InterpreterException
	{				
		vSuperEnvironment= env;
		vEnvironment= vSuperEnvironment.mCreateNewEnvironment();			
		for(int i=0; i<vBlockCount; i++)
			if(!vStatementNodes[i].typeCheck(vEnvironment))ProgramNode.mTypeCheckError(this.format(4));			
		ProgramNode.vTopLevelEnvironment.put("returnType","NOTYPE");
		
		return true;
	}
}

⌨️ 快捷键说明

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