1 / 12

طراحي كامپايلر

طراحي كامپايلر. گردآوري ، ترجمه و تنظيم : غلامرضا فهيمي كاشاني. تبديل عبارات با قاعده به DFA. مي توانيم يك عبارت با قاعده را بدون ايجاد NFA به DFA تبديل كنيم. در ابتدا به انتهاي عبارت باقاعده علامت # را اضافه مي كنيم داريم : r  (r)#

noma
Download Presentation

طراحي كامپايلر

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. طراحي كامپايلر گردآوري ، ترجمه و تنظيم : غلامرضا فهيمي كاشاني طراحي كامپايلر

  2. تبديل عبارات با قاعده به DFA • مي توانيم يك عبارت با قاعده را بدون ايجاد NFA به DFA تبديل كنيم. • در ابتدا به انتهاي عبارت باقاعده علامت # را اضافه مي كنيم داريم : r  (r)# • سپس درخت تجزيه و تركيب عبارت با قاعده مورد نظر را ترسيم مي نمائيم • در درخت فوق تمامي نشانه هاي حروف الفبا، # و جاهاي خالي در محل برگ ها قرار مي گيرند. • تمامي نودهاي داخلي در درخت مربوط به عملگرها خواهد بود. • سپس تمامي برگ ها را شماره گذاري مي كنيم. • به مثال در اسلايد بعد توجه نمائيد. طراحي كامپايلر

  3.  # 4 * a 3 | a b 1 2 مثال : تبديل عبارت با قاعده به DFA (a|b) * a  (a|b) * a # عبارت با قاعده : • درخت ترسيم شده براي عبارت زير: • (a|b) * a # • هر كدام از جايگاه ها شماره گذاري شده اند • هر كدام از حروف ها در محل بر گ ها قرار دارند • نودهاي داخلي محل قرارگيري عملگرها مي باشد طراحي كامپايلر

  4. Followposتابع در ادامه بايستي تابع Followpos را براي محل منتسب به برگ ها محاسبه مي كنيم followpos(i) : مجموعه مكان هايي است كه بعد از مكان i قرار مي گيرند لازم به ذكر است كه اين تابع فقط براي محل برگ ها تعريف مي شود و براي نودهاي داخلي قابل تعريف نيست. . براي مثال : ( a | b) * a # 1 2 3 4 followpos(1) = {1,2,3} followpos(2) = {1,2,3} followpos(3) = {4} followpos(4) = {} محل قرارگيري حروف در عبارت سطوح مختلف درخت طراحي كامپايلر

  5. نحوه محاسبه توابعfirstpos, lastpos, nullable براي محاسبه تابع followpos نيازمند محاسبه توابع زير در درخت نحو مي باشيم : firstpos(n) -- مجموعه اولين حروف توليد شده بوسيله زير عبارت درمحل n • lastpos(n) -- • مجموعه آخرين حرف توليد شده بوسيله زير عبارت در محل n • nullable(n) -- • اين تابع در صورتيكه محل خالي عضوي از رشته توليد شده بوسيله زير عبارت در محل n باشد برابر true و در غير اينصورت مساوي false خواهد بود. طراحي كامپايلر

  6. طريقه محاسبه توابع firstpos, lastpos, nullable OR node CAT node STAR node طراحي كامپايلر

  7. n n C1 C2 C1 چگونه followposرا برآورد كنيم؟ followpos(i) = { firstpos(c2) } Cat-node براي محاسبه تابعfollowpos دو قانون زير را در نظر مي گيريم‌‌ : 1 – اگر سطح n يك cat-node باشد و دو انشعاب c1(چپ) و c2 (راست) داشته باشد و i محلي در مجموعه lastpos(c1)باشد تمامي اعضاي firstpos(c2)در تابع followpos(i) قرار خواهند گرفت. 2 – اگر سطح n يك star-node باشد وi محلي در مجموعه lastpos(n)باشد تمامي اعضاي firstpos(n)در تابع followpos(i) قرار خواهند گرفت. اگر توابع firstpos و lastpos براي هر نود درخت محاسبه شوند تابع followpos با يك پيمايش عمقي در درخت نحوي قابل محاسبه خواهد بود. ilastpos(c1) firstpos(c2) followpos(i) = { firstpos(n) } Star-node firstpos(n) ilastpos(n) طراحي كامپايلر

  8. {4} {1,2,3} {1,2,3} {3} {4} {4}  {1,2} {1,2} {3} {3}  # 4 {1,2} {1,2} * a 3 {1} {1} {2} {2} | a b 2 1 مثال ( a | b) * a # قرمزها– firstpos آبي ها – lastpos پس از محاسبه توابعfirstposو lastpos تابع followpos را به صورت زير محاسبه مي كنيم. followpos(1) = {1,2,3} followpos(2) = {1,2,3} followpos(3) = {4} followpos(4) = {} • پس از محاسبه followpos براي ايجاد DFA آماده مي شويم. • . طراحي كامپايلر

  9. الگوريتم تبديل (عبارت باقاعده به DFA) • درخت نحو عبارت (r)# را ايجاد مي كنيم. • توابع followpos, firstpos, lastpos, nullable را محاسبه مي كنيم . • تابع firstpos(root) را بعنوان يك حالت علامت نخورده از حالات DFA در نظر مي گيريم. • تا زماني كه حالت S از مجموعه حالت هاي DFA علامت نخورده است مراحل زير انجام مي پذيرد: • حالت S را علامت مي زنيم. • براي هر ورودي با علامت a • در صورتيكه s1…….sn مكان هاي موجود در S بوده و ليبل آن مكان ها a باشد. • S’ followpos(s1)  ...  followpos(sn) • move(S,a)  S’ • اگر S’ خالي نبوده و جزو حالتهاي DFA نيز نباشد آن را جزو حالت هاي علامت نخورده DFA قرار مي دهيم. • حالت شروع DFAfirstpos(root) مي باشد. • حالت پذيرش DFA تمامي حالت هايي است كه در آن مكان # وجود داشته باشد. طراحي كامپايلر

  10. 1 2 3 4 مثال -- ( a | b) * a # followpos(1)={1,2,3} followpos(2)={1,2,3} followpos(3)={4} followpos(4)={} S1=firstpos(root)={1,2,3}  mark S1 a: followpos(1)  followpos(3)={1,2,3,4}=S2 move(S1,a)=S2 b: followpos(2)={1,2,3}=S1 move(S1,b)=S1  mark S2 a: followpos(1)  followpos(3)={1,2,3,4}=S2 move(S2,a)=S2 b: followpos(2)={1,2,3}=S1 move(S2,b)=S1 حالت شروعS1 حالت پذيرش {S2} b a a S1 S2 b طراحي كامپايلر

  11. مثال -- ( a | ) b c* # 1 2 3 4 followpos(1)={2} followpos(2)={3,4} followpos(3)={3,4} followpos(4)={} S1=firstpos(root)={1,2}  mark S1 a: followpos(1)={2}=S2 move(S1,a)=S2 b: followpos(2)={3,4}=S3 move(S1,b)=S3  mark S2 b: followpos(2)={3,4}=S3 move(S2,b)=S3  mark S3 c: followpos(3)={3,4}=S3 move(S3,c)=S3 S1شروع حالت{S3}حالت پذيرش S2 a b S1 b c S3 طراحي كامپايلر

  12. پايان rezafahimi@yahoo.com طراحي كامپايلر

More Related