00001: package clogs.ast; 00002: 00003: import clogs.util.Optional; 00004: 00005: 00006: public class ExpBinOp extends Exp 00007: { 00008: public enum BinOp { 00009: PLUS ("+"), 00010: MINUS ("-"), 00011: TIMES ("*"), 00012: DIVIDE ("/"), 00013: MOD ("%"), 00014: LESSTHAN ("<"), 00015: GREATERTHAN (">"), 00016: LEQ ("<="), 00017: GEQ (">="), 00018: EQUALSEQUALS ("=="), 00019: BANGEQUALS ("!="), 00020: AMP ("&"), 00021: CARET ("^"), 00022: BAR ("|"), 00023: AMPAMP ("&&"), 00024: BARBAR ("||"); 00025: 00026: final String string; 00027: 00028: BinOp (String string) 00029: { 00030: this.string = string; 00031: } 00032: 00033: public String toString () 00034: { 00035: return string; 00036: } 00037: }; 00038: 00039: 00040: public final BinOp op; 00041: public final Exp left; 00042: public final Exp right; 00043: 00044: 00045: public ExpBinOp (BinOp op, Exp left, Exp right) 00046: { 00047: this (new Optional<Type> (), op, left, right); 00048: } 00049: 00050: 00051: ExpBinOp (Optional<Type> to, BinOp op, Exp left, Exp right) 00052: { 00053: super (to); 00054: clogs.util.NonNull.check (op, left, right); 00055: this.op = op; 00056: this.left = left; 00057: this.right = right; 00058: } 00059: 00060: 00061: public Exp setType (Type type) 00062: { 00063: return new ExpBinOp (new Optional<Type> (type), op, left, right); 00064: } 00065: } 00066: