[kaffe] Bug report (java.io.StreamTokenizer)

Ito Kazumitsu kaz@maczuka.gcd.org
Mon Jun 30 15:50:01 2003


>>>>> ":" == Dalibor Topic <robilad@yahoo.com> writes:

:> A quick (i.e. not exhaustive) test would be to take a fresh tokenizer, reset it
:> so that all characters are ordinary, then pick a single character, and give it
:> different attribute combinations to see what precedence exists between them.

I wrote a simple program like this:

import java.io.*;
public class StreamTokenizerTest2 {
  public static void main(String[] args) throws Exception {
    StreamTokenizer tok = new StreamTokenizer(System.in);
    tok.resetSyntax();
    int c = args[0].charAt(0);
    for (int i=1; i<args.length; i++) {
       if (args[i].equals("S")) tok.whitespaceChars(c, c);
       if (args[i].equals("C")) tok.commentChar(c);
       if (args[i].equals("Q")) tok.quoteChar(c);
       if (args[i].equals("N")) tok.parseNumbers();
       if (args[i].equals("W")) tok.wordChars(c, c);
    }
    while (true) {
      int t = tok.nextToken();
      if (t == StreamTokenizer.TT_NUMBER) {
	  System.out.println(tok.nval + ": " + t);
      }
      else {
	  System.out.println(tok.sval + ": " + t);
      }
      if (t == StreamTokenizer.TT_EOF) break;
    }
  }
}

Running echo "121"| java StreamTokenizerTest2 1 N S and so on,
I found the precedence is not so simple in Sun's JDK.
It depends on in what sequence initialization methods are called.

bash$ echo "121"| java StreamTokenizerTest2 1 C S
null: 50
null: 10
null: -1
bash$ echo "121"| java StreamTokenizerTest2 1 S C
null: 10
null: -1
bash$