ကွန်ပျူတာများ, ပရိုဂရမ်းမင်း
ထုတ်လွှင့် - သည် ... compiler နဲ့အမျိုးအစားများ။ ပြောင်းနှင့်ထုတ်လွှင့်အစီအစဉ်များ
တယောက်ကိုတယောက်ဘာသာစကားမှဘာသာပြန်ဆိုရန်အစီအစဉ်များအဖြစ်လူတွေကိုစကားပြန်သို့မဟုတ်ဘာသာပြန်ဆိုသူလိုအပ်ပါတယ်။
အခြေခံသဘောတရား
အဆိုပါအစီအစဉ်ကိုတွက်ချက်မှုတစ်ခုဘာသာစကားကိုယ်စားပြုမှုဖြစ်ပါသည်: ဈ P ကို→ P ကို (ဈ) →။ စကားပြန်ကတော့ input ကိုအစီအစဉ်ကို P နှင့်အချို့သော input ကိုက x မှထောက်ပံ့သော program တစ်ခုဖြစ်ပါတယ်။ ဒါဟာ P ကိုက x မှာလုပ်ဆောင်: ငါ (P x က) = P ကို (x) အဖွဲ့။ တစ်ဦးတည်းသာဘာသာပြန်ဆိုသူ (တရားဝင်စနစ်ကိုယ်စားပြုနိုင်သည့်) အားလုံးဖြစ်နိုင်သမျှအစီအစဉ်များဖျော်ဖြေနိုင်စွမ်းလည်းမရှိကြောင်းအဆိုပါအချက်ကိုအလွန်လေးနက်ခြင်းနှင့်သိသာထင်ရှားသောရှာဖွေတွေ့ရှိမှု Turing ဖြစ်ပါတယ်။
Processor ကိုစက်ဘာသာစကားမှာပရိုဂရမ်တခုစကားပြန်ဖြစ်ပါတယ်။ ယေဘုယျအားဖြင့်အဆင့်မြင့်ဘာသာစကားများစကားပြန်ရေးသားဖို့လည်းစျေးကြီး, ဒါသူတို့အနက်ကိုဘော်ပြဖို့ပိုပြီးလွယ်ကူကြောင်းပုံစံတခုသို့ဘာသာပြန်ဆို။
ဘာသာပြန်များအချို့မှာမျိုးအလွန်ထူးဆန်းတဲ့အမည်များရှိသည်:
- အဆိုပါစည်းဝေးစက်ဘာသာစကားသို့စည်းဝေးပွဲကိုဘာသာစကားအစီအစဉ်များကိုဘာသာပြန်ပေးသည်။
- အဆိုပါ compiler ဟာနိမ့်ဘာသာစကားတစ်ခုက high-level ကိုဘာသာစကားဘာသာပြန်ပေးသည်။
, ∀xဖြစ်ပါတယ်ဒါက P ကို→ X ကို→ဆိုးကျိုး: - ထုတ်လွှင့်အချို့ဘာသာစကား S ကိုအတွက် input ကိုဒေတာအဖြစ် program ကိုယူပြီးသူတို့နှစ်ဦးစလုံးအတူတူ semantic ရှိသည်ထိုကဲ့သို့သောလမ်းအတွက် T က program ကိုထုတ်လုပ်မယ့်အစီအစဉ်တစ်ခုဖြစ်သည်။ : P (x) = မေး (x) အဖွဲ့။
စကားပြန်တစ်ခုခုသို့တစ်ခုလုံးကိုအစီအစဉ်ကိုထုတ်လွှင့်ပါကသေဒဏ်စီရင်, ဒါမှမဟုတ် AOT စုစည်းရှေ့တော်၌စုစည်းဟုခေါ်သည်။ AOT compiler ဥပမာ, စီးရီးအတွက်မကြာခဏစည်းဝေးသောအရာတို့၏အဆုံးစွန်ကိုအသုံးပြုနိုင်ပါတယ်:
source code ကို compiler → (ဘာသာပြန်ဆိုသူ) →→စည်းဝေးပွဲကိုကုဒ်စည်းဝေး (compiler) →→ CPU ကို machine code ကို (စကားပြန်) ။
အခြားအယခင်ကပြုစုတစ်စိတ်တစ်ပိုင်းအားဖြင့်ကွပ်မျက်ခံရသောအခါအစီအစဉ်ထုတ်လွှင့်နေသည်ဆိုပါကလုပ်ငန်းလည်ပတ်သို့မဟုတ်ပြောင်းလဲနေသောစုစည်းတွေ့ရှိနိုင်ပါသည်။ JIT-compiler နဲ့သူတို့ပြီးသားအထပ်ထပ် source code ကိုပြန်လုပ်ပါဖို့မဒါအဖြစ်အဘယ်သို့ပြုသည်ကိုသတိရပါ။ သူတို့ကပင်အစီအစဉ်ကိုကွပ်မျက်ပတ်ဝန်းကျင်၏အပြုအမူအပေါ်အခြေခံပြီးသပ္ပါယ်စုစည်းနှင့် recompilation ထုတ်လုပ်နိုင်သည်။
ဘာသာစကားမြားစှာ compile လုပ်ခြင်းအချိန်တွင် code တွေနဲ့စီမံခြင်းနှင့် runtime မှာအသစ်သောကုဒ် compile လုပ်ဖို့ခွင့်ပြုပါ။
ဘာသာပြန်ချက်ဇာတ်ခုံ
ထုတ်လွှင့်ခွဲခြားစိတ်ဖြာနှင့် synthesizing ၏ခြေလှမ်းများပါဝင်သည်:
ပစ်မှတ်ကုဒ်→→→→အယူအဆရေးရာကိုယ်စားပြုမှုမီးစက် (စုပေါင်း) ကို source code ကို Analyzer ။
ဤအကြောင်းပြချက်ကြောင့်ဖြစ်ပါသည်:
- အခြားမည်သည့်နည်းလမ်းကိုမသင့်ပါ။ သမ်မာကမျြး, ဘာသာပြန်ချက်ရိုးရိုးအလုပ်မလုပ်ပါဘူး။
- ကောင်းသောအင်ဂျင်နီယာဖြေရှင်းချက်: သင်က M နဲ့ N အရင်းအမြစ်ဘာသာစကားများဘာသာပြန်များရေးသားဖို့လိုလျှင်ပစ်မှတ်ထားမဟုတ်ဘဲ M က× N ကရှုပ်ထွေးသော (ဘာသာပြန်များစုစုပေါင်း) ထက်သာ M က + N ကိုရိုးရှင်းတဲ့ပရိုဂရမ်များ (polukompilyatorov) စာရေးလိုအပ်ပါတယ်။
သို့သော်အလေ့အကျင့်တစ်ခုလုံလောက်အောင်အလွန်ခဲဖော်ပြသည်စိတ်ကူးအရင်းအမြစ်နှင့်ပစ်မှတ်ဘာသာစကားများကိုဖုံးလွှမ်းရန်လုံလောက်သောအစွမ်းထက်တဲ့အယူအဆအမြင်၌တည်၏။ အချို့သောနီးကပ်ဤလာနိုငျခဲ့ကွသနေစဉ်။
ရီးရဲလ် compiler နဲ့အများကြီးအဆင့်ဆင့်ဖြတ်သန်း။ သင့်ကိုယ်ပိုင် compiler ကဖန်တီးသောအခါလူတွေကိုကိုယ်စားပြုခြင်းနှင့်မီးစက်ကိုဖန်တီးရန်ပြုကြပြီသမျှသောခက်ခဲအလုပ်ပြန်လုပ်ရန်မလိုအပ်ပါဘူး။ သငျသညျ JavaScript ကိုသို့မဟုတ် C တိုက်ရိုက်သင်၏ဘာသာစကားဘာသာပြန်ဆိုဖြစ်ပြီးကျန်လုပ်ဖို့တည်ဆဲ JavaScript ကို-အင်ဂျင်နှင့် C အ compiler ၏အားသာချက်ယူနိုင်ပါတယ်။ သင်တို့သည်လည်းလက်ရှိအလယ်အလတ်ကိုယ်စားပြုမှုနှင့်ကိုသုံးနိုင်သည် ကို virtual စက်တွေ။
စံချိန်ဘာသာပြန်ဆိုသူ
အရင်းအမြစ်, destination သည်နှင့်ခြေရင်း: - ထုတ်လွှင့်သုံးဘာသာစကားများပါဝင်ပတ်သက်ရသောပရိုဂရမ်တစ်ခုသို့မဟုတ်ဟာ့ဒ်ဝဲဖြစ်ပါသည်။ သူတို့ကမူလလက်ဝဲအားမရ, တစ်ဦးကို T-ပုံသဏ္ဍာန်၌တရားတိကျမ်းစာ၌လာသည်နှင့်အောက်မှာအခြေစိုက်စခန်းပစ်မှတ်ထားနိုင်ပါတယ်။
compiler နဲ့အမျိုးအစားသုံးမျိုးရှိပါသည်:
- ထုတ်လွှင့် - ကအခြေခံအရင်းအမြစ်ဘာသာစကားနဲ့သက်ဆိုင်တဲ့လျှင် samokompilyator ဖြစ်ပါတယ်။
- ဘာသာစကားပစ်မှတ်ထားထားတဲ့ compiler samorezidentnym ဟုခေါ်တွင်သည်အခြေခံဖြစ်ပါတယ်။
- ထုတ်လွှင့် - cross-compiler သူပစ်မှတ်ထားနှင့်အခြေခံအမျိုးမျိုးသောဘာသာစကားကိုလျှင်။
အဘယ်ကြောင့်ဒီအအရေးကြီးသနည်း
: ဤရည်ရွယ်ချက်အတွက်အသုံးပြုအယူအဆဥပမာအားဖြင့်, ကျယ်ပြန့်အသုံးပြုကြသည်ဖြစ်သောကြောင့်, သင်သည်အမှန်တကယ် compiler က၎င်း၏ဖန်ဆင်းခြင်း၏နည်းပညာ၏အကောင်းတစ်ဦးအသိပညာအောင်ဘယ်တော့မှရင်တောင်
- ပုံစံကစာသား;
- ဘာသာစကား query လုပ်တဲ့အခါ databases ကိုရန်,
- အဆင့်မြင့်ကွန်ပျူတာဗိသုကာ;
- ယေဘူယျ optimization ပြဿနာများ;
- သောအသွင်;
- scripting language;
- controller စ;
- ကို virtual စက်တွေ;
- စက်ဘာသာပြန်ချက်။
သငျသညျ preprocessors, linkers, loader, debugger နဲ့ကိုယ်ရေးအကျဉ်းကိုရေးသားဖို့ချင်တယ်ဆိုရင်အပြင်, သင်တစ်ဦး compiler ရေးသားသည့်အခါကဲ့သို့တူညီသောအဆင့်များဖြတ်သန်းသွားရပေမည်။
သင်တို့သည်လည်းဘာသာစကားကိုများအတွက်ဘာသာပြန်ဆိုသူ၏ဖန်ဆင်းခြင်းသည်၎င်း၏ရှုပ်ထွေးပွေလီလှနှင့်သဲသဲကွဲကွဲမရှိသော၏ပိုကောင်းတဲ့နားလည်မှုကိုဆိုလိုသည်ကတည်းကပိုကောင်းတဲ့အစီအစဉ်များကိုရေးသားဖို့ဘယ်လိုလေ့လာသင်ယူနိုင်ပါတယ်။ အသံလွှင့်၏အထွေထွေအခြေခံမူ၏လေ့လာမှုသည်လည်းသင်တို့ကိုအကောင်းတစ်ဦးဒီဇိုင်နာဘာသာစကားဖြစ်လာမှခွင့်ပြုပါတယ်။ ဒါကြောင့်ထိထိရောက်ရောက်အကောင်အထည်ဖော်မရနိုငျဘယ်လောက်စောက်ဘာသာစကားကိုလျှင်ဒါကြောင့်အရေးပါသနည်း?
ပြည့်စုံသောနည်းပညာ
compiler နည်းပညာကွန်ပျူတာသိပ္ပံအများအပြားကွဲပြားခြားနားသောဒေသများဖုံးလွှမ်း:
- ဘာသာစကား၏တရားဝင်သီအိုရီ: သဒ္ဒါ, ဆန်းစစ်မှု, ကွန်ပျူတာ,
- ကွန်ပျူတာဗိသုကာ: ညွှန်ကြားချက်အစုံ, RISC သို့မဟုတ် CISC, etc, အပြောင်းအလဲနဲ့ core ကိုနာရီသံသရာ pipelined; ။
- ပရိုဂရမ်းမင်းဘာသာစကားအယူအဆ, ဥပမာ, တစ်ဦး sequence ကိုထိန်းချုပ်ဖျော်ဖြေ, ခြွင်းချက်ကွပ်မျက်, ကြားမှာ, request ကို, အလုပ်လုပ်တဲ့ပြိုကွဲ, modular, ထပ်တူ, Meta-ပရိုဂရမ်းမင်း, နယ်ပယ်, စဉ်ဆက်မပြတ်ခွဲအမျိုးအစားများ, တင်းပလိတ်များ, output ကိုအမျိုးအစားရှေ့ပြေးပုံစံမှတ်စာများ, စီးဆင်းမှု, မိုနတ်, စာတိုက်ပုံးများ, ဆက်လက် ဒါပေါ်, သံခိတ်ပုံမှန်စကားရပ်, အရောင်းအဝယ်မှတ်ဉာဏ်, အမွေဥစ္စာ, polymorphic, mode ကိုဆက်တင်နှင့်စသည်တို့ကို။ ။ ,
- စိတ္တဇဘာသာစကားများနှင့်ကို virtual စက်တွေ;
- algorithms များနှင့် ဒေတာအဆောက်အဦများ: regular expressions ကို, algorithms, ဂရပ်ဖစ် algorithms, parsing ပြောင်းလဲနေသောပရိုဂရမ်းမင်း, သင်တန်း,
- programming ဘာသာစကားများ: syntax, ဝေါဟာရအသုံးအနှုံး (အငြိမ်နဲ့ပြောင်းလဲနေသော), ထောက်ခံမှု Paradigm (functional ဖြစ်စေဖွဲ့စည်းတည်ဆောက်ပုံ, OOP, ယုတ္တိ, သီးနှံများကိုပုံ, Parallel, Meta-ပရိုဂရမ်းမင်း);
- ဖန်ဆင်းခြင်း software ကို (များသောအားဖြင့်ကြီးမားခြင်းနှင့်ရှုပ်ထွေးသော compiler နဲ့,): localization, caching componentize, API ကို-interfaces, Re-အသုံးပြုမှု, ထပ်တူ။
compiler ဒီဇိုင်း
အစစ်အမှန်ဘာသာပြန်ဆိုသူ၏ဖွံ့ဖြိုးတိုးတက်မှုအတွက်ကြုံတွေ့ပြဿနာတွေထဲကတချို့ဟာ:
- အရင်းအမြစ်ဘာသာစကားနှင့်အတူပြဿနာများ။ က compile လုပ်ဖို့ကလွယ်ကူပါသလား? တစ်ဦး preprocessor ရှိပါသလား? ဘယ်လိုအမျိုးအစားများရှိပါသလဲ တစ်ဦးစာကြည့်တိုက်ရှိပါသလော
- အာဆီယံ compiler ဖြတ်သန်း: တစ်ခုတည်းသို့မဟုတ် Multi-လမ်း?
- optimization ၏ဒီဂရီအလိုရှိသော။ အနည်းငယ်သာသို့မဟုတ်လုံးဝမသင့်မြတ်အောင်လုပ်ကိုင်နှင့်အတူအစာရှောင်ခြင်းနှင့်မစင်ကြယ်သောအထုတ်လွှင့်အစီအစဉ်များကိုပုံမှန်ရှိနိုင်ပါသည်။ over-optimization compiler ကနှေးကွေးပါလိမ့်မယ်, ဒါပေမယ့် runtime မှာပိုကောင်းတဲ့ကုဒ်ကတန်ဖိုးရှိဖြစ်နိုင်သည်။
- အမှားထောက်လှမ်း၏လိုအပ်သောဒီဂရီ။ တစ်ဦးဘာသာပြန်ဆိုသူရုံကိုပထမဦးဆုံးအမှားမှာရပ်တန့်နိုင်သလား? ဒါကြောင့်ရပ်တန့်သင့်သည့်အခါ? အဆိုပါ compiler ကအမှားဆုံးမပဲ့ပြင်ယုံကြည်စိတ်ချဖို့ရှိမရှိ?
- tool များ၏ရရှိနိုင်မှု။ မူရင်းဘာသာစကားအလွန်သေးငယ်သည်မဟုတ်လျှင်, စကင်နာများနှင့်မီးစက်ဖြာလိုအပ်သည်။ အဲဒီမှာမီးစက်, ကုဒ်မီးစက်လည်းရှိပါတယ်, ဒါပေမဲ့သူတို့ဒါကြောင့်ဘုံမရှိကြပေ။
- generated ခံရဖို့ပစ်မှတ်ကုဒ်အမျိုးအစား။ စင်ကြယ်သောဖြည့်စွက်သို့မဟုတ်ကို virtual machine code ကိုမှရွေးချယ်ထားသောလိမ့်မည်။ သို့မဟုတ်ပဲထိုကဲ့သို့သော LLVM, ဘန်ဝစ်, ဒါမှမဟုတ်ကွန်ပိုင်းလာအဖြစ်အဖြစ်ရေပန်းစားအလယ်အလတ်ကိုယ်စားပြုမှုကိုဖန်တီးပေးသည့် entry ကိုအဘို့ကိုရေးပါ။ သို့မဟုတ် C သို့မဟုတ် JavaScript ကိုအတွက် source code ကိုအတွက်မူရင်းတစ်ဘာသာပြန်ချက်ပါစေ။
- ပစ်မှတ် code တွေရဲ့ format နဲ့။ သငျသညျရှေးခယျြနိုငျ စည်းဝေးပွဲဘာသာစကား, တစ်ဦးခရီးဆောင် machine code ကို, machine code ကိုမှတ်ဉာဏ်ပုံရိပ်။
- Retargeting ။ မီးစက်၏ set ကိုတစ်ဘုံဝင်ပေါက်သောအဘို့ကိုရှိသည်ဖို့ကောင်းလှ၏အခါ။ ဤအကြောင်းကြောင့်ဒါကြောင့်များစွာသောအစိတ်အပိုင်းများ၏ input ကိုတမီးစက်ရှိသည်ဖို့အကောင်းဆုံးဖြစ်ပါတယ်။
compiler ဗိသုကာ: အစိတ်အပိုင်းများ
ဤရွေ့ကားဇာတိ code ကိုထုတ်ပေးတဲ့ compiler ၏အဓိကအလုပ်လုပ်တဲ့အစိတ်အပိုင်းများကို (output ကိုပရိုဂရမ်တစ်ခုက C ဒါမှမဟုတ် virtual machine ထဲမှာအစီအစဉ်တစ်ခုဖြစ်သည်လျှင်, သင်ဤမျှလောက်များစွာသောအဆင့်စရာမလိုပေ) ရှိပါတယ်:
- အဆိုပါ input ကိုအစီအစဉ် (စီးဆင်းမှုအမှတ်အသားများ) တိုကင်တစ်စီးသို့ပြောင်းပေးသောစကင်နာ (lexical Analyzer), သို့ကျွေးမွေးသည်။
- တဦးတည်းစိတ္တဇ syntax သစ်ပင်ဆောက်လုပ် parser (parser ကို) ။
- semantic Analyzer အဆိုပါ semantic သတင်းအချက်အလက် decomposes နှင့်အမှားအယွင်းများများအတွက်သစ်ပင် node များ check လုပ်ပေးပါတယ်။ အပိုဆောင်းဂုဏ်သတ္တိများနှင့်ထူထောင်လင့်များနှင့်အတူစိတ္တဇ syntax သစ်ပင် - ရလဒ်အဖြစ် semantic ဂရပ်တည်လေ၏။
- အလယ်အလတ်ကုဒ်မီးစက် (tuples အဓိကလုပ်ကွက်သို့အုပ်စုဖွဲ့နေကြသည်) တစ်ဦးစီးဆင်းမှုဂရပ်ဆောက်။
- စက်-လွတ်လပ်သောကုဒ် Optimizer အခြေခံအားဖြင့်လုပ်ရိုးလုပ်စဉ်အတွင်းကျန်ရှိနေသေးသော (ထိုအခြေစိုက်စခန်းယူနစ်အတွင်း) ဒေသခံနှင့် (အားလုံးလုပ်ကွက်မှ) ကမ္ဘာလုံးဆိုင်ရာ optimization နှစ်ဦးစလုံးကျင်းပ။ မလိုအပ်တဲ့ code ကိုလျော့နည်းစေခြင်းနှင့်တွက်ချက်မှုရိုးရှင်းစွာ။ အဆိုပါရလဒ်တစ်ခုပြုပြင်ထားသောစီးဆင်းမှုဂရပ်ပါပဲ။
- Generator ကိုစည်းဝေးကို virtual မှတ်ပုံတင် (ဖြစ်နိုင်သည်ထိရောက်မှု) object တစ်ခု file ကိုဖန်တီးနေတဲ့ rectilinear ဂီယာထိန်းချုပ်မှုကုဒ်သို့ပစ်မှတ်ကုဒ်အခြေခံလုပ်ကွက်ချည်နှောင်။
- စက်-မှီခို Optimizer, linker မှတ်ပုံတင်အကြားမှတ်ဉာဏ်သတ်မှတ်ရန်နှင့်အသင်းများကိုစီစဉ်စေသည်။ ဒါဟာပိုက်လိုင်းကောင်းတစ်ဦးကိုအသုံးပြုခြင်းနှင့်အတူဤစည်းဝေးပွဲမှာပရိသတျဘာသာစကားမှာပြောင်းလဲခြင်းအစီအစဉ်ကိုလုပ်ဆောင်တယ်။
ထို့အပြင်ခုနှစ်, အမှားထောက်လှမ်း subsystem သို့မန်နေဂျာနှင့်သင်္ကေတကျောက်ပြားကိုအသုံးပြုခြင်း။
Lexical ခွဲခြမ်းစိတ်ဖြာ (စကင်ဖတ်စစ်ဆေးဖို့)
အဆိုပါစကင်နာကြားနေရာလွတ်, မှတ်ချက်များနှင့်တိုးချဲ့ဘာလို့လဲဆိုတော့ Micro စနစ်နဲ့အခြားသောဖယ်ရှားခြင်း, တိုကင်တစ်စီးသို့စီးအရင်းအမြစ်ဇာတ်ကောင်ပြောင်းပေးပါတယ်။
စကင်နာများမကြာခဏအကောင့်ထဲသို့အမှု, မာဂျင်လိုင်းအားလပ်ချိန်နှင့်အ embedded မှတ်ချက်များယူထိုကဲ့သို့သောဖြစ်စေမအဖြစ်ပြဿနာများ, ကြုံတွေ့ရ။
စကင်ဖတ်စစ်ဆေးဖို့ကာလအတွင်းဖြစ်ပေါ်စေခြင်းငှါအမှားအယွင်းများ, lexical ခေါ်ပါဝင်သည်:
- အက္ခရာစဉ်ထဲမှာမဖြစ်ကြောင်းဇာတ်ကောင်;
- စကားလုံးတစ်လုံးသို့မဟုတ်အညီဇာတ်ကောင်များ၏အရေအတွက်ပိုလျှံ;
- မပိတ်ထားသောနိမိတ်လက္ခဏာတစ်ခုသို့မဟုတ် string ကိုပကတိ;
- မှတ်ချက်ထဲမှာဖိုင်ရဲ့အဆုံး။
(ဆန်းစစ်မှု) parsing
အဆိုပါ parser ကိုတစ်ဦးစိတ္တဇ syntax သစ်ပင်သို့တိုကင်၏ sequence ကိုပြောင်းပေးပါတယ်။ သစ်ပင်အတွက်အသီးအသီး node ကိုသစ်ပင် node များသူတို့ကိုယ်သူတို့များမှာအများအပြားရာအမည်ရှိလယ်ကွင်းနှင့်အတူ object တစ်ခုအဖြစ်သိမ်းဆည်းထားသည်။ ဒီအဆင့်မှာအဘယ်သူမျှမသံသရာရှိပါသည်။ သင်တစ်ဦး parser ကိုဖန်တီးလိုက်တဲ့အခါသဒ္ဒါ၏ရှုပ်ထွေးမှုအဆင့် (ll သို့မဟုတ် LR) ကိုအာရုံစိုက်ခြင်းနှင့်မည်သည့်စည်းမျဉ်းစည်းကမ်းတွေကိုကျိုးပျက်နေသောဖိုင်လင့်များပါသည့်ရှိပါတယ်ရှိမရှိထွက်ရှာရန်လိုအပ်ပေသည်။ တချို့ကဘာသာစကားများ semantic ခွဲခြမ်းစိတ်ဖြာလိုအပ်လုပ်ပါ။
ဒီအဆင့်မှာတွေ့ရတဲ့အမှားအယွင်းများ syntax ဟုခေါ်ကြသည်။ ဥပမာ:
- ဋ = 5 * (7 - က y;
- ည = / 5;
- 56 = x ကို * 4 ။
semantic ခွဲခြမ်းစိတ်ဖြာ
အဆိုပါကာလအတွင်း semantic ခွဲခြမ်းစိတ်ဖြာ သည့် semantic ဂရပ်ဖွဲ့စည်းသည်စည်းမျဉ်းစည်းကမ်းတွေနှင့်ဤဖွဲ့စည်းတည်ဆောက်မှုပုံစံသစ်ပင်၏တွဲဖက်အစိတ်အပိုင်း (ခွင့်ပြုရည်ညွှန်းအမည်များကိုသွယ်ဝိုက်အမျိုးအစားစကားဝိုင်းအတွက်စစ်ဆင်ရေးထည့်, ဒါကြောင့်ပေါ်မှာ။ ဃ) ၏ခွင့်ပြုချက်ကိုစစ်ဆေး။
သိသာထင်ရှားတဲ့ကွဲပြားခြားနားကွဲပြားခြားနားသောဘာသာစကားများဖြင့်စည်းမျဉ်းများခွင့်ခြိနျး။ သင်မှာ Java-တူသောဘာသာစကားများကို compile လြှငျ, compiler နဲ့တွေ့ပါစေခြင်းငှါ:
- ယင်း၏အတိုင်းအတာအတွင်းမျိုးစုံ variable ကိုကြေငြာ;
- ၎င်း၏ကြေညာချက်မတိုင်မီတစ် variable ကိုတစ်ဦးကိုကိုးကား;
- အဆိုပါ undeclared ၏နာမတော်ကိုမှကိုးကား;
- မူပိုင်ခွင့်အခွင့်အရေးချိုးဖောက်မှု,
- တစ်ဦး method ကိုဖုန်းခေါ်ဆိုမှုအတွက်ငြင်းခုံ၏အလွန်အကျွံသို့မဟုတ်မလုံလောက်သောအရေအတွက်က;
- အမျိုးအစားမတိုက်ဆိုင်။
မျိုးဆက်
အလယ်အလတ်ကုဒ်မျိုးဆက်အခြေခံလုပ်ကွက်သို့အုပ်စုဖွဲ့ tuples ၏ရေးစပ်စီးဆင်းမှုဂရပ်, ထုတ်လုပ်ပေးသည်။
ကုဒ်မျိုးဆက်တစ်ဦးကိုမှန်ကန် machine code ကိုထုတ်လုပ်ပေးသည်။ ပထမဦးဆုံးခြေလှမ်းအပေါ် RISC-စက်တွေများအတွက်ရိုးရာ compiler နဲ့, သင်က virtual မှတ်ပုံတင်တစ်ခုအဆုံးမဲ့အရေအတွက်ကိုနဲ့စည်းဝေးဖန်တီးပါ။ CISC-စက်တွေများအတွက်ဖြစ်ကောင်းဖြစ်ပျက်လိမ့်မည်မဟုတ်ပါ။
Similar articles
Trending Now