make action syntax optional

This commit is contained in:
ChUrl
2020-12-11 13:40:21 +01:00
parent ec5e243e22
commit 79e9fb6094

View File

@ -89,23 +89,27 @@ public class Grammar {
String leftside = split[0].trim(); String leftside = split[0].trim();
String rightside = split[1].trim(); String rightside = split[1].trim();
int open = leftside.indexOf('['); if (leftside.indexOf('[') >= 0) {
int close = leftside.indexOf(']'); // Handle actions if they exist
// Aus "S[C R]" wird flags = {"C", "R"} extrahiert int open = leftside.indexOf('[');
String[] flags = leftside.substring(open + 1, close).split(" "); int close = leftside.indexOf(']');
List<String> flagList = Arrays.stream(flags)
.map(String::trim)
.filter(flag -> !flag.isEmpty())
.collect(Collectors.toList());
// "S[C R]" wird zu "S" // Aus "S[C R]" wird flags = {"C", "R"} extrahiert
leftside = leftside.substring(0, open); String[] flags = leftside.substring(open + 1, close).split(" ");
List<String> flagList = Arrays.stream(flags)
.map(String::trim)
.filter(flag -> !flag.isEmpty())
.collect(Collectors.toList());
actions.put(leftside, new HashSet<>()); // "S[C R]" wird zu "S"
actions.get(leftside).addAll(flagList); leftside = leftside.substring(0, open);
if (!flagList.isEmpty()) {
log("Registered actions for " + leftside + ": " + flagList + "\n"); actions.put(leftside, new HashSet<>());
actions.get(leftside).addAll(flagList);
if (!flagList.isEmpty()) {
log("Registered actions for " + leftside + ": " + flagList + "\n");
}
} }
// "E T2 | epsilon" wird zu prods[0] = "E T2" und prods[1] = "epsilon" // "E T2 | epsilon" wird zu prods[0] = "E T2" und prods[1] = "epsilon"