- •Курсовая работа
- •Задание
- •2.3 Компиляция и использование модулей 22
- •2.5 Пример модуля 30
- •Перемножение двух матриц 35
- •2.1 Общая структура модуля
- •2.3 Компиляция и использование модулей
- •Компиляция модулей: tpu-файлы
- •Компиляция: поиск модулей. Файл turbo.Tpl
- •2.4 Стандартные модули
- •2.5 Пример модуля
- •2.5 Синтаксические диаграммы
- •I, j: byte;
Компиляция модулей: tpu-файлы
Особенности модулей требуют несколько более подробного рассмотрения вопросов, связанных с их компиляцией и использованием. Для случая компиляции программы никак не оговаривается связь имени в заголовке программы и имени дискового файла, содержащего эту программу; так как сам заголовок является необязательным, такая связь не имеет смысла.
В отличие от программ, заголовок модуля несет семантическую нагрузку, так как программа или другой модуль, использующие данный, могут ссылаться на него в uses-спецификации. С другой стороны, при трансляции программы, использующей модули, компилятор должен каким-то образом отыскать коды этих модулей, чтобы подключить их к компилируемой программе. Поэтому принято за правило, что имя файла, содержащего исходный текст модуля, должно совпадать с именем этого модуля (расширение имени файла при этом несущественно, но по умолчанию предполагается .PAS). Компилятор помещает код модуля, полученный в результате трансляции, в файл с таким же именем и расширением .TPU. При трансляции же программы, использующей этот модуль, компилятор ищет ТРU-файл с именем, заданным в uses-спецификации, и связывает его с кодом программы. Таким образом, в спецификации использования фактически задаются не имена модулей, а имена файлов, их содержащих.
Например, для спецификации
uses MyUnit;
помещенной в некоторой программе, компилятор перед трансляцией самой программы должен найти дисковый файл с именем MYUNIT.TPU; в этом файле должен находиться код модуля с заголовком вида
unit MyUnit;
Если все-таки необходимо хранить код модуля в файле с другим именем, то можно использовать директиву $U для переопределения имени файла. Эта директива имеет параметр, который трактуется как "настоящее" имя файла с данным модулем. Она должна находиться непосредственно перед именем модуля в спецификации использования. Например, конструкция
uses {$U MY) MyUnit;
приведет к тому, что компилятор будет искать код модуля MyUnit в дисковом файле MY. TPU.
Компиляция: поиск модулей. Файл turbo.Tpl
При трансляции программы или модуля, использующего другие модули, компилятор последовательно отыскивает файлы, содержащие коды используемых модулей, с тем чтобы подключить их к компилируемой программе. При этом компилятор работает по следующей схеме:
1) Компилятор просматривает содержимое системного библиотечного файла модулей TURBO.TPL (Turbo Pascal Library). Этот файл будет кратко описан далее в этом разделе.
2) Если искомый модуль не найден в файле TURBO. TPL, то компилятор осуществляет поиск соответствующего TPU-файла в ТЕКУЩЕМ каталоге.
3) Если в текущем каталоге нужный файл не найден, то поиск продолжается в каталогах, заданных в альтернативе Options/ Directories/Unit Directories для интегрированной среды или в параметре /U вызова ТРС–компилятора.
4) Если на предыдущих шагах файл не найден, то компилятор прекращает работу и выдает диагностическое сообщение об ошибке.
5) Если компилятор активизирован посредством альтернатив Compile/Make или Compile/Build, то вышеуказанные шаги проводятся в поисках ИСХОДНЫХ ТЕКСТОВ используемых модулей, которые будут оттранслированы перед трансляцией самой программы. При этом подразумевается, что имя файла с текстом модуля совпадает с именем модуля и имеет расширение .PAS.
Как было указано, первый шаг компилятора при поиске используемых модулей состоит в анализе системного файла TURBO.TPL. Этот файл имеет специальную структуру и предназначен для компактного хранения и быстрого доступа к наиболее часто используемым модулям. Обычно в этом файле содержатся несколько системных (стандартных) модулей, однако с помощью специальной служебной программы TPUMOVER можно произвольным образом конструировать файл TURBO.TPL, включая в него нужные модули и удаляя неиспользуемые.
Понятие библиотеки модулей является потенциально удобным, но к сожалению, Turbo Pascal поддерживает только один библиотечный модуль; нельзя сформировать библиотеку модулей в некотором TPL-файле и обеспечить подключение к программе модулей из этой библиотеки.
