// 2025-2026 Богданович Давид Когут Прихожденко (кдб.дійсність.укр)
/* Мавка */
/* ВАЖЛИВО: цей файл має бути повністю самостійний! */
/* ніяких "взяти" інших файлів! */
простір мавка {
структура Місцезнаходження;
структура Притриманий;
структура Притримувач;
структура КористувацькіДані;
структура Предмет;
структура ПредметПослідовності;
структура Середовище;
структура ПредметДаних;
структура ПредметПроміжкаЧисел;
структура ПредметДії;
структура ПредметКоду;
структура ПредметМодуля;
структура ПредметПараметра;
структура ПредметОзнаки;
структура ПредметПереборуПроміжкаЧисел;
структура ПредметПереборуСписку;
структура ПредметСловника;
структура ПредметСписку;
структура ПредметКласу;
структура ПредметТексту;
структура СкладенийПредмет;
структура Машина;
стала ЗНедійсне = 0;
стала ЗДійсне = 1;
стала ЗЧисло = 2;
стала ЗПредмет = 3;
структура Значення {
дані: *Предмет | р64;
вид: п8;
}
стала НЕДІЙСНЕ = Значення { дані = пусто як *Предмет, вид = ЗНедійсне };
стала ДІЙСНЕ = Значення { дані = пусто як *Предмет, вид = ЗДійсне };
внутрішня дія ЧИСЛО(значення: р64) -> Значення {
вернути Значення { дані = значення, вид = ЗЧисло };
}
внутрішня дія ПРЕДМЕТ(предмет: адреса) -> Значення {
вернути Значення { дані = предмет як *Предмет, вид = ЗПредмет };
}
внутрішня дія ЛОГЛОГ(значення: логічне) -> Значення {
якщо значення {
вернути ДІЙСНЕ;
} інакше {
вернути НЕДІЙСНЕ;
}
}
внутрішня дія ЧИ(значення: Значення) -> логічне {
якщо значення.вид == ЗНедійсне {
вернути ні;
} інакше {
вернути так;
}
}
синонім ЗначенняАбоСтанПадіння = Значення;
синонім СтанПадіння = ніщо;
стала ВПокластиНедійсне = 0; // []() -> [недійсне]
стала ВПокластиДійсне = 1; // []() -> [дійсне]
стала ВПокластиПредмет = 3; // []() -> [Предмет]
стала ВПокластиЯ = 4; // []() -> [значення_я]
стала ВПокластиКонстанту = 5; // [](позиція_константи) -> [константа]
стала ВСтворитиПослідовність = 6; // [...](кількість_елементів) -> [значення_послідовності]
стала ВСтворитиДію = 7; // [назва, ..., тип_результату, код](кількість_параметрів) -> [предмет_дії]
стала ВСтворитиКлас = 8; // [назва, ...](кількість_параметрів) -> [предмет_класу]
стала ВСтворитиМодуль = 9; // [назва, код]() -> [предмет_модуля]
стала ВСтворитиСписок = 10; // [...](кількість_елементів) -> [предмет_списку]
стала ВСтворитиСловник = 11; // [...](кількість_елементів) -> [предмет_словника]
стала ВСтворитиПроміжок = 12; // [від, включно, до]() -> [предмет_проміжка]
стала ВСтворитиПараметр = 13; // [назва, тип, значення]() -> [параметр]
стала ВСтворитиОзнаку = 68; // [назва, тип, значення]() -> [ознака]
стала ВСтворитиТип = 14; // [...](кількість_структур) -> [тип]
стала ВЗаписатиМетод = 15; // [предмет_класу, назва, предмет_дії]() -> [предмет_дії]
стала ВПризначити = 16; // [назва, значення]() -> []
стала ВЗвернутись = 17; // [назва]() -> [предмет]
стала ВЗдійснити = 18; // [предмет_дії, ..., ...](кількість_аргументів, кількість_іменованих_аргументів) -> [результат]
стала ВОтриматиВластивість = 19; // [предмет, назва]() -> [предмет_властивості]
стала ВЗмінитиВластивість = 20; // [предмет, назва, значення]() -> []
стала ВЗдійснитиВластивість = 21; // [предмет, назва, ..., ...](кількість_аргументів, кількість_іменованих_аргументів) -> [результат]
стала ВОтриматиЕлемент = 22; // [предмет, ключ]() -> [елемент]
стала ВЗмінитиЕлемент = 23; // [предмет, ключ, значення]() -> []
стала ВОтриматиПеребір = 24; // [предмет]() -> [предмет_перебору]
стала ВДодати = 25; // [а, б]() -> [результат]
стала ВВідняти = 26; // [а, б]() -> [результат]
стала ВПомножити = 27; // [а, б]() -> [результат]
стала ВПоділити = 28; // [а, б]() -> [результат]
стала ВОтриматиОстачуДілення = 29; // [а, б]() -> [результат]
стала ВОтриматиНеповнуЧасткуДілення = 30; // [а, б]() -> [результат]
стала ВПіднестиДоСтепеня = 31; // [а, б]() -> [результат]
стала ВЗсунутиВліво = 32; // [а, б]() -> [результат]
стала ВЗсунутиВправо = 33; // [а, б]() -> [результат]
стала ВЗсунутиВправо2 = 34; // [а, б]() -> [результат]
стала ВДвійковеІ = 35; // [а, б]() -> [результат]
стала ВДвійковеАБО = 36; // [а, б]() -> [результат]
стала ВДвійковеВиключнеАБО = 37; // [а, б]() -> [результат]
стала ВМенше = 38; // [а, б]() -> [результат]
стала ВБільше = 39; // [а, б]() -> [результат]
стала ВНеБільше = 40; // [а, б]() -> [результат]
стала ВНеМенше = 41; // [а, б]() -> [результат]
стала ВРівно = 42; // [а, б]() -> [результат]
стала ВНеРівно = 43; // [а, б]() -> [результат]
стала ВЄ = 46; // [а, б]() -> [результат]
стала ВНеЄ = 47; // [а, б]() -> [результат]
стала ВДвійковеНЕ = 48; // [а]() -> [результат]
стала ВВідʼємне = 49; // [а]() -> [результат]
стала ВЗаперечити = 51; // [а]() -> [результат]
стала ВПочатиСпробу = 52; // [назва](позиція_вказівки_зловити) -> []
стала ВВпасти = 53; // [предмет_помилки]() -> []
стала ВЗакінчитиСпробу = 54; // [](позиція_вказівки_виходу) -> []
стала ВВзяти = 55; // [назва, ...](кількість_назв) -> [предмет_модуля]
стала ВДати = 56; // [предмет, назва]() -> []
стала ВПеребратиДалі = 57; // [предмет_перебору]() -> [предмет_перебору, результат_виконання]
стала ВЗбитиТекст = 58; // [...](кількість_предметів) -> [збитий_текст]
стала ВСтрибнути = 59; // [](позиція_вказівки) -> []
стала ВСтрибнутиЯкщоНедійсне = 60; // [предмет](позиція_вказівки) -> []
стала ВЗабрати = 61; // [предмет]() -> []
стала ВВернути = 62; // [предмет]() -> []
стала ВСтрибнутиЯкщоДійсне = 63; // [предмет](позиція_вказівки) -> [предмет]
стала ВДублювати = 64; // [предмет]() -> [предмет, предмет]
стала ВПризначитиНавпаки = 65; // [значення, назва]() -> []
стала ВПризначитиШвидко = 66; // [значення](позиція_в_середовищі) -> []
стала ВЗвернутисьШвидко = 67; // [](позиція_в_середовищі) -> [предмет]
структура Шлях {
розмір: природне;
дані: *п8;
}
структура Місцезнаходження {
шлях_або_код: *ПредметДаних | *ПредметКоду;
рядок_або_позиція_вказівки: природне;
}
структура Притриманий {
попередній: *Притриманий;
наступний: *Притриманий;
предмет: *Предмет;
}
структура Притримувач {
наступний: *Притримувач;
попередній: *Притримувач;
перший: *Притриманий;
останній: *Притриманий;
}
синонім ДіяПередЗнищеннямКористувацькихДаних = (М: *Машина, користувацькі_дані: *КористувацькіДані) -> ніщо;
структура КористувацькіДані {
значення: адреса;
дія_перед_знищенням: ДіяПередЗнищеннямКористувацькихДаних;
}
структура НакопичувачТексту {
розмір: природне;
дані: *п8;
вмісткість: природне;
}
структура Предмет {
наступний: *Предмет;
позначено: логічне;
клас: *ПредметКласу;
користувацькі_дані: *КористувацькіДані;
}
структура ПредметПослідовності {
наступний: *Предмет;
позначено: логічне;
клас: *ПредметКласу;
користувацькі_дані: *КористувацькіДані;
розмір: природне;
елементи: *Значення;
}
структура Призначене;
структура Призначене {
наступний: *Призначене;
назва: *ПредметТексту;
значення: Значення;
}
структура Призначення {
розмір: природне;
дані: **Призначене;
вмісткість: природне;
}
структура Середовище {
попередня: *Середовище;
наступна: *Середовище;
позначено: логічне;
кількість_запозичень: природне;
зовні: *Середовище;
призначення: Призначення;
}
структура Метод {
назва: *ПредметТексту;
значення: *ПредметДії;
}
структура Методи {
розмір: природне;
дані: *Метод;
}
стала ВидЗадіяних1 = 1; // з накопичувача діяльності
стала ВидЗадіяних2 = 2; // виділені користувачем
структура Задіяні {
вид: п8;
розмір: п32;
дані: *Значення;
кількість_імен: п32;
}
структура Діяльність;
синонім РіднаДія = (
М: *Машина,
діяльність: *Діяльність
) -> ЗначенняАбоСтанПадіння;
структура ЕлементСловника {
ключ: Значення;
значення: Значення;
}
структура ПредметКласу {
наступний: *Предмет;
позначено: логічне;
клас: *ПредметКласу;
користувацькі_дані: *КористувацькіДані;
вбудований: логічне;
заборонити_наслідування: логічне;
назва: *ПредметТексту;
ознаки: *ПредметПослідовності;
методи: Методи;
властивості: Призначення;
}
структура ПредметДії {
наступний: *Предмет;
позначено: логічне;
клас: *ПредметКласу;
користувацькі_дані: *КористувацькіДані;
середовище_створення: *Середовище;
рідна: логічне;
назва: *ПредметТексту;
параметри: *ПредметПослідовності;
тип_результату: *Предмет;
код: *ПредметКоду | РіднаДія;
метод_класу: *ПредметКласу;
шлях_до_теки_модулів: *ПредметДаних;
}
структура ПредметСписку {
наступний: *Предмет;
позначено: логічне;
клас: *ПредметКласу;
користувацькі_дані: *КористувацькіДані;
розмір: природне;
елементи: *Значення;
}
структура ПредметСловника {
наступний: *Предмет;
позначено: логічне;
клас: *ПредметКласу;
користувацькі_дані: *КористувацькіДані;
розмір: природне;
елементи: *ЕлементСловника;
}
структура ПредметМодуля {
наступний: *Предмет;
позначено: логічне;
клас: *ПредметКласу;
користувацькі_дані: *КористувацькіДані;
готовий: логічне;
назва: *ПредметТексту;
властивості: Призначення;
}
структура ПредметПараметра {
наступний: *Предмет;
позначено: логічне;
клас: *ПредметКласу;
користувацькі_дані: *КористувацькіДані;
назва: *ПредметТексту;
тип: адреса;
значення: Значення;
}
структура ПредметОзнаки {
наступний: *Предмет;
позначено: логічне;
клас: *ПредметКласу;
користувацькі_дані: *КористувацькіДані;
назва: *ПредметТексту;
тип: адреса;
значення: Значення;
}
структура ПредметТексту {
наступний: *Предмет;
позначено: логічне;
клас: *ПредметКласу;
користувацькі_дані: *КористувацькіДані;
значення: кд;
}
структура МісцезнаходженняВказівки {
початок: п32;
кінець: п32;
рядок: п32;
}
структура МісцезнаходженняВказівок {
розмір: природне;
дані: *МісцезнаходженняВказівки;
}
структура ПредметКоду {
наступний: *Предмет;
позначено: логічне;
клас: *ПредметКласу;
користувацькі_дані: *КористувацькіДані;
константи: *ПредметПослідовності;
вказівки: *ПредметДаних;
шлях: *ПредметДаних;
місцезнаходження_вказівок: МісцезнаходженняВказівок;
}
структура ПредметДаних {
наступний: *Предмет;
позначено: логічне;
клас: *ПредметКласу;
користувацькі_дані: *КористувацькіДані;
розмір: природне;
дані: *п8;
}
структура ПредметПроміжкаЧисел {
наступний: *Предмет;
позначено: логічне;
клас: *ПредметКласу;
користувацькі_дані: *КористувацькіДані;
від: р64;
до: р64;
включно: логічне;
}
структура ПредметПереборуДаних {
наступний: *Предмет;
позначено: логічне;
клас: *ПредметКласу;
користувацькі_дані: *КористувацькіДані;
предмет_даних: *ПредметДаних;
почато: логічне;
позиція: природне;
поточне_значення: р64;
}
структура ПредметПереборуПроміжкаЧисел {
наступний: *Предмет;
позначено: логічне;
клас: *ПредметКласу;
користувацькі_дані: *КористувацькіДані;
предмет_проміжка: *ПредметПроміжкаЧисел;
почато: логічне;
поточне_значення: р64;
}
структура ПредметПереборуПослідовності {
наступний: *Предмет;
позначено: логічне;
клас: *ПредметКласу;
користувацькі_дані: *КористувацькіДані;
предмет_послідовності: *ПредметПослідовності;
почато: логічне;
позиція: природне;
поточне_значення: Значення;
}
структура ПредметПереборуСловника {
наступний: *Предмет;
позначено: логічне;
клас: *ПредметКласу;
користувацькі_дані: *КористувацькіДані;
предмет_словника: *ПредметСловника;
почато: логічне;
позиція: природне;
поточне_значення: Значення;
}
структура ПредметПереборуСписку {
наступний: *Предмет;
позначено: логічне;
клас: *ПредметКласу;
користувацькі_дані: *КористувацькіДані;
предмет_списку: *ПредметСписку;
почато: логічне;
позиція: природне;
поточне_значення: Значення;
}
структура ПредметПереборуТексту {
наступний: *Предмет;
позначено: логічне;
клас: *ПредметКласу;
користувацькі_дані: *КористувацькіДані;
предмет_тексту: *ПредметТексту;
почато: логічне;
позиція: природне;
поточне_значення: р64;
}
структура СкладенийПредмет {
наступний: *Предмет;
позначено: логічне;
клас: *ПредметКласу;
користувацькі_дані: *КористувацькіДані;
властивості: Призначення;
}
структура МісцезнаходженняІнформаціїПадіння {
шлях: *ПредметДаних;
рядок: природне;
}
структура ЕлементІсторіїЗдійсненняІнформаціїПадіння {
місцезнаходження: МісцезнаходженняІнформаціїПадіння;
назва: *ПредметТексту;
}
структура ІнформаціяПадіння {
значення: Значення;
місцезнаходження: МісцезнаходженняІнформаціїПадіння;
розмір_історії: природне;
історія: *ЕлементІсторіїЗдійсненняІнформаціїПадіння;
}
стала КолірВиводуСтандартний = 0;
стала КолірВиводуЧервоний = 1;
стала КолірВиводуЗелений = 2;
стала КолірВиводуСиній = 3;
стала КолірВиводуЖовтий = 4;
синонім ОбробникПадінь = (М: *Машина, інформація_падіння: ІнформаціяПадіння) -> ніщо;
структура Налаштування {
виділити_сиру_памʼять: (М: *Машина, розмір: природне) -> адреса;
перевиділити_сиру_памʼять: (М: *Машина, значення: адреса, новий_розмір: природне) -> адреса;
звільнити_сиру_памʼять: (М: *Машина, значення: адреса) -> ніщо;
запанікувати: (М: *Машина, повідомлення: кд) -> ніщо;
вивести_кд: (М: *Машина, колір: природне, значення: кд) -> ніщо;
вивести_шлях: (М: *Машина, колір: природне, розмір: природне, дані: *п8) -> ніщо;
отримати_теку_файлу: (М: *Машина, шлях_до_файлу: *ПредметДаних, глибина: природне) -> *ПредметДаних;
прочитати_файл: (М: *Машина, шлях_до_файлу: *ПредметДаних) -> *ПредметДаних;
перевірити_чи_шлях_починається_на: (М: *Машина, шлях: *ПредметДаних, початок: *ПредметДаних) -> логічне;
отримати_шлях_до_паку_з_шляху_теки_модулів: (М: *Машина, шлях_до_теки_модулів: *ПредметДаних, шлях_до_теки_паків: *ПредметДаних, вихід: **ПредметДаних) -> логічне;
збити_шлях_до_модуля: (М: *Машина, розмір: природне, елементи: **ПредметДаних, вихід: **ПредметДаних) -> логічне;
взяти_біб: (М: *Машина, довжина_шляху: природне, шлях: **ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
обробник_падінь: ОбробникПадінь;
}
структура НакопичувачЗначень {
розмір: природне;
дані: *Значення;
вмісткість: природне;
}
структура Спроба {
назва_зловити: *ПредметТексту;
позиція_вказівки_зловити: природне;
розмір_історії_здійснення: природне;
розмір_накопичувача_значень: природне;
}
структура Спроби {
розмір: природне;
дані: *Спроба;
}
структура Діяльність {
середовище: *Середовище;
здійснювач: Значення;
предмет_дії: *ПредметДії;
задіяні: Задіяні;
місцезнаходження: Місцезнаходження;
спроби: Спроби;
}
структура ІсторіяЗдійснення {
розмір: природне;
дані: *Діяльність;
вмісткість: природне;
}
структура КонстантиНазв {
_значення: *ПредметТексту;
_недійсне: *ПредметТексту;
_дійсне: *ПредметТексту;
_Послідовність: *ПредметТексту;
_середовище: *ПредметТексту;
_Предмет: *ПредметТексту;
_Структура: *ПредметТексту;
_Модуль: *ПредметТексту;
_Параметр: *ПредметТексту;
_Ознака: *ПредметТексту;
_Число: *ПредметТексту;
_Текст: *ПредметТексту;
_Код: *ПредметТексту;
_Дія: *ПредметТексту;
_Список: *ПредметТексту;
_Словник: *ПредметТексту;
_Дані: *ПредметТексту;
_ПроміжокЧисел: *ПредметТексту;
_ПеребірПроміжкаЧисел: *ПредметТексту;
_ПеребірСписку: *ПредметТексту;
_далі: *ПредметТексту;
_з: *ПредметТексту;
_довжина: *ПредметТексту;
_0: *ПредметТексту;
_1: *ПредметТексту;
_модуль: *ПредметТексту;
_пак: *ПредметТексту;
_біб: *ПредметТексту;
_читати: *ПредметТексту;
_перед: *ПредметТексту;
_розмір: *ПредметТексту;
_чародія: *ПредметТексту;
_чародія_число: *ПредметТексту;
_чародія_текст: *ПредметТексту;
_чародія_межа: *ПредметТексту;
_чародія_перебір: *ПредметТексту;
_чародія_послідовність: *ПредметТексту;
_дія_перевірки: *ПредметТексту;
_дія_перетворення: *ПредметТексту;
_додати: *ПредметТексту;
_забрати: *ПредметТексту;
_знайти: *ПредметТексту;
_знайти_позицію: *ПредметТексту;
_відібрати: *ПредметТексту;
_перетворити: *ПредметТексту;
_обернути: *ПредметТексту;
_містить: *ПредметТексту;
_ключ: *ПредметТексту;
_ключі: *ПредметТексту;
_список: *ПредметТексту;
_словник: *ПредметТексту;
_послідовність: *ПредметТексту;
_дані: *ПредметТексту;
_проміжок: *ПредметТексту;
_ПеребірПослідовності: *ПредметТексту;
_ПеребірДаних: *ПредметТексту;
_назва: *ПредметТексту;
_параметри: *ПредметТексту;
_ознаки: *ПредметТексту;
_тип_результату: *ПредметТексту;
_код: *ПредметТексту;
_константи: *ПредметТексту;
_вказівки: *ПредметТексту;
_шлях: *ПредметТексту;
_ПеребірСловника: *ПредметТексту;
_ПеребірТексту: *ПредметТексту;
_текст: *ПредметТексту;
_нескінченність: *ПредметТексту;
_невизначеність: *ПредметТексту;
_система: *ПредметТексту;
_прочитати: *ПредметТексту;
_тип: *ПредметТексту;
_записати: *ПредметТексту;
_куди: *ПредметТексту;
_дописати: *ПредметТексту;
_видалити: *ПредметТексту;
_створити_папку: *ПредметТексту;
_виконати: *ПредметТексту;
_аргументи: *ПредметТексту;
_стдвив: *ПредметТексту;
_стдпом: *ПредметТексту;
_команда: *ПредметТексту;
_с: *ПредметТексту;
_місцезнаходження_вказівок: *ПредметТексту;
_від: *ПредметТексту;
_до: *ПредметТексту;
_включно: *ПредметТексту;
_дія_значення: *ПредметТексту;
_позиція: *ПредметТексту;
_Клас: *ПредметТексту;
_предок: *ПредметТексту;
_Перебір: *ПредметТексту;
_виділити: *ПредметТексту;
_обнулено: *ПредметТексту;
_отримати_назву: *ПредметТексту;
_афс: *ПредметТексту;
_мат: *ПредметТексту;
_Е: *ПредметТексту;
_ПІ: *ПредметТексту;
_ЛОГ2Е: *ПредметТексту;
_ЛОГ10Е: *ПредметТексту;
_ЛОГ2: *ПредметТексту;
_ЛОГ10: *ПредметТексту;
_КОРІНЬ2: *ПредметТексту;
_КОРІНЬ1_2: *ПредметТексту;
_син: *ПредметТексту;
_кос: *ПредметТексту;
_тан: *ПредметТексту;
_асин: *ПредметТексту;
_акос: *ПредметТексту;
_атан: *ПредметТексту;
_абс: *ПредметТексту;
_експ: *ПредметТексту;
_кор2: *ПредметТексту;
_стеля: *ПредметТексту;
_підлога: *ПредметТексту;
_округлити: *ПредметТексту;
_аввід: *ПредметТексту;
_відклик: *ПредметТексту;
_повідомлення: *ПредметТексту;
_запитати: *ПредметТексту;
_інет: *ПредметТексту;
_іа: *ПредметТексту;
_порт: *ПредметТексту;
_служити: *ПредметТексту;
_обробник_даних: *ПредметТексту;
_обробник_підключення: *ПредметТексту;
_обробник_відключення: *ПредметТексту;
_обробник_стікання: *ПредметТексту;
_обробник_помилки: *ПредметТексту;
_надіслати: *ПредметТексту;
_Звʼязок: *ПредметТексту;
_Слуга: *ПредметТексту;
_формат: *ПредметТексту;
_закрити_підключення: *ПредметТексту;
_зупинити: *ПредметТексту;
_Клієнт: *ПредметТексту;
_підключитись: *ПредметТексту;
_обробник_закінчення: *ПредметТексту;
_Помилка: *ПредметТексту;
_обробник_запуску: *ПредметТексту;
_обробник_зупинки: *ПредметТексту;
_закінчити: *ПредметТексту;
_знищити: *ПредметТексту;
_обробник_підключення_звʼязку: *ПредметТексту;
_обробник_даних_звʼязку: *ПредметТексту;
_обробник_стікання_звʼязку: *ПредметТексту;
_обробник_закінчення_звʼязку: *ПредметТексту;
_обробник_помилки_звʼязку: *ПредметТексту;
_обробник_відключення_звʼязку: *ПредметТексту;
_зріз: *ПредметТексту;
}
структура ВзятеЗначення {
шлях: *ПредметДаних;
значення: Значення;
}
структура ВзятіЗначення {
розмір: природне;
дані: *ВзятеЗначення;
}
структура ЕлементЧергиЗдійснення;
структура ЕлементЧергиЗдійснення {
наступний: *ЕлементЧергиЗдійснення;
значення: Значення;
задіяні: Задіяні;
}
структура ЧергаЗдійснення {
перший: *ЕлементЧергиЗдійснення;
останній: *ЕлементЧергиЗдійснення;
}
синонім ПочатиРозмовуДіяЧитати = (М: *Машина, перед: кд, історія: логічне, обробник: (значення: кд, кінець_файлу: логічне, помилка: природне, позиція_помилки: природне, аргумент: адреса) -> ніщо, аргумент: адреса) -> логічне;
синонім ПочатиРозмовуДіяОбробитиПадіння = (М: *Машина, інформація_падіння: ІнформаціяПадіння) -> ніщо;
синонім ПочатиРозмовуДіяОбробитиЗначення = (М: *Машина, значення: Значення) -> ніщо;
структура Розмова {
М: *Машина;
читати: ПочатиРозмовуДіяЧитати;
шлях_до_стандартного_вводу: *ПредметДаних;
обробити_значення: ПочатиРозмовуДіяОбробитиЗначення;
обробити_падіння: ПочатиРозмовуДіяОбробитиПадіння;
предмет_модуля: *ПредметМодуля;
середовище: *Середовище;
}
// потім: зробити регістрову а не стекову
// потім: не зберігати стан падіння в машині, а вертати в діях
// мабуть створити структуру Результат<Т>
структура Машина {
налаштування: Налаштування;
шлях_до_теки_модулів: *ПредметДаних;
шлях_до_теки_паків: *ПредметДаних;
перша_середовище: *Середовище;
остання_середовище: *Середовище;
перший_предмет: *Предмет;
останній_предмет: *Предмет;
кількість_дійсних: природне;
кількість_дійсних_для_очищення: природне;
потребує_очищення: логічне;
клас_Клас: *ПредметКласу;
клас_Дані: *ПредметКласу;
клас_ПроміжокЧисел: *ПредметКласу;
клас_Дія: *ПредметКласу;
клас_Код: *ПредметКласу;
клас_Модуль: *ПредметКласу;
клас_Параметр: *ПредметКласу;
клас_Ознака: *ПредметКласу;
клас_ПеребірДаних: *ПредметКласу;
клас_ПеребірПроміжкаЧисел: *ПредметКласу;
клас_ПеребірПослідовності: *ПредметКласу;
клас_ПеребірСловника: *ПредметКласу;
клас_ПеребірСписку: *ПредметКласу;
клас_ПеребірТексту: *ПредметКласу;
клас_Послідовність: *ПредметКласу;
клас_Словник: *ПредметКласу;
клас_Список: *ПредметКласу;
клас_Текст: *ПредметКласу;
клас_Число: *ПредметКласу;
клас_Помилка: *ПредметКласу;
пуста_послідовність: *ПредметПослідовності;
глобальне_середовище: *Середовище;
накопичувач_значень: НакопичувачЗначень;
історія_здійснення: ІсторіяЗдійснення;
стан_падіння: логічне;
значення_падіння: Значення;
місцезнаходження_падіння: Місцезнаходження;
константи_назв: КонстантиНазв;
взяті_значення: ВзятіЗначення;
користувацькі_дані_пристрою: *КористувацькіДані;
користувацькі_дані_бібліотеки: *КористувацькіДані;
черга_здійснення: ЧергаЗдійснення;
глобальний_притримувач: *Притримувач; // перший притримувач
останній_притримувач: *Притримувач;
розмова: *Розмова;
}
дія перетворити_п64_в_кд(М: *Машина, значення: п64, вихід_текстового_значення: *кд) -> логічне;
дія перетворити_ц64_в_кд(М: *Машина, значення: ц64, вихід_текстового_значення: *кд) -> логічне;
дія перетворити_р64_в_кд(М: *Машина, значення: р64, вихід_текстового_значення: *кд) -> логічне;
дія піднести_до_степеня_р64(М: *Машина, значення: р64, степінь: р64) -> р64;
внутрішня дія ЗАПАНІКУВАТИ(М: *Машина, повідомлення: кд) {
М.налаштування.запанікувати(М, повідомлення);
}
внутрішня дія виділити<Т>(М: *Машина, кількість: природне) -> *Т {
вернути М.налаштування.виділити_сиру_памʼять(М, кількість * Т.розмір) як *Т;
}
внутрішня дія перевиділити<Т>(М: *Машина, значення: адреса, нова_кількість: природне) -> *Т {
вернути М.налаштування.перевиділити_сиру_памʼять(М, значення як *п8, нова_кількість * Т.розмір) як *Т;
}
внутрішня дія звільнити(М: *Машина, значення: адреса) -> ніщо {
М.налаштування.звільнити_сиру_памʼять(М, значення як *п8);
}
внутрішня дія вивести_кд(М: *Машина, значення: кд) {
М.налаштування.вивести_кд(М, КолірВиводуСтандартний, значення);
}
внутрішня дія вивести_кольорово(М: *Машина, колір: природне, значення: кд) {
М.налаштування.вивести_кд(М, колір, значення);
}
внутрішня дія надрукувати_кд(М: *Машина, значення: кд) {
вивести_кд(М, значення);
вивести_кд(М, "\р");
}
внутрішня дія надрукувати_кольорово(М: *Машина, колір: природне, значення: кд) {
вивести_кольорово(М, колір, значення);
вивести_кд(М, "\р");
}
внутрішня дія вивести_шлях(М: *Машина, розмір: природне, дані: *п8) {
М.налаштування.вивести_шлях(М, КолірВиводуСтандартний, розмір, дані);
}
внутрішня дія вивести_шлях_кольорово(М: *Машина, колір: природне, розмір: природне, дані: *п8) {
М.налаштування.вивести_шлях(М, колір, розмір, дані);
}
внутрішня дія надрукувати_шлях(М: *Машина, розмір: природне, дані: *п8) {
вивести_шлях(М, розмір, дані);
вивести_кд(М, "\р");
}
внутрішня дія надрукувати_шлях_кольорово(М: *Машина, колір: природне, розмір: природне, дані: *п8) {
вивести_шлях_кольорово(М, колір, розмір, дані);
вивести_кд(М, "\р");
}
внутрішня дія вивести_п64(М: *Машина, значення: п64) {
змінна текстове_значення: кд;
якщо перетворити_п64_в_кд(М, значення, текстове_значення::адреса) {
вивести_кд(М, текстове_значення);
звільнити(М, текстове_значення.дані);
}
}
внутрішня дія надрукувати_п64(М: *Машина, значення: п64) {
вивести_п64(М, значення);
вивести_кд(М, "\р");
}
внутрішня дія вивести_ц64(М: *Машина, значення: ц64) {
змінна текстове_значення: кд;
якщо перетворити_ц64_в_кд(М, значення, текстове_значення::адреса) {
вивести_кд(М, текстове_значення);
звільнити(М, текстове_значення.дані);
}
}
внутрішня дія надрукувати_ц64(М: *Машина, значення: ц64) {
вивести_ц64(М, значення);
вивести_кд(М, "\р");
}
внутрішня дія вивести_р64(М: *Машина, значення: р64) {
змінна текстове_значення: кд;
якщо перетворити_р64_в_кд(М, значення, текстове_значення::адреса) {
вивести_кд(М, текстове_значення);
звільнити(М, текстове_значення.дані);
}
}
внутрішня дія надрукувати_р64(М: *Машина, значення: р64) {
вивести_р64(М, значення);
вивести_кд(М, "\р");
}
внутрішня дія вивести_природне(М: *Машина, значення: природне) {
вивести_п64(М, значення);
}
внутрішня дія отримати_теку_файлу(М: *Машина, шлях_до_файлу: *ПредметДаних, глибина: природне) -> *ПредметДаних {
вернути М.налаштування.отримати_теку_файлу(М, шлях_до_файлу, глибина);
}
внутрішня дія прочитати_файл(М: *Машина, шлях_до_файлу: *ПредметДаних) -> *ПредметДаних {
вернути М.налаштування.прочитати_файл(М, шлях_до_файлу);
}
внутрішня дія перевірити_чи_шлях_починається_на(М: *Машина, шлях: *ПредметДаних, початок: *ПредметДаних) -> логічне {
вернути М.налаштування.перевірити_чи_шлях_починається_на(М, шлях, початок);
}
внутрішня дія отримати_шлях_до_паку_з_шляху_теки_модулів(М: *Машина, шлях_до_теки_модулів: *ПредметДаних, шлях_до_теки_паків: *ПредметДаних, вихід: **ПредметДаних) -> логічне {
вернути М.налаштування.отримати_шлях_до_паку_з_шляху_теки_модулів(М, шлях_до_теки_модулів, шлях_до_теки_паків, вихід);
}
внутрішня дія збити_шлях_до_модуля(М: *Машина, розмір: природне, елементи: **ПредметДаних, вихід: **ПредметДаних) -> логічне {
вернути М.налаштування.збити_шлях_до_модуля(М, розмір, елементи, вихід);
}
дія перекодувати_ю8_в_кд(М: *Машина, значення: ю8, вихід: *кд, вихід_позиції_помилки: *природне) -> логічне;
дія перекодувати_кд_в_ю8(М: *Машина, значення: кд, вихід: *ю8, вихід_позиції_помилки: *природне) -> логічне;
}
простір мавка {
структура Накопичувач<Т> {
розмір: природне;
дані: *Т;
вмісткість: природне;
внутрішня дія покласти(я: *Я, М: *Машина, значення: Т) {
якщо я.розмір == я.вмісткість {
я.вмісткість += 1;
я.дані = перевиділити<Т>(М, я.дані, я.вмісткість);
}
я.дані[я.розмір] = значення;
я.розмір += 1;
}
внутрішня дія обернути(я: *Я) {
змінна п: природне = 0;
поки п < я.розмір / 2 {
змінна тимчасове = я.дані[п];
я.дані[п] = я.дані[я.розмір - п - 1];
я.дані[я.розмір - п - 1] = тимчасове;
п += 1;
}
}
внутрішня дія звільнити_дані(я: *Я, М: *Машина) {
звільнити(М, я.дані);
}
}
внутрішня дія виділити_накопичувач<Т>(М: *Машина, початкова_вмісткість: природне) -> *Накопичувач<Т> {
змінна накопичувач = виділити<Накопичувач<Т>>();
накопичувач.розмір = 0;
якщо початкова_вмісткість > 0 {
накопичувач.дані = виділити<Т>(М, початкова_вмісткість);
} інакше {
накопичувач.дані = пусто;
}
накопичувач.вмісткість = початкова_вмісткість;
вернути накопичувач;
}
внутрішня дія зробити_накопичувач<Т>(М: *Машина, початкова_вмісткість: природне) -> Накопичувач<Т> {
змінна накопичувач: Накопичувач<Т>;
накопичувач.розмір = 0;
якщо початкова_вмісткість > 0 {
накопичувач.дані = виділити<Т>(М, початкова_вмісткість);
} інакше {
накопичувач.дані = пусто;
}
накопичувач.вмісткість = початкова_вмісткість;
вернути накопичувач;
}
}
простір мавка {
внутрішня дія виділити_середовище(М: *Машина) -> *Середовище {
змінна середовище = виділити<Середовище>(М, 1);
середовище.попередня = М.остання_середовище;
середовище.наступна = пусто;
середовище.позначено = ні;
середовище.кількість_запозичень = 0;
середовище.зовні = пусто;
середовище.призначення = Призначення { 0, пусто, 0 };
М.остання_середовище.наступна = середовище;
М.остання_середовище = середовище;
вернути середовище;
}
дія звільнити_призначення(М: *Машина, призначення: Призначення);
дія перебрати_призначення(
М: *Машина,
призначення: Призначення,
дія_перебору: (М: *Машина, призначення: Призначення, назва: *ПредметТексту, значення: Значення, аргумент: адреса) -> логічне,
аргумент: адреса
) -> логічне;
внутрішня дія відпустити_середовище(М: *Машина, середовище: *Середовище) -> ніщо {
середовище.кількість_запозичень -= 1;
якщо середовище.кількість_запозичень == 0 {
якщо середовище.попередня == пусто {
М.перша_середовище = середовище.наступна;
} інакше {
середовище.попередня.наступна = середовище.наступна;
}
якщо середовище.наступна == пусто {
М.остання_середовище = середовище.попередня;
} інакше {
середовище.наступна.попередня = середовище.попередня;
}
якщо середовище.зовні != пусто {
відпустити_середовище(М, середовище.зовні);
}
звільнити_призначення(М, середовище.призначення);
звільнити(М, середовище);
}
}
внутрішня дія виділити_предмет<Т>(М: *Машина, клас: *ПредметКласу) -> *Т {
змінна предмет = виділити<Т>(М, 1);
предмет.наступний = пусто;
предмет.позначено = ні;
предмет.клас = клас;
предмет.користувацькі_дані = пусто;
М.останній_предмет.наступний = предмет як *Предмет;
М.останній_предмет = предмет як *Предмет;
М.кількість_дійсних += 1;
М.потребує_очищення = М.кількість_дійсних >= М.кількість_дійсних_для_очищення;
вернути предмет;
}
// Взяти
дія взяти_файл(М: *Машина, шлях_до_файлу: *ПредметДаних, назва_модуля: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія взяти_модуль(М: *Машина, шлях_до_теки_модулів: *ПредметДаних, відносно: логічне, довжина_шляху: природне, шлях: **ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія взяти_пак(М: *Машина, довжина_шляху: природне, шлях: **ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія взяти_біб(М: *Машина, довжина_шляху: природне, шлях: **ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
// ВзятіЗначення
дія записати_взяте_значення(М: *Машина, шлях: *ПредметДаних, значення: Значення);
дія знайти_взяте_значення(М: *Машина, шлях: *ПредметДаних, вихід_значення: *Значення) -> логічне;
дія видалити_взяте_значення(М: *Машина, шлях: *ПредметДаних) -> логічне;
// Вивід
дія надрукувати_інформацію_падіння(М: *Машина, інформація_падіння: ІнформаціяПадіння);
дія вивести_значення(М: *Машина, значення: Значення, розмір_відступу: природне, глибина: природне);
дія надрукувати_значення(М: *Машина, значення: Значення, розмір_відступу: природне, глибина: природне);
// Середовище
дія створити_середовище(М: *Машина, зовні: *Середовище) -> *Середовище;
дія записати_в_середовище(М: *Машина, середовище: *Середовище, назва: *ПредметТексту, значення: Значення);
дія знайти_в_середовищі(М: *Машина, середовище: *Середовище, назва: *ПредметТексту, вихід_значення: *Значення) -> логічне;
// Призначення
дія призначити(М: *Машина, призначення: *Призначення, назва: *ПредметТексту, значення: Значення);
дія знайти_призначене(М: *Машина, призначення: Призначення, назва: *ПредметТексту, вихід: *Значення) -> логічне;
// Допоміжне
дія розібрати_число_з_кд(М: *Машина, значення: кд, вихід: *р64) -> логічне;
// Задіяні
синонім ДіяПереборуПозиційнихЗадіяних = (М: *Машина, задіяні: Задіяні, розмір_позиційних: п32, позиція: п32, значення: Значення, аргумент: адреса) -> ніщо;
синонім ДіяПереборуІменованихЗадіяних = (М: *Машина, задіяні: Задіяні, позиція: п32, назва: *ПредметТексту, значення: Значення, аргумент: адреса) -> ніщо;
дія знайти_задіяне(М: *Машина, задіяні: Задіяні, позиція: п32, назва: *ПредметТексту, вихід_значення: *Значення) -> логічне;
дія перебрати_позиційні_задіяні(М: *Машина, задіяні: Задіяні, дія_перебору: ДіяПереборуПозиційнихЗадіяних, аргумент: адреса);
дія перебрати_іменовані_задіяні(М: *Машина, задіяні: Задіяні, дія_перебору: ДіяПереборуІменованихЗадіяних, аргумент: адреса);
дія звільнити_задіяні(М: *Машина, задіяні: Задіяні);
// Значення
дія здійснити(М: *Машина, здійснювач: Значення, значення: Значення, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія отримати_властивість(М: *Машина, предмет: Значення, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія змінити_властивість(М: *Машина, предмет: Значення, назва: *ПредметТексту, значення: Значення, місцезнаходження: Місцезнаходження) -> СтанПадіння;
дія здійснити_властивість(М: *Машина, предмет: Значення, назва: *ПредметТексту, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія отримати_елемент(М: *Машина, предмет: Значення, ключ: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія змінити_елемент(М: *Машина, предмет: Значення, ключ: Значення, значення: Значення, місцезнаходження: Місцезнаходження) -> СтанПадіння;
дія отримати_текст(М: *Машина, значення: Значення, місцезнаходження: Місцезнаходження) -> *ПредметТексту;
дія отримати_послідовність(М: *Машина, значення: Значення, місцезнаходження: Місцезнаходження) -> *ПредметПослідовності;
дія отримати_проміжок(М: *Машина, від: Значення, до: Значення, включно: логічне, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія отримати_перебір(М: *Машина, предмет: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія порівняти_значення(М: *Машина, а: Значення, б: Значення) -> логічне;
дія перевірити_чи_предмет_є(М: *Машина, а: *Предмет, б: *ПредметКласу) -> логічне;
// ІнформаціяПадіння
дія отримати_інформацію_падіння(М: *Машина, вихід: *ІнформаціяПадіння) -> логічне;
дія знищити_інформацію_падіння(М: *Машина, інформація_падіння: ІнформаціяПадіння) -> ніщо;
// КористувацькіДані
дія створити_користувацькі_дані(М: *Машина, значення: адреса, дія_перед_знищенням: ДіяПередЗнищеннямКористувацькихДаних) -> *КористувацькіДані;
// Машина
дія налаштувати_машину(М: *Машина, налаштування: Налаштування);
дія розлаштувати_машину(М: *Машина);
дія увімкнути_стан_падіння(М: *Машина, значення_падіння: Значення, місцезнаходження_падіння: Місцезнаходження);
дія вимкнути_стан_падіння(М: *Машина);
дія покласти_в_історію_здійснення(М: *Машина, середовище: *Середовище, здійснювач: Значення, предмет_дії: *ПредметДії, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> *Діяльність;
дія видалити_з_історії_здійснення(М: *Машина, кількість: природне);
дія покласти_в_чергу_здійснення(М: *Машина, предмет_дії: *ПредметДії, задіяні: Задіяні);
дія забрати_з_черги_здійснення(М: *Машина, вихід: *ЕлементЧергиЗдійснення) -> логічне;
// МісцезнаходженняВказівок
дія покласти_місцезнаходження_вказівки(М: *Машина, місцезнаходження_вказівок: *МісцезнаходженняВказівок, рядок: п32, позиція_вказівки: п32);
// НакопичувачТексту
дія зробити_накопичувач_тексту(М: *Машина, вмісткість: природне) -> НакопичувачТексту;
дія покласти_в_накопичувач_тексту(М: *Машина, накопичувач: *НакопичувачТексту, значення: кд);
// Очищувач
дія запустити_очищувач(М: *Машина);
// Притримувач
дія створити_притримувач(М: *Машина) -> *Притримувач;
дія притримати(М: *Машина, притримувач: *Притримувач, предмет: *Предмет) -> *Притриманий;
дія відпустити_притриманий(М: *Машина, притримувач: *Притримувач, притриманий: *Притриманий);
дія притримати_глобально(М: *Машина, предмет: *Предмет) -> *Притриманий;
дія відпустити_притриманий_глобально(М: *Машина, притриманий: *Притриманий);
// Розмова
дія почати_розмову(М: *Машина, шлях_до_файлу_стандартного_входу: *ПредметДаних, читати: ПочатиРозмовуДіяЧитати, обробити_значення: ПочатиРозмовуДіяОбробитиЗначення, обробити_падіння: ПочатиРозмовуДіяОбробитиПадіння);
// Спроби
дія покласти_спробу(М: *Машина, спроби: *Спроби, назва_зловити: *ПредметТексту, позиція_вказівки_зловити: природне) -> *Спроба;
дія видалити_останню_спробу(М: *Машина, спроби: *Спроби);
}
простір мавка {
// ПредметДаних
дія заповнити_клас_Дані(М: *Машина);
дія створити_дані(М: *Машина, розмір: природне, дані: *п8) -> *ПредметДаних;
дія створити_дані_без_копіювання(М: *Машина, розмір: природне, дані: *п8) -> *ПредметДаних;
дія здійснити_клас_даних(М: *Машина, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_даних_отримати_властивість(М: *Машина, предмет_даних: *ПредметДаних, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_даних_отримати_елемент(М: *Машина, предмет_даних: *ПредметДаних, ключ: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_даних_змінити_елемент(М: *Машина, предмет_даних: *ПредметДаних, ключ: Значення, значення: Значення, місцезнаходження: Місцезнаходження) -> СтанПадіння;
// ПредметПроміжкаЧисел
дія заповнити_клас_ПроміжокЧисел(М: *Машина);
дія створити_проміжок_чисел(М: *Машина, від: р64, до: р64, включно: логічне) -> *ПредметПроміжкаЧисел;
дія здійснити_клас_проміжка_чисел(М: *Машина, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_проміжка_чисел_отримати_властивість(М: *Машина, предмет_проміжка_чисел: *ПредметПроміжкаЧисел, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
// ПредметДії
дія заповнити_клас_Дія(М: *Машина);
дія створити_дію(М: *Машина, середовище_створення: *Середовище, назва: *ПредметТексту, параметри: *ПредметПослідовності, тип_результату: *Предмет, код: *ПредметКоду, шлях_до_теки_модулів: *ПредметДаних) -> *ПредметДії;
дія створити_рідну_дію(М: *Машина, назва: *ПредметТексту, параметри: *ПредметПослідовності, тип_результату: *Предмет, рідна_дія: РіднаДія, шлях_до_теки_модулів: *ПредметДаних) -> *ПредметДії;
дія здійснити_клас_дії(М: *Машина, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_дії_здійснити(М: *Машина, здійснювач: Значення, предмет_дії: *ПредметДії, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_дії_отримати_властивість(М: *Машина, предмет_дії: *ПредметДії, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
// ПредметКоду
дія заповнити_клас_Код(М: *Машина);
дія створити_код(М: *Машина, константи: *ПредметПослідовності, вказівки: *ПредметДаних, шлях: *ПредметДаних, місцезнаходження_вказівок: МісцезнаходженняВказівок) -> *ПредметКоду;
дія знайти_рядок_вказівки(місцезнаходження_вказівок: МісцезнаходженняВказівок, позиція_вказівки: п32) -> п32;
// ПредметМодуля
дія заповнити_клас_Модуль(М: *Машина);
дія створити_модуль(М: *Машина, назва: *ПредметТексту) -> *ПредметМодуля;
дія здійснити_клас_модуля(М: *Машина, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія записати_властивість_модуля(М: *Машина, предмет_модуля: *ПредметМодуля, назва: *ПредметТексту, значення: Значення);
дія предмет_модуля_отримати_властивість(М: *Машина, предмет_модуля: *ПредметМодуля, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
// ПредметПараметра
дія заповнити_клас_Параметр(М: *Машина);
дія створити_параметр(М: *Машина, назва: *ПредметТексту, тип: *Предмет, значення: Значення) -> *ПредметПараметра;
дія здійснити_клас_параметра(М: *Машина, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_параметра_отримати_властивість(М: *Машина, предмет_параметра: *ПредметПараметра, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
// ПредметОзнаки
дія заповнити_клас_Ознака(М: *Машина);
дія створити_ознаку(М: *Машина, назва: *ПредметТексту, тип: *Предмет, значення: Значення) -> *ПредметОзнаки;
дія здійснити_клас_ознаки(М: *Машина, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_ознаки_отримати_властивість(М: *Машина, предмет_ознаки: *ПредметОзнаки, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
// ПредметПереборуДаних
дія заповнити_клас_ПеребірДаних(М: *Машина);
дія створити_перебір_даних(М: *Машина, предмет_даних: *ПредметДаних) -> *ПредметПереборуДаних;
дія здійснити_клас_перебору_даних(М: *Машина, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_перебору_даних_отримати_властивість(М: *Машина, предмет_перебору_даних: *ПредметПереборуДаних, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
// ПредметПереборуПроміжкаЧисел
дія заповнити_клас_ПеребірПроміжкаЧисел(М: *Машина);
дія створити_перебір_проміжка_чисел(М: *Машина, предмет_проміжка: *ПредметПроміжкаЧисел) -> *ПредметПереборуПроміжкаЧисел;
дія здійснити_клас_перебору_проміжка_чисел(М: *Машина, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_перебору_проміжка_чисел_отримати_властивість(М: *Машина, предмет_перебору_проміжка_чисел: *ПредметПереборуПроміжкаЧисел, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
// ПредметПереборуПослідовності
дія заповнити_клас_ПеребірПослідовності(М: *Машина);
дія створити_перебір_послідовності(М: *Машина, предмет_послідовності: *ПредметПослідовності) -> *ПредметПереборуПослідовності;
дія здійснити_клас_перебору_послідовності(М: *Машина, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_перебору_послідовності_отримати_властивість(М: *Машина, предмет_перебору_послідовності: *ПредметПереборуПослідовності, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
// ПредметПереборуСловника
дія заповнити_клас_ПеребірСловника(М: *Машина);
дія створити_перебір_словника(М: *Машина, предмет_словника: *ПредметСловника) -> *ПредметПереборуСловника;
дія здійснити_клас_перебору_словника(М: *Машина, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_перебору_словника_отримати_властивість(М: *Машина, предмет_перебору_словника: *ПредметПереборуСловника, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
// ПредметПереборуСписку
дія заповнити_клас_ПеребірСписку(М: *Машина);
дія створити_перебір_списку(М: *Машина, предмет_списку: *ПредметСписку) -> *ПредметПереборуСписку;
дія здійснити_клас_перебору_списку(М: *Машина, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_перебору_списку_отримати_властивість(М: *Машина, предмет_перебору_списку: *ПредметПереборуСписку, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
// ПредметПереборуТексту
дія заповнити_клас_ПеребірТексту(М: *Машина);
дія створити_перебір_тексту(М: *Машина, предмет_тексту: *ПредметТексту) -> *ПредметПереборуТексту;
дія здійснити_клас_перебору_тексту(М: *Машина, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_перебору_тексту_отримати_властивість(М: *Машина, предмет_перебору_тексту: *ПредметПереборуТексту, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
// ПредметПослідовності
дія заповнити_клас_Послідовність(М: *Машина);
дія створити_послідовність(М: *Машина, розмір: природне, елементи: *Значення) -> *ПредметПослідовності;
дія створити_послідовність_без_копіювання(М: *Машина, розмір: природне, елементи: *Значення) -> *ПредметПослідовності;
дія створити_сиру_послідовність(М: *Машина, розмір: природне) -> *ПредметПослідовності;
дія здійснити_клас_послідовності(М: *Машина, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_послідовності_отримати_властивість(М: *Машина, предмет_послідовності: *ПредметПослідовності, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_послідовності_отримати_елемент(М: *Машина, предмет_послідовності: *ПредметПослідовності, ключ: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
внутрішня дія порівняти_послідовності(М: *Машина, а: *ПредметПослідовності, б: *ПредметПослідовності) -> логічне;
// ПредметСловника
дія заповнити_клас_Словник(М: *Машина);
дія створити_словник(М: *Машина) -> *ПредметСловника;
дія здійснити_клас_словника(М: *Машина, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_словника_отримати_властивість(М: *Машина, предмет_словника: *ПредметСловника, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_словника_отримати_елемент(М: *Машина, предмет_словника: *ПредметСловника, ключ: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_словника_змінити_елемент(М: *Машина, предмет_словника: *ПредметСловника, ключ: Значення, значення_елемента: Значення, місцезнаходження: Місцезнаходження) -> СтанПадіння;
дія записати_в_словник(М: *Машина, словник: *ПредметСловника, ключ: Значення, значення: Значення);
// ПредметСписку
дія заповнити_клас_Список(М: *Машина);
дія створити_список(М: *Машина, розмір: природне) -> *ПредметСписку;
дія здійснити_клас_списку(М: *Машина, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_списку_отримати_властивість(М: *Машина, предмет_списку: *ПредметСписку, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_списку_отримати_елемент(М: *Машина, предмет_списку: *ПредметСписку, ключ: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_списку_змінити_елемент(М: *Машина, предмет_списку: *ПредметСписку, ключ: Значення, значення_елемента: Значення, місцезнаходження: Місцезнаходження) -> СтанПадіння;
дія записати_в_список(М: *Машина, предмет_списку: *ПредметСписку, позиція: природне, значення: Значення);
// ПредметКласу
дія заповнити_клас_Клас(М: *Машина);
дія створити_клас(М: *Машина, назва: *ПредметТексту, ознаки: *ПредметПослідовності) -> *ПредметКласу;
дія змінити_властивість_класу(М: *Машина, предмет_класу: *ПредметКласу, назва: *ПредметТексту, значення: Значення);
дія клас_здійснити(М: *Машина, значення: *ПредметКласу, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія знайти_метод_в_класі(М: *Машина, предмет_класу: *ПредметКласу, назва: *ПредметТексту) -> *ПредметДії;
дія записати_метод_класу(М: *Машина, предмет_класу: *ПредметКласу, назва: *ПредметТексту, значення_дії: *ПредметДії);
дія клас_отримати_властивість(М: *Машина, предмет_класу: *ПредметКласу, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія клас_змінити_властивість(М: *Машина, предмет_класу: *ПредметКласу, назва: *ПредметТексту, значення: Значення, місцезнаходження: Місцезнаходження) -> СтанПадіння;
// ПредметТексту
дія заповнити_клас_Текст(М: *Машина);
дія створити_текст(М: *Машина, значення: кд) -> *ПредметТексту;
дія створити_текст_без_копіювання(М: *Машина, розмір: природне, дані: *п8) -> *ПредметТексту;
дія здійснити_клас_тексту(М: *Машина, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_тексту_отримати_властивість(М: *Машина, предмет_тексту: *ПредметТексту, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_тексту_отримати_елемент(М: *Машина, предмет_тексту: *ПредметТексту, ключ: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
внутрішня дія порівняти_тексти(М: *Машина, а: *ПредметТексту, б: *ПредметТексту) -> логічне;
// ПредметЧисла
дія заповнити_клас_Число(М: *Машина);
дія створити_число(М: *Машина, значення: р64) -> Значення;
дія здійснити_клас_числа(М: *Машина, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_числа_отримати_властивість(М: *Машина, значення: р64, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
// Помилка
дія заповнити_клас_Помилка(М: *Машина);
дія створити_помилку(М: *Машина, повідомлення: *ПредметТексту) -> *Предмет;
// СкладенийПредмет
дія створити_складений_предмет(М: *Машина, предмет_класу: *ПредметКласу) -> *СкладенийПредмет;
дія складений_предмет_отримати_властивість(М: *Машина, складений_предмет: *СкладенийПредмет, назва: *ПредметТексту, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія складений_предмет_змінити_властивість(М: *Машина, складений_предмет: *СкладенийПредмет, назва: *ПредметТексту, значення: Значення, місцезнаходження: Місцезнаходження) -> СтанПадіння;
}
простір мавка {
внутрішня дія ПАДІННЯ(М: *Машина, предмет_тексту: *ПредметТексту) -> Значення {
увімкнути_стан_падіння(
М,
ПРЕДМЕТ(предмет_тексту),
Місцезнаходження { пусто, 0 }
);
вернути НЕДІЙСНЕ;
}
внутрішня дія МІСЦЕПАДІННЯ(М: *Машина, предмет_тексту: *ПредметТексту, місцезнаходження: Місцезнаходження) -> Значення {
увімкнути_стан_падіння(
М,
ПРЕДМЕТ(предмет_тексту),
місцезнаходження
);
вернути НЕДІЙСНЕ;
}
внутрішня дія МІСЦЕю8(М: *Машина, шлях: ю8, рядок: природне) -> Місцезнаходження {
змінна дані_шляху = створити_дані(
М,
шлях.розмір,
шлях.дані,
);
вернути Місцезнаходження { дані_шляху, рядок };
}
}
простір мавка {
внутрішня дія порівняти_тексти(
М: *Машина,
а: *ПредметТексту,
б: *ПредметТексту
) -> логічне {
якщо а == б {
вернути так;
}
якщо а.значення.розмір != б.значення.розмір {
вернути ні;
}
змінна п: природне = 0;
поки п < а.значення.розмір {
якщо а.значення.дані[п] != б.значення.дані[п] {
вернути ні;
}
п += 1;
}
вернути так;
}
внутрішня дія порівняти_послідовності(
М: *Машина,
а: *ПредметПослідовності,
б: *ПредметПослідовності
) -> логічне {
якщо а == б {
вернути так;
}
якщо а.розмір != б.розмір {
вернути ні;
}
змінна п: природне = 0;
поки п < а.розмір {
якщо не порівняти_значення(М, а.елементи[п], б.елементи[п]) {
вернути ні;
}
п += 1;
}
вернути так;
}
}