<<
>>

Литеральные аргументы

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

Давайте исправим это сейчас.

Для начала нам понадобится функция GetNum. Мы уже видели ее несколько версий, некоторые возвращают только одиночный символ, некоторые строку, а некоторые целое число. Та, которая нам здесь нужна будет возвращать длинное целое, так что она может обрабатывать все, что мы ей подбросим. Обратите внимание, что здесь не возвращается никакой информации о типах: GetNum не интересуется тем, как будет использоваться число:

{–}

{ Get a Number }

function GetNum: LongInt;

var Val: LongInt;

begin

if not IsDigit(Look) then Expected('Integer');

Val := 0;

while IsDigit(Look) do begin

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

GetChar;

end;

GetNum := Val;

SkipWhite;

end;

{–}

Теперь, когда работаем с литералами, мы имеем одну небольшую проблему. С переменными мы знаем какого типа они должны быть потому что они были объявлены с таким типом. Мы не имеем такой информации о типе для литералов. Когда программист говорит «-1», означает ли это байт, слово или длинное слово? Мы не имеем никаких сведений. Очевидным способом было бы использование наибольшего возможного типа, т.е. длинного слова. Но это плохая идея, потому что когда мы примемся за более сложные выражения, мы обнаружим, что это заставит каждое выражение включающее литералы, также переводить в длинное.

Лучшим подходом было бы выбрать тип, основанный на значении литерала, как показано далее:

{–}

{ Load a Constant to the Primary Register }

function LoadNum(N: LongInt): char;

var Typ : char;

begin

if abs(N)

<< | >>
Источник: Креншоу Джек. Давайте создадим компилятор!. 1999

Еще по теме Литеральные аргументы:

  1. ПАРАФАЗИЯ ЛИТЕРАЛЬНАЯ
  2. Литеральные контракты.
  3. Аргументы
  4. Аргументы
  5. Аргументы
  6. Аргументы
  7. V. 1. 1. Непрерывные функции дискретного аргумента.
  8. Правило достаточного основания
  9. ПАРАФАЗИЯ
  10. 1. Классификации сделок
  11. Правило фундаментальности.
  12. Правило фундаментальности.
  13. МЕТОД «ДОВОД К ЧЕЛОВЕКУ», ИЛИ «АССОЦИАТИВНОСТЬ».
  14. Правило аргументации.
  15. Правило аргументации.
  16. Правило достаточного основания
  17. Правило ясности и точности употребляемых слов и рассуждений.
  18. МЕТОД «КУСКОВ».