/** * class KellerautomatKlammern - Kellerautomat, der passende Klammerung erkennt. * Alphabet = {(,),a} * Endzustand = 5 * Fehlerzustand = 3 * * @author MB * @version NOV 2021 */ public class KellerautomatKlammern extends Kellerautomat { /** * Constructor * */ public KellerautomatKlammern(){ super(new Integer[]{5} ); } @Override protected void zustandWechseln(char eingabe){ switch(zustand){ case 1: switch(eingabe){ case 'a': zustand = 5; break; case '(': keller.push('('); zustand = 2; break; case ')': zustand = 3;// Fehler: Beginn mit schliessender Klammer break; } break; case 2: switch(eingabe){ case 'a': zustand = 2; break; case '(': keller.push('('); zustand = 2; break; case ')': keller.pop(); if(keller.istLeer()) zustand = 5; else zustand = 4; break; } break; case 3: break; case 4: switch(eingabe){ case 'a': zustand = 4; break; case '(': keller.push('('); zustand = 2; break; case ')': keller.pop(); if(keller.istLeer()) zustand = 5; else zustand = 4; break; } break; case 5: switch(eingabe){ case 'a': zustand = 5; break; case '(': keller.push('('); zustand = 2; break; case ')': zustand = 3; // Fehler: zu viele schliessende Klammern break; } break; } } }