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