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