/* Розбирач Мавки */
взяти означення мавка/машина;
взяти означення КД;
простір мавка {
простір розбирач {
структура можливо<Т>;
структура можливо<Т> {
заповнено: логічне;
значення: Т;
}
структура ПомилкаРозборуНаЗнаки {
позиція_в_тексті: природне;
рядок: природне;
стовпець: природне;
}
структура ПомилкаРозборуНаСполуки {
позиція_знаку: природне;
рядок: природне;
стовпець: природне;
}
стала ВидЗнакуАбо = 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;
стала ВидЗнакуКІНЕЦЬСЛІВ = 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;
структура Місцезнаходження;
структура Сполука;
структура Сполуки;
структура Ідентифікатор;
структура Параметр;
структура Аргумент;
структура ЕлементДати;
структура ЕлементВзяти;
структура ЕлементСловника;
структура ДаніСполукиВизначити;
структура ДаніСполукиЗвернутись;
структура ДаніСполукиОтриматиВластивість;
структура ДаніСполукиОтриматиЕлемент;
структура ДаніСполукиЗмінитиВластивість;
структура ДаніСполукиЗмінитиЕлемент;
структура ДаніСполукиВиконати;
структура ДаніСполукиДія;
структура ДаніСполукиСтруктура;
структура ДаніСполукиЧисло;
структура ДаніСполукиТекст;
структура ДаніСполукиСимвол;
структура ДаніСполукиОперація;
структура ДаніСполукиЯкщо;
структура ДаніСполукиПоки;
структура ДаніСполукиПеребрати;
структура ДаніСполукиЦикл;
структура ДаніСполукиВічнийЦикл;
структура ДаніСполукиВернути;
структура ДаніСполукиЗначенняЯкщо;
структура ДаніСполукиСамоОперація;
структура ДаніСполукиВзяти;
структура ДаніСполукиСпробувати;
структура ДаніСполукиВпасти;
структура ДаніСполукиДати;
структура ДаніСполукиМодуль;
структура ДаніСполукиСписок;
структура ДаніСполукиСловник;
структура ДаніСполукиВизначитиЗзовні;
структура ДаніСполукиЧекати;
структура ДаніСполукиДіапазон;
структура ДаніСполукиЗбитийТекст;
структура Сполуки {
розмір: природне;
дані: памʼять<адреса<Сполука>>;
}
структура Місцезнаходження {
позиція_знаку: природне;
}
структура Ідентифікатор {
позиція_знаку: природне;
}
структура Тип {
кількість_гілок: природне;
сполуки: памʼять<адреса<Сполука>>;
}
структура Параметр {
ідентифікатор: Ідентифікатор;
тип: можливо<Тип>;
значення: адреса<Сполука>;
місцезнаходження: Місцезнаходження;
}
структура Аргумент {
ідентифікатор: можливо<Ідентифікатор>;
значення: адреса<Сполука>;
місцезнаходження: Місцезнаходження;
}
структура ЕлементДати {
ідентифікатор: Ідентифікатор;
ідентифікатор_як: можливо<Ідентифікатор>;
місцезнаходження: Місцезнаходження;
}
структура ЕлементВзяти {
ідентифікатор: Ідентифікатор;
ідентифікатор_як: можливо<Ідентифікатор>;
місцезнаходження: Місцезнаходження;
}
структура ЕлементСловника {
ключ: адреса<Сполука>;
значення: адреса<Сполука>;
місцезнаходження: Місцезнаходження;
}
структура ДаніСполукиВизначити {
ідентифікатор: Ідентифікатор;
значення: адреса<Сполука>;
}
структура ДаніСполукиЗвернутись {
ідентифікатор: Ідентифікатор;
}
структура ДаніСполукиОтриматиВластивість {
предмет: адреса<Сполука>;
ідентифікатор: Ідентифікатор;
}
структура ДаніСполукиОтриматиЕлемент {
предмет: адреса<Сполука>;
ключ: адреса<Сполука>;
}
структура ДаніСполукиЗмінитиВластивість {
предмет: адреса<Сполука>;
ідентифікатор: Ідентифікатор;
значення: адреса<Сполука>;
}
структура ДаніСполукиЗмінитиЕлемент {
предмет: адреса<Сполука>;
ключ: адреса<Сполука>;
значення: адреса<Сполука>;
}
структура ДаніСполукиВиконати {
предмет: адреса<Сполука>;
кількість_аргументів: природне;
аргументи: памʼять<Аргумент>;
}
структура ДаніСполукиДія {
тривала: логічне;
власна: логічне;
структура_: адреса<Сполука>;
ідентифікатор: можливо<Ідентифікатор>;
кількість_параметрів: природне;
параметри: памʼять<Параметр>;
тип_результату: можливо<Тип>;
тіло: Сполуки;
}
структура ДаніСполукиСтруктура {
ідентифікатор: можливо<Ідентифікатор>;
предок: адреса<Сполука>;
кількість_параметрів: природне;
параметри: памʼять<Параметр>;
}
структура ДаніСполукиЧисло {
позиція_знаку: природне;
}
структура ДаніСполукиТекст {
ідентифікатор: можливо<Ідентифікатор>;
позиція_знаку: природне;
}
структура ДаніСполукиСимвол {
ідентифікатор: можливо<Ідентифікатор>;
позиція_знаку: природне;
}
структура ДаніСполукиОперація {
ліво: адреса<Сполука>;
операція: природне;
право: адреса<Сполука>;
}
структура ДаніСполукиЯкщо {
умова: адреса<Сполука>;
тіло: Сполуки;
тіло_інакше: Сполуки;
}
структура ДаніСполукиПоки {
умова: адреса<Сполука>;
тіло: Сполуки;
}
структура ДаніСполукиПеребрати {
предмет: адреса<Сполука>;
ідентифікатор: можливо<Ідентифікатор>;
тіло: Сполуки;
}
структура ДаніСполукиЦикл {
старт: Сполуки;
умова: адреса<Сполука>;
тіло: Сполуки;
ітерація: Сполуки;
}
структура ДаніСполукиВічнийЦикл {
тіло: Сполуки;
}
структура ДаніСполукиВернути {
значення: адреса<Сполука>;
}
структура ДаніСполукиЗначенняЯкщо {
умова: адреса<Сполука>;
значення_так: адреса<Сполука>;
значення_ні: адреса<Сполука>;
}
структура ДаніСполукиСамоОперація {
операція: природне;
предмет: адреса<Сполука>;
}
структура ДаніСполукиВзяти {
тип: можливо<Ідентифікатор>;
довжина_шляху: природне;
шлях: памʼять<Ідентифікатор>;
ідентифікатор_як: можливо<Ідентифікатор>;
кількість_елементів: природне;
елементи: памʼять<ЕлементВзяти>;
}
структура ДаніСполукиСпробувати {
тіло: Сполуки;
ідентифікатор_зловити: можливо<Ідентифікатор>;
тіло_зловити: Сполуки;
}
структура ДаніСполукиВпасти {
значення: адреса<Сполука>;
}
структура ДаніСполукиДати {
кількість_елементів: природне;
елементи: памʼять<ЕлементДати>;
}
структура ДаніСполукиМодуль {
ідентифікатор: можливо<Ідентифікатор>;
тіло: Сполуки;
}
структура ДаніСполукиСписок {
кількість_елементів: природне;
елементи: памʼять<адреса<Сполука>>;
}
структура ДаніСполукиСловник {
кількість_елементів: природне;
елементи: памʼять<ЕлементСловника>;
}
структура ДаніСполукиВизначитиЗзовні {
ідентифікатор: Ідентифікатор;
значення: адреса<Сполука>;
}
структура ДаніСполукиЧекати {
значення: адреса<Сполука>;
}
структура ДаніСполукиДіапазон {
від: адреса<Сполука>;
до: адреса<Сполука>;
включно: логічне;
}
структура ДаніСполукиЗбитийТекст {
ідентифікатор: можливо<Ідентифікатор>;
кількість_гілок: природне;
сполуки: памʼять<адреса<Сполука>>;
}
структура Сполука {
вид: природне;
дані: ДаніСполукиВизначити
| ДаніСполукиЗвернутись
| ДаніСполукиОтриматиВластивість
| ДаніСполукиОтриматиЕлемент
| ДаніСполукиЗмінитиВластивість
| ДаніСполукиЗмінитиЕлемент
| ДаніСполукиВиконати
| ДаніСполукиДія
| ДаніСполукиСтруктура
| ДаніСполукиЧисло
| ДаніСполукиТекст
| ДаніСполукиСимвол
| ДаніСполукиОперація
| ДаніСполукиЯкщо
| ДаніСполукиПоки
| ДаніСполукиПеребрати
| ДаніСполукиЦикл
| ДаніСполукиВічнийЦикл
| ДаніСполукиВернути
| ДаніСполукиЗначенняЯкщо
| ДаніСполукиСамоОперація
| ДаніСполукиВзяти
| ДаніСполукиСпробувати
| ДаніСполукиВпасти
| ДаніСполукиДати
| ДаніСполукиМодуль
| ДаніСполукиСписок
| ДаніСполукиСловник
| ДаніСполукиВизначитиЗзовні
| ДаніСполукиЧекати
| ДаніСполукиДіапазон
| ДаніСполукиЗбитийТекст;
місцезнаходження: Місцезнаходження;
}
// потім:
// - обрахунок стовпця
// - виправити місцезнаходження гілок
дія розібрати_на_знаки(М: адреса<Машина>,
значення_кд: кд,
вихід: адреса<Знаки>,
вихід_помилки: адреса<ПомилкаРозборуНаЗнаки>): логічне;
дія звільнити_знаки(М: адреса<Машина>,
знаки: Знаки);
дія звільнити_помилку_розбору_на_знаки(М: адреса<Машина>,
помилка: ПомилкаРозборуНаЗнаки);
дія отримати_помилку_розбору_на_знаки(М: адреса<Машина>,
помилка: ПомилкаРозборуНаЗнаки, вихід: адреса<кд>): логічне;
дія отримати_рядок_помилки_розбору_на_знаки(М: адреса<Машина>,
помилка: ПомилкаРозборуНаЗнаки): природне;
дія отримати_стовпець_помилки_розбору_на_знаки(М: адреса<Машина>,
помилка: ПомилкаРозборуНаЗнаки): природне;
дія отримати_значення_ідентифікатора(значення_кд: кд,
знаки: Знаки,
ідентифікатор: Ідентифікатор): кд;
дія отримати_значення_знаку(значення_кд: кд,
знаки: Знаки,
знак: Знак): кд;
дія отримати_значення_тексту(значення_кд: кд,
знаки: Знаки,
знак: Знак): кд;
дія отримати_значення_символу(значення_кд: кд,
знаки: Знаки,
знак: Знак): кд;
дія отримати_рядок_з_місцезнаходження(значення_кд: кд,
знаки: Знаки,
місцезнаходження: Місцезнаходження): природне;
дія отримати_стовпець_з_місцезнаходження(значення_кд: кд,
знаки: Знаки,
місцезнаходження: Місцезнаходження): природне;
дія розібрати_знаки_на_сполуки(М: адреса<Машина>,
значення_кд: кд,
знаки: Знаки,
вихід: адреса<Сполуки>,
вихід_помилки: адреса<ПомилкаРозборуНаСполуки>): логічне;
дія звільнити_сполуки(М: адреса<Машина>,
сполуки: Сполуки);
дія звільнити_помилку_розбору_на_сполуки(М: адреса<Машина>,
помилка: ПомилкаРозборуНаСполуки);
дія отримати_помилку_розбору_на_сполуки(М: адреса<Машина>,
помилка: ПомилкаРозборуНаСполуки,
вихід: адреса<кд>): логічне;
дія отримати_рядок_помилки_розбору_на_сполуки(М: адреса<Машина>,
помилка: ПомилкаРозборуНаСполуки): природне;
дія отримати_стовпець_помилки_розбору_на_сполуки(М: адреса<Машина>,
помилка: ПомилкаРозборуНаСполуки): природне;
}
}