Оператор цикла
Синтаксис:
while (<ParExpression>) <Block>
Вычисляется значение логического выражения <ParExpression>, если оно = 1 (истина), то тогда выполняется тело цикла – блок операторов <Block>, после выполения последнего оператора этого блока, опять вычисляется значение выражения <ParExpression>, и если оно = 1, то выполняется <Block> и так до тех пор, пока значение <ParExpression> не станет равным 0 (ложь). Предполагается, что тело цикла <Block> изменяет переменные, которые используются в <ParExpression>, таким образом изменяя значения этого выражения после каждого выполнения тела цикла, иначе может случиться зацикливание.
Оператор вывода
Синтаксис:
<Output>::=write(<OutputList>);
<OutputList>::=<ExpressionR>[#<DigitSequence>]{, <ExpressionR>[#<DigitSequence>]}
Выводить можно список переменных, в таком случае в качестве параметра надо передать эти переменные, разделенные запятой.
Вычисляются значения выражений <ExpressionR>, результат вычисления выводится в стандартный поток вывода, связанный обычно с экраном дисплея. Причем если будет выводиться список переменных, то они будут разделены пробелом.
Для вещественных переменных необходимо указать число символов после запятой, это можно указать, поставив после имени вещественной переменной #<DigitSequence>, т.е. кол-во символов.
Пример: write(a, b, c#4, d); выведет список из четырех переменных, причем вещественная переменная d будет выведена с четырьмя символами после запятой.
Оператор ввода
Синтаксис:
<Input>::=<ExpressionL> = read();
Оператор ввода осуществляет чтение из стандартного потока ввода (клавиатуры) значения, если тип введенного значения и тип переменной <ExpressionL> совпадают, то этой переменной присваивается введенное значение. В противном случае присваивание не выполняется и пользователю выдается сообщение об ошибке.
Классы
Пользователь может создавать свои собственные типы данных, объявляя классы.
Класс объявляется следующим образом
<ClassDeclaration>::=class<Identifier><ClassBody>
<ClassBody>::={{<ClassBodyDeclarations>}}
<ClassBodyDeclaration>::=<FieldDeclaration> | <MethodDeclaration>
За ключевым словом class следует идентификатор – имя класса, оно должно быть уникально в пределах программы и не должно совпадать с именами переменных и меток.
Тело класса состоит из определения методов и полей. Поле – это объявление (плюс может быть инициализация) переменной, атрибута класса. Метод – определение функции класса.
Имя класса может быть использовано пользователем при создании объектов этого класса, например
new MyClass();
Функции
В качестве типа возвращаемого значения функция может выступать любой тип данных – встроенный или определенный пользователем. Если в качестве возвращаемого значения указано ключевое слово void, это значит, что функция ничего не возвращает, в таком случае вызов этой функции не может стоять в правой части выражения, т.е. быть r-value.
Если функция имеет возвращаемое значение, то в реализации такой функции должен присутствовать оператор
return <ExpressionR>;
причем, значение, получаемое при вычислении <ExpressionR>, должно совпадать с типом возвращаемого значения функции.
Если в качестве возвращаемого значения указано ключевое слово void, то ключевое слово return; может как присутствовать, так и отсутствовать в теле функции. Причем в таком случае после return должно стоять “;”, так как в таком случае функция ничего не возвращает.
Ключевое слово return определяет точку выхода из функции, рассчитывается значение выражения, стоящее после return (если оно есть), это происходит возврат в то место программы, откуда эта функция вызывалась, причем вычисленное значение возвращается как результат выполнения функции (или ничего не возвращается).