1 / 22

طراحی کامپایلرها 414-40

به نام خدا. طراحی کامپایلرها 414-40. 7. تحلیلگرهای نحوی LR (1). قوی‌ترین روش تحلیل نحوی انتقال-کاهش (که کارا هم باشد): تحلیل نحوی LR جالب توجه است، زیرا: تحلیل نحوی LR کلی‌ترین روش تحلیل نحوی انتقال-کاهش، بدون عقب‌گرد است (که ضمناً کارا هم هست)

ismael
Download Presentation

طراحی کامپایلرها 414-40

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. به نام خدا طراحی کامپایلرها 414-40 7

  2. تحلیلگرهای نحوی LR (1) • قوی‌ترین روش تحلیل نحوی انتقال-کاهش (که کارا هم باشد): • تحلیل نحوی LR جالب توجه است، زیرا: • تحلیل نحوی LR کلی‌ترین روش تحلیل نحوی انتقال-کاهش، بدون عقب‌گرد است (که ضمناً کارا هم هست) • مجموعه‌ی زبان‌هایی (گرامرهایی) که به کمک روش LR قابل تحلیل نحوی‌اند، زیرمجموعه‌ی سره‌ی زبان‌هایی (گرامرهایی) است که به کمک تحلیلگرهای نحوی پیش‌گو (مثلاً LL(1)) قابل تحلیل‌اند • تحلیلگر نحوی LR خطاها را در زودترین زمان ممکنی که با توجه به پویش چپ به راست میسر است، کشف می‌کند LR (k) پویش چپ به راست اشتقاق راست‌گرد k نشانه‌ی بعدی ورودی (اگر 1 k = باشد، k را نمی‌نوینسد) گرامرهای LR(1) گرامرهای LL(1) 1

  3. تحلیلگرهای نحوی LR (2) • تحلیلگرهای نحوی LR: • گروه بزرگی از گرامرها را پوشش می‌دهند • SLR (Simple LR): تحلیلگر نحوی LR ساده • LR: کلی‌ترین تحلیلگر نحوی LR • LALR(Look-Ahead LR): تحلیلگر نحوی LR میانی (متوسط) • SLR، LR، و LALR مثل هم کار می‌کنند (الگوریتم تحلیل نحوی آن‌ها یکسان است) و تفاوت‌شان تنها در جدول تحلیل است 2

  4. الگوریتم تحلیل نحوی LR (1) انباره a1 … ai … an $ ورودی Sm Xm الگوریتم تحلیل نحوی LR Sm-1 خروجی Xm-1 . جدول اعمال (Action Table) جدول Goto (Goto Table) . S1 X1 S0 3

  5. الگوریتم تحلیل نحوی LR (2) • یک پیکربندی تحلیل نحوی LR: • Sm و ai، قدم بعدی تحلیلگر را با رجوع به جدول تحلیل مشخص می‌کنند (انباره در ابتدا فقط حاوی S0است) • یک پیکربندی تحلیل نحوی LR فرم جمله‌ای راست‌گرد را نشان می‌دهد: • X1 … Xmai ai+1 … an $ ( ) S0 X1 S1 ... Xm Sm ai ai+1 … an $ انباره باقی‌مانده‌ی ورودی 4

  6. عمل‌های تحلیلگر نحوی LR (1) • (1) انتقال s: ورودی بعدی را به همراه حالت s، روی انباره قرار می‌دهد • ( S0 X1 S1 … Xm Sm, ai ai+1 … an $ ) → (S0 X1 S1 … Xm Smai s, ai+1 … an $ ) • (2) کاهش A → β (یا کاهش n، که n شماره‌ی قاعده است): • برداشتن (=r) |β|×2 عنصر از روی انباره • قرار دادن A و s روی انباره، به طوری که s = goto[sm-r, A] • ( S0 X1 S1 … Xm Sm, ai ai+1 … an $ ) → (S0 X1 S1 … Xm-rSm-r A s, ai… an $ ) • خروجی، قاعده‌ی A → β • (3) پذیرش: تحلیل نحوی با موفقیت به اتمام می‌رسد • (4) خطا: تحلیلگر نحوی یک خطا را تشخیص می‌دهد (خانه‌ای خالی در جدول تحلیل) 5

  7. عمل‌های تحلیلگر نحوی LR (2) • عمل کاهش • برداشتن (=r) |β|×2 عنصر از روی انباره؛ فرض کنید β = Y1 Y2 … Yr • قرار دادن A و s روی انباره، به طوری که s = goto[Sm-r, A] • ( S0 X1 S1 … Xm-rSm-rY1 Sm-r … Yr Sm, ai ai+1 … an $ ) → • (S0 X1 S1 … Xm-rSm-rA s, ai… an $ ) • در حقیقت، Y1 Y2 … Yr یک دستگیره است • X1 … Xm-rA ai … an $ X1 … XmY1 … Yrai ai+1 … an $ 6

  8. جدول تحلیل SLR • مثال: 7

  9. عمل‌های یک تحلیلگر نحوی (S)LR • مثال: 8

  10. ساخت جدول تحلیل (1) • آیتم LR(0) • یک آیتم LR(0) از گرامر G، قاعده‌ای از G است که در جایی از سمت راست آن، «نقطه‌»ای گذاشته‌ایم • مثلاً اگر داشته باشیم: A → a B b ، آیتم‌های LR(0) ممکن، این‌ها هستند: • مجموعه‌ی آیتم‌های LR(0) حالت‌های جدول‌ اعمال و Goto را تشکیل می‌دهند • مجموعه‌ای از مجموعه‌های آیتم‌های LR(0) (موسوم به «مجموعه‌ی کانونی LR(0)») مبنایی برای ساخت تحلیلگرهای نحوی SLR است • گرامر افزوده • گرامر افزوده‌ی G’، همان گرامر G است که به آن قاعده‌ی S’ → Sافزوده‌ایم که در آن S’ نماد جدید شروع است 9

  11. ساخت جدول تحلیل (2) • عمل بستار (Closure) • اگر I مجموعه‌ای از آیتم‌های LR(0) برای گرامر G باشد، بستار I، مجموعه‌ای از آیتم‌های LR(0) است که از I با توجه به این دو قانون ساخته شده است: • (1) در ابتدا، هر آیتم LR(0) در I به بستار I اضافه می‌شود • (2) اگر A → α● B βدر بستار I باشد و B → γنیز یکی از قاعده‌های گرامر G، در آن صورت، B → ●γنیز در بستار I خواهد بود (این قانون را تا جایی اعمال می‌کنیم که دیگر آیتم LR(0) جدیدی به بستار I اضافه نشود) 10

  12. ساخت جدول تحلیل (3) • مثال: آیتم‌های هسته (kernel) } = بستار {E’ → ● E} { 11

  13. ساخت جدول تحلیل (4) • تابع Goto • Goto(I, X) بستار مجموعه‌ی همه‌ی آیتم‌های به شکل A → α X ●βاست که A → α● X βعضو I باشد • تعریف بالا را شهوداً می‌توان به این صورت بیان کرد که Goto(I, X)، مجموعه‌ی همه‌ی آیتم‌هایی است که (در صورت دیده شدن X) از I «قابل دسترسی‌اند» • مثلاً فرض کنید باشد، در این صورت: = I { E’ → E ●, E → E ● + T } = Goto(I, +) { E → E + ● T, T → ● T * F, T → ● F, F → ● ( E ), F → ● id } 12

  14. ساخت جدول تحلیل (5) • برای ساخت جدول تحلیل SLRگرامر G، باید مجموعه‌ی کانونی LR(0) گرامر G’ را تشکیل دهیم • الگوریتم: • C بستار { S’ → ● S } است • گام‌های زیر را تا جایی که دیگر مجموعه‌ی جدیدی از آیتم‌های LR(0) به C اضافه نشود، تکرار کن • به ازای هر I در C، و هر نماد گرامر X • اگر مجموعه‌ی Goto(I, X) تهی نباشد، و در C نیز نباشد، • اعضای Goto(I, X) را به C اضافه کن • تابع Goto یک DFA روی مجموعه‌های موجود در C است 13

  15. ساخت جدول تحلیل (6) I1 • مثال: I6 I2 I9 I0 I3 I10 I4 I7 I11 I8 I5 14

  16. ساخت جدول تحلیل (7) I1 • DFA مثال قبلی: + E T I6 * I9 I7 T I2 F I3 ( I0 * I4 F I3 I7 id I5 ( F E I4 I8 I10 T ( I2 I4 F id id I5 I3 ( ) I4 I11 id + I5 I6 I5 15

  17. ساخت جدول تحلیل (8) • ساختن جدول تحلیل SLR (برای گرامر افزوده‌ی G’): • (1) ساختن مجموعه‌ی کانونی از مجموعه‌های آیتم‌های LR(0) گرامر G’ • {I0, …, In} ← C • (2) ساختن جدول اعمال به این ترتیب: • اگر a یک پایانه، A → α● a βعضو Ii، و Goto(Ii, a) = Ij باشد، آن‌گاه action[i, a]را shift j قرار می‌دهیم • اگر A → α●عضو Ii باشد، آن‌گاه به ازای همه‌ی a  Follow(A)،action[i, a]را reduce A → αقرار می‌دهیم (در صورتی که A ≠ S’) • اگر S’ → S ●عضو Ii باشد، آن‌گاه action[i, $] را accept قرار می‌دهیم • اگر با استفاده از قانون‌های بالا تداخلی به وجود آید، گرامر SLR(1) نیست • (3) ساختن جدول Goto به این ترتیب: • به ازای همه‌ی غیرپایانه‌ها (مثلاً A)، اگر Goto(Ii, A) = Ij باشد، Goto[i, A] را j قرار می‌دهیم • (4) همه‌ی خانه‌هایی که بعد از این مراحل خالی مانده‌اند، معرف خطا هستند • (5) حالت اولیه‌ی تحلیلگر، شامل S’ → ● S است 16

  18. ساخت جدول تحلیل (9) • مثال: 17

  19. گرامر SLR(1) • تحلیلگر نحوی LR ای که از جدول تحلیل SLR(1) برای گرامر G استفاده کند، تحلیلگر نحوی SLR(1) گرامر G نامیده می‌شود • اگر گرامری، جدول تحلیل SLR(1) داشته باشد، گرامر SLR(1) (یا مختصراً گرامر SLR) نامیده می‌شود • گرامرهای SLR مبهم نیستند، اما هر گرامر نامبهم، الزاماً SLR نیست 18

  20. تداخل‌ها (1) • اگر در حالتی باشیم که ندانیم برای یک پایانه، باید عمل انتقال را انجام دهیم، یا عمل کاهش را، می‌گوییم «تداخل انتقال-کاهش» رخ داده است • اگر در حالتی باشیم که ندانیم برای یک پایانه، کدام‌یک از چند قاعده‌ی ممکن را باید برای کاهش به کار ببریم، می‌گوییم «تداخل کاهش-کاهش» رخ داده است • اگر جدول تحلیل SLR یک گرامر دارای تداخل باشد، آن گرامر SLR نیست 19

  21. تداخل‌ها (2) I1 • مثال: I0 I2 = Follow(R) { =, $ } = I3 I6 reduce R → L shift 6 I4 تداخل انتقال-کاهش I7 I8 I5 I9 20

  22. تداخل‌ها (3) • مثال: I0 = Follow(A) { a, b } = Follow(B) { a, b } a b reduce A → ε reduce B → ε reduce A → ε reduce B → ε تداخل کاهش-کاهش تداخل کاهش-کاهش 21

More Related