Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Часть1_лексические основы языка.doc
Скачиваний:
5
Добавлен:
16.09.2019
Размер:
397.31 Кб
Скачать

Тема 1.1.Лексические основы языка программирования Общие сведения о программах, лексемах и алфавите

В тексте на любом естественном языке можно выделить четыре основные структурные компоненты: символы, слова, словосочетания и предложения. Подобные элементы содержит и любой алгоритмический язык: символы, лексемы, выражения и операторы. Лексемы образуются из символов, выражения из лексем, а операторы из выражений и лексем. Объединенная единым алгоритмом совокупность операторов образует программу на алгоритмическом языке.

Алфавит языка (или его символы) – это основные неделимые знаки, с помощью которых пишутся все тексты на языке.

В алфавит языка С++ входят

  • арабские цифры

  • латинские буквы и знак подчеркивания

  • специальные знаки: “ ‘ {} . , & ? () [] < > и т.д.

  • пробельные символы (пробел, табуляция, символ перехода на новую строку)

Лексемы (или элементарные конструкции) – минимальная конструкция языка, имеющая самостоятельный смысл.

Из символов алфавита формируются следующие лексемы языка:

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

  • ключевые слова (служебные, зарезервированные);

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

  • константы;

  • разделители (скобки, точка, запятая, пробельные символы).

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

Комментарий – это текст программы, который не анализируется компилятором и служит для пояснений текста. В С++ комментарии могут быть заданы двумя способами. Для однострочных комментариев используют символы //, как в нашем примере. Для многострочных комментариев можно использовать символы /* , */, между которыми и должен находится сам текст комментария. В тексте комментария могут содержаться любые символы, а вся последовательность символов эквивалентна символу пропуска (например, символу пробела). Комментарии одного типа не могут быть вложенными, однако можно использовать символы // для того, чтобы закомментировать символы /*… */, а символами /*…*/можно закомментировать //.

Рассмотрим каждый из видов лексем подробно.

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

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

Пример ключевых слов в языке С++:

int – ключевое слово для описания переменных целого типа

if – ключевое слово для построения условной конструкции

Знаки операций - это один или более символов, определяющих действия над операндами. Знаки операций обеспечивают формирование и последующие вычисление выражений. Выражение задает правило для получения значения. Один и тот же знак операции может употребляться в различных выражениях и по-разному интерпретироваться в зависимости от контекста. (Например, унарный и бинарный минус). Для каждой операции задан тип операндов, над которыми может выполняться данная операция. Операндами могут быть выражения и их частные случаи – константы и переменные. Операции делятся на унарные, бинарные и тернарую по количеству операндов (1,2,3 соотвественно).

Примеры унарных операций

-7 унарный минус

a++ или ++a – операция инкремента (увеличения на единицу)

a-- или --a – операция декремента (уменьшения на единицу)

Все бинарные операции делятся на следующие основные группы:

  • аддитивные (+,-);

  • мультипликативные(*, /, %);

  • поразрядные (&,|, ^);

  • операции отношений (<, >, <=, >=, ==, !=);

  • логические (&&, ||);

  • присваивания (=, *=, );

  • и др.

Рассмотрим тернарную условную операцию.

выражение1? выражение2: выражение3;

Если истинно выржение1, то выполняется выражение2, иначе выполняется выражение3

Например, a>0?b=1:b=-1

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

Например, операция<< - сдвиг влево 4 (1002)<<1 = 8 (10002)

cout<< “hello, world”; операция вставки в выходной поток cout.

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

a==++b*c+d (++ * + ==)

a*=4<<1<<2; (4<<1)<<2;

-!a (-(!a))

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

Задание для самостоятельной работы. Изучить операции языка С++ и их приоритеты.

Константа – это лексема, представляющая изображение фиксированного числового (целого или вещественного), строкового или символьного значения.

Например,

целые 10, 012(8), 0хА(16)

вещественная 78.8, 5., .09, 0.2E-3

символьная – один или два символа, заключенные в кавычки ‘a’, ‘ab’, ‘\n’, ‘\n\t’;

строковая - последовательность символов, заключенная в кавычки “Hello, World”.

Последовательность символов, начинающаяся с обратной косой черты называется escape-последовательностями (управляющими) и используются для представления

  • кодов, не имеющих графического изображения;

  • символов “ ‘ \ ?

  • любого символа, с помощью его шестнадцатеричного (\x) и восьмеричного кода (\) (от 0 до 255). Например, cout<<”\х61 \141”; //выведется два символа a.

Оператор задает законченное описание некоторого действия. (Существует путаница понятий, например, у Страуструпа оператор и операция – синонимы, а для таких элементов языка, как if, for используются выражение statement – утверждение, предложение, инструкция). Каждый оператор в С++ заканчивается точкой с запятой.

Для описания сложного действия требуется последовательность операторов. Операторы могут быть объединены в составной оператор или блок с помощью инструктивных скобок (например, в С++ инструктивными являются скобки {}). В этом случае они рассматриваются как один оператор.

Операторы бывают исполняемые и не исполняемые. Исполняемые операторы задают действия над данными. Неисполняемые операторы служат для описания данных, поэтому их называют операторами описания или просто описаниями.

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