📄 argumentsnode.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 + -