Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Разработка программ

.pdf
Скачиваний:
14
Добавлен:
02.05.2015
Размер:
440.75 Кб
Скачать

индекс

 

 

=

 

выражение .

 

 

 

выборка-поля

 

 

=

[ переменная записи ” . ” ] имя-поля .

 

переменная-записи

 

 

=

 

переменная .

 

 

 

имя-поля

 

 

=

 

идентификатор .

 

 

 

обращение-к-функции

 

=

 

имя-функции [ список-фактических-

 

 

 

 

 

 

 

параметров ] .

 

 

 

Пример синтаксического анализа выражения a+b*100

 

“a”

“+”

 

 

“b”

“*”

“100”

 

Имя_переменной

“+”

 

 

Имя_переменной

“*”

Чис-

 

 

 

 

 

 

 

 

 

ло_без_знака

 

Переменная

“+”

 

 

Переменная

“*”

Констан-

 

 

 

 

 

 

 

 

 

та_без_знака

 

Множитель

“+”

 

 

Множитель

“*”

Множитель

 

слагаемое

“+”

 

 

слагаемое

 

 

 

Простое_выражение

 

 

 

 

 

 

 

выражение

 

 

 

 

 

 

 

 

 

Операторы Паскаля

Основное в программе для вычислительной машины – выполняемые ей действия. Описывают эти действия операторы. Операторы бывают простыми и структурными. Синтаксические диаграммы операторов Паскаля представлены ниже.

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

– условный оператор и так далее.

Пример синтаксического анализа оператора cost := cost + number * price:

“cost”

“:=”

“cost”

“+”

“number”

“*”

“price”

Имя_пер

“:=”

Имя_пер

“+” Имя_пере “*” Имя_переме

еменной

 

еменной

 

менной

 

нной

Пере-

“:=”

Пере-

“+”

Перемен-

“*”

Переменная

51

 

 

 

 

 

 

менная

 

менная

 

ная

 

Пере-

“:=”

Множи-

“+”

Множи-

“*” Множитель

менная

 

тель

 

тель

 

Пере-

“:=”

слагае-

“+”

слагаемое

 

менная

 

мое

 

 

 

Пере-

“:=”

Простое_выражение

 

менная

 

 

 

 

 

Пере-

“:=”

выражение

 

 

менная

 

 

 

 

 

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

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

Любая программа состоит из заголовка программы и некоторого блока (рис. 5-6). Блок содержит раздел описаний, в котором определяются все локальные по отношению к данной программе объекты, и раздел операторов. Он задает действия которые необходимо выполнить над этими объектами.

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

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

Идентификатор нельзя описывать на одном уровне или в

52

одной области действия более одного раза. Соблюдаются следующие правила.

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

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

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

Ниже представлена область действия идентификаторов для

примера программы с процедурой. Вертикальные линии соответ-

ствуют области действия.

 

 

 

 

 

Program prim4;

n t

x P

var n,t: real; x:char;

 

 

 

 

 

 

 

procedure P(x,y: real);

 

 

 

 

x

y n

var n:real;

 

 

 

 

 

 

 

begin

 

 

 

 

 

 

 

n:=x+t;

 

 

 

 

 

 

 

t:=y;

 

 

 

 

 

 

 

writeln(n,t,x);

 

 

 

 

 

 

 

end;

 

 

 

 

 

 

 

begin

 

 

 

 

 

 

 

read(n);

 

 

 

 

 

 

 

t:=n/2;

 

 

 

 

 

 

 

x:=’+’;

 

 

 

 

 

 

 

P(n,0.8);

 

 

 

 

 

 

 

writeln(n,t,x)

 

 

 

 

 

 

 

end.

 

 

 

 

 

 

 

Новые типы данных. Определение типа. Диапазоны.

Каждый тип данных в Паскале определяет:

1.множество значений, принадлежаших к данному типу,

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

3.свойства этого множества значений (например, упорядочен-

53

ность, длина строки у типа String и т.д.).

Например, стандартный тип данных Integer определяет:

1.множество значений – целые числа в диапазоне от –32768 до

32767,

2.набор операций и встроенных функций с данными этого типа,

3.линейная упорядоченность всех значений (от меньшего к большему).

Программист может описывать и использовать новые типы

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

Неявное определение нового типа данных – в разделе описания переменных или внутри определения структурных типов данных указывается множество значений нового типа, например: Var а: 1..20 – тип диапазона

b:(1,2,3) – тип перечисления

c:array [1..10] of integer – тип массива ([1..10] – неявное опреде-

ление типа диапазона внутри неявного определения типа массива)

d: array [‘a’..’g’] of char – тип массива

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

Явное определение нового типа данных – в разделе описания типов, который начинается со служебного слова Type и находится перед разделом описания переменных, записывается имя нового типа и после знака = указывается его множество значений, например:

Type N_gruppa = 1..3;

Podgruppa = (a,b);

Fio = array [1..25] of string;

54

Var fio619 : fio; (использование ранее описанного типа).

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

55