এলআর, এসএলআর এবং এলএলআর পার্সারগুলির মধ্যে পার্থক্য কী?


103

এলআর, এসএলআর এবং এলএলআর পার্সারগুলির মধ্যে আসল পার্থক্য কী? আমি জানি যে এসএলআর এবং এলএএলআর হ'ল এলআর পার্সারগুলির প্রকার, তবে তাদের পার্সিং সারণীর ক্ষেত্রে যতটা আসল পার্থক্য তা কী?

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

উদাহরণস্বরূপ, আমরা কীভাবে ব্যাকরণটি প্রদর্শন করতে পারি

S --> Aa | bAc | dc | bda
A --> d

এলএলআর (1) তবে এসএলআর (1) নয়?


সম্পাদনা (ybungalobill) : এলএলআর এবং এলআরের মধ্যে পার্থক্য কীসের জন্য সন্তোষজনক উত্তর আমি পাইনি। সুতরাং LALR এর টেবিলগুলি আকারে আরও ছোট তবে এটি কেবলমাত্র এলআর ব্যাকরণের একটি উপসেটকে চিনতে পারে। কেউ কি এলএলআর এবং এলআর এর মধ্যে পার্থক্যটি আরও বিস্তারিতভাবে বর্ণনা করতে পারেন? এলএলআর (1) এবং এলআর (1) উত্তরের জন্য যথেষ্ট হবে। তারা উভয়ই 1 টোকেন লুক-ফরোড ব্যবহার করে এবং উভয়ই টেবিল চালিত! তারা কিভাবে আলাদা?


ভাল, এমনকি আমি এ সম্পর্কে একটি সঠিক উত্তর খুঁজছি, এলএলআর (1) হ'ল এলআর (1) এর সামান্য পরিবর্তন, যেখানে টেবিলের আকার হ্রাস করা হয়েছে যাতে আমরা মেমরির ব্যবহার হ্রাস করতে পারি ...
ভিক্যাহিক্স

উত্তর:


64

এসএলআর, এলএলআর এবং এলআর পার্সারগুলি একই টেবিলে চালিত যন্ত্রপাতিটি ব্যবহার করে প্রয়োগ করা যেতে পারে।

মৌলিকভাবে, পার্সিং অ্যালগরিদম পরবর্তী ইনপুট টোকেন টি সংগ্রহ করে এবং কী করবেন তা সিদ্ধান্ত নেওয়ার জন্য বর্তমান রাষ্ট্র এস (এবং সম্পর্কিত লুকোহেড, জিওটিও এবং হ্রাস সারণী) এর সাথে পরামর্শ করে:

  • শিফট: যদি বর্তমান টেবিলটি টোকেন টি-তে শিফটকে বলে, জোড় (এস, টি) পার্স স্ট্যাকের উপর চাপ দেওয়া হয়, গোটো টেবিলটি বর্তমান টোকেনের জন্য যা বলে তা অনুযায়ী রাষ্ট্র পরিবর্তন করা হয় (যেমন, গোটো (টি) ), অন্য ইনপুট টোকেন টি 'এনেছে, এবং প্রক্রিয়াটি পুনরাবৃত্তি করে
  • হ্রাস: প্রতিটি রাজ্যে 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 কিছুই ভেঙে বা খারাপ হয়ে উঠেনি, জিএলআর এখনও বিড়ালের মিয়া]]


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

5
জিসিসি বাইসন == এলএলআর ব্যবহার করে সি ++ পার্স করতেন। কেসগুলি হ্যান্ডেল করতে আপনি সর্বদা আপনার পার্সার বাড়তি গু দিয়ে বাড়িয়ে তুলতে পারেন (চেহারা, এটি হ'ল এটি-টাইপনেম) যা আপনাকে বেদনা দেয়। প্রশ্ন "একটি হ্যাক কত বেদনাদায়ক?" জিসিসির পক্ষে এটি বেশ বেদনাদায়ক ছিল, তবে তারা এটি কার্যকর করেছে। এর অর্থ এই নয় যে এটি প্রস্তাবিত, যা জিএলআর ব্যবহার সম্পর্কে আমার বক্তব্য।
ইরা

আমি বুঝতে পারি না কীভাবে জিএলআর ব্যবহার করা আপনাকে সি ++ সহ সহায়তা করে। যদি আপনি জানেন না যে কোনও কিছু টাইপের নাম কিনা তবে আপনি কেবল পার্সার করতে জানেন না x * y;- জিএলআর ব্যবহার করে কীভাবে এটির সাথে সহায়তা করে?
ব্যবহারকারী541686

2
মুল বক্তব্যটি হ'ল জিএলআর পার্সার দুটি সংশ্লেষ তৈরি করবে ("দ্ব্যর্থক সাবট্রি (গুলি)" হিসাবে একটি সংহত পার্স "ট্রি" (সত্যই ডিএজি)। আপনি কোন সাবরি রাখতে চান তা পরে সমাধান করতে পারেন, পরে অন্যটি নিয়ে এসে আপনি সমাধান করতে পারবেন প্রসঙ্গ তথ্য, আমাদের সি ++ পার্সার উল্লেখযোগ্যভাবে এই সমস্যাটির সাথে সম্পর্কিত: এটি সমস্যাটি সমাধান করার চেষ্টা করে না means এর অর্থ আমাদের পার্সিং সহ প্রতীক টেবিল নির্মাণকে জটলাতে হবে না, সুতরাং আমাদের পার্সার এবং সি ++ এর জন্য প্রতীক টেবিল নির্মাণ উভয়ই প্রযোজ্য have স্বতন্ত্রভাবে পরিষ্কার হয় এবং এর ফলে অনেক প্রতিটি নির্মাণ এবং বজায় রাখা।
ইরা ব্যাক্সটার

18

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

বিটিডাব্লু, আমি এখানে আমার এমএলআর (কে) পার্সিং টেবিল অ্যালগরিদম এ সম্পর্কে কয়েকটি বিষয় উল্লেখ করছি

অভিযোজ্য বস্তু

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

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

ত্রুটিটি হ'ল সমস্ত এলআর ব্যাকরণকে এলএলআর টেবিল হিসাবে এনকোড করা যায় না কারণ আরও জটিল ব্যাকরণগুলিতে আরও জটিল লুকোয়াদ রয়েছে, যার ফলে একক একত্রীকরণের পরিবর্তে দুটি বা আরও বেশি রাজ্য তৈরি হয়।

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


3
+1 আমি হোনালি ধারণা পছন্দ করি। আমার জি / এল (এএল) আর পার্সার জেনারেটরটির মধ্যে এরকম কিছুটির বীজ ছিল; এটি ন্যূনতম এলএএলআর মেশিন তৈরি করে, এবং তারপরে আমি এমন রাজ্যগুলিকে বিভক্ত করতে যাচ্ছিলাম যেখানে বিবাদ ছিল, তবে আমি কখনই এর মধ্য দিয়ে যাই নি। পার্স টেবিলের সেটের মতো ন্যূনতম আকারের "এলআর" উত্পাদনের জন্য এটি দুর্দান্ত পদ্ধতির মতো দেখায়। যদিও এটি জিএলআরকে পার্স করতে পারে তার পদে সহায়তা করবে না, এটি জিএলআর বহন করতে পারে এমন সমান্তরাল পার্সের সংখ্যা হ্রাস করতে পারে এবং এটি কার্যকর হবে।
ইরা

12

তবুও অন্য উত্তর (ওয়াইএএ)।

এসএলআর (1), এলএলআর (1) এবং এলআর (1) এর জন্য পার্সিং অ্যালগরিদমগুলি ইরা বাক্সটারের মতোই বলেছে,
তবে, পার্সার-প্রজন্মের অ্যালগরিদমের কারণে পার্সার সারণীগুলি ভিন্ন হতে পারে।

একটি এসএলআর পার্সার জেনারেটর একটি এলআর (0) রাষ্ট্রীয় মেশিন তৈরি করে এবং ব্যাকরণ (FIRST এবং অনুসরণ সেট) থেকে চেহারাগুলি গণনা করে। এটি একটি সরলিকৃত পদ্ধতি এবং বিরোধগুলির প্রতিবেদন করতে পারে যা LR (0) রাষ্ট্রের মেশিনে আসলেই নেই।

একটি এলএলআর পার্সার জেনারেটর একটি এলআর (0) রাষ্ট্রীয় মেশিন তৈরি করে এবং এলআর (0) রাষ্ট্রীয় মেশিন (টার্মিনাল ট্রানজিশনের মাধ্যমে) থেকে চেহারাগুলি গণনা করে। এটি একটি সঠিক পন্থা, তবে মাঝে মধ্যে দ্বন্দ্বের কথা জানায় যা এলআর (1) রাষ্ট্রের মেশিনে বিদ্যমান ছিল না।

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

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

আপনার ব্যাকরণের জন্য যা প্রয়োজন, এলআরএসটিআর 10.0 সি ++ এ এলএলআর (1), এলআর (1), সিএলআর (1) বা এলআর (*) পার্সার তৈরি করতে পারে। এই চিত্রটি দেখুনযা এলআর পার্সারগুলির মধ্যে পার্থক্য দেখায়।

[সম্পূর্ণ প্রকাশ: এলআরএসটিআর আমার পণ্য]


5

ধরুন, কোনও লুকোচুরি ছাড়াই পার্সার আপনার ব্যাকরণের জন্য খুশিতে স্ট্রিংগুলি পার্স করছে।

আপনার প্রদত্ত উদাহরণটি ব্যবহার dcকরে এটি একটি স্ট্রিং জুড়ে আসে , এটি কী করে? এটি কি এটি হ্রাস করে S, কারণ dcএই ব্যাকরণ দ্বারা উত্পাদিত একটি বৈধ স্ট্রিং? বা সম্ভবত আমরা পার্স করার চেষ্টা করছিলাম bdcকারণ এটি কি একটি গ্রহণযোগ্য স্ট্রিং?

মানুষ হিসাবে আমরা জানি উত্তরটি সহজ, আমাদের কেবল মনে রাখা দরকার যে আমরা কেবল পার্স করেছিলাম কিনা b। তবে কম্পিউটারগুলি বোকা :)

যেহেতু কোনও এসএলআর (1) পার্সারের কাছে এলআর (0) এর চেয়ে অতিরিক্ত নজরদারী করার জন্য অতিরিক্ত ক্ষমতা ছিল, আমরা জানি যে কোনও পরিমাণ লুকোহেড এই ক্ষেত্রে আমাদের কী করতে হবে তা আমাদের বলতে পারে না; পরিবর্তে, আমাদের আমাদের অতীতের দিকে ফিরে তাকাতে হবে। এইভাবে উদ্ধার করার জন্য ক্যানোনিকাল এলআর পার্সার আসে। এটি অতীতের প্রসঙ্গে মনে পড়ে।

যেভাবে এটি এই প্রসঙ্গে মনে রাখে তা হ'ল এটি নিজেকে শৃঙ্খলাবদ্ধ করে তোলে যে যখনই এটির মুখোমুখি হবে, তখন এটি একটি সম্ভাবনা হিসাবে bপাঠের পথে হাঁটতে শুরু করবে bdc। সুতরাং এটি যখন এটি দেখায় dএটি জানে যে এটি ইতিমধ্যে কোনও পথে হাঁটছে কিনা। সুতরাং একটি সিএলআর (1) পার্সার এমন কিছু করতে পারে যা এসএলআর (1) পার্সার পারে না!

তবে এখন যেহেতু আমাদের এতগুলি পথ নির্ধারণ করতে হয়েছিল, তাই মেশিনের রাজ্যগুলি খুব বড় হয়ে যায়!

সুতরাং আমরা একই সন্ধানী পথগুলিকে একীভূত করি, তবে যেমনটি প্রত্যাশিত এটি বিভ্রান্তির সমস্যার জন্ম দিতে পারে। তবে, আকার হ্রাস করার জন্য আমরা ঝুঁকি নিতে ইচ্ছুক।

এটি আপনার এলএলআর (1) পার্সার।


এখন এটি কীভাবে আলগোরিদিমভাবে করবেন।

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


এটি সঠিক নয়

4

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

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

এলআর পার্সারগুলি এই কারণে আরও শক্তিশালী। তবে, এলআর পার্সিং টেবিলগুলি অত্যন্ত বড় হতে পারে।

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

এলএলআর পার্সারগুলি এলআর পার্সারগুলির তুলনায় কিছুটা কম শক্তিশালী তবে এসএলআর পার্সারগুলির তুলনায় আরও শক্তিশালী। ওয়াইএসিসি এবং অন্যান্য অন্যান্য পার্সার জেনারেটর এই কারণে LALR ব্যবহার করার প্রবণতা রয়েছে।

PS ব্রিভিটি, এসএলআর, এলএলআর এবং এলআর এর উপরে আসলে এসএলআর (1), এলএলআর (1), এবং এলআর (1) এর অর্থ, সুতরাং একটি টোকেন লুকোয়াইড অন্তর্ভুক্ত।


4

এসএলআর পার্সারগুলি এলএলআর (1) পার্সার দ্বারা সনাক্তযোগ্য ব্যাকরণগুলির একটি উপযুক্ত উপসেটকে সনাক্ত করে, যা এলআর (1) পার্সার দ্বারা সনাক্তযোগ্য ব্যাকরণগুলির একটি উপযুক্ত উপসেটকে স্বীকৃতি দেয়।

এগুলির প্রত্যেকটি একটি রাষ্ট্রীয় মেশিন হিসাবে নির্মিত হয়েছে, প্রতিটি রাজ্য ব্যাকরণের উত্পাদনের নিয়মের কিছু সেট (এবং প্রতিটিটিতে অবস্থান) উপস্থাপন করে কারণ এটি ইনপুট পার্স করছে।

ড্রাগন বইয়ের একটি LALR (1) ব্যাকরণ যে এসএলআর নয় উদাহরণ হল:

S → L = R | R
L → * R | id
R → L

এই ব্যাকরণের জন্য এখানে একটি রাষ্ট্র রয়েছে:

S → L•= R
R → L•

সম্ভব প্রযোজনার প্রতিটি পার্সার অবস্থান নির্দেশিত হয়। এটি শেষ পর্যন্ত পৌঁছানোর এবং হ্রাস করার চেষ্টা না করা পর্যন্ত এটি আসলে কোন প্রযোজনা তা জানে না।

এখানে, পার্সারটি হয় একটি স্থানান্তরিত =বা হ্রাস করতে পারে R → L

একটি এসএলআর (ওরফে এলআর (0)) পার্সার নির্ধারণ করে যে এটি পরবর্তী ইনপুট প্রতীকটি অনুসরণ করতে পারে R(যেমন, ব্যাকরণে সমস্ত টার্মিনালের সেট যা অনুসরণ করতে পারে R) এর সেটে রয়েছে কিনা তা পরীক্ষা করে হ্রাস করতে পারে কিনা determine যেহেতু =এই সেটটিতেও রয়েছে, এসএলআর পার্সার একটি শিফ্ট-হ্রাস বিরোধের মুখোমুখি।

তবে, একটি এলএএলআর (1) পার্সার সমস্ত টার্মিনালগুলির সেট ব্যবহার করবে যা এই নির্দিষ্ট উত্পাদন আর এর অনুসরণ করতে পারে যা কেবলমাত্র $(অর্থাত্ ইনপুটটির শেষ)। সুতরাং, কোন বিরোধ নেই।

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

আপনার উদাহরণে , নিম্নলিখিত এলএলআর (1) রাষ্ট্রটি একটি এসএলআর বাস্তবায়নে শিফট-হ্রাস বিরোধের কারণ:

S → b d•a / $
A → d• / c

প্রতীকটি /হ'ল এলএলআর (1) পার্সারের প্রতিটি উত্পাদনের জন্য অনুসরণ সেট। এসএলআর-এ, অনুসরণ ( A) অন্তর্ভুক্ত থাকে a, যা স্থানান্তরিতও হতে পারে।



-2

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

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