Hallo,
ich versuche mich grad an einem Parser, der wie folgt aufgebaut ist:
Delphi-Quellcode:
procedure Parse;
begin
while LineNum < Stringliste.Count do
begin
Token := GetToken;
//LineNum wird in SkipSpaces erhöht, wenn Zeile zuende
SkipSpaces;
if Token = 'Mein_gesuchtes_Wort' then
begin
Token := GetToken;
SkipSpaces;
if Token = 'Mein_nächstes_gesuchtes_Wort' then
begin
//entweder nächsten Token holen oder, wenn fertig
//Aktion auslösen
end;
end;
end;
end;
//Hier noch die Prozedur SkipSpaces
procedure SkipSpaces;
begin
while StringListe.Strings[LineNum][StringPosition]=' ' do inc(StringPosition);
if StringPosition >= Length(StringListe.Strings[LineNum]) then
begin
StringPosition := 1;
inc(LineNum);
end;
end;
Leider kommt mein Parser aber nicht zu '''if Token='Mein_Nächstes_gesuchtes_wort' then ...
Warum nicht?
In meinem Testtext kommen die gesuchten Wörter definitiv mit Sicherheit vor.
Warum findet sie der Parser dann nicht?
Bisher habe ich rausgefunden, das der Parser scheitert, wenn Leerzeilen dazwischen liegen, denn dann läuft er, findet das nächste gesuchte Wort nicht, die Schlife läuft bis zum Ende und im nächsten Parserdurchlauf ist er nicht mehr in jenem Scope, wo ich das 'mein_nächstes_gesuchtes_wort erwarte. ER ist stattdessen in der Ebene, wo er höchstens 'mein_gesuchtes_wort' finden würde, das aber im Text dann nicht mehr vorkommt.
Wie kann ich den Entwurf besser machen, so das Spaces einfach überlesen werden.