Phase vs Pass kompilatorā
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ķ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ā sastādītājus var uzskatīt par tulkotājiem, kuri tulko no vienas valodas uz otru. Pass un Phase ir divi termini, kurus bieži lieto kopā ar kompilatoriem. Sastādītāja caurbraukšanas reižu skaits ir reižu skaits, kad tas iet pāri avotam (vai kādam tā attēlojuma veidam). Kompilators būvniecības ērtībai 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 “caurlaides” skaits. Parasti kompilēšana ir relatīvi intensīvs 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žojumu agrīnajos datoros, kompilatori tika sadalīti mazākās apakšprogrammās, kas savu daļējo darbu veica, pārlaižot avota kodu (veicot "pāreju" pār avotu vai kādu citu tā formu) un veicot analīzi, transformācijas un tulkošanas uzdevumi atsevišķi. Tātad, atkarībā no šīs klasifikācijas, sastādītāji tiek identificēti kā vienas vai vairāku pāreju sastādītāji.
Kā norāda nosaukums, vienas caurlaides kompilatori apkopo vienā piegājienā. Vienkāršāku kompilatoru ir vieglāk rakstīt, un arī viņi darbojas ātrāk nekā daudzpakāpju kompilatori. Tāpēc pat laikā, kad jums bija resursu ierobežojumi, valodas tika veidotas tā, lai tās varētu apkopot vienā reizē (piemēram, Pascal). No otras puses, tipisks daudzpakāpju kompilators sastāv no vairākiem galvenajiem posmiem. Pirmais posms ir skeneris (pazīstams arī kā leksiskais analizators). Skeneris nolasa programmu un pārveido to par žetonu virkni. Otrais posms ir parsētājs. Tas pārveido marķieru virkni parsēšanas kokā (vai abstraktā sintakses kokā), kas uztver programmas sintaktisko struktūru. Nākamais posms ir tas, kas interpretē sintaktiskās struktūras semantiku. Kodu optimizācijas un pēdējās koda ģenerēšanas stadijas seko tam.
What is a Phase in a Compiler?
Termins fāze bieži parādās, kad runājat par kompilatora uzbūvi. Sākotnēji sastādītāji bija visi vienkāršie vienas monolītās programmatūras gabali, kurus viena persona bija uzrakstījusi vienkāršas valodas sastādīšanai. Bet, kad tulkojamās valodas pirmkods 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 izstrādi var sadalīt starp izstrādātāju komandu. Turklāt tas uzlabo modularitāti un atkārtotu izmantošanu, ļaujot fāzes aizstāt ar uzlabotām vai papildu fāzes (piemēram, turpmākas optimizācijas) pievienot kompilatoram. Kompilācijas dalīšanas procesu pa fāzēm ieviesa Karnegijas Melones universitātes PQCC (Production Quality Compiler-Compiler Project). Viņi ieviesa terminus front end, middle end un back end. Lielākajai daļai kompilatoru ir vismaz divas fāzes. Bet parasti aizmugure un priekšējā daļa iekapsulē šīs fāzes.
Kāda ir atšķirība starp Phase un Pass Compiler?
Phase un Pass ir divi termini, kas tiek izmantoti kompilatoru jomā. Caurlaide ir viena reize, kad kompilators nodod (iziet cauri) avota kodu vai kādu citu tā attēlojumu. Parasti lielākajai daļai kompilatoru ir vismaz divas fāzes, ko sauc par priekšpusi un aizmuguri, bet tās var būt gan vienas, gan vairākkārtējas. Phase tiek izmantots, lai klasificētu kompilatorus pēc konstrukcijas, bet pass tiek izmantots, lai klasificētu kompilatorus pēc to darbības veida.