5 public class ForQuantifier extends Quantifier {
7 VarDescriptor var = null;
11 public ForQuantifier() {}
13 public void setVar(VarDescriptor vd) {
17 public void setBounds(Expr lower, Expr upper) {
22 public Set getRequiredDescriptors() {
26 public String toString() {
27 return "for quantifier " + var.getSymbol() + " = " + lower + " to " + upper;
30 public void generate_open(CodeWriter writer) {
31 VarDescriptor ld = VarDescriptor.makeNew();
32 VarDescriptor ud = VarDescriptor.makeNew();
33 lower.generate(writer, ld);
34 upper.generate(writer, ud);
36 writer.outputline("for (int " + var.getSafeSymbol() + " = " + ld.getSafeSymbol() + "; " + var.getSafeSymbol() + " <= " + ud.getSafeSymbol() + "; " + var.getSafeSymbol() + "++) {");
40 public boolean typecheck(SemanticAnalyzer sa) {
41 TypeDescriptor lt = lower.typecheck(sa);
42 TypeDescriptor ut = upper.typecheck(sa);
44 if (lt == null || ut == null) {
50 if (lt != ReservedTypeDescriptor.INT) {
51 sa.getErrorReporter().report(null, "Lower bound of for quantifier must be of type 'int'");
55 if (ut != ReservedTypeDescriptor.INT) {
56 sa.getErrorReporter().report(null, "Upper bound of for quantifier must be of type 'int'");