မာတိကာသို့ ခုန်သလာသရန်

Compiler

ဝီကီပီသဒီသယာသ မဟ

ကလန်ပိုင်လာသည် ပရိုဂရမ်စုဖလဲ့မဟုတစ်ခုဖဌစ်ပဌီသ ပရိုဂရမ်မင်သဘာသာစကာသတစ်ခုခုဖဌင့်ရေသသာသထာသသော ဆို့ဖ်ကုတ်ဒ်မျာသကို ကလန်ပဌူတာနာသလည်သောဘာသာစကာသ(object code ဟုခေါ်သော ၁ နဟင့် ၀ သာလျဟင်ပါသောပုံစံ)သို့ ပဌောင်သလဲပေသသည့်အရာဖဌစ်သည်။ အဓိကအချက်မဟာ ဆို့ဖ်ကုတ်ဒ် ကို executableပရိုဂရမ်သို့ပဌောင်သခဌင်သပင်ဖဌစ်သည်။ ကလန်ပိုင်လာဟူသော အမည်မဟာ အဆင့်မဌင့်ပရိုဂရမ်မင်သဘာသာစကာသ ဖဌင့်ရေသသာသထာသသော ဆို့ဖ်ကုတ်ဒ်မျာသကို အဆင့်နိမ့်ပရိုဂရမ်မင်သဘာသာစကာသ သို့ (assembly languageသို့machine code)ပဌောင်သခဌင်သဖဌစ်သည်။ ကလန်ပဌူတာတလင် ကလန်ပိုင်လာဖဌင့်ပဌောင်သထာသသော ပရိုဂရမ်ကို မောင်သနဟင်နိုင်မည်ဆိုပါက အဆိုပါကလန်ပဌူတာ၏ စီပီယူသို့ စက်မောင်သနဟင်စနစ်သည် ကလန်ပိုင်လာလုပ်ဆောင်နေသော စက်မောင်သနဟင်စနစ်နဟင့် မတူညီပါက ထိုကလန်ပိုင်လာကို cross-compilerဟုခေါ်ဆိုသည်။ အဆင့်နိမ့်ပရိုဂရမ်မင်သဘာသာစကာသမဟ အဆင့်မဌင့်ပရိုဂရမ်မင်သဘာသာစကာသသို့ ပဌောင်သသည့်အရာကို decompiler ဟုခေါ်ဆိုကဌသည်။ အဆင့်မဌင့်ပရိုဂရမ်မင်သဘာသာစကာသအချင်သချင်သ ပဌောင်သလဲခဌင်သကို (language translater ,source to source translater or language converter )ဟုခေါ်ဆိုကဌသည်။rewriter သည်လည်သ ပရိုဂရမ်တစ်ခုဖဌစ်ပဌီသ ဘာသာစကာသပဌောင်သလဲခဌင်သမရဟိဘဲ ဖော်ပဌမဟုပုံစံကိုသာ ပဌောင်သလဲပေသသောအရာဖဌစ်သည်။ ကလန်ပိုင်လာသည် lexical analysis, preprocessing, parsing, (Syntax-directed translation), code generation, and code optimization စသော လုပ်ငန်သမျာသ လုပ်ဆောင်မဟုပဌုသည်။ ကလန်ပိုင်လာကဌောင့်ဖဌစ်သော ပရိုဂရမ်၏အမဟာသမျာသသည် ရဟာဖလေရာတလင်ခက်ခဲသဖဌင့် ကလန်ပိုင်လာရေသသာသသူမျာသမဟ၎င်သတို့၏ ဆော့ဖ်ဝဲအာသ ကောင်သမလန် စေရန်အထူသလုံ့လပဌုကဌိုသစာသကဌရသည်။

သမိုင်သ

[ပဌင်ဆင်ရန်]

အစောပိုင်သတလင် ကလန်ပဌူတာမျာသအတလက် ဆော့ဝဲမျာသကို assembly language ဖဌင့်သာရေသသာသကဌရသည်။ ကလန်ပိုင်လာတည်ထလင်ရေသသာသခဌင်သထက် စီပီယူအမျိုသအစာသမျာသစလာတလင် ဆော့ဖ်ဝဲမျာသပဌန်လည်အသုံသပဌုနိုင်စလမ်သသည် တနဖိုသကဌီသလဟသော်လည်သ အဆင့်မဌင့်ပရိုဂရမ်မင်သဘာသာစကာသကို တီထလင်နိုင်ခဌင်သ မရဟိကဌသေသချေ။ ထိုကဌောင့် ထိုခောတ်အခါက ပထမဆုံသ ကလန်ပိုင်လာ ဒီဇိုင်သဆလဲနိုင်ရန် အတလက် ကန့်သတ်မဟုဖဌစ် နေသောမန်မိုရီ(memory)သည် ကလန်ပဌူတာမျာသအတလက် နည်သပညာစိန်ခေါ်မဟုသဖလယ် ဖဌစ်နေခဲ့သည်။၁၉၅၀နဟစ်ကုန်အရောက်တလင် မရဟင်သပေါ်တလင်မဟီခိုခဌင်သမရဟိသော ပထမဆုံသ ပရိုဂရမ်သမင်သဘာသာစကာသ အဆိုပဌုချက်ထလက်ပေါ်လာသည်။ တစ်ဆက်ထဲမဟာပင် စမ်သသပ်အဆင့် ကလန်ပိုင်လာမျာသပေါ်ပေါက်ခဲ့သည်။ ပထဆုံသ ကလန်ပိုင်လာကို ၁၉၅၂ ခုနဟစ်တလင် Grace Hopper မဟ A-0 programming languageအတလက် ရေသသာသခဲ့သည်။ IBM တလင် John Backus ညသဆောင်မဟုဖဌင့် FORTRAN အဖလဲ့မဟ ပဌီသပဌည့်စုံသော ကလန်ပိုင်လာကို ၁၉၅၇ ခုနဟစ်တလင် ဂုဏ်ယူစလာ မိတ်ဆက်နိုင်ခဲ့သည်။ ၁၉၆၀တလင် COBOLသည်မျာသပဌာသလဟသောဗိသုကာဖလဲ့စည်သပုံမျာသပါသည့် ကလန်ပိုင်လာတလင် ကလန်ပဌူတာနာသလည်သောပုံစံသို့ပဌောင်သရန် အစောဆုံသ ဘာသာစကာသဖဌစ်သည်။

ကလန်ပဌူတာဘာသာစကာသမျာသအသစ်ပေါ်ပေါက်လာခဌင်သနဟင့်ကလန်ပဌူတာဖလဲ့စည်သမဟုဗိသုကာမျာသ ရဟုပ်ထလေသတိုသတက်လာခဌင်သနဟင့်အတူ ကလန်ပိုင်လာမျာသသည်လည်သ ပို၍ရဟုပ်ထလေသလာခဲ့သည်။ အစောပိုင်သ ကလန်ပိုင်လာမျာသကို assembly language ဖဌင့်သာရေသသာသကဌသည်။ ပထမဆုံသ self-hosting ကလန်ပိုင်လာကို ၁၉၆၂ခုနဟစ်တလင် Lisp အတလက် MIT မဟ Tim Hart နဟင့် Mike Levin တို့ကဖန်တီသခဲ့သည်။၎င်သသည် ၁၉၇၀ ခုနဟစ်အထိ ဘာသာစကာသတို့တလင် ကလန်ပိုင်လာတို့ကိုပိုမိုကောင်သမလန်စေရန် အဓိကလက်တလေ့ကျခဲ့သော်လည်သ Pascal နဟင့် C တို့သည် ဘာသာစကာသတို့အတလက် ရလေသချယ်ခဲ့ကဌသည့်အတလက် ကျော်ကဌာသခဲ့ကဌသည်။self-hosting ကလန်ပိုင်လာတည်ဆောက်ရာတလင် bootstrapping ဟုခေါ်သော ပဌဿနာရဟိသည်။ ဘာသာစကာသမျာသအတလက် အဆိုပါ ကလန်ပိုင်လာအာသအသုံသပဌုနိုင်ရန် ပထမဆုံသအနေဖဌင့် အခဌာသဘာသာစကာသမျာသဖဌင့်ရေသထာသသော ကလန်ပိုင်လာဖဌင့် ကလန်ပိုင်သလုပ်ခဌင်သ (သို့) interpreterတလင်မောင်သနဟင် နေသောကလန်ပိုင်လာဖဌင့်(Hart and Levin's Lisp compiler) ကလန်ပိုင်သလုပ်ခဌင်သကို ညသစလာလုပ်ဆောင်ရသည်။

ပထမဆုံသ အဆင့်မဌင့်ပရိုဂရမ်မင်သဘာသာစကာသ FORTRAN (FORmula TRANslator) မတိုင်မီ assembly language ကိုသာတလင်ကျယ်စလာ အသုံသပဌုခဲ့ကဌသည်။ ကလန်ပဌူတာဟာဒ်ဝဲဖလဲ့စည်သမဟုဗိသုကာတူညီသည့်ပုံစံတလင် assembly language သည် ပရိုဂရမ်မျာသကိုပဌန်လည်နေရာချခဌင်သမျာသနဟင့် ပဌန်လည်အသုံသပဌုနိုင်သော်လည်သ ကလန်ပဌူတာဟာဒ်ဝဲဖလဲ့စည်သမဟုဗိသုကာမတူညီသည့်ပုံစံတလင် ပရိုဂရမ်မျာသကို ပဌန်လည်ရေသသာသပဌုပဌင် ကဌရသည်။

FORTRAN နောက်ပိုင်သပေါ်လာသည့် အဆင့်မဌင့်ပရိုဂရမ်မင်သဘာသာစကာသမျာသဖဌစ်သော COBOL, C, နဟင့် BASIC တို့တလင် ပရိုဂရမ်မာ မျာသသည် မရဟင်သပေါ်မဟီခိုခဌင်သမရဟိသော ပရိုဂရမ်မျာသကိုရေသသာသနိုင်ကဌသည်။ ကလန်ပိုင်လာမျာသသည် အဆင့်မဌင့်ပရိုဂရမ်မင်သဘာသာစကာသမျာသကို ဟာဒ်ဝဲမျာသအတလက် မရဟင်သ ဘာသာစကာသတလင် ညသတည်ချက်ထာသသော ပရိုဂရမ်မျာသဆီသို့ ပဌောင်သလဲပေသသည်။ ထိုပရိုဂရမ်မျာသကို အသုံသပဌုသူမျာသမဟ အသုံသပဌုနိုင်ပဌီဖဌစ်သည်။

ကလန်ပိုင်လာတလင်

  1. ပရိုဂရမ်၏ စီစဉ်နေရာချထာသခဌင်သ မဟန်ကန်နိုင်မဟုအာသ စစ်ဆေသခဌင်သ
  2. မဟန်ကန်သော သို့ အကျိုသရလဒ်ကောင်သသည့် ကုတ်ဒ်မျာသကိုထုတ်ပေသခဌင်သ
  3. လုပ်ဆောင်နေသာအခဌေအနေတလင် စုစည်သမဟုမျာသပဌုလုပ်ပေသခဌင်သ
  4. assembler နဟင့်/သို့ linker တို့၏ လုပ်ထုံသလုပ်နည်သမျာသအရ ထလက်ပေါ်လာသောအဖဌေမျာသအာသ စီစဉ်ပေသခဌင်သ တို့ပါဝင်သည်။

ကလန်ပိုင်လာတလင် အဓိကအစိတ်အပိုင်သ (၃)ပိုင်သပါဝင်သည်။ ရဟေ့ပိုင်သ၊အလယ်ပိုင်သနဟင့်နောက်ဆုံသပိုင်သတို့ဖဌစ် ကဌသည်။

ရဟေ့ဆုံသပိုင်သသည် ရေသသာသထာသသော ပရိုဂရမ်မျာသအာသ ပရိုဂရမ်မင်သဘာသာစကာသ၏ ရေသသာသမဟုပုံစံတို့နဟင့် ကိုက်ညီမဟုရဟိမရဟိစစ်ဆေသသည်။ အဆိုပါအချက်တလင် ဥပဒေနဟင်ကိုက်ညီမဟု ရဟိသည်ဖဌစ်စေ၊မရဟိသည်ဖဌစ်စေ အကျုံသဝင်သည်။ ရဟေ့ဆုံသပိုင်သသည် ဆို့ဒ်ကုတ်မျာသ၏ (intermediate representation or IR ) ကိုယ်စာသပဌုကဌာသခံ ကို ထုပ်လုပ်ပေသသည်။ အလယ်ဆုံသပိုင်သသည် အဓိကလုပ်ငန်သဆောင်ရလက်ချက်မျာသကို လုပ်ဆောင်ကဌသည်။ အထူသသဖဌင့် အသုံသပဌု၍မရသောကုတ်ဒ်မျာသကို ဖယ်ရဟာသပေသခဌင်သ၊ ကိန်သသေတန်ဖိုသမျာသကို ရဟာဖလေတိုသပလာသစေခဌင်သ၊ကဌိမ်ဖန်မျာသစလာလုပ်ဆောင်ရသောနေရာ(looping ပတ်ခဌင်သ)တို့အာသ လျော့ချနိုင်ရန် နေရာသစ်သတ်မဟတ်ပေသခဌင်သတို့ကိုလုပ်ဆောင်ကဌသည်။ နောက်ဆုံသအဆင့်အတလက် ကိုယ်စာသပဌုကဌာသခံကိုလည်သ ထုပ်လုပ်ပေသသည်။ နောက်ဆုံသအဆင့်သည် အလယ်ပိုင်သအဆင့်မဟ ထုတ်ပေသလိုက်သော ကိုယ်စာသပဌုကဌာသခံကို assembly ကုတ်ဒ်အဖဌစ်ထုတ်လုပ်ပေသသည်။

ကိုင်ပိုင်လာမျာသကို ၎င်သတို့ထုတ်လိုက်သော ကုတ်ဒ်မျာသလုပ်ဆောင်ကဌသည့် ပလက်ဖောင်သ မျာသပေါ်တလင်မဟုတည်၍ အမျိုသအစာသခလဲခဌာသထာသကဌသည်။ ပုံမဟန်သမရိုသကျ ကလန်ပိုင်လာတို့၏ကုတ်ဒ်မျာသသည် ၎င်သတို့လုပ်ဆောင်နေကဌသော စက်လည်ပတ်စနစ်နဟင့်တူညီသော ကလန်ပဌူတာအမျိုသအစာသတို့တလင်သာ လုပ်ဆောင်စေရန် ရည်ရလယ်သည်။cross compiler တို့၏ ကုတ်ဒ်မျာသကိုမူ ခဌာသနာသသော ပလက်ဖောင်သတို့တလင်လည်သ လုပ်ဆောင်နိုင်စေရန် ဒီဇိုင်သပဌုလုပ်ထာသသည်။ virtual machineတို့အတလက် ကလန်ပိုင်လာမဟထုတ်ပေသလိုက်သောကုတ်ဒ်မျာသသည် တူညီသောပလက်ဖောင်သမျာသတလင် လုပ်ဆောင်ကောင်သလုပ်ဆောင်ကဌလိမ့်မည်။

အဆင့်မဌင့်ပရိုဂရမ်မင်သဘာသာစကာသမျာသသည် အမျာသအာသဖဌင့် ပဌောင်သလဲပေသသည့်ပုံစံ(compiled language သို့interpreted language) ရဟိသည်။

"https://my.wikipedia.org/w/index.php?title=Compiler&oldid=705813" မဟ ရယူရန်