কিভাবে একটি খুব বেসিক সংকলক লিখতে হয়


214

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

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

কোনও স্ট্যাটিক পাঠ্যটিকে মেশিনে পঠনযোগ্য ফাইলে রূপান্তর করতে আমি কীভাবে একটি বেসিক সংকলক লিখতে পারি?

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

ব্যবহারিক টিউটোরিয়াল এবং সংস্থানগুলি উপস্থাপন করা অত্যন্ত প্রশংসিত :-)



আপনি কি লেক্স / ফ্লেক্স এবং ইয়্যাক / বাইসন চেষ্টা করেছেন?
mouviciel

15
@ মউভিচিয়েল: সংকলক নির্মাণ সম্পর্কে শেখার পক্ষে এটি ভাল উপায় নয়। এই সরঞ্জামগুলি আপনার জন্য কঠোর পরিশ্রমের একটি উল্লেখযোগ্য পরিমাণে কাজ করে, তাই আপনি কখনই বাস্তবে এটি করেন না এবং এটি কীভাবে হয় তা শিখেন।
ম্যাসন হুইলার

11
@ মজার আকর্ষণীয়ভাবে, আপনার লিঙ্কগুলির মধ্যে প্রথমটি 404 দেয়, যখন দ্বিতীয়টি এখন এই প্রশ্নের সদৃশ হিসাবে চিহ্নিত হয়েছে ।
Ruslan

উত্তর:


326

ইন্ট্রো

একটি সাধারণ সংকলক নিম্নলিখিত পদক্ষেপগুলি করে:

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

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

এর পরে, অবজেক্ট কোড লিঙ্ক করার জন্য প্রস্তুত। বেশিরভাগ নেটিভ-কোড সংকলকগুলি এক্সিকিউটেবল উত্পাদন করতে কোনও লিঙ্কারকে কীভাবে কল করবেন তা জানেন তবে এটি প্রতি সংকলনের পদক্ষেপ নয়। জাভা এবং সি # এর মতো ভাষায় লিঙ্কিং সম্পূর্ণ গতিময় হতে পারে, ভিএম দ্বারা লোড সময়ে করা।

বেসিকগুলি মনে রাখবেন

  • এটাকে সফল কর
  • এটি সুন্দর করুন
  • এটি দক্ষ করুন

এই ক্লাসিক ক্রমটি সমস্ত সফ্টওয়্যার বিকাশের ক্ষেত্রে প্রযোজ্য তবে পুনরাবৃত্তি বহন করে।

ক্রমের প্রথম ধাপে মনোনিবেশ করুন। সম্ভবত কাজ করতে পারে এমন সহজতম জিনিসটি তৈরি করুন।

বই পড়ুন!

আহো এবং ওলম্যান দ্বারা ড্রাগন বুক পড়ুন । এটি ক্লাসিক এবং এটি আজও বেশ কার্যকর।

আধুনিক সংকলক ডিজাইন প্রশংসা করা হয়।

যদি এখনই এই জিনিসগুলি আপনার পক্ষে খুব কঠিন হয় তবে প্রথমে পার্সিংয়ের জন্য কিছু ভূমিকা পড়ুন; সাধারণত পার্সিং লাইব্রেরিতে অন্তর্ভুক্ত এবং উদাহরণ অন্তর্ভুক্ত থাকে।

গ্রাফগুলি, বিশেষত গাছগুলির সাথে কাজ করে আপনি স্বাচ্ছন্দ্য বোধ করেন Make এই জিনিসগুলি হ'ল স্টাফ প্রোগ্রামগুলি লজিক্যাল স্তরে তৈরি।

আপনার ভাষাটি ভালভাবে সংজ্ঞা দিন

আপনি যা যা ইঙ্গিত চান তা ব্যবহার করুন তবে নিশ্চিত করুন যে আপনার ভাষার সম্পূর্ণ এবং ধারাবাহিক বিবরণ রয়েছে। এর মধ্যে বাক্য গঠন এবং শব্দার্থক উভয়ই অন্তর্ভুক্ত।

ভবিষ্যতের সংকলকটির পরীক্ষার কেস হিসাবে আপনার নতুন ভাষায় কোডের স্নিপেটগুলি লেখার এটি এখন সময়।

আপনার প্রিয় ভাষা ব্যবহার করুন

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

প্রয়োজনে বিভিন্ন ভাষায় একটি সংকলকের বিভিন্ন স্তরের লেখা ঠিক আছে।

অনেক পরীক্ষা লিখতে প্রস্তুত

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

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

একটি ভাল পার্সার তৈরি করুন

পার্সার জেনারেটর অনেক । আপনি যা চান বাছুন আপনি স্ক্র্যাচ থেকে নিজের পার্সারও লিখতে পারেন, তবে আপনার ভাষার বাক্য গঠনটি যদি মৃত সহজ হয় তবে তা কেবল তার পক্ষে মূল্যবান ।

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

আপনার পার্সারের আউটপুট একটি বিমূর্ত সিনট্যাক্স ট্রি।

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

একটি শব্দার্থিক যাচাইকারী তৈরি করুন

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

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

আবার লিখুন এবং পরীক্ষার প্রচুর মামলা চালান। তুচ্ছ ঘটনাগুলি স্মার্ট এবং জটিল হিসাবে সমস্যা সমাধানের ক্ষেত্রে অপরিহার্য।

কোড উত্পন্ন

আপনার জানা সবচেয়ে সহজ কৌশলগুলি ব্যবহার করুন। ifএইচটিএমএল টেমপ্লেটের বিপরীতে হালকা-প্যারাম্যাট্রাইজড কোড টেমপ্লেটে কোনও ভাষা নির্মাণের ( বিবৃতি দেওয়ার মতো ) সরাসরি অনুবাদ করা ঠিক হয় ।

আবার, দক্ষতা উপেক্ষা করুন এবং সঠিকতার দিকে মনোনিবেশ করুন।

প্ল্যাটফর্ম-স্বতন্ত্র নিম্ন-স্তরের ভিএম লক্ষ্য করুন

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

আপনার বিকল্পগুলি:

  • এলএলভিএম: সাধারণত এক্স 86 এবং এআরএম এর জন্য দক্ষ মেশিন কোড জেনারেশনের অনুমতি দেয়।
  • সিএলআর: লক্ষ্যগুলি। নেট, বেশিরভাগ x86 / উইন্ডোজ ভিত্তিক; একটি ভাল JIT আছে।
  • জেভিএম: জাভা বিশ্বকে লক্ষ্য করে তোলে, বেশ কয়েকটি মাল্টিপ্লাটফর্ম, একটি ভাল জেআইটি রয়েছে।

অপ্টিমাইজেশন উপেক্ষা করুন

অপ্টিমাইজেশন হার্ড। প্রায় সর্বদা অপ্টিমাইজেশন অকাল হয়। অযোগ্য তবে সঠিক কোড তৈরি করুন। ফলাফলের কোডটি অনুকূলিত করার চেষ্টা করার আগে পুরো ভাষাটি কার্যকর করুন।

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

তাতে কি?

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

আপনার সংকলকটি তৈরি করা একটি প্রোগ্রাম থেকে একটি 'হ্যালো ওয়ার্ল্ড' দেখার চেষ্টা করা উপযুক্ত।


45
এটি আমি এখনও দেখেছি সেরা উত্তরগুলির মধ্যে একটি।
gahooa

11
আমি মনে করি আপনি প্রশ্নের একটি অংশ মিস করেছেন ... ওপি খুব বেসিক সংকলক লিখতে চেয়েছিল । আমি মনে করি আপনি এখানে খুব বেসিক অতিক্রম করেন।
মার্কো ফিসেট

22
@ মার্কো ফিসেট , বিপরীতে, আমি মনে করি এটি একটি অসামান্য উত্তর যা ওপিকে খুব মৌলিক সংকলক কীভাবে করতে হয় তা জানায়, এবং আরও উন্নত পর্যায়গুলি এড়াতে এবং সংজ্ঞায়নের জন্য ফাঁদগুলি নির্দেশ করে।
স্মি

6
পুরো স্ট্যাক এক্সচেঞ্জ মহাবিশ্বে আমি এটি দেখেছি এমন সেরা উত্তরগুলির মধ্যে একটি। যশ!
আন্দ্রে টেরা

3
আপনার সংকলকটি তৈরি করা একটি প্রোগ্রাম থেকে একটি 'হ্যালো ওয়ার্ল্ড' দেখার চেষ্টা করা উপযুক্ত হতে পারে। - আসলে
slier

27

জ্যাক ক্রেনশোর লেটস কমপাইলার তৈরি করুন , অসমাপ্ত অবস্থায় এটি একটি বিশিষ্টভাবে পঠনযোগ্য ভূমিকা এবং টিউটোরিয়াল।

Nicklaus Wirth এর কম্পাইলার নির্মাণ সহজ কম্পাইলার নির্মাণ বুনিয়াদি একটি খুব ভাল পাঠ্যপুস্তক হয়। তিনি টপ-ডাউন পুনরাবৃত্তীয় বংশদ্ভূত দিকে মনোনিবেশ করেন, যা এর মুখোমুখি হয়, এটি লেক্স / ইয়্যাক বা ফ্লেক্স / বাইসনের চেয়ে অনেক সহজ। তাঁর গ্রুপটি যে মূল পাস্কল সংকলকটি লিখেছিল তা এইভাবে করা হয়েছিল।

অন্যান্য ব্যক্তিরা ড্রাগনের বিভিন্ন বইয়ের কথা উল্লেখ করেছেন।


1
পাস্কাল সম্পর্কে একটি সুন্দর জিনিস হ'ল এটি ব্যবহারের আগে সমস্ত কিছু সংজ্ঞায়িত করা বা ঘোষণা করতে হয়। সুতরাং এটি একটি পাসে সংকলন করা যায়। টার্বো পাস্কাল ৩.০ এর একটি উদাহরণ, এবং ইন্টার্নালগুলি সম্পর্কে এখানে প্রচুর ডকুমেন্টেশন রয়েছে ।
tcrosley

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

ব্যবহারের আগে বাধ্যতামূলক ঘোষণা ALGOL এ ফিরে আসে। ফোরট্রানের মতোই ডিফল্ট ধরণের বিধি বিধানের পরামর্শ দেওয়ার চেষ্টা করার সময় টনি হোয়ারের কানে কান আটকে গেল ALGOL কমিটি। নাম এবং ডিফল্ট নিয়মগুলিতে টাইপোগ্রাফিক ত্রুটিগুলি আকর্ষণীয় বাগ তৈরি করার কারণে তারা এটি তৈরি করতে পারে এমন সমস্যাগুলি সম্পর্কে তারা ইতিমধ্যে জানত।
জন আর স্ট্রোহম

1
এখানে মূল লেখক নিজে বই একটি আপডেট এবং সমাপ্ত সংস্করণ stack.nl/~marcov/compiler.pdf অনুগ্রহ পূর্বক আপনার উত্তর সম্পাদনা এবং এই :) যোগ
সনেট

16

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


7
তবে তারপরে, একবার আপনার বিএফ সংকলক প্রস্তুত হয়ে গেলে, আপনাকে এতে নিজের কোডটি লিখতে হবে :(
500 - অভ্যন্তরীণ সার্ভার ত্রুটি

@ 500-অভ্যন্তরীণ সার্ভারেরর সি সাবসেট পদ্ধতিটি ব্যবহার করুন
ওয়ার্ল্ড ইঞ্জিনিয়ার

12

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

  • ক। এক্সিকিউটেবল কোড লিঙ্কিং এবং লোড হচ্ছে

  • B ইংরেজী বর্ণমালার দ্বিতীয় অক্ষর. সিওএফএফ এবং পিই ফর্ম্যাটগুলি (উইন্ডোগুলির জন্য), বিকল্পভাবে ELF ফর্ম্যাটটি বুঝতে (লিনাক্সের জন্য)

  • গ। .কম ফাইল ফর্ম্যাটগুলি বুঝতে (পিই এর চেয়ে সহজ)
  • ঘ। সমবেতকারীদের বুঝুন
  • ঙ। সংকলকগুলিতে সংকলক এবং কোড জেনারেশন ইঞ্জিন বুঝতে।

বলা অনেক কঠিন। আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি সি ++ তে রোলাল্ড ম্যাক দ্বারা সংকলক এবং দোভাষীটি পড়বেন। বিকল্পভাবে, ক্রেণশো দ্বারা "একটি সংকলক তৈরি করতে দিন" ঠিক আছে।

আপনি যদি এটি না করতে চান তবে আপনি নিজের ভিএম লিখতে এবং সেই ভিএমকে লক্ষ্য করে একটি কোড জেনারেটর লিখতে পারেন।

টিপস: ফ্লেক্স এবং বাইসন FIRST শিখুন। তারপরে আপনার নিজের সংকলক / ভিএম তৈরি করতে যান।

শুভকামনা!


7
আমি মনে করি এলএলভিএমকে টার্গেট করা এবং আসল মেশিন কোডটি নয় আজ পাওয়া সবচেয়ে সহজ উপায় is
9000

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

2
এটি চালানোর জন্য এমআইপিএস এবং স্পিম ব্যবহার সম্পর্কে কী ? নাকি মিক্স ?

@ মিশেলটি আমি এমআইপিএস ব্যবহার করি নি তবে আমি নিশ্চিত এটি ভাল হবে।
অনিকেত ইনজে

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

10

সাধারণ সংকলকটির জন্য DIY পদ্ধতির চেহারাটি দেখতে পারা যায় (কমপক্ষে এটি আমার ইউনি প্রকল্পটি কেমন দেখায়):

  1. ভাষার ব্যাকরণ সংজ্ঞায়িত করুন। প্রসঙ্গ-বিনামূল্যে।
  2. যদি আপনার ব্যাকরণটি এখনও এলএল (1) না হয় তবে এখনই এটি করুন। দ্রষ্টব্য, কিছু সাধারণ নিয়ম যা সাধারণ সিএফ ব্যাকরণে ঠিক আছে বলে মনে হচ্ছে কুৎসিত হতে পারে। সম্ভবত আপনার ভাষা খুব জটিল ...
  3. লেক্সার লিখুন যা পাঠ্যের প্রবাহকে টোকেনে (শব্দ, সংখ্যা, আক্ষরিক) কেটে দেয়।
  4. আপনার ব্যাকরণের জন্য শীর্ষ-ডাউন রিকার্সিভ ডেসেন্ট পার্সার লিখুন, যা ইনপুট গ্রহণ করে বা প্রত্যাখ্যান করে।
  5. আপনার পার্সারে সিনট্যাক্স ট্রি জেনারেশন যুক্ত করুন।
  6. সিনট্যাক্স ট্রি থেকে মেশিন কোড জেনারেটর লিখুন।
  7. লাভ এবং বিয়ার, বিকল্পভাবে আপনি কীভাবে স্মার্ট পার্সার করবেন বা আরও ভাল কোড তৈরি করবেন তা ভাবতে শুরু করতে পারেন।

প্রতিটি পদক্ষেপের বিশদ বর্ণনায় প্রচুর সাহিত্য থাকতে হবে।


The ম পয়েন্টটি ওপি সম্পর্কে যা জিজ্ঞাসা করছে।
ফ্লোরিয়ান মার্জাইন

7
1-5 অপ্রাসঙ্গিক এবং এতো ঘনিষ্ঠ মনোযোগ প্রাপ্য নয়। 6 সবচেয়ে আকর্ষণীয় অংশ। দুর্ভাগ্যক্রমে, বেশিরভাগ বই কুখ্যাত ড্রাগন বইয়ের পরে একই প্যাটার্নটি অনুসরণ করে, পার্সিং এবং কোড ছেড়ে যাওয়ার দিকে খুব বেশি মনোযোগ দেয়, সুযোগের বাইরে চলে যায়।
এসকে-যুক্তি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.