variabledefinitionnode.java
来自「是有关解释器的.用JAVA编写.可以解释一般的JAVA程序.」· Java 代码 · 共 90 行
JAVA
90 行
/** * 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 + =
减小字号Ctrl + -
显示快捷键?