Transcript Document
به نام خدا
2
طراحی
کامپایلرها
40-414
ی
دورنمای تحلیلگر لغو
تحلیلگر
نحوی
نشانهها
تحلیلگر لغوی
نشانهی بعدی
جدول
عالیم
oپرسش مهم :وظیفهی هر جعبه چیست؟
1
ً
فعال بر تحلیلگر لغوی و تحلیلگر نحوی تمرکز میکنیم
برنامهی
مبدأ
چرا تحلیل لغوی و نحوی را جدا کنیم؟
oسادگی طراحی
oبهبود کارایی کامپایلر
oرعایت اصول برنامه نویس ی پیمانه ای
2
نشانه ،الگو ،و )1( Lexeme
oنشانه ،یک زوج است :نام نشانه ،و یک ویژگی اختیاری
oالگو ،شکلی را توصیف میکند که lexemeهای یک نشانه ممکن
است در متن داشته باشند
،lexeme oتوالیای از نویسهها در متن برنامهی مبدأ است که با الگو
مطابقت دارد
3
نشانه ،الگو ،و )2( Lexeme
oمثال:
4
نشانه
توصیف غیررسمی
نمونهی lexeme
if
نویسههای iو f
if
else
نویسههای ،s ،l ،eو e
else
relation
<یا >یا =>یا =<یا ==یا =!
=<!= ،
id
حروفی که به دنبال آنها
حرف یا عدد بیاید
،score ،piو D2
number
هر عدد ثابت
،0 ،3.14159و
6.02e23
literal
هر چیزی جز “ که توسط “
محصور شده باشد
”!“Hello World
استفاده از میانگیر برای بهبود کارایی
نشانهی جاری
E
=
M *
C * * 2
lexeme شروع
بلوک
I/O
forward
به جلو حرکت میکند تا یک
انطباق با الگو را پیدا کند
if forward at end of first half then
begin
reload second half ;
forward := forward + 1
end
else if forward at end of second half then
begin
reload first half ;
move forward to beginning of first half
end
else forward := forward + 1 ;
5
میانگیر با نگهبان:الگوریتم
lexeme شروع
E
=
M *
نشانهی جاری
C * * 2
forward := forward + 1;
if forward is at eof then
begin
if forward at end of first half
then
begin
reload second half ;
forward := forward + 1
بلوکend
else if forward at end of second
I/O half then
begin
reload first half ;
move forward to beginning
of first half
end
else /* معرف پایان ورودی است، در میانگیرeof*/
terminate Lexical Analysis
end
یعنی چیزی از ورودی باقی نماندهeof دومین
forward
به جلو
حرکت
میکند تا یک
انطباق با
الگو را پیدا
کند
6
سلسلهمراتب چامسکی
7
0
نامحدود
1
حساس به متن
||LHS|≤ |RHS
2
مستقل از متن
|LHS|= 1
3
منظم
αAβ → αγβ
2یا |RHS|= 1
یا A → a | aB,
A → a | Ba
عملیات روی زبانها ()1
8
عمل
چهطور
بنویسیم؟
تعریف
اجتماع دو زبان
LوM
LM
} Mدر sیا Lدر L M = { s | s
الحاق دو زبان L
وM
LM
} Mدر tو Lدر LM = { st | s
بستار کلین زبان
L
بستار مثبت
زبان L
*L
𝒊
∞ = *L
𝑳 𝟎=𝒊
(هیچ بار ،یا بیشتر الحاق )L
L+
𝒊
∞ = L+
𝑳
𝟏=𝒊
(یک بار ،یا بیشتر الحاق )L
)2( عملیات روی زبانها
: مثالo
LD
=
{ A, B, C, D, 1, 2, 3 }
LD
=
{ A1, A2, A3, B1, B2, B3, C1, C2, C3, D1, D2, D3 }
L2
=
{ AA, AB, AC, AD, BA, BB, BC, BD, CA, …, DD }
L4
=
L2L2
L*
=
} ε به همراهL { همهی رشتههای ممکن
L+
=
L*
= ?
- ε
L (L D)
= ?
L
L (L D)*
= ?
D =
=
{ A, B, C, D }
{ 1, 2, 3 }
9
زبانها و عبارات منظم
oیک عبارت منظم ،مجموعهای از قواعد یا روشهاست که برای ساختن
رشتههایی (توالیای از نمادها) از یک الفبا مورد استفاده قرار میگیرد
oاگر Σیک الفبا ،و rیک عبارت منظم باشد L(r) ،زبانی است که با
قواعد rساخته میشود
10
قواعدی برای تبیین عبارات منظم ()1
oاگر Σرا الفبایی ثابت و مشخص در نظر بگیریم:
εعبارت منظمی است که با } { εمشخص میشود
اگر aعضو Σباشد a ،عبارت منظمی است که با } { aنمایش داده میشود
فرض کنید rو sبه ترتیب عبارات منظمی با زبانهای ) L(rو ) L(sباشد:
تقدم
.I
) (r) | (sعبارت منظمی است با زبان )L(r) L(s
.II
) (r) (sعبارت منظمی است با زبان )L(r) L(s
(r)* .IIIعبارت منظمی است با زبان *))(L(r
r .IVعبارت منظمی است با زبان )L(r
این عملگرها همه از چپ شرکتپذیری دارند ،و پرانتزها با توجه به «تقدم» از بین
میروند
11
)2( قواعدی برای تبیین عبارات منظم
: مثالo
A|B|C|D
=
L
(A|B|C|D)(A|B|C|D)
=
L2
( A | B | C | D )*
=
L*
( A | B | C | D ) ( ( A | B | C | D) ( 1 , 2, 3 ) )
=
L (L D)
L
=
D =
{ A, B, C, D }
{ 1, 2, 3 }
12
خواص جبری عبارات منظم
خاصیت
توضیح
r|s=s|r
| خاصیت جابهجایی دارد
| خاصیت شرکتپذیری دارد
r|(s|t)=(r|s)|t
)(rs)t=r(st
r(s|t)=rs|rt
(s|t)r=sr|tr
13
الحاق خاصیت جابهجایی دارد
الحاق روی | خاصیت پخش ی دارد
εr=r
rε=r
عنصر همانی در الحاق است
ε
*)r*=(r|ε
ارتباط * و ε
*r**=r
تعداد دفعات اعمال * تأثیری در نتیجه
ندارد
تشخیص نشانهها ()1
oچهطور میتوانیم از آنچه تا اآلن یاد گرفتهایم برای توصیف الگ وهای
نشانهها استفاده کنیم؟
if
then
→ then
else
→ else
>< | = | => | > | =< | <
→ relop
* ) letter ( letter | digit
→ id
? ) digit + ( . digit + ) ? ( E ( + | - ) ? digit +
14
→ if
→ num
تشخیص نشانهها ()2
عبارت منظم
نشانه
ویژگی-مقدار
ws
-
-
if
if
-
then
then
-
else
else
-
id
id
اشارهگری به یک سطر جدول
num
num
اشارهگری به یک سطر جدو ل
>
relop
GT
=>
relop
GE
<
relop
LT
=<
relop
LE
=
relop
EQ
><
relop
NE
oهر نشانه ،شناسهای یکتا دارد که ردهی lexemeرا مشخص میکند
15
)1( نمودارهای انتقال حالت
relop
شر و
ع
0
<
1
نمودار مربوط به تشخیصo
=
>
غیره
=
2
return (relop, LE)
3
return (relop, NE)
4
5
>
*
return (relop, LT)
return (relop, EQ)
=
6
غیره
7
8
return (relop, GE)
*
return (relop, GT)
16
نمودارهای انتقال حالت ()2
oنمودار مربوط به تشخیص
))(return (getToken(), InstallID
*
idو کلمات کلیدی
11
غیره
10
حرف یا رقم
17
حرف
9
نمودارهای انتقال حالت ()3
numیعالمت)
(ب
oنمودار مربوط به تشخیص
E
رقم
17
+یا -
16
E
15
رقم
رقم
14
.
13
رقم
18
غیره
*
18
19
غیره
رقم
*
21
غیره
*
20
رقم
12
نمودارهای انتقال حالت ()4
oنمودار مربوط به تشخیص فضای خالی ()whitespace
*
24
غیره
23
جداکننده
19
جداکننده
22
یLEX :
تولیدکنندهی تحلیلگر لغو
lex.yy.c
برنامهای
به زبان C
کامپایلر
لغوی
()LEX
a.out
برنامهی قابل
اجرای
تحلیلگر لغوی
lex.1
برنامهی
مبدأ LEX
lex.yy.c
کامپایلر C
برنامهای
به زبان C
a.out
توالیای از
نشانهها
20
برنامهی قابل
اجرای
تحلیلگر لغوی
جریان
ورودی
ی
خطاهای لغو
oبعض ی خطاها را تحلیلگر لغوی نمیتواند کشف کند؛ مثل:
) )fi ( a == f (x
oاما بعض یها را میتواند؛ مثل:
; d = 2r
oخطاهایی مثل خطای اخیر زمانی کشف میشوند که هیچ الگویی بر توالی
موجود نویسهها (در متن برنامهی مبدأ) منطبق نباشد
21
اصالح خطا
oحالت وحشت :نویسههای متوالی تا رسیدن به یک نشانهی معتبر ،دور
انداخته میشوند
oحذف یک نویسه از باقیماندهی ورودی
oدرج نویسهی مفقود (مورد نیاز) در باقیماندهی ورودی
oجایگزینی یک نویسه با نویسهای دیگر
oجابهجایی دو نویسهی کنار هم
oروش فاصلهی کمینه
22