final public Exp LogicOp() throws ParseException {Exp leftExp = null;
    Exp rightExp = null;
    Token op;
    leftExp = CmpOp();
    label_9:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KWORD_AND:
      case KWORD_OR:{
        ;
        break;
        }
      default:
        jj_la1[20] = jj_gen;
        break label_9;
      }
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KWORD_AND:{
        jj_consume_token(KWORD_AND);
        break;
        }
      case KWORD_OR:{
        jj_consume_token(KWORD_OR);
        break;
        }
      default:
        jj_la1[21] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
op = token;
      rightExp = CmpOp();
leftExp = new BinaryExp(leftExp, op.image, rightExp);
    }
{if ("" != null) return leftExp;}
    throw new Error("Missing return statement in function");
  }