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

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

Так что у нас не должно занять слишком много времени предусмотреть такжеи их.

БНФ определение, данное раньше для основной программы, включало операторный блок, который мы пока что игнорировали:

::= BEGIN END

Сейчас мы можем рассматривать блок просто как серию операций присваивания:

::= (Assignment)*

Давайте начнем с добавления синтаксического анализатора для блока. Мы начнем с процедуры-заглушки для операции присваивания:



{–}

{ Parse and Translate an Assignment Statement }

procedure Assignment;

begin

GetChar;

end;

{–}

{ Parse and Translate a Block of Statements }

procedure Block;

begin

while Look <> 'e' do

Assignment;

end;

{–}



Измените процедуру Main чтобы она вызывала Block как показано ниже:



{–}

{ Parse and Translate a Main Program }

procedure Main;

begin

Match('b');

Prolog;

Block;

Match('e');

Epilog;

end;

{–}



Эта версия все еще не генерирует никакого кода для «операций присваивания»... все что она делает это съедает символы до тех пор, пока не увидит "e", означающее «END». Но она устанавливает основу для того, что следует дальше.

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

|< Пред. 175 176 177 178 179 След. >|

Java книги

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