41 lines
1.1 KiB
Java
41 lines
1.1 KiB
Java
class LogicalNode extends BinaryNode {
|
|
|
|
LogicalNode(String aOp, ExpressionNode aLeft, ExpressionNode aRight)
|
|
{
|
|
super(aOp, aLeft, aRight);
|
|
}
|
|
|
|
void eval(Environment theEnv)
|
|
{
|
|
left.eval(theEnv);
|
|
double d = theEnv.theStack.pop().d;
|
|
if (op == "&&") {
|
|
if (d == 0.0)
|
|
theEnv.theStack.push(new StackValue(0));
|
|
else {
|
|
right.eval(theEnv);
|
|
d = theEnv.theStack.pop().d;
|
|
if (d == 0.0)
|
|
theEnv.theStack.push(new StackValue(0));
|
|
else
|
|
theEnv.theStack.push(new StackValue(1));
|
|
}
|
|
}
|
|
if (op == "||") {
|
|
if (d != 0.0)
|
|
theEnv.theStack.push(new StackValue(1));
|
|
else {
|
|
right.eval(theEnv);
|
|
d = theEnv.theStack.pop().d;
|
|
if (d != 0.0)
|
|
theEnv.theStack.push(new StackValue(1));
|
|
else
|
|
theEnv.theStack.push(new StackValue(0));
|
|
}
|
|
}
|
|
else
|
|
System.out.println("missing logical op " + op);
|
|
}
|
|
|
|
}
|