কম্পাইলার নির্মাণের ইতিহাস

কম্পিউটিংবিদ্যায়, কম্পাইলার হচ্ছে একটি কম্পিউটার প্রোগ্রাম যা কোন একটা প্রোগ্রামিং ভাষায় লেখা উৎস কোডকে অন্য একটি প্রোগ্রামিং ভাষায় রূপান্তর করে। রূপান্তরিত কোডটি সাধারণত বাইনারি অবস্থায় থাকে, যাকে অবজেক্ট কোড বা যান্ত্রিক কোড বলা হয়। কোড কম্পাইলের গতানুগতিক উদ্দেশ্য হচ্ছে এক্সিকিউটেবল তথা চলনযোগ্য প্রোগ্রাম তৈরি করা।
উচ্চস্তরের প্রোগ্রামিং ভাষায় লেখা যেকোন প্রোগ্রাম ব্যবহারের আগে তাকে অবশ্যই অবজেক্ট কোডে রূপান্তর করতে হয়, তাই যে প্রোগ্রামাররা এধরনের প্রোগ্রামিং ভাষায় কাজ করেন তাদের জন্য একটি কম্পাইলার অথবা ইন্টারপ্রেটার অপরিহার্য। কম্পাইল প্রক্রিয়ায় উন্নতি হলে তা এক্সিকিউটেবল প্রোগ্রামের কার্যকারিতা বৃদ্ধি করতে পারে।
পিকিউসিসি এর মাধ্যমে ১৯৭০ দশকের শেষাংশে কম্পাইলার সংগঠনের মূলনীতিগুলোর পত্তন হয়েছিল, যা আজও বহুল ব্যবহৃত হয়ে আসছে (যেমন পদবিন্যাস ও যাচাইয়ের দায়িত্ব ফ্রন্ট-এন্ডে, এবং যান্ত্রিক কোড নির্মাণের দায়িত্ব ব্যাক-এন্ডে রাখা)।
প্রথম দিককার কম্পিউটার প্রোগ্রাম প্রধানত অ্যাসেম্বলি ভাষায় লেখা হত। তবে উচ্চস্তরের প্রোগ্রামিং ভাষা ব্যবহার করা প্রোগ্রামারদের জন্য অধিক কার্যকর, এবং এতে লেখা প্রোগ্রাম সহজে বিভিন্ন কম্পিউটারে পুনর্ব্যবহার করা সম্ভব। তথাপি, কম্পাইলারের সুপ্রচলন হতে কিছুকাল সময় লেগেছিল, কেননা শুরুদ দিকে এদের নির্মিত কোডের কর্মক্ষমতা হাতে লেখা যান্ত্রিক কোডের সমতুল্য ছিল না, কম্পাইলার তৈরির প্রক্রিয়াটি অত্যন্ত জটিল ছিল, এবং তৎকালীন কম্পিউটারসমূহের সংকীর্ণ তথ্যধারণক্ষমতা কম্পাইলার বাস্তবায়নে বিভিন্ন প্রযুক্তিগত বাধা সৃষ্টি করত।
সর্বপ্রথম তত্ত্বীয় কম্পাইলারটি লিখেছেন কোরাদো বহ্‌ম, ১৯৫১ সালে তাঁর পিএইচডি গবেষণার অংশ হিসেবে। প্রথম বাস্তবায়িত কম্পাইলারটির লেখিকা গ্রেস হপার, যিনি "কম্পাইলার" শব্দটিও উদ্ভাবন করেন, যদিও তিনি শব্দটি ব্যবহার করেছিলেন তাঁর এ-০ সিস্টেম বর্ণনা করার জন্য যা একটি লোডার বা লিংকার এর কাজ করত, এবং কম্পাইলারের আধুনিক ধারণার সমতুল্য ছিল না। জন ডব্লিউ ব্যাকাস এর অধীনস্থ আইবিএম এর ফোরট্রান শাখা ১৯৫৭ সালে সর্বপ্রথম বাণিজ্যিক কম্পাইলার অবমুক্ত করে।
১৯৫৮ এর শেষের দিকে ফ্রিডরিখ এল বাওয়ার, হারমান বটেনব্রাখ, হাইন্‌জ রুটিশহাউজার, এবং ক্লাউস সামেলসন এলগল ৫৮ প্রোগ্রামিং ভাষার প্রথম কম্পাইলারটি তৈরি করেন, যা জেড২২ কম্পিউটারে ব্যবহৃত হয়েছিল। এঁরা পূর্ববর্তী বছরগুলোতে "Sequentielle Formelübersetzung" ("আনুক্রমিক ফরমুলা অনুবাদ") প্রসঙ্গে কম্পাইলার প্রযুক্তি নিয়ে কাজ করছিলেন।
১৯৬০ এর আগেই অ্যালটাক (ALTAC) নামের একটি বিশদ ফোরট্রান কম্পাইলার ফিলকো ২০০০ এর জন্য উপলদ্ধ ছিল, তাই অনুমান করা যায় যে ১৯৬০ সালের মধ্যেই আইবিএম এবং ফিলকো উভয় আর্কিটেকচারের জন্য কম্পাইল করা ফোরট্রান প্রোগ্রাম প্রচলিত হয়ে গিয়েছিল। প্রথম ক্রস-প্লাটফর্ম উচ্চস্তরের প্রোগ্রামিং ভাষা কোবোল (COBOL) এ লেখা একটি প্রোগ্রাম ১৯৬০ সালের ডিসেম্বরে ইউনিভ্যাক ২ এবং আরসিএ ৫০১ উভয় আর্কিটেকচারের জন্য কম্পাইল ও এক্সিকিউট করা হয়।
অন্যান্য প্রোগ্রামের মতই কম্পাইলারও উচ্চস্তরের প্রোগ্রামিং ভাষায় লেখার সুবিধা রয়েছে। বিশেষত, এভাবে লেখা কম্পাইলার স্ব-আশ্রিত হতে পারে, অর্থাৎ কম্পাইলার যে ভাষাকে কম্পাইল করবে, নিজেও সে ভাষাতেই লিখিত হতে পারে। স্ব-আশ্রিত কম্পাইলার তৈরির প্রক্রিয়া বুটস্ট্র্য‍াপ সমস্যার একটি উদাহরণ, কারণ এক্ষেত্রে কম্পাইলারের প্রারম্ভিক সংস্করণটি প্রাসঙ্গিক প্রোগ্রামিং ভাষায় লেখা যায় না, যান্ত্রিক কোডে হাতে লিখে, অন্য কোন ভাষার কম্পাইলারে, অথবা ইন্টারপ্রেটারের সাহায্যে তৈরি করতে হয়।
কোরাদো বহ্‌ম তাঁর পিএইচডি গবেষণাপত্রে বর্ণিত যন্ত্রটির প্রোগ্রামিং ভাষা কম্পাইল করার জন্য একটি ভাষা, যন্ত্র, এবং অনুবাদ পদ্ধতির নকশা করেন। তিনি কেবল একটি পরিপূর্ণ কম্পাইলারের বর্ণনাই করেননি, উপরন্তু কম্পাইলারকে এর নিজস্ব ভাষায় সংজ্ঞায়িতও করেছেন। তাঁর আবিষ্কৃত ভাষার উল্লেখযোগ্য একটি বৈশিষ্ট্য ছিল, এর প্রতিটি প্রোগ্রামিং আদেশ বা স্টেটমেন্ট ছিল এসাইনমেন্ট স্টেটমেন্টেরই বিভিন্ন বিশেষায়িত রূপ।
মার্কিন ন্যাভাল ইলেক্ট্রনিক্স ল্যাবরেটরি (এনইএল) ১৯৫৮ নেভী ইলেক্ট্রনিক্স ল্যাবরেটরি ইন্টারন্য‍াশনাল এলগল কম্পাইলার বা নেলিয়াক (NELIAC) তৈরি করে, যা ছিল এলগল ৫৮ এর একটি উপভাষা এবং এর একটি স্ব-আশ্রিত কম্পাইলারের সমষ্টি।
নেলিয়াকের জনক ছিলেন স্বনামধন্য কম্পিউটারবিজ্ঞানী এব এসিএম এর তৎকালীন চেয়ারম্যান হ্যারি হাস্কি। এনইএল এর কম্পিউটেশন কেন্দ্রের পরিচালক মরি হ্যালস্টেড তাঁকে সমর্থন দেন। নেলিয়াকের প্রাথমিক বাস্তবায়ন হয় এনইএল এর ইউএসকিউ-১৭ প্রোটোটাইপ কম্পিউটারে (যা "দ্যা কাউন্টেস" নামেও পরিচিত ছিল)। এটিই ছিল সর্বপ্রথম স্ব-আশ্রিত কম্পাইলার - প্রথমে এসেম্বলি ভাষায় কম্পাইলারটির একটি সরল "বুটস্ট্র্যাপ" সংস্করণ লেখা হয়, এরপর পুনরায় সম্পূর্ণ কম্পাইলার কোড তার নিজস্ব ভাষায় লিখে পূর্বলিখিত বুটস্ট্র্যাপ সংস্করণটি দিয়ে কম্পাইল করা হয়, এবং এই ধাপে তৈরি পরিপূর্ণ কম্পাইলার দিয়ে সবশেষে আর একবার কম্পাইল করা হয়, ফলে বুটস্ট্র্যাপ সংষ্করণটির প্রয়োজন আর থাকে না।
শুরুর দিককার আর একটি স্ব-আশ্রিত কম্পাইলার লেখা হয় লিস্প ভাষায়। টিম হার্ট এবং মাইক লেভিন এমআইটিতে থাকাকালীন ১৯৬২ সালে কম্পাইলারটি তৈরি করেন। তাঁরা কম্পাইলারটির সোর্স কোড লিস্পে লিখে, তা একটি লিস্প ইন্টারপ্রেটারে চালিয়ে পরীক্ষা করতেন। যখন কম্পাইলারটি নিজের সোর্সকোড কম্পাইল করার সক্ষমতা অর্জন করে, তখন সেটি ওই ইন্টারপ্রেটারের ওপর নির্ভরশীলতা হারিয়ে স্ব-আশ্রিত কম্পাইলারে পরিণত হয়।
এই পদ্ধতি কেবল তখনই কার্যকর হয়, যখন যে ভাষার কম্পাইলার তৈরি করা হবে সে ভাষার একটি ইন্টারপ্রেটার তৈরি করা থাকে। এই পদ্ধতিটি কোন প্রোগ্রামের নিজেকেই নিজের ইনপুট হিসেবে ব্যবহার করার ধারণার অনুসারী, যা তাত্ত্বিক কম্পিউটার বিজ্ঞানের বিভিন্ন প্রমাণেও (যেমন হল্টিং সমস্যা) ব্যবহৃত হয়ে আসছে।
ফর্থ স্ব-আশ্রিত কম্পাইলারের একটি উদাহরণ। ফর্থের স্ব-আশ্রিত কম্পাইল ও ক্রস-কম্পাইল সুবিধাদি এবং মেটাকম্পাইলেশন ধারণার অন্তর্গত বলে মনে করা একটি সাধারণ বিভ্রান্তি। লিস্পের মত ফর্থও একটি সম্প্রসারণযোগ্য ভাষা। এই বৈশিষ্ট্য আছে বলে লিস্প এবং ফর্থের নিজের নতুন সংষ্করণ নির্মাণ করা এবং নতুন কম্পিউটিং পরিবেশে নিজেকে স্থানান্তর করার সক্ষমতা আছে।
পার্সার বা পর্যালোচক কম্পাইলারের একটি গুরুত্বপূর্ণ অংশ। এটি প্রোগ্রামের সোর্স কোড নীরিক্ষা করে তার একটি আভ্যন্তরীণ কাঠামো গঠন করে। প্রোগ্রামিং ভাষাসমূহকে সাধারণত কনটেক্সট-মুক্ত ব্যাকরণ দ্বারা সংজ্ঞায়িত করা হয়, কারণ এধরনের ব্য‍াকরণের জন্য দ্রুতগতির পার্সার তৈরি করা যায়। পার্সার সরাসরি হাতে লেখা যায় অথবা পার্সার নির্মানকারী প্রোগ্রাম দিয়েও তৈরি করা যায়। কনটেক্সট-মুক্ত ব্যাকরণ একটি সরল এবং নিখুঁত কৌশল সরবরাহ করে যার মাধ্যমে বর্ণনা করা যায় কীভাবে প্রোগ্রামিং ভাষার খন্ড বা ব্লকগুলো ক্ষুদ্রতর খন্ডাংশের সমন্বয়ে গঠিত হয়। এলগল প্রজেক্ট (১৯৫৭-১৯৬০) প্রোগ্রামিং ভাষার ব্লকভিত্তিক গঠনরীতি প্রবর্তন করে। কনটেক্সট-মুক্ত ব্যাকরণের সরল গঠনশৈলী কার্যকর পার্সার তৈরিতে সহায়ক ভূমিকা রাখে, যা সহজে নির্ধারণ করতে পারে যে কীভাবে ব্য‍াকরণ অনুসারে কোড গঠন করা যায়।
১৯৫০ এর মধ্যভাগে নোম চম্‌স্কি প্রতিবেশ-মুক্ত ব্যাকরণের আদর্শ রীতি অভিব্যক্ত করেন।
LR পার্সার (লেফ্ট-টু-রাইট পার্সার) উদ্ভাবিত হয় ১৯৬৫ সালে, ডোনাল্ড কানুথ এর একটি গবেষণাপত্রে, "বাম থেকে ডানে ভাষার অনুবাদ প্রসঙ্গে" ("On the Translation of Languages from Left to Right")। LR পার্সার ইনপুটকে বাম থেকে ডান বরাবর পাঠ করে, এবং একটি সর্বডানের নিষ্পত্তি (Rightmost derivation) গঠন করে। তাছাড়া LR("k") পার্সার শব্দটিও প্রচলিত, যেখানে "k", পার্সারে ইনপুটের অপঠিত প্রতীকের সংখ্যা নির্দেশ করে।
কানুথ প্রমাণ করেন যে LR("k") ব্যাকরণ পার্সারে পাঠ করতে প্রয়োজনীয় সময় মূলত ইনপুট প্রোগ্রামের দৈর্ঘ্যের সমানুপাতিক, এবং "k" > ১ শর্তপূর্বক প্রতিটি LR("k") ব্যাকরণকে একই ভাষার LR(১) ব্যাকরণে যান্ত্রিকভাবে রূপান্তর করা সম্ভব।
১৯৬৯ সালে কোরেনজাক সর্বপ্রথম দেখান যে এইসব কৌশল ব্যবহার করে প্রোগ্রামিং ভাষার পার্সার তৈরি করা যায়। একই বছরে ফ্র্যাঙ্ক ডিরেমার এমআইটিতে তাঁর পিএইচডি গবেষণাকালে অধিক কার্যকর সরল এলআর পার্সার এবং সম্মুখদর্শী বা Look-ahead এলএএলআর (LALR) পার্সারের নকশা প্রকাশ করেন। এটি একটি গুরুত্বপূর্ণ বিকাশ ছিল, কারণ কানুথের বর্ণিত LR(k) পার্সার তৎকালীন স্বল্পশক্তির কম্পিউটার সিস্টেমে বাস্তবায়নের যোগ্য ছিল না। অন্যান্য পার্সারের তুলনায় সুবিধা অসুবিধার বিবেচনায় কার্ষক্ষেত্রে LALR পার্সার দৃশ্যত অধিক উপযোগী বলে সোর্স কোডের গঠন নীরিক্ষা করার জন্য কম্পাইলারে LALR পার্সারই সাধারণত ব্যবহৃত হয়।
পুনারাবৃত্তিক আরোহণ কৌশলে পরস্পর-পুনারাবৃত্তিক ফাংশনের সাহায্যে দ্রুতগতির LALR পার্সার গঠন করা যায়। এভাবে গঠিত পার্সার প্রাসঙ্গিক ভাষায় "সরাসরি নিহিত" থাকে এবং এটি সারণী-নির্ভর পার্সারের চেয়ে উচ্চগতিসম্পন্ন এধরনের পার্সারে ইন্টারপ্রেটের তুলনায় কম্পাইলের গতি উচ্চ হয়। তাছাড়া এধরনের পার্সারের সোর্সকোডের বোধগম্যতাও বেশি হয়ে থাকে।
পুনারাবৃত্তিক আরোহণ কৌশলটি সর্বপ্রথম বর্ণিত হয়েছিল ১৯৮৬ সালে থমাস পেনেলোর লিখিত "অতি উচ্চগতির এলআর পার্সিং" প্রবন্ধে। পরবর্তীতে কৌশলটির আরও বিশদ ব্যাখ্যা আসে ১৯৮৮ সালে জি এইচ রবার্টসের কাছ থেকে, এবং ১৯৯২ সালে "তত্ত্বীয় কম্পিউটার বিজ্ঞান" পত্রিকায় লীরমেকার্স, অগাস্টিন, ক্রুজমান আরেৎজ এর একটি প্রবন্ধে।
LL পার্সার (লেফ্ট-টু-রাইট, লেফ্টমোস্ট ডেরাইভেশন পার্সার) ইনপুটকে বাম থেকে ডান বরাবর পাঠ করে, এবং একটি সর্ববামের নিষ্পত্তি (Leftmost derivation) গঠন করে। এধরনের পার্সারে পাঠযোগ্য ব্যাকরণকে "LL ব্যাকরণ" বলা হয়। LR ব্যাকরণের তুলনায় সংকীর্ণ হলেও কম্পাইলার লেখকদের কাছে এই ব্যাকরণ আকর্ষণীয়, কারণ এর পার্সারের কর্মক্ষমতা বেশি এবং তা তৈরি করাও খুব সহজ।
LL(k) ব্যাকরণের ভাষা পুনারাবৃত্তিক অবরোহণ কৌশলে পার্স করা যায়। এরকম পার্সার সাধারণত হাতে লেখা যায়, অথবা মেটা ২ (META II) প্রতীকব্যবস্থা দ্বারা লেখা যায়।
এলগল ভাষার নকশা থেকে পুনরাবৃত্তিক অবরোহণ কৌশলে আগ্রহ সৃষ্টি হয়, কেননা এলগল ভাষাটি নিজেই পুনরাবৃত্তিক ছিল। এসিএমের প্রকাশিত "কমিউনেকেশনস অফ দ্যা এসিএম" পত্রিকার জানুয়ারি ১৯৬১ সংখ্যায় এ এ গ্রাউ এবং এডগার টি আয়রনস এর লিখিত ভিন্ন দুটি পত্রে পুনরাবৃত্তিক অবরোহণ পার্সারের ধারণাটি আলোচিত হয়। ১৯৬১ সালের মার্চে, রিচার্ড ওয়েইশফ এবং তাঁর সহকর্মীরা বারোজ এলগল কম্পাইলারে পুনরাবৃত্তিক অবরোহণ বাস্তবায়ন করেন এ দুই পক্ষ ভিন্ন ভিন্ন পথে অগ্রসর হলেও তাঁদের মধ্যে অনানুষ্ঠানিক যোগাযোগ ছিল।
লুইস এবং স্টেয়ার্নস (১৯৬৮) LL(১) ব্যাকরণের ধারণা প্রকাশ করেন।
নিকলাউস ভির্ট পুনরাবৃত্তিক অবরোহণ কৌশলটিকে জনপ্রিয় করে তোলেন, তাঁর শিক্ষামূলক প্রো্গ্রামিং ভাষা পিএল/০ এর মাধ্যমে। ১৯৭০ সালে উদ্ভাবিত এই ভাষাটির উদ্দেশ্য ছিল কম্পাইলার নির্মাণের প্রশিক্ষণ প্রদান করা।
তবে LL পার্সারের তুলনায় LR পার্সারের পাঠযোগ্য ভাষার ব্যাপ্তি বেশি। তাছাড়া LR পার্সার এরর বার্তা প্রদানেও বেশি সক্ষম।
১৯৭০ সালে জে আর্লি উদ্ভাবন করেন আর্লি পার্সার। আর্লি পার্সারের সুবিধা হচ্ছে কনটেক্সট-মুক্ত ব্যাকরণ পার্স করার গ্রহণযোগ্য দক্ষতা।
জন ব্যাকাস ১৯৫৮ সালে এলগল ৫৮ (যা সেসময় আইএএল নামে পরিচিত ছিল) এর গঠনবিন্যাস বা সিনট্যাক্স বর্ণনা করার জন্য "মেটা-ভাষাগত ফর্মুলা" ধারণাটির প্রস্তাব উত্থাপন করেন।। প্রস্তাবটি এমিল পোস্টের পোস্ট ক্যাননিকাল পদ্ধতি ভিত্তিক ছিল।
এলগলের আরও উন্নতি সাধনের পর এলগল ৬০ ভাষাটি উৎপন্ন হয়। এর প্রতিবেদনে পিটার নর ব্যাকাসের সংকেতলিপিকে ব্যবহৃত সংকেতের সংখ্যা হ্রাস করেন এবং একে ব্যাকাস নরমাল ফর্ম (বিএনএফ) নাম প্রদান করেন। তবে ডোনাল্ড কানুথ মতে এই পদ্ধতিকে ব্যাকাস-নর ফর্ম নাম দেয়া যুক্তিযুক্ত, এবং এটিই জনস্বীকৃত নাম হিসেবে প্রচলিত হয়েছে।
নিকলাউস ভির্ট সম্প্রসারিত ব্যাকাস-নর ফর্ম (ইবিএনএফ) বর্ণনা করেন, তাঁর পিএল/০ ভাষার জন্য। এছাড়া বিএনএফ এর আরেকটি প্রচলিত রূপ হচ্ছে বর্ধিত ব্যাকাস-নর ফর্ম (এবিএনএফ)। ইবিএনএফ এবং এবিএনএফ উভয় প্রকারভেদই প্রোগ্রামিং ভাষার ব্যাকরণ, পার্সার নির্মাণকারীর ইনপুট, এবং সফটওয়্যারভিত্তিক বিভিন্ন যোগাযোগ পদ্ধতির বর্ণনায় নিয়মিত ব্যবহৃত হয়।
একটি পার্সার জেনারেটর বা পার্সার নির্মাণকারী প্রোগ্রাম কম্পাইলারের অভিধান বিশ্লেষক অংশটি তৈরি করে। এটি ভাষার ব্যাকরণের আনুষ্ঠানিক বর্ণনা পাঠ করে ভাষাটির পার্সার তৈরি করে। পার্সারটি সোর্স কোড পাঠ করে প্রাসঙ্গিক ভাষার সংরক্ষিত শব্দ এবং সংকেতসমূহ চিহ্নিত করে এবং সেগুলিকে পদ তালিকা (টোকেন) হিসাবে কম্পাইলারের পরবর্তী অংশে প্রেরণ করে। এই পদতালিকা থেকে কোডের গঠনসিদ্ধতা নির্ণয়পূর্বক অবজেক্ট কোডে রূপান্তর করা হয়। কম্পাইলারের এই দ্বিতীয় অংশটি একটি "কম্পাইলার-কম্পাইলার" দ্বারা তৈরি করা যায়।
"কম্পাইলার-কম্পাইলার" নামধারী প্রথম প্রোগ্রামটি তৈরি করেছিলেন টনি ব্রুকার, ১৯৬০ সালে। এটি ম্যানচেস্টার বিশ্ববিদ্যালয়ের অ্যাটলাস কম্পিউটারের কম্পাইলার তৈরির জন্য লিখিত হয়েছিল। অবশ্য এর সাথে আধুনিক কম্পাইলার-কম্পাইলার প্রোগ্রামসমূহের অনেক ভিন্নতা পাওয়া যায়, এবং একে বর্তমানপের সাপেক্ষে একটি বিশেষায়িত সাধারণ কম্পাইলার এবং সম্প্রসারণযোগ্য প্রোগ্রামিং ভাষার মধ্যবর্তী রূপ হিসেবে চিহ্নিত করাই সঠিকতর হবে। তথাপি 'কম্পাইলার-কম্পাইলার' শব্দটি এই নামের আধুনিক প্রোগ্রামগুলোর চেয়ে ব্রুকারের সিস্টেমটির জন্যই অদিকতর উপযুক্ত, এবং আধুনিক কম্পাইলার-কম্পাইলারসমূহ বরং পার্সার নির্মাণকারী প্রোগ্রামেরই নিকটবর্তী। ধারণা করা হয় "কম্পাইলার-কম্পাইলার" শব্দটি ইয়াক (Yacc) প্রোগ্রামে প্রয়োগের মধ্য দিয়ে প্রচলিত হয়েছে, ব্রুকারের কাজের মাধ্যমে নয়।
১৯৬০ দশকের শুরুতে টেক্সাস ইনস্ট্রুমেন্টস এর রবার্ট ম্যাক্‌লুর টিএমজি নামের কম্পাইলার-কম্পাইলার উদ্ভাবন করেন ("TMG", নামটি "transmogrification" শব্দ থেকে প্রাপ্ত), যা পরবর্তীতে আইবিএমের বিভিন্ন মেইনফ্রেম কম্পিউটারে স্থানান্তরিত তথা পোর্ট করা হয়।
এমআইটি এবং বেল ল্যাবস এর যোথ উদ্যোগ মালটিক্‌স প্রকল্পে উচ্চস্তরের প্রোগ্রামিং ভাষায় লেখা অন্যতম একটি প্রাথমিক অপারেটিং সিস্টেম উদ্ভাবিত হয়। এর ভাষা হিসেবে পিএল/আই বাছাই করা হয়েছিল, কিন্তু কোন বাহ্যিক পরিবেশক এর জন্য কোন কম্পাইলার সরবরাহ করতে সক্ষম হয়নি। ফলস্বরুপ, মালটিক্‌স প্রকল্পের কর্মীরা নিজেদের কাজের উপযোগী করে পিএল/আইয়ের একটি উপভাষা আর্লি পিএলআই (ইপিএল) নকশা করেন, এবং নিজেদের জিইটি-৬০০ সিরিজ কম্পিউটারে পোর্ট করা টিএমজি কম্পাইলার ব্যবহার করে ডগলাস ম্যাক্‌ইলরয়, রবার্ট মরিস প্রমুখ ভাষাটি কম্পাইল করেন।
১৯৬৯ সালে কেন টম্পসন পিডিপি-৭ এর জন্য ইউনিক্স এর প্রথম সংস্করণ লেখেন, এবং এর কিছুকাল পরেই ডগলাস ম্যাক্‌ইলরয় তাঁর নিজস্ব টিএমজি সংস্করণ দিয়ে এই ওএসের জন্য প্রথম উচ্চস্তরের ভাষা তৈরি করেন পরবর্তীতে ১৯৭০ সালে টিএমজির সাহায্যেই কেন টম্পসন বি ভাষার কম্পাইলার তৈরি করেন। বি এর সরাসরি বংশধর হল সি প্রোগ্রামিং ভাষা।
এছাড়া ফ্র্যাঙ্ক ডিরেমার এবং টম পেনেলো টিডব্লিউএস নামে একটি LALR পার্সার নির্মাণকারী প্রোগ্রাম লিখেছিলেন।
এক্সপিএল পিএল/আই এর একটি উপভাষা, যা কম্পাইলার নির্মাণে ব্যবহৃত হয়। ১৯৬৭ সালে স্ট্যানফোর্ড বিশ্ববিদ্যালয় ও ক্যালিফোর্নিয়া বিশ্ববিদ্যালয়ের উইলিয়াম এম ম্যাক্‌কীম্যান, জেমস জে হর্নিং, এবং ডেভিড বি ভর্টমানের অধীনস্থ একটি দল এক্সপিএল ভাষা উদ্ভাবন করে। ১৯৬৮ সালে স্যান ফ্রানসিসকোতে অনুষ্ঠিত ফল জয়েন্ট কম্পিউটার সম্মেলনে এটি প্রথম প্রকাশ করা হয়।
এক্সপিএলে অ্যানালাইজার (ANALYZER) নামক একটি তুলনামূলকভাবে সরল অনুবাদক লেখনী পদ্ধতি উপস্থিত ছিল, যা মিশ্রিত কৌশল পূর্বগামীতা নামক একটি শিফ্ট-রিডিউস পার্সারের ভিত্তিতে গঠিত। বারোজ এলগলের সাহায্যে আইবিএম সিস্টেম/৩৬০ কম্পিউটারে এক্সপিএল এর বুটস্ট্র্যাপ তৈরি করা হয়েছিল। এক্সপিএলের কিছু সংষ্করণে একটি সরল এলআর(১) পার্সার ব্যবহৃত হয়েছিল, তবে ওই সংষ্করণগুলো উন্মুক্ত করা হয়নি।
ইয়াক একটি পার্সার নির্মাণকারী বা কম্পাইলার-কম্পাইলার প্রোগ্রাম। এটিঅ্যান্ডটিতে কর্মরত স্টিভেন সি জনসন ইউনিক্সের জন্য ইয়াক তৈরি করেন। ইয়াক নামটি "Yet Another Compiler Compiler" কথার আদ্যক্ষর থেকে গঠিত। এটি ব্যাকাস-নর ফর্মের অনুরূপ সংকেতে লিখিত ব্যাকরণ থেকে LALR(১) জাতীয় পার্সার তৈরি করে।
জনসন ১৯৭০ দশকের শুরুর দিকে বেল ল্যাবসে ইয়াকের ওপর কাজ করেছেন। তিনি টিএমজি সম্পর্কে অবগত ছিলেন এবং ইয়াকের নকশায় তার প্রভাব লক্ষ্য করা যায়। ইয়াক অধিকাংশ ইউনিক্স সিস্টেমে উপস্থিত ছিল বলে এটি ইউনিক্স ব্যবহারকারীদের মধ্যে প্রচলিত ও জনপ্রিয় হয়ে ওঠে। ইয়াকের ভিত্তিতে নির্মিত গ্‌নু বাইসন প্রোগ্রাম এখনও বহুলব্যবহৃত হয়।
ইয়াকের নির্মিত কম্পাইলারের একটি অভিধান বিশ্লেষক (lexical analyzer) বা "লেক্সার" প্রোগ্রামের প্রয়োজন হয়। এ কাজের জন্য লেক্স এবং ফ্লেক্স প্রোগ্রামগুলো প্রচলিত আছে। আইট্রিপলই এর পজিক্স পি১০০৩.২ আদর্শ লেক্স এবং ইয়াক উভয়ের উপস্থিতি দাবি করে এবং বৈশিষ্টাবলী বর্ণনা করে।
মেটাকম্পাইলারসমূহ মেটাভাষায় লিখিত প্রোগ্রাম ইনপুটে গ্রহণ করে। এদের ইনপুটে ব্যাকরণ নিরীক্ষণ ফরমুলা এবং কোড নির্মাণ প্রণালী উপস্থিত থাকে যা এক্সিকিউটেবল কোড আউটপুটে নির্গমণ করতে সক্ষম। মেটাকম্পাইলারসমূহ তার নিজস্ব মেটাভাষায় লিখিত হতে পারে, ফলস্বরূপ তারা নিজেকে কম্পাইল করার সক্ষমতা লাভ করে্ এধরনের মেটাকম্পাইলার স্ব-আশ্রিত সম্প্রসারণযোগ্য ভাষার কম্পাইলার হিসেবে কাজ করতে পারে।
অধিকাংশ মেটাকম্পাইলার ডিউয়ি ভ্যাল শোর এর কাজের ভিত্তিতে গঠিত। ১৯৬৪ সালে প্রকাশিত তাঁর মেটা ২ (META II) কম্পাইলারটিই প্রথম মেটাকম্পাইলার হিসেবে স্বীকৃত। এটি নিজের সোর্স কোডের ভাষা এবং অন্যান্য ভাষা বর্ণনা করতে সক্ষম এবং কোড নির্মাণকারী সিনট্যাক্স ফরমুলা ইনপুটে গ্রহণ করে। এটি ভার্চুয়াল মেশিনেরও শুরুর দিকের অন্যতম একটি উদাহরণ।
১৯৬৮ সালে প্রকাশিত ট্রি-মেটা (TREE-META) একটি দ্বিতীয় প্রজন্মের মেটাকম্পাইলার। এটি মেটা ২ এর ক্ষমতা বর্ধিত করে, এবং ব্যাকরণ নিরীক্ষা ও কোড নির্মাণে পার্থক্যকারী "আনপার্স" ("unparse") বিধিমালা যোগ করে। ট্রি রুপান্তর প্রণালীর মাধ্যমে "বিমূর্ত গাঠনিক ট্রি" বা অ্যাবস্ট্রাক্ট সিনট্যাক্স ট্রি তৈরি করা হয়, এবং আনপার্স বিধিসমূহ এই ট্রি এর ওপর কাজ করে। এই প্রক্রিয়ায় পীপ-হোল উৎকর্ষের সুযোগ রয়েছে।
১৯৭০ সালে এসিএমের একটি প্রকাশনায় সিডব্লিউআইসি নামক একটি তৃতীয় প্রজন্মের মেটাকম্পাইলারের বর্ণনা করা হয়, যা অভিধাননিরীক্ষণ বিধিমালা এবং পশ্চাৎগামীতা যোগ করে। এই মেটাকম্পাইলারে লিস্প ২ ব্যবহৃত হয়েছিল। এতে নির্দিষ্ট নামসম্পন্ন বাইনারি কোডের খন্ডাংশ নির্মাণ করা সম্ভব হয়েছিল। এছাড়া এটি একক এবং একাধিকবার চলনযোগ্য কম্পাইলার তৈরির সুবিধা ছিল। সিডব্লিউআইসি নকশা করা হয়েছিল আইবিএমের সিস্টেম/৩৬০ কম্পিউটারে চালানোর উদ্দেশ্যে।
সংকর কম্পাইলার, বা ক্রস-কম্পাইলার, যে আর্কিটেকচারে চালিত হয়, তার পরিবর্তে ভিন্ন আর্কিটেকচারের জন্য অবজেক্ট কোড তৈরি করে। সাধারণত এমবেডেড প্রোগ্রামিংয়ের ক্ষেত্রে এবং অভীষ্ট সিস্টেমের কর্মক্ষমতা কম্পাইলার চালানোর উপযোগী না হলে সেক্ষেত্রে সংকর কম্পাইলার ব্যবহার করা হয়।
সংকর কম্পাইলারের একটি প্রাথমিক উদাহরণ এইমিকো (AIMICO), যা ইউনিভ্যাক ২ তে এক্সিকিউট হত এবং আইবিএম ৭০৫ কম্পিউটারের জন্য এসেম্বলি কোড নির্গমন করত।
এলগল ৬৮সি ভাষার কম্পাইলার "ZCODE" আউটপুট নির্গমন করতো, যা একটি জেডকোড অনুবাদক প্রোগ্রামের মাধ্যমে একই সিস্টেমের উপযোগী করে কম্পাইল করা যেত, অথবা ইন্টারপ্রেটারে চালানো যেত। জেডকোড ছিল রেজিস্টার-নির্ভর একটি মধ্যবর্তী ভাষা। জেডকোড কম্পাইল অথবা ইন্টারপ্রেট করার সুবিধা এলগল ৬৮সি ভাষাটিকে প্রচুর ভিন্ন ভিন্ন সিস্টেমে পোর্ট করতে সাহায্য করেছে।
কম্পাইলারের উৎকর্ষসাধন বলতে বোঝায় নির্মিত অবজেক্ট কোডের কার্যপ্রণালী অপরিবর্তিত রেখে তার মানোন্নয়ন করা এবং কর্মদক্ষতা বৃদ্ধি করা।
প্রথম ফোরট্রান কম্পাইলারের ডেভলপাররা হাতে লেখা গড়পড়তা এসেম্বলি কোডের চেয়ে কার্যকর কোড নির্মাণ করার লক্ষ্যনির্ধারণ করেন, যেন ক্রেতারা তাঁদের কম্পাইলার ব্যবহারে আগ্রহী হয়। প্রাথমিক সংষ্করণগুলোতে তাঁরা সফল হয়েছিলেন, কিন্তু পরবর্তী সংষ্করণসমূহে (যেমন আইবিএম ফোরট্রান ৫ কম্পাইলার) কম্পাইলারের উৎকর্ষের পরিবর্তে দ্রুতগতি এবং নিরীক্ষণসুবিধা উন্নত করার দিকে মনোযোগ সরিয়ে নেয়া হয়েছিল। পরবর্তীতে আইবিএম সিস্টেম/৩৬০ এর সময়ে দুটি ভিন্ন কম্পাইলার সরবরাহ করার রীতি শুরু হয়: একটি কোড নিরীক্ষার উদ্দেশ্যমূলক যা দ্রুতগতিসম্পন্ন, এবং অন্যটি উন্নড অবজেক্ট কোড নির্মাণকারী যা ধীরগতিসম্পন্ন।
১৯৬০ এবং ১৯৭০ দশকজুড়ে ফ্রান্সেস ই অ্যালেন এককভাবে এবং জন ককের আংশিক অংশগ্রহণে বেশ কিছু গবেষণাপত্র প্রকাশ করেন যাতে কম্পাইলারের উৎকর্ষের বিভিন্ন উপায় এবং মূলনীতি উদ্ভাবন ও আলোচিত হয়। ১৯৬৬ সালে "প্রোগ্রাম অপ্টিমাইজেশন" প্রবন্ধে প্রোগ্রামের উপাদানের মানোন্নয়নের জন্য গ্রাফ ডেটা স্ট্রাকচার এর প্রস্তাব করা হয়।
তাঁর ১৯৭০ সালে প্রকাশিত "কন্ট্রোল ফ্লো অ্যানালাইসিস" প্রবন্ধে তথ্যপ্রবাহ নিরীক্ষা এবং মানোন্নয়নের জন্য "ইন্টারভাল" কনটেক্সটের গুরুত্ব প্রকাশ করা হয় এবং "এ বেসিস ফর প্রোগ্রাম অপ্টিমাইজেশন"।
১৯৭১ সালে প্রকাশিত "এ ক্যাটালগ অফ অপ্টিমাইজিং ট্রান্সফর্মেশনস" পত্রে রূপান্তর প্রক্রিয়ার মানোন্নয়নের বর্ণনা এবং রীতি আলোচনা করা হয়।
১৯৭৩ এবং ১৯৭৪ সালে অ্যালেন তথ্যপ্রবাহের মানোন্নয়নের মূলনীতি সম্পূর্ণ প্রোগ্রামের ওপর প্রয়োগ করেন।
১৯৭৬ সালের একটি প্রবন্ধে কম্পাইলারের উৎকর্ষসাধনের অন্যতম দুটি কৌশলের একটি আলোচনা করা হয়।
অ্যালেন তাঁর উৎকর্ষসাধনকারী প্রণালীগুলো প্রয়োগ করেছেন আইবিএম ৭০৩০ স্ট্রেচ-হারভেস্ট এবং পরীক্ষামূলক এসিএস-১ সিস্টেমগুলিতে। পরবর্তীতে তিনি পিট্রান (PTRAN) প্রকল্পের বাস্তবায়ক এবং পরিচালক হয়েছিলেন। এ প্রকল্পের লক্ষ্য ছিল ফোরট্রান প্রোগ্রামের স্বয়ংক্রিয় সমান্তরাল এক্সিকিউশন বিষয়ক গবেষণা। পিট্রান প্রকল্প থেকে কম্পাইলারের সমান্তরাল কার্যপ্রণালীর মৌলিক গঠনরীতি উদ্ভাবিত হয়।
১৯৭০ সালে প্রকাশিত, জন কক এবং জ্যাকব টি শোয়ার্জের লিখিত "প্রোগ্রামিং ল্যাংগুয়েজেস অ্যান্ড দেয়ার কম্পাইলার্স" গ্রন্থে মানোন্নয়ন এলগরিদমের আলোচনায় প্রায় ২০০ পৃষ্ঠা ব্যয় করে। এই গ্রন্থে বর্তমানে প্রচলিত বিভিন্ন কৌশল বর্ণনা করা হয়, যেমন অনাবশ্যক কোড বিয়োজন, প্রবলতা নিরসন।
পীপ-হোল উৎকর্ষ একটি খুবই সরল তথাপি কার্যকর উৎকর্ষ কৌশল। উইলিয়াল এম ম্যাক্‌কীম্যান এটি আবিষ্কার করেন এবং ১৯৬৫ সালে সিএসিএম পত্রিকায় প্রকাশ করেন। এটি ম্যাক্‌কীম্যানের অংশগ্রহণে লিখিত এক্সপিএল ভাষায় ব্যবহৃত হয়েছিল।
১৯৭০ দশকের মধ্যভাগে ক্যাপেক্স কর্পোরেশন "কোবোল অপটিমাইজার" নামের একটি প্রোগ্রাম প্রকাশ করে। এটি আইবিএমের প্রচলিত কোবোল কম্পাইলারের দূর্বলতা নির্ণয় করে সেগুলোকে অধিক কার্যকর অবজেক্ট কোড দিয়ে প্রতিস্থাপন করত। উদাহরণস্বরূপ, অপটিমাইজারটি সরলরৈখিক লুকআপ টেবিলকে বাইনারি সার্চ দিয়ে প্রতিস্থাপন করত, অথবা একটি ধীরগতির ইনস্ট্রাকশনকে সমতুল্য দ্রুতগতির ইন্স্ট্রাকশন দিয়ে প্রতিস্থাপন করত। এ কৌশল বর্তমানে "প্রবলতা নিরসন" নামে পরিচিত। আরেকটি উদাহরণ হল, আইবিএম সিস্টেম/৩৬০ কম্পিউটারে এক বাইট তথ্য তুলনা করতে ব্যবহৃত CLC ইনস্ট্রাকশনের পরিবর্তে CLI ইনস্ট্রাকশনটি ব্যবহার করা, কারণ হার্ডওয়্যারের সংষ্করণের সাপেক্ষে সেটি দুই থেকে পাঁচ গুণ গতিসম্পন্ন ছিল।
আধুনিক কম্পাইলারসমূহ একাধিক উৎকর্ষসাধন কৌশল প্রয়োগ করতে পারে এবং প্রোগ্রামার প্রয়োজনমাফিক নির্বাচন করতে পারেন যে কোন কোন মানোন্নয়ন প্রণালী কার্যকর করা হবে।
কম্পাইলারের ইনপুটে একটি ত্রুটিপূর্ণ শব্দবিন্যাসের প্রোগ্রাম দেয়া হলে তার প্রেক্ষিতে সঠিক এবং স্পষ্ট এরর বার্তা দেখানো প্রোগ্রামিংয়ে সহায়ক। তবে কম্পাইলারের লেখকের দৃষ্টিকোণ থেকে এই বৈশিষ্ট্য বাস্তবায়ন করা সচরাচর জটিল হয়ে থাকে।
১৯৬০ সালে কানাডার ওয়াটারলু বিশ্ববিদ্যালয়ে ওয়াটফিভ (WATFIV) ফরট্রান কম্পাইলার তৈরি হয়েছিল, যার অন্যতম উদ্দেশ্য ছিল অন্যান্য প্রচলিত কম্পাইলারের তুলনায় স্পষ্ট এরর বার্তা প্রদান করা। এছাড়াও ওয়াটফিভের আরেকটি অনন্য সুবিধা হল এতে কম্পাইল, লিংক এবং এক্সিকিউশন ধাপগুলো একীভূত ছিল, অপরপক্ষে আইবিএমের কম্পাইলারগুলোয় এসব ধাপ সম্পাদনের দায়িত্ব ছিল ভিন্ন ভিন্ন বিভাগের।
পিএল/সি হল ১৯৭০ দশকের শুরুর দিকে করনেল বিশ্ববিদ্যালয়ে উদ্ভাবিত একটি প্রোগ্রামিং ভাষা। এটি আইবিএমের পিএল/আই ভাষার উপাংশ, এবং প্রোগ্রামিং শেখানোর উদ্দেশ্য নিয়ে তৈরি করা হয়েছিল। এর লেখক হলেন তৎকালীন গবেষক এবং শিক্ষক পদে কর্মরত রিচার্ড ডব্লিউ কনওয়ে এবং থমাস আর উইলকক্স। এসিএম প্রজ্ঞপ্তির মার্চ ১৯৭৩ সংখ্যায় তাঁদের নিবন্ধ "পিএল/আই এর একটি নিরীক্ষামূলক কম্পাইলারের নকশা এবং বাস্তবায়ন" ("Design and implementation of a diagnostic compiler for PL/I") শিরোনামের নিবন্ধটি জনপ্রিয়।
পিএল/সিতে পিএল/আইয়ের কিছু জটিল বৈশিষ্ট্য বিয়োজন করা হয় এবং বিশদ ডিবাগিং ও এরর নিষ্কৃতি বৈশিষ্ট্য‍ সংযোজন করা হয়। পিএল/সি কম্পাইলারের একটি অস্বাভাবিক বৈশিষ্ট্য ছিল, এটি কখনোই কোন প্রোগ্রাম কম্পাইলে ব্যর্থ হত না, যা মূলত সাধিত হয়েছিল বিস্তারিত স্বয়ংক্রিয় সিনট্যাক্স এরর সমাধান এবং অবশিষ্ট এররকে আউটপুট স্টেটমেন্টে রূপান্তর করার মাধ্যমে।
জাস্ট-ইন-টাইম (JIT) কম্পাইল হল একটি বিশেষ কম্পাইল পদ্ধতি যাতে সোর্সকোড এক্সিকিউট করার নিকটতম মুহূর্তে উপযুক্ত যান্ত্রিক কোড নির্মাণ করা হয়। এই পদ্ধতি রানটাইমের কর্মক্ষমতা বর্ধনকারী কৌশলের সাহায্য নিয়ে উচ্চ দক্ষতার কোড তৈরি করতে পারে।
অধিকাংশ আধুনিক কম্পাইলারে একটি লেক্সার এবং পার্সার থাকে যা প্রোগ্রামের সোর্স কোডের একটি অন্তর্বর্তী কাঠামো গঠন করে। এই কাঠামো হল বিভিন্ন প্রোগ্রামিং ধাপ বা অপারেশন এর একটি সরল ক্রমের উপস্থাপনা, যা ব্যবহার করে অপটিমাইজার এবং কোড নির্মাণকারী প্রোগ্রাম অভীষ্ট প্রসেসরের উপযুক্ত যান্ত্রিক কোড তৈরি করতে পারে। কোড নির্মাণকারী যেহেতু সোর্স কোডের অন্তর্বর্তী কাঠামোর ওপর কাজ করে, তাই একই নির্মাণকারী একাধিক উচ্চ স্তরের ভাষার সঙ্গে ব্যবহার করা সম্ভব হয়।
অন্তর্বর্তী উপস্থাপনার বহুমুখী প্রয়োগ রয়েছে। ত্রি-এড্রেস কোড— যা কোয়াড্রাপল বা কোয়াড নামেও পরিচিত— হল একটি অপারেটর, অপারেটরের প্রযোজ্য দুটি প্রতীক, এবং একটি ফলাফল এর সমন্বয়। দ্বি-এড্রেস কোড বা "ট্রিপল" এ থাকে একটি "স্ট্যাক", যঅতে ক্রমানুসারে ফলাফল লিখিত হয়।
১৯৮০ দশকে রন সাইট্রন, জিয়ানা ফেরান্ত, ব্যারি রোজেন, মার্ক এন. ভেগমান, এবং এফ. কেনেথ জাডেক সম্মিলিতভাবে স্থির একক এসাইনমেন্ট (SSA) প্রক্রিয়া উদ্ভাবন করেন। এই পদ্ধতিতে একটি চলকে কেবল একবারই মান সরবরাহ করা হয়। পরবর্তীকালে মান পরিবর্তন করার প্রয়োজন পড়লে ওই চলকটি পরিবর্তন না করে সম্পূর্ণ নতুন একটি চলক উৎপাদন করা হয়। এসএসএ কোডের অপ্টিমাইজেশন এবং কোড নির্মাণ প্রণালী সহজ করেছে।
কোড নির্মাণ বা কোড জেনারেটরের কাজ হল অভীষ্ট প্রসেসরের যান্ত্রিক ভাষায় কোডের নির্দেশাবলী পুনর্গঠন করা।
সেথি-উল্‌ম্যান এলগরিদম বা সেথি-উল্‌ম্যান সংখ্যায়ন হল ভ্যারিয়েবল ধারণের প্রয়োজনীয় রেজিস্টারের সংখ্যা হ্রাস করার একটি পদ্ধতি।