Phase vs Pass Compiler
Ерөнхийдөө хөрвүүлэгч гэдэг нь эх хэл гэж нэрлэгддэг нэг хэл дээр бичигдсэн программыг уншиж, өөр хэл рүү хөрвүүлдэг компьютерийн программ бөгөөд үүнийг зорилтот хэл гэж нэрлэдэг. Уламжлал ёсоор эх хэл нь C++ зэрэг өндөр түвшний хэл, зорилтот хэл нь Ассемблей хэл зэрэг доод түвшний хэл байв. Тиймээс ерөнхийд нь хөрвүүлэгчдийг нэг хэлээс нөгөө хэл рүү орчуулдаг орчуулагч гэж үзэж болно. Pass болон Phase нь хөрвүүлэгчид ихэвчлэн хэрэглэгддэг хоёр нэр томъёо юм. Хөрвүүлэгчийн дамжуулалтын тоо нь эх сурвалжийг (эсвэл түүний дүрслэлийн зарим хэлбэр) давах тоо юм. Барилга хийхэд хялбар болгох үүднээс хөрвүүлэгчийг хэсэг болгон хуваадаг. Фазыг хөрвүүлэгчийн нэг бие даасан хэсгийг дуудахдаа ихэвчлэн ашигладаг.
Хэвлэгчийн Pass гэж юу вэ?
Хэвлэгчийг ангилах стандарт арга бол "дамалтын" тоо юм. Ихэвчлэн эмхэтгэх нь харьцангуй их нөөц шаарддаг процесс бөгөөд эхэндээ компьютерт бүрэн хэмжээний ажлыг гүйцэтгэсэн ийм програмыг хадгалах хангалттай санах ой байдаггүй байв. Эрт үеийн компьютеруудын техник хангамжийн нөөц ийм хязгаарлагдмал байсан тул хөрвүүлэгчдийг эх кодыг давж (эх сурвалж эсвэл түүний бусад хэлбэрийг дамжуулж) хэсэгчлэн гүйцэтгэдэг жижиг дэд програмуудад хувааж, дүн шинжилгээ хийдэг байв., хувиргах, орчуулах ажлыг тус тусад нь хийнэ. Тиймээс энэ ангиллаас хамааран хөрвүүлэгчийг нэг дамжлагатай эсвэл олон дамжилттай хөрвүүлэгч гэж ялгадаг.
Нэрнээс нь харахад нэг дамжуулалттай хөрвүүлэгчид нэг дамжуулалтаар эмхэтдэг. Нэг дамжуулалттай хөрвүүлэгчийг бичих нь илүү хялбар бөгөөд олон дамжуулалттай хөрвүүлэгчээс илүү хурдан ажилладаг. Тиймээс, нөөц хязгаарлагдмал байсан тэр үед ч хэлүүдийг нэг дамжуулалтаар (жишээ нь, Паскаль) эмхэтгэх боломжтой болгосон. Нөгөөтэйгүүр, ердийн олон дамжуулалттай хөрвүүлэгч нь хэд хэдэн үндсэн үе шатуудаас бүрддэг. Эхний шат нь сканнер (мөн үгийн анализатор гэж нэрлэдэг) юм. Сканнер програмыг уншиж, тэмдэгтийн мөр болгон хөрвүүлдэг. Хоёрдахь шат бол задлан шинжлэгч юм. Энэ нь токенуудын мөрийг задлан шинжлэх мод (эсвэл хийсвэр синтакс мод) болгон хувиргадаг бөгөөд энэ нь програмын синтаксик бүтцийг агуулдаг. Дараагийн шат бол синтаксийн бүтцийн семантикийг тайлбарлах явдал юм. Кодын оновчлолын үе шатууд болон код үүсгэх эцсийн шат нь үүнийг дагадаг.
Хэвлэгчийн үе шат гэж юу вэ?
Хөрвүүлэгч бүтээх тухай ярихад үе шат гэдэг нэр томьёо ихэвчлэн гарч ирдэг. Эхэндээ хөрвүүлэгчид нь энгийн хэлийг эмхэтгэхийн тулд нэг хүний бичсэн дан, цул програм хангамжийн энгийн хэсэг бүр байсан. Харин орчуулах хэлний эх код нь нарийн төвөгтэй, том болсон үед хөрвүүлэгчийг олон (харьцангуй бие даасан) үе шатуудад хуваадаг. Өөр өөр үе шаттай байхын давуу тал нь хөрвүүлэгчийн хөгжүүлэлтийг хөгжүүлэгчдийн багийн дунд хуваарилах боломжтой юм. Цаашилбал, энэ нь үе шатуудыг сайжруулсан үеээр солих эсвэл нэмэлт үе шатуудыг (цаашдын оновчлол гэх мэт) хөрвүүлэгчид нэмж оруулах замаар модульчлагдсан байдал, дахин ашиглалтыг сайжруулдаг. Эмхэтгэлийг үе шатуудад хуваах үйл явцыг Карнеги Мелон их сургуулийн PQCC (Production Quality Compiler-Compiler Project) нэвтрүүлсэн. Тэд урд төгсгөл, дунд төгсгөл, арын төгсгөл гэсэн нэр томъёог нэвтрүүлсэн. Ихэнх хөрвүүлэгчид дор хаяж хоёр үе шаттай байдаг. Гэхдээ ихэвчлэн арын хэсэг болон урд хэсэг нь эдгээр үе шатуудыг багтаадаг.
Хэвлэгчийн үе шат ба дамжуулалт хоёрын ялгаа юу вэ?
Phase болон Pass гэдэг нь хөрвүүлэгчийн салбарт хэрэглэгддэг хоёр нэр томъёо юм. Дамжуулалт гэдэг нь хөрвүүлэгч эх сурвалжийн код эсвэл түүний бусад дүрслэлийг нэг удаа дамжих (дамжуулах) юм. Ихэвчлэн ихэнх хөрвүүлэгчид урд ба хойд хэсэг гэж нэрлэгддэг дор хаяж хоёр үе шаттай байдаг бол тэдгээр нь нэг дамжлага эсвэл олон дамжлагатай байж болно. Phase нь хөрвүүлэгчийг бүтцээр нь ангилахад ашигладаг бол pass нь хөрвүүлэгчийг хэрхэн ажиллаж байгаагаар нь ангилахад ашиглагддаг.