Տրանսլյատոր

Տրանսլյատորը (անգլ.՝ translator) ծրագիր է, որը կատարում է ծրագրի թարգմանում։ 
Տրանսլյացիայի պրոցեսում ծրագրավորման մի լեզվով գրված ծրագիրը փոխակերպվում է մեկ այլ լեզվի՝ պահպանելով ֆունկցիոնալ համարժեքությունը, առանց սկզբնական ծրագիր ֆունկցիանալ և իմաստային կառուցվածքի կորստի։
Լեզուն, որով ներկայացված է մուտքային ծրագիրը, կոչվում է սկզբնական լեզու, իսկ  ծրագիրը՝ սկզբանական կոդ (անգլ.՝ Source code)։ Ելքային լեզուն կոչվում է  target լեզու, իսկ ելքային ծրագիրը՝ օբյեկտային կոդ (անգլ.՝  object code )։


== Տրանսլյատորի տեսակները ==
Գոյություն ունեն մի քանի տրանսլյատորի տեսակներ՝ 

Եթե տրանսլյատորը բարձր մակարդակի լեզուն թարգմանում է մեկ այլ բարձր մակարդակի լեզվի, ապա այն կոչվում է տրանսլյատոր կամ source-to-source կոմպիլյատոր անգլ.՝ transcompiler or transpiler)։
Եթե տրանսլյատորը  բարձր մակարդակի լեզուն թարգմանում է ցածր մակարդակի լեզվի, ապա այն կոչվում է կոմպիլյատոր։ Ցանկացած լեզու կարող է թարգմանվել, կամ բարձր մակարդակի, կամ ասեմբլեր լեզվի։
Եթե տրանսլյատորը բարձր մակարդակի լեզուն թարգմանում է միջանկյալ ներկայացման, որն ուղղակիորեն կատարվում է, ապա այն կոչվում է ինտերպրետատոր։
Եթե տրանսլյատորը ելքային/մեքենայական լեզուն թարգմանում է  սկզբնական լեզվի, կոչվում է դեկոմպիլյատոր անգլ.՝  decompiler)։
Եթե տրանսլյատորը ասեմբլերի լեզուն թարգմանում է  մեքենայական կոդի, ապա այն կոչվում է ասեմբլեր։
Եթե տրանսլյատորը մեքենայական կոդը թարգմանում է ասեմբլերի լեզվի, կոչվում է դիզասեմբլեր։


== Իրականացումը ==

Տրանսլյատորի նպատակը մի լեզվից մյուսին տեքստի փոխակերպումն է՝ հասցեատիրոջը հասկանլի դարձնելու համար։ Տրանսլյացիայի ժամանակ հասցեատերը կարող է լինել՝

սարք՝ պրոցեսոր (տրանսլյացիան կոչվում է կոմպիլյացիա),
ծրագիր՝ ինտերպրետատոր (տրանսլյացիան կոչվում է ինտերպրետացիա)։Տրանսլյացիայի տեսակները՝

Կոմպիլյացիա,
Ինտերպրետացիա,
Դինամիկ կոմպիլյացիա։


=== Կոմպիլյացիա ===

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

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

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

ծրաագրի կոմպիլյացիան կատարվում է մեկ անգամ
սարքում՝ որի համար կատարվում է կոմպիլյացիան, կոմպիլյատորի առկայություն չի պահանջում։Կոմպիլյատորի թերությունները՝

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


=== Ինտերպրետացիա ===

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

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

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

հնարավորություն աշխատել ինտերակտիվ ռեժիմում
փոփոխություններ մտցնելուց սկզբանական կոդի նախակոմպիլյացիայի բացակայությունԻնտերպրետատորի թերությունները կոմպիլայտորի հետ համեմատած՝

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

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


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

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

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

ռեալիզացիայի մեծ դժվարություն
ռեսուրսների մեծ պահանջ։Դինամիկ կոմպիլյացիան հարմար է վեբ- հավելվածների համար։


== Տրանսլյացիայի և ինտերպրետացիայի հասկացությունները ==
«Տրանսլյացիա» և «ինտերպրետացիա»  հասկացությունները տարբերվում են։ Տրանսլյացիայի կատարման ժամանակ փոխակերպվում ծրագրի կոդը մի լեզվից մյուսին։ Իներպրետացիայի ժամանակ ծրագիրը կատարվում է։
Քանի որ ամբողջ տրանսլյացիան հիմնականում համարվում է ինտերպրետացիային պատվելը, այդ պրոցեսները դիտարկվում են միասին։ Օրինակ ծրագրավորման լեզուներ հաճախ բնութագրվում են ինչպես «կոմպիլյացվող» կամ  «ինտերպրետացվող» , կախված այն բանից, ինչն է գերակշռում կատարվող լեզվում։
Մյուս կողմից, գոյություն ունի տրանսլյատորի և ինտերպրետացիայի փոխներգրավվածության պրոցեսս՝ ինտերպրետատորնեը կարող են լինել կոմպիլյացվող, իսկ տրանսլյատորներում կարող է պահանջվել ինտերպրետցիա «metaprogramming»-ի ռեալիզացիայի համար։
Ավելին, նույն ծրագրավորման լեզուն կարող է և տրանսլյացվել և ինտերպրետացվեր , և երկու դեպքում էլ պետք է լինեն վերլուծության ընդհանուր էտապներ։


== Գրականություն ==
Касьянов В. Н., Поттосин И. В. Методы построения трансляторов. — Новосибирск: Наука, 1986. — 344 с.
Foundations of Programming Languages | Kent D. Lee


== Հղումներ ==

http://www.saylor.org/site/wp-content/uploads/2013/03/CS101-1.3.3-CompilersandInterpreters-FINAL.pdf