Letysite.ru

IT Новости с интернет пространства
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

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

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

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

Синтаксис языка — совокупность правил, определяющих допустимые конструкции (слова, предложения) языка, его форму.

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

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

· «::=»— читается как «может быть заменено на»,

· «|» — читается как «или».

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

Пример БНФ

Правила построения конструкции , записанные в

БНФ, могут выглядеть следующим образом:

::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

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

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

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

Алфавит языка программирования Borland Pascal 7.0 включает:

1. строчные, прописные буквы латинского алфавита (a..z, A..Z) и знак подчеркивания ( _ ), который также во многих случаях считается буквой (строчные и прописные буквы не различаются);

3. специальные знаки, состоящие из одного и двух символов:

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

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

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

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

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

Структура программы

Программа на Borland Pascal состоит из трех частей: заголовка, раздела описаний и раздела операторов.

  • Заголовок программы не является обязательным, он состоит из служебного слова program и идентификатора — имени программы.
  • Раздел описаний содержит описания всех используемых программой ресурсов (полей данных, подпрограмм и т.д.).
  • Раздел операторов заключается в, так называемые, операторные скобки begin . end и заканчивается точкой. Между операторными скобками записывают управляющие операторы программы, которые разделяют специальным знаком – точкой с запятой «;». Если точка с запятой стоит перед end, то считается, что после точки с запятой стоит «пустой» оператор.
  • В тексте программы возможны комментарии, которые помещают в фигурные скобки.

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

Write (‘Введите два натуральных числа:’);

if a>b then a:=a-b <если a>b, тогда a:=a-b>

Writeln(‘Hauбoльшuй общий делитель равен ’,a);

Программа названа «example». Раздел описаний в данном случае включает только описание переменных (см. параграф 2.3). Раздел операторов содержит операторы ввода исходных данных, вычислений и вывода результатов. Начнем рассмотрение особенностей программирования на языке Borland Pascal с проблемы описания данных.

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

Формализуем основные конструкции языка программирования SML посредством форм Бэкуса-Наура или БНФ (история их создания изложена во вступительной лекции).

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

Определим понятие синтаксиса более строго.

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

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

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

Мы будем рассматривать параллельно БНФ -формализации синтаксиса ламбда-исчисления и языка программирования SML . В последнем случае мы ограничимся базовым набором конструкций языка, подчеркнув такие существенные возможности, как кортежи ( tuples ) и let-выражения .

Читать еще:  Запуск вин 7 в безопасном режиме

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

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

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

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

Рассмотрим синтаксис языка программирования SML в сравнении с синтаксисом ламбда-исчисления .

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

Прежде всего, необходимо договориться об обозначениях.

Рассмотрим традиционные обозначения БНФ и поясним смысл каждого из них.

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

Определяющий символ «::=» отделяет определяемую конструкцию от составляющих ее ранее определенных базовых конструкций.

Определяемая конструкция записывается слева от «::=» в угловых скобках » » .

Альтернативы (возможные варианты) конструкций перечисляются по вертикали.

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

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

Поясним смысл приведенных обозначений.

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

  1. константы ;
  2. переменной ;
  3. двух выражений, заключенных в круглые скобки, т.е. знакомой нам операции аппликации ламбда-выражений;
  4. символа , за которым следует переменная , точка и выражение , т.е. знакомой нам операции абстракции.

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

Для иллюстрации перечисленных выше тезисов рассмотрим важнейшие синтаксические категории языка программирования SML .

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

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

Под термином » зарезервированное » (или, иначе, служебное) слово будем иметь в виду конструкцию языка, однозначно интерпретируемую в качестве инструкции языка программирования (например, «if» , «then» , «let» ). Напомним, что в данной нотации цитирование производится без кавычек или других символов-ограничителей.

Комментарием назовем произвольный поясняющий текст к программе, который, согласно синтаксису языка SML , положено заключать в ограничители вида «(*» и «*)» .

Синтаксис (программирование)

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

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

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

Синтаксис записи функции

Синтаксис записи функции — жёсткое правило, которому должна удовлетворять запись кода функции; форма записи функции. Если синтаксис функции будет неверен, компилятор вернет ошибку и программа не будет собрана, пока ошибка не будет исправлена.

К синтаксическим ошибкам записи функции относятся (неправильная сигнатура):

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

Wikimedia Foundation . 2010 .

Смотреть что такое «Синтаксис (программирование)» в других словарях:

Синтаксис (значения) — Синтаксис: В Викисловаре есть статья «синтаксис» Синтаксис (греч … Википедия

Программирование — Эта статья должна быть полностью переписана. На странице обсуждения могут быть пояснения. У этого термина существуют и другие значения, см. Программи … Википедия

Объектно-ориентированное программирование на Python — Объектно ориентированное программирование на Python программирование на Python с использованием парадигмы ООП: с самого начала Python проектировался как объектно ориентированный язык программирования[1]. Содержание 1 Введение 1.1 … Википедия

Шаблон (программирование) — Шаблоны (англ. template) средство языка C++, предназначенное для кодирования обобщённых алгоритмов, без привязки к некоторым параметрам (например типам данных, размерам буферов, значениям по умолчанию). В C++ возможно создание шаблонов функций и … Википедия

Конструктор (программирование) — У этого термина существуют и другие значения, см. Конструктор. В объектно ориентированном программировании конструктор класса (от англ. constructor, иногда сокращают ctor) специальный блок инструкций, вызываемый при создании объекта.… … Википедия

Читать еще:  Общая задача линейного программирования это

SSI (программирование) — У этого термина существуют и другие значения, см. SSI. SSI (Server Side Includes включения на стороне сервера) несложный язык для динамической «сборки» веб страниц на сервере из отдельных составных частей и выдачи клиенту полученного HTML… … Википедия

Аспектно-ориентированное программирование — Парадигмы программирования Агентно ориентированная Компонентно ориентированная Конкатенативная Декларативная (контрастирует с Императивной) Ограничениями Функциональная Потоком данных Таблично ориентированная (электронные таблицы) Реактивная … Википедия

Присваивание (программирование) — Содержание 1 Определение присваивания 1.1 Алгоритм работы оператора присваивания … Википедия

Присвоение (программирование) — Содержание 1 Определение присваивания 1.1 Алгоритм работы оператора присваивания … Википедия

Цикл (программирование) — У этого термина существуют и другие значения, см. цикл. В данной статье или разделе имеется список источников или внешних … Википедия

Языки программирования

Языки программирования — это языки, на которых программист общается с компьютером (или другим программируемым объектом, а может быть даже и субъектом).

Не люблю писать скучным языком терминов и определений. Однако время от времени это приходится делать. Хотя бы на начальном уровне.

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

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

Язык программирования предназначен для написания компьютерных программ, которые представляют собой набор правил, позволяющих компьютеру выполнить тот или иной вычислительный процесс, организовать управление различными объектами, и т.п. Язык программирования отличается от естественных языков тем, что предназначен для управления ЭВМ, в то время как естественные языки используются, прежде всего, для общения людей между собой. Большинство языков программирования использует специальные конструкции для определения и манипулирования структурами данных и управления процессом вычислений.

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

Поэтому статей будет много. А эта — только самые общие сведения о языках программирования.

Для начала, чтобы досконально разобраться с приведённым выше определением, разъясним некоторые фразы, которые могут быть не всем понятны. Итак…

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

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

Человек, который создаёт язык программирования, придумывает этот набор слов, то есть придумывает свой язык — каждому элементу языка назначает какой-то смысл. Так и появляется новый язык.

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

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

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

А теперь по-простому:

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

На этом с терминологией закончим. И перейдём к основным темам, которые будут рассматриваться в этом разделе.

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

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

Уровни языков программирования. Наверно, вы уже знаете, что языки программирования подразделяются на языки высокого уровня и языки низкого уровня. некоторые даже считают, что есть языки среднего уровня.

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

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

Общие сведения о языках программирования. А здесь будет всё то, что не вошло в предыдущие разделы.

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

Алгоритмы

Определение. Алгоритм — описание последовательности действий для решения поставленной задачи. Близкие по смыслу слова: рецепт, метод, способ, процедура.

Свойства алгоритма

  1. Дискретность (алгоритм состоит из отдельных действий, следующих одно за другим).
  2. Элементарность действий (шаги не могут подразделяться на более мелкие шаги).
  3. Определенность действий (каждый шаг имеет ясную и однозначную трактовку).
  4. Конечность (завершимость).
  5. Результативность (после завершения алгоритма известно, что считать результатом).
  6. Массовость (алгоритм применим для множества наборов исходных данных).

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

Читать еще:  Событийная модель программирования

Пример. Найти max из чисел x, y, z.

Алгоритм 1. (Словесное описание)

Если x>=y и x>=z, то положить max:=x и завершить алгоритм
Если y>=x и y>=z, то положить max:=y и завершить алгоритм
Если z>=x и z>=y, то положить max:=z и завершить алгоритм

Алгоритм 2. (Описание на псевдокоде)

max:=x
Если y>max то max:=y
Если z>max тоmax:=z

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

Способы описания алгоритмов

3. C помощью блок-схем.

Пример. (алгоритм 2, представленный блок-схемой)

Альтернативная современная нотация — диаграмма деятельности (Activity Diagram) в языке UML (Universal Modelling Language).

4. C помощью языка программирования.

Язык программирования

Язык программирования (ЯП) характеризуется используемым алфавитом, синтаксисом и семантикой. Элементарные действия в языке программирования называют инструкциями, операторами или командами.

Синтаксис ЯП определяет правила записи основных конструкций ЯП и устанавливает, какие фрагменты текста программы следует считать неделимыми (например, :=, = =
ограничители: ; , (
зарезервированные слова: begin end var

2) Идентификаторы (используются в качестве имен объектов программы).

Определение. Идентификатор — последовательность латинских букв или цифр, начинающаяся с буквы. К буквам также относят символ _ (подчеркивания).

_a1 — идентификатор
3dnews — не идентификатор

3) Константные значения

Раздел описаний

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

Раздел описания переменных

var i,j: integer;
s: string;
b: boolean;
r1,r2: real;
c: char;

Раздел описания типов

type int = integer;
IArr = array [1..100] of real;

Оператор присваивания

Оператор присваивания имеет вид:

имя переменной := выражение

Пример 1. Вычислить x 16 .

Пример 2. Вычислить x 15 =(x 5 ) 3 .

Присваивание переменной некоторого начального значения называется инициализацией этой переменной.

Если переменной можно присвоить выражение, то говорят, что они совместимы по присваиванию. Переменная и выражение совместимы по присваиванию:

  • если они имеют один тип;
  • если переменная и выражение имеют целый тип (например, выражение имеет тип byte, а переменная — тип integer или наоборот);
  • если выражение имеет целый, а переменная — вещественный тип;
  • если выражение имеет символьный, а переменная — строковый тип.

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

var i: integer;
.
i:=2.0; // неверно!

Для преобразования вещественного в целое следует использовать функции round и trunc.

Операторы ввода/вывода

Оператор вызова процедуры ввода имеет одну из следующих форм:

read(список переменных);
readln(список переменных);
readln;

Оператор вызова процедуры вывода имеет одну из следующих форм:

write(список выражений);
writeln(список выражений);
writeln;

Для перехода на новую строку в процессе вывода можно использовать следующий прием:

const newline = #10;
.
writeln(x, newline, y);

Форматы вывода

Для любых типов:

write(x:а); // а — ширина поля вывода

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

Для вещественного типа:

write(x:а:b); // a — ширина поля вывода, b — количество цифр в дробной части

Вещественные числа в этом формате выводятся в виде с фиксированной точкой.

Неправильный формат вывода игнорируется. Например, если x=14.457, то после

будет выведено 14.46.

Выражения и операции

Выражения

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

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

Логическое выражение всегда имеет тип boolean.

Тип арифметического выражения определяется типом операнда «старшего» типа: если в выражении есть хотя бы один операнд типа real, то выражение имеет тип real, если нет операндов типа real, но есть операнды типа integer, то выражение имеет тип integer. Исключение составляет операция деления: результатом деления целого на целое является вещественное.

Не все типы совместимы в выражении: к примеру, нельзя сложить целое и строку, нельзя из строки вычесть символ.

При вычислениях выражений со смешанными типами также происходит неявное преобразование типов. Например, если i имеет тип integer, а bt — тип byte, то при вычислении выражения i+bt происходит вначале преобразование значения bt к «старшему» типу integer и только после этого выполняется операция сложения.

Операции

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

Таблица приоритетов операций языка Pascal

  1. +&nbsp- (унарные)
  2. * / div mod shl shr and
  3. + -(бинарные)or xor
  4. = = <>in

2-1+3=(2-1)+3
4/2*2=(4/2)*2
4/2/2=(4/2)/2
1*2+3*4 — операции умножения вычисляются в непредсказуемом порядке.

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

Простые: x>0 или 2*2=4

Составные: состоят из простых + логические операции (and, or, not, xor)

(x>=3) and (x 5) = not ((x>=3) or (x B) and (A C) and (A x1) and (x y1) and (y x2) or (y y2);
OnTheBoundary:=not Inside and not Outside;

Ссылка на основную публикацию
Adblock
detector