একটি সংকলক লিখতে শেখা [বন্ধ]


699

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

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


পুরোপুরি এএনটিএলআর। নীচে প্রস্তাবিত সমস্ত সংস্থানগুলি আমার কাছে ওভারকিলের মতো দেখাচ্ছে। এএনটিএলআর সর্বদা একটি সংকলক ডিজাইনার সেরা বন্ধু। এ
এ_বার

আপনার মূল ফোকাসটি কীভাবে সাধারণভাবে সংকলন করা ধারণাগুলি শিখতে হয় - আপনি স্কিম (তালিকা) ভিত্তিক কম্পিউটার প্রোগ্রামের স্ট্রাকচার্ড ইন্টারপ্রিটেশন এর জন্য সংক্ষিপ্ত বিবরণ পরীক্ষা করতে পারেন এবং সাধারণ নীতিগুলি শেখান। mitpress.mit.edu/sicp । আমাকে এই বইটি একজন প্রবীণ ব্যক্তি দ্বারা প্রস্তাবিত হয়েছিল যিনি কোনও সংস্থার হয়ে কাজ করেন এবং জীবিকার জন্য এই কাজগুলি সংকলন এবং ব্যাখ্যা করেন!
নিশান্ট

একটি নির্লজ্জ প্লাগ: একই প্রশ্নের আমার উত্তর
9000

আমি আমার ব্লগে একটি সংকলক তৈরি করার জন্য একটি নিবন্ধ লিখেছিলাম: কমলা থেকে জৈলিবেলফ্রন্টফ্রন্ট / how-to-write- a-compiler এটি খুব বেসিকগুলিকে কেন্দ্র করে এবং শুরু করার দিকে মনোনিবেশ করে, সত্যই। সেখানে আরও একগুচ্ছ আরও সংকলক / কোডজেন / পার্সার / ভাষা নকশা-সম্পর্কিত নিবন্ধ রয়েছে।
uliw साक्षी

উত্তর:


1084

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

লেজেন্ড:

  • PDF একটি পিডিএফ ফাইলে লিঙ্ক করুন
  • Printed একটি মুদ্রিত বইয়ের লিঙ্ক

22
আমি Let's Build a Compiler[ compilers.iecc.com/crenshaw/] সিরিজটি পড়েছি , এটি সত্যিই দুর্দান্ত লেখা এবং এটি একটি ভাল সূচনা পয়েন্ট।
TheVilageIdiot

5
আমার মনে হয় একটি উল্লেখযোগ্য বিষয় হ'ল কর্সেরার সংকলক কোর্স। এটিতে দুর্দান্ত ভিডিও রয়েছে এবং ভাষা / সরল সংকলকের মতো একটি জাভা তৈরির মাধ্যমে হাঁটা যায়। কোর্সেরা
সংকলক

1
আমি এই উত্তরটি যথাসম্ভব মূল হিসাবে পোস্ট করে রাখতে চেয়েছিলাম তাই আমি এই রেফারেন্সটি এখানে পোস্ট করার সিদ্ধান্ত নিয়েছি: টিউটোরিয়ালপয়েন্টিপয়েন্ট.কম্পেলার_ডিজাইন / ইন্ডেক্স এইচটিএম এই সাইটটি সম্পর্কে আমার যা পছন্দ হয়েছে তা হ'ল এটি কোনও কোড লেখার সাথে জড়িত না doesn't একটি সংকলক তৈরি করতে, তবে এটি সংকলকটিকে তার অংশগুলিতে বিভক্ত করে: পর্যায়ক্রমে এবং পর্যায়ে। এটি কোনও নির্দিষ্ট ভাষার দৃষ্টান্ত ছাড়াই যুক্তি এবং অ্যালগরিদমিক নকশা পদ্ধতির বর্ণনা দেয় কারণ এটি একটি স্বেচ্ছাসেবী ভাষা এবং বর্ণমালার স্বীকৃতিগুলি প্রকাশ করে। এটি দ্রুত পঠনযোগ্য, তবে প্রতিটি অংশের জন্য কী প্রয়োজন তা আপনাকে ধারণা দেয়।
ফ্রান্সিস কুগার 11

70

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

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

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

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


55

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

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

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



আমি "মডার্ন কম্পাইলার বাস্তবায়ন" এর সি সংস্করণটির বিরুদ্ধে দৃ strongly়ভাবে সুপারিশ করছি, সি এর কারণে এটি নিম্ন-স্তরের বিশদ দ্বারা পঙ্গু হয়ে গেছে It জাভা 1 ম খুব ভাল নয় কারণ এর ওও ডিজাইনটি দুর্বল, জাভা 2 য় সংস্করণটি বাঘের ভাষা সম্পর্কে আর নেই। সুতরাং আমি দৃ strongly়ভাবে এমএলকে সুপারিশ করছি: এটি বোঝার জন্য এমএল তে সাবলীল হওয়া প্রয়োজন হয় না। এমএল অবশ্যই কাজের জন্য উপযুক্ত।
আকিম

44

আমি ড্রাগন বুকের রেফারেন্সের সাথে একমত হই; আইএমও, এটি সংকলক নির্মাণের চূড়ান্ত গাইড। যদিও কিছু কঠিন তত্ত্বের জন্য প্রস্তুত হন।

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

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


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

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

27

"চলুন একটি সংকলক তৈরি করুন" দুর্দান্ত, তবে এটি কিছুটা পুরানো। (আমি বলছি না যে এটি এটিকে কিছুটা কম বৈধ করে তোলে makes)

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


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

23

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

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

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


প্রথম লিঙ্কটি মারা গেছে।
লিন

20

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


আপনার যদি খুব বেশি সময় না থাকে তবে একটি সংকলক লিখবেন না।
ইঙ্গো

17

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

এই FAQ আপনাকে সহায়তা করবে এবং এই টিউটোরিয়ালটি বেশ কার্যকর মনে হচ্ছে।


17

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

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

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

আপনার ভাষার জন্য পার্সার লেখা সত্যিই কঠিন হতে পারে তবে এটি আপনার ব্যাকরণের উপর নির্ভর করে। সুতরাং আমি আপনার ব্যাকরণটি সহজ রাখার পরামর্শ দিচ্ছি (সি ++ এর বিপরীতে); এটির জন্য একটি ভাল উদাহরণ এলআইএসপি।

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

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

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

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

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


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


11

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


10

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

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


10

: আপনি LLVM ব্যবহার করতে ইচ্ছুক হন, তাহলে এই চেক আউট http://llvm.org/docs/tutorial/ । এটি আপনাকে এলএলভিএমের কাঠামো ব্যবহার করে স্ক্র্যাচ থেকে কীভাবে একটি সংকলক লিখতে হবে তা শিখায় এবং বিষয় সম্পর্কে আপনার কোনও জ্ঞান আছে বলে ধরে নেওয়া যায় না।

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


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

10

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

আমি ওবেরন বইটি যুক্ত করব যা একটি আশ্চর্যজনক দ্রুত এবং সাধারণ ওবেরন সংকলক প্রকল্প ওবেরনের পুরো উত্স ধারণ করে ।

বিকল্প পাঠ


10

আমার মনে আছে এই প্রশ্নটি প্রায় সাত বছর আগে যখন আমি প্রোগ্রামিংয়ের পরিবর্তে নতুন ছিলাম asking

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

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

অনেক লোক আরও বলে যে সংকলক লেখার বোকামি এবং অর্থহীন। ঠিক আছে, সংকলক বিকাশ কার্যকর হওয়ার বিভিন্ন কারণ রয়েছে:

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

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

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

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


9

"... চলুন একটি সংকলক তৈরি করি ..."

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

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

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

একবার পাঠে দক্ষতা অর্জনের পরে আরও উন্নত " ড্রাগন বুক " চেষ্টা করুন ~ http://en.wikedia.org/wiki/Dragon_book


9

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

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

মূল ডকটির পিডিএফ কপি। নেট ফ্রেমওয়ার্কের জন্য একটি ভাষা সংকলক তৈরি করুন

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

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

অন্যান্য বিষয় রয়েছে, তবে আপনি ন্যায়সঙ্গত হন।

এটি সি-তে লিখিত লোকেদের উদ্দেশ্যে লক্ষ্য করা যায় (পুরো জাভা নয়)

আছে HTH

হাড়


"বেশ জাভা নয়" এর অর্থ কী?
হেজাজমান 21

হাহা, দুঃখিত, আমি এর জন্য এটি লিখেছিলাম। নেট, যা মূলত জাভা এর মতো to দুজনেই স্টাইলে জেআইটি। :)
dbones

8

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

সি কোড উত্পন্ন করা এইচটিএমএল তৈরি করার মতোই সহজ (কেবল প্রিন্ট বা সমমানের ব্যবহার করুন) যা সি পার্সার বা এইচটিএমএল পার্সার লেখার চেয়ে অনেক সহজ।


8

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

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

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

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

পের ব্রিঞ্চ হ্যানসেন প্রেন্টাইস-হল 1985 আইএসবিএন 0-13-083098-4 দ্বারা "পাসচাল সংকলকগুলিতে ব্রিঞ্চ হ্যানসেন"

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

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

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


8

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

আমার উর-স্কিম ওয়েব পৃষ্ঠায় একটি সংকলক লিখতে শেখার ক্ষেত্রে আমি কী দরকারী মনে করেছি তার সম্পর্কে আরও স্টাফ রয়েছে ।


8
  1. এটি একটি বিস্তৃত বিষয়। এই বিষয়টিকে অবমূল্যায়ন করবেন না। এবং আমার বক্তব্যকে অবমূল্যায়ন করবেন না।
  2. শুনেছি অনুসন্ধানের পাশাপাশি ড্রাগন বুক শুরু করার জায়গা (??) Place :) অনুসন্ধানে আরও ভাল হন, শেষ পর্যন্ত এটি আপনার জীবন হবে।
  3. আপনার নিজস্ব প্রোগ্রামিং ভাষা তৈরি করা একেবারে একটি ভাল অনুশীলন! তবে জেনে রাখুন শেষ পর্যন্ত এটি কখনই ব্যবহারিক উদ্দেশ্যে ব্যবহার করা হবে না। এর ব্যতিক্রম কয়েকটি এবং খুব দূরত্বের মধ্যে।

4
আপনি যদি ড্রাগন বইটি না পড়ে থাকেন। দয়া করে এটি সুপারিশ করবেন না। আসলে, আপনি কি কখনও একটি সংকলক প্রয়োগ করেছেন?

হ্যাঁ, নামটি থেকে বোঝা যায়, ড্রাগন বুকটি একটি দৈত্য। খুব গভীর, তবে তবুও একটি খুব ভাল সংস্থান। আমি এটি নতুনদের জন্য সুপারিশ করব না, যদিও ...
জাচারি মারে

2
@ নীল: আপনি আমাকে গুগল করেননি, আছে তো? হাঃ হাঃ হাঃ. blog.280z28.org তবে না, আমি বইটি পড়িনি।
স্যাম হারওয়েল

আমি বর্তমানে এটি (ড্রাগনের বই) পড়ছি এবং একই সাথে লেক্স / ইয়্যাকও বইটি বেশ ভালভাবে খুঁজে পাচ্ছি। ব্যক্তিগতভাবে।
সাইমন পিলগ্রিম

1
সত্যি বলতে, আমি এটি "আমি শুনি ..." দিয়ে উপস্থাপন করেছি। :) # 1 এবং # 3 পয়েন্টগুলি আমার কাছে অনুভূত হওয়া অত্যন্ত চূড়ান্ত বলে মনে হয় তবে প্রায়শই উল্লেখ করা হয় না।
স্যাম হারওয়েল

8

ফ্রেজার এবং হ্যানসনের এলসিসি সংকলক ( উইকিপিডিয়া ) ( প্রকল্পের হোমপেজ ) ( github.com/drh/lcc ) তাদের "A retargetable C Compiler: Design and বাস্তবায়ন" বইয়ে বর্ণনা করা হয়েছে। এটি বেশ পঠনযোগ্য এবং কোড তৈরির উদ্দেশ্যে পুরো সংকলকটি ব্যাখ্যা করে।


এটি একটি দুর্দান্ত উত্স ধন্যবাদ মত মনে হচ্ছে ।
গিডিওন

7

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


7

দুঃখিত, এটি স্পেনীয় ভাষায়, তবে এটি আর্জেন্টিনায় "কমপ্লেডোরস ই ইন্টারপ্রাইটিস" (সংকলক এবং দোভাষী) নামে একটি কোর্সের গ্রন্থপঞ্জি ography

কোর্সটি আনুষ্ঠানিক ভাষা তত্ত্ব থেকে সংকলক নির্মাণ পর্যন্ত ছিল এবং এগুলি আপনার অন্তত একটি সাধারণ সংকলক তৈরি করতে হবে topics

  • সি
    এ্যালেন আই। হলব প্রেন্টাইস

    -হলের মধ্যে সংকলকগুলির ডিজাইন 1990।

  • Compiladores। তেওরিয়া ওয়াই কনস্ট্রাক্সিয়েন।
    সান্চেস লোরকা, এফজে, গ্যালান পাসকুল, সি। সম্পাদকীয় পারানিনফো। 1988।

  • সংকলক নির্মাণ।
    নিক্লাস রাইথ

    অ্যাডিসন-ওয়েসলি। 1996।

  • লেঙ্গুয়াজেস, গ্রামেসিটাস ও অ্যাটম্যাটাস। আন enfoque práctico।
    পেড্রো ইসাসি ভিয়্যুয়েলা, পালোমা মার্তেনেজ ফার্নান্দেজ, ড্যানিয়েল বোররাজো মিলান। অ্যাডিসন-ওয়েসলি আইবারোইমেরিকানা (এস্পেনিয়া)। 1997।

  • সংকলক নকশা শিল্প। তত্ত্ব এবং অনুশীলন।
    টমাস পিটম্যান, জেমস পিটারস।

    প্রেন্টিস হল. 1992।

  • অবজেক্ট-ওরিয়েন্টেড সংকলক নির্মাণ।
    জিম হোমস
    প্রেন্টিস হল, এনগলউড ক্লিফস, এনজে 1995

  • Compiladores। কনসেপ্টো ফান্ডামেন্টালস।
    বি। টুফেল, এস। শ্মিড্ট, টি। টুফেল।

    অ্যাডিসন-ওয়েসলি আইবারোইমারিকানা। 1995।

  • অটোমাতা থিওরি, ভাষা এবং গণনার পরিচিতি।

    জন ই। হপকক্রফ্ট। জেফ্রেফ ডি। উলমান।
    অ্যাডিসন ওয়েসলে। 1979।

  • আনুষ্ঠানিক ভাষার পরিচিতি Int
    গাইরিজ ই। রাভেস

    ম্যাক গ্রু হিল 1983।

  • কৌশল পার্সিং। একটি ব্যবহারিক গাইড।
    ডিক গ্রুন, সেরিল জ্যাকবস
    ইমপ্রেস পোর লস অটোরেস। 1995
    http://www.cs.vu.nl/~dick/PTAPG.html

  • ইয়াক: তবুও আরেকটি সংকলক-সংকলক।
    স্টিফেন সি জনসন
    কম্পিউটিং বিজ্ঞান প্রযুক্তিগত প্রতিবেদন Nº 32, 1975. বেল ল্যাবরেটরিজ। মারে হিল, নিউ
    জার্সি।

  • লেক্স: একটি লেক্সিকাল বিশ্লেষক জেনারেটর।
    এমই লেস্ক, ই। শ্মিড্ট। গণনা বিজ্ঞানের প্রযুক্তিগত প্রতিবেদন Nº 39, 1975. বেল ল্যাবরেটরিজ। মারে হিল, নিউ জার্সি।

  • লেক্স এবং ইয়্যাক
    জন আর লেভিন, টনি ম্যাসন, ডগ ব্রাউন।
    ও'রেলি এবং অ্যাসোসিয়েটস। 1995।

  • গণনা তত্ত্বের উপাদানসমূহ।
    হ্যারি আর লুইস, ক্রিস্টোস এইচ। পাপাদিমিট্রিও। সেগুন্ডা এডিকিন প্রেন্টিস হল. 1998।

  • আন আলগোরিটমো এফিসিয়েন্ট প্যারা লা কনস্ট্র্রুসিওন ডেল গ্রাফো ডি ডিপেন্ডেনসিয়ার ডি কন্ট্রোল।
    সালভাদোর ভি। কাভাদিনী।
    ট্রাবাজো ফাইনাল ডি গ্রাডো প্যারা অবটেনার এল টিটুলো দে ইনজেনিয়েরো এন কম্পুটাচিন।
    ফ্যাকুলাটড ডি মেটেমিটিকা অ্যাপলিকাদা। ইউসিএসই 2001


6

কোনও বই নয়, একটি প্রযুক্তিগত কাগজ এবং প্রচুর মজাদার শিখার অভিজ্ঞতা যদি আপনি সংকলক (এবং মেটাকম্পিলার) সম্পর্কে আরও জানতে চান ... এই ওয়েবসাইটটি আপনাকে একটি সম্পূর্ণ স্বনির্ভর সংকলক সিস্টেম তৈরির পথে নিয়ে যায় যা নিজে এবং অন্যান্য ভাষা সংকলন করতে পারে:

টিউটোরিয়াল: মেটাকম্পিলার পার্ট 1

এগুলি সমস্ত 10 পৃষ্ঠার একটি আশ্চর্যজনক সামান্য প্রযুক্তিগত কাগজের উপর ভিত্তি করে:

ভ্যাল শোরে মেটা II: একটি সিনট্যাক্স-ওরিয়েন্টেড সংকলক রাইটিং ল্যাঙ্গুয়েজ

সৎ থেকে godশ্বর 1964 সাল থেকে।

আমি আমার কলেজের দিন থেকেই ওয়েবসাইটের লেখককে জানি, তবে ওয়েবসাইটটির সাথে আমার কিছু করার নেই।


অন্যরা যেমন বলেছে যে, বড় যুক্তি, আমি মনে করি সুশি কোনও কাজ স্নাতকের জন্য একটি চূড়ান্ত কাজ, এটি গণিত, কম্পিউটার বিজ্ঞান এবং এর মতো অনেকগুলি ধারণা জানতে হবে।
ingconti

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

5

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

এটি পড়ুন।

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

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


5

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

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

বিভিন্ন ধরণের সংকলক বর্ণিত হয়েছে তবে আপনি কেবলমাত্র কোর-এর তথাকথিত টেম্পলেট সংকলকটি অনুসরণ করলেও কী কার্যকর ক্রিয়াকলাপটিকে টিক করে তোলে তার একটি দুর্দান্ত ধারণা পাবেন।


5

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

সহজ উদাহরণ

  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 = new BCELifier("MyClass", System.out);
bcelifier.start();

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

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();
}

5

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

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

http://www.ethoberon.ethz.ch/WirthPubl/ProjectOberon.pdf

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

(চিকিত্সা সংকলকগুলিতে তাঁর বইয়ের মতো ব্যাপক নয়)

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


4

এখন পর্যন্ত তালিকার অন্তর্ভুক্ত নয় এই বইটি:

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

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


এটি তালিকায় যুক্ত হয়েছে ধন্যবাদ :)
আন্তোন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.