Файл проекта

[Оглавление] [Текст модуля] [Предыдущая] [Следующая]

Файл проекта - это программный модуль, который динамически создает объекты, необходимые для работы компилятора, а затем вызывает процедуру CompileProgram, описанную в модуле синтаксического анализатора. По совместительству он занимается обработкой командной строки.

Компилятор Why в качестве единственного параметра командной строки принимает имя файла, который надо скомпилировать. Кроме того, можно указать переключатель "/q" ("quiet") для подавления всех сообщений, кроме сообщений об ошибках.

Есть только один важный момент, который нужно отметить. В случае появления ошибки (компиляции или ввода-вывода) процесс компиляции немедленно прерывается вызовом стандартной процедуры Halt (см., например, процедуру Error в файле csyntax.pas). Для того, чтобы в этом случае корректно деинициализировать программу (т.е. удалить все объекты, закрыть все файлы и т.п.), модуль CBuildme перехватывает процедуру ExitProc, которая всегда вызывается программой на Turbo Pascal непосредственно перед завершением. Новый вариант ExitProc (NewExitProc) сначала уничтожает все созданные объекты, а затем восстанавливает предыдущий вектор ExitProc, чтобы библиотека Turbo Pascal тоже могла корректно деинициализироваться. Подобная техника позволяет выстроить целую цепочку процедур деинициализации ExitProc, если это необходимо. В Borland Delphi эта техника была упразднена; вместо нее в грамматику модулей была добавлена специальная секция "finalization", которая содержит код, выполняемый перед завершением работы программы.

Первоначально компилятор Why не привязывался к какой-либо операционной системе. Он писался на стандартном подмножестве Паскаля и мог компилироваться не только транслятором Turbo Pascal, но и целым рядом других совместимых трансляторов, включая Free Pascal Compiler, TMT Pascal Compiler и Borland Delphi. Для обеспечения полной совместимости исходного текста со всеми этими трансляторами в проект был добавлен файл определений CDefines.pas, включаемый (при помощи директивы $I) всеми модулями. Позже, при доработке проекта, полная совместимость была потеряна из-за недостатка времени, однако наиболее ценная часть проекта, так сказать, его смысловое ядро, и сейчас остается портабельным. При желании компилятор в его настоящем виде можно переделать так, чтобы он вновь стал портабельным и оттранслировать, например для операционной системы Linux или OS/2.

Примечание. Все вышесказанное не касается кода, который генерируется самим компилятором Why. Этот код как был, так и остается ориентированным на расширенную 32-разрядную ДОС, что, разумеется, никак не зависит от платформы, на которой работает сам компилятор.


[Наверх] [Об авторе...] [Оглавление]

Copyright © Алексей Яковлев, АВМ-008, факультет АТС, РГУПС.
Моя домашняя страничка: http://www.yallie.narod.ru.