Kernighan, B. W. and Ritchie, D. M. "The 'C' Programming Language"; Chapter 11

11. Лексические соглашения.

Имеется шесть классов лексем: идентификаторы, ключевые слова,константы, строки, операции и другие разделители. Пробелы, табуляции,новые строки и комментарии (совместно, "пустые промежутки"), какописано ниже, игнорируются, за исключением тех случаев, когда они служатразделителями лексем. Необходим какой-то пустой промежуток дляразделения идентификаторов, ключевых слов и констант, которые впротивном случае сольются.

Если сделан разбор входного потока на лексемы вплоть до данного символа,то в качестве следующей лексемы берется самая длинная строка символов,которая еще может представлять собой лексему.

Содержание

11.1. Комментарии
11.2. Идентификаторы (имена)
11.3. Ключевые слова.
11.4. Константы.
11.4.1. Целые константы.
11.4.2. Явные длинные (long) константы.
11.4.3. Символьные константы.
11.4.4. Плавающие константы.
11.5. Строки.
11.6. Характеристики аппаратных средств.


11.1. Комментарии

Комментарий открывается символами /* и заканчивается символами */.Комментарии не вкладываются друг в друга.


11.2. Идентификаторы (имена)

Идентификатор - это последовательность букв и цифр; первый символдолжен быть буквой. Подчеркивание _ считается буквой. Буквы нижнегои верхнего регистров различаются. Значащими являются не более, чемпервые восемь символов, хотя можно использовать и больше. На внешниеидентификаторы, которые используются различными ассемблерами изагрузчиками, накладыватся более жесткие ограничения:

dec pdp-117 символов, 2 регистра
honeywell 60006 символов, 1 регистр
ibm 360/3707 символов, 1 регистр
interdata 8/328 символов, 2 регистра


11.3. Ключевые слова.

Следующие идентификаторы зарезервированы для использования вкачестве ключевых слов и не могут использоваться иным образом:

  • auto
  • break
  • case
  • char
  • continue
  • default
  • do
  • double
  • else
  • entry
  • extern
  • float
  • for
  • goto
  • if
  • int
  • long
  • register
  • return
  • short
  • sizeof
  • static
  • struct
  • switch
  • typedef
  • union
  • unsigned
  • while
Ключевое слово entry в настоящее время не используется каким-либокомпилятором; оно зарезервировано для использования в будущем. Внекоторых реализациях резервируется также словаfortran и asm.


11.4. Константы.

Имеется несколько видов констант, которые перечислены ниже. Впункте 11.6 резюмируются характеристики аппаратныхсредств, которые влияют на размеры.

11.4.1. Целые константы.

Целая константа, состоящая из последовательности цифр, считаетсявосьмеричной, если она начинается с 0 (цифра нуль), и десятичной впротивном случае. Цифры 8 и 9 имеют восьмеричные значения 10 и 11соответственно. Последовательность цифр, которой предшествуют символы0х (нуль, х-маленькое) или 0X (нуль х-большое), рассматривается какшестнадцатиричное целое. Шестнадцатиричные цифры включают буквы от а(маленькое) или а (большое) до f (маленькое) или f (большое) созначениями от 10 до 15. Десятичная константа, величина которойпревышает наибольшее машинное целое со знаком, считается длинной;восмеричная или шестнадцатиричная константа, которое превышаетнаибольшее машинное целое без знака, также считается длинной.

11.4.2. Явные длинные (long) константы.

Десятичная, восмеричная или шестнадцатиричная константа, за которойнепосредственно следует l (эль-маленькое) или L (эль-большое),является длинной константой. Как обсуждается ниже, на некоторыхмашинах целые и длинные значения могут рассматриваться какидентичные.

11.4.3. Символьные константы.

Символьная константа - это символ, заключенный в одиночные кавычки,как, например, 'х'. Значением символьной константы является численноезначение этого символа в машинном представлении набора символов.

Некоторые неграфические символы, одиночная кавычка ' и обратная косаячерта \ могут быть представлены в соответствии со следующей таблицейусловных последовательностей:

новая строкаNL/LF/\n
горизонтальная табуляцияHT\t
символ возврата на одну позициюBS\b
возврат кареткиCR\r
переход на новую страницуFF\f
обратная косая черта\\\
одиночная кавычка'\'
комбинация битовddd\ddd

Условная последовательность \ddd состоит из обратной косой черты, закоторой следуют 1,2 или 3 восмеричных цифры, которые рассмативаютсякак задающие значение желаемого символа. Специальным случаем этойконструкции является последовательность \0 (за нулем не следует цифра),которая определяет символ nul. Если следующий за обратной косой чертойсимвол не совпадает с одним из указанных, то обратная косая чертаигнорируется.

11.4.4. Плавающие константы.

Плавающая константа состоит из целой части, десятичной точки, дробнойчасти, буквы е (маленькая) или е (большая) и целой экспоненты снеобязательным знаком. Как целая, так и дробная часть являютсяпоследовательностью цифр. Либо целая, либо дробная часть (но не обе)может отсутствовать; либо десятичная точка, либо е (маленькая) иэкспонента (но не то и другое одновременно) может отсутствовать.Каждая плавающая константа считается имеющей двойную точность.


11.5. Строки.

Строка - это последовательность символов, заключенная в двойные кавычки,как, наприимер,"...". Строка имеет тип "массив символов" и класс памятиstatic (см. Пункт 17.4).Строка инициализирована указанными в нейсимволами. Все строки, даже идентично записанные, считаются различными.Компилятор помещает в конец каждой строки нулевой байт \0, с тем чтобыпросматривающая строку программа могла определить ее конец. Передстоящим внутри строки символом двойной кавычки " должен быть поставленсимвол обратной косой черты \; кроме того, могут использоваться те жеусловия последовательности, что и в символьных константах. И последнее,обратная косая черта \, за которой непосредственно следует символ новойстроки, игнорируется.


11.6. Характеристики аппаратных средств.

Следующая ниже таблица суммирует некоторые свойства аппаратногооборудования, которые меняются от машины к машине. Хотя они и влияют напереносимость программ, на практике они представляют меньшую проблему,чем это может казаться заранее.

Таблица 1
dec pdp-11honeywellibm 370interdata 8/32
asciiasciiebcdicascii
char8 bits9 bits8 bits8 bits
int16363232
short16361616
long32363232
float32363232
double64726464
range-38/+38-38/+38-76/+76-76/+76