Wednesday, October 12, 2011

Интерпретатор ба Компилятор

Програмчлалын ямар нэгэн хэл ашиглан алгоритмыг дүрсэлсний дараа транслятор буюу хөрвүүлэгч нь машины хэлэнд хөрвүүлж байж тухайн алгоритм биелдэг тухай, мөн хөрвүүлэлтийн үр дүнд биелэх файл үүсдэг талаар өмнөх бичлэгтээ дурьдсан билээ. Хөрвүүлэлтийн үр дүнд үүссэн биелэх файл(execution file)-ыг ачаалснаар програм биелж эхлэнэ. Хөрвүүлэлтийн 2 хэлбэр байдаг. Үүнд:
1. Компиляци (Compilation)
2. Интерпретаци (Interpretation)
Компиляци бол текстийг бүхлээр нь нэг удаа хөрвүүлэх хэлбэр юм. Бүрэн хөрвүүлэгдсэнийхээ дараа програм биелж эхлэнэ. Харин интерпретаци бол текстийг бүхлээр нь нэг удаа биш мөр мөрөөр нь хөрвүүлнэ. Хөрвүүлэгдсэн мөр тэр дороо биелнэ. Ө.х, хөрвүүлэлт, биелэлт хоёр зэрэгцэн явагдана. Компиляцийг компилятор (compiler), интерпретацийг интерпретатор (interpreter)
хэмээх хөрвүүлэгч програмаар гүйцэтгэнэ.
Компилятор ба интепретаторын ижил талууд
1. Хоёулаа өндөр түвшний хэл дээр бичсэн програмын эх код(текст)-ыг мөр мөрөөр шалгана.
2. Хоёулаа програмын текстийн үг зүй (syntax analysis), өгүүлбэр зүйн (semantic analysis) шинжилгээ явуулдаг. Хэрэв алдаа илэрвэл алдааны тухай мэдээлэл өгөөд програмыг шалгах үйлдэл нь зогсоно. Алдаагаа засаад дахин хөрвүүлэлт хийхэд програмын текстийг эхнээс нь дахин шалгана.
Компилятор ба интепретаторын ялгаатай талууд
1. Компилятор нь объект код(object code) үүсгэдэг бол интерпретатор нь үүсгэдэггүй. Объект код гэдэг нь эх кодыг (source code) бүхлээр нь хөрвүүлэхэд үүсэх машины код, харин эх код нь хөрвүүлэгдээгүй байгаа текст юм.
2. Интерпретатор нь програмд алдаа тааралдах хүртэл бичсэн програмын текстийг мөр мөрөөр нь хөрвүүлээд биелүүлдэг бол компилятор нь програмын текстийн төгсгөл хүртэл бүхэлд нь шалгаад алдаагүй үед л хөрвүүлдэг.
3. Хурдны хувьд ялгаатай.
Үйлдэл Интерпретатор Компилятор
Програм хөрвүүлэхдээ Хурдан Удаан
Програм биелүүлэхдээ Удаан Хурдан

Иймд хөрвүүлэх хугацаа ихтэй, биелэх хугацаа багатай програмын хувьд интерпретатор ашигтай тул програмчлалд анхлан суралцагсад хэрэглэхэд тохиромжтой. Ихэнх интерпретаторууд компиляторуудаа бодвол санах ойд бага зай эзэлдэг.
Хэл болгон өөрийн гэсэн хөрвүүлэгчтэй байдаг ба хэл, хөрвүүлэгч хоёр нь салшгүй ойлголтууд юм.

Өнөө үед олон төрлийн компьютер, мөн тэдгээрт суух олон янзын үйлдлийн системүүд (платформууд)  байгаагаас шалтгаалан нэг програмчлалын хэлний хэд хэдэн ялгаатай хөрвүүлэгч байдаг. Жишээлбэл, Windows-д зориулагдсан, UNIX/Linux-д зориулагдсан гэх мэт. Эх кодыг нэг платформоос нөгөө рүү хялбар зөөх боломжтой байна. Харин объект кодууд ингэх боломжгүй. Учир нь өөр өөр хөрвүүлэгчээр үүсгэгдсэн байна.

3 comments: