به نام خدا طراحی کامپایلرها 40-414 2
دورنمای تحلیلگر لغوی تحلیلگر نحوی نشانه ها تحلیلگر لغوی برنامهی مبدأ نشانه ی بعدی جدول عالیم پرسش مهم: وظیفه ی هر جعبه چیست فعال بر تحلیلگر لغوی و تحلیلگر نحوی تمرکز می کنیم 1
چرا تحلیل لغوی و نحوی را جدا کنیم سادگی طراحی بهبود کارایی کامپایلر رعایت اصول برنامه نویسی پیمانه ای 2
)1( نشانه الگو و Lexeme نشانه یک زوج است: نام نشانه و یک ویژگی اختیاری الگو شکلی را توصیف می کند که lexeme ممکن است در متن داشته باشند های یک نشانه lexeme توالی ای از نویسه ها در متن برنامه ی مبدأ است که با الگو مطابقت دارد 3
)2( Lexeme و الگو نشانه مثال: lexeme نمونهی غیررسمی توصیف نشانه if else نویسههای i و f نویسههای s l e و e if else!= <= >یا<یا=<یا=>یا==یا=! relatin D2 و scre pi 0 3.14159 و 6.02e23 Hell Wrld! حروفیکهبهدنبالآنها حرفیاعددبیاید هرعددثابت کهتوسط هرچیزیجز محصورشدهباشد id number literal 4
استفاده از میانگیر برای بهبود کارایی نشانه ی جاری E = M * C * * 2 شروع lexeme frward به جلو حرکت می کند تا یک انطباق با الگو را پیدا کند بلوک I/O if frward at end f first half then begin relad secnd half ; frward := frward + 1 end else if frward at end f secnd half then begin relad first half ; mve frward t beginning f first half end else frward := frward + 1 ; 5
الگوریتم: میانگیر با نگهبان شروع lexeme نشانه ی جاری E = M * C * * 2 frward := frward + 1; if frward is at ef then begin if frward at end f first half then begin relad secnd half ; frward := frward + 1 end بلوک I/O end else if frward at end f secnd half then begin relad first half ; mve frward t beginning f first half end else در میانگیر معرف پایان ورودی است*/ ef*/ terminate Lexical Analysis frward به جلو حرکت می کند تا یک انطباق با الگو را پیدا کند دومین ef یعنی چیزی از ورودی باقی نمانده 6
سلسله مراتب چامسکی αaβ αγβ 0 نامحدود LHS RHS 1 حساس به متن LHS = 1 2 یا RHS = 1 یا ab, A a A a Ba مستقل از متن منظم 2 3 7
)1( ها زبان روی عملیات عمل تعریف طور چه بنویسیم L M = { s s در L یا s در M } L M دوزبان اجتماع M و L LM = { st s در L و t در M } LM دوزبان الحاق M و L L* = i=0 L i )هیچبار یابیشترالحاق L ( i=1 L i L + = )یکبار یابیشترالحاق L ( *L کلین بستار زبان L L + مثبت بستار زبان L 8
عملیات روی زبان ها )2( مثال: L D = { A, B, C, D, 1, 2, 3 } LD L 2 = = { A1, A2, A3, B1, B2, B3, C1, C2, C3, D1, D2, D3 } { AA, AB, AC, AD, BA, BB, BC, BD, CA,, DD } L 4 = L 2 L 2 =? L* = } همهی رشتههای ممکن L به همراه ε { L + = L* - ε L (L D) =? L (L D)* =? L = { A, B, C, D } D = { 1, 2, 3 } 9
زبان ها و عبارات منظم یک عبارت منظم مجموعهای از قواعد یا روشهاست که برای ساختن رشتههایی )توالیای از نمادها( از یک الفبا مورد استفاده قرار میگیرد یک الفبا و یک عبارت منظم باشد L(r) زبانی است که r Σ اگر با قواعد r ساخته میشود 10
تقدم قواعدی برای تبیین عبارات منظم )1( اگر Σ را الفبایی ثابت و مشخص در نظر بگیریم: ε عبارت منظمی است که با } ε { مشخص میشود اگر a عضو Σ باشد a عبارت منظمی است که با } a { نمایش داده میشود.I فرض کنید r و s به ترتیب عبارات منظمی با زبانهای L(r) و L(s) باشد: L(r) L(s) عبارت منظمی است با زبان (r) (s) L(r) L(s) عبارت منظمی است با زبان (r) (s) (L(r))* عبارت منظمی است با زبان *(r) L(r) عبارت منظمی است با زبان r.ii.iii.iv این عملگرها همه از چپ شرکتپذیری دارند و پرانتزها با توجه به»تقدم«بین می روند از 11
قواعدی برای تبیین عبارات منظم )2( A B C D = L مثال: ( A B C D ) ( A B C D ) = L 2 ( A B C D )* = L* ( A B C D ) ( ( A B C D) ( 1, 2, 3 ) ) = L (L D) L = { A, B, C, D } D = { 1, 2, 3 } 12
خواص جبری عبارات منظم خاصیت توضیح خاصیتجابهجاییدارد خاصیتشرکتپذیریدارد r s = s r r ( s t ) = ( r s ) t ) t ( r s ) t = r ( s الحاقخاصیتجابهجاییدارد الحاقروی خاصیتپخشیدارد ε عنصرهمانیدرالحاقاست r ( s t ) = r s r t ( s t ) r = s r t r ε r = r r ε = r ارتباط*و ε r * = ( r ε ) * * r r * * = تعداددفعاتاعمال*تأثیریدرنتیجهندارد 13
تشخیص نشانه ها )1( چه طور می توانیم از آن چه تا اآلن یاد گرفته ایم برای توصیف الگوهای نشانه ها استفاده کنیم if then else if then else relp < <= > >= = <> id num letter ( letter digit ) * digit + (. digit + )? ( E ( + - )? digit + )? 14
تشخیص نشانه ها )2( ویژگی-مقدار عبارت منظم نشانه - - ws - if if - then then - else else id id اشارهگریبهیکسطرجدول num num اشارهگریبهیکسطرجدول GT relp > GE relp >= LT relp < LE relp <= EQ relp = NE relp <> هر نشانه شناسه ای یکتا دارد که رده ی lexeme را مشخص می کند 15
نمودارهای انتقال حالت )1( relp نمودار مربوط به تشخیص شروع 0 < 1 = > غیره 2 3 = > 5 6 return (relp, EQ) = 4 7 غیره 8 * * return (relp, LE) return (relp, NE) return (relp, LT) return (relp, GE) return (relp, GT) 16
نمودارهای انتقال حالت )2( نمودار مربوط به تشخیص id و کلمات کلیدی * غیره حرف 9 10 11 return (gettken(), InstallID()) حرفیارقم 17
نمودارهای انتقال حالت )3( نمودار مربوط به تشخیص num )بیعالمت ) رقم E رقم رقم 12 13. 14 رقم 15 E 16 +یا- 17 رقم غیره غیره رقم 18 * 20 * 21 غیره * 19 18
نمودارهای انتقال حالت )4( )whitespace( نمودار مربوط به تشخیص فضای خالی * غیره جداکننده 22 23 24 جداکننده 19
تولیدکننده ی تحلیلگر لغوی: LEX lex.1 کامپایلر لغوی )LEX( برنامهی مبدأ LEX lex.yy.c برنامهای بهزبان C lex.yy.c برنامهای بهزبان C کامپایلر C a.ut برنامهیقابل اجرای تحلیلگرلغوی a.ut توالی ای از نشانه ها برنامهیقابل اجرای تحلیلگرلغوی جریان ورودی 20
خطاهای لغوی بعضی خطاها را تحلیلگر لغوی نمی تواند کشف کند مثل: fi ( a == f (x) ) را بعضی ها اما می تواند مثل: d = 2r ; خطاهایی مثل خطای اخیر زمانی کشف میشوند بر توالی موجود نویسهها )در متن برنامهی مبدأ( که هیچ الگویی منطبق نباشد 21
اصالح خطا حالت وحشت: نویسههای متوالی تا رسیدن به یک نشانهی معتبر دور انداخته میشوند حذف یک نویسه از باقیماندهی ورودی درج نویسهی مفقود )مورد نیاز( در باقیماندهی ورودی جایگزینی یک نویسه با نویسهای دیگر جابهجایی دو نویسهی کنار هم روش فاصلهی کمینه 22