M4(1)
НАЗВАНИЕ
m4 - макропроцессор
СИНТАКСИС
m4 [-e] [-s] [-Bцелое] [-Hцелое] [-Sцелое] [-Tцелое] [-Dимя[=значение]
[-Uимя] [файл ...]
ОПИСАНИЕ
Макропроцессор m4 предназначен для макрогенерации на
предварительном проходе в языках RATFOR, C и других.
Все файлы-аргументы обрабатываются по очереди. Если
файлы не указаны, или в качестве имени файла задан -,
то читается стандартный ввод. Обработанный текст записывается на стандартный вывод.
Допустимы следующие опции:
- -e
- Работать интерактивно. Прерывания игнорируются и
вывод не буферизуется.
- -s
- Разрешить вывод операторов #line для C-препроцессора.
- -Bцелое
- Сменить размеры буфера повторного сканирования и
буфера, в котором накапливаются аргументы. По
умолчанию размер равен 4096.
- -Hцелое
- Сменить размер хэш-таблицы имен с 199 по умолчанию. Размер должен быть простым числом.
- -Sцелое
- Сменить размер стека вызовов со 100 элементов по
умолчанию. Макрос занимает 3 ячейки в стеке вызовов; аргумент занимает одну ячейку.
- -Tцелое
- Изменить размер буфера лексем с 512 байт по умолчанию.
Чтобы эти опции действовали, они должны располагаться
перед всеми именами файлов и перед опциями -D и -U:
- -Dимя[=значение]
- Эта опция определяет имя равным значению или пустой цепочке, если значение отсутствует.
- -Uимя
- Делает имя неопределенным.
- Макровызовы имеют следующий вид:
имя(арг1,арг2, ...аргn)
Левая скобка должна следовать непосредственно за именем
макроса. Если за именем определенного макроса не следует (, то полагается, что макрос вызван без аргументов.
Имя макроса может состоять из букв, цифр и символов
подчеркивания, причем первым символом не может быть
цифра.
В процессе сбора аргументов m4 игнорирует не заключенные в кавычки начальные пробелы, табуляции и символы
перевода строки. Для того, чтобы запретить интерпретацию цепочки символов, их заключают между правой и левой
одинарными кавычками:
`эта цепочка не интерпретируется'
Значение цепочки символов, заключенной в кавычки, равно
самой этой цепочке без внешних кавычек.
Когда имя макроса распознано, его аргументы собираются
путем поиска парной правой скобки. Если аргументов оказалось меньше, чем используется в определении макроса,
то последним аргументам будут даны пустые значения. В
процессе сбора аргументов продолжается макрообработка и
все не взятые в кавычки запятые и правые скобки, которые образовались в результате вложенных макровызовов,
действуют так же, как будто они встретились в исходном
тексте. После сбора аргументов значение макроса сканируется повторно, так как если бы оно было в исходном
тексте.
M4 предоставляет следующие встроенные макросы, которые
могут быть переопределены, но в этом случае их первоначальный смысл теряется. Значения встроенных макросов,
если не оговорено противное, равны пустой цепочке.
- define
- Второй аргумент становится значением макроса с
именем, равным первому аргументу. Если в значение
макроса входят пары символов $n, где n - цифра, то
при вызове этого макроса они заменяются на n-ый
аргумент. Нулевым аргументом является имя макроса;
пропущенные аргументы заменяются на пустые цепочки; $# заменяется количеством аргументов; $* заменяется на список всех аргументов, разделенных запятыми; $@ заменяется тоже на список аргументов,
но каждый аргумент заключен в кавычки, являющиеся
текущими.
- undefine
- Удаляет определения макросов, имена которых заданы
в качестве аргументов.
- defn
- Возвращает заключенные в кавычки определения своих
аргументов. Это полезно для переименования макросов, особенно встроенных.
- pushdef
- Действует аналогично define, но сохраняет все предыдущие определения.
- popdef
- Удаляет текущие определения своих аргументов и
восстанавливает предыдущие, если они есть.
- ifdef
- Если первый аргумент определен, то значение будет
равно второму аргументу, в противном случае
третьему. Если третьего аргумента нет, то значе ние будет пустым. Слово unix заранее определено в
версиях m4 для системы UNIX.
- shift
- Возвращает все свои аргументы кроме первого, зак лючив их в кавычки и отделив друг от друга запя тыми.
- changequote
- Первый и второй аргументы становятся новыми символами-кавычками вместо ` и '. Эти аргументы могут
содержать до 5 символов. Changequote без аргументов возвращает первоначальные значения (то есть
`').
- changecom
- Изменяет левый и правый маркеры комментария, которые первоначально равны # и символу перевода строки. Если нет аргументов, то механизм комментариев
полностью подавляется. Если задан один аргумент,
то он становится левым маркером комментариев, а
правым маркером становится перевод строки. Если
заданы два аргумента, то они становятся левым и
правым маркерами. Маркеры комментариев могут содержать до 5 символов.
- divert
- M4 поддерживает 10 выходных потоков, под номерами
0-9. Окончательный результат получается конкатенацией всех этих потоков в порядке возрастания номеров; первоначально текущим потоком является нулевой. Макрос divert меняет выходной поток на поток
с номером, заданным аргументом (в виде цепочки десятичных цифр). Вывод, направленный во все потоки
кроме 0-9, теряется.
- undivert
- Вызывает немедленный вывод текста из потоков, номера которых указаны как аргументы, или из всех
потоков, если аргументы не указаны. Выведенные потоки очищаются. Текст может быть выведен в любой
поток.
- divnum
- Возвращает номер текущего выходного потока.
- dnl Читает и удаляет символы до следующего символа перевода строки включительно.
- ifelse
- Имеет 3 или более аргументов. Если первый аргумент
совпадает как цепочка символов со вторым, то результатом будет третий аргумент. Если нет, то, если аргументов более чем 4, то процесс повторяется
с аргументами под номером 4, 5, 6 и 7 (4-ый и 5-ый
аргументы сравниваются и т.д.) Если же аргументов
не более 4, то результатом будет 4-ый аргумент или
пустая цепочка при его отсутствии.
- incr
- Возвращает значение своего аргумента, увеличенное
на 1. Аргумент, который должен быть цепочкой цифр,
интерпретируется как десятичное число.
- decr
- Возвращает значение своего аргумента, уменьшенное
на 1.
- eval
- Вычисляет свой аргумент как арифметическое выражение, используя 32-битную арифметику. Допустимые
операции включают +, -, *, /, %; побитные операции
&, |, ^, и ~; операции отношения; скобки. Восьмеричные и шестнадцатеричные числа могут быть заданы
как в языке C. Второй аргумент указывает систему
счисления для результата; по умолчанию результат
десятичный. Если задан третий аргумент, то он определяет минимальное число цифр в результате.
- len
- Возвращает количество символов в своем аргументе.
- index
- Возвращает позицию в первом аргументе, с которой
начинается второй аргумент. Позиции нумеруются с
0. В случае неудачи поиска возвращается -1.
- substr
- Возвращает подцепочку первого аргумента. Второй
аргумент задает номер начального символа подцепочки (считая от 0), третий аргумент указывает длину.
Если третий аргумент опущен, то подцепочка продолжается до конца первого аргумента. Если вторым и
третьим аргументами задана подцепочка, выходящая
за пределы данной цепочки, то результатом будет их
пересечение.
- translit
- Заменяет в первом аргументе символы, которые входят во второй аргумент, на символы, стоящие в
третьем аргументе на тех же позициях. Не допустимы
никакие сокращения.
- include
- Возвращает содержимое файла с именем, заданным аргументом.
- sinclude
- То же самое, что и include, за исключением того,
что не будет никакой реакции, если файл недоступен.
- syscmd
- Выполняет команду системы UNIX, заданную первым
аргументом. Никакого значения не возвращается.
- sysval
- Код завершения последнего вызова syscmd.
- maketemp
- В подцепочку аргумента, имеющую вид XXXXX, вписывается идентификатор текущего процесса.
- m4exit
- Вызывает немедленный выход из m4. Первый аргумент,
если он есть, будет кодом завершения; подразумевается 0.
- m4wrap
- Помещает свой первый аргумент в конец исходного
текста, например:
m4wrap(`cleanup()')
Эффективен только один вызов m4wrap, из нескольких
вызовов действие окажет только последний.
- errprint
- Выдает свой аргумент в стандартный протокол.
- dumpdef
- Выдает текущие имена и определения для указанных
макросов, или для всех макросов, если нет аргументов.
- traceon
- Если аргументы не заданы, включает трассировку
всех макросов (в том числе и встроенных); иначе
включает трассировку только указанных макросов.
- traceoff
- Выключает трассировку глобально или для указанных
макросов специально. Если трассировка некоторого
макроса была включена вызовом traceon с аргументами, то и выключить его трассировку можно только
вызовом traceoff с именем этого макроса в качестве
аргумента, а не глобальным traceoff без аргументов.
СМ. ТАКЖЕ
cc(1), cpp(1).
|
|