Опубликован: 25.08.2010 | Доступ: свободный | Студентов: 6070 / 589 | Оценка: 3.91 / 3.44 | Длительность: 11:09:00
Лекция 1:

Основные понятия языка

Лекция 1: 123 || Лекция 2 >
Аннотация: Вводятся базовые для всего дальнейшего изложения понятия: из каких простейших "кирпичиков" состоят все тексты на языке программирования, что понимают под типом данных, какие встроенные типы данных есть в языке C++.
Ключевые слова: программирование, язык высокого уровня, ПО, Паскаль, работ, автоматическое тестирование, ISO, IEC, компилятор, GCC, visual, expression, edition, программный продукт, ipm, словосочетание, язык программирования, лексема, алфавит, перевод строки, подмножество, goto, сложение, оператор описания, int, фигурные скобки, элемент языка, семантика, препроцессор, директива, компиляция, синтаксический анализ, 1-грамматика, синтаксические ошибки, описание переменной, редактор связей, стандартная библиотека, компоновка, сборка, виртуальная машина, CLR, объявление переменной, внешняя переменная, нотация, ASME, auto-id, 'inline', short, dynamic, casting, sign, break, UNION, CASE, ENUM, static, unsigned, catch, explicit, namespace, static_cast, char, export, virtualize, external, operational, switch, void, const, private, templates, volatility, const_cast, FLOAT, protected, continue, throw, friend, Registered, операнд, строковый, апостроф, DB-9, IBM, A/PC, унарные операции, мантисса, вещественное число, символьная константа, литеры, управление процессами, escape sequence, backslash, управляющая последовательность, код символа, OOO, пробельный символ, заголовочный файл, переменная, вычисление выражения, указание типа, объект, байт, элементарный тип, представление, стандарт языка, арифметическая операция

Предисловие

Этот курс лекций построен на основе учебника автора "C/C++. Программирование на языке высокого уровня" [18], который выпускается издательством ПИТЕР с 2001 года по настоящее время. Учебнику был присвоен гриф Министерства образования Российской Федерации, он входит в списки рекомендуемой литературы во многих вузах России и ближнего зарубежья. Материалы учебника, вошедшие в этот курс, подверглись частичному обновлению и переработке. В 2010 году учебник был удостоен премии Правительства Санкт-Петербурга "За выдающиеся достижения в сфере высшего и профессионального образования" в составе учебно-методического комплекса по языкам программирования.

В этот комплекс входят также практикум по C/C++ [19] и учебники по языкам C# и Паскаль [20, построенные по единому принципу. Соответствующие учебные курсы можно найти на этом сайте. В комплекс входит более 250 индивидуальных вариантов заданий на лабораторные работы в расчете на учебную группу из 20 человек (все варианты можно найти в учебнике [18]) и более 1000 тестовых вопросов. Преподавателям будут полезны презентации лекций. На сайте интернет-школы программирования http://ips.ifmo.ru можно проверить правильность выполнения некоторых лабораторных работ с помощью системы автоматического тестирования программ.

Целью этого курса является краткое и четкое изложение основных особенностей языка С++ в соответствии со стандартом ISO/IEC 14882 (2003). Для написания программ во время обучения вы можете использовать, например, компилятор gcc или среду Microsoft Visual C++ 2005 Express Edition. Эти программные продукты распространяются бесплатно и достаточно хорошо поддерживают стандарт.

Доброжелательную и конструктивную критику, а также предложения по улучшению курса направляйте автору по адресу pta-ipm@yandex.ru.

Состав языка

Презентацию к лекции Вы можете скачать здесь.

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

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

Все тексты на языке пишутся с помощью его алфавита. Алфавит C++ включает:

  • прописные и строчные латинские буквы и символ подчеркивания (_), который употребляется наряду с буквами;
  • арабские цифры от 0 до 9;
  • специальные символы, например +, *, { и &;
  • пробельные символы - пробел, символы табуляции, символы перевода строки и формата.

Алфавит языка в стандарте называется базовым набором символов. Кроме того, существует понятие " набор символов реализации " - все множество символов, доступных на данном компьютере. Этот набор содержит базовый набор в качестве подмножества.

Из символов базового набора составляются лексемы языка и директивы препроцессора. Символы из набора реализации используются для написания комментариев. Компилятор комментарии игнорирует.

Лексемы

Существуют следующие виды лексем:

  • имена (идентификаторы);
  • ключевые слова;
  • знаки операций;
  • разделители;
  • литералы (константы).

Границы лексем определяются другими лексемами, такими, как разделители или знаки операций.

Лексемы языка программирования аналогичны словам естественного языка. Например, лексемами являются константа 128 (но не ее часть 12), имя Vasia, ключевое слово goto и знак операции сложения +. Из лексем составляются выражения и операторы.

  • Выражение задает правило вычисления некоторого значения. Например, выражение a + b задает правило вычисления суммы величин a и b.
  • Оператор задает законченное описание некоторого действия.

Операторы делят на исполняемые и неисполняемые, простые и составные. Исполняемые операторы задают действия над данными. Неисполняемые операторы служат для описания данных, поэтому их часто называют операторами описания или просто описаниями. Например, int a ; - это оператор описания целочисленной переменной a.

Составной оператор или блок - это группа операторов, заключенная в фигурные скобки. Блоки могут быть вложенными.

Каждый элемент языка определяется синтаксисом и семантикой. Синтаксические определения устанавливают правила построения элементов языка, а семантика определяет их смысл и правила использования.

Объединенная единым алгоритмом совокупность описаний и операторов образует программу.

Путь от текста программы к исполняемому коду

Чтобы выполнить программу, требуется перевести ее на язык, понятный процессору - в машинные коды. Этот процесс состоит из нескольких этапов.

Сначала исходный текст программы обрабатывается препроцессором. Он разыскивает в тексте программы "свои" директивы (инструкции, команды), которые начинаются с символа # ("решетка"), и выполняет их. Директивы препроцессора позволяют вставить в программу тексты из других файлов, исключить из процесса компиляции фрагменты кода или выполнить замену одних фрагментов другими.

Обработанный препроцессором текст программы (в стандарте С++ он называется "единица компиляции") передается компилятору, который выполняет лексический и синтаксический анализ. На фазе лексического анализа лексический анализатор ( сканер ) последовательно просматривает поступающий на его вход поток символов, составляющих исходный текст программы, и выделяет допустимые лексемы. Их границы определяются по разделителям, пробельным символам и другим лексемам.

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

Если ошибок в программе не обнаружено, выполняется фаза генерации кода.Конкретный вид кода зависит от того, приложение какого типа мы создаем: Windows или . NET. Если это обычное приложение Windows, то строится объектный модуль - заготовка исполняемой программы в машинных кодах. Для приложения . NET формируется код на системно-независимом языке CIL.

Дальнейшая судьба этого кода также зависит от типа создаваемого приложения. Для обычного приложения Windows компоновщик (синонимы - линкер, редактор связей) формирует исполняемый модуль программы, подключая к объектному модулю другие объектные модули, в том числе содержащие элементы стандартных библиотек, которые используются в любой программе (например, для выполнения вывода на экран). Если программа состоит из нескольких исходных файлов, они компилируются по отдельности и объединяются на этапе компоновки. Исполняемый модуль имеет расширение . exe и запускается на выполнение обычным образом.

Приложение . NET собирается в сборку компоновщиком сборки и запускается на выполнение под управлением виртуальной машины CLR. При создании . NET -приложений также имеется возможность компилировать отдельно несколько модулей программы, собирая их потом в одну сборку.

Описание синтаксических конструкций

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

[ { void | int } ] имя();

Фигурные скобки используются для группировки элементов, из которых требуется выбрать только один.

Рассмотрим лексемы языка С++.

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

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

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

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

СОВЕТ

Не жалейте времени на придумывание подходящих имен. Имя должно отражать смысл хранимой величины, отвечать принятой нотации, быть легко распознаваемым и, желательно, не содержать символов, которые можно перепутать друг с другом, например, 1, l и I (единица, строчная L и прописная i ).

Лекция 1: 123 || Лекция 2 >
Dana Kanatkyzi
Dana Kanatkyzi
Здравствуйте.Помогите решить задачу минимум 4 чисел.Условие такое:"Напишите функцию int min (int a, int b, int c, int d) (C/C++)"находящую наименьшее из четырех данных чисел."Заранее спасибо!
Юрий Семевский
Юрий Семевский
Россия, Санкт-Петербург
Александр Богдашов
Александр Богдашов
Россия