TODO: Wie ist das Modul aufgebaut? Wie kann man es erweitern?
Die Zustände jeder Zone lassen sich in folgendem Diagramm darstellen:
Die Schadensdetail-Button (Ursache & Stärke des Minderertrags) werden von allen Zonen geteilt verwendet. Alle anderen Buttons (“Anfang”, “Stop”, Spurauswahl) sind für jede Zone einzeln vorhanden.
Bei der Spracheingabe wird folgende formale Grammatik erlaubt (angegeben in EBNF):
Programm = "abbrechen" | ZonenStart | ZonenEnde | ZonenTypisierung;
ZonenStart = "start", SpurenAufzählung;
ZonenEnde = "stop", SpurenAufzählung;
ZonenTypisierung = ( ZonenTypisierung1 | ZonenTypisierung2 | ZonenTypisierung3 | ZonenTypisierung4 ), [ "stop" ];
ZonenTypisierung1 = SpurenAufzählung, ZonenAngabe;
ZonenTypisierung2 = ZonenAngabe, SpurenAufzählung;
ZonenTypisierung3 = MinderertragsUrsache, ZonenAngabe, MinderertragsTyp;
ZonenTypisierung4 = MinderertragsTyp, ZonenAngabe, MinderertragsUrsache;
ZonenAngabe = ( ( MinderertragsUrsache, MinderertragsTyp ) | ( MinderertragsTyp, MinderertragsUrsache) | MinderertragsUrsache | MinderertragsTyp );
MinderertragsUrsache = "hang" | "nass" | "nässe" | "maus" | "wild" | "lehm" | "sand" | "kuppe" | "ton" | "verdichtung" | "wende";
MinderertragsTyp = "gering" | "mittel" | "hoch";
SpurenAufzählung = [ "zone" ], SpurenAufzählungTeil, { SpurenAufzählungTeil };
SpurenAufzählungTeil = "spur" | ( SpurBezeichnung, { SpurBezeichnung } );
SpurBezeichnung = "eins" | "zwei" | "drei" | "vier" | "fünf" | "sechs";