Лаборатория иши 4
Объект кодини генерациялаш. Хоара триада ва тетрадаларига таржима қилиш.
Ишдан максад: Ушбу тажриба ишида синтаксис разбор дарахти асосида дастурнинг объект кодини ташкил этувчи ва сунгра уни оптималлаштирувчи дастурни ёзиш талаб этилади. Кирувчи синтаксис разбор дарахти сифатида аввалги тажриба ишларида ташкил этилган дарахтдан фойдаланиш тавсия этилади.
Тажриба ишининг натижаси объект тилидаги берилган грамматика гаплари асосида курилган дастур булиши керак. Объект тили сифатида аник режимдаги Intel 80x86 туридаги процессорлар учун ассемблер тилидан фойдаланиш максадга мувофикдир.
Берилган дастурда иштирок этувчи барча, турларни узгартиришни талаб этмайдиган, идентификаторларни оддий скаляр узгарувчилар деб хисобланади.
Ушбу тажриба ишини икки боскичда ишлаб чикиш мумкин – триадалар руйхатини куриш ва ассемблер кодини генерациялаш.
Назарий кисм : Триадалар руйхатини куриш.
Триадалар руйхатини куришда, аввалги тажриба ишларида синтаксис тахлилчи томонидан курилган, чикиш дарахтини рекурсив утиши амалга оширилади. Бу холда куйидаги кушимча триадаларнинг турлари киритилади:
– Триада if (a,b), бу ерда a ва b операндлар албатта триадаларга курсаткич хисобланадилар. Ушбу триаданинг мазмуни куйидагичадир: агар a триаданинг мантикий ифода бўлган хисоблаш натижаси, нолга тенг булса, у холда b курсаткич буйичаутиш амалга оширилади. Акс холда руйхат буйича кейинги триадага кетма-кет утиш амалга оширилади.
– Триада jmp (1, a), бу ерда биринчи операнд маъновий юкламага эга эмас, иккинчи операнд эса триадага, кейинги боскичда шартсиз утишни амалга ошириши керак бўлган, курсаткични курсатади.
Кирувчи тилнинг семантик юкламага эга булмаган ифодалари янги триадаларни ташкил этмайдилар, лекин чикиш дарахтининг бундай тугунлари учун триадаларни куришни рекурсив чакириш функциялари амалга оширилади.
Колган ифодалар битта ёки бир нечта кетма-кет триадаларга бир кийматли айлантирилади.
Триадалар руйхатини куришни тугаши билан уни оптималлаш, яъни ортикча амалларни олиб ташлаш билан амалга оширилади. Бу холда яна бир кушимча триада туридан фойдаланилади – SAME (a, 0), бу ерда иккинчи операнд маънога эга эмас, биринчи операнд эса берилган ифодага узгартирилган триадага мос триадага курсатади.
Ассемблер кодини генерациялаш
Ассемблер кодини триадалар руйхати асосида генерациялаш кушимча айлантиришлар талаб этмайди, хар бир триада кандайдир ассемблер командалари кетма-кетлигига бир кийматли узгартирилиши мумкин. Бу холда асосий муаммо булиб микропроцессор регистрларини ассемблер кодини бажарилиш даврида тугри таксимлаш хисобланади.
Жорий триадага мос келувчи ассемблер командалари руйхатини куйишдан аввал аккумлятор кийматини узгартирилиш зарурияти текширилади. Агар у ерда аввалдан зарур киймат мавжуд булса, у холда унинг узгартирилиши ортикча хисобланади, акс холда, биринчи тугулувчи команда mov хисобланади. Худди шундай, амални бажарилиш натижаларини саклаш зарурияти тугилганда (агар у кейинчалик келувчи амалларда чакирилса), у регистрларнинг биронтасида саклаб куйилади.
Натижалар
Триадаларнинг руйхатларини генерацияси учун куйидаги модуллар Triad, TriListMaker ва TriListOptimizer жавоб берадилар. Triad синфи битта триадага мос келувчи структурани аниклайди. TriListMaker модули синтаксис чикиш дарахти асосида триадаларнинг бошлангич руйхатини генерациялайди, TriListOptimizer модул эса ортикча амалларни олиб ташлаш хисобига уни оптималлайди. Триадаларнинг оптималлаш тугалланиши биланок, натижавий руйхат AsmGenerator модулга жунатилади – бу модул эса ассемблер кодини генерациялашга жабоб беради. AsmGenerator модулнинг ишининг натижаси кирувчи матнли файл асосидаги натижавий объект коди хисобланади. Берилган амалларнинг натижалари экранга TriTab ва AsmTab модуллари оркали мос равишда чикарилади.
Тажриба ишининг бажарилиш тартиби (алгоритми):
1.Масаланинг куйилишини ифодалаш.
2.Масаланинг алгоритмини, блок чизмасини тузиш.
3.Дастурлаш тилида масала дастурини тузиш.
4.Хулоса.
5.Натижаларни когоз ёки монитор экранига чикариш.
6.Фойдаланилган адабиётлар.
7.Тажриба иши буйича хисобот тайёрлаш.
Хисоботга талаблар:
Хисоботда куйилган масаланинг берилиши, назарий кисми, ишнинг бажарилиши алгоритми, блок чизмаси, дастур матни, олинган натижалар ва фойдаланилган адабиётлар акс эттирилиши керак.
Синов саволлари:
Генерация килинаётган колни ички ифодаланишида «туртлик» кандай булаклардан ташкил топади?
Кодни генерациялашда «туртлик»ни куллашнинг ютуклари нималарда куринади?
Do'stlaringiz bilan baham: |