Upload
holland
View
54
Download
1
Embed Size (px)
DESCRIPTION
به نام خدا. طراحی کامپایلرها 414-40. 6. تحلیل نحوی پایین به بالا. تحلیل نحوی « انتقال-کاهش » کاهش یک رشته به نماد شروع گرامر در هر گام یک زیررشتهی مشخص (از چپ به راست) با سمت راست یکی از قاعدهها منطبق، و با سمت چپ همان قاعده جایگزین میشود اشتقاق راستگرد ( Rightmost ):. 3. - PowerPoint PPT Presentation
Citation preview
طراحیکامپایلرها414-40
به نام خدا
6
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
o دستگیره ی یک رشته، زیررشته ای از آناست که با سمت راست یکی از قواعد
کاهش آن به سمت چپ وانطباق دارد، قاعده، بخشی از معکوس یک انبساط
راست استo:به شکل رسمی تر
یک »عبارت« زیررشته ای از یک فرم جمله ای است کهدقیقاM از یک غیرپایانه مشتق شده باشد
یک عبارت ساده عبارتی است که در یک گام ایجادشده باشد
دستگیره، عبارت ساده ی است که در یک فرم جمله ایراست ظاهر شود
MمثًالA → β دستگیره ای برایα β x( است x رشته ای از پایانه هاست( اگر:
یک فرم جمله ای می تواند دستگیره های متفاوتیداشته باشد
اما فرم جمله ای راست گرد یک گرامر نامبهم، یکدستگیره یکتا دارد )هرچند چندین زیررشته ممکن
است دستگیره به نظر آیند(
(1دستگیره ها )
2
S α A x α β xrm rm
*
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
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
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
o چالش اصلی: یافتن دستگیره در یک فرم
جمله ای داده شده
o ایده ی کلی تحلیل نحوی انتقال-کاهش به
کمک انباره:(1 در »انتقال«، نشانه های ورودی روی انباره قرار )
می گیرند، تا زمانی که یک دستگیره روی انباره یافت
شود
(2 در »کاهش«، دستگیره با غیرپایانه ی مربوط )
جای گزین می شود
(3 پذیرش ورودی زمانی میسر خواهد بود که )
نشانه های ورودی تمام شوند، و تنها نماد شروع گرامر
در انباره باقی مانده باشد
(4 در صورت بروز خطا، مدیر خطا فراخوانی )
می شود
( پیشوند معتبرViable Prefix پیشوندی از یک :)
فرم جمله ای راست است که روی انباره ی
یک تحلیلگر نحوی انتقال-کاهش ظاهر
می شود
تحلیل نحوی انتقال-کاهش با ( 1انباره )
6
oاگر گرامر مبهم باشد چه؟
o:در Mمثًال
o رشته یid + id * id از طریق دو انبساط
راست متفاوت می تواند به دست آید
تحلیل نحوی انتقال-کاهش با ( 2انباره )
7
E → E + E
| E * E
| ( E )
| id
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 و هم انتقال می تواند رخ دهد.
بنابراین می گوییم انتقال- تداخل»
« اتفاق افتاده کاهشاست.
o تداخل ها )که در صورت مبهم بودن گرامر رخ
می دهند( یا از نوع »انتقال-کاهش« اند یا از
نوع »کاهش-کاهش«
o:مثال دیگری از تداخل انتقال-کاهش
(1تداخل ها )
9
stmt → if expr then stmt
| if expr then stmt else stmt
| other
انباره ورودی مًالحظات
if … then else… -تداخل انتقالکاهش
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 انباره( ورودی
oحذف تداخل هاoیک راه حل، تغییر گرامر است
مشابه کاری که در روی کرد تحلیل نحوی باال به پایین، •
انجام دادیمLL(1)برای تبدیل یک گرامر به
o در غیر این صورت، همانطور که بعدا خواهیم دید، با
این تداخل ها، پس از شناسایی آن ها، بهتر می توان
برخورد کرد
حتی ممکن است سبب شود تحلیلگر نحوی کاراتری به •
دست آید
(3تداخل ها )
11
o:مشکًالتی که تا این جا به آن ها برخوردیممشخص کردن دستگیره ها
)حذف تداخل ها )در صورت وجود
گرامرهای عملگر: دسته ای از گرامرها که
مشخص کردن دستگیره ها و مواجهه با تداخل ها در
آن ها ساده است
oسمت راست هیچ یک از گرامرهای عملگر :
نیست و دو غیرپایانه ی پشت سر εقواعد
:Mهم ندارد؛ مثًال
.مبهم اند Mاین گرامرها معموال
تحلیل نحوی تقدم عملگر (Operator Precedence)
12
E → E - E | E + E | E * E | E / E | E ^ E | - E | ( E ) | id
o ،ایده ی اولیه: بین هر دو پایانه ی گرامر
تعریف .=. و .< و >. رابطه هایی به شکل
می کنیمa <. b به این معنی است که a از b داردکم تری تقدم
a .=. b به این معنی است که تقدم a با b استبرابر
a .> b به این معنی است که a از b داردبیش تری تقدم
مثًالM فرض کنید که تعریف کنیم * .< + یا به طور مشابه •
* .< +
o ،در هر مرحله از تحلیل نحوی به این روش
دستگیره های مختلفی ممکن است وجود
داشته باشند. برای یافتن دستگیره ی صحیح،
از روابط >. و .< و .=. استفاده می کنیم
)دستگیره ای را انتخاب می کنیم که این
روابط را رعایت کند(
(2تحلیل نحوی تقدم عملگر )
13
o چه طور از روابط گفته شده استفاده
می کنیم؟
o هدف، مشخص کردن و جداسازی دستگیره ی
یک فرم جمله ای راست استدستگیره را مشخص می کند .< انتهای ، و>. ابتدا
و .=. در میان این دو ظاهر می شود
o از آن جا که در سمت راست هیچ یک از
قواعد، دو غیرپایانه ی پشت سر هم وجود
ندارد، شکل کلی فرم جمله ای به این
صورت خواهد بود:
ها غیرپایانه، یا رشته های βiکه در آن
(εتهی اند )
(3تحلیل نحوی تقدم عملگر )
14
β0 a1 β1 a2 β2 … an βn
o ،در هر مرحله از تحلیل نحوی، تحلیلگرa
یعنی باالترین پایانه ی روی انباره )باالترین
bعنصر، یا یکی مانده به باالترین عنصر( و
یعنی نشانه ی جاری را در نظر می گیرد: اگرa .=. b آن گاه ،bرا به انباره انتقال می دهد
اگرa <. b ،آن گاه ابتدا >. را روی انباره قرار می دهد ،
را به انباره منتقل می کندbو سپس
اگرa >. b آن گاه باالترین >. را در انباره می یابد و ،
عناصر بین آن )عًالمت اخیر(، و باالترین عنصر انباره
را )به همراه غیرپایانه ی زیر >. در صورت وجود( به
عنوان دستگیره در نظر می گیرد، و آن ها را از روی
انباره برمی دارد. سپس یک غیرپایانه نوعی )مثًال
عًالمت شروع گرامر( را روی انباره قرار می دهد
دستگیره حذف شده بایستی با سمت راست یکی از
قواعد به صورت ضعیف تطبیق کند )یعنی کافیست که
پایانه ها و فقط محل غیرپایانه ها تطبیق کند(
(4تحلیل نحوی تقدم عملگر )
15
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
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
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
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
oساخت توابع تقدم
(9تحلیل نحوی تقدم عملگر )
20
+ * id $
f 2 4 4 0
g 1 3 5 0
g id
f *
g +
f $
f id
g *
f +
g $
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
oمدیریت خطاهای انتقال-کاهشe1
زمانی که کل عبارت پیدا نشده است••idرا به ورودی اضافه می کنیم « را نمایش می دهیمعملوند پیدا نشدپیام »•
e2زمانی که عبارت با پرانتز بسته آغاز می شود•پرانتز بسته را از ورودی حذف می کنیم•« را نمایش یک پرانتز بسته اضافی دیده شدپیام »•
می دهیمe3
یا پرانتز بسته بیایدid یا پرانتز باز، بعد از idزمانی که •+ را به ورودی اضافه می کنیم•« را نمایش می دهیمعملگر پیدا نشدپیام »•
e4زمانی که عبارت با پرانتز باز پایان می یابد•پرانتز باز را از روی انباره برمی داریم•« را نمایش می دهیمپرانتز بسته پیدا نشدعبارت »•
(11تحلیل نحوی تقدم عملگر )
22
id ( ) $
id e3 e3 .> .>
( <. <. .=. e4
) e3 e3 .> .>
$ <. <. e2 e1
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
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
oمزایا و کاستی ها
پیاده سازی آسان
جدول تحلیل کوچک
قدرت بیان ضعیف )به این دلیل که دو غیرپایانه ی پشت
سر هم را مجاز
نمی داند(
دقت نه چندان خوب )بعضی از خطاهای نحوی به خاطر
محدودیت روی
غیرپایانه ها(
o روش »عملگر ساده« شکلی از روش
»تقدم عملگر« است که این کاستی ها را
ندارد
(14تحلیل نحوی تقدم عملگر )
25
+
+
-
-