Ўзбекистон республикаси алоқА, ахборотлаштириш ва телекоммуникация технологиялари давлат қЎмитаси тошкент ахборот технологиялари университети


Download 1.45 Mb.
bet56/60
Sana18.03.2023
Hajmi1.45 Mb.
#1282705
1   ...   52   53   54   55   56   57   58   59   60
Bog'liq
ТДТ(Маъруза 2011) охирги

Префикс польша ёзуви (ПрПЗ) куйидагича аникланади.
Агар инфикс ифода Е битта а операнддан иборат булса, у холда ПрПЗ ифода Е бу а .
Агар инфикс ифода Е1*Е2, бу ерда * амал белгиси, Е1 ва Е2 операндлар учун инфикс ифода, у холда ушбу ПрПз *Е1’Е2’ , бу ерда Е1’,Е2’ – Е1 ва Е2 ифодаларнинг ПрПЗ идир.
Агар (Е) инфикс ифода булса, ушбу ифоданинг ПрПЗи ПрПз Е дир.
Санаб утилган коидалар берилган инфикс ифоданинг ПрПЗни куриш тартибини аниклайдилар. Масалан, (а+б)*(с-д) ифода учун ПрПЗ ни куйидагича куриш мумкин.
Биринчи бажарилувчи амалнинг операндларини аниклаймиз.
Е1= (а+б) ва Е2 = (с-д).
Аниклашларга кура префикс ёзув Е1*Е2 бу *Е1’Е2’ бу ерда Е1’,Е2’ – Е1 ва Е2 ифодаларнинг ПрПЗ идир. Бу ифодалар учун префикс ёзувларни куришни бажарамиз.
Е1’ = +аб, Е2’= -сд ва натижада куидаги куринишни оламиз:
*+аб-сд


Постфикс ёзувда эса амал ишоралари операндлардан кейин куйилиши билан фаркланади. Масалан, инфикс ёзув (А+В) га постфикс ёзув АВ+ мос келади.
Постфикс польша ёзуви (ПоПЗ) куйидагича аникланади.
Агар инфикс ёзув Е битта а операнддан иборат булса, у холда Е ни ПоПЗ а булади.
Агар инфикс ифода Е1*Е2, бу ерда * амал белгиси, Е1 ва Е2 операндлар учун инфикс ифода, у холда ушбу ПоПз Е1’Е2’* , бу ерда Е1’,Е2’ – Е1 ва Е2 ифодаларнинг ПоПЗ идир.
Агар (Е) инфикс ифода булса, ушбу ифоданинг ПоПЗи ПоПз Е дир.
Худди юкоридагидек мисолга ПоПЗни курамиз.
(а+б)*(с-д)
Ташки амалларнинг операндларини белгилаймиз.
Е1= (а+б) ва Е2 = (с-д).
Буларнинг постфикс ёзувларини топамиз:
Е1’ = аб+, Е2’= сд-
Ифодага куйиб Е1’Е2’* ва натижада аб+сд-* га эга буламиз.
Ифодаларнинг постфикс ёзуви иккита кучли хусусиятга эга булиб, уларни шунинг учун хам компиляторларда кенг кулланилади.
Ихтиёрий ифодани ёзиш учун кавслар шарт эмас, чунки амалда иштирок этувчи оператор операнддан кейин келади, ва операндларни курсатишдаги ноаниклик булмайди. Масалан, (А+В)+С постфикс ёзувда АВ+С+, А+(В+С) эса постфикс ёзувда АВС+ куринишда ёзилади.
Навбатдаги операторни укиш вактида мос операндлар укиб булинган буладилар ва оператор бошка кушимча бнрилганларни укишсиз бажарилиши мумкин. Юкорида айтилганлар бинар амалларга хам тегишли булиб уларни унар амалларга хам куллаш кийин эмас. Унар оператор (тескари ~) ни аргументдан кейин куйиш етарлидир. Мсаслан инфикс ёзув ~А А~ куринишда булади, ~(А+В) ифода эса АВ+~ куринишга эга булади.
Юкоридаги хусусиятларга асосан постфикс куринишдаги ифода куйидаги оддий алгоритм оркали хисобланиши мумкин.
while(lex!=NULL) // ифодада лексемалар колмагунича
{
lex= getNextLex( ); // кейинги лексемани укиш
if(isOperand(lex)) // лексема, агар операнд булса
push(lex); // лексемани стекга ёзиш
if(isOperator(lex)) // лексема, агар оператор булса
push( performOperation(lex, pop( ), pop( ) ));
/* охирги стекка ёзилган лексемалар курсатаётган амалларни бажариш ва ушбу элементларни амал натижаси билан алмаштириш;
*/
}
Хисоблашлар натижасида ифоданинг киймати стекнинг ягона элементи булиб колади. Бундай стек билан амаллар бажарувчи алгоритм ихтиёрий компиляторнинг асосини ташкил этади. Купинча синтаксис тахлил блоки дастурни постфикс куринишга айлантиради, ундан кейин код генератори объект дастурни юкоридаги усул билан ифодаларни караб чиккан холда куради. Куриниб турибдики, постфикс ёзувларни хисоблаш кийинчилик тугдирмайди, лекин инфикс ёзувларни постфиксга айлантириш мураккаброк иш. Фараз килайлик тил махсулоти куйидаги куринишга эга булсин.
А В и С
Бу ерда А,В ва С нотерминал белгилардир, и эса терминал белгидир. Амал ишоралари терминал белгилар деб хисоблаймиз. У холда бу махсулот нотерминал А инфикс ёзув эканлигини ва унда В ва С «и» оператор билан биргаликда катнашаётганлигини билдиради. Худди шундай ифоданинг постфикс куриниши хам В ва С операндлардан ташкил этилади ва улардан сунг «и» оператори келади. Шундай килтб бундай махсулот учун постфикс ёзув куйидаги куринишга эга булади.
В учун постфикс ёзув
С учун постфикс ёзув
и
Агар барча терминал белгилар чикувчи файлга шу тартибда чикарилсалар, у холда барча тилнинг фразалари постфикс куринишида ифодаланадилар.
4.Семантик тахлил боскичлари
1. Кирувчи дастурдаги кирувчи тилнинг семантикасини текшириш. Ушбу текширув дастурнинг кирувчи занжирларини кирувчи дастурлаш тили семантикасини талабларига мос куйишдан иборат.
а:=в+с
2. Компиляторда дастурнинг ички тасвирланишини кирувчи тилнинг семантикаси ёрдамида ноаник курсатилган операторларда кушиш. Ушбу харакатлар ифодаларнинг операндлари турларини айлантириш ва функциялар, процедураларни параметрларини узатиш билан боглик.
3. Дастурлаш тилларининг кирувчи тил билан тугридан тугри богланмаган элементар семантик нормаларини текшириш.
Ушбу текширув купгина замонавий дастурлаш тиллари курсатадиган сервис функция хисобланади. Ушбуни бажарилиши мажбурий шарт эмас.
4. Тилни лексик улчовларини идентификацияси.
Узгарувчиларни, тоифаларни, процедураларни, функцияларни ва бошка дастурлашнинг лексик тилларни идентификацияси– бу берилган объектлар ва уларнинг кирувчи дастур матнидаги исмлари уртасидаги бир кийматлиликни урнатишдир.



Download 1.45 Mb.

Do'stlaringiz bilan baham:
1   ...   52   53   54   55   56   57   58   59   60




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling