Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1.1.1 - Основные поняти. Типы данных.doc
Скачиваний:
9
Добавлен:
02.11.2018
Размер:
107.52 Кб
Скачать

Лексемы.

Основная задача лексического анализа – разбить входной текст, состоящий из последовательности одиночных символов, на последовательность слов, или лексем, т.е. выделить эти слова из непрерывной последовательности символов. Все символы входной последовательности с этой точки зрения разделяются на:

  • символы, принадлежащие каким-либо лексемам,

  • и символы, разделяющие лексемы (разделители).

Лексема – единица текста программы, которая при компиляции воспринимается как единое целое и по смыслу не может быть разделена на более мелкие элементы. Примеры: asm1, case25, structure.

Алфавит языка:

  • прописные и строчные буквы латинского алфавита (A..Z,a..z);

  • цифры: 0,1,2,3,4,5,6,7,8,9;

  • специальные знаки: " { } | ( ] ( ) + - / ; ‘ . : ? < = > ! & * # - %

  • неизображаемые символы («обобщенные пробельные символы»), используемые для отделения лексем друг от друга (например, пробел, табуляция, переход на новую строку).

В языке Си шесть классов лексем:

  1. свободно выбираемые и используемые идентификаторы,

  2. служебные (ключевые) слова,

  3. константы,

  4. строки (строковые константы),

  5. операции (знаки операций),

  6. разделители (знаки пунктуации).

Идентификаторы

Идентификатором называется последовательность цифр и букв, а также специальных символов, при условии, что первой стоит буква или специальный символ. Для образования идентификаторов могут быть использованы строчные или прописные буквы латинского алфавита. В качестве специального символа может использоваться символ подчеркивание (_). Два идентификатора для образования которых используются совпадающие строчные и прописные буквы, считаются различными. Например: abc, ABC, A128B, a128b .

Важной особенностью является то, что компилятор допускает любое количество символов в идентификаторе, хотя значимыми являются первые 31 символ. Идентификатор создается на этапе объявления переменной, функции, структуры и т.п. после этого его можно использовать в последующих операторах разрабатываемой программы. Следует отметить важные особенности при выборе идентификатора.

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

Во вторых, следует обратить особое внимание на использование символа (_) подчеркивание в качестве первого символа идентификатора, поскольку идентификаторы построенные таким образом, что, с одной стороны, могут совпадать с именами системных функций и (или) переменных, а с другой стороны, при использовании таких идентификаторов программы могут оказаться непереносимыми, т.е. их нельзя использовать на компьютерах других типов.

В третьих, на идентификаторы используемые для определения внешних переменных, должны быть наложены ограничения, формируемые используемым редактором связей (отметим, что использование различных версий редактора связей, или различных редакторов накладывает различные требования на имена внешних переменных).

Служебные (ключевые) слова

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

  • типы данных (спецификаторы типов),

  • квалификаторы типа,

  • классы памяти,

  • модификаторы,

  • псевдопеременные,

  • операторы.

Служебные слова: спецификаторы типов

  • char - символьный;

  • double - вещественный двойной точности с плавающей

  • точкой;

  • enum - перечисляемый тип (перечисление) - определение

  • целочисленных констант, для каждой из которых вводятся

  • имя и значение;

  • float - вещественный с плавающей точкой;

  • int - целый;

  • long - целый увеличенной длины (длинное целое);

  • short - целый уменьшенной длины (короткое целое);

  • struct - структура (структурный тип);

  • signed - знаковый, т.е. целое со знаком (старший бит считается знаковым);

  • union - объединение (объединяющий тип);

  • unsigned - беззнаковый, т.е. целое без знака (старший бит не считается знаковым);

  • void - отсутствие значения;

  • typedef - вводит синоним обозначения типа (определяет сокращенное наименование для обозначения типа).

Служебные слова: квалификаторы типов

  • const - квалификатор объекта, имеющего постоянное значение, т.е. доступного только для чтения;

  • volatile - квалификатор объекта, значение которого может измениться без явных указаний программиста.

Служебные слова: классы памяти

  • auto - автоматический;

  • extern - внешний;

  • register - регистровый;

  • static - статический.

Служебные слова: для построения операторов (основные)

  • break - выйти из цикла или переключателя;

  • continue - завершить текущую итерацию цикла (продолжить цикл, перейдя к следующей итерации);

  • do - выполнять (заголовок оператора цикла с постусловием);

  • for - для (заголовок оператора параметрического цикла);

  • goto - перейти (безусловный переход);

  • if - если - обозначение условного оператора;

  • return - возврат (из функции);

  • switch - переключатель;

  • while - пока (заголовок цикла с предусловием или завершение цикла do).

Служебные слова: для построения операторов (вспомогательные)

  • default - определяет действия при отсутствии нужного варианта в операторе switch;

  • case - определяет вариант в операторе switch;

  • else - входит в оператор if, определяя альтернативную ветвь;

  • sizeof - операция определения размера операнда (в байтах),

Ключевые слова far, huge, near позволяют определить размеры указателей на области памяти.

Ключевые слова _asm, cdelc, fortran, pascal служат для организации связи с функциями написанными на других языках, а также для использования команд языка ассемблера непосредственно в теле разрабатываемой программы на языке СИ.

Модификаторы (не служебные слова): asm, cdecl, _cs, _ds, _es, far, fortran, huge, interrupt, near, pascal, _ss.

Служебные (ключевые) слова: cdecl, _export, _far, _fastcall, Joadds, _near, pascal, _saveregs, _seg.

Набор псевдопеременных, доступных из программ на языке Си и запрещенных для использования в других целях: _АН, _AL, _AX, _BH, _BL, _BP, _BX, _СН, _CL, _CS, _CX, _DH, _DI, _DL, _DS, _DX, _ES, _FLAGS, _SI, _SP, _SS.