5.3 –атрибутты трансляциялау грамматикалары. Атрибутты түрлендірушілер
Бұл бөлімде тек қана ауысымдардың атрибуттық мазмұндауларымен таныстық емес, сонымен қатар өрмелемейтін атрибуттық түрлендірушілермен де танысамыз. Олар атрибуттармен кіріс символдарды шын атрибутты кіріс символддарының шынжырын өңдеп, әрбір кіріс шынжырына оның ауысымы ретінде кіріс шынжырын құру немесе мүлдем кіріс тіліне жатпайтынын мойындап, бетін қайтаруы қажет.
Бұндай құрылғылар өрлемейтін талдау кіре берісінде атрибуттарды есептеуді қамтамасыз ету керек. Кез келген -грамматика бұндай өңдеу мүмкіндігін бермейді, тек қана нақты талаптарға жауап беретін грамматикалар. Алдымен атрибут бағыныңқылығына шектеуліктері бар атрибутты трансляциялау грамматикаларын қарастырайық. Бұндай грамматикалар - атрибутты трансляциялау грамматикасы ( -грамматикалар) деп аталады.
-грамматикасы - атрибутты трансляциялау грамматикасы болып келесі үш шартты орындаса ғана бола алады:
1 Грамматика ережесінің оң жағының әрбір мұра етілуші атрибут символы ереженің сол мұра етілуші атрибут символдарын қолданып, не атаулы символдың сол жағында орналасқан оң жақ ереженің еркін атрибут символдарын қолданумен есептелуі керек.
2 Грамматика ережесінің сол жақтағы әрбір синтезделінетін символ атрибуты ереженің сол жағындағы мұра етілуші символ атрибуттарының немесе бұл ереженің оң жағындағы еркін символ атрибуттарын қолданып, есептелуі керек.
3 Іс-әрекеттің әрбір синтезделінетін символ атрибуты бұл іс-әрекет символының мұра етілуші атрибуттары бойынша есептелуі керек.
1-шарттың мәні грамматика ережесінде тек қана оның сол жағында орналасқан шама мұра етілуші атрибуттар бағыныңқылығын қамтамасыз етуінде. Бұл шарт атрибуттарды жоғарыдан төмен қарай өңдеуге мүмкіндік береді, себебі әрбір символ сол жағындағы символдар оқылғанға дейін өңделеді. 2 және 3-шарттар шеңбер бойынша айнала бағыныңқы болуынан айырылуын қамтамасыз етеді. Барлық бірге алынған үш шарт төмендегі келтірілген түрдегі атрибуттарды есептеу ретінде әкеледі
1 мұра етілушілер атрибуттары
2 мұра етілушілер атрибуттары,
3 синтезделуші атрибуттары,
4 мұра етілушілер атрибуттары,
5 синтезделуші атрибуттары,
6 синтезделуші атрибуты.
-грамматикаларын жай иемдену формалары
Түрлендірушілерді тұрғызуға арналған -грамматикасына салынатын шектеуліктердің екінші түрі болып атрибуттарды есептеу ережелерінде терминал емес символдарды және функционалды бағыныңқы іс-әрекеті символдарының кейбір атрибуттарын қолдануға тиым салу болып табылады. Бұл тиымды орындаған кезде атрибуттарды есептеу ережелері оң жақта қолданылған иемдену операторларының формасында болуы керек.
Бұндай ережелі грамматика жай иемдену -грамматикасы деп аталады.
Атрибуттарды есептеу ережелерінің санын азайту үшін бұндай грамматикаларда иемдену жай операторлары түріндегі ережелерді ғана емес, бірнеше ауыспалыларға бір мағына берілетін көптік иемдену түріндегі операторларды қолдануға рұқсат етіледі. Жай және көптік иемдену операторлары көшіруші ереже деп аталады. Бұндай ереженің оң жағын қайнар көзі, ал сол жақтың әрбір атрибутын қабылдағыш деп атайды. көшіруші ережелері жиыны егеменді деп бұл жиынның әр ережесінің қайнар көзі бұл жиынның басқа бірде бір ереже құрамына кірмеген жағдайда аталады.
Егер көшірме ережелер бағыныңқы болып келсе, онда кейбір жағдайларда оларды бір ережеге біріктіруге болады. Мысалы: және ережелерін бір ережесі түрінде жазуға болады, немесе және ережелерін сондай-ақ түрінде жазуға болады, себебі екінші ереженің қайнар көзі болып бірінші ережеге сәйкес мағынасы беріледі. Егер көшіруші ережелер егеменді болса, онда олардыбіріктіруге болады.
Көшіруші ережелердің егемендік түсінігін қолдана отырып, келесі анықтамаға келеміз:
-грамматикасы жай иемдену формасына келесі шарттарды орындағанды келеді:
а) іс-әрекеттің синтезделінетін символдарын есептеу ережелерінен басқа барлық атрибуттарды есептеу ережелері көшіруші болып табылады.
б) грамматиканың әрбір ережесіне көшіруші ережелер жиыны егеменді болып табылады.
– атрибуттық және -грамматикасының жай иемдену қасиеті атрибутты ауысымды іске асыратын түрлендіруші тұрғызу үшін қажет болып табылады.
Егер берілген –грамматикасының жай иемдену формасы болмаса, онда ол үшін жай иемдену формасындағы эквивалентті -грамматикасын құруға болады.
Көшірмейтін ережелер түрленуінің реттілігін мазмұндамас бұрын, бұндай түрлену қалай болатынын көрсететін мысалды қарастырайық. Айтарлық көшірмейтін атрибуттық ереже келесі түрде берілген дейік:
Алдымен функциясының есептеуін көрсететін іс-әрекеттің жаңа символын енгіземіз. Іс-әрекет символын түрінде белгілейміз де, оған үш атрибут береміз. Екі мұра етуші атрибуттары функция аргументін беру үшін, ал бір синтезделінуші атрибуты функция мағынасын алу үшін қажет. Нәтижесінде келесі іс-әрекет символының анықтамасына жетеміз: , бұнда мағынасы функциясы ретінде анықталады.
Осыдан соң грамматика ережесіне іс-әрекеттің жаңа символын енгіземіз және функциялы оң жақта болатын атрибутты есептеудің көшірмейтін ережесін іс-әрекеттің жаңа символы мен функциясының аргументінің арасындағы байланысты тағайындау бірнеше көшірме ережелерімен ауыстырамыз. Аталған іс-әрекеттерді орындай келе келесі атрибуттың ережеге жетеміз:
Бұнда екі ережесі аргумент, ал біреуі нәтиже көшіретін тек қана көшіру ережелері бар.
Грамматика ережесіне жаңа терминал емес символды жағу жерін таңдауда берілген грамматиканың –атрибуттық қасиеті жойылмауы керек. Егер қарастырылып жатқан мысалға іс-әрекеттің алдынан терминал емес жаңа символын енгізсек, онда келесі ережені аламыз:
бұнда мұра етілуші атрибутының мағынасы – атрибуттығының қасиетін бұзатын оның оң жағында орналасқан синтезделуші атрибутымен анықталады.
Егер де іс-әрекеттің жаңа символын символынан кейін қойсақ, онда келесі ережені аламыз:
бұнда атрибуты –атрибутының қасиетін жоятын, одан оңдау орналасқан с атрибуты бойынша анықталады. Осыдан қарастырылып жатқан мысалда іс-әрекеттің жаңа символының –атрибутының қасиетінің бұзылмауы тек қана және терминал емес символды ережелерінің бір позицияларында ғана мүмкін. Егер бұл былай болса, онда мүмкін позициялардан ең солындағыны таңдау қажет, себебі кейбір жағдайларда нағыз іс-әрекеттің сол жақтағы символдар өңдеуді жүргізетін түрлендірушілер дүкеніне енгізбу керек. Ал егер де іс-әрекеттің жаңа символы орналасқан барлық позициялар жарамсыз және –атрибут қасиетін жоятын болса, онда бұндай грамматиканы түрлендіру мүмкін емес.
-грамматикасын жай иемдену формасындағы -грамматикасына түрлендіру
Жүргізілген талдау нәтижесі ретінде -грамматикасын жай иемдену формасындағы -грамматикасына түрлендіру ретін мазмұндайық.
1 Грамматиканың кейбір ережелермен байланысты атрибуттарды есептеу ережелеріне енетін әрбір функциясы атрибуты бар іс-әрекеттің қосымша символын енгіземіз де оны деп белгілеп, түрінде анықтаймыз, бұнда мағынасы сияқты анықталады.
2 Грамматиканың кейбір ережелерімен байланысты әрбір көшірмейтін ережесі үшін грамматика ережесінің оң жағына және символдары грамматика ережесінде жоқ шығар деп қосамыз да, көшірмейтін ережені түріндегі көшірме ережесіне ауыстырамыз: .
3 іс-әрекет символын жаққан кезде келесі шектеуліктерді сақтау қажет:
а) іс-әрекет символы аргументінің біруі атрибуты болып келетін грамматика ережесінің оң жағындағы әрбір символдан оңдау орналасуы керек.
б) іс-әрекет символы аргументінің біреуі атрибуты болып келетін грамматика ережесінің оң жағындағы әрбір символдан солдау орналасуы керек.
в) егер іс-әрекет символын орналастыру позициясының бірнеше түрі болса, онда мүмкін позициялардан сол жақтағысы таңдалуы керек.
4 Егер грамматика ережесінің біреуінің қайнар көзі екіншісіне енетін болса, онда грамматика ережесінің екі көшірме ережесін бір ережеге біріктіру керек.
Бұл біріктіру бос қайнар көзі бар ережені жою жолымен іске асырылады. Параметрлерсіз оң жақта қолданылған процедуралар бағыныңқы ережелерді біріктірген кезде қауіптік сақтау керегін атап өтейік, себебі түрлі шақыру процедуралары түрлі мағына беретін болғандықтан қателік тууы мүмкін.
Жай иемдену формасындағы –грамматикалары атрибуттарға салынатын шектеуліктері атрибуттық түрлендірушілерді тұрғызу үшін мүмкіндік тудырады.
Егер -грамматикаларының ережесінен барлық атрибуттарды жойсақ, онда трансляциялау грамматикасы шығады және оған өрлемейтін дүкендік түрлендіруші құрылуы мүмкін.
Осыған -түрлендірушіні атрибуттарды өңдеумен байланысты іс-әрекетін толықтырылған дүкендік түрлендіруші түрінде құруға болады.
-грамматикада синтезделінетін атрибуттардың мағынасын анықтауда қойып қойған иемдену тууы мүмкін, сондықтан -түрлендіруші жұмысын жоспарлауда мағыналары әлі анықталмаған атрибуттарды сақтау мүмкіндігін ескеру қажет.
Бұндай атрибуттарды сақтау үшін дүкен қолданылуы мүмкін. Атрибуттарды жай сақтау жеткіліксіз, себебі атрибут қандай мағына алуы қажет туралы мәліметтерді де сақтау керек. Жай иемдену формасында мағынаны анықтаудың бір ғана тәсілі қолданылатынын ескереотырып, иемдену операторының көмегімен иемдену мәліметтерін дүкенде көрсеткіш көмегімен көрсетуге болады. Ол үшін дүкеннің қайнар көзіне сәйкес келетін элементін қабылдағышқа сәйкес келетін элементіне көрсететін көрсеткішті жазуға болады.
Бұндай көрсеткіштерді дүкенде оған грамматика ережесінің оң жағын жазған кезде орналастыруға болады.
Бұл жағдайда алдымен қайнар көзі, ал одан кейін қабылдағыш анықталатын атрибут мағынасының анықталу реті қамтамасыз етілуі қажет. Бұндай реттіліктің есептеуінің орындалуы –атрибуттық грамматика қасиетіне кепілдік береді.
-грамматикасы үшін кеңейтілген шығару
Атрибуттарды өңдеудің мазмұндалған тәсілінің илюстрациясы ретінде грамматикасындағы кеңейтілген шығару көрінісін қарастырамыз.
Бұндай шығаруға тек қана терминалды, терминалды емес және операциялық символдар ғана емес, сонымен қатар мағынасы әлі анықталмаған атрибуттар да енеді. Иемдену операцияларына сәйкес келетін атрибуттар арасындағы байланысты көрсету үшін желілік шығарумен қолданамыз. Бұндай шығару келесідей құрылады:
- Атрибуттарды индекс позициясынан жолға ауыстырамыз да грамматиканың сәйкес келетін символына орналастырамыз.
- Қойып қойған есептеу қадамына сәйкес келетін әрбір көшіру ережесіне қайнар көзден қабылдағышқа бағытталған, қайнар көз бен қабылдағышты шығару шынжырына байланыстыратын доғаны сәйкесінше қоямыз..
- Көптік көшірме ережелеріне сәйкесінше қайнар көзді қабылдағышпен байланыстыратын шығару шынжырында доғалар ретін қоямыз.
- Егер шығару үрдісінде атрибут мағына алса, онда ол мағынаны атрибут есімінің орнына шығару шынжырына жазамыз, ал сәйкес доғаны жоямыз.
- Терминал емес символды ауыстырғанда ол шығару шынжырында жойылады, бірақ оның атрибуттары орындарында қалу керек.
Келтірілген шығаруда әрбір ауыстырылатын терминал емес символдардың атрибуты шығару шынжырында сақталуы қажет.
Атрибуттық түрлендірушілер .
Алдыңғы бөлімде қарастырылған атрибуттық мазмұндау ауысымды мазмұндаудың синтаксистік бағытталған тәсілінің жалпыламасы болып табылады, ал бұл бөлімде қарастырылатын атрибуттың түрлендірушілердің тұрғызылуы мен жұмысының ережелері жасанды тілдер үшін компилярларды құру кезінде бұндай мазмұндауларды тәжірибеде қолдануға мүмкіндігін беруді көрсетеді.
Қарастырылатын -лар өрмелемейтін символды түрлендірушілер негізінде құрылады, сондықтан оларды өрмелемейтін атрибуттық түрлендірушілер деп атайды. Бұндай түрлендірушілер жұмыс үрдісінде мысалы, аралық нәтижелерге жады бөлу, кесте мен өрістерді толтыру және мән мәтіндік шарттарды тексеру сияқты іс-әрекеттерді орындауға мүмкіндік береді.
Достарыңызбен бөлісу: |