Лексемы. Знаки пунктуации, специальные символы и знаки операций в языке Си

Алфавит языка программирования С основывается на множестве символов таблицы кодов ASCII. Он включает:

Строчные и прописные буквы латинского алфавита;

Цифры от 0 до 9;

Символ «_» (нижнее подчеркивание);

Набор специальных символов: " { } , | + - % / \ ; " : ? < > = ! & # ~ ^ . *

Прочие символы.

Алфавит С служит для построения слов, которые в Си называются лексемами. Различают пять типов лексем:

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

Ключевые слова;

Знаки (символы) операций;

Литералы (с англ. константа) – запись в исходном коде компьютерной программы, представляющая собой фиксированное значение. 4 типа литералов: целочисленный, вещественный, символьный, строковый. Числовые литералы записываются непосредвенно числом. Строковые литералы представляют собой строку символов, заключенную в кавычки. Символьные литералы включают один символ. ;

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

6. Ключевые слова языка Си.

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

Циклы: for, while, do;

Принятие решения и выбор: if, else, switch, case, default.

Переходы: break, continue, goto;

Тип данных: char, int, short, long, unsigned, signed, float, double, struct, union, typedef, void.

Классы памяти: auto, extern, register, static.

Разное: sizeof, return

Применяемое только в некоторых системах: enum

Квалификатор типа: const, volatile.

7. Знаки пунктуации, специальные символы и знаки операций в языке Си.

Знаки пунктуации и специальные символы:

Запятая

; точка с запятой

: двоеточие

Знак вопроса

" одинарная цитатная скобка

"" двойная цитатная скобка

(левая круглая скобка

) правая круглая скобка

[ левая прямоугольная скобка

] правая прямоугольная скобка

{ левая фигурная скобка

} правая фигурная скобка

< левая угловая скобка

> правая угловая скобка

Восклицательный знак

| вертикальная черта

/ знак деления

\ знак обратного деления

% процент

& амперсанд

^ крышечка, домик

* звездочка

Язык С содержит большое количество встроенных операций. Существует четыре класса операций: арифметические, логические, поразрядные и операции сравнения. Кроме них, есть также некоторые специальные операторы, например, оператор присваивания.

Общая форма оператора присваивания: имя переменной=выражение;

В одном операторе присваивания можно присвоить одно и то же значение многим переменным. Для этого используется оператор множественного присваивания: х=y=z=0;

Составное присваивание – разновидность оператора присваивания, в которой запись сокращается и становится более удобной в написании. Например, оператор x=x+10; можно записать как x+=10;

Арифметические операции.

Вычитание, так же унарный минус

Сложение

* умножение

/ деление

% остаток от деления

Инкремент, или увеличение, прибавляет 1 к значению переменной.

Декремент, или уменьшение

Приоритет выполнения арифметические операторов:

Наивысший: ++, --, - (унарный минус), *, /, %

Наинизший: +, - .

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

Операции сравнения:

> больше

>= больше или равно

< меньше

<= меньше или равно

Не равно

Логические операции

НЕ, отрицание

Операции над указателями:

& - операция получения адреса: выдает адрес переменной, имя которой стоит за обозначением операции.

* - косвенная адресация: выдает значение записанное по адресу, на который ссылается указатель.

Дополнительные операции:

Операция условия?

Оператор? часто можно использовать вместо оператора вида if-then-else.

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

Сначала вычисляется Выражение1, если оно истинно, то вычисляется Выражение2 и его значение присваивается всему выражение; если Выражение1 ложно, то вычисляется Выражение3 и всему выражению присваивается его значение.

y=x>9 ? 100:200; переменной у будет присвоено значение 100.

sizeofвыдает размер (в байтах) операнда, стоящего справа.

(type) операция приведения типа: превращает следующее за ней значение в тим, определенный ключевым словом, заключенным в скобки.

Операция «запятая» - связывает два выражения в одно и гарантирует, что левое выражение будет вычислено первым. Типичным примером использования является включение дополнительной информации в управляющее выражение цикла for.

Операции над структурами и объединениями.

Операция принадлежности используется совместно с именем структуры (или объединения) для задания элемента этой структуры (или объединения). Если name является именем структуры, а member – элементов, указанным в структурном шаблоне, то name.memberопределяет этот элемент структуры.

-> косвенная адресация. Используется совместно с указателем на структуру (или объединения) для идентификации того или иного элемента этих структур (или объединений). Предположим, что ptrstr является указателем на структуру, а member – элементом, указанным в структурном шаблоне. Тогда ptrstr->member определяет, что это элемент структуры, на которую ссылается указатель.

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

Лекция1 Состав языка

Вводятся базовые для всего дальнейшего изложения понятия: из каких простейших "кирпичиков" состоят все тексты на языке программирования, что понимают под типом данных, какие встроенные типы данных есть в языке C++.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

В этот комплекс входят также практикум по C/C++ и учебники по языкам C# и Паскаль [ , построенные по единому принципу. Соответствующие учебные курсы можно найти на этом сайте. В комплекс входит более 250 индивидуальных вариантов заданий на лабораторные работы в расчете на учебную группу из 20 человек (все варианты можно найти в учебнике ) и более 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 компоновщик (синонимы - линкер, редактор связей ) формирует исполняемый модуль программы, подключая к объектному модулю другие объектные модули, в том числе содержащие элементы стандартных библиотек , которые используются в любой программе (например, для выполнения вывода на экран). Если программа состоит из нескольких исходных файлов, они компилируются по отдельности и объединяются на этапе

Наименование параметра Значение
Тема статьи: Лексемы
Рубрика (тематическая категория) Программирование

Алфавит

Стандарт С99 выделяет два набора символов, входящих в алфавит: базовый и расширенный. Базовый набор включает следующие символы:

Прописные и строчные буквы латинского алфавита;

Арабские цифры;

Специальные знаки: “ { } , | () + - / % \ ; ‘ : ? < = > _ ! & # ~ ^ . *

Расширенный набор символов должна быть как пустым, так и содержать, к примеру, символы национальных алфавитов. К примеру, Ms Visual Studio 2008 позволяет использовать некоторые подмножества пространства Юникод, в том числе, кириллицу.

Есть специальные группы из трех символов (трехсимвольные последовательности / trigraph sequences), которые на этапе препроцессорной обработки преобразуются в другие символы, к примеру, ??= соответствует #, ??( соответствует [, ??/ соответствует \ и другие.

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

1. Идентификаторы - набор символов, используемый для идентификации объектов (переменных, функций, классов, типов данных и т.д.) Идентификаторы записываются в соответствии с правилами - это последовательность букв, цифр и символов подчёркивания, начинающаяся не с цифры. Идентификаторы в языках С, С++ чувствительны к регистру букв, в отличие, к примеру, от ЯВУ Pascal.

Особым видом идентификаторов являются ключевые (служебные) слова - они зарезервированы для специального использования и не бывают переопределœены.

Стандарт С99 закрепляет следующие ключевые слова: auto, break, case, char, const, continue, default, do, double, else, enum, extern, float, for, goto, if, inline, int, long, register, restrict, return, short, signed, sizeof, static, struct, switch, typedef, union, unsigned, void, volatile, while, _Bool, _Complex, _Imaginary

2. Константы - это объекты, обращение к которым происходит ʼʼпо значениюʼʼ (терминология Э.Дейкстры, определявшего отличие констант и переменных по способу их использования в программах, - используя имя переменной, мы указываем адрес данного, а используя константу , мы записываем её саму, то есть её значение). В Си поддерживается четыре простых типа констант - символьные, целые, с плавающей точкой и строковые. Тип константы определяет способ ее хранения в памяти и операции, допустимые по отношению к ней. Значение типа задается формой записи константы (её внешним видом).

3. Знаки операций.

4. Разделители. В качестве разделителœей выступают пробел, табуляция и переход на новую строку.

5. Комментарии - наиболее простой элемент. Их назначение - улучшить ʼʼчитаемостьʼʼ текста человеком, они необходимы для сопровождения программ и являются элементом технологии разработки программного обеспечения. В языке поддерживаются два типа комментариев - блочные и строчные.

Блочные комментарии включают любую последовательность символов на одной или нескольких строках, они начинаются и заканчиваются специальной комбинацией символов /* и */ , которые нельзя использовать ни в каком другом контексте.

Строчные комментарии располагаются на одной строке и начинаются двойным слешем

// Комментарий должен уместиться до конца строки

а между этими символами можно писать многострочные комментарии

В случае если некоторый текст программы занимает несколько строк, но должен быть обработан компилятором как одна строка, используют символ ʼʼ\ʼʼ.

printf(“Это \

Лексемы - понятие и виды. Классификация и особенности категории "Лексемы" 2017, 2018.

Читайте также

  • - Лексемы

    Алфавит языка Лекция1 Состав языка Вводятся базовые для всего дальнейшего изложения понятия: из каких простейших "кирпичиков" состоят все тексты на языке программирования, что понимают под типом данных, какие встроенные типы данных есть в языке C++. В...

  • Тема написания своего ЯПа не дает мне покоя уже около полугода. Я не ставил перед собой цель "убить" CoffeeScript , TypeScript , ELM , тысячи их , я просто хотел понять кухню и как они вообще пишутся.


    К моему неприятному удивлению, большинство из этих языков используют Jison (Bison для JavaScript ), а это не совсем попадало под мою задачу - "понять", так как по сути дела Jison делает все за вас, собирает AST по заданным вами правилам (Jison как таковой отличный инструмент, который делает за вас львиную долю работы, но сейчас не о нем).


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


    Стоит заметить, что данное руководство не привязано к JavaScript , он выбран исключительно из соображений скорости разработки и читаемости, так что вы можете написать свой "лисп"/"питон"/"ваш абсолютно новый синтаксис" на любом знакомом вам языке.


    Также до момента написании компилятора (в нашем случае транслятора), процесс написания языка не отличается от процессов создания языков компилируемых в ASM /JVM bitcode /LLVM bitcode /etc , а это значит, что данное руководство не ограничивается созданием языка трансляцируемого в JavaScript .


    Весь код, который будет написан в данной (и последующих статьях), лежит на Github"е. Тегами обозначены начало и концы статей для удобства.

    Немного теории

    Не углубляясь в википедийность, процесс трансляции исходного кода в конечный JS код протекает следующим образом:


    source code -(Lexer)-> tokens -(Parser)-> AST -(Compiler)-> js code

    Что тут происходит:

    1) Lexer

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


    Т.е. на выходе из этого (CoffeeScript ):


    a = true if a console.log("Hello, lexer")

    Мы получаем это (сокращенная запись):


    Так-как CoffeeScript отступо-чувствительный и не имеет явного выделения блока скобками { и } , блоки отделяются отступами (INDENT ом и OUTDENT ом), которые по сути заменяет скобки.



    
    Top