make action syntax optional
This commit is contained in:
@ -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"
|
||||||
|
|||||||
Reference in New Issue
Block a user