Состав языка программирования

Язык программирования, так же как и любой естественный язык, имеет свои:

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

Алфавит С++ включает:

  1. Прописные и строчные буквы: a...z и A...Z, а в строковых и символьных константах а...я и А...Я
  2. Цифры: 0...9
  3. Специальные символы для различных целей (операторы, пунктуация и др.)

Программа на языке С++ состоит из элементов, называемых лексемами (token). Лексемы -- это наборы символов, распознаваемые компилятором языка. Компилятор С++ -- это программа, преобразующая текст на языке С++ в машинный код. Компилятор воспринимает текст программы как сплошной поток символов. Позиционирование операторов совершенно не важно. Лексемы разделяются пробельными символами, знаками табуляции, переходами на новую строку. Для читаемости программы текст все же лучше структурировать.

Лексемы:

  1. Ключевые слова (keywords).
  2. Идентификаторы (identifiers).
  3. Литералы (literals) или константы (constants).
  4. Операторы (operators).
  5. Знаки пунктуации (punctuators).

Особым элементом языка является создание комментариев (т.е. той части текста программы, которая будет игнорироваться компилятором). В языке С++ возможны два вида комментариев:

/* многострочный
комментарий */

с++; // однострочный комментарий до конца строки

Ключевые слова -- определенные зарезервированные слова, имеющие конкретное значение. Можно выделить следующие группы ключевых слов:

  1. ключевые слова для объявления типов;
  2. ключевые слова для создания языковых конструкций;
  3. остальные слова (для создания гетерогенных типов данных, для реализации принципов ООП и др.)

Ключевые слова в языке С++ всегда записываются прописными буквами. Например, if -- это ключевое слово для создания условной конструкции, а IF, If, iF может быть идентификаторами или константами и никогда не будут восприниматься компилятором как оператор.

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

i // обычно целая переменная цикла
count // количество
buff_size // составное (из 2 слов) имя с символом _
g374 // непонятно
_foo // плохо
if // не может быть идентификатором, т.к. это ключевое слово
374q // не может начинаться с цифры

Литералы -- это постоянные значения (константы):

5 // целая константа
05 // целая константа в восьмеричной системе счисления
0х5 // целая константа в шестнадцатеричной системе счисления
5.0 // вещественная константа с двойной точностью
5.f // вещественная константа
'5' // символьная константа
"hello" // строковая константа

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

Оператор (operator) Назначеие (meaning) Тип оператора (type) Порядок выполнения (associativity)
:: область видимости (scope resolution) unary
[ ] доступ к элементам массива (array subscript) unary слева направо
() вызов функции (function call) multiple слева направо
type() оператор преобразования типов, конструирования значения (conversion, constructor) unary
-> операторы доступа к членам гетерогенных типов данных (member selection) unary слева направо
++ -- постфиксный инкремент/декремент (postfix increment/decrement) unary
new Динамическое размещение в памяти переменных и массивов (allocate) binary
delete delete [] удаление из памяти переменной/массива, размещенного динамически (deallocate) binary
++ -- префиксный инкремент/декремент (prefix increment/decrement) unary
* получение значения по указателю (dereference) unary
& получения указателя на переменную (address-of) unary
+ унарный плюс (unary plus) unary
- арифметическое отрицание (arithmetic negation) unary
! отрицание/логическое НЕ (logical NOT) unary
~ побитовое дополнение (bitwise complement) unary
sizeof определение размера переменной (size of object) unary
typedef определение имени типа (type name) unary
(type) приведение типов (type cast) unary справа налево
const_cast dynamic_cast reinterpret_cast static_cast приведение типов (type cast) unary
.* ->* получение указателя на член класса (pointer to class member) unary слева направо
* / умножение/деление (multiplication/division) binary слева направо
% остаток от деления (remainder) binary слева направо
+ - сложение/вычитание (addition/subtraction) binary слева направо
<< >> побитовый левый/правый сдвиг (left/right shift) unary слева направо
< > <= >= сравнение (comparison) binary слева направо
== != равенство/неравенство (equality/inequality) binary слева направо
& побитовое И (bitwise AND) binary слева направо
^ побитовое исключающее ИЛИ (bitwise exclusive OR) binary слева направо
| побитовое ИЛИ (bitwise OR) binary слева направо
&& || логическое И/ ИЛИ (logical AND/OR) binary слева направо
?: арифметическая условная конструкция (ariftnetic if) ternary справа налево
= присваивание (assignment) binary справа налево
*= /= умножение/деление с присваиванием (multiplication/division assignment) binary справа налево
%= остаток от деления с присваиванием (modulus assignment) binary справа налево
+= -= сложение/вычитание с присваиванием (addition/subtraction assignment) binary справа налево
<<= >>= побитовый левый/правый сдвиг с присваиванием (left/right shift assignment) binary справа налево
&= побитовое И с присваиванием (bitwise AND assignment) binary справа налево
|= побитовое ИЛИ с присваиванием (bitwise inclusive OR assignment) binary справа налево
^= побитовое исключающее ИЛИ с присваиванием (bitwise exclusive OR assignment) binary справа налево
throw генерация исключения unary
, разделитель (comma) unary слева направо
             

Знаки пунктуации используются для логического разделения текста программы. Например,
; -- заканчивает арифметическое выражение или оператор;
, -- используется для разделения в перечислениях переменных, констант, аргументов и т.п.;
{} -- ограничивает группу выражений или операторов;
() -- используется для описания аргументов функций.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: