/**
 * Die Klasse implementiert einen DEA für die Überprüfung äußerst 
 * einfacher Mailadressen, die nur aus dem Buchstaben b, Punkten 
 * und dem at-Zeichen bestehen dürfen. Der Nutzername darf fast 
 * beliebig aufgebaut sein; die Domain muss mindestens zweistufig
 * sein und die Toplevel-Domain muss mindestens zwei Zeichen haben.
 * 
 * Gültig sind damit beispielsweise:
 * b@b.bb
 * b@b.bbbb
 * b.b.b@bbb.bbb
 * bbbbbb@b.bb
 * b@b.b.b.b.bb
 * ...@b.bb
 * ...bbb@bb.bb
 * bbb...@bb.bb
 * 
 * Ungültig sind beispielsweise:
 * .
 * b
 * @
 * bb@
 * b@b.b@bbb
 * b@b.b@bb.b
 * @bb
 * bb@.
 * bb@..
 * 
 * Tatsächlich ist die Überprüfung realer Mailadressen wesentlich 
 * komlizierter als in diesem Beispiel.
 * 
 * @author Urs Lautebach
 * @version 2021-Janar
 *
 */
public class MailadressenChecker extends EndlicherAutomat {
	/* Bei der Implementierung dieser Klasse muss man nur
	 * die Attribute alphabet, uebergaenge und endzustaende
	 * geeignet festlegen -- alles andere macht die 
	 * Vaterklasse.
	 */

	private static final char[] alphabet = new char[] { 
	};
	private static final int[][] transitionen = new int[][] {
	}; 

	private static final int[] endzustaende = new int[] { 
	};

	MailadressenChecker() {
	    // Aufruf des super-Konstruktors:
		super(alphabet, transitionen, endzustaende);
	}


	/**
	 * Die main-Methode erlaubt den Aufruf des
	 * Binaerzahlenpruefers von der Kommandozeile mit beliebig
	 * vielen zu prüfenden Strings:
	 * java MailadressenChecker bbb.b@bb.bb a@b@c
	 * 
	 * Die Ausgabe lautet dann
	 * 
	 * Akzeptiert: "bbb.b@bb.bb" ist eine gültige Mailadresse. 
	 * FEHLER! "a@b@c" ist als Mailadresse ungültig!
	 */
	public static void main(String[] args) {
		// Endlichen Automaten instanziieren:
		EndlicherAutomat checker = new MailadressenChecker();

		for(String wort : args) {
			if(checker.gehoertZuSprache(wort)) {
				System.out.println("Akzeptiert: \"" + wort + 
						"\" ist eine gültige Mailadresse.");
			} else {
				System.out.println("FEHLER! \"" + wort + 
						"\" ist als Mailadresse ungültig!");
			} // end if
		} // end for
	} // end main
} // end class

