ကွန်ပျူတာများပရိုဂရမ်းမင်း

ထုတ်လွှင့် - သည် ... 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

 

 

 

 

Newest

Copyright © 2018 my.delachieve.com. Theme powered by WordPress.