Кіріспе

Анықталған сөйлем грамматикасы (DCG) – табиғи немесе формалды тілдерде грамматиканы Prolog сияқты логикалық бағдарламалау тілінде білдіру тәсілі. Ол атрибут грамматикасы / аффикс грамматикасы тұжырымдамасымен тығыз байланысты. DCG көбінесе Prolog-пен байланыстырылады, бірақ Mercury сияқты ұқсас тілдерде де қолданылады. Олар анықталған сөйлем грамматикасы деп аталады, себебі грамматиканы бірінші реттік логикадағы анықталған сөйлемдер жиынтығы ретінде көрсетеді. DCG термині Prolog және басқа ұқсас тілдердегі нақты өрнек түрін білдіреді; грамматиканы анықталған сөйлемдерді пайдалану арқылы білдірудің барлық әдістері DCG деп есептелмейді. Алайда, DCG-нің барлық мүмкіндіктері мен қасиеттері Prolog-тағы сияқты анықталған сөйлемдермен бейнеленген кез келген грамматика үшін бірдей болады. DCG-нің анықталған сөйлемдерін аксиомалар жиынтығы ретінде қарастыруға болады, онда сөйлемнің дұрыстығы және оның белгілі бір талдау ағашының болуы осы аксиомалардан туындайтын теоремалар ретінде қарастырылады. Бұл, тілдегі өрнектерді тану және талдауды логикалық бағдарламалау тіліндегі мәлімдемелерді дәлелдеудің жалпы мәселесіне айналдырады, осы арқылы тиімділікке қол жеткізеді.

Тарих

DCG тарихы Prolog тарихымен тығыз байланысты, ал Prolog тарихы Францияның Марсель қаласында және Шотландияның Эдинбург қаласындағы бірнеше зерттеушілерді қамтиды. Prolog-тың алғашқы әзірлеушісі Роберт Ковальскидің айтуынша, Prolog жүйесі алғаш 1972 жылы Ален Колмерауэр мен Филипп Руссель әзірлеген. Бұл тілде жазылған алғашқы бағдарлама үлкен табиғи тілді өңдеу жүйесі болды. Эдинбург университетінің Фернандо Перейра және Дэвид Уоррен де Prolog-тың алғашқы дамуына қатысты. Колмерауэр бұрын ағылшын және француз тілдерін аудару үшін қолданылған Q жүйелері деп аталатын тілді өңдеу жүйесімен жұмыс істеген. 1978 жылы Колмерауэр Марсель Prolog деп аталатын Prolog-тың алғашқы нұсқасының бір бөлігі болған метаморфоз грамматикасы деп аталатын грамматиканы бейнелеу тәсілі туралы мақала жазды. Бұл мақалада ол метаморфоздық грамматиканың формалды сипаттамасын және оларды пайдаланатын бағдарламалардың кейбір мысалдарын берді. Prolog-тың тағы екі алғашқы архитекторы Фернандо Перейра мен Дэвид Уоррен «анықталған сөйлем грамматикасы» терминін енгізіп, қазіргі Prolog-та қолданылатын DCG белгісін жасады. Олар осы идеяның авторларын Колмерауэр мен Ковальски деп атады және DCG-лер Колмерауэрдің метаморфоз грамматикасының ерекше жағдайы екенін көрсетті. Олар бұл идеяны «Тілдік талдау үшін анықталған сөйлем грамматикасы» атты мақалада ұсынды, онда DCG грамматиканың бірінші реттік предикаттық логиканың шарттары түрінде берілетін формализм екенін, ол Prolog бағдарламалау тілінің тиімді бағдарламаларын құрайтынын сипаттады. Перейра, Уоррен және Prolog-тың басқа да пионерлері кейін DCG-нің басқа да көптеген аспектілері туралы жазды. Перейра мен Уоррен «Парсингті дедукция ретінде» атты мақала жазып, мысалы, Эрли дедукциясының дәлелдеу процедурасы қалай талдау үшін қолданылатынын сипаттады. Перейра сондай-ақ Стюарт М. Шибермен бірлесіп «Prolog және табиғи тілдік талдау» атты кітап жазды, ол логикалық бағдарламалауды қолдана отырып, есептеу лингвистикасына жалпы кіріспе ретінде жоспарланған.

Мысал

DCG-нің қарапайым мысалы, олардың не екенін және қалай көрінетінін түсіндіруге көмектеседі. сөйлем > есімдік фраза, етістік фраза. есімдік фраза > det, noun. етістік фраза > етістік, есімдік фраза. det > [the]. det > [a]. noun > [мысық]. noun > [жарғанат]. етістік > [жейді]. Бұл "мысық жарғанат жейді", "жарғанат мысықты жейді" сияқты сөйлемдерді құрайды. Prolog интерпретаторында sentence(X,[]) деп теру арқылы осы грамматика арқылы жасалған тілдегі барлық жарамды өрнектерді жасауға болады. Сол сияқты, sentence([the,bat,eats,the,bat],[]) сияқты жазу арқылы сөйлемнің осы тілде жарамды екенін тексеруге болады.

Анықталған сөйлемдерге аудару

DCG белгісі Prolog-тағы қалыпты нақты ережелер үшін тек синтаксистік қант есептеледі. Мысалы, бұрынғы мысал келесідей түрлендірілуі мүмкін:
сөйлем(A,Z) :- сөз тіркесі_зат_есім(A,B), сөз тіркесі_етістік(B,Z).
сөз тіркесі_зат_есім(A,Z) :- анықтауыш(A,B), зат_есім(B,Z).
сөз тіркесі_етістік(A,Z) :- етістік(A,B), сөз тіркесі_зат_есім(B,Z).
анықтауыш([the|X], X).
анықтауыш([a|X], X).
зат_есім([cat|X], X).
зат_есім([bat|X], X).
етістік([eats|X], X).

Белгілерді бейнелеу

Функторларға қосымша аргументтер беру арқылы әртүрлі тілдік ерекшеліктерді DCG-мен де өте тұжырымды түрде бейнелеуге болады. Мысалы, келесі DCG ережелерін қарастырайық:
сөйлем > есімдік(тақырып), етістік тіркесі.
етістік тіркесі > етістік, есімдік(толықтырылатын мүше).
есімдік(тақырып) > [ол].
есімдік(тақырып) > [олар].
есімдік(толықтырылатын мүше) > [оны].
есімдік(толықтырылатын мүше) > [оны].
етістік > [ұнатады].
Бұл грамматика "ол оны ұнатады" және "олар оны ұнатады" сияқты сөйлемдерге рұқсат береді, бірақ "оны ол ұнатады" және "оны олар ұнатады" сияқты сөйлемдерге жол бермейді.

Басқа қолданыстар

DCG-лер кодтың кейбір параметрлерін, талдау қолданбаларынан басқа жерлерде жасыру үшін ыңғайлы синтаксистік қант ретінде қолданылуы мүмкін. Декларативті таза бағдарламалау тілі Меркурийде кіріс-шығыс (I/O) екі io күйлік аргументтерімен көрсетілуі керек. DCG жазуын пайдалану I/O-ны ыңғайлырақ етуге мүмкіндік береді, бірақ көбінесе күйлік айнымалы жазуы қолайлырақ. DCG белгісі Меркурийде де, Prolog-та да талдау және осыған ұқсас операциялар үшін қолданылады.

Ұзартулар

DCG-ны Перейра мен Уоррен енгізгеннен бері бірнеше кеңейтулер ұсынылды. Перейра өзі экстрапозициялық грамматика (XG) деп аталатын кеңеюді ұсынды. Бұл формализм белгілі бір грамматикалық құбылыстарды, мысалы, сол жақтан экстрапозицияны, оңай білдіру үшін жасалды. Перейра былай деді: "XG ережелері мен DCG ережелерінің айырмашылығы – XG ережесінің сол жағында бірнеше символ болуы мүмкін". Бұл контекстке тәуелді грамматика ережелерін түсіндіруді жеңілдетеді. Питер Ван Рой DCG-ді бірнеше аккумуляторларды қолдануға мүмкіндік беру үшін кеңейтті. Тағы бір, соңғы кеңейтуді 1995 жылы NEC корпорациясының зерттеушілері Multi Modal Definite Clause Grammars (MM DCGs) деп атады. Олардың кеңейтулері суреттер сияқты мәтіндік емес бөліктерді қамтитын өрнектерді тану мен талдауға мүмкіндік беру үшін жасалды. Тағы бір кеңейту, белгілі сөйлемді аудару грамматикасы (DCTG) деп аталады, оны 1984 жылы Харви Абрамсон сипаттады. DCTG жазуы DCG жазуына өте ұқсас; басты айырмашылық – ережелерде > белгісінің орнына ::= қолданылады. Ол грамматикалық атрибуттарды ыңғайлы түрде басқару үшін ойлап табылды. DCTG-ні стандартты Prolog шарттарына аудару DCG-ге ұқсас, бірақ 2 аргументтің орнына 3 аргумент қосылады.