Вот прога... кто умный-поймет о чем она

Тык вот если в фаил вести больше 100 символов(примерно)
то будет переполнение стека...

Что можно сотворить?
Program stroka;
var i,j,ne,nb,cur,lr,sk,ifbeg,ifen,iffunc:integer;
numbeg,numen:real;
a,beg,en:string;
f:text;
pmur:array[1..4] of boolean;
fl:boolean;
Function ifskob(var b,e:integer):boolean;
begin
ifskob:=true;
cur:=b+1;
fl:=true;
lr:=0;
while (cur < e) and (fl) do
begin
if a[cur]='(' then inc(lr);
if a[cur]=')' then dec(lr);
if lr<0 then
begin
fl:=false;
ifskob:=false;
end;
inc(cur);
end;
end;
Function func(var b,e:integer):real;
var fl:boolean;
e1,b1:integer;
begin
for i:=1 to 4 do
pmur[i]:=true;
while (a[b]='(')and(a[e]=')') do
if ifskob(b,e) then
begin
inc(b);
dec(e);
end
else break;
i:=e;
fl:=true;
sk:=0;
beg:=copy(a,b,e-b+1);
val(beg,numbeg,ifbeg);
func:=numbeg;
if ifbeg>0 then
for j:=1 to 4 do
begin
pmur[j]:=false;
while (i>=b)and(fl) do
begin
if sk=0 then
begin
if (a[i]='+')and(not pmur[1]) then
begin
fl:=false;
beg:=copy(a,b,i-1);
en:=copy(a,i+1,e-i);
b1:=i+1;
e1:=e;
e:=i-1;
val(beg,numbeg,ifbeg);
val(en,numen,ifen);
if (ifbeg=0)and(ifen=0) then
func:=numbeg+numen
else
func:=func(b,e)+func(b1,e1);
end
else
if (a[i]='-')and(not pmur[2]) then
begin
fl:=false;
beg:=copy(a,b,i-1);
en:=copy(a,i+1,e-i);
b1:=i+1;
e1:=e;
e:=i-1;
val(beg,numbeg,ifbeg);
val(en,numen,ifen);
if (ifbeg=0)and(ifen=0) then
func:=numbeg-numen
else
func:=func(b,e)-func(b1,e1);
end
else
if (a[i]='*')and(not pmur[3]) then
begin
fl:=false;
beg:=copy(a,b,i-1);
en:=copy(a,i+1,e-i);
b1:=i+1;
e1:=e;
e:=i-1;
val(beg,numbeg,ifbeg);
val(en,numen,ifen);
if (ifbeg=0)and(ifen=0) then
func:=numbeg*numen
else
func:=func(b,e)*func(b1,e1);
end
else
if (a[i]='/')and(not pmur[4]) then
begin
fl:=false;
beg:=copy(a,b,i-1);
en:=copy(a,i+1,e-i);
b1:=i+1;
e1:=e;
e:=i-1;
val(beg,numbeg,ifbeg);
val(en,numen,ifen);
if (ifbeg=0)and(ifen=0) then
func:=numbeg/numen
else
func:=func(b,e)/func(b1,e1);
end
end;
if not fl then break;
if a[i]='(' then
inc(sk)
else
if a[i]=')'then
dec(sk);
dec(i);
end;
i:=e;
end;
end;
begin
assign(f,'input.txt');
reset(f);
read(f,a);
close(f);
assign(f,'output.txt');
rewrite(f);
ne:=length(a);
nb:=1;
write(f,func(nb,ne):4:2);
close(f);
end.
:super: