/* A basic extension of the java.applet.Applet class */ import java.awt.*; import java.applet.*; import java.util.*; import java.io.*; public class StreamTokeApplet extends Applet { void clearCharList_Clicked(Event event) { // to do: place event handler code here. words = null; blanks = null; ords = null; wordList.clear(); repaint(); } final static int BLANKS = 2; final static int ORDS = 1; final static int WORDS = 0; void addOrdChars_Clicked(Event event) { // to do: place event handler code here. String l = loOrdChar.getText(); String h = hiOrdChar.getText(); addWordClass(1, l, h); loOrdChar.setText(""); hiOrdChar.setText(""); repaint(); } void addBlankChars_Clicked(Event event) { // to do: place event handler code here. String l = loBlankChar.getText(); String h = hiBlankChar.getText(); addWordClass(2, l, h); loBlankChar.setText(""); hiBlankChar.setText(""); repaint(); } void addWordClass(int list, int lo, int hi) { CharList cl; String zz; if (hi > lo) cl = new CharList(lo, hi); else cl = new CharList(lo, lo); switch (list) { case WORDS: cl.next = words; words = cl; zz = "W("; break; case ORDS: cl.next = ords; ords = cl; zz = "O("; break; case BLANKS: cl.next = blanks; blanks = cl; zz = "B("; break; default: zz = "NO WORDLIST"; } if (hi == -1) wordList.addItem(zz+lo+")"); else wordList.addItem(zz+lo+", "+hi+")"); } void addWordClass(int list, String loStr, String hiStr) { String zz; int lo, hi; if (loStr.length() == 0) return; try { lo = Integer.parseInt(loStr); } catch (NumberFormatException e) { lo = (int) loStr.charAt(0); } if (hiStr.length() == 0) { hi = -1; } else { try { hi = Integer.parseInt(hiStr); } catch (NumberFormatException e) { hi = (int) hiStr.charAt(0); } } addWordClass(list, lo, hi); } void addWordChars_Clicked(Event event) { // to do: place event handler code here. String l = loWordChar.getText(); String h = hiWordChar.getText(); addWordClass(0, l, h); loWordChar.setText(""); hiWordChar.setText(""); repaint(); } void reset_syntax() { doSStar.setState(false); doSSlash.setState(false); doLower.setState(false); doNumberParse.setState(true); wordList.clear(); blanks = null; ords = null; words = null; addWordClass(BLANKS, 0, 32); addWordClass(WORDS, 0x30, 0x7a); addWordClass(ORDS, 0x21, 0x2e); addWordClass(ORDS, 0x3a, 0x40); addWordClass(ORDS, 0x5b, 0x60); addWordClass(ORDS, 0x7b, 0x7f); myQuoteChar.setText("\""); myCommentChar.setText("/"); } /** * Reset the syntax checker */ void resetSyn_Clicked(Event event) { reset_syntax(); repaint(); } void initializeSyntax(StreamTokenizer st) { CharList thisWord = words; CharList thisOrd = ords; CharList thisBlank = blanks; st.resetSyntax(); // Set up the significance of the characters. for (int i = 0; i < wordList.countItems(); i++) { String x = wordList.getItem(i); switch (x.charAt(0)) { case 'W' : st.wordChars(thisWord.loChar, thisWord.hiChar); thisWord = thisWord.next; break; case 'O': st.ordinaryChars(thisOrd.loChar, thisOrd.hiChar); thisOrd = thisOrd.next; break; case 'B' : st.whitespaceChars(thisBlank.loChar, thisBlank.hiChar); thisBlank = thisBlank.next; break; default: System.out.println("Bogus character specified."); } } // Set up the quote character String tmp = myQuoteChar.getText(); if ((tmp.length() != 0) && (tmp.charAt(0) != ' ')) { for (int k = 0; k < tmp.length(); k++) { st.quoteChar(tmp.charAt(k)); } } // Set up the comment character. tmp = myCommentChar.getText(); if ((tmp.length() != 0) && (tmp.charAt(0) != ' ')) { for (int k = 0; k < tmp.length(); k++) { st.commentChar(tmp.charAt(k)); } } // Set the boolean variables appropriately. st.slashSlashComments(doSSlash.getState()); st.slashStarComments(doSStar.getState()); st.lowerCaseMode(doLower.getState()); st.eolIsSignificant(doEol.getState()); if (doNumberParse.getState()) st.parseNumbers(); } /** * Do the work of tokenizing the world. */ void tokenizeButton_Clicked(Event event) { // to do: place event handler code here. String tmp = inputTextArea.getText(); StringBufferInputStream sis = new StringBufferInputStream(tmp); StreamTokenizer st = new StreamTokenizer(sis); boolean done = false; // clear out the old tokens. tokenList.clear(); if (tmp.length() == 0) tokenList.addItem("Nothing to PARSE!"); if (customSyntax.getState()) { initializeSyntax(st); } while (! done) { int c = StreamTokenizer.TT_EOF; try { c = st.nextToken(); } catch (IOException e) { break; } switch (c) { case StreamTokenizer.TT_EOF: tokenList.addItem(""); done = true; break; case StreamTokenizer.TT_EOL: tokenList.addItem(""); break; case StreamTokenizer.TT_WORD: tokenList.addItem("W - '"+st.sval+"'"); break; case StreamTokenizer.TT_NUMBER: tokenList.addItem("N - '"+st.nval+"'"); break; default: boolean wasQuote = false; if (customSyntax.getState()) { String qc = myQuoteChar.getText(); for (int k = 0; k < qc.length(); k++) { if (c == qc.charAt(k)) { tokenList.addItem("Q - '"+st.sval+"'"); wasQuote = true; break; } } } else if ((c == 0x22) || (c == 0x27)) { tokenList.addItem("Q - '"+st.sval+"'"); wasQuote = true; } if (! wasQuote) tokenList.addItem("O - '"+(char)(st.ttype)+"'"); break; } } repaint(); } void clearButton_Clicked(Event event) { // to do: place event handler code here. inputTextArea.setText(" "); repaint(); } public void init() { super.init(); //{{INIT_CONTROLS setLayout(null); addNotify(); resize(600,440); setBackground(new Color(16777200)); label11 = new java.awt.Label("TO",Label.CENTER); label11.reshape(265,334,31,22); add(label11); tokenList = new java.awt.List(0,false); add(tokenList); tokenList.reshape(196,53,100,202); doEol = new java.awt.Checkbox("EOL is significant"); doEol.reshape(425,207,138,22); add(doEol); doSStar = new java.awt.Checkbox("/* Comments"); doSStar.reshape(425,177,100,22); add(doSStar); doSSlash = new java.awt.Checkbox("// Comments"); doSSlash.reshape(425,147,100,22); add(doSSlash); doLower = new java.awt.Checkbox("Lower Case Words"); doLower.reshape(425,117,125,22); add(doLower); myCommentChar = new java.awt.TextField(); myCommentChar.reshape(425,269,22,22); add(myCommentChar); inputTextArea = new java.awt.TextArea(); inputTextArea.reshape(11,53,167,201); add(inputTextArea); clearButton = new java.awt.Button("Clear Input!"); clearButton.reshape(11,267,83,27); add(clearButton); tokenizeButton = new java.awt.Button("Tokenize!"); tokenizeButton.reshape(104,267,60,27); add(tokenizeButton); label1 = new java.awt.Label(" Input Text"); label1.reshape(12,30,167,18); add(label1); label2 = new java.awt.Label(" Token List"); label2.reshape(196,30,100,18); add(label2); label3 = new java.awt.Label("Comment Char"); label3.reshape(453,268,100,22); add(label3); myQuoteChar = new java.awt.TextField(); myQuoteChar.reshape(425,237,22,20); add(myQuoteChar); label4 = new java.awt.Label("Quote Char"); label4.reshape(453,238,100,22); add(label4); loWordChar = new java.awt.TextField(); loWordChar.reshape(190,334,68,24); add(loWordChar); loOrdChar = new java.awt.TextField(); loOrdChar.reshape(190,364,68,24); add(loOrdChar); loBlankChar = new java.awt.TextField(); loBlankChar.reshape(190,394,68,24); add(loBlankChar); label5 = new java.awt.Label(" Ordinary Characters :",Label.RIGHT); label5.reshape(10,364,173,24); add(label5); label6 = new java.awt.Label("White Space Characters :",Label.RIGHT); label6.reshape(10,394,173,24); add(label6); label7 = new java.awt.Label(" Word Characters :",Label.RIGHT); label7.reshape(10,334,173,24); add(label7); addWordChars = new java.awt.Button("Add Word Chars"); addWordChars.reshape(386,334,100,24); add(addWordChars); addBlankChars = new java.awt.Button("Add Blank Chars"); addBlankChars.reshape(386,394,100,24); add(addBlankChars); addOrdChars = new java.awt.Button("Add Ord Chars"); addOrdChars.reshape(386,364,100,24); add(addOrdChars); wordList = new java.awt.List(0,false); add(wordList); wordList.reshape(315,53,100,202); label8 = new java.awt.Label("Significant"); label8.reshape(315,7,100,24); add(label8); resetSyn = new java.awt.Button("Reset Syntax!"); resetSyn.reshape(174,267,100,27); add(resetSyn); hiWordChar = new java.awt.TextField(); hiWordChar.reshape(304,334,60,24); add(hiWordChar); hiOrdChar = new java.awt.TextField(); hiOrdChar.reshape(304,364,60,24); add(hiOrdChar); hiBlankChar = new java.awt.TextField(); hiBlankChar.reshape(304,394,60,24); add(hiBlankChar); label9 = new java.awt.Label("TO",Label.CENTER); label9.reshape(265,364,31,22); add(label9); label12 = new java.awt.Label("TO",Label.CENTER); label12.reshape(265,394,31,22); add(label12); label10 = new java.awt.Label("Low Value"); label10.reshape(190,307,87,22); add(label10); label13 = new java.awt.Label("High Value"); label13.reshape(304,307,89,22); add(label13); customSyntax = new java.awt.Checkbox("Use custom syntax!"); customSyntax.reshape(425,52,150,25); customSyntax.setForeground(new Color(0)); add(customSyntax); doNumberParse = new java.awt.Checkbox("Parse Numbers"); doNumberParse.reshape(425,85,120,24); add(doNumberParse); clearCharList = new java.awt.Button("Clear Character List!"); clearCharList.reshape(284,267,130,27); add(clearCharList); label14 = new java.awt.Label("Characters"); label14.reshape(315,26,100,24); add(label14); //}} reset_syntax(); } public boolean handleEvent(Event event) { if (event.target == clearButton && event.id == Event.ACTION_EVENT) { clearButton_Clicked(event); } if (event.target == tokenizeButton && event.id == Event.ACTION_EVENT) { tokenizeButton_Clicked(event); } if (event.target == resetSyn && event.id == Event.ACTION_EVENT) { resetSyn_Clicked(event); } if (event.target == addWordChars && event.id == Event.ACTION_EVENT) { addWordChars_Clicked(event); } if (event.target == addBlankChars && event.id == Event.ACTION_EVENT) { addBlankChars_Clicked(event); } if (event.target == addOrdChars && event.id == Event.ACTION_EVENT) { addOrdChars_Clicked(event); } if (event.target == clearCharList && event.id == Event.ACTION_EVENT) { clearCharList_Clicked(event); } return super.handleEvent(event); } //{{DECLARE_CONTROLS java.awt.Label label11; java.awt.List tokenList; java.awt.Checkbox doEol; java.awt.Checkbox doSStar; java.awt.Checkbox doSSlash; java.awt.Checkbox doLower; java.awt.TextField myCommentChar; java.awt.TextArea inputTextArea; java.awt.Button clearButton; java.awt.Button tokenizeButton; java.awt.Label label1; java.awt.Label label2; java.awt.Label label3; java.awt.TextField myQuoteChar; java.awt.Label label4; java.awt.TextField loWordChar; java.awt.TextField loOrdChar; java.awt.TextField loBlankChar; java.awt.Label label5; java.awt.Label label6; java.awt.Label label7; java.awt.Button addWordChars; java.awt.Button addBlankChars; java.awt.Button addOrdChars; java.awt.List wordList; java.awt.Label label8; java.awt.Button resetSyn; java.awt.TextField hiWordChar; java.awt.TextField hiOrdChar; java.awt.TextField hiBlankChar; java.awt.Label label9; java.awt.Label label12; java.awt.Label label10; java.awt.Label label13; java.awt.Checkbox customSyntax; java.awt.Checkbox doNumberParse; java.awt.Button clearCharList; java.awt.Label label14; //}} CharList words = null; CharList ords = null; CharList blanks = null; } class CharList { public char loChar, hiChar; public CharList next; public CharList(int lo, int hi) { loChar = (char) lo; hiChar = (char) hi; } }