Hallo!
Ich sitz schon wieder mal länger an einem Programm, das so funktionieren soll:
Eine Tokenfolge namens "TFolge" wird angeliefert, und dann verarbeitet. Ich bekomme immer wieder den Fehler "Undefinierter Bezeichner TFolge"
Woran liegt das? Hier ist der Quelltext von Unit2 und Unit3, vielleicht könnt ihr mir helfen!
Unit2:
Delphi-Quellcode:
unit zScanclss;
interface
type tTokenfolge=array[1..100]
of string;
type tOperatormenge =
set of '
*'..'
/';
//Menge von Zeichen (=char) von .. bis
// bezogen auf den ASCII-Code
type tZuweisungsScanner =
class
private
Tokenfolge: tTokenfolge;
index : integer;
// Aktueller Tokenfolgenindex
Operatormenge: tOperatormenge;
public
constructor create;
function isOperator(c: char): boolean;
procedure makeTokenfolge(quelle :
string);
procedure getTokenfolge(
Var TFolge: tTokenfolge);
function maxindex:integer;
end;
implementation
constructor tZuweisungsScanner.create;
begin
Operatormenge := ['
*','
+','
-','
/'];
index:=0;
// Noch kein Token ermittelt.
end;
function tZuweisungsScanner.isOperator(c: char): boolean;
begin
result := (c
in Operatormenge);
// Ist c in der Menge enthalten?
end;
procedure tZuweisungsScanner.makeTokenfolge(quelle :
string);
var i : integer;
tok :
string;
begin
// 1.Variable bauen und einschreiben
i:=1;
tok:='
';
while quelle[i]<>'
:'
do
begin
tok:=tok+quelle[i];
inc(i);
end;
inc(
index);
tokenfolge[
index]:=tok;
// ':=' bauen und einschreiben
inc(
index);
tokenfolge[
index]:=quelle[i]+quelle[i+1];
inc(i); inc(i);
// Restschleife
while (i<length(quelle))
do
begin
// Falls Quellenende noch nicht erreicht, Variable bauen und einschreiben
tok:='
';
while (i<length(quelle))
and (
not isOperator(quelle[i]))
do
begin
tok:=tok+quelle[i];
inc(i)
end;
inc(
index);
tokenfolge[
index]:=tok;
//Falls Quellenende noch nicht erreicht, Operator einschreiben
if i<length(quelle)
then
begin
inc(
index);
tokenfolge[
index]:=quelle[i];
inc(i);
end;
end;
(* of Restschleife *)
// ';' einschreiben
inc(
index);
tokenfolge[
index]:=quelle[i];
end;
procedure tZuweisungsScanner.getTokenfolge(
Var TFolge: tTokenfolge);
begin
TFolge:= tokenfolge;
end;
function tZuweisungsScanner.maxindex: integer;
begin
result:=index;
end;
end.
Unit3:
Delphi-Quellcode:
unit Unit3;
interface
uses zscanclss;
(*Voraussetzung:
1. Nur drei Variablen möglich
2. Keine Zahlen in der Wertzuweisung
3. Nur die Operationen '+' und '-' möglich,
eventuell mehrfach
4. Zahlenwerte für die Variablen sind 3 Editfeldern zu
entnehmen. Dies macht aber der Anwender!
*)
type trechner=class
private
Wert1, Wert2, Wert3 :integer;
//Gibt uns der Anwender!
public
procedure setWerte(a,b,c :integer);
//Reiherfolge wie bei den Editfeldern!
procedure berechne(a,b,c:integer);
end;
implementation
{ trechner }
procedure trechner.berechne(a, b, c: integer);
var i,hilf,zwischen:integer;
var name1,name2,name3:
string;
begin
i:=4;
zwischen:=Wert1;
name1:=TFolge[3];
name2:='
0';
name3:='
0';
while TFolge[i]<>'
;'
do begin
if Tfolge[i]='
+'
then begin
if tfolge[i+1]=name1
then zwischen:=zwischen+wert1
else if tfolge[i+1]<> name1
then begin
name2:=tfolge[i+1];
zwischen:=zwischen+wert2;
end
else if (tfolge[i+1]<>name1)
and (tfolge[i+1]<>name2)
then begin
name3:=tfolge[i+1];
zwischen:=zwischen+wert3;
end;
inc(i);
inc(i);
end;
end;
end;
procedure trechner.setWerte(a, b, c: integer);
begin
wert1:=a;
wert2:=b;
wert3:=c;
end;
end.
Der Fehler tritt beim Starten auf und liegt wohl an Unit3, hab aber keine Ahnung, woran!
Bitte helft mir!