Einzelnen Beitrag anzeigen

Nintendo

Registriert seit: 16. Feb 2009
82 Beiträge
 
#1

Parserbau Grundlagen + Verständnisfrage

  Alt 22. Sep 2012, 18:41
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_Wortthen
    begin
      Token := GetToken;
      SkipSpaces;
      if Token = 'Mein_nächstes_gesuchtes_Wortthen
      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.

Geändert von Nintendo (22. Sep 2012 um 18:43 Uhr)
  Mit Zitat antworten Zitat