ڪمپيوٽرن, پروگرامن
نشرياتي - آهي ... مرتب قسمن. بدلائڻ ۽ نشر پروگرامن
پروگرام، گڏو گڏ ماڻهن هڪ زبان کان ٻي کي ترجمو ڪري هڪ مترجم يا مترجم جي ضرورت آهي.
بنيادي نظريا
هن پروگرام جي حساب جي هڪ لساني نمائندگي آهي: آء → منصوبابندي → منصوبابندي (مون کي). هڪ مترجم هڪ پروگرام جنهن جو پٽ پروگرام منصوبابندي ۽ ڪجهه ايوانن x کي فراهم ڪندو آهي. اها ڳالهه تي منصوبابندي x سرانجام ڏيندو: مون کي (ص x) = منصوبابندي (x). جڏهن ته حقيقت اها آهي ته نه آهي صرف هڪ مترجم سڀ ممڪن پروگرام (جنهن کي رسمي نظام ۾ ظاھر ڪري سگهجي ٿو) سرانجام جي قابل آهي هڪ تمام جوڙيو ۽ اهم دريافت Turing آهي.
هن پروسيسر مشين زبان ۾ پروگرام جي هڪ مترجم آهي. عام طور تي ڏاڍو مهانگو اعلي سطحي ٻولين لاء interpreters لکڻ، پوء اھي هڪ صورت جو تعبير ڪرڻ آسان آهي ۾ ترجمو.
ترجمو مان ڪجهه ئي قسمن جي تمام عجيب نالا آهن:
- هن assembler مشين ٻوليء ۾ اسيمبلي جي ٻولي پروگرامن translates.
- هن compiler هڪ هيٺين ٻوليء لاء هڪ اعلي سطحي ٻولي translates.
منصوبابندي → ايڪس → ق ته آهي، ∀x: - نشرياتي هڪ پروگرام آهي ته پٽ جي انگن اکرن جي طور تي ڪجهه ٻولي آيس ۾ پروگرام ڪري وٺندو ۽ اهڙي طرح اهي ٻئي هڪ ئي semantics آهي ته ۾ ٽي پروگرام ڄمائيندي آھي. منصوبابندي (x) = ق (x).
جيڪڏهن ڪجهه interpretable ۾ پوري پروگرام نشر، ان execution، يا AOT جوڙڻ کان اڳ هڪ جوڙڻ سڏيو ويندو آهي. AOT compiler، سيريز ۾ استعمال ڪري سگهجي ٿو مثال طور، جنهنڪري جنهن جي اڪثر جي assembler آهي:
جياپي جو ذريعو compiler → (مترجم) → → اسيمبلي ڪوڊ assembler (compiler) → → يو مشين ڪوڊ (مترجم).
عملي يا متحرڪ جوڙڻ جي وٺندي آهي ته پروگرام، نشر آهي جڏهن ٻين عربن مرتب ڪيل حصو جي بيان ڪيو. جي آء ٽي-مرتب ياد ڪريو جيڪي اڳ ۾ ئي جياپي جو ذريعو وري ۽ وري ورجائي کي نه ته جيئن ڪيو. اهي به پروگرام execution ماحول جي رويي جي بنياد تي adaptive جوڙڻ ۽ recompilation پيدا ڪري سگهي ٿو.
ڪيتريون ئي ٻوليون گڏ وقت ڪوڊ execute ۽ رن ۾ نئين ڪوڊ کي گڏ ڪرڻ جي اجازت ڏني.
ترجمو اسٽيج
نشر تجزيو ڪرڻ ۽ synthesizing جي قدم هئا:
جياپي جو ذريعو تحليل → → → conceptual نمائندگي Generator کي (synthesizer) → ٽارگيٽ ڪوڊ.
هيء انهن سببن جي ڪري آهي:
- ڪنهن ٻئي جو طريقو مناسب نه آهي. لفظ ترجمي رڳو ڪم نه ايندي.
- سٺو انجنيئرنگ حل: جيڪڏهن توهان ايم ۽ ن ذريعو ٻولين لاء ترجمو لکڻ چاهيو ٽارگيٽ بدران م × ن پيچيده (ترجمو جي مجموعي) جي ڀيٽ ۾ صرف م + ا سادو پروگرام (polukompilyatorov) لکڻ جي ضرورت آهي.
تنهن هوندي به، عملي طور، هڪ تمام seldom ڪافي expressive ۽ ڪافي طاقتور هر سمجهڻ ذريعو ۽ ٽارگيٽ ٻولين ڪپڙا جي هڪ conceptual ڏسڻ ۾. جڏهن ته ڪي هن کي ويجهو اچي سگهندا هئا.
جائداد جي مرتب ڪيترن ئي مرحلن ذريعي نڪري. جڏهن توهان پنهنجي compiler ٺاهڻ سڀني جي محنت آهي ته ماڻهن کي شڪايت ۽ مولد پيدا ڪرڻ لاء ڪم ڪيو آهي ورجائي ڪرڻ جي ضرورت نه رکندو آھي. توهان JavaScript يا سي ۾ سڌو سنئون پنهنجي ٻولي ۾ ترجمو ۽ موجود JavaScript-انجڻ ۽ سي compiler جو فائدو وٺي باقي ڪندا ڪري سگهو ٿا. تون به موجود بيوت نمائندگي ۽ استعمال ڪري سگهو ٿا مجازي مشينن.
رڪارڊ مترجم
جو ذريعو، مقام ۽ بنيادي: - نشرياتي هڪ پروگرام يا هارڊويئر، جنهن کي ٽن ٻولين ۾ ملوث آهي. اهي، هڪ ٽي شڪل ۾ لکيل سگهي ٿو ڪري سگهجي، اصل کاٻي ه حق ۽ هيٺ بنيادي ٽارگيٽ.
نه مرتب جي ٽي قسم آهن:
- نشرياتي - ته ان جو بنيادي ذريعو ٻولي ڪري سگهي samokompilyator آهي.
- Compiler جنهن ٻولي ٽارگيٽ جي بيس، samorezidentnym سڏيو ويندو آهي.
- نشرياتي - هڪ صليب-compiler، هن چيو ته ٽارگيٽ ۽ بنيادي مختلف ٻولين جيڪڏھن.
ڇو هن اهم آهي؟
توهان هڪ حقيقي compiler، ان جي پيدائش جي ٽيڪنالاجي جي هڪ سٺي خبر ڪڏهن به نه ڪر ته به، ڇاڪاڻ ته هن مقصد لاء استعمال جو تصور، وڏي پيماني تي استعمال ڪري رهيا آهن مثال طور:
- formatting متن؛
- ٻوليء جي سوال بنيادي دستاويز کي؛
- ترقي يافته ڪمپيوٽر جي تعمير؛
- generalized اصلاح مسئلا؛
- GUIs؛
- scripting ٻولين؛
- controllers؛
- مجازي مشينن؛
- مشين جي ترجمي.
ان کان سواء، جيڪڏهن توهان preprocessors، linkers، loaders، debuggers ۽ profilers لکڻ چاهيو ٿا، توهان جڏهن هڪ compiler لکڻ جي طور تي هڪ ئي قدمن جي ذريعي وڃڻ ضروري آهي.
تون به معلوم ٿئي ٿو ته ڪيئن بهتر پروگرام لکڻ، ٻولي لاء مترجم جي خلق کي ان جي تجربن ۽ مونجهارن کان افضل سمجهڻ جو مطلب وٺي. براڊڪاسٽنگ جي عام اصولن جي مطالعي به توهان هڪ سٺو ڪاريگر ٻوليء هئڻ جي اجازت ڏئي ٿو. پوء ان کي ڪوئي ڪم ڪندو ڪيئن لڪ جي ٻولي ته ان انداز ۾ عمل نه ٿو ڪري سگهجي؟
جامع ٽيڪنالاجي
compiler ٽيڪنالاجي ڪمپيوٽر سائنس جي ڪيترن ئي مختلف علائقن ۾ پکڙيل آهي:
- ٻوليء جي رواجي نظريو: گرامر، تصريف، computability؛
- ڪمپيوٽر جي تعمير: عبرت بيان، RISC يا CISC، درجي بنيادي گھڙي cycles وغيره pipelined،؛.
- پروگرامن ٻولين جا نظريا، مثال طور، conditional execution، iteration، recursion، فعلي decomposition، modularity، synchronization، ميٽا-پروگرامن هڪ تسلسل ڪنٽرول سرانجام ڏئي، گنجائش، مسلسل ذيلي نگارن، ٽيمپليٽ، اوٽ قسم، prototypes، annotations، وهڪري، monads، mailboxes، جاري ، wildcards، باقاعده اظهار، transactional هوندي آهي، وارث، polymorphism، صورت جوڙ، ۽ پوء تي وغيره.
- تجريدي ٻولين ۽ مجازي مشينن؛
- algorithms ۽ ڊيٽا جوڙجڪ: باقاعده اظهار، تصريف algorithms، چٽ algorithms، متحرڪ پروگرامن، تربيت؛
- پروگرامن ٻولين: نحو، semantics (جامد ۽ متحرڪ)، حمايت paradigms (بنيادي ڍانچي، OOP، فنڪشنل، منطقي، هڪٻئي جي مٿان رکڻ، parallelism، ميٽا-پروگرامن)؛
- موڪلڻ جو سافٽ ويئر (مرتب، اڪثر ڪري وڏي ۽ ڳتيل): localization، caching، componentize، API-interfaces، ٻيهر استعمال، synchronization.
compiler جوڙجڪ
سنڌ جي حقيقي مترجم جي ترقي ۾ پيو آھي مشڪلاتن جي ڪجهه:
- جو ذريعو زبان سان مسئلا. اهو ان گڏ ڪرڻ آسان آهي؟ اتي هڪ preprocessor آھي ڇا؟ ڪيئن قسمن آهن؟ اتي هڪ لائبريري آهي؟
- Grouping compiler گذري ٿو: واحد يا گھڻ-واٽ؟
- اصلاح جي ڊگري جو ارادو ڪيو. ٿورو يا ڪو اصلاح سان روزو ۽ پليت نشر پروگرام عام ڪري سگهجي ٿو. تي-اصلاح compiler سست ڪندو، پر رن ٽائيم تي ڀلي ڪوڊ ان قابل ٿي سگھي ٿي.
- غلطي نظربند جي ضرورت وڏا. هڪ مترجم صرف پهرين گمراھيء ۾ بند ڪري سگهو ٿا؟ ۽ جڏھن ان کي بند ڪرڻ گهرجي؟ جي compiler غلطي جي اصلاح سان اعتماد نه ڪري ته ڇا؟
- اوزارن جي دستيابي. اصل ٻوليء جي تمام ننڍي نه آهي ته، سنڌ جي scanner ۽ Generator کي analyzers جي ضرورت هوندي آهي. نه به مولد، ڪوڊ مولد آهن، پر اهي پوء عام نه آهن.
- ٽارگيٽ ڪوڊ جي قسم جي ٺاهيل وڃي. خالص گڏ يا مجازي مشين ڪوڊ مان چونڊ ڪري سگهجي. يا صرف هڪ ۾ داخل ٿيڻ نصيب آهي ته اهڙي LLVM، RTL، يا JVM جيئن هڪ مشهور عالم برزخ نمائندگي پيدا لکڻ. يا س يا JavaScript ۾ جياپي جو ذريعو ۾ اصل جي ترجمي ڪرڻ.
- ٽارگيٽ ڪوڊ جي فارميٽ. اوھان کي چونڊي سگهن ٿا هڪ سنڌ اسيمبلي جي ٻولي، هڪ ايبل مشين ڪوڊ، مشين ڪوڊ هوندي تصوير.
- Retargeting. جڏهن مولد جي مقرر ڪيل هڪ عام گزر ٽڪرا ڪري سٺو آهي. هن سبب جي لاء ان کي ڪيترن ئي حصن جي ايوانن لاء هڪ جنتري ڪري ڀلو آھي.
compiler تعمير: جزا
اهي هڪ compiler ته ڏيهي ڪوڊ ٺاھي جي اهم فعلي حصن ۾ (ته جي اوٽ پروگرام سي يا هڪ مجازي مشين ۾ هڪ پروگرام آهي، توهان پوء ڪيترن ئي مرحلن نه جي ضرورت آهي) آهن:
- هن ان پٽ پروگرام (جي وهڪري پيشانين) جي scanner (lexical تحليل)، جنهن کي ان جي پلٽ جي هڪ ندي ۾ converts ۾ کارائي آهي.
- Parser (parser) هڪ تجريدي نحو وڻ بڻائڻ.
- Semantic تحليل جي semantic معلومات decomposes ۽ غلطيون لاء وڻ کي جوڙيندڙ لوڌيو ويو. اضافي مال ۽ قائم جوڙي سان تجريدي نحو وڻ - جي نتيجي ۾، semantic گراف تعمير ڪرايو.
- بيوت ڪوڊ Generator کي هڪ وهڪري جو گراف (tuples مکيه پور ۾ ڏسبا) جيڪڏھن.
- مشين-آزاد ڪوڊ optimizer ٻنهي مقامي (جي بنيادي يونٽ جي اندر) ۽ (سڀ پور کي) عالمي اصلاح بنيادي routines اندر رهيل آهن. redundant ڪوڊ گھٽجي ۽ حساب simplifies. جنهن جي نتيجي ۾ هڪ تبديل وهڪري جو گراف آهي.
- Generator کي هڪ rectilinear سند ڪنٽرول ڪوڊ ۾ ٽارگيٽ ڪوڊ بنيادي پور binds، هڪ شئي فائيل assembler مجازي رجسٽر (ممڪن آهي ته ٿينديون) ٺاهڻ.
- مشين-منحصر optimizer، linker رجسٽر جي وچ ۾ هوندي آهي allocates ۽ ٽيمن جي منصوبابندي ڪندو آھي. اهو pipelining جو هڪ سٺو استعمال سان هن اسيمبلي ۾ اسيمبلي جي ٻوليء ۾ تبديل ڪرڻ جو پروگرام سرانجام ڏيندو.
ان کان سواء، غلطي نظربند ماتحت مينيجر ۽ علامت جدولن جو استعمال.
Lexical تجزيا (اسڪيننگ)
هن scanner، پلٽ جي هڪ ندي ۾ وهڪرو ذريعو ڪردارن converts whitespace، تاثرات ۽ ط macros وڃڻ.
Scanners اڪثر اهڙي ت يا نه جيئن مسئلا، ملڻ جي اڪائونٽ ۾ صورت، موقعا، ليڪ ڀڃي ۽ وڌوسون رايا وٺي.
نقص اسڪيننگ دوران نمودار ٿي سگھي ٿو ته، lexical سڏيو ۽ شامل آهن:
- ڪردارن ته رسم الخط ۾ نه آهن؛
- هڪ لفظ يا قطار ۾ انگ اکرن جي ڀؤ کان؛
- نه ڪو بند نشاني يا هڪ جملو لغوي؛
- تبصرو ۾ فائل جي آخر.
(تصريف) تصريف
هن parser هڪ تجريدي نحو وڻ ۾ پلٽ جي تسلسل converts. وڻ ۾ هر node جنهن جي ڪيترن ئي پاڻ جي وڻ کي جوڙيندڙ آهن رکيو شعبن، سان هڪ شئي جي طور تي محفوظ آهي. ھن مرحلي تي ڪو cycles آهن. جڏهن توهان هڪ parser پيدا گرامر جي پيچيدگي جي سطح (ويندس يا LR) کي سمجھندا ۽ ڪنهن به ضابطن ۾ disambiguation نه آهي ته ڇا ٻاهر سٽ ڪرڻ ضروري آهي. ڪجهه ٻولين semantic تجزيي جي ضرورت ڪندا.
هن مرحلي تي مليو غلطيون نحو سڏيندا آهن. مثال طور:
- ك = 5 * (7 - وائي؛
- ڦ = / 5؛
- 56 = x * 4.
semantic تجزيو
هن جي دور ۾ semantic تجزيي جي semantic گراف نظر ايندا لاء اصول ۽ ڪمپوز وڻ جي شريڪ حصن ۾ (رهڻ جي حوالي نالن implicit قسم conversions لاء آپريشن inserting، ۽ پوء تي. المتوفي) جي permissibility چيڪ ڪرڻ.
ڏٺل، مختلف ٻولين ۾ مختلف ۾ ضابطن جي admissibility جي سيٽ. توهان جي جاوا-وانگر ٻولين گڏ ته، مرتب ڏسي سگهو ٿا:
- ان جي دائري جي اندر گھڻن variable اعلان؛
- ان اعلان کان اڳ هڪ variable کي هڪ حوالو؛
- جي undeclared جي نالي کي حوالن؛
- روشن جي حقن جي خلاف ورزي؛
- هڪ طريقو سڏ ۾ دليلن جي ڌڙڪن يا پورين انگ؛
- قسم mismatch.
جڳ
بيوت ڪوڊ نسل tuples جو ٺهيل آهي وهڪري جو گراف، بنيادي پور ۾ مقتدر ٿا ٻاريو.
ڪوڊ نسل هڪ حقيقي مشين ڪوڊ ٿا ٻاريو. پهريون قدم تي RISC-مشينن لاء روايتي مرتب ۾، توهان کي مجازي رجسٽر جو هڪ لافاني نمبر سان هڪ assembler ٺاهي. CISC-مشينن لاء شايد ايڏو نه ٿيندو.
Similar articles
Trending Now