
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 nächsten Seite |
| © 2004 LK 13 If und G. Kubitz | Hannah-Arendt-Gymnasium, Lengerich |