79 Zeilen
2.5 KiB
Java
79 Zeilen
2.5 KiB
Java
package de.zonlykroks.advancedscripts.lexer;
|
|
|
|
import com.google.gson.JsonArray;
|
|
import com.google.gson.JsonElement;
|
|
import com.google.gson.JsonObject;
|
|
import com.google.gson.JsonParser;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.Set;
|
|
|
|
public class ScriptSyntaxPacketParser {
|
|
|
|
private ScriptSyntaxPacketParser() {
|
|
throw new IllegalStateException("Utility class");
|
|
}
|
|
|
|
private static final TokenType[] TOKEN_TYPES = TokenType.values();
|
|
|
|
private static void reset() {
|
|
Operators.OPERATORS.clear();
|
|
Headers.HEADERS.clear();
|
|
VariablePrefixes.RPEFIXES.clear();
|
|
VariableSuffixes.SUFFIXES.clear();
|
|
Commands.COMMANDS.clear();
|
|
}
|
|
|
|
public static synchronized void parse(String scriptSyntax) {
|
|
reset();
|
|
|
|
JsonObject jsonObject = JsonParser.parseString(scriptSyntax).getAsJsonObject();
|
|
for (String key : jsonObject.keySet()) {
|
|
JsonArray jsonElements = jsonObject.get(key).getAsJsonArray();
|
|
if (key.startsWith("@")) {
|
|
parseSpecial(key, jsonElements);
|
|
} else {
|
|
parseCommand(key, jsonElements);
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void parseCommand(String key, JsonArray value) {
|
|
boolean repeating = value.get(0).getAsBoolean();
|
|
List<List<TokenType>> validArgumentTypes = new ArrayList<>();
|
|
for (int i = 1; i < value.size(); i++) {
|
|
JsonArray parameters = value.get(i).getAsJsonArray();
|
|
List<TokenType> parameterTypes = new ArrayList<>();
|
|
for (JsonElement parameter : parameters) {
|
|
parameterTypes.add(TOKEN_TYPES[parameter.getAsInt()]);
|
|
}
|
|
validArgumentTypes.add(parameterTypes);
|
|
}
|
|
Commands.COMMANDS.put(key, new Command(repeating, validArgumentTypes));
|
|
}
|
|
|
|
private static void parseSpecial(String key, JsonArray value) {
|
|
Set<String> set;
|
|
switch (key) {
|
|
case "@operators":
|
|
set = Operators.OPERATORS;
|
|
break;
|
|
case "@headers":
|
|
set = Headers.HEADERS;
|
|
break;
|
|
case "@prefixes":
|
|
set = VariablePrefixes.RPEFIXES;
|
|
break;
|
|
case "@suffixes":
|
|
set = VariableSuffixes.SUFFIXES;
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
for (JsonElement element : value) {
|
|
set.add(element.getAsString());
|
|
}
|
|
}
|
|
}
|