// 2025-2026 Богданович Давид Когут Прихожденко (кдб.дійсність.укр)
взяти означення мавка/пристрій;
простір мавка {
простір пристрій {
внутрішня дія дія_виводу(М: адреса<Машина>, значення: кд) {
вивести_кд(М, значення);
}
дія взяти_файл(
М: адреса<Машина>,
шлях_до_файлу: адреса<ПредметДаних>,
назва_модуля: адреса<ПредметТексту>,
місцезнаходження: Місцезнаходження
) -> ЗначенняАбоСтанПадіння {
змінна успіх: логічне = ні;
змінна значення = НЕДІЙСНЕ;
змінна розмір_файлу: природне = 0;
змінна дані_файлу: памʼять<п8> = пусто;
змінна сирий_текст: кд = кд { 0, пусто };
змінна знаки: розбирач::Знаки;
змінна помилка_розбору_на_знаки: розбирач::ПомилкаРозборуНаЗнаки;
змінна сполуки: розбирач::Сполуки;
змінна помилка_розбору_на_сполуки: розбирач::ПомилкаРозборуНаСполуки;
змінна перекладений_код: адреса<ПредметКоду> = пусто;
змінна помилка_перекладу: перекладач::ПомилкаПерекладу;
змінна шлях_до_теки_модулів_ю8: ю8;
змінна шлях_до_теки_модулів: адреса<ПредметДаних> = пусто;
якщо знайти_взяте_значення(М, шлях_до_файлу, значення::адреса) {
вернути значення;
}
успіх = пристрій_мавки_отримати_теку_шляху(
шлях_до_файлу.розмір,
шлях_до_файлу.дані,
шлях_до_теки_модулів_ю8.розмір::адреса,
шлях_до_теки_модулів_ю8.дані::адреса,
1
);
якщо не успіх {
вернути МІСЦЕПАДІННЯ(М, створити_текст(М, "Не вдалося отримати теку шляху."), місцезнаходження);
}
шлях_до_теки_модулів = створити_дані(М, шлях_до_теки_модулів_ю8.розмір, шлях_до_теки_модулів_ю8.дані);
успіх = пристрій_мавки_прочитати_файл(
шлях_до_файлу.розмір,
шлях_до_файлу.дані,
розмір_файлу::адреса,
дані_файлу::адреса
);
якщо не успіх {
вернути МІСЦЕПАДІННЯ(М, створити_текст(М, "Не вдалося прочитати файл."), місцезнаходження);
}
успіх = пристрій_мавки_перекодувати_ю8_в_кд(
розмір_файлу,
дані_файлу,
сирий_текст.розмір::адреса,
сирий_текст.дані::адреса,
пусто
);
якщо не успіх {
звільнити_памʼять(М, дані_файлу);
вернути МІСЦЕПАДІННЯ(М, створити_текст(М, "Не вдалося перекодувати файл в код мавки."), Місцезнаходження { шлях_до_файлу, 0 });
}
успіх = розбирач::розібрати_на_знаки(
М,
сирий_текст,
знаки::адреса,
помилка_розбору_на_знаки::адреса
);
якщо не успіх {
змінна рядок = розбирач::отримати_рядок_помилки_розбору_на_знаки(
М,
помилка_розбору_на_знаки
);
вернути МІСЦЕПАДІННЯ(М, створити_текст(М, "Не вдалось розібрати на знаки."), Місцезнаходження { шлях_до_файлу, рядок });
}
успіх = розбирач::розібрати_знаки_на_сполуки(
М,
сирий_текст,
знаки,
сполуки::адреса,
помилка_розбору_на_сполуки::адреса
);
якщо не успіх {
змінна рядок = розбирач::отримати_рядок_помилки_розбору_на_сполуки(
М,
помилка_розбору_на_сполуки
);
увімкнути_стан_падіння(
М,
МАШИННИЙ_ПРЕДМЕТ(створити_текст(М, "Не вдалось розібрати на сполуки.")),
Місцезнаходження { шлях_до_файлу, рядок }
);
вернути НЕДІЙСНЕ;
}
успіх = перекласти_в_код(
М,
створити_дані(М, шлях_до_файлу.розмір, шлях_до_файлу.дані),
сирий_текст,
знаки,
сполуки,
перекладений_код::адреса,
помилка_перекладу::адреса
);
// надрукувати_код(М, перекладений_код.вказівки.розмір, перекладений_код.вказівки.дані, дія_виводу);
якщо не успіх {
вернути МІСЦЕПАДІННЯ(М, створити_текст_без_копіювання(М, помилка_перекладу.повідомлення.розмір, помилка_перекладу.повідомлення.дані), Місцезнаходження { шлях_до_файлу, помилка_перекладу.рядок });
}
змінна предмет_модуля = створити_модуль(
М,
назва_модуля
);
записати_взяте_значення(
М,
шлях_до_файлу,
МАШИННИЙ_ПРЕДМЕТ(предмет_модуля)
);
змінна предмет_дії_модуля = створити_дію(
М,
М.глобальна_дійсність,
назва_модуля,
М.предмет_пустої_послідовності,
пусто,
перекладений_код як адреса<ПредметКоду>,
шлях_до_теки_модулів
);
змінна результат = предмет_дії_здійснити(
М,
МАШИННИЙ_ПРЕДМЕТ(предмет_модуля),
предмет_дії_модуля,
Задіяні { 0, пусто, 0, пусто },
місцезнаходження
);
якщо М.стан_падіння {
видалити_взяте_значення(М, шлях_до_файлу);
}
вернути МАШИННИЙ_ПРЕДМЕТ(предмет_модуля);
}
}
}