Что такое синтаксис языка программирования. Язык программирования. Лексика, синтаксис, семантика я.п. Строчные и прописные латинские буквы

Алфавитом языка называется совокупность символов, используемых в языке. Язык C различают, в отличие от многих других языков прграммирования, прописные и строчные буквы.

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

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

12) Алфавит языка С++. Служебные слова языка С++.

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

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

3. Спецзнаки (-, /, ., , (), +, -) и др.;

4. В комментариях, строках и символьных константах могут использоваться русские буквы.

Комментарий формируется как последовательность знаков ограниченных слева символами /*, а справа */. Комментарий может отделяться слева символом // (в этом случае комментарий может быть записан только в одну строку).

/* Курсивом я пишу комментарий к программе в Си он может быть написан в несколько строк */

// или в одну строку, после двух черточек. Курсив взят условно, для лучшей усвояемости.

// Курсив взят условно, для лучшей усвояемости.

Идентификатор – это последовательность букв, цифр и символов подчеркивания, которые начинаются с буквы или символа подчеркивания.

Прописные и строчные буквы различаются идентификаторами, обозначающими служебные слова, константы, строковые константы, знаки операций, знаки пунктуации.



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

Примеры служебных слов:

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

  • прописные и строчные латинские буквы и знак подчеркивания;
  • арабские цифры от 0 до 9;
  • специальные знаки:? { } , ¦ () + - / % * . \ ‘ : ? < = > ! & # ~ - ; ^
  • пробельные символы: пробел, символы табуляции, символы перехода на новую строку.

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

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

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

13) Правила создания идентификаторов. Структура программы на языке С++.

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

  1. Первым символом идентификатора C++ может быть только буква.
  2. Следующими символами идентификатора могут быть буквы, буквы-цифры и буквы-подчерки.
  3. Длина идентификатора неограниченна (фактически же длина зависит от реализации системы программирования).

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

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

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

Константы, переменные, их типы.

Константами называют неизменяемые величины. Различаются целые, вещественные, символьные и строковые константы. Компилятор, выделив константу в качестве лексемы, относит ее к одному из типов по ее внешнему виду (формат константы можно указать самостоятельно).

Целые константы.

Согласно правилам языка Си, число без десятичной точки и без показателя степени рассматривается как целое. Поэтому компилятор по записи константы определяет, целая она или вещественная. Если нужно ввести константу типа long, то нужно указать признак L или l в конце числа. Если при записи константы целое начинается с цифры 0, то эта константа интерпретируется как восьмеричное число, если же целое начинается с символа 0x или 0X - как шестнадцатеричное число.

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

Типы данных

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

Тип данных присваивается переменной при ее объявлении или инициализации. Ниже приведены основные типы данных языка C++, которые нам понадобятся.

Основные типы данных в C++

  • int - целочисленный тип данных.
  • float - тип данных с плавающей запятой.
  • double - тип данных с плавающей запятой двойной точности.
  • char - символьный тип данных.
  • bool - логический тип данных.

Объявление переменной

Объявление переменной в C++ происходит таким образом: сначала указывается тип данных для этой переменной а затем название этой переменной.

15) Операции, операнды, выражения в языке С++.

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

Если в качестве операнда используется константа, то ему соответствует значение и тип представляющей его константы. Целая константа может быть типа int, long, unsigned int, unsigned long, в зависимости от ее значения и от формы записи. Символьная константа имеет тип int. Константа с плавающей точкой всегда имеет тип double.

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

Операция - это действие, производимое над операндами.

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

Над объектами в языке Си могут выполняться различные операции:

  • операции присваивания;
  • операции отношения;
  • арифметические;
  • логические;
  • cдвиговые операции.

Результатом выполнения операции является число.

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

Операция присваивания обозначается символом = и выполняется в 2 этапа:

  • вычисляется выражение в правой части;
  • результат присваивается операнду, стоящему в левой части:

объект = выражение;

Пример:

int a = 4; // переменной a присваивается значение 4
int b;
b = a + 2; // переменной b присваивается значение 6,

// вычисленное в правой части

Операции отношения

Основные операции отношения:

  • == эквивалентно - проверка на равенство;
  • != не равно - проверка на неравенство;
  • < меньше;
  • > больше;
  • <= меньше или равно;
  • >= больше или равно.

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

Основные бинарные операции, расположенные в порядке уменьшения приоритета:

  • умножение * ;
  • деление / ;
  • сложение + ;
  • вычитание - ;
  • остаток от целочисленного деления % .

Основные унарные операции:

  • инкрементирование (увеличение на 1) ++ ;
  • декрементирование (уменьшение на 1) -- ;
  • изменение знака - .

Основные условные логические операции:

  • && - И (бинарная) - требуется одновременное выполнение всех операций отношения;
  • || - ИЛИ (бинарная) - требуется выполнение хотя бы одной операции отношения;
  • ! - НЕ (унарная) - требуется невыполнение операции отношения.

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

Алфавит. Синтаксис и семантика:

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

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

Символ подчеркивания: «_» Пробел: « » Арабские цифры от 0 до 9:

Перечень знаков операций:

Последовательность ограничителей:

Спецификаторы:

Служебные слова:

Элементарные конструкции языка Паскаль: имена, числа, строки . Именами (или идентификаторами) называются элементы языка - метки, константы, переменные, типы, процедуры, модули, функции, объекты. Имя (идентификатор) в среде Турбо Паскаль включает в себя цифры, буквы латинского алфавита, символ подчеркивания. Отсутствует различие между прописными и строчными буквами (PROGRAM, Program и program - означает одно и то же).

На первом месте в идентификаторе не может стоять цифра (т.е. 1program - не правильно, program3 иprogram2file - такие идентификаторы допускаются). Символ «_» может находиться в любой позиции (т.е. _program,program_, program_file - допустимые идентификаторы). Идентификатор может иметь неопределенную длину, однако только первые 63 символа в нем значимые. Служебные (зарезервированные) слова не могут выступать в качестве имен.

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

В исходном коде программы комментарии заключают или в фигурные скобки»{ … }», или в скобки вида «(* … *)». Комментарии могут занимать неопределенное число строк. В языке Паскаль числа чаще представляются в десятичной системе счисления (целые и действительные). Положительный знак числа не учитывается, поэтому может быть опущен. Целые числа представляются в форме без десятичной точки:

395 -67 7808 +126

А действительные представляются в форме с десятичной точкой:

597.2 1.79 -5.526 8.0004

При случае допускается возможность записи числа с использованием десятичного порядка (обозначается E):

3E09 = 3*10^9 -5.34E6 = -5.34*10^6 29.3E-29 = 29.3*10^(-29)

Способы задания языков

Понятие языка. Формальное определение языка

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

Алфавит -это счетное множество допустимых символов языка. Это множество символовобозначают V. Согласно формальному определению, алфавит не обязательно должен быть конечным (перечислимым) множеством, но реально все существующие языки строятся на основе конечных алфавитов.

Цепочка символов a является цепочкой над алфавитомV: a(V ),если в нее входят только символы, принадлежащие множеству символов V. Для любого алфавита V пустая цепочка l может как являться, так и не являться цепочкой l (V ). Это условие оговаривается дополнительно.

Если V – некоторый алфавит, то:

V⁺ –множество всех цепочек над алфавитом V без l;

V* - множество всех цепочек над алфавитом V , включая l.

Справедливо равенство:V* =V + È{λ}

Языком L над алфавитом V: L(V) называется некоторое счетное подмножество цепочек конечной длины из множества всех цепочек над алфавитом V . Из этого определения следует два вывода: во-первых, множество цепочек языка не обязано быть конечным; во-вторых, хотя каждая цепочка символов, входящая в язык, обязана иметь конечную длину, эта длина может быть сколь угодно большой и формально ничем не ограничена.

Все существующие языки попадают под это определение. Большинство реальных естественных и искусственных языков содержат бесконечное множество цепочек. Также в большинстве языков длина цепочки ничем не ограничена. Цепочку символов, принадлежащую заданному языку, называют предложением языка, а множество цепочек символов некоторого языка L(V)-множеством предложений этого языка.

Два языка L(V) и L"(V) совпадают (эквивалентны): L’(V)=L(V), если L’(V)⊆L(V) и L(V)⊆L’(V).

Множества допустимых цепочек символов для эквивалентных языков должны быть равны.

Два языка L(V) и L’(V) почти эквивалентны, если L’(V)È{l}= L(V)È{l}. Множества допустимых цепочек символов почти эквивалентных языков могут различаться только на пустую цепочку символов.

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



Язык задать можно тремя способами:

1. Перечислением всех допустимых цепочек языка.

2. Указанием способа порождения цепочек языка (заданием грамматики языка)

3. Определением метода распознавания цепочек языка.

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

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

Третий способ предусматривает построение некоторого логического устройства (распознавателя) – автомата, который на входе получает цепочку символов, а на выходе выдает ответ: принадлежит или нет эта цепочка заданному языку .

Говоря о любом языке, можно выделить синтаксис и семантику. Кроме того, трансляторы имеют дело также с лексическими конструкциями (лексемами), которые задаются лексикой языка.

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

Семантика языка – это раздел языка, определяющий значения предложений языка. Семантика определяет «содержание языка» - задает значения для всех допустимых цепочек языка. Семантика для большинства языков определяется неформальными методами.

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

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

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

    Множество информации или «смыслов», характеризующее план содержания данного языка;

    Множество « текстов », т.е. последовательностей физических сигналов, которые характеризуют план выражения данного языка;

    Отображение, определенное на множестве текстов и ставящее в соответствие каждому элементу этого множества некоторые элементы множества смыслов, а также обратное отображение.

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

Элементами множества текстов являются тексты или предложения языка, подчиняющиеся строгим правилам построения.

Правила, описывающие входящие в язык тексты как цепочки некоторых символов, называются синтаксисом , а правила, определяющие смысловую сторону входящих в язык цепочек, т.е. приписывающие им определенные смысловые значения, – семантикой данного языка.

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

Т А – множество текстов языка А ,

Т В – множество текстов языка В ,

S – множество смыслов языков А и В (для простоты считаем, что смысловые множества языков совпадают),

f А – функция, отображающая Т А в S ,

f B – функция, отображающая S в Т В .

    Семантический (смысловой) перевод:

f А : Т А S f B : S Т В

Пусть имеется некоторый текст t Т А , тогда:

    f А (t ) = s S

    f B (s ) t’ Т В .

Итак, переводом текста t Т А является текст t Т В .

    Формальный перевод.

Этот способ заключается в явном задании алгоритма вычисления функции, являющейся суперпозицией функций f А и f B . Обозначим эту суперпозицию через I AB .

I AB = f B (f А (t )).

3.2. Нормальные формы Бекуса

Определение : Язык, описывающий свойства другого языка, называют метаязыком .

Так, метаязыком, описывающим русский язык, может быть тот же самый русский язык или другой разговорный язык, например английский. Описание языков программирования обычными средствами оправдано только в том случае, если оно используется лишь для изучения этих языков программистами-пользователями. В настоящее время используется ряд языков для описания синтаксиса алгоритмических языков для дальнейшей обработки и изучения математическими средствами. Это так называемые метасинтаксические языки . Разрабатываются также специальные языки для описания семантики – метасемантические языки .

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

Классы объектов, которые используются в формах Бекуса:

    Цепочка основных символов языка.

    Имена конструкций описываемого языка, или так называемые металингвистические переменные . Значение металингвистических переменных – это цепочки основных символов описываемого языка.

    Металингвистическая связка :: = . Она соединяет левую и правую части формулы.

Каждый вариант представляет собой цепочку, состоящую из металингвистических переменных и основных символов. Для того, чтобы построить определяемую формулой конструкцию, нужно выбрать некоторый вариант построения из правой части формулы и, используя соответствующие формулы, подставить вместо каждой металингвистической переменной некоторые цепочки основных символов. Варианты правой части формулы разделяются металингвистической связкой |, имеющей значение «или». Металингвистическая переменная обозначается словами, заключенными в угловые скобки < >, которые поясняют смысл описываемой конструкции.

Числа определяются в языке при помощи следующих правил:

    <число>:: = <число без знака> | + <число без знака>| – <число без знака>

    <число без знака> :: = <десятичное число> | <порядок> | <десятичное число> <порядок>

    <десятичное число> :: = <целое без знака> | <правильная дробь> | <целое без знака> <правильная дробь>

    <порядок> :: = e <целое>

    <правильная дробь> ::= .<целое без знака>

    <целое> ::= <целое без знака> | + <целое без знака> | – <целое без знака>

    <целое без знака> :: = <цифра> | <целое без знака> <цифра>

    <цифра> :: = 0|1|2|3|4|5|6|7|8|9

Пример 7: Вывод по формулам числа 1.5 e -2

<число>, <число без знака>, <десятичное число> <порядок>, <целое без знака> <правильная дробь> <порядок>, <цифра> <правильная дробь> <порядок>, 1 <правильная дробь> <порядок >, 1. <целое без знака> <порядок>, 1. <цифра> <порядок>, 1. 5 <порядок>, 1. 5e<целое>, 1. 5 e- <целое без знака>, 1. 5e- <цифра> , 1. 5 e-2 .

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

  • Сергей Савенков

    какой то “куцый” обзор… как будто спешили куда то