Лекция 2
Лексические основы языка C++
Упрощенная модель компиляции.. 1
Лексический анализ программы... 2
Категории лексем.. 3
Идентификаторы.. 3
Ключевые слова. 3
Зарезервированные идентификаторы.. 3
Стандартные идетификаторы.. 4
Идентификатор пользователя. 4
Константы.. 4
Литералы.. 5
Целые константы.. 5
Вещественные константы.. 6
Булевские (логические) константы.. 7
Символьные константы.. 7
Строковые константы.. 9
Перечисляемые константы.. 10
Именованные константы.. 10
Препроцессорные константы.. 10
Знаки операций.. 12
Знаки пунктуации.. 12
Разделители.. 14
Пробельные разделители.. 14
ASCII-Коды (символы с кодами 0-127) 16
Кодовая таблица 866 – MS-DOS.. 17
(символы с кодами 127-255) 17
Кодовая таблица 1251 – MS Windows. 18
(символы с кодами 127-255) 18
Упрощенная модель компиляции
Упрощенная модель компиляции представлена на рисунке 2.1.
Рис.1.2. Упрощенная модель компиляции
Компилятор, прежде всего, выполняет лексический анализ текста программы: выделяет в нем минимальные неделимые структурные единицы (лексические элементы, лексемы, token), а затем проводит синтаксический анализ: на основе грамматики языка распознает смысловые конструкции языка (выражения, определения, описания, операторы и т.д.), построенные из этих лексем, т.е. проверяет их соответствие синтаксису языка программирования (правилам, определяющим последовательности символов, которые можно использовать в программе).
|
|
Семантический анализ программы – моделирование процесса понимания ее текста человеком. Семантика языка программирования ( правила интерпретации операторов ) определяет последовательности действий, которые выполнит компьютер при реализации конструкций языка.
Лексический анализ программы
Программа на С++ формируется из некоторого набора символов а лфавита языка, каждому из которых сопоставляется определенная группа двоичных знаков [1]. Программа записывается в свободном формате, лишние пробелы игнорируются.
Алфавит С++ составляют 96 символов:
· строчные и прописные латинские буквы (a..z, A..Z)
· цифры 0..9
· 29 специальных символов: “ { }, | [ ] () + - / % \; ‘:? < = > _! & # ~ ^. *
· неизображаемые символы: пробел и управляющие символы (горизонтальная табуляция, вертикальная табуляция, перевод страницы, начало новой строки).
Лексический анализ проводится в порядке расположения символов в программе. За очередную лексему принимается наибольший ряд символов, который может быть распознан как лексема. Например, запись a++-b трактуется как a++ -b, т.е. увеличить значение a на 1 и затем найти разность.
Метод выделения лексем: выбор лексемы максимальной длины (например, external, а не extern al). Строковая константа, даже содержащая пробельный символ, защищена от разбиения на лексемы и пробелы.
|
|
Примеры выделения лексем:
предложение языка | результат лексического анализа |
for (int i=1; i <=10; i++); | for ( int i = 1 ; i <= 10 ; i ++ ); |
char name[] = ”кафедра информатики”; | char name [ ] = ”кафедра информатики” ; |
int i; float f; | int i ; float f ; |
int /*описание*/ i /* счетчика*/; | int i ; |
Категории лексем
· идентификаторы (identifier);
o ключевые слова (keyword);
o зарезервированные идентификаторы;
o стандартные идентификаторы;
o идентификаторы пользователя;
· константы (literal);
· знаки операций (operator);
· знаки пунктуации (punctuator);
Идентификаторы
Идентификатор – последовательность символов, закрепляемая за информационным объектом программы ( имя программного объекта ).
Ключевые слова
Ключевые слова – служебные слова языка, которые употребляются в определенном контексте при построении выражений языка и запрещены к употреблению в качестве имен объектов программы, присваиваемых им пользователем (идентификаторов пользователя); пишутся в программе на С++ строчными буквами (Таблица 1.1).
Таблица 1.1.Ключевые слова С++
asm auto bool break case catch char class const const_cast continue default delete do double dynamic_cast | else enum explicit export extern false float for friend goto if inline int long mutable namespace | new operator private protected public register reinterpret_cast return short signed sizeof stаtic stаtic_cast struct switch template | this throw true try typedef typeid typename union unsigned using uuid virtual void volatile wchar_t while |
Зарезервированные идентификаторы
Стандарт языка определил ряд идентификаторов, которые могут использоваться для альтернативного представления некоторых операций (проверить в среде разработки) и для которых запрещено другое использование (Таблица 1.2).
Таблица 1.2.Зарезервированные идентификаторы С++
and && | or || | not ! | xor ^ |
and_eq &= | or_eq |= | not_eq != | xor_eq ^= |
bitand & | bitor | | compl ~ |