So mal zum allgemeinen Verständnis mal mein Programm, ich markier hier mal die relevanten Stellen.
Delphi-Quellcode:
procedure TMathParser.Parsen(TokenList:TTokenList;BinaryNode:PTBinaryNode);
begin
if TokenPos(tkAdd,TokenList)>0 then
begin
BinaryNode:=CreateBinNode(TokenList,TokenPos(tkAdd,TokenList),BinaryNode);
Parsen(SubTokenA(TokenList,tkAdd),BinaryNode);//!!!!!!!!
Parsen(SubTokenB(TokenList,tkAdd),BinaryNode);//!!!!!!!!
end
else if TokenPos(tkSub,TokenList)>0 then
begin
...
...
...
...
...
Delphi-Quellcode:
function SubTokenA(TokenList:TTokenList;Token:TTokens):TTokenList;
begin
result:=CopyToken(TokenList,0,TokenPos(Token,TokenList));
end;
function SubTokenB(TokenList:TTokenList;Token:TTokens):TTokenList;
begin
result:=CopyTokenEnd(TokenList,TokenPos(Token,Tokenlist)+1)
end;
Delphi-Quellcode:
function CopyToken(TokenList:TTokenList;Index,Count:Integer):TTokenList;
begin
end;
Im ersten Teil durchsucht er die Liste nach Tokens um daraus dann einen binären Baum zu erstellen, dabei teilt er immer durch SubTokenA und SubTokenB die Liste in zwei Hälften, dieses "Teilen" soll CopyToken übernehmen...indem es alle Items von Index bis Count kopiert und als Liste wiedergibt.
Ich muss hier halt wissen wie ich den Teil der Liste kopiere ohne mir ein Speicherloch zu kreieren, denn das hab ich bisher ganz gut hingekriegt auch wenn das Programm grundsätzlich geklappt hat.