Операционная система UNIX. Руководство программиста

     

Выражения


В выражениях могут использоваться глобальные имена, константы и большинство основных операций языка C (см. Синтаксис управляющего языка редактора связей). Как и в языке C, числовые константы считаются десятичными, если только им не предшествует 0 для восьмеричных и 0x для шестнадцатеричных. Все числа трактуются как длинные целые. Имена могут содержать прописные и строчные буквы, цифры и символ подчеркивания, _. Если имя появляется внутри выражения, то в качестве значения используется его адрес. Редактор связей не просматривает таблицу имен и не пытается выяснить значения переменных, размерности массивов и т.п.

Для распознавания имен, чисел, операций и т.п. редактор связей использует сканер, сгенерированный с помощью утилиты lex(1). Ниже перечислены слова, которые сканер считает зарезервированными, и которые нельзя поэтому использовать в качестве имен или названий секций:

ADDR BLOCK GROUP NEXT RANGE SPARE ALIGN COMMON INFO NOLOAD REGIONS PHY ASSIGN COPY LENGTH ORIGIN SECTIONS TV BIND DSECT MEMORY OVERLAY SIZEOF

addr block length origin sizeof align group next phy spare assign l o range bind len org s

В следующей таблице приведены, в порядке убывания приоритета, знаки допустимых операций:

Знак операции
! ~ - (унарный минус) 

  * / % 

  + - (бинарный минус) 

  >> << 

  == != > < <= >= 

  & 



  | 

  && 

    

  = += -= *= /= 

Перечисленные операции имеют тот же смысл, что и в языке C. Операции, знаки которых находятся на одной строке, имеют одинаковый приоритет.


Выражения в awk'е имеют одну из следующих форм:

терм

терм терм ... пер присвоп выражение




Основные выражения таковы:

выражение: первичное_выражение * выражение & л_значение - выражение ! выражение ~ выражение ++ л_значение -- л_значение л_значение ++

л_значение --

sizeof выражение sizeof ( имя_типа )

( имя_типа ) выражение выражение биноп выражение выражение ? выражение : выражение л_значение присвоп выражение выражение , выражение

первичное_выражение: идентификатор константа текстовая_константа ( выражение )

первичное_выражение [ выражение ]

первичное_выражение ( список_выражений )

первичное_выражение . идентификатор первичное_выражение -> идентификатор

список_выражений: выражение список_выражений , выражение

л_значение: идентификатор первичное_выражение [ выражение ]

л_значение . идентификатор b>* выражение ( л_значение )

Операции, образующие первичные выражения,

( ) [ ] . ->

имеют высший приоритет и группируются слева направо. Унарные операции

* & - ! ~ ++ -- sizeof ( имя_типа )

имеют приоритет ниже первичных операций, но выше, чем любая бинарная операция, и группируются справа налево. Бинарные операции группируются слева направо; их приоритет понижается в соответствии с приведенным ниже перечнем.

биноп: * / % + - >> <<



Содержание раздела