цедура використовує рекурсивний спадний обхід}
Procedure Tree (p: tr); undertree (c: char); {створює поддеревья} Skob; {враховує дужки} i: = i +1; p ^. pole [i] = '( 'then Skob;: = i +1; p ^. pole [i] =') ';; {Skob} i: = 1 to length (p ^. pole) dop ^. pole [i] =' ('then : = i;; (p ^. pole [i +1] <> '+') and (p ^. pole [i +1] <> '-') (p ^. pole [i + 1] <> '*') and (p ^. pole [i +1] <> '/') (p ^. pole [g-1] <> '*') and (p ^. pole [g-1] <> '/') (p ^. pole [g-1] <> '-') and (p ^. pole [g-1] <> ' + ') (p ^. pole [i +1] <>' ^ ') and (p ^. pole [g-1] <>' ^ ') (p ^. pole, i, 1) ; (p ^. pole, 1,1);: = 0;;; p ^. pole [i] = c i +1, ord (p ^. pole [0])); ^. r ^. zn: = 0; ^. r ^. sym: = false;: = ord (p ^. pole [0]); ^ . pole: = c;;;; {UnderTree} p <> nil then
{Будуються поддеревья залежно від пріоритету арифметичної операції}
begin ('+'); ('-'); ('*'); ('/'); ('^'); (p ^. l); (p ^. r);;; {Tree}
{Обчислення значення арифметичної функції}
{процедура використовує рекурсивний спадний обхід}
Procedure Calc (p: tr); p <> nil then beginp ^. l ^. sym and p ^. r ^. sym thenp ^. pole [1] of
'+': begin ^. zn: = p ^. l ^. zn + p ^. r ^. zn; ^. sym: = true;;
'-': begin ^. zn: = p ^. l ^. zn-p ^. r ^. zn; ^. sym: = true;;
'*': begin ^. zn: = p ^. l ^. zn * p ^. r ^. zn; ^. sym: = true;;
'/': begin ^. zn: = p ^. l ^. zn/p ^. r ^. zn; ^. sym: = true;;
'^': begin ^. zn: = EXP (p ^. r ^. zn * LN (p ^. l ^. zn)); ^. sym: = true;;; { case}; (p ^. l); (p ^. r);
end;; {calc}
{процедура визначає де в дереві мінлива або значення, і де
знак операції. Використовується рекурсивний спадний обхід}
Procedure Symb (p: tr); p <> nil thenp ^. pole [1] in ['a' .. 'z'] then ^. sym: = true; (p ^ . pole, '='); (p ^. zn);; p ^. pole [1] in ['0 '.. '9'] then ^. sym: = true; (p ^. pole, p ^ . zn, code);; (p ^. l); (p ^. r);
end;; {Symb}
{процедура виводить на екран, отримане дерево}
{процедура використовує рекурсивний спадний обхід}
Procedure OutTree (pr: tr; f: byte);: = y +2; pr <> nil thenf = 1 then: = x-5;; f = 2 then: = x + 9;
end; (X, Y);
{Якщо f = 0 то виводиться коренева вершина}
if f = 0 then writeln ('[', pr ^. pole, ']');
{Якщо f = 1 то виводиться ліве піддерево}