Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
л_2_Лексические_основы_С++.doc
Скачиваний:
11
Добавлен:
04.11.2018
Размер:
582.66 Кб
Скачать

Лекция 2

Лексические основы языка C++

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);

    • ключевые слова (keyword);

    • зарезервированные идентификаторы;

    • стандартные идентификаторы;

    • идентификаторы пользователя;

  • константы (literal);

  • знаки операций (operator);

  • знаки пунктуации (punctuator);