nextupprevious

Next:1.2.2 Синтаксис и семантика
Up:1.2 Как можно определить язык Zonnon?
Previous:1.2 Как можно определить язык Zonnon?


1.2.1 Два примера простых Zonnon-программ

Программа на языке Zonnon представляет собой некоторый текст, который является алгоритмом, предназначенным для исполнения на ЭВМ. Разумеется, не всякий текст является программой языка Zonnon.

Рассмотрим тривиальную задачу выдачи на устройство вывода текста приветствия. Законченная Zonnon-программа решения этой задачи может иметь следующий вид:

module ПервыйПример;
    (* Программа приветствия*)
    const Обращение = ' Друзья!';
    Текст = ' Zonnon-программа приветствует Вас!';
begin
    write(Обращение, Текст)
end ПервыйПример.

В программе семь строчек. Первая строчка -- это заголовок модуля. Он всегда начинается со слова module и содержит имя модуля (в данном случае ПервыйПример). Программист имеет широкую свободу при выборе имени модуля; именем модуля может быть практически любой идентификатор, отличный от зарезервированных слов. Напомним, что идентификатором называется последовательность букв и цифр, начинающаяся с буквы (при этом Zonnon при построении идентификаторов разрешает использовать в качестве буквы символ подчерка). Как правило, имя модуля выбирается программистом исходя из его содержания. Заметим, что в данном примере и в дальнейшем мы используем в именах русские буквы, хотя Zonnon допускает кириллицу только в комментариях.

Слово module зарезервировано в языке Zonnon для использования в заголовках модулей. В Zonnon имеется целый ряд зарезервированных слов — идентификаторов, которые не могут использоваться ни в каких иных целях в программе, кроме приписанных им языком; в рассмотренной программе таких слов четыре: module, begin, const, end. Любое из них нельзя использовать в качестве имени программы или какого-либо ее объекта (например, константы или переменной). Редактор среды  Zonnon обычно выделяет зарезервированные слова цветом. В связи с этим в тексте книги эти слава выделены жирным шрифтом.

Первая строчка заканчивается особым разделителем -- точкой с запятой. Этот разделитель отделяет один смысловой фрагмент текста программы от другого.

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

Третья и четвертая строчки -- это раздел описаний. Он содержит зарезервированное слово const, означающее, что здесь начало раздела констант и далее будут описаны одна или более констант. Константами в языке считаются такие информационные объекты программы, которые не могут изменить своего значения. Как и в обычной практике научно-технических расчетов (вспомним об известном нам со школы числе $\pi=3,14159265$), константа в языке Zonnon может иметь свое собственное имя. Как и имя других видов объектов Zonnon-программы, это имя может быть стандартным, т.е. быть зафиксированным в языке, или выбираться программистом и описываться в программе.

Описать константу в Zonnon -- это значит указать ее имя и значение. Такие указания содержатся в третьей и четвертой строчках программы, в которых определяются текстовые константы с именами Обращение и Текст. В качестве их значений рассматриваются строки символов, размещенные после знака равенства. Признаком того, что Обращение является текстовой константой служат два апострофа, обрамляющих строку, причем сами апострофы этой строке не принадлежат, а лишь указывают транслятору, что заключенные в них символы следует рассматривать как единое целое -- строку символов. Чтобы включить апостроф в строку, его надо повторить дважды (например, строку Зима'98 можно записать в виде 'Зима''98'). В нашем примере первая строка, являющаяся значением константы Обращение, начинается с трех пробелов и имеет длину 10, а вторая - начинается с одного пробела и имеет длину 36.

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

Друзья! Zonnon-программа приветствует Вас!

выдается через стандартное устройство вывода: например, печатается на листе бумаги или высвечивается на экране монитора. В Zonnon-программе это устройство всегда представляется файлом, имеющим стандартное имя Output.

Процедура write относится к стандартным процедурам языка Zonnon. Стандартная процедура не нуждается в описании, она доступна любой программе, в которой содержится обращение к ней. Процедура write -- одна из немногих процедур языка Zonnon, при обращении к которым допускаются списки параметров разной длины. Элементы списка записываются в круглых скобках сразу за именем процедуры и перечисляются по порядку через запятую.

Завершает модуль зарезервированное слово end, за которым следует его имя и точка. Точка оповещает транслятор о конце текста модуля.

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

module ВторойПример;
    (* Вычисление удвоенной суммы двух целых чисел *)
    const Два = 2;
    var A, B : integer;
          Результат: Integer;
begin
    read(A,B);
    Результат:= Два$*$(A + B);
    write(Два, '$*$(',A,'+',B,')=', Результат)
end ВторойПример.

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

Тело этой программы уже состоит не только из раздела констант (в нем определена целочисленная константа Два со значением 2) и операторной части. Третья и четвертая строчки программы -- это раздел описаний переменных, начинающийся с зарезервированного слова var и состоящий из двух описаний трех переменных. По существу, переменные являются элементами памяти виртуальной машины. Каждая переменная имеет имя, тип и (текущее) значение. В программе ВторойПример однобуквенный идентификатор $A$ используется в качестве имени переменной, в которой запоминается значение первого слагаемого. Переменная с именем $B$ используется для хранения второго слагаемого, а в переменную Результат засылается удвоенное значение результата сложения $А$ с $В$. Описания определяют идентификаторы $A$,$B$ и Результат как имена переменных, а также резервируют место в памяти для хранения значений этих переменных. Кроме того, эти описания определяют, что все три переменные имеют тип Integer (целый), т.е. значением каждой из них может быть любое целое число, представимое в машине.

До исполнения операторной части, которая в данной программе состоит из трех операторов, значения переменных $A$$B$ и Результат не определены, т.е. их нельзя использовать раньше, чем они получат какое-нибудь значение.

Первый оператор -- это вызов стандартной подпрограммы read. Пусть во входном файле находятся числа 25 и 13. Тогда в результате первого шага текущим значением переменной $A$ (содержимым соответствующего элемента памяти машины) станет число 25, переменной $B$ -- число 13 (при другом заполнении файла Input переменные $A$ и $B$ могут получить другие значения -- те числа, удвоенную сумму которых требуется вычислить), а значение переменной Результат останется неопределенным.

Следующий оператор -- это оператор присваивания

Результат:= Два$*$(A+В),

который состоит из переменной Результат, знака операции присваивания ":=" и выражения Два$*$(A+B). В результате выполнения оператора присваивания число 76, являющееся значением выражения Два$*$(A+В), станет текущим значением переменной Результат.

Последний оператор (он уже использовался в первом модуле) -- это вызов стандартной подпрограммы вывода, список параметров которого уже состоит не из двух, а семи элементов: константа Два, строка '*(', переменная $A$, строка '+', переменная $B$, строка ')=' и переменная Результат. Этот оператор не меняет значения переменных; в результате его работы осуществляется вывод текста, который с точность до пробелов будет иметь вид:

''2$*$( 25 + 13)= 38''.

Next:1.2.2 Синтаксис и семантика
Up:1.2 Как можно определить язык Zonnon?
Previous:1.2 Как можно определить язык Zonnon?


© В.Н. Касьянов, Е.В.Касьянова, 2004