Տրանսլյատոր

**Տրանսլյատորը** () ծրագիր է, որը կատարում է ծրագրի թարգմանում։ 
Տրանսլյացիայի պրոցեսում ծրագրավորման մի լեզվով գրված ծրագիրը փոխակերպվում է մեկ այլ լեզվի՝ պահպանելով ֆունկցիոնալ համարժեքությունը, առանց սկզբնական ծրագիր ֆունկցիանալ և իմաստային կառուցվածքի կորստի։

Լեզուն, որով ներկայացված է մուտքային ծրագիրը, կոչվում է *սկզբնական լեզու*, իսկ  ծրագիրը՝ *[[Ելակետային կոդ|սկզբանական կոդ]]* ()։ Ելքային լեզուն կոչվում է  *target լեզու*, իսկ ելքային ծրագիրը՝ *[[օբյեկտային կոդ]]* ()։

[thumb|center|upright=6.25|Տրանսլյատորը փոխակերպում է ''[Ելակետային կոդ|սկզբնական կոդը* *օբյեկտային կոդի]]*

== Տրանսլյատորի տեսակները ==
Գոյություն ունեն մի քանի տրանսլյատորի տեսակներ՝ 
* Եթե տրանսլյատորը բարձր մակարդակի լեզուն թարգմանում է մեկ այլ բարձր մակարդակի լեզվի, ապա այն կոչվում է *տրանսլյատոր* կամ source-to-source կոմպիլյատոր )։
* Եթե տրանսլյատորը  բարձր մակարդակի լեզուն թարգմանում է ցածր մակարդակի լեզվի, ապա այն կոչվում է [[կոմպիլյատոր]]։ Ցանկացած լեզու կարող է թարգմանվել, կամ բարձր մակարդակի, կամ [[ասեմբլեր]] լեզվի։
* Եթե տրանսլյատորը բարձր մակարդակի լեզուն թարգմանում է միջանկյալ ներկայացման, որն ուղղակիորեն կատարվում է, ապա այն կոչվում է [[ինտերպրետատոր]]։
* Եթե տրանսլյատորը ելքային/[[մեքենայական լեզու]]ն թարգմանում է  սկզբնական լեզվի, կոչվում է *դեկոմպիլյատոր* )։
* Եթե տրանսլյատորը [[ասեմբլեր]]ի լեզուն թարգմանում է  մեքենայական կոդի, ապա այն կոչվում է [[ասեմբլեր]]։
* Եթե տրանսլյատորը մեքենայական կոդը թարգմանում է [[ասեմբլեր]]ի լեզվի, կոչվում է *դիզասեմբլեր*։

== Իրականացումը ==
[[Պատկեր:Intermediate representation scheme.png |thumb|upright=1.05| Լեզվի իրականացումը]]
Տրանսլյատորի նպատակը մի լեզվից մյուսին տեքստի փոխակերպումն է՝ հասցեատիրոջը հասկանլի դարձնելու համար։ Տրանսլյացիայի ժամանակ հասցեատերը կարող է լինել՝
* սարք՝ [[Մշակիչ|պրոցեսոր]] (տրանսլյացիան կոչվում է [[կոմպիլյացիա]]),
* ծրագիր՝ [[ինտերպրետատոր]] (տրանսլյացիան կոչվում է *ինտերպրետացիա*)։

*Տրանսլյացիայի տեսակները՝*
* [[Կոմպիլյատոր|Կոմպիլյացիա]],
* [[Ինտերպրետատոր|Ինտերպրետացիա]],
* [[Դինամիկ կոմպիլյացիա]]։

=== Կոմպիլյացիա ===
[[Պատկեր:Compiler scheme.png||thumb|upright=3.05|Ծրագրի [[Կոմպիլյատոր|կոմպիլյացիա]]]]

[[Մշակիչ|Պրոցոսսորի]] լեզուն կոչվում է մեքենայական լեզու, [[մեքենայական կոդ]]։ Մեքենայական լեզվի կոդը կատարվում է պրոցոսսորի կողմից։ Հիմնականում մեքենյական լեզուն ցածր մակարդակի լեզու է, բայց գոյություն ունեն պրոցեսսորներ, որոնք օգտագործում են բարձր մակարդակի լեզուներ (այդպիսիները բավականին ծախսատար են)։

*'Կոմպիլյատորը''' որևէ ծրագրավորման լեզվով գրված սկզբանական կոդը փոխակերպում է մեքենայական կոդի։

Կոմպիլյացիայի գործընթացը կատարվում է մի քանի փուլերով՝
* Լեքսիկական վերլուծություն,
* շարահյուսական վերլուծություն,
* իմաստային վերլուծություն,
* վերլուծության արդյունքների հիման վրա միջանկյալ կոդի ստեղծում,
* միջանկյալ կոդի օպտիմիզացիա,
* օբյեկտային կոդի ստեղծում, տվյալ դեպքում մեքենայական կոդի։

Ծրագիրը կարող է օգտագործել օպերացիոն համակարգի կողմից տրամադրված ծառայություններ (օրնակ գրադարաններ՝ ֆայլերի հետ աշխատելու համար, գրադարններ՝ գրաֆիկական ինտերֆեյս ստեղծոլու համար)։ Մեքենայակն կոդի օբյեկատային ֆայլերը այլ օբյեկտային ֆայլերից ավելացնելու  և դինամիկ գրադարանի մասին ինֆորմացիայի համար  կատարվում է միացում()  կամ կոմպանոկա։ Միացում կատարվում է կապերի խմբագրիչով։ Կապերի խմբագրիչը կարող է լինել առանձին ծրագիր կամ կոմպիլյատորի մաս։ Այն ստեղծում է կատարվող ֆայլ ( )։ Այն իրականացվում է հետևյալ ձևով՝ 
* օգտագործողի պահանջով ստեղծվում է օպերացիան համակարգի միջուկում ստեղծվում է «պրոցեսս» օբյեկտ,
* օպերացիոն համակարգի բեռնիչը() կատարում է հաջորդ գործողությունները
* կատարվող ֆայլը իրականացնում է
* բեռնում է հիշողության մեջ
* բեռնում է դինամիկ գրադարանի հիշողության մեջ
* կատարում է մեքենայական կոդի ծրագրի միացում դինամիկ գրադարանին
* ղեկավարումը փոխանցում է ծրագրին
Կոմպիլյատորի առավոլությունները՝
* ծրաագրի կոմպիլյացիան կատարվում է մեկ անգամ
* սարքում՝ որի համար կատարվում է կոմպիլյացիան, կոմպիլյատորի առկայություն չի պահանջում։
Կոմպիլյատորի թերությունները՝
* կոմպիլյացիան դանդաղ գործընթաց է
* սկզբանկան կոդում փոփոխություններ մտցնելով, պահանջվում է կրկանկի կոմպիլայցիա .
Ասսեմբլերը կոմպիլյատոր է, ասսեմբլերի լեզվով տեքստը փոխակերպող մեքենայական լեզվի։ Ասսեմբլերի լեզուն լեզու է, որը մոտ է մեքենայական լեզվին, ցածր մակարդակի լեզու է։

### Ինտերպրետացիա
[|thumb|upright=3.05| Ծրագրի [Ինտերպրետատոր|ինտերպրետացիա]]

Ինտերպրետացիան սկզբնական կոդը կարդալու և կատարելու պրոցեսս է։ Ծրագրի իրականցումն է Ինտերպրետատորով։

Ինտերպրետատորը կաորղ է աշխատել երկու ձևով՝
# կոդը կարդալ և իրակացնել միանգամից  (մաքուր ինտերպրետացիա);
# Կոդը կարդալ, հիշողությունում ստեղծել կոդի միջանկյալ  ներկայությունը (Բայթկոդ կամ պի-կոդ),միջանկյալ ներկայացված կոդը կատարել։
Առաջին դեպքում տրանսլյացիա չի օգտագործվում, իսկ երկրորդում օգտագործվում է սկզբանկան կոդի տրանսլյացիա, միջանկյալ կոդում։

Ինտերպրետատորի աշխատանքի փուլերը՝
* Լեքսիկական վերլուծություն,
* շարահյուսական վերլուծություն,
* իմաստային վերլուծություն,
* միջանկլյալ ներկայացված կոդի կատարում (մաքուր ինտերպրետացիայի դեպքում չի կատարվում)
* իրականցում
Ինտերպրետատորը մոդելավորում է մեքենա(վիրտուալ մեքենա), ռեալիզացնում է մեքենայի ընտրված իրականցման   հրամանները։ Մեքենայի հրամանները գրվում են ոչ թե մեքենայակն լեզվով այլ, բարձր մակարդակի լեզվով։ Ինտերպրետատորը կարելի է անվանել վիրտուալ մեքենայի լեզվի կատարող։

Մաքուր ինտերպրետացիան կիրառելի է պարզ կառուցվածք ունեցող լեզուների հետ, ինչպիսիք են օրիանակ սկրիպտավորման լեզուները, լիսպը։

Բայթկոդ ստեղծող ինտերպրետատորների օրինակներ են՝ Perl, PHP, Python․․․։

Ինտերպրետատորի առավոլությունները կոմպիլայտորի հետ համեմատած՝
* հնարավորություն աշխատել ինտերակտիվ ռեժիմում
* փոփոխություններ մտցնելուց սկզբանական կոդի նախակոմպիլյացիայի բացակայություն
Ինտերպրետատորի թերությունները կոմպիլայտորի հետ համեմատած՝
* ցածր արդյունավետություն (մեքենայական կոդը պրոցոսսորի կողմից է իրականցվում, իսկ ինտերպրետացված կոդը՝ ինտերպրետատորի);
* սարքում ինտերպրետատորի առկայության անհրաժեշտություն, որով պլանավորվում է ծրագրի իներպրետացիան
* կատարման ընթացքում սինտակսիսական սխալների բացահայտում
Պարզ ինտերպրետատորների համեմատումը, բայթկոդ ստեղծող ինտերպրետատոների հետ
* պարզ ինտերպրետատորը հեշտ է ռեալիզացնել, քանի որ դրա համր պետք չէ գրել տրանսլյատոր
* բայթկոդ ստեղծող ինտերպրետատորը կարող է կատարել իր օպտիմիզացիան և հասնել մեծ արդյունավետության
* բայթկոդ ստեղծող ինտերպրետատորը, պահանջում է համակարգի մեծ ռեսուրսներ (բայթկոդի տրանսլյացիան զբաղեցնում է պրոցեսսորային ժամանակ, բայթ կոդը հիշողությունում է տեղ զբաղեցնում է )..

### Դինամիկ կոմպիլյացիա

Դինամիկ կամ  JIT կոմպիլյացիան () տրանսլյացիա է, որի դեպքում սկազբնական կամ միջանկյալ կոդը փոխակերպվում է մեքենայական կոդի ծրագրի կատարման ժամանակ։. Յուրաքանչյուր մասի կոմպիլյացիան կատարվում է միայն մեկ անգամ, կոմպիլյացված կոդը պահվում է կեշում և անհարժեշտության դեպքում օգտագործվում է կրկնակի։

Դինամիկ կոմպիլայցիայի առավելությունները համեմատած կոմպիլյացիայի հետ՝
* դինամիկ կոմպիլյացիայի աշխատանքի արգությունը մոտ է կոմպիլյացվող ծրագրի աշխատանքի արագությանը
* Ծրագիրը այլ պլատֆորմ տեղափոխելիս անհրաժեշտ չէ նախակոմպիլյացնել այն։
Դինամիկ կոմպիլայցիայի առավելությունները համեմատած կոմպիլյացիայի հետ՝
* ռեալիզացիայի մեծ դժվարություն
* ռեսուրսների մեծ պահանջ։
Դինամիկ կոմպիլյացիան հարմար է վեբ- հավելվածների համար։

## Տրանսլյացիայի և ինտերպրետացիայի հասկացությունները
«Տրանսլյացիա» և «ինտերպրետացիա»  հասկացությունները տարբերվում են։ Տրանսլյացիայի կատարման ժամանակ փոխակերպվում ծրագրի կոդը մի լեզվից մյուսին։ Իներպրետացիայի ժամանակ ծրագիրը կատարվում է։

Քանի որ ամբողջ տրանսլյացիան հիմնականում համարվում է ինտերպրետացիային պատվելը, այդ պրոցեսները դիտարկվում են միասին։ Օրինակ ծրագրավորման լեզուներ հաճախ բնութագրվում են ինչպես «կոմպիլյացվող» կամ  «ինտերպրետացվող» , կախված այն բանից, ինչն է գերակշռում կատարվող լեզվում։

Մյուս կողմից, գոյություն ունի տրանսլյատորի և ինտերպրետացիայի փոխներգրավվածության պրոցեսս՝ ինտերպրետատորնեը կարող են լինել կոմպիլյացվող, իսկ տրանսլյատորներում կարող է պահանջվել ինտերպրետցիա «metaprogramming»-ի ռեալիզացիայի համար։

Ավելին, նույն ծրագրավորման լեզուն կարող է և տրանսլյացվել և ինտերպրետացվեր , և երկու դեպքում էլ պետք է լինեն վերլուծության ընդհանուր էտապներ։

## Գրականություն
* 
* Foundations of Programming Languages | Kent D. Lee
http://www.saylor.org/site/wp-content/uploads/2013/03/CS101-1.3.3-CompilersandInterpreters-FINAL.pdf

Կատեգորիա:Ծրագրավորման գործիքներ