Давайте создадим компилятор!   ::   Креншоу Джек

Страница: 44 из 382

Я только хочу, чтобы вы знали, что вы можете получить некоторую оптимизацию кода, объединяя методы компиляции и интерпретации. В частности Вы должны знать, что подпрограммы синтаксического анализа в более интеллектуальном трансляторе обычно что-то возвращают вызвавшей их программе и иногда сами ожидают этого. Эта главная причина обсуждения интерпретаторов в этой главе.

ИНТЕРПРЕТАТОР



Итак, теперь, когда вы знаете почему мы принялись за все это, давайте начнем. Просто для того, чтобы дать вам практику, мы начнем с пустого Сradle и создадим транслятор заново. На этот раз, конечно, мы сможем двигаться немного быстрее.

Так как сейчас мы собираемся выполнять арифметические действия, то первое, что мы должны сделать – изменить функцию GetNum, которая до настоящего момента всегда возвращала символ (или строку). Лучше если сейчас она будет возвращать целое число. Сделайте копию Cradle (на всякий случай не изменяйте сам Cradle!!) и модифицируйте GetNum следующим образом:



{–}

{ Get a Number }

function GetNum: integer;

begin

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

GetNum := Ord(Look) – Ord('0');

GetChar;

end;

{–}



Затем напишите следующую версию Expression:



{–}

{ Parse and Translate an Expression }

function Expression: integer;

begin

Expression := GetNum;

end;

{–}



И, наконец, вставьте

Writeln(Expression);

в конец основной программы. Теперь откомпилируйте и протестируйте.

|< Пред. 42 43 44 45 46 След. >|

Java книги

Контакты: [email protected]