100
Êîìåíòàð. Äèðåêòèâè êîìï³ëÿòîðà include "ULS. pro" òà include "pr_22. pro" çà-
áåçïå÷óþòü âèêîíàííÿ ó äàí³é ïðîãðàì³ ïðåäèêàò³â lexanaliz/2,
upper_lower_sym/2. Ïðîãðàìà íå ì³ñòèòü ñåêö³¿ domains, òàê ÿê ó
îïèñ³ ïðåäèêàò³â (ñåêö³ÿ predicates) âñ³ îáëàñò³ çì³íè àðãóìåíò³â
âêàçàí³ ÿê ò³, ùî âèêîðèñòîâóþòüñÿ ó ïðîãðàìàõ, ï³äêëþ÷åíèõ äî
âèêîíàííÿ äâîìà äèðåêòèâàìè include. Ó ïðàâèë³ чи_речення/1 ïå-
ðøèé ñèìâîë ðå÷åííÿ, ùî ââîäèòüñÿ, ïåðåâîäèòüñÿ äî íèæíüîãî
ðåã³ñòðó òà ôîðìóºòüñÿ íîâå ðå÷åííÿ R, ùî ìຠìîäèô³êîâàíèé
ïåðøèé ñèìâîë ðå÷åííÿ; íîâîñôîðìîâàíèé ðÿäîê R ëåêñåì ïðå-
äèêàòîì речення/2 ïåðåâ³ðÿºòüñÿ íà ìîæëèâ³ñòü ðîçáèòòÿ íà ³ìåí-
íó òà 䳺ñë³âíó ãðóïó òàê, ùîá ó ö³ ãðóïè ïîâí³ñòþ, ó ïîòð³áíîìó
ïîðÿäêó ³ êîðåêòíî ââ³éøëè âñ³ (äðóãèé àðãóìåíò - ïîðîæí³é ñïè-
ñîê) ëåêñåìè ðÿäêà. Ïðåäèêàò именна_група/2 çà ïðàâèëîì (1) íà-
ìàãàºòüñÿ ðÿäîê ëåêñåì, ùî ïåðåäàºòüñÿ ó ïåðøèé àðãóìåíò, ïîãî-
äèòè ÿê ïàðó "ïðèêìåòíèê-³ìåííèê" (çà ïðàâèëîì (2) - ÿê "³ìåí-
íèê"), ïåðåäàþ÷è ïðè öüîìó çàëèøîê ðÿäêà ó äðóãèé àðãóìåíò. Ó
ñâîþ ÷åðãó, ïðåäèêàò прикметник/2 óñï³øíî ïîãîäæóºòüñÿ çà ïðà-
âèëîì (3), ÿêùî ñïèñîê ëåêñåì, ùî ïåðåäàºòüñÿ ó ïåðøèé àðãó-
ìåíò ìຠãîëîâîþ ëåêñåìó, ÿêà ñï³âïàäຠç íàïåðåäçàäàíîþ
(H="дана").
Граматика, що визначається твердженнями
Íàãàäàºìî, ùî ãðàìàòèêà, ùî áóäóº äåðåâî ðîçáîðó, íàçèâàºòüñÿ
ãðàìàòèêîþ, ùî âèçíà÷àºòüñÿ òâåðäæåííÿìè.
Приклад 35. Ìîäèô³êóºìî ïðîãðàìó ( Ïðèêëàä 34. ), ùî ðåàë³çóº ÁÑ-ãðàìàòè-
êó, òàê, ùîá âîíà áóäóâàëà äåðåâî ðîçáîðó. Äëÿ öüîãî äîïîâíèìî
êîæíå ãðàìàòè÷íå ïðàâèëî ùå îäíèì àðãóìåíòîì.
include "ULS. pro" /*pr_35. pro*/
include "pr_22. pro"
domains
слово, дерево=symbol
predicates
речення(rechen, дерево)
речення(rechen, sp, дерево)
именна_група(sp, sp, дерево)
диесл_група(sp, sp, дерево)
именник(слово, sp, sp, дерево)
прикмет(слово, sp, sp, дерево)
диеслово(слово, sp, sp, дерево)
formuv(symbol, symbol, symbol, symbol)
formuv(symbol, symbol, symbol)
clauses
речення(Rech, Дерево_реч):-
frontchar(Rech, Перший_символ, Oстача_речення),
upper_lower_sym(Перший_символ, Символ_нижн_регiстру),
frontchar(R, Символ_нижн_регiстру, Oстача_речення),