مرتب کنندگان: LL (0) اور LR (0) پارسرز کے مابین کیا فرق ہے؟ کیا ایسی کوئی چیز ہے جیسے ایل ایل (0) تجزیہ کار؟


جواب 1:

ایسا لگتا ہے کہ یہ سوال ایل ایل (0) پارسروں پر مرکوز ہے ، لہذا آئیے ان کی وضاحت کریں۔ ایل ایل (0) پارسر ، پیداوار کے آغاز میں 0 ٹوکن کا استعمال کرتے ہوئے بائیں سے دائیں کو پارس کرتا ہے تاکہ اس بات کا تعین کیا جا سکے کہ کون سی پیداوار لاگو ہوگی۔ اس کا مطلب یہ ہے کہ 0 ٹوکن کیا ہے ، اس کا مطلب یہ ہے کہ پارسر کون سا پروڈکشن لاگو کرنا ہے اس کا تعین کرنے کے لئے متن کو پارس کیا جارہا ہے۔ اس کا مطلب یہ ہے کہ تجزیہ کار کوئی انتخاب نہیں کرسکتے ہیں۔ اس سے پہلے ہی اس کو ٹوکن کے تسلسل کی تجزیہ کرنے سے پہلے ہی اس کا پتہ ہونا چاہئے۔ ٹوکن کی ترتیب کو طے کرنا ضروری ہے ، جس کا مطلب ہے کہ صرف ایک ہی ترتیب ہوسکتا ہے جس کی تجزیہ کار پارس کرے گا۔ اس طرح ، آپ کے پاس ایسا تجزیہ کار ہوسکتا ہے جو "ہیلو ورلڈ!" کو قبول کرتا ہے۔ اس طرح کے گرائمر کے ساتھ:

ہدف: "ہیلو" وائٹ اسپیس "دنیا" تعجب کا نشان؛

نوٹ کریں کہ صرف مختلف حالتوں میں سے یہ ہے کہ لیکر ٹوکن سے کیسے میل کھاتا ہے۔

(میں امید کرتا ہوں کہ نشان عیاں ہے - یہ بنیادی طور پر وہی ایک ہے جس کا میں نے یاک ++ میں استعمال کیا ہے۔ اقتباسات کے نشانات ٹوکن ہیں ، جیسا کہ کوئی شناخت کنندہ نہیں ہے۔)

پارسر ہمیشہ ٹوکن کے عین مطابق ایک جیسے تسلسل کی توقع کرتا ہے۔ اس میں صرف ایک اصول نہیں ہونا چاہئے ، جیسا کہ ہماری پہلی مثال نے کیا تھا۔ یہ اس طرح لگ سکتا تھا۔

مقصد: ہیلو پارٹ وائٹ اسپیس اختتامی حصہ؛

ہیلو حصہ: ہیلو 1؛

ہیلو 1: "ہیلو"؛

آخر حصہ: دنیا کا آخری حصہ۔

دنیا کا حصہ: "دنیا"؛

آخری حصہ: "!"؛

تاہم ، ملاحظہ کریں کہ کس طرح کسی بھی قواعد میں کوئی "یا" (|) آپریٹر نہیں ہے اور غیر نان ٹرمینل میں صرف ایک ہی قاعدہ ہے۔ یہ وہی ہے جو تجزیہ کار کو یہ جاننے کی اجازت دیتا ہے کہ بغیر کسی امتیازی ٹوکن (ٹوکن جس کا انتخاب کرتے ہیں کہ کس طرح پارسر جاتا ہے) کا استعمال کیا جائے ، جو گرائمر ایل ایل (0) بناتا ہے۔

اب ، کیا دوبارہ پیدا ہونے والی پیداوار کو استعمال کرنا ممکن ہے اور ابھی بھی ایل ایل (0) گرائمر موجود ہے؟ جواب "نہیں" ہے۔ آئیے دیکھتے ہیں اگر ہمارے پاس بار بار چلنے والا اصول ہے۔

مقصد: "x" گول "y"؛

یاد رکھنا ، ہمیں صرف غیر ٹرمینل کے مطابق ایک اصول کی اجازت ہے ، اور کوئی "یا" آپریٹرز نہیں۔ اس طرح ، جب ہم ہدف کی تکرار پذیرائی کے لئے پہنچ جاتے ہیں ، ہمیں لازمی طور پر ہمیں ایک ایسے راستے پر لے جانا چاہئے جہاں ہم پھر سے اس بے اعتقاد عبادت کی طرف راغب ہوں گے۔ اپنے آپ کو ثابت کریں ، اس سے کوئی فرق نہیں پڑتا ہے کہ ہم اس درخواست کو کس طرح گھونسلا بناتے ہیں یا یہ کہ تکرار بالواسطہ ہے۔ اس کا نتیجہ ہمیشہ لامحدود لوپ میں آجائے گا۔

لہذا ، ایل ایل (0) گرائمر کو ٹوکن کی ایک محدود فہرست ، بالکل ایک محدود فہرست (ہر بار ایک ہی فہرست) کا تجزیہ کرنا ہوگا۔

ایل آر (0) کے معنی میں فرق نوٹ کریں۔ ایل آر (کے) پارسر کو اجازت دی جاتی ہے کہ وہ کسی بھی پیداوار میں کسی بھی (جتنا زیادہ اسے پسند کرے) ٹوکن استعمال کریں ، اس کے علاوہ سیاق و سباق سے کے ٹو ٹوکن تک جب پروڈکشن اس بات کا تعین کرنے میں کم ہوجاتی ہے کہ آیا اسے کم کرنا چاہئے۔ LR (0) کے معاملے میں ، یہ تعین کرنے کیلئے کوئی اضافی ٹوکن استعمال نہیں کرسکتا ہے کہ آیا اسے کم کرنا چاہئے یا نہیں۔ اس اصول میں ٹوکن کو کم کرنے کی بنیاد پر فیصلہ کرنا آسان ہے۔ یہاں ایک عام LR (0) گرائمر ہے:

مقصد: "x" | "(" گول ")"؛

یہ گرائمر ایک "x" کو پارس کرتا ہے جس کے آس پاس کچھ قوسین ہیں۔ نوٹ کریں کہ یہ "x" ٹوکن اور "(" ٹوکن کا استعمال کرنے کے بارے میں فیصلہ کرسکتا ہے کہ کون سے قاعدہ کو لاگو کیا جائے۔ LR (0) میں 0 کسی اصول کے تحت ٹوکن کے استعمال کو محدود نہیں کرتا ہے ، جیسے LL (0) میں کرتا ہے۔ صرف ایک چیز جس پر یہ پابندی عائد کرتی ہے وہ ہے ٹوکن کا استعمال (سیاق و سباق کے مطابق ، نان ٹرمینل کے کچھ استعمال میں قاعدہ کے بعد) کم کرنے کا فیصلہ کرتے وقت۔ اس گرائمر کو کم کرنے کا فیصلہ کرنے کے لئے کسی تناظر کی ضرورت نہیں ہے ۔پہلے متبادل پر ، یہ دیکھنے سے کم ہوجاتا ہے ایک "x" دوسرے پر "" دیکھنے کے بعد کم ہوجاتا ہے۔ کسی قاعدے کے اندر ٹوکن بالکل اس بات کا تعین کرتے ہیں کہ جب قاعدہ کو کم کرنا چاہئے۔


جواب 2:

ایل ایل (0) پارس کا مطلب ہے کہ وہ بائیں سے دائیں تک ٹوکن ندی پر عملدرآمد کرتے ہیں ، جس میں آگے کی نظر نہیں آرہا ہے۔ نظریاتی طور پر ، ایل ایل (0) پارسر ممکن ہیں ، لیکن یہاں تک کہ اگر وہ موجود ہیں تو ، میں ان کے لئے زیادہ استعمال نہیں دیکھتا ہوں۔ ایل ایل (0) تجزیہ کاروں کو پیش گوئی کرنا ہوگی کہ موجودہ نون ٹرمینل کی بنیاد پر کونسی پروڈکشن کو لاگو کیا جائے گا اور آگے صفر نظر آئے گا۔ اس طرح کے گرائمر میں ، ہر نان ٹرمینل میں صرف ایک ہی پروڈکشن منسلک ہوسکتی ہے اور اس میں کوئی تکرار نہیں ہونی چاہئے۔

ایل آر (0) پارس کا مطلب ہے کہ وہ صفر کے ساتھ دائیں موڑ سے مشتق استعمال کرکے ، بائیں سے دائیں تک ٹوکن ندی پر کارروائی کرتے ہیں۔ اس کا مطلب یہ ہے کہ وہ پارس درخت کو نیچے سے اوپر تک تعمیر کرتے ہیں ، جبکہ ایل ایل (0) پارس پارس درخت کو اوپر سے نیچے تک تعمیر کرتے ہیں۔