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:
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