Einzelnen Beitrag anzeigen

Teekeks

Registriert seit: 19. Okt 2008
Ort: Dresden
765 Beiträge
 
FreePascal / Lazarus
 
#1

Nicht erklärbare AV

  Alt 24. Jun 2009, 11:19
Hallo!
Ich habe wiedereinmal ein Problem:
Delphi-Quellcode:
procedure Scan(TheLine:string);
var x:integer;
begin
  SetLength(Tokens,0);
  X:=1;
  while not (x=Length(TheLine)-1) do
  begin
    if TheLine[x] in ['+','-','*','/','(',')'] then
    begin
      SetLength(Tokens,Length(Tokens)+1);
      Tokens[High(Tokens)]:=TheLine[x];
    end else
    if TheLine[x] in ['a'..'z','A'..'Z'] then// Hier wird eine External AV ausgelößt...
    begin
      SetLength(Tokens,Length(Tokens)+1);
      Tokens[High(Tokens)]:=Tokens[High(Tokens)]+TheLine[x];
      while TheLine[x+1] in ['a'..'z','A'..'Z'] do
      begin
        Inc(X);
        Tokens[High(Tokens)]:=Tokens[High(Tokens)]+TheLine[x];
      end;
    end else
    if TheLine[x] in ['0'..'9'] then
    begin
      SetLength(Tokens,Length(Tokens)+1);
      Tokens[High(Tokens)]:=Tokens[High(Tokens)]+TheLine[x];
      while TheLine[x+1] in ['0'..'9'] do
      begin
        Inc(X);
        Tokens[High(Tokens)]:=Tokens[High(Tokens)]+TheLine[x];
      end;
    end;
    Inc(X);
  end;
end;

// Hier wird "Tokens" ausgegeben:
procedure DoOutputTokens;
var x:integer;
begin
  WriteLn('*******************');
  WriteLn('NextLine:');
  for x:=0 to High(Tokens) do
    WriteLn('Token: '+Tokens[x]);
end;

// Aufgerufen wird so:
  while not EOF(Datei) do
  begin
    ReadLn(Datei,ActLine);
    Scan(ActLine);
    DoOutPutTokens;
  end;
Angezeigt bekomme ich das hier:
Zitat:
******************
NextLine:
Token: Hallo
Token: 712
Token: +
Die Zu behandelnde Datei siet so aus:
Zitat:
Hallo=712+sd
n+od +df
Ich verstehe nicht was ich falsch gemacht habe...
Wenn an dieser Stelle eine AV kommt, hätte eigentlich noch nichts Ausgegeben werden dürfen...

Wisst ihr warum das so ist???

gruß Teekeks
Peter
"Div by zero Error" oder auch: "Es geht auch ohne Signatur!".
  Mit Zitat antworten Zitat