001package org.clafer.ast;
002
003import org.clafer.common.Check;
004
005/**
006 *
007 * @author jimmy
008 */
009public class AstCompare implements AstBoolExpr {
010
011    private final AstSetExpr left;
012    private final Op op;
013    private final AstSetExpr right;
014
015    AstCompare(AstSetExpr left, Op op, AstSetExpr right) {
016        this.left = Check.notNull(left);
017        this.op = Check.notNull(op);
018        this.right = Check.notNull(right);
019    }
020
021    public Op getOp() {
022        return op;
023    }
024
025    public AstSetExpr getLeft() {
026        return left;
027    }
028
029    public AstSetExpr getRight() {
030        return right;
031    }
032
033    @Override
034    public <A, B> B accept(AstExprVisitor<A, B> visitor, A a) {
035        return visitor.visit(this, a);
036    }
037
038    @Override
039    public String toString() {
040        return left + " " + op.getSyntax() + " " + right;
041    }
042    
043    public static enum Op {
044
045        LessThan("<"),
046        LessThanEqual("<="),
047        GreaterThan(">"),
048        GreaterThanEqual(">=");
049        private final String syntax;
050
051        private Op(String syntax) {
052            this.syntax = syntax;
053        }
054
055        public String getSyntax() {
056            return syntax;
057        }
058    }
059}