Flat Assembler 1.64. Мануал программера | страница 25
Есть несколько правил для построения выражения для сравнения, первое — это любые символьные знаки и строки в кавычках должны соответствовать абсолютно точно. В этом примере:
>match +,+ { include 'first.inc' }
>match +,- { include 'second.inc' }
Первый файл будет включен, так как «>+
» после запятой соответствует «>+
» в образце, а второй файл не будет включен, так как совпадения нет.
Чтобы соответствовать любому другому символу буквально, он должен предварятья знаком «>=
» в образце. Также чтобы привести в соответствие сам знак «>=
», или запятую должны использоваться конструкции «>==
» и «>=,
». Например, образец «>=a==
» будет соответствовать последовательности «>a=
».
Если в образце стоит некоторый символ имени, он соответствует любой последовательности, содержащей по крайней мере один символ и его имя заменяется на поставленную в соответствие последовательность везде в следующем блоке, аналогично параметрам в макроинструкции. Например:
>match a-b, 0–7
>{ dw a,b-a }
сгенерирует инструкцию «>dw 0, 7–0
». Каждое имя всегда ставится в соответствие как можно меньшему количеству символов, оставляя оставшиеся, то есть:
>match a b, 1+2+3 { db a }
имя «>a
» будет соответствовать символу «>1
», оставляя последовательность «>+2+3
» в соответствие с «>b
». Но, таким образом:
>match a b, 1 { db a }
для «>b
» ничего не остается, и блок вообще не будет обработан.
Блок кода, определенный директивой «>match
» обрабатывается так же, как любая макроинструкция, поэтому здесь могут использоваться любые операторы, специфичные для макроинструкций.
Что делает директиву «>match
» очень полезной, так это тот факт, что она заменяет символьные константы на их значения в поставленной в соответствие последовательности символов (то есть везде после запятой до начала блока кода) перед началом сопоставления. Благодаря этому директива может использоваться, например, для обработки некоторого блока кода в зависимости от выполнения условия, что данная символьная константа имеет нужное значение, например:
>match =TRUE, DEBUG { include 'debug.inc' }
здесь файл будет включен, только если символьная константа «>DEBUG
» определена со значением «>TRUE
».
2.3.7 Порядок обработки
При сочетании разных свойств препроцессора важно знать порядок, в котором они обрабатываются. Кат уже было отмечено, высший приоритет имеет директива «>fix
» и замены, ею определенные. Это полностью делается перед совершением любого другого препроцессинга, поэтому такой кусок кода:
>V fix {