Implemented != expression
This commit is contained in:
@@ -30,6 +30,16 @@ public class EvalVisitor implements Visitor<Value> {
|
||||
return new Value(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Value visit(NotEqualityExpression e) {
|
||||
Value lhs = e.lhs.welcome(this);
|
||||
Value rhs = e.rhs.welcome(this);
|
||||
if (lhs.asInteger() != rhs.asInteger()) {
|
||||
return new Value(1);
|
||||
}
|
||||
return new Value(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Value visit(GTExpression e) {
|
||||
Value lhs = e.lhs.welcome(this);
|
||||
|
||||
@@ -95,6 +95,27 @@ public class GenASM implements Visitor<Void> {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void visit(NotEqualityExpression e) {
|
||||
int lblTrue = ++lCount;
|
||||
int lblEnd = ++lCount;
|
||||
|
||||
e.lhs.welcome(this);
|
||||
this.ex.write(" pushq %rax\n");
|
||||
e.rhs.welcome(this);
|
||||
this.ex.write(" popq %rbx\n");
|
||||
this.ex.write(" cmp %rax, %rbx\n");
|
||||
this.ex.write(" jne .L" + lblTrue + "\n");
|
||||
// false
|
||||
this.ex.write(" movq $0, %rax\n");
|
||||
this.ex.write(" jmp .L" + lblEnd + "\n");
|
||||
this.ex.write(".L" + lblTrue + ":\n");
|
||||
// true
|
||||
this.ex.write(" movq $1, %rax\n");
|
||||
this.ex.write(".L" + lblEnd + ":\n");
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void visit(GTExpression e) {
|
||||
int lblTrue = ++lCount;
|
||||
|
||||
@@ -31,6 +31,13 @@ class GetVars implements Visitor<Void> {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void visit(NotEqualityExpression e) {
|
||||
e.lhs.welcome(this);
|
||||
e.rhs.welcome(this);
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void visit(GTExpression e) {
|
||||
e.lhs.welcome(this);
|
||||
|
||||
@@ -80,6 +80,16 @@ public class PrettyPrintVisitor implements Visitor<Void> {
|
||||
ex.write(")");
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void visit(NotEqualityExpression e) {
|
||||
ex.write("(");
|
||||
e.lhs.welcome(this);
|
||||
ex.write(" != ");
|
||||
e.rhs.welcome(this);
|
||||
ex.write(")");
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void visit(GTExpression e) {
|
||||
|
||||
@@ -11,6 +11,7 @@ public interface Visitor<R> {
|
||||
R visit(Variable e);
|
||||
R visit(AdditionExpression e);
|
||||
R visit(EqualityExpression e);
|
||||
R visit(NotEqualityExpression e);
|
||||
R visit(GTExpression e);
|
||||
R visit(GTEExpression e);
|
||||
R visit(LTExpression e);
|
||||
|
||||
Reference in New Issue
Block a user