
- •Лекция 1
- •Понятие программы и языка программирования
- •Компоненты языка программирования
- •Структурная схема компьютерной программы
- •Жизненный цикл программного средства
- •Технология подготовки и решения задачи на компьютере
- •Функция как компонент структуры программы
- •Примеры простых программ в ычисление значения функции в заданной точке
- •Вычисление суммы и количества целых чисел, введенных пользователем с клавиатуры
- •Демонстрация работы со строками на основе использования класса string
- •Виды представления программы и данных
- •Процесс компиляции программы
- •Классическая схема подготовки исполняемой программы
- •Технологический цикл обработки программы
- •Особенности внутреннего представления программы и ее исполнения 9*
- •Организация памяти компьютера
- •Сегментация программы
- •Процесс исполнения программного кода
- •Структура текстового файла программы
- •Структура программы из двух текстовых файлов
- •В результате изучения материала лекции необходимо знать
Технологический цикл обработки программы
Технологический цикл обработки программы выглядит следующим образом:
Рис.1.4. Технологический цикл обработки программы
Упрощенная модель
компиляции представлена на рисунке
1.5.
Рис.1.5. Упрощенная модель компиляции
Во всех языках программирования (в том числе и в С++) программа рассматривается как последовательность лексем. Лексема – это неделимая единица программы. Лексический анализ текста программы – это выделение основных категорий лексем языка (их мы рассмотрим на следующей лекции). Лексический анализ проводится в порядке расположения символов в программе. За очередную лексему принимается наибольший ряд символов, который может быть распознан как лексема. Например, запись a++-b трактуется как a++ -b, т.е. увеличить значение a на 1 и затем найти разность; запись elseif трактуется как elseif а не как else и if; if – также лексема (ни ‘i’, ни ‘f’ сами по себе не имеют в программе на С++ никакого значения); оператор равенства == также является лексемой. Строковая константа, даже содержащая пробельный символ, защищена от разбиения на лексемы и пробелы: "кафедра информатики".
Примеры выделения лексем:
предложение языка |
результат лексического анализа |
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 ; |
После лексического анализа текста программы, компилятор выполняет синтаксический анализ и затем – семантический анализ.
Синтаксис языка программирования – система правил написания различных языковых конструкций. В процессе синтаксического анализа компилятор проверяет соответствие смысловых конструкций языка, построенных из лексем, синтаксису языка программирования. Нарушение этих правил приводит к синтаксическим ошибкам, выявляемым на этапе компиляции программы. Например:
int i, //error!!! определение переменной должен завершать символ ‘;’
float f;
Семантика языка программирования – правила интерпретации операторов, определяющие смысл языковых конструкций, последовательность действий, которые выполнит компьютер при реализации конструкций языка. Нарушение этих правил приводит к семантическим ошибкам, выявляемым в процессе семантического анализа (трудно, а практически вообще не выявляемым на этапе компиляции и трудно выявляемым на этапе отладки и даже эксплуатации программы).
int i;
for (i=1; i <=10; i++)
cout << i; //вывод значения переменной i в цикле
for (i=1; i <=10; i++);
cout << i; //вывод последнего значения переменной i!!!