TermTokenizer.java
|
import java.io.*; import java.util.Date; import ilog.language.syntax.*; import ilog.language.io.StreamTokenizer; public class TermTokenizer implements Tokenizer { BufferedReader reader; StreamTokenizer input; String file = "stdin"; TermTokenizer () throws IOException { setupReader(new InputStreamReader(System.in)); interactive = true; banner(); prompt(); } TermTokenizer (File file) throws IOException { setupReader(new FileReader(file)); this.file = file.toString(); interactive = false; banner(); System.out.println("*** Parsing file: "+file); } private void setupReader (Reader rd) { setReader(rd); input = new StreamTokenizer(reader); input.ordinaryChars("+-/"); input.quoteChar('\'',0); // no escape allowed } public final int lineNumber() { return input.getLineNumber(); } public final void setReader (Reader rd) { reader = new BufferedReader(rd); } public final Reader getReader () { return reader; } public static boolean interactive; static String prompt = "> "; public static final void prompt () { if (interactive) { System.out.print(prompt); } } static public final void setPrompt(String p) { prompt = p; } static String banner = "*** Welcome to the dynamic operator Term Parser!\n"+ "*** Version of "+ (new Date()); public static final void banner () { System.out.println(banner); } final boolean isOtherChar (int c) { return input.isOrdinaryChar(c) && !(input.isWhitespaceChar(c) || c == '(' || c == ')' || c == ','); } final ParseNode locate (ParseNode node) { return ((ParseNode)node.setStart(input.tokenStart).setEnd(input.tokenEnd)) .setFile(file); } public ParseNode nextToken() throws IOException { ParseNode t = null; switch (input.nextToken()) { case StreamTokenizer.TT_EOF: reader.close(); t = GenericParser.E_O_I; break; case '\'': case '"': case StreamTokenizer.TT_WORD: if (input.sval == "exit") t = GenericParser.literalToken("exit"); else t = GenericParser.symbolToken("FUNCTOR",input.sval); break; case StreamTokenizer.TT_NUMBER: if (input.isInteger) t = GenericParser.numberToken("NUMBER",(int)input.nval); else t = GenericParser.numberToken("NUMBER",input.nval); break; case '(': case ')': case ',': case '.': t = GenericParser.literalToken(String.valueOf((char)input.ttype)); break; default: // read the longest possible token and return it as a symbol StringBuffer functor = new StringBuffer(); input.spaceIsSignificant(true); do functor.append(String.valueOf((char)input.ttype)); while (isOtherChar(input.nextToken())); input.pushBack(); input.spaceIsSignificant(false); t = GenericParser.symbolToken("FUNCTOR",functor.toString()); break; } return locate(t); } }
This file was generated on Mon Dec 20 19:03:12 PST 2004 from file TermTokenizer.java
by the ilog.language.tools.Hilite Java tool written by Hassan Aït-Kaci