Phase vs Pass in Compiler
Kopumā kompilators ir datorprogramma, kas nolasa vienā valodā rakstītu programmu, ko sauc par avota valodu, un tulko to citā valodā, ko sauc par mērķa valodu. Tradicionāli avota valoda bija augsta līmeņa valoda, piemēram, C ++, un mērķvaloda bija zema līmeņa valoda, piemēram, asamblejas valoda. Tātad kopumā kompilatorus var uzskatīt par tulkotājiem, kas tulko no vienas valodas uz otru. Pass un Phase ir divi termini, kurus bieži izmanto kompilatoros. Kompilatora caurlaižu skaits ir reižu skaits, kad tas pārsniedz avotu (vai kādu tā attēlojuma veidu). Celtniecības ērtībai kompilators ir sadalīts daļās. Fāzi bieži izmanto, lai izsauktu šādu atsevišķu kompilatora daļu.
Kas ir caurlaide kompilatorā?
Standarta veids, kā klasificēt kompilatorus, ir pēc “piespēļu” skaita. Parasti apkopošana ir relatīvi resursietilpīgs process, un sākotnēji datoriem nebija pietiekami daudz atmiņas, lai turētu šādu programmu, kas veica visu darbu. Sakarā ar šo aparatūras resursu ierobežotību agrīnajos datoros kompilatori tika sadalīti mazākās apakšprogrammās, kuras veica savu daļējo darbu, pāriet avota kodu (veica “pāriešanu” pār avotu vai kādu citu tā veidu) un veica analīzi , transformācijas un tulkošanas uzdevumi atsevišķi. Tātad, atkarībā no šīs klasifikācijas, kompilatori tiek identificēti kā vienas caurlaides vai daudzkārtīgi apgriezti kompilatori.
Kā norāda nosaukums, vienas caurlaides kompilatori apkopo vienā caurlaidē. Vienkāršas kompilatoru rakstīšana ir vienkāršāka, turklāt tie darbojas ātrāk nekā multi-pass kompilatori. Tāpēc pat laikā, kad jums bija ierobežoti resursi, valodas tika izstrādātas tā, lai tās varētu apkopot vienā piegājienā (piemēram, Pascal). No otras puses, tipisku daudzkārtēju kompilatoru veido vairāki galvenie posmi. Pirmais posms ir skeneris (pazīstams arī kā leksiskais analizators). Skeneris nolasa programmu un pārveido to marķieru virknē. Otrais posms ir parsētājs. Tas konvertē marķieru virkni par parsēju koku (vai abstraktu sintakse koku), kurā tiek uztverta programmas sintaktiskā struktūra. Nākamais posms interpretē sintaktiskās struktūras semantiku. Koda optimizācijas posmi un pēdējais koda ģenerēšanas posms seko tam.
Kas ir fāze kompilatorā?
Termins fāze bieži parādās, kad jūs runājat par kompilatora uzbūvi. Sākumā kompilatori bija katrs vienkāršs monolītas programmatūras gabals, ko viena persona sarakstīja vienkāršas valodas sastādīšanai. Bet, kad tulkojamās valodas avota kods kļūst sarežģīts un liels, kompilators tika sadalīts vairākās (salīdzinoši neatkarīgās) fāzēs. Dažādu fāžu priekšrocība ir tā, ka kompilatora attīstību var izplatīt starp izstrādātāju komandu. Turklāt tas uzlabo modularitāti un atkārtotu izmantošanu, ļaujot fāzēm aizstāt uzlabotas fāzes vai papildu fāzes (piemēram, turpmākas optimizācijas), kuras var pievienot kompilatoram. Apkopošanas dalīšanas procesu fāzēm ieviesa PQCC (Production Quality Compiler-Compiler Project) Kārnegi Melonas universitātē. Viņi ieviesa terminus priekšgala, vidusdaļa un aizmugure. Lielākajai daļai kompilatoru ir vismaz divas fāzes. Bet parasti aizmugurējā un priekšējā daļa iekapsulē šīs fāzes.
Kāda ir atšķirība starp kompilatoru Phase un Pass?
Phase un Pass ir divi termini, ko izmanto kompilatoru jomā. Caurlaide ir viena reize, kad kompilators iziet (iziet cauri) avota kodu vai kādu citu tā atveidojumu. Parasti lielākajai daļai kompilatoru ir vismaz divas fāzes, ko sauc par priekšējo un aizmugures galu, lai gan tās var būt gan vienas, gan vairākkārtējas. Fāzi izmanto, lai klasificētu kompilatorus pēc konstrukcijas, savukārt caurlaide tiek izmantota kompilatoru klasificēšanai pēc to darbības principa.