My System.out.println() statements are printing only if I'm in the Eclipse debugger, and only if there's a breakpoint on the line containing them.
Some more digging shows that any println() statement that are before the call to CUP work, as long as I flush the output. Which implies that CUP (or possibly JFlex) is doing something evil to System.out.
Hmm, a full rebuild later and it works, for given values of work. Stupid race conditions between System.out and System.err, and a pox upon Java and Eclipse for doing weird things with buffering.