Ta'rifga erishish - Reaching definition - Wikipedia

Yilda kompilyator nazariyasi, a ta'rifga erishish chunki berilgan ko'rsatma oldingi o'zgaruvchidir, uning maqsadli o'zgaruvchisi berilganga berilishi mumkin (tayinlanishi mumkin). Masalan, quyidagi kodda:

d1: y: = 3d2: x: = y

d1 uchun yetadigan ta'rifdir d2. Quyidagi misolda, ammo:

d1: y: = 3d2: y: = 4d3: x: = y

d1 endi aniqlanadigan ta'rif emas d3, chunki d2 uning erishishini o'ldiradi: ichida belgilangan qiymat d1 endi mavjud emas va erisha olmaydi d3.

Tahlil sifatida

Xuddi shunday nomlangan ta'riflarga erishish a ma'lumotlar oqimini tahlil qilish kodda qaysi ta'riflar ma'lum bir nuqtaga yetishi mumkinligini statik ravishda belgilaydi. Oddiyligi sababli, u ko'pincha darsliklarda ma'lumotlar oqimini tahlil qilishning kanonik namunasi sifatida ishlatiladi. The ma'lumotlar oqimini birlashtirish operatori ishlatiladigan birlashma o'rnatiladi va tahlil oldinga siljiydi. Yetib boruvchi ta'riflar hisoblash uchun ishlatiladi use-def zanjirlari.

Berilgan asosiy blok uchun ishlatiladigan ma'lumotlar oqimining tenglamalari ta'riflarga erishishda:

Boshqacha qilib aytganda, erishilgan ta'riflar to'plami ning barcha ta'riflari o'tmishdoshlari, . oldin kelgan barcha asosiy bloklardan iborat ichida oqim oqimi grafigi. Yuzaga keladigan ta'riflar ularning barchasi avvalgilarining ta'riflariga minus, o'zgaruvchisi tomonidan o'ldirilgan ta'riflardan minus ichida hosil bo'lgan har qanday yangi ta'riflar .

Umumiy ko'rsatma uchun biz quyidagini aniqlaymiz va quyidagicha o'rnatiladi:

  • , asosiy blokdagi mahalliy mavjud ta'riflar to'plami
  • , asosiy blokdagi ta'riflar bilan o'ldirilgan ta'riflar to'plami (mahalliy mavjud emas, ammo dasturning qolgan qismida).

qayerda o'zgaruvchiga tayinlanadigan barcha ta'riflarning to'plamidir . Bu yerda tayinlash ko'rsatmasiga biriktirilgan noyob yorliq; Shunday qilib, ta'riflarga erishishda qiymatlarning sohasi ushbu ko'rsatmalardir.

Ishchi ro'yxat algoritmi

Ta'rifga erishish odatda takrorlanadigan ish ro'yxati algoritmi yordamida hisoblanadi.

Kiritish: CFG boshqaruv oqim grafigi = (tugunlar, qirralar, kirish, chiqish)

// boshlanguchun barchasi CFG tugunlar n yilda N,    Chiqdi[n] = bo'sh joy; // OUT [n] = GEN [n] bo'yicha optimallashtirish mumkin;// barcha tugunlarni o'zgartirilgan to'plamga qo'ying// N - grafadagi barcha tugunlar,O'zgartirildi = N;// takrorlash esa (O'zgartirildi != bo'sh joy){    tanlang a tugun n yilda O'zgartirildi;    // uni o'zgartirilgan to'plamdan olib tashlang    O'zgartirildi = O'zgartirildi -{ n };    // init IN [n] bo'sh bo'lishi kerak    IN[n] = bo'sh joy;    // oldingi [O] [p] dan IN [n] ni hisoblang    uchun barchasi tugunlar p yilda salaflar(n)         IN[n] = IN[n] Ittifoq Chiqdi[p];    eskirgan = Chiqdi[n]; // eski OUTni saqlash [n]        // f_n () uzatish funktsiyasi yordamida OUT [n] ni yangilang    Chiqdi[n] = GEN[n] Ittifoq (IN[n] -OL[n]);    // oldingi qiymatga nisbatan OUT [n] ga o'zgartirish bormi?    agar (Chiqdi[n] o'zgargan) // oldout va OUT-ni solishtiring [n]    {            // ha bo'lsa, n ning barcha merosxo'rlarini o'zgartirilgan to'plamga qo'ying        uchun barchasi tugunlar s yilda vorislar(n)             O'zgartirildi = O'zgartirildi U { s };    }}

Qo'shimcha o'qish

  • Aho, Alfred V.; Seti, Ravi va Ullman, Jeffri D. (1986). Tuzuvchilar: printsiplar, usullar va vositalar. Addison Uesli. ISBN  0-201-10088-6.
  • Appel, Endryu V. (1999). ML-da zamonaviy kompilyatorni amalga oshirish. Kembrij universiteti matbuoti. ISBN  0-521-58274-1.
  • Kuper, Keyt D. va Torkzon, Linda. (2005). Tuzuvchi muhandisligi. Morgan Kaufmann. ISBN  1-55860-698-X.
  • Muchnik, Stiven S. (1997). Murakkab kompilyatorni loyihalash va amalga oshirish. Morgan Kaufmann. ISBN  1-55860-320-4.
  • Nilson F., XR Nilson; , C. Xankin (2005). Dasturlarni tahlil qilish tamoyillari. Springer. ISBN  3-540-65410-0.

Shuningdek qarang