Лекции по построению компилятора на Pascal



              

ИНИЦИАЛИЗАТОРЫ - часть 2


   while IsDigit(Look) do begin

      Val := 10 * Val + Ord(Look) - Ord('0');

      GetChar;

   end;

   GetNum := Val;

end;

{--------------------------------------------------------------}

Строго говоря, мы должны разрешить выражения в поле данных инициализатора, или, по крайней мере, отрицательные значения. Сейчас давайте просто разрешим отрицательные значения изменив код для Alloc следующим образом:

{--------------------------------------------------------------}

{ Allocate Storage for a Variable }

procedure Alloc(N: char);

begin

   if InTable(N) then Abort('Duplicate Variable Name ' + N);

   ST[N] := 'v';

   Write(N, ':', TAB, 'DC ');

   if Look = '=' then begin

      Match('=');

      If Look = '-' then begin

         Write(Look);

         Match('-');

      end;

      WriteLn(GetNum);

      end

   else

      WriteLn('0');

end;

{--------------------------------------------------------------}

Теперь у вас есть возможность инициализировать переменные отрицательными и/или многозначными значениями.




Содержание  Назад  Вперед