orclausenode.java
来自「是有关解释器的.用JAVA编写.可以解释一般的JAVA程序.」· Java 代码 · 共 64 行
JAVA
64 行
class OrClauseNode extends EvaluatableNode
{
AndClauseNode vAndClauseNode;
OrClauseNode vOrClauseNode;
Value vAndClauseValue;
Value vOrClauseValue;
static OrClauseNode parserOrClause(Environment env, Scanner s)throws ParserException, ScannerException
{
AndClauseNode tmpAndClauseNode;
OrClauseNode tmpOrClauseNode = null;
Token t;
tmpAndClauseNode = AndClauseNode.parserAndClause(env, s);
t = s.token();
if (t.isOperator() && ((OperatorToken) t).isOr())
{
matchOperator(s, ((OperatorToken) t).content());
tmpOrClauseNode = OrClauseNode.parserOrClause(env, s);
}
return new OrClauseNode(tmpAndClauseNode, tmpOrClauseNode);
}
OrClauseNode()
{
vAndClauseNode = null;
vOrClauseNode = null;
}
OrClauseNode(AndClauseNode aAndClauseNode, OrClauseNode aOrClauseNode)
{
vAndClauseNode = aAndClauseNode;
vOrClauseNode = aOrClauseNode;
}
String format(int indent)
{
String str= vAndClauseNode.format(indent);
if(vOrClauseNode!=null)
str+= "||"+vOrClauseNode.format(indent);
return str;
}
Value evaluate(Environment env) throws InterpreterException
{
if(vOrClauseNode==null)return vAndClauseNode.evaluate(env);
else return vAndClauseNode.evaluate(env).or(vOrClauseNode.evaluate(env));
}
boolean typeCheck(Environment env) throws InterpreterException
{
if(vAndClauseNode.typeCheck(env))
{
vAndClauseValue= vAndClauseNode.evaluate(env);
if(vOrClauseNode!=null)
if(vAndClauseValue.isBoolean())
{
if(vOrClauseNode.typeCheck(env))
{
vOrClauseValue= vOrClauseNode.evaluate(env);
if(!vOrClauseValue.isBoolean())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 + -
显示快捷键?