grammar fix bug where rightside wasnt split for actions
This commit is contained in:
@ -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,
|
||||||
|
Reference in New Issue
Block a user