and NumberValue(rightchild(rightchild(root(t))))==1
and EqualTrees(leftchild(root(t)),leftchild(rightchild(root(t))))
and NoSideEffects(leftchild(root(t)))
then
nodetype(root(t))=AutoIncNode;
delete(rightchild(root(t));
endif
end
Ushbu protsessual transformatsiya yuqoridagi Y = X + 1 daraxtiga e'tibor bermasligi aniq bo'lishi kerak. Bundan tashqari, protsedura kabi bir xil transformatsiyani ifodalash uchun ko'proq kod yozish kerakligi va uni o'qish ancha kamligi aniq bo'lishi kerak.
Bunday protsessual o'zgarishlarni amalga oshiradigan juda ko'p tizimlar mavjud, shu jumladan an'anaviy kompilyatorlar (ular yuqori darajadagi tillarni quyi darajadagi assembler tillariga aylantirishda juda muvaffaqiyatli). Ushbu tizimlar keng tarqalgan, chunki til tuzilmalari dasturlash tilida ma'lumotlar tuzilmalarida amalga oshirilgandan so'ng, ushbu ma'lumotlar tuzilmalarida harakatlanish/o'zgartirish uchun ushbu dasturlash tilida kodlashni boshlash ahamiyatsiz. Natijada, OpenC++ kabi ko'plab tilga xos dasturlarni o'zgartirish tizimlari shu tarzda amalga oshiriladi. Yaxshi xabar shundaki, ular uchun texnologiya yaxshi tushunilgan va keng tarqalgan; Yaqinda yangi yaratilgan CodeDom atamasi kompilyatorga o'xshash "mavhum sintaksis daraxtlari" (allaqachon kompilyatorlar hamjamiyati tomonidan ma'lum bo'lgan juda yaxshi atama) ni ifodalovchi dasturiy vositalarni tasvirlash uchun paydo bo'la boshladi va ular ustidan protsessual tarzda o'tishga imkon beradi. Yomon xabar shundaki, transformatsiyalarni shu tarzda yozish hali ham og'riqli, chunki transformator muhandisi strukturani tasvirlashning har bir mayda detallarini bilishi va ularni to'g'rilashi kerak. (Biz shuni ta'kidlaymizki, ko'pgina koddomlar buni to'g'ri bajarish uchun haqiqatan ham etarli ma'lumotni taqdim etmaydi, masalan, MS Visual Studio 2008 da C# CodeDom ifoda tuzilishi haqida hech qanday ma'lumot bermaydi.)
Manbadan manbaga transformatsiya tizimlarini amalga oshirish protsessual transformatsiya tizimlarini amalga oshirishdan ko'ra ancha qiyin, chunki strukturani naqshdan bilvosita ajratib olish, tuzilmani moslashtirish, dastur holatini tekshirish va tuzilmalarni yangilash zarur, ammo bu aniq bo'lishi kerak. manbadan manbaga aylantirish tizimlaridan foydalanish sof protsessual transformatsiya tizimidan foydalanishga qaraganda ancha oson. Biz kutamizki, autoinc uchun protsessual transformatsiya va manbadan manbaga versiya o'rtasidagi taqqoslash buni ravshan qiladi. Semantikani saqlab qolish uchun protsessual o'zgarishlarni tasdiqlash ham og'riqli, chunki ular strukturalardagi mikroprotsessual harakatlarda ifodalanadi. DMS protsessual dasturni o'zgartirish interfeysini taqdim etadi, lekin u odatda kam ishlatiladi.
Do'stlaringiz bilan baham: |