Ich würde noch den zu parsenden Text nicht als Liste von Zeilen ansehen, sondern als einen einzigen String. Den Zeilenvorschub kannst Du als Leerzeichen behandeln (beim einlesen). Dann ist alles viel transparenter und dein Skipspaces wird zu einem einfachen
Delphi-Quellcode:
Procedure SkipSpaces;
Begin
While (TextPos<Length(MyText)) and (MyText[TextPos] in WhiteSpaceCharacters) do
inc(TextPos);
If TextPos>Length(MyTExt) Then
TextIsAtEof := True;
End;
Noch viel transparenter wird es so (finde ich)
Delphi-Quellcode:
Procedure Advance;
Begin
if TextisAtEof Then
Raise EParserException.Create('Tried to read past eof');
inc(TextPos);
If TextPos>Length(MyTExt) Then
TextIsAtEof := True;
End;
Procedure SkipSpaces;
Begin
While not TextIsAtEof and (MyText[TextPos] in WhiteSpaceCharacters) do
inc(TextPos);
End;
Das saubere 'Advance' kannst Du auch in deinem 'GetToken' verwenden.