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



              

МОДУЛЬ INPUT


Ключевой концепцией, которую мы использовали начиная с первого дня, была идея входного потока с одним предсказывающим символом. Все подпрограммы синтаксического анализа проверяют этот символ, не изменяя его, чтобы решить, что они должны делать дальше. (Сравните этот подход с подходом C/Unix, использующим getchar и unget, и я думаю вы согласитесь, что наш подход проще). Мы начнем нашу экскурсию в будущее перенеся эту концепцию в нашу новую модульную организацию.Первый модуль, соответствующе названный Input, показан ниже:

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

unit Input;

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

interface

var Look: char;               { Lookahead character }

procedure GetChar;            { Read new character  }

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

implementation

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

{ Read New Character From Input Stream }

procedure GetChar;

begin

 Read(Look);

end;

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

{ Unit Initialization }

begin

 GetChar;

end.

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

Как вы можете видеть, здесь нет ничего очень заумного и конечно ничего сложного, так как он состоит только из одной процедуры. Но мы уже можем видеть как использование модулей дает нам преимущества. Обратите внимание на выполнимый код в блоке инициализации. Этот код "запускает помпу" входного потока для нас, нечто такое мы всегда делали раньше вставляя вызовы  GetChar в процедуру Init. На этот раз вызов происходит без каких-либо специальных обращений к ней с нашей стороны, за исключением самого модуля. Как я предсказывал ранее, этот механизм сделает нашу жизнь в будущем значительно проще. Я полагаю это одна из наиболее полезных возможностей Turbo Pascal и я буду сильно на нее полагаться.




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