/* Машина Мавки */
// 2025-2026 Богданович Давид Когут Прихожденко (кдб.дійсність.укр)
простір мавка {
структура Місцезнаходження;
структура Притриманий;
структура Притримувач;
структура КористувацькіДані;
структура Предмет;
структура ПредметПослідовності;
структура Дійсність;
структура ПредметДаних;
структура ПредметДіапазонуЧисел;
структура ПредметДії;
структура ПредметКоду;
структура ПредметМодуля;
структура ПредметПараметра;
структура ПредметПереборуДіапазонуЧисел;
структура ПредметПереборуСписку;
структура ПредметСловника;
структура ПредметСписку;
структура ПредметСтруктури;
структура ПредметТексту;
структура СкладенийПредмет;
структура Машина;
стала ЗНедійсне = 0;
стала ЗДійсне = 1;
стала ЗЧисло = 2;
стала ЗПредмет = 3;
структура Значення {
дані: адреса<Предмет> | р64;
вид: п8;
}
стала НЕДІЙСНЕ = Значення { дані = пусто як адреса<Предмет>, вид = ЗНедійсне };
стала ДІЙСНЕ = Значення { дані = пусто як адреса<Предмет>, вид = ЗДійсне };
внутрішня дія ЧИСЛО(значення: р64) -> Значення {
вернути Значення { дані = значення, вид = ЗЧисло };
}
внутрішня дія ПРЕДМЕТ(предмет: невідома_адреса) -> Значення {
вернути Значення { дані = предмет як адреса<Предмет>, вид = ЗПредмет };
}
внутрішня дія ЛОГЛОГ(значення: логічне) -> Значення {
якщо значення {
вернути ДІЙСНЕ;
} інакше {
вернути НЕДІЙСНЕ;
}
}
внутрішня дія ЧИ(значення: Значення) -> логічне {
якщо значення.вид == ЗНедійсне {
вернути ні;
}
якщо значення.вид == ЗЧисло {
вернути (значення.дані як р64) != 0.0;
}
вернути так;
}
синонім ЗначенняАбоСтанПадіння = Значення;
синонім СтанПадіння = ніщо;
стала ВПокластиНедійсне = 0; // []() -> [недійсне]
стала ВПокластиДійсне = 1; // []() -> [дійсне]
стала ВПокластиПредмет = 3; // []() -> [Предмет]
стала ВПокластиЯ = 4; // []() -> [значення_я]
стала ВПокластиКонстанту = 5; // [](позиція_константи) -> [константа]
стала ВСтворитиПослідовність = 6; // [...](кількість_елементів) -> [значення_послідовності]
стала ВСтворитиДію = 7; // [назва, ..., тип_результату, код](кількість_параметрів) -> [предмет_дії]
стала ВСтворитиСтруктуру = 8; // [назва, ...](кількість_параметрів) -> [предмет_структури]
стала ВСтворитиМодуль = 9; // [назва, код]() -> [предмет_модуля]
стала ВСтворитиСписок = 10; // [...](кількість_елементів) -> [предмет_списку]
стала ВСтворитиСловник = 11; // [...](кількість_елементів) -> [предмет_словника]
стала ВСтворитиДіапазон = 12; // [від, включно, до]() -> [предмет_діапазону]
стала ВСтворитиПараметр = 13; // [назва, тип, дія_значення]() -> [параметр]
стала ВСтворитиТип = 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>;
вмісткість: природне;
}
структура Предмет {
наступний: адреса<Предмет>;
позначено: логічне;
с: адреса<ПредметСтруктури>;
користувацькі_дані: адреса<КористувацькіДані>;
}
структура ПредметПослідовності {
наступний: адреса<Предмет>;
позначено: логічне;
с: адреса<ПредметСтруктури>;
користувацькі_дані: адреса<КористувацькіДані>;
розмір: природне;
елементи: адреса<Значення>;
}
структура Призначене;
структура Призначене {
наступний: адреса<Призначене>;
назва: адреса<ПредметТексту>;
значення: Значення;
}
структура Призначення {
розмір: природне;
дані: адреса<адреса<Призначене>>;
вмісткість: природне;
}
структура Дійсність {
попередня: адреса<Дійсність>;
наступна: адреса<Дійсність>;
позначено: логічне;
кількість_запозичень: природне;
зовні: адреса<Дійсність>;
призначення: Призначення;
}
структура Метод {
назва: адреса<ПредметТексту>;
значення: адреса<ПредметДії>;
}
структура Методи {
розмір: природне;
дані: адреса<Метод>;
}
структура ІменованоЗадіяне {
назва: адреса<ПредметТексту>;
значення: Значення;
}
структура ІменованіЗадіяні {
розмір: природне;
елементи: адреса<ІменованоЗадіяне>;
}
структура Задіяні {
розмір: природне;
дані: адреса<Значення>;
розмір_імен: природне;
дані_імен: адреса<адреса<ПредметТексту>>;
}
структура Діяльність;
синонім РіднаДія = (
М: адреса<Машина>,
діяльність: адреса<Діяльність>
) -> ЗначенняАбоСтанПадіння;
структура ЕлементСловника {
ключ: Значення;
значення: Значення;
}
структура ПредметСтруктури {
наступний: адреса<Предмет>;
позначено: логічне;
с: адреса<ПредметСтруктури>;
користувацькі_дані: адреса<КористувацькіДані>;
вбудована: логічне;
заборонити_наслідування: логічне;
назва: адреса<ПредметТексту>;
параметри: адреса<ПредметПослідовності>;
методи: Методи;
властивості: Призначення;
}
структура ПредметДії {
наступний: адреса<Предмет>;
позначено: логічне;
с: адреса<ПредметСтруктури>;
користувацькі_дані: адреса<КористувацькіДані>;
дійсність_створення: адреса<Дійсність>;
рідна: логічне;
назва: адреса<ПредметТексту>;
параметри: адреса<ПредметПослідовності>;
тип_результату: адреса<Предмет>;
код: адреса<ПредметКоду> | РіднаДія;
метод_структури: адреса<ПредметСтруктури>;
шлях_до_теки_модулів: адреса<ПредметДаних>;
}
структура ПредметСписку {
наступний: адреса<Предмет>;
позначено: логічне;
с: адреса<ПредметСтруктури>;
користувацькі_дані: адреса<КористувацькіДані>;
розмір: природне;
елементи: адреса<Значення>;
}
структура ПредметСловника {
наступний: адреса<Предмет>;
позначено: логічне;
с: адреса<ПредметСтруктури>;
користувацькі_дані: адреса<КористувацькіДані>;
розмір: природне;
елементи: адреса<ЕлементСловника>;
}
структура ПредметМодуля {
наступний: адреса<Предмет>;
позначено: логічне;
с: адреса<ПредметСтруктури>;
користувацькі_дані: адреса<КористувацькіДані>;
готовий: логічне;
назва: адреса<ПредметТексту>;
властивості: Призначення;
}
структура ПредметПараметра {
наступний: адреса<Предмет>;
позначено: логічне;
с: адреса<ПредметСтруктури>;
користувацькі_дані: адреса<КористувацькіДані>;
назва: адреса<ПредметТексту>;
тип: невідома_адреса;
дія_значення: адреса<ПредметДії>;
}
структура ПредметТексту {
наступний: адреса<Предмет>;
позначено: логічне;
с: адреса<ПредметСтруктури>;
користувацькі_дані: адреса<КористувацькіДані>;
значення: кд;
}
структура МісцезнаходженняВказівки {
початок: п32;
кінець: п32;
рядок: п32;
}
структура МісцезнаходженняВказівок {
розмір: природне;
дані: адреса<МісцезнаходженняВказівки>;
}
структура ПредметКоду {
наступний: адреса<Предмет>;
позначено: логічне;
с: адреса<ПредметСтруктури>;
користувацькі_дані: адреса<КористувацькіДані>;
константи: адреса<ПредметПослідовності>;
вказівки: адреса<ПредметДаних>;
шлях: адреса<ПредметДаних>;
місцезнаходження_вказівок: МісцезнаходженняВказівок;
}
структура ПредметДаних {
наступний: адреса<Предмет>;
позначено: логічне;
с: адреса<ПредметСтруктури>;
користувацькі_дані: адреса<КористувацькіДані>;
розмір: природне;
дані: адреса<п8>;
}
структура ПредметДіапазонуЧисел {
наступний: адреса<Предмет>;
позначено: логічне;
с: адреса<ПредметСтруктури>;
користувацькі_дані: адреса<КористувацькіДані>;
від: р64;
до: р64;
включно: логічне;
}
структура ПредметПереборуДаних {
наступний: адреса<Предмет>;
позначено: логічне;
с: адреса<ПредметСтруктури>;
користувацькі_дані: адреса<КористувацькіДані>;
предмет_даних: адреса<ПредметДаних>;
почато: логічне;
позиція: природне;
поточне_значення: р64;
}
структура ПредметПереборуДіапазонуЧисел {
наступний: адреса<Предмет>;
позначено: логічне;
с: адреса<ПредметСтруктури>;
користувацькі_дані: адреса<КористувацькіДані>;
предмет_діапазону: адреса<ПредметДіапазонуЧисел>;
почато: логічне;
поточне_значення: р64;
}
структура ПредметПереборуПослідовності {
наступний: адреса<Предмет>;
позначено: логічне;
с: адреса<ПредметСтруктури>;
користувацькі_дані: адреса<КористувацькіДані>;
предмет_послідовності: адреса<ПредметПослідовності>;
почато: логічне;
позиція: природне;
поточне_значення: Значення;
}
структура ПредметПереборуСловника {
наступний: адреса<Предмет>;
позначено: логічне;
с: адреса<ПредметСтруктури>;
користувацькі_дані: адреса<КористувацькіДані>;
предмет_словника: адреса<ПредметСловника>;
почато: логічне;
позиція: природне;
поточне_значення: Значення;
}
структура ПредметПереборуСписку {
наступний: адреса<Предмет>;
позначено: логічне;
с: адреса<ПредметСтруктури>;
користувацькі_дані: адреса<КористувацькіДані>;
предмет_списку: адреса<ПредметСписку>;
почато: логічне;
позиція: природне;
поточне_значення: Значення;
}
структура ПредметПереборуТексту {
наступний: адреса<Предмет>;
позначено: логічне;
с: адреса<ПредметСтруктури>;
користувацькі_дані: адреса<КористувацькіДані>;
предмет_тексту: адреса<ПредметТексту>;
почато: логічне;
позиція: природне;
поточне_значення: р64;
}
структура СкладенийПредмет {
наступний: адреса<Предмет>;
позначено: логічне;
с: адреса<ПредметСтруктури>;
користувацькі_дані: адреса<КористувацькіДані>;
властивості: Призначення;
}
структура Налаштування {
виділити_сиру_памʼять: (М: адреса<Машина>, розмір: природне) -> адреса<п8>;
перевиділити_сиру_памʼять: (М: адреса<Машина>, значення: адреса<п8>, новий_розмір: природне) -> адреса<п8>;
звільнити_сиру_памʼять: (М: адреса<Машина>, значення: адреса<п8>) -> ніщо;
запанікувати: (М: адреса<Машина>, повідомлення: кд) -> ніщо;
вивести_кд: (М: адреса<Машина>, значення: кд) -> ніщо;
перетворити_п64_в_кд: (М: адреса<Машина>, значення: п64, вихід_текстового_значення: адреса<кд>) -> логічне;
перетворити_ц64_в_кд: (М: адреса<Машина>, значення: ц64, вихід_текстового_значення: адреса<кд>) -> логічне;
перетворити_р64_в_кд: (М: адреса<Машина>, значення: р64, вихід_текстового_значення: адреса<кд>) -> логічне;
піднести_до_степеня_п64: (М: адреса<Машина>, значення: п64, степінь: п64) -> п64;
піднести_до_степеня_ц64: (М: адреса<Машина>, значення: ц64, степінь: ц64) -> ц64;
піднести_до_степеня_р64: (М: адреса<Машина>, значення: р64, степінь: р64) -> р64;
взяти_модуль: (М: адреса<Машина>, шлях_до_теки_модулів: адреса<ПредметДаних>, відносно: логічне, довжина_шляху: природне, шлях: адреса<адреса<ПредметТексту>>, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
взяти_пак: (М: адреса<Машина>, довжина_шляху: природне, шлях: адреса<адреса<ПредметТексту>>, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
взяти_біб: (М: адреса<Машина>, довжина_шляху: природне, шлях: адреса<адреса<ПредметТексту>>, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
}
структура НакопичувачЗначень {
розмір: природне;
дані: адреса<Значення>;
вмісткість: природне;
}
структура Спроба {
назва_зловити: адреса<ПредметТексту>;
позиція_вказівки_зловити: природне;
розмір_історії_здійснення: природне;
розмір_накопичувача_значень: природне;
}
структура Спроби {
розмір: природне;
дані: адреса<Спроба>;
}
структура Діяльність {
дійсність: адреса<Дійсність>;
здійснювач: Значення;
предмет_дії: адреса<ПредметДії>;
задіяні: Задіяні;
місцезнаходження: Місцезнаходження;
спроби: Спроби;
}
структура ІсторіяЗдійснення {
розмір: природне;
дані: адреса<Діяльність>;
вмісткість: природне;
}
структура МісцезнаходженняІнформаціїПадіння {
шлях: адреса<ПредметДаних>;
рядок: природне;
}
структура ЕлементІсторіїЗдійсненняІнформаціїПадіння {
місцезнаходження: МісцезнаходженняІнформаціїПадіння;
назва: адреса<ПредметТексту>;
}
структура ІнформаціяПадіння {
значення: Значення;
місцезнаходження: МісцезнаходженняІнформаціїПадіння;
розмір_історії: природне;
історія: адреса<ЕлементІсторіїЗдійсненняІнформаціїПадіння>;
}
структура КонстантиНазв {
_значення: адреса<ПредметТексту>;
_недійсне: адреса<ПредметТексту>;
_дійсне: адреса<ПредметТексту>;
_Послідовність: адреса<ПредметТексту>;
_дійсність: адреса<ПредметТексту>;
_Предмет: адреса<ПредметТексту>;
_Структура: адреса<ПредметТексту>;
_Модуль: адреса<ПредметТексту>;
_Параметр: адреса<ПредметТексту>;
_Число: адреса<ПредметТексту>;
_Текст: адреса<ПредметТексту>;
_Код: адреса<ПредметТексту>;
_Дія: адреса<ПредметТексту>;
_Список: адреса<ПредметТексту>;
_Словник: адреса<ПредметТексту>;
_Дані: адреса<ПредметТексту>;
_ДіапазонЧисел: адреса<ПредметТексту>;
_ПеребірДіапазонуЧисел: адреса<ПредметТексту>;
_ПеребірСписку: адреса<ПредметТексту>;
_далі: адреса<ПредметТексту>;
_з: адреса<ПредметТексту>;
_довжина: адреса<ПредметТексту>;
_0: адреса<ПредметТексту>;
_1: адреса<ПредметТексту>;
_модуль: адреса<ПредметТексту>;
_пак: адреса<ПредметТексту>;
_біб: адреса<ПредметТексту>;
_математика: адреса<ПредметТексту>;
_читати: адреса<ПредметТексту>;
_перед: адреса<ПредметТексту>;
_розмір: адреса<ПредметТексту>;
_чародія: адреса<ПредметТексту>;
_чародія_число: адреса<ПредметТексту>;
_чародія_текст: адреса<ПредметТексту>;
_чародія_діапазон: адреса<ПредметТексту>;
_чародія_перебір: адреса<ПредметТексту>;
_дія_перевірки: адреса<ПредметТексту>;
_дія_перетворення: адреса<ПредметТексту>;
_додати: адреса<ПредметТексту>;
_забрати: адреса<ПредметТексту>;
_знайти: адреса<ПредметТексту>;
_знайти_позицію: адреса<ПредметТексту>;
_фільтрований: адреса<ПредметТексту>;
_перетворений: адреса<ПредметТексту>;
_обернений: адреса<ПредметТексту>;
_містить: адреса<ПредметТексту>;
_ключ: адреса<ПредметТексту>;
_ключі: адреса<ПредметТексту>;
_список: адреса<ПредметТексту>;
_словник: адреса<ПредметТексту>;
_послідовність: адреса<ПредметТексту>;
_дані: адреса<ПредметТексту>;
_діапазон: адреса<ПредметТексту>;
_ПеребірПослідовності: адреса<ПредметТексту>;
_ПеребірДаних: адреса<ПредметТексту>;
_назва: адреса<ПредметТексту>;
_параметри: адреса<ПредметТексту>;
_тип_результату: адреса<ПредметТексту>;
_код: адреса<ПредметТексту>;
_константи: адреса<ПредметТексту>;
_вказівки: адреса<ПредметТексту>;
_шлях: адреса<ПредметТексту>;
_ПеребірСловника: адреса<ПредметТексту>;
_Е: адреса<ПредметТексту>;
_ПІ: адреса<ПредметТексту>;
_ЛОГ2Е: адреса<ПредметТексту>;
_ЛОГ10Е: адреса<ПредметТексту>;
_ЛОГ2: адреса<ПредметТексту>;
_ЛОГ10: адреса<ПредметТексту>;
_КОРІНЬ2: адреса<ПредметТексту>;
_КОРІНЬ1_2: адреса<ПредметТексту>;
_синус: адреса<ПредметТексту>;
_косинус: адреса<ПредметТексту>;
_тангенс: адреса<ПредметТексту>;
_арксинус: адреса<ПредметТексту>;
_арккосинус: адреса<ПредметТексту>;
_арктангенс: адреса<ПредметТексту>;
_арктангенс2: адреса<ПредметТексту>;
_абсолютне: адреса<ПредметТексту>;
_експонента: адреса<ПредметТексту>;
_корінь: адреса<ПредметТексту>;
_стеля: адреса<ПредметТексту>;
_підлога: адреса<ПредметТексту>;
_округлити: адреса<ПредметТексту>;
_ПеребірТексту: адреса<ПредметТексту>;
_текст: адреса<ПредметТексту>;
_нескінченність: адреса<ПредметТексту>;
_невизначеність: адреса<ПредметТексту>;
_система: адреса<ПредметТексту>;
_прочитати: адреса<ПредметТексту>;
_тип: адреса<ПредметТексту>;
_записати: адреса<ПредметТексту>;
_куди: адреса<ПредметТексту>;
_дописати: адреса<ПредметТексту>;
_видалити: адреса<ПредметТексту>;
_створити_папку: адреса<ПредметТексту>;
_виконати: адреса<ПредметТексту>;
_аргументи: адреса<ПредметТексту>;
_РезультатВиконання: адреса<ПредметТексту>;
_стдвив: адреса<ПредметТексту>;
_стдпом: адреса<ПредметТексту>;
_команда: адреса<ПредметТексту>;
_с: адреса<ПредметТексту>;
_місцезнаходження_вказівок: адреса<ПредметТексту>;
_від: адреса<ПредметТексту>;
_до: адреса<ПредметТексту>;
_включно: адреса<ПредметТексту>;
_дія_значення: адреса<ПредметТексту>;
_позиція: адреса<ПредметТексту>;
}
структура ВзятеЗначення {
шлях: адреса<ПредметДаних>;
значення: Значення;
}
структура ВзятіЗначення {
розмір: природне;
дані: адреса<ВзятеЗначення>;
}
структура ЕлементЧергиЗдійснення;
структура ЕлементЧергиЗдійснення {
наступний: адреса<ЕлементЧергиЗдійснення>;
значення: Значення;
задіяні: Задіяні;
}
структура ЧергаЗдійснення {
перший: адреса<ЕлементЧергиЗдійснення>;
останній: адреса<ЕлементЧергиЗдійснення>;
}
структура Машина {
налаштування: Налаштування;
перша_дійсність: адреса<Дійсність>;
остання_дійсність: адреса<Дійсність>;
перший_предмет: адреса<Предмет>;
останній_предмет: адреса<Предмет>;
кількість_дійсних: природне;
кількість_дійсних_для_очищення: природне;
потребує_очищення: логічне;
предмет_структури_Структура: адреса<ПредметСтруктури>;
предмет_структури_Дані: адреса<ПредметСтруктури>;
предмет_структури_ДіапазонЧисел: адреса<ПредметСтруктури>;
предмет_структури_Дія: адреса<ПредметСтруктури>;
предмет_структури_Код: адреса<ПредметСтруктури>;
предмет_структури_Модуль: адреса<ПредметСтруктури>;
предмет_структури_Параметр: адреса<ПредметСтруктури>;
предмет_структури_ПеребірДаних: адреса<ПредметСтруктури>;
предмет_структури_ПеребірДіапазонуЧисел: адреса<ПредметСтруктури>;
предмет_структури_ПеребірПослідовності: адреса<ПредметСтруктури>;
предмет_структури_ПеребірСловника: адреса<ПредметСтруктури>;
предмет_структури_ПеребірСписку: адреса<ПредметСтруктури>;
предмет_структури_ПеребірТексту: адреса<ПредметСтруктури>;
предмет_структури_Послідовність: адреса<ПредметСтруктури>;
предмет_структури_Словник: адреса<ПредметСтруктури>;
предмет_структури_Список: адреса<ПредметСтруктури>;
предмет_структури_Текст: адреса<ПредметСтруктури>;
предмет_структури_Число: адреса<ПредметСтруктури>;
предмет_пустої_послідовності: адреса<ПредметПослідовності>;
глобальна_дійсність: адреса<Дійсність>;
накопичувач_значень: НакопичувачЗначень;
історія_здійснення: ІсторіяЗдійснення;
стан_падіння: логічне;
значення_падіння: Значення;
місцезнаходження_падіння: Місцезнаходження;
константи_назв: КонстантиНазв;
взяті_значення: ВзятіЗначення;
користувацькі_дані_пристрою: адреса<КористувацькіДані>;
користувацькі_дані_бібліотеки: адреса<КористувацькіДані>;
черга_здійснення: ЧергаЗдійснення;
глобальний_притримувач: адреса<Притримувач>; // перший притримувач
останній_притримувач: адреса<Притримувач>;
}
внутрішня дія ЗАПАНІКУВАТИ(М: адреса<Машина>, повідомлення: кд) {
М.налаштування.запанікувати(М, повідомлення);
}
внутрішня дія виділити<Т>(М: адреса<Машина>, кількість: природне) -> адреса<Т> {
вернути М.налаштування.виділити_сиру_памʼять(М, кількість * Т.розмір) як адреса<Т>;
}
внутрішня дія перевиділити<Т>(М: адреса<Машина>, значення: адреса<ніщо>, нова_кількість: природне) -> адреса<Т> {
вернути М.налаштування.перевиділити_сиру_памʼять(М, значення як адреса<п8>, нова_кількість * Т.розмір) як адреса<Т>;
}
внутрішня дія звільнити(М: адреса<Машина>, значення: адреса<ніщо>) -> ніщо {
М.налаштування.звільнити_сиру_памʼять(М, значення як адреса<п8>);
}
внутрішня дія вивести_кд(М: адреса<Машина>, значення: кд) {
М.налаштування.вивести_кд(М, значення);
}
внутрішня дія надрукувати_кд(М: адреса<Машина>, значення: кд) {
вивести_кд(М, значення);
вивести_кд(М, "\р");
}
внутрішня дія перетворити_п64_в_кд(М: адреса<Машина>, значення: п64, вихід_текстового_значення: адреса<кд>) -> логічне {
вернути М.налаштування.перетворити_п64_в_кд(М, значення, вихід_текстового_значення);
}
внутрішня дія перетворити_ц64_в_кд(М: адреса<Машина>, значення: ц64, вихід_текстового_значення: адреса<кд>) -> логічне {
вернути М.налаштування.перетворити_ц64_в_кд(М, значення, вихід_текстового_значення);
}
внутрішня дія перетворити_р64_в_кд(М: адреса<Машина>, значення: р64, вихід_текстового_значення: адреса<кд>) -> логічне {
вернути М.налаштування.перетворити_р64_в_кд(М, значення, вихід_текстового_значення);
}
внутрішня дія вивести_п64(М: адреса<Машина>, значення: п64) {
змінна текстове_значення: кд;
якщо перетворити_п64_в_кд(М, значення, текстове_значення::адреса) {
вивести_кд(М, текстове_значення);
звільнити(М, текстове_значення.дані);
}
}
внутрішня дія надрукувати_п64(М: адреса<Машина>, значення: п64) {
вивести_п64(М, значення);
вивести_кд(М, "\р");
}
внутрішня дія вивести_ц64(М: адреса<Машина>, значення: ц64) {
змінна текстове_значення: кд;
якщо перетворити_ц64_в_кд(М, значення, текстове_значення::адреса) {
вивести_кд(М, текстове_значення);
звільнити(М, текстове_значення.дані);
}
}
внутрішня дія надрукувати_ц64(М: адреса<Машина>, значення: ц64) {
вивести_ц64(М, значення);
вивести_кд(М, "\р");
}
внутрішня дія вивести_р64(М: адреса<Машина>, значення: р64) {
змінна текстове_значення: кд;
якщо перетворити_р64_в_кд(М, значення, текстове_значення::адреса) {
вивести_кд(М, текстове_значення);
звільнити(М, текстове_значення.дані);
}
}
внутрішня дія надрукувати_р64(М: адреса<Машина>, значення: р64) {
вивести_р64(М, значення);
вивести_кд(М, "\р");
}
внутрішня дія вивести_природне(М: адреса<Машина>, значення: природне) {
вивести_п64(М, значення);
}
внутрішня дія піднести_до_степеня_п64(М: адреса<Машина>, значення: п64, степінь: п64) -> п64 {
вернути М.налаштування.піднести_до_степеня_п64(М, значення, степінь);
}
внутрішня дія піднести_до_степеня_ц64(М: адреса<Машина>, значення: ц64, степінь: ц64) -> ц64 {
вернути М.налаштування.піднести_до_степеня_ц64(М, значення, степінь);
}
внутрішня дія піднести_до_степеня_р64(М: адреса<Машина>, значення: р64, степінь: р64) -> р64 {
вернути М.налаштування.піднести_до_степеня_р64(М, значення, степінь);
}
}
простір мавка {
структура Накопичувач<Т> {
розмір: природне;
дані: адреса<Т>;
вмісткість: природне;
}
внутрішня дія виділити_накопичувач<Т>(М: адреса<Машина>, початкова_вмісткість: природне) -> адреса<Накопичувач<Т>> {
змінна накопичувач = виділити<Накопичувач<Т>>();
накопичувач.розмір = 0;
якщо початкова_вмісткість > 0 {
накопичувач.дані = виділити<Т>(М, початкова_вмісткість);
} інакше {
накопичувач.дані = пусто;
}
накопичувач.вмісткість = початкова_вмісткість;
вернути накопичувач;
}
внутрішня дія зробити_накопичувач<Т>(М: адреса<Машина>, початкова_вмісткість: природне) -> Накопичувач<Т> {
змінна накопичувач: Накопичувач<Т>;
накопичувач.розмір = 0;
якщо початкова_вмісткість > 0 {
накопичувач.дані = виділити<Т>(М, початкова_вмісткість);
} інакше {
накопичувач.дані = пусто;
}
накопичувач.вмісткість = початкова_вмісткість;
вернути накопичувач;
}
внутрішня дія покласти_в_накопичувач<Т>(М: адреса<Машина>, накопичувач: адреса<Накопичувач<Т>>, значення: Т) {
якщо накопичувач.розмір == накопичувач.вмісткість {
накопичувач.вмісткість += 1;
накопичувач.дані = перевиділити<Т>(М, накопичувач.дані, накопичувач.вмісткість);
}
накопичувач.дані[накопичувач.розмір] = значення;
накопичувач.розмір += 1;
}
внутрішня дія змінити_в_накопичувачі<Т>(М: адреса<Машина>, накопичувач: адреса<Накопичувач<Т>>, позиція: природне, значення: Т) {
якщо позиція >= накопичувач.вмісткість {
накопичувач.вмісткість = позиція + 1;
накопичувач.дані = перевиділити<Т>(М, накопичувач.дані, накопичувач.вмісткість);
}
накопичувач.дані[позиція] = значення;
накопичувач.розмір = позиція + 1;
}
внутрішня дія змінити_в_накопичувачі_без_розширення<Т>(М: адреса<Машина>, накопичувач: адреса<Накопичувач<Т>>, позиція: природне, значення: Т) {
накопичувач.дані[позиція] = значення;
}
внутрішня дія обернути_накопичувач<Т>(М: адреса<Машина>, накопичувач: адреса<Накопичувач<Т>>) {
змінна п: природне = 0;
поки п < накопичувач.розмір / 2 {
змінна тимчасове = накопичувач.дані[п];
накопичувач.дані[п] = накопичувач.дані[накопичувач.розмір - п - 1];
накопичувач.дані[накопичувач.розмір - п - 1] = тимчасове;
п += 1;
}
}
внутрішня дія звільнити_значення_накопичувача<Т>(М: адреса<Машина>, накопичувач: Накопичувач<Т>) {
звільнити(М, накопичувач.дані);
}
внутрішня дія звільнити_накопичувач<Т>(М: адреса<Машина>, накопичувач: адреса<Накопичувач<Т>>) {
звільнити_значення_накопичувача<Т>(М, накопичувач::вміст);
звільнити(М, накопичувач);
}
}
простір мавка {
внутрішня дія виділити_дійсність(М: адреса<Машина>) -> адреса<Дійсність> {
змінна дійсність = виділити<Дійсність>(М, 1);
дійсність.попередня = М.остання_дійсність;
дійсність.наступна = пусто;
дійсність.позначено = ні;
дійсність.кількість_запозичень = 0;
дійсність.зовні = пусто;
дійсність.призначення = Призначення { 0, пусто, 0 };
М.остання_дійсність.наступна = дійсність;
М.остання_дійсність = дійсність;
вернути дійсність;
}
дія звільнити_призначення(М: адреса<Машина>, призначення: Призначення);
внутрішня дія відпустити_дійсність(М: адреса<Машина>, дійсність: адреса<Дійсність>) -> ніщо {
дійсність.кількість_запозичень -= 1;
якщо дійсність.кількість_запозичень == 0 {
якщо дійсність.попередня == пусто {
М.перша_дійсність = дійсність.наступна;
} інакше {
дійсність.попередня.наступна = дійсність.наступна;
}
якщо дійсність.наступна == пусто {
М.остання_дійсність = дійсність.попередня;
} інакше {
дійсність.наступна.попередня = дійсність.попередня;
}
якщо дійсність.зовні != пусто {
відпустити_дійсність(М, дійсність.зовні);
}
звільнити_призначення(М, дійсність.призначення);
звільнити(М, дійсність);
}
}
внутрішня дія виділити_предмет<Т>(М: адреса<Машина>, с: адреса<ПредметСтруктури>) -> адреса<Т> {
змінна предмет = виділити<Т>(М, 1);
предмет.наступний = пусто;
предмет.позначено = ні;
предмет.с = с;
предмет.користувацькі_дані = пусто;
М.останній_предмет.наступний = предмет як адреса<Предмет>;
М.останній_предмет = предмет як адреса<Предмет>;
М.кількість_дійсних += 1;
М.потребує_очищення = М.кількість_дійсних >= М.кількість_дійсних_для_очищення;
вернути предмет;
}
// ВзятіЗначення
дія записати_взяте_значення(М: адреса<Машина>, шлях: адреса<ПредметДаних>, значення: Значення);
дія знайти_взяте_значення(М: адреса<Машина>, шлях: адреса<ПредметДаних>, вихід_значення: адреса<Значення>) -> логічне;
дія видалити_взяте_значення(М: адреса<Машина>, шлях: адреса<ПредметДаних>) -> логічне;
// Дійсність
дія створити_дійсність(М: адреса<Машина>, зовні: адреса<Дійсність>) -> адреса<Дійсність>;
дія записати_в_дійсність(М: адреса<Машина>, дійсність: адреса<Дійсність>, назва: адреса<ПредметТексту>, значення: Значення);
дія знайти_в_дійсності(М: адреса<Машина>, дійсність: адреса<Дійсність>, назва: адреса<ПредметТексту>, вихід_значення: адреса<Значення>) -> логічне;
// Призначення
дія призначити(М: адреса<Машина>, призначення: адреса<Призначення>, назва: адреса<ПредметТексту>, значення: Значення);
дія знайти_призначене(М: адреса<Машина>, призначення: Призначення, назва: адреса<ПредметТексту>, вихід: адреса<Значення>) -> логічне;
// Допоміжне
дія розібрати_число_з_кд(М: адреса<Машина>, значення: кд, вихід: адреса<р64>) -> логічне;
// Задіяні
синонім ДіяПереборуПозиційнихЗадіяних = (М: адреса<Машина>, позиція: природне, значення: Значення, аргумент: невідома_адреса) -> ніщо;
синонім ДіяПереборуІменованихЗадіяних = (М: адреса<Машина>, позиція: природне, назва: адреса<ПредметТексту>, значення: Значення, аргумент: невідома_адреса) -> ніщо;
дія знайти_задіяне(М: адреса<Машина>, задіяні: Задіяні, позиція: природне, назва: адреса<ПредметТексту>, вихід_значення: адреса<Значення>) -> логічне;
дія перебрати_позиційні_задіяні(М: адреса<Машина>, задіяні: Задіяні, дія_перебору: ДіяПереборуПозиційнихЗадіяних, аргумент: невідома_адреса);
дія перебрати_іменовані_задіяні(М: адреса<Машина>, задіяні: Задіяні, дія_перебору: ДіяПереборуІменованихЗадіяних, аргумент: невідома_адреса);
дія звільнити_задіяні(М: адреса<Машина>, задіяні: Задіяні);
// Значення
дія здійснити(М: адреса<Машина>, здійснювач: Значення, значення: Значення, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія отримати_властивість(М: адреса<Машина>, предмет: Значення, назва: адреса<ПредметТексту>, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія змінити_властивість(М: адреса<Машина>, предмет: Значення, назва: адреса<ПредметТексту>, значення: Значення, місцезнаходження: Місцезнаходження) -> СтанПадіння;
дія здійснити_властивість(М: адреса<Машина>, предмет: Значення, назва: адреса<ПредметТексту>, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія отримати_елемент(М: адреса<Машина>, предмет: Значення, ключ: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія змінити_елемент(М: адреса<Машина>, предмет: Значення, ключ: Значення, значення: Значення, місцезнаходження: Місцезнаходження) -> СтанПадіння;
дія отримати_текст(М: адреса<Машина>, значення: Значення, місцезнаходження: Місцезнаходження) -> адреса<ПредметТексту>;
дія отримати_діапазон(М: адреса<Машина>, від: Значення, до: Значення, включно: логічне, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія отримати_перебір(М: адреса<Машина>, предмет: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія виконати_додати(М: адреса<Машина>, ліво: Значення, право: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія виконати_відняти(М: адреса<Машина>, ліво: Значення, право: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія виконати_помножити(М: адреса<Машина>, ліво: Значення, право: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія виконати_поділити(М: адреса<Машина>, ліво: Значення, право: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія виконати_остача(М: адреса<Машина>, ліво: Значення, право: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія виконати_степінь(М: адреса<Машина>, ліво: Значення, право: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія виконати_вліво(М: адреса<Машина>, ліво: Значення, право: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія виконати_вправо(М: адреса<Машина>, ліво: Значення, право: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія виконати_двійкове_і(М: адреса<Машина>, ліво: Значення, право: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія виконати_двійкове_або(М: адреса<Машина>, ліво: Значення, право: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія виконати_двійкове_вабо(М: адреса<Машина>, ліво: Значення, право: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія виконати_менше(М: адреса<Машина>, ліво: Значення, право: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія виконати_більше(М: адреса<Машина>, ліво: Значення, право: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія виконати_двійкове_не(М: адреса<Машина>, значення: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія виконати_змінити_знак(М: адреса<Машина>, значення: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія перевірити_чи_значення_рівні(М: адреса<Машина>, а: Значення, б: Значення) -> логічне;
дія перевірити_чи_предмет_є(М: адреса<Машина>, а: адреса<Предмет>, б: адреса<ПредметСтруктури>) -> логічне;
// ІменованіЗадіяні
дія створити_іменовано_задіяні(М: адреса<Машина>) -> адреса<ІменованіЗадіяні>;
дія знищити_іменовано_задіяні(М: адреса<Машина>, іменовано_задіяні: адреса<ІменованіЗадіяні>) -> ніщо;
дія покласти_іменовано_задіяне(М: адреса<Машина>, іменовано_задіяні: адреса<ІменованіЗадіяні>, назва: адреса<ПредметТексту>, значення: Значення);
// ІнформаціяПадіння
дія отримати_інформацію_падіння(М: адреса<Машина>, вихід: адреса<ІнформаціяПадіння>) -> логічне;
дія знищити_інформацію_падіння(М: адреса<Машина>, інформація_падіння: ІнформаціяПадіння) -> ніщо;
// КористувацькіДані
дія створити_користувацькі_дані(М: адреса<Машина>, значення: невідома_адреса, дія_перед_знищенням: ДіяПередЗнищеннямКористувацькихДаних) -> адреса<КористувацькіДані>;
// Машина
дія налаштувати_машину(М: адреса<Машина>, налаштування: Налаштування);
дія розлаштувати_машину(М: адреса<Машина>);
дія увімкнути_стан_падіння(М: адреса<Машина>, значення_падіння: Значення, місцезнаходження_падіння: Місцезнаходження);
дія вимкнути_стан_падіння(М: адреса<Машина>);
дія покласти_в_історію_здійснення(М: адреса<Машина>, дійсність: адреса<Дійсність>, здійснювач: Значення, предмет_дії: адреса<ПредметДії>, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> адреса<Діяльність>;
дія видалити_з_історії_здійснення(М: адреса<Машина>, кількість: природне);
дія покласти_в_чергу_здійснення(М: адреса<Машина>, предмет_дії: адреса<ПредметДії>, задіяні: Задіяні);
дія забрати_з_черги_здійснення(М: адреса<Машина>, вихід: адреса<ЕлементЧергиЗдійснення>) -> логічне;
дія взяти_модуль(М: адреса<Машина>, шлях_до_теки_модулів: адреса<ПредметДаних>, відносно: логічне, довжина_шляху: природне, шлях: адреса<адреса<ПредметТексту>>, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія взяти_пак(М: адреса<Машина>, довжина_шляху: природне, шлях: адреса<адреса<ПредметТексту>>, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія взяти_біб(М: адреса<Машина>, довжина_шляху: природне, шлях: адреса<адреса<ПредметТексту>>, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія виконати_код(М: адреса<Машина>, накопичувач_значень: адреса<НакопичувачЗначень>, спроби: адреса<Спроби>, дійсність: адреса<Дійсність>, здійснювач: Значення, предмет_коду: адреса<ПредметКоду>, початкова_позиція_вказівки: природне, шлях_до_теки_модулів: адреса<ПредметДаних>) -> ЗначенняАбоСтанПадіння;
// МісцезнаходженняВказівок
дія покласти_місцезнаходження_вказівки(М: адреса<Машина>, місцезнаходження_вказівок: адреса<МісцезнаходженняВказівок>, рядок: п32, позиція_вказівки: п32);
// НакопичувачТексту
дія зробити_накопичувач_тексту(М: адреса<Машина>, вмісткість: природне) -> НакопичувачТексту;
дія покласти_в_накопичувач_тексту(М: адреса<Машина>, накопичувач: адреса<НакопичувачТексту>, значення: кд);
// Очищувач
дія запустити_очищувач(М: адреса<Машина>);
// Притримувач
дія створити_притримувач(М: адреса<Машина>) -> адреса<Притримувач>;
дія притримати(М: адреса<Машина>, притримувач: адреса<Притримувач>, предмет: адреса<Предмет>) -> адреса<Притриманий>;
дія відпустити_притриманий(М: адреса<Машина>, притримувач: адреса<Притримувач>, притриманий: адреса<Притриманий>);
дія притримати_глобально(М: адреса<Машина>, предмет: адреса<Предмет>) -> адреса<Притриманий>;
дія відпустити_притриманий_глобально(М: адреса<Машина>, притриманий: адреса<Притриманий>);
// Спроби
дія покласти_спробу(М: адреса<Машина>, спроби: адреса<Спроби>, назва_зловити: адреса<ПредметТексту>, позиція_вказівки_зловити: природне) -> адреса<Спроба>;
дія видалити_останню_спробу(М: адреса<Машина>, спроби: адреса<Спроби>);
}
простір мавка {
// ПредметДаних
дія заповнити_структуру_Дані(М: адреса<Машина>);
дія створити_дані(М: адреса<Машина>, розмір: природне, дані: адреса<п8>) -> адреса<ПредметДаних>;
дія створити_дані_без_копіювання(М: адреса<Машина>, розмір: природне, дані: адреса<п8>) -> адреса<ПредметДаних>;
дія здійснити_структуру_даних(М: адреса<Машина>, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_даних_отримати_властивість(М: адреса<Машина>, предмет_даних: адреса<ПредметДаних>, назва: адреса<ПредметТексту>, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_даних_отримати_елемент(М: адреса<Машина>, предмет_даних: адреса<ПредметДаних>, ключ: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_даних_змінити_елемент(М: адреса<Машина>, предмет_даних: адреса<ПредметДаних>, ключ: Значення, значення: Значення, місцезнаходження: Місцезнаходження) -> СтанПадіння;
// ПредметДіапазонуЧисел
дія заповнити_структуру_ДіапазонЧисел(М: адреса<Машина>);
дія створити_діапазон_чисел(М: адреса<Машина>, від: р64, до: р64, включно: логічне) -> адреса<ПредметДіапазонуЧисел>;
дія здійснити_структуру_діапазону_чисел(М: адреса<Машина>, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_діапазону_чисел_отримати_властивість(М: адреса<Машина>, предмет_діапазону_чисел: адреса<ПредметДіапазонуЧисел>, назва: адреса<ПредметТексту>, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
// ПредметДії
дія заповнити_структуру_Дія(М: адреса<Машина>);
дія створити_дію(М: адреса<Машина>, дійсність_створення: адреса<Дійсність>, назва: адреса<ПредметТексту>, параметри: адреса<ПредметПослідовності>, тип_результату: адреса<Предмет>, код: адреса<ПредметКоду>, шлях_до_теки_модулів: адреса<ПредметДаних>) -> адреса<ПредметДії>;
дія створити_рідну_дію(М: адреса<Машина>, назва: адреса<ПредметТексту>, параметри: адреса<ПредметПослідовності>, тип_результату: адреса<Предмет>, рідна_дія: РіднаДія, шлях_до_теки_модулів: адреса<ПредметДаних>) -> адреса<ПредметДії>;
дія здійснити_структуру_дії(М: адреса<Машина>, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_дії_здійснити(М: адреса<Машина>, здійснювач: Значення, предмет_дії: адреса<ПредметДії>, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_дії_отримати_властивість(М: адреса<Машина>, предмет_дії: адреса<ПредметДії>, назва: адреса<ПредметТексту>, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
// ПредметКоду
дія заповнити_структуру_Код(М: адреса<Машина>);
дія створити_код(М: адреса<Машина>, константи: адреса<ПредметПослідовності>, вказівки: адреса<ПредметДаних>, шлях: адреса<ПредметДаних>, місцезнаходження_вказівок: МісцезнаходженняВказівок) -> адреса<ПредметКоду>;
дія здійснити_структуру_коду(М: адреса<Машина>, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_коду_отримати_властивість(М: адреса<Машина>, предмет_коду: адреса<ПредметКоду>, назва: адреса<ПредметТексту>, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія знайти_рядок_вказівки(місцезнаходження_вказівок: МісцезнаходженняВказівок, позиція_вказівки: п32) -> п32;
// ПредметМодуля
дія заповнити_структуру_Модуль(М: адреса<Машина>);
дія створити_модуль(М: адреса<Машина>, назва: адреса<ПредметТексту>) -> адреса<ПредметМодуля>;
дія здійснити_структуру_модуля(М: адреса<Машина>, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія записати_властивість_модуля(М: адреса<Машина>, предмет_модуля: адреса<ПредметМодуля>, назва: адреса<ПредметТексту>, значення: Значення);
дія предмет_модуля_отримати_властивість(М: адреса<Машина>, предмет_модуля: адреса<ПредметМодуля>, назва: адреса<ПредметТексту>, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
// ПредметПараметра
дія заповнити_структуру_Параметр(М: адреса<Машина>);
дія створити_параметр(М: адреса<Машина>, назва: адреса<ПредметТексту>, тип: адреса<Предмет>, дія_значення: адреса<ПредметДії>) -> адреса<ПредметПараметра>;
дія здійснити_структуру_параметра(М: адреса<Машина>, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_параметра_отримати_властивість(М: адреса<Машина>, предмет_параметра: адреса<ПредметПараметра>, назва: адреса<ПредметТексту>, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
// ПредметПереборуДаних
дія заповнити_структуру_ПеребірДаних(М: адреса<Машина>);
дія створити_перебір_даних(М: адреса<Машина>, предмет_даних: адреса<ПредметДаних>) -> адреса<ПредметПереборуДаних>;
дія здійснити_структуру_перебору_даних(М: адреса<Машина>, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_перебору_даних_отримати_властивість(М: адреса<Машина>, предмет_перебору_даних: адреса<ПредметПереборуДаних>, назва: адреса<ПредметТексту>, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
// ПредметПереборуДіапазонуЧисел
дія заповнити_структуру_ПеребірДіапазонуЧисел(М: адреса<Машина>);
дія створити_перебір_діапазону_чисел(М: адреса<Машина>, предмет_діапазону: адреса<ПредметДіапазонуЧисел>) -> адреса<ПредметПереборуДіапазонуЧисел>;
дія здійснити_структуру_перебору_діапазону_чисел(М: адреса<Машина>, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_перебору_діапазону_чисел_отримати_властивість(М: адреса<Машина>, предмет_перебору_діапазону_чисел: адреса<ПредметПереборуДіапазонуЧисел>, назва: адреса<ПредметТексту>, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
// ПредметПереборуПослідовності
дія заповнити_структуру_ПеребірПослідовності(М: адреса<Машина>);
дія створити_перебір_послідовності(М: адреса<Машина>, предмет_послідовності: адреса<ПредметПослідовності>) -> адреса<ПредметПереборуПослідовності>;
дія здійснити_структуру_перебору_послідовності(М: адреса<Машина>, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_перебору_послідовності_отримати_властивість(М: адреса<Машина>, предмет_перебору_послідовності: адреса<ПредметПереборуПослідовності>, назва: адреса<ПредметТексту>, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
// ПредметПереборуСловника
дія заповнити_структуру_ПеребірСловника(М: адреса<Машина>);
дія створити_перебір_словника(М: адреса<Машина>, предмет_словника: адреса<ПредметСловника>) -> адреса<ПредметПереборуСловника>;
дія здійснити_структуру_перебору_словника(М: адреса<Машина>, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_перебору_словника_отримати_властивість(М: адреса<Машина>, предмет_перебору_словника: адреса<ПредметПереборуСловника>, назва: адреса<ПредметТексту>, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
// ПредметПереборуСписку
дія заповнити_структуру_ПеребірСписку(М: адреса<Машина>);
дія створити_перебір_списку(М: адреса<Машина>, предмет_списку: адреса<ПредметСписку>) -> адреса<ПредметПереборуСписку>;
дія здійснити_структуру_перебору_списку(М: адреса<Машина>, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_перебору_списку_отримати_властивість(М: адреса<Машина>, предмет_перебору_списку: адреса<ПредметПереборуСписку>, назва: адреса<ПредметТексту>, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
// ПредметПереборуТексту
дія заповнити_структуру_ПеребірТексту(М: адреса<Машина>);
дія створити_перебір_тексту(М: адреса<Машина>, предмет_тексту: адреса<ПредметТексту>) -> адреса<ПредметПереборуТексту>;
дія здійснити_структуру_перебору_тексту(М: адреса<Машина>, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_перебору_тексту_отримати_властивість(М: адреса<Машина>, предмет_перебору_тексту: адреса<ПредметПереборуТексту>, назва: адреса<ПредметТексту>, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
// ПредметПослідовності
дія заповнити_структуру_Послідовність(М: адреса<Машина>);
дія створити_послідовність(М: адреса<Машина>, розмір: природне, елементи: адреса<Значення>) -> адреса<ПредметПослідовності>;
дія створити_послідовність_без_копіювання(М: адреса<Машина>, розмір: природне, елементи: адреса<Значення>) -> адреса<ПредметПослідовності>;
дія створити_сиру_послідовність(М: адреса<Машина>, розмір: природне) -> адреса<ПредметПослідовності>;
дія здійснити_структуру_послідовності(М: адреса<Машина>, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_послідовності_отримати_властивість(М: адреса<Машина>, предмет_послідовності: адреса<ПредметПослідовності>, назва: адреса<ПредметТексту>, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_послідовності_отримати_елемент(М: адреса<Машина>, предмет_послідовності: адреса<ПредметПослідовності>, ключ: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
// ПредметСловника
дія заповнити_структуру_Словник(М: адреса<Машина>);
дія створити_словник(М: адреса<Машина>) -> адреса<ПредметСловника>;
дія здійснити_структуру_словника(М: адреса<Машина>, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_словника_отримати_властивість(М: адреса<Машина>, предмет_словника: адреса<ПредметСловника>, назва: адреса<ПредметТексту>, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_словника_отримати_елемент(М: адреса<Машина>, предмет_словника: адреса<ПредметСловника>, ключ: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_словника_змінити_елемент(М: адреса<Машина>, предмет_словника: адреса<ПредметСловника>, ключ: Значення, значення_елемента: Значення, місцезнаходження: Місцезнаходження) -> СтанПадіння;
дія записати_в_словник(М: адреса<Машина>, словник: адреса<ПредметСловника>, ключ: Значення, значення: Значення);
// ПредметСписку
дія заповнити_структуру_Список(М: адреса<Машина>);
дія створити_список(М: адреса<Машина>, розмір: природне) -> адреса<ПредметСписку>;
дія здійснити_структуру_списку(М: адреса<Машина>, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_списку_отримати_властивість(М: адреса<Машина>, предмет_списку: адреса<ПредметСписку>, назва: адреса<ПредметТексту>, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_списку_отримати_елемент(М: адреса<Машина>, предмет_списку: адреса<ПредметСписку>, ключ: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_списку_змінити_елемент(М: адреса<Машина>, предмет_списку: адреса<ПредметСписку>, ключ: Значення, значення_елемента: Значення, місцезнаходження: Місцезнаходження) -> СтанПадіння;
дія записати_в_список(М: адреса<Машина>, предмет_списку: адреса<ПредметСписку>, позиція: природне, значення: Значення);
// ПредметСтруктури
дія заповнити_структуру_Структура(М: адреса<Машина>);
дія створити_структуру(М: адреса<Машина>, назва: адреса<ПредметТексту>, параметри: адреса<ПредметПослідовності>) -> адреса<ПредметСтруктури>;
дія змінити_властивість_структури(М: адреса<Машина>, предмет_структури: адреса<ПредметСтруктури>, назва: адреса<ПредметТексту>, значення: Значення);
дія предмет_структури_здійснити(М: адреса<Машина>, значення: адреса<ПредметСтруктури>, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія знайти_метод_в_структурі(М: адреса<Машина>, предмет_структури: адреса<ПредметСтруктури>, назва: адреса<ПредметТексту>) -> адреса<ПредметДії>;
дія записати_метод_структури(М: адреса<Машина>, предмет_структури: адреса<ПредметСтруктури>, назва: адреса<ПредметТексту>, значення_дії: адреса<ПредметДії>);
дія предмет_структури_отримати_властивість(М: адреса<Машина>, предмет_структури: адреса<ПредметСтруктури>, назва: адреса<ПредметТексту>, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_структури_змінити_властивість(М: адреса<Машина>, предмет_структури: адреса<ПредметСтруктури>, назва: адреса<ПредметТексту>, значення: Значення, місцезнаходження: Місцезнаходження) -> СтанПадіння;
// ПредметТексту
дія заповнити_структуру_Текст(М: адреса<Машина>);
дія створити_текст(М: адреса<Машина>, значення: кд) -> адреса<ПредметТексту>;
дія створити_текст_без_копіювання(М: адреса<Машина>, розмір: природне, дані: адреса<п8>) -> адреса<ПредметТексту>;
дія здійснити_структуру_тексту(М: адреса<Машина>, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_тексту_отримати_властивість(М: адреса<Машина>, предмет_тексту: адреса<ПредметТексту>, назва: адреса<ПредметТексту>, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_тексту_отримати_елемент(М: адреса<Машина>, предмет_тексту: адреса<ПредметТексту>, ключ: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
внутрішня дія перевірити_чи_предмети_тексту_рівні(М: адреса<Машина>, а: адреса<ПредметТексту>, б: адреса<ПредметТексту>) -> логічне;
// ПредметЧисла
дія заповнити_структуру_Число(М: адреса<Машина>);
дія створити_число(М: адреса<Машина>, значення: р64) -> Значення;
дія здійснити_структуру_числа(М: адреса<Машина>, задіяні: Задіяні, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_числа_додати(М: адреса<Машина>, значення: р64, право: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_числа_відняти(М: адреса<Машина>, значення: р64, право: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_числа_помножити(М: адреса<Машина>, значення: р64, право: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_числа_поділити(М: адреса<Машина>, значення: р64, право: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_числа_остача(М: адреса<Машина>, значення: р64, право: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_числа_степінь(М: адреса<Машина>, значення: р64, право: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_числа_вліво(М: адреса<Машина>, значення: р64, право: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_числа_вправо(М: адреса<Машина>, значення: р64, право: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_числа_двійкове_і(М: адреса<Машина>, значення: р64, право: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_числа_двійкове_або(М: адреса<Машина>, значення: р64, право: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_числа_двійкове_вабо(М: адреса<Машина>, значення: р64, право: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_числа_менше(М: адреса<Машина>, значення: р64, право: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_числа_більше(М: адреса<Машина>, значення: р64, право: Значення, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_числа_двійкове_не(М: адреса<Машина>, значення: р64, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_числа_змінити_знак(М: адреса<Машина>, значення: р64, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія предмет_числа_отримати_властивість(М: адреса<Машина>, значення: р64, назва: адреса<ПредметТексту>, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
// СкладенийПредмет
дія створити_складений_предмет(М: адреса<Машина>, значення_структури: адреса<ПредметСтруктури>) -> адреса<СкладенийПредмет>;
дія складений_предмет_отримати_властивість(М: адреса<Машина>, складений_предмет: адреса<СкладенийПредмет>, назва: адреса<ПредметТексту>, місцезнаходження: Місцезнаходження) -> ЗначенняАбоСтанПадіння;
дія складений_предмет_змінити_властивість(М: адреса<Машина>, складений_предмет: адреса<СкладенийПредмет>, назва: адреса<ПредметТексту>, значення: Значення, місцезнаходження: Місцезнаходження) -> СтанПадіння;
}
простір мавка {
внутрішня дія ПАДІННЯ(М: адреса<Машина>, предмет_тексту: адреса<ПредметТексту>) -> Значення {
увімкнути_стан_падіння(
М,
ПРЕДМЕТ(предмет_тексту),
Місцезнаходження { пусто, 0 }
);
вернути НЕДІЙСНЕ;
}
внутрішня дія МІСЦЕПАДІННЯ(М: адреса<Машина>, предмет_тексту: адреса<ПредметТексту>, місцезнаходження: Місцезнаходження) -> Значення {
увімкнути_стан_падіння(
М,
ПРЕДМЕТ(предмет_тексту),
місцезнаходження
);
вернути НЕДІЙСНЕ;
}
}
простір мавка {
внутрішня дія перевірити_чи_предмети_тексту_рівні(
М: адреса<Машина>,
а: адреса<ПредметТексту>,
б: адреса<ПредметТексту>
) -> логічне {
якщо а == б {
вернути так;
}
якщо а.значення.розмір != б.значення.розмір {
вернути ні;
}
змінна п: природне = 0;
поки п < а.значення.розмір {
якщо а.значення.дані[п] != б.значення.дані[п] {
вернути ні;
}
п += 1;
}
вернути так;
}
}