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

📄 argumentsnode.java

📁 是有关解释器的.用JAVA编写.可以解释一般的JAVA程序.
💻 JAVA
字号:
class ArgumentsNode extends EvaluatableNode
{
	ExpressionNode[] vExpressionNodes;

	int vArgumentsCount;
	int vArgumentsSize;
	
	static ArgumentsNode parserArguments(Environment env, Scanner s) throws ParserException, ScannerException
	{
		ArgumentsNode tmpArgumentsNode= new ArgumentsNode();
		
		matchBracket(s,'(');
		if(!isBracketToken(s,')'))
		{
			tmpArgumentsNode.mPushExpressionNode(ExpressionNode.parserExpression(env,s));
			while(!isBracketToken(s,')'))
			{
				matchSimple(s,',');		
				tmpArgumentsNode.mPushExpressionNode(ExpressionNode.parserExpression(env,s));
			}
		}
		matchBracket(s,')');
		
		if(tmpArgumentsNode.vArgumentsCount>0)return tmpArgumentsNode;
			else return null;
	}
	static boolean mIsArguments(Scanner s) throws ScannerException
	{
		return isBracketToken(s,'(');
	}
	boolean mFullArgumentsBuf()
	{
		return vArgumentsCount==vArgumentsSize;
	}
	boolean mEmptyArgumentsBuf()
	{
		return vArgumentsCount==0;
	}
	void mPushExpressionNode(ExpressionNode aExpressinNode)
	{
		if(mFullArgumentsBuf())mAutoResizeArgumentsBuf();
		vExpressionNodes[vArgumentsCount]= aExpressinNode;
		vArgumentsCount++;
	}
	ExpressionNode mPopExpressionNode()
	{
		if(!mEmptyArgumentsBuf())
		{
			vArgumentsCount--;
			return vExpressionNodes[vArgumentsCount];
		}
		return null;
	}
	void mResizeArgumentsBuf(int aNewArgumentsSize)
	{
		if(aNewArgumentsSize > vArgumentsCount)
		{
			ExpressionNode[] tmpExpressionNodes= new ExpressionNode[aNewArgumentsSize];
			for(int i=0; i < vArgumentsCount; i++)
				tmpExpressionNodes[i]= vExpressionNodes[i];
			vArgumentsSize= aNewArgumentsSize;
			vExpressionNodes= tmpExpressionNodes;
		}
	}
	void mAutoResizeArgumentsBuf()
	{
		mResizeArgumentsBuf(vArgumentsSize*2);
	}
	ArgumentsNode()
	{
		vArgumentsCount= 0;
		vArgumentsSize= 4;
		vExpressionNodes= new ExpressionNode[4];
	}
	ArgumentsNode(int aArgumentsSize)
	{
		vArgumentsCount= 0;
		vArgumentsSize= aArgumentsSize;
		vExpressionNodes= new ExpressionNode[aArgumentsSize];
	}
	String format(int indent)
	{
		String str="(";
		if(vArgumentsCount>0)str+=vExpressionNodes[0].format(indent);
		for(int i=1; i<vArgumentsCount; i++)
			str+=", "+vExpressionNodes[i].format(indent);
		return str+")";
	}
	Value evaluate(Environment env) throws InterpreterException
	{
		return null;
	}
	boolean typeCheck(Environment env) throws InterpreterException
	{		
		for(int i=0; i<vArgumentsCount; i++)		
			if(!vExpressionNodes[i].typeCheck(env))ProgramNode.mTypeCheckError(this.format(4));
				
		return true;
	}
	
}

⌨️ 快捷键说明

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