Կոմպիլյատոր
համակարգչային ծրագիր է, որը ծրագրի սկզբնական տեքստը ձևափոխում է օբյեկտային կոդի / From Wikipedia, the free encyclopedia
Կոմպիլյատորը (անգլ.՝ compiler) ծրագիր է, որը փոխակերպում է ծրագրավորման լեզվով գրված սկզբանական կոդը ( անգլ.՝ source code) այլ ծրագրային լեզվով(ելքային լեզվի, անգլ.՝ target language) կոդի, որը հիմնականում ունի բինար տեսք և հայտնի է օբյեկտային կոդ (անգլ.՝ object code) անվանմամբ։ Սկզբնական կոդի փոխակերպման ամենատարածված պատճառը այն է որ ստեղծվի կատարվող ծրագիր (անգլ.՝ executable program).
Այս հոդվածն աղբյուրների կարիք ունի։ Դուք կարող եք բարելավել հոդվածը՝ գտնելով բերված տեղեկությունների հաստատումը վստահելի աղբյուրներում և ավելացնելով դրանց հղումները հոդվածին։ Անհիմն հղումները ենթակա են հեռացման։ |
Կոմպիլյատոր բառը հիմնականում օգտագործվում է այն ծրագրերի համար, որոնք սկզբնական կոդը բարձր մակարդակի ծրագրավորման լեզվից թարգմանում են ցածր մակարդակի լեզվի (օրինակ՝ ասսեմբլեր լեզվի կամ մեքենայական կոդի)։
Եթե կոմպիլյացված ծրագիրը կարող է աշխատել այնպիսի համակարգչում, որի համար պրոցեսորը կամ օպերացիոն համակարգը տարբեր է այն պրոցեսորից կամ օպերացիոն համակարգից որով կոմպիլյատորն է աշխատում, ապա այդպիսի կոմպիլյատորին անվանում են քրոսս-կոմպիլյատոր ( անգլ.՝ cross-compiler)։
- Ծրագիրը, որը թարգմանում է ցածր մակարդակի լեզուն բարձր մակարդակի լեզվի, կոչվում է դեկոմպիլյատոր (անգլ.՝ decompiler)։
- Ծրագիրը, որը բարձր մակարդակի լեզուների միջև է կատարում թարգմանություն, կոչվում է source-to-source կոմպիլյատոր (անգլ.՝ source-to-source compiler)։
- Վերագրված լեզուն (rewriter) ծրագիր է, որը թարգմանում է արտահայտությունների տեսքը՝ առանց լեզուն փոխելու։
- Կոմպիլյատորի կոմպիլյատոր (compiler-compiler) տերմինը երբեմն օգտագործվում է հղվելով վերլուծության գեներատորի վրա։ Այս միջոցը հաճախ օգտագործվում է լեքսիկական անալիզի ( անգլ.՝ lexer) և անալիզատորի (անգլ.՝ parser) ստեղծման համար։
Կոմպիլյատորը կարող է կատարել բոլոր նշված օպերացիաները՝
- լեքսիկական վերլուծություն ( անգլ.՝ lexical analysis) - Այս փուլում սկզբնական ֆայլի սիմվոլների հաջորդականությունը փոխակերպվում է թոքենների հաջորդականության։
- սինտակտիկական (քերականական) անալիզ (անգլ.՝ Parsing) - թոքենների հաջորդականությունը փոխակերպվում է վերլուծության ծառի (parse tree):
- սեմանտիկական (իմաստային) անալիզ (անգլ.՝ semantic analysis) - վերլուծության ծառը մշակվում է իմաստը հաստատելու նմատակով։ Օրինակ՝ իդենտիֆիկատորների կապը դրանց հայտարարմանը, տիպերին, համատեղելիության ստուգումը և այլն։ Արդյունքը հիմնականում կոչվում է կոդի միրջանկյալ ներկայացում (անգլ.՝ intermediate representation) և կարող է լինել վերլուծության ծառի լրացում, նոր ծառ, աբստրակտ հրամանների խումբ կամ այլ բան՝ հարմար հետագա աշխատանքին։
- կոդի օպտիմիզացիա ( անգլ.՝ code optimization) - կատարվում է ավելորդ կոնստրուկցիաների հեռացում և կոդի պարզեցում՝ իմաստը պահպանելով։
- կոդի գեներացիա (անգլ.՝ code generation) - միջանկյալ ներկայացումից առաջանում է ելքային կոդ (անգլ.՝ target code)։
Ծրագիրը կարող է օգտագործել օպերացիոն համակարգի կողմից տրամադրված ծառայություններ (օրինակ գրադարաններ՝ ֆայլերի հետ աշխատելու համար, գրադարաններ՝ գրաֆիկական ինտերֆեյս ստեղծելու համար)։ Մեքենայական կոդի օբյեկտային ֆայլերը այլ օբյեկտային ֆայլերից ավելացնելու և դինամիկ գրադարանի մասին ինֆորմացիայի համար կատարվում է միացում (անգլ.՝ link)։ Միացում կատարվում է կապերի խմբագրիչով։ Կապերի խմբագրիչը կարող է լինել առանձին ծրագիր կամ կոմպիլյատորի մաս։ Այն ստեղծում է կատարվող ֆայլ ( անգլ.՝ executable file) և իրականացվում է հետևյալ ձևով՝
- օգտագործողի պահանջով ստեղծվում է օպերացիոն համակարգի միջուկում ստեղծվում է «պրոցես» օբյեկտ,
- օպերացիոն համակարգի բեռնիչը (անգլ.՝ loader) կատարում է հաջորդ գործողությունները
- կատարվող ֆայլը իրականացնում է
- բեռնում է հիշողության մեջ
- բեռնում է դինամիկ գրադարանի հիշողության մեջ
- կատարում է մեքենայական կոդի ծրագրի միացում դինամիկ գրադարանին
- ղեկավարումը փոխանցում է ծրագրին
Կոմպիլյատորի առավելությունները՝
- ծրագրի կոմպիլյացիան կատարվում է մեկ անգամ
- սարքում, որի համար կատարվում է կոմպիլյացիան, կոմպիլյատորի առկայություն չի պահանջվում։
Կոմպիլյատորի թերությունները՝
- կոմպիլյացիան դանդաղ գործընթաց է
- սկզբնական կոդում փոփոխություններ անելուց հետո պահանջվում է կրկնակի կոմպիլյացիա