Скачиваний:
308
Добавлен:
01.05.2014
Размер:
3.67 Mб
Скачать
    1. Строгости Паскаля

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

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

Самая маленькая программа на Паскале имеет такой вид:

BEGIN END.

Она, естественно, ничего не делает. Если мы хотим заставить программу что-то делать, то все операторы, приказывающие выполнять нужные нам действия, мы должны записать между BEGINиEND. Например:

BEGIN WriteLn(1993); WriteLn(1994) END.

Обычно программа содержит переменные, константы, обращения к подпрограммам и прочие элементы. Все они должны быть описаны выше BEGIN. Например:

CONSTk = 10;

VARa : Real;

BEGIN

a:=5;

WriteLn(a+k)

END.

Таким образом, программа на Паскале состоит из двух и только двух разделов:

  1. выше BEGIN расположен раздел описаний,

  2. ниже BEGIN расположен раздел выполняемых операторов.

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

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

  • Переменные описываются после служебного слова VAR

  • Метки описываются после служебного слова LABEL

  • Константы описываются после служебного слова CONST

  • Процедуры описываются после служебного слова PROCEDURE

  • Функции описываются после служебного слова FUNCTION

  • Новые типы, определяемые программистом,

описываются после служебного слова TYPE

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

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

Пример программы:

PROGRAM Divan;

USESCrt,Graph;

Label met1,met2;

Const k = 100;

S = 'Хорошо!';

TYPE Kniga = array [1..k] of String;

Tablitsa = array [0..20,1..10] of Integer;

Minuta = 0..60;

VAR x,y : Real;

Uspevaemost : Tablitsa;

PROCEDURETorpeda......

FUNCTIONInvers......

begin

.......

end.

      1. Структура процедур и функций

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

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

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

Приведу пример записи программы с вложенными подпрограммами:

PROGRAM Hard;

Uses...

Label...

Const...

Type...

Var...

Procedurea1;

Const ...

Var ...

Procedure a11;

Label ...

Type ...

Var ...

begin

...

end;

Function f11

Var ...

begin

...

end;

begin

...

end;

Functionf2;

Procedure a21;

begin

...

end;

begin

...

end;

begin

...

end.

Здесь в программу Hardвходят процедураa1и функцияf2. В процедуруa1вложены процедураa11и функцияf11. В функциюf2вложена процедураa21.

Из f2виднаa1, но не видныa11иf11. Точно так же изa21видныa1иf2, но не видныa11иf11. Это значит, что в теле процедурыa21может содержаться вызовa1иf2, но не может содержаться вызовa11иf11.