private Value expression() throws Exception
    {
        Value previous, rval;
        previous = rval = term();
        while(scan.sym == Token.add || scan.sym == Token.sub) {
            Token op = scan.sym;
            scan.next();
            previous = rval;
            Value next = term();
	    Instruction ins;
	    if(op == Token.add) {
		ins = new Add(previous, next);
	    } else {            // op == Token.sub
		ins = new Sub(previous, next);
	    }
	    currentBB.addInstruction(ins);
	    rval = ins;
	}
        return rval;
    }