📄 assignmentstatementnode.java
字号:
class AssignmentStatementNode extends ExecutableNode
{
IdentifierNode vIdentifierNode;
ExpressionNode vExpressionNode;
Value vExpressionValue;
static AssignmentStatementNode parserAssignmentStatement(Environment env, Scanner s) throws ParserException, ScannerException
{
IdentifierNode tmpIdentifierNode;
ExpressionNode tmpExpressionNode;
tmpIdentifierNode= IdentifierNode.parserIndentifier(env,s);
matchSimple(s,'=');
tmpExpressionNode= ExpressionNode.parserExpression(env,s);
matchSimple(s,';');
return new AssignmentStatementNode(tmpIdentifierNode, tmpExpressionNode);
}
static boolean mIsAssignmentStatement(Scanner s) throws ScannerException
{
Token t= s.followingToken();
if(t.isSimple())return ((SimpleToken)t).isAssign();
else return false;
}
AssignmentStatementNode()
{
vIdentifierNode= null;
vExpressionNode= null;
}
AssignmentStatementNode(IdentifierNode aIdentifierNode, ExpressionNode aExpressionNode)
{
vIdentifierNode= aIdentifierNode;
vExpressionNode= aExpressionNode;
}
Environment run(Environment env) throws InterpreterException
{
if(env.exists(vIdentifierNode.vName))
env.updateValue(vIdentifierNode.vName,vExpressionNode.evaluate(env));
else ProgramNode.mTypeCheckError(this.format(4) + "\nUndefine variable" + vIdentifierNode.vName);
return env;
}
String format(int indent)
{
String str= vIdentifierNode.format(indent);
if(vExpressionNode!=null)
str+= "="+vExpressionNode.format(indent);
return space(indent) + str + ";\n";
}
boolean typeCheck(Environment env) throws InterpreterException
{
if(vExpressionNode.typeCheck(env))
{
vExpressionValue= vExpressionNode.evaluate(env);
if(!vExpressionValue.getClass().getName().equals(env.at(vIdentifierNode.vName).getClass().getName()))
ProgramNode.mTypeCheckError(this.format(4));
}else ProgramNode.mTypeCheckError(this.format(4));
return true;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -