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