PDA

View Full Version : LL1 بودن



forodo007
سه شنبه 28 دی 1389, 20:43 عصر
سلام میشه بگین چرا وقتی یک گرامر ll1 نیست نمیشه برای اون پارسر بالا به پایین طراحی کرد میشه کامل توضیح دهید

سعیدسعید
چهارشنبه 29 دی 1389, 00:43 صبح
سلام دوست عزیز
اساس کار پارسرهای بالا به پایین این است که از عنصر شروع گرامر شروع می کنند تا رشته مورد نظر را بسازند. یعنی درخت اشتقاق را از بالا به پایین می سازند. به همین خاطر به این گونه پارسرها بالا به پایین گفته می شود. حالا برای ساخت یک پارسر بالا به پایین برای یک گرامر، ان گرامر باید پیشگو باشد و گرامری که LL1 نباشد پیشگو نیست. بنابر این نمی شود برایش پارسر بالا به پایین ساخت.
عواملی که مانع از پیشگو بودن گرامر می شوند:
1- ابهام در گرامر
2- وجود چپ گردی در گرامر
3- وجود فاکتور مشترک
اگر در یک گرامر شرایط فوق برقرار باشد آن گرامر پیشگو نیست و LL1 هم نیست و برای آن نمی توان پارسر بالا به پایین ساخت.
وقتی که گرامر مبهم است در حقیقت برای یک یا بیشتر رشته دو درخت اشتقاق متفاوت وجود دارد. حال اگر یک پارسر قرار باشد که درخت اشتقاق را از بالا بسازد (بالا به پایین) از کدامیک از مسیرها برود؟ یعنی کامپایلر نمی داند که رشته مورد نظر را با استفاده از کدام درخت بسازد؟؟؟ بنابراین برای گرامری که LL1 نباشد پارسر بالا به پایین نمی توان ساخت.


امیدوارم که کمکی کرده باشم. بازهم اگر توضیح بیشتری خواستید خبر بدبد:لبخندساده: