type TToken = array [1..2] of String; type TTokenListe = array of TToken; |
Zeilenumbrüche entfernen In Kleinbuchstaben umwandeln Programmtext bis zum ersten Leerzeichen kopieren und an den ScannerAutomaten weitergeben Wenn die Eingabe erkannt wurde dann wird der Token zur Tokenliste hinzugefügt. Den bereits abgearbeiteten Teil vom Programmtext abschneiden |
function TScanner.ScanneProgrammText (pProgrammtext: String) : TTokenListe; var tmpAusgabe : TToken; aktuelleEingabe : String; begin pProgrammtext := pProgrammtext + #13#10; pProgrammtext := ersetzeZeilenumbruchDurchLeerzeichen(pProgrammtext); pProgrammtext := LowerCase(pProgrammtext); hatScannerAutomat.setzeZurueck; SetLength(result,0); while length(pProgrammtext) > 0 do begin aktuelleEingabe := Copy(pProgrammtext,1,pos(' ', pProgrammtext) - 1); tmpAusgabe := hatScannerAutomat.verarbeiteEingabe(aktuelleEingabe); if (tmpAusgabe[1] <> '') or (tmpAusgabe[2] <> '') then begin SetLength(result, length(result) + 1); result[length(result) - 1][1] := tmpAusgabe[1]; result[length(result) - 1][2] := tmpAusgabe[2]; end; pProgrammtext := Copy(pProgrammtext,pos(' ', pProgrammtext) + 1,length(pProgrammtext) - pos(' ', pProgrammtext)); end; end; |
Wenn keine der folgenden Eingaben vorliegt dann wird ein leerer Token zurückgegeben. Wenn die Eingabe bekannt ist, wird sie in den zweiten Teil des Tokens geschrieben. Analog zu der in der Sprachdefinition gemachten Einteilung in verschiedene Ausdruckstypen wird der Typ in den ersten Teil des Tokens geschrieben. |
function TScannerAutomat.AusgabeFunktionG (pAktuellerZustand: TZustand; pEingabe: String) : TToken; begin result[1] := ''; result[2] := ''; case pAktuellerZustand of zStart : begin if pEingabe = 'vor' then begin result[1] := 'befehl'; result[2] := 'vor'; end else if pEingabe = 'drehe_links' then begin result[1] := 'befehl'; result[2] := 'drehe_links'; end else if pEingabe = 'drehe_rechts' then begin result[1] := 'befehl'; result[2] := 'drehe_rechts'; end else if pEingabe = 'nimm' then begin result[1] := 'befehl'; result[2] := 'nimm'; end else if pEingabe = 'gib' then begin result[1] := 'befehl'; result[2] := 'gib'; end else if pEingabe = 'vornefrei' then begin result[1] := 'anfrage'; result[2] := 'vornefrei'; end else if pEingabe = 'itemda' then begin result[1] := 'anfrage'; result[2] := 'itemda'; end else if pEingabe = 'blicktnach_unten' then begin result[1] := 'anfrage'; result[2] := 'blicktnach_unten'; end else if pEingabe = 'blicktnach_oben' then begin result[1] := 'anfrage'; result[2] := 'blicktnach_oben'; end else if pEingabe = 'blicktnach_rechts' then begin result[1] := 'anfrage'; result[2] := 'blicktnach_rechts'; end else if pEingabe = 'blicktnach_links' then begin result[1] := 'anfrage'; result[2] := 'blicktnach_links'; end else if pEingabe = 'itemsimrucksack' then begin result[1] := 'anfrage'; result[2] := 'itemsimrucksack'; end else if pEingabe = 'wenn' then begin result[1] := 'kontroll'; result[2] := 'wenn'; end else if pEingabe = 'dann' then begin result[1] := 'kontroll'; result[2] := 'dann'; end else if pEingabe = 'sonst' then begin result[1] := 'kontroll'; result[2] := 'sonst'; end else if pEingabe = 'solangewie' then begin result[1] := 'kontroll'; result[2] := 'solangewie'; end else if pEingabe = 'tue' then begin result[1] := 'kontroll'; result[2] := 'tue'; end else if pEingabe = #123 then begin result[1] := 'kontroll'; result[2] := #123; end else if pEingabe = #125 then begin result[1] := 'kontroll'; result[2] := #125; end else if pEingabe = 'not' then begin result[1] := 'kontroll'; result[2] := 'not'; end end; //of pAktuellerZustand : zStart end; end; |
Zur Themenübersicht | |
Zum Seitenanfang | |
Zur vorigen Seite | Zur nächsten Seite |
© 2004 LK 13 If und G. Kubitz | Hannah-Arendt-Gymnasium, Lengerich |