|
- 1-й проход Макропроцессора
- Инициализация: открытие исходного файла, создание пустых таблиц, признак "обработка макроопределения" устанавливается в FALSE.
- Чтение следующей строки исходного файла с проверкой конца файла.
- Если при чтении строки найден конец файла, выводится сообщение об ошибке, закрываются файлы, освобождается память...
- ... и Макропроцессор завершается с признаком ошибки.
- Если конец файла не достигнут, выполняется лексический разбор прочитанной строки с выделением имени и мнемоники операции.
- Алгоритм Макропроцессора разветвляется в зависимости от мнемоники операции
- Если мнемоника операции MACRO - заголовок макроопределения, то в таблицу имен макроопределений заносится имя, находящееся в этом операторе и начальный адрес свободной области в таблице макроопределений. (При занесении имени в таблицу имен макроопределений проверяется, нет ли уже в таблице такого имени, если есть - ошибка)
- Оператор MACRO записывается в таблицу макроопределений.
- Признак "обработка макроопределения" устанавливается в TRUE.
- Если мнемоника операции MEND - конец макроопределения, то оператор записывается в таблицу макроопределений...
- ... и признак "обработка макроопределения" устанавливается в FALSE.
- Если мнемоника операции END - конец программы, то проверяется установка признака "обработка макроопределения".
- Если этот признак установлен в TRUE, т.е., конец программы встретился до окончания макроопределения, то выводится сообщение об ошибке, закрываются файлы, освобождается память...
- ... и Макропроцессор завершается с признаком ошибки.
- Если этот признак установлен в FALSE, то выполняются завершающие операции ...
- ... и заканчивается 1-й проход Макропроцессора.
- При любой другой мнемонике оператора проверяется установка признака "обработка макроопределения".
- Если этот признак установлен в TRUE, то оператор записывается в таблицу макроопределений, если признак установлен в FALSE, то оператор игнорируется Макропроцессором.
|