1
// Начальные операции для выполнения раскрутки.
2
// Используются в семантических вставках при разборе правил грамматики (кроме Print).
4
None = 0, ///< Пустая операция
5
PushConstant = 1, ///< Операция помещения на стек константы
6
PushVariable = 2, ///< Операция помещения на стек значения переменной
7
ObjectElement = 3, ///< Операция взятия адреса члена кортежа
8
FunctionCall = 4, ///< Операция вызова функции
9
ProcedureCheck = 5, ///< Проверка вызова процедуры
10
Print = 6, ///< Оператор вывода сообщения на консоль
11
Block = 7, ///< Начало группы операторов
12
Pop = 8, ///< Снятие переменной со стека
14
// Остальные операции SBL
15
ArrayElement = 9, ///< Получение элемента по индексу
17
// Работа с контрактами и переменными
19
ObjectStructure = 10, ///< Структура записи (объекта)
20
ArrayStructure = 11, ///< Структура массива
21
Import = 12, ///< Импорт контракта
22
Contract = 13, ///< Определение контракта
23
Type = 14, ///< Определение типа
24
Announcement = 15, ///< Объявление о контракте или типе
25
Declaration = 16, ///< Объявление переменной
26
Initialize = 17, ///< Начальное присвоение значение переменной
27
GroupInitialize = 18, ///< Инициализация группы переменных
28
PostInitialize = 19, ///< Необходимо для пересчёта рекурсивных объявлений
30
Announcements_Completed = 20, ///< Объявления завершены (нужно почистить сохранённые контракты)
32
Assignment = 21, ///< Присвоение значение переменной
33
// PostAssignment = 22, ///< Необходимо для пересчёта рекурсивных объявлений
35
// присваивания_с_итерацией
36
AssignmentAddition = 23,
37
AssignmentSubtraction = 24,
38
AssignmentMultiplication= 25,
39
AssignmentDivision = 26,
40
AssignmentModulo = 27,
45
// Определение функции
46
FunctionDefinition = 31,
47
FunctionDefinitionEnd = 32,
48
FunctionTethered = 33,
49
ReturnExpression = 35,
53
Plus = 41, ///< Унарный плюс
54
Minus = 42, ///< Унарный минус
55
Not = 43, ///< Логическое отрицание
58
Or = 51, ///< Логическое "или"
59
And = 52, ///< Логическое "и"
60
Equal = 53, ///< Логическое равенство
61
NotEqual = 54, ///< Логическое неравенство
62
Less = 55, ///< Логическое меньше
63
LessOrEqual = 56, ///< Логическое меньше или равно
64
More = 57, ///< Логическое больше
65
MoreOrEqual = 58, ///< Логическое больше или равно
67
Addition = 61, ///< Арифметическое сложение
68
Subtraction = 62, ///< Арифметическое вычитание
69
Multiplication = 63, ///< Арифметическое умножение
70
Division = 64, ///< Арифметическое деление
71
Modulo = 65, ///< Остаток от деления
72
Power = 66, ///< Арифметическое возведение в степень
74
// Тернарный оператор и условный оператор
75
Ternary = 71, ///< Тернарный оператор
76
If = 72, ///< Условный оператор
80
For = 81, ///< Оператор for
81
While = 82, ///< Оператор while
82
DoWhile = 83, ///< Оператор do-while
85
Break = 85, ///< Break
86
Continue = 86, ///< Continue
89
Apply = 91, ///< Оператор объявления умолчания для контракта, типа или модуля
90
Using = 92, ///< Оператор объявления локального умолчания для контракта, типа или модуля
92
/// \todo Попробовать сократить сущности!
93
AutoDefine = 95, ///< Автоматическое определение типа переменной
94
AutoDeclaration = 96, ///< Объявление автоматической переменной (нужна для определения простой функции)
96
CheckState = 100, ///< Для выполнения внутренних постпроверок
99
FiberMake = 110, ///< Определения нити
100
FiberFlow = 111, ///< Запуск потока нити
101
FiberWait = 112, ///< Ожидание (потока) нити
102
FiberPush = 113, ///< Передача состояния нити
103
FiberPull = 114, ///< Получение состояния нити
104
// FiberCut = 115, ///< Завершение работы с нитью