B.7 Основная программа — main.awk

Предыдущая  Содержание  Следующая V*D*V

Блок BEGIN в main.awk должен быть последним выполняемым. Он обрабатывает каждый параметр в ARGV[] и удаляет его из этого массива. Имя, такое как c.rep, интерпретируется как файл отчёта, который будет загружаться loadReports(). Имя, подобное Object.dc, является реализацией, которая будет предварительно обработана. -dc, -h и -r приводят к отчётам с этими именами, которые будут интерпретироваться. Любой другой аргумент должен быть именем класса, описание для которого загружается с помощью load(); определение этого имени заменяет `desc. Такой аргумент должен предшествовать большинству других параметров, потому что `desc запоминается для генерации отчёта.

load() рекурсивно загружает все описания классов вплоть до корневого класса. Если командным скриптом ooc установлена переменная awk makefile, для каждого имени класса, определённого аргументом, генерируется отчёт -M. Это обычно создаёт строки для makefile, чтобы указать, как файлы описаний классов зависят друг от друга. Однако, ooc не может обнаружить, что в результате предварительной обработки файл реализации class.c зависит от файла описания класса class.d в дополнение к файлу class.dc. Эта зависимость должна быть добавлена к makefile отдельно.

main.awk содержит две функции. preprocess() заботится о предварительной обработке файла реализации. Она генерирует в начале файла реализации отчёт include. Она вызывает methodHeader() для различных способов, которыми можно запросить заголовок метода, и генерирует отчёты casts и init для операторов препроцессора %casts и %init.

methodHeader() генерирует отчёт methodHeader и записывает определение метода в базе данных: Links[class, n] хранит список имён методов, определённых для класса, а Tags[method, class] хранит тот тэг, который определён для метода в классе. Эти списки используются в отчёте инициализации.

 

Предыдущая  Содержание  Следующая