compiler-construction - সি++ প্রোগ্রামিং




একটি কম্পাইলার লিখতে শেখা (20)

পছন্দের ভাষা : সি / সি ++, জাভা, এবং রুবি।

আমি সহজেই শিক্ষাগত উদ্দেশ্যে আপনার নিজের কম্পাইলার লিখতে কিছু সহায়ক বই / টিউটোরিয়াল খুঁজছেন। আমি সি / সি ++, জাভা এবং রুবি সম্পর্কে সর্বাধিক পরিচিত, তাই আমি এমন তিনটি সংস্থাকে অন্তর্ভুক্ত করে এমন সংস্থান পছন্দ করি, তবে কোনও ভাল সম্পদ গ্রহণযোগ্য।


"... এর একটি কম্পাইলার তৈরি করা যাক ..."

আমি দ্বিতীয় http://compilers.iecc.com/crenshaw/ @sasb চাই। মুহূর্তের জন্য আরো বই কেনার ভুলে যান।

কেন? সরঞ্জাম এবং ভাষা।

প্রয়োজনীয় ভাষা পাস্কাল এবং যদি আমি মনে করি সঠিকভাবে Turbo-Pascal উপর ভিত্তি করে। এটি যদি আপনি http://www.freepascal.org/ যান এবং প্যাস্কাল কম্পাইলারটি ডাউনলোড করুন তবে সমস্ত উদাহরণ সরাসরি পৃষ্ঠা থেকে কাজ করে। http://www.freepascal.org/download.var বিনামূল্যে সম্পর্কে সুন্দর জিনিস Pascal আপনি প্রায় যত্ন নিতে পারেন প্রসেসর বা ওএস প্রায় এটি ব্যবহার করতে পারেন।

একবার আপনি পাঠ্য আয়ত্ত করেছেন একবার আরও উন্নত " ড্রাগন বুক " চেষ্টা করুন http://en.wikipedia.org/wiki/Dragon_book


সম্পদ বড় তালিকা:

লেজেন্ড:

  • একটি পিডিএফ ফাইল লিঙ্ক
  • একটি মুদ্রিত বই লিঙ্ক $

Python পাইথন লিখিত একটি পাইথন কম্পাইলার সঙ্গে bundled আসে। আপনি সোর্স কোডটি দেখতে পারেন, এবং এতে সমস্ত পর্যায় অন্তর্ভুক্ত রয়েছে, পার্সিং, বিমূর্ত সিনট্যাক্স ট্রি, এমটিং কোড ইত্যাদি। এটি হ্যাক করুন।


আপনার যদি একটু সময় থাকে, তবে আমি ethoberon.ethz.ch/WirthPubl/CBEAll.pdf , একটি ছোট্ট ছোট্ট পুস্তিকা যা আপনি দিনের মধ্যে পড়তে পারেন তার সুপারিশ করেন তবে এটি মূলত ব্যাখ্যা করে (লেক্সারগুলি, পুনরাবৃত্তিমূলক বংশবৃদ্ধিগুলি কীভাবে প্রয়োগ করা যায় তা সহ) এবং আপনার নিজস্ব স্ট্যাক ভিত্তিক ভার্চুয়াল মেশিন)। তারপরে, যদি আপনি একটি গভীর ডুব চান, অন্য মন্তব্যকারীদের সুপারিশ হিসাবে ড্রাগন বইয়ের চারপাশে কোন উপায় নেই।


আপনি ডারিয়াস বেকন এর " ichbins " পরীক্ষা করে দেখুন, যা একটি ছোট ichbins উপভাষার জন্য একটি কম্পাইলার, যা ichbins লক্ষ্য করে 6 টিরও বেশি পৃষ্ঠাতে। বেশিরভাগ খেলনা কম্পাইলারের উপর এটির সুবিধাটি হল যে কম্পাইলারটি লিখিত আছে এমন ভাষাটি যথেষ্ট। (টারববলটি জিনিসটিকে বুটস্ট্র্যাপ করার জন্য একটি ইন্টারপ্রেটারও অন্তর্ভুক্ত করে।)

আমার Ur-Scheme ওয়েব পৃষ্ঠায় একটি কম্পাইলার লিখতে শিখতে যা দরকারী তা সম্পর্কে আরো কিছু আছে।


আপনি যদি সবকিছু নির্মাণের পরিবর্তে শক্তিশালী, উচ্চতর স্তরের সরঞ্জামগুলি ব্যবহার করতে চান তবে এই কোর্সের জন্য প্রকল্পগুলি এবং রিডিংগুলির মধ্য দিয়ে যাওয়া একটি সুন্দর বিকল্প। এটি একটি ভাষা কোর্স যা জাভা পার্সার ইঞ্জিন এন্টেলআর এর লেখক। আপনি প্রাগমেটিক প্রোগ্রামারদের কাছ থেকে পিডিএফ হিসাবে অবশ্যই বইটি পেতে পারেন।

অবশ্যই আপনি অন্য কোথাও দেখতে পাবেন এমন স্ট্যান্ডার্ড কম্পাইলার কম্পাইলার স্টাফের উপরে চলে যায়: প্যারিসিং, টাইপ এবং টাইপ চেকিং, পলিমোরফিজম, সিম্বল টেবিল এবং কোড প্রজন্ম। আচ্ছাদিত করা হয় না যে বেশ অনেক জিনিস একমাত্র। চূড়ান্ত প্রকল্প একটি প্রোগ্রাম যা সি একটি উপসেট কম্পাইল । কারণ আপনি এন্টলআর এবং এলএলভিএমের মতো সরঞ্জামগুলি ব্যবহার করেন, এটি একক দিনের মধ্যে সম্পূর্ণ কম্পাইলারটি লিখতে সক্ষম (আমার অস্তিত্ব প্রমাণ আছে, যদিও আমার মানে ~ 24 ঘন্টা)। এটি আধুনিক সরঞ্জাম ব্যবহার করে ব্যবহারিক প্রকৌশল উপর ভারী, তত্ত্ব উপর একটু হালকা।

এলএলভিএম, উপায় দ্বারা, সহজভাবে চমত্কার। সাধারণত আপনি সমাবেশে সংকলন করতে পারেন এমন অনেক পরিস্থিতিতে, আপনি তার পরিবর্তে এলএলভিএম এর ইন্টারমিডিয়েট প্রতিনিধিত্বে কম্পাইল হওয়া থেকে অনেক ভাল হবেন। এটি উচ্চ স্তরের, ক্রস প্ল্যাটফর্ম এবং এলএলভিএম এটি থেকে অপ্টিমাইজড সমাবেশ তৈরিতে বেশ ভাল।


আমি এমএল মধ্যে আধুনিক কম্পাইলার বাস্তবায়ন সেরা পরিচায়ক কম্পাইলার লেখা টেক্সট মনে হয়। একটি Java এবং একটি C , যা আপনার ভাষার ব্যাকগ্রাউন্ড দেওয়া আরও বেশি অ্যাক্সেসযোগ্য হতে পারে। বইটি অনেকগুলি মৌলিক উপাদান (স্ক্যানিং এবং প্যারিসিং, সেমিক্যান্ট বিশ্লেষণ, অ্যাক্টিভেশন রেকর্ড, নির্দেশ নির্বাচন, RISC এবং x86 নেটিভ কোড প্রজন্ম) এবং বিভিন্ন "উন্নত" বিষয়গুলি (OO এবং কার্যকরী ভাষা, পলিমোফিজম, আবর্জনা সংগ্রহ, অপটিমাইজেশন এবং একক স্ট্যাটিক অ্যাসাইনমেন্ট ফর্ম) অপেক্ষাকৃত সামান্য স্থান (~ 500 পৃষ্ঠা)।

আমি ড্রাগন বইয়ের জন্য আধুনিক কম্পাইলার বাস্তবায়ন পছন্দ করি কারণ আধুনিক কম্পাইলার বাস্তবায়ন ক্ষেত্রের কম জরিপ করে - পরিবর্তে এটি একটি গুরুতর, শালীন কম্পাইলার লিখতে আপনার প্রয়োজনীয় সমস্ত বিষয়গুলির সত্যিই কঠিন কভারেজ রয়েছে। আপনি এই বইয়ের মাধ্যমে কাজ করার পরে আপনি এটি প্রয়োজন হলে সরাসরি গভীরতার জন্য গবেষণা কাগজপত্র মোকাবেলা করতে প্রস্তুত হবেন।

আমি স্বীকার করবো আমি নিক্লাউস উইথের কম্পাইলার নির্মাণের জন্য একটি গুরুতর নরম স্পট আছে এটি একটি পিডিএফ হিসাবে অনলাইন উপলব্ধ । আমি উইথের প্রোগ্রামিং নান্দনিক সৌন্দর্যটি সহজেই খুঁজে পেয়েছি, তবে কিছু লোক তার শৈলীটি খুব কমই খুঁজে পায় (উদাহরণস্বরূপ, উইথ পুনর্মিলনশীল বংশানুক্রমিক প্যাসারসকে সমর্থন করে, তবে বেশিরভাগ সিএস কোর্সগুলি পার্সার জেনারেটর সরঞ্জামগুলিতে ফোকাস করে; উইথের ভাষা ডিজাইনগুলি মোটামুটি রক্ষণশীল।) কম্পাইলার নির্মাণটি খুব সংক্ষিপ্ত দ্রবণ উইথের মৌলিক ধারণাগুলি, তাই আপনি তার শৈলী পছন্দ করেন না বা না চান, আমি অত্যন্ত এই বইটি পড়ার সুপারিশ করি।


আমি একই ধারণার দিকে তাকিয়ে আছি, এবং জোয়েল পোবার এই প্রতিশ্রুতিশীল নিবন্ধটি খুঁজে পেয়েছি,

.NET ফ্রেমওয়ার্কের জন্য একটি ভাষা কম্পাইলার তৈরি করুন - এটি কোথায় চলে গেছে তা নিশ্চিত না

.NET ফ্রেমওয়ার্কের জন্য একটি ভাষা কম্পাইলার তৈরি করুন - মূল ডক এর পিডিএফ কপি

তিনি নেট কাঠামোর জন্য নিজের ল্যাঙ্গেজ আবিষ্কারের জন্য একটি কম্পাইলারের উচ্চ পর্যায়ের ধারণা নিয়ে আলোচনা করেছেন। যদিও এটি ন্যেট ফ্রেমওয়ার্কের উদ্দেশ্য ছিল, তবে ধারণাগুলির অনেকগুলি পুনরুত্পাদন করতে সক্ষম হওয়া উচিত। নিবন্ধটি কভার করে:

  1. Langauge সংজ্ঞা
  2. স্ক্যানার
  3. পার্সার (বিট আমি প্রধানত আগ্রহী)
  4. লক্ষ্যমাত্রা। নেট ফ্রেমওয়ার্ক
  5. উৎপাদকের কোড

অন্যান্য বিষয় আছে, কিন্তু আপনি ঠিক পেতে।

এটির লক্ষ্যগুলি শুরু করা লোকেরা সি # লিখিত (বেশ জাভা নয়)

আছে HTH

হাড়


আমি ড্রাগন বই রেফারেন্স সঙ্গে একমত; আইএমও, এটি কম্পাইলার নির্মাণের জন্য নির্দিষ্ট গাইড। যদিও কিছু হার্ডকোর তত্ত্বের জন্য প্রস্তুত হও।

আপনি তত্ত্বের উপর হালকা একটি বই চান, গেম স্ক্রিপ্টিং মাস্টার আপনার জন্য একটি ভাল বই হতে পারে। আপনি যদি কম্পাইলার থিওরিতে মোট নবাগত হন, তবে এটি একটি gentler ভূমিকা প্রদান করে। এটি আরও কার্যকর পার্সিং পদ্ধতিগুলি অন্তর্ভুক্ত করে না (এলএল বা এলআর প্যারিসিং নিয়ে আলোচনা না করে অ-ভবিষ্যদ্বাণীমূলক পুনরাবৃত্তিমূলক বংশের জন্য নির্বাচন করা) এবং আমি মনে করি, এটি কোনও ধরণের অপ্টিমাইজেশান তত্ত্ব নিয়েও আলোচনা করে না। প্লাস, মেশিন কোডে কম্পাইল করার পরিবর্তে, এটি একটি বাইটকোডের সাথে সংকলন করে যা আপনি যে VM লিখেছেন তা চালানোর জন্য অনুমিত হয়।

এটা এখনও একটি শালীন পঠন, বিশেষ করে যদি আপনি এটি অ্যামাজন সস্তা জন্য নিতে পারেন। আপনি শুধুমাত্র কম্পাইলার মধ্যে একটি সহজ ভূমিকা চান, খেলা স্ক্রিপ্টিং মাস্টারি যেতে খারাপ উপায় নয়। আপনি যদি হার্ডকোর আপ সামনে যেতে চান, তাহলে আপনি ড্রাগন বুক চেয়ে কম জন্য স্থায়ী করা উচিত।


আমি সাত বছর আগে এই প্রশ্ন জিজ্ঞাসা মনে যখন আমি প্রোগ্রামিং চেয়ে নতুন ছিল। যখন আমি জিজ্ঞাসা করলাম তখন আমি খুব সাবধান ছিলাম এবং আশ্চর্যজনকভাবে আপনি এখানে আসার মত আমি যতটা সমালোচনা পাইনি। তবে তারা আমাকে " ড্রাগন বুক " এর দিক নির্দেশ করে যা আমার মতে, একটি সত্যিকারের দুর্দান্ত বই যা কম্পাইলার লেখার জন্য আপনাকে যা জানা দরকার তা ব্যাখ্যা করে। (আপনাকে অবশ্যই অবশ্যই একটি ভাষা বা দুটি মাস্টার করতে হবে। আরো আপনি জানেন ভাষা, মেধার।)।

এবং হ্যাঁ, অনেকেই বলে যে বইটি পাগল এবং আপনি এটি থেকে কিছু শিখতে পারবেন না, তবে আমি সম্পূর্ণরূপে অসম্মতি জানাচ্ছি।

অনেক মানুষ বলে যে লেখা কম্পাইলার বোকা এবং বিন্দুহীন। ওয়েল, কম্পাইলার ডেভেলপমেন্টটি কেন দরকারী তা বেশ কয়েকটি কারণ রয়েছে: - এটি মজাদার কারণ। - এটি শিক্ষাগত, কম্পাইলারগুলি কীভাবে লিখতে হয় তা শেখার সময় আপনি কম্পিউটার বিজ্ঞান এবং অন্যান্য অ্যাপ্লিকেশনগুলি লেখার সময় দরকারী অন্যান্য কৌশল সম্পর্কে অনেক কিছু শিখবেন। - যদি কেউ কম্পাইলার রচনা করে তবে বিদ্যমান ভাষাগুলি আর ভাল হবে না।

আমি সরাসরি আমার নিজের কম্পাইলার লিখি নি, কিন্তু জিজ্ঞাসা করার পর আমি জানতাম কোথায় শুরু হবে। এবং এখন, বিভিন্ন ভাষা শেখার পরে এবং ড্রাগন বুক পড়ার পর, লেখার সমস্যাটি বেশি হয় না। (আমি কম্পিউটার ইঞ্জিনিয়ারিং এটিএমও পড়ছি, কিন্তু প্রোগ্রামিং সম্পর্কে আমি যা জানি তা স্বয়ং শিক্ষিত।)

উপসংহারে: - ড্রাগন বুক একটি দুর্দান্ত "টিউটোরিয়াল"। কিন্তু একটি কম্পাইলার লিখার চেষ্টা করার আগে একটি ভাষা বা দুই mastering কিছু সময় ব্যয় করুন। পরবর্তী দশক বা তাই মধ্যে একটি কম্পাইলার গুরু হতে আশা করি না।

আপনি যদি পাসার / দোভাষীকে কীভাবে লিখতে চান তা শিখতেও বইটি ভাল।


এটি একটি চমত্কার অস্পষ্ট প্রশ্ন, আমি মনে করি; শুধু জড়িত বিষয় গভীরতার কারণে। একটি কম্পাইলার দুটি পৃথক অংশে বিভক্ত করা যেতে পারে, তবে; একটি অর্ধেক এবং নীচে এক। অর্ধেক সাধারণত সোর্স ভাষাটি নেয় এবং এটি একটি মধ্যবর্তী উপস্থাপনা রূপে পরিবর্তিত হয় এবং নিম্ন অর্ধেকটি প্ল্যাটফর্ম নির্দিষ্ট কোড প্রজন্মের যত্ন নেয়।

যাইহোক, এই বিষয়ে পৌঁছানোর সহজ উপায়ের জন্য একটি ধারণা (অন্তত আমার কম্পাইলার শ্রেণিতে ব্যবহৃত আমরা) উপরে বর্ণিত দুটি টুকরাতে কম্পাইলার তৈরি করা। বিশেষ করে, আপনি অর্ধেক ভবন নির্মাণ করে সমগ্র প্রক্রিয়াটির একটি ভাল ধারণা পাবেন।

শুধু উপরের অর্ধেকটি করার জন্য আপনি লেক্সিকাল বিশ্লেষক এবং প্যাসারার লেখার অভিজ্ঞতা পেতে এবং কিছু "কোড" তৈরি করতে পারেন (যে মধ্যবর্তী প্রতিনিধিত্ব আমি উল্লেখ করেছি)। সুতরাং এটি আপনার উত্স প্রোগ্রামটি গ্রহণ করবে এবং এটি অন্য উপস্থাপনে রূপান্তরিত করবে এবং কিছু অপ্টিমাইজেশান (যদি আপনি চান) করবেন, যা একটি কম্পাইলারের হৃদয়। নিচের অর্ধেকটি তখন মধ্যবর্তী উপস্থাপনাটি গ্রহণ করবে এবং একটি নির্দিষ্ট আর্কিটেকচারে প্রোগ্রাম চালানোর জন্য প্রয়োজনীয় বাইটগুলি তৈরি করবে। উদাহরণস্বরূপ, নিচের অর্ধেকটি আপনার মধ্যবর্তী উপস্থাপনাটি গ্রহণ করবে এবং একটি PE এক্সিকিউটেবল তৈরি করবে।

এই বিষয়ে কিছু বই যা আমি বিশেষভাবে সহায়ক ছিল কম্পাইলার নীতিমালা এবং কৌশল (অথবা কভারের চতুর ড্রাগনের কারণে ড্রাগন বুক)। এটি একটি দুর্দান্ত তত্ত্ব পেয়েছে এবং স্পষ্টভাবে কনটেক্সট-ফ্রি গ্রামারকে একটি অ্যাক্সেসযোগ্য উপায়ে আচ্ছাদিত করে। এছাড়াও, লেক্সিকাল বিশ্লেষক এবং পার্সার নির্মাণের জন্য, সম্ভবত আপনি * নিক্স সরঞ্জামগুলি lex এবং yacc ব্যবহার করবেন। এবং অপ্রত্যাশিতভাবে যথেষ্ট, " লেক্স এবং ইয়্যাক " নামক বইটি এই অংশে ড্রাগন বুক ছেড়ে চলে গেছে।


কম্পাইলার তৈরি করার একটি সহজ উপায় হল বাইসন এবং ফ্লেক্স (বা অনুরূপ) ব্যবহার করা, একটি গাছ (এএসটি) তৈরি করা এবং সিতে কোড জেনারেট করা। সি কোডটি তৈরি করা সবচেয়ে গুরুত্বপূর্ণ পদক্ষেপ। সি কোড তৈরি করে, আপনার ভাষাটি স্বয়ংক্রিয়ভাবে সমস্ত সিলেক্টরগুলির উপর কাজ করবে যা একটি সি কম্পাইলার।

জেনারেটিং সি কোডটি এইচটিএমএল জেনারেট করার মতো সহজ (শুধুমাত্র মুদ্রণ, বা সমতুল্য ব্যবহার করুন), যা একটি সি পসারার বা এইচটিএমএল পার্সার লেখার চেয়ে অনেক সহজ।



ফ্রেজার এবং হ্যানসন এর LCC কম্পাইলার ( wikipedia ) ( প্রকল্প হোমপৃষ্ঠা ) তাদের বই "A Retargetable সি কম্পাইলার: ডিজাইন এবং বাস্তবায়ন" এ বর্ণিত হয়েছে। এটি বেশ পঠনযোগ্য এবং কোড প্রজন্মের নিচে, সম্পূর্ণ কম্পাইলার ব্যাখ্যা করে।


"চলুন একটি কম্পাইলার তৈরি করি" অসাধারণ, কিন্তু এটি একটি বিট পুরানো। (আমি বলছি না এটি এমনকি একটু কম বৈধ করে তোলে।)

অথবা SLANG চেক আউট। এটি "লেটস একটি কম্পাইলার তৈরি করুন" এর অনুরূপ কিন্তু বিশেষ করে নতুনদের জন্য এটি আরও ভাল সম্পদ। এটি একটি পিডিএফ টিউটোরিয়ালের সাথে আসে যা আপনাকে একটি কম্পাইলার শেখার ক্ষেত্রে একটি 7 ধাপ পদ্ধতির দিকে নিয়ে যায়। কোয়া লিঙ্কটি যুক্ত করার কারণে এটি স্ল্যাং-এর সমস্ত বিভিন্ন পোর্টের লিঙ্ক রয়েছে, সি ++, জাভা এবং জেএস-এ, পাইথন এবং জাভাতেও দোভাষী, যা মূলত সি # এবং নেট নেট প্ল্যাটফর্ম ব্যবহার করে লিখিত।


Comp.compilers থেকে প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী :

পেরি ব্রিন্চ হ্যানসেন প্রেন্টিস-হল দ্বারা "প্রোগ্রামিং একটি ব্যক্তিগত কম্পিউটার" 1982 ISBN 0-13-730283-5

এই দুর্ভাগ্যবশত-শিরোনাম বইটি পিস্কাল-এর মতো এডিসন নামক ভাষা ব্যবহার করে মাইক্রোগুলির জন্য একক-ব্যবহারকারী প্রোগ্রামিং পরিবেশের নকশা এবং সৃষ্টি ব্যাখ্যা করে। লেখক এডিসন কম্পাইলার এবং সহজ সমর্থনকারী অপারেটিং সিস্টেমের ধাপে ধাপে বাস্তবায়নয়ের জন্য সমস্ত সোর্স কোড এবং ব্যাখ্যা উপস্থাপন করেন, যা এডিসন নিজেই লিখিত রয়েছে (পিডিপি 11/23 এর জন্য একটি প্রতীকী অ্যাসবেলারে লেখা একটি ছোট সমর্থক কার্নেল ব্যতীত; সম্পূর্ণ উৎস আইবিএম পিসি জন্য আদেশ করা যেতে পারে)।

এই বইটির সবচেয়ে আকর্ষণীয় বিষয় হল: 1) সম্পূর্ণ, আত্মনির্ভরশীল, স্ব-বজায় রাখা, দরকারী কম্পাইলার এবং অপারেটিং সিস্টেম কীভাবে তৈরি করতে হয় তা প্রদর্শনের ক্ষমতা, এবং 2) ভাষা নকশা এবং স্পেসিফিকেশন সমস্যা এবং ট্রেড- অধ্যায় 2 বন্ধ।

"ব্রাশ হ্যানসেন অন প্যাসকাল কম্পাইলারস" পার ব্রিনচে হ্যানসেন প্রেন্টিস-হল দ্বারা 1985 ISBN 0-13-083098-4

আরেকটি আলোক-তত্ত্ব-তত্ত্বের উপর ভারী-অন-প্রগমেটিকস এখানে কিভাবে-কিভাবে-কোড-এটি বই। লেখক ডিজাইনার এবং Pascal- (Pascal "minus") এর জন্য একটি কম্পাইলার এবং পি-কোড ইন্টারপ্রেটারের জন্য নকশা, বাস্তবায়ন এবং সম্পূর্ণ উৎস কোড উপস্থাপন করে, বুলিয়ান এবং পূর্ণসংখ্যাগুলির প্রকারের একটি পাস্কাল উপসেট (তবে কোনও অক্ষর, বাস্তব, নিম্নমানের বা গাণিতিক ধরন) , ধ্রুবক এবং পরিবর্তনশীল সংজ্ঞা এবং অ্যারে এবং রেকর্ডের ধরন (কিন্তু কোন প্যাকড, বৈকল্পিক, সেট, পয়েন্টার, নামহীন, নামযুক্ত, বা ফাইলের ধরন), এক্সপ্রেশন, অ্যাসাইনমেন্ট বিবৃতি, মান এবং পরিবর্তনশীল পরামিতিগুলির সাথে ন্যস্ত পদ্ধতির সংজ্ঞা, এবং শুরু-শেষ ব্লকগুলি (তবে কোন ফাংশন সংজ্ঞা, পদ্ধতিগত পরামিতি, গোটা বিবৃতি এবং লেবেল, কেস বিবৃতি, বিবৃতির জন্য বিবৃতি, বিবৃতি এবং বিবৃতি সহ)।

কম্পাসার এবং ইন্টারপ্রেটারটি পাইস্কাল * (পাসকাল "তারকা") তে লেখা হয়েছে, একটি পাসস্কাল উপসেট সফটওয়্যার ডেভেলপমেন্ট সিস্টেম তৈরির জন্য কিছু এডিসন-শৈলী বৈশিষ্ট্যগুলির সাথে বর্ধিত। আইবিএম পিসির জন্য একটি পাইস্কাল * কম্পাইলার লেখক কর্তৃক বিক্রি করা হয় তবে বইয়ের পাসকাল-কম্পাইলারটিকে কোনও সুবিধাজনক পাসস্ক প্ল্যাটফর্মে পোর্ট করা সহজ।

এই বই একটি কম্পাইলার নকশা এবং বাস্তবায়ন সহজ করে তোলে। লেখক গুণমান, নির্ভরযোগ্যতা, এবং পরীক্ষার সাথে বিশেষভাবে উদ্বিগ্ন। কম্পাইলার এবং ইন্টারপ্রেটারটি আরও বেশি জড়িত ভাষা বা কম্পাইলার প্রজেক্টের পক্ষে সহজেই ব্যবহার করা যেতে পারে, বিশেষত যদি আপনি দ্রুত কিছু পেতে এবং চলতে চাপেন।


এই বইটি এতদূর তালিকায় অন্তর্ভুক্ত করা হয়নি:

কম্পাইলার ডিজাইনের বেসিক (Torben Mogensen) (কম্পিউটার বিজ্ঞান বিভাগ থেকে, কোপেনহেগেন বিশ্ববিদ্যালয় থেকে)

আমি কম্পাইলার সম্পর্কে শিখতে আগ্রহী এবং পরবর্তী কয়েক বছরে সেই শিল্পে প্রবেশ করার পরিকল্পনা করি। যতদূর আমি দেখতে পাচ্ছি কম্পাইলার শিখতে শুরু করার জন্য এই বই আদর্শ তত্ত্ব বই। এটি অনুলিপি এবং পুনরুজ্জীবিত করা, পরিষ্কারভাবে এবং সাবধানে লেখা এবং আপনাকে কোনও কোড ছাড়াই সরল ইংরাজিতে এটি প্রদান করে তবে বিনামূল্যে নির্দেশাবলী এবং চিত্রাবলী ইত্যাদির মাধ্যমে মেকানিক্স উপস্থাপন করে।


এখানে অনেক উত্তরের উত্তর আছে, তাই আমি ভেবেছিলাম আমি তালিকাটিতে আরো যোগ করবো:

এক দশকেরও বেশি আগে প্রোজেক্ট ওবেরন নামে একটি বই পেয়েছিলাম, যা কম্পাইলারের খুব ভাল লেখা লেখা আছে। বইটি সত্যিই এই অর্থে দাঁড়িয়েছে যে উৎস এবং ব্যাখ্যাগুলি খুব হাতের উপর এবং পঠনযোগ্য। সম্পূর্ণ লেখাটি (২005 সংস্করণ) পিডিএফ এ উপলব্ধ করা হয়েছে, তাই আপনি এখনই ডাউনলোড করতে পারেন। কম্পাইলার অধ্যায় 12 আলোচনা করা হয়:

http://www-old.oberon.ethz.ch/WirthPubl/ProjectOberon.pdf

নিক্লাউস উইথ, জার্গ গুটকনেট

(চিকিত্সা কম্পাইলার তার বই হিসাবে ব্যাপক নয়)

আমি কম্পাইলারগুলির উপর বেশ কয়েকটি বই পড়েছি, এবং আমি ড্রাগন বইটি সেকেন্ড করতে পারি, এই বইটিতে অতিবাহিত সময় খুব ভাল।


BCEL সফটওয়্যার ফাউন্ডেশনের মাধ্যমে আপনি BCEL ব্যবহার করতে পারেন । এই টুল দিয়ে আপনি অ্যাডমেলার-মত কোড তৈরি করতে পারেন, কিন্তু এটি বিসিএল API এর সাথে জাভা। আপনি কিভাবে মধ্যবর্তী ভাষা কোড তৈরি করতে পারেন তা শিখতে পারেন (এই ক্ষেত্রে বাইট কোড)।

সহজ উদাহরণ

  1. এই ফাংশন দিয়ে একটি জাভা বর্গ তৈরি করুন:

    public String maxAsString(int a, int b) {
        if (a > b) {
            return Integer.valueOf(a).toString();
        } else if (a < b) {
            return Integer.valueOf(b).toString();
        } else {
            return "equals";
        }
    }
    

এখন এই বর্গ সঙ্গে BCELifier রান

BCELifier bcelifier = new BCELifier("MyClass", System.out);
bcelifier.start();

আপনি সমগ্র ক্লাসের জন্য কনসোলের ফলাফলটি দেখতে পারেন (বাইট কোড MyClass.java কিভাবে তৈরি করবেন)। ফাংশনের কোডটি হল:

private void createMethod_1() {
  InstructionList il = new InstructionList();
  MethodGen method = new MethodGen(ACC_PUBLIC, Type.STRING, new Type[] { Type.INT, Type.INT }, new String[] { "arg0", "arg1" }, "maxAsString", "MyClass", il, _cp);

  il.append(InstructionFactory.createLoad(Type.INT, 1)); // Load first parameter to address 1
  il.append(InstructionFactory.createLoad(Type.INT, 2)); // Load second parameter to adress 2
    BranchInstruction if_icmple_2 = InstructionFactory.createBranchInstruction(Constants.IF_ICMPLE, null); // Do if condition (compare a > b)
  il.append(if_icmple_2);
  il.append(InstructionFactory.createLoad(Type.INT, 1)); // Load value from address 1 into the stack
  il.append(_factory.createInvoke("java.lang.Integer", "valueOf", new ObjectType("java.lang.Integer"), new Type[] { Type.INT }, Constants.INVOKESTATIC));
  il.append(_factory.createInvoke("java.lang.Integer", "toString", Type.STRING, Type.NO_ARGS, Constants.INVOKEVIRTUAL));
  il.append(InstructionFactory.createReturn(Type.OBJECT));
  InstructionHandle ih_13 = il.append(InstructionFactory.createLoad(Type.INT, 1));
  il.append(InstructionFactory.createLoad(Type.INT, 2));
    BranchInstruction if_icmpge_15 = InstructionFactory.createBranchInstruction(Constants.IF_ICMPGE, null); // Do if condition (compare a < b)
  il.append(if_icmpge_15);
  il.append(InstructionFactory.createLoad(Type.INT, 2));
  il.append(_factory.createInvoke("java.lang.Integer", "valueOf", new ObjectType("java.lang.Integer"), new Type[] { Type.INT }, Constants.INVOKESTATIC));
  il.append(_factory.createInvoke("java.lang.Integer", "toString", Type.STRING, Type.NO_ARGS, Constants.INVOKEVIRTUAL));
  il.append(InstructionFactory.createReturn(Type.OBJECT));
  InstructionHandle ih_26 = il.append(new PUSH(_cp, "equals")); // Return "equals" string
  il.append(InstructionFactory.createReturn(Type.OBJECT));
  if_icmple_2.setTarget(ih_13);
  if_icmpge_15.setTarget(ih_26);
  method.setMaxStack();
  method.setMaxLocals();
  _cg.addMethod(method.getMethod());
  il.dispose();
}

আমি ক্রেনশো টিউটোরিয়ালটিও পছন্দ করেছি , কারণ এটি একেবারে স্পষ্ট করে তোলে যে কম্পাইলারটি কেবলমাত্র অন্য একটি প্রোগ্রাম যা কিছু ইনপুট পড়তে পারে এবং কিছু লেখার জন্য লিখতে পারে।

এটা পড়ুন।

যদি আপনি চান তবে এটি কাজ করুন, তবে তারপরে আরও বড় এবং আরও সম্পূর্ণ কম্পাইলারগুলি কীভাবে লিখিত হয় তার উপর অন্য রেফারেন্সটি দেখুন।

এবং এই ডোমেনে সম্পন্ন হতে পারে এমন অযৌক্তিক বিষয়গুলি সম্পর্কে একটি সূত্র পেতে ট্রাস্ট ট্রাস্টে পড়তে ।





language-agnostic