আপনার প্রশ্নের উত্তরের সর্বোত্তম বইটি সম্ভবত: কুপার এবং টর্কসন, "ইঞ্জিনিয়ারিং একটি সংকলক," 2003. আপনার যদি বিশ্ববিদ্যালয়ের লাইব্রেরিতে অ্যাক্সেস থাকে তবে আপনার একটি অনুলিপি ধার নিতে সক্ষম হওয়া উচিত।
এলএলভিএম বা জিসিসির মতো প্রোডাকশন সংকলনে ডিজাইনাররা সমস্ত অ্যালগোরিদমগুলিকে নীচে রাখার জন্য সর্বাত্মক প্রচেষ্টা করেন যেখানে আকার। "অপ্টিমাইজেশন" পর্যায়ে কিছু বিশ্লেষণের জন্য এর অর্থ হ'ল সত্যিকারের অনুকূল কোড তৈরি করার পরিবর্তে আপনাকে হিউরিস্টিক ব্যবহার করা দরকার।এনO(n2)n
লেক্সার একটি সসীম স্টেট মেশিন, সুতরাং ইনপুট (আকারে এর আকারে এবং পার্সারে পৌঁছে যাওয়া টোকেনগুলির একটি প্রবাহ তৈরি করে ।ও ( এন )O(n)O(n)
অনেক ভাষার জন্য বহু সংকলকগুলির জন্য পার্সার হল LALR (1) এবং এভাবে ইনপুট টোকেনের সংখ্যায় সময়ে টোকেন স্ট্রিমটি প্রক্রিয়া করে । পার্সিংয়ের সময় আপনাকে সাধারণত একটি চিহ্ন টেবিলের উপর নজর রাখতে হয়, তবে, অনেক ভাষার ক্ষেত্রে, এটি হ্যাশ টেবিলের স্ট্যাক ("অভিধান") দিয়ে পরিচালনা করা যায়। প্রতিটি অভিধানের অ্যাক্সেস , তবে আপনাকে মাঝে মধ্যে একটি চিহ্ন সন্ধান করতে স্ট্যাকটি হাঁটা করতে হতে পারে। স্ট্যাকের গভীরতা যেখানে সুযোগ এর পাখির গভীরতা। (সুতরাং সি-এর মতো ভাষাগুলিতে আপনার ভিতরে কোঁকড়ানো ধনুর্বন্ধনীগুলির কতগুলি স্তর রয়েছে))ও ( 1 ) ও ( গুলি ) এসO(n)O(1)O(s)s
তারপরে পার্স গাছটি একটি নিয়ন্ত্রণ প্রবাহের গ্রাফে সাধারণত "সমতল" হয়। নিয়ন্ত্রণ ফ্লো গ্রাফের নোডগুলি 3-ঠিকানা নির্দেশাবলী (কোনও RISC সমাবেশ ভাষার অনুরূপ) হতে পারে এবং নিয়ন্ত্রণ প্রবাহ গ্রাফের আকার সাধারণত পার্স গাছের আকারে লিনিয়ার হতে পারে।
তারপরে ধারাবাহিকভাবে অপ্রয়োজনীয় নির্মূলকরণ পদক্ষেপগুলি প্রয়োগ করা হয় (প্রচলিত স্যুবপ্রেসেশন নির্মূলকরণ, লুপ ইনগ্রেন্ট কোড গতি, ধ্রুবক প্রচার, ...)। (এটি প্রায়শই "অপ্টিমাইজেশন" নামে অভিহিত হয় যদিও ফলাফল সম্পর্কে খুব কমই অনুকূল কিছু পাওয়া যায়, আসল লক্ষ্য হ'ল সংকলকটিতে আমরা যে সময় এবং স্থানের সীমাবদ্ধতা রেখেছি তার মধ্যে যতটা সম্ভব কোডের উন্নতি করা)) প্রতিটি অপ্রয়োজনীয় নির্মূলকরণ পদক্ষেপটি হবে সাধারণত নিয়ন্ত্রণ প্রবাহ গ্রাফ সম্পর্কে কিছু তথ্যের প্রমাণ প্রয়োজন। এই প্রমাণগুলি সাধারণত ডেটা প্রবাহ বিশ্লেষণ ব্যবহার করে করা হয় । বেশিরভাগ ডেটা-প্রবাহ বিশ্লেষণগুলি এমনভাবে নকশাকৃত করা হয় যাতে তারা প্রবাহের গ্রাফের ওপারে ঘুরে বেড়াবে যেখানে (প্রায় কথা বলছে) লুপ নেস্টিংয়ের গভীরতা এবং প্রবাহের গ্রাফের উপর দিয়ে যাওয়ার জন্য সময় নেবেডি ও ( এন ) এনO(d)dO(n)যেখানে হল 3-ঠিকানা নির্দেশের সংখ্যা।n
আরও পরিশীলিত অপ্টিমাইজেশনের জন্য আপনি আরও পরিশীলিত বিশ্লেষণ করতে চাইতে পারেন। এই মুহুর্তে আপনি ট্রেড অফে দৌড় শুরু করেন। আপনি চান যে আপনার বিশ্লেষণ অ্যালগরিদমগুলি চেয়ে অনেক কম গ্রহণ করবেO(n2)পুরো প্রোগ্রামের প্রবাহের গ্রাফের আকারের সময়, তবে এর অর্থ আপনাকে কোনও তথ্য ছাড়াই (এবং প্রোগ্রামের উন্নতি রূপান্তরকরণ) করা দরকার যা প্রমাণ করতে ব্যয়বহুল। এর সর্বোত্তম উদাহরণ হ'ল ওরফে বিশ্লেষণ, যেখানে কিছু জোড়া মেমরি লেখার জন্য আপনি প্রমাণ করতে চাইবেন যে দুজন লেখক কখনই একই মেমরির অবস্থানকে লক্ষ্য করতে পারে না। (আপনি যদি একটি নির্দেশকে অন্যের উপরের দিকে চালিত করতে পারেন তবে এটির জন্য আপনি একটি উপাধ বিশ্লেষণ করতে চাইতে পারেন But) তবে এলিয়াস সম্পর্কে সঠিক তথ্য পাওয়ার জন্য আপনাকে প্রোগ্রামের মাধ্যমে প্রতিটি সম্ভাব্য নিয়ন্ত্রণের পাথ বিশ্লেষণ করতে হতে পারে, যা শাখাগুলির সংখ্যায় তাত্পর্যপূর্ণ is প্রোগ্রামে (এবং এইভাবে নিয়ন্ত্রণ প্রবাহ গ্রাফের নোডের সংখ্যায় তাত্পর্যপূর্ণ))
পরবর্তী আপনি নিবন্ধকরণ বরাদ্দ পেতে। রেজিস্টার বরাদ্দকে গ্রাফ-বর্ণের সমস্যা হিসাবে চিহ্নিত করা যায় এবং ন্যূনতম সংখ্যক রঙের সাথে একটি গ্রাফের রঙিন করা এনপি-হার্ড হিসাবে পরিচিত। সুতরাং বেশিরভাগ সংকলক যুক্তিসঙ্গত সময়সীমার মধ্যে যতটা সম্ভব রেজিস্টার স্পিলের সংখ্যা হ্রাস করার লক্ষ্যে রেজিস্টার স্পিলিংয়ের সাথে একত্রে লোভী হিউরিস্টিক ব্যবহার করে।
শেষ পর্যন্ত আপনি কোড জেনারেশনে প্রবেশ করুন। কোড জেনারেশন সাধারণত এমন সময়ে সর্বাধিক বেসিক-ব্লক করা হয় যেখানে একটি মৌলিক ব্লক একক প্রবেশ এবং একক প্রস্থান সহ লিনিয়ারালি সংযুক্ত নিয়ন্ত্রণ ফ্লো গ্রাফ নোডগুলির সেট। এটি গ্রাফের আচ্ছাদন সমস্যা হিসাবে সংশোধন করা যেতে পারে যেখানে আপনি যে গ্রাফটি কভার করার চেষ্টা করছেন সেটি হ'ল বেসিক ব্লকের 3-ঠিকানা নির্দেশের সেটের নির্ভরতা গ্রাফ এবং আপনি উপলব্ধ মেশিনের প্রতিনিধিত্বকারী গ্রাফের একটি সেট দিয়ে কভার করার চেষ্টা করছেন নির্দেশাবলী। বৃহত্তম বেসিক ব্লকের আকারে এই সমস্যাটি ক্ষণস্থায়ী (যা নীতিগতভাবে পুরো প্রোগ্রামের আকার হিসাবে একই ক্রম হতে পারে), তাই এটি আবার সাধারণত হিউরিস্টিক্স দিয়ে সম্পন্ন হয় যেখানে সম্ভাব্য আচ্ছাদনগুলির কেবলমাত্র একটি ছোট উপসাগর হয় পরীক্ষা।