public class AbstractParser() { public Map commands; public Map clientStrings; static AbstractParser init() { commands = new Map; addCommands(); } static void addCommands { //define in subclass } public String[] tokenize(String string) { StringTokenizer t = new StringTokenizer(string); String token; String stringBuffer = new String; while (t.hasMoreTokens()) { token = t.nextToken(); commandList.add(token); }; return commandList } public void read(String string) { StringTokenizer t = new StringTokenizer(string); String name; boolean isEnd; String[] commandList = new List; String[] lastCommands; commandList = tokenize(string); isEnd = (string.lastElement != "\n\r"); name = commandList[0]; lastCommands = clientStrings.getElement(name); if(lastCommands == null) //if there is no past commands { if(isEnd) //if this is an end of line { parseCommand(commandList) } { lastCommands.addAll(commandList) } } else { lastCommands.addAll(commandList); if(isEnd) { parseCommand(lastCommands) } } } public boolean hasStoredStrings(String name) { return (clientStrings.getElement(name) != null) } public void storeStrings(String name, String[] strings) { lastCommands = clientStrings.getElement(name); if(lastCommands == null) { if( clientStrings.put(name, lastCommands); } else { lastCommands.addAll(lastCommands); } } public void parseCommand(String[] strings) { string name = strings.removeAt(0); string command = strings.removeAt(1); Function func = commands.getElement(command); if(func != null) { func.value(name, strings) } } } //example parser public class BasicParser extends AbstractParser { public void print(String string) { System.out.println(string) } static void addCommands { super.addCommands;//call in every subclass commands.addElement("CHAT", { arg name, strings; print((name + ": ").addAll(strings)); }); commands.addElement("OK", { arg name; print(name + " has joined"); }); } }//authors so far: julian |