Значения целого, вещественного и строкового типа могут быть представлены в программе в виде констант (литералов). Целый литерал представляет собой последовательность цифр. Он представляет число, обычной записью которого является. Вещественный литерал представляет собой десятичную или экспоненциальную запись вещественного числа, при этом, в случае экспоненциальной записи, буква “е” может быть как строчной, так и прописной. Например:12.0, 1.6e87, 2Е-7, 89.0. В числовых литералах не может содержаться начальный символ «+» или «-», они могут представлять только положительное число. Отрицательные значения можно получить применением операции унарный минус. Целая часть вещественного числа не может быть опущена. Дробная часть (точка и хотя бы одна цифра после нее) должна присутствовать, если не указан порядок, например, 11е-6 – допустимая запись, а 11.е-4 и 61. – нет. Строковый литерал заключается в двойные кавычки, если в него нужно включить двойную кавычку, то она пишется дважды.
Специальный логический тип данных отсутствует, логические значения представляются переменными целого, вещественного либо строкового типа – истине соответствует положительное число либо непустая строка, лжи – неположительное число либо пустая строка. Результат всех стандартных логических операций – целые числа 1 (истина) или -1 (ложь). При попытке рассмотреть массив как логическое значение возникает ошибка.
Выражением является:
· идентификатор переменной;
· константа целого, вещественного или строкового типа;
· обращение к элементу массива с заданным индексом, имеющее синтаксис <идентификатор массива>{<индекс>} (индекс заключен в фигурные скобки). Индекс должен быть выражением. Перед открывающей фигурной скобкой должно стоять имя переменной, являющейся массивом (но не другое выражение, имеющее тип массива). Значение индекса должно быть неотрицательным целым, иначе возникает ошибка;
· результат применения унарной операции к выражению;
· результат применения бинарной операции к двум выражениям;
· вызов функции (без ключевого слова call). В этом случае функция обязана возвращать значение, иначе возникает ошибка. Фактическими параметрами функции должны быть выражения;
· выражение, заключенное в круглые скобки.
Операции, используемые в выражениях, и их приоритеты (операнды обозначены как a и b; для суммы чисел, разности и произведения результат – целое число, если оба операнда – целые, иначе – вещественное число) перечислены в таблице.
Уровень приоритета | Синтаксис | Типы операндов | Смысл | Тип результата |
1 | ~a | простой | логическое отрицание | целый (-1 или 1) |
-a | число | унарный минус | тот же, что и a | |
+a | число | унарный плюс | ||
2 | a*b | числа | произведение | число |
a/b | числа | вещественное деление | вещественное | |
3 | a+b | строки либо a – строка, b - число | конкатенация строк (число преобразуется в строку) | строка |
числа | сумма | число | ||
a-b | числа | разность | число | |
4 | a=b | простые (оба – числа либо строки одновременно) | равно | целый (-1 или 1) |
a<>b | не равно | |||
a>b | больше | |||
a<b | меньше | |||
a<=b | меньше либо равно | |||
a>=b | больше либо равно | |||
5 | a&b | простые | “И” | |
6 | a^b | простые | исключающее “ИЛИ” | |
a~=b | логическая эквивалентность | |||
a|b | “ИЛИ” |
Выражения интерпретируются в соответствии с приоритетом операций и имеющимися в них круглыми скобками. При этом все унарные операции выполняются справа налево, бинарные операции одинакового приоритета – слева направо. Если в выражении хотя бы один из операндов операции не имеет требуемый тип, или операция не может быть произведена корректно по другой причине, например, в случае деления на ноль, то возникает ошибка.
Вызов функции имеет следующий синтаксис: <имя функции>[<фактический параметр 1>,<фактический параметр 2>,...,<фактический параметр 3>]. Даже если список параметров пуст, квадратные скобки все равно пишутся. Фактическими параметрами функции должны быть выражения.
Например, function1[a,b+c,function2[a,function3[]],56.12e-1]. Существует ряд предопределенных функций, с именами которых не должны совпадать имена пользовательских функций. Их список приведен в таблице.
Функция | Возвращаемое значение | Описание |
abs[число] | того же типа, что и параметр | абсолютная величина |
cos[число] | вещественное | косинус |
sin[число] | синус | |
tg[число] | тангенс | |
arctg[число] | арктангенс | |
arcsin[число] | арксинус | |
arccos[число] | арккосинус | |
exp[число] | степень основания натуральных логарифмов (экспонента) | |
pow[число, число] | первый параметр в степени второй параметр (первый параметр должен быть неотрицательным) | |
ln[число] | натуральный логарифм | |
lg[число] | десятичный логарифм | |
log[число, число] | логарифм первого аргумента по основанию, заданному вторым аргументом | |
sqrt[число] | квадратный корень | |
pi[] | константа pi (отношение длины окружности к диаметру) | |
idiv[целое число, целое число] | целое | частное целочисленного деления |
imod[целое число, целое число] | целое | остаток целочисленного деления |
substr[строка, целое число, целое число] | строка | подстрока (первый параметр – исходная строка, второй параметр – индекс первого символа, третий – длина подстроки; если происходит выход за пределы исходной строки, то ошибки нет, но длина результата – меньше указанной в третьем параметре) |
strlen[строка] | целое | длина строки |
strpos[строка, строка] | целое | позиция первого символа первого вхождения второй строки в первую, либо -1, если совпадений нет (нумерация символов с нуля) |
toint[простой] | целое | преобразование к целому (если невозможно – возникает ошибка) |
toreal[простой] | вещественное | преобразование к вещественному (если невозможно – возникает ошибка) |
tostring[любой] | строка | преобразование к строке |
issingle[любой] | целое (-1 или 1) | является ли значение выражения не массивом |
isarray[любой] | является ли значение выражения массивом | |
isstring[любой] | является ли значение выражения строкой | |
isnum[любой] | является значение выражения числом | |
isint[любой] | является ли значение выражения целым числом | |
isreal[любой] | является ли значение выражения вещественным числом | |
size[массив] | число элементов массива | |
defined[массив, целое] | определен ли в массиве элемент с заданным индексом | |
iff[простой, любой, любой] | любой | если первый параметр – истина, то возвращает значение второго параметра, иначе - третьего |
Если при вызове стандартной функции тип хотя бы одного из параметров не соответствует требуемому, возникает ошибка.
Оператор вызова call позволяет вычислить любое выражение, проигнорировав его значение, например, вызвать функцию как процедуру. Он имеет синтаксис:
call <выражение>
Например, callprocedure1[param1, param2].
Оператор присваивания имеет синтаксис <переменная>:=<выражение> или <массив>{<выражение-индекс>}:=<выражение>.
В результате переменная или элемент массива принимают значение, равное значению выражения в правой части оператора присваивания, если оно было вычислено корректно.
Условный оператор имеет вид:
if <выражение>
[операторы]
[elseif <выражение>]
[операторы]
[elseif <выражение>]
...
[else]
[операторы]
endif
Последовательно проверяются выражения-условия в строках с ключевыми словами if и elseif. Как только получено истинное значение условия (положительное число или непустая строка), то выполняются операторы, следующие за строкой с данным условием, затем выполнение переходит на строку, следующую за endif. Если ни одно из условий не оказалось истинным, то выполняются операторы, расположенные после else, если строка с else имеется в данном условном операторе, иначе управление переходит ниже endif. Условный оператор может быть использован только в функции. Примеры:
1.)
ifa<0
a := abs[a]
flag := 1
endif
2.)
if (ch=”a”)|(ch=”A”)
call proc_a[]
elseif (ch=”b”)|(ch=”B”)
call proc_b[]
elseif (ch=”c”)|(ch=”C”)
call proc_c[]
else
error
endif
Оператор цикла while имеет вид:
while <выражение>
[операторы]
loop
Выполнение блока операторов повторяется, пока истинно значение выражения-условия, затем управление передается на строку, следующую за loop. При этом, если значение выражения изначально ложно, то операторы не будут выполнены ни разу. Оператор цикла while может быть использован только в функции. Пример:
i := 1
s:=0
whilei<=n
s := s+i
i := i+1
loop
Здесь переменная s получает значение суммы чисел от 1 до n.
Оператор цикла for имеет вид:
for <переменная-счетчик> := <выражение1> : <выражение2>