Синтаксис выражений NetScript

Приоритет операций вытекает из синтаксиса построения выражений в NetScript, которые состоят из сомножителей, слагаемых, сумм и простых выражений.

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

Синтаксис выражений NetScript - student2.ru Сомножитель

Синтаксис выражений NetScript - student2.ru Константа без знака имеет следующий синтаксис:

Константа без знака

Ниже приведены примеры сомножителей:

X { Переменная }

N.["Фамилия"]{ Имя поля файла данных }

15 { Беззнаковая константа }

False { Беззнаковая константа }

(X+Y+Z) { Скобочное подвыражение }

“Это строка символов” { Строка символов должна начинаться и заканчиваться кавычкой}

SIN(3.1415) { Вызов функции }

Синтаксис выражений NetScript - student2.ru Слагаемые представляют собой сомножители, объединенные операторами:

Слагаемое

Примеры слагаемых:

X*Y

Z/(1-Z)

A shl 2

Синтаксис выражений NetScript - student2.ru Простое выражение объединяет слагаемые:

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

Примеры простого выражения:

X+Y

X

I*J+1

Простые выражения, связанные посредством операторов сравнения образуют Выражения NetScript.

Примеры выражений:

(I>=X) and (Y<>Z)

(F>=5) and (F<10) or (F>=15) and (F<=20)

Операторы NetScript

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

Простые операторы

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

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

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

Синтаксис выражений NetScript - student2.ru

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

В представленной диаграмме Переменная - это любое разрешенное в NetScript имя переменной.

Поле файла данных должно иметь синтаксис, описанный в разделе Доступ к данным.

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

Примеры оператора присваивания:

X = Y + Z

Done = (I >= 1) and (I < 100)

N.["Name"] = “World” + ”Expo”

Client = N.["Фамилия"] + N.["Инициалы"]

Комментарии

Программы в NetScript могут содержать комментарии, т.е. фрагменты программы, не подлежащие исполнению. Комментарии в NetScript являются простыми операторами и должны размещаться в программе в соответствии с правилами построения предложений. Комментарий начинается со знака ; и продолжается до конца строки. Пример оформления комментария:

X=1 ; Присвоить начальное значение Правильно

X= ; Присвоить начальное значение 1 Неправильно

Структурные операторы

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

Оператор условия

 
  Синтаксис выражений NetScript - student2.ru

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

Оператор условия

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

· Пустая строка —> false (ложь), иначе true (истина).

· Нулевое численное значение —> false, иначе true.

Если результат выражения true, то выполняется оператор, стоящий после THEN.

Если результат выражения false и присутствует альтернатива (т.е. else и оператор), то выполняется оператор, стоящий после ELSE;если альтернативная часть отсутствует, то выполнение программы продолжается со следующего оператора.

В синтаксической диаграмме Оператор - это один или несколько простых, структурных или специальных операторов NetScript.

Операторы цикла

Операторы цикла объединяют один или несколько операторов NetScript, которые могут выполняться повторно несколько раз при выполнении поставленного условия. К операторам цикла относятся REPEAT, WHILE, FOR.

Цикл REPEAT

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

Синтаксис выражений NetScript - student2.ru Оператор REPEAT

repeat k=i/j i=j j=k until j=0

i=1 repeat ? i i=i+1 until i>10

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

Пример оператора repeat:

Цикл WHILE

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

Синтаксис выражений NetScript - student2.ru Оператор WHILE

Выражение должно формировать значение логического типа, иначе значение будет приведено к логическому, как описано в операторе условия. Один или несколько операторов NetScript, представленных на диаграмме блоком Оператор, выполняются, если Выражениеформирует значение true. Работа цикла прекращается, если значение Выражения на очередном шаге становится false. Условие выполнения цикла проверяется перед телом цикла. Поэтому, если значение Выражения равно false в начале выполнения, то тело цикла не выполняется ни разу.

Пример цикла while:

i=1

while Data[i] <> X do

i=i+1

Цикл FOR

Синтаксис выражений NetScript - student2.ru Оператор цикла FORсостоит из одного или нескольких операторов, составляющих тело цикла, и выполняющихся при изменении значения управляющей переменной цикла от начального значения до конечного значения с указанным шагом.

Оператор цикла FOR

 
  Синтаксис выражений NetScript - student2.ru

Управляющая переменная

Начальное значение

Конечное значение

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

Выполнение цикла всегда начинается с начального значения. Когда используется форма оператора с ключевым словом TO значение переменной цикла увеличивается при каждой итерации. Если начальное значение больше конечного цикл не выполнится ни разу. Если используется форма оператора с ключевым словом DOWNTO значение управляющей переменной будет уменьшаться при каждой итерации. Если начальное значение меньше конечного цикл не выполнится ни разу.

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

Учитывая все выше сказанное, оператор for

for v from Exp1 to Exp2 step Exp3 do

тело цикла

можно представить как

v=Exp1

while v<=Exp2 do begin

тело цикла

v=v+Exp3

End

а оператор for

for v from Exp1 downto Exp2 step Exp3 do

тело цикла

можно представить как

v=Exp1

while v>=Exp2 do begin

тело цикла

v=v-Exp3

End

Доступ к файлам базы данных

Язык NetScript содержит ряд конструкций, необходимых для работы с файлами данных. К ним относятся операторы создания, открытия, закрытия файла данных; операторы работы с записями; операторы манипулирования данными и т.д.

Создание файла данных

Для создания файла данных NetScript содержит оператор CreateDataFile, синтаксическая диаграмма которого представлена ниже.

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

 
  Синтаксис выражений NetScript - student2.ru

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

Синтаксис выражений NetScript - student2.ru

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

Описание полей представляет собой список поле файла. Ниже приведена синтаксическая диаграмма описания полей.

 
  Синтаксис выражений NetScript - student2.ru

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

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

Если поле имеет тип с номером HARDLIST, SOFTLIST, HARDRECORD или SOFTRECORD то после описания типа должно быть указано название подчиненного файла. Это имя записывается в кавычках.

Синтаксис выражений NetScript - student2.ru
Синтаксис выражений NetScript - student2.ru
Если поле имеет тип STRING, то после указания типа через пробел записывается числовая константа, указывающая размер строки в символах.
Имя типа  
BYTE Байт
WORD Целое без знака (2 байта)
INTEGER Целое со знаком
LONGINT Длинное целое (4 байта)
SINGLE Вещественное одинарной точности (4 байта)
REAL Вещественное (6 байт)
DOUBLE Вещественное двойной точности (8 байт)
STRING Текстовое (1-254 символов)
DATE Дата (8 байта)
HARDLIST “Жесткая” ссылка на список записей
SOFTLIST Мягкая” ссылка на список записей
HARDRECORD “Жесткая” ссылка на запись
SOFTRECORD “Мягкая” ссылка на запись
FARHARDLIST “Жесткая” ссылка на список записей в выбираемом файле
FARSOFTLIST “Мягкая” ссылка на список записей в выбираемом файле
FARHARDRECORD “Жесткая” ссылка на запись в выбираемом файле
FARSOFTRECORD “Мягкая” ссылка на запись в выбираемом файле

Если описание поля не является последним, то после него ставится запятая и описание следующего поля по указанной форме. После описания последнего поля никаких знаков не ставится.

Пример создания файлов базы данных “Список сотрудников”

CreateDataFile Main “Список сотрудников”

field “Фамилия” STRING 25,

field “Имя” STRING 15,

field “Отчество” STRING 20,

field “Дата рождения” DATE,

field “Дети” HARDLIST “Дети”

CreateDataFile Submit “Дети”

field “Имя” STRING 15,

field “Возраст” BYTE

Открытие файлов данных

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

Функция DBOpen

 
  Синтаксис выражений NetScript - student2.ru

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

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

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

Синтаксис выражений NetScript - student2.ru

Управляющая переменная представляет собой имя переменной, разрешенное в NetScript. Если переменная с указанным именем была определена перед вызовом DBOpen, то ее старое значение уничтожается. После открытия доступ к файла осуществляется через управляющую переменную.

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

Функция DBBIND

Синтаксис выражений NetScript - student2.ru

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

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

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

CreateDataFile Main “Список сотрудников”

field “Фамилия” STRING 25,

field “Имя” STRING 15,

field “Отчество” STRING 20,

field “Дата рождения” DATE,

field “Дети” HARDLIST “Дети”

CreateDataFile Submit “Дети”

field “Имя” STRING 15,

field “Возраст” BYTE

M= DBOpen(“Список сотрудников”) ;Открываем главный файл

M.["Фамилия"] = “Иванов”

DBFldGoto(M, "Дети") ;Переходим на ссылочное поле Дети, которое

;ссылается на подчиненный файл "Дети"

M1 = DBBind(M1) ;Связываем подчиненный файл с главным и создаем

;управляющую переменную

DBRecAppend(M1)

M1.["Имя"]=“Машенька” ; Добавляем запись и записываем имя

DBRecAppend(M1) ; Добавляем запись в конец списка и

M1.["Имя"]=“Дашенька” ; записываем еще одно имя

DBClose(M1) ; Закрываем сначала подчиненный,

DBClose(M) ; а затем главный файл

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

M:= DBOpen(“Список сотрудников”) ;Открываем главный файл

for i from 1 to DBNRecords(M) do begin ;Цикл по всем записям

DBRecGoto (M, I) ;Переходим к записи с номером, который хранится

;в переменной i

? M.["Фамилия"] ;Напечатать содержимое поля ФАМИЛИЯ

DBFldGoto(M, "Дети") ;Перейти (или сделать текущим) к полю ДЕТИ

m1 = DBBind(M) ;Открыть подчиненный файл через ссылочное поле ДЕТИ

for j from 1 to DBNRecords(m1) do ;Цикл по всем записям в

; подчиненном списке

begin

DBRecGoto(m1, j) ;Переходим к записи с номером, который хранится

; в переменной j

? “ “, m1.["Имя"] ;Напечатать значение поля ИМЯ

end ;Конец цикла

DBClose(m1) ;Закрываем подчиненный файл

end ; Конец цикла

DBClose(M) ;Закрываем главный файл (или файл-владелец)

Закрытие файлов

После завершения обработки данных в открытых файлах их следует закрыть, чтобы записать внесенные изменения, или чтобы создать новую цепочку доступа к файлу (для этого его нужно освободить от связи со старой цепочкой), или освободить занимаемую ими память, или чтобы открыть другой файл (иногда это существенно, так как ДОС не разрешает держать одновременно открытыми более 15 файлов). Для закрытия файла и разрыва связи применяются две функции: DBClose и DBUnBind.

Функция DBClose

 
  Синтаксис выражений NetScript - student2.ru

Функцию DBClose можно представить следующей синтаксической диаграммой:

Управляющая переменная должна быть создана функцией DBBind или DBOpen и должна управлять подчиненным файлом, участвующем в цепочке доступа как терминальный. Функция DBClose разрывает установленную связь, делая терминальным файлом цепочки файл-владелец, закрывает файл и удаляет из памяти управляющую переменную.

Пример закрытия файла функцией DBClose

M= DBOpen(“Список сотрудников”) ;Открываем главный файл

DBFldGoto(M, "Дети") ;Перейти (или сделать текущим) к полю ДЕТИ

m1 = DBBind(M) ;Открыть подчиненный файл через ссылочное поле ДЕТИ и

; установить цепочку доступа}

DBClose(m1) ;Закрываем подчиненный файл

DBClose(M) ; Закрываем главный файл (или файл-владелец)

Функция DBUnBind

 
  Синтаксис выражений NetScript - student2.ru

Функцию DBUnBind можно представить следующей синтаксической диаграммой:

Управляющая переменная должна быть создана функцией DBBind и должна управлять подчиненным файлом, участвующем в цепочке доступа как терминальный. Функция DBUnBind разрывает установленную связь, делая терминальным файлом цепочки файл-владелец, но не закрывает файл и не удаляет из памяти управляющую переменную, оставляя тем самым доступ к данным в файле.

Пример использования DBUnBind

M= DBOpen(“Список сотрудников”) ; Открываем главный файл

DBFldGoto(M, "Дети") ; Перейти (или сделать текущим) к полю ДЕТИ

m1 = DBBind(M) ;Открыть подчиненный файл через ссылочное поле ДЕТИ и

;установить цепочку доступа}

UnBind m1 ;Разрываем связь, оставляя подчиненный файл открытым

DBClose(m1) ;Закрываем подчиненный файл

DBClose(M) ;Закрываем главный файл (или файл-владелец)

Наши рекомендации