В.Г. Абрамов, Н.П. Трифонов, Г.Н. Трифонова - Введение в язык Паскаль (1107618), страница 5
Текст из файла (страница 5)
Операторы этой группы будем называть производными операторами. К этой группе относятся следующие типы операторов: составной оператор, выбирающий оператор, оператор цикла, оператор присоединения.В записи алгоритма могут использоваться последовательности из этихоператоров, без ограничений на их количество.
Все операторы в такойпоследовательности отделяются друг ог друга разделителем " : " (точкас запятой) — тем самым производится четкое разбиение всей записи на отдельные операторы. Таким образом, если обозначить через S любой допустимый оператор, то в общем случае такая последовательность будетиметь видS; S; . . . ; SОператоры этой последовательности обычно выполняются в порядке ихследования в тексте программы, при его просмотре слева направо по строке и сверху вниз по строкам.
Таким образом, преемником каждого операгора обычно является следующий по порядку в тексте программы оператор.Этот естественный порядок выполнения операторов может быть нарушенс помощью операторов перехода, которые сами определяют своих преемников. Что касается производных операторов, то размещение входящих в ихсостав других операторов (которые могут быть как основными, так ипроизводными) и порядок их выполнения определяются другими правилами, которые будут излагаться при рассмотрении соответствующихоператоров.1.4.2. Имена и идентификаторыВесьма важным и употребительным понятием языка является идентификатор - этот термин происходит or слова "идентифицировать", т.е.
"отождествлять". Поскольку алгоритм, определяющий процесс обработки дан2. В.Г. Абрамов17ных, оперирует с различными программными объектами — переменными величинами, функциями и т.д., то при записи алгоритма приходится как-тоссылаться на используемые объекты. Для этой цели программным объектам даются индивидуальные имена и описание тех или иных действий надобъектами дается в терминах их имен, которые и представляют соответствующие объекты. Именами обозначаются и некоторые атрибуты используемых объектов, например тип значений, которые могут приниматьпрограммные объекты. Роль таких имен и выполняют идентификаторы.Идентификатором является любая конечная последовательность букв ицифр, начинающаяся обязательно буквой. Более строго это понятие можноопределить с помощью рекурсивной метаформулы(идентификатор) ::= < буква ) | < идентификатор )< буква ) |< идентификатор ) < цифра )Если ввести в употребление промежуточное понятие < буква или цифра):< буква или цифра ) ::= < б у к в а ) | < цифра >то идентификатор можно определить метаформулой< идентификатор ) ::= < буква ){< буква или цифра >}С помощью синтаксической диаграммы идентификатор можно определить следующим образом:^идентификатор>::=буква>Примеры идентификаторов:х СУММА pi step 1Petrov a28cd5(поскольку пробелы внутри идентификаторов не допускаются, то наличиепробела означает конец идентификатора).Следующие записи не являются идентификаторами, поскольку каждаяиз них не подходит под синтаксическое определение идентификатора:5f sum(2) step.7Алма-АтаЗаметим, что записьbeginвообще говоря подходит под синтаксическое определение идентификатора — это последовательность из пяти букв, начинающаяся буквой.Однако вспомним, что begin является служебным словом.
А посколькуслужебные слова в паскале запрещается использоватьдля иных целей,то указанная запись не может быть использована в качестве идентификатора.Идентификаторы не имеют какого-либо постоянно присущего им смысла,а используются только в качестве имен программных объектов или их18атрибутов, так что в дальнейшем вместо слова "идентификатор" мы частобудем использовать более короткий термин "имя":< имя > ::= (идентификатор)Имена (идентификаторы) выбираются программистом по своему усмотрению. Чтобы сделать программу решения той или иной задачи более наглядной и понятной, следует избегать кратких, но мало выразительныхимен типа х, t, s и т.д., а выбирать их так, чтобы имя отражало суть обозначаемого объекта (конечно, в рамках алфавита конкретной реализацииязыка), напримерsummatimeИНТЕГРАЛпуть ИВАНОВи т.
п.При этом следует иметь в виду, что разные объекты, вообще говоря,нельзя обозначать одним и тем же идентификатором (т.е. каждый идентификатор в одной программе может быть использован только в одномсмысле) — о некоторых исключениях из этого общего правила будет сказано в свое время.Синтаксическое определение не накладывает ограничений на длину идентификаторов (в конкретных реализациях языка такие ограничения могутиметь место). Мы будем исходить из того, что идентификаторы различаются по первым восьми литерам, так что, например, идентификаторыдлинастеныдлинастержнябудут считаться транслятором одинаковыми. Чтобы иметь возможностьиспользовать выразительные имена при наличии указанного ограничения,удобно выносить различающиеся зоны идентификаторов в их начало:стеныдлинастержнядлинаа чтобы иметь более наглядные имена, целесообразно использовать строчные и прописные буквы:СтеныДлинаСтержняДпина(при условии, что используемая реализация языка допускает использованиеи строчных, и прописных букв) .Некоторым идентификаторам в паскале заранее предписан вполне определенный смысл.
Например, идентификатор sin считается именем известнойвсем функции, значение которой равно синусу ее аргумента. Такие идентификаторы называются стандартными. Однако в отличие от служебных словтипа begin , смысл и назначение любого стандартного идентификатора может быть переопределен программистом по своему усмотрению с помощьюсоответствующего описания, хотя делать это без особой на то необходимости не рекомендуется для избежания ошибок в программе.1.4.3.
ОписанияВажным понятием языка является описание (впрочем, суть этого понятияточнее отражал бы термин объявление). Необходимость этого понятия свя2*19зана со следующими обстоятельствами. Операторы, о которых говорилосьвыше, задают правила обработки данных, т.е. определяют действия надпрограммными объектами. Но прежде, чем задавать такие действия, пограммист должен как-то ввести в употребление нужные ему программныеобъекты и точно определить необходимые атрибуты (свойства) каждого изних.
Если, например, таким объектом является массив, то надо указать егоразмерность, размеры по каждому измерению, а также указать, что представляют собой элементы этого массива.Кроме того, как говорилось в предыдущем разделе, правила обработкиданных формулируются в терминах имен соответствующих объектов.Чтобы однозначно понять и реализовать эти правила, необходимо знать,какой объект назван тем или иным именем. Для введения в употреблениенужных программных объектов, описания их атрибутов, присваиванияиаден объектам, а также для некоторых других целей и служат описания.В'паскале имеется 5 типов описаний, каждый из которых предназначендля определенных целей:— описание меток;— описание констант;— описание типов;— описание переменных;— описание продедур и функций.В общих чертах назначение каждого типа описания ясно из его названия,а впоследствии все типы описаний будут рассмотрены более подробно.1.4.4.
ПеременныеПри синтаксических определениях ряда понятий языка, в том числе операторов и описаний, часто используется понятие переменная. Переменная —это программный объект, способный принимать значение. Это значениепеременная получает уже в процессе выполнения программы, обычно в результате выполнения оператора присваивания. Присвоенное ей значениепеременная сохраняет до тех пор, пока этой переменной не будетприсвоено новое текущее значение — при этом предыдущее ее значение(если оно было определено) безвозвратно теряется. С каждой переменнойсвязывается определенный тип значений, которые она может принимать.Попытка присвоить переменной значение иного типа квалифицируется какошибка в программе.С точки зрения синтаксиса, переменная (в простейшем случае)этоидентификатор, который сопоставлен переменной в качестве ее имени.Это имя используется для ссылки на значение переменной.
Другими словами, имя в тексте программы представляет значение этой переменной.Более сложные случаи будут рассмотрены при изложении различныхтипов значений в паскале.Что касается семантики понятия (переменная), то можно считать, чтов вычислительной системе имеется несколько типов "запоминающихящиков", каждый из которых способен хранить значения определенноготипа. К началу выполнения программы каждой из используемых в ней переменных выделяется ящик соответствующего типа и этому ящику даетсяимя, совпадающее с именем самой переменной.С алгоритмической точки зрения весьма важным является такое действие, как присваивание переменной некоторого значения. Удобно считать,20что выполнение этого действия означает помещение присваиваемого переменной значения в выделенный для нее ящик. При этом каждый запоминающий ящик обладает следующими свойствами.1.