grammar fix bug where rightside wasnt split for actions

This commit is contained in:
ChUrl
2020-12-11 14:10:58 +01:00
parent 6dc278d4d4
commit 8a310e6c41

View File

@ -93,6 +93,7 @@ public class Grammar {
String leftside = split[0].trim(); String leftside = split[0].trim();
String rightside = split[1].trim(); String rightside = split[1].trim();
List<String> flagList = Collections.emptyList();
if (leftside.indexOf('[') >= 0) { if (leftside.indexOf('[') >= 0) {
// Handle actions if they exist // Handle actions if they exist
@ -101,10 +102,10 @@ public class Grammar {
// Aus "S[C R]" wird flags = {"C", "R"} extrahiert // Aus "S[C R]" wird flags = {"C", "R"} extrahiert
String[] flags = leftside.substring(open + 1, close).split(" "); String[] flags = leftside.substring(open + 1, close).split(" ");
List<String> flagList = Arrays.stream(flags) flagList = Arrays.stream(flags)
.map(String::trim) .map(String::trim)
.filter(flag -> !flag.isEmpty()) .filter(flag -> !flag.isEmpty())
.collect(Collectors.toList()); .collect(Collectors.toList());
List<String> enumActions = Arrays.stream(Actions.values()) List<String> enumActions = Arrays.stream(Actions.values())
.map(action -> action.toString().toLowerCase()) .map(action -> action.toString().toLowerCase())
.collect(Collectors.toList()); .collect(Collectors.toList());
@ -116,12 +117,6 @@ public class Grammar {
// "S[C R]" wird zu "S" // "S[C R]" wird zu "S"
leftside = leftside.substring(0, open); leftside = leftside.substring(0, open);
actions.put(new SimpleEntry<>(leftside, rightside), new HashSet<>());
actions.get(new SimpleEntry<>(leftside, rightside)).addAll(flagList);
if (!flagList.isEmpty()) {
log("Registered actions: " + 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"
@ -130,9 +125,21 @@ public class Grammar {
for (String prod : prods) { for (String prod : prods) {
GrammarRule rule = new GrammarRule(leftside, prod.split(" ")); GrammarRule rule = new GrammarRule(leftside, prod.split(" "));
rules.add(rule); rules.add(rule);
actions.put(new SimpleEntry<>(leftside, prod), new HashSet<>());
actions.get(new SimpleEntry<>(leftside, prod)).addAll(flagList);
if (!flagList.isEmpty()) {
log("Registered actions: " + leftside + " -> " + prod + ": " + flagList);
}
}
if (!flagList.isEmpty()) {
log("\n");
} }
} }
} }
log("\n" + actions);
log("-".repeat(100)); log("-".repeat(100));
return new Grammar(terminals, nonterminals, return new Grammar(terminals, nonterminals,