в). Введення рядка закінчується натисканням клавіші
Enter . Для визначення в програмі нетермінала використовуються символи '<' і '>' Безпосередньо між якими знаходиться нетермінал, знак або '|', знак привласнити ': ='. Новий рядок обов'язково повинна починатися з нетермінала і наступним символом (і) ': ='.
Для початку аналізу введеної КС-граматики потрібно натиснути клавішу F5 або вибрати в меню пункт "Запуск" (меню викликається натисканням F9 ). Перед тим як почати побудову матриці передування проводиться синтаксичний аналіз введеного тексту.
Можливі помилки при введенні граматики:
Після символу '|' повинен обов'язково слідувати термінал або нетермінал.
В
У граматиці описаний нетермінал , але він ніде не використовується (відсутнє у правій частині).
В
У граматиці відсутній опис нетермінала (відсутнє у правій частині)
Якщо граматика введена вірно, то починається побудова матриці (алгоритм описаний вище). При виникненні помилки (один або кілька (не) терміналів мають більш ніж одне відношення передування) виводиться повідомлення і у відповідну клітинку записується символ Х .
Після цього виконується лінеаризація матриці за допомогою графа: для спрощення алгоритму в матриці спочатку ведеться пошук відносин = при знаходженні таких виконується склеювання відповідних вершин. Ця операція позбавляє нас від рутинних дій пов'язаних з В«перестановкоюВ» зв'язків. Також спрощується опис графа в програмі: потреба в зберіганні зв'язків відсутній - необхідно лише зберігати кількість входять і виходять ребер. При побудові векторів граф, перевіряється на циклічність (при існуванні циклу виводиться повідомленні про неможливість побудови функції передування).
5. Текст програми
Program KP;
Uses TpCrt, Graph, GrText, DataUnit;
Const Txt = 'За заданої КС-граматики побудувати відношення простого '+
'або операторного передування і функцію передування, '+
' використовуючи граф лінеаризації і алгоритм перерахунку з візуалізацією '+
'кроків побудови графа ';
Errors: array [0 .. 10] of String [34] = {помилки}
('КС-граматика синтаксично вірна ', {0}
'Очікується ~ "<" ', {1}
'Очікується ~">" ', {2}
'Очікується ~ ": =" ', {3}
'Потрібен нетермінал ', {4}
'Потрібен термінал ', {5}
'Невизначений нетермінал ', {6}
'Невикористовуваний нетермінал ', {7}
'Потрібен термінал або нетермінал ', {8}
' Многоопределенний нетермінал ', {9}
'Знайдено неприпустимі символи '); {10}
menu: a...