Break wird als break aus dem switch interpretiert
Das folgende pseuCo-Programm
mainAgent {
while (true) {
println("Inner Loop");
select {
default : {
println("default case");
break;
}
}
}
}
verhält sich in pseuCoCo wie folgendes Java-Programm:
while (true) {
System.out.println("Inner Loop");
switch (42) {
default: {
System.out.println("default case");
break;
}
}
}
Das pseuCo-break
wird also direkt in das Java-break
übersetzt.
Dies ist aber hier falsch, da man in pseuCo nicht aus den cases raus-break
-en kann. Es wird also erwartet, dass man aus der Schleife rausbricht.
Eine korrekte Übersetzung ist dann also:
loop:
while (true) {
System.out.println("Inner Loop");
switch (42) {
default: {
System.out.println("default case");
break loop;
}
}
}
EDIT: Darüber, ob die Semantik sich wirklich so verhalten soll, lässt sich streiten. In Go ist die Semantik von break
so, wie es hier bereits implementiert ist, siehe: https://golang.org/ref/spec#Break_statements.
Edited by Maximilian Wuttke