$$OUT=-
$$START!
I. Синтаксис операторов |
I. Syntax |
I. 1. Форматирование операторов |
I. 1. Formatting statements |
I. 1. a. Один оператор - одна строка |
I. 1. a. Continue statement lines |
|
Простые операторы не требуют завершения специальным знаком
(таким, как ' Знак ' Например: |
Statements need not any finalization symbol (like ' Symbol ';' is used to finish a block of statements. E.g.: |
|
Строка не может быть длиннее 80 символов (не учитывая комментарии до конца строки и пробелы и табуляции в конце строки). Символ табуляции считается за один символ. Оператор может быть записан в нескольких строках, но строка считается продолжающейся на следующую только если:
|
A line of a code should not exceed 80 characters (without ending comments and spaces and tabulations). Statement can be continued in several lines only in following cases:
|
|
Другой способ запомнить правило переноса: строка считается продолжающейся на следующую только если
|
Another way to remember the rule is that a statement is continued only if:
|
|
Или использовать иллюстрацию ниже: $$IF?LIGHTRU $$IF?DARKRU $$FI |
Or use the following figure: $$IF?LIGHTEN $$IF?DARKEN $$FI |
I. 1. b. Блочные операторы |
I. 1. b. Block statements |
|
Блочные операторы создают вложенный уровень операторов. Блок вложенных операторов завершается символом ';'. Функции и другие блоки уровня класса завершаются символом '.' (точка). А именно: заголовок класса, список импорта, определение типа перечисления, определение блока констант. Строка не может завершаться двумя и более подряд одинаковыми символами завершения ';' или '.'. Но сочетание ';. ' для завершения последней блочной конструкции в функции и самой функции допускается. Если завершения требуют более двух блоков операторов, то символ завершения для внешнего блока будет находиться на отдельной строке. Например: |
Block statements always are starting in a new line. Nesting statements block is ended with the symbol ';'. Functions and other blocks of a class level are ending with a symbol '.'. Such blocks are: a class header, an import list, enumeration declaration, constants definition block. (Though it is allowed to use ';' for an import list, too). The last line in a nested block can not be ended with two same ending symbols ';' or '.'. But it is allowed to end nesting block with its upper leveled function by two symbols ';. ' at the end of the last line in the function. So, if it is required to finish two nesting blocks, then the ending symbol of the external block will be placed in a separate line of code. E.g.:
|
FOR i
IN [1 TO
100] : |
|
Имеется только одно ключевое слово для условного оператора ( Все прочие операторы являются простыми: |
There is only a single keyword for a conditional statement ( All other statements are simple: |
|
Компилятор требует помечать маркером
|
A compiler requires to mark with a modifier
|
I. 1. c. Комментарии |
I. 1. c. Comments |
Иллюстрация: $$IF?LIGHTRU $$IF?DARKRU $$FI
|
See the figure: $$IF?LIGHTEN $$IF?DARKEN $$FI |
|
|
I. 1. d. Регистрозависимость для идентификаторов |
I. 1. d. Case sensitivity for keywords, types and other identifiers |
|
|
Имена типов образуют особое пространство имен, не пересекающееся с прочими именами (переменных, констант, функций, процедур, модулей).
|
Type names create a name space not intersecting other names at all. |
|
It is desired to be written CAPITALIZED.
|
|
|
Например, A и a - это разные переменные (или константы). Имена Публичных полей, функций, параметров функций начинаются с Прописной буквы. Члены класса, имена которых начинаются со строчной буквы, локальны в классе (но доступны в его наследниках). Локальные переменные функций рекомендуется именовать со строчной буквы, параметры функции - с прописной.
|
So, A and a are different variables (or constants). Names of Public fields, functions, variables, types are always starting from a capital letter. All other names are local in a module. (This does not concern local variables which are always local in its functions and can be written from any case).
|
I. 1. e. Именование |
I. 1. e. Naming |
|
При декларации переменной, функции, типа данных, элемента перечисления, таблицы - ее длинное имя может быть разделено на части символом '|'. Первая часть - это краткое имя. Так же, символом '||' от первой цепочки именования может быть отделена вторая цепочка, и так далее. Единственное требование: все цепочки должны начинаться с той же буквы (без учета регистра).
При этом:
|
While declaring a variable, a function, a data type, a table or an enumeration item it's long name can be separated by the symbol '|' onto parts, the first of which is a short name. Also, the symbol '||' can be used to define another name chain, and so on. It is therefore required that all such chains should start from the same letter (though letter case can be different).
There are following rules:
|
I. 1. f. Модификаторы |
I. 1. f. Modifiers |
|
Многие декларации языка (заголовок модуля, оператор, декларация переменной или типа данных) могут иметь модификаторы.
Например, в заголовке класса: |
Many language declarations (module header, statement, variable of data type declaration) can have modifiers.
|
|
Модификаторы не воздействуют на основную семантику кода. Они лишь помогают компилятору в обеспечении большей надежности, и иногда помогают оптимизировать результирующий код. Если в готовой программе, не содержащей ошибок, убрать все модификаторы (полагая, что в языке они не требуются), это (обычно) не изменит результат работы программы (но может повлиять на размер кода и скорость работы в сторону увеличения или уменьшения).
В некоторых случаях в качестве модификаторов используется наличие некоторого особого идентификатора в составе имени переменной (в любом регистре). Например, слово dummy в составе имени предотвращает выдачу компилятором предупреждений о том, что данная переменная или параметр не используется в коде. Слово temp в имени сообщает, что локальная переменная временная, и нет необходимости предупреждать программиста о том, что присвоенный ей создаваемый объект не будет существовать по окончании работы функции . |
Modifiers do not affect main code semantics. These just help to compiler to provide more security and sometimes help to optimize resulting code. If to remove all modifiers in a ready program (and suppose that a
language do not require it), this (usually) do not change a result
of the program (but can take an effect of changing its size /
working speed, either increasing or decreasing it). In some cases a presence of some identifier in the name of a variable itself is used as a "modifier". E.g., the word "dummy" as a part of a name can be used to prevent the compiler to warn about a variable which is not used in code. And the word temp in a local variable name determines for the compiler that the variable is a temporary and it is not necessary to warn the programmer about assigning a new object to that variable only. |
I. 2. Оператор присваивания |
I. 2. Assignment |
I. 2. a. Простой оператор присваивания |
I. 2. a. Simple assignment statement |
где |
where |
||
|
Для сравнения на равенство двух операндов используется
си-подобный оператор |
To compare for equality of two operands a "C"-like
operator |
I. 2. b. Операторы присваивания в комбинации с арифметической, логической или поразрядной логической операцией |
I. 2. b. Assignment in combination with arithmetic, logic or bitwise operation |
|
Дополнительные операции |
Additional operations |
I. 2. c. Операторы отправки данных |
I. 2. c. Data sending operations |
|
Операция
|
Operation
|
|
Аналогичная операция
Справа от оператора >> может находиться декларация новой переменной.
|
A similar operation
Additionally, right to the >> operator a declaration of a new variable can be specified.
|
I. 2. d. Операторы повторного присваивания и отправки данных |
I. 2. d. Repeating assignment and sending data operators |
|
Если оператор начинается с символа Для такого повторного присваивания (или отправки данных):
|
If a statement is starting from a symbol For such repeating assignment statement (or data sending statement):
|
I. 3. Выражения |
I. 3. Expressions |
|
|
I. 3. a. Операции проверки наличия |
I. 3. a. Checking the contant of an item |
|
Операторы
В случае конструируемого массива, список значений должен содержать только константы. В этом случае, когда тип проверяемого значения - строка, не допускается конструировать массив из единственного элемента. Либо справа должна быть строка, а не массив. Операция IN / !IN не применима к паре вещественное число - вещественный массив (так же как запрещено сравнение на равенство значений типа REAL).
|
Operators
In case of a constructed array, all its items must be constant expressions. And in case when the left value is a string, it is not allowed to construct an array from a single string value. Either a string should be to the right of IN / !IN ( the case 2). Operations IN / !IN are not applicable to REAL numbers (still it is not allowed to compare REAL values for equality/inequality). |
I. 4. Прочие простые операторы |
I. 4. Other simple statements |
|
|
|
|
I. 5. Условный оператор CASE |
I. 5. Conditional statement CASE |
Оператор По исполнении любой ветви всегда происходит выход из всего
оператора
|
A BREAK statement is not used to finish a branch. After any branch execution entire
|
|
Классический пример - решение квадратного уравнения в области вещественных чисел: |
Classic example - solving a square equation for real numbers: |
|
||
|
Особый вариант оператора Синтаксически такой вариант оператора |
Especial version of the In such case symbols ' |
|
|
Так же, имеется особый вариант оператора |
Also there is a special variant |
I. 6. Операторы цикла FOR |
I. 6. FOR loop statements |
|
Оператор цикла
|
A loop statement
|
|
|
|
Для организации неконтролируемого бесконечного цикла используется блочный
оператор
|
To create an unguided infinitive loop, a special block statement is used:
|
|
Переменная цикла, если она целочисленная, может (как и любая целочисленная
переменная) получать атрибут |
A loop variable it it is integer can (as well as any integer variable) to
have an attribute |
|
В случае завершения блока оператора
|
In case when a
|
|
Оператор |
The |
I. 6. a. О возможности присваивания значений переменным цикла:
|
I. 6. a. About assigning a value to a loop variable:
|
I. 7. Блок операторов PUSH |
I. 7. PUSH statements block |
|
Предназначен для гарантированного сохранения некоторой переменной или поля с одновременным присваиванием ему нового значения на время выполнения блока, с последующим гарантированным восстановлением значения этой переменной или поля по окончании исполнения блока.
Восстанавливающие действия гарантируются в том числе:
Синтаксис: или
|
A
Restoring is always guaranteed:
Syntax: or:
|
|||
|
|
|||
|
В операторе Например: |
A special method with modifier Such method2 should not have parameters, and it can not be called directly
(as well as opening method, having the |
|||
|
||||
I. 8. Блок операторов DEBUG |
I. 8. DEBUG statements block |
|
Предназначен для временной инъекции кода, который требуется только для целей отладки. Внутри этого блока не ведётся подсчёт и контроль уровней вложенности блоков. Компилятор всегда выдаёт предупреждение о наличии таких блоков с тем, чтобы программист не забыл удалить их из кода (или закомментировать) по окончании отладки. Внутри отладочных блоков могут быть декларированы локальные переменные, но использовать их можно только опять же внутри отладочных блоков (хотя и не обязательно только в том блоке, в котором они декларируются).
|
A DEBUG block is intended for a temporary code injection which is required for debug purposes. In such blocks, levels of nesting blocks are not controlled. A compiler is always warning about such blocks not removed from a code. Such blocks should be removed when debugging is finished. In DEBUG blocks it is possible to declare local variables as usual. But it is not allowed to use such variables out of DEBUG blocks (though it is allowed to use it in another DEBUG block in the same function).
|
|
Если для правильной компиляции блоков |
If there are required additional classes to compile |
|
Для оператора
|
For the DEBUG statement:
|
I. 9. Блок операторов SILENT |
I. 9. SILENT statements block |
|
Предназначен для предотвращения выдачи компилятором предупреждений в некотором участке кода. Например, предупреждений о наличии отладочных блоков DEBUG:
|
The block SILENT purposed to prevent the compiler from warnings on some block of code. E.g. about DEBUG statements in code.
|
I. 10. Оператор LIKE |
I. 10. LIKE statement |
|
(Не путать с операцией LIKE в выражении!)
Предназначен для вставки ранее написанного кода без изменений в новой позиции. Вставляемый код должен быть расположен между двумя блочными комментариями (на одном уровне вложенности). Метка первого блочного комментария (в совокупности с именем функции) используется для указания того, какой именно блок кода следует повторить. Имеются правила:
|
(Do not mean the comparison operation LIKE between two strings in an expression!)
The
|
|||
|
|
An example: |
|||
|
||||
|
Дополнительно, при использовании оператора
Списки замен заключаются в скобки и перечисляются через запятую. Замена
должна иметь множитель в форме Все замены выполняются непосредственно перед компиляцией оператора LIKE, на участке кода, который подставляется вместо LIKE. И образец, и строка, на которую он заменяется, может быть заключен (или не заключен) в апострофы. Только строка справа от знака ==> может быть пустой, образец должен содержать хотя бы один символ.
|
Additionally, while calling the
Lists of replacements are enclosed into parentheses and listed via comma. A
replacement should have a multiplier following its right bracket in form All the replacements are done just before compiling the LIKE statement having such replacements defined. Both pattern and replacement strings can be enclosed into apostrophes. Only the string right to the symbol ==> can be empty, but patterns always should not be empty strings. |
|
И, пожалуйста, помните:
Поэтому не злоупотребляйте использованием |
And please remember:
So do not overuse the |
I. 11. Оператор REVERT |
I. 11. REVERT statement |
|
Предназначен для вставки ранее написанного кода в новой позициис переворачиванием направлений присваивания. Переворачиваемый код должен быть расположен между двумя блочными комментариями (на одном уровне вложенности). Метка первого блочного комментария (в совокупности с именем функции) используется для указания того, какой именно блок кода следует повторить. Имеются правила:
|
The
|
|
Пример: |
An example: |
|
$$STOP!!