Материал: Информатика. учебное пособие для иностранных слушателей подготовительного отделения (включая подготовку на уровень магистратуры). Кононов А.Д., Кононов а.А

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

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

Пользуясь средствами форм Бэкуса – Наура и синтаксическими диаграммами, опишем грамматику языков программирования.

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

< буква > : : = A | a | B | b | C | c | D | d | E | e | и т. д.

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

< знак арифметической операции > : : = + | - | * | /

< разделитель > : : = . | , | : | ; | ( | ) | [ | ] | { | } | ‘

< символ отношения > : : = < | > | = | <= | >= | <>

< служебное слово > : := begin | end | if | then | else | for и т.д.

< основной символ > : : = < буква > | < цифра >|< спецсимвол >

< комментарий > : : ={ любая последовательность символов }.

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

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

– присваивания;

– условного и безусловного перехода;

– пустой оператор.

К производным операторам относят:

– составной оператор;

– оператор выбора;

– оператор цикла;

– оператор присоединения.

Все операторы в тексте программы отделяются друг от друга явными или неявными разделителями, например: s1; s2; . . . ; sn.

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

Большая часть операторов ведет обработку величин. Величины могут быть постоянными (constant) и переменными (variable). Значения постоянных величин не меняются в процессе выполнения программы. Величина характеризуется типом, именем и значением. Наиболее распространенные типы величин – числовые (целые и вещественные), символьные, логические. Тип величины определяется ее значением.

Другая важная классификация величин – простые и составные. Простая величина имеет одно значение. Ей соответствует одна ячейка памяти (точнее, «машинное слово») или ее эквивалент во внешней памяти компьютера. Составной величине может соответствовать сразу много значений, объединенных под одним именем. Эти значения представляют собой элементы (компоненты) этой величины. Самый известный пример – массив, у которого элементы различаются по индексам (номерам).

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

Важнейшие характеристики структурированной величины – упорядоченность, однородность, способ доступа к элементам, постоянство числа элементов. Так, массив является упорядоченной однородной структурой с прямым доступом к элементам и постоянным их количеством.

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

< идентификатор > : : = < буква >

< идентификатор > : : = < идентификатор > ( < буква >| < цифра > )

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

Summa, Max, Time, i, j, Radius.

Некоторым идентификаторам заранее предписан определенный смысл и их называют стандартными, например, sin, cos, ln – это имена известных математических функций.

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

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

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

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

Целый – Integer

Вещественный – Real

Логический – Boolean

Символьный – Char

Строковый – String

Массив – Array

Множество – Set

Файл – File

Запись – Record

Объект – Object

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

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

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

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

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

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

Заголовок необходим для ссылок на модуль.

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

Раздел реализации содержит тела процедур и функций, перечисленных в интерфейсной части.

Раздел инициализации содержит операторы, необходимые для инициализации модуля.

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

Контрольные вопросы и упражнения

1. Какие преимущества имеют ЯВУ по сравнению с машинно–ориентированными языками? Какие достоинства есть у машинно–ориентированных языков?

2. Каковы основные составляющие ЯВУ?

3. В чем отличие понятий языков программирования и естественного языка?

4. С какой целью используются и что представляют собой металингвистические формулы Бэкуса – Наура?

5. Что представляет собой синтаксическая диаграмма Вирта?

6. В чем различие между постоянными и переменными величинами?

7. В чем отличие между величинами простыми и структурированными?

8. Для чего служит описание величин в программе? Какие стандартные типы данных используют ЯВУ?

9. Для чего служат операторы?

10. В чем состоит назначение функций? процедур? модулей?

11. Кому больше нужны БНФ и диаграммы Вирта: прикладным программистам или разработчикам компиляторов?

3. Паскаль – язык структурно-ориентированного программирования

Язык Паскаль был создан Н. Виртом в 1971 г. как язык обучения программированию и записи алгоритмов. Паскаль стал первым языком, с которым знакомится большинство будущих программистов в мире. Он оказался настолько удачным, что до сих пор играет особую роль и в практическом программировании, и в его изучении. В нем реализованы принципы структурного программирования и полного описания данных, повышающие устойчивость программного кода, позволяющие найти и устранить большинство ошибок ещё на стадии трансляции программы.

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

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

Любая программа на Паскале является текстовым файлом с собственным именем и расширением .pas. Схематически программа представляется в виде последовательности восьми разделов:

  1. заголовок программы;

  2. описание внешних модулей, процедур и функций;

  3. описание меток;

  4. описание констант;

  5. описание типов переменных;

  6. описание переменных;

  7. описание функций и процедур;

  8. раздел операторов.

Разумеется, не в каждой программе обязательно присутствуют все восемь разделов, в простейших программах, например, могут быть только 5-й и 8-й разделы.

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

Таблица

Список зарезервированных слов языка Паскаль

в версии для персонального компьютера (ПК)

Написание

слова

Значение

слова

Написание

слова

Значение

слова

аbsolute

абсолютный

label

метка

and

логическое И

library

библиотека

array

массив

mod

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

asm

ассемблер

nil

отсутствие

begin

начало блока

not

логическое НЕ

case

вариант

or

логическое ИЛИ

const

константа

of

из

constructor

конструктор

оbject

объект

div

деление нацело

packed

упакованный

do

выполнять

procedure

процедура

downto

уменьшить до

program

программа

destructor

разрушитель

record

запись

else

иначе

repeat

повторять

end

конец блока

set

множество

exports

экспорт

string

строка

external

внешний

then

то (тогда)

file

файл

to

увеличить до

for

для

type

тип

forward

опережающий

unit

модуль

function

функция

until

до

goto

переход на

uses

использовать

implementation

реализация

var

переменная

in

в (входить в …)

while

пока

inline

основной

with

c

interrupt

прерывание

xor

исключающее ИЛИ

Источник: https://studfile.net/preview/16567430/