E' inutile che fai il test per vedere se hai un altro token e poi indipendentemente dal risultato tenti di leggere il token successivo.

Dopo avere verificato che x è falso devi uscire dal loop, prima di richiamare st1.nextToken().