26
ی ح را ط رها ل ی ا پ م کا414-40 دا ام خ ه ی ب6

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

  • Upload
    holland

  • View
    54

  • Download
    1

Embed Size (px)

DESCRIPTION

به نام خدا. طراحی کامپایلرها 414-40. 6. تحلیل نحوی پایین به بالا. تحلیل نحوی « انتقال-کاهش » کاهش یک رشته به نماد شروع گرامر در هر گام یک زیررشته‌ی مشخص (از چپ به راست) با سمت راست یکی از قاعده‌ها منطبق، و با سمت چپ همان قاعده جای‌گزین می‌شود اشتقاق راست‌گرد ( Rightmost ):. 3. - PowerPoint PPT Presentation

Citation preview

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

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

به نام خدا

6

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

o« انتقال-کاهشتحلیل نحوی»oکاهش یک رشته به نماد شروع گرامرo در هر گام یک زیررشته ی مشخص )از چپ

به راست( با سمت راست یکی از قاعده ها منطبق، و با سمت چپ همان قاعده

جای گزین می شود

o( اشتقاق راست گردRightmost:)

تحلیل نحوی پایین به باال

1

1 S → a A B e

3-2 A → A b c | b

4 B → d

a b b c d e

a A b c d e

a A d e

a A B e

S

32

41

S a A B e a A d e a A b c d e a b b c d e1 4 2 3rm rm rm rm

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

o دستگیره ی یک رشته، زیررشته ای از آناست که با سمت راست یکی از قواعد

کاهش آن به سمت چپ وانطباق دارد، قاعده، بخشی از معکوس یک انبساط

راست استo:به شکل رسمی تر

یک »عبارت« زیررشته ای از یک فرم جمله ای است کهدقیقاM از یک غیرپایانه مشتق شده باشد

یک عبارت ساده عبارتی است که در یک گام ایجادشده باشد

دستگیره، عبارت ساده ی است که در یک فرم جمله ایراست ظاهر شود

MمثًالA → β دستگیره ای برایα β x( است x رشته ای از پایانه هاست( اگر:

یک فرم جمله ای می تواند دستگیره های متفاوتیداشته باشد

اما فرم جمله ای راست گرد یک گرامر نامبهم، یکدستگیره یکتا دارد )هرچند چندین زیررشته ممکن

است دستگیره به نظر آیند(

(1دستگیره ها )

2

S α A x α β xrm rm

*

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

o 1مثال:

o:به این ترتیب(S )→ a A B e دستگیره ای برای a A B eاست

(B )→ d دستگیره ای برای a A d eاست

(A )→ A b c دستگیره ای برای a A b c d eاست

(A )→ b دستگیره ای برای a b b c d eاست

(2دستگیره ها )

3

S → a A B e

A → A b c | b

B → d

S a A B e a A d e a A b c d e a b b c d erm rm rm rm

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

o 2مثال:

oa A b c d e را در نظر بگیرید )فرم جمله ای

راست (. آیا

[A → b, a A b c d eیک دستگیره است؟ ]:اگر چنین باشد باید داشته باشیم

اما به هیچ وجه امکان ندارد در هیچ مرحله ای به دوA

است.منفیمتوالی برسیم. بنابراین پاسخ سوال باال

(3دستگیره ها )

4

S → a A B e

A → A b c | b

B → d

S … a A A b c d e a A b c d erm rm rm

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

o 3مثال:

oa A b c d e را در نظر بگیرید )فرم جمله ای

راست گرد(. آیا

[B → d, a A b c d eیک دستگیره است؟ ]:اگر چنین باشد باید داشته باشیم

پس می خواهیمa A b c B e:را به دست آوریم

.اما این یک فرم جمله ای راست گرد نیست

(4دستگیره ها )

5

S → a A B e

A → A b c | b

B → d

S … a A b c B e a A b c d erm rm rm

S a A B e a A b c B e?rm

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

o چالش اصلی: یافتن دستگیره در یک فرم

جمله ای داده شده

o ایده ی کلی تحلیل نحوی انتقال-کاهش به

کمک انباره:(1 در »انتقال«، نشانه های ورودی روی انباره قرار )

می گیرند، تا زمانی که یک دستگیره روی انباره یافت

شود

(2 در »کاهش«، دستگیره با غیرپایانه ی مربوط )

جای گزین می شود

(3 پذیرش ورودی زمانی میسر خواهد بود که )

نشانه های ورودی تمام شوند، و تنها نماد شروع گرامر

در انباره باقی مانده باشد

(4 در صورت بروز خطا، مدیر خطا فراخوانی )

می شود

( پیشوند معتبرViable Prefix پیشوندی از یک :)

فرم جمله ای راست است که روی انباره ی

یک تحلیلگر نحوی انتقال-کاهش ظاهر

می شود

تحلیل نحوی انتقال-کاهش با ( 1انباره )

6

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

oاگر گرامر مبهم باشد چه؟

o:در Mمثًال

o رشته یid + id * id از طریق دو انبساط

راست متفاوت می تواند به دست آید

تحلیل نحوی انتقال-کاهش با ( 2انباره )

7

E → E + E

| E * E

| ( E )

| id

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

o:مثال

تحلیل نحوی انتقال-کاهش با ( 3انباره )

8

E → E + E

| E * E

| ( E )

| id

انباره ورودی مًالحظات

$ id + id * id $ انتقال

$id +id * id $ Eکاهش از طریق → id

$E +id * id $ انتقال

$E + id * id $ انتقال

$E + id *id $ Eکاهش از طریق → id

$E + E Eهم کاهش از طریق

→ E + E و هم انتقال می تواند رخ دهد.

بنابراین می گوییم انتقال- تداخل»

« اتفاق افتاده کاهشاست.

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

o تداخل ها )که در صورت مبهم بودن گرامر رخ

می دهند( یا از نوع »انتقال-کاهش« اند یا از

نوع »کاهش-کاهش«

o:مثال دیگری از تداخل انتقال-کاهش

(1تداخل ها )

9

stmt → if expr then stmt

| if expr then stmt else stmt

| other

انباره ورودی مًالحظات

if … then else… -تداخل انتقالکاهش

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

o:مثالی از تداخل کاهش-کاهش

رشته ی ورودیA(I,J) را در نظر بگیرید. رشته ی

خواهد بود.id(id,id)نشانه های متناظر آن

بار انتقال، ورودی و انباره به صورت زیر در 3بعد از

خواهند آمد:

از کدام قاعده )پنجم یا هفتم( تداخل کاهش-کاهش :

باید استفاده کنیم؟ )در واقع انتخاب درست وابسته

یک آرایه است یا یک تابع(Aاست به این که

(2تداخل ها )

10

stmt → id ( parameter-list ) | expr := expr

parameter-list → parameter-list, parameter | parameter

parameter → id

expr-list → expr-list, expr | expr

expr → id | id ( expr-list )

id ( id , id انباره( ورودی

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

oحذف تداخل هاoیک راه حل، تغییر گرامر است

مشابه کاری که در روی کرد تحلیل نحوی باال به پایین، •

انجام دادیمLL(1)برای تبدیل یک گرامر به

o در غیر این صورت، همانطور که بعدا خواهیم دید، با

این تداخل ها، پس از شناسایی آن ها، بهتر می توان

برخورد کرد

حتی ممکن است سبب شود تحلیلگر نحوی کاراتری به •

دست آید

(3تداخل ها )

11

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

o:مشکًالتی که تا این جا به آن ها برخوردیممشخص کردن دستگیره ها

)حذف تداخل ها )در صورت وجود

گرامرهای عملگر: دسته ای از گرامرها که

مشخص کردن دستگیره ها و مواجهه با تداخل ها در

آن ها ساده است

oسمت راست هیچ یک از گرامرهای عملگر :

نیست و دو غیرپایانه ی پشت سر εقواعد

:Mهم ندارد؛ مثًال

.مبهم اند Mاین گرامرها معموال

تحلیل نحوی تقدم عملگر (Operator Precedence)

12

E → E - E | E + E | E * E | E / E | E ^ E | - E | ( E ) | id

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

o ،ایده ی اولیه: بین هر دو پایانه ی گرامر

تعریف .=. و .< و >. رابطه هایی به شکل

می کنیمa <. b به این معنی است که a از b داردکم تری تقدم

a .=. b به این معنی است که تقدم a با b استبرابر

a .> b به این معنی است که a از b داردبیش تری تقدم

مثًالM فرض کنید که تعریف کنیم * .< + یا به طور مشابه •

* .< +

o ،در هر مرحله از تحلیل نحوی به این روش

دستگیره های مختلفی ممکن است وجود

داشته باشند. برای یافتن دستگیره ی صحیح،

از روابط >. و .< و .=. استفاده می کنیم

)دستگیره ای را انتخاب می کنیم که این

روابط را رعایت کند(

(2تحلیل نحوی تقدم عملگر )

13

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

o چه طور از روابط گفته شده استفاده

می کنیم؟

o هدف، مشخص کردن و جداسازی دستگیره ی

یک فرم جمله ای راست استدستگیره را مشخص می کند .< انتهای ، و>. ابتدا

و .=. در میان این دو ظاهر می شود

o از آن جا که در سمت راست هیچ یک از

قواعد، دو غیرپایانه ی پشت سر هم وجود

ندارد، شکل کلی فرم جمله ای به این

صورت خواهد بود:

ها غیرپایانه، یا رشته های βiکه در آن

(εتهی اند )

(3تحلیل نحوی تقدم عملگر )

14

β0 a1 β1 a2 β2 … an βn

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

o ،در هر مرحله از تحلیل نحوی، تحلیلگرa

یعنی باالترین پایانه ی روی انباره )باالترین

bعنصر، یا یکی مانده به باالترین عنصر( و

یعنی نشانه ی جاری را در نظر می گیرد: اگرa .=. b آن گاه ،bرا به انباره انتقال می دهد

اگرa <. b ،آن گاه ابتدا >. را روی انباره قرار می دهد ،

را به انباره منتقل می کندbو سپس

اگرa >. b آن گاه باالترین >. را در انباره می یابد و ،

عناصر بین آن )عًالمت اخیر(، و باالترین عنصر انباره

را )به همراه غیرپایانه ی زیر >. در صورت وجود( به

عنوان دستگیره در نظر می گیرد، و آن ها را از روی

انباره برمی دارد. سپس یک غیرپایانه نوعی )مثًال

عًالمت شروع گرامر( را روی انباره قرار می دهد

دستگیره حذف شده بایستی با سمت راست یکی از

قواعد به صورت ضعیف تطبیق کند )یعنی کافیست که

پایانه ها و فقط محل غیرپایانه ها تطبیق کند(

(4تحلیل نحوی تقدم عملگر )

15

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

o:مثال

(5تحلیل نحوی تقدم عملگر )

16

انباره ورودی مًالحظات

$ id + id * id $ .< $id

.< $id +id * id $ id+ >.

$E +id * id $ + .< $

$E .< + id * id $ .< +id

$E <. + <. id *id $ id* >.

$E <. + E *id $ * .< +

$E <. + E .< * id $ .< *id

$E <. + E <. * <. id $ id >. $

$E <. + E <. * E $ >. *$

$E <. + E $ >. +$

$E $ پذیرش

+ * ( ) id $

+ .> <. <. .> <. .>

* .> .> <. .> <. .>

( <. <. <. .=. <.

) .> .> .> .>

id .> .> .> .>

$ <. <. <. <. .=.

جدول تحلیل

2-1 E → E + T | T

4-3 T → T * F | F

6-5 F → ( E ) | id

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

oساخت جدول تحلیل

(6تحلیل نحوی تقدم عملگر )

17

{ a | A + a α یا A + B a α }=FirstTerm(A)

{ a | A + α a یا A + α a B }=LastTerm(A)

U → α a b β U → α a B b βa .=. b

U → α a B β b FirstTerm(B)a <. b

U → α B b β a LastTerm(B)a .> b

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

oمثال

(7تحلیل نحوی تقدم عملگر )

18

{ +, *, id, ( }=FirstTerm(E)

{ *, id, ( }=FirstTerm(T)

{ id, ( }=FirstTerm(F)

{ +, *, id, ) }=LastTerm(E)

{ *, id, ) }=LastTerm(T)

{ id, ) }=LastTerm(F)

2-1 E → E + T | T

4-3 T → T * F | F

6-5 F → ( E ) | id

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

o رابطه هادر مقابل توابع تقدمهرگاه a <. b آن گاه ،f(a) < g(b)

هرگاه a .=. b آن گاه ،f(a) = g(b)

هرگاه a .> b آن گاه ،f(a) > g(b)

(8تحلیل نحوی تقدم عملگر )

19

+ - * / ( ) id $

f 2 2 4 4 4 0 6 6 0

g 1 1 3 3 5 5 0 5 0

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

oساخت توابع تقدم

(9تحلیل نحوی تقدم عملگر )

20

+ * id $

f 2 4 4 0

g 1 3 5 0

g id

f *

g +

f $

f id

g *

f +

g $

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

oمدیریت خطا در حین کاهش فرض کنیدa b E c از روی انباره برداشته شده، اما

سمت راست هیچ قاعده ای با آن نمی خوان�د

بود، باید پیامی به این a E cاگر سمت راست قاعده ای •

« غیرمجاز استx در خط bوجود مضمون نمایش دهیم: »

بود، باید پیامی به این a b E d cاگر سمت راست قاعده ای •

« پیدا نشدx در خط dمضمون نمایش دهیم: »

بود، باید پیامی به این a b cاگر سمت راست قاعده ای •

« غیرمجاز استx در خط Eوجود مضمون نمایش دهیم: »

ف یک مفهوم در نحو زبان است که آن را با E)که معر�

نشان می دهیم(Eغیرپایانه ی

(10تحلیل نحوی تقدم عملگر )

21

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

oمدیریت خطاهای انتقال-کاهشe1

زمانی که کل عبارت پیدا نشده است••idرا به ورودی اضافه می کنیم « را نمایش می دهیمعملوند پیدا نشدپیام »•

e2زمانی که عبارت با پرانتز بسته آغاز می شود•پرانتز بسته را از ورودی حذف می کنیم•« را نمایش یک پرانتز بسته اضافی دیده شدپیام »•

می دهیمe3

یا پرانتز بسته بیایدid یا پرانتز باز، بعد از idزمانی که •+ را به ورودی اضافه می کنیم•« را نمایش می دهیمعملگر پیدا نشدپیام »•

e4زمانی که عبارت با پرانتز باز پایان می یابد•پرانتز باز را از روی انباره برمی داریم•« را نمایش می دهیمپرانتز بسته پیدا نشدعبارت »•

(11تحلیل نحوی تقدم عملگر )

22

id ( ) $

id e3 e3 .> .>

( <. <. .=. e4

) e3 e3 .> .>

$ <. <. e2 e1

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

oاستخراج رابطه های تقدم از جدول تحلیل

(12تحلیل نحوی تقدم عملگر )

23

E

TE +

FT *

id

+ <. *

* <. id

2-1 E → E + T | T

4-3 T → T * F | F

6-5 F → ( E ) | id

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

oاستخراج رابطه های تقدم از جدول تحلیل

(13تحلیل نحوی تقدم عملگر )

24

E

T

FT *

* .> *

*.>id

2-1 E → E + T | T

4-3 T → T * F | F

6-5 F → ( E ) | id

FT *

F

id

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

oمزایا و کاستی ها

پیاده سازی آسان

جدول تحلیل کوچک

قدرت بیان ضعیف )به این دلیل که دو غیرپایانه ی پشت

سر هم را مجاز

نمی داند(

دقت نه چندان خوب )بعضی از خطاهای نحوی به خاطر

محدودیت روی

غیرپایانه ها(

o روش »عملگر ساده« شکلی از روش

»تقدم عملگر« است که این کاستی ها را

ندارد

(14تحلیل نحوی تقدم عملگر )

25

+

+

-

-