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 {