Пример #1
0
  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;
    }
  }