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 |