public int nextToken() throws IOException { StringBuffer sb = null; try { if (pushedBack) pushedBack = false; else { ttype = TT_EOF; char c; // Loop over white space while (true) { c = nextChar(); if (c == '\n') lineno++; if (Character.isSpace(c)) ; else if (c == ';') { // Read ' comment while ((c = nextChar()) != '\n') ; lineno++; } else if (c == '/') { c = nextChar(); if (c == '*') { // Read /**/ comment while (true) { while ((c = nextChar()) != '*') if (c == '\n') lineno++; c = nextChar(); if (c == '/') break; } } else if (c == '/') { // Read // comment while ((c = nextChar()) != '\n') ; lineno++; } else break; } else { break; } } if (c == '"' || c == '\'') { ttype = c; sb = new StringBuffer(); while ((c = nextChar()) != ttype) { if (c == '\\') { c = nextChar(); if (c == 'n') sb.append('\n'); if (c == 't') sb.append('\t'); else sb.append(c); } else sb.append(c); } sval = sb.toString(); } else if (!(Character.isJavaLetterOrDigit(c) || c == '<' || c == '.' || c == '-' || c == '+' || c == '[' || c == '$')) { ttype = c; } else { ttype = TT_WORD; sb = new StringBuffer(); sb.append((char) c); while (true) { c = nextChar(); if (Character.isJavaLetterOrDigit(c) || c == '<' || c == '>' || c == '/' || c == ';' || c == '.' || c == '-' || c == '+' || c == '[' || c == '$') sb.append((char) c); else { sval = sb.toString(); pushbackChar(c); break; } } } } return ttype; } catch (IOException e) { if (e.getMessage().equals("Done")) { if (ttype == TT_EOF) eof = true; if (sb != null) sval = sb.toString(); return ttype; } else throw e; } }