/* Scanner.java Implementes a simple lexical analyzer based on java.io.StreamTokenizer Compile: javac Scanner.java Execute: java Scanner */ import java.io.*; public class Scanner { public static void main(String argv[]) throws IOException { InputStreamReader reader; if (argv.length > 0) reader = new InputStreamReader(new FileInputStream(argv[0])); else reader = new InputStreamReader(System.in); // create the tokenizer: StreamTokenizer tokens = new StreamTokenizer(reader); tokens.ordinaryChar('.'); tokens.ordinaryChar('-'); tokens.ordinaryChar('/'); // keep current token in variable "next": int next; // while more input, split input stream up into tokens and display: while ((next = tokens.nextToken()) != tokens.TT_EOF) { if (next == tokens.TT_WORD) System.out.println("WORD: " + tokens.sval); else if (next == tokens.TT_NUMBER) System.out.println("NUMBER: " + tokens.nval); else { switch ((char)next) { case '"': System.out.println("STRING: " + tokens.sval); break; case '\'': System.out.println("CHAR: " + tokens.sval); break; default: System.out.println("PUNCT: " + (char)next); } } } } }