Du solltest SkipSpaces nochmal überdenken.
Das Problem wird sichtbar, wenn du die Unteraufgaben noch ein wenig auslagerst. Du möchtest es sicherlich etwa so haben:
Delphi-Quellcode:
procedure SkipSpaces;
begin
while (Look()=' ') or IsLinebreak() do
MoveForward();
end;
So, wie du es jetzt geschrieben hast, sieht es aber so aus:
Delphi-Quellcode:
procedure SkipSpaces;
begin
while Look()=' ' do
MoveForward();
if IsLinebreak() then
MoveForward();
end;
Siehst du den Unterschied?
Tipp am Rande: Du solltest dir die wichtigen Subaufgaben sowieso besser auslagern. Ein
Look()
/
Peek()
und ein
MoveForward
wirst du noch an vielen Stellen brauchen. Und noch ein Tipp: Implementier Look()/Peek() so, dass es Zeilenumbrüche selbst behandelt und als #10 oder #13 zurückliefert, das macht vieles einfacher.