Скачиваний:
29
Добавлен:
02.05.2014
Размер:
223.23 Кб
Скачать

{inputString.Delete(0); }

i:=0;

k:=0;

cep:='';

while i<=inputString.Count-1 do

begin

verh:=SymbStack.Count-1;

syms:=SymbStack[verh];

while (not(inArray(SymbStack[verh],term,27))) do verh:=verh-1;

if (SymbStack[verh]='!') and (inputString[i]='!') then goto MyEnd;

mycase:=PredMatrix[IndMatrix(SymbStack[verh]),IndMatrix(inputString[i])];

if ((mycase='<')or(mycase='='))then

begin {сдвиг}

SymbStack.Add(inputString[i]);

i:=i+1;

end

else

if (mycase='>')

then

begin {свертка}

gamma:='';

tek:='';

for j:=SymbStack.Count-1 downto 0 do

if not(inArray(SymbStack[j],term,27)) then

begin

gamma:=SymbStack[j]+gamma;

SymbStack.Delete(j)

end

else

if (inArray(SymbStack[j],term,27))and(tek='') then

begin

tek:=SymbStack[j];

gamma:=SymbStack[j]+gamma;

SymbStack.Delete(j)

end

else

if predMatrix[Indmatrix(SymbStack[j]),IndMatrix(tek)]='=' then

begin

tek:=SymbStack[j];

gamma:=SymbStack[j]+gamma;

SymbStack.Delete(j)

end

else break;

if findnt(gamma)<>''

then

begin

SymbStack.Add(findnt(gamma));

k:=k+1;

CepofV[k]:=NomRul(gamma);

cep:=inttostr(CepofV[k])+' '+cep;

end

else

begin {ошибка}

ShowMessage('Ошибка! Цепочка '+gamma+' недопустима');

goto tree

end;

end;

if mycase=' ' then

begin {ошибка}

ShowMessage('Ошибка! Символы '+Symbstack[verh]+' и '+InputString[i]+' не могут следовать друг за другом');

goto tree;

end;

end;

Myend:Edit12.Text:=cep;

{вывод дерева}

n:=k;

with TreeView1 do

begin

Items.Add(Nil,'E');

vetv:=0;

for k:=n downto 1 do begin

m:=Items.Count;

if k<n then

for i:=m-1 downto 0 do

if Items[i].Text=notterm[CepofV[k]] then

if Items[i].HasChildren=False then

begin

vetv:=i;

goto zap

end;

zap: for i:=1 to 6 do

if CanonO[CepofV[k],i]<>'' then

Items.AddChild(Items[vetv],CanonO[CepofV[k],i])

end;

FullExpand

end;

tree:InputString.Destroy;

SymbStack.Destroy;

end;

end.

Соседние файлы в папке ПЗ Берта