// ** This class was generated with DemFGen (vers:09/27/2009)

package gen;

import edu.neu.ccs.demeterf.lib.*;
import edu.neu.ccs.demeterf.*;
import edu.neu.ccs.demeterf.lib.*;




/** Representation of Oper */
public abstract class Oper{

    /** Construct a(n) Oper Instance */
    public Oper(){
    }
    /** Parse an instance of Oper from the given String */
    public static Oper parse(String inpt) throws ParseException{
        return new TheParser(new java.io.StringReader(inpt)).parse_Oper();
    }
    /** Parse an instance of Oper from the given Stream */
    public static Oper parse(java.io.InputStream inpt) throws ParseException{
        return new TheParser(inpt).parse_Oper();
    }
    /** Parse an instance of Oper from the given Reader */
    public static Oper parse(java.io.Reader inpt) throws ParseException{
        return new TheParser(inpt).parse_Oper();
    }


    public abstract int eval(int l, int r);
    public abstract List<Op> compile(List<ident> env);

    public static abstract class Vis<X>{
        public abstract X visit(Sub s);
    }
    public abstract <X> X accept(Vis<X> v);
    public boolean isSub(){ return false; }
 
    /** DGP method from Class Print */
    public String print(){ return gen.Print.PrintM(this); }

}