Уточнення алгоритму обчислення виразу
Напишемо функцію llxval обчислення значення виразу за його ЗПЗ, що подається послідовністю лексем. У цій функції використовуються засоби з модуля SLlx:
- функція перевірки вичерпання послідовності лексем із заголовком
function isemllx ( Llx : Sqlx ) : boolean;
-процедура добування й вилучення першого елемента послідовності лексем із заголовком
procedure get ( var Llx : Sqlx; var lx : Tlx ).
Крім того, використовуються підпрограми обробки магазина лексем, про які сказано в попередньому підрозділі.
function llxval ( var Llx : Sqlx ) : real;
var Slx : Stlx; lx, lx1, lx2 : Tlx; ok : boolean;
begin
inits( Slx ); ok := true;
while not isemllx( Llx ) and ok do
begin
get( Llx, lx);
case lx.stl of
con : push( Slx, lx );
ops : begin
pop( Slx, lx2 ); pop( Slx, lx1 );
case lx.sig of
'+' : lx1.numb := lx1.numb + lx2.numb;
'-' : lx1.numb := lx1.numb - lx2.numb;
'*' : lx1.numb := lx1.numb * lx2.numb;
'/' : if lx2.numb <> 0 then
lx1.numb := lx1.numb / lx2.numb
else ok := false
end;