returnstatementnode.java
来自「是有关解释器的.用JAVA编写.可以解释一般的JAVA程序.」· Java 代码 · 共 68 行
JAVA
68 行
/** * Class representing a return statement * */
class ReturnStatementNode extends ExecutableNode
{
ExpressionNode vExpressionNode; Value vExpressionValue;
static ReturnStatementNode parserReturnStatement(Environment env, Scanner s) throws ParserException, ScannerException
{
ExpressionNode tmpExpressionNode=null;
matchKeyword(s, "return");
if(!isSimpleToken(s,';'))
tmpExpressionNode= ExpressionNode.parserExpression(env,s);
matchSimple(s, ';');
return new ReturnStatementNode(tmpExpressionNode);
}
static boolean mIsReturnStatement(Scanner s) throws ScannerException { return isKeywordToken(s,"return"); }
ReturnStatementNode()
{
vExpressionNode= null;
}
ReturnStatementNode(ExpressionNode aExpressionNode)
{
vExpressionNode= aExpressionNode;
}
Environment run(Environment env) throws InterpreterException
{ ProgramNode.vTopLevelEnvironment.put("returnValue", vExpressionValue);
BlockNode.vReturn= true; return env;
}
String format(int indent)
{ String str=""; if(vExpressionNode!=null)str= vExpressionNode.format(indent);
return space(indent) + "return "+str+";\n";
} boolean typeCheck(Environment env) throws InterpreterException { Object resultType= ProgramNode.vTopLevelEnvironment.get("returnType"); if(resultType.toString().equals("void")) if(vExpressionNode!=null)ProgramNode.mTypeCheckError(this.format(4) + " mustn't exist in a void method"); else return true; else { if(vExpressionNode.typeCheck(env)) { vExpressionValue= vExpressionNode.evaluate(env); if(vExpressionValue.isOfType(resultType.toString()))return true; else ProgramNode.mTypeCheckError(this.format(4) + " isn't match the type of the method"); }else ProgramNode.mTypeCheckError(vExpressionNode.format(4)); } return false; }
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?