এসএলআর, এলএলআর এবং এলআর পার্সারগুলি একই টেবিলে চালিত যন্ত্রপাতিটি ব্যবহার করে প্রয়োগ করা যেতে পারে।
মৌলিকভাবে, পার্সিং অ্যালগরিদম পরবর্তী ইনপুট টোকেন টি সংগ্রহ করে এবং কী করবেন তা সিদ্ধান্ত নেওয়ার জন্য বর্তমান রাষ্ট্র এস (এবং সম্পর্কিত লুকোহেড, জিওটিও এবং হ্রাস সারণী) এর সাথে পরামর্শ করে:
- শিফট: যদি বর্তমান টেবিলটি টোকেন টি-তে শিফটকে বলে, জোড় (এস, টি) পার্স স্ট্যাকের উপর চাপ দেওয়া হয়, গোটো টেবিলটি বর্তমান টোকেনের জন্য যা বলে তা অনুযায়ী রাষ্ট্র পরিবর্তন করা হয় (যেমন, গোটো (টি) ), অন্য ইনপুট টোকেন টি 'এনেছে, এবং প্রক্রিয়াটি পুনরাবৃত্তি করে
- হ্রাস: প্রতিটি রাজ্যে 0, 1 বা অনেকগুলি সম্ভাব্য হ্রাস রয়েছে যা রাজ্যে সংঘটিত হতে পারে। পার্সার যদি এলআর বা এলএলআর হয় তবে রাষ্ট্রের জন্য সমস্ত বৈধ হ্রাসের জন্য লোকহ্যাড সেটগুলির বিরুদ্ধে টোকেনটি চেক করা হবে। যদি টোকেনটি ব্যাকরণ নিয়মের জন্য জি = আর 1 আর 2 হ্রাস করার জন্য একটি লুকের সেটটি মেলে .. আরএন, একটি স্ট্যাক হ্রাস এবং শিফট ঘটে: জি এর জন্য শব্দার্থক ক্রিয়া বলা হয়, স্ট্যাকটি পপড এন (আরএন থেকে) বার, জোড় ( এস, জি) স্ট্যাকের দিকে ঠেলে দেওয়া হয়, নতুন রাষ্ট্র এস 'গোটো (জি) তে সেট করা হয়, এবং চক্র একই টোকেন টি দিয়ে পুনরাবৃত্তি করে If যদি পার্সারটি এসএলআর পার্সার হয় তবে সর্বাধিক এক হ্রাস করার নিয়ম রয়েছে রাষ্ট্র এবং সুতরাং হ্রাসের ক্রিয়াটি কোন হ্রাস প্রযোজ্য তা অনুসন্ধান না করে অন্ধভাবে করা যেতে পারে। এটা তোলে যদি জানেন যে একটি SLR পার্সার জন্য দরকারী হয়হ্রাস বা না; এটি সহজেই বলা যায় যে প্রতিটি রাজ্য এর সাথে সম্পর্কিত কমানোর সংখ্যা স্পষ্টভাবে রেকর্ড করে এবং যেভাবেই অনুশীলনে L (AL) আর সংস্করণগুলির জন্য সেই গণনাটি প্রয়োজন।
- ত্রুটি: শিফট বা REDUCE উভয়ই যদি সম্ভব না হয় তবে একটি সিনট্যাক্স ত্রুটি ঘোষণা করা হবে।
সুতরাং, যদি তারা সমস্ত একই যন্ত্রপাতি ব্যবহার করে তবে লাভ কী?
এসএলআর-এ বর্ণিত মান হ'ল এটি বাস্তবায়নের সরলতা; আপনাকে লুহ্যাড সেটগুলি পরীক্ষা করে নেওয়ার সম্ভাব্য হ্রাসের মাধ্যমে স্ক্যান করতে হবে না কারণ সেখানে সর্বাধিক একটি রয়েছে এবং রাজ্য থেকে কোনও শিফট প্রস্থান না করা হলে এটিই কেবলমাত্র কার্যকর ব্যবস্থা। কোন হ্রাস প্রযোজ্য তা রাজ্যের সাথে বিশেষভাবে সংযুক্ত করা যেতে পারে, তাই এসএলআর পার্সিং মেশিনারিটিকে এটির জন্য অনুসন্ধান করতে হবে না। অনুশীলনে L (AL) আর পার্সারগুলি কার্যকরভাবে বৃহত্তর ল্যাঙ্গোজের সেট পরিচালনা করে এবং বাস্তবায়নের জন্য এতটা অতিরিক্ত কাজ হয় যে কোনও একাডেমিক অনুশীলন ব্যতীত কেউ এসএলআর প্রয়োগ করে না।
LALR এবং LR এর মধ্যে পার্থক্যটি টেবিল জেনারেটরের সাথে সম্পর্কিত do। এলআর পার্সার জেনারেটর নির্দিষ্ট রাজ্যগুলি থেকে সমস্ত সম্ভাব্য হ্রাস এবং তাদের সুনির্দিষ্ট চেহারা নির্ধারণের ট্র্যাক রাখে; আপনি এমন রাজ্যগুলির সাথে সমাপ্ত হন যেখানে প্রতিটি হ্রাস তার বাম প্রসঙ্গ থেকে সেট করে দেখতে সঠিক হ্যান্ডহেডের সাথে সম্পর্কিত। এটি বরং রাজ্যের বড় সেট তৈরি করে sets এলএআরআর পার্সার জেনারেটরগুলি কমানোর জন্য জিওটিও টেবিল এবং লুকহেড সেটগুলি সামঞ্জস্যপূর্ণ এবং বিরোধ না করলে রাজ্যগুলিকে একত্রিত করতে ইচ্ছুক; এটি এলআর আলাদা করতে পারে এমন নির্দিষ্ট প্রতীক ক্রমগুলি পৃথক করতে না পারার মূল্যে, রাজ্যের বেশ কয়েকটি সংখ্যক রাজ্য উত্পাদন করে। সুতরাং, এলআর পার্সারগুলি এলএলআর পার্সারগুলির তুলনায় বৃহত্তর ভাষার সংকলন পার্স করতে পারে তবে তার অনেক বড় পার্সার সারণী রয়েছে। অনুশীলনে, কেউ এলএলআর ব্যাকরণ খুঁজে পেতে পারেন যা লক্ষ্যমাত্রার ল্যাঙ্গোজের কাছাকাছি পর্যায়ে রয়েছে যে রাষ্ট্রের মেশিনের আকারটি অপ্টিমাইজ করার মতো;
সুতরাং: তিনটিই একই যন্ত্রপাতি ব্যবহার করে। এসএলআর হ'ল "সহজ" এই অর্থে যে আপনি একটি সামান্য বিস্তৃত যন্ত্রপাতি উপেক্ষা করতে পারেন তবে এটি কেবল সমস্যার পক্ষে নয়। এলআর ল্যাঙ্গোজের বিস্তৃত সেটকে পার্স করে তবে রাষ্ট্রীয় টেবিলগুলি বেশ বড় হতে থাকে। এটি LALR ব্যবহারিক পছন্দ হিসাবে ছেড়ে দেয়।
এই সমস্ত কথা বলার পরেও , এটি জেনে রাখা উচিত যে জিএলআর পার্সারগুলি আরও জটিল যন্ত্রপাতি ব্যবহার করে ঠিক যে কোনও প্রসঙ্গের মুক্ত ভাষা পার্স করতে পারে তবে ঠিক একই টেবিলগুলি (এলএলআর দ্বারা ব্যবহৃত ছোট সংস্করণ সহ)। এর অর্থ হ'ল জিএলআর এলআর, এলএলআর এবং এসএলআরের চেয়ে কঠোরভাবে শক্তিশালী; বেশ আপনি যদি একটি স্ট্যান্ডার্ড বিএনএফ ব্যাকরণ লিখতে পারেন তবে জিএলআর এটি অনুসারে পার্স করবে। যন্ত্রের পার্থক্য হ'ল জিওটিও টেবিল এবং লিকহেড সেটগুলির মধ্যে দ্বন্দ্ব থাকলে জিএলআর একাধিক পার্স চেষ্টা করতে রাজি থাকে। (জিএলআর কীভাবে এটি দক্ষতার সাথে কাজ করে নিছক নিখুঁত প্রতিভা [আমার নয়] তবে এই এসও পোস্টে খাপ খায় না)।
আমার জন্য এটি একটি অত্যন্ত দরকারী সত্য। আমি প্রোগ্রাম বিশ্লেষক এবং কোড ট্রান্সফর্মার এবং পার্সার তৈরি করি তবে "উদ্বেগজনক" নয়; আকর্ষণীয় কাজ হ'ল পার্সড রেজাল্টটি নিয়ে আপনি যা করেন এবং তাই পোস্ট-পার্সিংয়ের কাজটি করার দিকে ফোকাস। জিএলআর ব্যবহারের অর্থ এলএলআর ব্যবহারের যোগ্য ফর্মটিতে যেতে ব্যাকরণ হ্যাক করার তুলনায় আমি তুলনামূলকভাবে সহজেই কার্যকর ব্যাকরণ তৈরি করতে পারি। সি ++ বা ফোর্টরান এর মতো নন-একাডেমিক ল্যাঙ্গুয়েজগুলিতে ডিল করার চেষ্টা করার সময় এটি অনেকটাই গুরুত্বপূর্ণ, যেখানে পুরো ভাষাটি ভালভাবে পরিচালনা করার জন্য আপনার আক্ষরিক অর্থে কয়েক হাজার নিয়ম প্রয়োজন এবং আপনি ব্যাকরণের নিয়মগুলি হ্যাক করার চেষ্টা করে আপনার জীবন ব্যয় করতে চান না LALR (বা এমনকি LR) এর সীমাবদ্ধতাগুলি পূরণ করুন meet
এক ধরণের বিখ্যাত উদাহরণ হিসাবে, সি ++ কে পার্স করা অত্যন্ত কঠিন বলে মনে করা হয় ... ছেলেরা এলএলআর পার্সিং করে। সি ++ সি ++ রেফারেন্স ম্যানুয়ালটির পিছনে প্রদত্ত বিধিগুলি ব্যবহার করে জিএলআর যন্ত্রপাতি ব্যবহার করে পার্স করা সহজ ward (আমার কাছে ঠিক এই জাতীয় পার্সার রয়েছে এবং এটি কেবল ভ্যানিলা সি ++ নয়, বিভিন্ন বিক্রেতাদের উপভাষাগুলিও পরিচালনা করে This এটি কেবল অনুশীলনে সম্ভব কারণ আমরা একটি জিএলআর পার্সার, আইএমএইচও ব্যবহার করছি)।
[নভেম্বর ২০১১ সম্পাদনা করুন: আমরা সমস্ত সি ++ 11 হ্যান্ডেল করার জন্য আমাদের পার্সারটিকে প্রসারিত করেছি। জিএলআর এটি করা অনেক সহজ করে দিয়েছে। সম্পাদনা আগস্ট 2014: এখন সমস্ত সি ++ 17 পরিচালনা করছে ling কিছুই ভেঙে বা খারাপ হয়ে উঠেনি, জিএলআর এখনও বিড়ালের মিয়া]]