/* Перекладач Мавки */

// 2025-2026 Богданович Давид Когут Прихожденко (кдб.дійсність.укр)

взяти визначення мавка/машина;
взяти визначення мавка/розбирач;

простір мавка {
  простір перекладач {
    структура ПомилкаПерекладу {
      позиція_в_тексті: природне;
      рядок: природне;
      стовпець: природне;
      повідомлення: кд; // має звільнити той хто оброляє помилку
    }

    синонім ДіяСтворитиКод = (М: *Машина, шлях: невідома_адреса) -> невідома_адреса;
    синонім ДіяПокластиКонстантуЧисла = (М: *Машина, код: невідома_адреса, значення: р64) -> п32;
    синонім ДіяПокластиКонстантуТексту = (М: *Машина, код: невідома_адреса, значення: кд) -> п32;
    синонім ДіяПокластиКонстантуКоду = (М: *Машина, код: невідома_адреса, значення: невідома_адреса) -> п32;
    синонім ДіяПокластиВказівку = (М: *Машина, код: невідома_адреса, рядок: п32, вид: п8) -> п32;
    синонім ДіяПокластиВказівкуЗАргументом = (М: *Машина, код: невідома_адреса, рядок: п32, вид: п8, аргумент: п32) -> п32;
    синонім ДіяПокластиВказівкуЗДвомаАргументами = (М: *Машина, код: невідома_адреса, рядок: п32, вид: п8, аргумент1: п32, аргумент2: п32) -> п32;
    синонім ДіяЗмінитиАргументВказівки = (М: *Машина, код: невідома_адреса, позиція_виду_вказівки: п32, позиція_аргумента_вказівки: п32, новий_аргумент: п32) -> ніщо;
    синонім ДіяОтриматиРозмірВказівок = (М: *Машина, код: невідома_адреса) -> п32;
    синонім ДіяОтриматиШляхКоду = (М: *Машина, код: невідома_адреса) -> невідома_адреса;

    структура Дії {
      створити_код: ДіяСтворитиКод;
      покласти_константу_числа: ДіяПокластиКонстантуЧисла;
      покласти_константу_тексту: ДіяПокластиКонстантуТексту;
      покласти_константу_коду: ДіяПокластиКонстантуКоду;
      покласти_вказівку: ДіяПокластиВказівку;
      покласти_вказівку_з_аргументом: ДіяПокластиВказівкуЗАргументом;
      покласти_вказівку_з_двома_аргументами: ДіяПокластиВказівкуЗДвомаАргументами;
      змінити_аргумент_вказівки: ДіяЗмінитиАргументВказівки;
      отримати_розмір_вказівок: ДіяОтриматиРозмірВказівок;
      отримати_шлях_коду: ДіяОтриматиШляхКоду;
    }

    дія перекласти(
      М: *Машина,
      шлях: невідома_адреса,
      сирий_текст: кд,
      знаки: розбирач::Знаки,
      здійснимі: розбирач::Сполуки,
      дії: Дії,
      вихід_коду: *адреса,
      вихід_помилки: *ПомилкаПерекладу
    ) -> логічне;
  }

  дія перекласти_в_код(
    М: *Машина,
    шлях: *ПредметДаних,
    сирий_текст: кд,
    знаки: розбирач::Знаки,
    здійснимі: розбирач::Сполуки,
    вихід_коду: **ПредметКоду,
    вихід_помилки: *перекладач::ПомилкаПерекладу
  ) -> логічне;

  дія перекласти_у_файл_коду(
    М: *Машина,
    сирий_текст: кд,
    знаки: розбирач::Знаки,
    здійснимі: розбирач::Сполуки,
    вихід_розміру: *природне,
    вихід_даних: **п8,
    вихід_помилки: *перекладач::ПомилкаПерекладу
  ) -> логічне;
}