Кіріспе

Алиас талдау – компилятор теориясындағы әдіс, сақтау орнына бірнеше тәсілмен қол жеткізуге болатынын анықтау үшін қолданылады. Егер екі нұсқау бірдей орнға сілтесе, олар алиас деп аталады. Алиас талдау әдістері әдетте ағынға сезімталдығы және контекстке сезімталдығы бойынша жіктеледі. Олар мүмкін алиас немесе міндетті алиас туралы ақпаратты анықтай алады. "Алиас талдау" термині көбінесе "нұсқауларға сілтеме талдауымен" (points-to analysis) ауыстырып қолданылады, ол нақты жағдайды білдіреді. Алиас талдағыштары бағдарламалардағы алиасты түсіну үшін пайдалы ақпаратты жасау және есептеу мақсатында жұмыс істейді.

Атауларды талдау

Атауларды талдау кезінде бағдарлама жады атаулар кластарына бөлінеді. Атаулар кластары – бір-біріне сәйкес келе алмайтын орналасулардың бөлек жиындары. Бұл талқылау үшін, мұндағы оңтайландырулар бағдарламаның төмен деңгейлі аралық өрнегінде жүзеге асырылады деп есептеледі. Яғни, бағдарлама бинарлық операцияларға, секірулерге, регистрлер арасындағы жылжуларға, регистрлерден жадқа, жадтан регистрлерге жылжуларға, тармақтануларға және функцияны шақыру/қайтару операцияларына компиляцияланған.

Түрге негізделген псевдонимдер талдауы

Егер құрастырылатын тіл типтік қауіпсіз болса, компилятордың типті тексерушісі дұрыс болса және тілде жергілікті айнымалыларға сілтеме жасайтын көрсеткіштер жасау мүмкіндігі болмаса (мысалы, ML, Haskell немесе Java), онда бірнеше пайдалы оңтайландырулар жасалуы мүмкін. Көптеген жағдайларда екі жад орны әртүрлі псевдоним кластарында болуы керек екенін білеміз:

Әртүрлі типтегі екі айнымалы бірдей псевдоним класында бола алмайды, себебі бұл қасиет қатты типтелген, жадқа сілтеме жасаудан бос (яғни жад орнына жасалған сілтемелерді тікелей өзгертуге болмайды) тілдерге тән. Әртүрлі типтегі екі айнымалы бір уақытта бір жад орнын бөлісе алмайды. Ағымдағы стек фрейміне жергілікті жад бөлулер ешқандай алдыңғы стек фреймінен бөлінген жад бөлулермен бірдей псевдоним класында бола алмайды. Бұл жағдай, жаңа жад бөлулер барлық басқа жад бөлулерден бөлек болуы керек болғандықтан туындайды. Әдетте, әрбір жазба түрінің әрбір өрісінің өзінің псевдоним класы болады, себебі типтеу ережесі көбінесе бірдей типтегі жазбалардың ғана псевдоним болуына рұқсат береді. Бір типтегі барлық жазбалар жадыда бірдей форматта сақталады, сондықтан өріс тек өзіне ғана псевдоним болуы мүмкін. Сол сияқты, әрбір белгілі бір типтегі массивтің өзінің псевдоним класы болады. Кодты псевдонимдерге талдағанда, жадқа әрбір жүктеу және сақтау операциясы оның класымен белгіленуі керек. Егер жад орындары және олардың псевдоним кластары берілген болса, онда псевдоним болуы мүмкін, ал егер псевдонимдер болмаса, онда жад орындары псевдоним болмайды – бұл пайдалы қасиет.

Ағынды негіздегі атаулар талдауы

Ағынға негізделген талдау, сілтемелер немесе типтік түрлендірулерді қолданатын тілдегі бағдарламаларға қолданылуы мүмкін. Ағынға негізделген талдау, типтік талдаудың орнына немесе оны толықтыру үшін пайдаланылуы мүмкін. Ағынға негізделген талдау кезінде, әрбір жадқа бөлінген орын үшін және адресі қолданылған әрбір жаһандық және жергілікті айнымалы үшін жаңа псевдоним кластары жасалады. Сілтемелер уақыт өте келе бірнеше мәнге нұсқауы мүмкін, сондықтан бірнеше псевдоним класында болуы мүмкін. Бұл әрбір жад орны үшін бір псевдоним класының орнына псевдоним кластары жиынтығы бар екенін білдіреді.